/* Self-hosted webfonts. No third-party requests. */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-400-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-500-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-500-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-600-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-mono-600-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-400-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-400-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-500-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-500-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-600-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-600-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-700-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url(/assets/fonts/ibm-plex-sans-700-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Saira';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 50% 125%;
  font-display: swap;
  src: url(/assets/fonts/saira-100-900-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Saira';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 50% 125%;
  font-display: swap;
  src: url(/assets/fonts/saira-100-900-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* ═══════════ TOKENS ═══════════ */
:root{
  --void:#0B0E14; --ink:#E4E9F0; --ink-2:#98A3B4; --muted:#6B7788; --dim:#454E5C; --faint:#2C333E;
  --cyan:#22D3EE; --up:#7FD4B0; --down:#E08C9B; --amber:#E8B863;
  --edge:rgba(150,170,195,.13); --edge-2:rgba(150,170,195,.26);
  --f-display:"Saira","Helvetica Neue",Arial,sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,monospace;
  --page:min(1440px,100%); --gut:clamp(1.1rem,3vw,2.4rem);
  --ease:cubic-bezier(.22,.9,.28,1);
}
*,*::before,*::after{box-sizing:border-box;}
html{scroll-behavior:smooth;}
html.js body{overflow:hidden;}
html.js.ready body{overflow:visible;overflow-x:hidden;}
html.sheeting body{overflow:hidden;}
body{margin:0;background:var(--void);color:var(--ink-2);
  font-family:var(--f-mono);font-size:.78rem;line-height:1.85;
  font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;}
a{color:inherit;}
:focus-visible{outline:1px solid var(--cyan);outline-offset:3px;}
.cy{color:var(--cyan);}
strong{font-weight:500;color:var(--ink);}
p{margin:0;}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);}

/* ═══════════ THE WORLD ═══════════ */
#gl{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block;}
html:not(.webgl) #gl{display:none;}
.stage{position:fixed;inset:0;z-index:0;overflow:hidden;background:var(--void);}
.stage figure{position:absolute;inset:0;margin:0;opacity:0;transition:opacity 1.2s var(--ease);}
.stage figure.on{opacity:1;}
.stage img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.3) brightness(.6);}
html.webgl .stage,html.webgl .grain{display:none;}
.veil{position:fixed;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,rgba(11,14,20,.7) 0%,rgba(11,14,20,0) 22%,rgba(11,14,20,0) 74%,rgba(11,14,20,.8) 100%);}
html.webgl .veil{opacity:.6;}
.grain{position:fixed;inset:0;z-index:3;pointer-events:none;opacity:.13;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");}

/* The track is invisible: it exists only to give the camera something to fly along. */
.track{position:relative;z-index:1;pointer-events:none;}
/* The sheet layer sits above everything, but it must not intercept anything
   while no sheet is open: it is as tall as the scroll track, so it was
   swallowing every click on the chrome underneath it. */
.main{position:relative;z-index:90;pointer-events:none;}
.sheet{pointer-events:auto;}
/* While a sheet is open the world recedes: the frame stays visible behind the
   glass, but nothing from the flight can be clicked or read over it. */
html.sheeting .chrome,html.sheeting .stations,html.sheeting .rail,
html.sheeting .nav,html.sheeting .riskline{opacity:0;pointer-events:none;}
.nav,.riskline{transition:opacity .4s var(--ease);}

/* ═══════════ IDENT ═══════════
   No countdown. The mark resolves out of noise, the way a terminal decodes a
   string, over the pad held barely lit behind it. */
.boot{position:fixed;inset:0;z-index:200;background:rgba(4,6,10,.93);
  display:grid;place-items:center;transition:opacity .9s var(--ease);}
html:not(.js) .boot{display:none;}
.boot.done{opacity:0;pointer-events:none;}

.boot-mark{display:flex;align-items:baseline;gap:clamp(.55rem,1.2vw,.95rem);}
.boot-glyph{width:clamp(30px,3.4vw,44px);height:auto;align-self:center;
  filter:drop-shadow(0 0 18px rgba(34,211,238,.35));}
.boot-glyph path{stroke-dasharray:130;stroke-dashoffset:130;
  animation:draw 1.05s var(--ease) forwards;}
.boot-glyph path:nth-child(2){animation-delay:.22s;}
@keyframes draw{to{stroke-dashoffset:0;}}
.boot-word{font-family:var(--f-display);font-variation-settings:"wdth" 108;
  font-weight:700;font-size:clamp(2rem,5.2vw,3.6rem);letter-spacing:.015em;
  color:var(--ink);font-variant-numeric:tabular-nums;}
.boot-sub2{font-size:clamp(.56rem,1vw,.74rem);letter-spacing:.42em;
  text-transform:uppercase;color:var(--muted);}
.boot-word.set{text-shadow:0 0 42px rgba(190,225,255,.28);}

.boot-lbl{position:absolute;top:var(--gut);left:var(--gut);
  font-size:.55rem;letter-spacing:.26em;text-transform:uppercase;color:var(--muted);}
.boot-id{position:absolute;top:var(--gut);right:var(--gut);
  font-size:.55rem;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);}
