@font-face{font-family:"Newsreader";src:url(../fonts/newsreader.woff2) format("woff2");font-weight:400 500;font-style:normal;font-display:swap}
@font-face{font-family:"Newsreader";src:url(../fonts/newsreader-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(../fonts/plex-mono-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(../fonts/plex-mono-500.woff2) format("woff2");font-weight:500;font-display:swap}

:root{
  color-scheme:dark;
  --night:#06110f; --plate:#0a1a17; --plate-hi:#10241f;
  --ink:#ebe5d3; --soft:rgba(235,229,211,.74); --muted:#8ea39a; --line:rgba(235,229,211,.12);
  --prey:#c3fa65; --pred:#ff6f66; --gold:#f0dfa0; --teal:#2b7473;
  --serif:"Newsreader","Iowan Old Style","Palatino Linotype",Georgia,serif;
  --mono:"Plex Mono",ui-monospace,"SF Mono",Menlo,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:64px;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--night);color:var(--ink);font:400 20px/1.62 var(--serif);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:inherit;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:rgba(235,229,211,.35)}
a:hover{text-decoration-color:var(--gold);color:#fff}
button,input{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
em{font-style:italic}

/* ---------- chrome ---------- */
.progress{position:fixed;inset:0 0 auto;height:2px;z-index:20;pointer-events:none}
.progress i{display:block;height:100%;width:100%;transform-origin:0 50%;transform:scaleX(0);
  background:linear-gradient(90deg,var(--teal),var(--prey),var(--gold))}
.topbar{position:fixed;inset:0 0 auto;z-index:10;display:flex;align-items:center;gap:20px;height:52px;padding:0 max(16px,3vw);
  font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  background:rgba(6,17,15,.82);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid rgba(235,229,211,.06)}
.topbar a{text-decoration:none;color:var(--soft)}
.topbar a:hover{color:var(--ink)}
.topbar .home span{color:var(--muted)}
.topbar .series{color:var(--muted);flex:1;text-align:center}
.topbar .world{white-space:nowrap}

/* ---------- hero ---------- */
.hero{min-height:100vh;min-height:100svh;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);
  align-items:center;gap:clamp(24px,5vw,80px);padding:84px max(16px,4vw) 48px;max-width:1440px;margin:0 auto}
.hero-plate{margin:0;background:transparent;border:0;padding:0}
.stage{position:relative;aspect-ratio:1;width:100%;max-height:calc(100svh - 170px);margin:0 auto;
  border-radius:50%/50%;filter:drop-shadow(0 30px 80px rgba(43,116,115,.28))}
.stage img,.stage canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block;image-rendering:auto}
.stage canvas{animation:fade .8s ease both}
@keyframes fade{from{opacity:0}}
.plate-bar{display:flex;align-items:center;gap:14px;margin:18px auto 0;max-width:560px}
.shapes{display:flex;gap:4px}
.shapes button,.icon{width:36px;height:36px;display:grid;place-items:center;border:1px solid transparent;border-radius:50%;
  background:transparent;cursor:pointer;color:var(--muted);padding:0;transition:color .2s,border-color .2s,background .2s}
.shapes svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.3}
.shapes button:hover,.icon:hover{color:var(--ink)}
.shapes button[aria-pressed="true"]{color:var(--gold);border-color:rgba(240,223,160,.4)}
.icon{font:400 18px/1 var(--serif);color:var(--soft);border-color:var(--line)}
#atlas-time{flex:1;min-width:60px}
input[type=range]{-webkit-appearance:none;appearance:none;height:28px;background:transparent;cursor:pointer}
input[type=range]::-webkit-slider-runnable-track{height:1px;background:var(--line)}
input[type=range]::-moz-range-track{height:1px;background:var(--line)}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:13px;height:13px;border-radius:50%;background:var(--gold);margin-top:-6px;box-shadow:0 0 0 4px rgba(240,223,160,.14)}
input[type=range]::-moz-range-thumb{width:13px;height:13px;border:0;border-radius:50%;background:var(--gold)}
.plate-caption{display:flex;gap:18px;justify-content:center;margin-top:6px;font:400 11px/1.6 var(--mono);letter-spacing:.08em;color:var(--muted);
  font-variant-numeric:tabular-nums}
.plate-caption output{display:inline-block;min-width:3ch}
.rec{color:var(--gold)}

