@import"https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap";*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #0f1117;--surface: #1a1d27;--surface2: #21242f;--surface-hover: #282c3a;--border: #2a2e3a;--text: #e4e6ed;--text-dim: #7a7f91;--text-muted: #4e5264;--accent: #4a9eff;--accent-glow: rgba(74,158,255,.15);--accent-dim: rgba(74,158,255,.08);--danger: #f87171;--success: #34d399;--warn: #fbbf24;--highlight: rgba(74,158,255,.35)}body{font-family:DM Sans,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg);color:var(--text);overflow:hidden;height:100vh;height:100dvh;width:100vw;touch-action:none;-webkit-user-select:none;user-select:none}#canvas-container{width:100%;height:100%;position:absolute;top:0;left:0}canvas{display:block;width:100%!important;height:100%!important}#upload-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:100;background:var(--bg);transition:opacity .4s,visibility .4s}#upload-overlay.hidden{opacity:0;visibility:hidden;pointer-events:none}.upload-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:48px 32px;text-align:center;max-width:420px;width:92%}.upload-card h1{font-size:22px;font-weight:600;margin-bottom:8px}.upload-card p{color:var(--text-dim);font-size:14px;margin-bottom:28px;line-height:1.5}.upload-icon{width:64px;height:64px;margin:0 auto 20px;background:var(--accent-glow);border-radius:16px;display:flex;align-items:center;justify-content:center}.upload-icon svg{width:28px;height:28px;stroke:var(--accent)}.upload-btn{display:inline-flex;align-items:center;gap:8px;background:var(--accent);color:#fff;border:none;border-radius:10px;padding:12px 28px;font-size:15px;font-weight:500;font-family:inherit;cursor:pointer}.upload-btn:disabled{opacity:.5;cursor:not-allowed}.upload-btn:active:not(:disabled){transform:scale(.97)}#file-input{display:none}#init-log{margin-top:20px;text-align:left;font-size:11px;color:var(--text-dim);max-height:120px;overflow-y:auto;line-height:1.6;background:#0000004d;border-radius:8px;padding:10px 12px}#init-log .ok{color:var(--success)}#init-log .err{color:var(--danger)}#init-log .info{color:var(--accent)}#top-bar{position:fixed;top:0;left:0;right:0;height:48px;background:#0f1117eb;backdrop-filter:blur(16px);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 12px;gap:8px;z-index:70;opacity:0;transition:opacity .3s}#top-bar.visible{opacity:1}#model-name{font-size:13px;font-weight:500;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-btn{background:var(--surface);border:1px solid var(--border);color:var(--text-dim);border-radius:8px;padding:7px;cursor:pointer;display:flex;align-items:center;transition:all .15s;flex-shrink:0}.bar-btn.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.bar-btn:disabled{opacity:.45;cursor:not-allowed}.bar-btn:active:not(:disabled){background:var(--surface-hover);color:var(--text)}.bar-btn svg{width:16px;height:16px}.bar-btn-with-text{gap:8px;padding:6px 10px;align-items:center}.bar-btn-text{display:flex;flex-direction:column;line-height:1.1;text-align:left}.bar-btn-label{font-size:11px;font-weight:600;color:var(--text)}.bar-btn-helper{font-size:10px;color:var(--text-muted)}@media (max-width: 920px){.bar-btn-with-text .bar-btn-helper{display:none}}#tree-panel{position:fixed;top:48px;left:0;bottom:0;width:300px;background:#0f1117f2;backdrop-filter:blur(12px);border-right:1px solid var(--border);z-index:60;transform:translate(-100%);transition:transform .3s ease;display:flex;flex-direction:column}#tree-panel.open{transform:translate(0)}@media (max-width: 600px){#tree-panel{width:85vw}}.tree-header{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;flex-shrink:0}.tree-header h2{font-size:13px;font-weight:600;flex:1}.tree-search{width:100%;margin:0;padding:8px 12px;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:6px;font-family:inherit;font-size:12px;outline:none}.tree-search:focus{border-color:var(--accent)}.tree-search:disabled{opacity:.6;cursor:wait}.tree-search-wrap{padding:8px 14px;flex-shrink:0;border-bottom:1px solid var(--border)}#tree-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 0;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.tree-empty{padding:24px 14px;text-align:center;color:var(--text-muted);font-size:13px}.tree-node{user-select:none}.tree-row{display:flex;align-items:center;padding:4px 8px 4px 0;cursor:pointer;border-radius:4px;margin:0 6px;transition:background .1s;min-height:28px;gap:2px}.tree-row:hover{background:var(--surface-hover)}.tree-row.selected{background:var(--accent-dim)}.tree-row.selected .tree-label{color:var(--accent)}.tree-toggle{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--text-muted);font-size:10px;transition:transform .15s}.tree-toggle.expanded{transform:rotate(90deg)}.tree-toggle.leaf{visibility:hidden}.tree-icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:11px;border-radius:3px;margin-right:4px;font-weight:600;font-family:JetBrains Mono,monospace}.tree-icon.proj{background:#4a9eff22;color:#4a9eff}.tree-icon.site{background:#34d39922;color:#34d399}.tree-icon.bldg{background:#fbbf2422;color:#fbbf24}.tree-icon.stor{background:#f8717122;color:#f87171}.tree-icon.elem{background:#a78bfa22;color:#a78bfa}.tree-icon.type{background:#64748b22;color:#94a3b8}.tree-label{font-size:12px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.tree-count{font-size:10px;color:var(--text-muted);margin-left:4px;font-family:JetBrains Mono,monospace}.tree-children{display:none}.tree-children.open{display:block}#prop-panel{position:fixed;top:48px;right:0;bottom:0;width:340px;background:#0f1117f2;backdrop-filter:blur(12px);border-left:1px solid var(--border);z-index:60;transform:translate(100%);transition:transform .3s ease;display:flex;flex-direction:column}#prop-panel.open{transform:translate(0)}@media (max-width: 600px){#prop-panel{width:92vw}}.prop-header{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;flex-shrink:0}.prop-header h2{font-size:13px;font-weight:600;flex:1}.prop-close{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:18px;padding:4px;line-height:1}#prop-content{flex:1;overflow-y:auto;padding:8px 0;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.prop-section{margin-bottom:2px}.prop-section-header{padding:8px 14px;font-size:11px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.5px;cursor:pointer;display:flex;align-items:center;gap:6px;background:var(--accent-dim);border-bottom:1px solid var(--border)}.prop-section-header:hover{background:#4a9eff1f}.prop-section-header .chevron{font-size:9px;transition:transform .15s}.prop-section-header .chevron.open{transform:rotate(90deg)}.prop-table{width:100%;border-collapse:collapse}.prop-table td{padding:5px 14px;font-size:12px;border-bottom:1px solid rgba(42,46,58,.5);vertical-align:top}.prop-table td:first-child{color:var(--text-dim);width:42%;font-family:JetBrains Mono,monospace;font-size:11px}.prop-table td:last-child{color:var(--text);word-break:break-word}.prop-empty{padding:24px 14px;text-align:center;color:var(--text-muted);font-size:13px}#status-bar{position:fixed;bottom:20px;left:50%;transform:translate(-50%);background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 20px;font-size:13px;color:var(--text-dim);z-index:50;display:none;align-items:center;gap:10px;max-width:90%;flex-direction:column}#status-bar.visible{display:flex}.status-row{display:flex;align-items:center;gap:10px;width:100%}.spinner{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.progress-bar{width:100%;height:4px;background:var(--border);border-radius:2px;overflow:hidden;display:none}.progress-bar.visible{display:block}.progress-fill{height:100%;background:var(--accent);border-radius:2px;transition:width .15s ease-out;width:0%}#controls-hint{position:fixed;bottom:20px;left:50%;transform:translate(-50%);background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 16px;font-size:12px;color:var(--text-dim);z-index:40;opacity:0;transition:opacity .5s;pointer-events:none}#controls-hint.visible{opacity:1}#view-controls{position:fixed;bottom:20px;right:16px;display:flex;flex-direction:column;gap:6px;z-index:50;opacity:0;transition:opacity .3s}#view-controls.visible{opacity:1}.view-btn{background:var(--surface);border:1px solid var(--border);color:var(--text-dim);border-radius:8px;width:38px;height:38px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:inherit;font-size:11px;font-weight:600}.view-btn:active{background:var(--surface-hover);color:var(--text);border-color:var(--accent)}#selection-menu{position:fixed;display:none;flex-direction:column;gap:4px;min-width:180px;padding:6px;z-index:85;background:#0f1117f5;border:1px solid var(--border);border-radius:10px;box-shadow:0 16px 30px #00000047}#selection-menu.visible{display:flex}.context-menu-btn{background:transparent;border:1px solid transparent;color:var(--text);border-radius:8px;padding:9px 10px;text-align:left;cursor:pointer;font-family:inherit;font-size:12px;transition:all .12s ease}.context-menu-btn:hover{background:var(--surface-hover);border-color:var(--border)}#error-toast{position:fixed;top:60px;left:50%;transform:translate(-50%);background:#f871711f;border:1px solid rgba(248,113,113,.3);border-radius:10px;padding:10px 20px;font-size:13px;color:var(--danger);z-index:200;display:none;max-width:90%;text-align:center}#error-toast.visible{display:block}.clip-badge{position:fixed;top:56px;left:50%;transform:translate(-50%);background:#0f1117eb;backdrop-filter:blur(12px);border:1px solid var(--border);border-radius:8px;padding:6px 10px;z-index:55;display:none;align-items:center;gap:6px;font-size:12px;color:var(--text-dim)}.clip-badge.visible{display:flex}.clip-badge .cb-label{white-space:nowrap}.clip-badge button{background:var(--surface);border:1px solid var(--border);color:var(--text-dim);border-radius:5px;padding:3px 8px;font-size:11px;font-family:inherit;cursor:pointer;transition:all .12s}.clip-badge button:hover{border-color:var(--accent);color:var(--accent)}.clip-badge button.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.clip-badge .cb-val{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--accent);min-width:44px;text-align:center}.measure-badge{position:fixed;top:92px;left:50%;transform:translate(-50%);background:#fbbf241f;border:1px solid rgba(251,191,36,.3);border-radius:8px;padding:6px 14px;font-size:12px;color:var(--warn);z-index:55;display:none;align-items:center;gap:8px}.measure-badge.visible{display:flex}.measure-badge button{background:#fbbf2426;border:1px solid rgba(251,191,36,.3);color:var(--warn);border-radius:5px;padding:3px 8px;font-size:11px;font-family:inherit;cursor:pointer}@media (max-width: 600px){.measure-badge{top:calc(56px + env(safe-area-inset-top,0px));padding:8px 16px;gap:10px;font-size:13px}.measure-badge button{padding:8px 14px;font-size:12px;min-height:40px;min-width:44px}}.measure-label-3d{position:absolute;pointer-events:none;background:#0f1117e6;border:1px solid var(--warn);border-radius:5px;padding:3px 8px;font-size:11px;color:var(--warn);font-family:JetBrains Mono,monospace;white-space:nowrap;transform:translate(-50%,-100%);margin-top:-8px}#snap-indicator{position:fixed;pointer-events:none;z-index:46;display:none}#snap-indicator.visible{display:block}#snap-indicator svg{overflow:visible}#snap-label{position:fixed;pointer-events:none;z-index:46;display:none;background:#0f1117e0;border:1px solid #4a9eff;border-radius:4px;padding:2px 7px;font-size:10px;color:#4a9eff;font-family:JetBrains Mono,monospace;white-space:nowrap;transform:translate(-50%,6px)}#snap-label.visible{display:block}#numbering-series-modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:#00000073;z-index:211;padding:16px}#numbering-series-modal.open{display:flex}.numbering-series-dialog{width:min(760px,100%);max-height:min(84vh,700px);overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column}.numbering-series-dialog h3{font-size:16px;font-weight:600;padding:16px 18px 6px}.numbering-series-dialog>p{color:var(--text-dim);font-size:12px;padding:0 18px 12px}#numbering-series-list{margin:0 18px;border:1px solid var(--border);border-radius:8px;max-height:420px;overflow:auto;background:#00000026}.numbering-series-table{width:100%;border-collapse:collapse;font-size:12px}.numbering-series-table th,.numbering-series-table td{border-bottom:1px solid rgba(42,46,58,.5);padding:8px 10px;text-align:left}.numbering-series-table th{position:sticky;top:0;background:var(--surface2);color:var(--text-dim);z-index:1;font-size:11px;font-weight:600}.numbering-series-table td:nth-child(3){font-family:JetBrains Mono,monospace;color:var(--accent)}.numbering-series-table td:nth-child(4),.numbering-series-table td:nth-child(6){font-family:JetBrains Mono,monospace}.numbering-series-pick-btn{border-radius:6px;border:1px solid var(--accent);padding:4px 8px;font-size:11px;background:transparent;color:var(--accent);cursor:pointer}.numbering-series-pick-btn:disabled{opacity:.45;border-color:var(--border);color:var(--text-dim);cursor:not-allowed}.numbering-series-table tr.row-disabled{opacity:.55}.numbering-hours-input{width:86px;border-radius:6px;border:1px solid var(--border);background:var(--surface2);color:var(--text);padding:5px 6px;font-family:JetBrains Mono,monospace;font-size:11px}.numbering-series-summary td{font-weight:600;background:#4a9eff14}.numbering-series-empty{padding:20px 12px;color:var(--text-muted);font-size:12px;text-align:center}#numbering-series-meta{color:var(--text-dim);font-size:12px;padding:12px 18px 10px}.numbering-series-actions{display:flex;justify-content:flex-end;gap:8px;padding:0 18px 16px}#numbering-series-close,#numbering-series-export{border-radius:8px;border:1px solid var(--border);padding:8px 12px;font-size:12px;font-family:inherit;cursor:pointer;background:var(--surface2);color:var(--text)}#numbering-series-export{border-color:var(--accent);color:var(--accent)}#numbering-series-export:disabled{opacity:.45;cursor:not-allowed;border-color:var(--border);color:var(--text-dim)}
