@tailwind base; @tailwind components; @tailwind utilities; /* ─────────────────────────────────────────────────────────────── Twilight Atelier — base canvas ─────────────────────────────────────────────────────────────── */ @layer base { :root { color-scheme: dark; } html, body { background: #06070a; color: #f5f3ec; font-family: var(--font-manrope), system-ui, -apple-system, sans-serif; font-size: 15px; line-height: 1.6; font-weight: 400; font-feature-settings: "ss01", "cv11", "calt"; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } body { /* Layered: deep canvas + warm aurora + subtle grain */ background: radial-gradient(1100px 700px at 78% -10%, rgba(255, 181, 69, 0.12), transparent 65%), radial-gradient(900px 800px at 8% 110%, rgba(98, 70, 255, 0.10), transparent 60%), radial-gradient(1400px 900px at 50% 50%, rgba(20, 24, 40, 0.6), transparent 70%), #06070a; background-attachment: fixed; min-height: 100vh; overflow-x: hidden; } /* Subtle grain overlay (doesn't capture pointer events) */ body::before { content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; background-image: url("data:image/svg+xml;utf8,"); opacity: 0.65; mix-blend-mode: overlay; } ::selection { background: rgba(255, 181, 69, 0.32); color: #fff8e7; } /* Custom scrollbar — barely there */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, 0.08); border-radius: 9999px; border: 2px solid transparent; background-clip: content-box; } ::-webkit-scrollbar-thumb:hover { background-color: rgba(255, 255, 255, 0.16); } ::-webkit-scrollbar-track { background: transparent; } /* Focus ring — luminous amber */ :focus-visible { outline: 2px solid rgba(255, 181, 69, 0.75); outline-offset: 2px; border-radius: 4px; } button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible { outline-offset: 3px; } /* Default kerning for headlines */ h1, h2, h3, h4 { letter-spacing: -0.02em; } } /* ─────────────────────────────────────────────────────────────── Component grammars ─────────────────────────────────────────────────────────────── */ @layer components { /* ── Glass surfaces ─────────────────────────────────────────── */ .glass { background: rgba(255, 255, 255, 0.04); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.08), 0 16px 40px -16px rgba(0, 0, 0, 0.6); backdrop-filter: blur(16px) saturate(140%); -webkit-backdrop-filter: blur(16px) saturate(140%); } .glass-strong { background: rgba(255, 255, 255, 0.06); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset, 0 0 0 1px rgba(255, 255, 255, 0.14), 0 28px 80px -24px rgba(0, 0, 0, 0.7); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); } .glass-elev { background: linear-gradient( 180deg, rgba(255, 255, 255, 0.06) 0%, rgba(255, 255, 255, 0.02) 100% ); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset, 0 0 0 1px rgba(255, 255, 255, 0.10), 0 32px 80px -24px rgba(0, 0, 0, 0.7); } /* ── Buttons ────────────────────────────────────────────────── */ .btn-primary { @apply inline-flex items-center justify-center px-5 py-2.5 rounded-pill text-body-strong text-canvas bg-amber transition-all duration-200 ease-atelier active:scale-[0.97] disabled:opacity-40 disabled:cursor-not-allowed disabled:active:scale-100 hover:bg-amber-soft hover:shadow-amber; } .btn-secondary { @apply inline-flex items-center justify-center px-5 py-2.5 rounded-pill text-body text-ink bg-glass transition-all duration-200 ease-atelier active:scale-[0.97] hover:bg-glass-stronger; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10); } .btn-ghost { @apply inline-flex items-center justify-center px-3 py-1.5 rounded-md text-caption text-ink-70 transition-colors duration-200 hover:text-ink hover:bg-glass; } .btn-danger { @apply inline-flex items-center justify-center px-5 py-2.5 rounded-pill text-body-strong text-status-err transition-colors duration-200 hover:bg-status-err-glow; box-shadow: 0 0 0 1px rgba(255, 122, 122, 0.4); } /* ── Inputs ─────────────────────────────────────────────────── */ .input-glass { @apply w-full bg-glass text-ink rounded-md px-4 py-3 text-body outline-none transition-all duration-200; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10); } .input-glass:focus { background: rgba(255, 255, 255, 0.07); box-shadow: 0 0 0 1px rgba(255, 181, 69, 0.55), 0 0 24px -6px rgba(255, 181, 69, 0.35); } .input-glass::placeholder { color: rgba(245, 243, 236, 0.36); } /* ── Cards ──────────────────────────────────────────────────── */ .card { @apply rounded-lg p-6 glass; } /* ── Editorial italic moments ───────────────────────────────── */ .serif-italic { font-family: var(--font-instrument), ui-serif, Georgia, serif; font-style: italic; font-weight: 400; letter-spacing: -0.01em; } /* ── Containers ─────────────────────────────────────────────── */ .container-app { @apply max-w-[1480px] mx-auto px-6 md:px-10; } .container-narrow { @apply max-w-[920px] mx-auto px-6 md:px-10; } .container-prose { @apply max-w-[760px] mx-auto px-6 md:px-10; } /* ── Chat-specific helpers ──────────────────────────────────── */ .chat-bubble-user { @apply rounded-2xl rounded-tr-sm px-5 py-3 text-body text-ink; background: linear-gradient( 135deg, rgba(255, 181, 69, 0.16) 0%, rgba(255, 181, 69, 0.08) 100% ); box-shadow: 0 0 0 1px rgba(255, 181, 69, 0.22), 0 8px 24px -8px rgba(255, 181, 69, 0.18); } .chat-bubble-assistant { @apply rounded-2xl rounded-tl-sm px-5 py-4 text-body text-ink; background: linear-gradient( 180deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.025) 100% ); box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10), 0 16px 48px -16px rgba(0, 0, 0, 0.5); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); } /* Hairline divider — for sectioning inside cards */ .hairline { height: 1px; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.12), transparent ); } .hairline-vert { width: 1px; background: linear-gradient( 180deg, transparent, rgba(255, 255, 255, 0.10), transparent ); } } /* ─────────────────────────────────────────────────────────────── Utilities ─────────────────────────────────────────────────────────────── */ @layer utilities { .text-shimmer { background: linear-gradient( 110deg, rgba(245, 243, 236, 0.4) 30%, rgba(245, 243, 236, 1) 50%, rgba(245, 243, 236, 0.4) 70% ); background-size: 200% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: shimmerBg 2.4s linear infinite; } @keyframes shimmerBg { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Aurora gradient orbs (used decoratively behind hero) */ .aurora-amber { position: absolute; border-radius: 9999px; background: radial-gradient( circle, rgba(255, 181, 69, 0.32) 0%, rgba(255, 181, 69, 0) 65% ); filter: blur(80px); pointer-events: none; } .aurora-violet { position: absolute; border-radius: 9999px; background: radial-gradient( circle, rgba(120, 90, 240, 0.22) 0%, rgba(120, 90, 240, 0) 65% ); filter: blur(90px); pointer-events: none; } .aurora-teal { position: absolute; border-radius: 9999px; background: radial-gradient( circle, rgba(80, 200, 200, 0.18) 0%, rgba(80, 200, 200, 0) 65% ); filter: blur(80px); pointer-events: none; } /* No-scrollbar utility */ .scrollbar-none { scrollbar-width: none; } .scrollbar-none::-webkit-scrollbar { display: none; } .text-balance { text-wrap: balance; } }