@font-face{font-family:"EB Garamond";src:url(fonts/EBGaramond.woff2) format("woff2");font-weight:400 800;font-style:normal;font-display:swap}
@font-face{font-family:"EB Garamond";src:url(fonts/EBGaramond-Italic.woff2) format("woff2");font-weight:400 800;font-style:italic;font-display:swap}
@font-face{font-family:"Source Serif 4";src:url(fonts/source-serif-4-normal-latin.woff2) format("woff2");font-weight:200 900;font-style:normal;font-display:swap;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:"Source Serif 4";src:url(fonts/source-serif-4-normal-latin-ext.woff2) format("woff2");font-weight:200 900;font-style:normal;font-display:swap;unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Source Serif 4";src:url(fonts/source-serif-4-italic-latin.woff2) format("woff2");font-weight:200 900;font-style:italic;font-display:swap;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:"Source Serif 4";src:url(fonts/source-serif-4-italic-latin-ext.woff2) format("woff2");font-weight:200 900;font-style:italic;font-display:swap;unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}

:root{
  --bg:#f3ecdd;--paper:#fbf6ea;--ink:#1d1812;--ink-2:#4d4336;--mut:#665b4c;--rule:#dccfb8;--rule-2:#b6a58a;--link:#8e2a1f;--bar-bg:rgba(243,236,221,.92);
  --seal:#b3261e;--seal-ink:#fff8ee;--focus:#8e2a1f;--rail:#8f8270;--shi:#1d1812;--covert:#6d4f8f;
  --sea:#e6ddca;--land:#e9e0cc;--china:#f7f0e0;--river:#7d9bb0;--trail:#b3261e;--dot:#4d4336;
  --serif:"Source Serif 4",Georgia,serif;--display:"EB Garamond",Garamond,Georgia,serif;
  --cjk:"PingFang SC","Hiragino Sans GB","Noto Serif CJK SC","Noto Serif SC","Source Han Serif SC","Songti SC","Microsoft YaHei",serif;
  color-scheme:light
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#16130f;--paper:#1f1b15;--ink:#efe6d6;--ink-2:#cdbfa8;--mut:#a89a84;--rule:#352f26;--rule-2:#54493b;--link:#f0a58f;--bar-bg:rgba(22,19,15,.92);
  --seal:#e0685a;--seal-ink:#16130f;--focus:#f0a58f;--rail:#6f6455;--shi:#efe6d6;--covert:#b79be0;
  --sea:#141c22;--land:#221e18;--china:#2a251d;--river:#5f89a8;--trail:#e0685a;--dot:#cdbfa8;color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#16130f;--paper:#1f1b15;--ink:#efe6d6;--ink-2:#cdbfa8;--mut:#a89a84;--rule:#352f26;--rule-2:#54493b;--link:#f0a58f;--bar-bg:rgba(22,19,15,.92);
  --seal:#e0685a;--seal-ink:#16130f;--focus:#f0a58f;--rail:#6f6455;--shi:#efe6d6;--covert:#b79be0;
  --sea:#141c22;--land:#221e18;--china:#2a251d;--river:#5f89a8;--trail:#e0685a;--dot:#cdbfa8;color-scheme:dark}

*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;overflow-x:clip}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--bg);color:var(--ink);font:1.1rem/1.62 var(--serif)}
body.l-zh{font-family:var(--cjk);line-height:1.8}
a{color:var(--link);text-underline-offset:.15em;overflow-wrap:anywhere}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:var(--paper);color:var(--ink);padding:.5rem .8rem;z-index:99}
.skip:focus{left:.5rem;top:.5rem}
h1,h2,h3{font-family:var(--display);font-weight:600;line-height:1.15;letter-spacing:-.005em}
.l-zh h1,.l-zh h2,.l-zh h3,.l-zh .when,.l-zh .you{font-family:var(--cjk);letter-spacing:0;font-weight:700}
h2{font-size:clamp(1.6rem,3.4vw,2.2rem);margin:0 0 .6rem}
h3{font-size:1.2rem;margin:1.1rem 0 .3rem}
.anchor{color:inherit;text-decoration:none}
.anchor:hover{text-decoration:underline;text-decoration-thickness:1px}
.src{font-size:.86rem;color:var(--mut)}
.src a{color:var(--mut)}

