:root{--accent: #2e5a4e;--accent-light: #4a7a6c;--accent-dark: #1e3d34;--amber: #d9a441;--amber-dark: #b8862a;--bg: #f7f6f2;--surface: #ffffff;--surface-2: #efeee9;--on-surface: #1b1b1b;--on-variant: #5a5a5a;--border: #dedcd5;--danger: #b3261e;--danger-bg: #fbe9e7;--ok: var(--accent);--radius: 14px;--radius-sm: 9px;--shadow: 0 1px 2px rgba(0, 0, 0, .06), 0 6px 18px rgba(0, 0, 0, .05);color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg: #121413;--surface: #1c1f1d;--surface-2: #262a28;--on-surface: #ededea;--on-variant: #b3b8b5;--border: #333836;--danger: #f2b8b5;--danger-bg: #3b1f1d;color-scheme:dark}}:root[data-theme=dark]{--bg: #121413;--surface: #1c1f1d;--surface-2: #262a28;--on-surface: #ededea;--on-variant: #b3b8b5;--border: #333836;--danger: #f2b8b5;--danger-bg: #3b1f1d;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--on-surface);font:15px/1.45 Inter,Segoe UI,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--accent)}.app{display:flex;flex-direction:column;min-height:100%}.topbar{position:sticky;top:0;z-index:20;background:var(--accent-dark);color:#fff;padding-top:env(safe-area-inset-top)}.topbar-main{display:flex;align-items:center;gap:10px;padding:12px clamp(16px,2.5vw,40px)}.topbar h1{font-size:17px;margin:0;font-weight:600;letter-spacing:.2px}.topbar .sub{font-size:12px;opacity:.75;margin:0}.topbar .spacer{flex:1}.topbar button.icon{color:#fff}.topbar button.icon:hover{background:#ffffff29}.nav{display:flex;gap:4px;padding:0 clamp(12px,2.5vw,36px) 8px;overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav a{flex:0 0 auto;display:flex;align-items:center;gap:7px;padding:7px 12px;border-radius:999px;font-size:13px;text-decoration:none;color:#ffffffc7;white-space:nowrap;position:relative}.nav a:hover{background:#ffffff1f;color:#fff}.nav a.active{background:#fff;color:var(--accent-dark);font-weight:600}.nav .badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--amber);color:#1b1b1b;font-size:10px;font-weight:700;line-height:18px;text-align:center}.content{padding:14px clamp(16px,2.5vw,40px) 40px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}.card+.card{margin-top:12px}.card h2{margin:0 0 10px;font-size:15px}.card h3{margin:0 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.5px;color:var(--on-variant)}.stack{display:flex;flex-direction:column;gap:12px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.row.tight{gap:6px}.grow{flex:1;min-width:0}.muted{color:var(--on-variant)}.small{font-size:12.5px}.center{text-align:center}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}label.field{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--on-variant)}input[type=text],input[type=number],input[type=search],input[type=password],select,textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--on-surface);font:inherit}textarea{resize:vertical;min-height:76px}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-light);outline-offset:-1px}button{font:inherit;cursor:pointer;border:1px solid transparent;border-radius:var(--radius-sm);padding:9px 14px;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:7px}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:var(--surface);color:var(--on-surface);border-color:var(--border)}button.ghost{background:transparent;color:var(--accent);border-color:transparent;padding:7px 9px}button.danger{background:transparent;color:var(--danger);border-color:var(--border)}button.icon{background:transparent;border:none;color:var(--on-variant);padding:7px;border-radius:50%}button.icon:hover{background:#7f7f7f24}button.block{width:100%}.switch{display:flex;align-items:center;gap:10px}.switch input{width:42px;height:24px;accent-color:var(--accent)}.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--on-variant);font-size:12px;cursor:pointer}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.chip.flat{cursor:default;background:var(--surface-2)}.chip.amber{background:var(--amber);border-color:var(--amber);color:#1b1b1b}.banner{border-radius:var(--radius-sm);padding:10px 12px;font-size:13px}.banner.error{background:var(--danger-bg);color:var(--danger)}.banner.info{background:var(--surface-2);color:var(--on-variant)}.banner.ok{background:var(--surface-2);color:var(--ok)}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--border);border-top-color:var(--accent);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading{display:flex;align-items:center;gap:10px;color:var(--on-variant);padding:22px 4px}.empty{text-align:center;color:var(--on-variant);padding:34px 12px}.empty svg{opacity:.4;margin-bottom:10px}.item-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.item-row{display:flex;gap:12px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px;text-align:left;width:100%;color:inherit;box-shadow:var(--shadow)}.thumb{width:62px;height:62px;flex:none;border-radius:var(--radius-sm);object-fit:cover;background:var(--surface-2)}.thumb.placeholder{display:flex;align-items:center;justify-content:center;color:var(--on-variant)}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:10px}.gallery figure{margin:0;position:relative}.gallery img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--radius-sm);background:var(--surface-2)}.gallery figcaption{font-size:11px;color:var(--on-variant);margin-top:4px}.gallery .remove{position:absolute;top:5px;right:5px;background:#0000008c;color:#fff;border:none;border-radius:50%;width:26px;height:26px;padding:0}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);padding:30px 18px;text-align:center;background:var(--surface);color:var(--on-variant)}.dropzone.hot{border-color:var(--accent);background:var(--surface-2)}.tree-node{border-left:1px solid var(--border);margin-left:10px;padding-left:10px}.tree-row{display:flex;align-items:center;gap:8px;padding:7px 0}.tree-row .name{font-weight:500}.plan-wrap{position:relative;overflow:hidden;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);height:min(64vh,620px);touch-action:none}.plan-wrap.grabbing{cursor:grab}.plan-wrap.drawing{cursor:crosshair}.plan-stage{position:absolute;transform-origin:0 0}.plan-room{position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,rgba(127,127,127,.13) 0 1px,transparent 1px var(--grid)),repeating-linear-gradient(90deg,rgba(127,127,127,.13) 0 1px,transparent 1px var(--grid)),var(--surface);border:2px solid var(--accent);border-radius:6px}.marker{position:absolute;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;border:2px solid var(--accent);background:var(--surface);color:var(--accent);display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;box-shadow:var(--shadow)}.marker.sel{border-color:var(--amber);background:var(--amber);color:#1b1b1b}.marker.drag{cursor:grabbing}.reserve-strip{display:flex;gap:8px;overflow-x:auto;padding:10px 2px}.reserve-chip{flex:none;display:flex;align-items:center;gap:7px;padding:7px 12px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:inherit}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#00000073;display:flex;align-items:center;justify-content:center;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom))}.modal{background:var(--surface);width:100%;max-width:560px;max-height:100%;overflow-y:auto;border-radius:var(--radius);padding:18px}.modal h2{margin:0 0 14px;font-size:16px}.pager{display:flex;align-items:center;justify-content:center;gap:14px;padding:6px 0}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th,td{text-align:left;padding:7px 9px;border-bottom:1px solid var(--border);white-space:nowrap}th{color:var(--on-variant);font-weight:600}.icon-preview{width:44px;height:44px;flex:none;display:flex;align-items:center;justify-content:center;font-size:24px;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border)}.icon-grid{display:grid;gap:6px;grid-template-columns:repeat(auto-fill,minmax(42px,1fr));max-height:200px;overflow-y:auto;padding:4px;border:1px solid var(--border);border-radius:var(--radius-sm)}.icon-choice{aspect-ratio:1;padding:0;font-size:20px;background:var(--surface);color:inherit;border:1px solid transparent;border-radius:var(--radius-sm)}.icon-choice:hover{background:var(--surface-2)}.icon-choice.on{border-color:var(--accent);background:var(--surface-2)}.plan-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.plan-toolbar .swatches{display:flex;gap:5px}.swatch{width:24px;height:24px;padding:0;border-radius:50%;border:2px solid transparent}.swatch.on{border-color:var(--on-surface)}.swatch.big{width:28px;height:28px}.color-picker{display:flex;flex-direction:column;gap:5px}.color-picker .swatches{display:flex;gap:5px;flex-wrap:wrap}.color-picker .swatch{width:20px;height:20px;border-width:2px}.color-picker .swatch:hover{border-color:var(--on-variant)}.color-custom{margin-top:2px}.swatch.wheel{position:relative;overflow:hidden;cursor:pointer;width:26px;height:26px;border-color:var(--on-surface);box-shadow:0 0 0 2px var(--surface) inset}.swatch.wheel input[type=color]{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;width:200%;height:200%;padding:0;border:0;background:none;opacity:0;cursor:pointer}.color-picker input.hex{width:9ch;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:lowercase}.color-pop-wrap{position:relative;display:inline-flex}.color-pop{position:absolute;z-index:30;top:calc(100% + 6px);left:0;padding:10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:0 10px 30px #00000047}@media (max-width: 520px){.color-pop{left:auto;right:0}}.zone{position:absolute;border:1px solid currentColor;border-radius:6px;display:flex;align-items:flex-start;justify-content:flex-start;overflow:hidden;z-index:1}.zone.editable{cursor:move}.zone-label{font-size:11px;font-weight:600;padding:3px 6px;background:var(--surface);color:var(--on-surface);border-radius:0 0 6px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zone-handle{position:absolute;right:-6px;bottom:-6px;width:14px;height:14px;border-radius:3px;background:var(--surface);border:2px solid currentColor;cursor:nwse-resize}.zone-draft{position:absolute;z-index:2;border:2px dashed var(--accent);border-radius:6px;background:#4a7a6c2e;pointer-events:none}.marker{z-index:3}.autocomplete{position:relative}.autocomplete-list{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:40;margin:0;padding:4px;list-style:none;max-height:210px;overflow-y:auto;background:var(--surface);color:var(--on-surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow)}.autocomplete-list li{padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;font-size:13.5px}.autocomplete-list li.on{background:var(--surface-2)}.hw-tabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}.hw-tabs button{flex:0 0 auto;background:var(--surface);color:var(--on-variant);border:1px solid var(--border);border-radius:999px;padding:8px 14px;font-size:13px}.hw-tabs button.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.hw-tabs .badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--amber);color:#1b1b1b;font-size:10px;font-weight:700;line-height:18px}.hw-badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap;flex:none}.hw-badge.stock{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.hw-badge.buy{background:color-mix(in srgb,var(--amber) 28%,transparent);color:var(--amber-dark)}:root[data-theme=dark] .hw-badge.stock{color:var(--accent-light)}.hw-h3{margin:4px 0 0;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--on-variant)}.hw-grid2{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.hw-grid3{display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr))}.hw-pin-editor{display:flex;flex-direction:column;gap:6px}.hw-pin-row{flex-wrap:nowrap}.hw-pin-row select{width:min(290px,48%);flex:none;text-overflow:ellipsis}.hw-pin-num{width:56px!important;flex:none}.hw-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(330px,1fr))}.hw-row{display:flex;flex-direction:column;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;box-shadow:var(--shadow)}.hw-row.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.hw-row input[type=checkbox],.hw-detection input[type=checkbox],.hw-source input{width:18px;height:18px;accent-color:var(--accent);flex:none}.hw-thumb{width:40px;height:40px;border-radius:8px;object-fit:cover;flex:none}.hw-selbar{display:flex;align-items:center;gap:10px;background:var(--accent-dark);color:#fff;border-radius:var(--radius-sm);padding:8px 12px}.hw-preview{display:grid;gap:14px;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start}@media (max-width: 720px){.hw-preview{grid-template-columns:1fr}.hw-grid3{grid-template-columns:1fr 1fr}}.hw-preview-img{position:relative;border-radius:var(--radius-sm);overflow:hidden;background:var(--surface-2)}.hw-preview-img img{display:block;width:100%;height:auto}.hw-preview-img svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.hw-box rect{fill:none;stroke:var(--amber);stroke-width:3;vector-effect:non-scaling-stroke;opacity:.55}.hw-box.keep rect{stroke:#33d17a;opacity:.85}.hw-box.on rect{stroke-width:5;opacity:1}.hw-box text{fill:#fff;font-size:18px;font-weight:700;paint-order:stroke;stroke:#000;stroke-width:3px}.hw-detections{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.hw-detection{display:flex;flex-direction:column;gap:7px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px;background:var(--surface)}.hw-detection.keep{border-color:var(--accent-light)}.hw-detection.saved{opacity:.75}.hw-num{width:22px;height:22px;border-radius:50%;background:var(--surface-2);flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.hw-evidence{margin:0;padding-left:18px;font-size:12px;color:var(--on-variant)}.hw-conf{position:relative;width:84px;height:16px;border-radius:8px;background:var(--surface-2);overflow:hidden;flex:none;display:inline-block}.hw-conf>span{position:absolute;inset:0 auto 0 0;background:#33d17a;opacity:.55}.hw-conf.mid>span{background:var(--amber)}.hw-conf.low>span{background:var(--danger)}.hw-conf em{position:relative;font-style:normal;font-size:10.5px;font-weight:700;padding-left:6px;line-height:16px}.hw-photo-pick{padding:0;background:none;border:2px solid transparent;border-radius:var(--radius-sm)}.hw-photo-pick:hover{border-color:var(--accent)}.hw-photo-pick img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--radius-sm);display:block}.hw-source-grid{display:grid;gap:6px;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));max-height:320px;overflow-y:auto}.hw-source{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:var(--radius-sm);border:1px solid var(--border);font-size:13px;cursor:pointer;min-width:0}.hw-source.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.hw-bom{display:flex;flex-direction:column;gap:5px}.hw-ref{font:700 11px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--surface-2);border-radius:6px;padding:2px 6px;min-width:34px;text-align:center;flex:none}.hw-netlist td{vertical-align:top}.hw-kind{font:700 10px ui-monospace,monospace;padding:1px 5px;border-radius:5px;background:var(--surface-2)}.hw-kind.k-power{background:#fde2e1;color:#b3261e}.hw-kind.k-ground{background:#e5e5e5;color:#333}.hw-kind.k-i2c{background:#e0ecff;color:#1d4ed8}.hw-kind.k-spi{background:#efe3ff;color:#6d28d9}.hw-kind.k-uart{background:#dff7ee;color:#047857}.hw-kind.k-pwm,.hw-kind.k-analog{background:#fff2d6;color:#92400e}.hw-shopping{margin:0;padding-left:18px}.hw-warnings{margin:0;padding:8px 12px 8px 28px;border-radius:var(--radius-sm);background:var(--surface-2);font-size:12.5px;color:var(--on-variant)}.hw-pins td,.hw-pins th{padding:4px 8px}.autocomplete-list li.hw-other{border-top:1px solid var(--border);font-style:italic}.hw-asm-row{flex-wrap:wrap}.hw-asm-row select,.hw-asm-row input{width:auto;min-width:90px}.embedded .nav{display:none}.level-badge{font:700 13px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--accent)}textarea.mono{font:12.5px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace}.plan-card{border:1px solid var(--border);border-radius:var(--radius);padding:12px}.plan-pages{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}.plan-page{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px solid var(--border);border-radius:var(--radius-sm);opacity:.6}.plan-page.on{opacity:1;border-color:var(--accent)}.plan-page img{width:100%;aspect-ratio:1 / 1.1;object-fit:contain;background:#fff;border-radius:6px}.switch.small{font-size:13px}.switch.small input{width:18px;height:18px}.fe-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));align-items:end}.fe-vertices{display:flex;flex-direction:column;gap:6px}.fe-vertex{display:grid;grid-template-columns:26px 1fr 1fr 34px;gap:6px;align-items:center}.fe-vertex input{padding:7px 8px}.fe-vertex .idx{font:600 12px ui-monospace,monospace;color:var(--on-variant);text-align:center}.slope-row{border-top:1px dashed var(--border);padding-top:8px}.editor-page{display:flex;flex-direction:column;height:100vh;height:100dvh}.editor-floors{display:flex;gap:6px;align-items:center;overflow-x:auto;padding:8px clamp(16px,2.5vw,40px);border-bottom:1px solid var(--border);background:var(--surface)}.editor-floors .chip{white-space:nowrap}.floor-editor{flex:1;min-height:0;display:flex;flex-direction:column}.fe-toolbar{display:flex;gap:6px;align-items:center;overflow-x:auto;scrollbar-width:none;padding:8px clamp(16px,2.5vw,40px) 4px}.fe-toolbar .chip{white-space:nowrap;font-size:13px;padding:6px 11px}.fe-hint{padding:0 clamp(16px,2.5vw,40px) 6px;min-height:22px}.fe-bg-bar{display:flex;align-items:center;gap:10px;padding:0 clamp(16px,2.5vw,40px) 6px}.fe-bg-bar .fe-slider{flex:1;max-width:260px}.fe-bg-pct{min-width:38px;text-align:right}.fe-slider{width:100%;accent-color:var(--accent);margin:2px 0 0;height:22px}.fe-slider:disabled{opacity:.4}.fe-hint button.ghost{padding:2px 8px;font-size:12.5px}.fe-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 330px}.fe-canvas{width:100%;height:100%;display:block;touch-action:none;-webkit-user-select:none;user-select:none;background:var(--surface);border-top:1px solid var(--border);cursor:crosshair}.fe-canvas.tool-select{cursor:default}.fe-panel{overflow-y:auto;padding:12px;border-left:1px solid var(--border);background:var(--bg)}.fe-panel .card h2{font-size:14px}.fe-panel-toggle{display:none}@media (max-width: 820px){.fe-body{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto}.fe-panel{max-height:42vh;border-left:none;border-top:1px solid var(--border)}.fe-panel.folded{display:none}.fe-panel-toggle{display:inline-flex}.editor-page .topbar-main h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.fe-wall{fill:#3a3a3a;cursor:pointer}.fe-wall.sel{fill:var(--accent)}.fe-opening{fill:var(--surface);stroke:#3a3a3a;stroke-width:.01;cursor:pointer}.fe-opening.window{fill:#d8ecf4}.fe-opening.sel{fill:var(--amber)}.fe-glass{stroke:#3b8fb3;pointer-events:none}.fe-free{stroke:#888;stroke-dasharray:.1 .08;pointer-events:none}.fe-opening.french,.fe-opening.patio{fill:#d8ecf4}.fe-opening.through{fill:var(--surface);stroke-dasharray:.06 .04}.fe-opening.through.sel{fill:#f3dca9}.fe-door-arc{fill:none;stroke:#7a7a7a;stroke-dasharray:.08 .05;pointer-events:none}.fe-room{stroke:#50505073;stroke-dasharray:.12 .08;cursor:pointer}.fe-room.sel{stroke:var(--accent);stroke-dasharray:none}.fe-slope{stroke:#b5651d;cursor:pointer}.fe-slope.sel{stroke:var(--amber-dark)}.fe-hatch{stroke:#b5651d73}.fe-stair{fill:#9c74502e;stroke:#9c7450;cursor:pointer}.fe-stair.sel{fill:#d9a44159;stroke:var(--amber-dark)}.fe-tread{stroke:#9c7450;pointer-events:none}.fe-arrow{stroke:#9c4f1d;pointer-events:none}.fe-arrow-head{fill:#9c4f1d;pointer-events:none}.fe-hole{fill:#0000000f;stroke:#666;stroke-dasharray:.15 .1;pointer-events:none}.fe-outline{fill:none;stroke:#9aa;stroke-dasharray:.2 .12;pointer-events:none}.fe-outline.set{stroke:var(--accent-light);stroke-dasharray:none}.fe-ghost line{stroke:#2e5a4e2e;stroke-linecap:square;pointer-events:none}.fe-label{fill:var(--on-surface);pointer-events:none;paint-order:stroke;stroke:var(--surface);stroke-width:.03}.fe-handle{fill:#fff;stroke:var(--accent);cursor:grab}.fe-handle.outline{stroke:var(--accent-light)}.fe-draft{fill:#d9a44126;stroke:var(--amber-dark);stroke-dasharray:.1 .06;pointer-events:none}.fe-draft-pt{fill:var(--amber-dark);pointer-events:none}.fe-calib{stroke:#d33;pointer-events:none}.viewer-page{display:flex;flex-direction:column;height:100vh;height:100dvh}.viewer{position:relative;flex:1;min-height:0;overflow:hidden;background:#dfe8ec}.viewer-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.viewer-canvas canvas{display:block}.viewer-empty{padding:40px;text-align:center;color:var(--on-variant)}.viewer-hud{position:absolute;z-index:2;display:flex;flex-direction:column;gap:6px;color:#1b1b1b;pointer-events:none}.viewer-hud>*{pointer-events:auto}.viewer-hud.top-left{top:12px;left:12px;background:#ffffffd9;padding:8px 12px;border-radius:var(--radius-sm);box-shadow:var(--shadow);gap:2px;max-width:60%}.viewer-hud.top-left a{color:var(--accent)}.viewer-hud.top-right{top:12px;right:12px;align-items:flex-end}.viewer .seg{display:flex;background:#ffffffe6;border-radius:999px;padding:3px;box-shadow:var(--shadow)}.viewer .seg.vertical{flex-direction:column;border-radius:12px}.viewer .seg button{background:transparent;color:#333;border:none;padding:6px 12px;border-radius:999px;font-size:13px}.viewer .seg.vertical button{border-radius:9px;text-align:right}.viewer .seg button.on{background:var(--accent);color:#fff;font-weight:600}.viewer-toggle{display:flex;align-items:center;gap:6px;font-size:12.5px;background:#ffffffe6;padding:5px 10px;border-radius:999px;box-shadow:var(--shadow)}.viewer-toggle input{width:16px;height:16px;accent-color:var(--accent)}.viewer-stairs{position:absolute;z-index:3;left:50%;bottom:72px;transform:translate(-50%);font-size:16px;padding:12px 22px;border-radius:999px;box-shadow:0 6px 24px #00000040}.viewer-hint{position:absolute;z-index:1;left:50%;bottom:14px;transform:translate(-50%);background:#00000073;color:#fff;font-size:12px;padding:5px 12px;border-radius:999px;white-space:nowrap;max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;pointer-events:none}.viewer-minimap-wrap{position:absolute;z-index:4;left:12px;bottom:44px;width:min(38vw,200px);height:min(38vw,200px);background:#ffffffe0;border-radius:var(--radius-sm);box-shadow:var(--shadow);transition:width .15s,height .15s}.viewer-minimap-wrap.big{width:min(calc(100% - 24px),560px);height:min(calc(100% - 120px),560px);bottom:44px}.viewer-minimap{width:100%;height:100%;display:block;cursor:crosshair;touch-action:none}.viewer-minimap-wrap .mm-expand{position:absolute;top:4px;right:4px;padding:3px 7px;font-size:13px;line-height:1;background:#fffffff2;color:#333;border:1px solid var(--border);border-radius:6px}.viewer-minimap-wrap .mm-help{position:absolute;left:6px;bottom:4px;font-size:10.5px;color:#555;pointer-events:none}.mm-floor{fill:#f2efe8}.mm-room{fill:#2e5a4e14;stroke:#2e5a4e40;stroke-width:.04}.mm-stair{fill:#9c745059}.mm-wall{stroke:#333;stroke-linecap:square}.mm-cone{fill:#d9a44173}.mm-label{fill:#333;pointer-events:none}.mm-dot{fill:#d33;stroke:#fff;stroke-width:.08}.joy{position:absolute;z-index:3;border-radius:50%;pointer-events:none;background:#ffffff2e;border:2px solid rgba(255,255,255,.7);display:flex;align-items:center;justify-content:center}.joy-knob{width:44%;height:44%;border-radius:50%;background:#ffffffd9;box-shadow:0 2px 8px #0000004d}@media (max-width: 600px){.viewer-hud.top-left{max-width:48%;font-size:13px}.viewer .seg button{padding:5px 9px;font-size:12px}}.ww-layout{display:grid;grid-template-columns:minmax(300px,400px) minmax(0,1fr);gap:14px;align-items:start}@media (max-width: 900px){.ww-layout{grid-template-columns:1fr}}.ww-side .card+.card,.ww-main .card+.card{margin-top:0}.ww-examples{display:flex;flex-direction:column;gap:6px}.ww-examples .chip{text-align:left;white-space:normal;padding:6px 10px;border-radius:var(--radius-sm)}.ww-assumptions{background:var(--surface-2);border-radius:var(--radius-sm);padding:8px 12px}.ww-assumptions ul{margin:4px 0 0;padding-left:18px}.ww-stepper{display:flex;align-items:center;gap:8px}.ww-stepper button{padding:4px 12px;font-size:16px;line-height:1.2}.ww-stepper span{min-width:22px;text-align:center;font-weight:600}.ww-projects{display:flex;flex-direction:column;gap:4px}.ww-project{display:flex;align-items:center;gap:4px;border-radius:var(--radius-sm)}.ww-project.on{background:var(--surface-2)}.ww-project button.ghost{text-align:left;color:var(--on-surface)}.ww-summary{display:flex;flex-direction:column;gap:4px}.ww-warning{background:#fff4dc;color:#6b4a00}.ww-table{font-size:13px}.ww-table th{text-align:left;white-space:nowrap;color:var(--on-variant);font-weight:600;border-bottom:1px solid var(--border);padding:6px 8px}.ww-table td{border-bottom:1px solid var(--border);padding:6px 8px;vertical-align:top}.ww-table td:nth-child(2),.ww-table td:nth-child(3),.ww-table td:nth-child(4),.ww-table td:nth-child(5){white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums}.ww-table td.small{min-width:240px;color:var(--on-variant)}.ww-table tr{cursor:pointer}.ww-table tr.sel td{background:color-mix(in srgb,var(--amber) 22%,transparent)}.ww-panel-total+.ww-panel-total:before{content:" · "}.ww-3d{padding:0;overflow:hidden}.ww-viewer{position:relative;height:min(70vh,620px);min-height:360px}.ww-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.ww-canvas canvas{display:block}.ww-viewer-tools{position:absolute;top:10px;right:10px;display:flex;gap:6px}.ww-selected{padding:10px 14px;border-top:1px solid var(--border)}.ww-sheet{margin:0}.ww-sheet svg{width:100%;height:auto;display:block}.ww-board{fill:#f3e6cf;stroke:#a88b5d;stroke-width:4}.ww-grain line{stroke:#a88b5d;stroke-width:6}.ww-grain path{fill:#a88b5d}.ww-grain text{fill:#8a6d40;font-size:34px}.ww-piece rect{fill:#e2c696;stroke:#6b5230;stroke-width:3;cursor:pointer}.ww-piece.sel rect{fill:#f0b866;stroke:#9a5a12;stroke-width:6}.ww-piece text{fill:#3d2d18;pointer-events:none}.ww-cell{width:76px;padding:4px 6px;text-align:right;font-variant-numeric:tabular-nums}.ww-table td:nth-child(2) .ww-cell{width:48px}.ww-table td.mod .ww-cell{background:color-mix(in srgb,var(--amber) 28%,var(--surface));border-color:var(--amber-dark);font-weight:600}.ww-table td.ww-name{white-space:nowrap}.ww-reset{padding:0 6px;margin-left:4px;font-size:15px;color:var(--amber-dark)}.ww-table tr.qty0 td{opacity:.55}.ww-ref{font:700 20px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.5px;color:var(--accent)}.ww-ref.big{font-size:44px;padding:12px 18px;border:3px dashed var(--accent);border-radius:var(--radius);display:inline-block;align-self:center}.ww-panels{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.ww-panel-card{display:flex;gap:10px;text-align:left;align-items:stretch;padding:10px;background:var(--surface);color:inherit;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.ww-panel-card img,.ww-panel-ph{width:76px;height:76px;object-fit:cover;border-radius:var(--radius-sm);flex:none}.ww-panel-ph{display:flex;align-items:center;justify-content:center;background:#ead8b8;color:#6b5230;font-size:11px;text-align:center;padding:4px}.ww-panel-body{display:flex;flex-direction:column;gap:2px;min-width:0}.ww-badges{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}.ww-badge{font-size:11px;padding:1px 7px;border-radius:999px;background:var(--surface-2);color:var(--on-variant)}.ww-badge.wear-0,.ww-badge.wear-1{background:#dff1e6;color:#1f6b3a}.ww-badge.wear-2{background:#fff2d6;color:#7a5200}.ww-badge.wear-3,.ww-badge.warn{background:#fde2e1;color:#9b2b23}.ww-panel-photo{max-width:100%;max-height:220px;object-fit:contain;border-radius:var(--radius-sm);align-self:flex-start}.ww-stock-sheet{border-top:1px solid var(--border);padding-top:10px}.ww-stock-thumb{width:54px;height:54px;object-fit:cover;border-radius:8px}.ww-note{color:#7a5200}.ww-piece.seg rect{fill:#f3d39c;stroke-dasharray:18 10}.ww-warning ul{margin:4px 0 0;padding-left:18px}.diy-tabs{display:flex;gap:4px;padding:8px clamp(16px,2.5vw,40px) 0;border-bottom:1px solid var(--border);background:var(--surface);overflow-x:auto}.diy-tabs a{padding:8px 14px;border-radius:10px 10px 0 0;text-decoration:none;color:var(--on-variant);font-weight:500;border-bottom:3px solid transparent;white-space:nowrap}.diy-tabs a.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:700}.embedded .diy-tabs{display:none}.print-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.print-card{display:flex;flex-direction:column;gap:6px;text-align:left;padding:14px;color:inherit;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.print-card p{margin:0;white-space:pre-line;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;color:var(--on-variant)}.ww-versions{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto}.ww-version{display:flex;gap:10px;align-items:flex-start;text-align:left;padding:8px 10px;color:inherit;background:transparent;border:1px solid transparent;border-radius:var(--radius-sm)}.ww-version:hover{background:var(--surface-2)}.ww-version.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 7%,transparent)}.ww-version .grow{display:flex;flex-direction:column;gap:1px;min-width:0}.ww-vnum{font:700 13px ui-monospace,monospace;color:var(--accent);min-width:28px}.ww-vreq{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ww-viewing{display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:#e8f0ff;color:#1d3a7a}.ww-fieldset{border:none;padding:0;margin:0;min-width:0}.ww-fieldset:disabled{opacity:.75}.fab-options{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.fab-option{border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;display:flex;flex-direction:column;gap:4px}.fab-option p{margin:0}.fab-option.best{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent)}.fab-option.lacking{opacity:.72}.fab-missing{color:#9b2b23;font-weight:600}.fab-steps{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:10px}.fab-steps p{margin:2px 0 0}.tools-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));align-items:start}.tools-grid .card+.card{margin-top:0}.ww-project-open{display:flex;align-items:center;gap:10px}.ww-thumb{width:56px;height:56px;flex:none;border-radius:8px;background:var(--surface-2);object-fit:contain;padding:3px}.ww-absorbed{background:#e6f4ea;color:#1f5a33}.hq{--hq-bg: #0d1013;--hq-panel: #161b20;--hq-panel-2: #1d2329;--hq-line: #2a323a;--hq-text: #e6e1d6;--hq-muted: #8d969e;--hq-amber: #f0a020;--hq-amber-d: #b8770f;--hq-red: #ff6b4a;background:var(--hq-bg);color:var(--hq-text);min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.hq .content{color:var(--hq-text)}.hq-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:stretch;justify-content:space-between;padding:10px clamp(12px,2vw,28px);background:linear-gradient(#161b20,#12161a);border-bottom:1px solid var(--hq-line)}.hq-zones{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.hq-zones button,.hq-zones select,.hq-select{background:var(--hq-panel-2);color:var(--hq-text);border:1px solid var(--hq-line);border-radius:6px;padding:7px 12px;font-size:13px;font-weight:600;letter-spacing:.2px;width:auto}.hq-zones button.on{border-color:var(--hq-amber);color:#111;background:var(--hq-amber)}.hq-zones button.k-electronics:not(.on){border-color:#2c6a72}.hq-zones button.k-woodwork:not(.on){border-color:#7a5a30}.hq-kpis{display:flex;flex-wrap:wrap;gap:8px}.hq-kpi{display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-width:118px;background:var(--hq-panel-2);border:1px solid var(--hq-line);border-left:3px solid var(--hq-amber-d);border-radius:6px;padding:6px 12px;color:var(--hq-text);text-align:left;cursor:default}.hq-kpi:not(:disabled){cursor:pointer}.hq-kpi:disabled{opacity:1}.hq-kpi strong{font:700 20px/1.1 ui-monospace,SFMono-Regular,Menlo,monospace;color:#fff}.hq-kpi-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--hq-muted)}.hq-kpi-sub{font-size:11px;color:var(--hq-muted)}.hq-kpi.alert{border-left-color:var(--hq-red)}.hq-kpi.alert strong{color:var(--hq-red)}.hq-kpi.on{box-shadow:0 0 0 1px var(--hq-amber) inset;background:#2a2416}.hq-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px clamp(12px,2vw,28px);background:#11151a;border-bottom:1px solid var(--hq-line);font-size:13px}.hq-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;cursor:pointer;border:1px solid var(--hq-line);background:var(--hq-panel);color:var(--hq-text);-webkit-user-select:none;user-select:none}.hq-chip input{accent-color:var(--hq-amber);width:14px;height:14px}.hq-chip.on{border-color:var(--hq-amber);color:var(--hq-amber)}.hq-count{color:var(--hq-amber);font-weight:600}.hq-filters.folded{padding-block:4px}.hq-fold{display:inline-flex;align-items:center;gap:6px;width:auto;padding:4px 10px;border-radius:6px;background:transparent;border:1px solid transparent;color:var(--hq-muted);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;cursor:pointer}.hq-fold:hover{color:var(--hq-text);border-color:var(--hq-line)}.hq-caret{font-size:11px;width:10px}.hq-badge{background:var(--hq-amber);color:#111;border-radius:999px;padding:0 6px;font-size:11px;line-height:16px}.hq-fullbtn{position:absolute;left:10px;top:10px;z-index:6;width:36px;height:36px;padding:0;display:grid;place-items:center;font-size:18px;line-height:1;cursor:pointer;background:#0d1013d9;color:var(--hq-text);border:1px solid var(--hq-line);border-radius:6px}.hq-fullbtn:hover{border-color:var(--hq-amber);color:var(--hq-amber)}.hq-viewport.full{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;max-width:none;width:auto;aspect-ratio:auto;border:0;border-radius:0;box-shadow:none;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}.hq-viewport.full .hq-fullbtn{top:calc(10px + env(safe-area-inset-top,0px));left:calc(10px + env(safe-area-inset-left,0px))}.hq-stage{flex:1;display:flex;justify-content:center;align-items:flex-start;padding:10px clamp(8px,1.5vw,24px) 18px}.hq-viewport{position:relative;width:100%;max-width:calc((100dvh - 230px) * 16 / 9);aspect-ratio:16 / 9;min-width:0;border:1px solid var(--hq-line);border-radius:8px;overflow:hidden;background:#0d1013;box-shadow:0 0 0 1px #000,0 12px 40px #00000073}@media (max-width: 700px){.hq-viewport{max-width:none;aspect-ratio:16 / 9}}.hq-viewport canvas{display:block}.hq-viewport .loading{color:var(--hq-muted)}.hq-hint{position:absolute;left:50%;top:10px;transform:translate(-50%);background:#0d1013d9;border:1px solid #2b5c8a;color:#9cc9ff;padding:5px 12px;border-radius:999px;font-size:12px;white-space:nowrap}.hq-label{pointer-events:none}.hq-tag{display:inline-block;white-space:nowrap;font:600 11px/1 Inter,system-ui,sans-serif;letter-spacing:.3px;padding:4px 7px;border-radius:4px;background:#0d1013d1;color:var(--hq-text, #e6e1d6);border-left:3px solid #6b7680;transform:translateY(-100%)}.hq-tag.k-electronics{border-left-color:#36c6d3}.hq-tag.k-woodwork{border-left-color:#e8a33a}.hq-tag.k-storage{border-left-color:#7b8fa6}.hq-panel{position:absolute;top:10px;right:10px;bottom:10px;width:min(330px,46%);display:flex;flex-direction:column;background:#161b20f5;border:1px solid var(--hq-line);border-top:3px solid var(--hq-amber);border-radius:6px;box-shadow:0 10px 30px #00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}@media (max-width: 700px){.hq-panel{top:auto;left:8px;right:8px;width:auto;max-height:70%}}.hq-panel-head{display:flex;gap:8px;padding:10px 12px 6px;border-bottom:1px solid var(--hq-line)}.hq-panel-head h2{margin:2px 0 0;font-size:16px;color:#fff}.hq-kicker{font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--hq-amber)}.hq-close{background:transparent;border:none;color:var(--hq-muted);font-size:16px;padding:2px 6px}.hq-panel-body{padding:10px 12px;overflow-y:auto;display:flex;flex-direction:column;gap:7px;font-size:13px}.hq-row{display:flex;justify-content:space-between;gap:10px;border-bottom:1px dashed #262d34;padding-bottom:5px}.hq-row span{color:var(--hq-muted)}.hq-row strong{text-align:right;font-weight:600}.hq .alert{color:var(--hq-red)!important}.hq-photo{width:100%;max-height:160px;object-fit:cover;border-radius:4px;border:1px solid var(--hq-line)}.hq-stock{display:flex;align-items:center;gap:6px}.hq-stock>span:first-child{color:var(--hq-muted);margin-right:auto}.hq-stock button{background:var(--hq-panel-2);color:var(--hq-text);border:1px solid var(--hq-line);border-radius:4px;padding:2px 10px}.hq-stock strong{font:700 18px ui-monospace,monospace;min-width:30px;text-align:center}.hq-stock input,.hq-field input,.hq-field select{background:#0f1317;color:var(--hq-text);border:1px solid var(--hq-line);border-radius:4px;padding:5px 8px;font-size:13px}.hq-stock input{width:64px}.hq-muted{color:var(--hq-muted);font-size:12px}.hq-field{display:flex;flex-direction:column;gap:3px}.hq-field>span{color:var(--hq-muted);font-size:12px}.hq-alert{background:#ff6b4a1f;border:1px solid rgba(255,107,74,.4);color:var(--hq-red);padding:5px 8px;border-radius:4px}.hq-safety{background:#f0a0201a;border:1px solid rgba(240,160,32,.35);border-radius:4px;padding:7px 9px}.hq-safety strong{color:var(--hq-amber);font-size:12px;text-transform:uppercase;letter-spacing:.6px}.hq-safety p{margin:3px 0 0}.hq-desc{color:#c3bcae;margin:0;white-space:pre-line}.hq-link{color:var(--hq-amber);font-weight:600;text-decoration:none;margin-top:4px}.hq-list{margin:0;padding-left:16px;color:#c3bcae;max-height:200px;overflow-y:auto}.hq-actions{display:flex;flex-wrap:wrap;gap:6px}.hq-actions button{background:var(--hq-panel-2);color:var(--hq-text);border:1px solid var(--hq-line);border-radius:4px;padding:5px 10px;font-size:12.5px}.hq .banner.error{margin:8px clamp(12px,2vw,28px) 0}
