@import "tailwindcss"; @theme { /* ── Surface Hierarchy (Obsidian Slab) ── */ --color-bg: #0b1120; --color-surface: #0f172a; --color-surface-low: #0b1120; --color-surface-high: #1e293b; --color-surface-highest: #334155; --color-surface-container: #0f172a; /* ── Borders & Outlines ── */ --color-border: #334155; --color-border-dim: rgba(255, 255, 255, 0.06); --color-outline: #475569; --color-outline-variant: #334155; /* ── Primary: Emerald / Cyan ── */ --color-cyan: #00f6ff; --color-cyan-dim: rgba(0, 246, 255, 0.12); --color-cyan-glow: rgba(0, 246, 255, 0.5); --color-primary: #4edea3; --color-primary-dim: #3cd096; --color-primary-container: #005236; /* ── Error / Red ── */ --color-red: #f87171; --color-red-dim: rgba(248, 113, 113, 0.12); --color-red-glow: rgba(248, 113, 113, 0.5); --color-error: #ee7d77; /* ── Greens ── */ --color-green: #34d399; --color-green-dim: rgba(52, 211, 153, 0.12); --color-green-glow: rgba(52, 211, 153, 0.5); /* ── Amber ── */ --color-amber: #fbbf24; --color-amber-dim: rgba(251, 191, 36, 0.12); /* ── Secondary: Indigo ── */ --color-secondary: #9093ff; --color-secondary-dim: rgba(144, 147, 255, 0.12); /* ── Tertiary: Pink ── */ --color-tertiary: #ff6f7e; /* ── Text ── */ --color-text: #f8fafc; --color-muted: #94a3b8; /* ── Fonts ── */ --font-mono: "JetBrains Mono", "Cascadia Code", "Fira Code", monospace; --font-display: "Inter", system-ui, sans-serif; } /* ── Base ── */ @layer base { *, *::before, *::after { box-sizing: border-box; } html { -webkit-font-smoothing: antialiased; } body { margin: 0; background: var(--color-bg); color: var(--color-text); font-family: var(--font-display); overflow: hidden; } ::-webkit-scrollbar { width: 3px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--color-outline); border-radius: 2px; } } /* ── Glass Panel (Tactical Brutalism) ── */ .glass-panel { background: rgba(15, 23, 42, 0.55); backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.07); border-radius: 8px; } /* ── Ghost Border (barely visible structural line) ── */ .ghost-border { border: 1px solid rgba(71, 85, 105, 0.15); } /* ── Material icon helper ── */ .mat-icon { font-family: 'Material Symbols Outlined'; font-weight: normal; font-style: normal; font-size: inherit; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-smoothing: antialiased; } /* ── Shake Keyframes ── */ @keyframes shake-sm { 0%, 100% { transform: translate(0, 0); } 10% { transform: translate(-3px, -1px); } 20% { transform: translate(3px, 2px); } 30% { transform: translate(-2px, 1px); } 40% { transform: translate(2px, -2px); } 50% { transform: translate(-1px, 2px); } 60% { transform: translate(1px, -1px); } 70% { transform: translate(-3px, 0); } 80% { transform: translate(2px, 1px); } 90% { transform: translate(-1px, -1px); } } @keyframes shake-heavy { 0%, 100% { transform: translate(0, 0) rotate(0deg); } 10% { transform: translate(-8px, -4px) rotate(-0.5deg); } 20% { transform: translate(8px, 3px) rotate(0.5deg); } 30% { transform: translate(-6px, 2px) rotate(-0.3deg); } 40% { transform: translate(6px, -5px) rotate(0.4deg); } 50% { transform: translate(-4px, 3px) rotate(-0.2deg); } 60% { transform: translate(3px, -2px) rotate(0.2deg); } 70% { transform: translate(-5px, 1px) rotate(-0.3deg); } 80% { transform: translate(4px, 2px) rotate(0.1deg); } 90% { transform: translate(-2px, -1px) rotate(0deg); } } .shake-sm { animation: shake-sm 0.35s ease-in-out; } .shake-heavy { animation: shake-heavy 0.5s ease-in-out; } /* ── Wheel glow pulse ── */ @keyframes wheel-pulse { 0%, 100% { filter: drop-shadow(0 0 6px rgba(212, 175, 55, 0.2)); } 50% { filter: drop-shadow(0 0 20px rgba(212, 175, 55, 0.5)); } } .wheel-idle { animation: wheel-pulse 3s ease-in-out infinite; } @keyframes wheel-flash { 0% { filter: drop-shadow(0 0 4px rgba(212, 175, 55, 0.15)); } 30% { filter: drop-shadow(0 0 40px rgba(252, 225, 122, 0.9)) brightness(1.4); } 100% { filter: drop-shadow(0 0 6px rgba(212, 175, 55, 0.2)); } } .wheel-flash { animation: wheel-flash 0.8s ease-out; } /* ── Scanline overlay ── */ .scanlines::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(0, 246, 255, 0.012) 2px, rgba(0, 246, 255, 0.012) 4px ); z-index: 1; } /* ── Grid background ── */ .grid-bg { background-image: linear-gradient(rgba(0, 246, 255, 0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 246, 255, 0.025) 1px, transparent 1px); background-size: 40px 40px; } /* ── Adaptation pulse ring ── */ @keyframes adapt-pulse { 0% { transform: scale(0.8); opacity: 0.7; } 100% { transform: scale(1.6); opacity: 0; } } .adapt-ring { animation: adapt-pulse 1.2s ease-out forwards; }