html,body{touch-action:none;background:#f0f2ec;height:100%;margin:0;overflow:hidden}body{color:#3d4943;-webkit-user-select:none;user-select:none;font-family:system-ui,-apple-system,PingFang SC,Microsoft YaHei,Noto Sans CJK SC,Source Han Sans SC,sans-serif}#app{position:fixed;inset:0}#app canvas{display:block}#app .world-canvas{touch-action:none;outline:none;width:100%;height:100%}.camera-controls{left:16px;bottom:calc(74px + env(safe-area-inset-bottom));z-index:2;background:#f7f8f4;border:1px solid #c9cec4;border-radius:8px;align-items:center;gap:3px;padding:5px;display:flex;position:fixed;box-shadow:0 2px #dfe2db}.camera-controls button{font:inherit;color:#3d4943;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;min-height:32px;padding:6px 9px;font-size:12px}.camera-controls button:hover{background:#eceee8}.camera-controls button[aria-pressed=true]{color:#f7f8f4;background:#3d4943}.camera-controls output{color:#77817a;text-align:center;min-width:33px;font-size:11px}.icon{flex:none;display:block}.glyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.glyph .swatch{width:10px;height:10px;display:inline-block}.hud{z-index:2;flex-direction:column;gap:8px;max-width:calc(50vw - 24px);font-size:12px;display:flex;position:fixed;top:12px}.hud.left{align-items:flex-start;left:16px}.hud.right{cursor:pointer;align-items:flex-end;transition:right .24s cubic-bezier(.2,.8,.2,1);right:16px}.panel-open .hud.right{right:376px}.card{background:#f7f8f4;border:1px solid #c9cec4;border-radius:8px;align-items:stretch;display:flex;overflow:hidden;box-shadow:0 2px #dfe2db}.card .cell{white-space:nowrap;align-items:center;gap:10px;padding:7px 14px;display:flex}.card .cell+.cell{border-left:1px solid #e0e3db}.hud .stack{flex-direction:column;line-height:1.2;display:flex}.hud .stack b{font-size:15px;font-weight:700}.hud .stack small{color:#77817a;font-size:11px}.hud .stack .of{color:#8a938c;font-size:12px;font-weight:400}.hud .coins b{font-size:17px}.hud .coins.debt b{color:#b04a39}.hud .up{color:#4f8a3e}.hud .down{color:#b04a39}.hud .muted{color:#8a938c}.hud.right .card:hover{border-color:#3d4943}.hud .stock{gap:0;padding:5px}.hud .stock .group{gap:4px;padding:0 5px;display:flex}.hud .stock .group+.group{border-left:1px solid #e0e3db}.hud .good{cursor:default;background:#eef0ea;border-radius:6px;align-items:center;gap:6px;padding:4px 9px 4px 6px;display:inline-flex}.hud .good .count{min-width:2.5ch;font-size:13px;font-weight:700}.hud .good.empty{opacity:.55}.toolbar,.system{bottom:calc(14px + env(safe-area-inset-bottom));z-index:2;align-items:stretch;gap:8px;display:flex;position:fixed}.toolbar{max-width:calc(100vw - 32px);left:16px;overflow-x:auto}.system{transition:right .24s cubic-bezier(.2,.8,.2,1);right:16px}.panel-open .system{right:376px}.panel-open .system button{gap:0;padding:6px 8px;font-size:0}.toolbar .group,.system{background:#f7f8f4;border:1px solid #c9cec4;border-radius:8px;gap:4px;padding:5px;display:flex;box-shadow:0 2px #dfe2db}.toolbar button,.system button{font:inherit;color:#3d4943;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:5px;align-items:center;gap:7px;padding:6px 10px;font-size:12px;display:flex}.toolbar button:hover,.system button:hover{background:#eceee8}.toolbar button.on{color:#f7f8f4;background:#3d4943}.toolbar button.on .glyph{background:#f7f8f4;border-radius:4px;margin:-1px;padding:1px}.toolbar button kbd{font:inherit;opacity:.55;font-size:10px}.toolbar .pause{padding:6px 9px}.toolbar .pause.on .glyph{background:0 0}.system button{color:#5d6861}.toolbar .town-button{letter-spacing:.02em;background:#f7f8f4;border:1px solid #c9cec4;border-radius:8px;gap:10px;padding:8px 18px 8px 12px;font-size:14px;font-weight:700;box-shadow:0 2px #dfe2db}.toolbar .town-button:hover{background:#eceee8;border-color:#3d4943}.toolbar .town-button.on{color:#f7f8f4;background:#3d4943;border-color:#3d4943}.toolbar .town-button.on .glyph{background:#f7f8f4;border-radius:5px;margin:-2px;padding:2px}.tooltip{pointer-events:none;color:#f3f5ef;white-space:pre;z-index:20;background:#2f4639;border-radius:3px;padding:5px 10px;font-size:13px;display:none;position:fixed;transform:translate(14px,10px)}.toast{bottom:calc(76px + env(safe-area-inset-bottom));color:#f7f8f4;opacity:0;pointer-events:none;z-index:20;background:#3d4943;border-radius:4px;padding:7px 14px;font-size:12px;transition:opacity .16s;position:fixed;left:50%;transform:translate(-50%)}.toast.show{opacity:1}@media (width<=1260px){.system button{gap:0;padding:6px 8px;font-size:0}}@media (width<=1000px){.toolbar button kbd,.toolbar .town-button kbd,.hud .stack small{display:none}}.panel{box-sizing:border-box;width:360px;max-width:46vw;padding:18px 16px calc(24px + env(safe-area-inset-bottom));color:#3d4943;-webkit-user-select:none;user-select:none;z-index:3;background:#eef0ea;border-left:1px solid #c3c8bf;font-size:13px;transition:transform .24s cubic-bezier(.2,.8,.2,1);position:fixed;top:0;bottom:0;right:0;overflow-y:auto;transform:translate(100%)}.panel.open{transform:none}.panel header{align-items:center;gap:12px;margin:0 4px 6px;display:flex}.panel header .title{flex:1;min-width:0}.panel header .thumb{object-fit:contain;flex:none;width:64px;height:56px}.panel header .glyph{background:#f7f8f4;border:1px solid #d3d7ce;border-radius:8px;width:40px;height:40px}.panel h2{letter-spacing:.01em;text-transform:capitalize;margin:0;font-size:17px;font-weight:700}.panel .close{background:0 0;border:1px solid #0000;border-radius:6px;align-self:flex-start;padding:5px;display:flex}.panel .close:hover{background:#e2e5de;border-color:#c9cec4}.panel .sub{color:#6c766f;margin:3px 0 0;font-size:12px;line-height:1.4}.panel .sub.warn{color:#b04a39}.panel .pill{color:#5d6861;background:#e2e5de;border-radius:999px;align-items:center;gap:6px;margin-top:5px;padding:2px 9px;font-size:11px;display:inline-flex}.panel .pill:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.panel .pill.working{color:#4f8a3e;background:#e1ecd9}.panel .pill.problem{color:#b04a39;background:#f4dfda}.panel section{background:#f7f8f4;border:1px solid #dcdfd7;border-radius:10px;margin-top:12px;padding:12px 14px}.panel h3{letter-spacing:.1em;text-transform:uppercase;color:#5d6861;align-items:center;gap:8px;margin:0 0 10px;font-size:11px;font-weight:700;display:flex}.panel h3 .help{opacity:.55;cursor:help;margin-left:auto}.panel h3 .help:hover{opacity:1}.panel .row{justify-content:space-between;align-items:center;gap:12px;padding:4px 0;display:flex}.panel .row+.row{border-top:1px dashed #e3e6df}.panel .label{align-items:center;gap:8px;min-width:0;display:inline-flex}.panel .count{color:#4f5a53;white-space:nowrap;font-variant-numeric:tabular-nums}.panel .count.up{color:#4f8a3e}.panel .count.down{color:#b04a39}.panel .total{font-weight:700}.panel .empty{color:#8a938c;margin:6px 0 0;font-size:12px;line-height:1.4}.panel button{font:inherit;color:inherit;cursor:pointer}.panel .frame{white-space:nowrap;background:#f7f8f4;border:1px solid #3d4943;border-radius:5px;padding:6px 12px}.panel .frame:hover{background:#e6e9e2}.panel .frame.danger{color:#b04a39;border-color:#b04a39}.panel .actions{flex-wrap:wrap;gap:8px;margin:16px 4px 0;display:flex}.panel .option{text-align:left;background:0 0;border:1px solid #0000;border-radius:8px;grid-template-columns:56px 1fr;align-items:center;gap:4px 12px;width:100%;padding:6px 8px 6px 4px;display:grid}.panel .option+.option{margin-top:2px}.panel .option:hover:not(:disabled){background:#eceee8;border-color:#d3d7ce}.panel .option:disabled{opacity:.45;cursor:default}.panel .option .thumb{object-fit:contain;grid-row:span 3;width:56px;height:48px}.panel .option .name{text-transform:capitalize;font-weight:700}.panel .option .blurb{color:#77817a;font-size:12px;line-height:1.35}.panel .option.short .blurb{color:#b04a39}.panel .chips{color:#4f5a53;flex-wrap:wrap;gap:4px 10px;font-size:12px;display:flex}.panel .chip{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.panel .chip.short{color:#b04a39;font-weight:700}.panel .chip.dim{color:#8a938c}@media (height<=500px){.panel{width:300px;padding:12px}.panel section{margin-top:8px;padding:8px 10px}.panel .option .thumb{width:44px;height:38px}}.panel .spark{border-bottom:1px solid #e0e3db;height:36px;margin-top:8px}.panel .spark svg{width:100%;height:36px;display:block}.panel .lever .controls{align-items:center;gap:6px;display:inline-flex}.panel .lever .rate{text-align:center;min-width:4.5ch;font-weight:700}.panel .frame.step{padding:1px 9px}.panel .effect{color:#8a938c;text-align:right;margin:-2px 0 4px;font-size:11px}.panel .effect.up{color:#4f8a3e}.panel .effect.down{color:#b04a39}.panel .need{grid-template-columns:7.5ch 1fr 7ch;align-items:center;gap:10px;padding:4px 0;display:grid}.panel .need .track{background:#e6e9e2;border-radius:4px;height:8px;overflow:hidden}.panel .need .fill{background:#6e8f36;border-radius:4px;height:100%;display:block}.panel .need .fill.low{background:#c98a3a}.panel .need .fill.none{background:#b04a39}.panel .need .count{text-align:right}.panel .good-row{cursor:default}.panel .good-row .price{color:#8a938c;font-size:11px}.panel .lines .row{justify-content:flex-start}.hud .clock .winter{color:#3d6db5;font-weight:600}.hud .request,.hud .alarm{display:none}.hud .request.show,.hud .alarm.show{display:flex}.hud .request{border-color:#d6ae2e;box-shadow:0 2px #eadca7}.hud .request .send{font:inherit;color:#f7f8f4;cursor:pointer;background:#3d4943;border:1px solid #3d4943;border-radius:3px;margin:4px 6px 4px 0;padding:2px 12px;font-size:12px}.hud .request .send:disabled{color:#8a938c;cursor:default;background:0 0;border-color:#c9cec4}.hud .alarm{color:#b04a39;white-space:normal;border-color:#b04a39;flex-direction:column;box-shadow:0 2px #e6c3bc}.hud .alarm .cell+.cell{border-top:1px solid #ecd2cc;border-left:0}.hud .alarm.good{color:#4f8a3e;border-color:#4f8a3e;box-shadow:0 2px #cfe0c5}.panel .meter{border:1px solid #c9cec4;height:6px;margin:4px 0 10px;position:relative}.panel .meter:after{content:"";border-left:1px solid #77817a;position:absolute;top:-3px;bottom:-3px;left:50%}.panel .meter .fill{background:#4f8a3e;position:absolute;top:0;bottom:0}.panel .meter .fill.low{background:#b04a39}.panel .goal .mark{color:#0000;border:1px solid #c9cec4;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;display:inline-flex}.panel .goal.met .mark{color:#f7f8f4;background:#4f8a3e;border-color:#4f8a3e;font-weight:700}.panel .goal.met{color:#4f8a3e}.panel .frame.mode{text-align:center;color:#8a938c;border-color:#c9cec4;width:5ch;padding:1px 0;font-size:11px}.panel .frame.mode.sell{color:#4f8a3e;background:#e8f0e2;border-color:#4f8a3e;font-weight:700}.panel .frame.mode.buy{color:#3d6db5;background:#e3eaf5;border-color:#3d6db5;font-weight:700}.chronicle p{color:#4f5a53;margin:0 0 6px;font-size:12px;line-height:1.45}.chronicle p b{color:#8a938c;min-width:5ch;font-weight:400;display:inline-block}.dialog{z-index:10;background:#e2e9e6b8;justify-content:center;align-items:center;padding:16px;display:none;position:fixed;inset:0}.dialog.open{display:flex}.dialog .sheet{box-sizing:border-box;background:#f1f3ed;border:1px solid #c3c8bf;border-radius:6px;width:640px;max-width:100%;max-height:calc(100vh - 32px);padding:22px 26px;font-size:14px;overflow-y:auto;box-shadow:0 3px #d5d9d0}.dialog .sheet.wide{width:720px}.dialog .sheet.narrow{width:460px}.dialog .frame.danger{color:#b04a39;border-color:#b04a39}.dialog .frame.danger:hover{background:#f4dfda}.dialog h2{margin:0 0 6px;font-size:18px}.dialog .sub{color:#6c766f;margin:0 0 10px;line-height:1.45}.dialog section{margin-top:16px}.dialog h3{letter-spacing:.12em;text-transform:uppercase;color:#77817a;border-bottom:2px solid #d3d7ce;margin:0 0 8px;padding-bottom:6px;font-size:11px;font-weight:400}.dialog .empty{color:#8a938c;margin:6px 0 0;font-size:12px}.dialog .row{justify-content:space-between;align-items:center;gap:12px;display:flex}.dialog button{font:inherit;color:inherit;cursor:pointer}.dialog .frame{white-space:nowrap;background:0 0;border:1px solid #3d4943;border-radius:2px;padding:6px 12px}.dialog .frame:hover{background:#e6e9e2}.dialog .frame.primary{color:#f7f8f4;background:#3d4943}.dialog .actions{flex-wrap:wrap;gap:8px;margin-top:22px;display:flex}.dialog .charter{grid-template-columns:1fr 200px;gap:22px;display:grid}.dialog .choices{flex-wrap:wrap;gap:6px;display:flex}.dialog .choice{color:#6c766f;border-color:#c9cec4}.dialog .choice.on{color:#3d4943;background:#e6e9e2;border-color:#3d4943;font-weight:700}.dialog .preview{flex-direction:column;gap:8px;display:flex}.dialog .preview canvas{width:192px;height:192px;image-rendering:pixelated;background:#e2e9e6;border:1px solid #c9cec4}.dialog .preview .sub{font-size:12px}.dialog .facts{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin:14px 0;display:grid}.dialog .fact{border-left:2px solid #d3d7ce;flex-direction:column;padding-left:8px;display:flex}.dialog .fact b{font-size:18px}.dialog .fact span{color:#77817a;font-size:11px}.dialog .chart svg{border-bottom:1px solid #d3d7ce;width:100%;height:150px;display:block}.dialog .legend{color:#77817a;margin:4px 0 12px;font-size:11px}.dialog .chronicle{border-top:1px solid #e0e3db;max-height:180px;padding-top:10px;overflow-y:auto}@media (width<=600px){.dialog .charter{grid-template-columns:1fr}.dialog .sheet{padding:16px}}.result{font:inherit;z-index:5;color:#f7f8f4;cursor:pointer;background:#3d4943;border:0;border-radius:4px;padding:7px 12px;font-size:12px;display:none;position:fixed;top:12px;left:50%;transform:translate(-50%);box-shadow:0 2px #c9cec4}.result.show{display:block}@media (width<=760px){.hud.left{max-width:none;left:10px;right:10px}.hud.right,.panel-open .hud.right{align-items:flex-start;max-width:none;top:64px;left:10px;right:10px}.hud .card .cell{padding:7px 9px}.hud.left .stock{flex:none;max-width:100%;margin-top:48px;overflow-x:auto}.hud .stock .group{flex:none}.hud.right .card{max-width:100%;overflow-x:auto}.toolbar{left:10px;right:10px;bottom:calc(64px + env(safe-area-inset-bottom))}.toolbar .group,.toolbar .town-button{flex:none}.system,.panel-open .system{right:10px;bottom:calc(12px + env(safe-area-inset-bottom))}.camera-controls{max-width:calc(100vw - 20px);left:10px;bottom:calc(118px + env(safe-area-inset-bottom))}.camera-controls button{min-height:34px;padding:6px 7px}.panel{width:calc(100vw - 24px);max-width:360px}.toast{bottom:calc(165px + env(safe-area-inset-bottom));max-width:calc(100vw - 28px)}}.hud .ticker{flex-direction:column;max-width:420px;display:none}.hud .ticker.show{display:flex}.hud .ticker .cell{white-space:normal;padding:5px 12px;font-size:11px;line-height:1.35}.hud .ticker .cell+.cell{border-top:1px dashed #e3e6df;border-left:none}.hud .ticker .news{color:#5d6861}.views{z-index:2;background:#f7f8f4;border:1px solid #c9cec4;border-radius:8px;flex-direction:column;align-items:stretch;gap:2px;padding:5px;transition:right .24s cubic-bezier(.2,.8,.2,1);display:flex;position:fixed;top:64px;right:16px;box-shadow:0 2px #dfe2db}.views>.glyph{opacity:.6;align-self:center;padding:2px 0 4px}.views button{font:inherit;color:#3d4943;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:5px;align-items:center;gap:6px;padding:4px 8px;font-size:11px;display:flex}.views button:hover{background:#eceee8}.views button.on{color:#f7f8f4;background:#3d4943}.views button kbd{font:inherit;opacity:.55;margin-left:auto;font-size:10px}.panel-open .views{right:376px}.legend{z-index:2;flex-direction:column;gap:4px;max-width:220px;padding:10px 12px;font-size:11px;transition:right .24s cubic-bezier(.2,.8,.2,1);display:none;position:fixed;top:300px;right:16px}.legend.show{display:flex}.legend .key{align-items:center;gap:7px;display:flex}.legend .key i{opacity:.8;border-radius:3px;width:11px;height:11px;display:inline-block}.legend small{color:#77817a;margin-top:3px;line-height:1.35}.panel-open .legend{right:376px}@media (width<=1000px){.views{top:auto;bottom:calc(130px + env(safe-area-inset-bottom));flex-flow:wrap;max-width:calc(100vw - 32px)}.views button{gap:0;font-size:0}.views button kbd{display:none}.legend{top:auto;bottom:calc(176px + env(safe-area-inset-bottom))}}.panel .lines .line{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 10px;padding:6px 0;display:flex}.panel .lines .line+.line{border-top:1px dashed #e3e6df}.panel .lines .line .label{color:#3d4943;flex:none;max-width:100%;font-weight:600}.panel .lines .line .count{text-align:right;white-space:normal;margin-left:auto;line-height:1.35}.panel .lines .line .chips{flex-basis:100%;margin-top:3px}.panel .lines .line .note{color:#6c766f;flex-basis:100%;margin-top:1px;font-size:11px;line-height:1.4}.panel .lines .line.ok .count{color:#4f8a3e}.panel .lines .line.warn .count{color:#b8782e}.panel .lines .line.bad .count{color:#b04a39;font-weight:700}.panel .lines .line.bad .note{color:#8f3f31}.panel .lines .line.warn .note{color:#8a5a22}.panel .lines .line.dim .count,.panel .lines .line.dim .label{color:#8a938c;font-weight:400}.panel .lines .line .chip{background:#eef0ea;border-radius:4px;padding:1px 6px 1px 4px}.panel .option{grid-template-rows:auto auto auto auto}.panel .option .thumb{grid-row:span 4}.panel .chips .cap{letter-spacing:.08em;text-transform:uppercase;color:#9aa29b;min-width:3.2em;font-size:10px}.panel .chip.good{color:#4f8a3e}.panel .chip.bad{color:#b04a39}.panel .chip i{color:#9aa29b;font-style:normal}.hud .ticker .head{letter-spacing:.1em;text-transform:uppercase;color:#9aa29b;padding:5px 12px 1px;font-size:10px}.hud .ticker button.cell{font:inherit;color:inherit;text-align:left;cursor:default;background:0 0;border:0;width:100%}.hud .ticker button.cell.place{cursor:pointer}.hud .ticker button.cell.place:hover{background:#eef0ea}.hud .ticker .cell kbd{font:inherit;color:#3d6db5;border:1px solid #c9d6ee;border-radius:3px;margin-left:auto;padding:0 5px;font-size:10px}.hud .ticker .cell em{color:#9aa29b;font-style:normal}.hud .ticker .cell span{flex:1}.hud .cell.jobs{cursor:pointer}.hud .cell.jobs:hover{background:#eef0ea}body{font-variant-numeric:tabular-nums}.panel .sub,.panel .empty,.panel .note,.panel .blurb,.sheet .sub,.legend small,.tooltip,.toast{overflow-wrap:anywhere;line-height:1.55}.panel .row{gap:8px}.panel .row .label{min-width:0}.panel .row .count,.hud .count{flex-shrink:0}.hud .request .cell,.hud .alarm .cell{white-space:normal;overflow-wrap:anywhere}.hud .ticker .cell kbd{white-space:nowrap;flex-shrink:0}.tooltip{white-space:pre-wrap;box-sizing:border-box;max-width:min(360px,100vw - 32px)}@media (width<=760px){.hud .ticker{max-width:100%;max-height:22vh;overflow-y:auto}.panel-open .views,.panel-open .legend{right:10px}.sheet .actions{flex-wrap:wrap}.hud .card .cell{gap:6px;padding:6px 8px}}
