:root{--bg:#f3f4f6;--panel:#fff;--line:#e5e7eb;--line-2:#d1d5db;--text:#111827;--muted:#6b7280;--accent:#2563eb;--accent-soft:#dbeafe;--ai:#7c3aed;--danger:#dc2626;--ok:#059669;--warn:#d97706;--bar:#0f172a;color:var(--text);background:var(--bg);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}button{border:1px solid var(--line-2);cursor:pointer;white-space:nowrap;background:#fff;border-radius:6px;padding:5px 10px}button:hover:not(:disabled){border-color:#9ca3af}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){background:#1d4ed8}button.ai{background:var(--ai);border-color:var(--ai);color:#fff;width:100%}button.danger{color:var(--danger)}button.link{color:var(--accent);background:0 0;border:0;padding:0;text-decoration:underline}input,select,textarea{border:1px solid var(--line-2);background:#fff;border-radius:6px;min-width:0;padding:5px 8px}textarea{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12px}kbd{border:1px solid var(--line-2);background:#fff;border-bottom-width:2px;border-radius:4px;padding:0 4px;font-size:11px}small{color:var(--muted);display:block}.app{flex-direction:column;height:100%;display:flex}.main{flex:1;min-height:0;display:flex}.toolbar{background:var(--bar);color:#e5e7eb;align-items:center;gap:16px;padding:8px 12px;display:flex}.toolbar button{color:#e5e7eb;background:#1e293b;border-color:#334155}.toolbar button:hover:not(:disabled){border-color:#64748b}.toolbar button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.brand{align-items:center;gap:8px;display:flex}.logo{color:#fbbf24;font-size:18px}.proj-name{color:#fff;background:0 0;border-color:#0000;width:220px;font-weight:600}.proj-name:hover,.proj-name:focus{border-color:#334155}.stages{flex:1;align-items:center;gap:4px;display:flex;overflow-x:auto}.stages .label{color:#94a3b8;text-transform:uppercase;letter-spacing:.06em;margin-right:4px;font-size:11px}.stage{border-radius:999px!important}.stage.on{font-weight:600;color:#111827!important;background:#fbbf24!important;border-color:#fbbf24!important}.stage .x{opacity:.6;margin-left:6px}.stage .x.armed{color:var(--danger);opacity:1;font-weight:600}.stage.add{border-style:dashed!important}.stage-edit{width:120px}.actions{align-items:center;gap:6px;display:flex}.toolbar button.warn{color:#fde68a;border-color:#f59e0b}.backup-nag{color:#fde68a;white-space:nowrap;font-size:12px}.sidebar{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;width:320px;min-height:0;display:flex}.side-head{border-bottom:1px solid var(--line);flex-direction:column;gap:8px;padding:10px;display:flex}.side-empty{flex-direction:column;gap:10px;padding:20px;display:flex}.side-empty h3{margin:0}.side-empty p{color:var(--muted);margin:0;line-height:1.5}.progress-line{color:var(--muted);font-size:12px}.progress-line strong{color:var(--text)}.bar{background:var(--line);border-radius:3px;height:5px;margin-top:4px;overflow:hidden}.bar>div{background:var(--ok);height:100%;transition:width .3s}.icon-job{color:var(--ai);font-size:12px}.icon-job .bar>div{background:var(--ai)}.error{color:var(--danger);font-size:12px}.search{width:100%}.check{color:var(--muted);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.item-list{flex:1;padding-bottom:20px;overflow-y:auto}.group-head{border-bottom:1px solid var(--line);cursor:pointer;z-index:1;background:#f9fafb;align-items:center;gap:6px;padding:7px 10px;font-size:12px;font-weight:600;display:flex;position:sticky;top:0}.group-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.caret{color:var(--muted);width:10px}.dot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.dot.ok{background:var(--ok)}.dot.warn{background:var(--warn)}.item-row{cursor:grab;border-bottom:1px solid #f3f4f6;align-items:center;gap:8px;padding:5px 10px;display:flex}.item-row:hover{background:#f9fafb}.item-row.sel{background:var(--accent-soft)}.item-row.done{opacity:.5;cursor:pointer}.item-row[draggable=false]{cursor:pointer}.item-icon{object-fit:contain;border:1px solid var(--line);background:#fff;border-radius:4px;flex:none;padding:2px}.item-text{flex:1;min-width:0}.item-name{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.3;display:-webkit-box;overflow:hidden}.item-meta{color:var(--muted);font-size:11px}.count{color:#92400e;background:#fef3c7;border-radius:999px;flex:none;padding:1px 6px;font-size:11px;font-weight:600}.count.full{color:#065f46;background:#d1fae5}.count.muted{background:var(--line);color:var(--muted)}.later-note{color:var(--muted);padding:10px;font-size:12px}.stage-area{flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.sheet-tabs{background:var(--bg);border-bottom:1px solid var(--line-2);gap:2px;padding:6px 8px 0;display:flex;overflow-x:auto}.sheet-tab{background:#e5e7eb;border-bottom:0;border-radius:6px 6px 0 0;align-items:center;gap:6px;display:flex}.sheet-tab.on{background:#fff;font-weight:600}.sheet-tab .x{opacity:.5}.sheet-tab .x.armed{color:var(--danger);opacity:1}.sheet-tab.add{background:0 0;border-style:dashed}.canvas{touch-action:none;-webkit-user-select:none;user-select:none;background:#cbd5e1;flex:1;position:relative;overflow:hidden}.canvas.empty{background:var(--bg);place-items:center;display:grid}.dropzone{border:2px dashed var(--line-2);text-align:center;background:#fff;border-radius:14px;padding:40px 60px}.dropzone h2{margin:0 0 6px}.dropzone p{color:var(--muted);margin:0 0 16px}.world{transform-origin:0 0;position:absolute;top:0;left:0}.drawings{transform-origin:0 0;pointer-events:none;position:absolute;top:0;left:0}.drawings svg{position:absolute}.sheet-img{pointer-events:none;background:#fff;position:absolute;top:0;left:0;box-shadow:0 2px 16px #0000002e}.layer-img{transform-origin:0 0;pointer-events:none;mix-blend-mode:multiply;outline:0 dashed #0000;position:absolute;top:0;left:0}.layer-img.clear{mix-blend-mode:normal}.layer-img.active{outline-style:dashed;outline-color:#ea580c}.layer-img.drop-target{outline-style:solid;outline-color:#16a34a}.place-on{color:var(--muted);align-items:center;gap:4px;padding:0 4px;font-size:12px;display:flex}.place-on select{max-width:160px}.place-on.on-layer{color:#15803d;font-weight:600}.place-on.on-layer select{border-color:#16a34a}.hint.drop-hint{top:56px;bottom:auto}.hint.drop-hint.on-layer{background:#14532d}.align-src{fill:#ea580c40;stroke:#ea580c}.align-dst{fill:#05966940;stroke:#059669}.align-link{stroke:#374151}.align-num{fill:#111827;paint-order:stroke;stroke:#fff;stroke-width:.25em;font-weight:700}.layers-panel{z-index:5;background:#fff;border-radius:10px;flex-direction:column;gap:6px;width:300px;max-height:calc(100% - 70px);padding:10px;display:flex;position:absolute;top:56px;right:10px;overflow-y:auto;box-shadow:0 6px 24px #0003}.lp-head{justify-content:space-between;align-items:center;display:flex}.lp-row{border-radius:6px;grid-template-columns:auto 1fr auto auto auto auto auto auto;align-items:center;gap:4px;padding:4px;display:grid}.lp-row.on{background:#fff7ed;outline:1px solid #fdba74}.lp-row.base{grid-template-columns:auto 1fr auto auto}.lp-scale-tag{color:var(--warn);margin-left:6px;font-size:10px}.lp-scale-tag.ok{color:var(--ok)}.scale-target{align-items:center;gap:4px;margin-right:8px;font-weight:600;display:inline-flex}.lp-row.sys{grid-template-columns:auto 1fr auto}.lp-row.sys .lp-name{align-items:center;gap:6px;display:flex}.lp-row.sys .lp-name:disabled{color:inherit;opacity:.7}.sys-dot{border-radius:2px;flex:none;width:10px;height:10px}.sys-dot.equip{background:#64748b}.sys-dot.hvac{background:#2563eb}.lp-sub{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-top:1px solid var(--line);margin-top:2px;padding:6px 4px 0;font-size:11px}.lp-name .muted{color:var(--muted);font-weight:400}.icon-btn.pin{opacity:.3;filter:grayscale()}.icon-btn.pin.on{opacity:1;filter:none;background:#dcfce7;border-color:#86efac}.lp-scale{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.check.grow,small.grow{margin-right:auto}.lp-name{text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;padding:2px 4px;overflow:hidden}.lp-opacity{grid-column:2/-1}.icon-btn{border-color:#0000;padding:1px 6px;font-size:11px}.icon-btn.armed{color:var(--danger)}.lp-detail{border-top:1px solid var(--line);flex-direction:column;gap:8px;padding-top:8px;display:flex}.lp-title{font-weight:600}.lp-detail button.on{background:#ffedd5;border-color:#fdba74}.choice{grid-template-columns:1fr 1fr;gap:10px;display:grid}.choice button{white-space:normal;text-align:left;flex-direction:column;align-items:flex-start;gap:4px;padding:14px;display:flex}.choice button span{color:var(--muted);font-size:12px}.choice button:hover{background:var(--accent-soft)}.overlay{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.room{fill:#2563eb0d;stroke:#2563ebb3}.room.sel{fill:#2563eb1f;stroke:var(--accent);stroke-dasharray:none}.room-draft{fill:#2563eb14;stroke:var(--accent)}.calib-line{fill:none;stroke:var(--danger)}.vertex{fill:#fff;stroke:var(--accent);stroke-width:.15%}.vertex.handle{pointer-events:all;cursor:move}.room-label{color:#1d4ed8;white-space:nowrap;cursor:pointer;background:#ffffffbf;border-radius:.2em;padding:0 .3em;font-weight:600;position:absolute;transform:translate(-50%,-50%)}.room-label.sel{background:var(--accent);color:#fff}.unit{cursor:move;background:#ffffff8c;outline:0 solid #0000;position:absolute}.unit .footprint{border:solid #64748b;border-width:calc(var(--iz) * 1px);border-bottom-width:calc(var(--iz) * 3px);pointer-events:none;border-radius:1px;position:absolute;inset:0}.unit.bad .footprint{border-color:var(--danger)}.unit .pic{object-fit:contain;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.unit .pic.photo{mix-blend-mode:multiply}.unit.sel{outline-style:solid;outline-color:var(--accent);z-index:2}.unit.bad{outline-style:dashed;outline-color:var(--danger)}.unit.sel.bad{outline-style:solid}.unit .tag{color:#111827;text-shadow:0 0 2px #fff,0 0 2px #fff,0 0 2px #fff;white-space:nowrap;pointer-events:none;font-weight:700;position:absolute;top:50%;left:50%}.unit .handle{border:solid var(--accent);z-index:3;background:#fff;border-radius:2px;position:absolute;transform:translate(-50%,-50%)}.unit .dims{background:var(--accent);color:#fff;white-space:nowrap;pointer-events:none;border-radius:.3em;padding:0 .4em;position:absolute;left:50%;transform:translate(-50%)}.canvas-tools{background:#fff;border-radius:8px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:10px;left:10px;box-shadow:0 1px 6px #00000026}.canvas-tools button{border-color:#0000}.canvas-tools button.on{background:var(--accent-soft);color:#1d4ed8;font-weight:600}.canvas-tools .sep{background:var(--line);width:1px;height:20px}.zoom{color:var(--muted);min-width:48px;padding:0 6px;font-size:12px}.hint{color:#fff;text-align:center;background:#0f172ae6;border-radius:8px;max-width:80%;padding:8px 14px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.hint.warn{color:#92400e;background:#fffbeb;border:1px solid #fcd34d}.hint select{color:#111827;margin-left:4px}.popover,.roombar{background:#fff;border-radius:10px;flex-direction:column;gap:8px;width:340px;padding:14px;display:flex;position:absolute;top:60px;left:50%;transform:translate(-50%);box-shadow:0 8px 30px #00000040}.popover label{font-weight:600}.roombar{flex-direction:row;align-items:center;width:auto;padding:8px 12px;top:auto;bottom:12px}.roombar small{white-space:nowrap}.inspector{background:var(--panel);border-left:1px solid var(--line);flex-direction:column;gap:12px;width:290px;padding:12px;display:flex;overflow-y:auto}.muted-panel{color:var(--muted)}.muted-panel h4{color:var(--text);margin:0}.tips{margin:0;padding-left:16px;line-height:1.9}.insp-head{align-items:flex-start;gap:10px;display:flex}.insp-head .title{font-weight:600;line-height:1.35}.tagline{color:var(--muted);margin-bottom:2px;font-size:11px}.insp-section{border-top:1px solid var(--line);flex-direction:column;gap:8px;padding-top:12px;display:flex}.placed-line{font-weight:600}.sel-units{background:#f9fafb;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;font-size:12px;display:flex}.field{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.field>span{color:var(--muted);font-size:11px;font-weight:500}.field.inline{flex-direction:row;flex:none;align-items:center;gap:6px}.field.inline input{width:70px}.cost-line{color:var(--muted);font-size:12px}.row{align-items:flex-end;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.end{justify-content:flex-end;margin-top:8px}.modal-bg{z-index:50;background:#0f172a73;place-items:center;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;flex-direction:column;gap:10px;width:520px;max-width:calc(100vw - 32px);max-height:calc(100vh - 40px);padding:20px 24px;display:flex;overflow-y:auto;box-shadow:0 20px 60px #0000004d}.modal.wide{width:980px}.modal h2{margin:0;font-size:18px}.modal h4{margin:8px 0 0}.modal h4 small{margin-left:6px;font-weight:400;display:inline}.modal p{color:var(--muted);margin:0}.map-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;display:grid}.preview{border:1px solid var(--line);border-radius:8px;max-height:260px;overflow:auto}.preview table{border-collapse:collapse;width:100%;font-size:12px}.preview th,.preview td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:5px 8px}.preview th{background:#f9fafb;position:sticky;top:0}.preview td:first-child{min-width:280px}.thumbs{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.thumb{flex-direction:column;align-items:center;gap:4px;padding:6px;display:flex}.thumb.on{border:2px solid var(--accent);background:var(--accent-soft)}.thumb img,.thumb .ph{aspect-ratio:11/8.5;object-fit:contain;background:#f9fafb;width:100%}.export-buttons{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.warn-text{color:var(--warn)}.ok-text{color:var(--ok)}.progress-msg{color:var(--accent)}.drop-overlay{border:4px dashed var(--accent);z-index:60;pointer-events:none;background:#2563eb26;place-items:center;display:grid;position:fixed;inset:0}.drop-overlay>div{background:#fff;border-radius:12px;padding:18px 26px;font-size:16px;font-weight:600;box-shadow:0 8px 30px #0003}.busy{background:var(--bar);color:#fff;z-index:70;border-radius:8px;align-items:center;gap:10px;padding:10px 16px;display:flex;position:fixed;top:60px;left:50%;transform:translate(-50%)}.spinner{border:2px solid #64748b;border-top-color:#fff;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toast{background:var(--bar);color:#fff;z-index:80;cursor:pointer;border-radius:8px;max-width:420px;padding:12px 16px;line-height:1.4;position:fixed;bottom:20px;right:20px;box-shadow:0 8px 30px #0000004d}.picker{flex-direction:column;gap:6px;display:flex}.picker-list{border:1px solid var(--line);border-radius:6px;max-height:320px;padding:6px;overflow-y:auto}.picker-group{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:6px 0 4px;font-size:11px;font-weight:600}.picker-grid{grid-template-columns:repeat(4,1fr);gap:4px;display:grid}.pick{background:#fff;place-items:center;height:52px;padding:3px;display:grid}.pick img{max-width:100%;max-height:44px}.pick.on{border:2px solid var(--accent);background:var(--accent-soft)}.button-like{border:1px solid var(--line-2);cursor:pointer;background:#fff;border-radius:6px;padding:5px 10px}.u-num{width:58px}.u-num.wide{width:70px}.u-unit{color:var(--muted);font-size:11px}.item-icon{object-fit:contain}.dim-line{stroke:#b91c1c}.dim-label{color:#b91c1c;white-space:nowrap;cursor:pointer;font-variant-numeric:tabular-nums;background:#fff;border:1px solid #fca5a5;border-radius:.3em;padding:0 .35em;font-weight:700;position:absolute;transform:translate(-50%,-50%)}.dim-label.sel{color:#fff;background:#b91c1c}.dim-label.live{pointer-events:none}.room-stats{color:var(--muted);flex-wrap:wrap;gap:10px;font-size:12px;display:flex}.room-stats b{color:var(--text);font-weight:600}.cad-view{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.cad-view *{vector-effect:non-scaling-stroke;stroke-width:var(--sw);stroke-linecap:round;stroke-linejoin:round}.cad-view text{stroke:none}.cad-view .cad-sel *{stroke:#2563eb;stroke-width:calc(var(--sw) * 2.5)}.cad-view .cad-sel text,.cad-view .cad-sel [fill]:not([fill=none]){fill:#2563eb}.world.cad-editing .unit{opacity:.35;pointer-events:none}.world.cad-editing .room-label,.world.cad-editing .dim-label{pointer-events:none}.cad-overlay{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.cad-draft{fill:none;stroke:#2563eb}.cad-center .cad-draft{stroke:#93c5fd;stroke-dasharray:4 3}.cad-pt{fill:#2563eb}.cad-grip{fill:#2563eb;stroke:#fff}.cad-snap{fill:none;stroke:#ea580c}.cad-box{fill:#2563eb14;stroke:#2563eb}.cad-box.crossing{fill:#16a34a14;stroke:#16a34a}.cad-len{color:#fff;white-space:nowrap;pointer-events:none;background:#111827d9;border-radius:.3em;padding:.1em .45em;position:absolute}.cad-typed{border:1.5px solid var(--accent);border-radius:.3em;width:14em;padding:.2em .4em;position:absolute}.cad-panel{flex-direction:column;gap:8px;width:300px;max-height:calc(100% - 70px);display:flex;overflow-y:auto}.cad-panel .muted{color:var(--muted);font-size:11px}.cad-tools{grid-template-columns:repeat(4,1fr);gap:3px;display:grid}.cad-tools button{padding:4px 2px;font-size:12px}.cad-tools button.on{background:var(--accent);color:#fff;border-color:var(--accent)}.cad-opts{flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:12px;display:flex}.cad-opts input[type=number]{width:56px}.cad-hint{color:var(--muted)}.cad-sel-box{border:1px solid var(--line);background:var(--accent-soft);border-radius:6px;flex-direction:column;gap:5px;padding:6px;display:flex}.cad-btns{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.cad-btns .angle{width:44px}.cad-btns .danger{color:var(--danger)}.cad-layers{flex-direction:column;max-height:260px;display:flex;overflow-y:auto}.cad-layer{border-radius:4px;flex-wrap:wrap;align-items:center;gap:4px;padding:1px 2px;font-size:12px;display:flex}.cad-layer.current{background:var(--accent-soft)}.cad-layer .lp-name{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:1;min-width:0;overflow:hidden}.cad-layer.current .lp-name{font-weight:700}.swatch{border:1px solid #94a3b8;border-radius:3px;flex:none;width:14px;height:14px;padding:0}.swatches{flex-basis:100%;gap:3px;padding:2px 0 4px 22px;display:flex}.lp-filter{width:100%}.lp-section{border-top:1px solid var(--line);flex-direction:column;gap:4px;padding-top:6px;display:flex}.lp-section .row{align-items:center;gap:8px;display:flex}.img-overlay{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.img-crop-box{fill:#2563eb0f;stroke:#2563eb}.img-erase-box{fill:#dc262614;stroke:#dc2626}.img-brush{fill:#ffffff59;stroke:#dc2626}.img-brush.restore{stroke:#16a34a}.img-panel{flex-direction:column;gap:8px;width:280px;max-height:calc(100% - 70px);display:flex;overflow-y:auto}.img-panel .row input[type=range]{flex:1}.img-tools{grid-template-columns:repeat(3,1fr)}.pdf-pick{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:flex}.pdf-pick h4{margin:0}.pdf-pick .row.wrap{flex-wrap:wrap;align-items:center;gap:6px 14px;display:flex}.pdf-sheet{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:4px 14px;padding-top:6px;display:flex}.pdf-sheet>strong,.pdf-cad{flex-basis:100%}.pdf-cad-list{flex-direction:column;gap:2px;max-height:180px;padding:4px 0 4px 8px;display:flex;overflow-y:auto}.side-tabs{border-bottom:1px solid var(--line);gap:2px;padding:6px 8px 0;display:flex}.side-tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;flex:1;padding:6px 4px}.side-tabs button.on{color:var(--fg,#111827);border-bottom-color:var(--accent);font-weight:600}.kit-note{color:var(--muted);margin:0;font-size:12px}.item-row.kit{cursor:grab}.marquee{fill:#2563eb14;stroke:var(--accent)}.layer-box polygon{fill:none;stroke:#ea580c}.layer-box line{stroke:#ea580c}.layer-box.locked polygon{stroke-dasharray:.5%}.layer-box .lh{fill:#fff;stroke:#ea580c;pointer-events:all}.layer-box .lh.rot{cursor:grab}.sel-bar{white-space:nowrap;z-index:5;background:#fff;border-radius:10px;align-items:center;gap:4px;padding:5px 8px;display:flex;position:absolute;bottom:58px;left:50%;transform:translate(-50%);box-shadow:0 2px 12px #0f172a2e}.sel-bar strong{padding:0 6px;font-size:12px}.sel-bar button{border-color:#0000}.sel-bar button:hover{background:#f1f5f9}.sel-bar button.danger{color:var(--danger)}.sel-layer{color:var(--muted);align-items:center;gap:4px;padding:0 4px;font-size:12px;display:flex}.sel-layer select{max-width:150px}.context-menu{z-index:50;border:1px solid var(--line);background:#fff;border-radius:8px;min-width:210px;padding:4px;font-size:13px;position:fixed;box-shadow:0 6px 24px #0f172a33}.cm-item{cursor:default;border-radius:5px;align-items:center;gap:12px;padding:6px 10px;display:flex;position:relative}.cm-item:hover{background:var(--accent-soft)}.cm-item>span:first-child{flex:1}.cm-item.off{color:#9ca3af;pointer-events:none}.cm-item.danger{color:var(--danger)}.cm-item kbd{color:var(--muted);background:0 0;border:0;font:11px ui-monospace,monospace}.cm-arrow{color:var(--muted)}.cm-sub{position:absolute;top:-4px;left:100%}.cm-sep{background:var(--line);height:1px;margin:4px 6px}.modal.shortcuts table{border-collapse:collapse;width:100%;font-size:13px}.modal.shortcuts th{text-align:left;white-space:nowrap;vertical-align:top;padding:5px 12px 5px 0;font-weight:600}.modal.shortcuts td{color:#374151;padding:5px 0}.lock-toggle{color:#94a3b8;background:0 0;border-color:#0000;align-items:center;gap:3px;padding:1px 5px;font-size:11px;display:inline-flex}.lock-toggle:hover{color:#475569}.lock-toggle.locked{color:#fff;background:#ea580c;border-color:#ea580c;font-weight:600}.lock-toggle.locked:hover{color:#fff;background:#c2410c}.world.gesture,.drawings.gesture{will-change:transform}.perf-pill{z-index:40;border:1px solid var(--line);background:#fff;border-radius:999px;align-items:center;gap:8px;padding:8px 10px 8px 12px;font-size:13px;display:flex;position:fixed;bottom:16px;right:16px;box-shadow:0 4px 16px #0f172a33}.perf-dot{background:#dc2626;border-radius:50%;width:10px;height:10px;animation:1s infinite perf-blink}@keyframes perf-blink{50%{opacity:.25}}.perf-report{white-space:pre;width:100%;height:320px;font:12px ui-monospace,Menlo,monospace}.settings-perf{border-top:1px solid var(--line);flex-direction:column;gap:4px;padding:10px 0;font-size:13px;display:flex}.settings-perf span{color:var(--muted)}.settings-perf button{align-self:flex-start}.design-panel{gap:8px;width:320px}.dp-section{border-top:1px solid var(--line);flex-direction:column;gap:6px;padding-top:8px;display:flex}.dp-section .row{align-items:center}.dp-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:600}.dp-props .dp-label{color:var(--accent)}.dp-option{grid-template-columns:auto 1fr auto auto}.dp-option .icon-btn.armed{color:var(--danger);font-weight:600}.dp-option input:not([type]){min-width:0}.dp-option .icon-btn{color:var(--muted);font-size:11px}.dp-tools{grid-template-columns:repeat(4,1fr);gap:3px;display:grid}.dp-tools button{flex-direction:column;align-items:center;gap:1px;padding:5px 2px 4px;font-size:12px;line-height:1.1;display:flex}.dp-tools button kbd{color:var(--muted);padding:0 3px;font-size:9px}.dp-tools button.on{background:var(--accent);color:#fff;border-color:var(--accent)}.dp-tools button.on kbd{color:#dbeafe;background:0 0;border-color:#93c5fd}.dp-kinds{grid-template-columns:repeat(3,1fr);gap:3px;display:grid}.dp-kinds button{padding:4px 2px;font-size:12px}.dp-kinds button.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.dp-width{width:76px}.dp-snap{gap:14px}.dp-snap select{margin-left:4px}.dp-sum{flex-direction:column;gap:2px;font-size:12px;display:flex}.dp-sum div{align-items:center;gap:6px;display:flex}.dp-sum i{border:1px solid #00000026;border-radius:3px;width:12px;height:12px}.dp-sum b{font-variant-numeric:tabular-nums;margin-left:auto}.area-row{align-items:center;gap:6px;display:flex}.area-row input{flex:1;min-width:0}.area-name{text-align:left;flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}.area-name small{color:var(--muted)}.modal.breakdown table{border-collapse:collapse;width:100%;font-size:12px}.modal.breakdown th,.modal.breakdown td{text-align:right;border-bottom:1px solid var(--line);white-space:nowrap;font-variant-numeric:tabular-nums;padding:4px 8px}.modal.breakdown th:first-child,.modal.breakdown td:first-child{text-align:left}.modal.breakdown th{color:var(--muted);font-weight:600}.bd-tiles{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;display:grid}.bd-tiles div{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.bd-tiles b{font-variant-numeric:tabular-nums;font-size:18px}.bd-tiles small{color:var(--muted)}.bd-two{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;display:grid}.bd-scroll{overflow-x:auto}.bd-issue td:first-child{color:#b45309}.bd-total td{border-bottom:none;font-weight:600}.modal.breakdown details summary{cursor:pointer;font-weight:600}.dp-compare{overflow-x:auto}.dp-compare table{border-collapse:collapse;width:100%;font-size:12px}.dp-compare th,.dp-compare td{text-align:right;border-bottom:1px solid var(--line);white-space:nowrap;font-variant-numeric:tabular-nums;padding:3px 6px}.dp-compare th:first-child,.dp-compare td:first-child{text-align:left;color:var(--muted)}.design-overlay .d-label{font-family:inherit;font-weight:600}.design-overlay .d-draft{stroke:#2563eb59}.design-overlay .d-draft.glass{stroke:#3b82f64d}.design-overlay .d-center{stroke:#1d4ed8}.design-overlay .d-room-draft{fill:#93c5fd2e;stroke:#2563eb59;stroke-linejoin:miter}.design-overlay .d-vertex{fill:#1d4ed8}.design-overlay .d-guide{stroke:#0d9488}.design-overlay .d-snap{fill:none;stroke:#0d9488}.design-overlay .d-snap.dot{fill:#0d9488;stroke:none}.design-overlay .d-sel{fill:none;stroke:var(--accent)}.design-overlay .d-erase{fill:#dc262614;stroke:#dc2626}.design-overlay .d-sel.room{fill:#2563eb0f}.design-overlay .d-hover{fill:none;stroke:#60a5fa}.design-overlay .d-grip{fill:#fff;stroke:var(--accent)}.design-overlay .d-preview{opacity:.85}.overlay.guides line{stroke:#db2777}.design-overlay .d-vcb rect{fill:#111827;stroke:#111827}.design-overlay .d-vcb text{fill:#fff;font-variant-numeric:tabular-nums;font-weight:600}.design-overlay .d-gap path{stroke:#b45309;fill:none}.design-overlay .d-gap text{fill:#92400e;stroke:#fff;font-weight:600}.dp-scale{font-size:12px}.dp-scale.warn{color:#92400e;background:#fffbeb;border:1px solid #fcd34d;border-radius:6px;flex-direction:column;align-items:flex-start;gap:4px;padding:6px 8px;display:flex}.dp-scale.ok{color:#15803d}.dp-text{gap:4px}.dp-text button{padding:1px 6px;font-size:11px}.dp-text b{text-align:center;font-variant-numeric:tabular-nums;min-width:34px;font-size:12px}.sel-bar .muted{color:var(--muted);white-space:nowrap;padding-right:6px;font-size:12px}.panel-wrap{display:contents}.panel-wrap[hidden]{display:none}.panel-tab{z-index:6;background:var(--panel);border:1px solid var(--line-2);width:16px;height:56px;color:var(--muted);opacity:.75;place-items:center;padding:0;font-size:14px;line-height:1;display:grid;position:absolute;top:50%;transform:translateY(-50%);box-shadow:0 1px 4px #0000001f}.panel-tab:hover{opacity:1;color:var(--accent)}.panel-tab.left{border-left:0;border-radius:0 8px 8px 0;left:0}.panel-tab.right{border-right:0;border-radius:8px 0 0 8px;right:0}.panel-tab.closed{opacity:1;background:var(--accent-soft);color:var(--accent);border-color:#93c5fd}.overlay.marks{width:100%;height:100%}.mark-dim{font-family:-apple-system,Segoe UI,Helvetica,Arial,sans-serif;font-weight:600}.mk-colors{flex-wrap:wrap;gap:5px;display:flex}.mk-colors button{width:22px;height:22px;box-shadow:0 0 0 1px var(--line-2);border:2px solid #fff;border-radius:50%;padding:0}.mk-colors button.on{box-shadow:0 0 0 2px var(--accent)}.mk-w{place-items:center;width:30px;height:22px;margin-left:3px;padding:0 4px;display:inline-grid}.mk-w i{background:currentColor;border-radius:2px;width:100%;display:block}.mk-w.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.mark-text-edit{z-index:4;resize:none;border:solid var(--accent);field-sizing:content;background:#ffffffeb;border-radius:0;min-width:120px;min-height:1.3em;font-family:-apple-system,Segoe UI,Helvetica,Arial,sans-serif;line-height:1.2;position:absolute;overflow:hidden}.dp-kinds.air{grid-template-columns:repeat(2,1fr)}.dp-kinds.air button{justify-content:flex-start;align-items:center;gap:5px;padding:4px 6px;display:flex}.dp-kinds.air i{border-radius:2px;flex:none;width:9px;height:9px}.air-bal{border:1px solid var(--line);background:#f8fafc;border-radius:6px;flex-direction:column;gap:2px;padding:6px 8px;font-size:12px;display:flex}.air-bal>div{grid-template-columns:74px auto 1fr;align-items:baseline;gap:6px;display:grid}.air-bal span{color:var(--muted)}.air-bal b{font-variant-numeric:tabular-nums;white-space:nowrap}.air-bal b.good{color:#15803d}.air-bal b.bad{color:#b91c1c}.air-bal em{color:var(--muted);font-size:11px;font-style:normal}.air-bal .air-fix,.air-bal .air-issue,.air-bal .air-ok{margin-top:2px;font-size:11.5px;display:block}.air-bal .air-issue{color:#b91c1c}.air-bal .air-ok{color:#15803d}.air-bal details{color:var(--muted);font-size:11.5px}.air-bal .air-door{padding-left:10px;display:block}.air-list{flex-direction:column;gap:1px;max-height:200px;display:flex;overflow-y:auto}.air-row{text-align:left;font-variant-numeric:tabular-nums;border-color:#0000;grid-template-columns:1fr auto auto;gap:8px;padding:3px 6px;font-size:12px;display:grid}.air-row .nm{text-overflow:ellipsis;white-space:nowrap;color:#15803d;overflow:hidden}.air-row.bad .nm{color:#b91c1c}.air-row:hover{background:var(--accent-soft)}.air-table{max-width:min(1200px,96vw)}.air-table-wrap{max-height:60vh;overflow:auto}.air-table table{border-collapse:collapse;font-size:12px}.air-table th,.air-table td{border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;padding:4px 8px}.air-table th:first-child,.air-table td:first-child,.air-table td:last-child,.air-table th:last-child{text-align:left}.air-table td:last-child{white-space:normal;min-width:260px}.air-table th{color:var(--muted);background:#fff;font-size:11px;position:sticky;top:0}.air-table tr.bad td:last-child{color:#b91c1c}.design-overlay .d-fields text{font-variant-numeric:tabular-nums;font-weight:600}.design-overlay .d-field rect{fill:#fff;stroke:#94a3b8}.design-overlay .d-field text{fill:#64748b}.design-overlay .d-field.on rect{stroke:var(--accent);fill:#eff6ff}.design-overlay .d-field.on text{fill:#1d4ed8}.design-overlay .d-x{fill:#64748b}.design-overlay .d-tip{fill:#475569;font-weight:500}.auto-air{flex-direction:column;gap:6px;display:flex}.auto-air>.primary{align-self:flex-start}.auto-air.open{background:var(--accent-soft);border-radius:8px;padding:8px}.auto-air .auto-head{font-size:12.5px;font-weight:600}.auto-air .air-issue,.auto-air .air-ok{font-size:11.5px}.auto-air .air-issue{color:#b91c1c}.auto-air .air-ok{color:#15803d}.auto-rooms{font-variant-numeric:tabular-nums;flex-direction:column;gap:1px;max-height:180px;font-size:12px;display:flex;overflow-y:auto}.auto-rooms>div{grid-template-columns:1fr auto auto;gap:10px;padding:2px 4px;display:grid}.auto-rooms .nm{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.d-auto{fill:none;stroke:#16a34a}.hint.air-preview{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:flex}.hint.air-preview button{padding:3px 10px;font-size:12px}.export-area{flex-wrap:wrap;gap:6px;display:flex}.export-area button.on{background:#dbeafe;border-color:#93c5fd;font-weight:600}.area-pick{cursor:crosshair;z-index:20;background:#0f172a0a;position:absolute;inset:0}.area-box{pointer-events:none;background:#2563eb14;border:2px dashed #2563eb;position:absolute}.area-box span{color:#fff;white-space:nowrap;background:#2563eb;border-radius:4px;padding:1px 6px;font-size:11px;position:absolute;top:-22px;left:0}.area-pick~.hint{z-index:21}.sel-arrange{gap:2px;display:inline-flex}.home{background:var(--bg);justify-content:center;align-items:flex-start;padding:8vh 16px 32px;display:flex;position:fixed;inset:0;overflow-y:auto}.home-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:12px;width:760px;max-width:100%;padding:22px 24px;display:flex;box-shadow:0 10px 30px #0f172a14}.home-card.signin{align-items:stretch;width:380px}.home-card p{color:var(--muted);margin:0}.home-brand{align-items:center;gap:8px;font-size:17px;font-weight:700;display:flex}.home-card header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.home .who{align-items:center;gap:8px;display:flex}.home .row.wrap{flex-wrap:wrap;align-items:center}.dev-signin{border:1px dashed var(--warn);border-radius:8px;flex-direction:column;gap:8px;padding:12px;display:flex}.dev-signin small{color:var(--warn)}.dev-signin input,.home input{border:1px solid var(--line-2);border-radius:6px;padding:6px 8px}.gsi{justify-content:center;min-height:44px;display:flex}.google-signin{align-self:center;min-width:240px;padding:10px 18px;font-size:15px}.project-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.project-list li{border-top:1px solid var(--line);align-items:center;gap:8px;padding:8px 0;display:flex}.project-list button.open{text-align:left;background:0 0;border:0;border-radius:6px;flex-direction:column;flex:1;gap:2px;min-width:0;padding:4px 6px;display:flex}.project-list button.open:hover{background:var(--accent-soft)}.project-list button.open strong{font-size:14px}.project-list button.open small{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}button.danger.armed{background:var(--danger);color:#fff;border-color:var(--danger)}.people{align-items:center;display:inline-flex}.people .avatar+.avatar{margin-left:-6px}.people .more{color:var(--muted);margin-left:4px;font-size:11px}.avatar{color:#fff;object-fit:cover;box-sizing:border-box;border:2px solid #fff;border-radius:50%;flex:none;place-items:center;font-weight:700;display:inline-grid}img.avatar{border-style:solid;border-width:2px}.collab{align-items:center;gap:8px;margin-right:auto;padding-left:12px;display:flex}.sync-pill{color:#374151;white-space:nowrap;background:#e5e7eb;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600}.sync-pill.live{color:#166534;background:#dcfce7}.sync-pill.live:before{content:"●";color:#16a34a;margin-right:4px}.sync-pill.connecting{color:#92400e;background:#fef3c7}.sync-pill.offline{color:#991b1b;background:#fee2e2}.sync-pill.viewer{color:#3730a3;background:#e0e7ff}.modal.share .members{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.modal.share .members li{align-items:center;gap:8px;display:flex}.modal.share .grow,.home .grow{flex:1;min-width:0}.modal.share input{border:1px solid var(--line-2);border-radius:6px;padding:6px 8px}.muted{color:var(--muted)}.design-overlay .d-demarc-draft{stroke:#dc2626;stroke-opacity:.7}.modal.equip-wizard{flex-direction:column;width:980px;max-width:calc(100vw - 32px);max-height:calc(100vh - 48px);display:flex}.modal.equip-wizard>p{color:var(--muted);margin:0 0 8px}.eq-body{flex:1;grid-template-columns:220px 1fr;gap:14px;min-height:0;display:grid;overflow:hidden}.eq-rooms{border-right:1px solid var(--line);flex-direction:column;gap:2px;padding-right:8px;display:flex;overflow-y:auto}.eq-rooms button{text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:1fr auto;gap:0 6px;padding:6px 8px;display:grid}.eq-rooms button .nm{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.eq-rooms button small{color:var(--muted);grid-column:1}.eq-rooms button b{grid-area:1/2/3;align-self:center;font-size:12px}.eq-rooms button b.bad{color:var(--danger)}.eq-rooms button b.good{color:#16a34a}.eq-rooms button:hover{background:var(--accent-soft)}.eq-rooms button.on{background:var(--accent-soft);outline:1px solid var(--accent)}.eq-main{flex-direction:column;gap:10px;min-width:0;padding-right:4px;display:flex;overflow-y:auto}.eq-head{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.eq-head strong{font-size:16px}.eq-head select{max-width:100%;margin-left:auto}.eq-have{color:var(--muted)}.eq-group{flex-direction:column;gap:4px;display:flex}.eq-need{border:1px solid var(--line);border-radius:6px;grid-template-columns:auto minmax(0,1fr) minmax(0,260px) 52px;align-items:start;gap:8px;padding:6px;display:grid}.eq-need.missing{background:#fef2f2;border-color:#fca5a5}.eq-need.has{background:#f0fdf4;border-color:#bbf7d0}.eq-need input[type=checkbox]{margin-top:3px}.eq-what{flex-direction:column;gap:2px;min-width:0;display:flex}.eq-what span{font-weight:600}.eq-what small{color:var(--muted)}.eq-need select{width:100%}.eq-qty{width:52px}.eq-avoid{color:#b45309;flex-direction:column;gap:2px;font-size:12px;display:flex}@media (width<=700px){.eq-body{grid-template-columns:1fr;overflow:auto}.eq-rooms{border-right:0;border-bottom:1px solid var(--line);max-height:160px}.eq-need{grid-template-columns:auto minmax(0,1fr)}.eq-need select,.eq-need .eq-qty{grid-column:2}}.unit-places{flex-direction:column;gap:2px;max-height:160px;margin:6px 0;display:flex;overflow-y:auto}.unit-places button{text-align:left;color:var(--muted);background:0 0;border:0;border-radius:4px;padding:2px 4px;font-size:12px}.unit-places button b{color:var(--text,#111827)}.unit-places button:hover{background:var(--accent-soft)}.unit-places button.off{color:var(--danger)}.eq-need.off{opacity:.6}.eq-level{text-transform:uppercase;letter-spacing:.04em;vertical-align:1px;border-radius:8px;margin-left:6px;padding:1px 5px;font-size:10px;font-style:normal;font-weight:600}.eq-level.required{color:#b91c1c;background:#fee2e2}.eq-level.recommended{color:#1d4ed8;background:#dbeafe}.eq-level.optional{color:#64748b;background:#f1f5f9}.eq-forms{border:1px solid var(--line);background:#f8fafc;border-radius:6px;flex-wrap:wrap;align-items:center;gap:4px 12px;padding:6px 8px;display:flex}.eq-forms>span{font-weight:600}.unit-card{border:1px solid var(--line);background:#f8fafc;border-radius:8px;padding:10px}.unit-card-head{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.unit-card-head b{font-size:15px}.unit-card dl{flex-direction:column;gap:3px;margin:6px 0;display:flex}.unit-card dl>div{grid-template-columns:84px 1fr;gap:6px;font-size:12px;display:grid}.unit-card dt{color:var(--muted)}.unit-card dd{overflow-wrap:anywhere;margin:0}.item-details{flex-direction:column;gap:3px;margin:0;display:flex}.item-details>div{grid-template-columns:96px 1fr;gap:6px;font-size:12px;display:grid}.item-details dt{color:var(--muted);overflow-wrap:anywhere}.item-details dd{overflow-wrap:anywhere;margin:0}.unit-card .item-details{border-top:1px dashed var(--line);margin-bottom:6px;padding-top:6px}.sel-one{text-overflow:ellipsis;white-space:nowrap;align-items:baseline;gap:4px;max-width:520px;display:inline-flex;overflow:hidden}.sel-one small{color:var(--muted);text-overflow:ellipsis;overflow:hidden}.kit-to-list .muted-text{color:var(--muted);max-width:75ch;margin:0;font-size:13px}.kit-to-list td.kl-name,.kit-to-list td.kl-room{text-align:left;white-space:normal;min-width:160px}.kit-to-list td.kl-name small{color:var(--accent);margin-left:4px}.kit-to-list td.kl-room{min-width:110px;color:var(--muted)}.kit-to-list .kl-cost{text-align:right;font-variant-numeric:tabular-nums;width:84px}.kit-to-list tr.kl-off td{opacity:.5}.kit-to-list td.kl-from{cursor:help;text-align:left}.kit-to-list td.kl-from.typical{color:#b45309}.kit-to-list td.kl-from.none{color:var(--warn)}.kit-to-list td.kl-from.catalog,.kit-to-list td.kl-from.list{color:#15803d}.cad-files{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:6px;margin-top:8px;padding:8px 10px;display:flex}.cad-files h4{margin:0}.cad-files ul{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.cad-files li{border-top:1px solid var(--line);flex-direction:column;gap:2px;padding-top:6px;font-size:12px;display:flex}.cad-files li.thin{opacity:.85}.cad-files .cf-head{align-items:center;gap:8px;display:flex}.cad-files .cf-head button{margin-left:auto}.cad-files details small{margin-top:4px;display:block}.signin-page{background:#fff;place-items:center;padding:24px 16px;display:grid;position:fixed;inset:0;overflow-y:auto}.signin{text-align:center;flex-direction:column;align-items:center;width:320px;max-width:100%;display:flex}.signin .mark{margin-bottom:20px}.signin h1{letter-spacing:-.02em;color:#111827;margin:0;font-size:22px;font-weight:600}.signin>p{color:#6b7280;margin:6px 0 28px;font-size:14px}.google-btn{color:#1f1f1f;background:#fff;border:1px solid #dadce0;border-radius:10px;justify-content:center;align-items:center;gap:10px;width:100%;height:44px;font-size:14px;font-weight:500;transition:background .15s,border-color .15s;display:flex}.google-btn:hover:not(:disabled){background:#f8f9fa;border-color:#c6c9cc}.signin>small{color:#9ca3af;margin-top:12px;font-size:12px}.signin .dev-signin{text-align:left;width:100%;margin-top:20px}.signin-err{color:var(--danger);margin:16px 0 0;font-size:13px}.home-brand .mark{flex:none}.modal.share,.modal.share h2,.modal.share .members,.modal.share .members span,.modal.share em{color:#111827}.modal.share input,.modal.share select{color:#111827;-webkit-text-fill-color:#111827;background:#fff}.modal.share input::placeholder{color:#6b7280;-webkit-text-fill-color:#6b7280;opacity:1}.modal.share small{color:#374151}.modal.share em{font-style:normal;font-weight:600}.modal.share button.primary:disabled{opacity:1;color:#6b7280;background:#e5e7eb;border-color:#e5e7eb}
