@font-face{font-family:The Neue Montreal;src:url(/assets/NeueMontreal-Regular-Ctitlh8q.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Lunar;src:url(/assets/Lunar-400-Bv6nkjWZ.woff2) format("woff2");font-weight:400;font-style:normal;font-display:block}:root{--ink:#000000;--ink-2:#171717;--text:#000000;--text-muted:#525252;--text-subtle:#7A7A7A;--text-faint:#A8A8A8;--bg:#FAFAFA;--surface:#FFFFFF;--surface-2:#FAFAFA;--surface-3:#F2F2F2;--grid:#EFEFEF;--border:#EAEAEA;--border-strong:#D4D4D4;--accent:#0070F3;--accent-hover:#0060D9;--accent-soft:#E8F2FE;--accent-line:#B8D9FC;--link:#0070F3;--cta:#000000;--cta-hover:#333333;--danger:#E5484D;--danger-soft:#FEF1F1;--danger-line:#F7CFD0;--danger-ink:#C62A2F;--warn:#C62A2F;--success:#0070F3;--input-bg:#FFFFFF;--font:"The Neue Montreal",-apple-system,"Helvetica Neue",Arial,sans-serif;--display:"Lunar",sans-serif;--mono:"The Neue Montreal",-apple-system,"Helvetica Neue",Arial,sans-serif;--r:6px;--r-lg:10px;--field-h:48px;--shadow:0 1px 2px rgba(0,0,0,.04);--shadow-pop:0 8px 30px rgba(0,0,0,.12) }*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:13px;line-height:1.5;font-weight:400;font-synthesis:style;font-feature-settings:"ss01" 1;letter-spacing:-.006em;background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:40px 40px}h1,h2,.brand,.modal h2,.boq-sheet h1{letter-spacing:-.025em}h1,h2,h3,h4,h5,h6,b,strong,th,optgroup{font-weight:400}.kv b,.pill,.stat b,.row .val,.boq-r,.boq-n,.boq-u,.boq-i,.chip,.outline-meta,.accent-meta,.tracer-hud,.layer-name,.boq-tile b,.stats b,table.boq td,table.boq th{font-variant-numeric:tabular-nums}.app{display:grid;grid-template-columns:1fr 340px;height:100%;gap:0}@media (max-width:960px){.app{grid-template-columns:1fr;grid-template-rows:1fr auto;overflow:auto}}.topbar{position:absolute;top:0;left:0;right:340px;height:56px;z-index:5;display:flex;align-items:center;gap:14px;padding:0 20px;background:#ffffffb8;-webkit-backdrop-filter:saturate(180%) blur(12px);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}@media (max-width:960px){.topbar{right:0}}.brand{display:flex;align-items:center;gap:10px;min-width:0}.wordmark{font-family:var(--display);font-size:15px;line-height:1;letter-spacing:.02em;text-transform:uppercase;color:var(--ink);white-space:nowrap}.sep{width:1px;height:15px;background:var(--border);flex:0 0 auto;transform:rotate(15deg)}.brand .where{font-size:12px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pill{font-family:var(--mono);font-size:10.5px;padding:3px 8px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);white-space:nowrap}.pill.ok{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent)}.pill.bad{border-color:var(--danger-line);background:var(--danger-soft);color:var(--danger-ink)}.pill.warn{border-color:var(--border-strong);background:var(--surface-3);color:var(--text-muted)}.spacer{flex:1}.stage{position:relative;overflow:auto;padding:68px 18px 24px;display:flex;justify-content:safe center;align-items:flex-start}.stage.empty{align-items:center;justify-content:center;padding:18px}.stage.panning,.stage.panning *{cursor:grabbing!important;-webkit-user-select:none;user-select:none}.dropzone{width:min(560px,92%);border:1px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--surface);padding:52px 32px;text-align:center;transition:border-color .15s,background .15s}.dropzone.over{border-color:var(--accent);border-style:solid;background:var(--accent-soft)}.dropzone h2{margin:0 0 8px;font-size:20px;letter-spacing:-.03em}.dropzone p{margin:0 auto 18px;color:var(--text-muted);max-width:42ch}.legend{display:flex;gap:18px;justify-content:center;margin-top:22px;flex-wrap:wrap}.legend div{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text-muted)}.swatch{width:22px;height:14px;border-radius:3px}.swatch.g{border:2px solid var(--ink)}.swatch.r{border:2px dotted var(--text-muted);border-radius:999px;width:16px;height:16px}.canvas-wrap{flex:0 0 auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:12px;display:inline-block;box-shadow:var(--shadow)}svg.plan{display:block;max-width:100%;height:auto;cursor:crosshair}svg.plan.pan{cursor:default}.side{background:var(--surface);border-left:1px solid var(--border);overflow-y:auto;padding:16px 16px 40px;display:flex;flex-direction:column;gap:6px}.sec{border-top:1px solid var(--border);padding-top:14px;margin-top:10px}.sec:first-of-type{border-top:0;margin-top:0;padding-top:0}.sec h3{margin:0 0 10px;font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--text-subtle)}.row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px}.row label{color:var(--text-muted);flex:1;min-width:0}.row .val{font-family:var(--mono);font-size:11px;color:var(--text);min-width:44px;text-align:right}input[type=range]{flex:1.1;max-width:130px;accent-color:var(--accent);height:18px}input[type=number],input[type=text],input[type=email],input[type=password],input[type=search],input[type=tel],input[type=url],select{font:inherit;font-size:12px;padding:6px 9px;border:1px solid var(--border);border-radius:var(--r);background:var(--input-bg);color:var(--text);width:100%;transition:border-color .12s,box-shadow .12s}input[type=number]:hover,input[type=text]:hover,input[type=email]:hover,input[type=password]:hover,input[type=search]:hover,select:hover{border-color:var(--border-strong)}input:focus,select:focus,textarea:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px #0070f329}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.seg{display:flex;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--r);padding:2px;gap:2px;margin-bottom:10px}.seg button{flex:1;border:0;background:transparent;font:inherit;font-size:11.5px;padding:6px 4px;border-radius:6px;cursor:pointer;color:var(--text-muted)}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #0000000f}.btn{font:inherit;font-size:12px;padding:7px 12px;border-radius:var(--r);border:1px solid var(--border);background:var(--surface);color:var(--ink);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.btn:hover{background:var(--surface-2);border-color:var(--border-strong)}.btn:active{background:var(--surface-3)}.btn.primary{background:var(--cta);color:#fff;border-color:var(--cta)}.btn.primary:hover{background:var(--cta-hover);border-color:var(--cta-hover)}.btn.accent{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.accent:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:disabled:hover{background:var(--surface);border-color:var(--border)}.btnrow{display:flex;gap:6px;flex-wrap:wrap}.check{display:flex;align-items:center;gap:8px;margin-bottom:7px;color:var(--text-muted);cursor:pointer}.check input{accent-color:var(--accent);width:14px;height:14px;margin:0}.note{font-size:11.5px;color:var(--text-muted);line-height:1.5;margin:8px 0 0}.note.warn{color:var(--text-muted);border-left:2px solid var(--border-strong);padding-left:9px;margin-left:0}.note.err{color:var(--danger-ink);border-left:2px solid var(--danger);padding-left:9px}.stats{display:grid;grid-template-columns:1fr 1fr;gap:8px}.stat{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:9px 11px}.stat b{display:block;font-size:17px;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.stat span{font-size:9.5px;color:var(--text-subtle);text-transform:uppercase;letter-spacing:.08em}.kv{display:flex;justify-content:space-between;font-size:11.5px;padding:3px 0;color:var(--text-muted)}.kv b{color:var(--ink);font-variant-numeric:tabular-nums}.hint{background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:var(--r);padding:9px 11px;font-size:11.5px;color:var(--accent-hover);margin-bottom:10px}.stage.wide{display:block;padding:68px 22px 24px}.picker{max-width:1180px;margin:0 auto}.picker-head{margin-bottom:16px}.picker-head h2{margin:0 0 6px;font-size:19px;letter-spacing:-.025em}.picker-head p{margin:0;color:var(--text-muted);max-width:78ch}.picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px}.chunk-card{display:flex;flex-direction:column;gap:8px;text-align:left;font:inherit;color:inherit;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;cursor:pointer;transition:border-color .12s,box-shadow .12s}.chunk-card:hover{border-color:var(--accent);box-shadow:0 2px 10px #0a0a0a0f}.chunk-card.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft),0 2px 12px #6366f124}.chunk-card-top{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.chunk-card-name{letter-spacing:-.01em;font-size:13.5px}.chunk-thumb{display:block;width:100%;height:210px;background:var(--bg);border:1px solid var(--border);border-radius:8px}.chip-row{display:flex;gap:5px;flex-wrap:wrap}.chip{font-family:var(--mono);font-size:10px;padding:2px 7px;border-radius:6px;background:var(--input-bg);color:var(--text-muted);white-space:nowrap}.chip b{color:var(--text)}.chip.bad{background:var(--danger-soft);color:var(--danger-ink)}.chip.bad b{color:var(--danger-ink)}.tag{font-size:10px;padding:2px 7px;border-radius:999px;white-space:nowrap}.tag.rec{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line)}.tag.sel{background:var(--accent);color:#fff}.tag.good{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line)}.chunk-card-blurb{margin:auto 0 0;font-size:11.5px;line-height:1.45;color:var(--text-subtle)}.chunk-card-alias{margin:0;font-family:var(--mono);font-size:10px;color:var(--text-subtle);opacity:.75}.picker-foot{position:sticky;bottom:0;margin-top:18px;display:flex;align-items:center;gap:14px;border-top:1px solid var(--border);padding:14px 2px;background:linear-gradient(#fafafa00,#fafafaf2 34%)}.picker-foot-txt{flex:1;color:var(--text-muted);font-size:12px}@media (max-width:960px){.chunk-thumb{height:170px}}.picker.rooms{max-width:1320px}.rooms-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;align-items:start}.rooms-plan{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:10px;box-shadow:0 1px 2px #0a0a0a0a;min-width:0}.rooms-svg{display:block;width:100%;height:auto;max-height:calc(100vh - 260px)}.rooms-side{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;box-shadow:0 1px 2px #0a0a0a0a;max-height:calc(100vh - 260px);overflow:auto}.layer-list{display:flex;flex-direction:column;gap:1px;margin-bottom:4px}.layer-row{display:grid;grid-template-columns:14px minmax(0,1fr) auto auto;gap:7px;align-items:center;padding:3px 5px;border-radius:6px;cursor:pointer;font-size:11.5px;color:var(--text-muted)}.layer-row:hover{background:var(--input-bg)}.layer-row.on{background:var(--accent-soft);color:var(--accent)}.layer-row input{accent-color:var(--accent);width:13px;height:13px;margin:0}.layer-name{font-family:var(--mono);font-size:10.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layer-role{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-subtle)}.layer-count{font-family:var(--mono);font-size:10px;color:var(--text-subtle)}.room-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}.loading-sec{flex:1;display:flex;flex-direction:column;min-height:0}.loading-mid{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center;padding:24px 4px}.loading-say{margin:0;font-size:17px;line-height:1.35;letter-spacing:-.02em;color:var(--ink);max-width:18ch}.loading-mid .btn{padding:7px 14px}.space-list{margin:10px 0 8px;display:flex;flex-direction:column;gap:2px}.rooms-side.door-only{height:calc(100vh - 262px);display:flex;flex-direction:column}.rooms-side.door-only>.sec{display:flex;flex-direction:column;flex:1;min-height:0}.door-ask{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:10px;padding:16px 4px}.door-ask-h{margin:0;font-size:17px;line-height:1.32;letter-spacing:-.02em;color:var(--ink);max-width:20ch}.door-ask-p{margin:0;font-size:12px;line-height:1.5;color:var(--text-muted);max-width:28ch}@media (max-width:1080px){.rooms-layout{grid-template-columns:minmax(0,1fr)}.rooms-side{max-height:none}.rooms-side.door-only{height:auto}.door-ask{padding:22px 4px}}.room-row{border:0;background:none;width:100%;text-align:left;font:inherit;cursor:pointer}.room-dot{width:9px;height:9px;border-radius:3px;display:block}.picker.tracer{max-width:1400px}.tracer-plan{position:relative;padding:0;overflow:hidden;height:calc(100vh - 262px);min-height:380px}.tracer-hud{position:absolute;left:10px;bottom:10px;display:flex;gap:6px;flex-wrap:wrap;pointer-events:none}.tracer-hud .chip{font-family:var(--mono);font-size:10px;padding:3px 7px;border-radius:999px;background:#ffffffeb;border:1px solid var(--border);color:var(--text-muted)}.tracer-hud .chip.on,.tracer-hud .chip.snap{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent)}.outline-row{padding:5px 6px;border-radius:7px;margin-bottom:3px;border:1px solid transparent}.outline-row.on{background:var(--accent-soft);border-color:var(--accent-line)}.row-pick{cursor:pointer}.row-pick:hover{background:var(--surface-3)}.row-pick.on:hover{background:var(--accent-soft)}.row-pick:focus{outline:none}.row-pick:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.row-top{display:flex;align-items:center;gap:9px}.row-main{flex:1 1 auto;min-width:0}.row-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:26px;height:26px;border:0;background:none;padding:0;cursor:pointer;color:var(--text-faint);line-height:0;border-radius:6px}.row-icon:hover{background:var(--surface)}.outline-row.on .row-icon:hover{background:#fff9}.outline-row:hover .row-icon{color:var(--text-muted)}.outline-row.on .row-icon,.row-icon:hover{color:var(--accent)}.row-icon:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}.outline-pick{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:7px;align-items:center;width:100%;border:0;background:none;font:inherit;cursor:pointer;padding:0;text-align:left}.outline-name{font-family:var(--mono);font-size:11px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.outline-pick.plain{grid-template-columns:minmax(0,1fr) auto}.outline-pick{cursor:inherit}.outline-meta{display:flex;justify-content:space-between;align-items:center;gap:6px;font-size:10px;color:var(--text-subtle);margin-top:3px}.outline-meta span{display:flex;align-items:center;gap:5px}.btn.tiny{padding:0 5px;font-size:11px;line-height:1.5}label.mini{display:flex;align-items:center;gap:3px;font-size:10px;color:var(--text-subtle);cursor:pointer}label.mini input{width:11px;height:11px;margin:0;accent-color:var(--accent)}.render-strip{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.render-thumb{position:relative;width:62px;height:62px;border-radius:7px;overflow:hidden;border:1px solid var(--border);background:var(--input-bg);flex:0 0 auto}.render-thumb.plan{border-color:var(--accent-line);background:var(--surface)}.render-thumb img{width:100%;height:100%;object-fit:cover;display:block}.render-thumb.plan img{object-fit:contain}.render-no{position:absolute;left:3px;bottom:3px;font-family:var(--mono);font-size:9px;padding:0 4px;border-radius:4px;background:#000000c7;color:#fff;line-height:1.5}.render-x{position:absolute;top:2px;right:2px;width:15px;height:15px;padding:0;line-height:13px;border:0;border-radius:4px;background:#000000b3;color:#fff;font-size:12px;cursor:pointer}.render-x:hover{background:var(--danger)}.accent-row{border:1px solid var(--border);border-radius:8px;padding:6px 8px;margin-top:6px;background:var(--surface)}.accent-row.off{opacity:.42}.accent-row.off .accent-what,.accent-row.off .accent-why{text-decoration:line-through}.accent-head{display:flex;align-items:center;gap:6px}.accent-head b{font-family:var(--mono);font-size:11px}.accent-head .btn.tiny{margin-left:auto}.accent-dot{width:8px;height:8px;border-radius:2px;flex:0 0 auto}.accent-role{font-size:9px;color:var(--text-subtle);border:1px solid var(--border);border-radius:999px;padding:0 5px;line-height:1.6;white-space:nowrap}.accent-what{font-size:11.5px;color:var(--text);margin-top:3px}.accent-why{font-size:10.5px;color:var(--text-muted);margin-top:2px;line-height:1.45}.accent-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px;font-family:var(--mono);font-size:9.5px;color:var(--text-subtle)}.accent-rules{margin-top:8px;font-size:11px;color:var(--text-muted)}.accent-rules summary{cursor:pointer;color:var(--text-subtle);font-size:10.5px}.accent-rules ol{margin:6px 0 0;padding-left:18px}.accent-rules li{margin-bottom:3px;line-height:1.4}.accent-rules b{color:var(--text)}.accent-row.bad{border-style:dashed;border-color:var(--danger-line);background:var(--danger-soft)}.accent-why.warn{color:var(--danger-ink)}.furn-row{display:grid;grid-template-columns:8px minmax(0,1fr) auto auto;gap:7px;align-items:center;padding:3px 0;font-size:11px;border-bottom:1px solid var(--border)}.furn-row:last-of-type{border-bottom:0}.furn-name{font-family:var(--mono);color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.furn-out{font-size:10px;color:var(--text-muted)}.furn-conf{font-family:var(--mono);font-size:9.5px;color:var(--text-subtle)}input.mm{width:46px;padding:1px 3px;font-size:10px;font-family:var(--mono);text-align:right}.palette{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-top:8px}.palette.three{grid-template-columns:repeat(3,1fr)}.palette-btn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:7px 2px 5px;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;font:inherit;transition:background .12s,border-color .12s}.palette-btn span{font-size:8.5px;line-height:1.15;text-align:center;color:var(--text-muted);letter-spacing:.01em}.palette-btn:hover:not(:disabled){background:var(--input-bg)}.palette-btn.on{background:var(--input-bg);box-shadow:inset 0 0 0 1px currentColor}.palette-btn.on span{color:var(--text)}.palette-btn:disabled{opacity:.45;cursor:not-allowed}.sweep{display:flex;gap:4px;margin-top:7px}.sweep button{flex:1;padding:3px 0;font-family:var(--mono);font-size:10px;border:1px solid var(--border);border-radius:6px;background:var(--surface);cursor:pointer}.sweep button.on{border-color:var(--text);background:var(--input-bg);color:var(--text)}.accent-row.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.plan{pointer-events:auto}.plan g,.plan rect,.plan circle,.plan line,.plan path,.plan polygon,.plan text,.plan image,.plan polyline{pointer-events:none}.plan .hit{pointer-events:all}.note code{font-family:var(--mono);font-size:10px;background:var(--input-bg);padding:0 3px;border-radius:3px;color:var(--text)}.modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;background:#14141c57;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal{width:min(520px,calc(100vw - 40px));background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:22px 22px 20px;box-shadow:0 18px 50px #1414282e}.modal h2{margin:0 0 6px;font-size:17px;letter-spacing:-.01em}.proj-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.proj-btn{display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:11px 12px;border:1px solid var(--border);border-radius:9px;background:var(--surface);cursor:pointer;font:inherit;text-align:left;transition:border-color .12s,background .12s,transform .08s}.proj-btn b{font-size:13px}.proj-btn span{font-size:10.5px;color:var(--text-subtle);line-height:1.3}.proj-btn:hover{border-color:var(--ink);background:var(--surface-2)}.proj-btn:active{transform:translateY(1px)}.modal-busy{display:flex;align-items:center;gap:14px;padding:10px 2px;min-height:74px}.modal-busy b{font-size:14px;display:block}.modal-spin{width:22px;height:22px;flex:0 0 auto;border-radius:50%;border:2px solid var(--border);border-top-color:var(--accent);animation:sl-spin .7s linear infinite}.door-widths{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.door-widths .btn{width:100%;padding:7px 4px;text-align:center}.door-custom-open{width:100%;margin-top:6px;font-size:11.5px;color:var(--text-muted)}.door-custom{margin-top:6px;padding:8px;border-radius:var(--r);background:var(--surface-3);border:1px solid var(--border)}.door-custom>label{display:block;font-size:11px;color:var(--text-subtle);margin-bottom:4px}.door-custom-row{display:flex;align-items:center;gap:6px}.door-custom-row input{flex:1;min-width:0}.door-custom-unit{font-size:11.5px;color:var(--text-subtle)}.door-custom-row .btn{flex:0 0 auto}.tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface-3)}.tabs button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;cursor:pointer;font:inherit;font-size:11.5px;letter-spacing:.01em;color:var(--text-subtle);padding:4px 14px;border-radius:6px;transition:background .12s ease,color .12s ease}.tabs button:hover{color:var(--text)}.tabs button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #0a0a0a0f}.boq-wrap{width:100%;display:flex;justify-content:center;padding:0 18px 60px;--a4-w:794px;--a4-h:1123px}.boq-sheet{width:var(--a4-w);max-width:100%;min-height:var(--a4-h);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:52px 58px 64px;box-shadow:0 1px 3px #0a0a0a12}.boq-head{display:flex;gap:20px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;padding-bottom:16px;margin-bottom:6px;border-bottom:1px solid var(--border)}.boq-sheet h1{margin:0 0 4px;font-size:18px;letter-spacing:-.02em}.boq-h2{margin:26px 0 2px;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-subtle)}.boq-sub{margin:0 0 9px;max-width:60ch}@media (max-width:900px){.boq-wrap{padding:0 10px 40px}.boq-sheet{padding:28px 20px 40px;min-height:0}.boq-scroll{overflow-x:auto}}.boq-tiles{display:flex;gap:7px}.boq-tile{min-width:82px;padding:8px 11px;border:1px solid var(--border);border-radius:8px;background:var(--surface-2)}.boq-tile b{display:block;font-size:17px;letter-spacing:-.02em;font-family:var(--mono);line-height:1.15}.boq-tile span{display:block;font-size:9.5px;color:var(--text-subtle);margin-top:2px}table.boq{width:100%;border-collapse:collapse;font-size:11px;table-layout:fixed}table.boq.boq-narrow{max-width:430px}table.boq th{text-align:left;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-subtle);padding:7px 6px 5px;border-bottom:1px solid var(--text);white-space:nowrap}table.boq td{padding:6px;border-bottom:1px solid var(--border);vertical-align:baseline;overflow-wrap:break-word}table.boq tbody tr:hover{background:var(--accent-soft)}.boq-r{text-align:right;font-family:var(--mono);white-space:nowrap}th.boq-r{text-align:right}.boq-i{width:22px;color:var(--text-subtle);font-family:var(--mono);font-size:10px}.boq-u{font-size:10px;color:var(--text-muted);white-space:nowrap}.boq-note{color:var(--text-muted);font-size:10px;line-height:1.4}table.boq col.c-desc{width:25%}table.boq col.c-qty{width:9%}table.boq col.c-unit{width:7%}table.boq col.c-watt{width:10%}table.boq col.c-beam{width:7%}table.boq col.c-load{width:10%}table.boq col.c-note{width:29%}table.boq col.c-room{width:24%}table.boq col.c-num{width:12.6%}.boq-n{font-family:var(--mono)}table.boq tfoot td{border-top:1px solid var(--text);border-bottom:0;padding-top:9px}table.boq tfoot tr:hover{background:transparent}.boq-caveat td{padding-top:2px;border-top:0;font-size:10.5px;color:var(--text-subtle);line-height:1.4}.boq-empty{margin:80px auto;text-align:center;max-width:40ch}.boq-empty h2{font-size:16px;margin:0 0 6px}.boq-export{display:flex;flex-direction:column;gap:6px}.boq-export .btn{width:100%;text-align:left;padding:8px 10px;display:block}.boq-export .btn b{display:block;font-size:12px}.boq-export .btn span{display:block;font-size:10px;opacity:.7;margin-top:1px;white-space:normal}.loader-wrap{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;display:grid;place-items:center;background:#fafafced;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.loader-stage{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:26px;align-items:center;width:min(1020px,calc(100% - 56px))}@media (max-width:900px){.loader-stage{grid-template-columns:minmax(0,1fr);gap:16px}}.loader-plan{width:100%;max-height:min(62vh,560px);display:block}@keyframes sl-lap{0%{stroke-dashoffset:var(--from,0)}to{stroke-dashoffset:var(--lap)}}.sl-run{animation:sl-lap 2.1s linear infinite}@media (prefers-reduced-motion:reduce){.sl-run{animation:none;opacity:.55}}.loader-phase{font-size:15px;letter-spacing:-.01em;color:var(--text)}.loader-detail{font-size:11.5px;color:var(--text-muted);margin-top:3px;min-height:15px}.loader-bar{height:3px;border-radius:2px;background:var(--grid);margin:12px 0 14px;overflow:hidden}.loader-bar i{display:block;height:100%;background:var(--accent);border-radius:2px;transition:width .35s cubic-bezier(.4,0,.2,1)}.loader-steps{list-style:none;margin:0;padding:0;display:grid;gap:7px}.loader-steps li{display:grid;grid-template-columns:14px minmax(0,1fr);gap:7px;align-items:baseline;font-size:11.5px;color:var(--text-subtle)}.loader-steps li .dot{width:6px;height:6px;border-radius:50%;background:var(--border);margin-top:5px;grid-column:1}.loader-steps li>div{grid-column:2;min-width:0}.loader-steps li.busy{color:var(--text)}.loader-steps li.busy .dot{background:var(--accent);animation:sl-blink 1.1s ease-in-out infinite}.loader-steps li.done{color:var(--text-muted)}.loader-steps li.done .dot{background:var(--ink);opacity:.35}.loader-steps li em{display:block;font-style:normal;font-size:10px;color:var(--text-subtle);margin-top:1px}@keyframes sl-blink{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion:reduce){.loader-steps li.busy .dot{animation:none}}.rtype{font-family:var(--mono);font-size:9px;letter-spacing:.02em;background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:1px 5px;margin-right:5px}.lp-pulse{transform-box:fill-box;transform-origin:center;animation:lp-pulse 2.8s ease-in-out infinite;will-change:transform,opacity}@keyframes lp-pulse{0%,to{transform:scale(.92);opacity:.72}50%{transform:scale(1.12);opacity:1}}.lp-breathe{animation:lp-breathe 2.8s ease-in-out infinite;will-change:stroke-width,opacity}@keyframes lp-breathe{0%,to{stroke-width:var(--lp-w0);opacity:calc(var(--lp-glow-o,.5) * .78)}50%{stroke-width:var(--lp-w1);opacity:calc(var(--lp-glow-o,.5) * 1.22)}}@media (prefers-reduced-motion:reduce){.lp-pulse,.lp-breathe{animation:none}}.fixture-tip{position:fixed;z-index:40;pointer-events:none;min-width:172px;max-width:260px;padding:10px 12px 9px;border-radius:10px;background:#ffffffb8;-webkit-backdrop-filter:saturate(180%) blur(18px);backdrop-filter:saturate(180%) blur(18px);border:1px solid rgba(0,0,0,.09);box-shadow:0 8px 26px #0a0a0a24,0 1px 2px #0a0a0a14;animation:tip-in .11s ease-out}@keyframes tip-in{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.fixture-tip{animation:none}}.fixture-tip h4{margin:0 0 7px;font-size:12px;color:var(--ink);letter-spacing:-.01em;line-height:1.25}.fixture-tip dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:3px 12px}.fixture-tip dt{font-size:11px;color:var(--text-muted);white-space:nowrap}.fixture-tip dd{margin:0;font-family:var(--mono);font-size:11px;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}.fixture-tip p{margin:8px 0 0;padding-top:7px;border-top:1px solid rgba(0,0,0,.08);font-size:10.5px;line-height:1.4;color:var(--text-subtle)}.home{min-height:100%;display:flex;flex-direction:column}.home-top{height:56px;flex:0 0 auto;display:flex;align-items:center;gap:14px;padding:0 22px;border-bottom:1px solid var(--border);background:#ffffffb8;-webkit-backdrop-filter:saturate(180%) blur(12px);backdrop-filter:saturate(180%) blur(12px)}.brand-link{display:flex;align-items:center;gap:10px;text-decoration:none}.home-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:64px 24px;gap:6px;border:2px solid transparent;transition:border-color .15s,background .15s}.home-main.over{border-color:var(--accent);background:var(--accent-soft)}.home-h1{margin:0 0 10px;font-size:clamp(34px,4.4vw,58px);line-height:1.04;letter-spacing:-.035em;max-width:22ch}.home-sub{margin:0 0 26px;color:var(--text-muted);max-width:56ch;font-size:14px;line-height:1.6}.home-cta{display:flex;flex-direction:column;align-items:center;gap:12px}.btn.big{font-size:14px;padding:12px 22px;border-radius:8px}.home-hint{font-size:11.5px;color:var(--text-subtle)}.home-err{max-width:48ch}.home-foot{flex:0 0 auto;display:flex;justify-content:space-between;padding:16px 22px;border-top:1px solid var(--border);font-size:11px;color:var(--text-subtle);background-color:#fff}.auth{min-height:100%;display:flex;flex-direction:column;align-items:center}.auth-top{width:100%;height:56px;display:flex;align-items:center;padding:0 22px;border-bottom:1px solid var(--border);background-color:#fff}.auth-card{width:min(420px,92%);margin:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:30px 28px;box-shadow:var(--shadow)}.auth-card h1{margin:0 0 8px;font-size:22px;letter-spacing:-.03em}.auth-sub{margin:0 0 22px;color:var(--text-muted);font-size:12.5px;line-height:1.6}.auth-form{display:flex;flex-direction:column;gap:8px}.auth-label{font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--text-subtle)}.auth-form .btn{margin-top:8px}input.otp{font-size:24px;letter-spacing:.42em;text-align:center;padding:12px 8px;font-variant-numeric:tabular-nums}.auth-alt{display:flex;justify-content:space-between;gap:12px;margin-top:12px}.linkish{border:0;background:none;font:inherit;font-size:11.5px;color:var(--link);cursor:pointer;padding:0;text-decoration:none}.linkish:hover{text-decoration:underline}.linkish:disabled{color:var(--text-faint);cursor:default;text-decoration:none}.linkish.danger{color:var(--danger-ink)}.shell{display:grid;grid-template-columns:56px 1fr;height:100%}.rail{border-right:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;align-items:center;padding:18px 0 14px;gap:10px}.rail-mark{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px}.rail-mark:hover{background:var(--surface-3)}.rail-spacer{flex:1}.rail-account{position:relative}.bubble{width:32px;height:32px;border-radius:50%;border:1px solid var(--border-strong);background:var(--surface-3);color:var(--ink);font:inherit;font-size:13px;cursor:pointer;display:grid;place-items:center;transition:background .12s,border-color .12s,box-shadow .12s}.bubble:hover{background:var(--surface);border-color:var(--ink)}.rail-menu{position:absolute;bottom:0;left:44px;width:210px;z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:6px;display:flex;flex-direction:column;gap:2px}.rail-who{padding:8px 9px 10px;display:flex;flex-direction:column;gap:2px;border-bottom:1px solid var(--border);margin-bottom:4px}.rail-who b{font-size:12.5px}.rail-who span{font-size:11px;color:var(--text-subtle);overflow:hidden;text-overflow:ellipsis}.rail-menu button{text-align:left;border:0;background:none;font:inherit;font-size:12.5px;padding:7px 9px;border-radius:var(--r);cursor:pointer;color:var(--ink)}.rail-menu button:hover{background:var(--surface-3)}.rail-menu button.danger{color:var(--danger-ink)}.rail-menu button.danger:hover{background:var(--danger-soft)}.rail-sep{height:1px;background:var(--border);margin:4px 0}.shell-col{display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0}.detail-bar{height:56px;flex:0 0 auto;display:flex;align-items:center;padding:0 30px;background:#ffffffb8;-webkit-backdrop-filter:saturate(180%) blur(12px);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}.detail-bar-inner{width:100%;max-width:1180px;margin-inline:auto;display:flex;align-items:center;gap:12px;min-width:0}.detail-bar .plan-name{max-width:40ch}.page-sub.lead{margin-top:0;font-size:13px}.shell-body{overflow-y:auto;padding:26px 30px 60px;width:100%}.shell-inner{width:100%;max-width:1180px;margin-inline:auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:6px 0 26px}.page-head h1{margin:0;font-size:26px;letter-spacing:-.03em}.page-sub{margin:6px 0 0;color:var(--text-muted);font-size:12.5px}.page-sec{margin-bottom:34px}.page-sec h3{margin:0 0 12px;font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--text-subtle)}.back{border:0;background:none;font:inherit;font-size:12px;color:var(--text-muted);cursor:pointer;padding:4px 0;display:inline-flex;align-items:center;gap:7px;margin-bottom:14px}.back:hover{color:var(--ink)}.back span{font-size:13px}.back.small{margin:0;font-size:12px;white-space:nowrap}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.card-grid.plans{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;cursor:pointer;display:flex;flex-direction:column;transition:border-color .12s,box-shadow .12s,transform .12s}.card:hover{border-color:var(--border-strong);box-shadow:var(--shadow)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.card-body{padding:13px 14px;flex:1}.card-body h4{margin:0 0 6px;font-size:13.5px;letter-spacing:-.01em}.card-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:11.5px;color:var(--text-muted)}.dotsep{color:var(--text-faint)}.card-stats{display:flex;gap:14px;margin-top:10px;font-size:11px;color:var(--text-muted)}.card-stats b{color:var(--ink);font-variant-numeric:tabular-nums}.card-foot{padding:8px 14px;border-top:1px solid var(--border);display:flex;justify-content:flex-end}.project-card .card-body{padding-top:15px}.plan-shot{aspect-ratio:4/3;background:var(--surface-2);border-bottom:1px solid var(--border);display:grid;place-items:center;overflow:hidden}.plan-shot img{width:100%;height:100%;object-fit:cover;display:block}.plan-shot-empty{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint)}.skeleton-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.skel-card{height:150px;border-radius:var(--r-lg);background:var(--surface-3);animation:sl-breathe 1.6s ease-in-out infinite}@keyframes sl-breathe{0%,to{opacity:.55}50%{opacity:1}}.page-centre{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px}.spinner{width:26px;height:26px;border-radius:50%;border:2px solid var(--border);border-top-color:var(--accent);animation:sl-spin .8s linear infinite}@keyframes sl-spin{to{transform:rotate(360deg)}}.notice-card{width:min(460px,92%);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:24px;text-align:center}.notice-card h2{margin:0 0 10px;font-size:18px;letter-spacing:-.025em}.notice-card p{margin:0 0 14px;color:var(--text-muted);font-size:12.5px;line-height:1.6}.notice-card code{font-family:var(--mono);font-size:11px;background:var(--surface-3);padding:1px 4px;border-radius:3px}.plan-head{display:flex;align-items:center;gap:12px;min-width:0}.plan-name{border:0;background:none;font:inherit;font-size:13.5px;color:var(--ink);cursor:text;padding:3px 6px;border-radius:var(--r);max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-name:hover{background:var(--surface-3);box-shadow:inset 0 -1px 0 var(--border-strong)}.plan-name-input{font:inherit;font-size:13.5px;width:26ch;padding:3px 6px}.auth-card input[type=text],.auth-card input[type=email],.auth-card input[type=password],.auth-card input[type=number],.auth-card select,.shell-body input[type=text],.shell-body input[type=email],.shell-body input[type=password],.shell-body input[type=number],.shell-body select{height:var(--field-h);padding:0 14px;font-size:14px}.auth-card select,.shell-body select{padding-right:34px}.btn.big{height:var(--field-h);padding:0 22px;display:inline-flex;align-items:center;justify-content:center}.auth-form .btn.big{width:100%}input.otp{height:var(--field-h);padding:0 8px;font-size:22px}.logo{--logo-w:104px;position:relative;overflow:hidden;flex:0 0 auto;display:block;width:var(--logo-w);height:calc(var(--logo-w) * .349432)}.logo img{position:absolute;display:block;width:calc(var(--logo-w) * 1.420455);height:auto;left:calc(var(--logo-w) * -.116477);top:calc(var(--logo-w) * -.542614)}.rail-mark{width:auto;height:auto;padding:5px 3px;border-radius:8px}.btn.secondary{background:var(--surface);color:var(--ink);border:1px solid var(--border-strong)}.btn.secondary:hover{background:var(--surface-2);border-color:var(--ink)}.btn.secondary:active{background:var(--surface-3)}.btn .plus{font-size:1.18em;line-height:0;position:relative;top:.055em;margin-right:1px}.btnrow.centre{justify-content:center;margin-top:22px}.page-sec.empty{min-height:min(58vh,560px);display:flex;align-items:center;justify-content:center}.dropzone.hero{width:min(760px,100%);padding:76px 56px;border-radius:16px;border:1.5px dashed var(--border-strong)}.dropzone.hero h2{font-size:32px;letter-spacing:-.035em;margin-bottom:12px}.dropzone.hero p{font-size:14px;line-height:1.65;max-width:52ch}@media (max-width:700px){.dropzone.hero{padding:48px 24px}.dropzone.hero h2{font-size:24px}}.bubble{background:var(--accent);border-color:var(--accent);color:#fff}.bubble:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}.bubble.on{background:var(--ink);border-color:var(--ink);color:#fff}.modal.wide{width:min(620px,94vw)}.modal-gap{height:18px}.modal-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.proj-btn.on{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent) inset}.proj-btn.on b{color:var(--accent)}.cat-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}.pdf-pages{display:grid;grid-template-columns:repeat(auto-fill,minmax(122px,1fr));gap:10px;max-height:min(52vh,440px);overflow-y:auto;padding:2px}.pdf-page{border:1px solid var(--border);background:var(--surface);border-radius:var(--r);padding:7px;cursor:pointer;font:inherit;display:flex;flex-direction:column;gap:6px;transition:border-color .12s,background .12s}.pdf-page:hover{border-color:var(--accent);background:var(--accent-soft)}.pdf-thumb{aspect-ratio:1/1.35;background:var(--surface-3);border:1px solid var(--border);border-radius:3px;display:grid;place-items:center;overflow:hidden}.pdf-thumb img{width:100%;height:100%;object-fit:contain;display:block;background:#fff}.pdf-thumb-wait{width:16px;height:16px;border-radius:50%;border:2px solid var(--border-strong);border-top-color:var(--accent);animation:sl-spin .8s linear infinite}.pdf-page-no{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-subtle);text-align:center}.pill.as-btn{font-family:var(--mono);cursor:pointer;border-width:1px;font-size:10.5px}.pill.as-btn:hover{background:var(--danger-line)}.sec.admin{border-top:1px solid var(--border-strong);margin-top:20px;padding-top:14px}.sec.admin h3{color:#c026d3}.admin-counts{margin-top:10px;padding:9px 10px;border-radius:var(--r);background:var(--surface-3);border:1px solid var(--border);display:flex;flex-direction:column;gap:5px}.admin-counts .kv{margin:0}.bed-why{margin-top:4px;border-top:1px solid var(--border);padding-top:6px}.bed-why>summary{cursor:pointer;font-size:11.5px;color:var(--text-subtle);list-style:none;-webkit-user-select:none;user-select:none}.bed-why>summary::-webkit-details-marker{display:none}.bed-why>summary:before{content:"▸ ";font-size:9px}.bed-why[open]>summary:before{content:"▾ "}.bed-why>summary:hover{color:var(--text-muted)}.bed-why .note{margin:6px 0 0;font-size:11px;line-height:1.5}.notice-card.crash{width:min(560px,94%);text-align:left}.notice-card.crash h2{text-align:center}.notice-card.crash>p{text-align:center}.crash-msg{margin:14px 0;padding:10px 12px;border-radius:var(--r);background:var(--danger-soft);border:1px solid var(--danger-line);color:var(--danger-ink);font-family:var(--mono);font-size:11.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto}
