
@font-face{font-family:"Geist";src:url(fonts/Geist-Variable.woff2) format("woff2");
font-weight:100 900;font-display:swap}
@font-face{font-family:"Geist Mono";src:url(fonts/GeistMono-Variable.woff2) format("woff2");
font-weight:100 900;font-display:swap}
html:root:not(#_){color-scheme:dark;
--bg:#0b0e10;--panel:#12171a;--ink:#e8eced;--ink2:#a4adb3;--ink3:#6d777e;--rule:#232a2f;
--accent:#67d8e8;--info:#67d8e8;--high:#ef6f6c;--med:#e3a23b;--good:#43c08f;
--sans:"Geist",system-ui,-apple-system,sans-serif;
--serif:"Geist",system-ui,-apple-system,sans-serif;
--mono:"Geist Mono",ui-monospace,Menlo,monospace;
/* The reader pages' own tokens (qsci/dexa_page.py, sensor_page.py and the
   rest). Surfaces take the new palette; every data colour keeps the dark
   value its renderer already chose, so a series means what it meant. */
--card:#12171a;--grid:#1d2428;--band:#161c1f;--ok:#3fb950;--bad:#e66767;
--warnbg:#2b2410;--warnrule:#c98500;
--s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#9085e9;
--viz-1:#3987e5;--viz-2:#d95926;--viz-3:#199e70;
--div-up:#3987e5;--div-down:#e66767;--risk:#199e70;--nolog:#69737b;
--dot:rgba(195,194,183,.25)}
/* White on the old blue read; white on this cyan does not (1.7:1). With
   the id weight, because the waitlist form's own style sits in its body,
   after this sheet, and won the tie: the live button was white until
   2026-10-21. */
html:not(#_) :is(.ask button,.wl button,.btn.primary){color:#061316}
/* Nothing may push a page sideways on a phone. Found on George's page: a
   table outside any scroll box, and a two-column list whose text column
   could not shrink below Apple's long workout-type names. A table scrolls
   inside itself; a column shrinks and the long word breaks. */
body{overflow-wrap:break-word}
.wrap>table{display:block;overflow-x:auto}
dl{grid-template-columns:minmax(0,190px) minmax(0,1fr)}
section[id]{scroll-margin-top:72px}
body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}
h1,h2,h3{font-weight:500;letter-spacing:-.03em}
h1{letter-spacing:-.04em}
a{color:var(--accent);text-underline-offset:3px}
::selection{background:var(--accent);color:var(--bg)}
/* Chart images were drawn for a light page: they sit on paper of their own
   rather than being inverted, which would change what their colours mean. */
.wrap img,.fig .paper{background:#fff;border-radius:6px}
@media (max-width:640px){.wrap{padding-left:16px;padding-right:16px}}

.ps-head{position:sticky;top:0;z-index:50;background:rgba(11,14,16,.82);
-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
border-bottom:1px solid var(--rule);font-family:var(--sans)}
.ps-head .in{max-width:1120px;margin:0 auto;padding:0 16px;height:60px;
display:flex;align-items:center;gap:28px}
.ps-logo{display:flex;align-items:center;gap:9px;color:var(--ink);text-decoration:none;
font-size:19px;font-weight:500;letter-spacing:-.02em}
.ps-logo i{width:7px;height:7px;border-radius:50%;background:var(--accent);
box-shadow:0 0 12px var(--accent)}
.ps-nav{display:flex;gap:26px;margin-left:auto}
.ps-nav a{color:var(--ink2);text-decoration:none;font-size:15px}
.ps-nav a:hover{color:var(--ink)}
.ps-cta{font-family:var(--mono);font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;
color:var(--ink);text-decoration:none;border:1px solid var(--rule);padding:10px 14px;
white-space:nowrap}
.ps-cta:hover{border-color:var(--accent);color:var(--accent)}
@media (max-width:720px){.ps-nav{display:none}.ps-cta{margin-left:auto}}
