/* ─── OVU 2026 · The Portal ────────────────────────────────────────────
   Design tokens are inherited from the prior OVU brand work
   (ember + gold + teal on near-black, with parchment ink).
   The passage breathes; nothing here jolts.
   ─────────────────────────────────────────────────────────────────── */

:root {
  --bg:        #07060a;
  --bg-veil:   #0a0806;
  --bg-deep:   #050409;

  --ink:       #f1ece3;
  --ink-soft:  #d4c8b0;
  --ink-dim:   rgba(241, 236, 227, 0.55);
  --ink-faint: rgba(241, 236, 227, 0.28);

  --ember:     #d4603a;
  --ember-hi:  #f08a5b;
  --gold:      #c8a84e;
  --gold-hi:   #e8c878;
  --teal:      #2e8a9a;
  --teal-hi:   #6ec5d3;
  --rose:      #d68b8b;

  --rule:      rgba(241, 236, 227, 0.12);
  --rule-warm: rgba(212, 96, 58, 0.32);

  --serif:     'Playfair Display', 'Crimson Pro', Georgia, serif;
  --serif-2:   'Crimson Pro', 'Playfair Display', Georgia, serif;
  --mono:      'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;

  --t-fast:    280ms;
  --t-med:     720ms;
  --t-slow:    1400ms;
  --t-glacial: 2400ms;
  --ease:      cubic-bezier(.22, .61, .36, 1);
  --ease-out:  cubic-bezier(.16, 1, .3, 1);
}

*, *::before, *::after { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0; padding: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--serif-2);
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow: hidden;
  overscroll-behavior: none;
}

/* ─── Stage canvas (Three.js sits behind every layer) ─────────────── */
#stage {
  position: fixed;
  inset: 0;
  width: 100vw; height: 100vh;
  display: block;
  z-index: 0;
  opacity: 0;
  transition: opacity var(--t-glacial) var(--ease);
}
#stage.is-lit { opacity: 1; }

/* ─── Passage shell ───────────────────────────────────────────────── */
.passage {
  position: fixed;
  inset: 0;
  z-index: 1;
  overflow: hidden;
}

.layer {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-med) var(--ease);
}
.layer.is-active { opacity: 1; pointer-events: auto; }
.layer.is-fading { opacity: 0; transition-duration: var(--t-slow); }

/* ─── 1 · HOOK ─────────────────────────────────────────────────────── */
.beat-hook {
  background:
    radial-gradient(ellipse at 50% 50%, #15110b 0%, #08070b 65%, #04030a 100%);
}
.beat-hook .hook-vignette {
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse at 50% 30%, transparent 0%, rgba(7,6,10,0.45) 90%);
  opacity: 0.7;
}
.beat-hook .hook-stack {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 0 7vw;
}
.beat-hook .hook-line {
  position: absolute;
  max-width: 30ch;
  text-align: center;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.4rem, 3.2vw, 2.4rem);
  line-height: 1.32;
  color: var(--ink);
  opacity: 0;
  transform: translateY(10px);
  transition:
    opacity 1600ms var(--ease),
    transform 1600ms var(--ease);
}
.beat-hook .hook-line.is-in {
  opacity: 1;
  transform: translateY(0);
}
.beat-hook .hook-line.is-in::after {
  content: '';
  display: block;
  width: 32px; height: 1px;
  margin: 1.5em auto 0;
  background: linear-gradient(to right, transparent, var(--ember), transparent);
  opacity: 0.55;
}