.boot-timer{position:absolute;left:var(--gut);bottom:calc(var(--gut) + 1.5rem);
  font-size:.6rem;letter-spacing:.22em;color:var(--cyan);font-variant-numeric:tabular-nums;}
.boot .bar{position:absolute;left:var(--gut);right:var(--gut);bottom:var(--gut);
  height:1px;background:rgba(150,170,195,.16);display:block;}
.boot .bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--ink);
  transition:width .18s linear;}

/* A short, cool bloom as the frame comes up. Not an explosion. */
.flash{position:fixed;inset:0;z-index:205;pointer-events:none;opacity:0;
  mix-blend-mode:screen;
  background:radial-gradient(60% 60% at 50% 46%,rgba(226,244,252,.9) 0%,rgba(140,205,225,.4) 34%,rgba(90,170,200,0) 72%);}
.flash.fire{animation:fire .95s var(--ease) forwards;}
@keyframes fire{0%{opacity:0;}14%{opacity:.62;}100%{opacity:0;}}

/* ═══════════ CHROME AT THE FRAME EDGES ═══════════ */
.nav{position:fixed;top:0;left:0;right:0;z-index:60;padding:1.1rem 0;
  transition:opacity .7s var(--ease);}
/* The bar stays out of the way until the ident has resolved. */
html.js:not(.ready) .nav{opacity:0;pointer-events:none;}
.nav-in{width:var(--page);margin-inline:auto;padding-inline:var(--gut);display:flex;align-items:flex-start;gap:1rem;}
.mark{display:flex;align-items:center;gap:.5rem;text-decoration:none;flex:none;}
.mark .glyph{width:20px;height:20px;}
.mark b{font-family:var(--f-display);font-variation-settings:"wdth" 108;font-weight:700;
  font-size:1.12rem;letter-spacing:.03em;color:var(--ink);}
.mark span{font-size:.52rem;letter-spacing:.26em;color:var(--dim);text-transform:uppercase;}
.nav-links{margin-left:auto;display:flex;align-items:flex-start;gap:1.5rem;}
.lnk{font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);
  transition:color .3s var(--ease);}
.lnk:hover{color:var(--ink);}
.btn{display:inline-flex;align-items:center;gap:.4rem;font-size:.55rem;font-weight:500;
  letter-spacing:.22em;text-transform:uppercase;color:var(--ink);text-decoration:none;}
.btn::before{content:"[";margin-right:.3rem;color:var(--dim);}
.btn::after{content:"]";margin-left:.3rem;color:var(--dim);}
.btn:hover,.btn:hover::before,.btn:hover::after{color:var(--cyan);}

.chrome{position:fixed;inset:0;z-index:47;pointer-events:none;opacity:0;
  transition:opacity 1.4s var(--ease);}
.chrome.in{opacity:1;}
.chrome > *{position:absolute;pointer-events:auto;}
.ck{display:block;font-size:.53rem;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);}
.ck.dim{color:var(--faint);margin-top:.5rem;}
.c-tr{top:5.5rem;right:var(--gut);width:min(20rem,42vw);text-align:right;}
.c-tr p{margin-top:.7rem;font-size:.66rem;line-height:1.85;color:var(--ink-2);}
.c-bl{bottom:4.4rem;left:var(--gut);}
.c-br{bottom:4.4rem;right:var(--gut);}
.c-nav{display:none;position:absolute;left:var(--gut);right:var(--gut);bottom:4.4rem;
  flex-wrap:wrap;gap:.5rem 1.1rem;}
