@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-BJItruJi.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-C1SKuNhx.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-BPWuI_CM.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-400-normal-CTUnhTqV.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-n6oPB5VF.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-400-normal-DSasf_jt.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-B97dYap6.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-400-normal-OKGpH0gQ.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-BHf956ki.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-400-normal-CyDjbWPV.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CdZtFfYS.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-BU83cd9M.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cfrm0EKX.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-DujcQJCN.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-D1zm99-P.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-500-normal-BEypoZQd.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-By04ZBDJ.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-500-normal-BwBTeJfm.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-rpgY82Kd.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-500-normal-V_-bWxzT.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DprGrCew.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-500-normal-CgrnmiIU.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-BFLYOLbL.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-Dh0NORqx.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-jBHiQjEG.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-CJ5MtzOJ.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-DM9A4i1K.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-600-normal-BuRiwhxF.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-FZrtz_q-.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-600-normal-BJUfoJTU.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DHNi5J5O.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-600-normal-D03elqKW.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-dAZVOL-H.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-600-normal-bp4QDljZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-BGOKnPO6.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-ZykYOGKL.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-B3hZxag_.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-ZyMXPjaT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-DvQQgHTq.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CJUKFyLa.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BFiUPp6R.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DLynVohM.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-DxDDqVQb.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-uwM7KshN.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-Dm_PoFIZ.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-O6-GRVqx.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-CmcxpzmF.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-yqk7_qG0.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-BtGHVI3Q.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-N1TV9ACq.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-CevHOlzG.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-QhwQXayn.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-Dn-cqWhb.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-BhDX_RLI.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-C_OblDzq.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-zoSM89R3.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #f4f6f8;--panel: #ffffff;--ink: #1b2430;--ink-dim: #5f6b7a;--rule: #d9dfe6;--grid: #e3e8ee;--accent: #2463c9;--accent-ink: #ffffff;--accent-soft: #e4edfb;--danger: #b4372b;--font-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--radius: 6px;color-scheme:light}@media (prefers-color-scheme: dark){:root{--paper: #12161c;--panel: #1a2029;--ink: #e4e9f0;--ink-dim: #8f9bab;--rule: #2b3440;--grid: #1f262f;--accent: #5b93f0;--accent-ink: #0b1220;--accent-soft: #1d2b44;--danger: #ef7b6f;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:14px/1.45 var(--font-sans);-webkit-font-smoothing:antialiased}button,input{font:inherit;color:inherit}button{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);padding:5px 10px;cursor:pointer}button:hover:not(:disabled){border-color:var(--ink-dim)}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input{background:var(--paper);border:1px solid var(--rule);border-radius:var(--radius);padding:5px 8px;width:100%;min-width:0}input.invalid{border-color:var(--danger)}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:12.5px}.dim{color:var(--ink-dim)}.spacer{flex:1}.loading{display:grid;place-items:center;height:100%;color:var(--ink-dim)}.shell{display:grid;height:100%;grid-template-columns:76px minmax(0,1fr) 300px;grid-template-rows:48px minmax(0,1fr) 30px;grid-template-areas:"top top top" "rail view insp" "status status status"}.topbar{grid-area:top;display:flex;align-items:center;gap:12px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--rule)}.brand{display:flex;align-items:center;gap:8px;font-weight:600;letter-spacing:.01em}.brand-mark{width:18px;height:18px;border:2px solid var(--accent);border-radius:2px;box-shadow:inset 0 -7px 0 var(--accent-soft)}.project-name{max-width:240px;background:transparent;border-color:transparent;font-weight:500}.project-name:hover{border-color:var(--rule)}.history-buttons{display:flex;gap:6px}.segmented{display:flex;border:1px solid var(--rule);border-radius:var(--radius);overflow:hidden}.segmented button{border:0;border-radius:0;padding:5px 12px}.segmented button+button{border-left:1px solid var(--rule)}.segmented button.on{background:var(--accent);color:var(--accent-ink)}.toolrail{grid-area:rail;display:flex;flex-direction:column;gap:4px;padding:8px 6px;background:var(--panel);border-right:1px solid var(--rule)}.tool{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;border-color:transparent}.tool.on{background:var(--accent-soft);border-color:var(--accent)}.tool-glyph{font-size:18px;line-height:1}.tool-label{font-size:11px;letter-spacing:.02em}.viewport{grid-area:view;position:relative;min-height:0;overflow:hidden;background:var(--paper);display:grid;place-items:center}.viewport>div:has(>canvas),.canvas{position:absolute!important;top:0;right:0;bottom:0;left:0}.canvas.tool-wall,.canvas.tool-measure,.canvas.tool-door,.canvas.tool-window{cursor:crosshair}.viewport.plan-mode{background:#fff}.plan-wrap,.sheet-preview{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.plan-svg{display:block;touch-action:none;-webkit-user-select:none;user-select:none}.plan-svg.tool-wall,.plan-svg.tool-door,.plan-svg.tool-window,.plan-svg.tool-measure{cursor:crosshair}.plan-svg .wall-fill.hover{fill:#8a99b3}.plan-svg .wall-fill.sel,.plan-svg .wall-edge.sel{fill:#2f6fe0}.plan-svg .wall-edge.sel{stroke:#1d4fae}.plan-svg .opening.sel line,.plan-svg .opening.sel path:not(.hit),.plan-svg .opening.sel circle{stroke:#2f6fe0}.plan-svg .opening.hover line,.plan-svg .opening.hover path:not(.hit){stroke:#5a86d6}.plan-svg .room.sel text{fill:#2f6fe0}.plan-svg [data-kind=room]{cursor:pointer}.plan-length{position:absolute;z-index:55;transform:translate(-50%)}.sheet-preview{display:grid;place-items:center;padding:56px 16px 44px;background:#e9ecef}.sheet-preview svg{width:100%;height:100%;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .18))}.plan-svg .furniture.sel path{stroke:#2f6fe0}.plan-svg .furniture.hover path{stroke:#5a86d6}.plan-svg .furniture.tool-select,.plan-svg [data-kind=furniture]{cursor:move}.canvas.walk{cursor:crosshair}.reticle{position:absolute;z-index:50;left:50%;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid rgb(255 255 255 / .9);box-shadow:0 0 0 1px #00000073;pointer-events:none}.reticle.placing{border-color:#2f6fe0}.walk-panel{position:absolute;z-index:50;top:10px;left:10px;display:grid;gap:6px;padding:6px 8px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:0 1px 2px #0000000f}.walk-row{display:flex;gap:8px;align-items:center}.walk-row .inline{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--ink-dim);white-space:nowrap}.walk-row input[type=checkbox]{width:auto}.walk-row input[type=range]{width:140px;padding:0}.walk-hint{position:absolute;z-index:50;left:10px;right:10px;bottom:10px;display:flex;justify-content:space-between;gap:12px;font-size:12px;pointer-events:none}.walk-hint span{background:color-mix(in srgb,var(--panel) 88%,transparent);padding:3px 8px;border-radius:var(--radius)}.joystick{position:absolute;z-index:60;left:24px;bottom:48px;width:120px;height:120px;border-radius:50%;background:#ffffff40;border:2px solid rgb(255 255 255 / .6);display:grid;place-items:center;touch-action:none}.joystick-knob{width:48px;height:48px;border-radius:50%;background:#ffffffd9;pointer-events:none}.inspector h2 .count{margin-left:4px;padding:0 6px;border-radius:8px;background:var(--rule);color:var(--ink)}.warnings{list-style:none;margin:0;padding:0;display:grid;gap:6px}.warning{display:grid;gap:2px;width:100%;text-align:left;border-color:color-mix(in srgb,#d9453b 45%,var(--rule));background:color-mix(in srgb,#d9453b 7%,var(--panel));font-size:12.5px}.warning-ref{font-size:11px;color:var(--ink-dim)}.schedules-view{display:grid;grid-template-rows:auto minmax(0,1fr);place-items:stretch;background:var(--paper)}.schedules-bar{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;padding:10px 14px;background:var(--panel);border-bottom:1px solid var(--rule)}.takeoff-settings{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;font-size:12px;color:var(--ink-dim)}.takeoff-settings .inline{display:flex;gap:6px;align-items:center;white-space:nowrap}.takeoff-settings .length-input input{width:80px}.takeoff-settings input[type=checkbox]{width:auto}.schedules-body{overflow:auto;padding:14px;display:grid;gap:14px;align-content:start}.schedule{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);overflow-x:auto}.schedule-head{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-bottom:1px solid var(--rule)}.schedule-head h2{margin:0;font-size:13px}.schedule table{width:100%;border-collapse:collapse;font-size:12.5px}.schedule th,.schedule td{text-align:left;padding:5px 10px;border-bottom:1px solid var(--rule);white-space:nowrap}.schedule th button{border:0;padding:0;background:none;font-weight:600;color:var(--ink-dim)}.schedule .num{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.schedule tbody tr{cursor:pointer}.schedule tbody tr:hover{background:var(--accent-soft)}.schedule tbody tr.on{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}.schedule tfoot td{font-weight:600}.totals{list-style:none;margin:0;padding:0;display:grid;gap:4px}.totals li{display:flex;justify-content:space-between;gap:12px;padding:6px 10px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius)}.viewport-card{max-width:440px;padding:20px 22px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius)}.viewport-card p{margin:0 0 8px;color:var(--ink-dim)}.eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--accent)!important;font-weight:600}.view-toolbar{position:absolute;z-index:50;top:10px;left:10px;max-width:calc(100% - 20px);flex-wrap:wrap;display:flex;gap:8px;align-items:center;padding:5px 6px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:0 1px 2px #0000000f}.view-toolbar .inline{white-space:nowrap;display:flex;gap:6px;align-items:center;font-size:12px;color:var(--ink-dim)}.view-hint{position:absolute;z-index:50;left:10px;right:10px;bottom:10px;display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;font-size:12px;pointer-events:none}.view-hint span{background:color-mix(in srgb,var(--panel) 88%,transparent);padding:3px 8px;border-radius:var(--radius)}.select-box{position:absolute;z-index:60;border:1px solid var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);pointer-events:none}.select-box.crossing{border-style:dashed;background:color-mix(in srgb,#2f9e5a 10%,transparent);border-color:#2f9e5a}.room-label{display:grid;justify-items:center;gap:0;padding:3px 8px;background:#ffffffdb;color:#1b2430;border:1px solid transparent;white-space:nowrap;font-size:12px;line-height:1.25}.room-label.on{border-color:var(--accent);background:#e4edfb}.room-name{font-weight:600}.room-area{font-family:var(--font-mono);font-size:11px;color:#5f6b7a}.dimension-label,.snap-tag,.mark-label{font-family:var(--font-mono);font-size:12px;white-space:nowrap;pointer-events:none}.dimension-label{padding:2px 6px;background:#1b2430;color:#fff;border-radius:4px}.dimension-label input{pointer-events:auto;width:auto;padding:1px 4px;background:transparent;color:inherit;border:0;font:inherit;text-align:center}.dimension-label input:focus{background:#fff;color:#1b2430}.dimension-label input.invalid{outline:2px solid #ef7b6f}.snap-tag{color:#e0632f;font-size:11px}.mark-label{padding:0 4px;border:1px solid #5f6b7a;border-radius:10px;background:#fff;color:#1b2430;font-size:10.5px}.menu{position:relative}.menu summary{list-style:none;cursor:pointer;padding:5px 10px;border:1px solid transparent;border-radius:var(--radius)}.menu summary::-webkit-details-marker{display:none}.menu[open] summary,.menu summary:hover{border-color:var(--rule)}.menu-items{position:absolute;z-index:100;top:calc(100% + 4px);left:0;display:grid;min-width:220px;padding:4px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:0 6px 20px #0000001f}.menu-items button{text-align:left;border-color:transparent}.menu-items hr{width:100%;margin:4px 0;border:0;border-top:1px solid var(--rule)}select{font:inherit;color:inherit;background:var(--paper);border:1px solid var(--rule);border-radius:var(--radius);padding:4px 6px;max-width:100%}.stack{display:grid;gap:4px;font-size:13px;color:var(--ink-dim)}.layers{display:grid;gap:2px;font-size:12px}.layer-row{display:flex;justify-content:space-between;gap:8px}.layer-row.total{border-top:1px solid var(--rule);padding-top:4px;margin-top:2px;font-weight:500}.checks{display:flex;gap:16px}.checks label{display:flex;gap:6px;align-items:center}.checks input{width:auto}.readout{padding-top:6px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.inspector{grid-area:insp;overflow-y:auto;background:var(--panel);border-left:1px solid var(--rule)}.inspector section{padding:14px;border-bottom:1px solid var(--rule);display:grid;gap:10px}.inspector h2{margin:0;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim)}.level-list{list-style:none;margin:0;padding:0;display:grid;gap:4px}.level{width:100%;display:flex;justify-content:space-between;align-items:center;border-color:transparent}.level.on{background:var(--accent-soft);border-color:var(--accent)}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.danger{color:var(--danger)}.fields{display:grid;grid-template-columns:110px minmax(0,1fr);gap:8px 10px;margin:0;align-items:start}.fields dt{padding-top:6px;color:var(--ink-dim)}.fields dd{margin:0;min-width:0}.length-input{display:grid;gap:3px}.length-input input{font-family:var(--font-mono);font-size:13px}.field-error{color:var(--danger);font-size:12px}.hint{margin:0;font-size:12px;color:var(--ink-dim)}.statusbar{grid-area:status;display:flex;align-items:center;gap:16px;padding:0 12px;font-size:12px;color:var(--ink-dim);background:var(--panel);border-top:1px solid var(--rule)}.status-error{color:var(--danger)}.toast{position:fixed;left:50%;bottom:44px;transform:translate(-50%);display:flex;gap:12px;align-items:center;max-width:min(560px,calc(100vw - 32px));padding:10px 12px;background:var(--ink);color:var(--paper);border-radius:var(--radius)}.toast button{background:transparent;color:inherit;border-color:currentColor}.shell.with-ai{grid-template-columns:76px minmax(0,1fr) 300px 360px;grid-template-areas:"top top top top" "rail view insp ai" "status status status status"}.ai-panel{grid-area:ai;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;min-height:0;background:var(--panel);border-left:1px solid var(--rule)}.ai-head{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--rule)}.ai-head h2{flex:1;margin:0;font-size:14px}.ai-log{overflow-y:auto;padding:12px;display:grid;align-content:start;gap:10px}.ai-msg{display:grid;gap:6px;font-size:13px;line-height:1.45}.ai-msg.user .ai-text{justify-self:end;max-width:85%;padding:6px 10px;border-radius:var(--radius);background:var(--accent-soft)}.ai-text{white-space:pre-wrap;overflow-wrap:anywhere}.ai-status{color:var(--ink-dim);font-size:12px}.ai-proposal{border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:var(--radius);padding:8px 10px}.ai-proposal.rejected{border-left-color:var(--ink-dim);opacity:.75}.ai-proposal ul{margin:6px 0;padding-left:18px}.ai-proposal-head{display:flex;justify-content:space-between}.ai-proposal-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.ai-warnings li{color:var(--danger)}.ai-error{color:var(--danger);font-size:12px;padding:0 12px}.ai-msg .ai-error{padding:0}.ai-compose{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end;padding:10px 12px;border-top:1px solid var(--rule)}.ai-compose textarea{font:inherit;color:inherit;background:var(--paper);border:1px solid var(--rule);border-radius:var(--radius);padding:6px 8px;resize:vertical}.ai-empty{display:grid;gap:6px}.ai-example{text-align:left;font-size:12px}button.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}button.primary:disabled{opacity:.5}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:grid;place-items:center;background:#00000059}.modal{display:grid;gap:12px;width:min(440px,calc(100vw - 32px));padding:18px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:0 10px 30px #0003}.modal h2{margin:0;font-size:16px}.modal input{font:inherit;padding:6px 8px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper);color:inherit}.modal-actions{display:flex;flex-wrap:wrap;gap:8px}@media (max-width: 760px){.shell.with-ai{grid-template-columns:64px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto auto 30px;grid-template-areas:"top top" "rail view" "ai ai" "insp insp" "status status"}.ai-panel{border-left:0;border-top:1px solid var(--rule);max-height:50vh}}@media (max-width: 760px){.shell{grid-template-columns:64px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto 30px;grid-template-areas:"top top" "rail view" "insp insp" "status status"}.topbar{flex-wrap:wrap;padding-block:8px}.inspector{border-left:0;border-top:1px solid var(--rule);max-height:45vh}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.warning-group h3,.inspector h3{margin:10px 0 4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim)}.warning.sev-error,.warnings li.sev-error{border-left:3px solid var(--danger)}.warning.sev-warning,.warnings li.sev-warning{border-left:3px solid #d39b00}.warnings li.sev-error,.warnings li.sev-warning{padding-left:8px;font-size:13px}.cutouts{list-style:none;margin:0;padding:0;display:grid;gap:6px}.cutouts li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}.cutout-face{min-width:72px;font-weight:600}.cutout{display:inline-flex;align-items:center;gap:6px}button.link{border:none;background:none;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer}.layers-control{display:inline-flex;align-items:center;gap:6px;position:relative}.layers-menu summary{cursor:pointer;list-style:none;padding:4px 8px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--panel)}.layers-menu[open] .layers-list{position:absolute;top:calc(100% + 4px);left:0;z-index:40;min-width:220px;padding:8px;display:grid;gap:6px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:0 6px 20px #0000001f}.layer-line{display:flex;justify-content:space-between;align-items:center;gap:8px}.riser{overflow:auto;border:1px solid var(--rule);border-radius:var(--radius);background:#fff}.riser svg{display:block;max-width:100%;height:auto}table.circuits{width:100%;border-collapse:collapse;font-size:12px}table.circuits td,table.circuits th{padding:2px 4px;text-align:left}table.circuits input:not([type=checkbox]){width:100%}fieldset.controls{border:1px solid var(--rule);border-radius:var(--radius);display:grid;gap:4px;margin:8px 0}.sun-study{display:inline-flex;align-items:center;gap:6px}.sun-study input[type=range]{width:110px}.analysis-banner{position:absolute;z-index:60;left:50%;bottom:64px;transform:translate(-50%);max-width:min(720px,calc(100% - 40px));padding:10px 16px;border-radius:var(--radius);background:#7f1d1d;color:#fff;font-weight:600;font-size:15px;text-align:center;box-shadow:0 4px 16px #00000040}.analysis-warning{margin:6px 0;padding:6px 8px;border-left:3px solid var(--danger);background:color-mix(in srgb,var(--danger) 8%,transparent);font-weight:600;font-size:12.5px}.util-chip{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle}.reaction-label,.deflection-note{font:600 11px var(--font-mono);color:#fff;background:#1b2430;padding:2px 5px;border-radius:3px;white-space:nowrap}.analysis-panel ul.hint{padding-left:16px;margin:4px 0}