/* ─── 2 · OPEN ─────────────────────────────────────────────────────── */
.beat-open { background: var(--bg); }
.beat-open .video-wrap {
  position: absolute; inset: 0;
  overflow: hidden;
  background: #000;
}
.beat-open video {
  position: absolute;
  top: 50%; left: 50%;
  width: 100%; height: 100%;
  object-fit: cover;
  transform: translate(-50%, -50%);
  opacity: 0;
  transition: opacity 1800ms var(--ease);
  filter: saturate(0.92) contrast(1.04);
}
.beat-open.is-active video { opacity: 1; }
.beat-open .vignette {
  position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(ellipse at 50% 38%, transparent 38%, rgba(7, 6, 10, 0.55) 78%, rgba(7, 6, 10, 0.92) 100%),
    linear-gradient(to bottom, rgba(7, 6, 10, 0.18) 0%, transparent 22%, transparent 70%, rgba(7, 6, 10, 0.55) 100%);
}
.beat-open .grain {
  position: absolute; inset: 0; pointer-events: none;
  opacity: 0.06; mix-blend-mode: overlay;
  background-image:
    repeating-radial-gradient(circle at 17% 23%, rgba(255,255,255,0.4) 0 1px, transparent 1px 3px),
    repeating-radial-gradient(circle at 71% 81%, rgba(0,0,0,0.4) 0 1px, transparent 1px 3px);
}
.beat-open .anchor {
  position: absolute;
  top: 2.4vh; left: 3.2vw;
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-dim);
  mix-blend-mode: screen;
}

/* ─── Captions (shared) ───────────────────────────────────────────── */
.captions {
  position: absolute;
  left: 0; right: 0;
  bottom: 18vh;
  display: flex;
  justify-content: center;
  align-items: flex-end;
  padding: 0 6vw;
  pointer-events: none;
}
.captions-mid { bottom: auto; top: 50%; transform: translateY(-50%); }
.caption {
  position: absolute;
  max-width: 32ch;
  text-align: center;
  font-family: var(--serif);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(1.35rem, 2.6vw, 2.5rem);
  line-height: 1.32;
  letter-spacing: 0.005em;
  color: var(--ink);
  text-shadow: 0 1px 0 rgba(0,0,0,0.55), 0 0 38px rgba(0,0,0,0.45);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 1600ms var(--ease), transform 1600ms var(--ease);
}
.caption.is-in { opacity: 1; transform: translateY(0); }
.caption.is-in::after {
  content: '';
  display: block;
  width: 38px; height: 1px;
  margin: 1.2em auto 0;
  background: linear-gradient(to right, transparent, var(--ember), transparent);
  opacity: 0.7;
}

/* ─── 2 · SUMMON ──────────────────────────────────────────────────── */
.beat-summon { background: transparent; }
.beat-summon .atmosphere {
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse at 50% 60%, transparent 0%, rgba(7, 6, 10, 0.55) 80%);
}

/* ─── 3 · LISTEN ──────────────────────────────────────────────────── */
.beat-listen { background: transparent; }
.voice-panel {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: clamp(1.4rem, 4vw, 4rem);
  padding: clamp(1rem, 4vw, 3rem) clamp(1.5rem, 6vw, 6rem);
}
.voice-portrait-wrap {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
}
.voice-portrait {
  position: relative;
  width: clamp(220px, 32vw, 460px);
  aspect-ratio: 9 / 16;
  max-height: 84vh;
  border-radius: 50%;
  overflow: hidden;
  isolation: isolate;
  background: #1a140f;
}
.voice-portrait video, .voice-portrait img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  filter: saturate(0.92) contrast(1.05);
}
/* Aura — colored glow ring around the portrait, color from orientation */
.voice-aura {
  position: absolute;
  inset: -14%;
  border-radius: 50%;
  pointer-events: none;
  z-index: -1;
  background: radial-gradient(closest-side, var(--aura, #f1ece3) 0%, rgba(0,0,0,0) 72%);
  opacity: 0;
  transition: opacity 2200ms var(--ease);
  mix-blend-mode: screen;
  animation: aura-breathe 8s var(--ease) infinite;
}
.voice-portrait-wrap.is-in .voice-aura { opacity: 0.55; }
@keyframes aura-breathe {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.06); }
}

