@font-face{font-family:"Fraunces";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/fraunces-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2013-2014,U+2018-201D,U+201E,U+2212;}
@font-face{font-family:"Fraunces";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/fraunces-latin-ext.woff2") format("woff2");unicode-range:U+0100-024F,U+1E00-1EFF,U+20AC;}
@font-face{font-family:"Source Serif";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/sourceserif-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2013-2014,U+2018-201D,U+201E,U+2212;}
@font-face{font-family:"Source Serif";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/sourceserif-latin-ext.woff2") format("woff2");unicode-range:U+0100-024F,U+1E00-1EFF,U+20AC;}
:root{
  --paper:#f6efe3;--card:#fbf6ea;--surface:#ecdfc6;--ink:#2b2118;--ink-2:#6d5c44;
  --line:#c9b58d;--line-soft:#ddd0b2;--wine:#7e2233;--wine-bright:#a32c1e;--amber:#b06f10;
  --salt:#fdfbf5;--water:#3d6d99;--link:#1e4fa3;--post:#1e5c9e;--cart:#8a4a12;
  --shadow:0 1px 0 rgba(43,31,19,.08),0 14px 34px -18px rgba(43,31,19,.4);
  --ring:150,28,44;--ring2:226,160,52;--ring-line:92,20,30;
  --ease:cubic-bezier(.2,.7,.2,1);
}
[data-theme="dark"]{
  --paper:#171208;--card:#201809;--surface:#2b2010;--ink:#f0e3c6;--ink-2:#b8ab8d;
  --line:#5f4c30;--line-soft:#443721;--wine:#e08a97;--wine-bright:#ff8a6b;--amber:#f0a83e;
  --salt:#241b0e;--water:#84b6dd;--link:#a5c0f5;--post:#8fb9ec;--cart:#eda85e;
  --shadow:0 1px 0 rgba(0,0,0,.4),0 14px 34px -18px rgba(0,0,0,.65);
  --ring:255,128,104;--ring2:255,214,120;--ring-line:255,225,200;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --paper:#171208;--card:#201809;--surface:#2b2010;--ink:#f0e3c6;--ink-2:#b8ab8d;
  --line:#5f4c30;--line-soft:#443721;--wine:#e08a97;--wine-bright:#ff8a6b;--amber:#f0a83e;
  --salt:#241b0e;--water:#84b6dd;--link:#a5c0f5;--post:#8fb9ec;--cart:#eda85e;
  --shadow:0 1px 0 rgba(0,0,0,.4),0 14px 34px -18px rgba(0,0,0,.65);
  --ring:255,128,104;--ring2:255,214,120;--ring-line:255,225,200;
}}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Source Serif",Georgia,serif;font-size:1.125rem;line-height:1.62}
main{display:block}
h1,h2,h3,.kicker,.modebtn,.tlabel{font-family:"Fraunces",Georgia,serif}
h1{font-size:clamp(1.65rem,4.2vw,2.5rem);line-height:1.14;margin:0 0 .5rem;letter-spacing:-.01em}
h2{font-size:clamp(1.3rem,2.6vw,1.6rem);line-height:1.25;margin:0 0 .8rem}
h3{font-size:1.12rem;margin:1.4rem 0 .45rem}
p{margin:0 0 1rem}
a{color:var(--link)}
.small{font-size:.95rem;color:var(--ink-2)}
.lede{font-size:1.18rem}
.skip{position:absolute;left:-999px;top:0;background:var(--ink);color:var(--paper);padding:.6rem 1rem;z-index:60}
.skip:focus{left:0}
.topbar{position:sticky;top:0;z-index:40;display:flex;justify-content:space-between;align-items:center;gap:1rem;
  min-height:44px;padding:.42rem 1rem;background:color-mix(in srgb,var(--paper) 96%,transparent);border-bottom:1px solid var(--line)}
.topbar .home{display:flex;align-items:center;gap:.5rem;text-decoration:none;color:var(--wine)}
.topbar .home svg{width:26px;height:26px;display:block}
.home-name{font-family:"Fraunces",Georgia,serif;font-weight:600;color:var(--ink)}
.topbar nav{display:flex;gap:.6rem;align-items:center}
.edition{font-family:"Fraunces",Georgia,serif;font-size:.95rem;text-decoration:none;border:1px solid var(--line);border-radius:999px;padding:.3rem .8rem;color:var(--ink)}
button{font:inherit;cursor:pointer}
#theme-toggle{font-size:.9rem;background:none;border:1px solid var(--line);border-radius:999px;padding:.35rem .8rem;color:var(--ink);min-height:44px}
.paper{max-width:44rem;margin:0 auto;padding:2.6rem 1rem .6rem}
.paper.wide{max-width:64rem}
.paper:last-of-type{padding-bottom:3.5rem}
.kicker{font-size:.85rem;letter-spacing:.14em;text-transform:uppercase;color:var(--wine);margin:0 0 .5rem}
.deck{font-size:1.18rem;margin:0 0 .7rem}
.hero-fig{font-family:"Fraunces",Georgia,serif;color:var(--wine);margin:0;font-size:1.04rem}
.hero{max-width:76rem;margin:0 auto;padding:2.2rem 1rem 0}
@media (min-width:1020px){.hero{display:grid;grid-template-columns:23rem 1fr;gap:1.1rem;align-items:start}.hero-card{position:sticky;top:4.2rem}}
@media (max-width:560px){.home-name{display:none}}
.hero-card{display:flex;flex-direction:column;max-width:44rem;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1.25rem 1.4rem 1rem;box-shadow:var(--shadow);margin-bottom:1rem}
.mapwrap{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:.8rem;box-shadow:var(--shadow)}
.maptools{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-bottom:.5rem}
.maptools-label{font-family:"Fraunces",Georgia,serif;font-weight:600}
.modes{display:flex;gap:.4rem;flex-wrap:wrap}
.modebtn{background:transparent;border:1.5px solid var(--line);color:var(--ink);border-radius:999px;padding:.45rem .9rem;min-height:44px;font-size:.98rem}
.modebtn.on{background:var(--wine);border-color:var(--wine);color:var(--salt)}
#map-reset,#race-reset,#swap,#qreset{background:transparent;border:1.5px solid var(--line);color:var(--ink);border-radius:999px;padding:.45rem .9rem;min-height:44px}
.mapframe{overflow:auto;border-radius:10px;background:var(--salt)}
.mapframe svg{display:block;width:100%;height:auto;min-width:0}
@media (max-width:720px){.hero-card{padding:1rem 1.05rem}.deck{font-size:1.06rem}.hero-fig{order:3}.deck{order:2}h1{order:1}.kicker{order:0}.in-card{order:4}}
.mode-note{font-style:italic;color:var(--ink-2);margin:.55rem 0 0}
.hint{color:var(--ink-2);font-size:.98rem;margin:.2rem 0 0}
.relief{opacity:.62}
.rel-dark{display:none}
[data-theme="dark"] .rel-light{display:none}
[data-theme="dark"] .rel-dark{display:block}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .rel-light{display:none}:root:not([data-theme="light"]) .rel-dark{display:block}}
.river{fill:none;stroke:var(--water);stroke-width:1.6;opacity:.55;stroke-linecap:round}
.edge{fill:none;stroke:var(--ink-2);stroke-width:1.4;opacity:.5;stroke-linecap:round}
.edge.e-mount{stroke:var(--wine);stroke-width:2;opacity:.75}
.edge.e-hill{stroke:var(--amber);opacity:.6}
.edge.cordon{stroke-dasharray:6 5}
.edge.on-route{stroke:var(--wine-bright);stroke-width:4.5;opacity:1}
.route-line{fill:none;stroke:var(--wine-bright);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.town{cursor:pointer}
.town .hit{fill:transparent}
.town .dot{fill:var(--card);stroke:var(--ink);stroke-width:2}
.town[data-tags~="ocna"] .dot{fill:var(--salt);stroke:var(--wine);stroke-width:2.6}
.town[data-tags~="vama"] .dot{fill:var(--surface);stroke:var(--wine);stroke-width:2.4}
.town[data-tags~="port"] .dot{fill:var(--water)}
.town[data-tags~="pas"] .dot{fill:var(--amber)}
.town.sel .dot{fill:var(--wine-bright);stroke:var(--salt);stroke-width:2.5;r:9}
.town:focus-visible{outline:none}
.town:focus-visible .dot{stroke:var(--wine-bright);stroke-width:3.5}
.tlabel{font-size:13.5px;fill:var(--ink);paint-order:stroke;stroke:var(--salt);stroke-width:3.4px;stroke-linejoin:round}
.town.major .tlabel{font-size:15.5px;font-weight:600}
.region{font-family:"Fraunces",Georgia,serif;font-size:21px;font-weight:600;letter-spacing:.22em;fill:var(--ink-2);opacity:.5}
.mk circle,.mk rect{stroke:var(--salt);stroke-width:2.4}
.mk-courier circle{fill:var(--post)}
.mk-courier .glyph{fill:#fff;stroke:none}
.mk-courier .trail{stroke:var(--post);stroke-width:5;stroke-linecap:round;opacity:.35;fill:none}
.mk-cart rect{fill:var(--cart)}
.mk-cart .wh{fill:var(--ink);stroke:var(--salt);stroke-width:1.6}
.race-form{display:flex;flex-wrap:wrap;gap:.7rem;align-items:end;margin:0 0 .8rem}
.race-form label{display:flex;flex-direction:column;gap:.25rem;font-family:"Fraunces",Georgia,serif;font-size:.95rem}
.race-form select{font:inherit;font-family:"Source Serif",Georgia,serif;font-size:1rem;padding:.5rem .6rem;border:1px solid var(--line);border-radius:10px;background:var(--salt);color:var(--ink);min-height:44px;max-width:15rem}
#play{background:var(--wine);color:var(--salt);border:1.5px solid var(--wine);border-radius:999px;padding:.55rem 1.2rem;min-height:44px;font-weight:600}
.race-status{font-family:"Fraunces",Georgia,serif;min-height:1.6em;margin:.6rem 0;color:var(--wine)}
.ledger{display:grid;grid-template-columns:repeat(auto-fit,minmax(13.5rem,1fr));gap:.7rem;margin:.6rem 0 1rem}
.ledger:empty{display:none}
.lcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:.8rem .95rem}
.lcard h4{font-family:"Fraunces",Georgia,serif;margin:0 0 .45rem;font-size:1.02rem}
.lcard dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:.15rem .7rem;font-size:.99rem}
.lcard dt{color:var(--ink-2)}
.lcard dd{margin:0;text-align:right;font-weight:600}
.lcard.wide{grid-column:1/-1}
.lcard.wide p{margin:.2rem 0}
.fig{margin:1.4rem 0}
.fig img{width:100%;height:auto;display:block;border-radius:12px;border:1px solid var(--line)}
.fig figcaption{font-size:.96rem;color:var(--ink-2);margin-top:.45rem;line-height:1.5}
.credit{font-size:.88em}
.tablewrap{overflow-x:auto;margin:1rem 0}
.data-table{border-collapse:collapse;width:100%;min-width:34rem;font-size:.99rem}
.data-table th,.data-table td{border:1px solid var(--line-soft);padding:.5rem .6rem;text-align:left;vertical-align:top}
.data-table th{font-family:"Fraunces",Georgia,serif;background:var(--surface)}
.data-table .diff{font-weight:700;color:var(--wine)}
ul.proof{padding-left:1.2rem}
ul.proof li{margin-bottom:.8rem}
.quiz{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.8rem}
.qcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:1rem 1.1rem}
.qcard h3{margin:.1rem 0 .7rem;font-family:"Source Serif",Georgia,serif;font-size:1.08rem}
.qnum{font-family:"Fraunces",Georgia,serif;color:var(--wine);font-weight:700;margin:0}
.qopts{list-style:none;margin:0;padding:0;display:grid;gap:.45rem}
.qopt{width:100%;text-align:left;background:var(--salt);border:1.5px solid var(--line);border-radius:10px;padding:.55rem .8rem;color:var(--ink);min-height:44px}
.qopt[aria-pressed="true"]{border-color:var(--wine);box-shadow:inset 0 0 0 1px var(--wine)}
.qopt.right{background:color-mix(in srgb,var(--post) 18%,var(--salt))}
.qopt.wrong{background:color-mix(in srgb,var(--wine) 16%,var(--salt))}
.qverdict{min-height:1.5em;margin:.5rem 0 0;font-weight:600}
.quiz-head{display:flex;flex-wrap:wrap;gap:.8rem;align-items:center}
.scoreboard{font-family:"Fraunces",Georgia,serif;margin:0 0 1rem}
.rail{display:none}
@media (min-width:1180px){
 .rail{display:flex;flex-direction:column;gap:.55rem;position:fixed;right:.4rem;top:50%;transform:translateY(-50%);z-index:40}
 .rail a{position:relative;display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;text-decoration:none}
 .rail .dot{width:8px;height:8px;border-radius:50%;background:var(--ink-2);flex:none}
 .rail a[aria-current="true"] .dot{background:var(--wine);transform:scale(1.5)}
 .rail .lbl{position:absolute;right:calc(100% + .35rem);top:50%;transform:translateY(-50%);white-space:nowrap;background:var(--card);border:1px solid var(--line);border-radius:.5rem;padding:.15rem .6rem;font-size:.85rem;color:var(--ink);opacity:0;pointer-events:none}
 .rail a:hover .lbl,.rail a:focus-visible .lbl{opacity:1}
}
@media print{.rail{display:none}}
.foot{max-width:44rem;margin:0 auto;padding:2rem 1rem 3rem;color:var(--ink-2);border-top:1px solid var(--line-soft)}
.share-route{margin:1rem 0}
:focus-visible{outline:2.5px solid var(--wine);outline-offset:2px}
/* share row (standards/v2/tools/share_row.py) */
.share-row{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}
.share-row .lab{font-size:.95rem;margin-inline-end:.3rem}
.share-row a,.share-row button{display:inline-grid;place-items:center;flex:none;width:2.5rem;height:2.5rem;padding:0;border-radius:50%;border:1px solid var(--sr-line,color-mix(in srgb,currentColor 28%,transparent));background:transparent;color:var(--sr-ink,inherit);text-decoration:none;cursor:pointer;font:inherit;transition:color .15s,border-color .15s}
.share-row a:hover,.share-row button:hover,.share-row a:focus-visible,.share-row button:focus-visible{color:var(--sr-acc,inherit);border-color:var(--sr-acc,currentColor)}
.share-row [hidden]{display:none}
@media (pointer:coarse){.share-row a,.share-row button{width:2.75rem;height:2.75rem}}
@media (max-width:30rem){.share-row .lab{flex-basis:100%;margin:0 0 .15rem}}
.share-status{font-size:.92rem;color:var(--sr-ok,inherit);min-height:1.2em;margin:.4rem 0 0}
.share-status:empty{display:none}
.share-field{display:block;width:100%;max-width:36rem;margin-top:.4rem;font:inherit;font-size:.9rem}

