:root{--paper: #f5f2ec;--paper-2: #ece7de;--sheet: #fbf9f5;--ink: #1f1d1a;--ink-2: #4a453e;--muted: #6b655b;--line: #ddd6ca;--line-2: #cfc6b7;--accent: #b4532a;--accent-ink: #fffaf5;--accent-soft: #f3e1d6;--ok: #2f6b3f;--ok-bg: #e2eedf;--warn: #8a5a12;--warn-bg: #f5e9cf;--bad: #9b2c1f;--bad-bg: #f6dcd6;--radius: 6px;--shadow: 0 1px 2px rgb(31 29 26 / .06), 0 6px 18px -6px rgb(31 29 26 / .18);--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font:14px/1.45 var(--font);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}::selection{background:var(--accent-soft);color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default;opacity:.4}h2,h3,h4{margin:0;text-wrap:balance}code{font:12px ui-monospace,Cascadia Mono,Consolas,monospace;background:var(--paper-2);padding:1px 4px;border-radius:3px}*{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}.bar{height:52px;display:flex;align-items:center;gap:20px;padding:0 16px;border-bottom:1px solid var(--line);background:var(--sheet)}.title{display:flex;align-items:baseline;gap:10px;min-width:0;margin-right:auto}.title strong{font-size:16px;letter-spacing:-.01em}.title span{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.seg{display:inline-flex;padding:2px;background:var(--paper-2);border-radius:8px}.seg button{border:0;background:none;padding:5px 12px;border-radius:6px;color:var(--ink-2);white-space:nowrap;transition:background .15s,color .15s}.seg button:hover{color:var(--ink)}.seg button[aria-checked=true]{background:var(--sheet);color:var(--ink);box-shadow:var(--shadow);font-weight:600}.seg .fit{display:inline-block;width:6px;height:6px;border-radius:50%;margin-left:6px;vertical-align:2px}.seg .fit.yes{background:var(--ok)}.seg .fit.no{background:#c9952e}.verdict{padding:10px 12px;border-radius:var(--radius);margin-bottom:20px}.verdict strong{display:block}.verdict p{margin:2px 0 0;font-size:13px}.verdict.ok{background:var(--ok-bg);color:var(--ok)}.verdict.ok p{color:#2c4a33}.verdict.needs{background:var(--warn-bg);color:var(--warn)}.verdict.needs p{color:#5a4318}.toggles{display:flex;gap:14px}.switch{display:inline-flex;align-items:center;gap:7px;cursor:pointer;color:var(--ink-2);user-select:none;white-space:nowrap}.switch input{appearance:none;width:28px;height:16px;border-radius:8px;background:var(--line-2);position:relative;margin:0;transition:background .15s;cursor:pointer}.switch input:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .18s cubic-bezier(.2,.8,.2,1);box-shadow:0 1px 2px #0003}.switch input:checked{background:var(--accent)}.switch input:checked:after{transform:translate(12px)}.app{height:calc(100vh - 52px);display:grid;grid-template-columns:minmax(0,1fr) 360px}.inspector{background:var(--sheet);overflow:auto;min-height:0}.inspector{border-left:1px solid var(--line);display:flex;flex-direction:column}.icon{width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);background:var(--sheet);border-radius:var(--radius)}.icon:hover:not(:disabled){border-color:var(--line-2);background:var(--paper)}.icon svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.note{margin:10px 0 0;color:var(--ink-2);font-size:13px}.btn{border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);padding:5px 12px;border-radius:var(--radius);font-weight:600;white-space:nowrap;transition:background .15s,border-color .15s,color .15s}.btn:hover{background:#9c4522;border-color:#9c4522}.btn.ghost{background:none;color:var(--ink-2);border-color:var(--line);font-weight:500}.btn.ghost:hover{border-color:var(--line-2);color:var(--ink);background:var(--paper)}.stage{position:relative;min-width:0;min-height:0;overflow:hidden;background:#e7ebe8}.stage canvas{display:block;width:100%;height:100%}.labels{position:absolute;inset:0;pointer-events:none}.viewbar{position:absolute;top:12px;left:12px;right:12px;z-index:2;display:flex;flex-direction:column;align-items:flex-start;gap:6px;pointer-events:none}.viewbar>*{pointer-events:auto}.views{display:flex;gap:6px;flex-wrap:wrap}.filters{display:flex;align-items:center;gap:4px;max-width:100%;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.filters::-webkit-scrollbar{display:none}.filters-label{font-size:12px;color:var(--muted);margin-right:2px;flex:none}.fchip{flex:none;font-size:12px;padding:3px 9px}.fchip.green{margin-left:10px}.fchip[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--ink);font-weight:600}.fchip[aria-pressed=true]:before{content:"";display:inline-block;width:7px;height:4px;margin:0 5px 2px 0;border-left:2px solid var(--accent);border-bottom:2px solid var(--accent);transform:rotate(-45deg)}.filter-note{margin:0 0 10px;padding:6px 10px;background:var(--paper-2);border-radius:var(--radius);font-size:13px;color:var(--ink-2)}.lay-label.out{display:none}.chip{border:1px solid rgb(31 29 26 / .1);background:#fbf9f5eb;padding:5px 10px;border-radius:999px;color:var(--ink-2);box-shadow:0 1px 2px #1f1d1a0f}.chip:hover{color:var(--ink);background:var(--sheet)}.dock{position:absolute;left:50%;bottom:16px;transform:translate(-50%);z-index:2;display:grid;gap:6px;padding:8px 10px 8px 16px;background:#fbf9f5f2;border:1px solid rgb(31 29 26 / .08);border-radius:10px;box-shadow:var(--shadow);width:min(620px,calc(100% - 24px))}.dock-row{display:flex;align-items:center;gap:12px}.dock-row label{font-weight:600;width:4.4em;flex:none}body.walking .dock{display:none}.build output{width:13.5em;flex:none;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}.build input{flex:1;accent-color:var(--accent);min-width:80px}.build .btn{min-width:88px;display:inline-flex;align-items:center;justify-content:center;gap:6px}.build .btn svg{width:12px;height:12px;fill:currentColor}.build .btn .i-pause,.build .btn.on .i-play{display:none}.build .btn.on .i-pause{display:block}.walk-hint{position:absolute;left:50%;bottom:16px;transform:translate(-50%);z-index:2;display:flex;align-items:center;gap:12px;padding:8px 10px 8px 16px;background:#fbf9f5f2;border:1px solid rgb(31 29 26 / .08);border-radius:10px;box-shadow:var(--shadow);width:min(560px,calc(100% - 24px));font-size:13px;color:var(--ink-2)}.walk-hint[hidden]{display:none}.walk-hint p{margin:0;flex:1}.walk-hint kbd{font:600 11px/1 var(--font);padding:2px 5px;margin:0 1px;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:4px;background:var(--sheet);color:var(--ink)}.walk-hint .keys-touch{display:none}@media (pointer: coarse){.walk-hint .keys-desk{display:none}.walk-hint .keys-touch{display:block}}body.walking .stage canvas{cursor:crosshair;touch-action:none}.explode input{flex:1;accent-color:var(--accent);min-width:80px}.explode output{width:3.2em;text-align:right;color:var(--ink-2)}.explode .btn{min-width:88px}.tip{position:absolute;left:0;top:0;z-index:3;pointer-events:none;background:var(--ink);color:#f5f2ec;font-size:12px;padding:4px 8px;border-radius:4px;white-space:nowrap;box-shadow:0 4px 12px -2px #0000004d}.site-label{font:600 11px/1.2 var(--font);color:var(--ink-2);background:#fbf9f5d9;padding:2px 6px;border-radius:3px;white-space:nowrap}.site-label.corner{width:20px;height:20px;padding:0;display:grid;place-items:center;border-radius:50%;background:#1f6f73;color:#fff}.site-label.edge{font-weight:500;color:var(--muted)}.site-label.water{color:#2b6e80}.site-label.north{background:none;font-size:14px;color:var(--ink)}body.night .site-label.north{color:var(--paper)}.tabs{display:flex;border-bottom:1px solid var(--line);padding:0 8px;position:sticky;top:0;background:var(--sheet);z-index:1}.tabs button{border:0;background:none;padding:14px 10px 12px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button:hover{color:var(--ink)}.tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}.panel{padding:18px 16px 24px}.empty h3,.part h3,.site h3{font-size:17px;letter-spacing:-.01em}.empty p{color:var(--ink-2);margin:6px 0 16px}.part .group{margin:0 0 2px;color:var(--accent);font-size:12px;font-weight:600}.part .label{margin:2px 0 8px;color:var(--ink-2)}.part .spec{margin:0 0 14px;color:var(--ink);background:var(--paper);padding:8px 10px;border-radius:var(--radius)}.part h4,.bom-group{font-size:12px;font-weight:600;color:var(--muted);margin:18px 0 6px}.facts{margin:0;display:grid;gap:0}.facts div{display:grid;grid-template-columns:9.5em 1fr;gap:8px;padding:6px 0;border-top:1px solid var(--line)}.facts div:last-child{border-bottom:1px solid var(--line)}.facts dt{color:var(--muted)}.facts dd{margin:0}.fixlist{list-style:none;margin:0;padding:0}.fixlist li{padding:5px 0;border-top:1px solid var(--line)}.fixlist span{font-weight:600;display:inline-block;min-width:2.6em}.fixlist small{display:block;color:var(--muted);padding-left:2.6em}.part-actions{display:flex;gap:8px;margin:16px 0 6px}.link{border:0;background:none;padding:0;color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-align:left}.hint{color:var(--muted);font-size:12.5px;margin:14px 0 0}.bom-head{display:flex;gap:12px;align-items:flex-start;justify-content:space-between}.bom-head p{margin:0;color:var(--ink-2);font-size:13px}.bom,.dist{width:100%;border-collapse:collapse}.bom td,.dist td,.dist th{padding:7px 4px;border-top:1px solid var(--line);vertical-align:top;text-align:left}.bom tr{cursor:pointer}.bom tr:hover td{background:var(--paper)}.bom tr.hl td{background:var(--accent-soft)}.bom td small,.dist td small{display:block;color:var(--muted);font-size:12px;margin-top:1px}.bom strong{font-weight:600}.num{text-align:right!important;white-space:nowrap}.bom td.num{max-width:9.5em;white-space:normal;color:var(--ink-2);font-size:13px}.dist th{font-size:12px;color:var(--muted);font-weight:600;border-top:0}.site h3+*{margin-top:10px}.site h3:not(:first-child){margin-top:26px}.slider{display:grid;grid-template-columns:1fr auto;gap:2px 10px;margin-bottom:10px}.slider label{color:var(--ink-2)}.slider input{grid-column:1 / -1;accent-color:var(--accent);margin:0}.slider output{grid-row:1;grid-column:2;font-weight:600}.ok,.warn,.bad{display:inline-block;font-size:11px;font-weight:600;padding:1px 5px;border-radius:3px;margin-left:4px}.ok{color:var(--ok);background:var(--ok-bg)}.warn{color:var(--warn);background:var(--warn-bg)}.bad{color:var(--bad);background:var(--bad-bg)}.chip-mode[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.explode.off{opacity:.45}.tip strong{display:block;font-size:13px}.tip span{display:block;opacity:.85}.lay-label{font:600 11px/1.2 var(--font);color:var(--ink-2);background:#fbf9f5e0;padding:2px 6px;border-radius:3px;white-space:nowrap}.lay-label.hid{visibility:hidden}.lay-label.row{font-size:14px;color:var(--ink);background:none;padding:0;letter-spacing:-.01em}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.budget-total{background:var(--paper);border-radius:var(--radius);padding:12px 14px}.budget-total div{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.budget-total div span{color:var(--ink-2)}.budget-total strong{font-size:22px;letter-spacing:-.02em}.budget-total p{margin:6px 0 0;font-size:12px;color:var(--ink-2)}.badge{display:inline-block;font:600 11px/1.4 var(--font);padding:0 5px;border-radius:3px;font-style:normal}.badge.est{color:var(--warn);background:var(--warn-bg)}.badge.ok{color:var(--ok);background:var(--ok-bg)}.save-note{color:var(--bad)!important}.budget-actions{margin:14px 0 4px;display:grid;gap:10px}.budget-actions .btn{justify-self:start}.rfq{display:grid;grid-template-columns:1fr auto;gap:4px 8px;align-items:center}.rfq label{grid-column:1 / -1;font-size:12px;font-weight:600;color:var(--muted)}.budget select,.budget input{font:inherit;font-size:13px;color:var(--ink);background:var(--sheet);border:1px solid var(--line);border-radius:4px;padding:4px 6px;min-width:0}.budget input:focus-visible,.budget select:focus-visible{outline:2px solid var(--accent);outline-offset:0}.budget .bom-group{display:flex;justify-content:space-between}.blines{list-style:none;margin:0;padding:0}.bline{padding:8px 0 10px;border-top:1px solid var(--line)}.bl-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.bl-name{font-weight:600;color:var(--ink);text-decoration-color:var(--line-2)}.bl-total{font-weight:600;white-space:nowrap}.bl-qty{display:block;color:var(--muted);font-size:12px;margin:1px 0 6px}.bl-edit{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr) auto;gap:6px;align-items:center}.bl-edit label{display:flex;align-items:center;gap:4px;min-width:0}.bl-edit input{width:100%}.bl-price input{max-width:86px;text-align:right}.bl-price i{font-style:normal;color:var(--muted);font-size:12px;white-space:nowrap}.tabs button{padding-left:8px;padding-right:8px}@media (max-width: 1100px){.app{grid-template-columns:minmax(0,1fr) 320px}.title span{display:none}}@media (max-width: 860px){body{overflow:auto}.bar{height:auto;flex-wrap:wrap;padding:10px 16px;gap:10px 16px}.app{height:auto;display:flex;flex-direction:column}.stage{order:1;height:62vh;min-height:360px}.inspector{order:2;border:0;border-top:1px solid var(--line)}.seg{width:100%}.seg button{flex:1;padding:5px 6px;font-size:13px}.toggles{flex-wrap:wrap;row-gap:8px;width:100%}.toggles .seg{flex-basis:100%}.dock{padding:6px 8px 6px 12px}.dock-row{gap:8px}.dock-row label{display:none}.build output{width:7.5em;font-size:12px}}@media (max-width: 560px){#presets .long{display:none}}@media (prefers-reduced-motion: reduce){*{transition:none!important}}