.voice-text {
  display: flex;
  flex-direction: column;
  gap: 1.4rem;
  max-width: 32rem;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 1400ms var(--ease) 600ms, transform 1400ms var(--ease) 600ms;
}
.voice-text.is-in { opacity: 1; transform: translateY(0); }
.voice-meta {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
}
.voice-meta .name { color: var(--ember-hi); }
.voice-meta .role { color: var(--ink-dim); font-size: 0.66rem; letter-spacing: 0.2em; }
.voice-poster {
  margin: 0.2rem 0 0.4rem;
  width: clamp(80px, 13vw, 140px);
  aspect-ratio: 2 / 3;
  overflow: hidden;
  border-radius: 2px;
  border: 1px solid var(--rule);
  background: #0c0a0e;
  box-shadow: 0 6px 30px rgba(212, 96, 58, 0.18);
}
.voice-poster img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(0.92) contrast(1.02);
  opacity: 0.92;
}

.voice-question-block {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  margin-top: -0.35rem;
}
.voice-question-label {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--ember);
}
.voice-question {
  margin: 0;
  font-family: var(--serif-2);
  font-style: italic;
  font-size: clamp(0.95rem, 1.65vw, 1.18rem);
  line-height: 1.45;
  color: var(--ink-soft);
  max-width: 32rem;
}
.voice-quote {
  font-family: var(--serif);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(1.25rem, 2.2vw, 1.85rem);
  line-height: 1.35;
  letter-spacing: 0.005em;
  color: var(--ink);
  margin: 0;
}
.voice-rule {
  width: 42px; height: 1px;
  background: linear-gradient(to right, var(--ember), transparent);
  margin: 0.2rem 0;
}
.voice-theme {
  font-family: var(--serif-2);
  font-style: italic;
  color: var(--ink-dim);
  font-size: 0.95rem;
  margin-top: 0.2rem;
}
/* progress hair under the portrait — barely visible */
.voice-progress {
  position: absolute;
  left: 14%; right: 14%; bottom: -2.2rem;
  height: 1px;
  background: var(--rule);
  overflow: hidden;
}
.voice-progress::before {
  content: '';
  position: absolute; inset: 0 100% 0 0;
  background: linear-gradient(to right, transparent, var(--ember), transparent);
  transition: right 24s linear;
}
.voice-portrait-wrap.is-running .voice-progress::before { right: 0; }

@media (max-width: 820px) {
  .voice-panel {
    flex-direction: column;
    justify-content: center;
    gap: 1.6rem;
    padding: 4vh 6vw 5vh;
  }
  .voice-portrait {
    width: clamp(180px, 58vw, 320px);
    aspect-ratio: 1 / 1;
    max-height: 44vh;
  }
  .voice-text { max-width: 36rem; align-items: center; text-align: center; }
  .voice-meta { align-items: center; }
  .voice-rule { margin: 0 auto; }
  .voice-quote { font-size: clamp(1.05rem, 4.2vw, 1.6rem); }
  .voice-progress { left: 22%; right: 22%; bottom: -1.4rem; }
}

/* ─── 4 · CONNECT ─────────────────────────────────────────────────── */
.beat-connect { background: transparent; }
.beat-connect .field-rail {
  position: absolute;
  bottom: 4vh; left: 0; right: 0;
  text-align: center;
  font-family: var(--mono);
  font-size: 0.65rem;
  letter-spacing: 0.36em;
  text-transform: uppercase;
  color: var(--ink-dim);
}

