/* =============================================================
   4626.fun — Creator Vaults. Earn Together.
   Dark obsidian + gold + electric blue.
   ============================================================= */

:root {
  /* Color */
  --bg: #000000;
  --bg-2: #050505;
  --ink: #f1eee4;
  --ink-2: #c8c5b8;
  --ink-3: #a3a090;
  --ink-4: #4a4940;
  --line: rgba(241, 238, 228, 0.08);
  --line-2: rgba(241, 238, 228, 0.14);

  --gold: #e8b964;
  --gold-2: #f5d182;
  --gold-soft: rgba(232, 185, 100, 0.18);
  --gold-glow: rgba(232, 185, 100, 0.32);

  --blue: #5b8def;
  --blue-2: #7aa6ff;
  --blue-soft: rgba(91, 141, 239, 0.18);
  --blue-glow: rgba(91, 141, 239, 0.35);

  /* Type */
  --serif: 'Instrument Serif', 'Times New Roman', serif;
  --sans: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
  --mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;

  /* Sizing */
  --max: 1240px;
  --pad-x: clamp(20px, 4vw, 56px);
  --section-y: clamp(80px, 12vw, 180px);

  /* Easing */
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

html {
  /* The dark base color belongs to <html> so that any over-scroll bounce
     (Safari rubber-banding, Android stretch) reveals the same dark color
     as the page — no white flash at the top or bottom of the screen. */
  background: var(--bg);
  min-height: 100%;
}
body {
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink);
  /* Pure flat dark canvas — no radial halos, no vertical gradient swells.
     Any tinting like that creates visible color shifts at section
     boundaries. The sections themselves provide all atmosphere; this is
     just the empty stage they sit on. */
  background: var(--bg);
  background-attachment: scroll;     /* mobile-friendly; fixed broke iOS */
  background-color: var(--bg);       /* fallback for over-scroll */
  min-height: 100vh;
  /* overflow-x: clip prevents horizontal scroll WITHOUT making body
     a scroll container (overflow:hidden would, breaking position:sticky
     and window.scrollY). */
  overflow-x: clip;
  position: relative;
}
@supports (height: 100dvh) {
  body { min-height: 100dvh; }   /* respects mobile browser chrome correctly */
}

img {
  max-width: 100%;
  display: block;
}

a {
  color: inherit;
  text-decoration: none;
}

::selection {
  background: var(--gold);
  color: #0b0c10;
}

/* =============================================================
   Background atmosphere
   ============================================================= */
.bg-layers {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  overflow: hidden;
}

.bg-grid {
  position: absolute;
  inset: -2px;
  background-image:
    linear-gradient(to right, rgba(241, 238, 228, 0.055) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(241, 238, 228, 0.055) 1px, transparent 1px);
  background-size: 64px 64px;
  background-position: center center;
  mask-image: radial-gradient(circle at 50% 30%, black 0%, transparent 75%);
  -webkit-mask-image: radial-gradient(circle at 50% 30%, black 0%, transparent 75%);
}

.bg-glow {
  position: absolute;
  border-radius: 50%;
  filter: blur(120px);
  opacity: 0.55;
}

.bg-glow--gold {
  width: 70vw;
  height: 70vw;
  top: -25vw;
  left: 50%;
  transform: translateX(-50%);
  background: radial-gradient(
    circle,
    rgba(232, 185, 100, 0.22) 0%,
    rgba(232, 185, 100, 0) 60%
  );
}

.bg-glow--blue {
  width: 60vw;
  height: 60vw;
  top: 30vh;
  left: -20vw;
  background: radial-gradient(
    circle,
    rgba(60, 100, 200, 0.28) 0%,
    rgba(60, 100, 200, 0) 60%
  );
}

.bg-noise {
  position: absolute;
  inset: 0;
  opacity: 0.5;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.32 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
}

/* Crosshair markers */
.crosshair {
  position: fixed;
  font-family: var(--mono);
  font-size: 14px;
  font-weight: 400;
  color: rgba(232, 185, 100, 0.55);
  pointer-events: none;
  z-index: 5;
  text-shadow: 0 0 10px rgba(232, 185, 100, 0.4);
}
.crosshair--tl { top: 92px; left: var(--pad-x); }
.crosshair--tr { top: 92px; right: var(--pad-x); }
.crosshair--bl { bottom: 28px; left: var(--pad-x); }
.crosshair--br { bottom: 28px; right: var(--pad-x); }

/* =============================================================
   Nav
   ============================================================= */
.nav {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 20;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 22px clamp(24px, 4vw, 56px);
  max-width: 100%;
  margin: 0;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--ink);
}

.brand__mark {
  width: 26px;
  height: 26px;
  display: block;
  flex-shrink: 0;
}

.brand__word {
  font-family: var(--mono);
  font-size: 14px;
  letter-spacing: 0.04em;
  font-weight: 500;
  color: var(--ink);
}
.brand__dot {
  color: var(--gold);
}

.brand--small .brand__mark {
  width: 22px;
  height: 22px;
}

.nav__links {
  display: flex;
  gap: 28px;
  font-family: var(--mono);
  font-size: 12.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink-2);
}
.nav__links a {
  position: relative;
  padding: 6px 0;
  transition: color 0.3s var(--ease);
}
.nav__links a:hover {
  color: var(--gold);
}
.nav__links a:hover::after {
  transform: scaleX(1);
}
.nav__links a::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s var(--ease);
}

@media (max-width: 740px) {
  .nav__links { display: none; }
}

/* =============================================================
   Pills & Buttons
   ============================================================= */
.pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 9px 16px;
  border: 1px solid var(--line-2);
  border-radius: 999px;
  color: var(--ink);
  transition: border-color 0.3s var(--ease), color 0.3s var(--ease), background 0.3s var(--ease);
}
.pill:hover {
  border-color: var(--gold);
  color: var(--gold);
  background: rgba(232, 185, 100, 0.06);
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 14px 22px;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 500;
  border-radius: 4px;
  cursor: pointer;
  border: 1px solid transparent;
  /* When used on <a>, kill default anchor styling so it reads as a button */
  text-decoration: none;
  color: inherit;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease),
    background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}

.btn--primary {
  background: linear-gradient(180deg, var(--gold-2) 0%, var(--gold) 100%);
  color: #1a1305;
  box-shadow:
    0 1px 0 rgba(255, 230, 170, 0.6) inset,
    0 0 0 1px rgba(232, 185, 100, 0.5),
    0 12px 40px -10px rgba(232, 185, 100, 0.55);
}
.btn--primary:hover {
  transform: translateY(-1px);
  box-shadow:
    0 1px 0 rgba(255, 230, 170, 0.8) inset,
    0 0 0 1px rgba(232, 185, 100, 0.7),
    0 18px 50px -10px rgba(232, 185, 100, 0.7);
}

.btn--ghost {
  background: rgba(255, 255, 255, 0.02);
  color: var(--ink);
  border: 1px solid var(--line-2);
}
.btn--ghost:hover {
  background: rgba(91, 141, 239, 0.08);
  border-color: var(--blue);
  color: var(--blue-2);
}

/* =============================================================
   Hero (legacy block — overridden by minimal-luxury below)
   ============================================================= */
.hero--legacy {
  position: relative;
  z-index: 1;
  padding: clamp(30px, 6vw, 80px) var(--pad-x) clamp(80px, 12vw, 140px);
  max-width: var(--max);
  margin: 0 auto;
  text-align: center;
}

.hero__stage {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.hero__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--ink-2);
  margin-bottom: 28px;
  opacity: 0;
  transform: translateY(8px);
  animation: rise 1s var(--ease) 0.4s forwards;
}
.hero__eyebrow-rule {
  display: inline-block;
  width: 28px;
  height: 1px;
  background: linear-gradient(to right, transparent, var(--line-2), transparent);
}
.hero__eyebrow-rule:first-of-type {
  background: linear-gradient(to left, var(--line-2), transparent);
}
.hero__eyebrow-rule:last-of-type {
  background: linear-gradient(to right, var(--line-2), transparent);
}
.dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 10px var(--gold-glow);
  animation: pulse 2.6s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.45; }
}

/* =============================================================
   Hero — minimal-luxury studio composition
   ============================================================= */
.hero {
  position: relative;
  min-height: 100vh;
  width: 100vw;
  left: 50%;
  transform: translateX(-50%);
  overflow: hidden;
  isolation: isolate;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
}

/* Studio backdrop photograph. Masked at the bottom so the mountain/storm
   image fades to transparent before the hero ends — the lower 30% of the
   hero becomes pure dark canvas, identical to the next section, so the
   transition between hero and reveal section has no visible step. */
.hero__bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: none;
  z-index: 0;
  opacity: 0;
  animation: bgIn 1.6s var(--ease) 0.05s forwards;
  -webkit-mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
          mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
}
@keyframes bgIn {
  to { opacity: 1; }
}

/* Hero embers canvas — drifting warm + cool dust over the backdrop.
   Same bottom-mask as .hero__bg so the dust doesn't bleed into the dark
   transition zone at the bottom of the hero. */
.hero__embers {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
  mix-blend-mode: screen;
  opacity: 0.7;
  -webkit-mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
          mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
}

/* Subtle grain over the studio bg only. Same bottom-mask so the grain
   texture doesn't continue into the transition zone. */
.hero__bg-grain {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  opacity: 0.08;
  mix-blend-mode: overlay;
  -webkit-mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
          mask-image: linear-gradient(to bottom,
    black 0%, black 45%, transparent 75%);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size: 200px 200px;
  animation: grainShift 0.8s steps(4) infinite;
}
@keyframes grainShift {
  0% { background-position: 0 0; }
  25% { background-position: -110px 60px; }
  50% { background-position: 90px -90px; }
  75% { background-position: -60px -40px; }
  100% { background-position: 0 0; }
}

/* Cube wrapper — holds the 3D canvas + integration layers (halo, haze, shadow) */
.hero__cube-wrap {
  position: absolute;
  left: 50%;
  right: -2vw;
  top: 50%;
  transform: translate(0, -50%);
  height: min(820px, 90vh);
  z-index: 3;
  pointer-events: none;
}

/* Soft radial glow halo BEHIND the cube — bleeds gold into the backdrop.
   This is the primary "glow into the scene" element since the in-canvas
   bloom has been dialed back. Lives in CSS so it has no rectangular
   boundary — the radial gradient fades off to transparent in every
   direction, naturally. */
/* Halo removed — the gem now carries its own light via the 6 integration
   points; no warm glow ring bleeding into the scene. */
.hero__cube-halo {
  display: none !important;
}
@keyframes haloBreath {
  0%, 100% { opacity: 0.85; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.05); }
}

/* Cool atmospheric haze pooling around the cube */
.hero__cube-haze {
  position: absolute;
  inset: -10%;
  z-index: 1;
  background:
    radial-gradient(
      ellipse 70% 50% at 50% 60%,
      rgba(91, 141, 239, 0.16) 0%,
      transparent 70%
    );
  filter: blur(60px);
  mix-blend-mode: screen;
}

/* The 3D canvas itself — feathered edge so it blends into the scene */
.hero__cube {
  position: absolute;
  inset: 0;
  z-index: 2;
  opacity: 0;
  transition: opacity 1.8s var(--ease);
  pointer-events: none;
  /* Very generous, very soft radial mask. With the in-canvas bloom turned
     way down (vault.js), there's almost no light reaching the canvas edge
     to begin with — this mask is just insurance. The visible glow around
     the cube comes from the CSS .hero__cube-halo BEHIND the canvas, which
     has no rectangular boundary and bleeds freely into the storm scene. */
  -webkit-mask-image: radial-gradient(
    ellipse 78% 82% at 50% 50%,
    black 0%,
    black 70%,
    rgba(0, 0, 0, 0.4) 90%,
    transparent 100%
  );
  mask-image: radial-gradient(
    ellipse 78% 82% at 50% 50%,
    black 0%,
    black 70%,
    rgba(0, 0, 0, 0.4) 90%,
    transparent 100%
  );
}

/* Soft elliptical ground contact shadow that bleeds out of the cube area */
.hero__cube-contact {
  position: absolute;
  left: 50%;
  bottom: 8%;
  transform: translateX(-50%);
  width: 70%;
  height: 40px;
  z-index: 0;
  background: radial-gradient(ellipse, rgba(0, 0, 0, 0.7) 0%, transparent 70%);
  filter: blur(20px);
  pointer-events: none;
  animation: contactPulse 5s ease-in-out infinite;
}
@keyframes contactPulse {
  0%, 100% { opacity: 0.7; transform: translateX(-50%) scaleX(1); }
  50% { opacity: 0.9; transform: translateX(-50%) scaleX(1.1); }
}
@media (max-width: 900px) {
  .hero__cube-wrap {
    left: 50%;
    right: auto;
    top: 38%;
    transform: translate(-50%, -50%);
    width: clamp(280px, 90vw, 520px);
    height: clamp(280px, 90vw, 520px);
    opacity: 0.55;
  }
}
.hero__cube.is-ready { opacity: 1; }

.hero__cube canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
}

/* Editorial overlay grid */
.hero__overlay {
  position: relative;
  z-index: 4;
  display: flex;
  align-items: flex-end;
  flex: 1;
  padding: 0 clamp(24px, 4vw, 56px) clamp(60px, 10vh, 120px);
  min-height: 100vh;
  pointer-events: none;
}
.hero__overlay > * { pointer-events: auto; }

/* Top + bottom thin meta rows (editorial "contact sheet" feel) */
.hero__meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-3);
  opacity: 0;
  animation: rise 1s var(--ease) 0.2s forwards;
}
.hero__meta--top { padding-top: 90px; }
.hero__meta--bottom { padding-bottom: 4px; }
.hero__index--right { color: var(--ink-3); }

.hero__scrollcue {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--ink-2);
}
.hero__scrollcue-dot {
  display: inline-block;
  width: 1px;
  height: 18px;
  background: linear-gradient(to bottom, transparent, var(--gold), transparent);
  position: relative;
  overflow: hidden;
  animation: scrollDot 2.4s ease-in-out infinite;
}
@keyframes scrollDot {
  0% { transform: translateY(-12px); opacity: 0; }
  20% { opacity: 1; }
  80% { opacity: 1; }
  100% { transform: translateY(12px); opacity: 0; }
}

/* Center column — the heart of the hero */
.hero__center {
  max-width: min(46vw, 560px);
  position: relative;
  z-index: 4;
}
@media (max-width: 900px) {
  .hero__center {
    padding-bottom: 60px;
    max-width: 100%;
  }
}

/* (legacy stage stuff below stays as fallback) */

/* =============================================================
   (DEPRECATED: prior hero scene styles — hidden)
   ============================================================= */
.hero__scene { display: none; }
.hero__stage { display: contents; }

.hero__env {
  position: absolute;
  inset: -2%;
  width: 104%;
  height: 104%;
  object-fit: cover;
  object-position: center 60%;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: none;
  -webkit-mask-image: linear-gradient(to bottom, black 0%, black 65%, transparent 100%);
  mask-image: linear-gradient(to bottom, black 0%, black 65%, transparent 100%);
  z-index: 0;
  will-change: transform;
  transform: scale(1.04);
  animation: envIn 1.8s var(--ease) 0.05s both;
}
@keyframes envIn {
  from { opacity: 0; transform: scale(1.08); }
  to { opacity: 1; transform: scale(1.04); }
}

/* Soft warm haze pooling around the cube */
.hero__scene-haze {
  position: absolute;
  left: 50%;
  top: 56%;
  transform: translate(-50%, -50%);
  width: clamp(420px, 60vw, 900px);
  height: clamp(420px, 60vw, 900px);
  background: radial-gradient(
    closest-side,
    rgba(255, 180, 100, 0.20) 0%,
    rgba(255, 160, 70, 0.10) 30%,
    transparent 70%
  );
  filter: blur(40px);
  z-index: 1;
  pointer-events: none;
  mix-blend-mode: screen;
  animation: hazeBreath 7s ease-in-out infinite;
}
@keyframes hazeBreath {
  0%, 100% { opacity: 0.85; transform: translate(-50%, -50%) scale(1); }
  50% { opacity: 1; transform: translate(-50%, -50%) scale(1.06); }
}

.hero__cube {
  position: absolute;
  left: 50%;
  top: 54%;
  transform: translate(-50%, -50%);
  width: clamp(560px, 80vw, 1200px);
  height: clamp(560px, 80vw, 1200px);
  z-index: 3;
  opacity: 0;
  transition: opacity 1.6s var(--ease);
  pointer-events: none;
}
.hero__cube.is-ready { opacity: 1; }
.hero__cube canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
}

/* Cinematic vignette — darkens the corners to focus attention.
   Also masked at the bottom so it doesn't add a darker ring along the
   bottom edge of the hero (which previously created a subtle line). */
.hero__scene-vignette {
  position: absolute;
  inset: 0;
  z-index: 4;
  pointer-events: none;
  background:
    radial-gradient(ellipse 80% 70% at 50% 55%, transparent 0%, transparent 35%, rgba(6, 7, 13, 0.55) 80%, rgba(6, 7, 13, 0.92) 100%);
  -webkit-mask-image: linear-gradient(to bottom,
    black 0%, black 50%, transparent 80%);
          mask-image: linear-gradient(to bottom,
    black 0%, black 50%, transparent 80%);
}

