/* ==== pages/home.css ==== */
/* =====================================================================
   Homepage (body[data-page="home"]). Choreography: assets/js/pages/home.js
   Every section has a calm static layout first; html.motion turns sections into
   pinned or scroll-linked scenes. Scenes (.scene, .impact) are always dark: copy on
   them uses .on-media, so they read the same in both themes.
   ===================================================================== */

/* ---------- Shared: scenes = copy over a sticky full-bleed video ---------- */
.scene{position:relative;background:#000;color:#f5f5f7;isolation:isolate;
  --stat-fill:linear-gradient(180deg,#fff 30%,rgba(255,255,255,.62) 100%);--stat-unit:rgba(255,255,255,.66);--line:rgba(255,255,255,.22)}
/* full-height layer with a sticky viewport inside (a sticky element with negative margins would overflow the scene) */
.scene-bg{position:absolute;inset:0;pointer-events:none}
.scene-pin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}
.scene-media{position:absolute;inset:0;will-change:transform}
.scene-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.scene-scrim{position:absolute;inset:0;background:
  linear-gradient(180deg,rgba(0,0,0,.72) 0%,rgba(0,0,0,0) 22%,rgba(0,0,0,0) 70%,rgba(0,0,0,.72) 100%),rgba(0,0,0,.42)}
.scene-body{position:relative;z-index:1}
.scene-ctl{position:sticky;bottom:0;z-index:4;display:flex;justify-content:flex-end;height:68px;margin-top:-68px;padding:0 16px 16px;align-items:flex-end;pointer-events:none}
.scene-ctl .vctl{position:relative;right:auto;bottom:auto;pointer-events:auto}
.scene .shead--center .lead{color:var(--text-2)}

/* ---------- 1 · Hero ---------- */
.hero{position:relative;padding-top:calc(var(--nav-h) + clamp(48px,9vh,104px))}
.hero-copy{text-align:center;padding-inline:var(--gutter)}
.hero-copy .eyebrow{margin-bottom:18px}
.hero-sub{max-width:31em;margin:clamp(16px,2.4vh,26px) auto 0;font-size:clamp(17px,1.4vw,21px);line-height:1.42;font-weight:450;letter-spacing:-.014em;color:var(--text-2);text-wrap:balance}
.hero-copy .actions{justify-content:center;margin-top:clamp(20px,3.4vh,36px)}
.hero-film{position:relative;width:min(var(--maxw),100% - 2*var(--gutter));margin:clamp(36px,6vh,64px) auto 0;aspect-ratio:1440/806;border-radius:var(--r-xl);overflow:hidden;background:var(--film-bg)}
.hero-film-in{position:absolute;inset:0}
.hero-film video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:62% 50%}
.hero-shade{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 50%,rgba(0,0,0,.28),rgba(0,0,0,.58));opacity:0;pointer-events:none}
.hero-lines{width:min(820px,100% - 2*var(--gutter));margin:clamp(32px,4vw,48px) auto 0;text-align:center}
.hero-line{font:600 clamp(21px,2vw,26px)/1.35 var(--f-display);letter-spacing:-.018em;text-wrap:balance}
.hero-line+.hero-line{margin-top:8px;color:var(--text-2)}
.hero-fade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 45%,#000 100%);opacity:0;pointer-events:none}
@media (max-width:767px){
  .hero-film{aspect-ratio:4/5}
  .hero-film video{object-position:86% 50%}
}
.motion .hero{height:300vh;padding-top:0}
.motion .hero-pin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}
.motion .hero-copy{position:absolute;left:0;right:0;top:calc(var(--nav-h) + clamp(36px,8vh,96px));z-index:1;transform-origin:50% 0;will-change:transform,opacity}
.motion .hero-film{position:absolute;inset:0;z-index:2;width:auto;margin:0;aspect-ratio:auto;border-radius:0;background:none;clip-path:inset(64% max(var(--gutter),calc((100% - var(--maxw))/2)) 28px round var(--r-xl));will-change:clip-path}
.motion .hero-film video{inset:auto;left:0;top:0;max-width:none;object-fit:fill;transform-origin:0 0;will-change:transform;background:var(--film-bg)}
.motion .hero-lines{position:absolute;inset:0;z-index:3;display:grid;place-items:center;width:auto;margin:0;padding-inline:var(--gutter);pointer-events:none}
.motion .hero-line{grid-area:1/1;max-width:14em;color:#fff;font-size:clamp(32px,4.6vw,68px);line-height:1.06;letter-spacing:-.03em;text-align:center;opacity:0;will-change:transform,opacity}
.motion .hero-line+.hero-line{margin-top:0;color:#fff}
.motion .hero-vctl{will-change:transform}

/* ---------- 2 · Mission (night lanes) ---------- */
.mission .scene-body{padding-block:clamp(140px,30vh,300px) clamp(72px,12vh,140px)}
.mission .eyebrow{margin-bottom:clamp(20px,3vh,32px)}
.statement{max-width:19.5em;font:600 clamp(32px,4.5vw,66px)/1.08 var(--f-display);letter-spacing:-.028em;color:#fff;text-wrap:pretty}
.mission-sub{max-width:32em;margin:clamp(28px,4.5vh,48px) 0 8px;font-size:clamp(19px,1.55vw,22px);line-height:1.42;font-weight:450;color:var(--text-2)}
.caps{margin-top:clamp(88px,16vh,200px)}
.caps-track{display:flex;flex-wrap:wrap;gap:6px 0;width:min(var(--maxw),100% - 2*var(--gutter));margin-inline:auto}
.caps li{display:flex;align-items:center;font:600 clamp(22px,2.4vw,34px)/1.2 var(--f-display);letter-spacing:-.022em;color:rgba(255,255,255,.62);white-space:nowrap}
.caps li+li::before{content:"";width:5px;height:5px;margin:0 .7em;border-radius:50%;background:var(--accent);opacity:.9}
@media (max-width:767px){
  /* phones: a quiet vertical list, one capability per line */
  .caps-track{flex-direction:column;gap:4px}
  .caps li{font-size:22px;white-space:normal}
  .caps li::before,.caps li+li::before{content:"";width:5px;height:5px;margin:0 14px 0 2px;border-radius:50%;background:var(--accent)}
}
@media (min-width:768px){
  .motion .caps{overflow:hidden;padding-block:.1em}
  .motion .caps-track{flex-wrap:nowrap;width:max-content;margin:0;padding-left:max(var(--gutter),calc((100vw - var(--maxw))/2));will-change:transform}
  .motion .caps li{font-size:clamp(44px,6.4vw,104px);line-height:1.1;letter-spacing:-.034em;color:rgba(255,255,255,.55)}
  .motion .caps li+li::before{width:.14em;height:.14em;margin:0 .45em}
}

/* ---------- 3 · Pillars ---------- */
.pillars{padding-top:var(--sec)}
.pcard h3{font-family:var(--f-display);letter-spacing:-.03em}
.motion .pillars .stack{padding-bottom:6vh}

/* ---------- 4 · From orbit to evidence ---------- */
.detect{padding-bottom:0}
.detect .shead{margin-bottom:clamp(40px,6vh,64px)}
.detect-track{position:relative}
.motion .detect-track{height:560vh}
.detect-stage{--fw:min(100%,var(--maxw));display:flex;flex-direction:column;align-items:center;padding:0 var(--gutter) var(--sec)}
.motion .detect-stage{--fw:min(100%,var(--maxw),calc((100svh - var(--nav-h) - 250px) * 1.7866));position:sticky;top:0;height:100vh;height:100svh;justify-content:center;
  padding:calc(var(--nav-h) + clamp(12px,2.5vh,28px)) var(--gutter) clamp(16px,3vh,32px)}
.detect-frame{position:relative;flex:none;width:var(--fw);aspect-ratio:1440/806;margin:0;border-radius:var(--r-xl);overflow:hidden;background:var(--film-bg);isolation:isolate;transform-origin:50% 60%}
.detect-frame video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:100% 50%}
.detect-frame::after{content:"";position:absolute;inset:0;z-index:7;border-radius:inherit;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);pointer-events:none}
.detect-ui{width:var(--fw);max-width:100%;margin-top:clamp(18px,3vh,28px)}
.ticks{display:flex;gap:8px;margin-bottom:clamp(12px,2.2vh,22px)}
html:not(.motion) .ticks{display:none}
.tick{flex:1;display:flex;align-items:center;height:24px;border-radius:4px}
.tick i{--p:0;position:relative;display:block;width:100%;height:2px;border-radius:2px;background:var(--line);overflow:hidden}
.tick i::after{content:"";position:absolute;inset:0;background:var(--accent);transform:scaleX(var(--p));transform-origin:0 50%}
.steps{display:grid}
.step{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:12px 48px;align-items:end}
.step-n{display:block;margin-bottom:10px;font-size:15px;font-weight:500;color:var(--text-meta);font-variant-numeric:tabular-nums}
.step h3{font:600 clamp(36px,4.3vw,64px)/1 var(--f-display);letter-spacing:-.03em}
.step p{max-width:40ch;padding-bottom:.25em;font-size:clamp(17px,1.45vw,21px);line-height:1.4;color:var(--text-2)}
.motion .step{grid-area:1/1;opacity:0;transform:translate3d(0,24px,0);transition:opacity .45s var(--ease),transform .9s var(--ease)}
.motion .step.is-past{transform:translate3d(0,-18px,0)}
.motion .step.is-current{opacity:1;transform:none;transition-delay:.18s}
html:not(.motion) .steps{grid-template-columns:repeat(3,minmax(0,1fr));gap:40px 28px}
html:not(.motion) .step{display:block;padding-top:20px;border-top:1px solid var(--line)}
html:not(.motion) .step h3{margin-bottom:10px;font-size:clamp(24px,2.3vw,32px)}
html:not(.motion) .step p{font-size:16px}
@media (max-width:860px){
  .step{grid-template-columns:1fr;gap:10px}
  html:not(.motion) .steps{grid-template-columns:1fr}
}
/* overlays — hairlines in film pixels (SVG, sliced like the video) + labels in .ov-map (same box as the film) */
.detect-frame{container-type:inline-size;--alert:#ff8f70}
.ov,.ov-slick{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none;overflow:visible}
.ov .hl{fill:none;stroke:rgba(255,255,255,.92);stroke-width:1;vector-effect:non-scaling-stroke}
.ov .hl.soft{stroke:rgba(255,255,255,.45)}
.ov .dot{fill:rgba(0,0,0,.55);stroke:#fff;stroke-width:1;vector-effect:non-scaling-stroke}
.ov>g{opacity:0;transition:opacity .9s var(--ease)}
.ov-slick{opacity:0;clip-path:inset(0 0 0 100%);transition:clip-path 1.8s var(--ease),opacity .8s var(--ease)}
.ov-slick polygon{fill:var(--film-accent);fill-opacity:.13;stroke:var(--film-accent);stroke-width:1.5;vector-effect:non-scaling-stroke;stroke-linejoin:round}
.ov-dim{position:absolute;inset:0;z-index:1;background:#000;opacity:0;transition:opacity 1.1s var(--ease)}
.ov-scan{position:absolute;inset:0;z-index:2;overflow:hidden;opacity:0;pointer-events:none;transition:opacity .8s var(--ease)}
.ov-scan i{position:absolute;left:0;right:0;top:0;height:30%;transform:translate3d(0,-100%,0);background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.07));border-bottom:1px solid rgba(255,255,255,.7)}
@keyframes scan{0%{transform:translate3d(0,-100%,0)}70%,100%{transform:translate3d(0,333%,0)}}

/* 0 observe · 1 detect · 2 classify · 3 identify · 4 verify · 5 report · all (static) */
.detect-frame[data-step="0"] .ov-scan{opacity:1}
.detect-frame[data-step="0"] .ov-scan i{animation:scan 4.2s var(--ease-io) infinite}
.detect-frame:is([data-step="1"],[data-step="2"],[data-step="all"]) .ov-slick{opacity:1;clip-path:inset(0)}
.detect-frame[data-step="1"] .g-ship{opacity:.45}
.detect-frame:is([data-step="3"],[data-step="5"]) .ov-slick{opacity:.35;clip-path:inset(0)}
.detect-frame[data-step="4"] .ov-slick{opacity:.55;clip-path:inset(0)}
.detect-frame:is([data-step="3"],[data-step="4"],[data-step="all"]) .g-ship,
.detect-frame:is([data-step="4"],[data-step="all"]) .g-track,
.detect-frame[data-step="2"] .g-cand,
.detect-frame[data-step="3"] .g-hist,
.detect-frame[data-step="4"] .g-cross{opacity:1}
.detect-frame[data-step="3"] .ov-dim{opacity:.22}
.detect-frame[data-step="5"] .ov-dim{opacity:.45}
.g-cross line{transform-box:fill-box;transform-origin:center;transform:scale(0);transition:transform 1.4s var(--ease)}
.detect-frame[data-step="4"] .g-cross line{transform:scale(1)}

/* classify: look-alikes are outlined, scored, then set aside */
.ov .cand{stroke:rgba(255,255,255,.8);stroke-dasharray:3 6;transform-box:fill-box;transform-origin:center;transform:scale(.7);opacity:0;
  transition:transform 1.2s var(--ease),opacity .6s var(--ease),stroke .8s var(--ease)}
.detect-frame[data-step="2"] .cand{transform:none;opacity:1;stroke:rgba(255,255,255,.3);
  transition:transform 1.2s var(--ease),opacity .6s var(--ease),stroke .8s var(--ease) 1.7s}
.detect-frame[data-step="2"] .cand:nth-child(2){transition-delay:.25s,.25s,1.9s}

/* historical AIS tracks flow in along the lane while the hull is matched */
.ov .hist{stroke:rgba(255,255,255,.34);stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset .5s var(--ease)}
.detect-frame[data-step="3"] .hist{stroke-dashoffset:0;transition:stroke-dashoffset 2.2s var(--ease) calc(var(--i) * .14s)}

/* labels: positioned in film pixels inside a box that is cropped exactly like the video (anchored right) */
.ov-map{position:absolute;top:0;right:0;height:100%;aspect-ratio:1440/806;z-index:5;pointer-events:none}
.ov-label{position:absolute;left:calc(var(--x) / 1440 * 100%);top:calc(var(--y) / 806 * 100%);display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--r-pill);
  white-space:nowrap;color:#fff;font-size:12px;font-weight:500;line-height:1;letter-spacing:-.005em;font-variant-numeric:tabular-nums;
  background:rgba(10,10,12,.5);border:1px solid rgba(255,255,255,.14);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  opacity:0;transform:translate3d(0,8px,0);transition:opacity .6s var(--ease),transform .9s var(--ease)}
.at-bl{translate:0 -100%}.at-br{translate:-100% -100%}
.detect-frame[data-step="0"] [data-for="0"],.detect-frame[data-step="1"] [data-for="1"],
.detect-frame[data-step="3"] [data-for="3"],.detect-frame[data-step="4"] [data-for="4"]{opacity:1;transform:none;transition-delay:.35s}
.cls b{font-weight:600}
.cf{position:relative;width:34px;height:3px;border-radius:2px;background:rgba(255,255,255,.18);overflow:hidden}
.cf i{position:absolute;inset:0;background:#fff;transform:scaleX(0);transform-origin:0 50%;transition:transform .3s var(--ease)}
.cv{min-width:2.4em;color:rgba(255,255,255,.72)}
.cx{max-width:0;overflow:hidden;color:rgba(255,255,255,.6);opacity:0;transition:max-width .3s var(--ease),opacity .3s var(--ease)}
.cls--keep{border-color:color-mix(in srgb,var(--film-accent) 55%,transparent)}
.cls--keep .cf i{background:var(--film-accent)}
.cls--keep .cx{color:var(--film-accent)}
.detect-frame[data-step="2"] .cls{opacity:1;transform:none;transition:opacity .6s var(--ease) .5s,transform .9s var(--ease) .5s}
.detect-frame[data-step="2"] .cls:nth-child(2 of .cls){transition-delay:.75s}
.detect-frame[data-step="2"] .cls--keep{transition-delay:1.1s}
.detect-frame[data-step="2"] .cf i{transform:scaleX(var(--v));transition:transform 1.1s var(--ease) 1s}
.detect-frame[data-step="2"] .cx{max-width:7em;opacity:1;transition:max-width .8s var(--ease) 1.9s,opacity .6s var(--ease) 2s}
.detect-frame[data-step="2"] .cls:not(.cls--keep){opacity:.5;transition:opacity .8s var(--ease) 2.4s,transform .9s var(--ease) .5s}

/* identify: the vessel dossier pulls up from the ship, then each identity field is redacted */
.dossier{position:absolute;z-index:6;left:3.4%;top:6%;width:min(340px,44%);padding:16px 18px 14px;border-radius:var(--r-lg);
  background:var(--evidence-bg);color:var(--evidence-fg);box-shadow:0 30px 80px rgba(0,0,0,.35),0 0 0 1px var(--evidence-line);
  -webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);
  opacity:0;transform:translate3d(40px,-10px,0) scale(.94);transform-origin:100% 0;transition:opacity .45s var(--ease),transform .8s var(--ease)}
.detect-frame[data-step="3"] .dossier{opacity:1;transform:none;transition:opacity .6s var(--ease) .55s,transform 1.1s var(--ease) .55s}
.dz-head{display:flex;align-items:center;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--evidence-line)}
.dz-head>span:nth-child(2){flex:1;min-width:0}
.dz-ph{position:relative;flex:none;width:72px;height:48px;border-radius:8px;overflow:hidden;background:#06121c url(/assets/img/hero-poster.webp?v=3d98a3eb44) -283px -22px/370px auto no-repeat}
.dz-ph i{position:absolute;inset:5px}
.dz-ph::before,.dz-ph::after,.dz-ph i::before,.dz-ph i::after{content:"";position:absolute;width:9px;height:9px;border:0 solid rgba(255,255,255,.9)}
.dz-ph::before{left:5px;top:5px;border-width:1px 0 0 1px}.dz-ph::after{right:5px;bottom:5px;border-width:0 1px 1px 0}
.dz-ph i::before{right:0;top:0;border-width:1px 1px 0 0}.dz-ph i::after{left:0;bottom:0;border-width:0 0 1px 1px}
.dz-k{display:block;font-size:15px;font-weight:600;letter-spacing:-.016em}
.dz-h{display:block;margin-top:3px;font-size:12px;color:var(--text-meta)}
.dz-match{flex:none;align-self:flex-start;padding:4px 8px;border-radius:var(--r-pill);font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums;
  color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 45%,transparent)}
