/* ═══════════════════════════════════════════════════════════
   NOTHING™ — stylesheet
   Contains 100% more CSS than the site requires.

   Theming: every colour is a token on :root. [data-theme="light"]
   overrides the tokens only — no component rule knows which theme
   it is in. Set the attribute on <html> and the whole site follows.
   ═══════════════════════════════════════════════════════════ */

/* ── Dark theme (default) ─────────────────────────────────── */
:root {
  color-scheme: dark;

  /* surfaces */
  --bg:            #07060c;
  --bg-2:          #0c0a15;
  --bg-3:          #110e1d;
  --surface:       rgba(255,255,255,.045);   /* card gradient — top    */
  --surface-2:     rgba(255,255,255,.012);   /* card gradient — bottom */
  --surface-solid: #0c0a15;                  /* pricing plans          */
  --overlay:       rgba(7,6,12,.72);         /* stuck nav              */
  --overlay-solid: rgba(18,15,30,.86);       /* toasts, cookie banner  */

  /* text */
  --ink:       #ece9f8;
  --ink-dim:   #a9a3c4;
  --ink-faint: #8079a4;   /* small meta text — kept above 4.5:1 on --bg */

  /* accents */
  --violet: #8b5cf6;
  --cyan:   #22d3ee;
  --pink:   #f472b6;
  --lime:   #b6f36b;
  --danger: #ff3b52;
  --on-accent: #0a0812;                      /* text on an accent fill */

  /* strokes & fills */
  --line:       rgba(255,255,255,.08);
  --line-2:     rgba(255,255,255,.14);
  --glass:      rgba(255,255,255,.035);
  --track:      rgba(255,255,255,.06);
  --sheen:      rgba(255,255,255,.45);
  --cursor-ring: rgba(255,255,255,.35);

  /* primary button */
  --btn-primary-bg: linear-gradient(120deg, #d8ccff, #fff 40%, #cdf3ff);
  --btn-primary-fg: #0a0812;
  --ripple-on-primary: rgba(10,8,18,.25);

  /* the machine */
  --machine-body:  linear-gradient(160deg, #1b1729, #100d1b 60%, #0b0913);
  --machine-hatch: linear-gradient(180deg, #221d33, #16121f);
  --machine-track: #221d33;
  --machine-thumb: linear-gradient(160deg, #fff, #b9b3cf);
  --machine-arm:   linear-gradient(180deg, #cfc9e6, #7d769a);
  --machine-tip:   #e6e1f5;
  --machine-led:   #2a2438;

  /* hero atmosphere */
  --particle-rgb:      200,190,255;
  --particle-line-rgb: 139,92,246;
  --grain-op:    .05;
  --aurora-op:   .55;
  --aurora-blend: screen;
  --ambient-op:  .20;   /* the quieter glow behind every non-hero section */

  --font-display: 'Instrument Serif', 'Iowan Old Style', Georgia, serif;
  --font-body:    'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-mono:    'JetBrains Mono', ui-monospace, 'SF Mono', Consolas, monospace;

  --ease:      cubic-bezier(.22,1,.36,1);
  --ease-back: cubic-bezier(.34,1.56,.64,1);

  --pad:  clamp(1.25rem, 5vw, 6rem);
  --maxw: 1240px;
}

/* ── Light theme ──────────────────────────────────────────── */
:root[data-theme="light"] {
  color-scheme: light;

  --bg:            #f7f5f1;
  --bg-2:          #eeece6;
  --bg-3:          #e4e1d9;
  --surface:       rgba(255,255,255,.92);
  --surface-2:     rgba(255,255,255,.55);
  --surface-solid: #ffffff;
  --overlay:       rgba(247,245,241,.78);
  --overlay-solid: rgba(255,255,255,.94);

  --ink:       #15121d;
  --ink-dim:   #4c4661;
  --ink-faint: #696280;

  /* deepened so they hold contrast on paper */
  --violet: #6d28d9;
  --cyan:   #0e7490;
  --pink:   #be185d;
  --lime:   #4d7c0f;
  --danger: #e11d48;
  --on-accent: #ffffff;

  --line:       rgba(21,18,29,.10);
  --line-2:     rgba(21,18,29,.17);
  --glass:      rgba(21,18,29,.035);
  --track:      rgba(21,18,29,.09);
  --sheen:      rgba(255,255,255,.6);
  --cursor-ring: rgba(21,18,29,.3);

  --btn-primary-bg: linear-gradient(120deg, #2d2348, #15121d 45%, #1d2b44);
  --btn-primary-fg: #f7f5f1;
  --ripple-on-primary: rgba(255,255,255,.3);

  --machine-body:  linear-gradient(160deg, #ffffff, #efede7 60%, #e2dfd7);
  --machine-hatch: linear-gradient(180deg, #e7e4dd, #d5d1c9);
  --machine-track: #d6d2ca;
  --machine-thumb: linear-gradient(160deg, #fff, #cbc6bd);
  --machine-arm:   linear-gradient(180deg, #8b83a8, #57516d);
  --machine-tip:   #6d6688;
  --machine-led:   #c9c5bd;

  --particle-rgb:      110,90,170;
  --particle-line-rgb: 109,40,217;
  --grain-op:    .035;
  --aurora-op:   .34;
  --aurora-blend: multiply;
  --ambient-op:  .13;
}

/* ── Reset ────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* overflow-x:clip rather than hidden, and on <html> as well as <body>: hidden on
   body alone is unreliable on iOS Safari, and unlike hidden, clip doesn't force
   the other axis to auto or create a scroll container. */
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; overflow-x: clip; }

body {
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-body);
  font-weight: 300;
  line-height: 1.65;
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  transition: background .5s var(--ease), color .5s var(--ease);
}

body.is-locked { overflow: hidden; }

img, svg, canvas { display: block; max-width: 100%; }
button, input { font: inherit; color: inherit; }
button { background: none; border: 0; cursor: pointer; }
a { color: inherit; text-decoration: none; }
::selection { background: var(--violet); color: #fff; }

/* ── Scrollbar ────────────────────────────────────────────── */
::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb {
  background: linear-gradient(var(--violet), var(--cyan));
  border-radius: 99px;
  border: 3px solid var(--bg);
}

/* ═══════════════ PRELOADER ═══════════════ */
.preloader {
  position: fixed; inset: 0; z-index: 9999;
  display: grid; place-items: center;
  background: var(--bg);
  transition: opacity .7s var(--ease), visibility .7s;
}
.preloader.is-done { opacity: 0; visibility: hidden; }

.preloader__inner { display: grid; justify-items: center; gap: 1.75rem; text-align: center; padding: 2rem; }

.preloader__ring { position: relative; width: 132px; height: 132px; }
.preloader__ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.ring-track { fill: none; stroke: var(--track); stroke-width: 3; }
.ring-fill {
  fill: none; stroke: var(--violet); stroke-width: 3; stroke-linecap: round;
  stroke-dasharray: 326.7; stroke-dashoffset: 326.7;
  transition: stroke-dashoffset .45s var(--ease);
  filter: drop-shadow(0 0 8px rgba(139,92,246,.8));
}
.preloader__pct {
  position: absolute; inset: 0; display: grid; place-items: center;
  font-family: var(--font-mono); font-size: 1.35rem; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
}
.preloader__msg {
  font-family: var(--font-mono); font-size: .82rem; color: var(--ink-dim);
  letter-spacing: .04em; min-height: 1.4em;
}
.preloader__skip {
  font-family: var(--font-mono); font-size: .72rem; color: var(--ink-faint);
  letter-spacing: .1em; text-transform: uppercase;
  opacity: 0; transform: translateY(6px); transition: all .5s var(--ease);
  border-bottom: 1px solid transparent; padding-bottom: 2px;
}
.preloader__skip.is-shown { opacity: 1; transform: none; }
.preloader__skip:hover { color: var(--ink); border-color: var(--violet); }

/* ═══════════════ CURSOR ═══════════════ */
.cursor-dot, .cursor-ring {
  position: fixed; top: 0; left: 0; z-index: 9998;
  pointer-events: none; border-radius: 50%;
  opacity: 0; transition: opacity .3s;
}
.cursor-dot { width: 6px; height: 6px; background: var(--ink); margin: -3px 0 0 -3px; }
.cursor-ring {
  width: 34px; height: 34px; margin: -17px 0 0 -17px;
  border: 1px solid var(--cursor-ring);
  transition: opacity .3s, width .35s var(--ease-back), height .35s var(--ease-back),
              margin .35s var(--ease-back), border-color .35s, background .35s;
}
.cursor-ring.is-hot {
  width: 62px; height: 62px; margin: -31px 0 0 -31px;
  border-color: var(--violet); background: rgba(139,92,246,.12);
}
body.cursor-ready .cursor-dot, body.cursor-ready .cursor-ring { opacity: 1; }

@media (hover: hover) and (pointer: fine) {
  body.cursor-ready, body.cursor-ready * { cursor: none !important; }
}
@media (hover: none) { .cursor-dot, .cursor-ring { display: none; } }

/* ═══════════════ SCROLL PROGRESS ═══════════════ */
.scroll-progress {
  position: fixed; top: 0; left: 0; height: 2px; width: 0; z-index: 9000;
  background: linear-gradient(90deg, var(--violet), var(--cyan), var(--pink));
  box-shadow: 0 0 14px rgba(139,92,246,.7);
  transition: width .12s linear;
}

/* ═══════════════ TOASTS ═══════════════ */
.toast-stack {
  position: fixed; right: 1.25rem; bottom: 1.25rem; z-index: 9500;
  display: grid; gap: .6rem; justify-items: end; pointer-events: none;
  max-width: min(340px, 80vw);
}
.toast {
  display: grid; gap: .15rem;
  padding: .8rem 1.1rem;
  background: var(--overlay-solid);
  border: 1px solid var(--line-2);
  border-left: 2px solid var(--violet);
  border-radius: 12px;
  backdrop-filter: blur(18px);
  box-shadow: 0 20px 50px rgba(0,0,0,.28);
  animation: toastIn .55s var(--ease-back) both;
}
.toast.is-out { animation: toastOut .4s var(--ease) forwards; }
.toast b { font-size: .68rem; letter-spacing: .14em; text-transform: uppercase; color: var(--violet); font-weight: 600; font-family: var(--font-mono); }
.toast span { font-size: .88rem; color: var(--ink-dim); line-height: 1.4; }
@keyframes toastIn  { from { opacity: 0; transform: translateX(40px) scale(.9); } }
@keyframes toastOut { to   { opacity: 0; transform: translateX(40px) scale(.95); } }

/* ═══════════════ NAV ═══════════════ */
.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 900;
  display: flex; align-items: center; gap: 2rem;
  padding: 1.1rem var(--pad);
  transition: background .4s var(--ease), backdrop-filter .4s, border-color .4s, padding .4s var(--ease);
  border-bottom: 1px solid transparent;
}
.nav.is-stuck {
  background: var(--overlay);
  backdrop-filter: blur(20px) saturate(160%);
  border-bottom-color: var(--line);
  padding-block: .75rem;
}
.nav__brand { display: flex; align-items: center; gap: .65rem; }
.nav__mark {
  width: 20px; height: 20px; border-radius: 50%;
  border: 2px solid var(--violet);
  box-shadow: 0 0 16px rgba(139,92,246,.6), inset 0 0 8px rgba(139,92,246,.35);
  animation: markPulse 4s var(--ease) infinite;
}
@keyframes markPulse {
  0%,100% { transform: scale(1) rotate(0deg); border-color: var(--violet); }
  50%     { transform: scale(1.14) rotate(180deg); border-color: var(--cyan); }
}
.nav__name { font-size: .95rem; letter-spacing: .22em; font-weight: 500; }
.nav__name sup { font-size: .5em; opacity: .6; }

.nav__links { display: flex; gap: 2rem; margin-left: auto; }
.nav__links a {
  position: relative; font-size: .84rem; color: var(--ink-dim);
  letter-spacing: .02em; transition: color .3s;
}
.nav__links a::after {
  content: ''; position: absolute; left: 0; bottom: -6px; height: 1px; width: 0;
  background: var(--violet); transition: width .35s var(--ease);
}
.nav__links a:hover { color: var(--ink); }
.nav__links a:hover::after { width: 100%; }

/* .btn is declared later with equal specificity — chain the classes so these win */
.btn.nav__cta { padding: .5rem 1.1rem; font-size: .82rem; }

@media (max-width: 860px) { .nav__links { display: none; } .theme-toggle { margin-left: auto; } }
@media (max-width: 540px) {
  .nav { gap: .5rem; }
  .nav__brand { min-width: 0; }
  .nav__mark { width: 16px; height: 16px; flex: none; }
  .nav__name { font-size: .78rem; letter-spacing: .1em; white-space: nowrap; }
  .btn.nav__cta { padding: .42rem .8rem; font-size: .72rem; white-space: nowrap; flex: none; }
}
@media (max-width: 400px) { .btn.nav__cta { display: none; } }

/* ═══════════════ THEME TOGGLE ═══════════════ */
.theme-toggle {
  position: relative; flex: none;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  border: 1px solid var(--line-2); background: var(--glass);
  backdrop-filter: blur(10px);
  transition: border-color .35s, background .35s, transform .35s var(--ease-back);
}
.theme-toggle:hover { border-color: var(--violet); transform: rotate(18deg) scale(1.08); }
.theme-toggle:active { transform: scale(.92); }
.theme-toggle__icon {
  position: absolute; width: 17px; height: 17px;
  fill: none; stroke: var(--ink); stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round;
  transition: opacity .45s var(--ease), transform .55s var(--ease-back);
}
/* dark theme → offer the sun · light theme → offer the moon */
.theme-toggle__icon--moon { opacity: 0; transform: scale(.3) rotate(90deg); }
.theme-toggle__icon--sun  { opacity: 1; transform: none; }
:root[data-theme="light"] .theme-toggle__icon--sun  { opacity: 0; transform: scale(.3) rotate(-90deg); }
:root[data-theme="light"] .theme-toggle__icon--moon { opacity: 1; transform: none; }

/* ═══════════════ BUTTONS ═══════════════ */
.btn {
  position: relative; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center;
  padding: .85rem 1.7rem; border-radius: 99px;
  font-size: .9rem; font-weight: 500; letter-spacing: .01em;
  border: 1px solid var(--line-2);
  transition: transform .35s var(--ease), border-color .35s, color .35s,
              box-shadow .35s, background .4s;
  will-change: transform;
}
.btn > * { position: relative; z-index: 1; }
.btn--primary {
  color: var(--btn-primary-fg); border-color: transparent;
  background: var(--btn-primary-bg);
  box-shadow: 0 12px 40px -12px rgba(139,92,246,.7);
}
.btn--primary:hover { box-shadow: 0 18px 55px -10px rgba(139,92,246,.95); }
.btn--ghost { background: var(--glass); color: var(--ink); backdrop-filter: blur(10px); }
.btn--ghost:hover { border-color: var(--violet); box-shadow: 0 0 0 4px rgba(139,92,246,.1); }
.btn:active { transform: scale(.96) !important; }

/* ripple */
.ripple {
  position: absolute; border-radius: 50%; pointer-events: none;
  background: var(--sheen); transform: scale(0); animation: ripple .7s var(--ease) forwards;
}
.btn--primary .ripple { background: var(--ripple-on-primary); }
@keyframes ripple { to { transform: scale(2.6); opacity: 0; } }

/* ═══════════════ HERO ═══════════════ */
.hero {
  position: relative; min-height: 100svh;
  display: grid; place-items: center;
  padding: 8rem var(--pad) 6rem;
  overflow: hidden;
  isolation: isolate;
}
.hero__canvas { position: absolute; inset: 0; width: 100%; height: 100%; z-index: -3; }

.aurora { position: absolute; inset: -20%; z-index: -4; filter: blur(90px); opacity: var(--aurora-op); }
.aurora__blob { position: absolute; border-radius: 50%; mix-blend-mode: var(--aurora-blend); }
.aurora__blob--1 { width: 46vw; height: 46vw; left: 4%;  top: 6%;  background: radial-gradient(circle, var(--violet), transparent 68%); animation: drift1 22s ease-in-out infinite; }
.aurora__blob--2 { width: 40vw; height: 40vw; right: 6%; top: 22%; background: radial-gradient(circle, var(--cyan),   transparent 68%); animation: drift2 27s ease-in-out infinite; }
.aurora__blob--3 { width: 38vw; height: 38vw; left: 32%; bottom: 0; background: radial-gradient(circle, var(--pink),   transparent 68%); animation: drift3 31s ease-in-out infinite; }
@keyframes drift1 { 0%,100%{transform:translate(0,0) scale(1)}   33%{transform:translate(14vw,8vh) scale(1.2)}  66%{transform:translate(-6vw,16vh) scale(.85)} }
@keyframes drift2 { 0%,100%{transform:translate(0,0) scale(1.1)} 33%{transform:translate(-12vw,12vh) scale(.9)} 66%{transform:translate(8vw,-8vh) scale(1.25)} }
@keyframes drift3 { 0%,100%{transform:translate(0,0) scale(.95)} 33%{transform:translate(10vw,-14vh) scale(1.2)}66%{transform:translate(-14vw,-4vh) scale(1)} }

/* Oversized on purpose: grainShift translates this layer by up to 10% of its own
   size, so an inset:0 layer would slide its own edge into view and paint a hard
   rectangle over the aurora. At -20% the overhang (0.2 × hero) always exceeds the
   largest shift (0.14 × hero), and .hero's overflow:hidden trims the excess. */
.grain {
  position: absolute; inset: -20%; z-index: -2; opacity: var(--grain-op); pointer-events: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
  animation: grainShift 8s steps(8) infinite;
}
@keyframes grainShift {
  0%{transform:translate(0,0)} 12%{transform:translate(-5%,-5%)} 25%{transform:translate(-10%,5%)}
  37%{transform:translate(5%,-10%)} 50%{transform:translate(-5%,10%)} 62%{transform:translate(10%,0)}
  75%{transform:translate(0,-10%)} 87%{transform:translate(-10%,-5%)}
}

.hero__content { position: relative; max-width: var(--maxw); width: 100%; text-align: center; }

.pill {
  display: inline-flex; align-items: center; gap: .6rem;
  padding: .42rem 1rem .42rem .7rem; margin-bottom: 2.2rem;
  border: 1px solid var(--line-2); border-radius: 99px;
  background: var(--glass); backdrop-filter: blur(10px);
  font-size: .78rem; color: var(--ink-dim); letter-spacing: .01em;
}
.pill em { color: var(--ink); font-style: italic; font-family: var(--font-display); }
.pill__dot {
  width: 7px; height: 7px; border-radius: 50%; background: var(--lime);
  box-shadow: 0 0 0 0 rgba(182,243,107,.6); animation: ping 2.4s infinite;
}
@keyframes ping { 70%,100% { box-shadow: 0 0 0 9px rgba(182,243,107,0); } }

.hero__title {
  font-family: var(--font-display); font-weight: 400;
  font-size: clamp(3.2rem, 13vw, 10.5rem);
  line-height: .92; letter-spacing: -.02em; margin-bottom: 1.8rem;
}
.hero__title .line { display: block; overflow: hidden; padding-bottom: .04em; }
.hero__title .word--accent { font-style: italic; }

/* per-character split animation */
.char { display: inline-block; transform: translateY(110%) rotate(6deg); opacity: 0; will-change: transform; }
.is-ready .char { animation: charUp .95s var(--ease) forwards; }
@keyframes charUp { to { transform: none; opacity: 1; } }

/* The accent word's gradient lives on each character, NOT on the word.
   A transform (or will-change) on a child creates its own paint context, so a
   background-clip:text gradient on the parent can never reach it — the letters
   would stay transparent forever. JS feeds each char --bgw (word width) and
   --bgx (its offset in the word) so the per-char gradients line back up into
   one continuous sweep. */
.word--accent .char {
  --bgw: 100%; --bgx: 0px;
  background-image: linear-gradient(100deg, var(--violet), var(--cyan) 45%, var(--pink));
  background-size: calc(var(--bgw) * 1.8) 100%;
  background-repeat: no-repeat;
  background-position-x: calc(var(--bgx) * -1);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.is-ready .word--accent .char {
  animation: charUp .95s var(--ease) forwards, shimmerChar 7s ease-in-out infinite;
}
@keyframes shimmerChar {
  0%,100% { background-position-x: calc(var(--bgx) * -1); }
  50%     { background-position-x: calc(var(--bgx) * -1 - var(--bgw) * .7); }
}

.hero__sub {
  max-width: 46ch; margin: 0 auto 2.5rem;
  font-size: clamp(1rem, 1.6vw, 1.18rem); color: var(--ink-dim);
}
.hero__sub em { font-family: var(--font-display); font-style: italic; color: var(--ink); }

.hero__actions { display: flex; gap: .9rem; justify-content: center; flex-wrap: wrap; margin-bottom: 4rem; }

.hero__trust { display: grid; gap: .9rem; justify-items: center; }
.hero__trust > span { font-size: .7rem; letter-spacing: .2em; text-transform: uppercase; color: var(--ink-faint); }
.hero__logos { display: flex; gap: clamp(1rem,3vw,2.6rem); flex-wrap: wrap; justify-content: center; }
.hero__logos span {
  font-family: var(--font-mono); font-size: .8rem; letter-spacing: .12em;
  color: var(--ink-faint); opacity: .55; transition: opacity .35s, color .35s, transform .35s var(--ease);
}
.hero__logos span:hover { opacity: 1; color: var(--ink); transform: translateY(-2px); }

.scroll-cue {
  position: absolute; bottom: 1.8rem; left: 50%; transform: translateX(-50%);
  display: grid; gap: .7rem; justify-items: center;
}
.scroll-cue__text { font-family: var(--font-mono); font-size: .66rem; letter-spacing: .22em; text-transform: uppercase; color: var(--ink-faint); }
.scroll-cue__line { width: 1px; height: 54px; background: linear-gradient(var(--violet), transparent); position: relative; overflow: hidden; }
.scroll-cue__line::after {
  content: ''; position: absolute; inset: 0; background: var(--cyan);
  animation: cueRun 2.2s var(--ease) infinite;
}
@keyframes cueRun { 0%{transform:translateY(-100%)} 100%{transform:translateY(100%)} }

/* ═══════════════ TICKER ═══════════════ */
.ticker {
  border-block: 1px solid var(--line);
  background: linear-gradient(90deg, rgba(139,92,246,.06), rgba(34,211,238,.06));
  overflow: hidden; padding: .9rem 0;
}
.ticker__track {
  display: flex; gap: 2.5rem; width: max-content;
  animation: tickerRun 26s linear infinite;
  font-family: var(--font-mono); font-size: .78rem; letter-spacing: .3em;
  color: var(--ink-dim);
}
.ticker:hover .ticker__track { animation-play-state: paused; }
.ticker__sep { color: var(--violet); }
@keyframes tickerRun { to { transform: translateX(-50%); } }

/* ═══════════════ AMBIENT SECTION GLOW ═══════════════
   A quieter cousin of the hero aurora, injected into every non-hero section.

   · clipped — absolutely positioned children still count toward an ancestor's
     scrollable overflow even though they don't affect layout, so unclipped blobs
     added real page height below the footer. overflow:hidden contains them.
   · masked — clipping alone would cut a blob mid-gradient and paint the hard
     rectangle .grain used to. The vignette fades each layer out before its own
     edge, so a cut blob is already invisible by the time it meets the boundary.
   · no filter — blur() creates a filter region and a containing block, which is
     what makes these layers clip unexpectedly in the first place. The gradient
     falloff is soft enough on its own and costs far less to animate. */
.ambient {
  position: absolute; inset: 0; z-index: -1; pointer-events: none;
  overflow: hidden;
  -webkit-mask-image: radial-gradient(ellipse closest-side at 50% 50%, #000 52%, transparent);
          mask-image: radial-gradient(ellipse closest-side at 50% 50%, #000 52%, transparent);
}
.ambient__blob {
  position: absolute;
  left: var(--x); top: var(--y);
  width: var(--s); height: var(--s);
  margin-left: calc(var(--s) / -2); margin-top: calc(var(--s) / -2);
  border-radius: 50%;
  background: radial-gradient(circle closest-side, var(--c), transparent);
  opacity: var(--ambient-op);
  /* no will-change: 22 of these would each get a promoted layer for no gain —
     the browser composites an animating transform on its own */
  animation: ambientDrift var(--dur, 34s) ease-in-out var(--delay, 0s) infinite;
  animation-play-state: paused;               /* only runs while on screen */
}
.is-live .ambient__blob { animation-play-state: running; }
@keyframes ambientDrift {
  0%,100% { transform: translate(0,0) scale(1); }
  33%     { transform: translate(7%,-9%) scale(1.18); }
  66%     { transform: translate(-8%,7%) scale(.88); }
}

/* ═══════════════ SECTION SHELL ═══════════════ */
/* positioned + isolated so .ambient (z-index:-1) sits above the section's own
   background but still behind its content */
.section, .footer, .finale { position: relative; isolation: isolate; }
.section { padding: clamp(5rem, 12vw, 9rem) var(--pad); max-width: calc(var(--maxw) + var(--pad) * 2); margin-inline: auto; }
.section--flush { padding-inline: 0; max-width: none; }
.section--flush .section__head { padding-inline: var(--pad); max-width: calc(var(--maxw) + var(--pad)*2); margin-inline: auto; }
.section--band {
  max-width: none; background:
    radial-gradient(ellipse 80% 60% at 50% 0%, rgba(139,92,246,.10), transparent 70%),
    var(--bg-2);
  border-block: 1px solid var(--line);
}
.section--band > * { max-width: var(--maxw); margin-inline: auto; }
.section--band > .ambient { max-width: none; margin: 0; }   /* must stay full-bleed */

.section__head { margin-bottom: clamp(2.5rem, 6vw, 4.5rem); max-width: 62ch; }
.eyebrow {
  display: inline-block; margin-bottom: 1rem;
  font-family: var(--font-mono); font-size: .7rem; letter-spacing: .24em;
  text-transform: uppercase; color: var(--violet);
}
.section__title {
  font-family: var(--font-display); font-weight: 400;
  font-size: clamp(2.1rem, 5.5vw, 4rem); line-height: 1.05; letter-spacing: -.02em;
}
.section__title em {
  font-style: italic;
  background: linear-gradient(100deg, var(--violet), var(--cyan));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.section__lede { margin-top: 1.1rem; color: var(--ink-dim); font-size: clamp(.95rem, 1.4vw, 1.08rem); }

/* ── reveal-on-scroll ── */
.reveal { opacity: 0; transform: translateY(34px); }
.reveal.is-in { animation: revealUp .95s var(--ease) forwards; }
@keyframes revealUp { to { opacity: 1; transform: none; } }

/* ═══════════════ METRICS ═══════════════ */
.metrics {
  display: grid; gap: 1px; background: var(--line);
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  border: 1px solid var(--line); border-radius: 20px; overflow: hidden;
}
.metric {
  position: relative; display: grid; gap: .4rem; align-content: start;
  padding: 1.9rem 1.6rem; background: var(--bg);
  transition: background .45s var(--ease);
  overflow: hidden;
}
.metric::after {
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(400px circle at var(--mx,50%) var(--my,50%), rgba(139,92,246,.13), transparent 60%);
  opacity: 0; transition: opacity .4s;
}
.metric:hover { background: var(--bg-3); }
.metric:hover::after { opacity: 1; }
.metric__label { font-size: .74rem; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-faint); }
.metric__value {
  font-family: var(--font-mono); font-size: clamp(1.7rem, 3.4vw, 2.5rem);
  font-weight: 500; letter-spacing: -.03em; font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, var(--ink), var(--ink-dim));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.metric__delta { font-size: .76rem; color: var(--ink-faint); font-family: var(--font-mono); }
.metric__delta--up   { color: var(--lime); }
.metric__delta--down { color: var(--pink); }
.metric__delta--flat { color: var(--ink-faint); }
.metric__spark { position: absolute; right: 0; bottom: 0; left: 0; height: 40px; opacity: .5; pointer-events: none; }
.metric__spark canvas { width: 100%; height: 40px; }

/* odometer digits */
.odo { display: inline-flex; align-items: flex-start; line-height: 1.15; }
.odo__d { display: inline-block; overflow: hidden; height: 1.15em; }
.odo__strip { display: block; transition: transform .55s var(--ease-back); }
.odo__strip i { display: block; height: 1.15em; line-height: 1.15em; font-style: normal; }

/* ═══════════════ BIG BUTTON ═══════════════ */
.bigbutton-wrap { position: relative; display: grid; justify-items: center; gap: 1.4rem; padding: 2rem 0; }
.bigbutton__glow {
  /* fixed 460px overflowed a 375px viewport by ~42px each side */
  position: absolute; top: 50%; left: 50%;
  width: min(460px, 100%); aspect-ratio: 1;
  transform: translate(-50%,-58%);
  background: radial-gradient(circle, rgba(255,59,82,.28), transparent 62%);
  filter: blur(24px); pointer-events: none;
  animation: glowBreathe 3.4s ease-in-out infinite;
}
@keyframes glowBreathe { 0%,100%{opacity:.65;transform:translate(-50%,-58%) scale(1)} 50%{opacity:1;transform:translate(-50%,-58%) scale(1.12)} }

.bigbutton {
  position: relative; width: clamp(180px, 40vw, 230px); aspect-ratio: 1;
  border-radius: 50%; display: grid; place-items: center;
  transition: transform .25s var(--ease-back);
}
.bigbutton__ring {
  position: absolute; inset: -14px; border-radius: 50%;
  border: 1px solid rgba(255,59,82,.35);
  animation: ringPulse 2.6s var(--ease) infinite;
}
@keyframes ringPulse { 0%{transform:scale(.96);opacity:.9} 100%{transform:scale(1.22);opacity:0} }

.bigbutton__face {
  position: relative; width: 100%; height: 100%; border-radius: 50%;
  display: grid; place-items: center;
  background:
    radial-gradient(circle at 34% 28%, #ff8a97, #ff3b52 42%, #a3122a 100%);
  box-shadow:
    inset 0 -14px 34px rgba(0,0,0,.55),
    inset 0 10px 24px rgba(255,255,255,.28),
    0 26px 60px -18px rgba(255,59,82,.75),
    0 0 0 10px rgba(255,59,82,.06);
  transition: transform .18s var(--ease), box-shadow .18s;
}
.bigbutton:hover .bigbutton__face { transform: translateY(-4px) scale(1.03); }
.bigbutton:active .bigbutton__face {
  transform: translateY(8px) scale(.97);
  box-shadow: inset 0 -4px 16px rgba(0,0,0,.7), inset 0 4px 12px rgba(255,255,255,.14), 0 8px 22px -12px rgba(255,59,82,.6);
}
.bigbutton__text {
  font-family: var(--font-mono); font-weight: 500;
  font-size: clamp(1rem, 2.4vw, 1.35rem); letter-spacing: .12em;
  text-align: center; color: #fff; text-shadow: 0 2px 8px rgba(0,0,0,.5);
  line-height: 1.15; user-select: none;
  max-width: 82%; overflow-wrap: break-word;   /* longer labels wrap inside the disc */
  transition: opacity .12s;
}
.bigbutton__counter { font-family: var(--font-mono); font-size: .82rem; color: var(--ink-faint); }
.bigbutton__counter strong { color: var(--ink); font-weight: 500; }
.bigbutton__status {
  font-family: var(--font-display); font-style: italic;
  font-size: clamp(1.05rem, 2.2vw, 1.45rem); color: var(--ink-dim);
  text-align: center; min-height: 2.4em; max-width: 34ch;
  transition: opacity .3s;
}
.bigbutton__status.is-swap { opacity: 0; }

/* ── global chaos effects ──
   NB: these are scoped to .fx-target (main + footer), never to <body>.
   A filter or transform on <body> would become the containing block for every
   position:fixed element, detaching the nav, cursor and toasts from the viewport. */
@keyframes shakeIt {
  0%,100%{transform:translate(0,0) rotate(0)}
  20%{transform:translate(-9px,4px) rotate(-.5deg)}
  40%{transform:translate(8px,-5px) rotate(.5deg)}
  60%{transform:translate(-6px,-3px) rotate(-.3deg)}
  80%{transform:translate(5px,4px) rotate(.3deg)}
}
body.fx-shake  .fx-target { animation: shakeIt .5s var(--ease); }
body.fx-invert .fx-target { filter: invert(1) hue-rotate(180deg); transition: filter .5s; }
body.fx-tilt   .fx-target { transform: rotate(1.4deg); transition: transform .7s var(--ease-back); }
body.fx-blur   .fx-target { filter: blur(2.4px); transition: filter .5s; }
body.fx-hue    .fx-target { filter: hue-rotate(140deg) saturate(1.5); transition: filter .8s; }

/* party mode — declared before gravity so a gravity drop still wins */
body.fx-party .fx-target { animation: partyHue 6s linear infinite; }
@keyframes partyHue { to { filter: hue-rotate(360deg); } }
body.fx-party .section__title, body.fx-party .hero__title { animation: wobble 2.4s ease-in-out infinite; }
@keyframes wobble { 0%,100%{transform:rotate(-1deg)} 50%{transform:rotate(1deg)} }

body.fx-gravity .fx-target { animation: fall 1.6s var(--ease-back) forwards; }
@keyframes fall { to { transform: translateY(88vh) rotate(7deg); opacity: .25; } }

.confetti {
  position: fixed; z-index: 8000; width: 9px; height: 14px;
  pointer-events: none; will-change: transform;
}

/* ═══════════════ USELESS MACHINE ═══════════════ */
.split { display: grid; gap: clamp(2.5rem,6vw,5rem); grid-template-columns: 1fr 1fr; align-items: center; }
@media (max-width: 900px) { .split { grid-template-columns: 1fr; } }

.feature-list { display: grid; gap: .7rem; margin: 1.8rem 0; }
.feature-list li { display: flex; gap: .8rem; align-items: baseline; color: var(--ink-dim); font-size: .95rem; }
.feature-list span { color: var(--lime); font-family: var(--font-mono); }
.machine__score { font-family: var(--font-mono); font-size: .85rem; color: var(--ink-faint); }
.machine__score strong { color: var(--pink); font-weight: 500; }

.split__visual { display: grid; place-items: center; }
.machine {
  position: relative; width: min(400px, 100%); aspect-ratio: 4/2.6;
  perspective: 900px;
}
.machine__body {
  position: absolute; inset: 0; border-radius: 18px;
  background: var(--machine-body);
  border: 1px solid var(--line-2);
  box-shadow: 0 40px 80px -30px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.07);
  transform: rotateX(6deg);
  transition: transform .5s var(--ease), background .5s var(--ease);
  overflow: hidden;
}
.machine.is-angry .machine__body { animation: machineBuzz .35s ease-in-out; }
@keyframes machineBuzz { 0%,100%{transform:rotateX(6deg) translateX(0)} 25%{transform:rotateX(6deg) translateX(-5px)} 75%{transform:rotateX(6deg) translateX(5px)} }

.machine__panel { position: absolute; inset: 0; display: grid; place-items: center; }
.machine__plate {
  position: absolute; bottom: .8rem; left: 1rem;
  font-family: var(--font-mono); font-size: .58rem; letter-spacing: .2em;
  color: var(--ink-faint); opacity: .55;
}
.machine__led {
  position: absolute; top: 1rem; right: 1.1rem; width: 9px; height: 9px; border-radius: 50%;
  background: var(--machine-led); transition: all .35s;
}
.machine__led.is-on { background: var(--lime); box-shadow: 0 0 14px var(--lime); }

/* JS drives translate/rotate/scale on this as the machine gets meaner */
.switch {
  position: relative; width: 96px; height: 44px;
  transition: transform .55s var(--ease-back);
  will-change: transform;
}
.switch__track {
  position: absolute; inset: 0; border-radius: 99px;
  background: var(--machine-track); border: 1px solid var(--line-2);
  box-shadow: inset 0 3px 10px rgba(0,0,0,.35);
  transition: background .4s var(--ease), border-color .4s;
}
.switch__thumb {
  position: absolute; top: 4px; left: 4px; width: 34px; height: 34px; border-radius: 50%;
  background: var(--machine-thumb);
  box-shadow: 0 4px 12px rgba(0,0,0,.35);
  transition: transform .42s var(--ease-back), background .4s;
}
.switch[aria-checked="true"] .switch__track { background: linear-gradient(90deg, var(--violet), var(--cyan)); border-color: transparent; }
.switch[aria-checked="true"] .switch__thumb { transform: translateX(52px); }

.machine__hatch {
  position: absolute; right: 14%; top: 0; width: 74px; height: 26px;
  background: var(--machine-hatch);
  border: 1px solid var(--line-2); border-top: 0;
  border-radius: 0 0 8px 8px;
  transform-origin: top center; transform: rotateX(0deg);
  transition: transform .35s var(--ease), left .5s var(--ease);
}
.machine__hatch.is-open { transform: rotateX(-125deg); }
.machine__arm {
  position: absolute; left: 50%; top: 100%; width: 12px; height: 0;
  margin-left: -6px; border-radius: 0 0 6px 6px;
  background: var(--machine-arm);
  box-shadow: 0 4px 14px rgba(0,0,0,.35);
  transition: height .38s var(--ease-back);
}
/* the arm extends exactly far enough to reach wherever the switch has fled to */
.machine__arm.is-out { height: var(--reach, 96px); }

.machine__taunt {
  font-family: var(--font-display); font-style: italic;
  font-size: 1.05rem; color: var(--ink-dim);
  min-height: 1.6em; margin-top: .3rem;
  transition: opacity .3s;
}
.machine__taunt.is-swap { opacity: 0; }
.machine__arm::after {
  content: ''; position: absolute; bottom: -4px; left: -5px; width: 22px; height: 10px;
  border-radius: 4px; background: var(--machine-tip);
}

/* ═══════════════ CARDS ═══════════════ */
.cards { display: grid; gap: 1.2rem; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); }
.card {
  position: relative; padding: 2rem 1.8rem 1.6rem; border-radius: 20px;
  background: linear-gradient(165deg, var(--surface), var(--surface-2));
  border: 1px solid var(--line);
  transform-style: preserve-3d; will-change: transform;
  transition: border-color .4s, box-shadow .4s, background .5s var(--ease);
  overflow: hidden;
}
.card:hover { border-color: var(--line-2); box-shadow: 0 30px 70px -30px rgba(139,92,246,.6); }
.card__glow {
  position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity .4s;
  background: radial-gradient(300px circle at var(--mx,50%) var(--my,50%), rgba(139,92,246,.22), transparent 65%);
}
.card:hover .card__glow { opacity: 1; }
.card__icon {
  display: grid; place-items: center; width: 46px; height: 46px; margin-bottom: 1.2rem;
  border-radius: 13px; font-size: 1.35rem;
  background: linear-gradient(145deg, rgba(139,92,246,.22), rgba(34,211,238,.14));
  border: 1px solid var(--line-2); color: var(--ink);
  transform: translateZ(38px);
}
.card h3 { font-family: var(--font-display); font-weight: 400; font-size: 1.5rem; margin-bottom: .55rem; transform: translateZ(24px); }
.card p { color: var(--ink-dim); font-size: .93rem; transform: translateZ(14px); }
.card code { font-family: var(--font-mono); font-size: .85em; color: var(--cyan); }
.card__tag {
  display: inline-block; margin-top: 1.2rem;
  font-family: var(--font-mono); font-size: .66rem; letter-spacing: .14em;
  text-transform: uppercase; color: var(--ink-faint);
  padding: .28rem .7rem; border: 1px solid var(--line); border-radius: 99px;
}

/* ═══════════════ PROGRESS LIST ═══════════════ */
.progress-list { display: grid; gap: 1.4rem; }
.prog { display: grid; gap: .55rem; }
.prog__row { display: flex; justify-content: space-between; gap: 1rem; align-items: baseline; }
.prog__name { font-size: .92rem; color: var(--ink); }
.prog__eta { font-family: var(--font-mono); font-size: .74rem; color: var(--ink-faint); text-align: right; }
.prog__track { height: 6px; border-radius: 99px; background: var(--track); overflow: hidden; position: relative; }
.prog__bar {
  height: 100%; border-radius: 99px; width: 0%;
  background: linear-gradient(90deg, var(--violet), var(--cyan));
  transition: width .9s var(--ease);
  position: relative;
}
.prog__bar::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, var(--sheen), transparent);
  animation: barSheen 1.8s linear infinite;
}
@keyframes barSheen { 0%{transform:translateX(-100%)} 100%{transform:translateX(100%)} }

/* ═══════════════ MARQUEE ═══════════════ */
.marquee-wrap {
  overflow: hidden; padding-block: 1rem;
  mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}
.marquee { display: flex; gap: 1.2rem; width: max-content; }
.marquee__track { display: flex; gap: 1.2rem; animation: marqueeRun 46s linear infinite; }
.marquee:hover .marquee__track { animation-play-state: paused; }
@keyframes marqueeRun { to { transform: translateX(calc(-100% - 1.2rem)); } }
.quote {
  width: min(400px, 78vw); padding: 1.8rem;
  border: 1px solid var(--line); border-radius: 18px;
  background: linear-gradient(165deg, var(--surface), var(--surface-2));
  display: grid; gap: 1rem; align-content: space-between;
  transition: border-color .4s, transform .4s var(--ease), background .5s var(--ease);
}
.quote:hover { border-color: var(--violet); transform: translateY(-5px); }
.quote blockquote { font-family: var(--font-display); font-size: 1.28rem; line-height: 1.35; }
.quote figcaption { font-size: .78rem; color: var(--ink-faint); font-family: var(--font-mono); }
.quote figcaption b { color: var(--ink-dim); font-weight: 500; }

/* ═══════════════ PRICING ═══════════════ */
.pricing { display: grid; gap: 1.2rem; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); align-items: start; }
.plan {
  position: relative; padding: 2.2rem 1.9rem; border-radius: 22px;
  border: 1px solid var(--line); background: var(--surface-solid);
  display: grid; gap: .9rem; align-content: start;
  transition: transform .45s var(--ease), border-color .4s, box-shadow .45s, background .5s var(--ease);
}
.plan:hover { transform: translateY(-6px); border-color: var(--line-2); }
.plan--featured {
  border-color: rgba(139,92,246,.5);
  background: linear-gradient(180deg, rgba(139,92,246,.11), var(--surface-solid) 55%);
  box-shadow: 0 40px 90px -40px rgba(139,92,246,.8);
}
.plan__badge {
  position: absolute; top: -11px; left: 50%; transform: translateX(-50%);
  padding: .25rem .85rem; border-radius: 99px;
  background: linear-gradient(90deg, var(--violet), var(--cyan)); color: var(--on-accent);
  font-size: .64rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase;
  white-space: nowrap;
}
.plan__name { font-family: var(--font-display); font-weight: 400; font-size: 1.6rem; }
.plan__price { font-family: var(--font-mono); font-size: 2.9rem; font-weight: 500; letter-spacing: -.04em; line-height: 1; }
.plan__price span { font-size: .45em; vertical-align: super; color: var(--ink-dim); }
.plan__price small { font-size: .28em; color: var(--ink-faint); letter-spacing: .05em; }
.plan__price--text { font-size: 2rem; font-family: var(--font-display); font-style: italic; }
.plan__desc { color: var(--ink-dim); font-size: .9rem; min-height: 3em; }
.plan__list { display: grid; gap: .6rem; margin: .5rem 0 1rem; padding-left: 0; list-style: none; }
.plan__list li { font-size: .88rem; color: var(--ink-dim); padding-left: 1.4rem; position: relative; }
.plan__list li::before { content: '✓'; position: absolute; left: 0; color: var(--lime); font-family: var(--font-mono); font-size: .8em; }
.plan__list li.off { opacity: .35; text-decoration: line-through; }
.plan__list li.off::before { content: '✕'; color: var(--ink-faint); }
.plan__cta { width: 100%; }
.plan__hint { font-family: var(--font-mono); font-size: .7rem; color: var(--pink); min-height: 1.4em; text-align: center; }

.runaway-zone { position: relative; height: 52px; }
.runaway-zone .btn { position: absolute; left: 0; top: 0; width: 100%; transition: transform .35s var(--ease-back); }

/* ═══════════════ CERTS ═══════════════ */
.certs {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 1px; background: var(--line);
  border-block: 1px solid var(--line);
}
.cert {
  display: grid; justify-items: center; gap: .25rem; padding: 2.2rem 1rem;
  background: var(--bg); transition: background .4s;
}
.cert:hover { background: var(--bg-3); }
.cert__mark { font-family: var(--font-mono); font-size: .7rem; letter-spacing: .3em; color: var(--ink-faint); }
.cert__num {
  font-family: var(--font-display); font-size: 2.4rem; line-height: 1;
  background: linear-gradient(180deg, var(--ink), var(--ink-faint));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.cert__cap { font-size: .74rem; color: var(--ink-dim); }

/* ═══════════════ FINALE ═══════════════ */
.finale { position: relative; padding: clamp(6rem,14vw,11rem) var(--pad); text-align: center; overflow: hidden; }
.finale__bg {
  position: absolute; inset: 0; z-index: -1;
  background:
    radial-gradient(ellipse 70% 90% at 50% 120%, rgba(139,92,246,.35), transparent 65%),
    radial-gradient(ellipse 50% 60% at 20% 0%, rgba(34,211,238,.16), transparent 60%);
  /* the cyan gradient is centred on this box's top edge, so it was at full
     strength exactly where the box begins — a hard seam against the section
     above. Fade the whole backdrop in instead. */
  -webkit-mask-image: linear-gradient(to bottom, transparent, #000 24%);
          mask-image: linear-gradient(to bottom, transparent, #000 24%);
}
.finale__bg::after {
  content: ''; position: absolute; inset: 0;
  background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse 60% 60% at 50% 60%, #000, transparent 75%);
  -webkit-mask-image: radial-gradient(ellipse 60% 60% at 50% 60%, #000, transparent 75%);
  animation: gridDrift 20s linear infinite;
}
@keyframes gridDrift { to { background-position: 64px 64px; } }

.finale__content { max-width: 620px; margin-inline: auto; display: grid; gap: 1.2rem; justify-items: center; }
.finale__title { font-family: var(--font-display); font-weight: 400; font-size: clamp(2.3rem, 6.5vw, 4.6rem); line-height: 1.03; letter-spacing: -.02em; }
.finale__title em { font-style: italic; background: linear-gradient(100deg, var(--violet), var(--pink)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.finale__content > p { color: var(--ink-dim); }

.newsletter { display: flex; gap: .6rem; width: 100%; max-width: 440px; margin-top: .6rem; flex-wrap: wrap; }
.newsletter input {
  flex: 1 1 220px; padding: .85rem 1.2rem; border-radius: 99px;
  background: var(--glass); border: 1px solid var(--line-2);
  outline: none; transition: border-color .3s, box-shadow .3s;
  backdrop-filter: blur(10px);
}
.newsletter input::placeholder { color: var(--ink-faint); }
.newsletter input:focus { border-color: var(--violet); box-shadow: 0 0 0 4px rgba(139,92,246,.14); }
.newsletter__note { font-family: var(--font-mono); font-size: .72rem; color: var(--ink-faint); min-height: 1.4em; }

/* ═══════════════ FOOTER ═══════════════ */
.footer { border-top: 1px solid var(--line); background: var(--bg-2); padding: clamp(3rem,7vw,5rem) var(--pad) 1.6rem; transition: background .5s var(--ease); }
.footer__grid {
  display: grid; gap: 2.5rem; max-width: var(--maxw); margin-inline: auto;
  grid-template-columns: 2fr repeat(3, 1fr);
}
@media (max-width: 780px) { .footer__grid { grid-template-columns: 1fr 1fr; } }
.footer__brand { display: grid; gap: 1rem; align-content: start; }
.footer__tag { font-size: .84rem; color: var(--ink-faint); max-width: 34ch; }
.footer__col { display: grid; gap: .55rem; align-content: start; }
.footer__col h4 { font-size: .7rem; letter-spacing: .2em; text-transform: uppercase; color: var(--ink); font-weight: 500; margin-bottom: .3rem; }
.footer__col a { font-size: .86rem; color: var(--ink-faint); transition: color .3s, transform .3s var(--ease); width: fit-content; }
.footer__col a:hover { color: var(--violet); transform: translateX(4px); }

.footer__bar {
  display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; justify-content: space-between;
  max-width: var(--maxw); margin: 3rem auto 0; padding-top: 1.5rem;
  border-top: 1px solid var(--line);
  font-family: var(--font-mono); font-size: .72rem; color: var(--ink-faint);
}
.footer__hint { opacity: .45; font-style: italic; }
.footer__top { font-family: var(--font-mono); font-size: .72rem; color: var(--ink-dim); transition: color .3s; }
.footer__top:hover { color: var(--violet); }

/* ═══════════════ COOKIE ═══════════════ */
.cookie {
  position: fixed; left: 1.25rem; bottom: 1.25rem; z-index: 9400;
  max-width: min(390px, calc(100vw - 2.5rem));
  padding: 1.2rem 1.35rem; border-radius: 16px;
  background: var(--overlay-solid); border: 1px solid var(--line-2);
  backdrop-filter: blur(20px); box-shadow: 0 26px 60px rgba(0,0,0,.3);
  display: grid; gap: .9rem;
  transform: translateY(140%); opacity: 0;
  transition: transform .7s var(--ease-back), opacity .5s;
}
.cookie.is-in { transform: none; opacity: 1; }
.cookie.is-out { transform: translateY(160%) scale(.9); opacity: 0; }
.cookie p { font-size: .85rem; color: var(--ink-dim); }
.cookie p strong { color: var(--ink); font-weight: 500; }
.cookie__actions { display: flex; gap: .5rem; flex-wrap: wrap; }
.cookie__actions button {
  padding: .45rem .9rem; border-radius: 99px; border: 1px solid var(--line-2);
  font-size: .76rem; color: var(--ink-dim); transition: all .3s;
}
.cookie__actions button:hover { border-color: var(--violet); color: var(--ink); background: rgba(139,92,246,.12); }

/* ═══════════════ REDUCED MOTION ═══════════════ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important; scroll-behavior: auto !important;
  }
  .reveal { opacity: 1; transform: none; }
  .char { opacity: 1; transform: none; }
}
