/* martians.fun — project tokens and layout. Engine primitives live in cine.css. */
:root {
  --canvas: #0a0608; --surface: #1a1012; --ink: #f2e6dc; --ink-soft: #b89a8a;
  --accent: #ff7a3d; --accent-ink: #0a0608; --shadow-tint: 10 6 8;
  --font-display: 'Unbounded', system-ui, sans-serif;
  --font-text: 'Archivo', system-ui, sans-serif;
  --radius: 14px;
  --track-tight: -.02em;
}
html { background: var(--canvas); }
body { line-height: 1.6; letter-spacing: .005em; }
h1, h2, h3 { font-weight: 800; line-height: 1.02; letter-spacing: var(--track-tight); }
h1 { font-size: clamp(2.4rem, 5.2vw, 5rem); }
h2 { font-size: clamp(1.7rem, 3.2vw, 3rem); }
p { line-height: 1.62; letter-spacing: .01em; font-weight: 500; }
@media (max-width: 700px) { h1 { font-size: clamp(1.7rem, 7.4vw, 2.3rem); } h2 { font-size: clamp(1.45rem, 6.4vw, 2rem); } }

/* ---------- world (fixed canvas + poster) ---------- */
.world { position: fixed; inset: 0; z-index: 0; overflow: hidden; background: var(--canvas); }
.world canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.world .poster { position: absolute; inset: 0; }
.world .poster img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 50%; transition: opacity 1.1s ease; }
.world.is-live .poster img { opacity: 0; }
.world .sky { position: absolute; inset: 0; opacity: 0; pointer-events: none; background: linear-gradient(180deg, #2a0f0c 0%, #7a3419 42%, #c8743a 72%, #e6a76a 100%); transition: opacity .6s ease; }
/* fallback (no WebGL / save-data / low memory): poster stays and gets a slow parallax */
.world.is-fallback .poster img { opacity: 1; transform: translate3d(0, calc(var(--scroll) * -6vh), 0) scale(1.06); }
html:not(.cine-js) .world .poster img { transform: none; }

/* ---------- brand + nav ---------- */
.brand { position: fixed; top: 10px; left: 14px; z-index: 50; display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 8px; font-family: var(--font-display); font-weight: 800; font-size: 15px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink); text-decoration: none; }
.brand-mark { width: 14px; height: 14px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #ffb27a, var(--accent) 55%, #7a2a10); box-shadow: 0 0 18px color-mix(in oklab, var(--accent) 55%, transparent); }
.nav-pill { font-family: var(--font-display); font-weight: 600; font-size: 11px; letter-spacing: .08em; }
.nav-pill a.is-cta { background: var(--accent); color: var(--accent-ink); }
@media (max-width: 560px) { .brand { top: 6px; left: 8px; font-size: 13px; } }

/* ---------- HUD readouts (top-left, spaceflight vernacular) ---------- */
.hud { position: fixed; left: 22px; top: 64px; z-index: 40; display: grid; gap: 3px; padding: 8px 12px; border-radius: 12px; background: color-mix(in oklab, var(--canvas) 62%, transparent); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); font-family: var(--font-mono); font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-soft); pointer-events: none; transition: opacity .4s var(--ease-out), transform .4s var(--ease-out); }
.hud-k { color: var(--accent); }
.hud { color: color-mix(in oklab, var(--ink) 80%, var(--ink-soft)); }
.hud-v b { font-weight: 500; color: var(--ink); font-variant-numeric: tabular-nums; }
html.past-city .hud, html[data-cine-active="5"] .hud { opacity: 0; transform: translateY(-6px); }
@media (max-width: 700px) { .hud { left: 14px; top: 52px; font-size: 10px; gap: 2px; } }