.c-nav button{font-size:.5rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);}
.c-nav button::before{content:"[ ";color:var(--faint);}
.c-nav button::after{content:" ]";color:var(--faint);}
.c-nav button:hover{color:var(--cyan);}
.lk{font-size:.53rem;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);
  transition:color .3s var(--ease);}
.lk:hover{color:var(--cyan);}

.riskline{position:fixed;left:0;right:0;bottom:0;z-index:46;
  padding:.7rem var(--gut);border-top:1px solid rgba(224,140,155,.2);
  background:rgba(9,11,17,.86);backdrop-filter:blur(10px);
  font-size:.62rem;line-height:1.7;color:var(--ink-2);}
.riskline b{font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--down);}
.riskline .lk{display:inline;font-size:.62rem;letter-spacing:.1em;text-transform:none;color:var(--cyan);}
/* Only the three registered identifiers remain unfilled. Quiet, but still
   unmistakably not final copy. */
.fill-in{font-weight:500;color:var(--amber);opacity:.85;
  border-bottom:1px dashed rgba(232,184,99,.45);overflow-wrap:anywhere;}

/* ═══════════ STATION CALLOUTS ═══════════
   Pinned every frame to the projected screen position of the shard they
   describe, so the annotation travels with its subject. */
.stations{position:fixed;inset:0;z-index:44;pointer-events:none;opacity:0;
  transition:opacity 1.4s var(--ease);}
.stations.in{opacity:1;}
.st{position:absolute;top:0;left:0;opacity:0;transition:opacity .5s var(--ease);will-change:transform;}
.st.live{opacity:1;}
.retic{position:absolute;left:-150px;top:-150px;width:300px;height:300px;}
.retic i{position:absolute;width:12px;height:12px;border:0 solid rgba(150,170,195,.4);}
.retic i:nth-child(1){top:0;left:0;border-top-width:1px;border-left-width:1px;}
.retic i:nth-child(2){top:0;right:0;border-top-width:1px;border-right-width:1px;}
.retic i:nth-child(3){bottom:0;left:0;border-bottom-width:1px;border-left-width:1px;}
.retic i:nth-child(4){bottom:0;right:0;border-bottom-width:1px;border-right-width:1px;}
.ann{position:absolute;display:flex;align-items:center;gap:.55rem;white-space:nowrap;pointer-events:auto;}
.ann .ld{width:clamp(34px,5vw,86px);height:1px;flex:none;
  background:linear-gradient(90deg,rgba(150,170,195,.14),rgba(150,170,195,.55));}
.ann dl{margin:0;display:flex;flex-direction:column;gap:.1rem;}
.ann dt{font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);}
.ann dd{margin:0;font-size:.72rem;letter-spacing:.05em;color:var(--ink);}
.ann.rt{flex-direction:row-reverse;right:auto;left:-166px;top:-120px;transform:translateX(-100%);}
.ann.rt dl{align-items:flex-end;}
.ann.rt .ld{background:linear-gradient(270deg,rgba(150,170,195,.14),rgba(150,170,195,.55));}
.ann.a-b{left:166px;top:-14px;}
.ann.a-c{left:166px;top:86px;}
.explore{font-size:.68rem;letter-spacing:.1em;color:var(--cyan);
  border-bottom:1px solid rgba(34,211,238,.35);transition:border-color .3s var(--ease);}
.explore:hover{border-color:var(--cyan);}

/* ═══════════ RAIL ═══════════ */
.rail{position:fixed;left:max(.8rem,calc((100vw - var(--page)) / 2 - 1.5rem));top:50%;
  translate:0 -50%;z-index:47;display:flex;flex-direction:column;gap:.1rem;opacity:0;
  transition:opacity .9s var(--ease);}