/* ---- reach map (27 Oct 2026) ---- */
.stage{position:relative;aspect-ratio:1000/740;width:100%}
.stage svg{position:absolute;inset:0;width:100%;height:100%}
#rings{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:multiply;transition:opacity .35s}
[data-theme="dark"] #rings{mix-blend-mode:screen}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) #rings{mix-blend-mode:screen}}
.stage #timemap{z-index:1}
.relief{transition:opacity .6s}
.rivers,.region{transition:opacity .5s}
.region{pointer-events:none}
.town .tdays{font-family:"Fraunces",Georgia,serif;font-size:12px;font-weight:600;fill:var(--wine);paint-order:stroke;stroke:var(--salt);stroke-width:3px;stroke-linejoin:round}
.town.nolabel .tlabel,.town.nolabel .tdays{display:none}
.town.nolabel:hover .tlabel,.town.nolabel:focus-visible .tlabel{display:block}
.town.origin .dot{fill:var(--wine-bright);stroke:var(--salt);stroke-width:3;r:9}
.town.dest .dot{fill:var(--ink);stroke:var(--salt);stroke-width:3;r:8}
.town .dot{transition:r .2s}
.town:hover .dot{r:8}
.reach{display:flex;flex-wrap:wrap;gap:.5rem .9rem;align-items:center;margin:.1rem 0 .65rem}
.reach-head{margin:0;font-family:"Fraunces",Georgia,serif;font-size:.98rem;color:var(--ink-2);flex:1 1 14rem}
.reach-cells{display:flex;gap:.45rem}
.rc{display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;column-gap:.35rem;align-items:baseline;text-align:left;background:transparent;border:1.5px solid var(--line);border-radius:12px;padding:.3rem .7rem .35rem;color:var(--ink);min-height:44px}
.rc b{font-family:"Fraunces",Georgia,serif;font-size:1.45rem;line-height:1;color:var(--wine)}
.rc-of{font-size:.85rem;color:var(--ink-2)}
.rc-l{grid-column:1/-1;font-size:.82rem;color:var(--ink-2);line-height:1.2}
.rc.on{border-color:var(--wine);box-shadow:inset 0 0 0 1px var(--wine);background:color-mix(in srgb,var(--wine) 7%,var(--card))}
#warp-toggle{background:transparent;border:1.5px dashed var(--line);color:var(--ink);border-radius:999px;padding:.45rem .9rem;min-height:44px;font-size:.95rem;margin-left:auto}
#warp-toggle[aria-pressed="true"]{border-style:solid;border-color:var(--water);color:var(--water)}
.legend{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .8rem;margin:.55rem .1rem 0;font-size:.85rem;color:var(--ink-2)}
.lg-title{font-family:"Fraunces",Georgia,serif}
.lg-ramp{display:flex;gap:2px}
.lg-c{display:flex;flex-direction:column;align-items:center;min-width:2rem}
.lg-c i{display:block;width:100%;height:9px;border-radius:2px}
.lg-c b{font-weight:600;font-size:.8rem;color:var(--ink)}
.tip{position:absolute;z-index:5;width:min(15.5rem,70%);background:var(--card);border:1px solid var(--line);border-radius:12px;padding:.7rem .85rem .75rem;box-shadow:var(--shadow);transform:translate(14px,10px);font-size:.95rem;line-height:1.4}
.tip.to-left{transform:translate(calc(-100% - 14px),10px)}
.tip.to-top{transform:translate(14px,calc(-100% - 10px))}
.tip.to-left.to-top{transform:translate(calc(-100% - 14px),calc(-100% - 10px))}
.tip-h{font-family:"Fraunces",Georgia,serif;font-weight:600;margin:0 1.6rem .35rem 0}
.tip dl{display:grid;grid-template-columns:auto 1fr;gap:.1rem .7rem;margin:0 0 .5rem}
.tip dt{color:var(--ink-2)}
.tip dd{margin:0;text-align:right;font-weight:600}
.tip-x{position:absolute;top:.2rem;right:.25rem;width:2.4rem;height:2.4rem;border:0;background:none;font-size:1.4rem;color:var(--ink-2)}
.tip-b{display:flex;flex-wrap:wrap;gap:.4rem .8rem;align-items:center}
.tip-start{background:none;border:1.5px solid var(--line);border-radius:999px;padding:.3rem .75rem;min-height:40px;color:var(--ink)}
.tip-race{font-family:"Fraunces",Georgia,serif;font-weight:600;color:var(--wine);min-height:40px;display:inline-flex;align-items:center}
.key{display:flex;flex-wrap:wrap;gap:.3rem 1.2rem;margin:.55rem 0 0;font-size:.92rem;color:var(--ink-2)}
.key i{display:inline-block;vertical-align:-2px;margin-right:.35rem}
.k-courier i{width:14px;height:14px;border-radius:50%;background:var(--post)}
.k-cart i{width:18px;height:11px;border-radius:2px;background:var(--cart)}
.lanes{margin:1rem 0 .4rem}
.lanes figcaption{font-family:"Fraunces",Georgia,serif;font-weight:600;margin-bottom:.2rem}
.lanes svg{display:block;width:100%;height:auto}
.lanes .ax{stroke:var(--line-soft);stroke-width:calc(1px * var(--s,1.3))}
.lanes .axl,.lanes .axt{font-size:calc(12px * var(--s,1.3));fill:var(--ink-2)}
.lanes .ll{font-family:"Fraunces",Georgia,serif;font-size:calc(15px * var(--s,1.3));font-weight:600}
.lanes .ll.lane-post{fill:var(--post)}.lanes .ll.lane-cart{fill:var(--cart)}
.lanes .bar-bg{opacity:.28}.lanes .bar-slow{opacity:.12}.lanes .bar-pr{opacity:1}
.lanes .lane-post{fill:var(--post)}.lanes .lane-cart{fill:var(--cart)}
.lanes .stop{stroke:var(--card);stroke-width:calc(2px * var(--s,1.3))}
.lanes .sn{font-size:calc(13px * var(--s,1.3));fill:var(--ink)}
.lanes .ev-relay{stroke:var(--post);stroke-width:calc(1.5px * var(--s,1.3));opacity:.8}
.lanes .ev-ford{fill:none;stroke:var(--water);stroke-width:calc(1.6px * var(--s,1.3));stroke-linecap:round}
.lanes .ev-customs{fill:var(--wine-bright);stroke:var(--card);stroke-width:1}
.lanes .ev-night{fill:var(--ink-2);opacity:.55}
.lanes .quar{fill:var(--wine);opacity:.5}
.lanes .quarl{font-size:calc(12px * var(--s,1.3));fill:var(--wine)}
.lanes .bracket{fill:none;stroke:var(--post);stroke-width:calc(1px * var(--s,1.3));stroke-dasharray:calc(3px * var(--s,1.3)) calc(3px * var(--s,1.3));opacity:.55}
.lanes .playhead{stroke:var(--ink);stroke-width:calc(1.3px * var(--s,1.3));stroke-dasharray:calc(3px * var(--s,1.3)) calc(3px * var(--s,1.3));opacity:.55}
@media (prefers-reduced-motion:reduce){#rings,.relief,.rivers,.region{transition:none}}
.lg-key{margin-left:.2rem;padding-left:.8rem;border-left:2px solid var(--ink);font-style:italic}
/* both maps: type and marks keep their screen size, --s = user units per screen pixel (set by app.js) */
.stage svg .tlabel{font-size:calc(11.5px * var(--s,1.3));stroke-width:calc(3px * var(--s,1.3))}
.stage svg .town.major .tlabel{font-size:calc(13px * var(--s,1.3))}
.stage svg .town .tdays{font-size:calc(11px * var(--s,1.3));stroke-width:calc(3px * var(--s,1.3))}
.stage svg .dot{r:calc(5px * var(--s,1.3));stroke-width:calc(1.8px * var(--s,1.3))}
.stage svg .town.sel .dot,.stage svg .town.origin .dot{r:calc(8px * var(--s,1.3))}
.stage svg .town.dest .dot{r:calc(7px * var(--s,1.3))}
.stage svg .town:hover .dot{r:calc(7px * var(--s,1.3))}
.stage svg .region{font-size:calc(17px * var(--s,1.3))}
.stage svg .edge{stroke-width:calc(1.1px * var(--s,1.3))}
.stage svg .edge.e-mount{stroke-width:calc(1.7px * var(--s,1.3))}
.stage svg .edge.on-route{stroke-width:calc(3.6px * var(--s,1.3))}
.stage svg .route-line{stroke-width:calc(4.2px * var(--s,1.3))}
.stage svg .river{stroke-width:calc(1.3px * var(--s,1.3))}
#racemap .tdays{display:none}
.town.far .dot,.town.far .tlabel{opacity:.5}
.lcard dd{white-space:nowrap}
.lcard dl{grid-template-columns:1fr auto}
.ledger{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr))}
@media (min-width:1020px){.hero-card h1{font-size:clamp(1.5rem,2.5vw,2.05rem)}}
[data-theme="dark"] .relief{opacity:.9}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .relief{opacity:.9}}