/* ---------- acts ---------- */
.act .cine-stage { isolation: isolate; }
.copy { position: absolute; z-index: 6; display: flex; flex-direction: column; gap: var(--s-4); }
.copy h1, .copy h2 { text-shadow: 0 2px 28px rgb(var(--shadow-tint) / .95); }
.copy p { color: var(--ink); max-width: 44ch; font-size: clamp(.95rem, 1.15vw, 1.1rem); text-shadow: 0 1px 18px rgb(var(--shadow-tint) / .95); }
.copy .row { display: flex; gap: var(--s-4); align-items: center; flex-wrap: wrap; margin-top: var(--s-2); }
.copy--hero { left: var(--gutter); bottom: 14vh; width: min(100% - 2 * var(--gutter), 900px); }
.copy--hero h1 { max-width: 22ch; }
.copy--right { right: var(--gutter); top: 50%; transform: translateY(-50%); max-width: min(44vw, 560px); align-items: flex-end; text-align: right; }
.copy--right p { text-align: right; }
.copy--left { left: var(--gutter); bottom: 12vh; max-width: min(44vw, 560px); }
.copy--peak { left: 50%; top: 50%; transform: translate(-50%, -50%); align-items: center; text-align: center; width: min(100% - 2 * var(--gutter), 760px); }
.copy--peak p { text-align: center; }
.copy--finale { left: 50%; top: 50%; transform: translate(-50%, -54%); align-items: center; text-align: center; width: min(100% - 2 * var(--gutter), 900px); gap: var(--s-5); }
.wordmark { font-size: clamp(3rem, 12vw, 9.5rem); letter-spacing: -.03em; line-height: .95; text-transform: uppercase; }
[data-cine-cue].copy { transform: translate3d(0, calc((1 - var(--cue)) * 30px), 0); }
.copy--right[data-cine-cue] { transform: translate3d(0, calc(-50% + (1 - var(--cue)) * 30px), 0); }
.copy--peak[data-cine-cue] { transform: translate3d(-50%, calc(-50% + (1 - var(--cue)) * 30px), 0); }
.copy--finale[data-cine-cue] { transform: translate3d(-50%, calc(-54% + (1 - var(--cue)) * 30px), 0); }
@media (max-width: 760px) {
  .copy--hero { bottom: 12vh; }
  .copy--right, .copy--left { left: var(--gutter); right: var(--gutter); top: auto; bottom: 11vh; max-width: none; align-items: flex-start; text-align: left; transform: none; }
  .copy--right p { text-align: left; }
  .copy--right[data-cine-cue] { transform: translate3d(0, calc((1 - var(--cue)) * 30px), 0); }
  .copy--peak { top: auto; bottom: 14vh; transform: translate(-50%, 0); }
  .copy--peak[data-cine-cue] { transform: translate3d(-50%, calc((1 - var(--cue)) * 30px), 0); }
}

/* countdown (launch) */
.count { position: absolute; z-index: 6; left: var(--gutter); bottom: 12vh; display: grid; gap: 2px; font-family: var(--font-mono); letter-spacing: .18em; text-transform: uppercase; color: var(--ink-soft); font-size: 11px; opacity: calc(min(1, var(--pd) * 3) * (1 - max(0, var(--pd) - .8) * 5)); }
.count b { font-family: var(--font-display); font-weight: 800; font-size: clamp(2.6rem, 6vw, 5rem); line-height: 1; letter-spacing: -.02em; color: var(--ink); font-variant-numeric: tabular-nums; }
@media (max-width: 760px) { .count { bottom: auto; top: 14vh; } }

/* holo board (city) */
.board { position: absolute; z-index: 6; right: var(--gutter); top: 14vh; display: grid; gap: 10px; width: min(360px, 100% - 2 * var(--gutter)); }
.board-cell { display: grid; gap: 3px; padding: 14px 16px; border-radius: var(--radius); background: color-mix(in oklab, var(--surface) 72%, transparent); border: 1px solid color-mix(in oklab, var(--accent) 35%, transparent); box-shadow: var(--e2), 0 0 40px -12px color-mix(in oklab, var(--accent) 55%, transparent); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.board-k { font-family: var(--font-mono); font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--accent); }
.board-v { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.25rem, 2.2vw, 1.8rem); line-height: 1.1; color: var(--ink); }
.board-s { font-size: 12.5px; color: var(--ink-soft); line-height: 1.4; }
@media (max-width: 760px) { .board { top: 16vh; right: var(--gutter); left: var(--gutter); width: auto; gap: 8px; } .board-cell { padding: 10px 12px; } .board-v { font-size: 1.15rem; } .board-s { display: none; } .copy--left { bottom: 9vh; } }

/* ---------- flow: how it works ---------- */
.how { position: relative; z-index: 2; background: linear-gradient(180deg, transparent, color-mix(in oklab, var(--canvas) 88%, transparent) 18%, color-mix(in oklab, var(--canvas) 92%, transparent) 82%, transparent); }
.how .wrap { width: min(100% - 2 * var(--gutter), 860px); }
.how h2 { margin-bottom: var(--s-6); }
.steps { list-style: none; counter-reset: step; display: grid; gap: var(--s-5); padding: 0; }
.steps li { counter-increment: step; position: relative; padding-left: 64px; max-width: 62ch; font-size: clamp(1rem, 1.3vw, 1.15rem); line-height: 1.6; }
.steps li::before { content: counter(step, decimal-leading-zero); position: absolute; left: 0; top: .1em; font-family: var(--font-display); font-weight: 800; font-size: 1.4rem; letter-spacing: -.02em; color: var(--accent); }
.steps li b { display: block; font-family: var(--font-display); font-weight: 600; font-size: 1.05em; margin-bottom: 4px; color: var(--ink); }
.ca { margin-top: var(--s-7); display: grid; gap: 6px; }
.ca[hidden] { display: none; }
.ca-k { font-family: var(--font-mono); font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--accent); }
.ca-v { display: inline-flex; align-items: center; gap: 14px; padding: 12px 16px; border-radius: 999px; border: 1px solid var(--line); background: color-mix(in oklab, var(--surface) 80%, transparent); font-family: var(--font-mono); font-size: 13px; letter-spacing: .04em; color: var(--ink); width: fit-content; max-width: 100%; transition: border-color var(--dur-ui) var(--ease-out), transform var(--dur-ui) var(--ease-out); }
.ca-v span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ca-copy { font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--accent); }
.ca-v:active { transform: scale(.98); }
@media (hover: hover) and (pointer: fine) { .ca-v:hover { border-color: var(--accent); } }

