:root{--bg: #f2f1ee;--panel: #ffffff;--ink: #1e2126;--ink-2: #5b636d;--line: #dcdad5;--line-2: #ebe9e5;--accent: #2f6f4f;--accent-2: #d7e5dc;--error: #b3402f;--warn: #b07d24;--sel: #1f6feb;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);overflow:hidden}button{font:inherit;cursor:pointer}kbd{background:var(--line-2);border:1px solid var(--line);border-radius:3px;padding:0 4px;font-size:11px;font-family:ui-monospace,monospace}.boot,.login{display:grid;place-items:center;height:100%}.login form{background:var(--panel);padding:32px;border-radius:14px;border:1px solid var(--line);width:320px;display:grid;gap:10px;box-shadow:0 10px 40px #0000000f}.login h1{margin:0;font-size:20px}.login p{margin:0 0 8px;color:var(--ink-2)}.login input,.login button{padding:10px 12px;border-radius:8px;border:1px solid var(--line);font-size:15px}.login button{background:var(--accent);color:#fff;border-color:var(--accent)}.login .err{color:var(--error);margin:0}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap}.brand{display:grid;line-height:1.2}.brand strong{font-size:15px}.brand span{color:var(--ink-2);font-size:11px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.seg button{border:0;background:var(--panel);padding:6px 11px;color:var(--ink-2);border-right:1px solid var(--line)}.seg button:last-child{border-right:0}.seg button.on{background:var(--accent-2);color:var(--accent);font-weight:600}.tools{display:flex;gap:6px;margin-left:auto}.tools button,.btn-row button{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:6px 10px;color:var(--ink)}.tools button:hover,.btn-row button:hover{background:var(--line-2)}.tools button.on{background:var(--accent-2);border-color:var(--accent);color:var(--accent)}.tools button:disabled{opacity:.45;cursor:default}.status{display:flex;gap:8px;align-items:center}.issue-chip,.ok-chip,.save-chip{border-radius:20px;padding:4px 10px;font-size:12px;border:1px solid var(--line);background:var(--panel);display:inline-flex;gap:5px;align-items:center;color:var(--ink-2)}.ok-chip{background:var(--accent-2);color:var(--accent);border-color:transparent}.save-chip{cursor:pointer}.save-chip.dirty{background:#fdf3e2;color:var(--warn);border-color:#f0dcb6}b.b-error,b.b-warn{border-radius:10px;padding:0 6px;color:#fff;font-size:11px}b.b-error{background:var(--error)}b.b-warn{background:var(--warn)}.body{flex:1;display:grid;grid-template-columns:250px 1fr 310px;min-height:0}.left,.right{background:var(--panel);border-right:1px solid var(--line);overflow:auto;display:flex;flex-direction:column}.right{border-right:0;border-left:1px solid var(--line)}.left h3{margin:0;padding:12px 14px 8px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2)}.center{position:relative;min-width:0;overflow:hidden}.catalog{padding:0 10px 16px}.search{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:8px;margin-bottom:8px;font:inherit}.cat-group-head{width:100%;text-align:left;background:none;border:0;padding:7px 4px;color:var(--ink);font-weight:600;font-size:12.5px;display:flex;gap:6px;align-items:center}.chev{display:inline-block;transition:transform .12s;color:var(--ink-2)}.chev.open{transform:rotate(90deg)}.cat-group-body{display:grid;gap:2px;padding-bottom:6px}.cat-item{display:grid;grid-template-columns:12px 1fr auto;gap:8px;align-items:center;background:none;border:1px solid transparent;border-radius:7px;padding:5px 6px;text-align:left;font-size:12.5px;color:var(--ink)}.cat-item:hover{background:var(--line-2);border-color:var(--line)}.cat-swatch{width:11px;height:11px;border-radius:3px}.cat-dim{color:var(--ink-2);font-size:11px;font-variant-numeric:tabular-nums}.cat-group.custom{border:1px solid var(--line);border-radius:9px;padding:2px 6px 4px;margin-bottom:10px;background:#fbfaf8}.custom-form{display:grid;gap:8px;padding:4px 2px 2px}.custom-form .grid2{gap:6px}.custom-form .btn-row{margin:2px 0 0}.custom-form .btn-row button{width:100%;justify-content:center}.field.tight{margin:0}.field.tight .seg{width:100%}.field.tight .seg button{flex:1;padding:6px 2px;font-size:11.5px}.custom-saved-label{font-size:11px;color:var(--ink-2);text-transform:uppercase;letter-spacing:.05em}.cat-item.custom-row{grid-template-columns:12px 1fr auto auto;cursor:grab}.cat-item.custom-row .cat-name{background:none;border:0;text-align:left;font:inherit;color:var(--ink);padding:0;cursor:pointer}.cat-item.custom-row .del{border:0;background:none;color:var(--ink-2);font-size:14px;line-height:1;padding:0 2px}.cat-item.custom-row .del:hover{color:var(--error)}.cat-hint{color:var(--ink-2);font-size:11.5px;line-height:1.45;margin:10px 4px 0}.tabs{display:flex;flex-wrap:wrap;gap:2px;padding:8px 8px 0;border-bottom:1px solid var(--line)}.tabs button{border:0;background:none;padding:6px 9px;border-radius:7px 7px 0 0;color:var(--ink-2);font-size:12.5px}.tabs button.on{background:var(--accent-2);color:var(--accent);font-weight:600}.tab-body{padding:12px 14px 24px;overflow:auto}.panel h3,.inspector h3{margin:0 0 10px;font-size:13px;display:flex;gap:8px;align-items:center}.panel h4{margin:14px 0 4px;font-size:12px;color:var(--ink-2)}.muted{color:var(--ink-2)}.small{font-size:11.5px;line-height:1.5}.check{display:flex;gap:8px;align-items:center;padding:3px 0;font-size:12.5px}.slider{width:100%;margin:2px 0 8px}.field{margin:10px 0}.field>span{display:block;font-size:11.5px;color:var(--ink-2);margin-bottom:4px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.num{display:grid;gap:3px}.num>span:first-child{font-size:11px;color:var(--ink-2)}.num-in{display:flex;align-items:center;border:1px solid var(--line);border-radius:7px;overflow:hidden;background:#fff}.num-in input{border:0;padding:6px 7px;width:100%;font:inherit;font-variant-numeric:tabular-nums}.num-in input:focus{outline:2px solid var(--accent-2)}.num-in i{font-style:normal;color:var(--ink-2);font-size:11px;padding-right:7px}.name-input{border:1px solid transparent;background:none;font:inherit;font-weight:600;font-size:13px;padding:3px 4px;border-radius:6px;width:100%}.name-input:hover{border-color:var(--line)}.btn-row{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}.btn-row .primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-row .danger{color:var(--error)}.colors{display:flex;gap:5px;flex-wrap:wrap}.color{width:20px;height:20px;border-radius:5px;border:2px solid transparent}.color.on{border-color:var(--ink)}.item-list,.issues,.profiles,.elec-list,.notes{list-style:none;margin:0;padding:0;display:grid;gap:2px}.item-list button{width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:7px;padding:5px 7px;display:flex;gap:7px;align-items:center;font-size:12.5px}.item-list button:hover{background:var(--line-2)}.item-list em,.profiles em{margin-left:auto;color:var(--ink-2);font-style:normal;font-size:11px}.dot{width:10px;height:10px;border-radius:3px}.issues li button{width:100%;text-align:left;background:none;border:0;border-left:3px solid var(--warn);padding:5px 8px;font-size:12px;line-height:1.4;color:var(--ink)}.issues li.error button{border-left-color:var(--error)}.issues li button:hover{background:var(--line-2)}.issue{font-size:12px;line-height:1.45;border-left:3px solid var(--warn);padding-left:8px;margin:6px 0}.issue.error{border-left-color:var(--error)}.ok{color:var(--accent);font-size:12.5px}.item-issues{border-top:1px solid var(--line);padding-top:8px;margin-top:8px}.profiles li{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-bottom:4px}.profiles li.on{border-color:var(--accent);background:var(--accent-2)}.profiles .load{flex:1;text-align:left;background:none;border:0;padding:7px 9px;display:grid;gap:2px}.profiles .load strong{font-size:12.5px}.profiles .load em{margin:0}.profiles .del{border:0;background:none;color:var(--ink-2);padding:0 10px;font-size:16px}.profiles .del:hover{color:var(--error);background:#f7e7e4}.trash,.trash-empty{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}.trash-head{width:100%;text-align:left;background:none;border:0;padding:4px 2px 8px;color:var(--ink);font-weight:600;font-size:12.5px;display:flex;gap:6px;align-items:center}.trash-head b{margin-left:auto;background:var(--line-2);color:var(--ink-2);border-radius:10px;padding:1px 7px;font-size:11px}.profiles li.trashed{background:#faf8f6;border-style:dashed}.profiles li.trashed .load{cursor:default;padding:7px 9px}.profiles li.trashed .load strong{color:var(--ink-2)}.profiles .restore{border:0;border-left:1px solid var(--line);background:none;color:var(--accent);font-size:11.5px;padding:0 9px;white-space:nowrap}.profiles .restore:hover{background:var(--accent-2)}.profiles .restore:disabled{opacity:.5}.elec-group{margin-bottom:10px}.elec-list li{display:flex;gap:6px;align-items:baseline;font-size:11.5px;padding:2px 0;border-bottom:1px solid var(--line-2)}.elec-list .keepfree{font-weight:600}.elec-list em{font-style:normal;color:var(--accent);font-weight:600}.elec-list i{margin-left:auto;font-style:normal;color:var(--ink-2);font-variant-numeric:tabular-nums}.notes li{font-size:12px;line-height:1.5;padding:5px 0 5px 10px;border-left:2px solid var(--line)}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#1e212657;display:grid;place-items:center;z-index:50;-webkit-backdrop-filter:blur(1.5px);backdrop-filter:blur(1.5px)}.dialog{background:var(--panel);border-radius:12px;border:1px solid var(--line);box-shadow:0 18px 50px #00000038;padding:20px 22px 16px;width:min(420px,calc(100vw - 32px))}.dialog h2{margin:0 0 6px;font-size:15px;line-height:1.35}.dialog p{margin:0;color:var(--ink-2);font-size:13px;line-height:1.5}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}.dialog-actions button{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:7px 14px;color:var(--ink)}.dialog-actions button:hover{background:var(--line-2)}.dialog-actions .primary{background:var(--accent);border-color:var(--accent);color:#fff}.dialog-actions .danger-solid{background:var(--error);border-color:var(--error);color:#fff}.dialog-actions button:focus-visible{outline:2px solid var(--sel);outline-offset:2px}.canvas-host{position:absolute;top:0;right:0;bottom:0;left:0}svg.plan{display:block;touch-action:none;cursor:default;-webkit-user-select:none;user-select:none}svg.plan.panning{cursor:grabbing}svg.plan.measuring{cursor:crosshair}.underlay{mix-blend-mode:multiply}.plan-bg{fill:#e9e7e2}.grid-minor{stroke:#dcd9d2;stroke-width:.5}.grid-major{stroke:#cfccc4;stroke-width:.8}.room{fill:#fbfaf8}.room-balkon{fill:#f0f2ee}.room-cut{fill:#e9e7e2}.wall{stroke:none}.wall-concrete{fill:#3c4249}.wall-facade{fill:#4a5158}.wall-partition{fill:#b9bfc6}.wall-context{fill:#cdd1d5}.wall-removed{fill:#f6e2de;stroke:var(--error);stroke-width:1.2;stroke-dasharray:8 5;opacity:.85}.wall-added{fill:var(--accent-2);stroke:var(--accent);stroke-width:1.2;stroke-dasharray:8 5;opacity:.85}.wall-railing{fill:#b9c0c6}.glass{fill:#9ec6d8}.fixture{stroke:#98a0a8;stroke-width:.6}.fixture-cabinet{fill:#e3e6e9}.fixture-kitchen{fill:#e8e2d6}.fixture-shaft{fill:url(#hatch-shaft)}.fixture-installation{fill:#dfe6e3}.fixture-sanitary{fill:#e6eef2}.fixture-zone{fill:url(#hatch-zone);stroke:#d8ab5c;stroke-dasharray:6 4}.fixture-label{fill:#7b838c;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.door-sweep{fill:#f0eeea;stroke:#c9c5bd;stroke-width:.5}.door-leaf{stroke:#8d8880;stroke-width:1.6}.dim-line,.dim-tick{stroke:#9a9389;stroke-width:.6}.dim-text{fill:#7a736a;text-anchor:middle;dominant-baseline:middle;paint-order:stroke;stroke:#fbfaf8;stroke-width:3}.room-name{fill:#6a7178;text-anchor:middle;font-weight:600;pointer-events:none}.room-area{fill:#969ca2;text-anchor:middle;pointer-events:none}.item polygon,.item ellipse{stroke:#00000059;stroke-width:.8;cursor:move}.item .item-front{stroke:#ffffff8c;stroke-width:1.6;pointer-events:none}.item-label,.item-size{text-anchor:middle;pointer-events:none;fill:#16191c;paint-order:stroke;stroke:#ffffff73;stroke-width:2.5}.item-size{fill:#3c4249}.item.sev-warn polygon,.item.sev-warn ellipse{stroke:var(--warn);stroke-width:2;stroke-dasharray:6 3}.item.sev-error polygon,.item.sev-error ellipse{stroke:var(--error);stroke-width:2.4}.item.locked polygon,.item.locked ellipse{cursor:default}.sel-box{fill:none;stroke:var(--sel);stroke-dasharray:5 3}.multi-sel{fill:none;stroke:var(--sel);stroke-width:1;stroke-dasharray:4 3}.handle{fill:#fff;stroke:var(--sel);stroke-width:1.2;cursor:pointer}.handle-rot{cursor:grab}.sel-rot-stem{stroke:var(--sel);stroke-width:.8}.guide{stroke:#e0752f;stroke-width:.7;stroke-dasharray:6 4}.live-dims line{stroke:var(--sel);stroke-width:.7}.live-dims text{fill:var(--sel);text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:3;font-weight:600}.measure line{stroke:#b3402f;stroke-width:1.4;stroke-dasharray:5 3}.measure circle{fill:#b3402f}.measure text{fill:#b3402f;text-anchor:middle;font-weight:700;paint-order:stroke;stroke:#fff;stroke-width:3.5}.elec{stroke:#2c3238;stroke-width:.9;fill:none;pointer-events:none;vector-effect:non-scaling-stroke}.elec .fill{fill:#2c3238}.elec-leader{stroke:#b7bcc2;stroke-width:.5}.elec-keepfree{stroke:#1c5c8c}.elec-keepfree .fill{fill:#1c5c8c}.elec-blocked{stroke:var(--error)}.elec-blocked .fill{fill:var(--error)}.elec-alert{fill:#b3402f2e;stroke:var(--error);stroke-width:1.4}.elec-label{fill:#4a5158;font-size:9px;stroke:none;paint-order:stroke}.link-btn{background:none;border:0;color:var(--ink-2);font-size:12px;text-decoration:underline;padding:4px 2px}.canvas-hud{position:absolute;right:10px;bottom:8px;display:flex;gap:8px;font-size:11px;color:var(--ink-2);background:#fffc;border:1px solid var(--line);border-radius:20px;padding:3px 10px;font-variant-numeric:tabular-nums;pointer-events:none}@media (max-width: 1200px){.body{grid-template-columns:210px 1fr 280px}}