.hero-text{max-width:30rem}
.label,.num{font:500 11px/1.4 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin:0}
h1{font:400 clamp(56px,7.4vw,108px)/.95 var(--serif);letter-spacing:-.035em;margin:18px 0 26px}
h1 em{color:var(--gold)}
.dek{font:400 clamp(21px,2vw,25px)/1.45 var(--serif);color:var(--soft);margin:0 0 28px;text-wrap:pretty}
.ramp-key{display:flex;align-items:center;gap:10px;font:400 11px/1 var(--mono);letter-spacing:.06em;color:var(--muted);margin:0 0 26px}
.ramp{width:84px;height:6px;border-radius:3px;background:linear-gradient(90deg,#103039,#2b7473,#91c7a2,#f0dfa0,#e5a565)}
.byline{font:400 12px/1.8 var(--mono);letter-spacing:.04em;color:var(--muted);margin:0 0 18px}
.walls{display:inline-flex;align-items:center;gap:8px;font:400 12px/1 var(--mono);color:var(--muted);cursor:pointer;min-height:32px}
.walls input{accent-color:var(--gold);margin:0}
.status{font:400 11px/1.5 var(--mono);color:var(--muted);min-height:1.5em;margin:6px 0 0}

/* ---------- chapters ---------- */
article{padding:0 max(16px,4vw)}
.chapter{max-width:640px;margin:0 auto;padding:clamp(72px,12vh,140px) 0 0}
.chapter>p{margin:0 0 1.1em;color:var(--soft);text-wrap:pretty}
.num{color:var(--gold);margin-bottom:14px}
h2{font:400 clamp(36px,4.6vw,54px)/1.05 var(--serif);letter-spacing:-.025em;margin:0 0 22px;text-wrap:balance}
.ref{font:500 10px/0 var(--mono);vertical-align:super;margin-left:2px;text-decoration:none;color:var(--gold)}

.plate{background:var(--plate);border:1px solid var(--line);border-radius:18px;padding:18px;margin:34px 0 0;position:relative}
.plate.wide{width:min(960px,calc(100vw - 32px));margin-left:50%;transform:translateX(-50%)}
.fig-top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.live{font:500 10px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--prey);display:inline-flex;align-items:center;gap:7px}
.live::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:blink 2.4s ease-in-out infinite}
@keyframes blink{50%{opacity:.35}}
.seg{display:inline-flex;padding:3px;border-radius:999px;border:1px solid var(--line);flex-wrap:wrap}
.seg button,.pill,.tools button{font:500 11px/1 var(--mono);letter-spacing:.06em;border:0;background:transparent;border-radius:999px;
  padding:9px 13px;min-height:34px;cursor:pointer;color:var(--muted);transition:background .2s,color .2s}
