:root{--hue-p1:#f08a4b;--hue-p2:#b58cf0;--hue-p3:#e86fa7;--hue-p4:#2cc3c8;--hue-p5:#d4c26a;--hue-p6:#8fd16a;--hue-p7:#7d8cff;--gold:#e0b84f;--silver:#b7c3cf;--bronze:#c98d5b;--sc-sky-a:#101a23;--sc-sky-b:#0b1218;--sc-side-a:#3a5368;--sc-side-b:#2a3d4e;--sc-top-a:#22323f;--sc-top-b:#18242e;--sc-grid:#1b2a37;--sc-glass:#14202a;--sc-void:#0a1016;--sc-rim:#3d566b;--sc-mid:#2c4152;--sc-off:#52708a;--sc-gear:#7d97ad;--sc-metal:#9fb0bf;--sc-shadow:#00000073;--sc-wall-a:#142130;--sc-wall-b:#101a24;--sc-rib:#192837;--sc-truss:#2a3e50;--sc-win-a:#0a1626;--sc-win-b:#1f3a57;--sc-floor-a:#111c26;--sc-floor-b:#0b131a;--sc-seam:#1a2937;--sc-paint:#d4a62c;--sc-cone:.2;--sc-robot:#d9a33a;--sc-hat:#eef2f5}:root,:root[data-theme=light]{--sc-kraft:#c9a36a;--sc-kraft-edge:#8a6a3a;--sc-coverall:#2d4b6b}:root[data-theme=light]{--hue-p1:#cf5f14;--hue-p2:#8350cc;--hue-p3:#cc3a7e;--hue-p4:#0b8a90;--hue-p5:#947a0a;--hue-p6:#3f8f1c;--hue-p7:#4558d9;--gold:#9a7410;--silver:#66788a;--bronze:#a1612f;--sc-sky-a:#f4f7fa;--sc-sky-b:#e0e7ee;--sc-side-a:#c6d3de;--sc-side-b:#aebfce;--sc-top-a:#e6edf3;--sc-top-b:#cfdae4;--sc-grid:#d3dde6;--sc-glass:#34495b;--sc-void:#2b3b49;--sc-rim:#6f879b;--sc-mid:#8ea3b5;--sc-off:#8296a8;--sc-gear:#5e788d;--sc-metal:#566b7e;--sc-shadow:#14283c47;--sc-wall-a:#d3dce5;--sc-wall-b:#c3ceda;--sc-rib:#c9d3dd;--sc-truss:#9aabbb;--sc-win-a:#8fbfe6;--sc-win-b:#e2f0fa;--sc-floor-a:#dce3ea;--sc-floor-b:#cbd5de;--sc-seam:#c0ccd7;--sc-paint:#c4931a;--sc-cone:.07;--sc-robot:#d29a2c;--sc-hat:#fff}:root{--bg:#0b1218;--floor:#111c25;--surface:#16222dd1;--surface-solid:#16222d;--line:#27394a;--raised:#1b2a37;--edge:#3a5368;--track:#263949;--scene-bg:#0e1821;--scrim:#05090d99;--scroll:#5a7790;--scroll-hover:#7891a6;--ink-rgb:232 238 243;--bg-rgb:11 18 24;--ink:#e8eef3;--muted:#9fb0bf;--faint:#5d7183;--halo:#000;--ok:#3ecf8e;--ok-soft:#3ecf8e24;--ok-glow:#3ecf8e80;--warn:#f2c14e;--warn-soft:#f2c14e24;--warn-glow:#f2c14e80;--bad:#ff6b5e;--bad-soft:#ff6b5e24;--bad-glow:#ff6b5e8c;--info:#5aa9ff;--info-soft:#5aa9ff24;--info-glow:#5aa9ff80;--brand:#71101e;--brand-ink:#fff;--brand-glow:#71101e52;--on-state:#06121c;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--r-1:6px;--r-2:10px;--r-3:16px;--shadow-1:0 2px 8px #00000059;--shadow-2:0 12px 32px #00000080;--hover-fx:brightness(1.15);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--font:"Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans", "Apple SD Gothic Neo", "Microsoft YaHei", "Yu Gothic", "Malgun Gothic", sans-serif;--font-display:var(--font);--fs-0:calc(clamp(.72rem, .7rem + .1vw, .78rem));--fs-1:calc(clamp(.82rem, .8rem + .15vw, .9rem));--fs-2:calc(clamp(.95rem, .9rem + .2vw, 1.05rem));--fs-3:calc(clamp(1.2rem, 1.1rem + .5vw, 1.5rem));--fs-4:calc(clamp(1.6rem, 1.3rem + 1.4vw, 2.4rem));--t-fast:.15s;--t-base:.3s;--t-slow:.6s;--ease:cubic-bezier(.2, .7, .2, 1);--z-floor:0;--z-scene:1;--z-anchor:2;--z-hud:3;--z-hand:4;--z-modal:5;--z-toast:6;--topbar-h:56px;--side-w:clamp(320px, 27vw / var(--zoom,1), 460px)}:root[data-theme=light]{--bg:#e3e9ef;--floor:#edf1f5;--surface:#ffffffe0;--surface-solid:#fff;--line:#c3cfda;--raised:#e9eef3;--edge:#9db0c0;--track:#d0dae3;--scene-bg:#eaeff4;--scrim:#0f1c2761;--scroll:#6b7f92;--scroll-hover:#4a5c6d;--ink-rgb:15 28 39;--bg-rgb:227 233 239;--ink:#0f1c27;--muted:#4a5c6d;--faint:#5c6e7f;--halo:#fff;--ok:#0c7a52;--ok-soft:#0c7a521f;--ok-glow:#0c7a5247;--warn:#92590a;--warn-soft:#b0700024;--warn-glow:#b070004d;--bad:#c0281c;--bad-soft:#c0281c1c;--bad-glow:#c0281c47;--info:#1a62c2;--info-soft:#1a62c21c;--info-glow:#1a62c247;--brand-glow:#71101e1a;--on-state:#fff;--shadow-1:0 1px 3px #10203024, 0 1px 2px #10203014;--shadow-2:0 14px 34px #10203033, 0 2px 6px #1020301a;--hover-fx:brightness(.96);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:after,:before{box-sizing:border-box}#app,body,html{height:100%}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;font-size:16px}@media print{html{zoom:1!important;--zoom:1!important}}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:var(--fs-1);-webkit-font-smoothing:antialiased;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);margin:0;line-height:1.45;overflow:hidden}body.scroll{overflow:auto}h1,h2,h3,p{margin:0}button{font:inherit;color:inherit;cursor:pointer;min-height:36px}button:disabled{cursor:not-allowed;opacity:.45}:focus-visible{outline:2px solid var(--info);outline-offset:2px}.num{font-variant-numeric:tabular-nums}.btn{border-radius:var(--r-2);padding:var(--s-3) var(--s-5);background:var(--surface-solid);border:0;border:1px solid var(--line);font-weight:600}.btn--primary{background:var(--brand);color:var(--brand-ink);border-color:#0000}.btn:hover:not(:disabled){filter:var(--hover-fx)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}*{scrollbar-gutter:auto}::-webkit-scrollbar{width:14px;height:14px}::-webkit-scrollbar-track{background:rgb(var(--ink-rgb)/.05);border-radius:999px}::-webkit-scrollbar-thumb{background:var(--scroll);background-clip:padding-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--scroll-hover);border-width:2px}::-webkit-scrollbar-thumb:active{background-color:var(--info);border-width:2px}::-webkit-scrollbar-corner{background:0 0}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:auto;scrollbar-color:var(--scroll) transparent}}@keyframes pulse-ring{0%{opacity:.9;transform:scale(.8)}to{opacity:0;transform:scale(1.8)}}@keyframes float-up{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-36px)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-4px)}40%{transform:translate(4px)}60%{transform:translate(-3px)}80%{transform:translate(3px)}}@keyframes blink{50%{opacity:.35}}.fx-pulse{animation:pulse-ring var(--t-slow) var(--ease) infinite;transform-box:fill-box;transform-origin:50%}.fx-float{animation:float-up calc(var(--t-slow) * 1.5) var(--ease) forwards}.fx-shake{animation:shake var(--t-slow) var(--ease)}.fx-blink{animation:1.6s ease-in-out infinite blink}html.is-paused [data-freeze],html.is-paused [data-freeze] :where(*){animation-play-state:paused!important}@media (prefers-reduced-motion:reduce){*,:after,:before{transition:none!important;animation:none!important}}