.rail.in{opacity:1;}
.rail a{display:flex;align-items:center;gap:.7rem;text-decoration:none;padding:.42rem 0;position:relative;}
.rail .dot{width:5px;height:5px;flex:none;background:var(--faint);transition:background .4s var(--ease);}
.rail a.past .dot{background:var(--ink);}
.rail a.on .dot{background:var(--cyan);}
.rail .txt{position:absolute;left:1.15rem;top:50%;translate:0 -50%;white-space:nowrap;
  font-size:.5rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);
  opacity:0;transform:translateX(-4px);pointer-events:none;transition:opacity .35s var(--ease),transform .35s var(--ease);}
.rail a:hover .txt{opacity:1;transform:none;}

/* ═══════════ DETAIL SHEETS ═══════════
   The frame stays; the detail arrives on top of it, the way Igloo opens a
   summary over the scene rather than scrolling you away from it. */
.sheet{position:fixed;inset:0;z-index:80;overflow-y:auto;overscroll-behavior:contain;
  background:linear-gradient(180deg,rgba(7,10,15,.95),rgba(7,10,15,.99));
  backdrop-filter:blur(22px) saturate(1.1);
  opacity:1;
  animation:sheetIn .5s var(--ease) both;}
.sheet[hidden]{display:none;}
/* Only the transform is animated. An opacity keyframe here left the panel at
   zero whenever the animation did not get to run, which read as an empty sheet. */
@keyframes sheetIn{from{transform:translateY(16px);}to{transform:none;}}
.sheet-bar{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:1rem;
  padding:1.1rem var(--gut);border-bottom:1px solid var(--edge);
  background:linear-gradient(180deg,rgba(7,10,15,.97),rgba(7,10,15,.86));}
.sheet-id{font-size:.53rem;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);}
.sheet-id em{font-style:normal;color:var(--faint);}
.sheet-x{margin-left:auto;font-size:.53rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink);}
.sheet-x::before{content:"\231C";margin-right:.5rem;color:var(--dim);}
.sheet-x::after{content:"\231D";margin-left:.5rem;color:var(--dim);}
.sheet-x:hover{color:var(--cyan);}
.sheet-in{width:min(60rem,100%);margin-inline:auto;padding:clamp(2.4rem,6vh,4.5rem) var(--gut) 7rem;}
.sheet-in.wide{width:min(80rem,100%);}
.sheet-in > .h-l{margin-bottom:clamp(1.6rem,3vh,2.4rem);}

/* ═══════════ TYPE INSIDE A SHEET ═══════════ */
h1,h2,h3{font-family:var(--f-mono);font-weight:500;margin:0;}
.h-l{font-size:clamp(.9rem,.84rem + .3vw,1.1rem);font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;line-height:1.7;color:var(--ink);}
.h-s{font-size:.72rem;font-weight:500;letter-spacing:.15em;text-transform:uppercase;
  line-height:1.6;color:var(--ink);}
.mono{font-size:.55rem;letter-spacing:.24em;text-transform:uppercase;}
.deck{font-size:.78rem;line-height:1.85;color:var(--ink-2);max-width:52ch;margin-top:1rem;}
.body{color:var(--muted);max-width:52ch;line-height:1.85;}
.body + .body{margin-top:1.1rem;}
.small{font-size:.74rem;line-height:1.8;color:var(--muted);max-width:48ch;}
.panel{border:0;background:none;box-shadow:none;}
.two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(2rem,4vw,3.5rem);align-items:start;}
.two.flip > *:first-child{order:2;} .two.flip > *:last-child{order:1;}
.mid{width:100%;} .split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2.5rem;align-items:end;}
.split .deck{margin-top:0;}
.specs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 clamp(1.6rem,3vw,2.4rem);
  border-top:1px solid var(--edge);margin-top:1.6rem;}
.spec{padding:1.2rem 0;display:flex;flex-direction:column;gap:.5rem;border-bottom:1px solid var(--edge);}
.spec .k,.tcard .k{font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--dim);}
.spec .k::before,.tcard .k::before{content:"/// ";color:var(--faint);}
.spec p,.tcard p{font-size:.74rem;line-height:1.75;color:var(--muted);}
.flow{list-style:none;margin:1.8rem 0 0;padding:0;display:grid;border-top:1px solid var(--edge);}
.flow li{display:grid;grid-template-columns:3rem 10rem minmax(0,1fr);gap:1rem;align-items:baseline;
  padding:.8rem 0;border-bottom:1px solid var(--edge);}