.dz-rows{margin:0}
.dz-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:9px 0;border-bottom:1px solid var(--evidence-line);font-size:13.5px;
  opacity:0;transform:translate3d(0,6px,0);transition:opacity .3s var(--ease),transform .5s var(--ease)}
.dz-row:last-child{border-bottom:0}
.dz-row dt{color:var(--text-meta)}
.dz-row dd{margin:0;display:flex;align-items:center;gap:8px;font-weight:500;font-variant-numeric:tabular-nums}
.detect-frame[data-step="3"] .dz-row{opacity:1;transform:none;transition:opacity .5s var(--ease) calc(.95s + var(--i) * .08s),transform .8s var(--ease) calc(.95s + var(--i) * .08s)}
.rd{position:relative;display:inline-block;width:calc(var(--n) * 1ch);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.95em;letter-spacing:0;white-space:nowrap}
.rd-t{opacity:.85}
.rd::after{content:"";position:absolute;inset:.08em -.18em;border-radius:3px;background:currentColor;transform:scaleX(0);transform-origin:0 50%;transition:transform .3s var(--ease)}
.detect-frame:is([data-step="3"],[data-step="all"]) .rd::after{transform:scaleX(1);transition:transform .7s var(--ease-io) calc(1.75s + var(--d))}
.dz-flag{padding:3px 7px;border-radius:var(--r-pill);font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--alert);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--alert) 55%,transparent)}
[data-theme="light"] .dz-flag{color:#b4441c;box-shadow:inset 0 0 0 1px rgba(180,68,28,.4)}
.dz-foot{margin-top:10px;font-size:11.5px;color:var(--text-meta);opacity:0;transition:opacity .4s var(--ease)}
.detect-frame[data-step="3"] .dz-foot{opacity:1;transition:opacity .8s var(--ease) 2.6s}

.detect-frame .vctl{right:12px;bottom:12px}
.evidence{position:absolute;z-index:6;left:50%;top:50%;width:min(360px,100% - 48px);padding:22px 24px 14px;border-radius:var(--r-lg);
  background:var(--evidence-bg);color:var(--evidence-fg);box-shadow:0 30px 80px rgba(0,0,0,.35),0 0 0 1px var(--evidence-line);
  -webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);
  opacity:0;transform:translate3d(-50%,-42%,0) scale(.96);transition:opacity .6s var(--ease),transform 1s var(--ease)}
