:root{--paper: #f4ecdb;--paper-2: #ebe0c9;--ink: #241e19;--ink-2: #5b4f43;--ink-3: #8a7c6c;--zhu: #b0392b;--zhu-soft: rgba(176, 57, 43, .12);--line: rgba(60, 45, 30, .14);--glass: rgba(244, 236, 219, .86);--top-fg: #fffaf0;--kai: "Chaojing Kai", "LXGW WenKai TC", "Kaiti TC", "BiauKai", "STKaiti", serif;--ui: -apple-system, BlinkMacSystemFont, "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:#2b2a26;color:var(--ink);font-family:var(--ui);overflow:hidden;-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit}a{color:var(--zhu);text-underline-offset:3px}#scene{position:fixed;inset:0;width:100vw;height:100vh;display:block}.no-webgl body,.no-webgl #scene{background:linear-gradient(#8fa6c9,#f3c9a4)}#app{position:fixed;inset:0;display:grid;grid-template-rows:auto 1fr auto;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom);pointer-events:none}#app>*{pointer-events:auto}#app>.prompt-wrap{pointer-events:none}html[data-mode=walk] .panel{display:none}#app{grid-template-rows:auto 1fr auto auto}.panel{grid-row:2}.prompt-wrap{grid-row:3;display:grid;justify-items:center;gap:8px;padding:0 16px 10px}.walk-hint{margin:0;font-size:12.5px;color:#fffaf0;text-shadow:0 1px 6px rgba(0,0,0,.5);transition:opacity 1.2s;letter-spacing:1px}.walk-hint.fade{opacity:0}html:not([data-mode=walk]) .prompt-wrap{display:none}@media (hover: none){.kbd-hint{display:none}}.prompt{pointer-events:auto;border:0;cursor:pointer;padding:12px 22px;min-height:48px;border-radius:999px;background:var(--paper);color:var(--ink);font-family:var(--kai);font-size:17px;letter-spacing:3px;box-shadow:0 10px 30px #0000004d,inset 0 0 0 1px #b0392b59;animation:rise .35s ease-out}.prompt:after{content:" ›";color:var(--zhu)}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}.panel{position:relative}.panel-close{position:sticky;top:0;float:right;margin:-10px -8px 0 8px;z-index:2;width:36px;height:36px;border-radius:50%;border:0;cursor:pointer;background:#241e1914;color:var(--ink-2);font-size:15px}#scene{touch-action:none}.top{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 6px;color:var(--top-fg);text-shadow:0 1px 8px rgba(0,0,0,.35)}.brand{background:none;border:0;padding:4px 2px;cursor:pointer;font-family:var(--kai);font-size:24px;letter-spacing:6px}.top-right{display:flex;align-items:center;gap:8px}.presence{font-size:13px;padding:5px 11px;border-radius:999px;background:#1e181252;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:inline-flex;align-items:center;gap:7px}.presence:before{content:"";width:7px;height:7px;border-radius:50%;background:#ffc873;box-shadow:0 0 8px #ffc873}.icon-btn{width:40px;height:40px;border-radius:50%;border:0;cursor:pointer;display:grid;place-items:center;background:#1e181247;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.icon-btn[aria-pressed=true]{background:#ffc87366}@media (max-width: 480px){.top{padding:12px 10px 6px;gap:6px}.brand{font-size:20px;letter-spacing:3px;white-space:nowrap;flex:none}.top-right{gap:4px}.icon-btn{width:34px;height:34px}.icon-btn svg{width:17px;height:17px}.presence{font-size:0;padding:5px 9px;gap:5px}.presence:after{content:attr(data-n) "人";font-size:12px}.map-label{font-size:10px;padding:2px 4px;letter-spacing:0}}.panel{align-self:end;justify-self:center;width:min(560px,calc(100vw - 24px));max-height:calc(100% - 8px);overflow:auto;overscroll-behavior:contain;margin:0 12px 10px;padding:22px 22px 18px;border-radius:18px;background:var(--glass);backdrop-filter:blur(14px) saturate(1.1);-webkit-backdrop-filter:blur(14px) saturate(1.1);box-shadow:0 18px 50px #140c0447,inset 0 0 0 1px #ffffff73;transition:opacity .5s,transform .5s}@media (min-width: 900px){.panel{justify-self:end;margin-right:4vw;align-self:center!important;max-height:calc(100% - 20px)}}.scenery .panel,.scenery .tabs{opacity:0;transform:translateY(16px);pointer-events:none}.eyebrow{margin:0 0 6px;font-size:13px;letter-spacing:2px;color:var(--ink-3);font-family:var(--kai)}.hint{color:var(--ink-3);font-size:13px;line-height:1.7;margin:12px 0 0}.view-title{font-family:var(--kai);font-weight:500;letter-spacing:4px;margin:0 0 14px}.log-title{margin-top:26px;padding-top:18px;border-top:1px solid var(--line);font-size:17px}.btn{border:0;cursor:pointer;border-radius:12px;padding:11px 18px;min-height:44px;background:var(--ink);color:var(--paper);font-size:15px;letter-spacing:1px;transition:transform .15s,background .2s}.btn:active{transform:scale(.97)}.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}.btn.big{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;padding:14px 18px;text-align:left}.btn-title{font-family:var(--kai);font-size:19px;letter-spacing:3px}.btn-sub{font-size:12.5px;opacity:.72;letter-spacing:.5px}.link{background:none;border:0;padding:4px 0;color:var(--zhu);cursor:pointer;font-size:14px}:focus-visible{outline:2px solid var(--zhu);outline-offset:3px}.verse{margin:4px 0 18px}.verse-text{margin:0;font-family:var(--kai);font-size:clamp(24px,6.4vw,32px);line-height:1.6;letter-spacing:3px;color:var(--ink)}.verse-src{margin-top:8px;font-size:13px;color:var(--ink-3)}.home-actions{display:grid;gap:10px}.copy-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px}.copy-where{font-family:var(--kai);font-size:15px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.copy-count{font-size:13px;color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}.copy-body{display:grid;grid-template-columns:1fr 44px;gap:12px;align-items:start}.copy-cell-wrap{grid-column:1;grid-row:1;position:relative;width:100%;aspect-ratio:1;max-width:420px;justify-self:center;background:#fbf6ea;border-radius:6px;box-shadow:inset 0 0 0 1px #b0392b40,0 2px 10px #3c281414}.copy-guide,.copy-ink{position:absolute;inset:0;touch-action:none}.copy-ink{cursor:crosshair}.copy-seal{position:absolute;right:8px;bottom:8px;width:30px;height:30px;border-radius:6px;display:grid;place-items:center;font-size:16px;background:var(--zhu);color:var(--paper);opacity:0;transform:scale(.6);transition:opacity .25s,transform .25s}.copy-seal.on{opacity:.9;transform:scale(1)}.copy-strip{writing-mode:vertical-rl;white-space:nowrap;grid-column:2;grid-row:1;height:0;min-height:100%;align-self:stretch;font-family:var(--kai);font-size:22px;line-height:1.6;letter-spacing:4px;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;color:#241e1947}.copy-strip::-webkit-scrollbar{display:none}.copy-strip .done{color:var(--ink)}.copy-strip .cur{color:var(--zhu)}.copy-actions{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:8px;margin-top:14px}.copy-hint{text-align:center}.read-head{display:flex;justify-content:space-between;align-items:center;color:var(--ink-3);font-size:13px}.read-stage{min-height:22vh;display:grid;align-content:center;padding:18px 4px;touch-action:pan-y;user-select:text}.read-text{margin:0;font-family:var(--kai);font-size:clamp(26px,7vw,36px);line-height:1.7;letter-spacing:4px;opacity:0;transform:translateY(6px)}.read-text.in{opacity:1;transform:none;transition:opacity .6s,transform .6s}.read-variant details{margin-top:14px;font-size:13.5px;color:var(--ink-2)}.read-variant summary{cursor:pointer;color:var(--zhu)}.read-actions{display:grid;grid-template-columns:56px 1fr 56px;gap:8px}.read-actions .btn{font-size:18px}.notes,.whole{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}.notes-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--kai);letter-spacing:2px}.note{padding:14px 0;border-bottom:1px dashed var(--line)}.note header{font-family:var(--kai);font-size:16px}.note blockquote{margin:8px 0;padding:6px 10px;background:var(--zhu-soft);border-radius:6px;font-family:var(--kai);font-size:14.5px;color:var(--ink-2)}.note-text{font-family:var(--kai);font-size:16px;line-height:1.95;margin:6px 0;letter-spacing:.5px;white-space:pre-wrap}.note footer{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:13px}.src-note{font-size:12.5px;color:var(--ink-3);margin-top:12px;line-height:1.7}.whole-by{color:var(--ink-3);font-size:13px;margin:4px 0 10px}.whole-body{font-family:var(--kai);font-size:19px;line-height:2.1;letter-spacing:2px}.whole-unit{cursor:pointer;border-radius:4px}.whole-unit:hover{background:var(--zhu-soft)}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px}.stats div{background:#ffffff73;border-radius:12px;padding:10px;text-align:center}.stats b{display:block;font-family:var(--kai);font-size:26px;font-weight:500}.stats span{font-size:12px;color:var(--ink-3)}.cal-head,.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}.cal-head span{font-size:12px;color:var(--ink-3);padding-bottom:4px}.cal-day{aspect-ratio:1;display:grid;place-items:center;border-radius:8px;font-size:13px;color:var(--ink-3)}.cal-day.today{box-shadow:inset 0 0 0 1px var(--zhu);color:var(--ink)}.cal-day.r{background:#241e1912}.cal-day.l1{background:#241e1938;color:var(--ink)}.cal-day.l2{background:#241e1973;color:var(--paper)}.cal-day.l3{background:#241e19c7;color:var(--paper)}.field{display:grid;gap:6px;margin:18px 0 10px;font-size:13px;color:var(--ink-2)}.field input{font:inherit;font-size:16px;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:#fff9;color:var(--ink)}.log-actions{display:flex;gap:8px;flex-wrap:wrap}.about{font-size:12px}.tabs{grid-row:4;justify-self:center;display:flex;gap:4px;padding:5px;margin:0 0 12px;border-radius:999px;background:#1e181261;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:opacity .5s,transform .5s}.tabs button{border:0;background:transparent;color:#f6efe2;cursor:pointer;padding:9px 16px;min-height:40px;border-radius:999px;font-family:var(--kai);font-size:15px;letter-spacing:2px}.tabs button[aria-current=page]{background:var(--paper);color:var(--ink)}@media (max-width: 480px){.tabs{gap:2px;padding:4px}.tabs button{padding:9px 12px;letter-spacing:1px}}dialog{border:0;padding:0;border-radius:18px;max-width:min(640px,calc(100vw - 24px));background:var(--paper);color:var(--ink);box-shadow:0 30px 80px #0006}dialog::backdrop{background:#14100c80;backdrop-filter:blur(3px)}.done-inner{padding:22px;display:grid;gap:10px}.done-title{margin:0;font-family:var(--kai);font-weight:500;letter-spacing:4px}.done-sub{margin:0;color:var(--ink-2);font-size:14px}.done-img{max-height:58vh;overflow:auto;border-radius:8px;background:var(--paper-2);display:grid;place-items:center;min-height:120px}.keepsake{width:100%;height:auto;display:block}.done-actions{display:grid;grid-template-columns:1.4fr 1fr;gap:8px}#toast{position:fixed;left:50%;top:70px;transform:translate(-50%,-10px);padding:9px 16px;border-radius:999px;background:#1e1812d1;color:#fff8ec;font-size:14px;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;z-index:10}#toast.on{opacity:1;transform:translate(-50%)}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.float-panel{position:fixed;top:64px;right:14px;z-index:6;width:min(360px,calc(100vw - 28px));max-height:calc(100vh - 150px);overflow:auto;padding:14px 16px;border-radius:16px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 16px 40px #140c044d,inset 0 0 0 1px #ffffff73;pointer-events:auto}.fp-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--kai);letter-spacing:2px}.fp-hint{margin:4px 0 8px}.fp-row{display:grid;gap:6px;margin:12px 0;font-size:13.5px;color:var(--ink-2)}.fp-row input[type=range]{width:100%;accent-color:var(--zhu)}.fp-row .sun-info{font-size:12px;line-height:1.5}.fp-row select{font:inherit;padding:8px 10px;border-radius:10px;border:1px solid var(--line);background:#fff9}#mapPanel{width:auto;max-width:calc(100vw - 28px);max-height:calc(100vh - 80px)}.map-img{position:relative;width:min(calc(min(100vh - 200px,760px) * var(--ar)),calc(100vw - 60px));margin:0 auto;border-radius:10px;overflow:hidden;cursor:crosshair;box-shadow:inset 0 0 0 1px #00000026}.map-img img{width:100%;height:100%;display:block;user-select:none}.map-wait{padding:40px 10px;text-align:center}.map-label{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;font:12px/1 var(--kai);letter-spacing:1px;color:#3a2a1e;cursor:pointer;padding:3px 6px;border:0;border-radius:6px;background:#fff8e8d1;box-shadow:0 1px 4px #00000040}.map-label.hall{background:#fae2aae6;font-weight:600}.map-label:hover,.map-label:focus-visible{background:#e8b23c;color:#2a1a0e}.me-dot{position:absolute;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:#ffcf4a;border:2px solid #5a3a12;box-shadow:0 0 0 4px #ffcf4a59;pointer-events:none;transition:left .25s linear,top .25s linear}#loading{position:fixed;inset:0;z-index:20;display:grid;place-items:center;background:linear-gradient(#2b3a4f,#6b5a45);color:#fff6e4;transition:opacity .9s ease}#loading.done{opacity:0;pointer-events:none}.ld-inner{text-align:center}.ld-title{margin:0;font-family:var(--kai);font-size:34px;letter-spacing:12px;padding-left:12px}.ld-sub{margin:10px 0 18px;font-size:13px;opacity:.8;letter-spacing:2px}.ld-bar{width:200px;height:4px;border-radius:4px;background:#fff3;overflow:hidden;margin:0 auto}.ld-bar span{display:block;height:100%;width:10%;background:#f0c860;transition:width .4s}