.seg button:hover,.tools button:hover{color:var(--ink)}
.seg button[aria-pressed="true"]{background:var(--plate-hi);color:var(--ink);box-shadow:inset 0 0 0 1px rgba(235,229,211,.16)}
.pill{border:1px solid var(--line);color:var(--ink)}
.pill[aria-pressed="true"]{border-color:rgba(255,111,102,.5);color:var(--pred)}
.chart{display:block;width:100%;height:240px}
#diffusion-canvas{height:200px}
#spectrum-chart{height:260px}
.map{display:block;width:100%;height:auto;aspect-ratio:1;border-radius:10px;background:#091915}
#wave-map{max-width:640px;margin:0 auto;cursor:crosshair;touch-action:manipulation}
.fig-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px;font:400 11px/1.5 var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}
.fig-foot output{flex:1;min-width:10ch}
.tools{display:flex;gap:2px;margin-left:auto}
.key{display:inline-flex;align-items:center;gap:6px}
.key i{width:8px;height:8px;border-radius:50%;display:inline-block;margin-left:6px}
.key i:first-child{margin-left:0}
.key .prey{background:var(--prey)} .key .pred{background:var(--pred)} .key .both{background:#ffd76e}
figcaption{font:400 italic 17px/1.5 var(--serif);color:var(--soft);margin:16px 2px 0;text-wrap:pretty}
figcaption .try{display:block;font:400 11px/1.6 var(--mono);font-style:normal;color:var(--gold);margin-top:10px;letter-spacing:.02em}
details{margin-top:14px;border-top:1px solid var(--line);padding-top:6px;font:400 12px/1.7 var(--mono);color:var(--muted)}
summary{cursor:pointer;padding:8px 0;list-style:none;letter-spacing:.1em;text-transform:uppercase;font-size:10.5px}
summary::-webkit-details-marker{display:none}
summary::before{content:"+ ";color:var(--gold)}
details[open] summary::before{content:"– "}
details p{margin:6px 0 10px}
.slider{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font:400 11px/1 var(--mono);letter-spacing:.06em;color:var(--muted)}
.slider output{color:var(--gold);min-width:4ch;font-variant-numeric:tabular-nums}
.slider input{width:min(220px,50vw)}
.triple{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.triple .cap{font:400 italic 16px/1.3 var(--serif);color:var(--ink);margin:10px 0 2px}
.triple output{display:block;font:400 10.5px/1.5 var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}
.readout{font:400 11px/1.6 var(--mono);color:var(--muted);margin:8px 2px 0}

.coda{text-align:center;padding-bottom:40px}
.coda>p:first-child{font:400 italic clamp(22px,2.6vw,28px)/1.5 var(--serif);color:var(--ink)}
.coda-links{display:flex;justify-content:center;gap:28px;flex-wrap:wrap;font:500 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase}
.coda-links a{text-decoration:none;color:var(--gold);padding:10px 0}

.notes{max-width:640px;margin:48px auto 0}
.notes details{font-size:12.5px}
.eq{font:400 12.5px/2.1 var(--mono);color:var(--ink);overflow-x:auto;white-space:nowrap;padding:6px 0}
.refs{padding-left:18px;margin:6px 0}
.refs li{padding:4px 0}
.foot{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;max-width:640px;margin:64px auto 0;padding:24px max(16px,0px) 48px;
  border-top:1px solid var(--line);font:400 11px/1.5 var(--mono);letter-spacing:.06em;color:var(--muted)}
.foot a{color:var(--soft)}
.noscript{text-align:center;color:var(--muted)}

/* ---------- small screens ---------- */
@media (max-width:860px){
  .hero{grid-template-columns:1fr;padding-top:64px;gap:8px;min-height:0}
  .stage{max-height:none;width:min(100%,560px)}
  .hero-text{max-width:none;padding-top:18px}
  .topbar .series{display:none}
  .topbar{justify-content:space-between}
}
@media (max-width:560px){
  body{font-size:18.5px}
  .plate{padding:12px;border-radius:14px}
  .plate.wide{width:calc(100vw - 16px)}
  .triple{gap:6px}
  .triple .cap{font-size:13px}
  .triple output{font-size:9.5px}
  .fig-foot .tools{margin-left:0;width:100%;justify-content:flex-start}
  .seg button{padding:8px 10px}
  .chart{height:210px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .live::before,.stage canvas{animation:none}
}
@media (max-width:860px){.hero-text{order:-1;padding-top:0}.hero .dek{margin-bottom:18px}.hero .byline,.hero .walls,.hero .ramp-key{display:none}}

/* ---------- questions, real-world notes, shape notes ---------- */
.chapter h2{font-size:clamp(32px,4vw,46px)}
.lede{padding-top:clamp(56px,9vh,110px)}
.lede>p{font-size:clamp(20px,2vw,23px);color:var(--ink)}
.lede>p:first-child::first-letter{float:left;font:400 3.4em/.8 var(--serif);margin:.08em .1em 0 0;color:var(--gold)}
.real{margin:26px 0 0;padding:16px 18px 14px;border-left:2px solid var(--gold);background:linear-gradient(90deg,rgba(240,223,160,.07),transparent 70%);border-radius:0 12px 12px 0}
.real p{margin:0;font:400 17.5px/1.55 var(--serif);color:var(--soft)}
.real .real-label{font:500 10px/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--gold);margin-bottom:8px}
.shape-note{margin:0 0 24px;padding:14px 0 2px;border-top:1px solid var(--line);min-height:8.5em;transition:opacity .5s ease}
.shape-note.fading{opacity:0}
.shape-name{font:500 10.5px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin:0 0 8px}
.shape-note p:last-child{font:400 17px/1.55 var(--serif);color:var(--soft);margin:0}
.map.tappable{cursor:crosshair}
.coda{text-align:left}
.coda .coda-links{justify-content:flex-start}
.coda>p:not(.coda-links):not(.num){font:400 20px/1.6 var(--serif);color:var(--soft)}
@media (max-width:860px){.shape-note{min-height:0}}