.detect-frame[data-step="5"] .evidence{opacity:1;transform:translate3d(-50%,-50%,0);transition-delay:.15s}
.ev-k{font-size:13px;font-weight:600;color:var(--text-meta)}
.ev-h{margin-top:4px;font-size:20px;line-height:1.2;font-weight:600;letter-spacing:-.022em}
.evidence ul{margin-top:12px;border-top:1px solid var(--evidence-line)}
.evidence li{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--evidence-line);font-size:14.5px;letter-spacing:-.01em;
  opacity:0;transform:translate3d(0,8px,0);transition:opacity .5s var(--ease),transform .7s var(--ease)}
.evidence li:last-child{border-bottom:0}
.evidence li svg{width:16px;height:16px;flex:none;color:var(--accent)}
.detect-frame[data-step="5"] .evidence li{opacity:1;transform:none}
.detect-frame[data-step="5"] .evidence li:nth-child(1){transition-delay:.45s}
.detect-frame[data-step="5"] .evidence li:nth-child(2){transition-delay:.55s}
.detect-frame[data-step="5"] .evidence li:nth-child(3){transition-delay:.65s}
.detect-frame[data-step="5"] .evidence li:nth-child(4){transition-delay:.75s}
.detect-frame[data-step="5"] .evidence li:nth-child(5){transition-delay:.85s}
/* static (no motion): the film shows the detection; the cards stay out of the way */
html:not(.motion) :is(.dossier,.evidence,.ov-label){display:none}

