/* 模型岛 · 样式
   配色沿用站点：米白底、赭色强调、青色辅助。3D 场景之外的一切都是普通 HTML，
   这样读屏、键盘、翻译都照常工作——画布只负责「看」。 */
:root{
  --bg:#f9f7f3;--bg2:#f2ede4;--bg3:#e8e1d4;--card:#fff;--border:#ddd6c8;--border2:#c8bfaf;
  --ink:#1a1612;--ink2:#3d352a;--ink3:#5f564a;--ink4:#706658;
  --rust:#b85c2a;--rust-t:#984c23;--rust2:#d4763e;--rust-d:rgba(184,92,42,.1);
  --teal:#1a6e6a;--teal-t:#155b57;--teal-d:rgba(26,110,106,.1);
  --gold:#b8860b;
  --serif:'Noto Serif SC',Georgia,'Songti SC',serif;--sans:'Noto Sans SC',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
  --shadow:0 6px 28px rgba(26,22,18,.16);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html{background:var(--bg)}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.7;-webkit-font-smoothing:antialiased}
html.isle-on,html.isle-on body{height:100%;overflow:hidden;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer}
button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--teal);outline-offset:2px}

/* ── 导航（与站内其它页同款） ── */
nav{position:fixed;top:0;left:0;right:0;z-index:200;height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 28px;background:rgba(249,247,243,.95);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border)}
.nav-logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.logo-mark{width:34px;height:34px;border-radius:8px;overflow:hidden;display:block}
.logo-mark img{width:34px;height:34px;object-fit:contain;display:block}
.logo-cn{font-family:var(--serif);font-size:15px;font-weight:600}
.nav-links{display:flex;gap:4px}
.nav-link{font-size:13px;color:var(--ink2);text-decoration:none;padding:8px 13px;border-radius:8px;transition:background .18s}
.nav-link:hover{background:var(--bg2);color:var(--ink)}
.nav-cta{font-size:13px;color:#fff;text-decoration:none;padding:8px 16px;border-radius:8px;background:var(--rust)}
.nav-cta:hover{background:var(--rust2)}
.mobile-menu-btn{display:none;flex-direction:column;gap:4px;padding:8px;background:none;border:none}
.mobile-menu-btn span{width:20px;height:2px;background:var(--ink2)}
.mobile-nav{display:none;position:fixed;top:60px;left:0;right:0;background:var(--card);border-bottom:1px solid var(--border);padding:12px 24px;z-index:199;box-shadow:var(--shadow)}
.mobile-nav.active{display:block}
.mobile-nav a{display:block;padding:11px 0;border-bottom:1px solid var(--border);font-size:15px;color:var(--ink2);text-decoration:none}
.mobile-nav a:last-child{border-bottom:none}
@media(max-width:1020px){.nav-links{display:none}.mobile-menu-btn{display:flex}.nav-cta{margin-left:auto;margin-right:10px}}

/* ── 舞台 ── */
.stage{position:fixed;top:60px;left:0;right:0;bottom:0;overflow:hidden;background:#cfe6ec;user-select:none;-webkit-user-select:none}
.gl-host,.gl-host canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;outline:none}

/* HUD：顶栏 */
.hud-top{position:absolute;top:12px;left:12px;right:12px;display:flex;justify-content:space-between;align-items:flex-start;gap:10px;pointer-events:none;z-index:5}
.hud-title{pointer-events:auto;background:rgba(255,253,248,.9);border:1px solid var(--border);border-radius:12px;padding:7px 14px 8px;box-shadow:0 2px 10px rgba(26,22,18,.08)}
.hud-title h1{font-family:var(--serif);font-size:17px;font-weight:700;line-height:1.3;color:var(--ink)}
.hud-chap{display:block;font-size:11.5px;color:var(--ink3);line-height:1.4}
.hud-chap b{color:var(--rust-t);font-weight:700}
.hc-short{display:none}
/* ── 下一站 ── */
.hud-next{display:flex;align-items:center;gap:5px;margin-top:4px;padding:3px 9px;border-radius:999px;border:1px solid rgba(217,163,58,.55);background:#fdf6e7;font-size:12px;color:#6b4e08;font-weight:600;max-width:100%;text-align:left;line-height:1.45}
.hud-next:hover{border-color:var(--rust);color:var(--rust-t)}
#hudNextTxt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
#hudNextDist{flex:none;white-space:nowrap}
.hud-next.dim{opacity:.8;border-style:dashed}
.hud-next.done{background:var(--teal-d);border-color:rgba(26,110,106,.4);color:var(--teal-t)}
.hud-title{max-width:min(460px,calc(100vw - 260px))}
/* ── 笔记本 ── */
.hud-btn{position:relative}
#btnBook.has-new::after{content:'';position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%;background:var(--rust);box-shadow:0 0 0 2px #fff}
.bk-wrap{width:min(820px,100%)}
.bk-prog{margin-left:auto;margin-right:10px;font-size:12.5px;color:var(--ink3);font-weight:600;white-space:nowrap}
.bk-ch{margin-top:14px}
.bk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.bk-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.bk-card.locked{background:var(--bg2);border-style:dashed}
.bk-card.bk-hl{border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-d)}
.bk-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px}
.bk-kick{flex-basis:100%;font-size:11px;letter-spacing:1px;color:var(--rust-t);font-weight:600}
.bk-title{font-family:var(--serif);font-size:15.5px;font-weight:700;line-height:1.35}
.bk-ok{margin-left:auto;font-size:11.5px;font-weight:700;color:var(--teal-t);background:var(--teal-d);border-radius:6px;padding:0 7px}
.bk-lock{font-size:12.5px;color:var(--ink3);line-height:1.7}
.bk-dl{display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.7;color:var(--ink2)}
.bk-dl dt{font-size:11.5px;font-weight:700;color:var(--ink3);margin-top:4px}
.bk-dl dd{margin:0}
.bk-more{font-size:12.5px;color:var(--ink3);line-height:1.7}
.bk-more a{color:var(--teal-t);font-weight:600}
.bk-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto;padding-top:4px}
.bk-cert{margin-top:18px;border-top:1px solid var(--border);padding-top:6px}
.bk-name{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:13.5px;color:var(--ink2);margin:6px 0 2px}
.bk-name input{font:inherit;font-size:14px;border:1.5px solid var(--border);border-radius:9px;padding:6px 10px;background:var(--card);color:var(--ink);min-width:12em}
.bk-name input:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.bk-note{font-size:12px;color:var(--ink3);margin-bottom:10px}
.cert{position:relative;background:#fffdf7;border:2px solid #c9a24b;border-radius:10px;padding:26px 28px 22px;text-align:center;box-shadow:inset 0 0 0 6px #fffdf7,inset 0 0 0 7px rgba(201,162,75,.45);margin:8px 0 12px}
.cert-kick{font-size:12px;letter-spacing:3px;color:var(--rust-t);font-weight:700}
.cert-title{font-family:var(--serif);font-size:26px;font-weight:700;margin:6px 0 14px;letter-spacing:4px}
.cert-name{font-family:var(--serif);font-size:24px;font-weight:700;color:var(--ink);border-bottom:1.5px solid #c9a24b;display:inline-block;min-width:8em;padding:0 12px 4px;margin-bottom:12px}
.cert-body{font-size:13.5px;line-height:1.9;color:var(--ink2);max-width:36em;margin:0 auto 10px}
.cert-list{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:4px 10px;font-size:12.5px;color:var(--teal-t);font-weight:600;margin-bottom:12px}
.cert-list li::before{content:'✓ '}
.cert-foot{font-size:12.5px;color:var(--ink3)}
@media print{
  html.print-cert,html.print-cert body{height:auto!important;overflow:visible!important;background:#fff!important}
  html.print-cert body *{visibility:hidden!important}
  html.print-cert #certPaper,html.print-cert #certPaper *{visibility:visible!important}
  html.print-cert #certPaper{position:fixed;left:6%;right:6%;top:12%;margin:0;box-shadow:none}
}

/* ── 两岛小地图 ── */
.mm{margin:4px 0 10px}
#miniMap{display:block;width:100%;height:auto;aspect-ratio:506/396;border-radius:10px;border:1px solid var(--border)}
.mm-st{cursor:pointer}
.mm-st:hover circle:not(.mm-hit){stroke:#1a1612;stroke-width:1.6}
.mm-st.mm-far{cursor:not-allowed;opacity:.55}
.mm-key{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--ink3);margin-top:6px;align-items:center}
.mm-key>span{display:inline-flex;align-items:center;gap:5px}
.mm-key i{display:inline-block;width:10px;height:10px;border-radius:50%}
.mm-key .k-done{background:#1a6e6a}.mm-key .k-open{background:#d9a33a}.mm-key .k-lock{background:#b9b2a6}
.mm-key .k-you{background:#b85c2a;border-radius:2px;transform:rotate(45deg);width:8px;height:8px}
.mm-key .k-route{width:18px;height:0;border-radius:0;border-top:2px dashed #3a548c}
.mm-key .mm-tip{flex-basis:100%;color:var(--ink4)}
.mm-poi{cursor:pointer}
.mm-poi:hover circle:not(.mm-hit){stroke:#1a1612;stroke-width:1.4}

.q-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-bottom:10px}
.q-lab{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink2)}
.q-lab select{font:inherit;font-size:13.5px;border:1.5px solid var(--border);border-radius:9px;padding:5px 8px;background:var(--card);color:var(--ink);min-height:34px}
.q-now{font-size:12.5px;color:var(--ink3)}
.bk-first{font-size:11.5px;font-weight:700;color:#6b4e08;background:#f4ecd6;border-radius:6px;padding:0 7px}

/* ── 问题山 ── */
.tp-wrap{width:min(820px,100%)}
.tp-bar{display:flex;align-items:center;gap:10px;margin:2px 0 8px}
.tp-search{flex:1;min-width:0;font:inherit;font-size:13.5px;border:1.5px solid var(--border);border-radius:999px;padding:6px 14px;background:var(--card);color:var(--ink);min-height:36px}
.tp-search:focus{outline:none;border-color:var(--teal)}
.tp-search:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
/* 分类一行排开，放不下就左右滑，不再挤成三行 */
.tp-cats{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;padding:2px 2px 8px;margin:0 -2px 4px;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.tp-cats .tp-chip{flex:none;white-space:nowrap}
.tp-cats{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);padding-right:24px}
.tp-chip{--tp-col:#3d352a;background:var(--card);border:1.5px solid var(--border);border-radius:999px;padding:4px 12px;font-size:12.5px;color:var(--ink2);min-height:32px}
.tp-chip:hover{border-color:var(--tp-col)}
.tp-chip[aria-pressed=true]{background:var(--tp-col);border-color:var(--tp-col);color:#fff}
.tp-list{margin-top:4px}
.tp-card{--tp-col:#8a7f6e;background:var(--card);border:1px solid var(--border);border-left:4px solid var(--tp-col);border-radius:12px;padding:11px 13px;display:flex;flex-direction:column;gap:5px}
.tp-card.tp-big{border-width:1.5px;border-left-width:6px;padding:14px 16px;margin-bottom:6px;background:#fffdf7}
.tp-card.tp-teacher{background:#fbf6ea}
.tp-meta{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center}
.tp-cat{font-size:11.5px;font-weight:700;color:var(--ink2);letter-spacing:.5px}
.tp-tag{font-size:11px;font-weight:600;color:var(--ink3);background:var(--bg2);border-radius:6px;padding:0 6px}
.tp-tag-t{background:#f4ecd6;color:#6b4e08}
.tp-title{font-family:var(--serif);font-size:15px;font-weight:700;line-height:1.5;color:var(--ink)}
.tp-big .tp-title{font-size:17.5px}
.tp-hint{font-size:13px;line-height:1.75;color:var(--ink3)}
.tp-foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:auto;padding-top:4px}
.tp-n{font-size:12.5px;font-weight:700;color:var(--teal-t)}
.tp-n.zero{color:var(--rust-t);font-weight:600}
.tp-link{font-size:12.5px;color:var(--teal-t);font-weight:600;align-self:flex-start}
.tp-foot .btn{margin-left:auto}
.tp-err{font-size:12.5px;color:#8a2f23;margin:6px 0}
.tp-rows{list-style:none;display:flex;flex-direction:column;gap:6px;margin:0 0 12px}
.tp-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:var(--card);border:1px solid var(--border);border-left:4px solid var(--tp-col,var(--teal));border-radius:10px;padding:9px 12px;font:inherit;color:var(--ink);cursor:pointer;min-height:48px}
.tp-row:hover{border-color:var(--tp-col,var(--teal));background:#fffdf7}
.tp-row.tp-row-t{background:#fbf6ea}
.tp-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.tp-row-title{font-family:var(--serif);font-size:14.5px;font-weight:700;line-height:1.5}
.tp-row-meta{font-size:11.5px;color:var(--ink3)}
.tp-row-n{flex:none;font-size:12px;font-weight:700;color:var(--teal-t);background:var(--teal-d);border-radius:999px;padding:2px 9px;white-space:nowrap}
.tp-row-n.zero{color:var(--rust-t);background:var(--rust-d);font-weight:600}
.tp-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:0 0 12px}
.tp-tile{display:flex;flex-direction:column;gap:3px;text-align:left;background:var(--card);border:1px solid var(--border);border-top:4px solid var(--tp-col,var(--teal));border-radius:10px;padding:10px 12px;font:inherit;color:var(--ink);cursor:pointer;min-height:64px}
.tp-tile:hover{border-color:var(--tp-col,var(--teal));background:#fffdf7}
.tp-tile-name{font-size:14px;font-weight:700}
.tp-tile-sub{font-size:12px;color:var(--ink3)}
.tp-empty{font-size:13.5px;color:var(--ink3);margin:6px 0 12px}
.nt-rel{font-size:13px;margin:-4px 0 10px}
.nt-rel a{color:var(--teal-t);font-weight:600}
.nt-back{display:inline-block;background:none;border:none;color:var(--teal-t);font-weight:600;font-size:13px;padding:2px 0 6px;min-height:30px}
.nt-back:hover{text-decoration:underline}
#notesSheet.nt-topic #notesTitle{font-size:18px;line-height:1.5}
#notesSheet.nt-topic .nt-tabs{display:none}
.lv-discuss{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.mm-hill{cursor:pointer}
/* ── 赞、排序、我的、新动态 ── */
.hud-badge{position:absolute;top:-7px;right:-7px;min-width:19px;height:19px;padding:0 5px;border-radius:10px;background:#a3401a;color:#fff;font-size:11px;font-weight:700;line-height:19px;text-align:center;box-shadow:0 0 0 2px #fff;font-style:normal}
.nt-sort{display:inline-flex;border:1.5px solid var(--border);border-radius:999px;overflow:hidden;background:var(--card)}
.nt-sort button{background:none;border:none;padding:5px 12px;font-size:12.5px;color:var(--ink2);min-height:32px}
.nt-sort button+button{border-left:1.5px solid var(--border)}
.nt-sort button[aria-pressed=true]{background:var(--teal-d);color:var(--teal-t);font-weight:700}
.nt-like{display:inline-flex;align-items:center;gap:5px;background:none;border:1.5px solid var(--border);border-radius:999px;padding:2px 10px;font-size:12.5px;color:var(--ink2);font-weight:600;min-height:30px}
.nt-like svg{width:14px;height:14px;flex:none}
.nt-like:hover{border-color:#d9a58c}
.nt-like[aria-pressed=true]{border-color:#e0b39d;background:var(--rust-d);color:var(--rust-t)}
.nt-like[aria-pressed=true] svg path{fill:currentColor}
.nt-like.static{border-color:transparent;padding-left:0;cursor:default;color:var(--ink3)}
.nt-like.pop svg{animation:ntpop .35s ease-out}
@keyframes ntpop{50%{transform:scale(1.4)}}
.nt-badge.k-hid{background:#ece6de;color:#5b5147}
.nt-tip{font-size:12.5px;color:var(--ink3);padding:2px 2px 0}
.nt-act{background:var(--rust-d);border:1px solid rgba(184,92,42,.22);border-radius:12px;padding:10px 12px;margin:4px 0 12px}
.nt-act-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.nt-act-head h3{font-size:14px;color:var(--rust-t);margin:0}
.nt-act-list{list-style:none;display:flex;flex-direction:column;gap:6px;margin-top:4px}
.nt-act-likes,.nt-act-more{font-size:13px;color:var(--rust-t);font-weight:600}
.nt-act-more{font-weight:500}
.nt-act-item{display:block;width:100%;text-align:left;background:var(--card);border:1px solid var(--border);border-radius:9px;padding:7px 10px;font:inherit;font-size:13px;color:var(--ink2);line-height:1.6;cursor:pointer}
.nt-act-item:hover{border-color:var(--teal)}
.nt-act-who{font-weight:700;color:var(--ink)}
.nt-act-q{color:var(--ink3);font-size:12px}
.nt-act-body{display:block;color:var(--ink);margin-top:2px;overflow-wrap:anywhere}
@media(prefers-reduced-motion:reduce){.nt-like.pop svg{animation:none}}
.nt-anon{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--ink2);cursor:pointer;white-space:nowrap}
.nt-anon input{accent-color:var(--teal);width:16px;height:16px}
.nt-anon-hint{font-size:12px;color:var(--ink3);margin:-2px 0 8px;line-height:1.6}
.nt-cform .nt-anon-hint{margin:6px 0 0}
.nt-name.nt-anon-name{font-style:italic}
#notesTitle:focus,.nt-item:focus{outline:none}
/* ── 第四章 ── */
.l11-go{flex-wrap:wrap;gap:6px}
.l11-go .btn{flex:0 1 auto}
.l12-list{list-style:none;display:flex;flex-direction:column;gap:2px;margin:6px 0 10px;padding:0}
.l12-list .tog{display:flex;align-items:center;gap:8px;margin:4px 0}
.l12-sw{display:inline-block;width:12px;height:12px;border-radius:3px;flex:none}
/* ── 第五章 ── */
svg.lv-chart{width:100%;height:auto;display:block;background:var(--card);border:1px solid var(--border);border-radius:10px;margin:8px 0 2px}
.lv-table.l14-flat th:nth-child(2),.lv-table.l14-flat td:nth-child(2),.lv-table.l14-flat th:nth-child(3),.lv-table.l14-flat td:nth-child(3){display:none}
.lv-acts .btn[aria-pressed=true]{background:var(--teal-d);border-color:var(--teal);color:var(--teal-t)}
#notesTitle:focus-visible,.nt-item:focus-visible{outline:2px solid var(--teal);outline-offset:3px}
/* ── 采纳、本周热议、好回答 ── */
.nt-comment.nt-accepted{background:#eef6ee;border:1px solid #b9d8bf;border-radius:10px;padding:8px 10px}
.nt-badge.k-acc{display:inline-block;background:#1f5f3b;color:#fff;margin-bottom:4px}
.nt-acc-btn{color:#1f5f3b}
.tp-hot{list-style:none;display:flex;flex-direction:column;gap:6px;margin:0 0 14px}
.tp-hot-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--card);border:1px solid var(--border);border-left:4px solid var(--tp-col,var(--teal));border-radius:10px;padding:8px 12px;font:inherit;color:var(--ink);cursor:pointer;min-height:44px}
.tp-hot-row:hover{border-color:var(--tp-col,var(--teal))}
.tp-hot-k{flex:none;width:22px;height:22px;border-radius:50%;background:var(--tp-col,var(--teal));color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}
.tp-hot-main{display:flex;flex-direction:column;min-width:0}
.tp-hot-t{font-size:14px;font-weight:600;line-height:1.5}
.tp-hot-n{font-size:12px;color:var(--ink3)}
.tp-best{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin:0 0 14px}
.tp-best-card{display:flex;flex-direction:column;gap:4px;text-align:left;background:var(--card);border:1px solid var(--border);border-top:3px solid var(--tp-col,var(--teal));border-radius:10px;padding:10px 12px;font:inherit;color:var(--ink);cursor:pointer}
.tp-best-card:hover{border-color:var(--tp-col,var(--teal))}
.tp-best-on{font-size:12px;color:var(--ink3);font-weight:600}
.tp-best-body{font-size:13.5px;line-height:1.7;overflow-wrap:anywhere}
.tp-best-by{font-size:12px;color:var(--rust-t);font-weight:600}

@media(max-width:760px){.hc-short{display:inline}.hud-chap{white-space:nowrap}.hc-sep{display:inline-block;width:5px;overflow:hidden;color:transparent}}
.hud-btns{display:flex;gap:8px;pointer-events:auto}
.hud-btn{background:rgba(255,253,248,.92);border:1px solid var(--border);border-radius:10px;padding:8px 12px;font-size:13px;color:var(--ink2);box-shadow:0 2px 10px rgba(26,22,18,.08);min-height:40px}
.hud-btn:hover{border-color:var(--rust);color:var(--rust-t)}

/* 走近提示卡 */
.near{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);width:min(440px,calc(100% - 24px));background:rgba(255,253,248,.96);border:1.5px solid var(--border);border-radius:16px;padding:14px 18px 14px;box-shadow:var(--shadow);z-index:6;animation:rise .22s ease-out}
.near-kick{font-size:11px;letter-spacing:1.5px;color:var(--rust-t);font-weight:600;text-transform:uppercase}
.near-name{font-family:var(--serif);font-size:18px;font-weight:700;line-height:1.35;margin:1px 0 3px}
.near-desc{font-size:13px;color:var(--ink3);line-height:1.7}
.near-extra{font-size:12.5px;color:var(--ink2);line-height:1.7;margin-top:5px;padding-top:6px;border-top:1px dashed var(--border)}
.map-count{font-family:var(--sans);font-size:12px;font-weight:500;color:var(--ink3)}
.near-acts{display:flex;align-items:center;gap:12px;margin-top:10px}
.btn-go{background:var(--rust);color:#fff;border:none;border-radius:9px;padding:9px 18px;font-size:14px;font-weight:600;min-height:40px}
.btn-go:hover{background:var(--rust2)}
.btn-go[disabled]{background:var(--bg3);color:var(--ink3);cursor:not-allowed}
.near-key{font-size:12px;color:var(--ink4)}
.near.locked{border-color:var(--border2)}
@keyframes rise{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}

/* 虚拟摇杆：只在触屏上出现 */
.joy{position:absolute;left:22px;bottom:22px;width:118px;height:118px;border-radius:50%;background:rgba(255,253,248,.28);border:2px solid rgba(255,253,248,.7);display:none;z-index:4;touch-action:none}
.joy-knob{position:absolute;left:50%;top:50%;width:50px;height:50px;margin:-25px 0 0 -25px;border-radius:50%;background:rgba(255,253,248,.92);box-shadow:0 2px 8px rgba(0,0,0,.18)}
html.touch .joy{display:block}
html.touch .near{bottom:156px}
html.touch .near-key{display:none}
html.in-level .joy{display:none}

/* 只给读屏软件看的文字 */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* 关卡面板 */
.lv{position:absolute;top:70px;right:12px;bottom:12px;width:392px;background:rgba(255,253,248,.97);border:1.5px solid var(--border);border-radius:16px;box-shadow:var(--shadow);display:flex;flex-direction:column;z-index:7;overflow:hidden}
.lv-head{display:flex;align-items:flex-start;gap:8px;padding:14px 14px 8px 18px;border-bottom:1px solid var(--border)}
.lv-kick{font-size:11px;letter-spacing:1.5px;color:var(--rust-t);font-weight:600;text-transform:uppercase;flex-basis:100%;order:-1}
.lv-head{flex-wrap:wrap}
.lv-title{font-family:var(--serif);font-size:18px;font-weight:700;line-height:1.35;flex:1;min-width:0}
.lv-fold,.lv-x{width:40px;height:40px;border-radius:9px;border:1px solid var(--border);background:var(--card);font-size:18px;line-height:1;color:var(--ink3);flex-shrink:0}
.lv-fold{display:none}
.lv-x:hover,.lv-fold:hover{border-color:var(--rust);color:var(--rust-t)}
.lv-steps{list-style:none;display:flex;gap:6px;padding:10px 18px 0}
.lv-steps li{flex:1;height:5px;border-radius:3px;background:var(--bg3)}
.lv-steps li.on{background:var(--rust2)}
.lv-steps li.done{background:var(--teal)}
.lv-body{padding:12px 18px 20px;overflow-y:auto;flex:1;-webkit-overflow-scrolling:touch}
.lv-stage{font-size:11.5px;color:var(--ink3);font-weight:600;margin-bottom:4px}
.lv-h3{font-family:var(--serif);font-size:15.5px;font-weight:700;margin:2px 0 6px;line-height:1.45}
.lv-p{font-size:13.5px;color:var(--ink2);line-height:1.85;margin-bottom:10px}
.lv-p b{color:var(--ink);font-weight:600}
.lv-formula{font-family:'JetBrains Mono',ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:1.55;background:var(--bg2);border:1px solid var(--border);border-radius:9px;padding:9px 12px;margin:4px 0 12px;color:var(--ink);white-space:normal;overflow-wrap:break-word}
.lv-formula .fs{display:inline-block;max-width:100%;margin-right:1.4em}
.lv-formula .fs:last-child{margin-right:0}
.lv-formula[hidden]{display:none}
.ctl{margin:10px 0 4px}
.ctl-top{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;color:var(--ink2);margin-bottom:4px}
.ctl-v{font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;color:var(--ink)}
.ctl-row{display:flex;align-items:center;gap:8px}
.ctl-row input[type=range]{flex:1;accent-color:var(--rust);height:32px}
.ctl-nudge{width:40px;height:40px;border-radius:8px;border:1px solid var(--border);background:var(--card);font-size:16px;line-height:1;color:var(--ink2);flex-shrink:0}
.ctl-nudge:hover{border-color:var(--rust);color:var(--rust-t)}
.tog{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--ink2);margin:10px 0;cursor:pointer}
.tog input{width:18px;height:18px;accent-color:var(--teal)}
.lv-acts{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 6px}
.btn{border-radius:9px;padding:9px 16px;font-size:14px;font-weight:600;min-height:40px;border:1.5px solid transparent}
.btn-main{background:var(--rust);color:#fff}
.btn-main:hover{background:var(--rust2)}
.btn-main[disabled]{background:var(--bg3);color:var(--ink3);cursor:not-allowed}
.btn-ghost{background:var(--card);border-color:var(--border);color:var(--ink2)}
.btn-ghost:hover{border-color:var(--rust);color:var(--rust-t)}
.btn-teal{background:var(--teal);color:#fff}
.btn-teal:hover{background:var(--teal-t)}
.read{display:grid;grid-template-columns:1fr auto;gap:4px 12px;font-size:13px;background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:10px 0}
.read dt{color:var(--ink3)}
.read dd{font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;color:var(--ink);text-align:right}
.read dd.good{color:var(--teal)}
.read dd.bad{color:#a33a2c}
.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;color:var(--ink3);margin:6px 0 10px}
.legend i{display:inline-block;width:18px;height:3px;border-radius:2px;vertical-align:middle;margin-right:5px}
.fb-msg{font-size:13px;line-height:1.75;border-radius:10px;padding:10px 12px;margin:10px 0}
.fb-msg.ok{background:var(--teal-d);color:var(--teal-t);border:1px solid rgba(26,110,106,.25)}
.fb-msg.no{background:rgba(163,58,44,.07);color:#8a2f23;border:1px solid rgba(163,58,44,.2)}
.fb-msg.info{background:var(--rust-d);color:var(--rust-t);border:1px solid rgba(184,92,42,.2)}
.mcq{list-style:none;display:flex;flex-direction:column;gap:8px;margin:8px 0}
.mcq button{width:100%;text-align:left;background:var(--card);border:1.5px solid var(--border);border-radius:10px;padding:10px 12px;font-size:13.5px;line-height:1.6;color:var(--ink2)}
.mcq button:hover{border-color:var(--rust)}
.mcq button.right{border-color:var(--teal);background:var(--teal-d);color:var(--teal-t)}
.mcq button.wrong{border-color:rgba(163,58,44,.45);background:rgba(163,58,44,.06);color:#8a2f23}
.mcq button[disabled]{cursor:default}
.lv-chart{margin:8px 0 2px}
.lv-chart svg{width:100%;height:auto;display:block;background:var(--card);border:1px solid var(--border);border-radius:10px}
.lv-more{font-size:12.5px;color:var(--ink3);margin-top:14px;padding-top:12px;border-top:1px solid var(--border);line-height:1.7}
.lv-more a{color:var(--teal-t);font-weight:600;text-decoration:none}
.lv-more a:hover{text-decoration:underline}

/* 提示条 */
.toast{position:absolute;top:74px;left:12px;right:12px;margin:0 auto;width:max-content;max-width:min(560px,calc(100% - 24px));background:rgba(26,22,18,.86);color:#fff;font-size:13.5px;line-height:1.6;padding:9px 16px;border-radius:10px;opacity:0;transition:opacity .25s;pointer-events:none;z-index:9;text-align:center}
.toast.show{opacity:1}
/* 关卡面板在右边时，提示条挪到没被挡住的那一块正中 */
@media(min-width:761px){html.in-level .toast{right:416px;max-width:calc(100% - 440px)}}

/* 载入 */
.loading{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:linear-gradient(180deg,#cfe6ec,#f3ead9);z-index:20;transition:opacity .45s}
.loading.gone{opacity:0;pointer-events:none}
.ld-mark{width:46px;height:46px;border-radius:50%;border:3px solid rgba(184,92,42,.25);border-top-color:var(--rust);animation:spin .9s linear infinite}
.ld-text{font-size:14px;color:var(--ink2)}
@keyframes spin{to{transform:rotate(360deg)}}

/* 弹层：地图、操作说明 */
.sheet{position:fixed;inset:0;z-index:300;background:rgba(26,22,18,.42);display:flex;align-items:center;justify-content:center;padding:16px}
.sheet[hidden]{display:none}
.sheet-card{background:var(--bg);border-radius:18px;width:min(680px,100%);max-height:calc(100% - 16px);overflow-y:auto;padding:22px 24px 24px;box-shadow:var(--shadow)}
.sheet-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px}
.sheet-head h2{font-family:var(--serif);font-size:20px;font-weight:700}
.sheet-x{width:36px;height:36px;border-radius:10px;border:1px solid var(--border);background:var(--card);font-size:20px;line-height:1;color:var(--ink3);flex-shrink:0}
.sheet-x:hover{border-color:var(--rust);color:var(--rust-t)}
.sheet-lede{font-size:13.5px;color:var(--ink3);line-height:1.8;margin-bottom:6px}
.sheet-h3{font-family:var(--serif);font-size:15px;font-weight:700;margin:16px 0 8px}
.sheet-p{font-size:13.5px;color:var(--ink2);line-height:1.9}
.map-list{list-style:none;display:flex;flex-direction:column;gap:8px}
.map-list li{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:10px 12px}
.map-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0;background:var(--border2)}
.map-info{flex:1;min-width:0}
.map-name{font-size:14px;font-weight:600;color:var(--ink)}
.map-sub{font-size:12px;color:var(--ink3);line-height:1.55}
.map-acts{display:flex;gap:6px;flex-shrink:0}
.map-acts a,.map-acts button{font-size:12.5px;padding:6px 11px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--ink2);text-decoration:none;min-height:34px;display:inline-flex;align-items:center}
.map-acts a:hover,.map-acts button:hover{border-color:var(--rust);color:var(--rust-t)}
.st-done .map-dot{background:var(--teal)}
.st-open .map-dot{background:var(--rust2)}
.help-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 24px}
.help-list{list-style:none;display:flex;flex-direction:column;gap:7px;font-size:13.5px;color:var(--ink2)}
kbd{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11.5px;background:var(--card);border:1px solid var(--border2);border-bottom-width:2px;border-radius:5px;padding:1px 6px;margin-right:6px;color:var(--ink)}
.help-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:18px;padding-top:14px;border-top:1px solid var(--border);flex-wrap:wrap}
.cloud-state{font-size:12.5px;color:var(--ink3)}

/* 无 WebGL 时的文字版 */
.fallback{padding:84px 20px 60px}
.fb-in{max-width:760px;margin:0 auto}
.fallback h2{font-family:var(--serif);font-size:1.7rem;margin-bottom:10px}
.fallback h3{font-family:var(--serif);font-size:1.1rem;margin:26px 0 10px}
.fb-lede{font-size:14px;color:var(--ink3);line-height:1.9}
.fb-list{list-style:none;display:flex;flex-direction:column;gap:10px}
.fb-list li{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px 16px;font-size:13.5px;color:var(--ink3);line-height:1.75}
.fb-list a{font-weight:600;color:var(--teal-t);text-decoration:none;font-size:14.5px}
.fb-list a:hover{text-decoration:underline}
.fb-list strong{display:block;color:var(--ink);font-size:14.5px}

/* ── 留言 ── */
.hud-ico{vertical-align:-3px}
.btn-notes{background:var(--card);border:1.5px solid var(--border);border-radius:9px;padding:8px 14px;font-size:13.5px;font-weight:600;color:var(--teal-t);min-height:40px}
.btn-notes:hover{border-color:var(--teal)}
.lv-foot{padding:8px 18px 12px;border-top:1px solid var(--border);background:var(--bg)}
.lv-notes{width:100%;background:var(--card);border:1.5px solid var(--border);border-radius:10px;padding:8px 12px;font-size:13.5px;font-weight:600;color:var(--teal-t);min-height:40px}
.lv-notes:hover{border-color:var(--teal)}
.nt-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:4px 0 12px}
.nt-tabs{display:flex;gap:6px}
.nt-tab{background:var(--card);border:1.5px solid var(--border);border-radius:999px;padding:5px 14px;font-size:13px;color:var(--ink2);min-height:34px}
.nt-tab[aria-pressed=true]{background:var(--teal);border-color:var(--teal);color:#fff}
.nt-where{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink3)}
.nt-where select{font:inherit;font-size:13px;border:1.5px solid var(--border);border-radius:9px;padding:5px 8px;background:var(--card);color:var(--ink);max-width:220px;min-height:34px}
.nt-compose{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px;margin-bottom:14px}
.nt-kinds{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;font-size:13.5px;color:var(--ink2);margin-bottom:8px}
.nt-kind{display:flex;align-items:center;gap:5px;cursor:pointer}
.nt-kind input{accent-color:var(--teal);width:16px;height:16px}
.nt-to{margin-left:auto;font-size:12px;color:var(--ink3)}
.nt-compose textarea,.nt-editor textarea,.nt-cform textarea{width:100%;font:inherit;font-size:14px;line-height:1.7;color:var(--ink);background:var(--bg);border:1.5px solid var(--border);border-radius:10px;padding:8px 10px;resize:vertical;min-height:64px}
.nt-compose textarea:focus,.nt-editor textarea:focus,.nt-cform textarea:focus{outline:none;border-color:var(--teal)}
textarea:focus-visible,select:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.nt-compose-foot,.nt-cform-foot,.nt-editor-acts{display:flex;align-items:center;gap:10px;margin-top:8px}
.nt-count{font-size:12px;color:var(--ink3);font-family:'JetBrains Mono',ui-monospace,monospace}
.nt-msg{flex:1;font-size:12.5px;color:var(--teal-t);min-width:0}
.nt-msg.bad{color:#8a2f23}
.btn-sm{padding:6px 12px;font-size:13px;min-height:34px}
.nt-login{background:var(--rust-d);border:1px solid rgba(184,92,42,.2);color:var(--rust-t);border-radius:10px;padding:10px 12px;font-size:13.5px;margin-bottom:14px}
.nt-login a{color:var(--rust-t);font-weight:700}
.nt-warn{font-weight:600}
.nt-list{list-style:none;display:flex;flex-direction:column;gap:10px}
.nt-item{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px 14px}
.nt-item.nt-hl{border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-d)}
.nt-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px}
.nt-badge{font-size:11.5px;font-weight:700;border-radius:6px;padding:1px 7px;line-height:1.7}
.nt-badge.k-q{background:var(--rust-d);color:var(--rust-t)}
.nt-badge.k-t{background:var(--teal-d);color:var(--teal-t)}
.nt-badge.k-ok{background:#e3f1e8;color:#1f5f3b}
.nt-badge.k-pin{background:#f4ecd6;color:#6b4e08}
.nt-where-chip{background:none;border:none;font-size:12px;color:var(--teal-t);font-weight:600;padding:2px 4px;text-decoration:underline;text-underline-offset:2px}
.nt-body,.nt-cbody{font-size:14px;color:var(--ink);line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}
.nt-by{display:flex;flex-wrap:wrap;gap:4px;font-size:12px;color:var(--ink3);margin-top:4px}
.nt-name{font-weight:600;color:var(--ink2)}
.nt-edited{font-style:italic}
.nt-acts{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:6px}
.nt-link{background:none;border:none;font-size:13px;color:var(--teal-t);font-weight:600;padding:4px 0;min-height:30px}
.nt-link:hover{text-decoration:underline}
.nt-link[disabled]{color:var(--ink3);cursor:default}
.nt-link.nt-danger{color:#8a2f23}
.nt-link.nt-quiet{color:var(--ink3);font-weight:500}
.nt-link.armed{color:#fff;background:#a33a2c;border-radius:6px;padding:4px 8px}
.nt-done{font-size:12.5px;color:var(--ink3);padding:4px 0}
.nt-flash{font-size:12.5px;color:var(--teal-t);margin-top:4px}
.nt-flash.bad{color:#8a2f23}
.nt-thread{margin-top:8px;padding-left:12px;border-left:3px solid var(--bg3)}
.nt-comments{list-style:none;display:flex;flex-direction:column;gap:8px}
.nt-comment{padding:6px 0;border-bottom:1px dashed var(--border)}
.nt-comment:last-child{border-bottom:none}
.nt-cbody{font-size:13.5px}
.nt-cform{margin-top:8px}
.nt-editor{margin:4px 0}
.nt-state{font-size:13px;color:var(--ink3);padding:10px 2px;list-style:none}
.nt-err{color:#8a2f23}
.nt-more-wrap{display:flex;justify-content:center;margin:12px 0 4px}
.nt-rules{font-size:12px;color:var(--ink3);line-height:1.7;margin-top:14px;border-top:1px solid var(--border);padding-top:10px}

/* ── 航行 ── */
.sail{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);width:min(560px,calc(100% - 24px));display:flex;gap:14px;align-items:center;background:rgba(255,253,248,.96);border:1.5px solid var(--border);border-radius:16px;padding:12px 16px;box-shadow:var(--shadow);z-index:6}
.sail-dial{width:112px;height:112px;flex-shrink:0}
.sail-info{flex:1;min-width:0}
.sail-title{font-family:var(--serif);font-size:15.5px;font-weight:700;line-height:1.35;margin-bottom:4px}
.sail-read{display:grid;grid-template-columns:auto 1fr;gap:1px 10px;font-size:12.5px}
.sail-read dt{color:var(--ink3)}
.sail-read dd{font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;color:var(--ink);text-align:right}
.sail-read dd.bad{color:#a33a2c}
.sail-read dd.warn{color:var(--rust-t)}
.sail-msg{font-size:12.5px;line-height:1.65;color:var(--teal-t);margin:6px 0 8px;min-height:2.6em}
.sail-btns{display:flex;flex-wrap:wrap;gap:8px}
.btn-teal[aria-pressed=true]{background:var(--teal-t);box-shadow:inset 0 0 0 2px rgba(255,255,255,.5)}
.sail-steer{position:absolute;right:16px;bottom:18px;display:none;gap:10px;z-index:6}
html.sailing .sail-steer{display:flex}
html.sailing .sail{right:auto}
.steer{width:62px;height:62px;border-radius:50%;border:2px solid var(--border);background:rgba(255,253,248,.95);font-size:26px;line-height:1;color:var(--ink2);box-shadow:var(--shadow);touch-action:none;-webkit-user-select:none;user-select:none}
.steer:active{background:var(--teal-d);border-color:var(--teal)}
@media(min-width:761px){html.sailing .sail{left:calc(50% - 40px)}}
.map-note{font-size:12.5px;color:var(--ink3);margin:-2px 0 8px}
.map-acts button[disabled]{opacity:.45;cursor:not-allowed}
/* ── 关卡里的表格、排名 ── */
.lv-table-wrap{overflow-x:auto;margin:6px 0 10px;max-width:100%}
/* 面板里的小表格：站点通用的「手机上表格至少 560px 宽」不适用（面板本身才 350px 宽） */
.lv-table-wrap .mi-table-scroll{margin:0}
.lv-table-wrap .mi-table-scroll table{min-width:0}
.lv-table.l30-tab{font-size:11.5px;min-width:0}
.lv-table.l30-tab th,.lv-table.l30-tab td{white-space:normal;padding:4px 4px;vertical-align:top}
/* 面板只有 350 左右宽：表头可以折行，数字格不折；左右放不下时两边出一道阴影，提示能横着拖 */
.lv-table{border-collapse:collapse;font-size:12px;width:100%;min-width:0}
.lv-table th,.lv-table td{border-bottom:1px solid var(--border);padding:4px 5px;text-align:right;white-space:nowrap}
.lv-table th{white-space:normal;line-height:1.35;vertical-align:bottom}
.lv-table tbody th{vertical-align:middle}
.lv-table-wrap{background:linear-gradient(90deg,var(--card) 30%,rgba(255,253,248,0)) left/24px 100% no-repeat local,linear-gradient(270deg,var(--card) 30%,rgba(255,253,248,0)) right/24px 100% no-repeat local,radial-gradient(farthest-side at 0 50%,rgba(60,45,30,.22),transparent) left/10px 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,rgba(60,45,30,.22),transparent) right/10px 100% no-repeat scroll}
.lv-table thead th{color:var(--ink3);font-weight:600;background:var(--bg2)}
.lv-table tbody th{text-align:left;color:var(--ink);font-weight:600}
.lv-table td{font-family:'JetBrains Mono',ui-monospace,monospace}
.lv-note{font-size:12.5px;color:var(--ink3);margin:-2px 0 6px}
.lv-cap{font-size:12px;line-height:1.5;color:var(--ink3);margin:0 0 8px}
.lv-rank{list-style:none;display:flex;flex-direction:column;gap:5px;margin:8px 0 10px}
.lv-rank li{display:grid;grid-template-columns:8.5em 1fr 3.4em;gap:8px;align-items:center;font-size:13px;color:var(--ink2)}
.lv-rank li i{display:block;height:9px;border-radius:5px;background:var(--bg3)}
.lv-rank li b{font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;text-align:right}
.lv-rank li.win{color:var(--teal-t);font-weight:700}
.lv-rank li.win i{background:var(--teal)}

@media(max-width:760px){
  nav{padding:0 14px}
  .hud-title h1{font-size:15px}
  .hud-btn{padding:7px 8px;font-size:12.5px;min-width:38px}
  .hud-btns{gap:6px}
  .hud-btn span+span,.hud-btn .hud-ico+span{display:none}
  .hc-long{display:none}
  .hud-title{max-width:calc(100vw - 208px)}
  .hud-next{font-size:11px;padding:2px 8px;min-height:36px}
  .toast{top:118px;font-size:13px}
  .bk-grid{grid-template-columns:1fr}
  .tp-tiles{grid-template-columns:1fr 1fr}
  .tp-row-title{font-size:14px}
  .cert{padding:18px 14px}
  .cert-title{font-size:21px}
  .cert-name{font-size:20px}
  .lv{top:auto;left:0;right:0;bottom:0;width:auto;max-height:54%;border-radius:18px 18px 0 0;border-bottom:none}
  .lv-fold{display:block}
  .lv.folded .lv-body,.lv.folded .lv-steps,.lv.folded .lv-foot{display:none}
  .nt-to{margin-left:0;flex-basis:100%}
  .lv-foot{padding:6px 14px 8px}
  .sail{top:66px;bottom:auto;left:8px;right:8px;transform:none;width:auto;padding:8px 10px;gap:10px}
  html.sailing .sail{left:8px;right:8px}
  .sail-dial{width:84px;height:84px}
  .sail-title{font-size:14px}
  .sail-read{font-size:11.5px}
  .sail-msg{font-size:11.5px;margin:4px 0 6px;min-height:0}
  .sail-steer{bottom:22px;right:14px}
  html.sailing .hud-top .hud-title{display:none}
  html.sailing .hud-btns{margin-left:auto}
  .lv-notes{min-height:36px;padding:6px 10px;font-size:13px}
  .lv.folded .lv-fold span{display:inline-block;transform:rotate(180deg)}
  .help-grid{grid-template-columns:1fr}
  .sheet{padding:0;align-items:flex-end}
  .sheet-card{border-radius:18px 18px 0 0;max-height:88%}
}
@media(prefers-reduced-motion:reduce){.near{animation:none}.ld-mark{animation-duration:2.4s}}

/* ── 载具：右下角按钮、骑行面板、挑战赛、「载具」面板 ── */
.coin-ico{display:inline-block;width:15px;height:15px;border-radius:50%;background:radial-gradient(circle at 38% 35%,#ffe89a 0 22%,#f2c23b 23% 62%,#c8901c 63%);box-shadow:inset 0 0 0 1.5px #a8741a;flex:none;vertical-align:-2px}
.ride-fab{position:absolute;right:16px;bottom:18px;z-index:5;display:flex;align-items:center;gap:7px;background:rgba(255,253,248,.95);border:1.5px solid var(--border);border-radius:999px;padding:7px 13px 7px 11px;font:inherit;font-size:13px;font-weight:700;color:var(--ink2);box-shadow:var(--shadow);min-height:44px;cursor:pointer}
.ride-fab:hover{border-color:var(--teal);color:var(--teal-t)}
.ride-fab svg{color:var(--teal-t)}
.rf-coins{display:inline-flex;align-items:center;gap:4px;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:12.5px;color:#7a5410;background:#fff4d6;border-radius:999px;padding:1px 8px 1px 5px}
html.in-level .ride-fab,html.diving .ride-fab,html.railing .ride-fab,html.sailing .ride-fab,html.riding .ride-fab,html.ballooning .ride-fab{display:none}
.ride{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);width:min(470px,calc(100% - 24px));background:rgba(255,253,248,.96);border:1.5px solid var(--border);border-radius:16px;padding:10px 14px;box-shadow:var(--shadow);z-index:6}
.ride-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.ride-coins{display:inline-flex;align-items:center;gap:5px;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:17px;color:#7a5410;font-weight:700}
.ride-coins .coin-ico{width:19px;height:19px}
.ride-coins.bump{animation:coinBump .35s ease-out}
@keyframes coinBump{0%{transform:scale(1)}40%{transform:scale(1.25)}100%{transform:scale(1)}}
.ride-spd{font-family:'JetBrains Mono',ui-monospace,monospace;color:var(--ink);font-size:13px}
.ride-spd b{font-size:20px}
.ride-spd small{color:var(--ink3);font-size:11px}
.ride-nitro{display:flex;align-items:center;gap:7px;flex:1;min-width:120px}
.ride-nitro-l{font-size:11.5px;font-weight:700;color:var(--ink3);white-space:nowrap}
.ride-bar{flex:1;height:9px;border-radius:999px;background:var(--bg3);overflow:hidden}
.ride-bar i{display:block;height:100%;width:60%;background:linear-gradient(90deg,#1a8fb0,#5ad0e6);border-radius:999px}
.ride-race{display:flex;align-items:baseline;gap:10px;margin-top:6px;padding-top:6px;border-top:1px solid var(--border)}
.ride-race-n{font-size:12.5px;font-weight:700;color:var(--ink2)}
.ride-time{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:22px;color:var(--ink)}
.ride-gate{font-size:12.5px;color:var(--teal-t);font-weight:700;margin-left:auto}
.ride-msg{font-size:12.5px;line-height:1.6;color:var(--teal-t);margin:5px 0 7px;min-height:1.6em}
.ride-btns{display:flex;gap:8px;flex-wrap:wrap}
.ride-boost{position:absolute;right:18px;bottom:22px;z-index:6;width:78px;height:78px;border-radius:50%;border:2px solid #1a8fb0;background:rgba(235,249,252,.95);color:#0f5f76;display:none;flex-direction:column;align-items:center;justify-content:center;gap:0;font-size:24px;line-height:1;box-shadow:var(--shadow);touch-action:none;-webkit-user-select:none;user-select:none}
.ride-boost small{font-size:11px;font-weight:700}
.ride-boost.on{background:#1a8fb0;color:#fff}
html.touch.riding .ride-boost{display:flex}
.ride-count{position:absolute;left:50%;top:38%;transform:translate(-50%,-50%);z-index:8;font-family:var(--serif);font-size:88px;font-weight:700;color:#fffdf8;text-shadow:0 4px 18px rgba(26,22,18,.45),0 0 2px rgba(26,22,18,.8);pointer-events:none}
.ride-count.pulse{animation:cnt .6s ease-out}
@keyframes cnt{0%{transform:translate(-50%,-50%) scale(1.6);opacity:.2}100%{transform:translate(-50%,-50%) scale(1);opacity:1}}
.ride-pop{position:absolute;left:50%;top:118px;transform:translateX(-50%);z-index:8;display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}
.rp{background:rgba(26,22,18,.82);color:#ffe89a;font-weight:700;font-size:14px;padding:4px 12px;border-radius:999px;animation:rpUp 1.4s ease-out forwards;white-space:nowrap}
.rp.big{font-size:16px;color:#fff4c2;background:rgba(122,84,16,.9)}
@keyframes rpUp{0%{transform:translateY(12px);opacity:0}15%{transform:translateY(0);opacity:1}75%{opacity:1}100%{transform:translateY(-26px);opacity:0}}
.ride-result{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:9;width:min(420px,calc(100% - 24px));background:rgba(255,253,248,.98);border:1.5px solid var(--border);border-radius:16px;padding:16px 18px;box-shadow:var(--shadow)}
.rr-title{display:flex;align-items:center;gap:9px;font-family:var(--serif);font-size:18px;font-weight:700;line-height:1.4;margin-bottom:8px}
.rr-dl{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;font-size:13px}
.rr-dl dt{color:var(--ink3)}
.rr-dl dd{text-align:right;font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;color:var(--ink)}
.rr-dl dd.good{color:var(--teal-t)}
.rr-note{font-size:12.5px;line-height:1.7;color:var(--ink2);margin-top:8px;background:var(--bg2);border-radius:8px;padding:7px 10px}
.rr-pb,.rr-bonus{font-size:13px;font-weight:700;color:#7a5410;margin-top:6px}
.rr-next{font-size:12.5px;color:var(--ink3);margin-top:6px}
.rr-acts{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.medal{display:inline-block;width:20px;height:20px;border-radius:50%;flex:none;box-shadow:inset 0 0 0 2px rgba(0,0,0,.18);vertical-align:-4px}
.medal.m3{background:radial-gradient(circle at 35% 35%,#fff1a8,#e2b023 60%,#b3830f)}
.medal.m2{background:radial-gradient(circle at 35% 35%,#ffffff,#c4c8cc 60%,#8d9399)}
.medal.m1{background:radial-gradient(circle at 35% 35%,#ffd9b0,#c77d3e 60%,#8f5220)}
.rd-wallet{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:#fff8e3;border:1px solid #ecd9a6;border-radius:12px;padding:10px 14px;margin-bottom:6px}
.rd-coins{display:inline-flex;align-items:center;gap:7px;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:22px;font-weight:700;color:#7a5410}
.rd-coins .coin-ico{width:22px;height:22px}
.rd-sub{font-size:12.5px;color:var(--ink2)}
.rd-h{font-family:var(--serif);font-size:15px;font-weight:700;margin:14px 0 7px;color:var(--ink)}
.rd-veh{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}
.rd-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.rd-card.on{border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-d)}
.rd-card-h{display:flex;align-items:center;gap:7px;width:100%}
.rd-card-h b{font-size:14px}
.rd-now{margin-left:auto;font-size:11px;font-weight:700;color:var(--teal-t);background:var(--teal-d);border-radius:6px;padding:0 6px}
.rd-ico{width:28px;height:28px;border-radius:8px;background:var(--teal-d);color:var(--teal-t);flex:none;display:flex;align-items:center;justify-content:center}
.rd-desc{font-size:12.5px;line-height:1.65;color:var(--ink3)}
.rd-lock{font-size:12px;color:var(--rust-t)}
.rd-card .btn:disabled,.rd-race .btn:disabled{background:var(--bg3);color:var(--ink3);border-color:var(--border);cursor:not-allowed}
.rd-tip{font-size:12.5px;color:var(--ink3);line-height:1.7;margin-top:6px}
.rd-races{display:flex;flex-direction:column;gap:8px}
.rd-race{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:9px 12px}
.rd-race-info{flex:1;min-width:0}
.rd-race-t{display:flex;align-items:center;gap:7px;font-size:14px}
.rd-best{font-size:12px;color:var(--teal-t);font-weight:600;margin-top:2px}
.rd-shop{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px}
.rd-item{display:flex;flex-direction:column;align-items:center;gap:4px;background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:9px 6px;font:inherit;color:var(--ink);cursor:pointer;min-height:44px}
.rd-item:hover{border-color:var(--teal)}
.rd-item.on{border-color:var(--teal);background:var(--teal-d)}
.rd-item.poor .rd-item-p{color:var(--ink3)}
.rd-sw{width:34px;height:22px;border-radius:7px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}
.rd-rainbow{background:linear-gradient(90deg,#e84a5f,#f2a33a,#e9d84a,#5bbf6a,#3a8fd9,#8a5bd0)}
.rd-sw-hat{background:var(--bg2);position:relative}
.rd-sw-hat.rd-none::after{content:'—';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink3);font-size:13px}
.rd-sw-hat.rd-cap{background:linear-gradient(#fffdf8 0 55%,#2b3f63 55%)}
.rd-sw-hat.rd-crown{background:linear-gradient(#f9f7f3 0 30%,#e5b52e 30%)}
.rd-item-n{font-size:12.5px;font-weight:600}
.rd-item-p{font-size:11.5px;color:#7a5410;font-weight:700}
.rd-item.on .rd-item-p{color:var(--teal-t)}
.rd-snd{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink2);cursor:pointer}
.rd-snd input{accent-color:var(--teal);width:17px;height:17px}
@media(max-width:760px){
  .ride-fab{right:14px;bottom:22px;padding:6px 11px 6px 9px}
  .ride{top:66px;bottom:auto;left:8px;right:8px;transform:none;width:auto;padding:8px 10px}
  .ride-msg{font-size:11.5px;margin:3px 0 5px;min-height:0}
  html.riding .hud-top .hud-title{display:none}
  html.riding .hud-btns{margin-left:auto}
  .ride-pop{top:200px}
  .rd-veh{grid-template-columns:1fr}
  .ride-count{font-size:72px}
}
@media(prefers-reduced-motion:reduce){.ride-coins.bump,.ride-count.pulse,.rp{animation:none}.rp{opacity:1}}

/* ── 热气球 ── */
.bl{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);width:min(500px,calc(100% - 24px));display:flex;gap:12px;align-items:center;background:rgba(255,253,248,.96);border:1.5px solid var(--border);border-radius:16px;padding:10px 14px;box-shadow:var(--shadow);z-index:6}
.bl-prof{width:92px;height:120px;flex:none}
.bl-info{flex:1;min-width:0}
.bl-title{font-family:var(--serif);font-size:15px;font-weight:700;line-height:1.35;margin-bottom:3px}
.bl-read{display:grid;grid-template-columns:auto 1fr;gap:1px 10px;font-size:12.5px;align-items:center}
.bl-read dt{color:var(--ink3)}
.bl-read dd{font-family:'JetBrains Mono',ui-monospace,monospace;font-weight:600;color:var(--ink);text-align:right}
.bl-bar{display:inline-block;width:100%;max-width:150px;height:9px;border-radius:999px;background:var(--bg3);overflow:hidden;vertical-align:middle}
.bl-bar i{display:block;height:100%;width:40%;background:#c9b48a;border-radius:999px;transition:width .12s}
.bl-bar i.up{background:linear-gradient(90deg,#e8a33a,#d0632c)}
.bl-bar i.down{background:linear-gradient(90deg,#5a9ec0,#3a548c)}
.bl-msg{font-size:12.5px;line-height:1.6;color:var(--teal-t);margin:5px 0 7px;min-height:1.6em}
.bl-pad{position:absolute;right:16px;bottom:18px;z-index:6;display:none;flex-direction:column;gap:10px}
html.ballooning .bl-pad{display:flex}
.bl-btn{width:74px;height:66px;border-radius:16px;border:2px solid var(--border);background:rgba(255,253,248,.95);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:18px;line-height:1.1;color:var(--ink2);box-shadow:var(--shadow);touch-action:none;-webkit-user-select:none;user-select:none}
.bl-btn small{font-size:11.5px;font-weight:700}
.bl-btn.up{color:#984c23;border-color:#e2b08a}
.bl-btn.down{color:#2b3f63;border-color:#a9bcd6}
.bl-btn.on.up{background:#d0632c;color:#fff}
.bl-btn.on.down{background:#3a548c;color:#fff}
.ride-menu{margin-left:auto}
@media(min-width:761px){html.ballooning .bl{left:calc(50% - 30px)}}
@media(max-width:760px){
  .bl{top:66px;bottom:auto;left:8px;right:8px;transform:none;width:auto;padding:8px 10px;gap:8px}
  .bl-prof{width:70px;height:92px}
  .bl-read{font-size:11.5px}
  .bl-msg{font-size:11.5px;margin:3px 0 5px;min-height:0}
  html.ballooning .hud-top .hud-title{display:none}
  html.ballooning .hud-btns{margin-left:auto}
  .bl-pad{bottom:22px;right:14px}
}

/* ── r63：背包分页、装备、跳跃按钮、俯瞰、手机减负 ── */
.hc-total{display:inline;font-weight:700;color:var(--rust-t)}
.rd-how{flex:1 1 220px;font-size:12.5px;color:var(--ink2)}
.rd-how summary{cursor:pointer;font-weight:700;color:#7a5410;min-height:28px;display:flex;align-items:center}
.rd-how p{line-height:1.75;margin-top:4px}
.rd-tabs{display:flex;gap:4px;margin:10px 0 12px;border-bottom:1.5px solid var(--border);overflow-x:auto;scrollbar-width:none}
.rd-tabs::-webkit-scrollbar{display:none}
.rd-tab{flex:none;background:none;border:none;border-bottom:3px solid transparent;margin-bottom:-1.5px;padding:8px 14px;font:inherit;font-size:14px;font-weight:600;color:var(--ink3);min-height:40px;cursor:pointer}
.rd-tab[aria-selected=true]{color:var(--teal-t);border-bottom-color:var(--teal)}
.rd-tab:hover{color:var(--ink)}
.rd-gear{display:flex;flex-direction:column;gap:8px}
.rd-gear-row.on{border-color:var(--teal);box-shadow:0 0 0 2px var(--teal-d)}
.rd-pips{display:inline-flex;gap:3px;margin-left:6px}
.rd-pips i{width:12px;height:6px;border-radius:3px;background:var(--bg3)}
.rd-pips i.on{background:var(--teal)}
.jump-btn{position:absolute;right:18px;bottom:24px;z-index:5;width:70px;height:70px;border-radius:50%;border:2px solid var(--border);background:rgba(255,253,248,.95);color:var(--ink2);display:none;flex-direction:column;align-items:center;justify-content:center;font-size:22px;line-height:1;box-shadow:var(--shadow);touch-action:none;-webkit-user-select:none;user-select:none}
.jump-btn small{font-size:11px;font-weight:700}
.jump-btn.on{background:var(--teal);border-color:var(--teal);color:#fff}
html.touch .jump-btn{display:flex}
html.touch .ride-fab{bottom:106px}
html.in-level .jump-btn,html.diving .jump-btn,html.diving .joy,html.railing .jump-btn,html.railing .joy,html.wheeling .jump-btn,html.wheeling .joy,html.sailing .jump-btn,html.riding .jump-btn,html.ballooning .jump-btn,html.overview .jump-btn{display:none}
html.overview .ride-fab,html.overview .near,html.overview .joy{display:none}
.map-ov{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-2px 0 10px}
.map-ov-tip{font-size:12px;color:var(--ink3);flex:1 1 200px}
.ov-exit{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:6;background:var(--teal);color:#fff;border:none;border-radius:999px;padding:10px 22px;font:inherit;font-size:14px;font-weight:700;box-shadow:var(--shadow);min-height:44px;cursor:pointer}
@media(max-width:760px){
  .hc-ch,.hc-sep{display:none!important}
  .hc-total{display:inline;font-weight:700;color:var(--rust-t)}
  .ride-fab{padding:6px 10px 6px 9px;min-height:44px}
  html.riding .toast,html.ballooning .toast,html.sailing .toast{top:auto;bottom:152px}
  .rd-tab{padding:8px 11px;font-size:13.5px}
  .rd-veh{grid-template-columns:1fr}
  .rd-shop{grid-template-columns:repeat(3,1fr);gap:6px}
  .rd-item{padding:8px 4px}
}
/* 第 17 关：时间曲线 + 相图并排；窄屏上下排 */
.l17-charts{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start}
.l17-charts svg.lv-chart{flex:1 1 100%;min-width:0}
.l17-charts svg.l17-phase{flex:0 1 60%;max-width:220px;margin:0 auto}
@media (max-width:420px),(orientation:landscape) and (max-height:500px){.l17-charts{flex-wrap:wrap}.l17-charts svg.lv-chart{flex-basis:100%}.l17-charts svg.l17-phase{flex-basis:60%;max-width:190px;margin:0 auto}}

/* 横过来的手机（高度不到 500）：关卡面板顶到上边、表头压扁；走近卡片放到摇杆和背包按钮之间，不挡人 */
@media (orientation:landscape) and (max-height:500px){
  .lv{top:8px;bottom:8px;width:min(392px,50%)}
  .lv-head{padding:8px 10px 6px 14px}
  .lv-kick{display:none}
  .lv-title{font-size:15px}
  .lv-steps{padding:6px 14px 0}
  .lv-body{padding:8px 14px 12px}
  .lv-foot{padding:5px 14px 7px}
  .lv-notes{min-height:34px;padding:5px 10px;font-size:12.5px}
  html.touch .near{bottom:10px;left:150px;right:150px;width:auto;max-width:440px;margin:0 auto;padding:9px 14px;animation:none;transform:none}
  .near-desc{display:none}
  .hud-next{display:none}
  .toast{top:64px}
}
@media(max-width:400px){.rd-tabs{gap:2px}.rd-tab{flex:1 1 auto;padding:8px 4px;font-size:13.5px}}

/* ── 环岛单轨：选站、车上的小条 ── */
.rail-list{list-style:none;display:flex;flex-direction:column;gap:8px;margin:6px 0 10px}
.rail-go{width:100%;text-align:left;background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:10px 14px;display:flex;flex-direction:column;gap:2px;font:inherit;cursor:pointer;min-height:48px}
.rail-go b{font-size:15px;color:var(--ink)}
.rail-go span{font-size:12.5px;color:var(--ink3);line-height:1.6}
.rail-go:hover,.rail-go:focus-visible{border-color:var(--teal);outline:none}
.rail-hud{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);width:min(380px,calc(100% - 24px));background:rgba(255,253,248,.95);border:1.5px solid var(--border);border-radius:14px;padding:10px 14px;box-shadow:var(--shadow);z-index:6;display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:center}
.rail-hud[hidden]{display:none}
.rail-hud-row{display:flex;justify-content:space-between;gap:10px;font-size:13px;color:var(--ink2);grid-column:1}
.rail-hud-row b{color:var(--teal-t)}
.rail-hud-track{grid-column:1;height:6px;border-radius:3px;background:var(--bg3);overflow:hidden}
.rail-hud-track i{display:block;height:100%;width:0;background:var(--teal);border-radius:3px}
#railSkip{grid-column:2;grid-row:1 / span 2}
/* 第 25 / 26 / 28 关的按钮格子、第 25 关的 Kruskal 步骤表 */
.l25-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:10px 0 8px}
.l25-grid .btn{width:100%;justify-content:center;padding-left:6px;padding-right:6px}
.l25-grid .btn[aria-pressed=true]{background:var(--teal-d);border-color:var(--teal);color:var(--teal-t)}
.l25-steps{margin:6px 0 10px;padding-left:2.1em;font-size:12.5px;line-height:1.65}
.l25-steps .k-take{color:var(--teal);font-weight:600}
.l25-steps .k-skip{color:#b0402a}
.l25-steps .k-todo{color:var(--ink4,var(--ink3))}

/* r70：关卡里顶栏的「下一站」没用，藏起来；手机上的背包按钮留着「背包」两个字 */
html.in-level .hud-next{display:none}
@media(max-width:760px){.ride-fab .rf-lab{font-size:12px}}
/* 手机、平板上地图里的「传送」按钮、HUD 小按钮放大到手指按得准 */
@media (pointer:coarse){
  .hud-btn{min-height:44px}
  .map-acts a,.map-acts button{min-height:42px}
  .lv-notes{min-height:40px}
}
/* 窄屏：「下一站」那行字可以折成两行，别只剩「➤ Bask…」 */
@media(max-width:420px){#hudNextTxt{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.3}}
/* r87：窄屏上左上角那张卡片直接占满按钮左边的空位（以前按内容收缩，「下一站」被挤成一列两三个字，
   距离和「书中人物岛 0/11」还会伸出卡片外） */
@media(max-width:420px){
  html:not(.in-level) .hud-title{width:calc(100vw - 208px)}
  .hud-chap{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .hud-next{flex-wrap:wrap;row-gap:0;border-radius:14px}
  #hudNextTxt{flex:1 1 0}
  #hudNextDist{flex-basis:100%;padding-left:17px;line-height:1.3}   /* 距离挪到第二行，字才有地方 */
}
.map-why{font-size:11.5px;color:var(--rust-t);margin-top:2px;line-height:1.5}
.rail-go:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.btn-voice{width:44px;height:44px;border-radius:50%;border:1.5px solid var(--border);background:var(--card);font-size:17px;line-height:1;flex:none}
.btn-voice:hover,.btn-voice.on{border-color:var(--teal);background:var(--teal-d)}
.vo-cap{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);width:max-content;max-width:min(560px,calc(100% - 24px));background:rgba(28,32,36,.82);color:#fff;border-radius:10px;padding:7px 14px;font-size:14px;line-height:1.65;z-index:6;pointer-events:none;text-align:center}
.vo-cap[hidden]{display:none}
@media(max-width:760px){.vo-cap{font-size:13px;line-height:1.5;padding:6px 12px}}   /* 手机：英文字幕比中文长一倍，字小一号、行距收一点，少挡几行 */
html.in-level .vo-cap{bottom:auto!important;top:128px;height:auto}   /* 关卡里：挂在上面（别和走近卡片时留下的 bottom 一起把条子撑成一大块） */
@media(min-width:761px){html.in-level .vo-cap{top:auto;bottom:22px!important;left:calc((100% - 416px)/2);max-width:calc(100% - 440px)}}   /* 电脑上：关卡面板在右边，字幕放在左边画面的底下，不挡关卡的场地名 */
.vo-note{font-size:12.5px;color:var(--ink3);margin-top:-4px}

/* 帆船简单模式：只留船速和航程 */
.sail.simple .sx,.sail.simple #sailOff,.sail.simple #sailAw{display:none}
.sail-mode{font-size:12px}
.nt-coin-rule{font-size:12px;color:var(--ink3);margin:6px 0 0}
.vo-who{border:none;padding:0;margin:4px 0 6px;display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center}
.vo-who legend{font-size:13px;color:var(--ink2);padding:0;margin-right:8px;float:left}
.vo-who label{display:inline-flex;align-items:center;gap:5px;font-size:13.5px;min-height:32px}
/* 划皮划艇：没有氮气 */
html.kayaking .ride-nitro,html.kayaking .ride-boost{display:none!important}
/* 顶栏的语音按钮：男声 / 女声 / 关，一点就换 */
.vo-pick-wrap{position:relative;display:inline-flex}
.vo-pick{white-space:nowrap}
.vo-pick-l{font-weight:600;font-size:12.5px;margin-left:2px;white-space:nowrap}
.vo-pick .vo-x{display:none}
.vo-pick.off .vo-wave{display:none}
.vo-pick.off .vo-x{display:inline}
.vo-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:20;display:flex;gap:4px;padding:5px;background:rgba(255,253,248,.98);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}
.vo-pop[hidden]{display:none}
.vo-pop button{border:1px solid var(--border);background:var(--card);border-radius:9px;padding:8px 14px;font-size:13.5px;min-height:40px;white-space:nowrap;color:var(--ink2)}
.vo-pop button[aria-pressed=true]{background:var(--teal);border-color:var(--teal);color:#fff}
.vo-pick-s{display:none;font-weight:600;font-size:12.5px;margin-left:2px}
@media(max-width:480px){.vo-pick .vo-pick-l{display:none}.vo-pick .vo-pick-s{display:none}}   /* r107：手机上只留喇叭图标（「男」「M」看不懂，还挤窄了「下一站」） */
/* 穿过时空门：屏幕一白 */
.isle-flash{position:fixed;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:50}
.isle-flash.go{animation:isleFlash .7s ease-out}
@keyframes isleFlash{0%{opacity:0}25%{opacity:.9}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.isle-flash.go{animation:none}}
/* 摩天轮上：「下来」按钮 */
.wheel-off{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:7;min-height:44px;padding:10px 22px}
.wheel-off[hidden]{display:none}
html.wheeling .ride-fab{display:none}
/* 竞技场挑战：快问快答 */
.ar-body{min-height:220px}
.ar-head{display:flex;justify-content:space-between;gap:10px;font-size:13px;color:var(--ink3);margin-bottom:6px}
.ar-head .ar-left{font-weight:700;color:var(--rust-t)}
.ar-bar{height:6px;background:var(--bg3);border-radius:3px;overflow:hidden;margin-bottom:12px}
.ar-bar i{display:block;height:100%;background:var(--teal);transition:width .25s linear}
.ar-q{font-size:16px;font-weight:600;line-height:1.6;margin:0 0 12px;outline:none}
.ar-opts{display:grid;gap:8px}
.ar-opt{font:inherit;color:var(--ink);display:flex;align-items:flex-start;gap:10px;text-align:left;border:1.5px solid var(--border);background:var(--card);border-radius:10px;padding:10px 12px;font-size:14px;line-height:1.55;min-height:44px}
.ar-opt kbd{flex:none;display:inline-block;min-width:22px;text-align:center;border:1px solid var(--border);border-radius:5px;font-size:12px;padding:1px 4px;background:var(--bg3)}
.ar-opt:hover:not([disabled]){border-color:var(--teal)}
.ar-opt.ok{border-color:#3a8a5a;background:#e7f4ea}
.ar-opt.bad{border-color:#a33a2c;background:#fbe9e5}
.ar-opt[disabled]{cursor:default;color:var(--ink2)}
.ar-fb{font-size:13.5px;color:var(--ink2);line-height:1.65;min-height:1.6em;margin:10px 0 8px}
.ar-next{margin-top:2px}
.ar-result{font-size:18px;font-weight:700;margin:8px 0 6px;outline:none}
.ar-sub{font-size:13.5px;color:var(--ink2);line-height:1.7}
.ar-end{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
html.wheeling .vo-cap{bottom:84px!important}   /* 摩天轮上：字幕让开「下来」按钮 */

/* 时空门清单：去过的岛多一行进度 */
.rail-go span.hub-prog{color:var(--teal);font-weight:600}

/* 笔记本：岛上收集 */
.bk-col{margin-top:18px;border-top:1px solid var(--border);padding-top:6px}
.bk-colgrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.bk-cast-top{display:flex;gap:10px;align-items:center}
.bk-av{width:38px;height:38px;font-size:16px}
.bk-castc.locked .bk-av{background:var(--bg3);color:var(--ink3)}
.bk-cast-who{min-width:0}
.bk-cast-who .bk-kick{letter-spacing:.5px}
.bk-cast-say{margin:0;font-size:13.5px;line-height:1.6;color:var(--ink);font-style:italic}
.bk-cast-q{margin:0;font-size:12.5px;line-height:1.5;color:var(--ink3)}
.bk-cast-q.st-ready{color:#24613d;font-weight:600}
.bk-cast-q.st-done{color:var(--teal-t)}
.bk-cast-prog{margin:-2px 0 10px}
.bk-cast-lines{font-size:12.5px;color:var(--ink3)}
.bk-cast-lines summary{cursor:pointer;padding:2px 0;color:var(--teal-t);font-weight:600}
.bk-cast-lines summary:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:4px}
.bk-cast-lines ul{margin:6px 0 2px;padding-left:18px;display:grid;gap:4px}
.bk-cast-lines li{color:var(--ink);font-style:italic;line-height:1.55}
.ws-new{margin-left:6px;padding:0 6px;border-radius:8px;background:#fde9b8;color:#6b4a00;font-style:normal;font-size:11px;font-weight:700}
.bk-colp{font-size:12.5px;color:var(--ink2);line-height:1.6;margin:0}
.bk-colc.locked .bk-colp{color:var(--ink3)}

/* 地图上的搜索 */
.map-find{margin:4px 0 14px;display:flex;flex-direction:column;gap:6px}
.map-find-l{font-size:13px;font-weight:700;color:var(--ink2)}
#mapSearch{font:inherit;font-size:16px;padding:9px 12px;border:1.5px solid var(--border);border-radius:10px;background:var(--card);color:var(--ink);width:100%;min-height:44px}
#mapSearch:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-color:var(--teal)}
.map-find-n{font-size:12.5px;color:var(--ink3);margin:0}
.map-find-n:empty{display:none}

/* ── r83 移动端 ── */
/* 顶栏上的语音选项打开时，整层顶栏盖过车、船、气球的面板 */
html.vo-open .hud-top{z-index:21}
.hud-top:has(.vo-pop:not([hidden])){z-index:21}
/* 笔记本顶上两个跳转：三十张卡片很长，手机上一下子翻到收集和证书 */
.bk-jump{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 6px}
.bk-jump a{display:inline-flex;align-items:center;min-height:36px;padding:4px 12px;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--teal-t);font-size:13px;font-weight:600;text-decoration:none}
.bk-jump a::after{content:' ↓';margin-left:3px}
.bk-col,.bk-cert{scroll-margin-top:12px}
/* 手机的「说明」：先讲摇杆、再讲键盘 */
html.touch .help-grid .help-col:last-child{order:-1}
/* 小按钮的可点范围放大（样子不变） */
.nt-link{min-height:40px;padding:6px 4px}
.tog input{width:22px;height:22px;flex:none}
@media (pointer:coarse){
  nav .i18n-toggle,nav .mobile-menu-btn,nav .nav-cta{position:relative}
  nav .i18n-toggle::after,nav .mobile-menu-btn::after,nav .nav-cta::after{content:'';position:absolute;inset:-9px -5px}
}
@media(max-width:760px){
  /* 在时空门岛上：顶栏那一格显示这座岛的收集进度（「书院岛 12/68」），不显示全部关卡数 */
  .hud-chap.is-venue .hc-total,.hud-chap.is-venue .hc-sep{display:none!important}
  .hud-chap.is-venue .hc-ch{display:inline!important;font-weight:700;color:var(--teal-t)}
  .hud-chap.is-venue .hc-long{display:inline!important}
  /* 出海面板：两个次要按钮并排，面板矮一截，多露出一点海面 */
  .sail-btns,.sail .sail-row{flex-direction:row;flex-wrap:wrap}
}
/* 横着拿的手机：关卡面板占右半边，顶栏按钮挪到面板左边（题目牌收起），互不遮挡 */
@media (orientation:landscape) and (max-height:500px){
  .lv{left:auto;right:8px;max-height:none;border-radius:16px;border-bottom:1.5px solid var(--border)}   /* 宽不到 760 的横屏手机：竖屏那套「贴底、左右撑满」要撤掉，面板靠右 */
  html.in-level .hud-top{right:calc(min(392px,50%) + 20px)}
  html.in-level .hud-top .hud-title{display:none}
  html.in-level .hud-btns{margin-left:auto}
}
@media(max-width:760px){
  .sail-btns{gap:6px}
  .sail-btns .btn{font-size:12.5px;padding:6px 10px;min-height:36px}
}
/* 平板宽度（761–1024）：按钮一个不少地放下，题目牌让出位置（长的「下一站」用省略号） */
.hud-title{min-width:0}
.hud-btns{flex:none}
.hud-next{max-width:100%;min-width:0}
@media (pointer:coarse){.hud-next{min-height:36px}}
/* 背包「设置」里的开关也放大 */
.rd-snd input[type=checkbox]{width:22px;height:22px;flex:none;accent-color:var(--teal)}
/* 横着拿：关卡面板也能收起（只留题目那一条），看全关卡场景 */
@media (orientation:landscape) and (max-height:500px){
  .lv-fold{display:block}
  .lv.folded{bottom:auto}
  .lv.folded .lv-body,.lv.folded .lv-steps,.lv.folded .lv-foot{display:none}
  .lv.folded .lv-fold span{display:inline-block;transform:rotate(180deg)}
}
/* 横着拿的小手机（宽不到 760、高不到 500）：车、船、气球的面板别再照竖屏那样横贯顶部挡住人，
   改成贴底、夹在左边摇杆和右边按钮之间，内容也压紧一点 */
@media (orientation:landscape) and (max-height:500px){
  .ride,.bl,.sail,html.sailing .sail{top:auto;bottom:8px;left:150px;right:118px;transform:none;width:auto;max-width:480px;margin:0 auto;padding:7px 10px}
  .sail,html.sailing .sail{right:172px}
  .sail-dial{width:60px;height:60px}
  .sail-read{display:none}
  .bl-prof{width:56px;height:74px}
  .ride-msg,.sail-msg,.bl-msg{font-size:11px;margin:2px 0 4px;min-height:0;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
  .bl-read{font-size:11px}
  .sail-title,.bl-title{font-size:13.5px;margin-bottom:1px}
  .sail-btns .btn,.bl .btn,.ride .btn{font-size:12px;padding:5px 9px;min-height:34px}
  html.riding .toast,html.ballooning .toast,html.sailing .toast{top:64px;bottom:auto}
}

/* ── 书中人物对话框 ── */
.cs-card{display:flex;flex-direction:column;width:min(620px,100%);height:min(720px,calc(100% - 16px));padding-bottom:14px}
.cs-head{align-items:center;gap:12px}
.cs-av{width:44px;height:44px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:20px;font-weight:700;box-shadow:inset 0 0 0 2px rgba(255,255,255,.5)}
.cs-av.w2{font-size:16px;letter-spacing:-.02em}
.cs-av.w3{font-size:13.5px;letter-spacing:-.02em}
.cs-who{flex:1;min-width:0}
.cs-who h2{font-size:19px;line-height:1.3;margin:0}
.cs-role{font-size:12.5px;color:var(--ink3);margin:2px 0 0;line-height:1.5}
.cs-from{font-size:12.5px;color:var(--ink3);margin:6px 0 8px}
.cs-from a{color:var(--teal-t);font-weight:600}
.cs-quest{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 8px;padding:8px 12px;border-radius:10px;background:#fdf6e7;border:1px solid rgba(217,163,58,.55)}
.cs-quest[hidden]{display:none}
.cs-quest.st-ready{background:#eef7f0;border-color:rgba(58,138,90,.55)}
.cs-quest.st-done{background:none;border-style:dashed;border-color:var(--border);padding:5px 12px}
.cs-q-t{flex:1 1 260px;margin:0;font-size:13.5px;line-height:1.65;color:var(--ink2)}
.cs-q-k{color:#7a5410;margin-right:4px}
.st-ready .cs-q-k{color:#24613d}
.cs-q-b{flex:none}
.cs-q-done{margin:0;font-size:12.5px;color:var(--ink3);flex:1 1 100%}
.cs-q-done:focus{outline:none}
.cs-q-got{color:#24613d;font-weight:600}
.cs-q-all{flex:1 1 100%;margin:0;font-size:13px;font-weight:700;color:#7a5410}
.cs-q-why{flex:1 1 100%;margin:0;font-size:12.5px;line-height:1.6;color:#8a2a1e}
.st-done .cs-q-t{flex-basis:100%;font-size:13px}
.cs-log{flex:1;min-height:140px;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding:10px 4px 10px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.cs-msg{display:flex;max-width:88%}
.cs-msg.them{align-self:flex-start}
.cs-msg.me{align-self:flex-end}
.cs-bd{padding:9px 13px;border-radius:14px;font-size:14.5px;line-height:1.75;color:var(--ink);word-break:break-word;white-space:normal}
.cs-msg.them .cs-bd{background:var(--card);border:1px solid var(--border);border-top-left-radius:4px}
.cs-msg.me .cs-bd{background:var(--teal);color:#fff;border-top-right-radius:4px}
.cs-msg.hi .cs-bd{background:#fdf6e7;border-color:rgba(217,163,58,.5)}
.cs-msg.note .cs-bd{background:none;border:none;color:var(--ink3);font-size:13px;padding:2px 4px}
.cs-msg.err .cs-bd{background:#fdecea;border-color:#e8b4ad;color:#8a2a1e}
.cs-msg.pending .cs-bd{color:var(--ink2)}
.cs-msg.pending .cs-bd:empty::after,.cs-msg.pending .cs-bd::after{content:'▍';margin-left:2px;animation:csBlink 1s steps(2) infinite;color:var(--teal-t)}
@keyframes csBlink{50%{opacity:0}}
.cs-retry{margin-left:8px}
.cs-tips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 0 2px}
.cs-tips[hidden]{display:none}
.cs-tips-l{font-size:12.5px;color:var(--ink3);margin-right:2px}
.cs-tip{border:1px solid var(--border);background:var(--card);border-radius:999px;padding:6px 12px;font:inherit;font-size:13px;color:var(--teal-t);min-height:36px;cursor:pointer;text-align:left}
.cs-tip:hover,.cs-tip:focus-visible{border-color:var(--teal)}
.cs-login{font-size:13.5px;color:var(--ink2);background:#fdf6e7;border:1px solid rgba(217,163,58,.5);border-radius:10px;padding:9px 12px;margin:8px 0 0;line-height:1.7}
.cs-login a{color:var(--teal-t);font-weight:700}
.cs-form{display:flex;gap:8px;align-items:flex-end;margin-top:10px}
.cs-form textarea{flex:1;min-width:0;resize:none;font:inherit;font-size:15px;line-height:1.55;padding:9px 12px;border:1.5px solid var(--border);border-radius:12px;background:var(--card);color:var(--ink);min-height:46px;max-height:140px}
.cs-form textarea:focus-visible{outline:2px solid var(--teal);outline-offset:1px;border-color:var(--teal)}
.cs-form textarea:disabled{background:var(--bg2);cursor:not-allowed}
.cs-send{min-height:46px;padding:0 18px;flex:none}
.cs-send:disabled{opacity:.55;cursor:not-allowed}
.cs-foot{display:flex;align-items:center;gap:10px;margin-top:6px;font-size:12.5px;color:var(--ink3);min-height:32px}
.cs-count{margin-left:auto}
.cs-foot .nt-link{margin-left:auto}
.cs-count:not(:empty)+.nt-link{margin-left:10px}
.cs-ai{font-size:11.5px;color:var(--ink3);margin:2px 0 0;line-height:1.6}
@media(max-width:760px){
  .cs-sheet .cs-card{height:92%;max-height:92%;padding:16px 14px 12px}
  .cs-av{width:38px;height:38px;font-size:17px}
  .cs-who h2{font-size:17px}
  .cs-msg{max-width:92%}
  .cs-bd{font-size:14px}
  .cs-form textarea{font-size:16px}
}
@media (orientation:landscape) and (max-height:500px){
  .cs-sheet .cs-card{height:calc(100% - 12px)}
  .cs-from,.cs-ai{display:none}
  .cs-q-t{font-size:12.5px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
}

/* ── 签字台（r87，qz.js）── */
.qz-card{display:flex;flex-direction:column;width:min(680px,100%);height:min(780px,calc(100% - 16px));padding-bottom:12px}
.qz-head{align-items:center;gap:12px}
.qz-ico{width:44px;height:44px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;font-size:22px;background:#fdf6e7;box-shadow:inset 0 0 0 1.5px rgba(217,163,58,.55)}
.qz-who{flex:1;min-width:0}
.qz-who h2{font-size:19px;line-height:1.3;margin:0}
.qz-sub{font-size:12.5px;color:var(--ink3);margin:2px 0 0;line-height:1.5}
.qz-shifts{display:flex;gap:6px;margin-top:10px}
.qz-shifts[hidden]{display:none}
.qz-shift{font:inherit;font-size:13px;font-weight:600;color:var(--ink2);background:var(--card);border:1.5px solid var(--border2);border-radius:999px;padding:5px 14px;min-height:36px;cursor:pointer}
.qz-shift:hover,.qz-shift:focus-visible{border-color:var(--teal)}
.qz-shift.on{background:var(--teal);border-color:var(--teal);color:#fff}
.qz-lock{margin:0 0 10px;padding:8px 12px;border-radius:10px;background:var(--bg2);font-size:13px;color:var(--ink2)}
.qz-ul{margin:0 0 8px;padding-left:1.3em}
.qz-ul li{margin:2px 0}
.qz-bar{display:flex;align-items:center;gap:10px;padding:10px 0 8px;border-bottom:1px solid var(--border)}
.qz-tabs{display:flex;gap:6px;flex-wrap:wrap}
.qz-tab{position:relative;width:38px;height:38px;border-radius:50%;border:1.5px solid var(--border2);background:var(--card);font:inherit;font-weight:700;font-size:14px;color:var(--ink2);cursor:pointer;padding:0}
.qz-tab:hover,.qz-tab:focus-visible{border-color:var(--teal)}
.qz-tab.on{box-shadow:0 0 0 2.5px var(--teal);border-color:var(--teal);color:var(--teal-t)}
.qz-tab.st-r{background:#e6f3ea;border-color:#3a8a5a;color:#24613d}
.qz-tab.st-w{background:#fdecea;border-color:#c0473a;color:#8a2a1e}
.qz-tab.st-p{background:#fdf3dc;border-color:#c8922a;color:#7a5410}
.qz-tab-i{position:absolute;right:-3px;bottom:-3px;font-size:11px;line-height:1;background:var(--card);border-radius:50%;padding:1px 2px}
.qz-tab-i:empty{display:none}
.qz-prog{margin-left:auto;font-size:12.5px;color:var(--ink3);white-space:nowrap}
.qz-bodyw{flex:1;min-height:0;overflow-y:auto;padding:12px 4px 6px 0;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.qz-msg{color:var(--ink3);font-size:14px}
.qz-th{margin-bottom:6px}
.qz-kick{display:block;font-size:11.5px;letter-spacing:.06em;color:var(--teal-t);font-weight:700}
.qz-tt{font-size:18px;line-height:1.35;margin:4px 0 2px}
.qz-tt:focus,.qz-vh:focus{outline:none}   /* 标题只是给读屏软件定位用的落脚点（不能点），不画焦点框 */
.qz-meta{font-size:12px;color:var(--ink3)}
.qz-blk{margin:12px 0}
.qz-lab{font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--ink3);margin:0 0 6px;padding:0}
.qz-md{font-size:14.5px;line-height:1.8;color:var(--ink);word-break:break-word}
.qz-md p{margin:0 0 8px}
.qz-md p:last-child{margin-bottom:0}
.qz-md code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em;background:var(--bg2);border-radius:4px;padding:1px 5px}
.qz-code{margin:8px 0;padding:10px 12px;background:#1f2a33;color:#e8eef2;border-radius:8px;overflow-x:auto;font-size:12.5px;line-height:1.6}
.qz-code code{background:none;padding:0;color:inherit;font-size:inherit;white-space:pre}
.qz-q{margin:8px 0;padding:8px 12px;border-left:3px solid #d9a33a;background:#fdf6e7;border-radius:0 8px 8px 0;color:var(--ink2)}
.qz-tw{overflow-x:auto;margin:8px 0}
.qz-t{border-collapse:collapse;font-size:13px;line-height:1.55;min-width:100%}
.qz-t th,.qz-t td{border:1px solid var(--border);padding:5px 8px;text-align:left;vertical-align:top}
.qz-t th{background:var(--bg2)}
.qz-ask .qz-md{background:var(--bg2);border-left:3px solid var(--teal);border-radius:0 10px 10px 0;padding:10px 14px;font-size:14px}
.qz-body .qz-md{background:var(--card);border:1.5px dashed var(--border2);border-radius:10px;padding:12px 14px}
.qz-intro .qz-md{font-size:15px}
.qz-from,.qz-more{font-size:12.5px;color:var(--ink3);line-height:1.7}
.qz-from a{color:var(--teal-t);font-weight:600}
.qz-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}
.qz-acts .btn{min-height:44px;padding:0 18px}
.qz-acts .nt-link{margin-left:auto}
.qz-acts a.btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
.qz-reward{margin:10px 0 0;padding:8px 12px;border-radius:10px;background:#fdf6e7;border:1px solid rgba(217,163,58,.6);color:#6b4e08;font-weight:600;font-size:13.5px;line-height:1.6}
.qz-hint{font-size:12.5px;color:var(--ink3);margin:8px 0 0}
.qz-whys{border:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:8px;min-width:0}
.qz-why{display:flex;gap:10px;align-items:flex-start;text-align:left;font:inherit;font-size:14px;line-height:1.65;color:var(--ink);background:var(--card);border:1.5px solid var(--border);border-radius:10px;padding:10px 12px;cursor:pointer;min-height:44px}
.qz-why:hover,.qz-why:focus-visible{border-color:var(--teal);background:var(--teal-d)}
.qz-k{flex:none;width:24px;height:24px;border-radius:50%;background:var(--bg3);color:var(--ink2);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px}
.qz-wt{flex:1;min-width:0}
.qz-cancel{align-self:flex-start;margin-top:2px}
.qz-verdict{margin:14px 0 4px;padding:12px 14px;border-radius:12px;border:2px solid var(--border2);background:var(--card)}
.qz-verdict.st-r{border-color:#3a8a5a;background:#f1f8f3}
.qz-verdict.st-w{border-color:#c0473a;background:#fdf1ef}
.qz-verdict.st-p{border-color:#c8922a;background:#fdf7e8}
.qz-vh{font-size:16px;margin:0 0 8px;scroll-margin-top:12px}
.qz-vh::first-letter{text-transform:uppercase}
.st-r .qz-vh{color:#24613d}.st-w .qz-vh{color:#8a2a1e}.st-p .qz-vh{color:#7a5410}
.qz-verdict .qz-blk{margin:8px 0}
.qz-your,.qz-right{font-size:13.5px;line-height:1.7;margin:6px 0;color:var(--ink2)}
.qz-your b,.qz-right b{color:var(--ink);margin-right:4px}
.qz-score{font-size:15px;line-height:1.7;margin:6px 0}
.qz-cal .qz-md{background:var(--bg2);border-radius:10px;padding:10px 14px}
@media(max-width:760px){
  .qz-sheet .qz-card{height:92%;max-height:92%;padding:16px 14px 12px}
  .qz-ico{width:38px;height:38px;font-size:19px}
  .qz-who h2{font-size:17px}
  .qz-tab{width:36px;height:36px}
  .qz-md{font-size:14px}
  .qz-acts .btn{flex:1 1 auto}
  .qz-code code{white-space:pre-wrap;overflow-wrap:anywhere}   /* 手机上代码折行，不用横着拖 */
}
@media (orientation:landscape) and (max-height:500px){
  .qz-sheet .qz-card{height:calc(100% - 12px)}
  .qz-sub{display:none}
  .qz-bar{padding:6px 0}
}

/* ── 谁说的？（r91，whosaid.js）── */
.ws-quote{margin:6px 0 4px;padding:16px 18px;border-radius:12px;background:#fdf6e7;border:1px solid rgba(217,163,58,.55);font-family:var(--serif);font-size:18px;line-height:1.75;color:var(--ink)}
.ws-quote:focus{outline:none}
.ws-ask{font-size:13px;color:var(--ink3);margin:10px 0 8px}
.ws-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ws-opt{display:flex;align-items:center;gap:10px;text-align:left;font:inherit;background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:9px 12px;min-height:56px;cursor:pointer;color:var(--ink)}
.ws-opt:hover:not(:disabled),.ws-opt:focus-visible{border-color:var(--teal);background:var(--teal-d)}
.ws-opt:disabled{cursor:default;opacity:.7}
.ws-opt.right{opacity:1;border-color:#3a8a5a;background:#eef7f0}
.ws-opt.wrong{opacity:1;border-color:#c0473a;background:#fdf1ef}
.ws-av{width:36px;height:36px;font-size:15px;flex:none}
.ws-nm{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.ws-nm b{font-size:14.5px}
.ws-nm small{font-size:11.5px;color:var(--ink3)}
.ws-fb{margin-top:12px;padding:10px 14px;border-radius:10px;border:1.5px solid var(--border2)}
.ws-fb.ok{border-color:#3a8a5a;background:#f1f8f3}
.ws-fb.bad{border-color:#c0473a;background:#fdf1ef}
.ws-fbh{margin:0;font-weight:700;font-size:15px}
.ws-fbh:focus{outline:none}
.ws-fb.ok .ws-fbh{color:#24613d}.ws-fb.bad .ws-fbh{color:#8a2a1e}
.ws-fbs{margin:4px 0 0;font-size:12.5px;color:var(--ink2)}
.ws-best{font-size:13.5px;color:var(--ink2);margin:2px 0 8px}
.ws-review{margin:8px 0;padding-left:1.4em;display:flex;flex-direction:column;gap:8px}
.ws-review li{font-size:13.5px;line-height:1.6}
.ws-rq{display:block;color:var(--ink)}
.ws-rw{display:block;font-size:12.5px;font-weight:600}
.ws-review li.ok .ws-rw{color:#24613d}.ws-review li.bad .ws-rw{color:#8a2a1e}
@media(max-width:480px){.ws-opts{grid-template-columns:1fr}.ws-quote{font-size:16.5px;padding:12px 14px}.ws-opt{min-height:48px}}

/* ── 每日三题（r94） ── */
.dy-q{font-size:16px;font-weight:600;line-height:1.65;margin:6px 0 12px;outline:none;color:var(--ink)}
.dy-opts{display:grid;gap:8px}
.dy-opt{font:inherit;color:var(--ink);display:flex;align-items:flex-start;gap:10px;text-align:left;border:1.5px solid var(--border);background:var(--card);border-radius:10px;padding:10px 12px;font-size:14px;line-height:1.55;min-height:44px;cursor:pointer}
.dy-opt kbd{flex:none;display:inline-block;min-width:22px;text-align:center;border:1px solid var(--border);border-radius:5px;font-size:12px;padding:1px 4px;background:var(--bg3)}
.dy-opt:hover:not(:disabled),.dy-opt:focus-visible{border-color:var(--teal)}
.dy-opt:disabled{cursor:default;color:var(--ink2)}
.dy-opt.right{color:var(--ink);border-color:#3a8a5a;background:#e7f4ea}
.dy-opt.wrong{color:var(--ink);border-color:#a33a2c;background:#fbe9e5}
.bk-daily{margin:0 0 14px}
.bk-daily[hidden]{display:none}
.bk-daily-c{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 14px;border-radius:12px;border:1.5px solid rgba(217,163,58,.6);background:#fdf6e7}
.bk-daily-c.done{border-color:var(--border);background:var(--card)}
.bk-daily-t{flex:1 1 220px;min-width:0}
.bk-daily-h{margin:0 0 2px}
.bk-daily-t .bk-colp{margin:0}

/* ── 岛民徽章（r95） ── */
.bk-bdg{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.bk-bdg-i{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:12px;border:1.5px dashed var(--border);background:var(--bg3);color:var(--ink3)}
.bk-bdg-i.got{border-style:solid;border-color:rgba(217,163,58,.7);background:#fdf6e7;color:var(--ink)}
.bk-bdg-ic{flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-size:20px;background:var(--card);filter:grayscale(1);opacity:.55}
.bk-bdg-i.got .bk-bdg-ic{filter:none;opacity:1;background:#fff;box-shadow:0 0 0 2px rgba(217,163,58,.55)}
.bk-bdg-t{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:12.5px;line-height:1.5}
.bk-bdg-t b{font-size:13.5px;color:inherit}
.bk-bdg-p{color:var(--teal-t);font-weight:600}
@media (max-width:480px){.bk-bdg{grid-template-columns:1fr}}

/* ── 漂流瓶的纸条、笔记本里的漂流瓶（r96） ── */
.btl-card{position:fixed;left:50%;bottom:92px;transform:translate(-50%,12px);z-index:40;display:flex;gap:12px;align-items:flex-start;width:min(560px,calc(100vw - 32px));padding:14px 16px;border-radius:14px;background:#fbf6ea;border:1.5px solid rgba(95,174,134,.65);box-shadow:0 10px 30px rgba(20,30,40,.22);opacity:0;transition:opacity .25s,transform .25s;color:var(--ink)}
.btl-card.show{opacity:1;transform:translate(-50%,0)}
.btl-card[hidden]{display:none}
.btl-ico{flex:none;font-size:26px;line-height:1}
.btl-t{flex:1;min-width:0}
.btl-t b{display:block;font-size:14.5px;margin-bottom:4px}
.btl-t p{margin:0 0 6px;font-size:13.5px;line-height:1.65}
.btl-t small{color:#24613d;font-weight:600;font-size:12.5px}
.btl-x{flex:none;border:0;background:transparent;font-size:22px;line-height:1;cursor:pointer;color:var(--ink3);min-width:32px;min-height:32px;border-radius:8px}
.btl-x:focus-visible{outline:2px solid var(--teal)}
@media (max-width:640px){.btl-card{bottom:150px}}
.bk-btl{margin:0;padding-left:1.5em;display:grid;gap:8px;font-size:13px;line-height:1.6}
.bk-btl li b{display:block;color:var(--ink)}
.bk-btl li span{color:var(--ink2)}
.bk-btl .bk-btl-no{color:var(--ink3);font-style:italic}
.rd-sel{display:flex;align-items:center;gap:10px;margin:6px 0;font-size:14px}
.rd-sel select{font:inherit;padding:6px 10px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--ink);min-height:36px}

/* ── 钓鱼（r97） ── */
.fs-stock{display:flex;flex-direction:column;gap:4px;margin:2px 0 10px;font-size:12.5px;color:var(--ink3)}
.fs-stock-bar{position:relative;height:8px;border-radius:6px;background:var(--bg3);overflow:hidden}
.fs-stock-bar i{position:absolute;left:0;top:0;bottom:0;background:#3f8fb0;border-radius:6px}
.fs-stock-bar b{position:absolute;top:-2px;bottom:-2px;width:2px;background:#24613d}
.fs-stage{height:96px;border-radius:12px;background:linear-gradient(#cfe9ee,#7cc0c9 55%,#3f98a2);display:grid;place-items:center;overflow:hidden;margin-bottom:8px}
.fs-bob{font-size:40px;line-height:1;display:inline-block}
.fs-stage.st-wait .fs-bob{animation:fsBob 1.6s ease-in-out infinite}
.fs-stage.st-bite .fs-bob{animation:fsDip .18s ease-in-out infinite}
.fs-stage.st-reel .fs-bob{animation:fsPull .5s ease-in-out infinite}
.fs-stage.st-done .fs-bob{font-size:52px;animation:fsJump .6s ease-out 1}
@keyframes fsBob{50%{transform:translateY(6px)}}
@keyframes fsDip{50%{transform:translateY(16px) scale(.9)}}
@keyframes fsPull{50%{transform:translateX(10px) rotate(8deg)}}
@keyframes fsJump{0%{transform:translateY(30px) scale(.6)}60%{transform:translateY(-10px) scale(1.1)}100%{transform:none}}
@media (prefers-reduced-motion:reduce){.fs-stage .fs-bob{animation:none!important}}
.fs-msg{margin:0 0 8px;font-size:14.5px;line-height:1.6;font-weight:600;color:var(--ink)}
.fs-bars{display:grid;gap:8px;margin:4px 0 6px}
.fs-bl{display:grid;grid-template-columns:5.5em 1fr;align-items:center;gap:8px;font-size:12.5px;color:var(--ink2)}
.fs-bar{position:relative;height:14px;border-radius:8px;background:var(--bg3);overflow:hidden}
.fs-bar-t{background:linear-gradient(90deg,#fbe9e5 0,#fbe9e5 15%,#e7f4ea 15%,#e7f4ea 80%,#fbe9e5 80%)}
.fs-bar i{position:absolute;left:0;top:0;bottom:0;border-radius:8px;transition:width .05s linear}
.fs-ten{background:#3a8a5a}.fs-ten.hot{background:#c0392b}.fs-ten.slack{background:#d9a33a}
.fs-prog{background:#2a78b8}
.fs-tip{margin:0 0 6px;font-size:12.5px;color:var(--ink3);min-height:1.5em}
.fs-hold{user-select:none;-webkit-user-select:none;touch-action:none;min-width:150px}
.fs-hold.on{filter:brightness(.88);transform:translateY(1px)}
.fs-urgent{animation:fsUrg .4s ease-in-out infinite}
@keyframes fsUrg{50%{transform:scale(1.06)}}
.fs-card{padding:10px 14px;border-radius:12px;border:1.5px solid var(--border2);background:var(--card);margin-bottom:8px}
.fs-card.rare{border-color:rgba(217,163,58,.8);background:#fdf6e7}
.fs-card b{display:block;margin-bottom:4px}
.fs-card p{margin:4px 0 0;font-size:13px;line-height:1.6}
.fs-dex{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.fs-dex li{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:10px;border:1.5px dashed var(--border);background:var(--bg3);color:var(--ink3);font-size:12.5px;line-height:1.5}
.fs-dex li.got{border-style:solid;background:var(--card);color:var(--ink)}
.fs-dex li div{display:flex;flex-direction:column;gap:2px;min-width:0}
.fs-dex-ic{flex:none;font-size:24px;width:32px;text-align:center}
.fs-dex-s li span:not(.fs-dex-ic){display:none}
/* ── 藏宝图（r97） ── */
.th-hud{position:fixed;left:50%;top:70px;transform:translateX(-50%);z-index:30;padding:6px 14px;border-radius:999px;background:rgba(43,35,32,.86);color:#fff;font-size:13.5px;font-weight:600;white-space:nowrap;pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.18)}
.th-hud[hidden]{display:none}
@media (max-width:640px){.th-hud{top:172px;font-size:12.5px;max-width:calc(100vw - 32px);overflow:hidden;text-overflow:ellipsis}}
html.in-level .th-hud{display:none}
.th-story{margin:0 0 8px;font-family:var(--serif);font-size:15px;line-height:1.75;color:var(--ink)}
.th-clue{margin:4px 0 8px;padding:12px 14px;border-radius:12px;background:#f6ecd2;border:1px solid rgba(160,82,30,.35);font-size:15px;line-height:1.7;color:var(--ink)}
.th-map{display:block;width:100%;max-width:360px;margin:8px auto;border-radius:12px;background:#a9d7dc}
.th-map .th-land{fill:#cfe2a8}
.th-map .th-grid{stroke:rgba(43,35,32,.12);stroke-width:1}
.th-map .th-axis{stroke:rgba(43,35,32,.55);stroke-width:1.4}
.th-map .th-t{font-size:8.5px;fill:#2b2320;font-family:system-ui,sans-serif}
.th-map .th-ax{font-weight:700}
.th-map .th-lm{fill:#a0521e}
.th-map .th-x{fill:#c0392b;font-size:12px;font-weight:700}
.th-map .th-me{fill:#2a78b8;stroke:#fff;stroke-width:1.5}
.th-map .th-me-t{fill:#2a78b8;font-weight:700}

/* ── r99 气象站（weather.js） ── */
.wx-now{display:flex;align-items:center;gap:14px;padding:10px 14px;border-radius:12px;background:var(--bg3);margin-bottom:10px}
.wx-now .wx-big{font-size:40px;line-height:1;color:inherit}
.wx-now div{display:flex;flex-direction:column;gap:3px;min-width:0}
.wx-now b{font-size:17px}
.wx-now span{font-size:13px;color:var(--ink2);line-height:1.5}
.wx-now small{font-size:12px;color:var(--ink3);line-height:1.5}
.wx-fc{margin:4px 0 6px}
.wx-pick{border:0;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.wx-pick legend{font-size:13px;font-weight:700;color:var(--ink2);padding:0;margin-bottom:6px}
.wx-opt{font:inherit;font-size:14px;background:var(--card);border:1.5px solid var(--border);border-radius:999px;padding:8px 14px;min-height:44px;cursor:pointer;color:var(--ink)}
.wx-opt:hover,.wx-opt:focus-visible{border-color:var(--teal);background:var(--teal-d)}
.wx-opt.on{border-color:var(--teal);background:var(--teal);color:#fff;font-weight:700}
.wx-pay{margin:10px 0 0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.wx-need{margin:4px 0 0;min-height:1em;font-size:12.5px;color:#8a2a1e}
.wx-mine{font-size:14.5px;line-height:1.6;margin:4px 0 8px;font-weight:600}
.wx-sec{margin-top:14px;padding-top:10px;border-top:1px solid var(--border)}
.wx-h4{margin:0 0 8px;font-size:14px}
.wx-hist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:2px}
.wx-hist li{font-size:15px;text-align:center;padding:3px 0;border-radius:6px;background:var(--bg3);line-height:1.2}
.wx-hist li.now{outline:2px solid var(--teal);outline-offset:-2px;background:var(--card)}
.wx-axis{margin:4px 0 0;font-size:11.5px;color:var(--ink3);display:flex;justify-content:space-between}
.wx-mx{border-collapse:separate;border-spacing:3px;width:100%;font-size:13px;table-layout:fixed}
.wx-mx th,.wx-mx td{min-width:0;max-width:none;word-break:keep-all;overflow-wrap:anywhere}
.wx-mx thead th:first-child{width:30%}
.wx-mx th{font-weight:700;padding:4px 4px;text-align:center}
.wx-mx tbody th{text-align:left}
.wx-mx td{text-align:center;padding:6px 4px;border-radius:6px;background:rgba(43,122,140,var(--a,0));font-variant-numeric:tabular-nums}
.wx-mx .wx-c0{font-size:11.5px;color:var(--ink3);font-weight:600}
.wx-est{font-size:13px;line-height:1.6;color:var(--ink2);margin:8px 0 0}
.wx-cal{margin:6px 0 0;padding-left:1.3em;font-size:13px;line-height:1.7;color:var(--ink2)}
.wx-lock{font-size:12.5px;color:var(--ink3);margin:8px 0 0}
@media (max-width:420px){.wx-hist{gap:1px}.wx-hist li{font-size:11px;padding:2px 0;border-radius:4px}.wx-mx{font-size:12px}}

/* ── r100 天象观察（skywatch.js）：左边冒出来的小按钮 ── */
.sw-chip{position:fixed;left:14px;top:44%;z-index:8;display:flex;align-items:center;gap:8px;max-width:calc(100vw - 28px);padding:10px 16px 10px 12px;border-radius:999px;border:1.5px solid rgba(255,214,10,.85);background:rgba(28,34,58,.9);color:#fff;font:inherit;font-size:14px;font-weight:700;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.25);min-height:44px;opacity:0;transform:translateX(-12px);transition:opacity .25s,transform .25s}
.sw-chip.show{opacity:1;transform:none}
.sw-chip[hidden]{display:none}
.sw-chip i{font-style:normal;font-size:20px}
.sw-chip:hover,.sw-chip:focus-visible{background:rgba(43,52,88,.95);outline:3px solid #ffd60a;outline-offset:2px}
html.in-level .sw-chip{display:none}
.sw-facts{list-style:none;margin:6px 0 8px;padding:0;display:flex;flex-direction:column;gap:6px}
.sw-facts li{font-size:12.5px;line-height:1.6;padding:7px 10px;border-radius:10px;border:1.5px dashed var(--border);background:var(--bg3);color:var(--ink3)}
.sw-facts li.got{border-style:solid;background:var(--card);color:var(--ink)}

/* ── r101 菜园（garden.js） ── */
.gd-plots{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.gd-plot{border:1.5px solid var(--border);border-radius:12px;padding:9px 10px;background:var(--card);display:flex;flex-direction:column;gap:8px}
.gd-plot.empty{border-style:dashed;background:var(--bg3)}
.gd-plot.sel{border-color:var(--teal)}
.gd-ph{display:flex;gap:9px;align-items:flex-start}
.gd-ic{font-size:26px;line-height:1}
.gd-pt{flex:1;display:flex;flex-direction:column;gap:3px;min-width:0;font-size:12.5px;line-height:1.5;color:var(--ink2)}
.gd-pt b{font-size:13.5px;color:var(--ink)}
.gd-pt small{font-size:12px;color:var(--ink3)}
.gd-bar{height:6px;border-radius:4px;background:var(--bg3);overflow:hidden}
.gd-bar i{display:block;height:100%;background:#5a9a3a;border-radius:4px}
.gd-acts{display:flex;flex-wrap:wrap;gap:6px}
.gd-acts .btn{min-height:40px}
.gd-cpick{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}
.gd-chartw{margin:4px 0 0}
.gd-chart{display:block;width:100%;height:auto;max-width:520px;background:var(--card);border:1px solid var(--border);border-radius:10px}
.gd-ax{stroke:#8a7f6e;stroke-width:1}
.gd-k{stroke:#8a7f6e;stroke-width:1;stroke-dasharray:3 3}
.gd-seedl{stroke:#b85c2a;stroke-width:1;stroke-dasharray:2 3}
.gd-curve{fill:none;stroke:#3f7f2a;stroke-width:2.4}
.gd-tan{stroke:#b85c2a;stroke-width:1.6}
.gd-best{fill:#b85c2a;stroke:#fff;stroke-width:1.2}
.gd-now{fill:#2b7a8c;stroke:#fff;stroke-width:1.4}
.gd-tx{font-size:12px;fill:#5c5346}
.gd-key{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--ink3);margin:6px 0 0}
.gd-key span::before{content:'';display:inline-block;width:14px;height:3px;margin-right:5px;vertical-align:middle;border-radius:2px}
.gd-key .k-curve::before{background:#3f7f2a}.gd-key .k-tan::before{background:#b85c2a}
.gd-key .k-best::before{width:8px;height:8px;border-radius:50%;background:#b85c2a}.gd-key .k-now::before{width:8px;height:8px;border-radius:50%;background:#2b7a8c}
@media (max-width:520px){.gd-plots{grid-template-columns:minmax(0,1fr)}}

/* ── r102 岛上去处（acts.js，地图弹层里） ── */
.map-list .acts-ic{width:28px;height:28px;background:none;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:19px;line-height:1}
.map-list li.acts-hot{border-color:rgba(43,122,140,.55);box-shadow:inset 3px 0 0 #2b7a8c}

/* ── r103 兔子普查（census.js） ── */
.rb-steps{margin:6px 0 10px;padding-left:1.4em;display:flex;flex-direction:column;gap:6px;font-size:13.5px;line-height:1.6;color:var(--ink2)}
.rb-data{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:6px 0 10px}
.rb-data div{background:var(--bg3);border-radius:10px;padding:8px 10px}
.rb-data dt{font-size:11.5px;color:var(--ink3);line-height:1.4}
.rb-data dd{margin:2px 0 0;font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}
.rb-in{display:flex;align-items:center;gap:10px;margin:8px 0 2px;font-size:14px;flex-wrap:wrap}
.rb-in input{font:inherit;font-size:16px;width:7em;padding:8px 10px;border:1.5px solid var(--border);border-radius:9px;background:var(--card);color:var(--ink)}
.rb-in input:focus-visible{outline:3px solid var(--teal);outline-offset:1px}
@media (max-width:420px){.rb-data{grid-template-columns:minmax(0,1fr)}}

/* ── r104 概率小摊（stall.js） ── */
.st-tabs{display:flex;gap:6px;margin:0 0 10px;border-bottom:1px solid var(--border)}
.st-tab{font:inherit;font-size:14px;font-weight:600;padding:9px 14px;min-height:44px;border:0;border-bottom:3px solid transparent;background:none;color:var(--ink3);cursor:pointer}
.st-tab.on{color:var(--ink);border-bottom-color:var(--teal)}
.st-tab:focus-visible{outline:3px solid var(--teal);outline-offset:-3px}
.st-doors{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:8px 0}
.st-door{font:inherit;display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 6px;min-height:96px;border:2px solid var(--border);border-radius:12px;background:var(--card);color:var(--ink);cursor:pointer}
.st-door:hover:not(:disabled),.st-door:focus-visible{border-color:var(--teal);background:var(--teal-d)}
.st-door:disabled{cursor:default}
.st-door.picked{border-color:var(--teal);box-shadow:0 0 0 2px var(--teal) inset}
.st-door.open{background:var(--bg3)}
.st-dface{font-size:36px;line-height:1}
.st-dn{font-size:12.5px;font-weight:700;color:var(--ink2)}
.st-msg{font-size:14.5px;font-weight:600;line-height:1.6;margin:6px 0}
.st-msg.win{color:#24613d}.st-msg.lose{color:#8a2a1e}
.st-bars{list-style:none;margin:6px 0;padding:0;display:flex;flex-direction:column;gap:8px}
.st-bars li{display:grid;grid-template-columns:minmax(0,9em) minmax(0,1fr) 3em;gap:8px;align-items:center;font-size:12.5px;color:var(--ink2)}
.st-bar{position:relative;height:10px;border-radius:6px;background:var(--bg3);overflow:hidden}
.st-bar i{position:absolute;left:0;top:0;bottom:0;background:#2b7a8c;border-radius:6px}
.st-bar b{position:absolute;top:-2px;bottom:-2px;width:2px;background:#5c5346;opacity:.6}
.st-pc{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.st-board{display:block;width:100%;max-width:520px;height:auto;background:#f3ead6;border:1px solid var(--border);border-radius:10px}
.st-line{stroke:#8a7f6e;stroke-width:1.2}
.st-nd{stroke:#3a548c;stroke-width:2;stroke-linecap:round;opacity:.75}
.st-nd.hit{stroke:#d9701a;opacity:.95}
.st-board + .st-pi{margin-top:10px}
#stSimH{margin-top:12px}
.st-pi{font-size:14px;font-weight:600;line-height:1.6;margin:8px 0;font-variant-numeric:tabular-nums}
@media (max-width:420px){.st-bars li{grid-template-columns:minmax(0,1fr) 3em}.st-bars .st-bar{grid-column:1 / -1;grid-row:2}}

/* r105：从「下一站」点开地图时，目标那一关闪一下；寻宝坐标条开着时提示条往下让 */
.map-list li.map-hl{border-color:var(--rust);box-shadow:0 0 0 3px rgba(184,92,56,.28);transition:box-shadow .3s}
html.th-on:not(.riding):not(.ballooning):not(.sailing) .toast{top:112px}
@media(max-width:760px){html.th-on:not(.riding):not(.ballooning):not(.sailing) .toast{top:118px}}
@media(max-width:640px){html.th-on:not(.riding):not(.ballooning):not(.sailing) .toast{top:210px}}
.lv-coins{color:#7a5410;font-weight:700;white-space:nowrap}
.mm-st:focus-visible,.mm-poi:focus-visible{outline:none}
.mm-st:focus-visible circle:not(.mm-hit),.mm-poi:focus-visible circle:not(.mm-hit){stroke:#1a1612;stroke-width:2}
.map-jump{margin:6px 0 2px;font-size:13px}
.map-jump a{color:var(--teal-t);font-weight:600;text-decoration:none;display:inline-flex;align-items:center;min-height:32px}
.map-jump a:hover{text-decoration:underline}
#mapActsH:focus{outline:none}
.st-why summary::before{content:'▸';display:inline-block;margin-right:6px;transition:transform .15s}
.st-why[open] summary::before{transform:rotate(90deg)}
@media(prefers-reduced-motion:reduce){.st-why summary::before{transition:none}}

/* r108：手机竖屏的关卡面板——表头、底栏压扁，面板高一点；这一步最后一排按钮贴在面板底边 */
@media (max-width:760px) and (orientation:portrait){
  .lv{max-height:58%}
  .lv-head{padding:8px 10px 6px 14px;gap:6px}
  .lv-kick{font-size:10px;letter-spacing:1px}
  .lv-title{font-size:15.5px;line-height:1.3}
  .lv-steps{padding:6px 14px 0}
  .lv-body{padding:8px 14px 10px;scroll-padding-bottom:70px}   /* Tab 到的控件别被贴底的按钮挡住 */
  .lv-body:has(> .lv-acts.lv-sticky){padding-bottom:0}             /* 有贴底的一排时，底下不留空（不然按钮下面露一条缝） */
  .lv-foot{padding:4px 14px 6px}
  .lv-notes{min-height:34px;padding:4px 10px;font-size:12.5px}
  .lv-body > .lv-acts.lv-sticky{position:sticky;bottom:0;z-index:2;margin:10px -14px 0;padding:8px 14px 10px;background:rgba(255,253,248,.97);box-shadow:0 -6px 12px -8px rgba(26,22,18,.25)}
}
/* r110：手机上关卡里字幕挂在上面，正好和提示条叠在一起（通关那一刻两句话都看不清）：提示条在的时候字幕往下让 */
@media(max-width:760px){html.in-level.toast-on .vo-cap{top:206px}}
/* r111：手机竖屏的关卡里，左上角「模型岛 · 已通过」那张卡片收起来（关卡面板上已经写着第几章第几关），右上角只留语音按钮，少挡场地 */
@media (max-width:760px) and (orientation:portrait){
  html.in-level .hud-title{position:absolute;width:1px;height:1px;padding:0;border:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}   /* 看不见，读屏照样读得到页面标题 */
  html.in-level .hud-btns{margin-left:auto;gap:5px}
  html.in-level .hud-btn{min-height:38px;min-width:38px;padding:5px 7px;background:rgba(255,253,248,.82)}
  /* 关卡里用不上地图、留言、笔记、说明（面板底下就有「这一关的问题和思考」）：只留语音按钮，场地上方的读数、牌子就不被挡了 */
  html.in-level #btnMap,html.in-level #btnNotes,html.in-level #btnBook,html.in-level #btnHelp{display:none}
}
/* r111：贴底那排按钮在手机上紧凑一点，两个按钮尽量并排一行 */
@media (max-width:760px) and (orientation:portrait){
  .lv-body > .lv-acts.lv-sticky{gap:6px;padding:7px 14px 8px}
  .lv-body > .lv-acts.lv-sticky .btn{padding:8px 12px;font-size:13.5px}
}
/* r111：窄屏上左上角卡片去掉「模型岛」大标题（进度那行已经说了），「下一站」可以折到三行，路线提示不再被截掉 */
@media(max-width:420px){
  html:not(.in-level) .hud-title h1{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}   /* 读屏照样读得到这个标题 */
  #hudNextTxt{-webkit-line-clamp:3}
  /* 「下一站」从左上角的小卡片里拿出来，在按钮那一排下面横着占满一整行：路线提示（「登上问题山山顶走云桥」）放得下了 */
  html:not(.in-level) .hud-next{position:absolute;left:0;right:0;top:54px;margin-top:0;max-width:none;flex-wrap:nowrap;border-radius:999px;padding:4px 10px;min-height:34px;box-shadow:0 2px 10px rgba(26,22,18,.1)}
  html:not(.in-level) #hudNextDist{flex-basis:auto;padding-left:0;white-space:nowrap}
  html:not(.in-level) .hud-title{width:auto}
  html:not(.in-level):not(.riding):not(.ballooning):not(.sailing):not(.th-on) .toast{top:128px}   /* 让开三行的「下一站」 */
}
/* r111：窄屏上「下一站」占了按钮下面一整行：寻宝坐标条再往下挪一点，别叠上去 */
@media(max-width:420px){.th-hud{top:188px}html.th-on:not(.riding):not(.ballooning):not(.sailing) .toast{top:226px}}
.lv-body th{word-break:keep-all}   /* r112：表头别从「小时」中间断开，在括号前折 */
.fb-msg .fb-then{display:block;font-size:12px;font-weight:600;color:var(--ink3);margin-bottom:2px}   /* r114：通过以后又拖了滑块，这句话说的是当时的数 */
/* r115：对话里的一小套 Markdown（王老师的化身分条、给代码）+ 王老师工具条 + 复制 */
.cs-bd p{margin:0 0 6px}.cs-bd p:last-child{margin-bottom:0}
.cs-bd ul,.cs-bd ol{margin:2px 0 6px;padding-left:1.4em}.cs-bd li{margin:1px 0}
.cs-bd .cs-h{margin:8px 0 2px}
.cs-bd code{font-family:'JetBrains Mono',ui-monospace,Menlo,Consolas,monospace;font-size:.88em;background:rgba(61,53,42,.07);border-radius:4px;padding:0 4px}
.cs-msg.me .cs-bd code{background:rgba(255,255,255,.18)}
.cs-bd .cs-code{margin:6px 0;background:#2b2722;color:#f3eee6;border-radius:8px;padding:9px 11px;overflow-x:auto;font-size:12.5px;line-height:1.55;white-space:pre}
.cs-bd .cs-code code{background:none;padding:0;color:inherit;font-size:inherit}
.cs-msg.them:has(.cs-acts){flex-wrap:wrap}
.cs-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;flex-basis:100%;margin:4px 0 0 4px}
.cs-copy{font-size:12px}
.cs-toapp{font-size:12.5px}
.cs-bd a{color:var(--teal-t);text-decoration:underline;word-break:break-all}
.cs-msg.me .cs-bd a{color:#fff}
.cs-fd{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:6px 0 2px}
.cs-fd[hidden]{display:none}
.cs-fd-me{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink3)}
.cs-fd-me select{font:inherit;font-size:12.5px;color:var(--ink);background:var(--card);border:1px solid var(--border);border-radius:8px;padding:3px 6px;max-width:min(18em,calc(100vw - 110px))}
.cs-fd-x{display:flex;flex-wrap:wrap;gap:6px}
.cs-fd .cs-fdx{font-size:12.5px;padding:4px 10px;min-height:30px}
.cs-fdx[disabled]{opacity:.5;cursor:default}
@media (max-width:520px){.cs-fd-x{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;max-width:100%}.cs-fd-x .cs-fdx{flex:none}}
/* ── r116：电脑、平板、横屏手机的版面 ── */
/* 电脑上关卡面板跟着屏幕宽一点（1440 宽时约 400–460），表头、公式不再挤得折行；提示条和字幕按面板宽让开 */
:root{--lvw:392px}
@media(min-width:1280px){:root{--lvw:clamp(392px,28vw,460px)}}
@media(min-width:761px) and (min-height:501px){.lv{width:var(--lvw)}}
@media(min-width:761px){
  html.in-level .toast{right:calc(var(--lvw) + 24px);max-width:calc(100% - var(--lvw) - 48px)}
  html.in-level .vo-cap{left:calc((100% - var(--lvw) - 24px)/2);max-width:calc(100% - var(--lvw) - 48px)}
}
/* 竖着拿的平板（761–1180 宽）：面板改到底部、左右撑开（原来是右边一条 392 宽的长条，底下空一大截，3D 只剩一窄条） */
@media (min-width:761px) and (max-width:1180px) and (orientation:portrait){
  .lv{top:auto;left:12px;right:12px;bottom:12px;width:auto;max-height:46%}
  html.in-level .toast{left:12px;right:12px;max-width:min(560px,calc(100% - 24px))}
  html.in-level .vo-cap{top:120px!important;bottom:auto!important;left:50%;max-width:calc(100% - 48px)}
}
/* 签字台以外的小窗（每日三题、概率小摊、钓鱼、菜园……）：电脑上按内容的高度，不再撑满 780 留一大片空白 */
@media(min-width:761px){.ws-sheet .qz-card{height:auto;max-height:min(780px,calc(100% - 16px))}}
/* 背包：换标签时窗口别上下跳（按内容高度居中会跟着变）——顶边固定 */
@media(min-width:761px){#rideSheet{align-items:flex-start;padding-top:max(16px,7vh)}}
/* 关卡面板正文滚动时上沿和步骤条之间留一道线，不像叠在一起 */
.lv-body{border-top:1px solid transparent}
.lv-body.scrolled{border-top-color:var(--border);box-shadow:inset 0 6px 6px -6px rgba(26,22,18,.18)}
/* 王老师的头像字是三个字：缩小一号，别溢出圆圈 */
.cs-av.w3{font-size:12px;letter-spacing:-.5px}
/* 横着拿的手机（高不到 500）：站点导航压到 44 高；「下一站」改成一行小条显示（原来整个藏起来，欢迎语却叫人跟着它走）；
   关卡面板的页脚按钮压扁；对话框只让对话记录滚，表头和输入框不跟着滚走 */
@media (orientation:landscape) and (max-height:500px){
  nav{height:44px;padding:0 14px}
  .logo-mark,.logo-mark img{width:28px;height:28px}
  .stage{top:44px}
  .mobile-nav{top:44px}
  .hud-next{display:flex;max-width:38vw;min-height:30px;font-size:12px;padding:3px 10px}
  #hudNextTxt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
  html.in-level .hud-next{display:none}
  .lv-notes{min-height:30px;padding:3px 10px;font-size:12px}
  .lv-foot{padding:4px 12px 5px}
  .cs-sheet .cs-card{overflow:hidden;padding:10px 12px 8px}
  .cs-head{padding-bottom:4px}
  .cs-av{width:32px;height:32px;font-size:14px}
  .cs-who h2{font-size:16px}
  .cs-role{display:none}
  .cs-quest{display:none}
  .cs-log{min-height:60px}
  .cs-fd-me{display:none}
  .cs-fd{padding:4px 0 0}
  .cs-fd-x{flex-wrap:nowrap;overflow-x:auto;max-width:100%}
  .cs-fd-x .cs-fdx{flex:none;min-height:28px;padding:2px 9px}
  .cs-form textarea{min-height:40px;max-height:64px}
  .cs-foot{margin-top:2px}
}
.lv-table td{vertical-align:middle}   /* r116：表头一格两行时，数字和行名对齐 */
/* r116：概率小摊 · 检测阳性 */
.st-sub{flex-wrap:wrap;margin:6px 0 4px}
.st-sub .st-tab{font-size:12.5px;padding:5px 10px}
.st-sub .st-tab[disabled]{opacity:.5;cursor:not-allowed}
.st-guess{display:flex;align-items:center;gap:10px;margin:8px 0;font-size:13.5px;color:var(--ink2)}
.st-guess input[type=range]{flex:1;min-width:0;accent-color:var(--teal)}
.st-gv{font-family:'JetBrains Mono',ui-monospace,monospace;min-width:3.6em;text-align:right;color:var(--ink)}
.st-grid{display:block;width:100%;max-width:420px;margin:8px auto 4px;background:var(--card);border:1px solid var(--border);border-radius:10px}
.st-p.tp{fill:#c8372c}.st-p.fn{fill:#f3c0b8}.st-p.fp{fill:#e8a33a}.st-p.tn{fill:#d9d3c7}
.st-leg{display:flex;flex-wrap:wrap;gap:4px 14px;list-style:none;padding:0;margin:2px 0 8px;font-size:12px;color:var(--ink3)}
.st-leg li{display:flex;align-items:center;gap:5px}
.st-leg i{display:inline-block;width:10px;height:10px;border-radius:50%}
i.st-p.tp{background:#c8372c}i.st-p.fn{background:#f3c0b8}i.st-p.fp{background:#e8a33a}i.st-p.tn{background:#d9d3c7}
@media(max-width:520px){.st-guess{flex-wrap:wrap;gap:2px 10px}.st-guess>span{flex-basis:100%}}
.lv-table tbody th{white-space:nowrap}   /* r116：行名（「椰子汁 1 箱」）别折成两行；表格外层本来能横向滚 */
/* r116：竖着拿的平板，面板在底部——和手机竖屏一样，这一步最后一排按钮贴在面板底边；提示条在时字幕往下让 */
@media (min-width:761px) and (max-width:1180px) and (orientation:portrait){
  .lv-body:has(> .lv-acts.lv-sticky){padding-bottom:0}
  .lv-body > .lv-acts.lv-sticky{position:sticky;bottom:0;z-index:2;margin:10px -18px 0;padding:10px 18px 12px;background:rgba(255,253,248,.97);box-shadow:0 -6px 12px -8px rgba(26,22,18,.25)}
  html.in-level.toast-on .vo-cap{top:190px!important}
}
/* r117：关卡里答对 / 通关拿金币时跳一下 */
.mcq button.right.pop{animation:lvPop .4s ease-out}
.lv-coins.pop{display:inline-block;animation:lvPop .5s ease-out .15s both}
@keyframes lvPop{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1)}}
@media(prefers-reduced-motion:reduce){.mcq button.right.pop,.lv-coins.pop{animation:none}}
/* r117：背包在手机上高度固定——换标签时顶上那排标签不再上下跳（原来设置页矮，整张卡往下沉 170 像素） */
@media(max-width:760px){#rideSheet .sheet-card{height:min(88%,760px)}}
.rd-more{margin-top:10px}
/* r117：问题山的话题标签：电脑上折行显示，不再横着藏一截 */
@media(min-width:761px){.tp-cats{flex-wrap:wrap;overflow:visible;-webkit-mask-image:none;mask-image:none;padding-right:2px}}
.ar-rvh{margin-top:14px}
.ar-review .ar-rx{display:block;font-size:12.5px;color:var(--ink3);line-height:1.6;margin-top:2px}
.lv-mhint{display:block;font-size:12.5px;font-weight:400;color:var(--ink3);margin-top:2px}
.bk-master{background:#efe6fb;color:#5b3c8c}