/* ====== second pass: quiet top bar, story hero, vector rings (27 Oct 2026) ====== */
:root{--bar:36px}
.topbar{height:var(--bar);min-height:0;padding:0 .9rem;gap:.7rem;background:var(--paper);border-bottom:1px solid color-mix(in srgb,var(--line) 60%,transparent);position:sticky}
.topbar .home svg{width:18px;height:18px}
.home-name{font-size:.8rem;font-weight:500;letter-spacing:.01em;color:var(--ink-2)}
.topnav{display:flex;gap:.1rem;overflow-x:auto;scrollbar-width:none;margin-left:.6rem}
.topnav::-webkit-scrollbar{display:none}
.topnav a{font-family:"Fraunces",Georgia,serif;font-size:.8rem;color:var(--ink-2);text-decoration:none;padding:.35rem .6rem;border-radius:999px;white-space:nowrap}
.topnav a:hover,.topnav a:focus-visible{color:var(--ink);background:color-mix(in srgb,var(--line) 30%,transparent)}
.spacer{flex:1}
.edition{font-size:.78rem;border:0;padding:.3rem .5rem;color:var(--ink-2);border-radius:999px}
.edition:hover{color:var(--ink)}
.icon-btn{position:relative;width:28px;height:28px;min-height:0;border:0;border-radius:50%;background:none;color:var(--ink-2);display:grid;place-items:center;padding:0}
.icon-btn::before{content:"";position:absolute;inset:-8px}
.icon-btn:hover{color:var(--ink)}
.progress{position:absolute;left:0;right:0;bottom:-1px;height:1px;pointer-events:none}
.progress::before{content:"";position:absolute;left:0;top:0;height:1px;width:calc(var(--p,0) * 100%);background:var(--wine);opacity:.7}
.cartmark{position:absolute;top:-4px;left:calc(var(--p,0) * (100% - 12px));width:11px;height:5px;border-radius:1px;background:var(--wine);box-shadow:0 0 0 0 transparent}
.cartmark::before,.cartmark::after{content:"";position:absolute;bottom:-2px;width:3px;height:3px;border-radius:50%;background:var(--wine)}
.cartmark::before{left:1px}.cartmark::after{right:1px}
.skip:focus{top:0}
section,.step{scroll-margin-top:calc(var(--bar) + 12px)}
@media (max-width:560px){.home-name{display:none}.topnav{margin-left:0}}
.rail{opacity:0;transition:opacity .7s}
.rail-on .rail{opacity:.85}