/* Film grain overlay — masked at the bottom too so it doesn't sit
   ON TOP of the empty bottom zone we created with the other masks. */
.hero__scene-grain {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
  opacity: 0.18;
  mix-blend-mode: overlay;
  -webkit-mask-image: linear-gradient(to bottom,
    black 0%, black 50%, transparent 80%);
          mask-image: linear-gradient(to bottom,
    black 0%, black 50%, transparent 80%);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size: 220px 220px;
  animation: grainShift 0.8s steps(4) infinite;
}
@keyframes grainShift {
  0% { background-position: 0 0; }
  25% { background-position: -110px 60px; }
  50% { background-position: 90px -90px; }
  75% { background-position: -60px -40px; }
  100% { background-position: 0 0; }
}

/* No longer painting any darkening here — since all the atmosphere
   layers above mask themselves to transparent at 75% of the hero's
   height, the lower 25% is already pure transparent. The body's solid
   dark color (var(--bg)) shows through, identical to what the next
   section paints, so the boundary is invisible. */
.hero__scene-fade {
  display: none;
}

/* =============================================================
   (legacy stage-art styles — kept for any leftover usage)
   ============================================================= */
.hero__stage-art { display: none; }

.stage-bg {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

/* Soft cinematic vignette behind the vault */
.stage-bg--vignette {
  inset: -20%;
  background: radial-gradient(
    closest-side at 50% 52%,
    rgba(60, 45, 18, 0.45) 0%,
    rgba(20, 28, 50, 0.32) 35%,
    transparent 72%
  );
  filter: blur(40px);
  z-index: 0;
}

/* Volumetric gold godray cone descending onto the vault */
.stage-bg--godray {
  inset: -15%;
  background:
    radial-gradient(
      ellipse 32% 65% at 50% 8%,
      rgba(255, 196, 110, 0.35) 0%,
      rgba(255, 196, 110, 0.10) 32%,
      transparent 68%
    );
  mix-blend-mode: screen;
  filter: blur(2px);
  animation: godraySway 7s ease-in-out infinite;
  z-index: 0;
}
@keyframes godraySway {
  0%, 100% { opacity: 0.85; transform: translateX(-1%) scale(1); }
  50% { opacity: 1; transform: translateX(1%) scale(1.04); }
}

/* Subtle blue atmospheric haze in the lower corners */
.stage-bg--haze {
  inset: -15%;
  background:
    radial-gradient(
      ellipse 70% 40% at 25% 75%,
      rgba(68, 110, 220, 0.20) 0%,
      transparent 70%
    ),
    radial-gradient(
      ellipse 60% 35% at 80% 35%,
      rgba(91, 141, 239, 0.12) 0%,
      transparent 70%
    );
  mix-blend-mode: screen;
  filter: blur(50px);
  z-index: 0;
}

.stage-bg--embers {
  display: block;
  width: 100%;
  height: 100%;
  mix-blend-mode: screen;
  opacity: 0.75;
  z-index: 3;
}

.vault3d {
  position: absolute;
  inset: 0;
  z-index: 2;
  cursor: grab;
  opacity: 0;
  transition: opacity 1.4s var(--ease);
  touch-action: none;
}
.vault3d.is-ready { opacity: 1; }
.vault3d:active { cursor: grabbing; }
.vault3d canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
  outline: none;
}

.vault3d__hint {
  position: absolute;
  left: 50%;
  bottom: 4px;
  transform: translateX(-50%);
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-3);
  z-index: 4;
  opacity: 0;
  pointer-events: none;
  animation: hintIn 1.4s var(--ease) 2s forwards, hintPulse 3s ease-in-out 3.5s infinite;
}
@keyframes hintIn {
  to { opacity: 0.7; }
}
@keyframes hintPulse {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 0.85; }
}

@media (max-width: 740px) {
  .hero__stage-art {
    margin-bottom: -50px;
  }
}

.hero__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(44px, 6vw, 88px);
  line-height: 0.98;
  letter-spacing: -0.024em;
  margin: 0 0 28px;
  color: var(--ink);
  opacity: 0;
  transform: translateY(14px);
  animation: rise 1.2s var(--ease) 0.55s forwards;
  text-shadow: 0 4px 80px rgba(0, 0, 0, 0.85);
}

.hero__sub {
  max-width: 460px;
  font-size: clamp(15px, 1.2vw, 16px);
  line-height: 1.65;
  color: var(--ink-2);
  margin: 0 0 36px;
  opacity: 0;
  transform: translateY(10px);
  animation: rise 1s var(--ease) 0.7s forwards;
}

.hero__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin: 0;
  opacity: 0;
  transform: translateY(10px);
  animation: rise 1s var(--ease) 0.85s forwards;
}

.hero__stats {
  list-style: none;
  margin: 0;
  padding: 24px 0 0;
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  width: 100%;
  max-width: 720px;
}
.js .hero__stats {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 1s var(--ease) 0.2s, transform 1s var(--ease) 0.2s;
}
.js .hero__stats.is-in {
  opacity: 1;
  transform: none;
}
.hero__stats li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
.stat__num {
  font-family: var(--serif);
  font-size: clamp(22px, 2.5vw, 28px);
  color: var(--gold);
  letter-spacing: 0.01em;
}
.stat__label {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-3);
}

@keyframes rise {
  to { opacity: 1; transform: none; }
}

/* =============================================================
   Section heads
   ============================================================= */
.section__head {
  max-width: 720px;
  margin: 0 auto clamp(56px, 8vw, 96px);
  text-align: center;
}
.js .section__head {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
}
.js .section__head.is-in {
  opacity: 1;
  transform: none;
}

.section__eyebrow {
  display: inline-block;
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--blue-2);
  margin-bottom: 18px;
}

.section__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(34px, 5.4vw, 64px);
  line-height: 1.04;
  letter-spacing: -0.015em;
  margin: 0 0 18px;
  color: var(--ink);
}
.section__title em {
  font-style: italic;
  background: linear-gradient(180deg, var(--gold-2), var(--gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.section__sub {
  font-size: 16px;
  line-height: 1.65;
  color: var(--ink-2);
  margin: 0 auto;
  max-width: 580px;
}

/* =============================================================
   How / Steps
   ============================================================= */
.how {
  position: relative;
  z-index: 1;
  padding: var(--section-y) var(--pad-x);
  max-width: var(--max);
  margin: 0 auto;
}

.steps {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0;
  position: relative;
}

/* Connector dotted line behind steps */
.steps::before {
  content: '';
  position: absolute;
  top: 78px;
  left: calc(100% / 6);
  right: calc(100% / 6);
  height: 1px;
  background-image: linear-gradient(to right, var(--line-2) 50%, transparent 50%);
  background-size: 8px 1px;
  z-index: 0;
}

.step {
  position: relative;
  padding: 0 28px;
  text-align: center;
  z-index: 1;
}
.js .step {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
}
.js .step.is-in {
  opacity: 1;
  transform: none;
}
.js .step:nth-child(2).is-in { transition-delay: 0.12s; }
.js .step:nth-child(3).is-in { transition-delay: 0.24s; }

.step__num {
  display: inline-block;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--ink-3);
  margin-bottom: 18px;
}

.step__icon {
  width: 78px;
  height: 78px;
  margin: 0 auto 24px;
  border: 1px solid var(--line-2);
  border-radius: 14px;
  display: grid;
  place-items: center;
  background:
    radial-gradient(circle at 30% 20%, rgba(232, 185, 100, 0.1) 0%, transparent 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0));
  color: var(--gold);
  position: relative;
  box-shadow: 0 12px 40px -16px rgba(232, 185, 100, 0.3);
}
.step__icon svg {
  width: 38px;
  height: 38px;
}
.step:nth-child(2) .step__icon {
  color: var(--blue-2);
  box-shadow: 0 12px 40px -16px rgba(91, 141, 239, 0.45);
  background:
    radial-gradient(circle at 30% 20%, rgba(91, 141, 239, 0.14) 0%, transparent 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0));
}

.step__title {
  font-family: var(--serif);
  font-size: 26px;
  font-weight: 400;
  letter-spacing: -0.005em;
  margin: 0 0 10px;
  color: var(--ink);
}
.step__copy {
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--ink-2);
  margin: 0 auto;
  max-width: 320px;
}

@media (max-width: 820px) {
  .steps {
    grid-template-columns: 1fr;
    gap: 56px;
  }
  .steps::before { display: none; }
}

/* =============================================================
   Features grid
   ============================================================= */
.features {
  position: relative;
  z-index: 1;
  padding: var(--section-y) var(--pad-x);
  max-width: var(--max);
  margin: 0 auto;
}

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.card {
  position: relative;
  padding: 32px 28px 36px;
  background: var(--bg);
  transition: background 0.5s var(--ease);
}
.js .card {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease), background 0.5s var(--ease);
}
.js .card.is-in {
  opacity: 1;
  transform: none;
}
.js .card:nth-child(2).is-in { transition-delay: 0.06s; }
.js .card:nth-child(3).is-in { transition-delay: 0.12s; }
.js .card:nth-child(4).is-in { transition-delay: 0.18s; }
.js .card:nth-child(5).is-in { transition-delay: 0.24s; }
.js .card:nth-child(6).is-in { transition-delay: 0.30s; }

.card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(
    600px circle at var(--mx, 50%) var(--my, 0%),
    rgba(232, 185, 100, 0.06),
    transparent 40%
  );
  opacity: 0;
  transition: opacity 0.4s var(--ease);
  pointer-events: none;
}
.card:hover::before {
  opacity: 1;
}
.card:hover {
  background: #0c0e1a;
}

.card__icon {
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid var(--line-2);
  margin-bottom: 22px;
  color: var(--gold);
  transition: border-color 0.4s var(--ease), color 0.4s var(--ease), box-shadow 0.4s var(--ease);
}
.card__icon svg {
  width: 22px;
  height: 22px;
}
.card__icon[data-tone="blue"] {
  color: var(--blue-2);
}
.card:hover .card__icon[data-tone="gold"] {
  border-color: rgba(232, 185, 100, 0.5);
  box-shadow: 0 0 0 4px rgba(232, 185, 100, 0.05), 0 0 24px rgba(232, 185, 100, 0.18);
}
.card:hover .card__icon[data-tone="blue"] {
  border-color: rgba(91, 141, 239, 0.5);
  box-shadow: 0 0 0 4px rgba(91, 141, 239, 0.06), 0 0 24px rgba(91, 141, 239, 0.22);
}

.card h3 {
  font-family: var(--sans);
  font-size: 17px;
  font-weight: 600;
  margin: 0 0 8px;
  color: var(--ink);
  letter-spacing: -0.005em;
}
.card p {
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--ink-2);
  margin: 0;
}

@media (max-width: 900px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 560px) {
  .grid { grid-template-columns: 1fr; }
}

/* =============================================================
   CTA
   ============================================================= */
.cta {
  position: relative;
  z-index: 1;
  padding: var(--section-y) var(--pad-x);
  max-width: var(--max);
  margin: 0 auto;
}

.cta__inner {
  position: relative;
  text-align: center;
  border: 1px solid var(--line-2);
  border-radius: 18px;
  padding: clamp(48px, 7vw, 88px) clamp(24px, 5vw, 64px);
  background:
    radial-gradient(60% 80% at 50% 0%, rgba(232, 185, 100, 0.08) 0%, transparent 70%),
    radial-gradient(60% 80% at 50% 100%, rgba(91, 141, 239, 0.08) 0%, transparent 70%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(255, 255, 255, 0));
  overflow: hidden;
}
.js .cta__inner {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
}
.js .cta__inner.is-in {
  opacity: 1;
  transform: none;
}

.cta__inner::before,
.cta__inner::after {
  content: '';
  position: absolute;
  border-radius: 50%;
  filter: blur(60px);
  pointer-events: none;
}
.cta__inner::before {
  width: 320px; height: 320px;
  background: radial-gradient(circle, var(--gold-soft), transparent 70%);
  top: -120px; left: -100px;
  opacity: 0.7;
}
.cta__inner::after {
  width: 320px; height: 320px;
  background: radial-gradient(circle, var(--blue-soft), transparent 70%);
  bottom: -120px; right: -100px;
  opacity: 0.7;
}

.cta__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(34px, 5vw, 60px);
  line-height: 1.05;
  margin: 14px 0 16px;
}
.cta__title em {
  font-style: italic;
  background: linear-gradient(180deg, var(--gold-2), var(--gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.cta__sub {
  color: var(--ink-2);
  max-width: 480px;
  margin: 0 auto 32px;
  font-size: 15.5px;
  line-height: 1.6;
}

.cta__form {
  display: flex;
  gap: 8px;
  max-width: 480px;
  margin: 0 auto;
  position: relative;
  z-index: 1;
}
.cta__form input {
  flex: 1;
  padding: 14px 18px;
  border-radius: 4px;
  border: 1px solid var(--line-2);
  background: rgba(0, 0, 0, 0.35);
  color: var(--ink);
  font-family: var(--mono);
  font-size: 13px;
  letter-spacing: 0.02em;
  outline: none;
  transition: border-color 0.3s var(--ease);
}
.cta__form input::placeholder { color: var(--ink-3); }
.cta__form input:focus {
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(232, 185, 100, 0.12);
}

@media (max-width: 560px) {
  .cta__form { flex-direction: column; }
}

/* =============================================================
   Footer
   ============================================================= */
.foot {
  position: relative;
  z-index: 1;
  border-top: 1px solid var(--line);
  margin-top: 40px;
  padding: 28px var(--pad-x) 40px;
}
.foot__row {
  max-width: var(--max);
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.foot__links {
  display: flex;
  gap: 22px;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-2);
}
.foot__links a {
  transition: color 0.3s var(--ease);
}
.foot__links a:hover { color: var(--gold); }
.foot__meta {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-3);
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}

/* =============================================================
   Drifting cloud / atmospheric foreground layers
   ============================================================= */
.hero__clouds {
  position: absolute;
  display: flex;
  width: 200%;
  pointer-events: none;
  will-change: transform;
}
.hero__clouds img {
  width: 50%;
  height: 100%;
  object-fit: cover;
  display: block;
  user-select: none;
  -webkit-user-drag: none;
}

/* Midground warm wisps — sit between bg and cube, slow drift right */
.hero__clouds--mg {
  top: 38%;
  left: 0;
  height: clamp(180px, 28vh, 300px);
  z-index: 1;
  opacity: 0.32;
  mix-blend-mode: screen;
  animation: cloudDriftR 95s linear infinite;
}

/* Foreground dark cloud bands at top + bottom edges */
.hero__clouds--fg {
  z-index: 5;
  filter: blur(0.3px);
}
.hero__clouds--top {
  top: -18%;
  left: 0;
  height: clamp(180px, 28vh, 320px);
  opacity: 0.45;
  animation: cloudDriftL 70s linear infinite;
  -webkit-mask-image: linear-gradient(to bottom, black 0%, rgba(0,0,0,0.85) 35%, transparent 100%);
  mask-image: linear-gradient(to bottom, black 0%, rgba(0,0,0,0.85) 35%, transparent 100%);
}
.hero__clouds--bottom {
  bottom: -16%;
  left: 0;
  height: clamp(170px, 24vh, 280px);
  opacity: 0.4;
  animation: cloudDriftR 85s linear infinite;
  -webkit-mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.85) 30%, transparent 100%);
  mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.85) 30%, transparent 100%);
}

@keyframes cloudDriftL {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@keyframes cloudDriftR {
  from { transform: translateX(-50%); }
  to   { transform: translateX(0); }
}
@media (prefers-reduced-motion: reduce) {
  .hero__clouds { animation: none !important; }
}

/* =============================================================
   FINAL HERO OVERRIDES — OBSDN-faithful composition
   Centered cube, mountain landscape backdrop, drifting cloud bands.
   These rules sit at the end of the file so they win the cascade.
   ============================================================= */

/* Hide all of the previous hero plumbing that was conflicting. */
.hero__bg-grain,
.hero__embers,
.hero__cube-wrap,
.hero__cube-halo,
.hero__cube-haze,
.hero__cube-contact,
.hero__overlay,
.hero__center,
.hero__meta,
.hero__scrollcue,
.hero__scene,
.hero__scene-haze,
.hero__scene-godray,
.hero__scene-vignette,
.hero__scene-grain,
.hero__scene-fade,
.stage-bg,
.hero__clouds--mg,
.hero__clouds--fg {
  display: none !important;
}

/* Hero container — full viewport landscape stage */
.hero {
  position: relative;
  width: 100vw;
  left: 50%;
  transform: translateX(-50%);
  min-height: 100vh;
  height: auto;
  overflow: hidden;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  padding: 0;
  margin: 0;
  background: var(--bg);
}

/* Landscape backdrop — full-bleed at the top */
.hero__bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 80vh;
  min-height: 720px;
  object-fit: cover;
  object-position: center 45%;
  z-index: 0;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: none;
  /* Feather the bottom edge into page bg */
  -webkit-mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
  mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
  opacity: 0;
  animation: bgFadeIn 1.6s var(--ease) 0.05s forwards;
}
@keyframes bgFadeIn { to { opacity: 1; } }

