@tailwind base; @tailwind components; @tailwind utilities; @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap'); :root { --bg-void: #04040A; --bg-surface-0: #080812; --bg-surface-1: #0D0D1A; --bg-surface-2: #111122; --bg-surface-3: #151528; --accent-cyan: #00F5D4; --accent-purple: #8B5CF6; --accent-amber: #F59E0B; --accent-cyan-10: rgba(0, 245, 212, 0.10); --accent-cyan-20: rgba(0, 245, 212, 0.20); --accent-cyan-30: rgba(0, 245, 212, 0.30); --accent-purple-10: rgba(139, 92, 246, 0.10); --accent-purple-20: rgba(139, 92, 246, 0.20); --accent-amber-10: rgba(245, 158, 11, 0.10); --accent-amber-20: rgba(245, 158, 11, 0.20); --text-primary: #F0F0FF; --text-secondary: #8890AA; --text-muted: #4A4F6A; --glass-bg: rgba(13, 13, 26, 0.55); --glass-bg-hover: rgba(17, 17, 34, 0.70); --glass-border: rgba(100, 110, 180, 0.12); --glass-border-hover: rgba(100, 110, 180, 0.22); --glass-blur: 20px; --glow-cyan: rgba(0, 245, 212, 0.18); --glow-purple: rgba(139, 92, 246, 0.18); --glow-amber: rgba(245, 158, 11, 0.18); --error: #EF4444; --error-dim: rgba(239, 68, 68, 0.15); --transition-fast: 150ms cubic-bezier(0.25, 0.1, 0.25, 1); --transition-default: 250ms cubic-bezier(0.25, 0.1, 0.25, 1); --transition-slow: 400ms cubic-bezier(0.25, 1, 0.5, 1); } @layer base { html { scroll-behavior: smooth; text-rendering: optimizeLegibility; -webkit-text-size-adjust: 100%; } body { background-color: var(--bg-void); color: var(--text-primary); font-family: 'Inter', system-ui, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; } h1, h2, h3, h4, h5, h6 { font-family: 'Space Grotesk', sans-serif; font-weight: 600; letter-spacing: -0.02em; color: var(--text-primary); } input, textarea, select { background-color: var(--bg-surface-1); color: var(--text-primary); border-color: var(--glass-border); } input::placeholder, textarea::placeholder { color: var(--text-muted); opacity: 0.7; } code, pre, kbd, samp { font-family: 'JetBrains Mono', monospace; } ::-webkit-scrollbar { width: 4px; height: 4px; } ::-webkit-scrollbar-track { background: var(--bg-surface-0); } ::-webkit-scrollbar-thumb { background: var(--glass-border); border-radius: 2px; transition: background var(--transition-default); } ::-webkit-scrollbar-thumb:hover { background: var(--accent-cyan-30); } ::selection { background: var(--accent-cyan-20); color: var(--text-primary); } :focus-visible { outline: 1.5px solid var(--accent-cyan); outline-offset: 3px; border-radius: 4px; } } @layer components { .glass { background: var(--glass-bg); border: 1px solid var(--glass-border); backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); transition: background var(--transition-default), border-color var(--transition-default), box-shadow var(--transition-default); } .glass:hover { background: var(--glass-bg-hover); border-color: var(--glass-border-hover); } .glass-card { background: var(--glass-bg); border: 1px solid var(--glass-border); backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); border-radius: 1rem; transition: background var(--transition-default), border-color var(--transition-default), box-shadow var(--transition-slow), transform var(--transition-slow); } .glass-card:hover { background: var(--glass-bg-hover); border-color: var(--glass-border-hover); box-shadow: 0 8px 40px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.05); } .glass-panel { background: rgba(8, 8, 18, 0.75); border: 1px solid var(--glass-border); backdrop-filter: blur(32px) saturate(180%); -webkit-backdrop-filter: blur(32px) saturate(180%); } .text-gradient { background: linear-gradient(135deg, var(--accent-cyan) 0%, var(--accent-purple) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .text-gradient-warm { background: linear-gradient(135deg, var(--accent-amber) 0%, var(--accent-cyan) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .glow-cyan { box-shadow: 0 0 20px var(--glow-cyan), 0 0 60px rgba(0, 245, 212, 0.06); } .glow-purple { box-shadow: 0 0 20px var(--glow-purple), 0 0 60px rgba(139, 92, 246, 0.06); } .glow-amber { box-shadow: 0 0 20px var(--glow-amber), 0 0 40px rgba(245, 158, 11, 0.05); } .text-glow-cyan { text-shadow: 0 0 16px var(--glow-cyan); } .text-glow-purple { text-shadow: 0 0 16px var(--glow-purple); } .btn-primary { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.75rem; border-radius: 9999px; background: var(--accent-cyan); color: var(--bg-void); font-family: 'Space Grotesk', sans-serif; font-weight: 600; font-size: 0.875rem; letter-spacing: 0.01em; transition: background var(--transition-fast), box-shadow var(--transition-default), transform var(--transition-fast); box-shadow: 0 0 20px var(--glow-cyan); } .btn-primary:hover { background: #00dbbe; transform: translateY(-1px); box-shadow: 0 0 30px var(--accent-cyan-30), 0 4px 20px rgba(0, 0, 0, 0.4); } .btn-primary:active { transform: translateY(0); } .btn-ghost { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.5rem; border-radius: 9999px; border: 1px solid var(--glass-border); color: var(--text-secondary); font-size: 0.875rem; transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast); } .btn-ghost:hover { border-color: var(--accent-cyan-30); color: var(--accent-cyan); background: var(--accent-cyan-10); } .input-glass { width: 100%; padding: 0.625rem 0.875rem; background: var(--bg-surface-1); border: 1px solid var(--glass-border); border-radius: 0.625rem; color: var(--text-primary); font-family: 'Inter', sans-serif; font-size: 0.875rem; transition: border-color var(--transition-fast), box-shadow var(--transition-fast); outline: none; } .input-glass::placeholder { color: var(--text-muted); } .input-glass:focus { border-color: var(--accent-cyan-30); box-shadow: 0 0 0 3px var(--accent-cyan-10); } .nav-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 0.75rem; border-radius: 0.75rem; color: var(--text-muted); font-size: 0.875rem; font-weight: 500; transition: color var(--transition-fast), background var(--transition-fast); position: relative; } .nav-item:hover { color: var(--text-primary); background: var(--glass-bg); } .nav-item.active { color: var(--accent-cyan); background: var(--accent-cyan-10); } .badge { display: inline-flex; align-items: center; padding: 0.2rem 0.6rem; border-radius: 9999px; font-size: 0.65rem; font-family: 'JetBrains Mono', monospace; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; } .badge-cyan { background: var(--accent-cyan-10); border: 1px solid var(--accent-cyan-20); color: var(--accent-cyan); } .badge-purple { background: var(--accent-purple-10); border: 1px solid var(--accent-purple-20); color: var(--accent-purple); } .divider { height: 1px; background: linear-gradient(90deg, transparent, var(--glass-border), transparent); } } /* ── Legacy Tailwind class overrides ──────────────────────────────────── */ .bg-white { background-color: var(--bg-surface-1) !important; } .bg-gray-50, .bg-gray-100 { background-color: var(--bg-surface-0) !important; } .bg-gray-200 { background-color: var(--bg-surface-2) !important; } .text-gray-900, .text-gray-800 { color: var(--text-primary) !important; } .text-gray-700 { color: var(--text-secondary) !important; } .text-gray-600, .text-gray-500 { color: var(--text-muted) !important; } .text-gray-400, .text-gray-300 { color: var(--text-muted) !important; } .text-gray-200 { color: var(--text-muted) !important; } .border-gray-200, .border-gray-100, .border-gray-300 { border-color: var(--glass-border) !important; } .divide-gray-100 > * + *, .divide-gray-200 > * + * { border-color: var(--glass-border) !important; } .hover\:bg-gray-50:hover, .hover\:bg-gray-100:hover { background-color: var(--bg-surface-1) !important; } .hover\:bg-gray-200:hover { background-color: var(--bg-surface-2) !important; } .hover\:text-gray-900:hover { color: var(--text-primary) !important; } .hover\:text-gray-700:hover { color: var(--text-secondary) !important; } .hover\:border-gray-300:hover { border-color: var(--glass-border) !important; } .bg-teal-50 { background-color: var(--accent-cyan-10) !important; } .bg-teal-100 { background-color: rgba(0, 245, 212, 0.12) !important; } .bg-teal-200 { background-color: var(--accent-cyan-20) !important; } .border-teal-200 { border-color: var(--accent-cyan-20) !important; } .border-teal-300, .hover\:border-teal-300:hover { border-color: var(--accent-cyan-30) !important; } .text-teal-600 { color: var(--accent-cyan) !important; } .text-teal-700, .text-teal-800 { color: var(--accent-cyan) !important; } .hover\:text-teal-700:hover, .hover\:text-teal-800:hover { color: var(--accent-cyan) !important; } .hover\:bg-teal-50:hover { background-color: var(--accent-cyan-10) !important; } .bg-teal-500 { background-color: var(--accent-cyan) !important; } .bg-teal-600 { background-color: var(--accent-cyan) !important; } .hover\:bg-teal-700:hover { background-color: var(--accent-cyan) !important; } .bg-red-50 { background-color: rgba(248, 113, 113, 0.1) !important; } .bg-red-100 { background-color: rgba(248, 113, 113, 0.12) !important; } .text-red-500, .text-red-600, .text-red-700, .text-red-800, .text-red-900 { color: #F87171 !important; } .border-red-200 { border-color: rgba(248, 113, 113, 0.2) !important; } .bg-amber-50 { background-color: rgba(245, 158, 11, 0.1) !important; } .text-amber-500, .text-amber-600, .text-amber-700, .text-amber-800, .text-amber-900 { color: #FBBF24 !important; } .border-amber-200 { border-color: rgba(251, 191, 36, 0.2) !important; } .hover\:bg-amber-100:hover { background-color: rgba(245, 158, 11, 0.15) !important; } .bg-blue-50 { background-color: rgba(96, 165, 250, 0.1) !important; } .bg-blue-100 { background-color: rgba(96, 165, 250, 0.12) !important; } .text-blue-600 { color: #60A5FA !important; } .text-blue-700, .text-blue-800 { color: #60A5FA !important; } .hover\:bg-blue-100:hover { background-color: rgba(96, 165, 250, 0.15) !important; } .bg-purple-50 { background-color: rgba(167, 139, 250, 0.08) !important; } .text-purple-600 { color: #A78BFA !important; } .focus\:border-teal-500:focus { border-color: var(--accent-cyan) !important; } .focus\:ring-teal-200 { --tw-ring-color: var(--accent-cyan-20) !important; } .shadow-sm { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) !important; } .shadow-md, .shadow-xl { box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5) !important; } .from-teal-50 { --tw-gradient-from: var(--bg-surface-1) !important; } .to-teal-50 { --tw-gradient-to: var(--bg-surface-1) !important; } @layer utilities { .bg-grid { background-image: linear-gradient(rgba(100, 110, 255, 0.06) 1px, transparent 1px), linear-gradient(90deg, rgba(100, 110, 255, 0.06) 1px, transparent 1px); background-size: 48px 48px; } .bg-dots { background-image: radial-gradient(rgba(100, 110, 255, 0.15) 1px, transparent 1px); background-size: 24px 24px; } .bg-vignette { background: radial-gradient( ellipse 80% 80% at 50% 50%, transparent 20%, rgba(4, 4, 10, 0.6) 65%, rgba(4, 4, 10, 0.97) 100% ); } .glow-accent { box-shadow: 0 0 20px rgba(0, 245, 212, 0.18), 0 0 60px rgba(0, 245, 212, 0.06); } .scan-line { position: relative; overflow: hidden; } .scan-line::after { content: ''; position: absolute; inset-inline: 0; height: 2px; background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent); opacity: 0.6; animation: scan 2.5s ease-in-out infinite; pointer-events: none; } .noise { position: relative; } .noise::before { content: ''; position: absolute; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); opacity: 0.04; pointer-events: none; z-index: 0; } .canvas-host { position: absolute; inset: 0; pointer-events: none; z-index: 0; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } }