@tailwind base; @tailwind components; @tailwind utilities; /* ── Base Reset & Globals ──────────────────────────────── */ @layer base { html { scroll-behavior: smooth; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ::selection { background-color: rgba(242, 91, 41, 0.3); color: #fafafa; } ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: #0d0d0f; } ::-webkit-scrollbar-thumb { background: #333338; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #4a4b50; } body { overflow-x: hidden; } } /* ── Grid Background Pattern ──────────────────────────── */ .bg-grid { background-image: linear-gradient(rgba(242, 91, 41, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(242, 91, 41, 0.03) 1px, transparent 1px); background-size: 60px 60px; } .bg-grid-dense { background-image: linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px); background-size: 20px 20px; } /* ── CRT Screen Effect (CSS only) ─────────────────────── */ .crt-screen { position: relative; overflow: hidden; background: linear-gradient(180deg, #050605 0%, #0a0b0a 100%); border: 1px solid rgba(242, 91, 41, 0.1); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8), 0 0 30px rgba(242, 91, 41, 0.05); } .crt-screen::before { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(0, 0, 0, 0.15) 2px, rgba(0, 0, 0, 0.15) 4px ); pointer-events: none; z-index: 2; } .crt-screen::after { content: ''; position: absolute; inset: 0; background: linear-gradient( 180deg, rgba(242, 91, 41, 0.02) 0%, transparent 50%, rgba(242, 91, 41, 0.01) 100% ); animation: scan 8s linear infinite; pointer-events: none; z-index: 3; } @keyframes scan { 0% { transform: translateY(-100%); } 100% { transform: translateY(100%); } } /* ── Crosshair Decorations ─────────────────────────────── */ .crosshair-box { --ch-size: 16px; --ch-color: rgba(242, 91, 41, 0.35); position: relative; } .crosshair-box::before { content: ''; position: absolute; top: -1px; left: -1px; width: var(--ch-size); height: var(--ch-size); border-top: 1px solid var(--ch-color); border-left: 1px solid var(--ch-color); pointer-events: none; } .crosshair-box::after { content: ''; position: absolute; bottom: -1px; right: -1px; width: var(--ch-size); height: var(--ch-size); border-bottom: 1px solid var(--ch-color); border-right: 1px solid var(--ch-color); pointer-events: none; } /* ── Instrument Noise Texture ──────────────────────────── */ .noise-texture { position: relative; } .noise-texture::before { content: ''; position: absolute; inset: 0; opacity: 0.025; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 256px 256px; pointer-events: none; border-radius: inherit; } /* ── Glow Button ───────────────────────────────────────── */ .glow-btn { position: relative; overflow: hidden; transition: all 250ms cubic-bezier(0.16, 1, 0.3, 1); } .glow-btn::before { content: ''; position: absolute; inset: -2px; background: linear-gradient(135deg, rgba(242, 91, 41, 0.4), rgba(242, 91, 41, 0) 60%); border-radius: inherit; opacity: 0; transition: opacity 250ms; z-index: 0; } .glow-btn:hover::before { opacity: 1; } .glow-btn:hover { box-shadow: 0 0 20px rgba(242, 91, 41, 0.3), 0 0 40px rgba(242, 91, 41, 0.1); transform: translateY(-1px); } .glow-btn:active { transform: translateY(0); } /* ── Accordion ─────────────────────────────────────────── */ .accordion-content { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 300ms ease; } .accordion-content.open { grid-template-rows: 1fr; } .accordion-content > div { overflow: hidden; } /* ── Reveal Animation ──────────────────────────────────── */ .reveal { opacity: 0; transform: translateY(20px); } .reveal.visible { animation: fade-in-up 0.6s ease-out forwards; } @keyframes fade-in-up { 0% { opacity: 0; transform: translateY(20px); } 100% { opacity: 1; transform: translateY(0); } } /* ── Utilities ─────────────────────────────────────────── */ @layer utilities { .text-balance { text-wrap: balance; } .border-hairline { border-color: rgba(255, 255, 255, 0.06); } }