/* Cube — perfectly centered as hero focal point, large enough to dominate */
.hero__cube {
  position: absolute;
  left: 50%;
  top: 38vh;
  transform: translate(-50%, -50%);
  width: clamp(560px, 80vw, 1200px);
  height: clamp(560px, 80vw, 1200px);
  z-index: 2;
  opacity: 0;
  transition: opacity 1.6s var(--ease);
  pointer-events: none;
  display: block;
}
.hero__cube.is-ready { opacity: 1; }
.hero__cube canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
}

/* Drifting cloud bands — proper layered storm clouds */
.hero__clouds {
  position: absolute;
  display: flex;
  width: 200%;
  pointer-events: none;
  will-change: transform;
  z-index: 3;
}
.hero__clouds img {
  width: 50%;
  height: 100%;
  object-fit: cover;
  object-position: center bottom;
  display: block;
  user-select: none;
  -webkit-user-drag: none;
}

.hero__clouds--top {
  top: -8%;
  left: 0;
  height: clamp(220px, 32vh, 360px);
  opacity: 0.8;
  transform: scaleY(-1) translateX(0);
  animation: cloudDriftL 80s linear infinite;
  -webkit-mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.85) 30%, transparent 100%);
  mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.85) 30%, transparent 100%);
}

.hero__clouds--bottom {
  top: 60vh;
  left: 0;
  height: clamp(200px, 28vh, 320px);
  opacity: 0.85;
  animation: cloudDriftR 95s linear infinite;
  -webkit-mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.7) 50%, transparent 100%);
  mask-image: linear-gradient(to top, black 0%, rgba(0,0,0,0.7) 50%, transparent 100%);
}

@keyframes cloudDriftL {
  from { transform: scaleY(-1) translateX(0); }
  to   { transform: scaleY(-1) translateX(-50%); }
}
@keyframes cloudDriftR {
  from { transform: translateX(-50%); }
  to   { transform: translateX(0); }
}
@media (prefers-reduced-motion: reduce) {
  .hero__clouds { animation: none !important; }
}

/* Bottom fade into page background. Covers the entire hero (top to
   bottom) but stays mostly transparent in the upper region; ramps to
   solid var(--bg) by the bottom edge so the seam disappears. Anchored
   in % of the hero's actual height — not vh — so it works regardless
   of mobile vs desktop hero height. */
.hero__fade {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  z-index: 4;
  pointer-events: none;
  background: linear-gradient(to bottom,
    transparent 0%,
    transparent 30%,
    rgba(6, 7, 13, 0.20) 50%,
    rgba(6, 7, 13, 0.55) 70%,
    rgba(6, 7, 13, 0.88) 88%,
    var(--bg) 100%);
}

/* Copy block — sits below the cube/landscape, centered, like OBSDN's text-below-hero */
.hero__copy {
  position: relative;
  z-index: 5;
  margin-top: 52vh;
  padding: 24px clamp(24px, 4vw, 56px) 64px;
  max-width: 760px;
  margin-left: auto;
  margin-right: auto;
  text-align: center;
}
.hero__copy .hero__eyebrow {
  justify-content: center;
  margin-bottom: 24px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--ink-2);
  opacity: 0;
  animation: rise 1s var(--ease) 0.3s forwards;
}
.hero__copy .hero__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(40px, 5.6vw, 80px);
  line-height: 1.04;
  letter-spacing: -0.022em;
  margin: 0 0 clamp(28px, 4vw, 56px);
  color: var(--ink);
  opacity: 0;
  transform: translateY(14px);
  animation: rise 1.1s var(--ease) 0.45s forwards;
  white-space: normal;
  text-shadow: none;
}
.hero__copy .hero__title em {
  font-style: italic;
  color: var(--gold);
}
.hero__copy .hero__ctas {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
  opacity: 0;
  animation: rise 1s var(--ease) 0.58s forwards;
}

@media (min-width: 741px) {
  .hero__copy .hero__title {
    margin-bottom: clamp(44px, 5.5vw, 72px);
  }
}

@media (max-width: 740px) {
  .hero__bg { height: 70vh; }
  .hero__cube { width: 80vw; height: 80vw; top: 36vh; }
  .hero__clouds--bottom { top: 56vh; }
  .hero__fade { top: 56vh; }
  .hero__copy {
    margin-top: 46vh;
    padding-bottom: 48px;
  }
  .hero__copy .hero__title {
    margin-bottom: 32px;
  }
}

/* =============================================================
   Animated lightning strikes
   ============================================================= */
.hero__lightning {
  position: absolute;
  inset: 0;
  height: 80vh;
  min-height: 720px;
  pointer-events: none;
  z-index: 1;
  overflow: hidden;
}
.hero__bolt {
  position: absolute;
  top: 0;
  width: 60%;
  height: auto;
  opacity: 0;
  mix-blend-mode: screen;
  filter: drop-shadow(0 0 30px rgba(255, 200, 100, 0.7))
          drop-shadow(0 0 80px rgba(255, 180, 60, 0.5));
  will-change: opacity, transform;
}
.hero__bolt--1 { left: -2%; }
.hero__bolt--2 { right: -2%; }

/* Flash classes \u2014 added via JS for ~250ms then removed */
.hero__bolt.is-firing {
  animation: boltFlash 0.42s cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes boltFlash {
  0%   { opacity: 0;    transform: scale(1.0); filter: brightness(1) drop-shadow(0 0 30px rgba(255,200,100,0.7)); }
  8%   { opacity: 1;    transform: scale(1.02); filter: brightness(1.6) drop-shadow(0 0 60px rgba(255,220,140,1)); }
  18%  { opacity: 0.55; }
  28%  { opacity: 1;    filter: brightness(1.4); }
  60%  { opacity: 0.7;  }
  100% { opacity: 0;    transform: scale(1.0); }
}

/* Full-scene flash overlay \u2014 brief sky brightening */
.hero__flash {
  position: absolute;
  inset: 0;
  height: 80vh;
  min-height: 720px;
  background: radial-gradient(ellipse at 50% 30%, rgba(255, 220, 150, 0.5) 0%, rgba(255, 200, 100, 0.18) 35%, transparent 80%);
  opacity: 0;
  pointer-events: none;
  z-index: 1;
  mix-blend-mode: screen;
  will-change: opacity;
}
.hero__flash.is-firing {
  animation: skyFlash 0.5s ease-out forwards;
}
@keyframes skyFlash {
  0%   { opacity: 0; }
  10%  { opacity: 1; }
  25%  { opacity: 0.4; }
  40%  { opacity: 0.85; }
  100% { opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .hero__bolt.is-firing,
  .hero__flash.is-firing { animation: none !important; }
}

/* =============================================================
   Camera push + cool-purple lightning overrides (final)
   ============================================================= */

/* Seamless forward camera push.
   Two identical landscape layers loop the same one-way zoom (1.02 → 1.20)
   on a 28s cycle, but offset by 14s. Each layer crossfades — fading IN at
   the start of its cycle (when scale is small) and OUT near the end (when
   scale is large) — so the snap-back to scale(1.02) is hidden behind a
   transparent layer. The viewer never sees a reset. */
.hero__bg-stage {
  position: absolute;
  inset: 0;
  height: 80vh;
  min-height: 720px;
  overflow: hidden;
  z-index: 0;
  /* Bottom mask feathers the video into the page */
  -webkit-mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
  mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
  opacity: 0;
  animation: bgFadeIn 1.6s var(--ease) 0.05s forwards;
}
.hero__bg-stage .hero__bg {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  object-fit: cover;
  object-position: center center;
  -webkit-mask-image: none;
  mask-image: none;
  animation: none;
  opacity: 1;
  /* Slight saturation + contrast lift maintains the moody color grade.
     No blur — the slow mountain pass video is already clean. */
  filter: saturate(1.05) contrast(1.04);
  /* Hint the GPU to compose smoothly */
  transform: translateZ(0);
  will-change: transform;
  backface-visibility: hidden;
}

/* Stabilizing vignette — sits ON TOP of the video, darkens the streaking
   outer edges (where most jitter lives), keeps the center clear so the
   cube's vanishing-point pop is preserved. Also gives a centered focal
   feel that anchors the eye and reduces perceived chaos. */
.hero__bg-stage::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  background:
    radial-gradient(ellipse 70% 60% at center,
      transparent 0%,
      transparent 38%,
      rgba(8, 6, 16, 0.28) 70%,
      rgba(8, 6, 16, 0.55) 100%),
    /* Top + bottom vertical fades for extra calm */
    linear-gradient(180deg,
      rgba(8, 6, 16, 0.35) 0%,
      transparent 18%,
      transparent 82%,
      rgba(8, 6, 16, 0.6) 100%);
}

/* Foreground cloud bands disabled — the wormhole video provides all the
   motion now, and horizontal drift on top of radial wormhole flow reads
   as conflicting motion. Hide them entirely. */
.hero__clouds,
.hero__clouds--top,
.hero__clouds--bottom,
.hero__clouds--mg,
.hero__clouds--fg,
.hero__parallax--fog,
.hero__parallax--streaks {
  display: none !important;
}

/* Cool-purple lightning bolts \u2014 override warm-gold drop-shadows */
.hero__bolt {
  filter: drop-shadow(0 0 28px rgba(200, 220, 255, 0.85))
          drop-shadow(0 0 70px rgba(160, 180, 240, 0.55));
}

/* Main twin-bolt overlay \u2014 fills the top of the sky */
.hero__bolt--main {
  position: absolute;
  top: -2%;
  left: 0;
  width: 100%;
  height: auto;
  opacity: 0;
  mix-blend-mode: screen;
}
.hero__bolt--main.is-firing {
  animation: mainBoltFlash 0.6s cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes mainBoltFlash {
  0%   { opacity: 0;    transform: scale(1.0); }
  6%   { opacity: 0.95; transform: scale(1.02); }
  14%  { opacity: 0.4;  }
  22%  { opacity: 1;    }
  35%  { opacity: 0.55; }
  60%  { opacity: 0.7;  }
  100% { opacity: 0;    transform: scale(1.0); }
}

/* Single bolts — angled, varied placement, asymmetric */
.hero__bolt--1, .hero__bolt--2 {
  width: 38%;
  height: auto;
}
.hero__bolt--1 { left: 8%;  top: -6%; transform: rotate(-4deg); }
.hero__bolt--2 { right: 6%; top: -8%; transform: scaleX(-1) rotate(-6deg); }

/* Warm white-gold sky flash overlay (matches the new yellow-tinted bolts) */
.hero__flash {
  background: radial-gradient(ellipse at 50% 25%,
    rgba(255, 240, 205, 0.55) 0%,
    rgba(240, 200, 130, 0.22) 38%,
    transparent 82%);
}

/* ─── Floating audio toggle ──────────────────────────────────────────── */
#audio-toggle {
  position: fixed;
  right: clamp(14px, 2vw, 24px);
  bottom: clamp(14px, 2vw, 24px);
  z-index: 60;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px 10px 12px;
  font: 500 11px/1 'Inter', system-ui, -apple-system, Segoe UI, sans-serif;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(235, 230, 250, 0.78);
  background: rgba(14, 12, 24, 0.55);
  border: 1px solid rgba(180, 160, 230, 0.18);
  border-radius: 999px;
  backdrop-filter: blur(12px) saturate(1.1);
  -webkit-backdrop-filter: blur(12px) saturate(1.1);
  cursor: pointer;
  transition: color 220ms ease, border-color 220ms ease, background 220ms ease, transform 220ms ease;
  user-select: none;
}
#audio-toggle:hover {
  color: rgba(245, 240, 255, 0.95);
  border-color: rgba(200, 180, 245, 0.36);
  background: rgba(20, 16, 36, 0.7);
}
#audio-toggle:active { transform: translateY(1px); }
#audio-toggle:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px rgba(200, 180, 245, 0.5);
}
#audio-toggle .audio-toggle__icon { display: none; }
#audio-toggle[data-state="muted"] .audio-toggle__icon--muted { display: block; }
#audio-toggle[data-state="playing"] .audio-toggle__icon--playing { display: block; color: rgba(220, 200, 255, 0.95); }
#audio-toggle[data-state="playing"] {
  border-color: rgba(200, 180, 245, 0.32);
  color: rgba(245, 240, 255, 0.92);
}
@media (max-width: 480px) {
  #audio-toggle .audio-toggle__label { display: none; }
  #audio-toggle { padding: 10px; }
}

/* ─── Procedural SVG lightning (overrides PNG-era styles) ──────────── */
svg.hero__lightning {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 80vh;
  min-height: 720px;
  pointer-events: none;
  z-index: 1;
  overflow: visible;
  mix-blend-mode: screen;
}
svg.hero__lightning #hero-lightning-bolts path {
  will-change: stroke-dashoffset, opacity;
}

/* ─── Headline phrase wrapping (no mid-phrase breaks) ───────────────── */
.hero__copy .hero__title {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: baseline;
  gap: 0 0.36em;
  text-wrap: balance;
}
.hero__copy .hero__title .hero__title-phrase {
  display: inline-block;
  white-space: nowrap;
}

/* ─── Parallax depth layers ─────────────────────────────────────────────
   Each layer is two duplicate copies side-by-side; one shifts off-screen
   while the duplicate rolls in, creating an infinite seamless drift.
   Different speeds at different depths sell the forward motion. */
.hero__parallax {
  position: absolute;
  display: flex;
  pointer-events: none;
  will-change: transform;
  z-index: 4;
}
.hero__parallax img {
  flex: 0 0 auto;
  display: block;
  user-select: none;
  -webkit-user-drag: none;
}

/* Far cloud streaks — high in the sky, slow drift, no scale effect */
.hero__parallax--streaks {
  top: 4vh;
  left: 0;
  width: 220%;
  height: 16vh;
  opacity: 0.5;
  z-index: 2;
  mix-blend-mode: screen;
  animation: streaksDrift 110s linear infinite;
  /* Soft top/bottom feather so the band edge isn't visible */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 35%, black 65%, transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0%, black 35%, black 65%, transparent 100%);
}
.hero__parallax--streaks img {
  width: 50%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  filter: blur(0.5px);
}
@keyframes streaksDrift {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-50%, 0, 0); }
}

/* Near ground fog — bottom of the scene, fast drift. Wrapped in an inner
   element so we can compose lateral drift (outer) with a seamless
   scale-up-and-fade depth pulse (inner). */
.hero__parallax--fog {
  /* anchor to where the bg-stage ends (~80vh from top, with the mask
     feather starting at 70%). Sits on the lower mountains. */
  top: 52vh;
  left: 0;
  width: 240%;
  height: 28vh;
  opacity: 0.7;
  z-index: 5;
  animation: fogDrift 32s linear infinite;
  transform-origin: 50% 100%;
  /* Soft top + bottom feather so the fog band has no visible edges */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 40%, black 80%, transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0%, black 40%, black 80%, transparent 100%);
}
.hero__parallax--fog img {
  width: 50%;
  height: 100%;
  object-fit: cover;
  object-position: center bottom;
  /* Each img scales up + fades out as if it's drifting toward the camera.
     The two imgs are offset by half a cycle so one is always at peak
     visibility — same crossfade trick used on the bg. */
  animation: fogPush 14s linear infinite;
  transform-origin: 50% 100%;
  will-change: transform, opacity;
}
.hero__parallax--fog img:nth-child(2) {
  animation-delay: -7s;
}
@keyframes fogDrift {
  from { translate: 0 0; }
  to   { translate: -50% 0; }
}
@keyframes fogPush {
  /*  Each img: slowly grows and rises (as if drifting past the camera),
      then fades out as it gets too close. Resets to small + transparent
      while the OTHER img is at its peak — reset is invisible. */
  0%   { transform: scale(1.0)  translate3d(0, 0,    0); opacity: 0; }
  18%  { transform: scale(1.06) translate3d(0, -1%,  0); opacity: 1; }
  82%  { transform: scale(1.20) translate3d(0, -4%,  0); opacity: 1; }
  100% { transform: scale(1.26) translate3d(0, -6%,  0); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .hero__parallax,
  .hero__parallax img { animation: none !important; }
}

/* ─── Cube canvas: fully opaque, only the literal corners feathered ───
   The cube must read as crystal-clear and premium. The mask only touches
   the outermost 4% of the canvas to hide the WebGL viewport box-edge —
   the cube body itself stays fully visible and opaque. */
.hero__cube canvas {
  -webkit-mask-image: radial-gradient(
    ellipse 100% 100% at center,
    black 0%,
    black 96%,
    transparent 100%
  );
  mask-image: radial-gradient(
    ellipse 100% 100% at center,
    black 0%,
    black 96%,
    transparent 100%
  );
}

/* Halo removed: the cube reads as a clean obsidian crystal against the sky
   with no gold/purple glow behind it. (Kept as a no-op so any later cascade
   referencing this selector stays inert.) */
.hero__cube::before {
  content: none;
  display: none;
}

/* =============================================================
   CINEMATIC TYPOGRAPHY REVEAL  ("Two tokens. One vault.")
   Apple-keynote / Renaissance-Edition style scroll reveal.
   ============================================================= */
.reveal {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  height: 280vh;
  /* No section-level background darkening at all. The radial vignette
     that was here previously was making the top of this section slightly
     LIGHTER than the body's flat dark below the hero, creating a visible
     horizontal seam at the boundary. The body's unified gradient handles
     all vertical color tone. */
  background: transparent;
  /* clip (not hidden) so position:sticky on children still works */
  overflow: clip;
  isolation: isolate;
}

/* Starfield — three parallax layers of dim points, painted with
   radial-gradients so we don't need any image assets. */
.reveal__starfield {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}
.reveal__starlayer {
  position: absolute;
  inset: -10%;
  background-repeat: repeat;
  opacity: 0;
  animation: starsFadeIn 1.4s ease-out 0.2s forwards;
  /* Mask the starfield so it fades IN from the top of the section over
     ~30% of the section height. The first chunk of the reveal section
     therefore looks identical to the dark canvas below the hero — no
     starfield boundary visible at the seam. */
  -webkit-mask-image: linear-gradient(to bottom,
    transparent 0%, transparent 12%, black 35%, black 88%, transparent 100%);
          mask-image: linear-gradient(to bottom,
    transparent 0%, transparent 12%, black 35%, black 88%, transparent 100%);
}
.reveal__starlayer--far {
  background-image:
    radial-gradient(1px 1px at 20% 30%, rgba(255,255,255,0.45) 50%, transparent 51%),
    radial-gradient(1px 1px at 60% 70%, rgba(255,255,255,0.32) 50%, transparent 51%),
    radial-gradient(1px 1px at 80% 20%, rgba(255,255,255,0.4)  50%, transparent 51%),
    radial-gradient(1px 1px at 30% 80%, rgba(255,255,255,0.28) 50%, transparent 51%),
    radial-gradient(1px 1px at 90% 50%, rgba(255,255,255,0.36) 50%, transparent 51%),
    radial-gradient(1px 1px at 10% 60%, rgba(255,255,255,0.3)  50%, transparent 51%);
  background-size: 220px 220px;
}
.reveal__starlayer--mid {
  background-image:
    radial-gradient(1.5px 1.5px at 25% 25%, rgba(220, 215, 255, 0.55) 50%, transparent 51%),
    radial-gradient(1.5px 1.5px at 75% 65%, rgba(220, 215, 255, 0.45) 50%, transparent 51%),
    radial-gradient(1.5px 1.5px at 50% 85%, rgba(220, 215, 255, 0.5)  50%, transparent 51%);
  background-size: 360px 360px;
}
.reveal__starlayer--near {
  background-image:
    radial-gradient(2px 2px at 45% 35%, rgba(255, 240, 220, 0.7) 50%, transparent 52%),
    radial-gradient(2px 2px at 85% 75%, rgba(255, 240, 220, 0.6) 50%, transparent 52%);
  background-size: 540px 540px;
}
@keyframes starsFadeIn { to { opacity: 1; } }

/* Pinned content — sticks to the viewport center while the section
   scrolls underneath it. */
.reveal__pin {
  position: sticky;
  top: 0;
  width: 100%;
  height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  z-index: 1;
  padding: 0 5vw;
  text-align: center;
}

.reveal__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(220, 200, 160, 0.55);
  margin-bottom: clamp(28px, 4vh, 48px);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 1s var(--ease), transform 1s var(--ease);
}
.reveal__eyebrow-rule {
  display: inline-block;
  width: clamp(28px, 4vw, 56px);
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(220, 200, 160, 0.6), transparent);
}

.reveal__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(48px, 8vw, 120px);
  line-height: 1.1;
  letter-spacing: -0.022em;
  color: rgba(245, 240, 230, 0.95);
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 0.05em;
}
.reveal__phrase {
  display: block;
  opacity: 0;
  transform: translateY(28px);
  filter: blur(8px);
  transition:
    opacity 1.1s cubic-bezier(.2,.7,.2,1),
    transform 1.1s cubic-bezier(.2,.7,.2,1),
    filter 1.1s cubic-bezier(.2,.7,.2,1);
}
.reveal__phrase em {
  font-style: italic;
  background: linear-gradient(135deg,
    #fbe5a3 0%,
    #d8a64a 50%,
    #f4d68a 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  font-weight: 400;
}

.reveal__caption {
  margin: clamp(28px, 4vh, 56px) auto 0;
  max-width: 540px;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(14px, 1.05vw, 17px);
  line-height: 1.7;
  color: rgba(220, 220, 230, 0.55);
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 1s var(--ease), transform 1s var(--ease);
}

.reveal__scrollhint {
  margin-top: clamp(40px, 6vh, 72px);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(200, 200, 215, 0.4);
  opacity: 0;
  transition: opacity 1s var(--ease);
  animation: scrollhintBounce 2.4s ease-in-out infinite 1.6s;
}
@keyframes scrollhintBounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(4px); }
}

/* Reveal states — toggled by IntersectionObserver in JS */
.reveal.is-revealed-1 .reveal__eyebrow { opacity: 1; transform: none; }
.reveal.is-revealed-1 .reveal__phrase[data-phrase="1"] { opacity: 1; transform: none; filter: none; }
.reveal.is-revealed-2 .reveal__phrase[data-phrase="2"] { opacity: 1; transform: none; filter: none; }
.reveal.is-revealed-3 .reveal__caption { opacity: 1; transform: none; }
.reveal.is-revealed-4 .reveal__scrollhint { opacity: 1; }

@media (max-width: 720px) {
  .reveal { height: 240vh; }
  .reveal__title { font-size: clamp(40px, 12vw, 64px); }
}
@media (prefers-reduced-motion: reduce) {
  .reveal__phrase, .reveal__caption, .reveal__eyebrow, .reveal__scrollhint {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
  }
  .reveal__scrollhint { animation: none !important; }
}


/* =============================================================
   ANATOMY SECTION — paired token cards + allocation flow diagram
   "Two tokens. One vault." pays off here. Premium dark glass UI
   with gold + cool-blue accent system and Framer-Motion-quality
   reveal animations driven by IntersectionObserver.
   ============================================================= */
.anatomy {
  position: relative;
  padding: clamp(80px, 12vh, 140px) 0 clamp(100px, 14vh, 160px);
  /* Just a soft warm accent at the top — no full-section vertical gradient */
  background:
    radial-gradient(ellipse 60% 60% at 50% 20%,
      rgba(216, 166, 74, 0.05) 0%, transparent 60%);
  isolation: isolate;
}
.anatomy::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(1px 1px at 12% 22%, rgba(255,255,255,0.4) 50%, transparent 51%),
    radial-gradient(1px 1px at 78% 14%, rgba(255,255,255,0.35) 50%, transparent 51%),
    radial-gradient(1px 1px at 32% 78%, rgba(255,255,255,0.3) 50%, transparent 51%),
    radial-gradient(1px 1px at 88% 64%, rgba(255,255,255,0.4) 50%, transparent 51%);
  background-size: 600px 600px;
  opacity: 0.5;
  z-index: -1;
  pointer-events: none;
}

/* ---- Token comparison cards ---- */
.anatomy__cards {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: clamp(20px, 3vw, 40px);
  align-items: stretch;
  max-width: 1200px;
  margin: clamp(40px, 6vh, 70px) auto clamp(60px, 9vh, 100px);
  padding: 0 clamp(20px, 4vw, 60px);
}
.tokencard {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: clamp(28px, 3.5vw, 44px);
  background:
    linear-gradient(135deg,
      rgba(20, 18, 28, 0.92) 0%,
      rgba(14, 13, 22, 0.94) 100%);
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 18px;
  backdrop-filter: blur(20px);
  overflow: hidden;
  transition:
    transform 0.5s cubic-bezier(0.16, 1, 0.3, 1),
    border-color 0.5s var(--ease),
    box-shadow 0.5s var(--ease),
    opacity 0.7s var(--ease);
  /* Framer-Motion entrance — start state */
  opacity: 0;
  transform: translateY(24px) scale(0.985);
}
.tokencard[data-anim="left"]  { transform: translateX(-24px) translateY(16px); }
.tokencard[data-anim="right"] { transform: translateX( 24px) translateY(16px); }
.tokencard.is-in {
  opacity: 1;
  transform: translateX(0) translateY(0) scale(1);
}
.tokencard:hover {
  transform: translateY(-4px);
  border-color: rgba(255, 255, 255, 0.12);
  box-shadow:
    0 20px 60px -20px rgba(0, 0, 0, 0.6),
    0 0 0 1px rgba(255, 255, 255, 0.04) inset;
}
.tokencard::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(255, 255, 255, 0.15) 50%,
    transparent 100%);
}
/* Share card gets a cool-blue accent treatment (matches Base / on-chain palette) */
.tokencard--share {
  background:
    linear-gradient(135deg,
      rgba(14, 18, 30, 0.94) 0%,
      rgba(12, 14, 22, 0.96) 100%);
  border-color: rgba(110, 145, 255, 0.32);
}
.tokencard--share::before {
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(155, 180, 255, 0.55) 50%,
    transparent 100%);
}
.tokencard--share::after {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 80% 50% at 50% 0%,
    rgba(110, 145, 255, 0.12) 0%, transparent 70%);
  pointer-events: none;
}

.tokencard__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.tokencard__role {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(220, 220, 230, 0.45);
}
.tokencard__chip {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(155, 180, 255, 0.85);
  padding: 5px 10px;
  background: rgba(155, 180, 255, 0.08);
  border: 1px solid rgba(155, 180, 255, 0.18);
  border-radius: 999px;
}
/* The chip on the share card adopts the same cool-blue palette as the card border */
.tokencard__chip--gold {
  color: rgba(195, 215, 255, 0.95);
  background: rgba(110, 145, 255, 0.08);
  border-color: rgba(110, 145, 255, 0.28);
}

.tokencard__avatar {
  position: relative;
  width: clamp(80px, 10vw, 110px);
  height: clamp(80px, 10vw, 110px);
  margin: 4px 0 6px;
  display: grid;
  place-items: center;
}
.tokencard__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.tokencard__avatar--circle img {
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.08);
}
/* Single solid blue border, no inner double-border, no gold gradient ring */
.tokencard__avatar--square {
  padding: 0;
  border: 2px solid #4d7eff;
  border-radius: 14px;
  overflow: hidden;
  box-shadow:
    0 0 24px -4px rgba(77, 126, 255, 0.45),
    0 0 0 1px rgba(255, 255, 255, 0.04) inset;
}
.tokencard__avatar--square img {
  border-radius: 0;
  background: #0a0911;
}
.tokencard__avatar::after {
  content: '';
  position: absolute;
  inset: -8px;
  background: radial-gradient(circle at 50% 50%,
    rgba(155, 180, 255, 0.25) 0%, transparent 60%);
  z-index: -1;
  filter: blur(12px);
}
.tokencard--share .tokencard__avatar::after {
  background: radial-gradient(circle at 50% 50%,
    rgba(110, 145, 255, 0.4) 0%, transparent 60%);
}

