@tailwind base; @tailwind components; @tailwind utilities; /* ============================================================================= FONT LOADING - OPTIMIZED WEB FONTS ============================================================================= */ /* Self-hosted Exo fonts for display typography */ @font-face { font-family: 'Exo'; src: url('/fonts/Exo-Thin.ttf') format('truetype'); font-weight: 100; font-style: normal; font-display: swap; } @font-face { font-family: 'Exo'; src: url('/fonts/Exo-ExtraLight.ttf') format('truetype'); font-weight: 200; font-style: normal; font-display: swap; } @font-face { font-family: 'Exo'; src: url('/fonts/Exo-Light.ttf') format('truetype'); font-weight: 300; font-style: normal; font-display: swap; } @font-face { font-family: 'Exo'; src: url('/fonts/Exo-Regular.ttf') format('truetype'); font-weight: 400; font-style: normal; font-display: swap; } /* Import Google Fonts for fallbacks */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;600;700&display=swap'); /* ============================================================================= DESIGN TOKENS - CSS CUSTOM PROPERTIES ============================================================================= */ :root { /* Core Brand Colors */ --chorus-carbon-black: #000000; --chorus-carbon-dark: #0f0f0f; --chorus-carbon-medium: #1a1a1a; --chorus-carbon-light: #2a2a2a; --chorus-walnut-deep: #8B4513; --chorus-walnut-medium: #A0522D; --chorus-walnut-warm: #D2691E; --chorus-walnut-light: #DEB887; --chorus-aluminum-metallic: #C0C0C0; --chorus-aluminum-slate: #708090; --chorus-aluminum-light: #E5E5E5; --chorus-aluminum-subtle: #F8F9FA; --chorus-paper-natural: #F5F5DC; --chorus-paper-pure: #FFFEF7; --chorus-paper-aged: #F0E68C; --chorus-paper-cream: #FDF6E3; /* System Colors */ --chorus-orchestration-blue: #007AFF; --chorus-orchestration-deep: #0051D5; --chorus-orchestration-light: #4A90E2; --chorus-orchestration-pale: #E3F2FD; --chorus-harmony-green: #30D158; --chorus-harmony-forest: #228B22; --chorus-harmony-sage: #9CAF88; --chorus-harmony-mint: #F0FFF4; --chorus-resonance-amber: #FF9F0A; --chorus-resonance-golden: #FFD700; --chorus-resonance-copper: #B87333; --chorus-resonance-cream: #FFFAF0; --chorus-alert-coral: #FF453A; --chorus-alert-warm: #FF6B6B; --chorus-alert-rose: #E55B5B; --chorus-alert-blush: #FFF5F5; /* Semantic Colors (Dark Mode Default) */ --color-primary: var(--chorus-orchestration-blue); --color-secondary: var(--chorus-aluminum-slate); --color-success: var(--chorus-harmony-green); --color-warning: var(--chorus-resonance-amber); --color-error: var(--chorus-alert-coral); --color-info: var(--chorus-orchestration-light); /* Background Hierarchy */ --bg-primary: var(--chorus-carbon-black); --bg-secondary: var(--chorus-carbon-medium); --bg-tertiary: var(--chorus-carbon-light); --bg-elevated: var(--chorus-carbon-dark); /* Text Hierarchy */ --text-primary: #F2F2F7; --text-secondary: #A1A1A6; --text-tertiary: #6D6D73; --text-disabled: #48484A; --text-inverse: var(--chorus-carbon-black); /* Interactive Colors */ --interactive-primary: var(--chorus-orchestration-blue); --interactive-primary-hover: var(--chorus-orchestration-deep); --interactive-secondary: var(--chorus-aluminum-metallic); --interactive-secondary-hover: var(--chorus-aluminum-slate); /* Borders */ --border-primary: #48484A; --border-secondary: #2a2a2a; --border-accent: var(--chorus-orchestration-blue); /* Typography Scale */ --font-display: 'Exo', -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', sans-serif; --font-interface: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', 'Roboto', sans-serif; --font-body: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; /* Responsive Font Sizes */ --text-hero: clamp(48px, 8vw, 84px); --text-display-1: clamp(32px, 5vw, 48px); --text-display-2: clamp(24px, 4vw, 36px); --text-body-large: 18px; --text-body: 16px; --text-body-small: 14px; --text-interface: 16px; --text-interface-small: 14px; --text-code: 14px; /* Line Heights */ --leading-tight: 1.0; --leading-snug: 1.1; --leading-normal: 1.2; --leading-relaxed: 1.4; --leading-loose: 1.5; --leading-reading: 1.6; /* Letter Spacing */ --tracking-tight: -0.02em; --tracking-snug: -0.015em; --tracking-normal: 0; --tracking-wide: 0.005em; --tracking-wider: 0.01em; /* Spacing Scale */ --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 16px; --space-xl: 24px; --space-2xl: 32px; --space-3xl: 48px; --space-4xl: 64px; --space-5xl: 96px; --space-6xl: 128px; /* Border Radius */ --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; --radius-2xl: 24px; --radius-button: 8px; --radius-card: 12px; --radius-input: 8px; --radius-modal: 16px; /* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.15); --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.25); --shadow-2xl: 0 25px 50px rgba(0, 0, 0, 0.35); --shadow-button: 0 2px 8px rgba(0, 122, 255, 0.2); --shadow-button-hover: 0 4px 12px rgba(0, 122, 255, 0.3); --shadow-card: 0 4px 20px rgba(0, 0, 0, 0.25); --shadow-card-hover: 0 8px 30px rgba(0, 0, 0, 0.35); --shadow-focus: 0 0 0 3px rgba(0, 122, 255, 0.2); /* Motion */ --duration-fast: 150ms; --duration-normal: 250ms; --duration-slow: 350ms; --duration-slower: 500ms; --easing-linear: linear; --easing-ease: ease; --easing-ease-in: cubic-bezier(0.4, 0, 1, 1); --easing-ease-out: cubic-bezier(0, 0, 0.2, 1); --easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --easing-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); } /* 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: var(--font-body); font-size: var(--text-body); background-color: var(--bg-primary); color: var(--text-primary); line-height: var(--leading-reading); -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 SYSTEM ============================================================================= */ /* Base typography settings */ h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); font-weight: 600; line-height: var(--leading-normal); letter-spacing: var(--tracking-snug); margin: 0; } /* Hero Display Typography - Exo Thin for maximum impact */ .text-hero { font-family: var(--font-display); font-size: var(--text-hero); font-weight: 100; line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); } /* Display Typography Hierarchy */ .text-display-1, h1 { font-family: var(--font-display); font-size: var(--text-display-1); font-weight: 200; line-height: var(--leading-snug); letter-spacing: var(--tracking-snug); } .text-display-2, h2 { font-family: var(--font-display); font-size: var(--text-display-2); font-weight: 300; line-height: var(--leading-normal); letter-spacing: var(--tracking-snug); } /* Interface Typography - SF Pro for UI elements */ .text-interface { font-family: var(--font-interface); font-size: var(--text-interface); font-weight: 500; line-height: var(--leading-normal); letter-spacing: var(--tracking-wide); } .text-interface-small { font-family: var(--font-interface); font-size: var(--text-interface-small); font-weight: 500; line-height: var(--leading-normal); letter-spacing: var(--tracking-wider); } /* Body Typography - Roboto for readability */ .text-body-large { font-family: var(--font-body); font-size: var(--text-body-large); font-weight: 400; line-height: var(--leading-reading); letter-spacing: var(--tracking-normal); } .text-body, p { font-family: var(--font-body); font-size: var(--text-body); font-weight: 400; line-height: var(--leading-loose); letter-spacing: var(--tracking-normal); } .text-body-small { font-family: var(--font-body); font-size: var(--text-body-small); font-weight: 400; line-height: var(--leading-relaxed); letter-spacing: var(--tracking-wide); } /* Technical Typography - Monospace for code */ .text-code, code, pre { font-family: var(--font-mono); font-size: var(--text-code); line-height: var(--leading-relaxed); letter-spacing: var(--tracking-normal); } /* Button Typography */ .text-button { font-family: var(--font-body); font-weight: 600; line-height: var(--leading-tight); letter-spacing: var(--tracking-wider); } /* Semantic text colors */ .text-primary { color: var(--text-primary); } .text-secondary { color: var(--text-secondary); } .text-tertiary { color: var(--text-tertiary); } .text-disabled { color: var(--text-disabled); } .text-inverse { color: var(--text-inverse); } /* 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 SYSTEM ============================================================================= */ .btn-primary { font-family: var(--font-body); font-weight: 600; font-size: var(--text-interface); line-height: var(--leading-tight); letter-spacing: var(--tracking-wider); background-color: var(--interactive-primary); color: #ffffff; border: none; border-radius: var(--radius-button); padding: var(--space-md) var(--space-xl); box-shadow: var(--shadow-button); transition: all var(--duration-normal) var(--easing-ease-out); cursor: pointer; } .btn-primary:hover { background-color: var(--interactive-primary-hover); box-shadow: var(--shadow-button-hover); transform: translateY(-2px); } .btn-primary:focus { outline: none; box-shadow: var(--shadow-focus); } .btn-primary:active { transform: translateY(0); box-shadow: var(--shadow-button); } .btn-secondary { font-family: var(--font-body); font-weight: 600; font-size: var(--text-interface); line-height: var(--leading-tight); letter-spacing: var(--tracking-wider); background-color: transparent; color: var(--interactive-primary); border: 2px solid var(--interactive-primary); border-radius: var(--radius-button); padding: calc(var(--space-md) - 2px) calc(var(--space-xl) - 2px); transition: all var(--duration-normal) var(--easing-ease-out); cursor: pointer; } .btn-secondary:hover { background-color: var(--interactive-primary); color: #ffffff; transform: translateY(-2px); box-shadow: var(--shadow-button); } .btn-secondary:focus { outline: none; box-shadow: var(--shadow-focus); } .btn-secondary:active { transform: translateY(0); } .btn-tertiary { font-family: var(--font-body); font-weight: 500; font-size: var(--text-interface); line-height: var(--leading-tight); letter-spacing: var(--tracking-wider); background-color: var(--interactive-secondary); color: var(--text-inverse); border: none; border-radius: var(--radius-button); padding: var(--space-md) var(--space-xl); transition: all var(--duration-normal) var(--easing-ease-out); cursor: pointer; } .btn-tertiary:hover { background-color: var(--interactive-secondary-hover); transform: translateY(-2px); box-shadow: var(--shadow-md); } .btn-ghost { font-family: var(--font-interface); font-weight: 500; font-size: var(--text-interface); line-height: var(--leading-tight); letter-spacing: var(--tracking-wider); background-color: transparent; color: var(--text-secondary); border: 1px solid var(--border-secondary); border-radius: var(--radius-button); padding: var(--space-md) var(--space-xl); transition: all var(--duration-normal) var(--easing-ease-out); cursor: pointer; } .btn-ghost:hover { color: var(--text-primary); border-color: var(--border-primary); background-color: var(--bg-tertiary); } /* 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; }