.flow .i{font-size:.55rem;letter-spacing:.18em;color:var(--faint);}
.flow .s{font-size:.55rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink);}
.flow p{font-size:.74rem;line-height:1.75;color:var(--muted);}
.board{margin-top:2rem;overflow-x:auto;}
.board table{width:100%;border-collapse:collapse;min-width:44rem;}
.board th{font-size:.5rem;font-weight:500;letter-spacing:.24em;text-transform:uppercase;color:var(--dim);
  text-align:right;padding:.7rem 1rem .7rem 0;border-bottom:1px solid var(--edge-2);}
.board th:first-child{text-align:left;}
.board td{padding:.7rem 1rem .7rem 0;text-align:right;font-size:.76rem;color:var(--ink-2);
  border-bottom:1px solid var(--edge);}
.board td:first-child{text-align:left;color:var(--ink);letter-spacing:.05em;}
.board .bid,.board .ask{color:var(--ink);} .board .lev{color:var(--dim);}
.tag{display:block;margin-bottom:.25rem;font-size:.46rem;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);}
.spw{display:inline-flex;align-items:center;gap:.7rem;justify-content:flex-end;}
.spb{width:36px;height:1px;background:rgba(150,170,195,.12);position:relative;flex:none;}
.spb i{position:absolute;inset:0;background:rgba(150,170,195,.45);}
.chg.u{color:var(--up);} .chg.d{color:var(--down);}
.board .tick{display:inline-block;width:0;height:0;border-left:3px solid transparent;
  border-right:3px solid transparent;margin-left:.4rem;vertical-align:middle;opacity:0;}
.board .tick.u{border-bottom:4px solid var(--up);opacity:1;}
.board .tick.d{border-top:4px solid var(--down);opacity:1;}
@keyframes fu{from{color:var(--up);}to{color:var(--ink);}}
@keyframes fd{from{color:var(--down);}to{color:var(--ink);}}
.board tr.fu .bid,.board tr.fu .ask{animation:fu 1s var(--ease);}
.board tr.fd .bid,.board tr.fd .ask{animation:fd 1s var(--ease);}
.board-note{margin-top:1rem;font-size:.58rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}
.classes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 2rem;margin-top:2rem;border-top:1px solid var(--edge);}
.classes div{padding:1rem 0;border-bottom:1px solid var(--edge);}
.classes b{display:block;font-weight:500;font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);margin-bottom:.4rem;}
.classes b::before{content:"/// ";color:var(--faint);}
.classes p{font-size:.7rem;line-height:1.7;color:var(--dim);}
.cmp{margin-top:2.4rem;overflow-x:auto;}
.cmp table{width:100%;border-collapse:collapse;min-width:40rem;}
.cmp caption{text-align:left;font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);padding:0 0 .9rem;}
.cmp caption::before{content:"////// ";}
.cmp th,.cmp td{padding:.75rem 1.1rem .75rem 0;text-align:left;font-size:.74rem;font-weight:400;
  border-bottom:1px solid var(--edge);vertical-align:top;}
.cmp thead th{border-bottom:1px solid var(--edge-2);}
.cmp thead th span{display:block;font-size:.46rem;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);margin-bottom:.3rem;}
.cmp thead th b{font-weight:500;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink);}
.cmp tbody th{font-size:.5rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dim);width:12rem;}
.cmp td{color:var(--ink-2);} .cmp td.no{color:var(--faint);}
.cmp thead .col-f b{color:var(--cyan);}
.trust{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 clamp(1.6rem,3vw,2.4rem);
  margin-top:2rem;border-top:1px solid var(--edge);}