/* ─── 5 · ASK ─────────────────────────────────────────────────────── */
.beat-ask { background: rgba(7, 6, 10, 0.78); backdrop-filter: blur(14px); }
.ask-wrap {
  position: absolute;
  inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 4vh 6vw;
  text-align: center;
}
.ask-prompt {
  font-family: var(--serif);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(1.6rem, 3.6vw, 3.2rem);
  line-height: 1.22;
  max-width: 22ch;
  margin: 0 0 2.4rem;
  color: var(--ink);
  text-wrap: balance;
}
.ask-form {
  width: 100%;
  max-width: 38rem;
  display: flex; flex-direction: column;
  gap: 1.2rem;
  align-items: stretch;
}
.ask-input {
  appearance: none;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--rule);
  padding: 1.1rem 0.4rem;
  color: var(--ink);
  font-family: var(--serif-2);
  font-style: italic;
  font-size: clamp(1.05rem, 2vw, 1.4rem);
  text-align: center;
  outline: none;
  transition: border-color var(--t-med) var(--ease);
}
.ask-input::placeholder { color: var(--ink-faint); }
.ask-input:focus { border-color: var(--ember); }
.ask-submit {
  appearance: none;
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 0.95rem 2rem;
  margin: 0.6rem auto 0;
  color: var(--ink);
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  cursor: pointer;
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.ask-submit:hover, .ask-submit:focus-visible {
  border-color: var(--ember);
  background: rgba(212, 96, 58, 0.08);
  color: var(--ember-hi);
  outline: none;
}
.ask-skip {
  margin-top: 1.2rem;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--ink-faint);
  cursor: pointer;
  background: none; border: none;
}
.ask-skip:hover { color: var(--ink-dim); }
.ask-confirm {
  font-family: var(--serif-2);
  font-style: italic;
  font-size: clamp(1.1rem, 2vw, 1.5rem);
  color: var(--ink-soft);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 1200ms var(--ease), transform 1200ms var(--ease);
}
.ask-confirm.is-in { opacity: 1; transform: translateY(0); }

/* ─── 6 · HOLD ────────────────────────────────────────────────────── */
.beat-hold { background: transparent; }
.hold-line {
  position: absolute;
  left: 0; right: 0;
  top: 50%;
  transform: translateY(-50%);
  text-align: center;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.4rem, 3vw, 2.4rem);
  line-height: 1.32;
  padding: 0 8vw;
  color: var(--ink);
  max-width: 100vw;
  opacity: 0;
  transform: translateY(calc(-50% + 8px));
  transition: opacity 1800ms var(--ease), transform 1800ms var(--ease);
}
.hold-line.is-in { opacity: 1; transform: translateY(-50%); }

/* ─── 6 · CARRY ───────────────────────────────────────────────────── */
.beat-carry { background: rgba(7, 6, 10, 0.62); backdrop-filter: blur(6px); }
.beat-carry .carry-wrap {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 5vh 7vw;
}
.carry-block {
  max-width: 38rem;
  text-align: center;
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 1800ms var(--ease), transform 1800ms var(--ease);
}
.carry-block.is-in { opacity: 1; transform: translateY(0); }
.carry-anchor {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.36em;
  text-transform: uppercase;
  color: var(--ember);
  margin-bottom: 1.4rem;
}
.carry-headline {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(1.5rem, 3.4vw, 2.6rem);
  line-height: 1.24;
  margin: 0 0 1.6rem;
  color: var(--ink);
  text-wrap: balance;
}
.carry-subline {
  margin: 0;
  font-family: var(--serif-2);
  font-style: italic;
  font-size: clamp(1rem, 2vw, 1.25rem);
  line-height: 1.55;
  color: var(--ink-soft);
  max-width: 32rem;
  margin-left: auto; margin-right: auto;
  text-wrap: balance;
}

