@import 'tailwindcss'; @plugin '@tailwindcss/forms'; @plugin '@tailwindcss/typography'; button, [type='button'], [type='submit'], [type='reset'], a, [role='button'], summary { cursor: pointer; } button:disabled, [type='button']:disabled, [type='submit']:disabled, [type='reset']:disabled, [role='button'][aria-disabled='true'], a[aria-disabled='true'] { cursor: not-allowed; } /* ============================================ DESIGN SYSTEM TOKENS ============================================ */ /* Performance-optimized blur and effects */ :root[data-performance='medium'] { --perf-blur-high: 22px; --perf-blur-medium: 18px; --perf-blur-low: 14px; --perf-saturate: 125%; } :root[data-performance='low'] { --perf-blur-high: 0px; --perf-blur-medium: 0px; --perf-blur-low: 0px; --perf-saturate: 100%; } :root[data-performance='low'] * { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; } :root[data-performance='low'] .glass-panel, :root[data-performance='low'] .glass-toolbar, :root[data-performance='low'] .settings-menu, :root[data-performance='low'] .toolbar-button, :root[data-performance='low'] .glass-option, :root[data-performance='low'] .glass-action, :root[data-performance='low'] .glass-option__chip, :root[data-performance='low'] .glass-panel__footer, :root[data-performance='low'] .navigation-overlay, :root[data-performance='low'] .navigation-overlay__progress { background-color: rgba(15, 23, 42, 0.92) !important; border-color: rgba(148, 163, 184, 0.2) !important; box-shadow: none !important; } :root[data-performance='low'] .toolbar-button, :root[data-performance='low'] .glass-option, :root[data-performance='low'] .glass-action { transition: none; } :root:not([data-performance='medium']):not([data-performance='low']) { --perf-blur-high: 32px; --perf-blur-medium: 28px; --perf-blur-low: 24px; --perf-saturate: 160%; } /* Enhanced Color Palette */ :root { /* Primary Blues */ --color-primary-50: #eff6ff; --color-primary-100: #dbeafe; --color-primary-200: #bfdbfe; --color-primary-300: #93c5fd; --color-primary-400: #60a5fa; --color-primary-500: #3b82f6; --color-primary-600: #2563eb; --color-primary-700: #1d4ed8; --color-primary-800: #1e40af; --color-primary-900: #1e3a8a; /* Accent Purples */ --color-accent-400: #a78bfa; --color-accent-500: #8b5cf6; --color-accent-600: #7c3aed; /* Neutrals (Slate) */ --color-neutral-50: #f8fafc; --color-neutral-100: #f1f5f9; --color-neutral-200: #e2e8f0; --color-neutral-300: #cbd5e1; --color-neutral-400: #94a3b8; --color-neutral-500: #64748b; --color-neutral-600: #475569; --color-neutral-700: #334155; --color-neutral-800: #1e293b; --color-neutral-900: #0f172a; --color-neutral-950: #020617; /* Semantic Colors */ --color-success-500: #22c55e; --color-warning-500: #f59e0b; --color-error-500: #ef4444; /* Spacing Scale */ --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem; /* Border Radius */ --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --radius-2xl: 1.25rem; --radius-full: 9999px; /* Shadows */ --shadow-glow-sm: 0 0 10px rgba(59, 130, 246, 0.15); --shadow-glow-md: 0 0 20px rgba(59, 130, 246, 0.2); --shadow-glow-lg: 0 0 40px rgba(59, 130, 246, 0.25); /* Transitions */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-spring: 500ms cubic-bezier(0.34, 1.56, 0.64, 1); } /* Gradient Definitions */ .gradient-primary { background: linear-gradient(135deg, var(--color-primary-500) 0%, var(--color-accent-500) 100%); } .gradient-text-primary { background: linear-gradient(135deg, var(--color-primary-400) 0%, var(--color-accent-400) 100%); -webkit-background-clip: text; background-clip: text; color: transparent; } .gradient-text-hero { background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%); background-size: 200% 200%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: gradient-shift 8s ease infinite; } @keyframes gradient-shift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } /* Glass Effect Utilities */ .glass-subtle { background: rgba(15, 23, 42, 0.4); backdrop-filter: blur(var(--perf-blur-low, 24px)) saturate(var(--perf-saturate, 160%)); -webkit-backdrop-filter: blur(var(--perf-blur-low, 24px)) saturate(var(--perf-saturate, 160%)); border: 1px solid rgba(148, 163, 184, 0.12); } .glass-medium { background: rgba(15, 23, 42, 0.55); backdrop-filter: blur(var(--perf-blur-medium, 28px)) saturate(var(--perf-saturate, 160%)); -webkit-backdrop-filter: blur(var(--perf-blur-medium, 28px)) saturate(var(--perf-saturate, 160%)); border: 1px solid rgba(148, 163, 184, 0.15); } .glass-strong { background: rgba(15, 23, 42, 0.7); backdrop-filter: blur(var(--perf-blur-high, 32px)) saturate(var(--perf-saturate, 160%)); -webkit-backdrop-filter: blur(var(--perf-blur-high, 32px)) saturate(var(--perf-saturate, 160%)); border: 1px solid rgba(148, 163, 184, 0.18); } /* Hover Lift Effect */ .hover-lift { transition: transform var(--transition-base), box-shadow var(--transition-base); } .hover-lift:hover { transform: translateY(-2px); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); } /* Glow on Focus/Hover */ .glow-on-hover { transition: box-shadow var(--transition-base); } .glow-on-hover:hover { box-shadow: var(--shadow-glow-md); } /* Card Styles */ .card-interactive { transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-slow); } .card-interactive:hover { transform: translateY(-2px) scale(1.01); box-shadow: 0 20px 50px rgba(2, 6, 23, 0.4), var(--shadow-glow-sm); border-color: rgba(148, 163, 184, 0.25); } /* ============================================ MOBILE PERFORMANCE OPTIMIZATIONS ============================================ */ /* Mobile-specific blur reduction (major GPU savings) */ @media (max-width: 768px) { :root:not([data-performance='low']) { --perf-blur-high: 16px; --perf-blur-medium: 12px; --perf-blur-low: 8px; --perf-saturate: 130%; } :root[data-performance='medium'] { --perf-blur-high: 12px; --perf-blur-medium: 8px; --perf-blur-low: 6px; --perf-saturate: 120%; } } /* Touch device optimizations */ @media (pointer: coarse) { /* Disable hover effects that cause sticky states on touch */ .hover-lift:hover { transform: none; } /* Active state for touch feedback */ .hover-lift:active { transform: scale(0.98); } .card-interactive:hover { transform: none; box-shadow: none; } .card-interactive:active { transform: scale(0.99); background: rgba(148, 163, 184, 0.08); } } /* GPU acceleration for animated elements */ .gpu-accelerated { transform: translateZ(0); will-change: transform; backface-visibility: hidden; } /* CSS Containment for performance */ .contain-layout { contain: layout; } .contain-paint { contain: paint; } .contain-strict { contain: strict; } .contain-content { contain: content; } /* Off-screen content optimization */ .content-visibility-auto { content-visibility: auto; contain-intrinsic-size: auto 300px; } /* ============================================ TOUCH-FRIENDLY DEFAULTS ============================================ */ /* Minimum touch target size (44px as per Apple/Google guidelines) */ .touch-target { min-height: 44px; min-width: 44px; } .touch-target-lg { min-height: 48px; min-width: 48px; } /* Remove tap highlight on mobile */ * { -webkit-tap-highlight-color: transparent; } /* Safe area padding for notched devices */ .safe-area-top { padding-top: env(safe-area-inset-top, 0); } .safe-area-bottom { padding-bottom: env(safe-area-inset-bottom, 0); } .safe-area-left { padding-left: env(safe-area-inset-left, 0); } .safe-area-right { padding-right: env(safe-area-inset-right, 0); } .safe-area-x { padding-left: env(safe-area-inset-left, 0); padding-right: env(safe-area-inset-right, 0); } .safe-area-y { padding-top: env(safe-area-inset-top, 0); padding-bottom: env(safe-area-inset-bottom, 0); } /* ============================================ REDUCED MOTION PREFERENCES ============================================ */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .gradient-text-hero { animation: none; background-size: 100% 100%; } } /* ============================================ EFFICIENT MOBILE ANIMATIONS ============================================ */ /* Simple fade for mobile (no transforms = cheaper) */ @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes fade-out { from { opacity: 1; } to { opacity: 0; } } /* Slide animations using transform (GPU-accelerated) */ @keyframes slide-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes slide-down { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* Pulse for loading states */ @keyframes pulse-subtle { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } } .animate-pulse-subtle { animation: pulse-subtle 2s ease-in-out infinite; } /* ============================================ SCROLLBAR STYLING ============================================ */ /* Custom scrollbar for webkit browsers */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: rgba(15, 23, 42, 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: rgba(148, 163, 184, 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(148, 163, 184, 0.5); } /* Firefox scrollbar */ * { scrollbar-width: thin; scrollbar-color: rgba(148, 163, 184, 0.3) rgba(15, 23, 42, 0.3); } /* figtree-regular - latin_latin-ext */ @font-face { font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ font-family: 'Figtree'; font-style: normal; font-weight: 400; src: url('/fonts/figtree-v9-latin_latin-ext-regular.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ url('/fonts/figtree-v9-latin_latin-ext-regular.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */ } /* figtree-italic - latin_latin-ext */ @font-face { font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ font-family: 'Figtree'; font-style: italic; font-weight: 400; src: url('/fonts/figtree-v9-latin_latin-ext-italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ url('/fonts/figtree-v9-latin_latin-ext-italic.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */ } /* figtree-700 - latin_latin-ext */ @font-face { font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ font-family: 'Figtree'; font-style: normal; font-weight: 700; src: url('/fonts/figtree-v9-latin_latin-ext-700.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ url('/fonts/figtree-v9-latin_latin-ext-700.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */ } /* figtree-700italic - latin_latin-ext */ @font-face { font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ font-family: 'Figtree'; font-style: italic; font-weight: 700; src: url('/fonts/figtree-v9-latin_latin-ext-700italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ url('/fonts/figtree-v9-latin_latin-ext-700italic.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */ }