:root{--ink: #000000;--paper: #ffffff;--ui-bg: #f4f4f4;--ui-border: #cccccc;--ui-active-bg: #000000;--ui-active-fg: #ffffff;--stroke-visible-width: 1.35px;--stroke-tangent-width: .6px;--stroke-hidden-width: .65px;--stroke-hidden-dash: 4 3;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-ui: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--control-h: 26px;--guide: #5847a3;--guide-soft: #ece9f6;--guide-line: #cfc8e8;--guide-fg: #ffffff;--sidebar-width: 320px}*{box-sizing:border-box;margin:0;padding:0}html,body{width:100%;height:100%;overflow:hidden;background:var(--paper);color:var(--ink);font-family:var(--font-ui);font-size:13px}#app{display:flex;flex-direction:row;width:100%;height:100%}.toolbar{display:flex;flex-direction:column;flex:0 0 var(--sidebar-width);width:var(--sidebar-width);min-height:0;background:var(--ui-bg);border-right:1px solid var(--ui-border);-webkit-user-select:none;user-select:none}.toolbar-top{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--ui-border)}.toolbar-actions{display:flex;gap:4px;margin-left:auto}.toolbar-menu{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}.stepper{list-style:none;padding:4px 0}.step{position:relative;padding:6px 12px 10px 44px;border-left:3px solid transparent;outline-offset:-2px}.step:before{content:"";position:absolute;left:22px;top:28px;bottom:-8px;width:1px;background:var(--ui-border)}.step:last-child:before{display:none}.step-head{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}.step-num{position:absolute;left:11px;top:5px;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;border:1px solid var(--ui-border);background:var(--paper);font-size:11px;font-weight:700;line-height:1}.step-title{font:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.step-summary{margin-left:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;opacity:.7}.step-body{display:flex;flex-direction:column;gap:6px}.ctl{display:flex;flex-direction:column;gap:4px;min-width:0}.ctl-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;opacity:.7}.ctl-scope{margin-left:4px;font-weight:400;text-transform:none;letter-spacing:0;opacity:.85}.grid-2,.grid-3,.grid-4,.grid-look,.grid-presets{display:grid;gap:4px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-look{grid-template-columns:minmax(0,1fr) minmax(0,.8fr) minmax(0,1.3fr)}.grid-presets{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,.9fr)}.grid-presets button:last-child{grid-column:4;grid-row:1 / span 2}.toolbar button,.toolbar select,.toolbar .file-label,.toolbar input[type=number],.chip span{min-height:var(--control-h);min-width:0;padding:3px 6px;font-size:12px}.toolbar select,.toolbar input[type=number]{width:100%}.toolbar .file-label,.grid-2>button,.grid-3>button,.grid-4>button,.grid-presets>button{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.btn-quiet{border-color:var(--ui-border)}.chip{position:relative;display:flex;min-width:0;cursor:pointer}.chip input{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.chip span{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:4px;border:1px solid var(--ink);background:var(--paper);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip:hover input:not(:disabled)+span{background:#e6e6e6}.chip input:checked+span{border-color:var(--guide);background:var(--guide-soft);color:var(--guide);font-weight:700}.chip input:checked+span:before{content:"✓"}.chip input:focus-visible+span{outline:2px solid var(--guide);outline-offset:1px}.chip input:disabled,.chip input:disabled+span{cursor:not-allowed}.chip input:disabled+span{opacity:.45}.step[data-state=done] .step-num{border-color:var(--guide-line);background:var(--guide-soft);color:var(--guide);font-size:0}.step[data-state=done] .step-num:after{content:"✓";font-size:12px}.step[aria-current=step]{background:var(--guide-soft);border-left-color:var(--guide)}.step[aria-current=step] .step-num{border-color:var(--guide);background:var(--guide);color:var(--guide-fg);font-size:11px}.step[aria-current=step] .step-num:after{content:none}.step[aria-current=step] .step-title{color:var(--guide)}.step[data-state=upcoming] .step-head{opacity:.55}.export-actions{margin-top:2px}.toolbar .export-actions .btn-export{min-height:34px}.status-bar{padding:8px 12px;border-top:1px solid var(--ui-border);font-size:11px;line-height:1.4;overflow-wrap:anywhere}.axis-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px}.axis-dot-x{background:#d93025}.axis-dot-y{background:#188038}.axis-dot-z{background:#1a73e8}.btn-axis-x:hover:not(:disabled){border-color:#d93025;background:#d9302514}.btn-axis-y:hover:not(:disabled){border-color:#188038;background:#18803814}.btn-axis-z:hover:not(:disabled){border-color:#1a73e8;background:#1a73e814}.active-view-select{font-weight:600}.btn-help{font-weight:700;padding:4px 8px}.tilt-controls input[type=number]{border:1px solid var(--ink);background:var(--paper);color:var(--ink);font-family:inherit;text-align:center}select{padding:3px 6px;background:var(--paper);color:var(--ink);border:1px solid var(--ink);font-family:inherit;font-size:12px;cursor:pointer}button.btn-export{font-weight:600}button,.file-label{display:inline-flex;align-items:center;justify-content:center;padding:4px 10px;background:var(--paper);color:var(--ink);border:1px solid var(--ink);font-family:inherit;font-size:12px;cursor:pointer}button:hover:not(:disabled),.file-label:hover{background:#e6e6e6}button:disabled{opacity:.45;cursor:not-allowed}button.active{background:var(--ui-active-bg);color:var(--ui-active-fg)}button.btn-export{padding:6px 10px;background:var(--ui-active-bg);color:var(--ui-active-fg)}button.btn-export:hover:not(:disabled){background:var(--guide);border-color:var(--guide)}input[type=file]{display:none}.status-bar.error{text-decoration:underline}.viewport{position:relative;flex:1 1 auto;min-width:0;height:100%;background:var(--paper);overflow:hidden}.drawing-canvas{width:100%;height:100%;display:block;background:var(--paper);cursor:grab;touch-action:none}.drawing-canvas.tool-orbit{cursor:crosshair}.drawing-canvas.is-panning{cursor:grabbing}.drawing-canvas.is-orbiting{cursor:move}.edge-visible{fill:none;stroke:var(--ink);stroke-width:var(--stroke-visible-width);stroke-linecap:round;stroke-linejoin:round}.hlr-tangent{fill:none;stroke:var(--ink);stroke-width:var(--stroke-tangent-width);stroke-opacity:.45;stroke-linecap:round;stroke-linejoin:round}.hlr-hidden{fill:none;stroke:var(--ink);stroke-width:var(--stroke-hidden-width);stroke-opacity:.38;stroke-dasharray:var(--stroke-hidden-dash);stroke-linecap:round;stroke-linejoin:round}.drawing-canvas.tool-dimension{cursor:crosshair}.dim-item{color:var(--ink)}.dim-item.is-hovered,.dim-item.is-selected{color:#05c}.dim-ext-line,.dim-line{fill:none;stroke:currentColor;stroke-width:.75px;stroke-linecap:round}.dim-item.is-hovered .dim-ext-line,.dim-item.is-hovered .dim-line,.dim-item.is-selected .dim-ext-line,.dim-item.is-selected .dim-line{stroke-width:1.5px}.dim-arrow{fill:currentColor;stroke:none}.dim-text-halo{fill:var(--paper);stroke:var(--paper);stroke-width:2.5px;stroke-linejoin:round;paint-order:stroke fill;font-family:Arial,Helvetica,sans-serif;font-weight:600;-webkit-user-select:none;user-select:none;pointer-events:none}.dim-text{fill:currentColor;font-family:Arial,Helvetica,sans-serif;font-weight:600;-webkit-user-select:none;user-select:none;cursor:move}.dim-hit{fill:none;stroke:transparent;stroke-width:10px;cursor:move}.snap-highlight-edge{fill:none;stroke:#06f;stroke-width:2.5px;stroke-linecap:round;pointer-events:none}.snap-highlight-edge.snap-anchor{stroke:#f60;stroke-width:3px}.snap-highlight-point{fill:#fff;stroke:#06f;stroke-width:2.2px;pointer-events:none}.snap-highlight-point.snap-center{fill:#00a86b;stroke:#fff}.snap-highlight-point.snap-midpoint{fill:#22c55e;stroke:#fff}.snap-highlight-point.snap-anchor{fill:#f60;stroke:#fff;stroke-width:2px}.snap-highlight-face{fill:#0066ff24;stroke:#06f;stroke-width:1.8px;pointer-events:none}.snap-highlight-face.snap-anchor{fill:#ff66002e;stroke:#f60;stroke-width:2.2px}.inspect-delta-line{fill:none;stroke-width:1.4px;stroke-dasharray:4 3;pointer-events:none}.inspect-axis-x{stroke:#d93025}.inspect-axis-y{stroke:#188038}.inspect-axis-z{stroke:#1a73e8}.inspect-axis-direct{stroke:#f60;stroke-width:1.8px;stroke-dasharray:none}.inspect-panel{position:absolute;top:12px;right:12px;width:290px;background:#fffffff5;border:1px solid var(--ink);box-shadow:0 4px 12px #0000001f;font-size:12px;z-index:10;-webkit-user-select:text;user-select:text}.inspect-panel.hidden{display:none}.inspect-header{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:var(--ui-bg);border-bottom:1px solid var(--ui-border);font-weight:700}.inspect-actions{display:flex;gap:4px}.inspect-actions button{padding:2px 7px;font-size:11px}.inspect-body{padding:8px 10px;display:flex;flex-direction:column;gap:5px}.inspect-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.inspect-row.primary{font-size:13px;font-weight:700;padding-bottom:4px;border-bottom:1px solid var(--ui-border)}.inspect-deltas{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding-top:4px;border-top:1px dashed var(--ui-border);font-size:11px}.inspect-delta-badge{padding:2px 4px;border-radius:2px;text-align:center;font-weight:600}.inspect-delta-badge.dx{background:#d930251a;color:#b31412}.inspect-delta-badge.dy{background:#1880381a;color:#137333}.inspect-delta-badge.dz{background:#1a73e81a;color:#174ea6}.inspect-hint{margin-top:6px;font-size:11px;color:#6b7280}.dim-text-editor{position:absolute;z-index:20;transform:translate(-50%,-50%);min-width:90px;padding:2px 6px;font:13px monospace;border:1px solid #0066ff;border-radius:3px;background:#fff}.loading-bar{position:absolute;top:0;left:0;right:0;height:3px;overflow:hidden;background:#0066ff26;z-index:30;pointer-events:none}.loading-bar.hidden{display:none}.loading-bar-fill{position:absolute;top:0;bottom:0;width:35%;background:#06f;animation:loading-slide 1.1s ease-in-out infinite}@keyframes loading-slide{0%{left:-35%}to{left:100%}}body.theme-atelier{--ink: #362f2b;--paper: #f4efea;--ui-bg: #eae3dc;--ui-border: #d2c9be;--ui-active-bg: #362f2b;--ui-active-fg: #faf7f2;--stroke-visible-width: 1.2px;--font-mono: "JetBrains Mono", ui-monospace, Consolas, monospace;--guide: #855f3b;--guide-soft: #f1e6d9;--guide-line: #dcc7af;--guide-fg: #faf7f2;color:#231f1d}body.mode-icon{--stroke-visible-width: 2.35px;--stroke-tangent-width: 1px;--stroke-hidden-width: 1.15px;--stroke-hidden-dash: 6 4}body.theme-atelier.mode-icon{--stroke-visible-width: 2.15px}body.mode-icon .dim-ext-line,body.mode-icon .dim-line{stroke-width:1.45px}body.mode-icon .dim-item.is-hovered .dim-ext-line,body.mode-icon .dim-item.is-hovered .dim-line,body.mode-icon .dim-item.is-selected .dim-ext-line,body.mode-icon .dim-item.is-selected .dim-line{stroke-width:2.4px}body.mode-icon .dim-text,body.mode-icon .dim-text-halo,body.mode-icon .callout-text,body.mode-icon .callout-text-halo{font-weight:700}body.mode-icon .dim-text-halo,body.mode-icon .callout-text-halo{stroke-width:4.5px}body.mode-icon .callout-leader{stroke-width:1.65px}body.mode-icon .view-shading .atelier-top{stroke-width:4px}.view-shading .atelier-shadow{fill:#362f2b14;stroke:none}.view-shading .atelier-face{stroke-width:.35px;stroke-linejoin:round}.view-shading .atelier-top{stroke:#faf7f2;stroke-opacity:.75;stroke-width:2.6px;stroke-linejoin:round}body.theme-atelier .edge-visible{stroke:#362f2b}body.theme-atelier .dim-item{color:#8c857b}body.theme-atelier .dim-item.is-hovered,body.theme-atelier .dim-item.is-selected{color:#a87b51}body.theme-atelier .dim-text,body.theme-atelier .dim-text-halo{font-family:Plus Jakarta Sans,Segoe UI,Arial,sans-serif;font-weight:600}body.theme-atelier .dim-text{fill:#231f1d}body.theme-atelier .dim-item.is-selected .dim-text,body.theme-atelier .dim-item.is-hovered .dim-text{fill:#a87b51}body.theme-atelier .snap-highlight-edge,body.theme-atelier .snap-highlight-face{stroke:#e8833a}body.theme-atelier .snap-highlight-face{fill:#e8833a1f}body.theme-atelier .loading-bar-fill{background:#a87b51}body.theme-atelier .inspect-panel{background:#faf7f2;border-color:#d2c9be;color:#231f1d}body.theme-atelier #inspect-title{font-family:Plus Jakarta Sans,Segoe UI,Arial,sans-serif;font-weight:600}body.theme-atelier .inspect-row,body.theme-atelier .inspect-hint{font-family:JetBrains Mono,ui-monospace,Consolas,monospace;color:#6e675f;text-transform:uppercase;letter-spacing:.08em}.loading-info{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);z-index:25;min-width:320px;max-width:420px;padding:14px 16px;background:var(--ui-bg);border:1px solid var(--ui-border);border-radius:6px;box-shadow:0 6px 24px #00000014;font-family:var(--font-mono);font-size:12px;color:var(--ink);pointer-events:none}.loading-info.hidden{display:none}.loading-title{font-weight:600;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loading-track{position:relative;height:6px;overflow:hidden;border-radius:3px;background:#0066ff26}.loading-track-fill{position:absolute;top:0;bottom:0;left:0;width:0;background:#06f;transition:width .15s linear}.loading-track-fill.indeterminate{width:35%;transition:none;animation:loading-slide 1.1s ease-in-out infinite}.loading-meta{display:flex;justify-content:space-between;gap:12px;margin-top:6px;color:#666}body.theme-atelier .loading-track{background:#a87b512e}body.theme-atelier .loading-track-fill{background:#a87b51}body.theme-atelier .loading-meta{color:#6e675f}.dim-item.is-edge-on{opacity:.3}.drawing-canvas.tool-callout{cursor:crosshair}.drawing-canvas.tool-arrange{cursor:move}.callout-item{color:var(--ink)}.callout-item.is-hovered,.callout-item.is-selected{color:#05c}body.theme-atelier .callout-item{color:#6e675f}body.theme-atelier .callout-item.is-hovered,body.theme-atelier .callout-item.is-selected{color:#a87b51}.callout-leader{fill:none;stroke:currentColor;stroke-width:.9px;stroke-linecap:round;stroke-linejoin:round}.callout-item.is-hovered .callout-leader,.callout-item.is-selected .callout-leader{stroke-width:1.5px}.callout-arrow,.callout-dot{fill:currentColor;stroke:none}.callout-text-halo{fill:var(--paper);stroke:var(--paper);stroke-width:2.5px;stroke-linejoin:round;paint-order:stroke fill;font-family:Arial,Helvetica,sans-serif;font-weight:600;letter-spacing:.02em;-webkit-user-select:none;user-select:none;pointer-events:none}.callout-text{fill:var(--ink);font-family:Arial,Helvetica,sans-serif;font-weight:600;letter-spacing:.02em;-webkit-user-select:none;user-select:none;cursor:move}body.theme-atelier .callout-text,body.theme-atelier .callout-text-halo{font-family:Plus Jakarta Sans,Segoe UI,Arial,sans-serif}body.theme-atelier .callout-text{fill:#231f1d}.callout-item.is-hovered .callout-text,.callout-item.is-selected .callout-text{fill:#05c}body.theme-atelier .callout-item.is-hovered .callout-text,body.theme-atelier .callout-item.is-selected .callout-text{fill:#a87b51}.callout-hit{fill:none;stroke:transparent;stroke-width:11px;cursor:move}.callout-text-editor{position:absolute;z-index:22;transform:translate(-50%,-50%);min-width:180px;min-height:46px;padding:5px 8px;font:12px var(--font-mono);border:1.5px solid #0066ff;border-radius:4px;background:var(--paper);color:var(--ink);box-shadow:0 4px 14px #00000029;resize:both}.view-ui-outline{fill:none;stroke:#0066ff40;stroke-width:1px;stroke-dasharray:5 4;pointer-events:none}.view-ui-outline.is-active{stroke:#0066ff8c;stroke-width:1.25px}.view-ui-outline.is-hovered{stroke:#06fc}body.theme-atelier .view-ui-outline{stroke:#a87b5159}body.theme-atelier .view-ui-outline.is-active{stroke:#a87b51bf}.view-pill{cursor:move}.view-pill-bg{fill:var(--ui-bg);stroke:var(--ui-border);stroke-width:1px}.view-pill.is-active .view-pill-bg{fill:var(--ui-active-bg);stroke:var(--ui-active-bg)}.view-pill-text{fill:var(--ink);font-family:var(--font-mono);font-weight:600;-webkit-user-select:none;user-select:none;pointer-events:none}.view-pill.is-active .view-pill-text{fill:var(--ui-active-fg)}.alignment-guide{fill:none;stroke:#e11d48;stroke-width:1.2px;stroke-dasharray:4 3;pointer-events:none}.axis-triad-bg{fill:#ffffffd1;stroke:#00000024;stroke-width:1px;pointer-events:none}body.theme-atelier .axis-triad-bg{fill:#faf7f2d9;stroke:#362f2b33}.axis-triad-origin{fill:var(--ink);pointer-events:none}.triad-axis{cursor:pointer}.triad-axis-line{stroke:currentColor;stroke-width:1.8px;stroke-linecap:round}.triad-axis.is-hovered .triad-axis-line{stroke-width:2.8px}.triad-axis-x{color:#d93025}.triad-axis-y{color:#188038}.triad-axis-z{color:#1a73e8}.triad-axis-tip{fill:currentColor}.triad-axis-badge{fill:var(--paper);stroke:currentColor;stroke-width:1.2px}.triad-axis.is-hovered .triad-axis-badge{fill:currentColor}.triad-axis-label{fill:currentColor;font-family:Arial,Helvetica,sans-serif;font-weight:700;-webkit-user-select:none;user-select:none;pointer-events:none}.triad-axis.is-hovered .triad-axis-label{fill:#fff}.part-rot-preview{pointer-events:none}.part-rot-axis-x{color:#d93025}.part-rot-axis-y{color:#188038}.part-rot-axis-z{color:#1a73e8}.part-rot-axis-line{stroke:currentColor;stroke-width:1.8px;stroke-dasharray:6 4}.part-rot-ring{fill:none;stroke:currentColor;stroke-width:1.4px;stroke-opacity:.45;stroke-dasharray:4 3}.part-rot-arc-active{fill:none;stroke:currentColor;stroke-width:3px;stroke-linecap:round}.part-rot-arrow{fill:currentColor}.part-rot-tag{fill:currentColor;font-family:var(--font-mono);font-weight:700;paint-order:stroke fill;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round}.shortcuts-popover{position:absolute;right:12px;bottom:12px;width:440px;max-width:calc(100% - 24px);max-height:calc(100% - 24px);overflow-y:auto;background:var(--paper);border:1px solid var(--ink);box-shadow:0 6px 18px #00000024;font-size:11px;z-index:24}.shortcuts-popover.hidden{display:none}.shortcuts-grid{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;padding:8px 12px;align-items:baseline}.shortcuts-grid kbd{display:inline-block;padding:0 4px;font-family:var(--font-ui);font-size:10px;font-weight:600;background:var(--ui-bg);border:1px solid var(--ui-border);border-radius:3px}.frame-mask{fill:#12121438;pointer-events:none}.frame-border{fill:none;stroke:#06f;stroke-width:1.6px;stroke-dasharray:6 4;pointer-events:none}body.theme-atelier .frame-border{stroke:#a87b51}.frame-badge{cursor:move}.frame-badge-bg{fill:#06f;stroke:none}body.theme-atelier .frame-badge-bg{fill:#a87b51}.frame-badge-text{fill:#fff;font-family:var(--font-mono);font-weight:600;-webkit-user-select:none;user-select:none;pointer-events:none}.frame-handle{fill:#fff;stroke:#06f;stroke-width:1.6px}body.theme-atelier .frame-handle{stroke:#a87b51}.frame-handle-nw,.frame-handle-se{cursor:nwse-resize}.frame-handle-ne,.frame-handle-sw{cursor:nesw-resize}.frame-handle-n,.frame-handle-s{cursor:ns-resize}.frame-handle-e,.frame-handle-w{cursor:ew-resize}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-links ul{list-style:none}.inspect-title{font:inherit}.skip-links a{position:absolute;top:8px;left:8px;z-index:100;text-decoration:none;transform:translateY(-200%)}.skip-links a:focus{transform:none}.menu-toggle{display:none}.file-label:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media (max-width: 760px){#app{flex-direction:column}.toolbar{flex:0 0 auto;width:100%;border-right:none;border-bottom:1px solid var(--ui-border)}.menu-toggle{display:inline-flex}.toolbar-menu{display:none}.toolbar.is-open .toolbar-menu{display:block;max-height:60vh}.status-bar{padding:6px 12px}}