/* ─── 7 · CALL ────────────────────────────────────────────────────── */
.beat-call { background: rgba(7, 6, 10, 0.86); backdrop-filter: blur(8px); overflow-y: auto; }
.call-wrap {
  position: relative;
  min-height: 100%;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 6vh 6vw 10vh;
  text-align: center;
}
.call-anchor {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--ember);
  margin-bottom: 1.6rem;
}
.call-headline {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(1.4rem, 3vw, 2.4rem);
  line-height: 1.28;
  max-width: 36ch;
  margin: 0 0 3.2rem;
  color: var(--ink);
  text-wrap: balance;
}
.call-tiers {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
  gap: 1.2rem;
  width: 100%;
  max-width: 64rem;
}
.tier {
  position: relative;
  display: flex; flex-direction: column;
  text-align: left;
  padding: 1.6rem 1.4rem 1.4rem;
  border: 1px solid var(--rule);
  border-radius: 4px;
  background: rgba(241, 236, 227, 0.025);
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);
}
.tier:hover { border-color: var(--rule-warm); background: rgba(212, 96, 58, 0.04); transform: translateY(-2px); }
.tier-amount {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 1.7rem;
  color: var(--gold-hi);
  letter-spacing: -0.01em;
}
.tier-name {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--ember);
  margin: 0.2rem 0 0.9rem;
}
.tier-note {
  font-family: var(--serif-2);
  font-size: 0.95rem;
  line-height: 1.5;
  color: var(--ink-soft);
  margin: 0 0 1.4rem;
  flex: 1;
}
.tier-button {
  appearance: none;
  display: inline-block;
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 0.65rem 1.2rem;
  color: var(--ink);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  text-decoration: none;
  text-align: center;
  cursor: pointer;
  align-self: flex-start;
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.tier-button:hover, .tier-button:focus-visible {
  border-color: var(--ember);
  background: var(--ember);
  color: var(--bg);
  outline: none;
}
.call-subline {
  margin-top: 3.4rem;
  max-width: 38rem;
  font-family: var(--serif-2);
  font-style: italic;
  font-size: 1rem;
  color: var(--ink-dim);
  line-height: 1.55;
}
.call-subline a {
  color: var(--ink-soft);
  border-bottom: 1px solid var(--rule);
  text-decoration: none;
  font-style: normal;
}
.call-subline a:hover { color: var(--ember-hi); border-color: var(--ember); }

/* ─── 8 · EXIT ────────────────────────────────────────────────────── */
.beat-exit { background: rgba(7, 6, 10, 0.92); }
.exit-wrap {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 5vh 6vw;
  text-align: center;
  gap: 2.4rem;
}
.call-coda {
  margin-top: 3rem;
  padding-top: 2.6rem;
  border-top: 1px solid var(--rule);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.6rem;
  width: 100%;
  max-width: 38rem;
}
.exit-doorway {
  display: inline-flex;
  align-items: center;
  gap: 0.85rem;
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(1.2rem, 2.6vw, 1.9rem);
  color: var(--ink);
  text-decoration: none;
  border-bottom: 1px solid var(--rule);
  padding-bottom: 0.4rem;
  transition: border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.exit-doorway:hover { color: var(--ember-hi); border-color: var(--ember); }
.exit-doorway::after {
  content: '↗';
  font-style: normal;
  font-size: 0.85em;
  color: var(--ember);
}
.exit-actions {
  display: flex;
  gap: 1rem;
  flex-wrap: wrap;
  justify-content: center;
}
.exit-action {
  appearance: none;
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 0.65rem 1.4rem;
  color: var(--ink-soft);
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  cursor: pointer;
  text-decoration: none;
  display: inline-flex; align-items: center; gap: 0.5rem;
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.exit-action:hover { border-color: var(--ember); color: var(--ember-hi); background: rgba(212, 96, 58, 0.06); }
.exit-coalition {
  margin-top: 1rem;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--ink-faint);
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  justify-content: center;
}
.exit-coalition span { white-space: nowrap; }

/* ─── Veil (cold open) ────────────────────────────────────────────── */
.veil {
  position: fixed; inset: 0; z-index: 100;
  background:
    radial-gradient(ellipse at 50% 42%, #19130c 0%, #0a0806 55%, #06050a 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  opacity: 0;
  transition: opacity var(--t-slow) var(--ease);
}
.veil.is-ready   { opacity: 1; }
.veil.is-leaving { opacity: 0; }
.veil-inner {
  position: relative;
  max-width: 36rem;
  padding: 3rem 2rem;
  text-align: center;
  z-index: 1;
}
.veil-mark {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(1.05rem, 2.4vw, 1.45rem);
  letter-spacing: 0.04em;
  color: var(--ember-hi);
  margin-bottom: 0.4rem;
  text-transform: none;
}
.veil-date {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.36em;
  text-transform: uppercase;
  color: var(--ink-dim);
  margin-bottom: 2.8rem;
}
.veil-headline {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(2rem, 5vw, 3.2rem);
  line-height: 1.18;
  margin: 0 0 3.6rem;
  color: var(--ink);
  letter-spacing: -0.005em;
}
.veil-headline em {
  font-style: italic;
  color: var(--gold-hi);
  font-weight: 400;
}
.veil-enter {
  appearance: none;
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 1.05rem 2.2rem;
  color: var(--ink);
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  cursor: pointer;
  display: inline-flex;
  flex-direction: column;
  gap: 0.35rem;
  align-items: center;
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);
}
.veil-enter:hover, .veil-enter:focus-visible {
  border-color: var(--ember);
  background: rgba(212, 96, 58, 0.08);
  outline: none;
  transform: translateY(-1px);
}
.veil-enter-hint {
  font-size: 0.62rem;
  letter-spacing: 0.28em;
  color: var(--ink-dim);
}
.veil-anchor {
  margin-top: 4.5rem;
  font-family: var(--serif-2);
  font-style: italic;
  font-size: 0.95rem;
  color: var(--ink-dim);
}
.veil-grain {
  position: absolute; inset: 0;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: overlay;
  background-image:
    repeating-radial-gradient(circle at 30% 50%, rgba(255,255,255,0.4) 0 1px, transparent 1px 3px),
    repeating-radial-gradient(circle at 70% 30%, rgba(0,0,0,0.4) 0 1px, transparent 1px 3px);
}

/* ─── Persistent corner mark (post-veil) ──────────────────────────── */
.passage-mark {
  position: fixed;
  top: 2.4vh; right: 3.2vw;
  z-index: 50;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 500;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: var(--ink-dim);
  display: flex; gap: 0.55rem; align-items: baseline;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-slow) var(--ease);
  mix-blend-mode: screen;
}
.passage-mark.is-on { opacity: 1; }
.passage-mark .mark-glyph { color: var(--ember-hi); }
.passage-mark .mark-sep   { color: var(--ink-faint); font-style: normal; }
.passage-mark .mark-date {
  font-family: var(--mono);
  font-style: normal;
  font-size: 0.62rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
}

/* ─── Pause / prev / next controls ────────────────────────────────── */
.controls {
  position: fixed;
  bottom: 2.4vh;
  left: 50%;
  transform: translateX(-50%);
  z-index: 60;
  display: flex;
  gap: 0.3rem;
  padding: 0.4rem 0.55rem;
  background: rgba(7, 6, 10, 0.55);
  border: 1px solid var(--rule);
  border-radius: 999px;
  backdrop-filter: blur(10px);
  opacity: 0.32;
  transition: opacity 320ms var(--ease);
}
.controls:hover, .controls:focus-within { opacity: 0.95; }
.ctrl {
  appearance: none;
  background: transparent;
  border: none;
  width: 32px; height: 32px;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--ink-soft);
  cursor: pointer;
  border-radius: 50%;
  transition: color 200ms var(--ease), background 200ms var(--ease);
}
.ctrl:hover, .ctrl:focus-visible {
  color: var(--ember-hi);
  background: rgba(212, 96, 58, 0.12);
  outline: none;
}
.ctrl svg { width: 18px; height: 18px; pointer-events: none; }
.ctrl-pause .ico-play  { display: none; }
.ctrl-pause[data-state="paused"] .ico-pause { display: none; }
.ctrl-pause[data-state="paused"] .ico-play  { display: block; color: var(--ember-hi); }