.tokencard__name {
  display: flex;
  align-items: baseline;
  gap: 12px;
  font-family: var(--serif);
  line-height: 1;
}
.tokencard__amount {
  font-size: clamp(40px, 5vw, 56px);
  font-weight: 400;
  color: rgba(248, 245, 235, 0.96);
  letter-spacing: -0.02em;
}
.tokencard__ticker {
  font-size: clamp(18px, 2vw, 22px);
  font-weight: 400;
  color: rgba(220, 220, 230, 0.7);
  font-style: italic;
  letter-spacing: 0.02em;
}
/* Blue gradient ticker for the vault share token */
.tokencard__ticker--gold {
  background: linear-gradient(180deg, #c4d6ff 0%, #4d7eff 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}

.tokencard__copy {
  font-size: 14px;
  line-height: 1.6;
  color: rgba(200, 200, 215, 0.7);
  margin: 4px 0;
}

.tokencard__meta {
  list-style: none;
  padding: 0;
  margin: auto 0 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 18px;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
}
.tokencard__meta li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 12px;
}
.tokencard__meta li span {
  color: rgba(200, 200, 215, 0.45);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 500;
  font-size: 10px;
}
.tokencard__meta li b {
  color: rgba(235, 235, 245, 0.88);
  font-weight: 500;
  letter-spacing: 0.01em;
}

/* Bridge between cards — animated SVG arc */
.anatomy__bridge {
  position: relative;
  width: clamp(100px, 14vw, 200px);
  align-self: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.anatomy__bridge svg {
  width: 100%;
  height: 80px;
  overflow: visible;
}
.anatomy__bridge-path {
  stroke-dasharray: 240;
  stroke-dashoffset: 240;
  transition: stroke-dashoffset 1.6s cubic-bezier(0.65, 0, 0.35, 1);
}
.anatomy__bridge-path--down {
  transition-delay: 0.2s;
}
.is-in .anatomy__bridge-path,
.tokencard.is-in ~ .anatomy__bridge .anatomy__bridge-path,
.anatomy__bridge.is-in .anatomy__bridge-path {
  stroke-dashoffset: 0;
}
.anatomy__bridge-pulse {
  filter: drop-shadow(0 0 6px rgba(251, 229, 163, 0.9));
  animation: bridgePulse 3.4s cubic-bezier(0.65, 0, 0.35, 1) infinite;
}
@keyframes bridgePulse {
  0%   { offset-distance: 0%;   opacity: 0; }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% { offset-distance: 100%; opacity: 0; }
}
/* Fall back if offset-distance unsupported: animate cx from 0 to 200 */
@supports not (offset-distance: 0%) {
  .anatomy__bridge-pulse {
    animation: bridgePulseX 3.4s cubic-bezier(0.65, 0, 0.35, 1) infinite;
  }
  @keyframes bridgePulseX {
    0%   { transform: translate(0, 40px);   opacity: 0; }
    10%  { opacity: 1; }
    90%  { opacity: 1; }
    100% { transform: translate(200px, 40px); opacity: 0; }
  }
}
.anatomy__bridge-label {
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(251, 229, 163, 0.55);
  padding: 4px 8px;
  background: rgba(251, 229, 163, 0.04);
  border: 1px solid rgba(251, 229, 163, 0.14);
  border-radius: 999px;
  white-space: nowrap;
}

/* ---- Allocation Flow diagram ---- */
.flow {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 60px);
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.9s var(--ease), transform 0.9s cubic-bezier(0.16, 1, 0.3, 1);
}
.flow.is-in { opacity: 1; transform: translateY(0); }

.flow__head {
  text-align: center;
  margin-bottom: clamp(40px, 6vh, 60px);
}
.flow__eyebrow {
  display: inline-block;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(251, 229, 163, 0.7);
  margin-bottom: 12px;
}
.flow__title {
  font-family: var(--serif);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 400;
  letter-spacing: -0.01em;
  color: rgba(245, 240, 230, 0.95);
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: center;
  gap: 10px;
}
.flow__deposit {
  background: linear-gradient(180deg, #fbe5a3 0%, #d8a64a 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  font-feature-settings: 'tnum' 1, 'lnum' 1;
}
.flow__deposit-unit {
  font-style: italic;
  color: rgba(220, 220, 230, 0.7);
}
.flow__deposit-meta {
  display: block;
  width: 100%;
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 400;
  font-style: normal;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(200, 200, 215, 0.45);
  margin-top: 8px;
}

.flow__diagram {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: clamp(40px, 6vw, 80px);
  align-items: center;
  padding: clamp(20px, 3vh, 40px) 0;
}
.flow__lines {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
}
.flow__line {
  stroke-dasharray: 800;
  stroke-dashoffset: 800;
  transition: stroke-dashoffset 1.8s cubic-bezier(0.65, 0, 0.35, 1);
}
.flow.is-in .flow__line {
  stroke-dashoffset: 0;
}
.flow.is-in .flow__line:nth-child(2) { transition-delay: 0.1s; }
.flow.is-in .flow__line:nth-child(3) { transition-delay: 0.2s; }
.flow.is-in .flow__line:nth-child(4) { transition-delay: 0.3s; }
.flow.is-in .flow__line:nth-child(5) { transition-delay: 0.4s; }
.flow.is-in .flow__line:nth-child(6) { transition-delay: 0.5s; }
.flow.is-in .flow__line:nth-child(7) { transition-delay: 0.6s; }

.flow__column {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.flow__column-title {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(200, 200, 215, 0.45);
  margin-bottom: 6px;
}
.flow__column--right .flow__column-title { text-align: right; }

.flow__node {
  position: relative;
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 16px 18px;
  background:
    linear-gradient(135deg,
      rgba(22, 20, 30, 0.85) 0%,
      rgba(14, 13, 22, 0.9) 100%);
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 12px;
  backdrop-filter: blur(12px);
  transition:
    transform 0.4s cubic-bezier(0.16, 1, 0.3, 1),
    border-color 0.4s var(--ease),
    background 0.4s var(--ease),
    opacity 0.6s var(--ease);
  opacity: 0;
  transform: translateY(12px);
}
.flow.is-in .flow__node { opacity: 1; transform: translateY(0); }
.flow.is-in .flow__column--left  .flow__node:nth-child(2) { transition-delay: 0.10s; }
.flow.is-in .flow__column--left  .flow__node:nth-child(3) { transition-delay: 0.20s; }
.flow.is-in .flow__column--left  .flow__node:nth-child(4) { transition-delay: 0.30s; }
.flow.is-in .flow__column--right .flow__node:nth-child(2) { transition-delay: 0.40s; }
.flow.is-in .flow__column--right .flow__node:nth-child(3) { transition-delay: 0.50s; }
.flow.is-in .flow__column--right .flow__node:nth-child(4) { transition-delay: 0.60s; }
.flow.is-in .flow__column--right .flow__node:nth-child(5) { transition-delay: 0.70s; }
.flow__node:hover {
  border-color: rgba(251, 229, 163, 0.32);
  background:
    linear-gradient(135deg,
      rgba(28, 24, 18, 0.9) 0%,
      rgba(18, 16, 14, 0.95) 100%);
  transform: translateY(-2px);
}

.flow__column--left .flow__node {
  text-align: right;
  flex-direction: row-reverse;
}
.flow__node-pct {
  font-family: var(--serif);
  font-size: 28px;
  font-weight: 400;
  line-height: 1;
  color: rgba(248, 245, 235, 0.95);
  letter-spacing: -0.02em;
  display: inline-flex;
  align-items: baseline;
  background: linear-gradient(180deg, #fbe5a3 0%, #d8a64a 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  font-feature-settings: 'tnum' 1, 'lnum' 1;
  min-width: 56px;
  text-align: center;
  flex-shrink: 0;
}
.flow__column--left .flow__node-pct { text-align: center; }
.flow__node-pct i {
  font-style: normal;
  font-size: 14px;
  margin-left: 1px;
}
.flow__node-body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1;
  min-width: 0;
}

/* Real protocol logo (round chip) on each flow node */
.flow__node-logo {
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.05) 0%,
      rgba(255, 255, 255, 0.02) 100%);
  border: 1px solid rgba(255, 255, 255, 0.08);
  overflow: hidden;
  transition: border-color 0.4s var(--ease), transform 0.4s var(--ease);
}
.flow__node:hover .flow__node-logo {
  border-color: rgba(251, 229, 163, 0.32);
  transform: scale(1.06);
}
.flow__node-logo img {
  width: 70%;
  height: 70%;
  object-fit: contain;
  display: block;
}
/* Mark variant: thin SVG mark (no chrome) for logos we draw inline */
.flow__node-logo--mark {
  color: rgba(251, 229, 163, 0.85);
}
.flow__node-logo--mark svg {
  width: 60%;
  height: 60%;
}
.flow__node--idle .flow__node-logo--mark {
  color: rgba(155, 180, 255, 0.75);
}
.flow__node-label {
  font-size: 14px;
  font-weight: 500;
  color: rgba(235, 235, 245, 0.92);
  letter-spacing: -0.005em;
}
.flow__node-meta {
  font-size: 11px;
  font-weight: 400;
  color: rgba(200, 200, 215, 0.5);
  letter-spacing: 0.02em;
}
.flow__node--idle {
  border-style: dashed;
  border-color: rgba(155, 180, 255, 0.18);
}
.flow__node--idle .flow__node-pct {
  background: linear-gradient(180deg, #c8d4ff 0%, #6a85d8 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* Center hub */
.flow__hub {
  position: relative;
  z-index: 2;
  width: clamp(140px, 14vw, 180px);
  height: clamp(140px, 14vw, 180px);
  display: grid;
  place-items: center;
  justify-self: center;
}
.flow__hub-ring {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid rgba(251, 229, 163, 0.18);
  animation: hubRing 8s linear infinite;
}
.flow__hub-ring--inner {
  inset: 18%;
  border: 1px dashed rgba(155, 180, 255, 0.22);
  animation-direction: reverse;
  animation-duration: 12s;
}
@keyframes hubRing {
  to { transform: rotate(360deg); }
}
.flow__hub-core {
  position: relative;
  width: 60%;
  height: 60%;
  border-radius: 50%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  background:
    radial-gradient(circle at 50% 30%,
      rgba(251, 229, 163, 0.25) 0%,
      rgba(20, 18, 28, 0.95) 60%,
      rgba(14, 13, 22, 1) 100%);
  border: 1px solid rgba(251, 229, 163, 0.32);
  box-shadow:
    0 0 40px -8px rgba(251, 229, 163, 0.35),
    0 0 0 1px rgba(255, 255, 255, 0.04) inset;
}
.flow__hub-tag {
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(251, 229, 163, 0.7);
}
.flow__hub-name {
  font-family: var(--serif);
  font-size: clamp(20px, 2.4vw, 26px);
  font-weight: 400;
  font-style: italic;
  color: rgba(248, 245, 235, 0.96);
  letter-spacing: -0.01em;
}

@media (max-width: 860px) {
  .anatomy__cards { grid-template-columns: 1fr; }
  /* Mobile: keep the bridge vertical (svg path looks clean rotated) and
     the label visually upright. Use a custom layout instead of a flat
     rotation so labels stay legible. */
  .anatomy__bridge {
    width: 100%;
    height: 100px;
    flex-direction: row;
    margin: 0 auto;
  }
  .anatomy__bridge svg { transform: rotate(90deg); width: 100px; height: 100px; }
  .anatomy__bridge-label { transform: none; }
  .tokencard__meta li b { font-size: 11px; word-break: break-word; text-align: right; }

  .flow__diagram { grid-template-columns: 1fr; gap: 28px; }
  .flow__hub { order: -1; }
  .flow__column-title { text-align: center !important; }
  .flow__column--left .flow__node { flex-direction: row; text-align: left; }
  .flow__lines { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .tokencard, .flow__node, .flow {
    opacity: 1 !important;
    transform: none !important;
  }
  .anatomy__bridge-path, .flow__line {
    stroke-dashoffset: 0 !important;
  }
  .anatomy__bridge-pulse, .flow__hub-ring { animation: none !important; }
}

/* =============================================================
   LIFECYCLE — four-step vault walkthrough (/faq/how-it-works parity)
   ============================================================= */
.lifecycle {
  position: relative;
  padding: clamp(72px, 10vh, 120px) clamp(20px, 4vw, 60px) clamp(88px, 12vh, 140px);
  max-width: 920px;
  margin: 0 auto;
}
.lifecycle__track {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: clamp(18px, 3vw, 28px);
}
.lifecycle__rail {
  position: absolute;
  left: 19px;
  top: 32px;
  bottom: 32px;
  width: 1px;
  background: linear-gradient(180deg, transparent, rgba(255,255,255,0.08) 12%, rgba(255,255,255,0.08) 88%, transparent);
}
.lifecycle__step {
  position: relative;
  display: grid;
  grid-template-columns: 40px 1fr;
  gap: clamp(16px, 3vw, 28px);
  align-items: start;
}
.js .lifecycle__step {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.75s var(--ease), transform 0.75s var(--ease);
}
.js .lifecycle__step.is-in {
  opacity: 1;
  transform: none;
}
.js .lifecycle__step:nth-child(2).is-in { transition-delay: 0.06s; }
.js .lifecycle__step:nth-child(3).is-in { transition-delay: 0.12s; }
.js .lifecycle__step:nth-child(4).is-in { transition-delay: 0.18s; }
.lifecycle__badge {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,0.08);
  background: rgba(8, 9, 14, 0.92);
  display: grid;
  place-items: center;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  color: var(--ink-3);
  z-index: 1;
}
.lifecycle__panel {
  padding: clamp(22px, 3vw, 32px);
  border-radius: 18px;
  border: 1px solid rgba(255,255,255,0.06);
  background:
    linear-gradient(135deg, rgba(18, 17, 26, 0.94) 0%, rgba(12, 12, 18, 0.96) 100%);
  backdrop-filter: blur(16px);
}
.lifecycle__label {
  display: block;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--blue-2);
  margin-bottom: 8px;
}
.lifecycle__title {
  margin: 0 0 14px;
  font-family: var(--serif);
  font-size: clamp(24px, 3.2vw, 32px);
  font-weight: 400;
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--ink);
}
.lifecycle__accent {
  font-family: var(--mono);
  color: var(--blue-2);
}
.lifecycle__copy {
  margin: 0 0 18px;
  font-size: 14px;
  line-height: 1.65;
  color: var(--ink-2);
}
.lifecycle__copy strong {
  color: var(--ink);
  font-weight: 500;
}
.lifecycle__stat {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 10px 14px;
  padding: 16px 0;
  border-top: 1px solid rgba(255,255,255,0.06);
  border-bottom: 1px solid rgba(255,255,255,0.06);
  margin-bottom: 18px;
}
.lifecycle__stat-num {
  font-family: var(--mono);
  font-size: clamp(24px, 4vw, 32px);
  color: var(--ink);
  letter-spacing: -0.03em;
}
.lifecycle__stat-meta {
  font-size: 13px;
  color: var(--ink-3);
}
.lifecycle__flow {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}
.lifecycle__flow-token {
  width: 32px;
  height: 32px;
  object-fit: cover;
  border: 1px solid rgba(255,255,255,0.12);
  background: rgba(255,255,255,0.04);
}
.lifecycle__flow-token--round { border-radius: 999px; }
.lifecycle__flow-token--square { border-radius: 8px; }
.lifecycle__flow-mark {
  width: 24px;
  height: 24px;
  opacity: 0.75;
}
.lifecycle__flow-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, rgba(255,255,255,0.04), rgba(255,255,255,0.18), rgba(255,255,255,0.04));
}
.lifecycle__hint {
  margin: 0;
  font-size: 11px;
  color: var(--ink-3);
}
.lifecycle__checks {
  list-style: none;
  margin: 0;
  padding: 16px 0 0;
  border-top: 1px solid rgba(255,255,255,0.06);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.lifecycle__checks li {
  position: relative;
  padding-left: 22px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--ink-2);
}
.lifecycle__checks li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.45em;
  width: 10px;
  height: 6px;
  border-left: 1.5px solid #34d399;
  border-bottom: 1.5px solid #34d399;
  transform: rotate(-45deg);
}
.lifecycle__alloc {
  list-style: none;
  margin: 0;
  padding: 16px 0 0;
  border-top: 1px solid rgba(255,255,255,0.06);
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.lifecycle__alloc li p,
.lifecycle__strategy p {
  margin: 6px 0 0;
  font-size: 11px;
  line-height: 1.55;
  color: var(--ink-3);
}
.lifecycle__alloc-head,
.lifecycle__strategy-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.lifecycle__alloc-name,
.lifecycle__strategy-head > span {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--ink);
}
.lifecycle__alloc-name img,
.lifecycle__strategy-head img {
  border-radius: 4px;
  opacity: 0.85;
}
.lifecycle__alloc-meta {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--ink-3);
  white-space: nowrap;
}
.lifecycle__alloc-meta b {
  color: var(--ink-2);
  font-weight: 500;
  margin-right: 8px;
}
.lifecycle__bar {
  display: block;
  height: 2px;
  margin-top: 8px;
  border-radius: 999px;
  background: rgba(255,255,255,0.06);
  overflow: hidden;
}
.lifecycle__bar i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, rgba(77,126,255,0.35), rgba(77,126,255,0.75));
}
.lifecycle__strategies {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  padding-top: 16px;
  border-top: 1px solid rgba(255,255,255,0.06);
}
.lifecycle__strategy {
  padding: 14px;
  border-radius: 14px;
  border: 1px solid rgba(255,255,255,0.05);
  background: rgba(255,255,255,0.02);
}
.lifecycle__strategy-head b {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--ink-3);
}
.lifecycle__blend {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 12px;
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid rgba(255,255,255,0.06);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.lifecycle__blend b {
  font-family: var(--mono);
  font-size: 14px;
  letter-spacing: 0;
  text-transform: none;
  color: #34d399;
  font-weight: 500;
}
.lifecycle__blend i {
  font-style: normal;
  font-size: 11px;
  letter-spacing: 0;
  text-transform: none;
  color: var(--ink-3);
}
.lifecycle__summary {
  margin-top: clamp(36px, 6vh, 56px);
  padding: clamp(24px, 3vw, 32px);
  border-radius: 18px;
  border: 1px solid rgba(255,255,255,0.06);
  background: rgba(255,255,255,0.02);
}
.js .lifecycle__summary {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease);
}
.js .lifecycle__summary.is-in {
  opacity: 1;
  transform: none;
}
.lifecycle__summary p {
  margin: 12px 0 0;
  font-size: 14px;
  line-height: 1.65;
  color: var(--ink-2);
  max-width: 62ch;
}
.lifecycle__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 22px;
}
.lifecycle__risk {
  margin-top: 18px !important;
  font-size: 11px !important;
  line-height: 1.55 !important;
  color: var(--ink-3) !important;
  max-width: 62ch;
}

@media (max-width: 720px) {
  .lifecycle__rail { display: none; }
  .lifecycle__step { grid-template-columns: 1fr; }
  .lifecycle__badge { margin-bottom: -8px; }
  .lifecycle__strategies { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .lifecycle__step, .lifecycle__summary {
    opacity: 1 !important;
    transform: none !important;
  }
}

/* =============================================================
   LIVE VAULTS — cloth-physics fabric slider
   Three.js canvas mounts in .vaults__scene; HTML metadata sits
   alongside it on desktop and stacks below on mobile.
   ============================================================= */
.vaults {
  --accent: #4d7eff;
  position: relative;
  padding: clamp(80px, 12vh, 140px) 0 clamp(100px, 14vh, 160px);
  /* Just a soft cool accent at the top — the body owns the base color */
  background:
    radial-gradient(ellipse 80% 50% at 50% 30%,
      color-mix(in srgb, var(--accent) 6%, transparent) 0%,
      transparent 60%);
  isolation: isolate;
  overflow: clip;
}
.vaults::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(1px 1px at 18% 28%, rgba(255,255,255,0.35) 50%, transparent 51%),
    radial-gradient(1px 1px at 72% 18%, rgba(255,255,255,0.3) 50%, transparent 51%),
    radial-gradient(1px 1px at 38% 82%, rgba(255,255,255,0.28) 50%, transparent 51%),
    radial-gradient(1px 1px at 88% 68%, rgba(255,255,255,0.32) 50%, transparent 51%);
  background-size: 720px 720px;
  opacity: 0.45;
  z-index: -1;
  pointer-events: none;
}

.vaults__stage {
  position: relative;
  display: grid;
  grid-template-columns: minmax(360px, 0.9fr) minmax(320px, 1fr);
  gap: clamp(40px, 5vw, 80px);
  align-items: center;
  max-width: 1280px;
  margin: clamp(40px, 6vh, 70px) auto 0;
  padding: 0 clamp(20px, 4vw, 60px);
}

.vaults__scene {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 5;
  min-height: 480px;
  /* Stage backdrop: a soft accent ellipse so the cloth has a glow */
  background:
    radial-gradient(ellipse 80% 70% at 50% 30%,
      color-mix(in srgb, var(--accent) 16%, transparent) 0%,
      transparent 70%);
  cursor: grab;
}
.vaults__scene:active { cursor: grabbing; }
.vaults__scene canvas {
  position: absolute;
  inset: 0;
  width: 100% !important;
  height: 100% !important;
  display: block;
}
/* Subtle "rod" at the top from which the cloth hangs */
.vaults__scene::before {
  content: '';
  position: absolute;
  top: 8%;
  left: 12%;
  right: 12%;
  height: 4px;
  background: linear-gradient(90deg,
    transparent 0%,
    color-mix(in srgb, var(--accent) 60%, white 20%) 30%,
    color-mix(in srgb, var(--accent) 60%, white 20%) 70%,
    transparent 100%);
  border-radius: 2px;
  box-shadow: 0 0 12px color-mix(in srgb, var(--accent) 50%, transparent);
  opacity: 0.6;
  z-index: 1;
  pointer-events: none;
}