/* smaller frames (short laptop screens, tablets): a more compact dossier */
@container (max-width:860px){
  .dossier{width:min(300px,46%);padding:12px 14px 10px}
  .dz-ph{width:56px;height:38px;background-position:-220px -17px;background-size:288px auto}
  .dz-k{font-size:13.5px}.dz-h{font-size:11px}
  .dz-row{padding:6px 0;font-size:12px}
  .dz-row:nth-child(5){display:none}
  .dz-foot{margin-top:6px;font-size:10.5px}
  .evidence{padding:16px 18px 8px}
  .ev-h{font-size:17px}
  .evidence li{padding:7px 0;font-size:13px}
}
@media (max-width:767px){
  /* square crop, anchored right, so the vessel and the head of the slick stay in view */
  .detect-stage,.motion .detect-stage{--fw:100%}
  .detect-frame{aspect-ratio:1/1}
  .ov-label{left:calc(var(--mx,var(--x)) / 1440 * 100%);top:calc(var(--my,var(--y)) / 806 * 100%);gap:6px;padding:6px 9px;font-size:10.5px}
  .cf{width:22px}
  .cls--far{display:none}
  .detect-frame .vctl{right:8px;bottom:8px;width:32px;height:32px}
  .dossier{left:4%;top:5%;width:62%;padding:10px 12px 8px;border-radius:14px}
  .dz-head{gap:8px;padding-bottom:8px}
  .dz-ph{width:44px;height:30px;border-radius:6px;background-position:-173px -14px;background-size:226px auto}
  .dz-ph::before,.dz-ph::after,.dz-ph i::before,.dz-ph i::after{width:6px;height:6px}
  .dz-ph::before{left:3px;top:3px}.dz-ph::after{right:3px;bottom:3px}.dz-ph i{inset:3px}
  .dz-k{font-size:12.5px}.dz-h{margin-top:1px;font-size:10px}
  .dz-match{padding:3px 6px;font-size:10px}
  .dz-row{gap:10px;padding:4.5px 0;font-size:11px}
  .dz-flag{padding:2px 5px;font-size:9px}
  .dz-foot{margin-top:5px;font-size:9.5px}
  .ev-k{font-size:12px}.ev-h{font-size:16px}
  .evidence li{padding:6px 0;font-size:12.5px}
  .step h3{font-size:36px}
  .step p{font-size:17px}
}