/* topbar */
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:.9rem;height:2.75rem;padding:0 1rem;background:var(--bar-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--rule);font-size:.9rem}
.topbar a{color:var(--ink);text-decoration:none}
.topbar .home{font-weight:600;white-space:nowrap}
.topnav{display:flex;gap:1rem;overflow-x:auto;scrollbar-width:none;min-width:0;flex:0 1 auto}
.topnav::-webkit-scrollbar{display:none}
.topnav a{white-space:nowrap;color:var(--ink-2)}
.topnav a:hover{color:var(--ink);text-decoration:underline}
.spacer{flex:1}
.chip{display:inline-flex;align-items:center;justify-content:center;min-height:2.2rem;min-width:2.75rem;border:1px solid var(--rule-2);border-radius:99px;padding:.1rem .7rem;font-size:.82rem;white-space:nowrap}
.icon-btn{display:inline-grid;place-items:center;width:2.75rem;height:2.75rem;margin-right:-.6rem;background:none;border:0;color:var(--ink);cursor:pointer;border-radius:50%}
.icon-btn svg[hidden]{display:none}
@media (max-width:900px){.topnav{display:none}.topbar{gap:.5rem}}

/* rail */
.rail{position:fixed;right:.7rem;top:50%;transform:translateY(-50%);z-index:30;display:flex;flex-direction:column;gap:.5rem}
.rail a{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-height:1.6rem;text-decoration:none;color:var(--mut);font-size:.8rem}
.rail span{opacity:0;transition:opacity .2s;background:var(--paper);padding:.05rem .4rem;border-radius:4px;white-space:nowrap}
.rail:hover span,.rail a:focus-visible span{opacity:1}
.rail i{display:block;width:9px;height:9px;border-radius:50%;border:1.5px solid var(--rule-2)}
.rail a[aria-current] i{background:var(--seal);border-color:var(--seal)}
@media (max-width:1180px){.rail{display:none}}

/* intro */
.intro{max-width:72rem;margin:0 auto;padding:2.2rem 1.1rem 1rem;display:grid;grid-template-columns:minmax(0,1fr) 15rem;gap:1.2rem 2.4rem;align-items:start}
.kicker{font-size:.82rem;letter-spacing:.14em;text-transform:uppercase;color:var(--seal);margin:0 0 .4rem;font-weight:600}
.l-zh .kicker{letter-spacing:.2em}
h1{font-size:clamp(2.1rem,5.2vw,3.7rem);margin:0 0 .8rem;text-wrap:balance}
.deck{font-size:1.25rem;line-height:1.5;color:var(--ink-2);margin:0 0 .7rem;max-width:40rem}
.by{font-size:.9rem;color:var(--mut);margin:0 0 1rem}
.go{display:inline-flex;align-items:center;min-height:2.9rem;padding:.3rem 1.1rem;border-radius:99px;background:var(--seal);color:var(--seal-ink);text-decoration:none;font-weight:600}
.go:hover{filter:brightness(1.08)}
.portrait{margin:0}
.portrait img{display:block;width:100%;height:auto;border-radius:3px;filter:sepia(.25) contrast(1.05);box-shadow:0 1px 0 var(--rule-2)}
.portrait figcaption{font-size:.78rem;color:var(--mut);margin-top:.4rem;line-height:1.35}
.joke{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:.7rem 0;margin:0 0 .9rem;display:grid;grid-template-columns:12rem minmax(0,1fr);gap:1rem;align-items:center;max-width:44rem}
.joke p{margin:0;font-style:italic;color:var(--ink-2)}
.l-zh .joke p{font-style:normal}
.joke .src{font-style:normal;display:block;margin-top:.2rem}
.engines{width:100%;height:auto}
.engines .loco rect,.engines .car rect{fill:var(--ink)}
.engines .car .win{fill:var(--bg)}
.engines circle{fill:var(--bg);stroke:var(--ink);stroke-width:2.2}
.engines .cow{fill:var(--ink)}
.engines .ground{stroke:var(--rule-2);stroke-width:1.5}
.engines .arrow{fill:none;stroke:var(--seal);stroke-width:2;stroke-linecap:round}
@media (max-width:760px){
  .intro{grid-template-columns:1fr;padding-top:1.4rem;gap:.8rem}
  .portrait{max-width:12rem}
  .joke{grid-template-columns:1fr;gap:.4rem}
  .joke .engines{max-width:15rem}
  .deck{font-size:1.12rem}
}