/* ─── Polish: longer caption transitions for the big text moments ──── */
.caption,
.beat-hook .hook-line {
  transition:
    opacity 1900ms cubic-bezier(.22, .61, .36, 1),
    transform 1900ms cubic-bezier(.22, .61, .36, 1) !important;
}
.voice-text {
  transition:
    opacity 1400ms var(--ease) 600ms,
    transform 1400ms var(--ease) 600ms !important;
}
.voice-text:not(.is-in) {
  /* No delay on fade-out so the quote fades cleanly the moment we say so. */
  transition:
    opacity 1400ms var(--ease) 0ms,
    transform 1400ms var(--ease) 0ms !important;
}
.voice-portrait-wrap .voice-aura {
  transition: opacity 1400ms var(--ease) !important;
}

/* ─── WORLD beat — postcard montage of the people who asked ───────── */
.beat-world {
  background:
    radial-gradient(ellipse at 50% 50%, #1a1410 0%, #08070b 65%, #04030a 100%);
}
.beat-world .world-wrap {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 4vh 5vw;
  gap: 1.6rem;
}
.beat-world .world-eyebrow {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.36em;
  text-transform: uppercase;
  color: var(--ember-hi);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 1200ms var(--ease), transform 1200ms var(--ease);
}
.beat-world .world-eyebrow.is-in {
  opacity: 1; transform: translateY(0);
}
.beat-world .world-card-stack {
  position: relative;
  width: min(86vw, 38rem);
  aspect-ratio: 4 / 3;
  max-height: 64vh;
  border-radius: 6px;
  overflow: hidden;
  box-shadow:
    0 14px 50px rgba(0, 0, 0, 0.55),
    0 0 0 1px rgba(241, 236, 227, 0.07),
    0 0 30px rgba(212, 96, 58, 0.18);
}
.beat-world .world-card {
  position: absolute; inset: 0;
  margin: 0;
  opacity: 0;
  transform: scale(1.04);
  transition:
    opacity var(--fade-ms, 700ms) cubic-bezier(.22, .61, .36, 1),
    transform 4200ms ease-out;
}
.beat-world .world-card.is-in {
  opacity: 1;
  transform: scale(1);
}
.beat-world .world-card img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(0.94) contrast(1.04);
}

