:root{--grid: rgba(36, 88, 211, .12);--paper: #e9ede8;--surface: #ffffff;--ink: #1d2433;--muted: #5d6676;--line: #d2d8d0;--blue: #2458d3;--blue-soft: rgba(36, 88, 211, .12);--amber: #d4861a;--amber-soft: rgba(212, 134, 26, .16);--danger: #b23a2a;--radius: 6px;color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper: #1b1f24;--surface: #242a31;--ink: #e8ecf1;--muted: #a0a9b6;--line: #38414b;--blue: #6f9bff;--blue-soft: rgba(111, 155, 255, .16);--amber: #f0a43a;--amber-soft: rgba(240, 164, 58, .18);--danger: #ff7b69;color-scheme:dark}}:root[data-theme=dark]{--paper: #1b1f24;--surface: #242a31;--ink: #e8ecf1;--muted: #a0a9b6;--line: #38414b;--blue: #6f9bff;--blue-soft: rgba(111, 155, 255, .16);--amber: #f0a43a;--amber-soft: rgba(240, 164, 58, .18);--danger: #ff7b69;color-scheme:dark}*,*:before,*:after{box-sizing:inherit}html,body,#root{height:100%;margin:0;overscroll-behavior:none}body{background:var(--paper);color:var(--ink);font:14px/1.45 Instrument Sans,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}button,input,select{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.app{height:100%;display:grid;grid-template-columns:64px minmax(0,1fr) 300px;grid-template-rows:auto minmax(0,1fr);grid-template-areas:"bar bar bar" "rail canvas inspector"}.bar{grid-area:bar;display:flex;align-items:center;gap:14px;padding:8px 14px;background:var(--surface);border-bottom:1px solid var(--line);min-width:0}.brand{display:flex;align-items:center;flex:none}.brand img{height:28px;width:auto;display:block}.brand .logo-dark{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .brand .logo-light{display:none}:root:not([data-theme=light]) .brand .logo-dark{display:block}}:root[data-theme=dark] .brand .logo-light{display:none}:root[data-theme=dark] .brand .logo-dark{display:block}.file{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.bar-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}.sep{width:1px;height:22px;background:var(--line);margin:0 4px}button{border:1px solid var(--line);background:var(--surface);padding:6px 11px;border-radius:var(--radius);cursor:pointer}button:hover:not(:disabled){border-color:var(--blue)}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}button.danger{color:var(--danger);border-color:transparent;background:transparent;padding-left:0}button.danger:hover{text-decoration:underline;border-color:transparent}button.link{border:0;background:none;padding:2px 0;color:var(--ink);text-align:left;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}button.link:hover{text-decoration-color:var(--amber)}.field-inline{display:flex;align-items:center;gap:6px;color:var(--muted)}.field-inline select{padding:5px 6px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface)}.blend{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13px}.blend input{width:110px;accent-color:var(--blue)}.blend.off{opacity:.5}.app.dropping .canvas:after{content:"Drop a .plan.json, its scan, or both";position:absolute;inset:12px;display:grid;place-items:center;border:2px dashed var(--blue);border-radius:10px;background:var(--blue-soft);color:var(--ink);font-weight:600;pointer-events:none}.rail{grid-area:rail;display:flex;flex-direction:column;gap:6px;padding:10px 8px;background:var(--surface);border-right:1px solid var(--line)}.rail button{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 2px 6px;font-size:11.5px;color:var(--muted);border-color:transparent}.rail button svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}.rail button.on{color:var(--blue);background:var(--blue-soft);border-color:transparent}.canvas{grid-area:canvas;position:relative;min-width:0;min-height:0}.canvas>svg{width:100%;height:100%;display:block;touch-action:none;-webkit-user-select:none;user-select:none}.canvas>svg.drawing{cursor:crosshair}.canvas>svg.panning{cursor:grab}.canvas>svg{cursor:default}.marquee,.draft-rect{fill:var(--blue-soft);stroke:var(--blue)}.hit-wall{cursor:move}.status{position:absolute;left:12px;bottom:12px;max-width:calc(100% - 24px);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:6px 10px;color:var(--muted);font-size:13px;pointer-events:none}.hit-room{fill:transparent;stroke:transparent;cursor:pointer}.hit-room:hover{fill:var(--blue-soft)}.hit-room.sel{fill:var(--blue-soft);stroke:var(--blue)}.hit-wall{stroke:transparent;stroke-linecap:round;cursor:pointer}.hit-wall:hover{stroke:var(--blue-soft)}.hit-wall.sel{stroke:#2458d359}.hit-opening{stroke:transparent;cursor:pointer}.hit-opening:hover{stroke:var(--blue-soft)}.hit-opening.sel{stroke:#2458d366}.handle{fill:#fff;stroke:var(--blue);cursor:move}.hit-opening{cursor:ew-resize}.end-handle{fill:#fff;stroke:var(--blue);cursor:col-resize}.bulge-handle{fill:var(--blue);stroke:#fff;cursor:grab}.rotate-handle{fill:#fff;stroke:var(--blue);cursor:grab}.add-handle{fill:#fff;stroke:var(--blue);stroke-dasharray:3 2;cursor:copy;opacity:.85}.add-handle:hover{opacity:1;stroke-dasharray:none}.hit-area{fill:transparent;stroke:transparent;cursor:move}.hit-area:hover{fill:var(--blue-soft)}.hit-area.sel{fill:var(--blue-soft);stroke:var(--blue)}.hit-stair{fill:transparent;stroke:transparent;cursor:move}.hit-stair:hover{fill:var(--blue-soft)}.hit-stair.sel{fill:var(--blue-soft);stroke:var(--blue)}.hit-label{fill:transparent;stroke:transparent;cursor:move}.hit-label:hover{fill:var(--blue-soft)}.hit-label.sel{fill:var(--blue-soft);stroke:var(--blue)}.snap-ring{fill:#2ea05a2e;stroke:#2ea05a}.handle.sel{fill:var(--blue)}.issue-mark{fill:var(--amber-soft);stroke:var(--amber)}.guide{stroke:var(--blue)}.draft line{stroke:var(--blue);stroke-linecap:round}.draft circle{fill:var(--blue)}.inspector{grid-area:inspector;background:var(--surface);border-left:1px solid var(--line);overflow-y:auto;display:flex;flex-direction:column}.panel{padding:16px 16px 18px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:10px}.panel h2{font-size:15px;margin:0;font-weight:650;display:flex;align-items:center;gap:8px}.muted{color:var(--muted);margin:0}.small{font-size:12.5px}.note{margin:0;padding:10px 12px;background:var(--amber-soft);border-radius:var(--radius)}.row{display:flex;gap:6px;flex-wrap:wrap}.field{display:flex;flex-direction:column;gap:4px;color:var(--muted)}.field input{padding:7px 9px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--ink)}.segmented{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;align-self:flex-start}.segmented button{border:0;border-radius:0;border-right:1px solid var(--line)}.segmented button:last-child{border-right:0}.segmented button.on{background:var(--blue);color:#fff}.keys{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:4px 0 0}.keys dt{font-weight:600}.keys dd{margin:0;color:var(--muted)}.count{font-size:12px;font-weight:600;color:var(--amber);background:var(--amber-soft);border-radius:10px;padding:1px 7px}.issues-panel details{border-top:1px solid var(--line);padding-top:8px}.issues-panel summary{cursor:pointer;font-weight:600;display:flex;align-items:center;gap:8px}.issues-panel ul{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:4px 12px}@media(max-width:860px){.app{grid-template-columns:56px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"bar bar" "rail canvas" "inspector inspector"}.inspector{max-height:40vh;border-left:0;border-top:1px solid var(--line)}.file{display:none}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}.menu-wrap{position:relative}.menu{position:absolute;top:calc(100% + 6px);left:0;z-index:10;min-width:250px;background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px #141e2d24;padding:6px;display:flex;flex-direction:column;gap:2px}.menu.right{left:auto;right:0}.menu button{border:0;text-align:left;display:flex;flex-direction:column;gap:1px;padding:8px 10px}.menu button:hover{background:var(--blue-soft)}.menu button span{color:var(--muted);font-size:12.5px}.grid-choice{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.grid-choice button{border:0;border-radius:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px 4px}.grid-choice button:nth-child(3n){border-right:0}.grid-choice button:nth-last-child(-n+3){border-bottom:0}.grid-choice button.on{background:var(--blue);color:#fff}.label-controls{display:flex;flex-direction:column;gap:8px}.label-controls input[type=range]{accent-color:var(--blue)}.segmented.small button{padding:5px 9px;font-size:13px}.menu-toggle{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:6px;cursor:pointer}.menu-toggle:hover{background:var(--blue-soft)}.menu-toggle input{margin-top:3px;accent-color:var(--blue)}.menu-toggle>span{display:flex;flex-direction:column;gap:1px}.menu-toggle>span>span{color:var(--muted);font-size:12.5px}.menu-note{margin:4px 10px 6px;color:var(--muted);font-size:12px}.status{pointer-events:auto;display:flex;gap:10px;align-items:flex-start}.status-close{border:0;background:none;padding:0 2px;line-height:1;font-size:16px;color:var(--muted)}.field select{padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--ink)}.inline-input{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--ink)}.sheet-backdrop{position:fixed;inset:0;background:#141a2273;display:grid;place-items:center;z-index:50;padding:20px}.sheet{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:18px;width:min(460px,100%);max-height:86vh;overflow-y:auto;display:flex;flex-direction:column;gap:12px;box-shadow:0 18px 50px #0f162147}.sheet-head{display:flex;align-items:center;justify-content:space-between}.sheet-head h2{margin:0;font-size:17px}.sheet-head button{border:0;background:none;font-size:20px;line-height:1;padding:2px 6px;color:var(--muted)}.swatches{display:flex;gap:10px;flex-wrap:wrap}.swatch{display:flex;flex-direction:column;align-items:center;gap:4px;font-size:12px;color:var(--muted)}.swatch input{width:44px;height:32px;border:1px solid var(--line);border-radius:var(--radius);background:none;padding:2px}.logo-preview{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:10px;display:grid;place-items:center}.logo-preview img{max-height:46px;max-width:100%}