/* Metadata column */
.vaults__meta {
  position: relative;
  z-index: 2;
}
.vaults__meta-inner {
  --accent: #4d7eff;
  display: flex;
  flex-direction: column;
  gap: 18px;
  transition: opacity 0.45s var(--ease), transform 0.45s var(--ease);
}
.vaults__creator {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: lowercase;
  color: rgba(220, 220, 230, 0.55);
}
.vaults__badge {
  display: inline-block;
  align-self: flex-start;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(216, 166, 74, 0.92);
  border: 1px solid rgba(216, 166, 74, 0.28);
  border-radius: 999px;
  padding: 6px 12px;
  background: rgba(216, 166, 74, 0.08);
}
.vaults__name {
  font-family: var(--serif);
  font-size: clamp(36px, 4.4vw, 56px);
  font-weight: 400;
  line-height: 1.05;
  letter-spacing: -0.015em;
  margin: 0;
  background: linear-gradient(180deg,
    rgba(248, 245, 235, 0.96) 0%,
    rgba(220, 220, 230, 0.85) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}
.vaults__pitch {
  font-size: 15px;
  line-height: 1.65;
  color: rgba(200, 200, 215, 0.7);
  margin: 0;
  max-width: 45ch;
}
.vaults__stats {
  list-style: none;
  padding: 24px 0 0;
  margin: 12px 0 0;
  border-top: 1px solid rgba(255, 255, 255, 0.06);
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 18px 28px;
}
.vaults__stats li {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.vaults__stats span {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(200, 200, 215, 0.45);
}
.vaults__stats b {
  font-family: var(--serif);
  font-size: clamp(22px, 2.2vw, 28px);
  font-weight: 400;
  letter-spacing: -0.01em;
  color: rgba(248, 245, 235, 0.96);
  font-feature-settings: 'tnum' 1, 'lnum' 1;
}
.vaults__stats--demo {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.vaults__stat-accent {
  color: rgba(216, 166, 74, 0.95) !important;
  -webkit-text-fill-color: rgba(216, 166, 74, 0.95);
  background: none;
}
.vaults__ticker {
  font-style: italic;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--accent) 30%, white 40%) 0%,
    var(--accent) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}
.vaults__disclaimer {
  margin: 4px 0 0;
  font-size: 12px;
  line-height: 1.5;
  color: rgba(200, 200, 215, 0.72);
}
.vaults__disclaimer a {
  color: rgba(155, 180, 255, 0.92);
  text-decoration: none;
  border-bottom: 1px solid rgba(155, 180, 255, 0.35);
}
.vaults__disclaimer a:hover {
  color: rgba(200, 210, 255, 0.98);
}

/* Slider controls */
.vaults__controls {
  position: absolute;
  bottom: -54px;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  z-index: 4;
}
.vaults__nav {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(20, 18, 28, 0.85);
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: rgba(235, 235, 245, 0.85);
  display: grid;
  place-items: center;
  cursor: pointer;
  transition: all 0.3s var(--ease);
  backdrop-filter: blur(12px);
}
.vaults__nav svg { width: 18px; height: 18px; }
.vaults__nav:hover {
  background: rgba(28, 24, 18, 0.9);
  border-color: var(--accent);
  color: rgba(255, 255, 255, 0.95);
  transform: translateY(-1px);
  box-shadow: 0 0 24px -4px color-mix(in srgb, var(--accent) 60%, transparent);
}
.vaults__nav:active { transform: translateY(0); }
.vaults__pager {
  font-family: var(--serif);
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: 18px;
  letter-spacing: 0.04em;
  font-feature-settings: 'tnum' 1, 'lnum' 1;
}
.vaults__pager-current {
  color: rgba(248, 245, 235, 0.96);
  font-weight: 400;
  min-width: 24px;
  text-align: center;
}
.vaults__pager-rule {
  width: 28px;
  height: 1px;
  background: rgba(255, 255, 255, 0.18);
}
.vaults__pager-total {
  color: rgba(200, 200, 215, 0.5);
}

@media (max-width: 860px) {
  .vaults__stage { grid-template-columns: 1fr; }
  .vaults__scene { min-height: 380px; aspect-ratio: 4 / 5; }
  .vaults__controls {
    position: static;
    margin-top: 28px;
  }
  .vaults__name { font-size: clamp(28px, 7vw, 38px); }
  .vaults__stats--demo { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 10px; }
  .vaults__stats--demo b { font-size: clamp(16px, 4vw, 22px); }
  .vaults__disclaimer { font-size: 11px; }
}
@media (prefers-reduced-motion: reduce) {
  .vaults__meta-inner { transition: none; }
}

/* =============================================================
   CTA — wordmark lockup + gold waitlist pill + BUILT WITH row
   The page closer. Renaissance-style "4626.fun" wordmark with
   silver/platinum gradient, gold gradient JOIN THE WAITLIST pill,
   then the partner row at ~50% opacity that lifts on hover.
   ============================================================= */
.cta__lockup {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  margin: 0 auto 36px;
}
.cta__wordmark {
  font-family: var(--serif);
  font-size: clamp(56px, 7vw, 88px);
  font-weight: 400;
  line-height: 1;
  letter-spacing: -0.025em;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.96) 0%,
      rgba(220, 220, 230, 0.85) 40%,
      rgba(170, 170, 185, 0.7) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}
.cta__wordmark em {
  font-style: italic;
  background: linear-gradient(180deg, #fbe5a3 0%, #d8a64a 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}
.cta__sub-lockup {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: rgba(220, 220, 230, 0.55);
}

.cta__form--waitlist {
  margin-top: 8px;
  justify-content: center;
}
/* Gold pill button (Renaissance gradient) */
.btn--gold {
  background: linear-gradient(180deg, #fde58a 0%, #d8a64a 50%, #b18028 100%);
  color: #1a1206;
  border: 1px solid rgba(216, 166, 74, 0.6);
  font-weight: 600;
  letter-spacing: 0.02em;
  padding: 14px 28px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), filter 0.3s var(--ease);
  box-shadow:
    0 8px 24px -4px rgba(216, 166, 74, 0.4),
    0 0 0 1px rgba(255, 255, 255, 0.18) inset;
}
.btn--gold:hover {
  transform: translateY(-2px);
  filter: brightness(1.05);
  box-shadow:
    0 14px 32px -4px rgba(216, 166, 74, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.24) inset;
}
.btn--gold:active { transform: translateY(0); filter: brightness(0.96); }
.btn--gold[disabled].is-success {
  background: linear-gradient(180deg, #b8e6c4 0%, #4ca270 100%);
  color: #0a1f12;
  border-color: rgba(76, 162, 112, 0.6);
  cursor: default;
  transform: none;
}

.cta__caption {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: rgba(200, 200, 215, 0.6);
  margin: 22px 0 0;
  letter-spacing: 0.005em;
}
.cta__caption em { font-style: italic; }

/* BUILT WITH row */
.cta__builtwith {
  margin-top: clamp(60px, 9vh, 90px);
  padding-top: clamp(40px, 6vh, 60px);
  border-top: 1px solid rgba(255, 255, 255, 0.06);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
}
.cta__builtwith-label {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: rgba(200, 200, 215, 0.4);
}
.cta__builtwith-row {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: clamp(28px, 4vw, 56px);
}
.cta__builtwith-row li {
  height: 28px;
  display: grid;
  place-items: center;
  opacity: 0.45;
  filter: grayscale(0.4);
  transition: opacity 0.4s var(--ease), filter 0.4s var(--ease), transform 0.4s var(--ease);
}
.cta__builtwith-row li:hover {
  opacity: 1;
  filter: grayscale(0);
  transform: translateY(-2px);
}
.cta__builtwith-row img {
  height: 100%;
  width: auto;
  max-width: 110px;
  object-fit: contain;
  display: block;
}

@media (max-width: 720px) {
  .cta__builtwith-row { gap: 22px; }
  .cta__builtwith-row li { height: 22px; }
  .cta__wordmark { font-size: 48px; }
}

/* =============================================================
   PAGE-FOLD TRANSITION (Phase 4) — Launch App click folds the
   landing page away in 3D and reveals a coming-soon panel.
   Pure CSS 3D transforms — no html2canvas required. Reverses
   on ESC, close button, or backdrop click.
   ============================================================= */

/* Body during fold: 3D perspective enabled, sections rotate away.
   Note: perspective on body would create a stacking context that traps
   our position:fixed overlay. We apply perspective to a wrapper instead
   — but since we don't have a wrapper, we use 'transform: perspective()'
   inline on each transformed child. */
body.is-folding {
  overflow: hidden;
  /* Keep the page background visible during the fold (don't switch to a
     different dark color — that flashes). The fold reveals the same
     unified gradient that was always there. */
}
/* All transformed children share the same easing curve and timing so the
   fold reads as one coordinated motion, not three independent animations. */
html body.is-folding > main,
html body.is-folding > footer,
html body.is-folding > .topbar,
html body.is-folding > header,
html body.is-folding > #audio-toggle {
  transform-origin: 50% 0 !important;
  transition:
    transform 1.05s cubic-bezier(0.76, 0, 0.24, 1),
    opacity   0.8s  cubic-bezier(0.76, 0, 0.24, 1),
    filter    1.05s cubic-bezier(0.76, 0, 0.24, 1) !important;
  will-change: transform, opacity, filter;
  pointer-events: none;
}
/* Apply the perspective directly inside each transform via
   `perspective()` function so we DON'T create a stacking context on body. */
html body.is-folding > main {
  transform: perspective(2200px) translateY(-10vh) rotateX(72deg) scale(0.94) !important;
  opacity: 0 !important;             /* fade fully so the gradient reads */
  filter: blur(4px) !important;
}
html body.is-folding > footer {
  transform: perspective(2200px) translateY(30vh) rotateX(-72deg) scale(0.94) !important;
  opacity: 0 !important;
}
html body.is-folding > .topbar,
html body.is-folding > header {
  transform: perspective(2200px) translateY(-14vh) rotateX(80deg) !important;
  opacity: 0 !important;
}

/* The coming-soon overlay panel — transparent background lets the body's
   unified gradient show through, so there's no visible color shift
   between the page and the fold panel. */
.fold {
  position: fixed;
  inset: 0;
  z-index: 200;
  background:
    radial-gradient(ellipse 80% 60% at 50% 40%,
      rgba(216, 166, 74, 0.06) 0%,
      transparent 70%);
  /* No solid base color — the body gradient already handles it. */
  display: grid;
  place-items: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.7s cubic-bezier(0.76, 0, 0.24, 1);
}
.fold.is-open {
  opacity: 1;
  pointer-events: auto;
}
.fold::before {
  /* Subtle dot-grid texture */
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(1px 1px at 18% 22%, rgba(255,255,255,0.4) 50%, transparent 51%),
    radial-gradient(1px 1px at 76% 14%, rgba(255,255,255,0.32) 50%, transparent 51%),
    radial-gradient(1px 1px at 36% 76%, rgba(255,255,255,0.3) 50%, transparent 51%),
    radial-gradient(1px 1px at 84% 64%, rgba(255,255,255,0.34) 50%, transparent 51%);
  background-size: 720px 720px;
  opacity: 0.5;
}
.fold__panel {
  position: relative;
  z-index: 1;
  width: min(560px, 90vw);
  padding: clamp(36px, 5vw, 56px);
  background:
    linear-gradient(135deg,
      rgba(20, 18, 28, 0.92) 0%,
      rgba(14, 13, 22, 0.94) 100%);
  border: 1px solid rgba(216, 166, 74, 0.22);
  border-radius: 22px;
  backdrop-filter: blur(20px);
  display: flex;
  flex-direction: column;
  gap: 18px;
  box-shadow:
    0 30px 80px -20px rgba(0, 0, 0, 0.7),
    0 0 0 1px rgba(255, 255, 255, 0.04) inset,
    0 0 80px -10px rgba(216, 166, 74, 0.18);
  transform: translateY(20px) scale(0.97);
  opacity: 0;
  transition: transform 0.7s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.6s var(--ease);
  transition-delay: 0.1s;
}
.fold.is-open .fold__panel {
  transform: translateY(0) scale(1);
  opacity: 1;
}
.fold__panel::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(251, 229, 163, 0.55) 50%,
    transparent 100%);
}
.fold__eyebrow {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(251, 229, 163, 0.7);
}
.fold__title {
  font-family: var(--serif);
  font-size: clamp(36px, 4.4vw, 52px);
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.015em;
  margin: 0;
  color: rgba(248, 245, 235, 0.96);
}
.fold__title em {
  font-style: italic;
  background: linear-gradient(180deg, #fbe5a3 0%, #d8a64a 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}
.fold__copy {
  font-size: 15px;
  line-height: 1.65;
  color: rgba(200, 200, 215, 0.75);
  margin: 0;
}
.fold__form {
  display: flex;
  gap: 10px;
  margin-top: 12px;
  flex-wrap: wrap;
}
.fold__form input {
  flex: 1;
  min-width: 180px;
  padding: 14px 18px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 999px;
  color: rgba(245, 240, 230, 0.96);
  font-size: 14px;
  font-family: inherit;
  outline: none;
  transition: border-color 0.3s var(--ease), background 0.3s var(--ease);
}
.fold__form input:focus {
  border-color: rgba(216, 166, 74, 0.5);
  background: rgba(255, 255, 255, 0.06);
}
.fold__close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.08);
  color: rgba(220, 220, 230, 0.7);
  display: grid;
  place-items: center;
  cursor: pointer;
  transition: all 0.3s var(--ease);
}
.fold__close:hover {
  background: rgba(255, 255, 255, 0.08);
  color: rgba(255, 255, 255, 0.95);
  transform: scale(1.05);
}

@media (prefers-reduced-motion: reduce) {
  body.is-folding > main,
  body.is-folding > footer,
  body.is-folding > .topbar,
  body.is-folding > header {
    transition: opacity 0.3s ease;
    transform: none;
  }
  body.is-folding > main { opacity: 0.05; filter: blur(0); }
}

/* =============================================================
   MOBILE OPTIMIZATIONS — comprehensive pass for ≤640px screens.
   Fixes section padding, typography sizing, card layouts, the
   bridge between the anatomy cards, and the vaults section.
   Stacks above all earlier responsive rules so it wins.
   ============================================================= */
@media (max-width: 640px) {

  /* --- Global section padding compression --- */
  .anatomy,
  .lifecycle,
  .vaults,
  .how,
  .features,
  .cta {
    padding-top: clamp(60px, 9vh, 90px);
    padding-bottom: clamp(60px, 9vh, 90px);
  }
  .section__head {
    padding: 0 20px;
  }
  .section__title {
    font-size: clamp(28px, 8vw, 38px);
    line-height: 1.1;
    letter-spacing: -0.02em;
  }
  .section__sub {
    font-size: 14px;
    line-height: 1.55;
  }

  /* --- Anatomy cards --- */
  .anatomy__cards {
    padding: 0 20px;
    gap: 14px;
    margin: 28px auto 56px;
  }
  .tokencard {
    padding: 24px 22px;
    gap: 14px;
    border-radius: 16px;
  }
  .tokencard__head {
    flex-wrap: wrap;
    gap: 8px;
  }
  .tokencard__role {
    font-size: 10px;
    letter-spacing: 0.24em;
  }
  .tokencard__chip {
    font-size: 9px;
    padding: 4px 8px;
  }
  /* Make both avatars the same comfortable size on mobile (was clamping
     down to 80px, but the share's border + glow made it appear smaller). */
  .tokencard__avatar {
    width: 88px;
    height: 88px;
    margin: 2px 0 4px;
  }
  .tokencard__avatar--square {
    border-width: 2px;
  }
  .tokencard__amount {
    font-size: 38px;
  }
  .tokencard__ticker {
    font-size: 17px;
  }
  .tokencard__copy {
    font-size: 13px;
    line-height: 1.55;
  }
  .tokencard__meta {
    padding-top: 14px;
    gap: 7px;
  }
  .tokencard__meta li b {
    font-size: 12px;
    text-align: right;
    word-break: keep-all;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 60%;
  }

  /* --- Anatomy bridge (the connector between the two cards) ---
     Re-architect for stacked cards: a thin gold rule line + ERC-4626
     chip centred horizontally between cards. No more rotated SVG. */
  .anatomy__bridge {
    width: 100%;
    height: auto;
    flex-direction: column;
    margin: 0;
    padding: 4px 0;
    gap: 0;
  }
  .anatomy__bridge svg {
    display: none;   /* the rotated-svg approach was messy on mobile */
  }
  .anatomy__bridge::before,
  .anatomy__bridge::after {
    content: '';
    width: 1px;
    height: 22px;
    background: linear-gradient(180deg,
      transparent 0%,
      rgba(155, 180, 255, 0.4) 30%,
      rgba(251, 229, 163, 0.7) 70%,
      rgba(216, 166, 74, 0.4) 100%);
  }
  .anatomy__bridge::after {
    background: linear-gradient(180deg,
      rgba(216, 166, 74, 0.4) 0%,
      rgba(251, 229, 163, 0.7) 30%,
      rgba(155, 180, 255, 0.4) 70%,
      transparent 100%);
  }
  .anatomy__bridge-label {
    font-size: 9px;
    padding: 5px 10px;
    margin: 4px 0;
    background: rgba(251, 229, 163, 0.06);
    border: 1px solid rgba(251, 229, 163, 0.22);
    color: rgba(251, 229, 163, 0.85);
    border-radius: 999px;
  }

  /* --- Allocation flow diagram on mobile --- */
  .flow {
    padding: 0 16px;
  }
  .flow__head {
    margin-bottom: 32px;
  }
  /* Keep deposit number + unit on one line, only meta caption wraps */
  .flow__title {
    font-size: clamp(24px, 7vw, 32px);
    flex-direction: row;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: center;
    align-items: baseline;
  }
  .flow__deposit-meta {
    font-size: 11px;
    margin-top: 10px;
  }
  .flow__diagram {
    gap: 22px;
    padding: 16px 0 0;
  }
  /* Layout: hub on top, then both columns stacked, sharing same alignment */
  .flow__hub {
    width: 132px;
    height: 132px;
    margin: 0 auto;
  }
  .flow__column {
    gap: 10px;
  }
  .flow__column-title {
    font-size: 9px;
    letter-spacing: 0.22em;
    text-align: center !important;
  }
  .flow__node {
    padding: 12px 14px;
    gap: 12px;
    flex-direction: row;
    text-align: left;
  }
  .flow__column--left .flow__node {
    flex-direction: row;
  }
  .flow__node-pct {
    font-size: 22px;
    min-width: 46px;
  }
  .flow__node-pct i { font-size: 12px; }
  .flow__node-label { font-size: 13px; }
  .flow__node-meta { font-size: 10px; }
  .flow__node-logo {
    width: 32px;
    height: 32px;
    border-radius: 8px;
  }

  /* --- LIVE VAULTS section --- */
  .vaults__stage {
    padding: 0 16px;
    gap: 24px;
    margin-top: 32px;
  }
  .vaults__scene {
    aspect-ratio: 4 / 5;
    min-height: 0;
    height: 56vh;            /* keep cloth visible without dominating */
    max-height: 480px;
  }
  .vaults__name {
    font-size: clamp(26px, 8vw, 34px);
    line-height: 1.08;
  }
  .vaults__pitch {
    font-size: 14px;
    line-height: 1.55;
  }
  /* Demo stats: three compact columns on mobile */
  .vaults__stats--demo {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px 10px;
    padding-top: 18px;
    margin-top: 8px;
  }
  .vaults__stats span { font-size: 9px; letter-spacing: 0.22em; }
  .vaults__stats b {
    font-size: 22px;
    line-height: 1.1;
  }
  /* Slider controls below cloth */
  .vaults__controls {
    position: static;
    margin-top: 18px;
    gap: 18px;
  }
  .vaults__nav {
    width: 40px;
    height: 40px;
  }
  .vaults__pager {
    font-size: 16px;
    gap: 12px;
  }

  /* --- How it works steps --- */
  .how .step {
    padding: 28px 22px;
  }
  .how .step__title {
    font-size: 22px;
  }
  .how .step__copy {
    font-size: 13px;
  }

  /* --- Features grid --- */
  .features__grid {
    grid-template-columns: 1fr;
    gap: 14px;
    padding: 0 20px;
  }
  .card {
    padding: 24px 22px;
  }

  /* --- CTA --- */
  .cta__inner { padding: 0 20px; }
  .cta__wordmark { font-size: 56px; }
  .cta__sub-lockup { font-size: 10px; letter-spacing: 0.3em; }
  .cta__title { font-size: clamp(28px, 8vw, 38px); }
  .cta__sub { font-size: 14px; }
  .cta__form--waitlist {
    flex-direction: column;
    gap: 10px;
  }
  .cta__form--waitlist input {
    width: 100%;
    box-sizing: border-box;
  }
  .cta__form--waitlist .btn--gold {
    width: 100%;
    justify-content: center;
    padding: 16px 28px;
  }
  .cta__caption { font-size: 12px; padding: 0 8px; }
  .cta__builtwith { margin-top: 56px; padding-top: 36px; }
  /* Stack BUILT WITH logos in a 3-up grid so they don't collide on mobile */
  .cta__builtwith-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 24px 16px;
    padding: 0 8px;
    max-width: 380px;
    margin: 0 auto;
  }
  .cta__builtwith-row li {
    height: 26px;
    width: 100%;
  }
  .cta__builtwith-row img {
    max-width: 100%;
    max-height: 26px;
    object-fit: contain;
  }

  /* --- Hero typography compression --- */
  .hero__title { font-size: clamp(38px, 11vw, 56px); line-height: 1.05; }
  .hero__sub { font-size: 14px; line-height: 1.55; padding: 0 12px; }
  .hero__ctas {
    flex-direction: column;
    gap: 10px;
    width: 100%;
    padding: 0 24px;
  }
  .hero__ctas .pill {
    width: 100%;
    justify-content: center;
  }
}