/* blocks */
.block{max-width:42rem;margin:0 auto;padding:2.6rem 1.1rem 1rem}
.block.wide{max-width:72rem}
.lede{color:var(--ink-2);max-width:42rem}
.legend{list-style:none;padding:0;margin:.4rem 0 .8rem;display:flex;flex-wrap:wrap;gap:.3rem 1.2rem;font-size:.88rem;color:var(--ink-2)}
.legend .k{display:inline-block;vertical-align:middle;margin-right:.4rem;width:12px;height:12px;border-radius:50%}
.legend .turn{background:var(--seal)}
.legend .move{border:2px solid var(--shi);background:var(--bg)}
.legend .covert{width:22px;height:0;border-radius:0;border-top:3px dotted var(--covert)}
.line-wrap{overflow-x:auto;border:1px solid var(--rule);border-radius:6px;background:var(--paper);padding:.4rem 0}
.line{display:block;min-width:760px;width:100%;height:auto;font-family:var(--serif),var(--cjk)}
.line .tline{stroke:var(--rail);stroke-width:1.2;stroke-dasharray:1 5;stroke-linecap:round}
.line .tname{font-size:12.5px;fill:var(--ink-2)}
.line .yr{stroke:var(--rule);stroke-width:1}
.line .yrt{font-size:11px;fill:var(--mut);text-anchor:middle}
.line .shi{stroke:var(--shi);stroke-width:4;fill:none;stroke-linecap:round}
.line .shi.covert{stroke:var(--covert);stroke-dasharray:2 5}
.line .shi.refuge{stroke:var(--mut);stroke-width:2;stroke-dasharray:4 4}
.line .shi.alongside{stroke:var(--shi);stroke-width:2.2;stroke-dasharray:6 4;opacity:.8}
.line .shi.jump{stroke-width:2.2}
.line .note{font-size:11px;fill:var(--mut);font-style:italic}
.line .ev{fill:var(--bg);stroke:var(--shi);stroke-width:2.2}
.line .ev.turn{fill:var(--seal);stroke:var(--bg);stroke-width:1.6}
.line .ev.undone{fill:var(--bg);stroke:var(--covert);stroke-dasharray:2 2}
.line .stop line{stroke:var(--seal);stroke-width:4;stroke-linecap:round}
.line .stop text{font-size:11.5px;fill:var(--seal);font-weight:600}