.trust.four{grid-template-columns:repeat(2,minmax(0,1fr));}
.tcard{padding:1.25rem 0;display:flex;flex-direction:column;gap:.5rem;border-bottom:1px solid var(--edge);}
.cta{display:flex;flex-direction:column;gap:1.1rem;align-items:flex-start;}
.hero-cta{display:flex;flex-wrap:wrap;gap:0 2.2rem;margin-top:1.4rem;}
footer{border-top:0;background:none;padding:0;margin:0;}
.foot-top{display:grid;grid-template-columns:1.35fr 1fr 1fr;gap:2rem;}
.foot-col h4{font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);font-weight:400;margin:0 0 1rem;}
.foot-col h4::before{content:"/// ";}
.foot-col ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.6rem;}
.foot-col a{font-size:.68rem;color:var(--muted);text-decoration:none;}
.foot-col a:hover{color:var(--ink);}
.legals{margin-top:2.6rem;padding-top:2rem;border-top:1px solid var(--edge);columns:2;column-gap:3rem;}
.legal{font-size:.72rem;line-height:1.8;color:var(--muted);break-inside:avoid;}
.legal + .legal{margin-top:1.5rem;}
.legal b{display:block;margin-bottom:.45rem;font-weight:400;font-size:.5rem;letter-spacing:.24em;
  text-transform:uppercase;color:var(--dim);}
.legal b::before{content:"////// ";color:var(--faint);}
.legal a{color:var(--cyan);text-decoration:none;border-bottom:1px solid rgba(34,211,238,.32);}
.legal a:hover{border-bottom-color:var(--cyan);}
.foot-btm{display:flex;flex-wrap:wrap;gap:.9rem 2rem;align-items:center;margin-top:2.4rem;
  padding-top:1.4rem;border-top:1px solid var(--edge);font-size:.5rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--faint);}
.foot-btm a{text-decoration:none;} .foot-btm .push{margin-left:auto;}
.rv,.stg > *{opacity:1;transform:none;}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important;}
}

/* ═══════════ RESPONSIVE ═══════════ */
@media (max-width:1439px){ .rail{display:none;} }
@media (max-width:1080px){
  .two,.two.flip,.split{grid-template-columns:1fr;gap:2rem;}
  .two.flip > *{order:0;}
  .foot-top{grid-template-columns:repeat(2,minmax(0,1fr));}
  .classes{grid-template-columns:repeat(2,minmax(0,1fr));}
  .c-tr{width:min(16rem,46vw);}
}
@media (max-width:860px){
  /* On a phone the section links move out of the top bar and sit as a row
     above the risk line, so every sheet is still reachable. */
  .nav-in{align-items:center;}
  .nav-links{gap:.9rem;}
  .lnk{display:none;}
  .chrome::after{content:"";}
  .c-nav{display:flex;bottom:5.2rem;}
  .c-br{left:var(--gut);right:auto;bottom:7.6rem;}
  .sm-hide{display:none;}
  .riskline{font-size:.58rem;line-height:1.65;}
  /* The callouts stop chasing the subject and stack in the corner: there is
     no room on a phone for leader lines that do not run off the edge. */
  .retic{display:none;}
  .st{position:fixed!important;left:var(--gut)!important;right:var(--gut);
      top:auto!important;bottom:9.9rem;height:auto;
      transform:none!important;display:none;}
  .st.live{display:block;opacity:1!important;}
  .ann{position:static;margin-bottom:.6rem;}
  .ann .ld{display:none;}
  .ann.rt{flex-direction:row;transform:none;}
  .ann.rt dl{align-items:flex-start;}
  .explore{font-size:.76rem;}
  .legals{columns:1;}
  .specs,.trust,.trust.four,.classes{grid-template-columns:1fr;}
  .flow li{grid-template-columns:2.4rem minmax(0,1fr);row-gap:.3rem;}
  .flow p{grid-column:2;}
  .foot-top{grid-template-columns:1fr;}
  .board table{min-width:21rem;}
  .board th:nth-child(5),.board td:nth-child(5),.board th:nth-child(6),.board td:nth-child(6){display:none;}
  .spb{display:none;}
  .cmp table{min-width:30rem;} .cmp tbody th{width:8rem;}
}
@media (scripting: none){ .boot{display:none!important;} }

/* ═══════════ HERO ═══════════
   Station one is not a slide, it is where the mission is held. The headline
   lives here and lifts away as the vehicle leaves the pad. */
