Initial commit: CHORUS Services marketing website
Complete Next.js website with Docker containerization: - Next.js 14 with TypeScript and Tailwind CSS - Responsive design with modern UI components - Hero section, features showcase, testimonials - FAQ section with comprehensive content - Contact forms and newsletter signup - Docker production build with Nginx - Health checks and monitoring support - SEO optimization and performance tuning Ready for integration as git submodule in main CHORUS project. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
427
app/globals.css
Normal file
427
app/globals.css
Normal file
@@ -0,0 +1,427 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/* Import SF Pro Text font from Apple */
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
|
||||
|
||||
/* CSS Variables for CHORUS theme */
|
||||
:root {
|
||||
--chorus-blue: #007aff;
|
||||
--chorus-green: #30d158;
|
||||
--chorus-charcoal: #1a1a1a;
|
||||
--chorus-charcoal-light: #2a2a2a;
|
||||
--chorus-charcoal-dark: #0f0f0f;
|
||||
|
||||
--text-primary: #ffffff;
|
||||
--text-secondary: #a8a8a8;
|
||||
--text-tertiary: #6d6d6d;
|
||||
|
||||
--border-color: #2a2a2a;
|
||||
--border-color-light: #3a3a3a;
|
||||
}
|
||||
|
||||
/* Base styles */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
scroll-padding-top: 80px; /* Account for fixed navigation */
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'SF Pro Text', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
background-color: var(--chorus-charcoal);
|
||||
color: var(--text-primary);
|
||||
line-height: 1.6;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* Remove focus outline and add custom focus styles */
|
||||
button:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* Custom focus ring */
|
||||
.focus-ring {
|
||||
@apply ring-2 ring-chorus-blue ring-opacity-50 ring-offset-2 ring-offset-chorus-charcoal;
|
||||
}
|
||||
|
||||
/* Scrollbar styling for webkit browsers */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: var(--chorus-charcoal);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: var(--chorus-charcoal-light);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--border-color-light);
|
||||
}
|
||||
|
||||
/* Selection styling */
|
||||
::selection {
|
||||
background-color: rgba(0, 122, 255, 0.3);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
background-color: rgba(0, 122, 255, 0.3);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
/* Typography enhancements */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 600;
|
||||
line-height: 1.2;
|
||||
letter-spacing: -0.025em;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.25rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Utility classes */
|
||||
.text-gradient {
|
||||
background: linear-gradient(135deg, var(--chorus-blue) 0%, var(--chorus-green) 100%);
|
||||
background-size: 200% 200%;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
animation: gradient-shift 5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes gradient-shift {
|
||||
0%, 100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Respect reduced motion preferences */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.text-gradient {
|
||||
animation: none;
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.bg-gradient-chorus {
|
||||
background: linear-gradient(135deg, var(--chorus-blue) 0%, var(--chorus-green) 100%);
|
||||
}
|
||||
|
||||
.glass-effect {
|
||||
background: rgba(26, 26, 26, 0.8);
|
||||
backdrop-filter: blur(12px);
|
||||
-webkit-backdrop-filter: blur(12px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.card-hover {
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.card-hover:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* Performance optimizations */
|
||||
.will-change-transform {
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.will-change-opacity {
|
||||
will-change: opacity;
|
||||
}
|
||||
|
||||
.gpu-accelerated {
|
||||
transform: translateZ(0);
|
||||
backface-visibility: hidden;
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
/* Animation utilities */
|
||||
.animate-float {
|
||||
animation: float 6s ease-in-out infinite;
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% {
|
||||
transform: translateY(0px);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
}
|
||||
|
||||
.animate-pulse-slow {
|
||||
animation: pulse-slow 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse-slow {
|
||||
0%, 100% {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
.animate-slide-up {
|
||||
animation: slideUp 0.6s ease-out forwards;
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Container utilities */
|
||||
.container-chorus {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
.container-chorus {
|
||||
padding: 0 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Button enhancements */
|
||||
.btn-primary {
|
||||
@apply bg-chorus-blue hover:bg-blue-600 text-white font-semibold py-3 px-6 rounded-lg transition-all duration-200 transform hover:scale-105 focus:ring-2 focus:ring-chorus-blue focus:ring-opacity-50;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
@apply bg-transparent border-2 border-chorus-blue text-chorus-blue hover:bg-chorus-blue hover:text-white font-semibold py-3 px-6 rounded-lg transition-all duration-200;
|
||||
}
|
||||
|
||||
/* Loading states */
|
||||
.loading-shimmer {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
rgba(255, 255, 255, 0.05),
|
||||
transparent
|
||||
);
|
||||
background-size: 200% 100%;
|
||||
animation: shimmer 1.5s infinite;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% {
|
||||
background-position: -200% 0;
|
||||
}
|
||||
100% {
|
||||
background-position: 200% 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Responsive text utilities */
|
||||
.text-responsive-xl {
|
||||
@apply text-2xl sm:text-3xl md:text-4xl lg:text-5xl xl:text-6xl;
|
||||
}
|
||||
|
||||
.text-responsive-lg {
|
||||
@apply text-lg sm:text-xl md:text-2xl lg:text-3xl;
|
||||
}
|
||||
|
||||
.text-responsive-md {
|
||||
@apply text-base sm:text-lg md:text-xl;
|
||||
}
|
||||
|
||||
/* Next.js specific overrides */
|
||||
#__next {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* Ant Design customizations */
|
||||
.ant-layout {
|
||||
background: var(--chorus-charcoal) !important;
|
||||
}
|
||||
|
||||
.ant-layout-header {
|
||||
background: var(--chorus-charcoal-dark) !important;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.ant-layout-footer {
|
||||
background: var(--chorus-charcoal-dark) !important;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
/* Custom component spacing */
|
||||
.section-padding {
|
||||
@apply py-16 sm:py-20 md:py-24 lg:py-32;
|
||||
}
|
||||
|
||||
.section-padding-sm {
|
||||
@apply py-8 sm:py-12 md:py-16;
|
||||
}
|
||||
|
||||
/* Hide scrollbar but keep functionality */
|
||||
.hide-scrollbar {
|
||||
-ms-overflow-style: none;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
|
||||
.hide-scrollbar::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Section Navigation Tooltip Styles */
|
||||
.section-nav-tooltip .ant-tooltip-content {
|
||||
background: rgba(26, 26, 26, 0.95) !important;
|
||||
backdrop-filter: blur(12px);
|
||||
}
|
||||
|
||||
.section-nav-tooltip .ant-tooltip-inner {
|
||||
background: transparent !important;
|
||||
color: #ffffff !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Technical Specs Page Styles */
|
||||
.glass-tabs .ant-tabs-nav {
|
||||
background: rgba(26, 26, 26, 0.8);
|
||||
backdrop-filter: blur(12px);
|
||||
-webkit-backdrop-filter: blur(12px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: 12px;
|
||||
padding: 8px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.glass-tabs .ant-tabs-tab {
|
||||
border-radius: 8px !important;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.glass-tabs .ant-tabs-tab-active {
|
||||
background: rgba(0, 122, 255, 0.2) !important;
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
.glass-tabs .ant-tabs-tab:hover {
|
||||
background: rgba(255, 255, 255, 0.05) !important;
|
||||
}
|
||||
|
||||
.glass-search .ant-input {
|
||||
background: rgba(26, 26, 26, 0.8) !important;
|
||||
backdrop-filter: blur(12px);
|
||||
-webkit-backdrop-filter: blur(12px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1) !important;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.glass-search .ant-input:focus {
|
||||
border-color: var(--chorus-blue) !important;
|
||||
box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
.glass-search .ant-input::placeholder {
|
||||
color: #6d6d6d !important;
|
||||
}
|
||||
|
||||
/* Table customizations for technical specs */
|
||||
.ant-table-thead > tr > th {
|
||||
background: rgba(42, 42, 42, 0.8) !important;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;
|
||||
color: #ffffff !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ant-table-tbody > tr > td {
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.05) !important;
|
||||
}
|
||||
|
||||
.ant-table-tbody > tr:hover > td {
|
||||
background: rgba(255, 255, 255, 0.02) !important;
|
||||
}
|
||||
|
||||
/* Progress bar customizations */
|
||||
.ant-progress-bg {
|
||||
background: linear-gradient(135deg, var(--chorus-blue) 0%, var(--chorus-green) 100%) !important;
|
||||
}
|
||||
|
||||
/* Collapse panel customizations */
|
||||
.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-header {
|
||||
background: rgba(42, 42, 42, 0.5);
|
||||
border-radius: 8px;
|
||||
margin-bottom: 8px;
|
||||
padding: 12px 16px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {
|
||||
background: rgba(26, 26, 26, 0.5);
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.05);
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
/* Badge customizations */
|
||||
.ant-badge-status-success {
|
||||
background-color: var(--chorus-green) !important;
|
||||
}
|
||||
|
||||
/* Tag customizations for technical specs */
|
||||
.ant-tag {
|
||||
border-radius: 6px;
|
||||
font-weight: 500;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
|
||||
/* Description list customizations */
|
||||
.ant-descriptions-bordered .ant-descriptions-row > th,
|
||||
.ant-descriptions-bordered .ant-descriptions-row > td {
|
||||
border-color: rgba(255, 255, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.ant-descriptions-bordered .ant-descriptions-row > th {
|
||||
background: rgba(42, 42, 42, 0.5) !important;
|
||||
color: #ffffff !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ant-descriptions-bordered .ant-descriptions-row > td {
|
||||
background: rgba(26, 26, 26, 0.3) !important;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
Reference in New Issue
Block a user