/* game */
.story{max-width:72rem;margin:0 auto;padding:0 1.1rem;display:grid;grid-template-columns:minmax(0,34rem) minmax(0,1fr);gap:0 2.4rem}
.steps{grid-column:1;grid-row:1;padding-bottom:30vh}
.stage{grid-column:2;grid-row:1;position:sticky;top:3.6rem;height:calc(100vh - 4.6rem);display:flex;align-items:center}
.map{width:100%;height:auto;max-height:100%;border-radius:6px;border:1px solid var(--rule);font-family:var(--serif),var(--cjk)}
.map .sea{fill:var(--sea)}
.map .land{fill:var(--land);stroke:var(--rule-2);stroke-width:.6}
.map .china{fill:var(--china);stroke:var(--rule-2);stroke-width:.8}
.map .river{fill:none;stroke:var(--river);stroke-width:1.6;opacity:.8}
.map .trail{fill:none;stroke:var(--trail);stroke-width:2.2;stroke-dasharray:5 4;opacity:.85}
.map .place circle{fill:var(--dot);stroke:var(--china);stroke-width:1.2;transition:r .3s}
.map .place text{font-size:13px;fill:var(--mut);paint-order:stroke;stroke:var(--china);stroke-width:3px}
.map .place.seen circle{fill:var(--trail)}
.map .place.on circle{fill:var(--seal);r:8}
.map .place.on text{fill:var(--ink);font-weight:700;font-size:15px}
.map .place:not(.on):not(.seen) text{opacity:.0}
.fork{background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:1.2rem 1.25rem 1rem;margin:0 0 36vh;scroll-margin-top:4rem;box-shadow:0 1px 0 var(--rule)}
.fork:first-child{margin-top:6vh}
.when{font-family:var(--display),var(--cjk);font-size:1.35rem;font-weight:600;margin:0 0 .5rem;display:flex;align-items:center;gap:.6rem}
.num{display:inline-grid;place-items:center;flex:none;width:2rem;height:2rem;border-radius:50%;border:2px solid var(--seal);color:var(--seal);font-size:1rem;font-family:var(--serif)}
.before{margin:0 0 .7rem}
.ask{font-weight:600;margin:.2rem 0 .5rem}
.opts{display:grid;gap:.5rem}
.opts button{font:inherit;font-size:1rem;text-align:left;min-height:2.9rem;padding:.55rem .9rem;border:1.5px solid var(--rule-2);border-radius:6px;background:var(--bg);color:var(--ink);cursor:pointer}
.opts button:hover{border-color:var(--ink-2)}
.opts button[aria-pressed="true"]{border-color:var(--seal);background:var(--seal);color:var(--seal-ink)}
.opts button[data-c="b"][data-his]::after{content:"";}
.skipq{margin:.5rem 0 0}
.linkish{font:inherit;font-size:.92rem;background:none;border:0;padding:.4rem 0;min-height:2.75rem;color:var(--link);text-decoration:underline;text-underline-offset:.15em;cursor:pointer}
.reveal{border-top:1px solid var(--rule);margin-top:.9rem;padding-top:.3rem}
.reveal h3{font-size:1.02rem;font-family:var(--serif),var(--cjk);text-transform:uppercase;letter-spacing:.08em;color:var(--mut);margin:.8rem 0 .2rem}
.l-zh .reveal h3{letter-spacing:.15em}
.reveal p{margin:.2rem 0 .5rem}
.verdict{font-weight:700;color:var(--seal)}
.verdict:empty{display:none}
html.js .fork:not(.done) .reveal{display:none}
html.js .fork.done .skipq{display:none}
.fork.final{border-color:var(--seal)}
@media (max-width:900px){
  .story{display:block;padding:0}
  .stage{position:sticky;top:2.75rem;z-index:5;height:auto;display:block;background:var(--bg);padding:.4rem .6rem;border-bottom:1px solid var(--rule)}
  .map{max-height:30vh;width:auto;max-width:100%;display:block;margin:0 auto}
  .steps{padding:0 1rem 20vh}
  .fork{margin-bottom:14vh;scroll-margin-top:calc(2.75rem + 30vh + 2.2rem)}
  .fork:first-child{margin-top:1.2rem}
  .map .place text{font-size:17px}
  .map .place.on text{font-size:19px}
}
@media (max-width:900px) and (max-height:620px){.map{max-height:24vh}.fork{scroll-margin-top:calc(2.75rem + 24vh + 2.2rem)}}

/* tally */
.you{font-size:1.3rem;font-family:var(--display),var(--cjk);font-weight:600}

/* table */
.table-wrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:.95rem;min-width:40rem}
th,td{text-align:left;vertical-align:top;padding:.55rem .6rem;border-bottom:1px solid var(--rule)}
th{font-size:.8rem;text-transform:uppercase;letter-spacing:.08em;color:var(--mut);font-weight:600}
td:first-child{white-space:nowrap;font-variant-numeric:tabular-nums}
tr.turn td:first-child{box-shadow:inset 3px 0 0 var(--seal)}
.tmark,.umark{display:inline-block;font-size:.75rem;padding:.02rem .45rem;border-radius:99px;background:var(--seal);color:var(--seal-ink);margin-left:.3rem;white-space:nowrap}
.umark{background:none;color:var(--covert);border:1px dashed var(--covert)}
td.src{font-size:.8rem;min-width:9rem}

.fixes li{margin:.35rem 0}
.srcs{padding-left:1.1rem;font-size:.92rem}
.srcs li{margin:.2rem 0}
.rel{padding-left:1.1rem}

/* back to top */
.totop{position:fixed;right:max(1rem,env(safe-area-inset-right));bottom:max(1rem,env(safe-area-inset-bottom));z-index:45;display:flex;flex-direction:column;align-items:center;justify-content:center;width:3.2rem;height:3.2rem;border-radius:50%;border:1px solid var(--rule-2);background:var(--paper);color:var(--ink);font:600 .7rem/1 var(--serif);cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.12)}
.totop[hidden]{display:none}
.totop span[aria-hidden]{font-size:1.05rem}

.foot{max-width:42rem;margin:3rem auto 0;padding:1.4rem 1.1rem 3rem;border-top:1px solid var(--rule);font-size:.9rem;color:var(--mut)}
.foot a{color:var(--mut)}
.nf main{max-width:36rem;margin:18vh auto;padding:0 1.2rem}
@media print{.topbar,.rail,.stage,.totop,.opts,.skipq{display:none}html.js .fork .reveal{display:block}}
