:root{--font:system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--page:#f9f9f7;--surface:#fcfcfb;--surface-2:#f2f1ec;--ink:#0b0b0b;--ink-2:#52514e;--ink-3:#898781;--hairline:#e1e0d9;--border:#0b0b0b1a;--accent:#2a78d6;--accent-soft:#e8f1fc;--critical:#d03b3b;--critical-soft:#fbeaea;--warning:#b77900;--warning-soft:#fff3d6;--good:#0ca30c;--edit:#6250d6;--edit-soft:#6250d61a;--scene-bg:#e9e7e1;--floor:#e4e1d9;--shelf:#a9a79f;--deck:#d9d7cf;--kraft:#c9a97a;--radius:10px;--radius-sm:8px}*{box-sizing:border-box}html,body{height:100%}body{font:13px/1.5 var(--font);color:var(--ink);background:var(--page);margin:0;overflow:hidden}button,input{font:inherit}button{cursor:pointer}[hidden]{display:none!important}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.app{grid-template:"top top"56px"kpi inspector"96px"viewport inspector"minmax(0,1fr)"status status"28px/minmax(0,1fr) 360px;height:100dvh;display:grid;overflow:hidden}.topbar{background:var(--surface);border-bottom:1px solid var(--border);grid-area:top;align-items:center;gap:16px;padding:0 16px;display:flex}.brand{align-items:center;gap:10px;min-width:0;display:flex}.brand__mark{background:var(--accent);color:#fff;border-radius:9px;flex:none;place-items:center;width:32px;height:32px;font-size:15px;font-weight:700;display:grid}.brand h1{margin:0;font-size:14px;font-weight:600;line-height:1.25}.brand p{color:var(--ink-3);margin:0;font-size:11px;line-height:1.3}.mode-switch{border-radius:var(--radius-sm);background:var(--surface-2);gap:2px;margin-left:auto;padding:3px;display:flex}.mode-switch button{color:var(--ink-2);background:0 0;border:0;border-radius:6px;padding:6px 14px;font-size:12px}.mode-switch button[aria-selected=true]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #0b0b0b14}.topbar__actions{gap:8px;margin-left:8px;display:flex}.btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);height:32px;color:var(--ink);white-space:nowrap;padding:0 12px;font-size:12px;transition:background .12s,transform 80ms}.btn:hover{background:var(--surface-2)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover{background:#1f66bb}.btn--ghost{background:0 0}.btn--danger{color:var(--critical);border-color:var(--critical-soft);background:var(--surface)}.btn--block{width:100%;height:36px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);grid-area:kpi;grid-template-columns:1.15fr 1fr 1fr 1fr 1.1fr;margin:12px 12px 0;display:grid;overflow:hidden}.kpi__tile{flex-direction:column;justify-content:center;gap:3px;min-width:0;padding:12px 16px;display:flex}.kpi__tile+.kpi__tile{border-left:1px solid var(--hairline)}.kpi__label{color:var(--ink-3);letter-spacing:.02em;font-size:11px}.kpi__value{font-variant-numeric:proportional-nums;font-size:28px;font-weight:600;line-height:1.05}.kpi__value small{color:var(--ink-3);margin-left:2px;font-size:13px;font-weight:500}.kpi__value--alert{color:var(--critical)}.kpi__value--warning{color:var(--warning);font-size:12px;font-weight:600}.kpi__foot{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.kpi__pair{align-items:baseline;gap:10px;display:flex}.kpi__pair span{align-items:baseline;gap:3px;display:flex}.kpi__pair b{font-size:20px;font-weight:600}.kpi__pair small{color:var(--ink-3);font-size:11px}.kpi__sep{background:var(--hairline);width:1px;height:18px}.meter{background:var(--accent-soft);border-radius:999px;height:6px;margin-top:4px;position:relative;overflow:hidden}.meter__fill{border-radius:inherit;background:var(--accent);height:100%;transition:width .25s;display:block}.meter--sm{flex:none;width:72px;height:4px;margin:0}.viewport{border:1px solid var(--border);background:var(--scene-bg);border-radius:12px;grid-area:viewport;min-height:0;margin:12px;position:relative;overflow:hidden}#scene{touch-action:none;outline:none;width:100%;height:100%;display:block}.label-layer{z-index:1}.shelf-label{border:1px solid var(--border);color:var(--ink-2);white-space:nowrap;background:#fcfcfbe6;border-radius:6px;padding:3px 8px;font-size:11px;box-shadow:0 1px 3px #0b0b0b14}.slot-label{background:var(--accent);color:#fff;white-space:nowrap;border-radius:6px;padding:3px 8px;font-size:11px;font-weight:600}.legend,.edit-badge,.edit-toolbar{z-index:2}.legend{border:1px solid var(--border);border-radius:var(--radius-sm);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--ink-2);background:#fcfcfbeb;align-items:center;gap:10px;padding:8px 12px;font-size:11px;display:flex;position:absolute;bottom:12px;left:12px}.legend__title{color:var(--ink-3)}.legend ul{gap:10px;margin:0;padding:0;list-style:none;display:flex}.legend li{align-items:center;display:flex}.swatch{border-radius:2px;width:10px;height:10px;margin-right:4px;display:inline-block}.swatch--parcel{background:var(--kraft)}.swatch--overdue{background:var(--critical)}.swatch--empty{border:1px solid var(--ink-3);background:0 0}.edit-badge{background:var(--edit-soft);color:var(--edit);border:1px solid #6250d64d;border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-size:12px;display:flex;position:absolute;top:12px;left:12px}.dot{background:var(--good);border-radius:50%;width:6px;height:6px;display:inline-block}.dot--edit{background:var(--edit)}.edit-toolbar{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);gap:6px;padding:6px;display:flex;position:absolute;top:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #0b0b0b14}.app[data-mode=edit] .viewport{box-shadow:inset 0 0 0 2px var(--edit)}.toasts{pointer-events:none;z-index:5;flex-direction:column;align-items:center;gap:8px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.toast{border-radius:var(--radius-sm);background:var(--ink);color:#fff;pointer-events:auto;align-items:center;gap:12px;padding:10px 12px;font-size:12px;display:flex;box-shadow:0 6px 20px #0b0b0b2e}.toast__action{color:#9dc1ff;background:0 0;border:0;padding:0;font-size:12px;font-weight:600}.canvas-error{z-index:10;text-align:center;background:#f9f9f7f0;place-items:center;padding:24px;display:grid;position:absolute;inset:0}.canvas-error p{margin:0 0 6px}.canvas-error p:first-child{font-size:16px;font-weight:600}.inspector{background:var(--surface);border-left:1px solid var(--border);flex-direction:column;grid-area:inspector;min-height:0;display:flex}.search{border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:8px;padding:12px 16px;display:flex}.search .icon{width:16px;height:16px;color:var(--ink-3);flex:none}.search input{min-width:0;color:var(--ink);background:0 0;border:0;outline:none;flex:1;font-size:13px}.search input::placeholder{color:var(--ink-3)}.search input::-webkit-search-cancel-button{display:none}.search kbd,.statusbar kbd{border:1px solid var(--border);color:var(--ink-3);background:var(--surface-2);border-radius:4px;padding:1px 5px;font-size:10px}.search__clear{color:var(--ink-3);background:0 0;border:0;padding:0 2px;font-size:16px;line-height:1}.inspector__body{flex:1;min-height:0;padding:12px 16px 20px;overflow:auto}.inspector__foot{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:10px 16px;font-size:11px;display:flex}.panel__section+.panel__section{margin-top:18px}.panel__head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.panel__head h2{color:var(--ink-2);margin:0;font-size:12px;font-weight:600}.count{color:var(--ink-3);font-size:11px}.rows{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.row{border-radius:var(--radius-sm);width:100%;min-height:44px;color:var(--ink);text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px;display:flex}.row:hover{background:var(--surface-2)}.row__main{flex-direction:column;gap:1px;min-width:0;display:flex}.row__main b{font-size:13px;font-weight:600}.row__main small{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.row__side{flex:none;align-items:center;gap:8px;display:flex}.chip{background:var(--surface-2);color:var(--ink-2);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:2px 7px;font-size:11px;display:inline-flex}.chip--overdue{background:var(--critical-soft);color:var(--critical)}.chip--muted{color:var(--ink-3)}.chip--edit{background:var(--edit-soft);color:var(--edit)}.icon{vertical-align:-2px;width:12px;height:12px}.detail__head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.detail__eyebrow{color:var(--ink-3);font-size:11px;display:block}.detail__code{font-variant-numeric:tabular-nums;font-size:24px;font-weight:600;line-height:1.2}.meta{border-top:1px solid var(--hairline);margin:0;display:grid}.meta>div{border-bottom:1px solid var(--hairline);justify-content:space-between;gap:12px;padding:7px 0;font-size:12px;display:flex}.meta dt{color:var(--ink-3);flex:none}.meta dd{text-align:right;color:var(--ink);margin:0}.detail__actions{flex-direction:column;gap:8px;margin-top:14px;display:flex}.empty{text-align:center;color:var(--ink-3);padding:22px 8px;font-size:12px;line-height:1.7}.empty b{color:var(--ink-2);margin-bottom:3px;font-size:13px;display:block}.empty .btn{margin-top:8px}.hint{color:var(--ink-3);margin:8px 0 0;font-size:11px;line-height:1.6}.muted{color:var(--ink-3)}.link{color:var(--accent);background:0 0;border:0;padding:0;font-size:11px}.link:hover{text-decoration:underline}.statusbar{border-top:1px solid var(--border);background:var(--page);color:var(--ink-3);grid-area:status;justify-content:space-between;align-items:center;gap:12px;padding:0 16px;font-size:11px;display:flex}.dialog{border:0;border-radius:12px;width:min(420px,100vw - 32px);padding:0;box-shadow:0 8px 24px #0b0b0b24}.dialog::backdrop{background:#0b0b0b59}.dialog__panel{padding:20px}.dialog__panel h2{margin:0 0 8px;font-size:16px;font-weight:600}.dialog__body{color:var(--ink-2);font-size:13px;line-height:1.65}.dialog__actions{justify-content:flex-end;gap:8px;margin-top:18px;display:flex}@media (width<=1024px){body{overflow:auto}.app{grid-template:"top"56px"kpi""viewport"560px"inspector""status"/1fr;height:auto;min-height:100dvh;overflow:visible}.kpi{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi__tile{border-top:1px solid var(--hairline);border-left:0!important}.kpi__tile:nth-child(-n+2){border-top:0}.kpi__tile:last-child{grid-column:span 2}.inspector{border-left:0;border-top:1px solid var(--border);min-height:420px}.viewport{margin:12px}}@media (width<=640px){.topbar{gap:8px;padding:0 10px}.brand p{display:none}.mode-switch button{padding:6px 10px}.topbar__actions .btn{padding:0 8px}.kpi{grid-template-columns:1fr}.kpi__tile:last-child{grid-column:auto}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
