@font-face{font-family:"Literata";font-style:normal;font-weight:300 800;font-display:swap;src:url("fonts/literata-normal-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Literata";font-style:normal;font-weight:300 800;font-display:swap;src:url("fonts/literata-normal-latin-ext.woff2") format("woff2");unicode-range:U+0100-02AF,U+0218-021B,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Literata";font-style:italic;font-weight:300 800;font-display:swap;src:url("fonts/literata-italic-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2000-206F,U+2212}
@font-face{font-family:"Literata";font-style:italic;font-weight:300 800;font-display:swap;src:url("fonts/literata-italic-latin-ext.woff2") format("woff2");unicode-range:U+0100-02AF,U+0218-021B,U+1E00-1EFF}
@font-face{font-family:"Fraunces";font-style:normal;font-weight:400 700;font-display:swap;src:url("fonts/fraunces-normal-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2000-206F,U+2212}
@font-face{font-family:"Fraunces";font-style:normal;font-weight:400 700;font-display:swap;src:url("fonts/fraunces-normal-latin-ext.woff2") format("woff2");unicode-range:U+0100-02AF,U+0218-021B,U+1E00-1EFF}
@font-face{font-family:"PlexMono";font-style:normal;font-weight:400 600;font-display:swap;src:url("fonts/plexmono-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2013-2014,U+2018-201E,U+2212,U+00B0,U+2299}
@font-face{font-family:"PlexMono";font-style:normal;font-weight:400 600;font-display:swap;src:url("fonts/plexmono-latin-ext.woff2") format("woff2");unicode-range:U+0100-024F,U+0218-021B}

:root{--bg:#14110f;--bg2:#1c1814;--fg:#efe7da;--mut:#c1b4a2;--line:#3d352d;--line-soft:#2b251f;--acc:#f4a582;--acc-ink:#1a0d07;--box:#5a4e42;--box-fill:rgba(255,236,210,.025);
  --rope:#ce563a;--rope-far:#7a2a19;--rope-edge:#2a0c06;--rope-light:#ffc4a8;--rope-twist:#8c2e1c;--bar:#c2583c;--to-top-bg:#14110f;--to-top-fg:#efe7da;
  --serif:"Literata",Georgia,serif;--disp:"Fraunces","Literata",Georgia,serif;--mono:"PlexMono",ui-monospace,Menlo,monospace;color-scheme:dark}
:root[data-theme="light"]{--bg:#f4eee3;--bg2:#ebe3d5;--fg:#1d1914;--mut:#4d443a;--line:#cdbfa9;--line-soft:#ddd2c0;--acc:#8a2b15;--acc-ink:#fff8f0;--box:#a8977f;--box-fill:rgba(80,50,20,.035);
  --rope:#c24a2f;--rope-far:#e08a6d;--rope-edge:#3d140a;--rope-light:#ffd2bd;--rope-twist:#8f2d1a;--bar:#b44a2e;--to-top-bg:#f4eee3;--to-top-fg:#1d1914;color-scheme:light}
@media (prefers-color-scheme:light){:root:not([data-theme]){--bg:#f4eee3;--bg2:#ebe3d5;--fg:#1d1914;--mut:#4d443a;--line:#cdbfa9;--line-soft:#ddd2c0;--acc:#8a2b15;--acc-ink:#fff8f0;--box:#a8977f;--box-fill:rgba(80,50,20,.035);--rope:#c24a2f;--rope-far:#e08a6d;--rope-edge:#3d140a;--rope-light:#ffd2bd;--rope-twist:#8f2d1a;--bar:#b44a2e;color-scheme:light}}

*{box-sizing:border-box}
[hidden]{display:none!important}
svg[hidden]{display:none}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--bg);color:var(--fg);font:400 1.125rem/1.62 var(--serif);font-optical-sizing:auto}
a{color:var(--acc);text-underline-offset:.18em}
a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
.skip-link{position:absolute;left:-999px;top:0;background:var(--acc);color:var(--acc-ink);padding:.5rem 1rem;z-index:20}
.skip-link:focus{left:1rem;top:.5rem}
.nw{white-space:nowrap}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* top bar: one quiet line */
.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:.9rem;height:44px;padding:0 max(14px,env(safe-area-inset-right)) 0 max(14px,env(safe-area-inset-left));background:color-mix(in srgb,var(--bg) 92%,transparent);border-bottom:1px solid var(--line-soft);font:500 .82rem/1 var(--mono)}
.brand{display:flex;align-items:center;gap:.5rem;color:var(--fg);text-decoration:none;white-space:nowrap}
.brand-mark{width:22px;height:22px;color:var(--acc)}
.topnav{display:flex;gap:1rem}.topnav a{color:var(--mut);text-decoration:none}.topnav a:hover{color:var(--fg)}
.spacer{flex:1}
.chip{color:var(--mut);text-decoration:none;padding:.25rem .35rem;border-radius:4px}.chip[aria-current]{color:var(--fg);border:1px solid var(--line)}
.icon-btn{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--fg);cursor:pointer}
:root:not([data-theme="light"]) .i-moon{display:none}:root[data-theme="light"] .i-sun{display:none}
@media (max-width:760px){.topnav{display:none}.brand span{max-width:52vw;overflow:hidden;text-overflow:ellipsis}}

/* rail */
.rail{position:fixed;right:10px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:10px;z-index:9;opacity:0;transition:opacity .4s}
body.past-hero .rail{opacity:1}
.rail-dot{position:relative;display:block;width:14px;height:14px}
.rail-dot .dot{position:absolute;inset:4px;border-radius:50%;background:var(--line)}
.rail-dot[aria-current] .dot{background:var(--acc);inset:3px}
.rail-label{position:absolute;right:20px;top:50%;transform:translateY(-50%);white-space:nowrap;font:500 .75rem/1 var(--mono);color:var(--fg);background:var(--bg2);padding:.3rem .5rem;border-radius:4px;opacity:0;pointer-events:none}
.rail-dot:hover .rail-label,.rail-dot:focus-visible .rail-label{opacity:1}
@media (max-width:1180px){.rail{display:none}}

/* hero */
.hero .col{max-width:44rem;margin:0 auto;padding:3.2rem 1.25rem 1rem}
.kicker{font:500 .8rem/1.3 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--acc);margin:0 0 .8rem}
h1{font:600 clamp(2rem,4.6vw,3.2rem)/1.08 var(--disp);letter-spacing:-.012em;margin:0 0 1.2rem;text-wrap:balance}
.deck{font-size:1.2rem;margin:0 0 1rem}
.lead{color:var(--fg);margin:0}
.from-link{border-left:3px solid var(--acc);padding:.4rem .9rem;background:var(--bg2);margin:0 0 1rem}

/* the toy */
.toy{max-width:84rem;margin:0 auto;padding:1.4rem 1.25rem 0}
.toy-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);grid-template-areas:"left intro" "left ctrl" "left more";column-gap:3rem;align-items:start}
.intro{grid-area:intro}.more{grid-area:more;margin-top:1.4rem;border-top:1px solid var(--line-soft);padding-top:1rem}.short{margin:0 0 1rem}.leftcol{grid-area:left;position:sticky;top:52px}.controls{grid-area:ctrl}
.stagebox{position:relative}
.badge{display:none}
.resbox{margin-top:.6rem}
.intro h1{font-size:clamp(1.8rem,3.1vw,2.6rem)}
.intro .deck{font-size:1.05rem}.intro .lead{font-size:1.05rem;margin-bottom:1.2rem}
#coil{display:block;width:100%;aspect-ratio:1/1;max-height:calc(100vh - 290px);margin:0 auto;border-radius:10px;background:radial-gradient(circle at 40% 35%,var(--bg2),var(--bg) 75%)}
.stage-note{font:500 .8rem/1.2 var(--mono);color:var(--mut);margin:.4rem 0 0}
.controls{display:flex;flex-direction:column;gap:1.1rem}
.coilrow label{display:flex;justify-content:space-between;font:500 .9rem/1.2 var(--mono)}
.coilrow output{color:var(--acc);font-weight:600}
input[type=range]{width:100%;accent-color:var(--acc);height:28px}
.hint{font-size:.92rem;color:var(--mut);margin:.2rem 0 0}
.moves{display:grid;grid-template-columns:1fr 1fr;gap:.55rem}
.mv,.btn{font:500 .92rem/1.25 var(--serif);color:var(--fg);background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:.7rem .75rem;cursor:pointer;text-align:left;min-height:48px}
.mv{display:flex;gap:.55rem;align-items:center}.mv .arr{font:600 1.15rem/1 var(--mono);color:var(--acc)}
.mv:hover,.btn:hover{border-color:var(--acc)}
.mv:active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:default}
.acts{display:flex;flex-wrap:wrap;gap:.55rem}
.btn.primary{background:var(--acc);color:var(--acc-ink);border-color:var(--acc);font-weight:600}
.result{display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:center;min-height:120px}
#portrait{width:120px;height:120px}
.result:has(#portrait[hidden]){grid-template-columns:1fr}
.rname{font:600 1.35rem/1.2 var(--disp);margin:0 0 .35rem}
.rsub{font-size:.98rem;margin:0 0 .3rem}
.rcol{font:500 .82rem/1.3 var(--mono);color:var(--mut);margin:0}
.clearrow{margin:0}
.noscript{max-width:44rem;margin:1rem auto;color:var(--mut)}
@media (max-width:860px){
  .toy-grid{grid-template-columns:1fr;grid-template-areas:"intro" "stage" "ctrl" "res" "more";gap:1rem}
  .short{display:block;margin:0}.intro h1{margin-bottom:.7rem}.more{border-top:1px solid var(--line-soft);padding-top:1rem}
  .leftcol{display:contents}
  .stagebox{grid-area:stage;position:sticky;top:44px;z-index:5;background:var(--bg);padding-bottom:.3rem}
  .resbox{grid-area:res;margin:0}
  .badge{display:block;position:absolute;left:50%;transform:translateX(-50%);top:.4rem;margin:0;font:600 .85rem/1.2 var(--mono);background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:999px;padding:.25rem .7rem;white-space:nowrap}
  .badge:empty{display:none}
  #coil{width:auto;height:min(40svh,92vw);max-height:none;margin:0 auto}
  .stage-note{text-align:center}
  #portrait{width:120px;height:120px}
}

/* share row */
.share{margin:.4rem 0 0}
.share-row{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem}
.share-label{font:500 .82rem/1 var(--mono);color:var(--mut);margin-right:.2rem}
.ic{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;border:1px solid var(--line-soft);background:transparent;color:var(--fg);cursor:pointer}
.ic:hover,.ic:focus-visible{color:var(--acc);border-color:var(--acc)}
@media (pointer:coarse){.ic{width:44px;height:44px}}
.share-msg{font:500 .8rem/1.2 var(--mono);color:var(--mut);min-height:1em;margin:.3rem 0 0}

/* prose */
.prose{max-width:44rem;margin:0 auto;padding:2rem 1.25rem 3rem}
.prose h2{font:600 clamp(1.5rem,3vw,2rem)/1.15 var(--disp);margin:3.2rem 0 1rem;text-wrap:balance}
.anchor{margin-left:.4rem;font:400 .8em/1 var(--mono);color:var(--line);text-decoration:none}
h2:hover .anchor,.anchor:focus-visible{color:var(--acc)}
section[id]{scroll-margin-top:60px}
.chart{margin:1.6rem -1rem;padding:0}
.chart svg{display:block;width:100%;height:auto}
.chart.two{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.chart.two figcaption{grid-column:1/-1}
@media (max-width:600px){.chart.two{grid-template-columns:1fr}}
.chart .grid{stroke:var(--line-soft);stroke-width:1}
.chart .ax{fill:var(--mut);font:500 12px var(--mono)}
.chart .note{fill:var(--fg);font:italic 14px var(--serif)}
.chart .curve{fill:none;stroke:var(--rope);stroke-width:3;stroke-linejoin:round;stroke-linecap:round}
.chart .dot{fill:var(--rope);stroke:var(--bg);stroke-width:1.5}
.chart .band{fill:var(--line-soft);opacity:.6}
figcaption{font-size:.9rem;color:var(--mut);margin:.5rem 1rem 0}
.tablewrap{margin:1.4rem 0;overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:.95rem}
th,td{padding:.5rem .55rem;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:top}
thead th{font:500 .78rem/1.2 var(--mono);color:var(--mut)}
td{font-family:var(--mono);font-size:.88rem;white-space:nowrap}
td .bar{display:inline-block;height:.55em;width:calc(var(--v) * 4.2rem);background:var(--bar);border-radius:2px;margin-right:.4rem;vertical-align:middle}
.tablewrap figcaption{margin:.5rem 0 0}

/* herbarium */
.herb{list-style:none;padding:0;margin:1.6rem -2rem;display:grid;grid-template-columns:repeat(auto-fill,minmax(10.5rem,1fr));gap:1.2rem 1rem}
.herb.extra{grid-template-columns:repeat(2,minmax(0,15rem));margin:1rem 0}
@media (max-width:700px){.herb{margin:1.4rem 0;grid-template-columns:repeat(2,minmax(0,1fr))}}
.kn{position:relative}
.kimg{position:relative;border-radius:10px;overflow:hidden;border:1px solid var(--line-soft);transition:border-color .3s}
.kimg img{display:block;width:100%;height:auto}
:root[data-theme="light"] .th-dark,:root:not([data-theme="light"]) .th-light{display:none}
.found{position:absolute;top:.45rem;right:.45rem;font:600 .7rem/1 var(--mono);background:var(--acc);color:var(--acc-ink);padding:.25rem .4rem;border-radius:4px;opacity:0}
.kn.is-found .found{opacity:1}.kn.is-found .kimg{border-color:var(--acc)}
.kname{margin:.5rem 0 0;font-size:.98rem;line-height:1.3}.kname b{font-family:var(--mono);color:var(--acc)}
.kc{margin:.1rem 0 0;font:500 .78rem/1.2 var(--mono);color:var(--mut)}
.knote{margin:.3rem 0 0;font-size:.88rem;color:var(--mut);line-height:1.45}
.sources{padding-left:1.1rem}.sources li{margin:.4rem 0;font-size:.95rem}
.site-footer{max-width:44rem;margin:0 auto;padding:1.5rem 1.25rem 3rem;display:flex;flex-wrap:wrap;gap:1.2rem;font:500 .8rem/1.2 var(--mono);color:var(--mut);border-top:1px solid var(--line-soft)}
.site-footer a{color:var(--mut)}
@media print{.topbar,.rail,.toy,.share{display:none}}
/* FM-1018 rail clearance (2 Nov 2026) */
@media (min-width:1191px) and (max-width:1360px){.rail{display:none!important}}