/* Even tighter for very small phones */
@media (max-width: 380px) {
  .section__title { font-size: 26px; }
  .tokencard__amount { font-size: 32px; }
  .vaults__name { font-size: 24px; }
  .cta__wordmark { font-size: 48px; }
  .flow__node-pct { font-size: 20px; min-width: 42px; }
}

/* =============================================================
   UN-BOXING PASS — sections flow into each other instead of
   sitting as discrete tiles. Cards lose their solid borders
   and become editorial layouts on the unified background.
   ============================================================= */

/* ---- CTA: remove the giant bordered card entirely ---- */
.cta__inner {
  border: 0 !important;
  border-radius: 0 !important;
  padding: clamp(48px, 8vw, 96px) clamp(24px, 5vw, 64px) !important;
  background: transparent !important;
  overflow: visible !important;
}
/* Replace the corner blur orbs with a single soft accent that bleeds
   into the surrounding page (not contained to a card) */
.cta__inner::before {
  width: 60vw !important;
  height: 60vw !important;
  max-width: 720px;
  max-height: 720px;
  top: -30vw !important;
  left: 50% !important;
  transform: translateX(-50%);
  background: radial-gradient(circle, rgba(216, 166, 74, 0.10), transparent 65%) !important;
  filter: blur(80px) !important;
  opacity: 1 !important;
}
.cta__inner::after {
  display: none !important;     /* the second orb felt redundant once unboxed */
}
/* Soft hairline rule above the wordmark to separate from previous section
   without using a hard card edge */
.cta__lockup {
  position: relative;
  padding-top: 48px;
}
.cta__lockup::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: clamp(60px, 18vw, 140px);
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(216, 166, 74, 0.45) 50%,
    transparent 100%);
}

/* ---- BUILT WITH section: lose the hard top border, replace with
        a wider soft fade so it dissolves into the page ---- */
.cta__builtwith {
  border-top: 0 !important;
  position: relative;
}
.cta__builtwith::before {
  content: '';
  position: absolute;
  top: 0;
  left: 12%;
  right: 12%;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(255, 255, 255, 0.08) 50%,
    transparent 100%);
}

/* ---- Features grid: ditch the bordered box, use editorial layout ---- */
.grid {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  overflow: visible !important;
  gap: 1px !important;
  /* The 1px gap with a faint gradient creates the cell divider effect */
  background:
    linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.04), transparent) !important;
}
.card {
  background: transparent !important;
  /* Hairline borders only between cells, no card chrome */
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.card:hover {
  background: rgba(255, 255, 255, 0.015) !important;
}
.card:last-child { border-bottom: 0; }
/* Restore visual separators in the grid: thin vertical lines between cards */
@media (min-width: 720px) {
  .grid {
    background: transparent !important;
  }
  .card {
    border-right: 1px solid rgba(255, 255, 255, 0.05);
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  }
  .card:nth-child(3n) { border-right: 0; }
}

/* ---- Tokencards: keep the dark glass but lose the harsh border ---- */
.tokencard {
  border: 0 !important;
  /* The card now reads via its dark fill + top hairline + soft accent halo,
     not via a hard rectangular outline */
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.04) inset !important;
}
.tokencard:hover {
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.10) inset,
    0 20px 60px -20px rgba(0, 0, 0, 0.6) !important;
}
.tokencard--share {
  box-shadow:
    0 0 0 1px rgba(110, 145, 255, 0.32) inset !important;
}
.tokencard--share:hover {
  box-shadow:
    0 0 0 1px rgba(110, 145, 255, 0.5) inset,
    0 20px 60px -20px rgba(0, 0, 0, 0.6) !important;
}

/* ---- Section-to-section transitions: soft gradient dissolve ---- */
.page-flow-section {
  position: relative;
}
.page-flow-section::before,
.page-flow-section::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  height: clamp(80px, 12vh, 120px);
  pointer-events: none;
  z-index: 2;
}
.page-flow-section::before {
  top: 0;
  background: linear-gradient(180deg, var(--bg) 0%, transparent 100%);
  opacity: 0.85;
}
.page-flow-section::after {
  bottom: 0;
  background: linear-gradient(0deg, var(--bg) 0%, transparent 100%);
  opacity: 0.85;
}
.reveal.page-flow-section::before { opacity: 0.55; }
.mkt-scrollstory.page-flow-section::before { opacity: 0.65; }

/* Subtle ambient tone per section zone */
.mkt-scrollstory.page-flow-section {
  background:
    radial-gradient(ellipse 80% 50% at 50% 20%, rgba(77, 126, 255, 0.04) 0%, transparent 55%);
}
#vaults.page-flow-section {
  background:
    radial-gradient(ellipse 70% 45% at 30% 30%, rgba(216, 166, 74, 0.035) 0%, transparent 50%);
}
#features.page-flow-section {
  background:
    radial-gradient(ellipse 75% 50% at 70% 25%, rgba(77, 126, 255, 0.03) 0%, transparent 55%);
}
.cta.page-flow-section {
  background:
    radial-gradient(ellipse 90% 60% at 50% 100%, rgba(77, 126, 255, 0.05) 0%, transparent 60%);
}

/* Legacy aliases — repointed to page-flow-section */
.anatomy::after,
.lifecycle::after,
.vaults::after,
.how::after,
.features::after {
  content: none;
}

/* ---- Mobile-specific un-boxing ---- */
@media (max-width: 640px) {
  /* Remove all card chrome on mobile — content reads as a flowing
     editorial column, not stacked tiles */
  .cta__inner {
    padding: clamp(48px, 10vw, 72px) 0 !important;
  }
  /* The top hairline above the wordmark is visible on mobile too */
  .cta__lockup { padding-top: 36px; }
  .cta__lockup::before { width: 80px; }

  /* Anatomy cards: keep dark fill but soften further on mobile,
     less padding, less border */
  .tokencard {
    padding: 22px 20px !important;
    border-radius: 14px;
  }

  /* Built with row: more breathing room above */
  .cta__builtwith { margin-top: 72px !important; padding-top: 48px !important; }

  /* Section bleed: extend cross-fade on small screens */
  .page-flow-section::before,
  .page-flow-section::after {
    height: clamp(100px, 16vh, 140px);
    opacity: 0.92;
  }
}

/* =============================================================
   Mobile optimizations (added in feat/mobile-optimization)
   ============================================================= */

/* ---- Horizontal overflow guard ----------------------------------
   The body already had `overflow-x: clip` to prevent horizontal scroll
   without breaking position:sticky / window.scrollY. But position:fixed
   descendants (e.g. .bg-layers) escape body's clip and can re-introduce
   horizontal scroll on the <html> element. We add overflow-x: clip on
   <html> too so any stray fixed/absolute layer truly cannot widen the
   document. `clip` (not `hidden`) preserves the scroll container intact. */
html {
  overflow-x: clip;
}

/* ---- Constrain decorative starfield/inset layers on mobile ------
   .reveal__starlayer uses `inset: -10%` for a soft over-bleed at desktop
   sizes. On a 390px viewport that translates to ~78px of overflow on
   each side, which combined with overflow:visible on parents is one of
   the main sources of mobile horizontal overflow. Tighten the bleed
   on small screens so layers stay inside the viewport. */
@media (max-width: 720px) {
  .reveal__starlayer { inset: 0; }
}

/* ---- iOS safe-area insets ---------------------------------------
   Account for notch / dynamic island / home indicator so floating UI
   doesn't get clipped or sit underneath system gestures. */
.nav {
  padding-top: max(22px, env(safe-area-inset-top, 0px));
  padding-left: max(clamp(24px, 4vw, 56px), env(safe-area-inset-left, 0px));
  padding-right: max(clamp(24px, 4vw, 56px), env(safe-area-inset-right, 0px));
}
#audio-toggle {
  bottom: max(clamp(14px, 2vw, 24px), env(safe-area-inset-bottom, 0px));
  right: max(clamp(14px, 2vw, 24px), env(safe-area-inset-right, 0px));
}
.foot__row {
  padding-bottom: max(0px, env(safe-area-inset-bottom, 0px));
}

/* ---- Mobile hamburger trigger -----------------------------------
   Hidden by default (desktop); shown only when the inline links are
   collapsed (<= 740px). Sized 44x44 to meet WCAG 2.2 / Apple HIG
   minimum tap-target guidance. */
.nav__hamburger {
  display: none;
  position: relative;
  width: 44px;
  height: 44px;
  padding: 0;
  margin: 0;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 10px;
  color: var(--ink);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: border-color 0.2s var(--ease), background 0.2s var(--ease);
}
.nav__hamburger:hover { border-color: rgba(255, 255, 255, 0.22); }
.nav__hamburger:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px rgba(232, 185, 100, 0.5);
}
.nav__hamburger-bar {
  position: absolute;
  left: 12px;
  right: 12px;
  height: 1.5px;
  background: currentColor;
  border-radius: 2px;
  transition: transform 0.28s var(--ease), opacity 0.18s var(--ease), top 0.28s var(--ease);
}
.nav__hamburger-bar:nth-child(1) { top: 14px; }
.nav__hamburger-bar:nth-child(2) { top: 21px; }
.nav__hamburger-bar:nth-child(3) { top: 28px; }
.nav__hamburger.is-open .nav__hamburger-bar:nth-child(1) {
  top: 21px;
  transform: rotate(45deg);
}
.nav__hamburger.is-open .nav__hamburger-bar:nth-child(2) { opacity: 0; }
.nav__hamburger.is-open .nav__hamburger-bar:nth-child(3) {
  top: 21px;
  transform: rotate(-45deg);
}
@media (max-width: 740px) {
  .nav__hamburger { display: inline-flex; }
  /* On mobile, hide Launch App pill in the nav (waitlist CTA lives in
     the drawer + the section below the hero). The hamburger is the
     single mobile entry point. */
  .nav__cta { display: none; }
  /* Slightly tighter horizontal padding on the nav itself so the
     hamburger has room to breathe at the right edge. */
  .nav { gap: 12px; }
}

/* ---- Mobile nav drawer ------------------------------------------
   Full-viewport overlay shown when hamburger is tapped. Uses a slide-in
   panel from the right; backdrop is a translucent blur so the page
   feels paused, not replaced. */
.nav-drawer {
  position: fixed;
  inset: 0;
  z-index: 200;     /* above audio toggle (60) and fold overlay */
  background: rgba(6, 7, 13, 0);
  backdrop-filter: blur(0px);
  -webkit-backdrop-filter: blur(0px);
  transition: background 0.28s var(--ease), backdrop-filter 0.28s var(--ease);
  display: none;
}
@media (max-width: 740px) {
  .nav-drawer { display: block; }
}
.nav-drawer[hidden] { display: none !important; }
.nav-drawer.is-open {
  background: rgba(6, 7, 13, 0.78);
  backdrop-filter: blur(16px) saturate(1.1);
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
}
.nav-drawer__panel {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(86vw, 380px);
  background: linear-gradient(180deg,
    rgba(14, 13, 22, 0.98) 0%,
    rgba(10, 9, 18, 0.98) 100%);
  border-left: 1px solid rgba(255, 255, 255, 0.06);
  padding:
    max(24px, env(safe-area-inset-top, 0px))
    max(20px, env(safe-area-inset-right, 0px))
    max(24px, env(safe-area-inset-bottom, 0px))
    20px;
  display: flex;
  flex-direction: column;
  gap: 24px;
  transform: translateX(100%);
  transition: transform 0.32s cubic-bezier(0.32, 0.72, 0.24, 1);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.nav-drawer.is-open .nav-drawer__panel { transform: translateX(0); }

.nav-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.nav-drawer__close {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 10px;
  color: var(--ink);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: border-color 0.2s var(--ease), background 0.2s var(--ease);
}
.nav-drawer__close:hover { border-color: rgba(255, 255, 255, 0.22); }
.nav-drawer__close:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px rgba(232, 185, 100, 0.5);
}

.nav-drawer__links {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-top: 8px;
}
.nav-drawer__links a {
  display: flex;
  align-items: center;
  min-height: 52px;
  padding: 0 4px;
  font-family: var(--mono);
  font-size: 14px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink);
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  transition: color 0.2s var(--ease), padding-left 0.2s var(--ease);
}
.nav-drawer__links a:hover,
.nav-drawer__links a:active {
  color: var(--gold);
  padding-left: 8px;
}
.nav-drawer__links a:last-child { border-bottom: 0; }

.nav-drawer__cta {
  margin-top: 12px;
  width: 100%;
  justify-content: center;
}