/* ─── CARRY backdrop (the 2006 actual table) ──────────────────────── */
.beat-carry .carry-backdrop {
  position: absolute; inset: 0;
  background-image: var(--carry-backdrop, none);
  background-size: cover;
  background-position: center;
  filter: brightness(0.45) saturate(0.85) blur(2px);
  opacity: 0;
  transition: opacity 2400ms var(--ease);
}
.beat-carry.has-backdrop .carry-backdrop { opacity: 0.55; }

/* ─── CALL backdrop (the 2026 vision of the table) ────────────────── */
.beat-call .call-backdrop {
  position: absolute; inset: 0;
  background-image: var(--call-backdrop, none);
  background-size: cover;
  background-position: center;
  filter: brightness(0.5) saturate(0.95) blur(1.5px);
  opacity: 0;
  transition: opacity 2400ms var(--ease);
  z-index: -1;
}
.beat-call.has-backdrop .call-backdrop { opacity: 0.45; }

/* ─── Globe corner widget ─────────────────────────────────────────── */
.globe {
  position: fixed;
  top: 2.2vh; left: 3.2vw;
  width: 36px; height: 36px;
  z-index: 50;
  opacity: 0;
  pointer-events: none;
  transition: opacity 1200ms var(--ease);
  filter: drop-shadow(0 0 6px rgba(212, 96, 58, 0.35));
}
.globe.is-on { opacity: 0.78; }
.globe svg { width: 100%; height: 100%; display: block; }
.globe .globe-continents {
  transform-origin: 32px 32px;
  animation: globe-spin 26s linear infinite;
}
@keyframes globe-spin {
  from { transform: translateX(0); }
  to   { transform: translateX(-64px); }
}

/* ─── Reduced motion ──────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 240ms !important;
    animation-duration: 240ms !important;
  }
  .globe .globe-continents { animation: none !important; }
}
