@font-face{font-family:"Zhuque Fangsong (technical preview)";src:url(/assets/ZhuqueFangsong-subset-D5V4W6N6.woff2)format("woff2");font-style:normal;font-weight:400 700;font-display:swap}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-synthesis:none;text-rendering:optimizelegibility;--ink:#f3eee2;--muted:#c6c4b8;--accent:#d2ac72;--dark:#17201d;--scale:1;font-family:"Zhuque Fangsong (technical preview)",Songti SC,STSong,Noto Serif CJK SC,Source Han Serif SC,serif}*{box-sizing:border-box}html,body,#root{width:100%;min-width:320px;height:100%;margin:0;overflow:hidden}body{background:var(--dark);color:var(--ink)}button,input{font:inherit}button{color:inherit}.game-root{isolation:isolate;background:#1b2923;width:100%;height:100%;position:relative;overflow:hidden}.glyph-defs{position:absolute;top:0;left:0;overflow:visible}.stage{background:radial-gradient(at 52% 42%,#829078 0%,#5d7162 32%,#354b40 68%,#1c2a24 100%);position:absolute;inset:0;overflow:hidden}.pixi-host{position:absolute;inset:0}.pixi-host canvas{width:100%;height:100%;display:block}.scene-placeholder{color:#eeebda3d;pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.scene-placeholder span{letter-spacing:.12em;text-transform:uppercase;border:1px solid #eeebda2e;border-radius:99px;padding:9px 18px;font:11px/1.2 system-ui,sans-serif}.stage-fallback .scene-placeholder{display:none}.stage-glow{z-index:1;pointer-events:none;background:linear-gradient(#070e0b1f,#0000 23% 56%,#0a110e6e);position:absolute;inset:0}.letterbox{z-index:2;background:#17201d;height:clamp(12px,2.3vh,26px);position:absolute;left:0;right:0}.top-letterbox{top:0}.dialogue{z-index:4;color:#292b27;background:color-mix(in srgb, var(--dialog-color,#fbfbfb) 94%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%);--font-scale:1;border:1px solid #ffffff73;width:min(84vw,1540px);min-height:clamp(190px,24vh,275px);padding:clamp(22px,3vw,42px) clamp(28px,4vw,66px) clamp(30px,3.8vw,52px);position:absolute;bottom:clamp(24px,5.6vh,66px);left:50%;transform:translate(-50%);box-shadow:0 18px 80px #0000004d}.dialogue:before{content:"";background:#9b7b4c;width:4px;height:100%;position:absolute;top:0;left:0}.dialogue-meta{align-items:baseline;gap:14px;min-height:26px;margin:0 0 12px;display:flex}.speaker{color:#765c36;font-size:calc(15px * var(--font-scale));letter-spacing:.08em;font-weight:700}.unit-title{color:#76776f;letter-spacing:.08em;margin-left:auto;font:11px/1.2 system-ui,sans-serif}.page-content{max-height:19vh;font-size:calc(clamp(17px, 1.45vw, 24px) * var(--font-scale));letter-spacing:.025em;scrollbar-width:thin;line-height:1.9;overflow:auto}.page-content p{margin:0 0 .45em}.page-content p:last-child{margin-bottom:0}.page-content strong{font-weight:700}ruby{ruby-position:over}rt{color:#876b46;letter-spacing:0;font-family:system-ui,sans-serif;font-size:.48em}.math-inline{white-space:nowrap;max-width:100%;display:inline-block}.math-inline svg{width:100%;height:100%;overflow:visible}.math-missing{color:#9b563e;font-size:.85em}.blackboard{z-index:3;color:#f2eedc;text-shadow:0 1px 2px #00000073;pointer-events:none;flex-direction:column;justify-content:center;gap:14px;padding:1.6vh 2vw;font-size:clamp(24px,2.8vw,46px);display:flex;position:absolute;overflow:hidden}.board-equations,.board-figures{flex-direction:column;flex:1 1 0;justify-content:flex-end;gap:18px;min-width:0;min-height:0;display:flex}.board-figures{border-right:1px solid #f0e8d02e;padding-right:20px}.blackboard--split{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:stretch;gap:22px;display:grid}.blackboard-item{filter:drop-shadow(0 1px 2px #00000073);flex:1 1 0;place-items:center;width:100%;min-height:0;animation:.35s ease-out both chalk-in;display:grid}.blackboard-item:not(:last-child){opacity:.72}.board-block{place-items:center;display:grid;position:absolute;inset:0}.board-math svg{width:100%;height:100%;display:block}.location-card{z-index:5;text-align:center;background:#19251ec7;border-top:1px solid #e6d8b4b3;border-bottom:1px solid #e6d8b473;gap:7px;min-width:220px;padding:16px 28px 18px;animation:.42s ease-out both title-in;display:grid;position:absolute;top:11vh;left:50%;transform:translate(-50%)}.location-card span{color:var(--accent);letter-spacing:.24em;font:9px system-ui,sans-serif}.location-card b{color:#f3eee2;letter-spacing:.15em;font-size:clamp(19px,2vw,28px);font-weight:500}@keyframes chalk-in{0%{opacity:0;filter:blur(2px);transform:translateY(5px)}to{opacity:1;filter:blur();transform:translateY(0)}}.stage-click-target{z-index:3;cursor:pointer;background:0 0;border:0;width:100%;position:absolute;inset:4vh 0 34vh}.quick-controls{z-index:6;gap:5px;display:flex;position:absolute;bottom:clamp(15px,2.4vh,28px);right:max(4vw,50vw - 770px)}.quick-controls button{color:#eee9dc;cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#161f1b94;border:1px solid #ffffff29;border-radius:2px;width:36px;height:34px;font-size:17px;transition:background .18s,transform .18s}.quick-controls button:hover:not(:disabled){background:#967747cc;transform:translateY(-2px)}.quick-controls button:disabled{opacity:.4;cursor:default}.title-screen{z-index:5;background:linear-gradient(90deg,#0f1914b5,#0f191414);border-left:1px solid #e3ca9d85;width:min(560px,75vw);padding:clamp(25px,4vw,58px);animation:.7s ease-out both title-in;position:absolute;top:50%;left:clamp(7vw,14vw,260px);transform:translateY(-50%)}@keyframes title-in{0%{opacity:0;transform:translateY(calc(14px - 50%))}to{opacity:1;transform:translateY(-50%)}}.title-mark,.eyebrow{color:var(--accent);letter-spacing:.3em;font:11px/1.2 system-ui,sans-serif}.title-screen h1{letter-spacing:.16em;margin:22px 0 7px;font-size:clamp(46px,6.5vw,84px);font-weight:500;line-height:1.16}.title-screen p{color:#d1d0c5;letter-spacing:.12em;margin:0;font-size:15px}.start-button{cursor:pointer;letter-spacing:.14em;background:#1b2620a8;border:1px solid #d5b37abd;justify-content:space-between;align-items:center;width:210px;margin-top:46px;padding:13px 16px;transition:background .2s,color .2s;display:flex}.start-button:hover{color:#1a211b;background:var(--accent)}.start-button span{font:17px system-ui,sans-serif}.subtle-button,.text-button{color:#c6c4b8;letter-spacing:.08em;cursor:pointer;background:0 0;border:0;margin-top:14px;padding:6px 0;font-size:13px;display:block}.subtle-button:hover,.text-button:hover{color:var(--accent)}.version-note{color:#ede7d685;letter-spacing:.13em;margin-top:36px;font:10px system-ui,sans-serif}.load-warning{color:#ded9ca;background:#0a110d61;border-left:2px solid #cf9c60;gap:8px;max-width:380px;margin-top:34px;padding:15px;font-size:13px;line-height:1.7;display:grid}.load-warning strong{color:#e4bd81;font-weight:500}.load-warning code{color:#f2d5a6;font-size:12px}.footer-note{z-index:5;color:#eeebda6b;letter-spacing:.18em;font:9px system-ui,sans-serif;position:absolute;bottom:24px;right:30px}.overlay{z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#080d0aad;place-items:center;padding:20px;animation:.18s ease-out fade-in;display:grid;position:absolute;inset:0}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.panel-card{background:#202a24;border:1px solid #d8c09742;width:min(680px,94vw);max-height:86vh;padding:clamp(28px,5vw,54px);position:relative;overflow:auto;box-shadow:0 28px 120px #0006}.panel-card h2{letter-spacing:.08em;margin:12px 0 28px;font-size:32px;font-weight:500}.panel-close{color:#d9d4c5;cursor:pointer;background:0 0;border:0;font:28px/1 system-ui,sans-serif;position:absolute;top:16px;right:20px}.menu-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}.menu-grid button,.chapter-row{color:var(--ink);text-align:left;cursor:pointer;background:#ffffff08;border:1px solid #ffffff1f;padding:16px;transition:border-color .18s,background .18s}.menu-grid button:hover,.chapter-row:hover{background:#d2ac7214;border-color:#d2ac72a6}.panel-card label{color:#e4dfd2;justify-content:space-between;align-items:center;gap:20px;margin:20px 0;display:flex}.panel-card input[type=range]{width:52%;accent-color:var(--accent)}.panel-card .check-label{justify-content:flex-start}.panel-card input[type=checkbox]{accent-color:var(--accent)}.save-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}.save-slot{background:#ffffff05;border:1px solid #ffffff1c;min-width:0;padding:14px}.save-slot>span{color:var(--accent);letter-spacing:.12em;font:10px system-ui,sans-serif}.save-slot p{color:#c4c1b5;min-height:20px;font-size:12px}.save-slot div{gap:8px;display:flex}.save-slot button{cursor:pointer;background:0 0;border:1px solid #ffffff26;padding:6px 10px}.save-slot button:hover{border-color:var(--accent)}.log-list{max-height:55vh;padding-right:10px;overflow:auto}.log-list article{border-bottom:1px solid #ffffff17;padding:13px 2px}.log-list b{color:var(--accent);font-size:13px;font-weight:500}.log-list p{color:#e8e4d8;margin:6px 0 0;line-height:1.8}.chapter-row{justify-content:space-between;width:100%;margin:7px 0;display:flex}.chapter-row span,.muted{color:var(--muted);font-size:12px}.end-card{z-index:8;text-align:center;background:#0c130fdb;align-content:center;justify-items:center;display:grid;position:absolute;inset:0}.end-card>span{color:var(--accent);letter-spacing:.25em;font:10px system-ui,sans-serif}.end-card h2{letter-spacing:.12em;margin:20px;font-weight:400}.end-card button{cursor:pointer;background:0 0;border:1px solid #ffffff47;margin-top:15px;padding:10px 18px}body.hide-ui .dialogue,body.hide-ui .quick-controls,body.hide-ui .blackboard{opacity:0}html[data-reduced-motion=true] *,html[data-reduced-motion=true] :before,html[data-reduced-motion=true] :after{transition-duration:.01ms;animation-duration:.01ms;animation-iteration-count:1}.import-save input[type=file]{color:#d7d2c4;width:min(100%,240px);margin-left:14px;font:11px system-ui,sans-serif}@media (width<=700px){.title-screen{width:88vw;padding:24px;left:6vw}.title-screen h1{font-size:clamp(42px,12vw,70px)}.dialogue{width:94vw;min-height:210px;padding:20px 22px 28px;bottom:55px}.page-content{max-height:18vh;font-size:calc(17px * var(--font-scale))}.blackboard{width:92vw;height:34vh;top:5vh}.quick-controls{bottom:12px;right:3vw}.quick-controls button{width:32px;height:30px}.stage-click-target{bottom:35vh}.menu-grid,.save-grid{grid-template-columns:1fr}.footer-note{display:none}}.story-card{animation:.42s ease-out both title-in,.5s ease-in 2.1s both card-out}@keyframes card-out{to{opacity:0;transform:translate(-50%,-8px)}}.fx-shake .stage{animation:.45s ease-in-out both stage-shake}@keyframes stage-shake{20%{transform:translate(-9px)}40%{transform:translate(7px)}60%{transform:translate(-5px)}80%{transform:translate(3px)}}.fx-flash:after{z-index:6;content:"";pointer-events:none;background:#f7f2e4;animation:.6s ease-out both flash-out;position:absolute;inset:0}@keyframes flash-out{0%{opacity:.8}to{opacity:0}}.fx-blur .pixi-host{filter:blur(3px)saturate(.85);transition:filter .4s}.fx-vignette .stage-glow{box-shadow:inset 0 0 220px 60px #080e0bb8}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto;transition-duration:.01ms;animation-duration:.01ms;animation-iteration-count:1}}.intermission{z-index:20;cursor:pointer;background:radial-gradient(at 50% 42%,#17201de0,#0a100ef5);place-items:center;animation:.5s ease-out both intermission-in;display:grid;position:absolute;inset:0}.intermission-card{text-align:center;background:linear-gradient(#111a169e,#111a1633);border-top:1px solid #e3ca9d8c;border-bottom:1px solid #e3ca9d59;justify-items:center;gap:10px;min-width:min(520px,80vw);padding:clamp(28px,4vw,56px) clamp(32px,5vw,72px);display:grid}.intermission-card h2{letter-spacing:.4em;text-indent:.4em;margin:0;font-size:clamp(30px,4vw,52px);font-weight:500}.intermission-next{color:var(--accent);letter-spacing:.14em;margin:6px 0 0;font-size:clamp(16px,1.6vw,22px)}.intermission-card small{color:#eee9dc8c;letter-spacing:.16em;margin-top:10px;font:11px system-ui,sans-serif}@keyframes intermission-in{0%{opacity:0}to{opacity:1}}.blackboard-item{position:relative}.blackboard .page-content{max-height:none;position:absolute;inset:0;overflow:visible}