/* ---------- finale ---------- */
.foot { position: absolute; z-index: 6; left: 0; right: 0; bottom: 74px; display: flex; justify-content: center; gap: var(--s-6); padding: 0 var(--gutter); font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-soft); flex-wrap: wrap; }
@media (max-width: 700px) { .foot { bottom: 82px; gap: var(--s-4); font-size: 9.5px; } }

/* ---------- mission strip (bottom nav) ---------- */
.mission { position: fixed; z-index: 50; left: 50%; bottom: 14px; transform: translateX(-50%); display: grid; grid-template-columns: repeat(5, 1fr); width: min(100% - 24px, 640px); padding: 10px 12px 8px; border-radius: 999px; border: 1px solid var(--line); background: color-mix(in oklab, var(--canvas) 66%, transparent); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); box-shadow: var(--e2); }
.mission a { grid-row: 2; text-align: center; font-family: var(--font-display); font-weight: 600; font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); text-decoration: none; padding: 8px 2px 4px; min-height: 40px; transition: color var(--dur-ui) var(--ease-out); }
.mission a.is-on { color: var(--ink); }
@media (hover: hover) and (pointer: fine) { .mission a:hover { color: var(--accent); } }
.mission-track { grid-column: 1 / -1; grid-row: 1; position: relative; height: 2px; margin: 4px 10%; background: color-mix(in oklab, var(--ink-soft) 25%, transparent); border-radius: 2px; }
.mission-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 100%; background: var(--accent); transform-origin: left; transform: scaleX(var(--mission, 0)); }
.mission-ship { position: absolute; top: 50%; left: calc(var(--mission, 0) * 100%); width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%; background: var(--ink); box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent) 45%, transparent), 0 0 16px var(--accent); }
@media (max-width: 560px) { .mission { bottom: 10px; padding: 8px 6px 6px; } .mission a { font-size: 9px; letter-spacing: .06em; } }

/* ---------- toast ---------- */
.toast { position: fixed; z-index: 60; left: 50%; bottom: 84px; transform: translateX(-50%) translateY(0); padding: 10px 18px; border-radius: 999px; background: var(--ink); color: var(--accent-ink); font-family: var(--font-display); font-weight: 600; font-size: 12px; letter-spacing: .06em; box-shadow: var(--e3); }
.toast[hidden] { display: none; }

/* buttons: capsule language for this site */
.btn { clip-path: none; border-radius: 999px; padding: 15px 30px; font-family: var(--font-display); font-weight: 600; font-size: 13px; letter-spacing: .08em; text-transform: none; background: var(--accent); color: var(--accent-ink); box-shadow: 0 10px 30px -12px color-mix(in oklab, var(--accent) 70%, transparent); }
@media (hover: hover) and (pointer: fine) { .btn:hover { background: color-mix(in oklab, var(--accent) 82%, white); } }
.chip { font-family: var(--font-display); font-weight: 600; font-size: 12px; letter-spacing: .06em; text-transform: none; color: var(--ink); }
.chip::before, .chip::after { content: none; }
.chip { border-bottom: 1px solid color-mix(in oklab, var(--ink) 35%, transparent); min-height: 44px; padding-bottom: 0; }
@media (hover: hover) and (pointer: fine) { .chip:hover { text-shadow: none; border-color: var(--accent); color: var(--accent); } }

/* the intro curtain lifts a bit faster here; the world fades its own poster */
.cine-intro { transition: opacity .8s ease; }
.cine-grain { opacity: calc(.045 + var(--vel) * .05); }

/* reduced motion: keep understanding, drop movement */
@media (prefers-reduced-motion: reduce) {
  .world.is-fallback .poster img { transform: none; }
  .mission-ship, .mission-fill { transition: none; }
}

/* no JS: everything readable, nothing waits for a clock */
html:not(.cine-js) [data-cine-stagger] > * { opacity: 1; transform: none; }
html:not(.cine-js) .hud, html:not(.cine-js) .count, html:not(.cine-js) .cine-grain { display: none; }

/* hero stat: the vault number, exact dollars, label is just its name */
.herostat { display: grid; grid-template-columns: auto 1fr; column-gap: 12px; align-items: baseline; width: fit-content; max-width: 100%; margin: 2px 0 6px; padding: 10px 16px; border-radius: var(--radius); background: color-mix(in oklab, var(--surface) 70%, transparent); border: 1px solid color-mix(in oklab, var(--accent) 30%, transparent); text-decoration: none; color: var(--ink); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.herostat .big { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.6rem, 2.6vw, 2.4rem); line-height: 1; letter-spacing: -.02em; }
.herostat .lbl { font-family: var(--font-display); font-weight: 600; font-size: 14px; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-soft); }
.herostat .sub { grid-column: 1 / -1; font-size: 12.5px; color: var(--ink-soft); }
@media (max-width: 700px) { .herostat { padding: 8px 12px; column-gap: 10px; } .herostat .big { font-size: 1.5rem; } .herostat .lbl { font-size: 12px; } }
