:root{--bg:#14161a;--panel:#1c1f26;--panel-2:#23272f;--border:#2f343d;--fg:#e6e8ec;--muted:#8b929e;--accent:#4c9aff;--accent-soft:#1e3a5f;--good:#4ade80;--warn:#fbbf24;--bad:#f87171;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px}[data-theme=muted]{--canvas-bg:#dfe3e8;--room:#eef1f4;--grid-minor:#d5dade;--grid-major:#c6ccd2;--grid-axis:#b3bbc3;--wall:#4f545b;--wall-interior:#676d75;--wall-stroke:#24272b;--node:#fff;--node-stroke:#7a828d;--ink:#1f2937;--ink-muted:#5b6673;--dimension:#0b5cad;--dimension-hover:#073c73;--glass:#2f6fbf;--halo:#eef1f4;--guide:#d1603c;--furniture-stroke:#33383f}[data-theme=paper]{--canvas-bg:#fff;--room:#f2f5f8;--grid-minor:#e9edf2;--grid-major:#d7dde5;--grid-axis:#c3ccd8;--wall:#4a4a4a;--wall-interior:#5c5c5c;--wall-stroke:#1a1a1a;--node:#fff;--node-stroke:#7a828d;--ink:#1f2937;--ink-muted:#55606e;--dimension:#0b5cad;--dimension-hover:#073c73;--glass:#2f6fbf;--halo:#fff;--guide:#e0704e;--furniture-stroke:#33383f}[data-theme=dark]{--canvas-bg:#171a1f;--room:#21262d;--grid-minor:#1e2228;--grid-major:#272c34;--grid-axis:#333944;--wall:#767d87;--wall-interior:#5f666f;--wall-stroke:#aab2bd;--node:#171a1f;--node-stroke:#8b929e;--ink:#dfe3e9;--ink-muted:#98a1ad;--dimension:#6fb0ff;--dimension-hover:#a3ccff;--glass:#6fb0ff;--halo:#171a1f;--guide:#e08a5c;--furniture-stroke:#c3cad3}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--fg);overflow:hidden}button,input,select{font:inherit;color:inherit}button{background:var(--panel-2);border:1px solid var(--border);cursor:pointer;border-radius:5px;padding:.35rem .7rem}button:hover:not(:disabled){background:#2b3038;border-color:#3a414c}button:disabled{opacity:.45;cursor:not-allowed}button.is-active{background:var(--accent);border-color:var(--accent);color:#06203f;font-weight:600}button.ghost{background:0 0;border-color:#0000}button.danger,button.ghost.danger{color:var(--bad)}button.danger:not(.ghost){border-color:#5a2b2b}input,select{border:1px solid var(--border);background:#12151a;border-radius:5px;min-width:0;padding:.3rem .45rem}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}kbd{color:var(--muted);border:1px solid var(--border);border-radius:3px;margin-left:.4rem;padding:0 .25rem;font-size:.72em}.app{grid-template-rows:auto auto 1fr auto;height:100%;display:grid}.app-header{background:var(--panel);border-bottom:1px solid var(--border);align-items:center;gap:.75rem;padding:.5rem .9rem;display:flex}.app-header h1{letter-spacing:-.01em;margin:0;font-size:1rem}.plan-name{flex:1;max-width:26rem}.row{align-items:center;gap:.4rem;display:flex}.badge.offline{color:var(--bad);background:#3a2222;border-radius:999px;padding:.15rem .45rem;font-size:.75rem}.toolbar{background:var(--panel-2);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:.9rem;padding:.4rem .9rem;display:flex}.toolbar .group{align-items:center;gap:.35rem;display:flex}.toolbar .group.layers{margin-left:auto}.toolbar label{color:var(--muted);align-items:center;gap:.35rem;display:flex}.toolbar select{padding:.25rem}.check{text-transform:capitalize;align-items:center;gap:.3rem;display:flex}.check input{min-width:auto}.workspace{grid-template-columns:1fr 19rem;min-height:0;display:grid}.canvas-host{background:var(--canvas-bg);min-width:0;position:relative}.status-bar{background:var(--panel);border-top:1px solid var(--border);color:var(--muted);align-items:center;gap:1rem;padding:.3rem .9rem;font-size:.82rem;display:flex}.status-bar .spacer{flex:1}.status-bar .is-warning{color:var(--warn)}.status-bar .dot{background:var(--good);border-radius:50%;width:8px;height:8px}.status-bar .dot.is-dirty{background:var(--warn)}.plan-canvas{background:var(--canvas-bg);touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.plan-canvas.tool-wall,.plan-canvas.tool-door,.plan-canvas.tool-window,.plan-canvas.tool-furniture,.plan-canvas.tool-annotation{cursor:crosshair}.plan-canvas.tool-pan,.plan-canvas.pan-ready{cursor:grab}.plan-canvas.pan{cursor:grabbing}.grid-minor{stroke:var(--grid-minor)}.grid-major{stroke:var(--grid-major)}.grid-axis{stroke:var(--grid-axis)}.layer-rooms .room{fill:var(--room)}.wall polygon{fill:var(--wall);stroke:var(--wall-stroke)}.wall.wall-interior polygon{fill:var(--wall-interior)}.wall.is-hovered polygon{fill:#5f6b7a}.wall.is-selected polygon{fill:#2f6fbf;stroke:var(--accent)}.wall-node{fill:var(--node);stroke:var(--node-stroke);stroke-width:0}.wall-node.is-selected{fill:var(--accent)}.opening-jamb{stroke:var(--wall-stroke);fill:none}.opening-glass{stroke:var(--glass);fill:none}.opening-leaf{stroke:var(--wall-stroke);fill:none}.opening.is-selected .opening-jamb,.opening.is-selected .opening-leaf,.opening.is-selected .opening-glass{stroke:var(--accent)}.opening.is-hovered .opening-leaf{stroke:var(--glass)}.furniture rect{stroke:var(--furniture-stroke);fill-opacity:.6}.furniture .furniture-axis{stroke:var(--furniture-stroke);opacity:.25}.furniture.is-hovered rect{fill-opacity:.8}.furniture.is-selected rect{stroke:var(--accent)}.furniture.is-locked rect{stroke-dasharray:6 4}.layer-dimensions text,.layer-labels text,.layer-overlay text{paint-order:stroke;stroke:var(--halo);stroke-width:3px;stroke-linejoin:round;font-size:11px}.dimension-line,.dimension-tick,.dimension-leader{stroke:var(--dimension);stroke-width:1px;fill:none}.layer-dimensions text{fill:var(--dimension);cursor:text}.layer-dimensions text:hover{fill:var(--dimension-hover);text-decoration:underline}.chain-total text{font-weight:600}.chain-total .dimension-line{stroke-width:1.2px}.dimension-chain.is-selected .dimension-line,.dimension-chain.is-selected .dimension-tick{stroke:var(--accent)}.room-name{fill:var(--ink);font-size:13px;font-weight:600}.room-name.editable{cursor:text}.room-name.editable:hover{fill:var(--dimension);text-decoration:underline}.room-name.is-placeholder{fill:var(--ink-muted);font-style:italic;font-weight:400}.room-label.is-selected .room-name{fill:var(--accent)}.room-area{fill:var(--ink-muted)}.furniture-name{fill:var(--ink)}.furniture-size{fill:var(--ink-muted)}.furniture-size .editable{cursor:text}.furniture-size .editable:hover{fill:var(--dimension);text-decoration:underline}.annotation{fill:var(--ink)}.snap-guide{stroke:var(--guide);stroke-width:1px;stroke-dasharray:5 4}.rubber-band line{stroke:var(--dimension);stroke-width:1.5px;stroke-dasharray:6 4}.rubber-band circle{fill:var(--dimension)}.rubber-band text{fill:var(--dimension);font-weight:600}.marquee{fill:#4c9aff1f;stroke:var(--accent);stroke-dasharray:4 3}.draw-rect rect{fill:#4c9aff26;stroke:var(--accent)}.draw-rect text{fill:var(--ink);font-weight:600}.opening-ghost polygon{fill:#4c9aff59;stroke:var(--accent)}.opening-ghost text{fill:var(--dimension);font-weight:600}.selection-outline{fill:none;stroke:var(--accent);stroke-width:1.5px}.rotate-stem{stroke:var(--accent);stroke-width:1px}.handle{fill:var(--canvas-bg);stroke:var(--accent);stroke-width:1.5px}.handle-resize{cursor:nwse-resize}.handle-rotate{cursor:grab}.label-editor{text-align:center;background:var(--halo);width:6.5rem;color:var(--ink);border:2px solid var(--accent);z-index:20;border-radius:4px;padding:.15rem .3rem;font-weight:600;position:absolute;transform:translate(-50%,-50%)}.label-editor.is-text{text-align:left;width:11rem}.label-editor.is-rejected{border-color:var(--bad);animation:.25s shake}@keyframes shake{0%,to{transform:translate(-50%,-50%)}25%{transform:translate(calc(-50% - 5px),-50%)}75%{transform:translate(calc(5px - 50%),-50%)}}.properties{background:var(--panel);border-left:1px solid var(--border);flex-direction:column;gap:.55rem;padding:.9rem;display:flex;overflow-y:auto}.properties h2{margin:0 0 .2rem;font-size:.95rem}.properties .hint{color:var(--muted);margin:.3rem 0 0;font-size:.8rem;line-height:1.45}.number-field,.text-field{grid-template-columns:6.5rem 1fr auto;align-items:center;gap:.4rem;display:grid}.number-field span,.text-field span{color:var(--muted)}.number-field em{color:var(--muted);font-size:.8rem;font-style:normal}.number-field.is-invalid input{border-color:var(--bad);outline:1px solid var(--bad)}.counts{border-top:1px solid var(--border);grid-template-columns:1fr auto;gap:.15rem .5rem;margin:.5rem 0 0;padding-top:.5rem;font-size:.85rem;display:grid}.counts dt{color:var(--muted)}.counts dd{text-align:right;font-variant-numeric:tabular-nums;margin:0}.modal-backdrop{z-index:30;background:#06080ca6;place-items:center;display:grid;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--border);border-radius:10px;width:min(46rem,92vw);max-height:84vh;padding:1rem 1.1rem 1.2rem;overflow-y:auto}.modal header{justify-content:space-between;align-items:center;display:flex}.modal h2{margin:0 0 .6rem;font-size:1.05rem}.modal .error{color:var(--bad);background:#3a2222;border-radius:5px;margin:0 0 .6rem;padding:.45rem .6rem}.modal .actions{flex-wrap:wrap;gap:.4rem;margin-bottom:.8rem;display:flex}.file-button{background:var(--panel-2);border:1px solid var(--border);cursor:pointer;border-radius:5px;align-items:center;padding:.35rem .7rem;display:inline-flex;position:relative;overflow:hidden}.file-button input{opacity:0;cursor:pointer;position:absolute;inset:0}.plan-list{flex-direction:column;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.plan-list li{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;align-items:center;gap:.5rem;padding:.45rem .6rem;display:flex}.plan-list li.is-current{border-color:var(--accent)}.plan-list .open{text-align:left;background:0 0;border:none;flex-direction:column;flex:1;align-items:flex-start;gap:.1rem;display:flex}.plan-list .meta{color:var(--muted);font-size:.78rem}.export-menu .fields{grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.5rem;display:grid}.export-menu .fields label{color:var(--muted);gap:.2rem;display:grid}.export-menu .toggles{flex-wrap:wrap;gap:.6rem;margin:.8rem 0 .2rem;display:flex}.export-menu .formats{grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.5rem;margin-top:.8rem;display:grid}.export-menu .formats button{text-align:left;flex-direction:column;align-items:flex-start;gap:.15rem;padding:.6rem .7rem;display:flex}.export-menu .formats span{color:var(--muted);font-size:.78rem}.auth-gate{background:var(--bg);background-image:linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px);background-position:50%;background-size:44px 44px;align-content:center;place-items:center;gap:1.75rem;padding:1.5rem;display:grid;position:fixed;inset:0}.auth-gate:before{content:"";background:radial-gradient(ellipse at center, transparent 0%, var(--bg) 72%);pointer-events:none;position:absolute;inset:0}.auth-mark{fill:none;stroke-linecap:round;stroke-linejoin:round;width:148px;height:111px;position:relative}.auth-mark-walls path{stroke:var(--wall-interior);stroke-width:5px}.auth-mark-openings path{stroke:var(--bg);stroke-width:7px}.auth-mark-swing path{stroke:var(--muted);stroke-width:1.5px}.auth-card{border:1px solid var(--border);background:var(--panel);text-align:center;border-radius:14px;width:min(24rem,100%);padding:1.75rem;position:relative;box-shadow:0 18px 48px #00000047}.auth-card h1{letter-spacing:-.02em;margin:0;font-size:1.4rem}.auth-tagline{color:var(--muted);margin:.35rem 0 1.5rem;font-size:.9rem}.auth-actions{flex-direction:column;gap:.5rem;display:flex}.auth-card button{border-radius:8px;padding:.6rem 1.25rem;font-size:.95rem}.auth-primary{background:var(--accent);border-color:var(--accent);color:#06203f;font-weight:600}.auth-primary:hover:not(:disabled){background:#5ea7ff;border-color:#5ea7ff}.auth-note{color:var(--muted);margin:1.25rem 0 0;font-size:.76rem;line-height:1.5}.auth-status{color:var(--muted);justify-content:center;align-items:center;gap:.6rem;margin:0;display:flex}.auth-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:.9rem;height:.9rem;animation:.7s linear infinite auth-spin}@keyframes auth-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.auth-spinner{animation:none}}.status-bar .link-button{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 .25rem}.status-bar .link-button:hover:not(:disabled){color:var(--fg);background:0 0;border-color:#0000;text-decoration:underline}.layer-stairs .stairs-body{fill:var(--room);stroke:var(--wall-stroke)}.layer-stairs .stairs-nosings line{stroke:var(--wall-interior)}.layer-stairs .stairs-arrow line,.layer-stairs .stairs-arrow polyline{stroke:var(--ink);fill:none}.layer-stairs .stairs.is-hovered .stairs-body{stroke:var(--accent)}.layer-stairs .stairs.is-selected .stairs-body{stroke:var(--accent);fill:var(--accent-soft)}.layer-stairs .stairs.is-locked{opacity:.65}.plan-select{align-items:center;gap:.25rem;display:flex}.plan-select select{border:1px solid var(--border);background:var(--panel);border-radius:6px;max-width:14rem;padding:.3rem .5rem}.wall-merged{fill:var(--wall);stroke:var(--wall-stroke)}.wall.is-merged polygon{fill:none}.wall.is-merged.is-hovered polygon{fill:#5f6b7a;fill-opacity:.55}.wall.is-merged.is-selected polygon{fill:#2f6fbf;fill-opacity:.6}.bulk-thickness{border-top:1px solid var(--border);flex-direction:column;gap:.35rem;padding:.6rem 0;display:flex}.bulk-thickness>span{color:var(--muted);font-size:.8rem}.bulk-thickness .row{gap:.5rem}.bulk-thickness .hint{margin:0;font-size:.72rem;line-height:1.35}.layer-measurements .measurement line{stroke:var(--dimension);stroke-width:1.25px}.layer-measurements .measurement text{fill:var(--dimension);paint-order:stroke;stroke:var(--panel);stroke-width:3px;font-size:11px}.layer-measurements .measurement.is-hovered line{stroke:var(--accent)}.layer-measurements .measurement.is-selected line{stroke:var(--accent);stroke-width:2px}.layer-measurements .measurement.is-selected text{fill:var(--accent)}.layer-measurements .measurement.is-scratch line{stroke-dasharray:5 4}.layer-furniture .furniture-hit{fill:#0000;stroke:none}.layer-furniture .furniture.is-hovered .furniture-hit{stroke:var(--accent)}.layer-furniture .furniture.is-selected .furniture-hit{stroke:var(--accent);fill:var(--accent);fill-opacity:.18}.layer-furniture .furniture-art{color:var(--ink);vector-effect:non-scaling-stroke;stroke-width:1.5px}.layer-furniture .furniture-art *{vector-effect:non-scaling-stroke}.layer-furniture .furniture.is-selected .furniture-art{color:var(--accent)}