/* ---------- 5 · Stats over the surface ---------- */
.stats .scene-body{padding-top:clamp(120px,22vh,220px)}
.stats .shead{margin-bottom:clamp(40px,7vh,80px)}
.stats-track{position:relative}
.stats-stage{position:relative;padding:0 var(--gutter) var(--sec)}
.stat-list{display:grid;grid-template-columns:1fr;gap:clamp(64px,9vw,112px);max-width:var(--maxw);margin-inline:auto}
.stat{display:flex;flex-direction:column;align-items:center;text-align:center}
.stat-k{margin-bottom:clamp(4px,1vh,12px);font-size:clamp(17px,1.5vw,21px);font-weight:600;letter-spacing:-.012em;color:var(--text-2)}
.stat-v,.impact-v{font-family:var(--f-display);font-weight:600;letter-spacing:-.045em;font-variant-numeric:tabular-nums;white-space:nowrap;line-height:.92}
.stat-v{font-size:clamp(104px,15vw,220px)}
:is(.stat-v,.impact-v) .mask{display:block;overflow:hidden;padding:0 .06em .07em}
:is(.stat-v,.impact-v) .mask>span{display:inline-block;background:var(--stat-fill);-webkit-background-clip:text;background-clip:text;color:transparent}
:is(.stat-v,.impact-v) .u{margin-left:.04em;font-size:.46em;letter-spacing:-.02em;color:var(--stat-unit);-webkit-text-fill-color:var(--stat-unit)}
.stat-c{max-width:30ch;margin-top:clamp(12px,2.4vh,24px);font-size:clamp(17px,1.4vw,20px);line-height:1.42;color:var(--text-2);text-wrap:balance}
.stat-dots{display:none;position:absolute;left:50%;bottom:clamp(28px,6vh,56px);gap:6px;transform:translateX(-50%)}
.stat-dots i{width:22px;height:2px;border-radius:2px;background:rgba(255,255,255,.28);transition:background-color .5s var(--ease)}
.stat-dots i.on{background:#fff}
@media (min-width:768px){
  .motion .stats-track{height:340vh}
  .motion .stats-stage{position:sticky;top:0;display:grid;place-items:center;height:100vh;height:100svh;padding:var(--nav-h) var(--gutter) 0}
  .motion .stat-list{gap:0}
  .motion .stat{grid-area:1/1;will-change:transform,opacity}
  .motion .stat:not(:first-child){opacity:0}
  .motion .stat:focus-within{opacity:1 !important}
  .motion .stat-v{font-size:clamp(160px,24vw,340px)}
  .motion .stat-dots{display:flex}
}
@media (max-width:767px){
  .stat-v{font-size:clamp(96px,30vw,150px)}
  .motion .stat .mask>span{transform:translate3d(0,105%,0);transition:transform 1.4s var(--ease)}
  .motion .stat :is(.stat-k,.stat-c,.stat-src){opacity:0;transition:opacity 1.2s var(--ease) .25s}
  .motion .stat.is-in .mask>span{transform:none}
  .motion .stat.is-in :is(.stat-k,.stat-c,.stat-src){opacity:1}
}

/* ---------- 6 · Field record ---------- */
.record{padding-bottom:calc(var(--sec) * .8)}
.record .frame-cap{max-width:calc(100% - 96px)}
.rows{display:grid;gap:clamp(16px,2vw,24px);margin-top:clamp(28px,4vw,56px)}
.row{overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;scroll-padding-inline:max(var(--gutter),calc((100% - var(--maxw))/2))}
.row::-webkit-scrollbar{display:none}
.row:focus-visible{outline-offset:-3px;border-radius:var(--r-lg)}
.row-track{display:flex;gap:clamp(14px,1.6vw,20px);width:max-content;padding-inline:max(var(--gutter),calc((100vw - var(--maxw))/2))}
.dcard{flex:none;margin:0;scroll-snap-align:start}
.dimg{height:clamp(240px,27vw,400px);aspect-ratio:3/2;border-radius:var(--r-lg);overflow:hidden;background:var(--media-bg)}
.dcard--tall .dimg{aspect-ratio:4/5}
.dimg img{width:100%;height:100%;object-fit:cover;filter:var(--img-filter);transition:transform 1.4s var(--ease)}
.dcard figcaption{margin-top:12px;font-size:14px;color:var(--text-meta);letter-spacing:-.01em}
@media (min-width:768px){
  .motion .row{overflow:hidden;scroll-snap-type:none}
  .motion .row-track{will-change:transform}
}
@media (max-width:767px){ .dimg{height:min(64vw,300px)} }

/* ---------- 7 · Why it matters (the turtle clip plays by itself) ---------- */
.impact{position:relative;background:#000;color:#f5f5f7;--stat-fill:linear-gradient(180deg,#fff 30%,rgba(255,255,255,.62) 100%);--stat-unit:rgba(255,255,255,.66)}
.impact-track{position:relative}
.impact-stage{position:relative;display:flex;align-items:flex-end;min-height:100vh;min-height:100svh;overflow:hidden}
.impact-media{position:absolute;inset:0}
.impact-vctl{right:var(--gutter);bottom:clamp(16px,4vh,32px)}
.impact-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 40%}
.impact-scrim{position:absolute;inset:0;background:linear-gradient(0deg,rgba(0,0,0,.82) 0%,rgba(0,0,0,.5) 34%,rgba(0,0,0,0) 72%),linear-gradient(90deg,rgba(0,0,0,.36),rgba(0,0,0,0) 60%)}
.impact-copy{position:relative;z-index:1;width:min(var(--maxw),100% - 2*var(--gutter));margin:0 auto;padding:calc(var(--nav-h) + 40px) 0 clamp(48px,10vh,112px)}
.impact-e{margin-bottom:10px}
.impact-k{font:600 clamp(26px,2.6vw,38px)/1.1 var(--f-display);letter-spacing:-.024em}
.impact-v{margin:clamp(6px,1vh,14px) 0 0 -.04em;font-size:clamp(120px,19vw,280px)}
.impact-c{max-width:30em;margin-top:clamp(10px,2vh,20px);font-size:clamp(17px,1.5vw,22px);line-height:1.42;color:var(--text-2)}
.motion .impact-copy>*{opacity:0}

/* ---------- 8 · Investigations ---------- */
.invest .shead{margin-bottom:clamp(36px,5vw,64px)}

/* ---------- 9 · Report over oil ---------- */
.report .scene-body{padding-block:clamp(120px,20vh,200px) clamp(96px,14vh,160px)}
.report .shead{margin-bottom:0}
.report-card{width:min(760px,100%);margin:clamp(40px,6vw,64px) auto 0;padding:clamp(24px,4vw,48px);border-radius:var(--r-xl);
  background:var(--glass-bg);color:var(--text);box-shadow:0 0 0 1px var(--glass-line),0 40px 120px rgba(0,0,0,.45);
  -webkit-backdrop-filter:blur(30px) saturate(150%);backdrop-filter:blur(30px) saturate(150%)}
/* secondary text on the glass card keeps ≥4.5:1 even over the brightest patches of the loop behind it */
[data-theme="dark"] .report-card{--text-2:#b0b0b5;--text-meta:#98989d}
[data-theme="light"] .report-card{--text-2:#5e5e63;--text-meta:#5e5e63}
.report-intro{margin-bottom:24px;font-size:17px;line-height:1.47;color:var(--text-2)}
.report-alt{margin-top:clamp(28px,4vw,44px);text-align:center;font-size:15px;color:var(--text-2)}
.report-alt a{display:inline-flex;align-items:center;min-height:44px;color:#fff;text-underline-offset:3px}
.report-alt a:hover{text-decoration:underline}

/* ---------- 8b · Investigations partner ---------- */
.partner{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:8px 40px;margin-top:clamp(56px,8vw,96px);padding-top:clamp(28px,3.4vw,40px);border-top:1px solid var(--line);color:var(--text)}
.partner-k{grid-column:1/-1;font-size:14px;font-weight:600;color:var(--text-meta)}
.partner-n{font:600 clamp(36px,4.6vw,64px)/1 var(--f-display);letter-spacing:-.035em}
.partner-d{max-width:34em;font-size:clamp(16px,1.3vw,19px);line-height:1.42;color:var(--text-2)}
.partner-go{display:inline-flex;align-items:center;gap:6px;font-size:15px;color:var(--accent);white-space:nowrap}
.partner-go .chev{width:11px;height:11px;transition:transform .4s var(--ease)}
.partner:hover .partner-go .chev{transform:translate3d(2px,-2px,0)}
@media (max-width:860px){
  .partner{grid-template-columns:1fr;gap:12px}
}

/* ---------- 8c · Fund the watch ---------- */
.fund{padding-block:var(--sec)}
.fund .shead{margin-bottom:clamp(36px,5vw,64px)}
.fund-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(16px,2vw,24px)}
.fund-card{display:flex;flex-direction:column;height:100%;padding:clamp(22px,2.4vw,32px);border-radius:var(--r-xl);background:var(--surface);box-shadow:0 0 0 1px var(--line-soft);color:var(--text);transition:transform .6s var(--ease),background-color .4s}
.fund-card:hover{transform:translate3d(0,-4px,0)}
.fund-k{font-size:13px;font-weight:600;color:var(--text-meta)}
.fund-t{margin-top:10px;font:600 clamp(22px,2vw,28px)/1.12 var(--f-display);letter-spacing:-.026em;text-wrap:balance}
.fund-s{margin-top:12px;font-size:16px;line-height:1.42;color:var(--text-2);flex:1}
.fund-bar{display:block;height:4px;margin-top:28px;border-radius:2px;background:var(--line);overflow:hidden}
.fund-bar i{display:block;height:100%;border-radius:2px;background:var(--accent);transform:scaleX(var(--p));transform-origin:0 50%}
.fund-m{display:flex;justify-content:space-between;gap:12px;margin-top:12px;font-size:14px;font-weight:500;font-variant-numeric:tabular-nums}
.fund-m span:last-child{color:var(--text-meta)}
.fund-note{margin-top:clamp(28px,3.4vw,44px);max-width:46em;font-size:15px;line-height:1.5;color:var(--text-meta)}
.fund-note a{color:var(--text-2);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line)}
@media (max-width:900px){.fund-list{grid-template-columns:1fr}}

/* sources under the figures */
.stat-src,.impact-src{margin-top:clamp(10px,1.6vh,16px);font-size:13px;line-height:1.4;color:var(--text-meta)}
.stat-src a,.impact-src a{color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-color:color-mix(in srgb,currentColor 35%,transparent)}
.stat-src a:hover,.impact-src a:hover{color:var(--text)}

/* ==== pages/satellite.css ==== */
/* =====================================================================
   MEPA Orbital (/satellite/, prefix "sat-"). A full-screen stage holds a film that plays and loops by itself (core.js, data-bg-video);
   eight captions cross-fade over it, one per 6 s shot (assets/js/pages/satellite.js follows the film's clock). Without motion (reduced
   motion / Save-Data / no JS) the poster frame shows and the captions read as a normal list. Space is always dark, in both themes.
   ===================================================================== */
.sat{--sat-bg:#02040a;background:var(--sat-bg);color:#eef2f7}
.sat-track{position:relative}
.sat-stage{position:relative;height:100svh;min-height:520px;overflow:hidden;background:var(--sat-bg)}
.sat-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:var(--sat-bg)}
.sat-shade{position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,rgba(2,4,10,.62) 0%,rgba(2,4,10,.18) 46%,rgba(2,4,10,0) 70%),linear-gradient(0deg,rgba(2,4,10,.7) 0%,rgba(2,4,10,0) 38%),linear-gradient(180deg,rgba(2,4,10,.5) 0%,rgba(2,4,10,0) 22%)}
@media (max-width:899px){.sat-shade{background:linear-gradient(0deg,rgba(2,4,10,.86) 0%,rgba(2,4,10,.4) 42%,rgba(2,4,10,0) 66%),linear-gradient(180deg,rgba(2,4,10,.5) 0%,rgba(2,4,10,0) 20%)}}

/* words on top */
.sat-hud{position:absolute;inset:0;z-index:2;pointer-events:none}
.sat-title{position:absolute;left:var(--gutter);top:calc(var(--nav-h) + clamp(18px,3vh,36px));margin:0;font:600 clamp(15px,1.5vw,18px)/1 var(--f-display);letter-spacing:.22em;text-transform:uppercase;color:rgba(255,255,255,.7)}
.sat-cap{position:absolute;left:var(--gutter);bottom:clamp(76px,11vh,120px);width:min(400px,calc(100% - 2*var(--gutter)))}
.sat-item{padding:22px 24px;border-radius:var(--r-lg);background:rgba(8,12,22,.62);box-shadow:0 0 0 1px rgba(255,255,255,.1);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.sat-k{display:flex;align-items:baseline;gap:10px;margin:0 0 10px;font-size:13px;font-weight:600;letter-spacing:.02em;color:#8fd6ee}
.sat-k span{font-weight:500;font-variant-numeric:tabular-nums;color:rgba(255,255,255,.5)}
.sat-item h2{margin:0 0 10px;font:600 clamp(22px,2.2vw,28px)/1.1 var(--f-display);letter-spacing:-.026em;text-wrap:balance;color:#fff}
.sat-item p{margin:0;font-size:15px;line-height:1.5;color:rgba(255,255,255,.78)}
.sat-item .sat-k{color:#8fd6ee}
.sat-index{position:absolute;left:var(--gutter);right:var(--gutter);bottom:clamp(18px,3vh,32px);display:flex;gap:6px;pointer-events:auto}
.sat-tab{position:relative;flex:1;min-width:0;padding:12px 2px 0;border:0;background:none;color:rgba(255,255,255,.55);font:600 12px/1.2 var(--f);letter-spacing:.01em;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sat-tab i{position:absolute;left:0;right:0;top:0;height:2px;background:rgba(255,255,255,.22)}
.sat-tab i::after{content:"";position:absolute;inset:0;background:#8fd6ee;transform:scaleX(var(--p,0));transform-origin:0 50%}
.sat-vctl{right:var(--gutter);bottom:auto;top:calc(var(--nav-h) + clamp(14px,2.4vh,30px))}
.sat-tab{text-shadow:0 1px 6px rgba(0,0,0,.7)}
.sat-tab:hover,.sat-tab:focus-visible{color:#fff}
@media (max-width:899px){.sat-tab span{display:none}.sat-tab{padding-top:14px;overflow:visible}.sat-tab::after{content:"";position:absolute;left:-3px;right:-3px;top:-15px;bottom:-15px} /* a 44 px tall touch target around the thin tick */.sat-cap{bottom:56px;width:calc(100% - 2*var(--gutter))}.sat-item{padding:16px 18px}.sat-item p{font-size:14px}}

/* with motion only the current caption shows, cross-faded */
.motion .sat-cap{display:grid}
.motion .sat-item{grid-area:1/1;opacity:0;transform:translate3d(0,14px,0);transition:opacity .6s var(--ease),transform .8s var(--ease);visibility:hidden}
.motion .sat-item.is-current{opacity:1;transform:none;visibility:visible;transition-delay:.45s}

/* static: the poster frame, then the captions as a list */
html:not(.motion) .sat-stage{height:auto;min-height:0;padding-top:var(--nav-h)}
html:not(.motion) .sat-video{position:relative;inset:auto;display:block;width:100%;height:auto;aspect-ratio:16/9;max-height:70svh}
html:not(.motion) .sat-shade{display:none}
html:not(.motion) .sat-hud{position:static;pointer-events:auto}
html:not(.motion) .sat-title{position:static;margin:24px var(--gutter)}
html:not(.motion) .sat-cap{position:static;display:grid;gap:14px;width:min(var(--maxw),100% - 2*var(--gutter));margin:0 auto;padding-bottom:40px}
html:not(.motion) .sat-index{display:none}

/* the proposed specification */
.sat-spec{padding:clamp(56px,8vw,110px) 0 0}
.sat-spec .h2{max-width:16em;margin-bottom:18px;color:#fff}
.sat-spec .eyebrow{color:#8fd6ee}
.sat-lead{max-width:44em;margin:0 0 clamp(22px,3vw,34px);font-size:16px;line-height:1.55;color:rgba(255,255,255,.72)}
.sat-h3{margin:clamp(34px,5vw,56px) 0 16px;font:600 clamp(20px,2vw,26px)/1.15 var(--f-display);letter-spacing:-.02em;color:#fff}
.sat-dl{margin:0;display:grid;border-top:1px solid rgba(255,255,255,.14)}
.sat-dl>div{display:grid;grid-template-columns:minmax(120px,210px) 1fr;gap:6px 28px;padding:14px 0;border-bottom:1px solid rgba(255,255,255,.1)}
.sat-dl dt{font-size:14px;font-weight:600;color:#8fd6ee}
.sat-dl dd{margin:0;font-size:15px;line-height:1.5;color:rgba(255,255,255,.8)}
@media (max-width:640px){.sat-dl>div{grid-template-columns:1fr}}

.sat-deep{display:grid;gap:10px}
.sat-dd{border-radius:var(--r-lg);background:rgba(255,255,255,.04);box-shadow:0 0 0 1px rgba(255,255,255,.1)}
.sat-dd summary{position:relative;padding:18px 52px 18px 22px;font:600 17px/1.3 var(--f-display);letter-spacing:-.012em;color:#fff;cursor:pointer;list-style:none}
.sat-dd summary::-webkit-details-marker{display:none}
.sat-dd summary::after{content:"+";position:absolute;right:22px;top:50%;translate:0 -50%;font-size:22px;font-weight:400;color:#8fd6ee;transition:rotate .3s var(--ease)}
.sat-dd[open] summary::after{rotate:45deg}
.sat-dd .sat-dl{border-top:1px solid rgba(255,255,255,.12);padding:0 22px 6px}
.sat-dd .sat-dl>div:last-child{border-bottom:0}

/* the closing section */
.sat-end{padding:clamp(56px,9vw,120px) 0 var(--sec)}
.sat-end .h2{max-width:16em;margin-bottom:clamp(24px,3.4vw,44px);color:#fff}
.sat-end .eyebrow{color:#8fd6ee}
.sat-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}
.sat-box2{padding:24px;border-radius:var(--r-lg);background:rgba(255,255,255,.05);box-shadow:0 0 0 1px rgba(255,255,255,.1)}
.sat-box2 h3{margin:0 0 10px;font:600 19px/1.2 var(--f-display);letter-spacing:-.018em;color:#fff}
.sat-box2 p{margin:0;font-size:15px;line-height:1.55;color:rgba(255,255,255,.74)}
.sat-links{display:flex;flex-wrap:wrap;gap:12px;margin:clamp(24px,3vw,40px) 0 0}
.sat-foot{max-width:46em;margin:28px 0 0;font-size:13.5px;line-height:1.55;color:rgba(255,255,255,.55)}
.sat-foot a{color:#8fd6ee;text-decoration:underline;text-underline-offset:3px}


/* teaser band on the home and technology pages */
.sat-tease{position:relative;isolation:isolate;overflow:hidden;background:#02040a;color:#fff;padding:clamp(80px,13vw,180px) 0}
.sat-tease-bg{position:absolute;inset:0;z-index:-1}
.sat-tease-bg img{width:100%;height:100%;object-fit:cover;object-position:62% 50%}
.sat-tease-bg::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(2,4,10,.86) 0%,rgba(2,4,10,.5) 52%,rgba(2,4,10,.1) 100%)}
@media (max-width:767px){.sat-tease-bg::after{background:linear-gradient(0deg,rgba(2,4,10,.9) 0%,rgba(2,4,10,.55) 100%)}}
.sat-tease .eyebrow{color:#8fd6ee}
.sat-tease .h2{max-width:11em;color:#fff}
.sat-tease-p{max-width:34em;margin:20px 0 0;font-size:clamp(16px,1.3vw,19px);line-height:1.55;color:rgba(255,255,255,.82)}
.sat-tease-a{margin:28px 0 0}
