:root,[data-theme=dark]{--bg-void:#0e0101;--bg-panel:#170707;--bg-panel-raised:#1f0a0a;--bg-hover:#2a1010;--border:#2e1414;--border-soft:#200d0d;--text-primary:#f5efec;--text-secondary:#b3a19c;--text-muted:#6d6d6d;--accent:#eb851a;--accent-soft:#eb851a24;--accent-strong:#f5a041;--accent-ink:#201705;--select:#6fa8c9;--select-soft:#6fa8c929;--danger:#cf6a5f;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg-void:#f7f5f3;--bg-panel:#fff;--bg-panel-raised:#f0ece9;--bg-hover:#eae4e0;--border:#ddd5d0;--border-soft:#e8e2de;--text-primary:#2a2624;--text-secondary:#6d6d6d;--text-muted:#948d89;--accent:#eb851a;--accent-soft:#eb851a1f;--accent-strong:#d9770f;--accent-ink:#2a1a04;--select:#3f7fa3;--select-soft:#3f7fa324;--danger:#b8453a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root{--font-ui:"IBM Plex Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;--radius-sm:3px;--radius-md:5px}*{box-sizing:border-box}html,body{height:100dvh;height:calc(var(--vh,1vh) * 100);background:var(--bg-void);color:var(--text-primary);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;margin:0;font-size:13px;line-height:1.45;transition:background-color .15s,color .15s;overflow:hidden}#app{height:100%}button{font-family:inherit}::selection{background:var(--select-soft)}*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-track{background:0 0}.brand-mark{flex-shrink:0;width:auto;height:20px;display:block}.wordmark{letter-spacing:-.01em;color:var(--text-primary);flex-shrink:0;align-items:center;gap:8px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.nav-link{color:var(--text-secondary);border-radius:var(--radius-sm);flex-shrink:0;align-items:center;gap:6px;padding:4px 8px;font-size:12px;text-decoration:none;display:flex}.nav-link:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-link svg{width:14px;height:14px}.theme-toggle{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #0000;flex-shrink:0;justify-content:center;align-items:center;display:flex}.theme-toggle:hover{background:var(--bg-hover);color:var(--text-primary)}.theme-toggle svg{width:15px;height:15px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}@media (width<=768px),(height<=500px){.wordmark-text,.nav-link-text{display:none}.nav-link{padding:4px 6px}}.external-mode .external-hide{display:none!important}.external-only{display:none}.external-mode .external-only{display:block}.shell{grid-template-rows:44px 1fr;height:100%;display:grid}.external-mode .shell{grid-template-rows:44px auto 1fr}.topbar{background:var(--bg-panel);border-bottom:1px solid var(--border);-webkit-app-region:drag;align-items:center;gap:16px;min-width:0;padding:0 12px;display:flex}.filename{font-family:var(--font-mono);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.filename .dot{color:var(--text-muted);margin:0 8px}.toolbar{-webkit-app-region:no-drag;align-items:center;gap:2px;margin-left:auto;display:flex}.tool-btn{border-radius:var(--radius-sm);height:28px;color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:0 10px;font-size:12px;transition:background .1s,color .1s;display:flex}.tool-btn svg{flex-shrink:0;width:14px;height:14px}.tool-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}.tool-btn:disabled{opacity:.35;cursor:default}.tool-btn.active{background:var(--accent-soft);color:var(--accent-strong)}.tool-sep{background:var(--border);width:1px;height:18px;margin:0 6px}.bg-picker-wrap{position:relative}.bg-picker{background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-md);z-index:20;gap:6px;padding:8px;display:none;position:absolute;top:34px;right:0;box-shadow:0 8px 24px #00000059}.bg-picker:not([hidden]){display:flex}.bg-swatch{border-radius:var(--radius-sm);border:1px solid var(--border);cursor:pointer;width:22px;height:22px;padding:0;display:flex;overflow:hidden}.bg-swatch:hover{border-color:var(--accent)}.bg-swatch-half{width:50%;height:100%}.bg-swatch-dark{background:#0e0101}.bg-swatch-light{background:#f7f5f3}.bg-swatch-custom{background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);position:relative}.bg-swatch-custom input[type=color]{opacity:0;cursor:pointer;border:none;padding:0;position:absolute;inset:0}.bg-swatch-image{background:var(--bg-panel);color:var(--text-secondary);justify-content:center;align-items:center;display:flex;position:relative}.bg-swatch-image:hover{color:var(--text-primary)}.bg-swatch-image svg{pointer-events:none;width:13px;height:13px}.bg-swatch-image input[type=file]{opacity:0;cursor:pointer;width:100%;position:absolute;inset:0}.save-picker{flex-direction:column;width:340px}.save-picker-body{flex-direction:column;gap:8px;width:100%;display:flex}.save-picker-label{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-size:10px}.save-filename-input{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);height:30px;color:var(--text-primary);padding:0 8px;font-size:12.5px}.save-picker-actions{justify-content:flex-end;gap:8px;margin-top:2px;display:flex}.save-naming-fields{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;gap:6px;padding:8px;display:none}.save-naming-fields:not([hidden]){display:flex}.save-naming-hint{color:var(--text-secondary);margin:0;font-size:11px;line-height:1.4}.save-naming-row{grid-template-columns:1fr 1fr;gap:8px 10px;display:grid}.save-naming-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;margin-bottom:3px;font-size:10.5px;display:block}.save-naming-input{box-sizing:border-box;background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;min-width:0;height:30px;color:var(--text-primary);padding:0 8px;font-size:12.5px}.save-naming-input-upper{text-transform:uppercase}.section-picker{width:300px}.section-axis-row{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.section-axis-row .tool-btn{border:1px solid var(--border);background:var(--bg-panel);justify-content:center}.save-result{color:var(--text-secondary);word-break:break-all;font-size:11.5px;line-height:1.4}.save-result a{color:var(--accent-strong)}.locations-picker,.sessions-picker{width:260px}.sessions-picker{z-index:60;position:fixed;top:auto;right:auto}.locations-save-row{gap:6px;display:flex}.locations-save-row .save-filename-input{flex:1}.locations-save-row .upload-btn{flex-shrink:0;padding:0 12px}.locations-list{flex-direction:column;gap:2px;max-height:220px;margin-top:4px;display:flex;overflow-y:auto}.locations-empty{color:var(--text-muted);padding:6px 2px;font-size:11.5px}.location-row{border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:6px;padding:6px;display:flex}.location-row:hover{background:var(--bg-hover)}.location-row-name{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12.5px;overflow:hidden}.grey-small{color:var(--text-muted);font-size:11px}.location-row-delete{width:20px;height:20px;color:var(--text-muted);border-radius:var(--radius-sm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.location-row-delete:hover{color:var(--danger);background:var(--bg-panel)}.location-row-delete svg{width:12px;height:12px}.upload-btn{background:var(--accent);border-radius:var(--radius-sm);height:28px;color:var(--accent-ink);cursor:pointer;border:none;flex-shrink:0;align-items:center;gap:6px;padding:0 12px;font-size:12px;font-weight:600;display:flex}.upload-btn:hover{background:var(--accent-strong)}.upload-btn svg{width:13px;height:13px}.body{grid-template-columns:260px 1fr 300px;min-width:0;min-height:0;display:grid}.body.tree-collapsed{grid-template-columns:0 1fr 300px}.body.props-collapsed{grid-template-columns:260px 1fr 0}.body.tree-collapsed.props-collapsed{grid-template-columns:0 1fr 0}.external-mode .body.tree-collapsed.props-collapsed{grid-template-columns:1fr}.panel{background:var(--bg-panel);flex-direction:column;min-height:0;display:flex;overflow:hidden}.panel-left{border-right:1px solid var(--border)}.panel-right{border-left:1px solid var(--border)}.panel-head{border-bottom:1px solid var(--border-soft);flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.mobile-only{display:none}.panel-close{width:24px;height:24px;color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.panel-close:hover{color:var(--text-primary);background:var(--bg-hover)}.panel-close svg{width:14px;height:14px}.tree-head-actions{align-items:center;gap:4px;display:flex}.tree-head-actions[hidden]{display:none}.tree-add-wrap{position:relative}.panel-add-btn{border:1px solid var(--border);border-radius:var(--radius-sm);width:20px;height:20px;color:var(--text-secondary);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:flex}.panel-add-btn:hover:not(:disabled){color:var(--text-primary);border-color:var(--accent)}.panel-add-btn:disabled{opacity:.35;cursor:default}.panel-add-btn svg{width:12px;height:12px}.tree-add-menu{background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-md);z-index:60;flex-direction:column;min-width:160px;padding:4px;display:none;position:fixed;box-shadow:0 8px 24px #00000059}.tree-add-menu:not([hidden]){display:flex}.tree-add-menu-item{color:var(--text-primary);border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:7px 8px;font-size:12px;display:flex}.tree-add-menu-item:hover{background:var(--bg-hover)}.tree-add-menu-item svg{width:13px;height:13px;color:var(--text-secondary);flex-shrink:0}.panel-title{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:10.5px;font-weight:500}.panel-body{flex:1;min-height:0;overflow-y:auto}.panel-collapse{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:2px;display:flex}.panel-collapse:hover{color:var(--text-primary)}.viewport-wrap{background:var(--bg-void);min-width:0;min-height:0;position:relative}#viewer-canvas{touch-action:none;outline:none;width:100%;height:100%;display:block}.gutter-toggle{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);width:20px;height:20px;color:var(--text-muted);cursor:pointer;z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;top:10px}.gutter-toggle:hover{color:var(--text-primary)}.gutter-toggle.left{left:10px}.gutter-toggle.right{right:10px}.gutter-toggle svg{width:11px;height:11px}.dropzone{text-align:center;background-color:var(--bg-void);background-image:linear-gradient(var(--border-soft) 1px, transparent 1px), linear-gradient(90deg, var(--border-soft) 1px, transparent 1px);cursor:pointer;background-position:50%;background-size:32px 32px;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding:24px;transition:background-color .15s;display:flex;position:absolute;inset:0}.dropzone.drag-over{background-color:#d9a23c0d}.dropzone-mark{width:46px;height:46px;color:var(--text-muted)}.dropzone.drag-over .dropzone-mark{color:var(--accent)}.dropzone h1{color:var(--text-primary);margin:0;font-size:15px;font-weight:500}.dropzone p{color:var(--text-muted);max-width:320px;margin:0;font-size:12.5px}.dropzone .hint{font-family:var(--font-mono);color:var(--text-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 10px;font-size:11px}.dropzone-option{color:var(--text-secondary);cursor:pointer;align-items:center;gap:8px;max-width:340px;margin-top:4px;font-size:11.5px;line-height:1.4;display:flex}.dropzone-option input{appearance:none;border:1px solid var(--border);background:var(--bg-panel-raised);cursor:pointer;border-radius:3px;flex-shrink:0;width:14px;height:14px;display:inline-block;position:relative}.dropzone-option input:checked{background:var(--accent);border-color:var(--accent)}.dropzone-option input:checked:after{content:"";border:solid var(--accent-ink);border-width:0 2px 2px 0;width:4px;height:8px;position:absolute;top:1px;left:4px;transform:rotate(45deg)}.dropzone>input[type=file]{display:none}.loading-strip{background:var(--bg-panel);border-top:1px solid var(--border);font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:12px;padding:10px 14px;font-size:11.5px;display:flex;position:absolute;bottom:0;left:0;right:0}.loading-strip .spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;flex-shrink:0;width:11px;height:11px;animation:.7s linear infinite spin}.loading-text{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.loading-stage{text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);overflow:hidden}.loading-bar-track{background:var(--border-soft);border-radius:2px;height:3px;overflow:hidden}.loading-bar-fill{background:var(--accent);border-radius:2px;height:100%;transition:width .15s}.loading-bar-fill.indeterminate{animation:1.1s ease-in-out infinite loading-sweep;width:40%!important}@keyframes loading-sweep{0%{transform:translate(-100%)}to{transform:translate(250%)}}.loading-pct{color:var(--text-muted);text-align:right;flex-shrink:0;min-width:34px}@keyframes spin{to{transform:rotate(360deg)}}.viewport-status{font-family:var(--font-mono);color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius-sm);pointer-events:none;background:#16181dd9;padding:4px 8px;font-size:10.5px;position:absolute;bottom:10px;left:10px}.model-stamp{z-index:6;pointer-events:none;font-family:var(--font-mono);flex-direction:column;gap:3px;font-size:10.5px;line-height:1.3;display:flex;position:absolute;bottom:12px;left:12px}.model-stamp[hidden]{display:none}.model-stamp-row{border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--bg-panel) 85%, transparent);white-space:nowrap;align-items:baseline;gap:10px;padding:3px 8px;display:flex}.model-stamp-name{color:var(--text-primary)}.model-stamp-rev{color:var(--accent-strong);font-weight:600}.model-stamp-date{color:var(--text-muted)}@media (width<=768px),(height<=500px){.model-stamp{font-size:9.5px;bottom:8px;left:8px}.model-stamp-row{gap:6px;padding:2px 6px}.model-stamp-name{text-overflow:ellipsis;max-width:48vw;overflow:hidden}}.selection-pin{pointer-events:none;z-index:8;flex-direction:column;align-items:center;display:none;position:absolute;top:0;left:0;transform:translate(-50%,calc(-100% - 10px))}.selection-pin:not([hidden]){display:flex}.selection-pin-dot{background:var(--select);border:2px solid var(--bg-void);width:8px;height:8px;box-shadow:0 0 0 1px var(--select);border-radius:50%;position:absolute;bottom:-14px;left:50%;transform:translate(-50%)}.selection-pin-card{background:var(--bg-panel-raised);border:1px solid var(--select);border-radius:var(--radius-sm);white-space:nowrap;max-width:220px;padding:6px 10px;box-shadow:0 6px 16px #00000059}.selection-pin-name{color:var(--text-primary);text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.selection-pin-detail{font-family:var(--font-mono);color:var(--text-secondary);text-overflow:ellipsis;font-size:10.5px;overflow:hidden}.selection-pin-detail:empty{display:none}.toast{background:var(--bg-panel-raised);border:1px solid var(--danger);color:var(--text-primary);border-radius:var(--radius-sm);z-index:10;max-width:420px;padding:8px 14px;font-size:12px;position:absolute;top:10px;left:50%;transform:translate(-50%)}.tree-empty,.props-empty{color:var(--text-muted);padding:16px 12px;font-size:12px}.tree-model-group{border-bottom:1px solid var(--border-soft)}.tree-model-header{background:var(--bg-panel-raised);z-index:1;align-items:center;gap:6px;padding:8px 10px;display:flex;position:sticky;top:0}.tree-model-opacity{width:54px;height:14px;accent-color:var(--accent);cursor:pointer;flex-shrink:0;margin:0}.tree-model-opacity-value{font-family:var(--font-mono);color:var(--text-muted);text-align:right;flex-shrink:0;width:30px;font-size:9.5px}.tree-model-icon{width:13px;height:13px;color:var(--accent);flex-shrink:0;display:flex}.tree-model-icon svg{width:100%;height:100%}.tree-model-label{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11.5px;font-weight:600;overflow:hidden}.tree-model-remove{width:20px;height:20px;color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.tree-model-remove:hover{color:var(--danger);background:var(--bg-hover)}.tree-model-remove svg{width:12px;height:12px}.tree-model-body{padding:4px 0}.tree-node{-webkit-user-select:none;user-select:none}.tree-row{cursor:pointer;border-radius:var(--radius-sm);align-items:center;gap:5px;margin:0 4px;padding:4px 10px;display:flex}.tree-row:hover{background:var(--bg-hover)}.tree-row.selected{background:var(--select-soft)}.tree-row.selected .tree-label{color:var(--text-primary)}.tree-caret{width:12px;height:12px;color:var(--text-muted);flex-shrink:0;justify-content:center;align-items:center;transition:transform .1s;display:flex}.tree-caret.open{transform:rotate(90deg)}.tree-caret.leaf{visibility:hidden}.tree-category{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:2px;flex-shrink:0;padding:1px 4px;font-size:9px}.tree-label{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.tree-children{border-left:1px solid var(--border-soft);margin-left:14px}.prop-group{border-bottom:1px solid var(--border-soft);padding:12px}.prop-group-title{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin:0 0 8px;font-size:10px}.prop-row{grid-template-columns:40% 60%;gap:8px;padding:3px 0;font-size:12px;display:grid}.prop-key{color:var(--text-muted);overflow-wrap:break-word}.prop-val{color:var(--text-primary);font-family:var(--font-mono);overflow-wrap:break-word;font-size:11.5px}.prop-header{border-bottom:1px solid var(--border-soft);padding:14px 12px 10px}.prop-header .name{color:var(--text-primary);margin:0 0 4px;font-size:13px;font-weight:500}.prop-header .meta{align-items:center;gap:6px;display:flex}.modal-overlay{z-index:50;background:#0000008c;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.modal-overlay:not([hidden]){display:flex}.modal-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;width:480px;max-width:calc(100vw - 32px);max-height:min(600px,100vh - 64px);display:flex;overflow:hidden;box-shadow:0 20px 60px #00000080}.modal-head{border-bottom:1px solid var(--border-soft);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 14px;display:flex}.modal-title{color:var(--text-primary);font-size:13px;font-weight:600}.modal-close{width:24px;height:24px;color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:flex}.modal-close:hover{color:var(--text-primary);background:var(--bg-hover)}.modal-close svg{width:14px;height:14px}.modal-search{background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-sm);height:30px;color:var(--text-primary);flex-shrink:0;margin:10px 14px 0;padding:0 10px;font-size:12.5px}.modal-body{flex:1;padding:10px 14px 14px;overflow-y:auto}.share-modal-panel{width:380px}.share-hint{color:var(--text-secondary);margin:0 0 12px;font-size:11.5px;line-height:1.5}.share-row{gap:6px;margin-bottom:16px;display:flex}.share-link-input{background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:0;height:30px;color:var(--text-primary);font-family:var(--font-mono);flex:1;padding:0 8px;font-size:11px}.share-qr-wrap{background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:center;gap:10px;padding:14px;display:flex}.share-qr-img{border-radius:var(--radius-sm);background:#fff;width:200px;height:200px;padding:8px}.drive-project-group{margin-bottom:14px}.drive-project-title{color:var(--text-primary);margin:0 0 1px;font-size:12.5px;font-weight:600}.drive-project-job{font-family:var(--font-mono);color:var(--text-muted);margin-bottom:6px;font-size:10px}.drive-model-row{border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:8px;padding:7px 8px;display:flex}.drive-model-row:hover:not(.disabled){background:var(--bg-hover)}.drive-model-row.disabled{opacity:.4;cursor:default}.drive-model-zone{font-family:var(--font-mono);color:var(--accent-strong);background:var(--accent-soft);border-radius:2px;flex-shrink:0;padding:2px 6px;font-size:9.5px}.drive-model-desc{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.drive-model-ext{font-family:var(--font-mono);color:var(--text-muted);border:1px solid var(--border);border-radius:2px;flex-shrink:0;padding:1px 5px;font-size:9.5px}@media (width<=768px),(height<=500px){.desktop-only{display:none!important}.mobile-only{display:flex}.measure-picker,.section-picker{z-index:60;width:min(300px,100vw - 16px);position:fixed;top:auto;right:auto}.shell{grid-template-rows:auto 1fr}.external-mode .shell{grid-template-rows:auto auto 1fr}.topbar{flex-wrap:wrap;gap:4px 8px;height:auto;padding:6px 10px}.filename{flex-basis:100%;order:3;min-width:0}.toolbar{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;gap:4px;min-width:0;max-width:100%;overflow-x:auto}.toolbar::-webkit-scrollbar{display:none}.tool-btn{flex-shrink:0}.body,.body.tree-collapsed,.body.props-collapsed,.body.tree-collapsed.props-collapsed{grid-template-columns:1fr;position:relative}.panel-left,.panel-right{z-index:40;width:auto;display:none;position:absolute;inset:0}.body:not(.tree-collapsed) .panel-left,.body:not(.props-collapsed) .panel-right{display:flex}.panel-left{border-right:none}.panel-right{border-left:none}}.save-overlay{z-index:100;background:#0009;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.save-overlay:not([hidden]){display:flex}.save-overlay-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:center;gap:16px;min-width:220px;padding:36px 44px;display:flex;box-shadow:0 20px 60px #00000080}.save-overlay-spinner{border:4px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:40px;height:40px;animation:.7s linear infinite spin;display:block}.save-overlay-spinner[hidden]{display:none}.save-overlay-check{color:#fff;background:#2ea043;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.save-overlay-check[hidden]{display:none}.save-overlay-check svg{width:22px;height:22px}.save-overlay-message{color:var(--text-primary);text-align:center;max-width:260px;margin:0;font-size:13px}.save-overlay-qr{border-radius:var(--radius-sm);background:#fff;width:160px;height:160px;padding:6px}#save-overlay-cancel[hidden],#save-overlay-close[hidden]{display:none}.measure-tools{grid-template-columns:repeat(5,1fr);gap:4px;display:grid}.measure-tool{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;flex-direction:column;align-items:center;gap:3px;padding:6px 2px 5px;font-size:10px;line-height:1;display:flex}.measure-tool svg{width:20px;height:20px}.measure-tool:hover{color:var(--text-primary);border-color:var(--accent)}.measure-tool.active{color:var(--accent-strong);border-color:var(--accent);background:var(--accent-soft)}.measure-datum-row{color:var(--text-secondary);align-items:center;gap:6px;font-size:11px;display:flex}.measure-datum-row[hidden]{display:none}.measure-datum-row span{flex:1;min-width:0}.measure-datum-row .tool-btn{border:1px solid var(--border);background:var(--bg-panel)}.measure-mode-row{color:var(--text-secondary);cursor:pointer;align-items:flex-start;gap:6px;font-size:11px;line-height:1.35;display:flex}.measure-mode-row input{accent-color:var(--accent);flex-shrink:0;margin:1px 0 0}.measure-label-main{font-size:12px;font-weight:600;display:block}.measure-label-delete{border:1px solid var(--border);background:var(--bg-panel-raised);width:16px;height:16px;color:var(--text-muted);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;display:none;position:absolute;top:-7px;right:-7px}.measure-label-delete svg{width:10px;height:10px}.measure-label:hover .measure-label-delete{display:flex}.measure-label-delete:hover{color:var(--text-primary);border-color:var(--accent)}.measure-label[data-kind=perpendicular],.measure-point[data-kind=perpendicular]{--measure-colour:#e11d48}.measure-label[data-kind=clearance],.measure-point[data-kind=clearance]{--measure-colour:#c026d3}.measure-label[data-kind=level],.measure-point[data-kind=level]{--measure-colour:#0f9f6e}.measure-label[data-kind=angle],.measure-point[data-kind=angle]{--measure-colour:#ca8a04}.measure-label[data-kind=point],.measure-point[data-kind=point]{--measure-colour:#3b82f6}.measure-label[data-kind]{border-color:var(--measure-colour)}.measure-point{border:2px solid var(--measure-colour,#3b82f6);width:11px;height:11px;box-shadow:0 0 0 3px color-mix(in srgb, var(--measure-colour,#3b82f6) 45%, transparent), 0 1px 3px #00000073;pointer-events:none;z-index:7;background:#ffd60a;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.measure-point.pending{animation:1s ease-in-out infinite measure-point-pulse}@keyframes measure-point-pulse{0%,to{box-shadow:0 0 0 3px color-mix(in srgb, var(--measure-colour,#3b82f6) 45%, transparent), 0 1px 3px #00000073}50%{box-shadow:0 0 0 7px color-mix(in srgb, var(--measure-colour,#3b82f6) 25%, transparent), 0 1px 3px #00000073}}.measure-label[data-kind=perpendicular] .measure-label-main{color:#e11d48;font-size:15px}.measure-nav-hint{color:var(--text-muted);font-size:10.5px}.measure-label-parts{color:var(--text-muted);font-size:9.5px;display:block}.snap-marker{pointer-events:none;z-index:9;color:var(--accent-strong);align-items:center;gap:4px;display:flex;position:absolute;transform:translate(-50%,-50%)}.snap-marker[hidden]{display:none}.snap-marker-icon{width:18px;height:18px;display:block}.snap-marker-icon svg{width:100%;height:100%;filter:drop-shadow(0 0 2px var(--bg-void))}.snap-marker-text{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;background:var(--bg-panel-raised);border:1px solid;border-radius:2px;padding:1px 4px;font-size:9.5px}.snap-marker[data-kind=corner]{color:#2ecc71}.snap-marker[data-kind=edge]{color:#3b82f6}.measure-label{background:var(--bg-panel-raised);border:1px solid var(--accent);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-mono);white-space:nowrap;pointer-events:auto;z-index:7;padding:2px 6px;font-size:11px;position:absolute;transform:translate(-50%,-50%)}.location-label{pointer-events:none;z-index:7;background:var(--bg-panel-raised);border-radius:var(--radius-sm);white-space:nowrap;text-overflow:ellipsis;max-width:200px;color:var(--text-primary);border:1px solid #3b82f6;padding:4px 9px;font-size:11.5px;font-weight:600;position:absolute;top:0;left:0;overflow:hidden;transform:translate(-50%,calc(-100% - 14px));box-shadow:0 6px 16px #00000059}.tree-search-wrap{border-bottom:1px solid var(--border-soft);flex-shrink:0;min-width:0;padding:8px 10px;position:relative}.tree-search-input{box-sizing:border-box;background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;height:34px;color:var(--text-primary);padding:0 30px 0 10px;font-size:13px}.tree-search-input:focus{border-color:var(--accent);outline:none}.tree-search-clear{width:20px;height:20px;color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute;top:50%;right:18px;transform:translateY(-50%)}.tree-search-clear:hover{color:var(--text-primary);background:var(--bg-panel)}.tree-search-clear svg{width:12px;height:12px}.tree-search-clear[hidden]{display:none}.tree-row.search-match{background:var(--accent-soft)}.tree-row.search-match .tree-label{color:var(--accent-strong);font-weight:600}@media (width<=768px),(height<=500px){.tree-search-input{height:clamp(36px,10vw,42px);font-size:16px}.tree-search-wrap{padding:clamp(6px,2vw,8px) clamp(8px,3vw,12px)}.tree-search-clear{width:clamp(24px,6vw,28px);height:clamp(24px,6vw,28px)}.tree-search-clear svg{width:15px;height:15px}}.external-search-bar-wrap{background:var(--bg-panel);border-bottom:1px solid var(--border);flex-shrink:0;min-width:0;padding:8px 12px;position:relative}.external-search-bar{min-width:0;position:relative}.external-search-results{max-height:min(360px, calc(var(--vh,1vh) * 100 - 140px));background:var(--bg-panel-raised);border:1px solid var(--border);border-radius:var(--radius-sm);z-index:50;margin-top:6px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 10px 30px #00000059}.external-search-results[hidden]{display:none}.external-search-result{text-align:left;border:none;border-bottom:1px solid var(--border-soft);width:100%;color:var(--text-primary);cursor:pointer;background:0 0;padding:10px 12px;font-size:13px;display:block}.external-search-result:last-child{border-bottom:none}.external-search-result:hover{background:var(--bg-panel)}.external-search-empty{color:var(--text-muted);text-align:center;padding:12px;font-size:12.5px}@media (width<=768px),(height<=500px){.external-search-bar-wrap{padding:clamp(6px,2vw,8px) clamp(8px,3vw,12px)}}.tool-btn-count{color:#fff;text-align:center;background:#b45309;border-radius:9px;min-width:17px;margin-left:5px;padding:0 4px;font-size:10.5px;font-weight:700;line-height:16px;display:inline-block}.defect-pin{z-index:8;border:1px solid var(--border-soft);background:var(--bg-panel-raised);color:var(--text-primary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:3px 8px 3px 3px;font-size:11px;font-weight:600;display:flex;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 4px 12px #0006}.defect-pin:hover{border-color:var(--text-primary)}.defect-pin-dot{color:#1a1a1a;background:#f59e0b;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10.5px;font-weight:800;display:grid}.defect-pin[data-priority=high] .defect-pin-dot{color:#fff;background:#ef4444}.defect-pin[data-priority=low] .defect-pin-dot{color:#10233d;background:#60a5fa}.defect-pop{z-index:9;border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--bg-panel-raised);width:260px;max-height:320px;color:var(--text-primary);font-size:12px;position:absolute;top:0;left:0;overflow-y:auto;transform:translate(-50%,calc(-100% - 20px));box-shadow:0 10px 28px #00000080}.defect-pop-head{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;gap:8px;padding:7px 9px;display:flex}.defect-pop-close{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;font-size:16px;line-height:1}.defect-pop-close:hover{color:var(--text-primary)}.defect-pop-item{border-bottom:1px solid var(--border-soft);padding:8px 9px}.defect-pop-item:last-child{border-bottom:0}.defect-pop-title{line-height:1.35}.defect-num{color:var(--text-secondary);margin-right:4px;font-weight:700}.defect-pop-meta{gap:6px;margin-top:5px;display:flex}.defect-status,.defect-prio{border:1px solid var(--border-soft);border-radius:999px;padding:1px 6px;font-size:10.5px;font-weight:600}.defect-prio{text-transform:capitalize}.defect-status-open{color:#fbbf24;border-color:#f59e0b}.defect-status-ready_for_review{color:#93c5fd;border-color:#3b82f6}.defect-status-draft{color:var(--text-secondary)}.defect-prio-high{color:#fca5a5;border-color:#ef4444}.defect-pop-link{color:#93c5fd;margin-top:6px;font-weight:600;text-decoration:none;display:inline-block}.defect-pop-link:hover{text-decoration:underline}
