:root{--bg: #f5f1e8;--bg-deep: #ebe4d3;--ink: #1f1a14;--ink-soft: #5a4f3e;--ink-faint: #a99c83;--ocean: #d8d0bd;--land: #f0e8d4;--land-stroke: #b8ac90;--accent: #8a3c2b;--accent-soft: #c97f60;--shadow: 0 6px 22px rgba(35, 25, 10, .12);--tx-fast: .2s;--tx-mid: .4s;--tx-slow: .7s;--serif-zh: "Noto Serif SC", "Songti SC", "STSong", serif;--serif-en: "Cormorant Garamond", "Iowan Old Style", Georgia, serif}*{box-sizing:border-box}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}html,body{margin:0;padding:0;height:100%;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--ink);font-family:var(--serif-en),var(--serif-zh);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#app{display:grid;grid-template-rows:auto 1fr auto;height:100vh;height:100dvh;min-height:0}.topbar{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:14px 28px;border-bottom:1px solid var(--land-stroke);background:var(--bg);z-index:5}.topbar h1{margin:0;font-weight:500;display:flex;align-items:center;gap:12px}.topbar-logo{width:28px;height:28px;flex-shrink:0}.title-zh{font-family:var(--serif-zh);font-size:22px;letter-spacing:.08em}.title-en{font-family:var(--serif-en);font-size:16px;font-style:italic;color:var(--ink-soft);letter-spacing:.02em}.controls{display:flex;gap:10px;align-items:center;margin-left:auto}.topbar-utility{display:flex;align-items:center;gap:10px;flex:0 0 auto}.controls input[type=search]{width:220px;padding:6px 12px;border:1px solid var(--land-stroke);background:transparent;font-family:inherit;font-size:14px;color:var(--ink);outline:none;transition:border-color var(--tx-fast)}.controls input[type=search]:focus{border-color:var(--accent)}.school-select{padding:6px 28px 6px 10px;border:1px solid var(--land-stroke);background:transparent;font-family:var(--serif-zh);font-size:13px;color:var(--ink);cursor:pointer;outline:none;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M0 0L5 6L10 0Z' fill='%235a4f3e'/></svg>");background-repeat:no-repeat;background-position:right 10px center;transition:border-color var(--tx-fast)}.school-select:focus,.school-select:hover{border-color:var(--accent)}.toggle{display:flex;align-items:center;gap:6px;font-family:var(--serif-zh);font-size:14px;color:var(--ink-soft);cursor:pointer;-webkit-user-select:none;user-select:none}.lang-toggle{display:inline-flex;border:1px solid rgba(212,195,162,.35);border-radius:14px;overflow:hidden;background:#d4c3a20d}.lang-btn{background:transparent;border:none;font:inherit;font-size:12px;font-family:var(--serif-en);color:var(--ink-soft);padding:3px 10px;cursor:pointer;letter-spacing:.04em}.lang-btn[aria-pressed=true]{background:var(--accent);color:var(--bg)}.lang-btn:not([aria-pressed=true]):hover{color:var(--ink);background:#d4c3a226}.donate-btn{background:transparent;border:1px solid rgba(212,195,162,.35);border-radius:50%;width:28px;height:28px;font-size:14px;line-height:1;cursor:pointer;color:var(--ink-soft);display:flex;align-items:center;justify-content:center;padding:0;transition:transform .18s ease,border-color .18s ease,color .18s ease}.donate-btn:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.donate-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease;pointer-events:none}.donate-modal:not([hidden]){pointer-events:auto}.donate-modal.visible{opacity:1}.donate-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#14100a8c;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.donate-card{position:relative;background:var(--bg);border:1px solid var(--land-stroke);border-radius:8px;box-shadow:0 24px 60px #00000059;padding:28px 32px 24px;max-width:340px;width:calc(100% - 32px);text-align:center;transform:translateY(8px) scale(.98);transition:transform .25s cubic-bezier(.16,1,.3,1)}.donate-modal.visible .donate-card{transform:translateY(0) scale(1)}.donate-close{position:absolute;top:8px;right:12px;background:transparent;border:none;font-size:22px;line-height:1;color:var(--ink-faint);cursor:pointer}.donate-close:hover{color:var(--ink)}.donate-card h3{font-family:var(--serif-zh);font-size:16px;margin:0 0 4px;color:var(--ink)}.donate-sub{margin:0 0 18px;font-size:12px;color:var(--ink-faint);font-family:var(--serif-en);font-style:italic}.donate-methods{display:flex;justify-content:center;gap:18px;margin-bottom:14px}.donate-method{margin:0;display:flex;flex-direction:column;align-items:center;gap:6px}.donate-method img{width:200px;height:200px;object-fit:contain;background:#fff;border:1px solid rgba(212,195,162,.4);border-radius:4px;padding:6px}.donate-method figcaption{font-size:12px;color:var(--ink-soft)}.donate-footer{margin:8px 0 0;font-size:11px;color:var(--ink-faint)}.stage{position:relative;overflow:hidden;min-height:0}#map-root{position:relative;width:100%;height:100%;min-height:0}#map-root svg{display:block;width:100%;height:100%;touch-action:none;user-select:none;-webkit-user-select:none}.map-status{position:absolute;top:50%;left:50%;z-index:9;display:flex;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:9px 14px;transform:translate(-50%,-50%);border:1px solid var(--land-stroke);border-radius:4px;background:#f5f1e8f0;box-shadow:var(--shadow);color:var(--ink-soft);font-family:var(--serif-zh);font-size:13px;line-height:1.4;text-align:center;pointer-events:none}.map-status[hidden]{display:none}.map-status.is-error{border-color:#8a3c2b59;color:var(--accent);pointer-events:auto}.map-retry{flex:0 0 auto;padding:3px 10px;border:1px solid currentColor;border-radius:3px;background:transparent;color:inherit;font:inherit;font-size:12px;cursor:pointer}.map-retry:hover{background:#8a3c2b14}.map-era{position:absolute;top:22px;left:26px;z-index:7;display:flex;align-items:baseline;gap:8px;pointer-events:none;color:var(--ink-soft)}.map-era-kicker{font-family:var(--serif-en);font-size:9px;letter-spacing:.2em;color:var(--ink-faint);text-transform:uppercase}.map-era strong{font-family:var(--serif-zh);font-size:16px;font-weight:500;letter-spacing:.12em}.map-tools{position:absolute;top:16px;right:24px;z-index:7;display:flex;align-items:center;gap:4px;padding:4px;border:1px solid rgba(184,172,144,.5);border-radius:999px;background:#f5f1e8e0;box-shadow:0 5px 22px #23190a14;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.map-tools .toggle{min-height:32px;gap:6px;padding:0 10px;border-radius:999px;font-size:12px;color:var(--ink-soft);transition:background var(--tx-fast),color var(--tx-fast)}.map-tools .toggle:hover,.map-tools .toggle:has(input:checked){background:#8a3c2b17;color:var(--ink)}.map-tools .toggle input,.map-tools .lang-btn,.map-tools .donate-btn{accent-color:var(--accent)}.map-reset{min-height:32px;padding:0 12px;border:0;border-radius:999px;background:var(--ink);color:var(--bg);font:inherit;font-family:var(--serif-zh);font-size:12px;cursor:pointer}.map-reset:hover{background:var(--accent)}.map-reset[hidden]{display:none}.map-legend{position:absolute;left:26px;bottom:18px;z-index:7;display:flex;flex-wrap:wrap;gap:6px 14px;padding:6px 10px;border-radius:999px;background:#f5f1e894;color:var(--ink-soft);font-family:var(--serif-zh);font-size:10.5px;line-height:1;pointer-events:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.legend-item{display:inline-flex;align-items:center;gap:6px}.legend-swatch,.legend-size{display:inline-block;flex:0 0 auto;border-radius:50%;background:var(--accent)}.legend-swatch{width:8px;height:8px}.legend-size{width:11px;height:11px;background:var(--land-stroke)}.ocean{fill:var(--ocean)}.land{fill:var(--land);stroke:var(--land-stroke);stroke-width:.5;stroke-linejoin:round}.graticule{fill:none;stroke:var(--ink-faint);stroke-width:.3;stroke-opacity:.4}#map-root svg{cursor:grab}#map-root svg:active{cursor:grabbing}.lineage{fill:none;stroke:var(--ink-soft);stroke-width:.7;stroke-linecap:round;pointer-events:none;transition:opacity var(--tx-mid),stroke var(--tx-fast),stroke-width var(--tx-fast)}.lineage-teacher{stroke:#6b4a2a;stroke-width:.9}.lineage.focused{stroke:var(--accent);stroke-width:1.5}.lineage.focused.lineage-teacher{stroke:var(--accent);stroke-width:1.8}.spoke{stroke:var(--ink-faint);stroke-width:.5;stroke-dasharray:1.5 1.5;pointer-events:none;transition:opacity var(--tx-mid)}.anchor-dot{fill:var(--ink-faint);opacity:.55;pointer-events:none}.philosopher{cursor:pointer;pointer-events:none;transition:opacity var(--tx-mid),transform var(--tx-mid),stroke-width var(--tx-fast)}.philosopher-hit{cursor:pointer;pointer-events:all}.philosopher.dim{opacity:.08;pointer-events:none}.philosopher.active{opacity:1}.philosopher:hover{stroke:var(--ink);stroke-width:2}.philosopher.selected{stroke:var(--accent);stroke-width:2.5}.philosopher-label{font-family:var(--serif-zh);font-size:11px;fill:var(--ink);pointer-events:none;paint-order:stroke;stroke:var(--bg);stroke-width:3;stroke-linejoin:round;opacity:0;transition:opacity var(--tx-mid)}.philosopher-label.visible{opacity:1}.cluster-label{font-family:var(--serif-zh);font-size:11px;font-weight:500;fill:var(--ink);letter-spacing:.04em;pointer-events:none;paint-order:stroke;stroke:var(--bg);stroke-width:4px;stroke-linejoin:round;opacity:0;transition:opacity var(--tx-fast)}.cluster-label.visible{opacity:1}body.record-mode{background:#0a0907;overflow:hidden}body.record-mode #app{display:block;width:56.25vh;max-width:100vw;height:100vh;margin:0 auto;border-left:1px solid #1a1814;border-right:1px solid #1a1814;background:var(--bg);position:relative}body.record-mode .stage{height:100%;width:100%}body.record-mode .topbar,body.record-mode .timeline-bar,body.record-mode #sidebar,body.record-mode #tooltip,body.record-mode .anchors-group,body.record-mode .spokes-group{display:none!important}body.record-mode .stage,body.record-mode #map-root{height:100%}body.record-mode .cinematic-caption{top:10vh}body.record-mode .caption-eyebrow{font-size:13px;letter-spacing:.4em}body.record-mode .caption-rule-side{width:52px}body.record-mode .caption-note{font-size:30px;letter-spacing:.16em}body.record-mode .caption-rule-bottom{height:1.5px}body.record-mode .philosopher{stroke-width:1.4!important}body.record-mode .philosopher-label{font-size:16px!important;font-weight:500}body.record-mode #map-root svg{cursor:default}body.record-mode .stage:after{content:"● REC";position:absolute;top:18px;right:18px;font-family:var(--serif-en);font-size:11px;letter-spacing:.2em;color:#c4413c;opacity:.7;pointer-events:none;animation:rec-blink 1.6s ease-in-out infinite}@keyframes rec-blink{0%,to{opacity:.85}50%{opacity:.4}}body.record-mode .stage:before{content:attr(data-year);position:absolute;bottom:8vh;left:50%;transform:translate(-50%);font-family:var(--serif-en);font-size:14px;letter-spacing:.3em;color:var(--ink-soft);pointer-events:none;z-index:5}.cinematic-caption{position:absolute;top:32px;left:50%;transform:translate(-50%);text-align:center;pointer-events:none;z-index:6;font-family:var(--serif-zh);color:var(--ink);opacity:0;transition:opacity .28s ease}.cinematic-caption.visible{opacity:1}.caption-eyebrow-row{display:flex;align-items:center;justify-content:center;gap:14px}.caption-rule-side{display:block;width:36px;height:1px;background:linear-gradient(to right,transparent,var(--ink-soft) 50%,transparent);transform:scaleX(0);transform-origin:right center;transition:transform .6s cubic-bezier(.16,1,.3,1) 0ms}.caption-rule-side.caption-rule-right{transform-origin:left center}.cinematic-caption.visible .caption-rule-side{transform:scaleX(1)}.caption-eyebrow{font-family:var(--serif-en);font-size:11px;letter-spacing:.32em;color:var(--ink-soft);text-transform:uppercase;white-space:nowrap;opacity:0;transform:translateY(-2px);transition:opacity .4s ease .1s,transform .4s cubic-bezier(.16,1,.3,1) .1s}.cinematic-caption.visible .caption-eyebrow{opacity:1;transform:translateY(0)}.caption-note{margin-top:10px;font-size:22px;font-weight:500;letter-spacing:.12em;line-height:1.3;color:var(--ink);text-shadow:0 1px 12px rgba(245,241,232,.9);opacity:0;transform:translateY(8px) scale(.96);transition:opacity .6s cubic-bezier(.16,1,.3,1) .24s,transform .6s cubic-bezier(.16,1,.3,1) .24s}.cinematic-caption.visible .caption-note{opacity:1;transform:translateY(0) scale(1)}.caption-rule-bottom{margin:12px auto 0;width:0;height:1px;background:linear-gradient(to right,transparent,var(--ink-soft) 30%,var(--ink-soft) 70%,transparent);transition:width .7s cubic-bezier(.16,1,.3,1) .48s}.cinematic-caption.visible .caption-rule-bottom{width:110%}.cinematic-caption:before{content:"";position:absolute;top:-18px;right:-36px;bottom:-18px;left:-36px;background:radial-gradient(ellipse at center,#f5f1e8b3,#f5f1e800 75%);pointer-events:none;z-index:-1;opacity:0;transition:opacity .4s ease .1s}.cinematic-caption.visible:before{opacity:1}.tooltip{position:absolute;pointer-events:none;background:var(--bg);border:1px solid var(--land-stroke);box-shadow:var(--shadow);padding:12px 14px;max-width:280px;font-size:13px;line-height:1.5;opacity:0;transition:opacity var(--tx-fast);z-index:10}.tooltip.visible{opacity:1}.tooltip .tt-name{font-family:var(--serif-zh);font-size:16px;font-weight:500;color:var(--ink)}.tooltip .tt-name-en{font-family:var(--serif-en);font-size:13px;font-style:italic;color:var(--ink-soft);margin-left:6px}.tooltip .tt-meta{margin-top:4px;color:var(--ink-soft);font-size:12px}.tooltip .tt-section{margin-top:8px;font-family:var(--serif-zh)}.tooltip .tt-section-label{font-size:11px;color:var(--ink-faint);letter-spacing:.1em;text-transform:uppercase;margin-bottom:2px}.tooltip ul{margin:0;padding-left:16px}.tooltip li{margin:1px 0}.sidebar{position:absolute;top:0;right:0;bottom:0;width:380px;background:var(--bg);border-left:1px solid var(--land-stroke);box-shadow:-4px 0 16px #23190a0f;padding:24px 26px;overflow-y:auto;transform:translate(100%);transition:transform var(--tx-slow) cubic-bezier(.2,.8,.2,1);z-index:8}.sidebar:not(.collapsed){transform:translate(0)}.sheet-grabber{display:none}.sidebar .close-btn{position:absolute;top:14px;right:18px;background:none;border:none;font-size:20px;color:var(--ink-soft);cursor:pointer;padding:4px 8px}.sidebar .sb-name{font-family:var(--serif-zh);font-size:26px;font-weight:500;margin:0}.sidebar .sb-name-en{font-family:var(--serif-en);font-style:italic;color:var(--ink-soft);font-size:16px;margin-top:2px;display:block}.sidebar .sb-meta{color:var(--ink-soft);font-size:13px;margin:6px 0 16px;font-family:var(--serif-zh)}.sidebar h3{font-family:var(--serif-zh);font-size:13px;letter-spacing:.12em;color:var(--ink-faint);text-transform:uppercase;margin:18px 0 6px;font-weight:500}.sidebar p,.sidebar li{font-family:var(--serif-zh);font-size:14px;line-height:1.7;color:var(--ink)}.sidebar ul{margin:0;padding-left:18px}.sidebar .work-year{color:var(--ink-faint);font-family:var(--serif-en);font-size:12px;margin-left:6px}.work-download{display:inline-block;font-size:11px;color:var(--accent);margin-left:6px;padding:1px 6px;border:1px solid rgba(138,60,43,.25);border-radius:3px;text-decoration:none;white-space:nowrap;vertical-align:1px}.work-download:hover{background:#8a3c2b14;border-color:var(--accent)}.timeline-bar{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:18px;padding:16px 28px 18px;border-top:1px solid var(--land-stroke);background:var(--bg)}.play-btn{width:36px;height:36px;border:1px solid var(--land-stroke);background:transparent;color:var(--ink);font-size:14px;cursor:pointer;border-radius:50%;transition:background var(--tx-fast),color var(--tx-fast)}.play-btn:hover{background:var(--accent);color:var(--bg);border-color:var(--accent)}.play-btn.playing:before{content:"⏸"}.play-btn:not(.playing):before{content:"▶"}.play-btn:before{display:inline-block}.play-btn{font-size:0}.play-btn:before{font-size:14px}.timeline-wrap{position:relative;padding-top:10px}.speed-select{background:#d4c3a20a;border:1px solid rgba(212,195,162,.18);color:var(--ink);font:inherit;font-size:12px;padding:4px 6px;border-radius:4px;cursor:pointer;width:auto}.speed-select:hover{border-color:#d4c3a266}.loop-band{position:absolute;top:12px;height:4px;background:#d4c3a238;pointer-events:none;border-radius:2px;z-index:0}.loop-handle{position:absolute;top:0;width:14px;height:10px;background:transparent;border:none;padding:0;cursor:ew-resize;z-index:3;transform:translate(-50%);touch-action:none}.loop-handle:before{content:"";display:block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:8px solid var(--accent);margin:0 auto;opacity:.85;transition:opacity .15s ease}.loop-handle:hover:before,.loop-handle:focus:before{opacity:1}#timeline{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;background:var(--land-stroke);outline:none;cursor:pointer}#timeline::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);box-shadow:var(--shadow);cursor:grab}#timeline::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);cursor:grab}.timeline-ticks{position:absolute;top:18px;left:0;right:0;height:16px;font-family:var(--serif-en);font-size:10px;color:var(--ink-faint);display:flex;justify-content:space-between;pointer-events:none}.year-label{font-family:var(--serif-zh);font-size:14px;color:var(--ink);min-width:90px;text-align:right}.chat-panel{margin-top:24px;padding-top:18px;border-top:1px solid var(--land-stroke);display:flex;flex-direction:column;gap:10px}.chat-header{display:flex;align-items:center;justify-content:space-between;font-family:var(--serif-zh);font-size:14px;color:var(--ink-soft)}.chat-settings-toggle{background:transparent;border:1px solid rgba(212,195,162,.18);color:var(--ink-soft);width:26px;height:26px;border-radius:50%;cursor:pointer;font-size:13px;line-height:1}.chat-settings-toggle:hover{border-color:var(--accent);color:var(--accent)}.chat-settings{background:#d4c3a214;border:1px solid rgba(212,195,162,.25);border-radius:6px;padding:12px}.chat-settings-form{display:flex;flex-direction:column;gap:8px}.chat-field{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--ink-soft)}.chat-field span{font-weight:500}.chat-field input,.chat-field select{background:var(--bg);border:1px solid rgba(212,195,162,.4);color:var(--ink);font:inherit;font-size:13px;padding:5px 8px;border-radius:4px;outline:none}.chat-field input:focus,.chat-field select:focus{border-color:var(--accent)}.chat-settings-actions{display:flex;gap:8px;margin-top:4px}.chat-settings-save,.chat-settings-clear{border:1px solid rgba(212,195,162,.4);background:var(--bg);color:var(--ink);font:inherit;font-size:13px;padding:5px 12px;border-radius:4px;cursor:pointer}.chat-settings-save{background:var(--accent);color:var(--bg);border-color:var(--accent)}.chat-settings-save:hover{background:var(--accent-soft);border-color:var(--accent-soft)}.chat-settings-clear:hover{border-color:var(--ink-soft)}.chat-privacy-hint{font-size:11px;color:var(--ink-faint);line-height:1.5;margin:4px 0 0}.chat-privacy-hint a{color:var(--accent)}.chat-error{font-size:12px;color:var(--accent);background:#8a3c2b14;border:1px solid rgba(138,60,43,.25);border-radius:4px;padding:6px 8px}.chat-messages{display:flex;flex-direction:column;gap:8px;max-height:360px;overflow-y:auto;padding:4px 2px}.chat-msg{display:flex}.chat-msg-user{justify-content:flex-end}.chat-msg-assistant{justify-content:flex-start}.chat-bubble{max-width:85%;font-size:13.5px;line-height:1.65;padding:8px 12px;border-radius:10px;white-space:pre-wrap;word-wrap:break-word}.chat-msg-user .chat-bubble{background:var(--accent);color:var(--bg);border-bottom-right-radius:2px}.chat-msg-assistant .chat-bubble{background:#d4c3a22e;color:var(--ink);border-bottom-left-radius:2px}.chat-bubble.is-streaming:after{content:"▍";margin-left:2px;animation:chat-cursor-blink 1s steps(2) infinite;color:var(--ink-faint)}@keyframes chat-cursor-blink{50%{opacity:0}}.chat-input-row{display:flex;gap:6px;align-items:flex-end}.chat-textarea{flex:1;resize:none;background:var(--bg);border:1px solid rgba(212,195,162,.4);color:var(--ink);font:inherit;font-size:13px;padding:8px 10px;border-radius:6px;outline:none;font-family:var(--serif-zh)}.chat-textarea:focus{border-color:var(--accent)}.chat-textarea:disabled{opacity:.6}.chat-send-btn{width:34px;height:34px;border:none;border-radius:50%;background:var(--accent);color:var(--bg);font-size:16px;cursor:pointer;flex-shrink:0}.chat-send-btn:hover{background:var(--accent-soft)}.chat-send-btn.is-stop{background:var(--ink-soft);font-size:12px}@media (min-width: 1280px){.stage{display:flex}#map-root{flex:1 1 auto;min-width:0}.sidebar{position:relative;top:auto;right:auto;bottom:auto;flex:0 0 380px;width:380px;transform:none;transition:flex-basis var(--tx-mid) cubic-bezier(.2,.8,.2,1),width var(--tx-mid) cubic-bezier(.2,.8,.2,1)}.sidebar.collapsed{flex-basis:0;width:0;padding:0;border-left:0;overflow:hidden}.sidebar:not(.collapsed){flex-basis:380px;width:380px;border-left:1px solid var(--land-stroke);overflow-y:auto;transform:none}}@media (max-width: 1100px){.topbar{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"title utility" "controls controls";gap:10px 14px;padding:12px 18px}.topbar h1{grid-area:title;min-width:0}.topbar-utility{grid-area:utility}.controls{grid-area:controls;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:10px;width:100%;max-width:640px;margin:0;justify-self:end}.controls input[type=search],.school-select{width:100%;min-width:0;height:36px}.controls input[type=search]{padding-inline:10px}.title-en{font-size:14px}}@media (max-width: 900px){.sidebar{top:auto;right:auto;bottom:0;left:50%;width:min(100%,680px);max-height:78%;height:auto;padding:18px 20px max(24px,env(safe-area-inset-bottom));border-top:1px solid var(--land-stroke);border-left:0;border-radius:18px 18px 0 0;box-shadow:0 -14px 40px #23190a29;transform:translate(-50%,calc(100% + 24px));transition:transform .42s cubic-bezier(.2,.8,.2,1);z-index:9}.sidebar:not(.collapsed){transform:translate(-50%)}.sheet-grabber{display:block;width:36px;height:4px;margin:-5px auto 13px;border-radius:999px;background:#5a4f3e3d}.sidebar .close-btn{top:10px;right:12px;width:40px;height:40px;padding:0;font-size:24px}.map-era{top:14px;left:14px}.map-tools{top:10px;right:10px}.map-legend{left:12px;bottom:10px}.chat-messages{max-height:34vh}.chat-textarea,.chat-field input,.chat-field select{font-size:16px}body.record-mode .map-era,body.record-mode .map-tools,body.record-mode .map-legend{display:none!important}}@media (max-width: 760px){#app{grid-template-rows:auto minmax(0,1fr) auto}.topbar{gap:8px;padding:max(8px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) 8px max(12px,env(safe-area-inset-left))}.topbar h1{gap:8px}.topbar-logo{width:24px;height:24px}.title-zh{font-size:18px;letter-spacing:.05em;white-space:nowrap}.title-en{display:none}.topbar-utility{gap:8px}.controls input[type=search],.school-select{height:40px;font-size:16px}.school-select{padding:5px 24px 5px 8px;background-position:right 8px center}.lang-btn{padding-inline:10px}.map-tools .toggle,.map-reset{min-height:40px}.map-tools .toggle input,.controls .toggle input{width:16px;height:16px}.lang-toggle{min-height:40px}.lang-btn{min-height:40px;padding-inline:10px}.donate-btn{width:40px;height:40px}.play-btn{width:44px;height:44px}#timeline::-webkit-slider-thumb{width:24px;height:24px}#timeline::-moz-range-thumb{width:24px;height:24px}.loop-handle{top:-7px;width:32px;height:24px}.loop-handle:before{border-left-width:7px;border-right-width:7px;border-top-width:10px}.chat-settings-toggle,.chat-send-btn{width:40px;height:40px}.timeline-bar{grid-template-columns:auto auto minmax(0,1fr) auto;gap:8px;padding:8px max(12px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}.speed-select{font-size:12px;padding-inline:4px}.timeline-wrap{min-width:0;padding-top:9px}#timeline{min-width:0}.timeline-ticks{top:18px;font-size:9px}.timeline-ticks span:nth-child(2n){display:none}.year-label{min-width:0;font-size:12px;white-space:nowrap}.map-era strong{font-size:14px}.map-legend{gap:4px 10px;padding:5px 8px;font-size:9.5px}.cinematic-caption{top:max(12px,env(safe-area-inset-top));width:calc(100% - 24px)}.caption-eyebrow-row{gap:8px}.caption-rule-side{width:22px}.caption-note{margin-top:7px;font-size:16px;letter-spacing:.08em;line-height:1.35}.caption-rule-bottom{margin-top:9px}.tooltip{max-width:min(280px,calc(100vw - 24px))}.donate-card{padding:24px 22px 20px}.donate-method img{width:min(200px,70vw);height:auto;aspect-ratio:1}body.record-mode #app{height:100dvh}body.record-mode .cinematic-caption{top:10vh;width:auto}}@media (max-width: 520px){.topbar{padding-inline:max(10px,env(safe-area-inset-left)) max(10px,env(safe-area-inset-right))}.map-era{display:none}.map-tools .toggle{font-size:11px;padding-inline:8px}.sidebar{width:100%;padding-inline:18px;border-radius:16px 16px 0 0}.sidebar .sb-name{font-size:23px;padding-right:36px}.sidebar .sb-meta{font-size:12px}.map-status{max-width:calc(100% - 20px);padding:8px 10px;font-size:12px}.caption-rule-side{width:14px}}@media (pointer: coarse){.map-tools .toggle,.map-reset{min-height:40px}.map-tools .toggle input,.controls .toggle input{width:16px;height:16px}.lang-toggle{min-height:40px}.lang-btn{min-height:40px;padding-inline:12px}.donate-btn{width:40px;height:40px}.play-btn{width:44px;height:44px}#timeline::-webkit-slider-thumb{width:24px;height:24px}#timeline::-moz-range-thumb{width:24px;height:24px}.loop-handle{top:-7px;width:32px;height:24px}.loop-handle:before{border-left-width:7px;border-right-width:7px;border-top-width:10px}.chat-settings-toggle,.chat-send-btn{width:40px;height:40px}}@media (max-width: 900px) and (max-height: 560px){.topbar{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"title controls utility";gap:8px;padding-top:max(6px,env(safe-area-inset-top));padding-bottom:6px}.topbar h1{grid-area:title}.title-en{display:none}.title-zh{font-size:16px}.controls{grid-area:controls;display:flex;flex-wrap:nowrap;gap:6px;width:auto;max-width:none;min-width:0;overflow-x:auto;scrollbar-width:none}.controls::-webkit-scrollbar{display:none}.controls input[type=search]{flex:1 1 130px;width:auto;min-width:100px}.school-select{flex:0 1 150px;width:auto;min-width:100px;max-width:170px}.topbar-utility{grid-area:utility}.map-era{display:none}.map-tools{top:8px;right:8px}.map-legend{left:8px;bottom:6px}.sidebar{top:0;right:0;bottom:0;left:auto;width:min(420px,72vw);max-height:none;height:100%;padding:20px 20px max(24px,env(safe-area-inset-bottom));border-top:0;border-left:1px solid var(--land-stroke);border-radius:0;box-shadow:-4px 0 16px #23190a1f;transform:translate(100%)}.sidebar:not(.collapsed){transform:translate(0)}.sheet-grabber{display:none}.timeline-bar{padding-top:5px;padding-bottom:max(6px,env(safe-area-inset-bottom))}}@media (hover: none){.tooltip{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}
