:root{--bg:#15171b;--panel:#1f2329;--panel-2:#262b32;--line:#333a44;--text:#e4e6ea;--muted:#949ba6;--accent:#4d8fe0;--accent-soft:#2a4a73;--warn:#f0b040;--error:#ff7a7a;--ok:#7cc77f;--overlay:#15171bcc;--toolbox-bg:#15171be0;--radius:6px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-theme=light]{--bg:#eef0f3;--panel:#fff;--panel-2:#e9edf1;--line:#cfd6de;--text:#1b1e22;--muted:#5d6875;--accent:#2f6fd0;--accent-soft:#cfe1f7;--warn:#96690a;--error:#b53030;--ok:#2e7d32;--overlay:#ffffffe0;--toolbox-bg:#ffffffeb;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html,body,#root{background:var(--bg);height:100%;color:var(--text);margin:0;font:13px/1.45 system-ui,-apple-system,Segoe UI,sans-serif}*{box-sizing:border-box}.app{grid-template-columns:var(--left-w,290px) minmax(0, 1fr) var(--right-w,290px);grid-template-rows:minmax(0,1fr) auto;grid-template-areas:"left view right""status status status";height:100%;display:grid}.sidebar{background:var(--panel);padding:10px;position:relative;overflow-y:auto}.resize-handle{cursor:ew-resize;touch-action:none;z-index:1;width:7px;position:absolute;top:0;bottom:0}.resize-left{right:0}.resize-right{left:0}.resize-handle:hover{background:var(--accent-soft)}.sidebar-left{border-right:1px solid var(--line);grid-area:left}.sidebar-right{border-left:1px solid var(--line);grid-area:right}.viewport{grid-area:view;min-width:0;position:relative}.panel+.panel{border-top:1px solid var(--line);margin-top:14px;padding-top:12px}.panel-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.panel h2{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 4px;font-size:12px;font-weight:600}.muted{color:var(--muted);margin:6px 0}.small{font-size:12px}button{font:inherit;color:inherit;background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:4px;padding:2px 9px}button.link{color:var(--accent);text-underline-offset:2px;background:0 0;border:none;padding:0 4px;text-decoration:underline}button:hover:not(:disabled){border-color:#4a5260}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}button:disabled{opacity:.4;cursor:default}button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger:hover:not(:disabled){border-color:var(--error);color:var(--error)}button.icon{padding:0 6px;line-height:1.3}kbd{color:var(--muted);border:1px solid #5a6270;border-radius:3px;margin-left:2px;padding:0 4px;font:11px ui-monospace,monospace}input[type=range]{accent-color:var(--accent)}.jobs,.meshes{margin:8px 0 0;padding:0;list-style:none}.job{border-radius:var(--radius);background:var(--panel-2);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:2px 8px;margin-bottom:4px;padding:5px 8px;display:grid}.job-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.job-phase{color:var(--muted)}.job-done .job-phase{color:var(--ok)}.job-error .job-phase,.job-message{color:var(--error)}.job-message{grid-column:1/-1;font-size:12px}.progress{background:linear-gradient(90deg, var(--line) 0%, var(--accent) 50%, var(--line) 100%) 0 0 / 200% 100%;border-radius:2px;width:36px;height:4px;animation:1s linear infinite progress}.progress.determinate{background:var(--accent);animation:none}.job-summary{color:var(--muted);grid-column:1/-1;font-size:12px}.big-warning{color:var(--warn,#b7791f)}@keyframes progress{to{background-position:-200% 0}}.mesh{border-radius:var(--radius);background:var(--panel-2);border:1px solid #0000;margin-bottom:4px;padding:7px 8px}.mesh.selected{border-color:var(--warn)}.mesh.secondary{border-color:var(--muted);border-style:dashed}.mesh-head{align-items:center;gap:8px;display:flex}.swatch{border-radius:50%;flex:none;width:10px;height:10px}.mesh-name{text-overflow:ellipsis;white-space:nowrap;text-align:left;background:0 0;border:none;flex:1;min-width:0;padding:0;font-weight:500;overflow:hidden}.mesh-name[aria-pressed=true]{color:var(--warn);background:0 0}.count{color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.mesh-controls{align-items:center;gap:6px;margin-top:5px;display:flex}.mesh-controls input[type=range]{flex:1;min-width:0}.mesh-controls button{padding:1px 6px;font-size:12px}.check{color:var(--muted);align-items:center;gap:3px;font-size:12px;display:inline-flex}.mesh-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.analysis,.readouts{grid-template-columns:auto minmax(0,1fr);gap:3px 10px;margin:8px 0;font-size:12px;display:grid}.analysis dt,.readouts dt{color:var(--muted)}.analysis dd,.readouts dd{font-variant-numeric:tabular-nums;margin:0}.analysis.stale{opacity:.6}.holes{color:var(--text);margin:2px 0 0;padding-left:14px}.ops{flex-direction:column;gap:5px;margin-top:8px;display:flex}.op{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}.import-scale{flex-wrap:wrap;align-items:center;gap:4px 8px;margin:4px 0;display:flex}.import-scale input[aria-invalid=true]{border-color:var(--error)}.field{color:var(--muted);align-items:center;gap:4px;font-size:12px;display:inline-flex}.field input[type=number]{width:72px;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:1px 4px}.report{border-radius:var(--radius);background:var(--panel-2);margin:8px 0 0;padding:6px 8px}.report.error{color:var(--error)}.busy .progress{vertical-align:middle;display:inline-block}.slider{margin:6px 0;display:block}.slider-head{color:var(--muted);justify-content:space-between;font-size:12px;display:flex}.slider output{color:var(--text);font-variant-numeric:tabular-nums}.slider input[type=range]{width:100%;margin:2px 0 0}.legend{margin:8px 0}.legend-bar{border:1px solid var(--line);border-radius:2px;height:8px}.legend-labels{color:var(--muted);justify-content:space-between;font-size:11px;display:flex;position:relative}.legend-zero{position:absolute;transform:translate(-50%)}.pair{margin-top:8px}.modes{gap:4px;margin:0 0 6px;display:flex}.modes button{flex:1}.members{margin:6px 0;padding:0;list-style:none}.members .swatch{margin:0 2px}.pair-matrix,.pair-readouts{border-collapse:collapse;margin:6px 0;font-size:12px}.pair-matrix th,.pair-matrix td{text-align:center;color:var(--muted);padding:1px 6px;font-weight:600}.pair-readouts{width:100%}.pair-readouts th{color:var(--muted);text-align:left;font-weight:400}.pair-readouts td{font-variant-numeric:tabular-nums;padding:1px 4px 1px 0}.hover-tip{z-index:5;pointer-events:none;color:var(--text);background:var(--panel-2);border:1px solid var(--line);white-space:nowrap;border-radius:4px;padding:4px 8px;font-size:12px;position:fixed}.picker{align-items:center;gap:8px;margin:4px 0;display:flex}.picker span{width:14px;color:var(--muted);font-weight:600}.picker select{min-width:0;font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:4px;flex:1;padding:2px 4px}.toolbar{gap:10px;display:flex;position:absolute;top:10px;left:10px}.toolbar .group{border-radius:var(--radius);background:var(--overlay);gap:4px;padding:4px;display:flex}.volume-overlay{border-radius:var(--radius);background:var(--overlay);align-items:center;gap:12px;padding:4px 8px;display:flex;position:absolute;top:10px;right:10px}.volume-overlay .group{gap:4px;display:flex}.toolbox{border:1px solid var(--line);border-radius:var(--radius);background:var(--toolbox-bg);flex-direction:column;gap:8px;width:152px;padding:8px;display:flex;position:absolute;top:64px;left:10px}.toolbox .group{grid-template-columns:1fr 1fr;gap:4px;display:grid}.toolbox .slider{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:baseline;row-gap:2px;font-size:12px;display:flex}.toolbox .slider output{color:var(--text);font-variant-numeric:tabular-nums}.toolbox .slider input[type=range]{flex-basis:100%;margin:0}.toolbox .check{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.hint{text-align:center;color:var(--muted);pointer-events:none;margin:0;font-size:12px;position:absolute;bottom:8px;left:0;right:0}.empty{color:var(--muted);pointer-events:none;place-items:center;margin:0;display:grid;position:absolute;inset:0}.volume-canvas{border:1px solid var(--line);border-radius:var(--radius);height:320px;position:relative;overflow:hidden}.volume-canvas canvas{width:100%;height:100%;display:block}.slice-row{margin-top:8px}.slice-label{text-transform:capitalize;min-width:64px;font-weight:600}.slice-canvas{border:1px solid var(--line);border-radius:var(--radius);height:170px;position:relative;overflow:hidden}.slice-canvas canvas{object-fit:contain;cursor:crosshair;touch-action:none;width:100%;height:100%;display:block}.drop-overlay{border:2px dashed var(--accent);pointer-events:none;background:#15171bbf;border-radius:12px;place-items:center;font-size:16px;display:grid;position:fixed;inset:12px}.help-scrim{z-index:20;background:#00000080;place-items:center;display:grid;position:fixed;inset:0}.help-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(430px,90vw);padding:14px 16px 16px}.help-card h2{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0;font-size:12px;font-weight:600}.keys{margin:10px 0}.keys>div{border-top:1px solid var(--line);grid-template-columns:150px minmax(0,1fr);gap:10px;padding:3px 0;font-size:12px;display:grid}.keys>div:first-child{border-top:none}.keys dt{color:var(--text);font-variant-numeric:tabular-nums}.keys dd{color:var(--muted);margin:0}.tour-card{z-index:20;border:1px solid var(--accent);border-radius:var(--radius);background:var(--panel);width:min(430px,90vw);padding:12px 14px 14px;position:fixed;bottom:44px;left:50%;transform:translate(-50%)}.tour-card h2{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0;font-size:12px;font-weight:600}.tour-card p{margin:8px 0 12px}.tour-nav{justify-content:flex-end;gap:6px;display:flex}.tour-spot{outline:2px solid var(--accent);outline-offset:2px}.statusbar{border-top:1px solid var(--line);background:var(--panel);min-height:28px;color:var(--muted);white-space:nowrap;grid-area:status;align-items:center;gap:16px;padding:3px 12px;font-size:12px;display:flex}.statusbar .spacer{flex:1}.statusbar button{padding:0 8px;font-size:12px}.statusbar .settings{gap:4px;display:inline-flex}.state{color:var(--text);align-items:center;gap:6px;display:inline-flex}.dot{background:var(--ok);border-radius:50%;width:8px;height:8px}.state-computing .dot{background:var(--warn)}.state-error .dot{background:var(--error)}.statusbar .error{text-overflow:ellipsis;color:var(--error);overflow:hidden}.busy,.warn{color:var(--warn)}.ok{color:var(--ok)}.fatal{color:var(--error);padding:24px}@media (prefers-reduced-motion:reduce){.progress{animation:none}}@media (max-width:900px){.app{grid-template:"left view"minmax(0,1fr)"right right"minmax(0,40%)"status status"/240px minmax(0,1fr)}}.viewport{touch-action:none}.viewport canvas{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}@media (pointer:coarse){button,button.link,button.icon,.statusbar button{min-width:44px;min-height:44px;padding:6px 10px}select,input[type=number],input[type=text]{min-height:44px;font-size:16px}input[type=checkbox],input[type=radio]{width:22px;height:22px}input[type=range]{min-height:36px}.resize-handle{width:14px}.toolbar{pointer-events:none;flex-wrap:wrap;gap:4px;right:10px}.toolbar .group{pointer-events:auto}.toolbar kbd,.toolbox{display:none}.hover-tip{white-space:normal;max-width:228px}}@media (max-width:600px){html,body,#root{height:auto;min-height:100%}html{scroll-padding-top:56vh}.app{flex-direction:column;height:auto;min-height:100vh;display:flex}.viewport{z-index:2;height:55vh;background:var(--bg);flex:none;order:-1;height:55svh;position:sticky;top:0}.sidebar{border:0;border-bottom:1px solid var(--line);overflow:visible}.resize-handle{display:none}.statusbar{white-space:normal;flex-wrap:wrap;gap:4px 12px}.volume-overlay{flex-wrap:wrap;gap:4px 12px;top:auto;bottom:30px;left:10px}}@media (pointer:coarse) and (max-height:500px) and (min-width:601px){html,body,#root{height:auto;min-height:100%}.app{grid-template:"view left""view right""view status""view."minmax(0,1fr)/minmax(0,1fr) 300px;height:auto}.viewport{height:100vh;align-self:start;height:100svh;position:sticky;top:0}.sidebar{border:0;border-bottom:1px solid var(--line);overflow:visible}.resize-handle{display:none}.statusbar{white-space:normal;flex-wrap:wrap}}
