@import '@fontsource/geist-sans/300.css'; @import '@fontsource/geist-sans/400.css'; @import '@fontsource/geist-sans/500.css'; @import '@fontsource/geist-sans/600.css'; @import '@fontsource/geist-sans/700.css'; @import '@fontsource/geist-mono/400.css'; @import '@fontsource/geist-mono/500.css'; @import '@fontsource/geist-mono/600.css'; @import '@fontsource/newsreader/300-italic.css'; @import '@fontsource/newsreader/400.css'; @import '@fontsource/newsreader/400-italic.css'; @import '@fontsource/newsreader/500.css'; @import '@fontsource/newsreader/500-italic.css'; @import '@fontsource/newsreader/600.css'; @import 'tailwindcss'; @theme { /* === AURORA: dark default ("Aurora") === */ --color-background: #050613; --color-background-deep: #02030a; --color-foreground: #f3f1ff; --color-muted: rgba(255, 255, 255, 0.04); --color-muted-foreground: #b6b2d4; --color-border: rgba(255, 255, 255, 0.08); /* Glass surfaces — replace solid card */ --color-glass: rgba(255, 255, 255, 0.04); --color-glass-strong: rgba(255, 255, 255, 0.07); --color-glass-elev: rgba(255, 255, 255, 0.10); --color-highlight: rgba(255, 255, 255, 0.14); --color-input-bg: rgba(255, 255, 255, 0.04); --color-rule-strong: rgba(255, 255, 255, 0.16); /* Accent palette — soft pastel constellation */ --color-primary: #b8a7ff; /* lavender — main accent */ --color-primary-foreground: #02030a; --color-orchid: #ff9ec4; --color-mint: #7ee8c4; --color-citrus: #f0e16a; --color-coral: #ff8a78; --color-sky: #8ec9ff; --color-accent: rgba(255, 255, 255, 0.07); --color-accent-foreground: #f3f1ff; --color-destructive: #ff8a78; /* Card mapping (kept for backward compat with components that read --color-card) */ --color-card: rgba(255, 255, 255, 0.04); --color-card-foreground: #f3f1ff; /* Status surfaces */ --color-success-bg: rgba(126, 232, 196, 0.12); --color-success-fg: #7ee8c4; --color-warning-bg: rgba(240, 225, 106, 0.12); --color-warning-fg: #f0e16a; --color-error-bg: rgba(255, 138, 120, 0.12); --color-error-fg: #ff8a78; /* Glow tokens — used for focus rings, hover halos */ --color-glow: rgba(184, 167, 255, 0.20); --color-glow-strong: rgba(184, 167, 255, 0.45); /* Sidebar tokens */ --color-sidebar: rgba(255, 255, 255, 0.04); --color-sidebar-active: rgba(255, 255, 255, 0.10); /* Shadow recipe for floating glass */ --shadow-card: 0 1px 0 rgba(255,255,255,0.07) inset, 0 30px 60px -20px rgba(0,0,0,0.6); /* Typography */ --font-sans: 'Geist Sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-mono: 'Geist Mono', ui-monospace, 'Cascadia Code', 'Consolas', monospace; --font-display: 'Newsreader', ui-serif, Georgia, serif; --radius: 1rem; /* z-index scale (unchanged) */ --z-base: 1; --z-sticky: 10; --z-dropdown: 30; --z-overlay: 40; --z-modal: 50; --z-tooltip: 60; --z-toast: 70; } /* === AURORA: light theme ("Pearl") overrides === */ [data-theme="light"] { --color-background: #f5f3ff; --color-background-deep: #ede9fe; --color-foreground: #1a1530; --color-muted: rgba(20, 15, 60, 0.04); --color-muted-foreground: #4a4670; --color-border: rgba(20, 15, 60, 0.08); --color-glass: rgba(255, 255, 255, 0.55); --color-glass-strong: rgba(255, 255, 255, 0.65); --color-glass-elev: rgba(255, 255, 255, 0.80); --color-highlight: rgba(255, 255, 255, 0.9); --color-input-bg: rgba(255, 255, 255, 0.85); --color-rule-strong: rgba(20, 15, 60, 0.16); --color-primary: #6d4ce0; --color-primary-foreground: #ffffff; --color-orchid: #d63384; --color-mint: #008a64; --color-citrus: #a07a00; --color-coral: #e0512f; --color-sky: #1f6fcc; --color-accent: rgba(20, 15, 60, 0.04); --color-accent-foreground: #1a1530; --color-destructive: #e0512f; --color-card: rgba(255, 255, 255, 0.55); --color-card-foreground: #1a1530; --color-success-bg: rgba(0, 138, 100, 0.10); --color-success-fg: #008a64; --color-warning-bg: rgba(160, 122, 0, 0.10); --color-warning-fg: #a07a00; --color-error-bg: rgba(224, 81, 47, 0.10); --color-error-fg: #e0512f; --color-glow: rgba(109, 76, 224, 0.18); --color-glow-strong: rgba(109, 76, 224, 0.40); --color-sidebar: rgba(255, 255, 255, 0.55); --color-sidebar-active: rgba(255, 255, 255, 0.85); --shadow-card: 0 1px 0 rgba(255,255,255,0.5) inset, 0 20px 40px -16px rgba(80, 50, 180, 0.18); } /* Legacy alias — many components still read [data-theme="dark"] */ [data-theme="dark"] { /* defaults already match :root — no overrides needed, declaration kept for color-scheme */ } body { font-family: var(--font-sans); background-color: var(--color-background); color: var(--color-foreground); transition: background-color 0.3s ease, color 0.3s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; letter-spacing: -0.005em; min-height: 100vh; overflow-x: hidden; } /* === Aurora atmosphere — vivid blurred blobs behind everything === */ body::before { content: ''; position: fixed; inset: -20vh -10vw; background: radial-gradient(40vw 40vw at 12% 18%, rgba(184, 167, 255, 0.55), transparent 60%), radial-gradient(35vw 35vw at 88% 22%, rgba(255, 158, 196, 0.45), transparent 60%), radial-gradient(50vw 35vw at 78% 88%, rgba(126, 232, 196, 0.40), transparent 60%), radial-gradient(40vw 30vw at 6% 92%, rgba(142, 201, 255, 0.42), transparent 60%); filter: blur(60px) saturate(140%); pointer-events: none; z-index: -2; animation: aurora-drift 28s ease-in-out infinite alternate; } body::after { content: ''; position: fixed; inset: 0; z-index: -1; background: radial-gradient(circle at 50% 50%, transparent 30%, var(--color-background-deep) 100%); pointer-events: none; opacity: 0.7; } @keyframes aurora-drift { from { transform: translate(0, 0) scale(1); } to { transform: translate(-2%, 1%) scale(1.05); } } [data-theme="light"] body::before { opacity: 0.85; } /* Form controls */ input, select, textarea { color: var(--color-foreground); background-color: var(--color-input-bg); border-color: var(--color-rule-strong); font-family: var(--font-sans); transition: border-color 0.2s ease, box-shadow 0.2s ease; } input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px var(--color-glow), 0 0 12px var(--color-glow); } button:focus-visible, a:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; border-radius: 0.5rem; } /* Override browser autofill in dark mode */ [data-theme="dark"] input:-webkit-autofill, [data-theme="dark"] input:-webkit-autofill:hover, [data-theme="dark"] input:-webkit-autofill:focus, [data-theme="dark"] select:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px #0d0e1c inset !important; -webkit-text-fill-color: #f3f1ff !important; caret-color: #f3f1ff; } [data-theme="dark"] { color-scheme: dark; } [data-theme="light"] { color-scheme: light; } /* Scrollbar styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--color-rule-strong); border-radius: 999px; } ::-webkit-scrollbar-thumb:hover { background: var(--color-muted-foreground); } /* === Glass surface utility — used by cards, panels, sidebar === */ .glass { background: var(--color-glass); backdrop-filter: blur(28px) saturate(160%); -webkit-backdrop-filter: blur(28px) saturate(160%); border: 1px solid var(--color-border); border-radius: 22px; box-shadow: var(--shadow-card); position: relative; } .glass::after { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: linear-gradient(180deg, var(--color-highlight), transparent 30%); opacity: 0.4; } .glass-strong { background: var(--color-glass-strong); } .glass-elev { background: var(--color-glass-elev); } /* Selection */ ::selection { background: var(--color-primary); color: var(--color-primary-foreground); } /* === Animations === */ @keyframes fadeSlideIn { from { opacity: 0; } to { opacity: 1; } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 4px var(--color-glow); } 50% { box-shadow: 0 0 16px var(--color-glow-strong); } } @keyframes countUp { from { opacity: 0; } to { opacity: 1; } } @keyframes aurora-rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } } @keyframes aurora-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.5); opacity: 0.6; } } .animate-fade-slide-in { animation: fadeSlideIn 0.4s ease-out forwards; } .animate-shimmer { background: linear-gradient(90deg, var(--color-muted) 25%, var(--color-border) 50%, var(--color-muted) 75%); background-size: 200% 100%; animation: shimmer 1.5s ease-in-out infinite; } .animate-pulse-glow { animation: pulseGlow 2s ease-in-out infinite; } .animate-count-up { animation: countUp 0.5s ease-out both; } .animate-rise { animation: aurora-rise 0.6s cubic-bezier(.2,.7,.2,1) both; } /* Stagger children utility */ .stagger-children > * { animation: aurora-rise 0.55s cubic-bezier(.2,.7,.2,1) both; } .stagger-children > *:nth-child(1) { animation-delay: 0ms; } .stagger-children > *:nth-child(2) { animation-delay: 60ms; } .stagger-children > *:nth-child(3) { animation-delay: 120ms; } .stagger-children > *:nth-child(4) { animation-delay: 180ms; } .stagger-children > *:nth-child(5) { animation-delay: 240ms; } .stagger-children > *:nth-child(6) { animation-delay: 300ms; } .font-mono { font-family: var(--font-mono); } .font-display { font-family: var(--font-display); } /* Card highlight for cross-entity navigation */ @keyframes cardHighlight { 0%, 100% { box-shadow: none; } 25%, 75% { box-shadow: 0 0 0 3px var(--color-primary), 0 0 20px var(--color-glow-strong); } } /* Dim overlay behind highlighted card */ .nav-dim-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.4); z-index: 10; pointer-events: none; opacity: 0; transition: opacity 0.3s ease-in-out; } .nav-dim-overlay.active { opacity: 1; } /* Live pulse dot — for "live" / armed indicators */ .aurora-pulse { width: 7px; height: 7px; border-radius: 50%; background: var(--color-mint); box-shadow: 0 0 8px var(--color-mint); display: inline-block; animation: aurora-pulse 1.4s ease-in-out infinite; } .aurora-pulse.warn { background: var(--color-citrus); box-shadow: 0 0 8px var(--color-citrus); } .aurora-pulse.error { background: var(--color-coral); box-shadow: 0 0 8px var(--color-coral); } .aurora-pulse.idle { background: var(--color-muted-foreground); box-shadow: none; opacity: 0.5; animation: none; }