.viewport{background:var(--scene-bg);width:100%;height:100%;position:relative;overflow:hidden}.viewport-canvas{width:100%;height:100%;position:relative}.viewport-canvas canvas{display:block;position:absolute;inset:0}.viewport-message{justify-content:center;gap:var(--spacing-md);max-width:46ch;padding:var(--spacing-xl);text-align:center;flex-direction:column;margin:0 auto;display:flex;position:absolute;inset:0}.viewport-message h2{margin:0;font-size:1.25rem}.viewport-message p{color:var(--muted);margin:0;line-height:1.6}.icon{fill:none;stroke:currentColor;width:20px;height:20px;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.icon .icon-solid{fill:currentColor;stroke:none}.rail{background:var(--chrome-bg);border-right:1px solid var(--chrome-border);width:140px;color:var(--chrome-text);flex-direction:column;flex-shrink:0;display:flex;overflow-y:auto}.rail-brand{padding:var(--spacing-md) var(--spacing-md) var(--spacing-sm);letter-spacing:.02em;color:var(--chrome-text);flex-shrink:0;font-weight:700}.rail-section{flex-direction:column;display:flex}.rail-heading{align-items:center;gap:var(--spacing-xs);padding:3px var(--spacing-sm);border:0;border-top:1px solid var(--chrome-border);border-bottom:1px solid var(--chrome-border);background:var(--chrome-raised);color:var(--chrome-text);font:inherit;letter-spacing:.1em;text-transform:uppercase;text-align:left;cursor:pointer;font-size:.68rem;display:flex}.rail-heading:hover{background:var(--chrome-hover)}.rail-chevron{width:.7em;font-size:.8em}.rail-items{flex-direction:column;padding-bottom:3px;display:flex}.rail-item{justify-content:space-between;align-items:center;gap:var(--spacing-xs);padding:3px var(--spacing-md);color:var(--chrome-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-left:2px solid #0000;font-size:.84rem;display:flex}.rail-item:hover:not(:disabled){background:var(--chrome-hover)}.rail-item:disabled{color:var(--chrome-muted);cursor:default}.rail-item.is-active{background:var(--chrome-raised);border-left-color:var(--chrome-accent);color:var(--chrome-accent)}.rail-tiles{padding:3px 5px var(--spacing-xs);grid-template-columns:1fr 1fr;grid-auto-rows:minmax(44px,auto);gap:2px;display:grid}.rail-tile{border-radius:var(--rounded);text-align:center;border:1px solid #0000;flex-direction:column;justify-content:flex-start;gap:1px;padding:9px 2px 3px;position:relative}.rail-tile .rail-term{letter-spacing:0;font-size:.62rem;line-height:1.1}.rail-tile.is-active{border-color:var(--chrome-accent)}.rail-section--commands{margin-top:var(--spacing-sm)}.rail-key{font-family:var(--font-mono);color:var(--chrome-muted);flex-shrink:0;font-size:.7rem}.rail-tile .rail-key{font-size:.56rem;position:absolute;top:2px;right:4px}.rail-item.is-active .rail-key{color:var(--chrome-accent)}.rail-item:focus-visible,.rail-heading:focus-visible{outline:2px solid var(--chrome-accent);outline-offset:-2px}.command{pointer-events:none;left:var(--spacing-lg);bottom:var(--spacing-lg);width:min(52ch, calc(100% - var(--spacing-xl) * 2));gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg);border:1px solid var(--accent);border-radius:var(--rounded);box-shadow:0 2px 8px var(--shadow);flex-direction:column;display:flex;position:absolute}.command-log{pointer-events:auto;max-height:14rem;font-family:var(--font-mono);color:var(--text);font-size:.8rem;line-height:1.45;overflow-y:auto}.command-line{white-space:pre-wrap;overflow-wrap:break-word}.command-line.is-in{color:var(--accent)}.command-line.is-log,.command-line.is-out{color:var(--text)}.command-line.is-warn{color:var(--muted)}.command-line.is-error{color:var(--error)}.command-input{pointer-events:auto;resize:none;width:100%;padding:var(--spacing-xs);font-family:var(--font-mono);color:var(--text);background:var(--bg-alt);border:1px solid var(--border);border-radius:var(--rounded);outline:none;font-size:.85rem;line-height:1.45}.command-input:focus{border-color:var(--accent)}.command-input::placeholder{color:var(--muted)}.command-input:read-only{color:var(--muted);background:var(--bg)}.measurement{align-items:center;gap:var(--spacing-md);height:34px;padding:0 var(--spacing-lg);background:var(--chrome-bg);border-bottom:1px solid var(--chrome-border);flex-shrink:0;display:flex;overflow:hidden}.measurement-tool{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--chrome-muted);border-right:1px solid var(--chrome-border);padding-right:var(--spacing-md);flex-shrink:0;font-size:.65rem;line-height:34px}.measurement-value{min-width:0;color:color-mix(in srgb, var(--chrome-text) 80%, transparent);text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.9rem;overflow:hidden}.measurement.is-measure .measurement-value{font-family:var(--font-mono);color:var(--chrome-text);font-size:.95rem}.measurement-input{border:none;border-bottom:2px solid var(--chrome-accent);font-family:var(--font-mono);color:var(--chrome-text);background:0 0;outline:none;padding:0 0 2px;font-size:.95rem}.measurement-hint{color:var(--chrome-muted);flex-shrink:0;font-size:.75rem}.measurement-context{color:var(--chrome-accent);white-space:nowrap;flex-shrink:0;font-size:.8rem;font-weight:600}.export-scrim{background:color-mix(in srgb, var(--text) 25%, transparent);z-index:10;place-items:center;display:grid;position:fixed;inset:0}.export-dialog{width:min(440px, calc(100vw - 2 * var(--spacing-xl)));gap:var(--spacing-lg);padding:var(--spacing-xl);background:var(--bg);border:1px solid var(--border);border-radius:var(--rounded-lg);box-shadow:0 12px 40px var(--shadow);flex-direction:column;display:flex}.export-title{margin:0;font-size:1.05rem}.export-formats{gap:var(--spacing-sm);display:flex}.export-format{padding:var(--spacing-md);border:1px solid var(--border);border-radius:var(--rounded);cursor:pointer;flex-direction:column;flex:1;gap:2px;display:flex}.export-format.is-active{background:var(--accent-soft);border-color:var(--accent)}.export-format input{opacity:0;pointer-events:none;position:absolute}.export-plain{font-size:.85rem}.export-term{color:var(--accent);font-weight:600}.export-field{gap:var(--spacing-xs);flex-direction:column;font-size:.85rem;display:flex}.export-hint{color:var(--muted)}.export-deflection{width:10ch;padding:var(--spacing-xs) var(--spacing-sm);font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--rounded);font-size:.9rem}.export-refusal{gap:var(--spacing-xs);padding:var(--spacing-md);border:1px solid var(--error);border-radius:var(--rounded);color:var(--text);flex-direction:column;font-size:.85rem;display:flex}.export-refusal p{margin:0}.export-actions{justify-content:flex-end;gap:var(--spacing-sm);display:flex}.export-cancel,.export-go{padding:var(--spacing-xs) var(--spacing-lg);font:inherit;border-radius:var(--rounded);cursor:pointer}.export-cancel{color:var(--text);background:var(--bg);border:1px solid var(--border)}.export-go{color:var(--bg);background:var(--accent);border:1px solid var(--accent)}.export-go:disabled{opacity:.6;cursor:default}.export-note{color:var(--muted);margin:0;font-size:.85rem}.restore-scrim{background:color-mix(in srgb, var(--text) 25%, transparent);z-index:10;place-items:center;display:grid;position:fixed;inset:0}.restore-dialog{width:min(420px, calc(100vw - 2 * var(--spacing-xl)));gap:var(--spacing-lg);padding:var(--spacing-xl);background:var(--bg);border:1px solid var(--border);border-radius:var(--rounded-lg);box-shadow:0 12px 40px var(--shadow);flex-direction:column;display:flex}.restore-title{margin:0;font-size:1.05rem}.restore-body{color:var(--muted);margin:0;font-size:.85rem}.restore-actions{justify-content:flex-end;gap:var(--spacing-sm);display:flex}.restore-fresh,.restore-go{padding:var(--spacing-xs) var(--spacing-lg);font:inherit;border-radius:var(--rounded);cursor:pointer}.restore-fresh{color:var(--text);background:var(--bg);border:1px solid var(--border)}.restore-go{color:var(--bg);background:var(--accent);border:1px solid var(--accent)}.snap-panel{position:relative}.snap-panel-button{align-items:baseline;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-md);background:var(--chrome-raised);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded);font:inherit;cursor:pointer;font-size:.85rem;display:flex}.snap-panel-button:hover{background:var(--chrome-hover);border-color:var(--chrome-accent)}.snap-panel-count{color:var(--chrome-muted);font-size:.8rem}.snap-panel-menu{right:0;top:calc(100% + var(--spacing-xs));min-width:280px;padding:var(--spacing-sm);background:var(--chrome-bg);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded-lg);gap:var(--spacing-xs);z-index:10;flex-direction:column;display:flex;position:absolute;box-shadow:0 8px 24px #00000073}.snap-panel-row{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--rounded);cursor:pointer;font-size:.85rem;display:flex}.snap-panel-row:hover{background:var(--chrome-hover)}.snap-panel-row .snap-panel-plain{flex:1}.snap-panel-term{color:var(--chrome-accent);font-size:.85rem}.snap-panel-row input{accent-color:var(--chrome-accent)}.units-panel{position:relative}.units-panel-button{align-items:baseline;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-md);background:var(--chrome-raised);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded);font:inherit;cursor:pointer;font-size:.85rem;display:flex}.units-panel-button:hover{background:var(--chrome-hover);border-color:var(--chrome-accent)}.units-panel-term{color:var(--chrome-accent);font-size:.85rem}.units-panel-menu{right:0;top:calc(100% + var(--spacing-xs));min-width:220px;padding:var(--spacing-sm);background:var(--chrome-bg);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded-lg);gap:var(--spacing-xs);z-index:10;flex-direction:column;display:flex;position:absolute;box-shadow:0 8px 24px #00000073}.units-panel-row{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--rounded);cursor:pointer;font-size:.85rem;display:flex}.units-panel-row:hover{background:var(--chrome-hover)}.units-panel-row .units-panel-plain{flex:1}.units-panel-row input{accent-color:var(--chrome-accent)}.units-panel-divider{height:1px;margin:var(--spacing-xs) 0;background:var(--chrome-border)}.units-panel-imperial{flex-direction:column;display:flex}.units-panel-denominators{gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);flex-wrap:wrap;display:flex}.units-panel-denom{padding:var(--spacing-xs) var(--spacing-sm);background:var(--chrome-raised);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded);font:inherit;cursor:pointer;font-size:.8rem}.units-panel-denom:hover{background:var(--chrome-hover)}.units-panel-denom-active{background:var(--chrome-accent);color:var(--chrome-bg);border-color:var(--chrome-accent)}.paint-panel{position:relative}.paint-panel-button{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-md);background:var(--chrome-raised);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded);font:inherit;cursor:pointer;font-size:.85rem;display:flex}.paint-panel-button:hover:not(:disabled){background:var(--chrome-hover);border-color:var(--chrome-accent)}.paint-panel-button:disabled{opacity:.5;cursor:default}.paint-panel-term{color:var(--chrome-accent);font-size:.85rem}.paint-panel-name{color:var(--chrome-muted);font-size:.8rem}.paint-panel-chip{border-radius:var(--rounded);border:1px solid var(--chrome-border);width:18px;height:18px}.paint-panel-menu{right:0;top:calc(100% + var(--spacing-xs));min-width:280px;padding:var(--spacing-sm);background:var(--chrome-bg);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded-lg);gap:var(--spacing-xs);z-index:10;flex-direction:column;display:flex;position:absolute;box-shadow:0 8px 24px #00000073}.paint-panel-heading{margin:var(--spacing-sm) 0 var(--spacing-xs);color:var(--chrome-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:600}.paint-panel-note{margin:0 0 var(--spacing-xs);color:var(--chrome-muted);font-size:.75rem}.paint-panel-grid{gap:var(--spacing-xs);flex-wrap:wrap;display:flex}.paint-panel-swatch{border:1px solid var(--chrome-border);border-radius:var(--rounded);cursor:pointer;width:28px;height:28px;padding:0}.paint-panel-swatch:hover{border-color:var(--chrome-accent)}.paint-panel-swatch.is-loaded{outline:2px solid var(--chrome-accent);outline-offset:1px}.paint-panel-edit{align-items:center;gap:var(--spacing-sm);display:flex}.paint-panel-edit input[type=color]{border:1px solid var(--chrome-border);border-radius:var(--rounded);cursor:pointer;background:0 0;width:36px;height:28px;padding:0}.paint-panel-edit input[type=text]{min-width:0;padding:var(--spacing-xs) var(--spacing-sm);background:var(--chrome-raised);color:var(--chrome-text);border:1px solid var(--chrome-border);border-radius:var(--rounded);font:inherit;flex:1;font-size:.85rem}.app{height:100dvh;display:flex;overflow:hidden}.app-main{flex-direction:column;flex:1;min-width:0;display:flex}.app-bar{align-items:center;gap:var(--spacing-md);height:44px;padding:0 var(--spacing-lg);background:var(--chrome-bg);border-bottom:1px solid var(--chrome-border);color:var(--chrome-text);flex-shrink:0;display:flex;position:relative}.app-tagline{color:var(--chrome-muted);font-size:.85rem}.app-build{color:var(--chrome-muted);font-size:.75rem;font-family:var(--font-mono)}.app-bar-controls{right:var(--spacing-lg);align-items:center;gap:var(--spacing-sm);display:flex;position:absolute;top:0;bottom:0}.app-body{flex:1;min-height:0;position:relative}.app-error{left:var(--spacing-lg);right:var(--spacing-lg);bottom:var(--spacing-lg);gap:var(--spacing-xs);padding:var(--spacing-md) var(--spacing-lg);background:var(--bg);border:1px solid var(--error);border-radius:var(--rounded);box-shadow:0 4px 16px var(--shadow);color:var(--text);flex-direction:column;display:flex;position:absolute}.app-error code{font-family:var(--font-mono);color:var(--muted);overflow-wrap:anywhere;font-size:.8rem}@media (width<=720px){.app-tagline{display:none}}:root{--bg:#fff;--bg-alt:#f4f5f7;--border:#dcdfe4;--shadow:#0f172a1f;--text:#1a1d21;--muted:#6b7280;--accent:#1f6feb;--accent-soft:#e8f0fe;--error:#dc2626;--success:#16a34a;--chrome-bg:#23262b;--chrome-raised:#2b2f36;--chrome-border:#383d45;--chrome-text:#e8eaed;--chrome-muted:#969ca6;--chrome-hover:#32373f;--chrome-accent:#4c8dff;--scene-bg:#f7f9fc;--scene-grid:#ccd3db;--scene-grid-major:#a7b1bd;--scene-sun:#fffaf2;--scene-sky:#d2dff0;--scene-bounce:#74777d;--scene-shadow:#2b3242;--scene-shadow-strength:.26;--axis-x:#d7373f;--axis-y:#2f9e44;--axis-z:#1971c2;--solid-face:#d9dde3;--solid-edge:#2f3742;--solid-edge-width:1.6;--snap-vertex:#2f9e44;--snap-midpoint:#0c8599;--snap-edge:#d7373f;--snap-axis:#ae3ec9;--snap-parallel:#d926d9;--guide:#6f7883;--selected-face:#c3d3ee;--selected-edge:#1f6feb;--selected-mix:.35;--solid-face-outside:#e7eaee;--solid-edge-outside:#a3abb6;--context-box:#1f6feb;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:12px;--spacing-lg:16px;--spacing-xl:24px;--rounded:6px;--rounded-lg:10px;--icon-stroke:1.5;--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace}[data-theme=dark]{--bg:#16181d;--bg-alt:#1e2127;--border:#2f343d;--shadow:#00000080;--text:#e6e8eb;--muted:#9099a6;--accent:#4c8dff;--accent-soft:#1c2a41;--error:#f87171;--success:#4ade80;--scene-bg:#21242b;--scene-grid:#333942;--scene-grid-major:#495260;--scene-sun:#ece7df;--scene-sky:#8695ad;--scene-bounce:#2b2d31;--scene-shadow:#05070c;--scene-shadow-strength:.34;--axis-x:#ff6b6b;--axis-y:#51cf66;--axis-z:#4dabf7;--solid-face:#8b929c;--solid-edge:#d5dae1;--snap-vertex:#51cf66;--snap-midpoint:#22b8cf;--snap-edge:#ff6b6b;--snap-axis:#cc5de8;--snap-parallel:#e879e8;--guide:#8a95a3;--selected-face:#6b83ab;--selected-edge:#4c8dff;--solid-face-outside:#4b5058;--solid-edge-outside:#7d8593;--context-box:#4c8dff}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased}