.hero.story{display:block;max-width:84rem;margin:0 auto;padding:0 1rem}
.story-text{padding-bottom:6svh}
.step{min-height:78svh;display:flex;align-items:center}
.step-intro{min-height:90svh;padding-top:2rem}
.step-card{max-width:25rem}
.step:not(.step-intro) .step-card{background:var(--card);border:1px solid var(--line-soft);border-radius:14px;padding:1.1rem 1.25rem 1.2rem;box-shadow:var(--shadow)}
.step h2{font-size:1.35rem;margin:0 0 .5rem}
.step p{margin:0}
.step-intro h1{font-size:clamp(2rem,3.4vw,2.9rem);line-height:1.08;letter-spacing:-.015em;margin:.2rem 0 1rem}
.step-intro .deck{font-size:1.15rem}
.story-stage{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:.7rem .8rem .6rem;box-shadow:var(--shadow);display:flex;flex-direction:column;min-width:0}
.story-stage .maptools{margin-bottom:.35rem}
@media (min-width:1020px){
  .hero.story{display:grid;grid-template-columns:25rem minmax(0,1fr);gap:2rem;align-items:start}
  .story-stage{position:sticky;top:calc(var(--bar) + 14px);height:calc(100svh - var(--bar) - 28px)}
  .story-stage .mapframe{flex:1;min-height:0;display:flex;align-items:center}
  .story-stage .stage{width:min(100%,calc((100svh - 15rem) * 1.351));margin:0 auto}
}
@media (max-width:1019px){
  .hero.story{display:flex;flex-direction:column;padding:0}
  .story-stage{order:-1;position:sticky;top:var(--bar);z-index:6;border-radius:0 0 14px 14px;border-width:0 0 1px;padding:.35rem .5rem .4rem}
  .story-stage .maptools{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;gap:.4rem;margin-bottom:.25rem}
  .story-stage .modebtn,.story-stage #warp-toggle{min-height:36px;padding:.25rem .7rem;font-size:.88rem;white-space:nowrap;flex:none}
  .story-stage .reach{margin:0 0 .25rem}
  .story-stage .reach-head,.story-stage .legend,.story-stage .mode-note{display:none}
  .reach-cells{width:100%;gap:.35rem}.rc{flex:1;min-height:38px;padding:.15rem .5rem}.rc b{font-size:1.15rem}.rc-l{font-size:.7rem}
  .story-stage .stage{min-width:0;max-height:34svh;width:auto;margin:0 auto}
  .story-stage .mapframe{overflow:hidden;display:flex;justify-content:center}
  .story-text{padding:0 1rem 4svh}
  .step{min-height:62svh;align-items:flex-start;padding-top:1.6rem}
  .step-intro{min-height:70svh}
}
#harta.pre .reach,#harta.pre .legend{visibility:hidden}
.stage .contours{pointer-events:none}
.stage svg .ct{fill:none;stroke:rgb(var(--ring-line));stroke-width:calc(.9px * var(--s,1.3));opacity:.5;stroke-linecap:round}
.stage svg .ct.key{stroke-width:calc(2.4px * var(--s,1.3));opacity:.95}
.stage svg .ctl{font-family:"Fraunces",Georgia,serif;font-size:calc(11px * var(--s,1.3));fill:rgb(var(--ring-line));paint-order:stroke;stroke:var(--salt);stroke-width:calc(3px * var(--s,1.3));stroke-linejoin:round;pointer-events:none}
.stage svg .ctl.key{font-weight:700}
.stage svg .ghost line{stroke:var(--water);stroke-width:calc(1px * var(--s,1.3));stroke-dasharray:calc(3px * var(--s,1.3)) calc(3px * var(--s,1.3));opacity:0;transition:opacity .7s}
.stage.is-warp svg .ghost line{opacity:.55}
.stage svg .ruler path{stroke:var(--ink);stroke-width:calc(1.6px * var(--s,1.3));fill:none}
.stage svg .ruler text{font-family:"Fraunces",Georgia,serif;font-size:calc(12px * var(--s,1.3));fill:var(--ink);paint-order:stroke;stroke:var(--salt);stroke-width:calc(3px * var(--s,1.3))}
.story-stage .modes .modebtn{padding:.35rem .8rem;min-height:38px;font-size:.92rem}
.story-stage #warp-toggle{min-height:38px;padding:.3rem .8rem}
#theme-toggle.icon-btn{border:0;min-height:0;padding:0;font-size:0}
.story-stage .mode-note{margin:.35rem 0 0;font-size:.95rem;line-height:1.4;min-height:2.9em}
@media (min-width:1020px){.story-stage .stage{width:min(100%,calc((100svh - 17rem) * 1.351))}}
.stage svg .ct{filter:none}
.stage svg .ct.key{stroke:rgb(var(--ring-line))}
.stage svg .ct-halo{fill:none;stroke:var(--salt);stroke-width:calc(5.5px * var(--s,1.3));opacity:.75;stroke-linecap:round}
#harta.is-warp .legend{visibility:hidden}
@media (max-width:1019px){
  .story-text{display:contents}
  .step-intro{order:0;min-height:56svh;padding-top:1.4rem}
  .story-stage{order:1}
  .step:not(.step-intro){order:2}
  .story-stage .modes{display:none}
  .story-stage .maptools{justify-content:flex-end;margin:0 0 .25rem}
  .story-stage .stage{max-height:31svh}
  .step-intro h1{font-size:clamp(1.8rem,8vw,2.4rem)}
}
@media (max-width:1019px){
  .story-stage .stage{width:min(100%,calc(31svh * 1.351));max-height:none}
  .step{padding-inline:1rem}
  .topnav a{padding:.35rem .42rem;font-size:.76rem}
  .topbar{gap:.3rem}
  .edition{padding:.3rem .3rem}
}
@media (max-width:1019px){.tip{position:fixed;left:.6rem!important;right:.6rem;bottom:.8rem;top:auto!important;width:auto;transform:none!important;z-index:60}}