.nav-drawer__social {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 18px;
  padding-top: 18px;
  border-top: 1px solid rgba(255, 255, 255, 0.06);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.nav-drawer__social a {
  color: var(--ink-3);
  transition: color 0.2s var(--ease);
}
.nav-drawer__social a:hover { color: var(--ink); }

/* When the drawer is open, lock body scroll so the page doesn't move
   underneath the panel. Using both overflow:hidden and a position:fixed
   trick to handle Mobile Safari's quirky scroll behavior. */
html.nav-drawer-open,
html.nav-drawer-open body {
  overflow: hidden;
  touch-action: none;
}

/* ---- Mobile-specific spacing tweaks for hero copy ---------------
   On iPhone-class viewports the absolute nav (~80px) plus the 100vh
   3D vault canvas push the headline well below the first scroll. Pull
   the headline copy up a touch so the eyebrow + first phrase peek above
   the fold (signaling there's more to scroll). */
@media (max-width: 480px) {
  .hero__copy {
    margin-top: 40vh !important;
    padding-top: 0 !important;
    padding-bottom: 40px !important;
  }
  .hero__copy .hero__title {
    margin-bottom: 28px !important;
  }
  /* Slightly tighter hero ctas spacing */
  .hero__ctas { gap: 10px !important; }
  .hero__ctas .btn { padding: 14px 20px !important; font-size: 13px !important; }
}

/* ---- Reduced motion: drawer animation ---------------------------- */
@media (prefers-reduced-motion: reduce) {
  .nav-drawer,
  .nav-drawer__panel { transition: none; }
}

/* =============================================================
   MKT — FAQ-aligned marketing sections (glass, dark zinc)
   Mirrors /faq/how-it-works cinematic-section + glass-card.
   ============================================================= */
.mkt-section {
  position: relative;
  padding: clamp(64px, 10vh, 112px) 0;
}
.mkt-section + .mkt-section.page-flow-section,
.page-flow-section + .page-flow-section {
  margin-top: -40px;
}
.mkt-wrap {
  max-width: 56rem;
  margin: 0 auto;
  padding: 0 clamp(16px, 4vw, 24px);
}
.mkt-label {
  display: block;
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #a1a1aa;
  margin-bottom: 10px;
}
.mkt-headline {
  margin: 0 0 16px;
  font-family: var(--serif);
  font-size: clamp(2rem, 5vw, 3.5rem);
  font-weight: 400;
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: #fafafa;
}
.mkt-em {
  font-style: italic;
  color: var(--blue-2);
}
.mkt-br-sm { display: none; }
@media (min-width: 640px) {
  .mkt-br-sm { display: inline; }
}
.mkt-lede {
  margin: 0;
  max-width: 36rem;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.65;
  color: #a1a1aa;
}
.mkt-intro {
  margin-bottom: clamp(40px, 6vh, 56px);
}
.mkt-glass {
  border-radius: 16px;
  border: 1px solid rgba(255, 255, 255, 0.05);
  background: linear-gradient(165deg, rgba(14, 14, 16, 0.88), rgba(8, 8, 10, 0.92));
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.04);
  backdrop-filter: blur(16px);
}
.mkt-copy {
  margin: 0 0 16px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.65;
  color: #a1a1aa;
}
.mkt-copy strong { color: #fafafa; font-weight: 500; }
.mkt-accent { font-family: var(--mono); color: var(--blue-2); }
.mkt-mono { font-family: var(--mono); }
.mkt-hint {
  margin: 0;
  font-size: 11px;
  font-weight: 300;
  color: #71717a;
}
.mkt-hint a { color: #a1a1aa; text-decoration: underline; text-underline-offset: 3px; }
.mkt-hint a:hover { color: #fafafa; }

/* Scroll reveal */
.js .mkt-reveal {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.js .mkt-reveal.is-in {
  opacity: 1;
  transform: none;
}
.js .mkt-step:nth-of-type(2).mkt-reveal.is-in { transition-delay: 0.05s; }
.js .mkt-step:nth-of-type(3).mkt-reveal.is-in { transition-delay: 0.1s; }
.js .mkt-step:nth-of-type(4).mkt-reveal.is-in { transition-delay: 0.15s; }
.js .mkt-feature:nth-child(2).mkt-reveal.is-in { transition-delay: 0.04s; }
.js .mkt-feature:nth-child(3).mkt-reveal.is-in { transition-delay: 0.08s; }
.js .mkt-feature:nth-child(4).mkt-reveal.is-in { transition-delay: 0.12s; }
.js .mkt-feature:nth-child(5).mkt-reveal.is-in { transition-delay: 0.16s; }
.js .mkt-feature:nth-child(6).mkt-reveal.is-in { transition-delay: 0.2s; }

/* Timeline */
.mkt-timeline {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.mkt-timeline__rail {
  position: absolute;
  left: 19px;
  top: 40px;
  bottom: 40px;
  width: 1px;
  background: rgba(255, 255, 255, 0.06);
}
.mkt-step {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.mkt-step__badge {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: #050505;
  display: grid;
  place-items: center;
  font-family: var(--mono);
  font-size: 10px;
  color: #71717a;
  z-index: 1;
}
.mkt-step__panel {
  padding: clamp(22px, 3vw, 32px);
}
.mkt-step__title {
  margin: 0 0 12px;
  font-family: var(--serif);
  font-size: clamp(1.35rem, 2.5vw, 1.75rem);
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: #fafafa;
}
.mkt-stat {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 10px 14px;
  padding: 16px 0;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  margin-bottom: 16px;
}
.mkt-stat__num {
  font-family: var(--mono);
  font-size: clamp(1.4rem, 3vw, 1.85rem);
  color: #fafafa;
  letter-spacing: -0.03em;
}
.mkt-stat__meta { font-size: 13px; color: #71717a; font-weight: 300; }
.mkt-token-flow {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}
.mkt-token-flow__img {
  width: 32px;
  height: 32px;
  object-fit: cover;
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: rgba(255, 255, 255, 0.03);
}
.mkt-token-flow__img--round { border-radius: 999px; }
.mkt-token-flow__img--square { border-radius: 8px; }
.mkt-token-flow__mark { width: 24px; height: 24px; opacity: 0.7; }
.mkt-token-flow__line {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.14), transparent);
}
.mkt-checks {
  list-style: none;
  margin: 0;
  padding: 16px 0 0;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.mkt-checks li {
  position: relative;
  padding-left: 22px;
  font-size: 13px;
  font-weight: 300;
  line-height: 1.55;
  color: #a1a1aa;
}
.mkt-checks li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.45em;
  width: 10px;
  height: 6px;
  border-left: 1.5px solid #34d399;
  border-bottom: 1.5px solid #34d399;
  transform: rotate(-45deg);
}
.mkt-alloc {
  list-style: none;
  margin: 0;
  padding: 16px 0 0;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.mkt-alloc li p,
.mkt-strategy p {
  margin: 6px 0 0;
  font-size: 11px;
  font-weight: 300;
  line-height: 1.55;
  color: #71717a;
}
.mkt-alloc__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.mkt-alloc__name {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 300;
  color: #fafafa;
}
.mkt-alloc__name img { border-radius: 4px; opacity: 0.85; }
.mkt-alloc__meta {
  font-family: var(--mono);
  font-size: 11px;
  color: #71717a;
  white-space: nowrap;
}
.mkt-alloc__meta b { color: #a1a1aa; font-weight: 500; margin-right: 8px; }
.mkt-bar {
  display: block;
  height: 2px;
  margin-top: 8px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.05);
  overflow: hidden;
}
.mkt-bar i {
  display: block;
  height: 100%;
  width: 0;
  border-radius: inherit;
  background: rgba(59, 130, 246, 0.45);
  transition: width 1.1s var(--ease);
}
.mkt-reveal.is-in .mkt-bar i { width: var(--pct, 0%); }
.mkt-strategy-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  padding-top: 16px;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
}
.mkt-strategy {
  padding: 14px;
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.05);
  background: rgba(255, 255, 255, 0.02);
}
.mkt-blend {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 12px;
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
}
.mkt-blend b {
  font-family: var(--mono);
  font-size: 14px;
  color: #34d399;
  font-weight: 500;
}
.mkt-blend > i {
  font-style: normal;
  font-size: 11px;
  color: #71717a;
  font-weight: 300;
}
.mkt-more {
  margin-top: clamp(32px, 5vh, 48px);
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.mkt-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: fit-content;
  padding: 12px 18px;
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: rgba(255, 255, 255, 0.02);
  font-size: 13px;
  font-weight: 500;
  color: #fafafa;
  text-decoration: none;
  transition: border-color 0.2s, background 0.2s;
}
.mkt-link:hover {
  border-color: rgba(255, 255, 255, 0.14);
  background: rgba(255, 255, 255, 0.04);
}
.mkt-disclaimer {
  margin: 0;
  max-width: 42rem;
  font-size: 11px;
  font-weight: 300;
  line-height: 1.55;
  color: #71717a;
}

/* Vault previews */
.mkt-vaults { display: flex; flex-direction: column; gap: 20px; }
.mkt-vault {
  padding: clamp(22px, 3vw, 28px);
  border-color: color-mix(in srgb, var(--vault-accent, #4d7eff) 18%, rgba(255, 255, 255, 0.05));
  transition: opacity 0.25s var(--ease), transform 0.25s var(--ease), border-color 0.4s var(--ease);
}
.mkt-vault__badge {
  display: inline-block;
  margin-bottom: 16px;
  padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: #a1a1aa;
}
.mkt-vault__hero {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 14px;
}
.mkt-vault__avatar {
  width: 56px;
  height: 56px;
  border-radius: 14px;
  object-fit: cover;
  border: 1px solid rgba(255, 255, 255, 0.1);
}
.mkt-vault__creator {
  display: block;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--blue-2);
  margin-bottom: 4px;
}
.mkt-vault__name {
  margin: 0;
  font-family: var(--serif);
  font-size: 1.5rem;
  font-weight: 400;
  letter-spacing: -0.02em;
  color: #fafafa;
}
.mkt-vault__stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin: 18px 0 14px;
  padding: 14px 0 0;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
}
.mkt-vault__stats div { min-width: 0; }
.mkt-vault__stats dt {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #71717a;
  margin-bottom: 4px;
}
.mkt-vault__stats dd {
  margin: 0;
  font-size: 13px;
  font-weight: 500;
  color: #fafafa;
}
.mkt-vaults__nav {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
}
.mkt-vaults__btn {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: rgba(255, 255, 255, 0.02);
  color: #fafafa;
  display: grid;
  place-items: center;
  cursor: pointer;
  transition: border-color 0.2s, background 0.2s;
}
.mkt-vaults__btn:hover {
  border-color: rgba(255, 255, 255, 0.16);
  background: rgba(255, 255, 255, 0.05);
}
.mkt-vaults__pager {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--mono);
  font-size: 12px;
  color: #71717a;
}
.mkt-vaults__rule {
  width: 24px;
  height: 1px;
  background: rgba(255, 255, 255, 0.12);
}
.mkt-vault.is-switching {
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 0.25s var(--ease), transform 0.25s var(--ease);
}

/* Features grid */
.mkt-feature-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
.mkt-feature {
  padding: clamp(20px, 2.5vw, 24px);
}
.mkt-feature h3 {
  margin: 0 0 8px;
  font-size: 15px;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: #fafafa;
}
.mkt-feature p {
  margin: 0;
  font-size: 13px;
  font-weight: 300;
  line-height: 1.6;
  color: #a1a1aa;
}

@media (min-width: 640px) {
  .mkt-step {
    padding-left: 3.5rem;
  }
  .mkt-step__badge {
    position: absolute;
    left: 0;
    top: 28px;
  }
}
@media (max-width: 639px) {
  .mkt-timeline__rail { display: none; }
  .mkt-strategy-grid,
  .mkt-feature-grid { grid-template-columns: 1fr; }
  .mkt-vault__stats { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .mkt-reveal, .mkt-bar i, .mkt-vault.is-switching {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .mkt-bar i { width: var(--pct, 0%) !important; }
}

/* =============================================================
   MKT SCROLL-STORY — pinned cumulative step reveal (#lifecycle)
   ============================================================= */
.mkt-scrollstory {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  height: 420vh;
  overflow: clip;
  isolation: isolate;
  background: transparent;
  padding: 0;
}
.mkt-scrollstory__pin {
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  overflow: hidden;
  z-index: 1;
}
.mkt-scrollstory .mkt-wrap {
  width: 100%;
  max-width: 56rem;
  margin: 0 auto;
  padding: clamp(72px, 10vh, 96px) clamp(16px, 4vw, 24px) clamp(32px, 5vh, 48px);
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: 100vh;
  box-sizing: border-box;
}
.mkt-scrollstory .mkt-intro {
  margin-bottom: clamp(16px, 2.5vh, 28px);
  flex-shrink: 0;
}
.mkt-scrollstory__stage {
  flex: 1 1 auto;
  min-height: 0;
  max-height: calc(100vh - clamp(220px, 32vh, 300px));
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 6%, black 94%, transparent 100%);
          mask-image: linear-gradient(to bottom, transparent 0%, black 6%, black 94%, transparent 100%);
}
.mkt-scrollstory__track {
  transform: translateY(var(--story-offset, 0));
  transition: transform 0.85s cubic-bezier(0.2, 0.7, 0.2, 1);
  will-change: transform;
}
.mkt-scrollstory .mkt-timeline__rail {
  bottom: auto;
  height: var(--story-rail-height, 72px);
  transition: height 0.85s var(--ease);
}
.mkt-scrollstory .mkt-step {
  display: none;
  opacity: 0;
  transform: translateY(20px) scale(0.98);
  pointer-events: none;
  transition:
    opacity 0.75s cubic-bezier(0.2, 0.7, 0.2, 1),
    transform 0.75s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.mkt-scrollstory.is-story-1 .mkt-step[data-story-step="1"],
.mkt-scrollstory.is-story-2 .mkt-step[data-story-step="1"],
.mkt-scrollstory.is-story-2 .mkt-step[data-story-step="2"],
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="1"],
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="2"],
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="3"],
.mkt-scrollstory.is-story-4 .mkt-step {
  display: flex;
  opacity: 1;
  pointer-events: auto;
  transform: none;
}
.mkt-scrollstory.is-story-2 .mkt-step[data-story-step="1"] {
  opacity: 0.85;
  transform: scale(0.97);
}
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="1"] {
  opacity: 0.72;
  transform: scale(0.94);
}
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="2"] {
  opacity: 0.85;
  transform: scale(0.97);
}
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="1"] {
  opacity: 0.65;
  transform: scale(0.91);
}
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="2"] {
  opacity: 0.75;
  transform: scale(0.94);
}
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="3"] {
  opacity: 0.85;
  transform: scale(0.97);
}
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="4"] {
  opacity: 1;
  transform: none;
}
.mkt-scrollstory .mkt-bar i { width: 0; }
.mkt-scrollstory.is-story-3 .mkt-step[data-story-step="3"] .mkt-bar i,
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="3"] .mkt-bar i,
.mkt-scrollstory.is-story-4 .mkt-step[data-story-step="4"] .mkt-bar i {
  width: var(--pct, 0%);
}
.mkt-scrollstory__footer {
  flex-shrink: 0;
  margin-top: clamp(16px, 2.5vh, 24px);
  opacity: 0;
  transform: translateY(12px);
  pointer-events: none;
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.mkt-scrollstory.is-story-done .mkt-scrollstory__footer {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}

@media (max-width: 720px) {
  /* Slower, reveal-style pacing — one step at a time, intro pinned at top */
  .mkt-scrollstory { height: 360vh; }

  .mkt-scrollstory__pin {
    align-items: stretch;
  }

  .mkt-scrollstory .mkt-wrap {
    justify-content: flex-start;
    align-items: stretch;
    height: 100vh;
    min-height: 100vh;
    padding:
      clamp(80px, 12vh, 104px)
      clamp(16px, 4vw, 24px)
      clamp(16px, 3vh, 28px);
  }

  .mkt-scrollstory .mkt-intro {
    margin-bottom: clamp(14px, 2vh, 22px);
  }

  .mkt-scrollstory .mkt-headline {
    font-size: clamp(1.65rem, 7.5vw, 2.15rem);
    margin-bottom: 10px;
  }

  .mkt-scrollstory .mkt-lede {
    font-size: 13px;
    line-height: 1.55;
  }

  .mkt-scrollstory__stage {
    flex: 1 1 auto;
    min-height: 0;
    max-height: none;
    overflow: hidden;
    /* Drop the top fade — it was clipping step titles near the section headline */
    -webkit-mask-image: linear-gradient(to bottom, black 0%, black 90%, transparent 100%);
            mask-image: linear-gradient(to bottom, black 0%, black 90%, transparent 100%);
  }

  .mkt-scrollstory__track {
    transform: none !important;
    transition: none;
  }

  /* Mobile: reveal-style — show only the active step, not a scrolling stack */
  .mkt-scrollstory.is-story-1 .mkt-step[data-story-step="1"],
  .mkt-scrollstory.is-story-2 .mkt-step[data-story-step="2"],
  .mkt-scrollstory.is-story-3 .mkt-step[data-story-step="3"],
  .mkt-scrollstory.is-story-4 .mkt-step[data-story-step="4"] {
    display: flex;
    opacity: 1;
    pointer-events: auto;
    transform: none;
  }

  .mkt-scrollstory.is-story-2 .mkt-step[data-story-step="1"],
  .mkt-scrollstory.is-story-3 .mkt-step[data-story-step="1"],
  .mkt-scrollstory.is-story-3 .mkt-step[data-story-step="2"],
  .mkt-scrollstory.is-story-4 .mkt-step[data-story-step="1"],
  .mkt-scrollstory.is-story-4 .mkt-step[data-story-step="2"],
  .mkt-scrollstory.is-story-4 .mkt-step[data-story-step="3"] {
    display: none !important;
    opacity: 0 !important;
    pointer-events: none !important;
  }

  .mkt-scrollstory .mkt-step__panel {
    padding: clamp(16px, 4vw, 22px);
  }
  .mkt-scrollstory .mkt-stat__num {
    font-size: clamp(1.25rem, 5vw, 1.5rem);
  }
  .mkt-scrollstory .mkt-strategy-grid {
    grid-template-columns: 1fr;
  }
  .mkt-scrollstory .mkt-strategy {
    padding: 12px 0;
  }
  .mkt-scrollstory .mkt-strategy p,
  .mkt-scrollstory .mkt-alloc li p {
    font-size: 12px;
    line-height: 1.5;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mkt-scrollstory {
    height: auto;
    overflow: visible;
    margin-left: 0;
    width: 100%;
    padding: clamp(64px, 10vh, 112px) 0;
  }
  .mkt-scrollstory__pin {
    position: relative;
    height: auto;
    overflow: visible;
  }
  .mkt-scrollstory .mkt-wrap {
    min-height: 0;
    padding: 0 clamp(16px, 4vw, 24px);
  }
  .mkt-scrollstory__stage {
    max-height: none;
    overflow: visible;
    -webkit-mask-image: none;
            mask-image: none;
  }
  .mkt-scrollstory__track {
    transform: none !important;
  }
  .mkt-scrollstory .mkt-step {
    display: flex !important;
    opacity: 1 !important;
    transform: none !important;
    pointer-events: auto !important;
  }
  .mkt-scrollstory__footer {
    opacity: 1 !important;
    transform: none !important;
    pointer-events: auto !important;
  }
  .mkt-scrollstory .mkt-bar i {
    width: var(--pct, 0%) !important;
  }
}