.hero{position:fixed;inset:0;z-index:43;pointer-events:none;display:flex;align-items:center;
  opacity:0;transition:opacity 1.6s var(--ease);}
.hero.in{opacity:1;}
.hero-in{width:var(--page);margin-inline:auto;padding-inline:var(--gut);pointer-events:auto;
  max-width:none;}
.hero .badge{display:inline-flex;align-items:center;gap:.55rem;font-size:.55rem;
  letter-spacing:.24em;text-transform:uppercase;color:var(--muted);}
.hero .badge::before{content:"//////";color:var(--faint);letter-spacing:.1em;}
.hero .badge .led{width:4px;height:4px;background:var(--cyan);flex:none;animation:blip 2.6s infinite;}
@keyframes blip{0%,100%{opacity:1;}50%{opacity:.3;}}
.h-xl{font-family:var(--f-display);font-variation-settings:"wdth" 100;font-weight:700;
  font-size:clamp(2.2rem,5.4vw,4.4rem);letter-spacing:-.042em;line-height:.98;color:var(--ink);}
.headline{margin:clamp(1.1rem,2.4vw,1.8rem) 0 0;max-width:11ch;}
.headline .ln{display:block;}
.hero-lede{margin-top:1.4rem;font-size:.8rem;line-height:1.9;color:var(--ink-2);max-width:36ch;}
.hero .hero-cta{display:flex;flex-wrap:wrap;gap:0 2.2rem;margin-top:1.5rem;}
.hero-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem 2.5rem;
  margin-top:clamp(2rem,4vh,2.8rem);padding-top:clamp(1.2rem,2.2vh,1.7rem);
  border-top:1px solid var(--edge);max-width:28rem;}
.hero-stats div{display:flex;flex-direction:column;gap:.3rem;}
.hero-stats b{font-weight:500;font-size:1.02rem;letter-spacing:.05em;color:var(--ink);}
.hero-stats span{font-size:.5rem;letter-spacing:.24em;text-transform:uppercase;color:var(--dim);}
html.sheeting .hero{opacity:0;pointer-events:none;}
@media (max-width:860px){
  .hero{align-items:flex-end;}
  .hero-in{padding-bottom:9rem;}
  .hero-lede{max-width:30ch;}
  .hero-stats{max-width:none;gap:.8rem 1.6rem;}
}

/* ------------------------------------------------------------------
   PHONE FIXES
   The ≤860 rules reflowed the station callouts (.ann) to static inside
   .st, but .st stays pinned at bottom:9.9rem (158px) and the stack is
   ~144px tall, so it occupies 158–302px from the bottom while .hero-in
   only reserved 9rem (144px). The two overlapped by ~160px, printing
   MISSION / MET / STAGE straight through the hero stat grid. Likewise
   .c-nav (bottom 5.2rem) sat inside .c-bl (bottom 4.4rem, 39px tall).
   ------------------------------------------------------------------ */
@media (max-width:860px){
  /* Flight telemetry is pinned to a vehicle that is cropped out at phone
     width. It cannot be placed legibly here — drop it rather than overlay. */
  .st, .st.live{display:none!important;}

  /* Company & legal is already reachable from the risk strip. */
  .c-br{display:none!important;}

  /* Stack the remaining chrome above the risk strip, clear of each other,
     and clear of the home indicator. */
  .c-nav{bottom:calc(5.2rem + env(safe-area-inset-bottom,0px));}
  .c-bl{bottom:calc(9.2rem + env(safe-area-inset-bottom,0px));}
  .hero-in{padding-bottom:calc(13rem + env(safe-area-inset-bottom,0px));}

  /* Risk warning must never sit under the home indicator. */
  .riskline{padding-bottom:calc(.7rem + env(safe-area-inset-bottom,0px));}
  .boot-timer{bottom:calc(var(--gut) + 1.5rem + env(safe-area-inset-bottom,0px));}
}

/* Short phones (SE, mini, and any phone in landscape-ish height) cannot
   carry the stat grid as well — tighten type and drop it. */
@media (max-width:860px) and (max-height:760px){
  .hero-stats{display:none;}
  .c-bl{display:none;}
  .hero-in{padding-bottom:calc(8.5rem + env(safe-area-inset-bottom,0px));}
}