.resid{margin:1.2rem 0 1.4rem}
.resid figcaption{font-family:"Fraunces",Georgia,serif;font-weight:600;margin-bottom:.5rem}
.resid ul{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.resid li{display:grid;grid-template-columns:minmax(8rem,13rem) 1fr 3.6rem;gap:.7rem;align-items:center;font-size:.95rem}
.rsv{width:100%;height:1.4rem;display:block}
.rz{fill:color-mix(in srgb,var(--line-soft) 50%,transparent)}
.rb{fill:var(--wine)}.rb-int{fill:var(--ink-2);opacity:.55}
.r0{stroke:var(--ink);stroke-width:.4;vector-effect:non-scaling-stroke}
.rv{font-family:"Fraunces",Georgia,serif;font-weight:700;color:var(--wine);text-align:right}
@media (max-width:560px){.resid li{grid-template-columns:1fr 3.4rem;row-gap:.1rem}.resid .rl{grid-column:1/-1}}
.paper h2{font-size:clamp(1.55rem,2.8vw,2.05rem);letter-spacing:-.01em;margin-bottom:1rem}
.paper > h2::before,.paper h2:first-child::before{content:"";display:block;width:2.4rem;height:2px;background:var(--wine);margin-bottom:.8rem}
.paper{padding-top:3.6rem}
.paper .lede{font-size:1.22rem;line-height:1.55}
.fig{margin:1.8rem 0}
.fig img{box-shadow:var(--shadow)}
.fig figcaption{font-size:.92rem}

/* round 2 fixes */
#harta.pre .reach{visibility:visible}
#harta.pre .reach-cells{visibility:hidden}
.step-intro h1{font-size:clamp(1.9rem,2.7vw,2.55rem)}
.hero-fig{margin-top:1.2rem!important}
.race-status{font-size:1.08rem}
.lanes .bracket{opacity:.3}
.stage.is-warp .relief{opacity:.07!important}
.stage.is-warp svg .ghost line{stroke:var(--wine);opacity:.5}
@media (max-width:1019px){
  .story-stage .maptools{position:absolute;right:.9rem;bottom:.9rem;margin:0;z-index:7;pointer-events:auto}
  .story-stage .maptools #warp-toggle{background:var(--card);min-height:32px;padding:.15rem .6rem;font-size:.8rem}
  .story-stage .stage{max-height:none;width:min(100%,calc(36svh * 1.351))}
  .tip{right:4.2rem}
  .story-stage{padding-top:.3rem}
}
