:root{--color-bg:#eef2f6;--color-surface:#fff;--color-border:#d8e0e8;--color-text:#334155;--color-heading:#111827;--color-muted:#64748b;--font-sans:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;color:var(--color-text);background:var(--color-bg);font-family:var(--font-sans);letter-spacing:0;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;font-weight:400;line-height:1.45}*{box-sizing:border-box}html{background:var(--color-bg);min-width:320px;min-height:100%}body{min-width:320px;min-height:100%;margin:0}button,input,select,textarea{font:inherit}button{letter-spacing:0}#root{min-height:100vh}.app-shell{min-height:100vh;color:var(--color-text);background:var(--color-bg)}.topbar{border-bottom:1px solid var(--color-border);background:var(--color-surface);grid-template-columns:minmax(240px,1fr) auto;align-items:center;min-height:72px;padding:0 18px;display:grid}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand-mark{color:#0f766e;background:#def7f2;border:1px solid #a8ded6;border-radius:8px;place-items:center;width:42px;height:42px;display:grid}.brand-copy{flex-direction:column;min-width:0;display:flex}.brand-copy span{color:var(--color-heading);font-size:18px;font-weight:750}.brand-copy small{color:var(--color-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.topbar-actions,.plan-toolbar,.export-block,.export-block>div{align-items:center;display:flex}.topbar-actions{justify-content:flex-end;gap:8px}.primary-button,.ghost-button,.plan-toolbar button,.wide-action{min-height:38px;font:inherit;cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:8px;font-size:14px;display:inline-flex}.primary-button{color:#fff;background:#0f766e;border:1px solid #0f766e;padding:0 16px;font-weight:700}.ghost-button{color:var(--color-heading);border:1px solid var(--color-border);background:#fff;padding:0 13px}.ghost-button.compact{min-height:34px;padding:0 10px;font-size:13px}.ghost-button.compact.is-active{color:#0f766e;background:#e8f8f1;border-color:#93d3c6}.workspace{grid-template-columns:292px minmax(340px,1fr) minmax(410px,1.25fr) 280px;height:calc(100vh - 73px);min-height:680px;display:grid}.library-panel,.metrics-panel,.work-panel{border-right:1px solid var(--color-border);min-width:0}.icon-button,.square-action{color:#52606f;border:1px solid var(--color-border);cursor:pointer;background:#fff;border-radius:8px;place-items:center;display:grid}.icon-button{width:42px;height:42px}.icon-button.is-active,.plan-toolbar button.is-active{color:#0f766e;background:#e8f8f1;border-color:#93d3c6}.library-panel,.metrics-panel,.work-panel{background:var(--color-surface);padding:16px}.library-panel,.metrics-panel{flex-direction:column;gap:16px;display:flex}.library-panel{padding-right:6px;overflow:hidden}.metrics-panel{border-right:0}.panel-heading{justify-content:space-between;align-items:center;gap:12px;min-height:42px;display:flex}.panel-heading h2{color:var(--color-heading);margin:0;font-size:17px;font-weight:750}.eyebrow{color:var(--color-muted);text-transform:uppercase;margin:0 0 3px;font-size:11px;font-weight:750}.square-action{width:34px;height:34px}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.furniture-list{scrollbar-gutter:stable;scrollbar-width:thin;gap:12px;padding-right:8px;display:grid;overflow:auto}.furniture-list::-webkit-scrollbar{width:6px}.node-object-list::-webkit-scrollbar{width:6px}.furniture-list::-webkit-scrollbar-track{background:0 0}.node-object-list::-webkit-scrollbar-track{background:0 0}.furniture-list::-webkit-scrollbar-thumb{background:#94a3b8;border-radius:999px}.node-object-list::-webkit-scrollbar-thumb{background:#94a3b8;border-radius:999px}.furniture-group{border:1px solid var(--color-border);background:#fbfcfd;border-radius:8px;padding:12px}.furniture-group-title{width:100%;min-height:32px;color:var(--color-heading);text-align:left;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;gap:8px;padding:0;font-size:14px;font-weight:750;display:flex}.furniture-group-label,.furniture-group-meta{align-items:center;gap:8px;min-width:0;display:inline-flex}.furniture-group-label span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.furniture-group-meta{color:var(--color-muted);flex:none;font-size:12px}.furniture-group-chevron{transition:transform .18s}.furniture-group.is-open .furniture-group-chevron{transform:rotate(180deg)}.furniture-items{gap:8px;margin-top:12px;display:grid}.furniture-items button{color:#475569;border:1px solid var(--color-border);min-height:42px;font:inherit;text-align:left;cursor:pointer;background:#fff;border-radius:7px;flex-direction:column;align-items:flex-start;gap:3px;padding:8px 9px;font-size:12px;display:flex}.furniture-items button[draggable=true]{cursor:grab}.furniture-items button[draggable=true]:active{cursor:grabbing}.furniture-items button.is-drag-only{border-style:dashed}.furniture-items button span{color:var(--color-heading);font-weight:650}.furniture-items button small{color:var(--color-muted);font-size:11px}.furniture-items button:disabled{color:#94a3b8;cursor:not-allowed;filter:none;background:#f1f5f9}.furniture-items button:disabled span,.furniture-items button:disabled small{color:#94a3b8}.work-panel{background:#f8fafc;grid-template-rows:auto 1fr;gap:14px;display:grid}.graph-canvas,.plan-canvas{border:1px solid var(--color-border);background:#fff;border-radius:8px;min-height:0;position:relative;overflow:hidden}.graph-panel{flex-direction:column;display:flex}.graph-heading-actions{align-items:center;gap:8px;display:inline-flex}.graph-inspector{grid-template-columns:minmax(150px,1fr) auto auto;align-items:center;gap:8px;min-height:42px;display:grid}.graph-inspector input,.graph-inspector select{width:100%;min-width:0;min-height:34px;color:var(--color-heading);border:1px solid var(--color-border);font:inherit;background:#fff;border-radius:8px;padding:0 10px;font-size:13px}.graph-selection-label,.connection-draft{color:var(--color-muted);font-size:13px}.connection-draft{align-items:center;gap:8px;display:inline-flex}.connection-type-control{border:1px solid var(--color-border);background:#eef2f6;border-radius:8px;display:inline-flex;overflow:hidden}.connection-type-control button{color:#475569;border:0;border-right:1px solid var(--color-border);min-height:34px;font:inherit;cursor:pointer;background:0 0;padding:0 12px;font-size:13px}.connection-type-control button:last-child{border-right:0}.connection-type-control button.is-active{color:#0f766e;background:#fff}.graph-delete{justify-self:end}.square-action.small{border-radius:7px;width:28px;height:28px}.square-action.danger-icon{color:#be123c;border-color:#fecdd3}.graph-canvas{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background-image:radial-gradient(#d8e0e8 1px,#0000 1px);background-size:20px 20px;flex:1}.graph-canvas.is-panning{cursor:grabbing}.graph-viewport{transform-origin:0 0;position:absolute;top:0;left:0}.graph-map-controls{z-index:5;border:1px solid var(--color-border);background:#fff;border-radius:8px;display:inline-flex;position:absolute;overflow:hidden;box-shadow:0 10px 22px #0f172a1a}.graph-map-controls button{width:36px;height:36px;color:var(--color-heading);border:0;border-right:1px solid var(--color-border);cursor:pointer;background:0 0;place-items:center;display:grid}.graph-map-controls button:last-child{border-right:0}.graph-map-zoom-controls{bottom:14px;left:14px}.graph-map-center-control{bottom:14px;right:14px}.map-controls{z-index:5;border:1px solid var(--color-border);background:#fff;border-radius:8px;display:inline-flex;position:absolute;overflow:hidden;box-shadow:0 10px 22px #0f172a1a}.map-controls button{width:36px;height:36px;color:var(--color-heading);border:0;border-right:1px solid var(--color-border);cursor:pointer;background:0 0;place-items:center;display:grid}.map-controls button:last-child{border-right:0}.map-controls button svg{color:currentColor;cursor:pointer;touch-action:auto;-webkit-user-select:none;user-select:none;flex:none;width:18px;height:18px;min-height:0;display:block}.map-zoom-controls{bottom:14px;left:14px}.map-center-control{bottom:14px;right:14px}.graph-links{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.graph-link{fill:none;stroke:#64748b;stroke-width:2px;cursor:pointer;pointer-events:stroke}.graph-link.is-door{stroke-dasharray:7 7}.graph-link.is-opening{stroke:#0f766e}.graph-link.is-selected{stroke:#be123c;stroke-width:4px}.node{box-sizing:border-box;cursor:grab;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #cbd5e1;border-radius:8px;grid-template-rows:auto auto auto minmax(0,1fr);gap:6px;min-width:156px;min-height:82px;padding:10px;display:grid;position:absolute;overflow:visible;box-shadow:0 12px 24px #0f172a14}.node:active{cursor:grabbing}.node.is-objects-open,.node.is-selected{z-index:3}.node.is-selected{border-color:#be123c;box-shadow:0 0 0 3px #be123c1f,0 12px 24px #0f172a14}.node.is-connection-source{border-color:#0f766e;box-shadow:0 0 0 3px #0f766e26,0 12px 24px #0f172a14}.node.is-drag-target{background:#f0fdfa;border-color:#0f766e;box-shadow:0 0 0 4px #0f766e29,0 12px 24px #0f172a1a}.node-title-row{align-items:center;gap:8px;min-width:0;display:flex}.node-title-row strong{min-width:0;color:var(--color-heading);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;overflow:hidden}.node-count-badge{color:#0f766e;background:#e8f8f1;border-radius:999px;flex:none;place-items:center;min-width:24px;height:22px;font-size:12px;font-weight:800;display:grid}.node-object-toggle{min-width:0;min-height:28px;color:var(--color-heading);border:1px solid var(--color-border);font:inherit;cursor:pointer;background:#fbfcfd;border-radius:7px;justify-content:space-between;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:750;display:flex}.node-object-toggle span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.node-object-toggle svg{color:var(--color-muted);flex:none;transition:transform .18s}.node.is-objects-open .node-object-toggle svg{transform:rotate(180deg)}.node-object-list{scrollbar-gutter:stable;scrollbar-width:thin;cursor:default;align-content:start;gap:6px;min-height:0;padding-right:2px;display:grid;overflow:auto}.node-object-empty{color:var(--color-muted);font-size:12px}.node-object-row{border:1px solid var(--color-border);background:#fbfcfd;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;min-width:0;padding:6px;display:grid}.node-object-row>div:first-child{flex-direction:column;gap:2px;min-width:0;display:flex}.node-object-row strong,.node-object-row small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.node-object-row strong{color:var(--color-heading);font-size:12px}.node-object-row small{color:var(--color-muted);font-size:10px}.node-object-actions{flex:none;align-items:center;gap:4px;display:inline-flex}.node-resize-handle{z-index:4;background:0 0;position:absolute}.node-resize-n{cursor:ns-resize;height:10px;top:-5px;left:12px;right:12px}.node-resize-e{cursor:ew-resize;width:10px;top:12px;bottom:12px;right:-5px}.node-resize-s{cursor:ns-resize;height:10px;bottom:-5px;left:12px;right:12px}.node-resize-w{cursor:ew-resize;width:10px;top:12px;bottom:12px;left:-5px}.node-resize-ne,.node-resize-se,.node-resize-sw,.node-resize-nw{background:#fff;border:1px solid #be123c;border-radius:4px;width:12px;height:12px;box-shadow:0 2px 6px #0f172a29}.node-resize-ne{cursor:nesw-resize;top:-6px;right:-6px}.node-resize-se{cursor:nwse-resize;bottom:-6px;right:-6px}.node-resize-sw{cursor:nesw-resize;bottom:-6px;left:-6px}.node-resize-nw{cursor:nwse-resize;top:-6px;left:-6px}.plan-panel{grid-template-rows:auto auto 1fr}.segmented-control{border:1px solid var(--color-border);background:#eef2f6;border-radius:8px;display:inline-flex;overflow:hidden}.segmented-control button{min-height:32px;color:var(--color-muted);font:inherit;cursor:pointer;background:0 0;border:0;padding:0 12px;font-size:13px}.segmented-control button.is-selected{color:var(--color-heading);background:#fff}.plan-toolbar{flex-wrap:wrap;gap:8px}.toolbar-status{color:#0f766e;align-items:center;max-width:240px;min-height:34px;font-size:12px;line-height:1.25;display:inline-flex}.toolbar-status.is-error{color:#be123c}.tech-zone-type-picker{border:1px solid var(--color-border);background:#eef2f6;border-radius:8px;display:inline-flex;overflow:hidden}.plan-toolbar button{color:#475569;border:1px solid var(--color-border);background:#fff;min-height:34px;padding:0 10px;font-size:13px}.plan-toolbar .import-drop-button{border-style:dashed}.plan-toolbar .import-drop-button.is-drag-active{color:#0f766e;background:#e8f8f1;border-color:#0f766e}.tech-zone-type-picker button{border:0;border-right:1px solid var(--color-border);background:0 0;border-radius:0;min-width:34px;padding:0 9px;font-weight:750}.tech-zone-type-picker button:last-child{border-right:0}.plan-toolbar button:disabled{color:#94a3b8;cursor:not-allowed;filter:none;background:#f1f5f9}.plan-toolbar .danger-tool:not(:disabled){color:#be123c;border-color:#fecdd3}.danger-tool{color:#be123c;min-height:34px;font:inherit;cursor:pointer;background:#fff;border:1px solid #fecdd3;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:0 10px;font-size:13px;display:inline-flex}.danger-tool:disabled{color:#94a3b8;border-color:var(--color-border);cursor:not-allowed;filter:none;background:#f1f5f9}.plan-canvas svg{cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;min-height:420px}.house-contour{fill:#0f766e12;stroke:#0f172a;stroke-width:7px;stroke-linejoin:round}.window-line{fill:none;stroke:#2563eb;stroke-width:9px;stroke-linecap:round;cursor:grab;-webkit-user-select:none;user-select:none}.door-line{fill:none;stroke:#b45309;stroke-width:9px;stroke-linecap:round;cursor:grab;-webkit-user-select:none;user-select:none}.window-line.is-selected,.door-line.is-selected{stroke:#be123c;stroke-width:12px}.tech-zone{fill:#be123c1f;stroke:#be123c;stroke-width:2px}.tech-zone-marker{cursor:grab;-webkit-user-select:none;user-select:none}.window-line:active,.door-line:active,.tech-zone-marker:active{cursor:grabbing}.tech-zone-marker.is-selected .tech-zone{fill:#0f766e2e;stroke:#0f766e;stroke-width:3px}.tech-zone-marker text{fill:#be123c;text-anchor:middle;pointer-events:none;font-size:11px;font-weight:800}.tech-zone-marker.is-selected text{fill:#0f766e}.status-card{background:#e8f8f1;border:1px solid #a8ded6;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;padding:12px;display:flex}.status-card div{color:#0f513f;align-items:center;gap:8px;font-size:13px;font-weight:700;display:flex}.status-card strong{color:#0f513f;font-size:13px}.status-dot{background:#16a34a;border-radius:50%;width:8px;height:8px}.metric-list{gap:8px;display:grid}.metric-list div{border:1px solid var(--color-border);background:#fff;border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:12px;display:flex}.metric-list span,.export-block span{color:var(--color-muted);font-size:13px}.metric-list strong{color:var(--color-heading);font-size:15px}.layers-list{border:1px solid var(--color-border);background:#fbfcfd;border-radius:8px;flex-wrap:wrap;gap:7px;padding:12px;display:flex}.layers-list span{color:var(--color-muted);flex:0 0 100%;font-size:13px}.layers-list code{color:#0f766e;font-family:var(--font-mono);background:#e8f8f1;border-radius:5px;padding:3px 6px;font-size:11px}.export-block{border:1px solid var(--color-border);background:#fbfcfd;border-radius:8px;justify-content:space-between;gap:10px;margin-top:auto;padding:12px}.export-block>div{gap:8px}.wide-action{color:#fff;background:#b45309;border:1px solid #b45309;width:100%;font-weight:750}button:hover{filter:brightness(.98)}button:focus-visible{outline-offset:2px;outline:2px solid #2563eb}@media (width<=1360px){.workspace{grid-template-columns:58px 248px minmax(320px,1fr) minmax(360px,1.1fr)}.metrics-panel{display:none}.topbar{grid-template-columns:minmax(240px,1fr) auto}}@media (width<=1020px){.topbar{grid-template-columns:1fr;gap:12px;padding:14px}.topbar-actions{justify-content:stretch}.topbar-actions button{flex:1}.workspace{grid-template-rows:auto auto auto;grid-template-columns:54px minmax(0,1fr);height:auto;min-height:calc(100vh - 168px)}.library-panel,.metrics-panel{display:none}.work-panel{min-height:420px}}@media (width<=760px){.workspace{grid-template-columns:1fr}.work-panel{border-right:0}.panel-heading{flex-direction:column;align-items:flex-start}}
