:root{--bg:#15191e;--panel:#1d2228;--raised:#262c34;--line:#333b45;--fg:#dfe4ea;--muted:#8c96a3;--accent:#5fb0e8;--accent-fg:#0d1a24;--error:#f0605d;--warning:#e9b949;--current:#24384a;--viewport:#1b1f24;--ui:"IBM Plex Sans",system-ui,sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace;--buncss-light: ;--buncss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#eef1f4;--panel:#f8f9fb;--raised:#fff;--line:#d3d9e0;--fg:#1b2129;--muted:#5d6874;--accent:#1f6fae;--accent-fg:#fff;--error:#c93a37;--warning:#a8780c;--current:#d6e8f7;--buncss-light:initial;--buncss-dark: ;color-scheme:light}}.stage{--bg:#15191e;--panel:#1d2228;--raised:#262c34;--line:#333b45;--fg:#dfe4ea;--muted:#8c96a3;--accent:#5fb0e8;--accent-fg:#0d1a24;--error:#f0605d;--warning:#e9b949;--current:#24384a;--buncss-light: ;--buncss-dark:initial;color-scheme:dark;color:var(--fg);background:var(--viewport)}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--fg);font:13px/1.4 var(--ui);overflow:hidden;overflow-wrap:anywhere;margin:0}h1,h2,h3,h4,h5{font-size:inherit;margin:0;font-weight:400}code{font:12px var(--mono)}fieldset{border:1px solid var(--line);border-radius:4px;min-width:0;margin:6px 0;padding:6px 8px}legend{color:var(--muted);padding:0 2px;font-size:11px}label{display:inline-flex;align-items: center;gap:4px}summary{cursor:pointer;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;padding:4px 0;font-size:11px}button{font:inherit;color:var(--fg);background:var(--raised);border:1px solid var(--line);cursor:pointer;border-radius:4px;padding:3px 10px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}button.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent);min-width:64px}button.link{color:var(--accent);background:0 0;border:none}button.on,button[aria-pressed=true],button[role=radio][aria-checked=true],button[role=tab][aria-selected=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}.mode-toggle,.tabs,span[role=group]{display:inline-flex}:-webkit-any(.mode-toggle,.tabs,span[role=group])>button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}:-moz-any(.mode-toggle,.tabs,span[role=group])>button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}:is(.mode-toggle,.tabs,span[role=group])>button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}:-webkit-any(.mode-toggle,.tabs,span[role=group])>button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}:-moz-any(.mode-toggle,.tabs,span[role=group])>button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}:is(.mode-toggle,.tabs,span[role=group])>button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}:-webkit-any(.mode-toggle,.tabs,span[role=group])>button:hover{position:relative}:-moz-any(.mode-toggle,.tabs,span[role=group])>button:hover{position:relative}:is(.mode-toggle,.tabs,span[role=group])>button:hover{position:relative}:-webkit-any(.mode-toggle,.tabs,span[role=group])>button:focus-visible{position:relative}:-moz-any(.mode-toggle,.tabs,span[role=group])>button:focus-visible{position:relative}:is(.mode-toggle,.tabs,span[role=group])>button:focus-visible{position:relative}.twisty,.cabinet-name,.section-name,.problems-toggle,.problem-link,.origin-link,.section-menu .breadcrumb button{color:inherit;text-align:left;background:0 0;border:none;padding:0}.danger{color:var(--error);border-color:var(--error)}button.danger:hover:not(:disabled){border-color:var(--error)}input:not(:-webkit-any([type=checkbox],[type=radio],[type=range],[type=color],[type=file])),select,textarea{font:12px var(--mono);color:var(--fg);background:var(--raised);border:1px solid var(--line);border-radius:4px;width:100%;min-width:0;padding:3px 5px}input:not(:-moz-any([type=checkbox],[type=radio],[type=range],[type=color],[type=file])),select,textarea{font:12px var(--mono);color:var(--fg);background:var(--raised);border:1px solid var(--line);border-radius:4px;width:100%;min-width:0;padding:3px 5px}input:not(:is([type=checkbox],[type=radio],[type=range],[type=color],[type=file])),select,textarea{font:12px var(--mono);color:var(--fg);background:var(--raised);border:1px solid var(--line);border-radius:4px;width:100%;min-width:0;padding:3px 5px}input:not(:-webkit-any([type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}input:not(:-moz-any([type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}input:not(:is([type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}input[aria-invalid=true],select[aria-invalid=true]{border-color:var(--error)}input[type=range],input[type=checkbox],input[type=radio]{accent-color:var(--accent);margin:0}input[type=color]{background:var(--raised);border:1px solid var(--line);border-radius:4px;height:22px;padding:1px}input[type=number]{font-variant-numeric:tabular-nums}.card,.modal,.undo-toast,.row-menu,.section-menu,.formula-suggestions{background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 4px 16px #00000040}.panelhead,.problems{display:flex;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-bottom:1px solid var(--line);justify-content:space-between;align-items: center;padding:6px 10px;font-size:11px}.notice{border:1px solid var(--warning);color:var(--fg);background:var(--raised);border-radius:4px;padding:6px 8px}.muted{color:var(--muted)}.small{font-size:11px}.empty{color:var(--muted);padding:8px 10px}.field-error{color:var(--error);font-size:11px}.dot{display:inline-block;border-radius:50%;flex:none;width:8px;height:8px}.dot.error{background:var(--error)}.dot.warning{background:var(--warning);border-radius:1px;transform:rotate(45deg)scale(.85)}.dot.info{border:1px solid var(--muted)}.workbench{display:grid;grid-template:"header header header" auto "sidebar centre inspector" minmax(0,1fr)"problems problems problems" auto/300px minmax(0,1fr)340px;height:100%}.region-header{grid-area:header}.region-sidebar{grid-area:sidebar;overflow-y:auto;border-right:1px solid var(--line);background:var(--panel);min-height:0}.region-centre{grid-area:centre;min-width:0;min-height:0}.region-inspector{grid-area:inspector;overflow-y:auto;border-left:1px solid var(--line);background:var(--panel);min-height:0}.region-problems{grid-area:problems;border-top:1px solid var(--line);background:var(--panel)}.header{display:flex;border-bottom:1px solid var(--line);background:var(--panel);align-items: center;gap:12px;padding:6px 12px}.header .spacer{flex:1}.archive-actions{display:flex;gap:6px}.last-step{color:var(--muted)}.undo-redo{display:flex;gap:4px}.undo-redo button{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:280px}.undo-toast{position:fixed;z-index:20;display:flex;align-items: center;gap:12px;padding:8px 10px;bottom:16px;left:16px}.problems-badge{display:inline-flex;align-items: center;gap:6px}.problems-badge .checking{color:var(--muted)}.sidebar>.toolbar{padding:8px 10px 0}.folder-tree{padding:6px 10px 8px}.toolbar{display:flex;gap:6px;margin-bottom:6px}[role=tree],ul[role=group]{list-style:none;margin:0;padding-left:12px}[role=tree]{padding-left:0}.tree-row{position:relative;display:flex;border-radius:4px;align-items: center;gap:4px;min-height:22px;padding:1px 4px}.tree-row:hover{background:var(--raised)}.tree-cabinet.open>.tree-row,.section-tree .tree-row.selected{background:var(--current)}.twisty{color:var(--muted);text-align:center;width:16px}.cabinet-name{display:flex;flex:1;align-items: center;gap:6px;min-width:0;padding:0 4px}.cabinet-name .label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.preview-thumb{background:var(--viewport);overflow:hidden;border-radius:3px;flex:none;width:32px;height:32px}.preview-thumb img{display:block;object-fit:contain;width:100%;height:100%}.folder-name{color:var(--fg)}.badge-error{color:var(--error);font-size:10px;font-weight:600}.name-field{display:inline-flex;flex-direction:column;flex:1;gap:2px;min-width:0}.row-menu{position:fixed;z-index:50;display:flex;flex-direction:column;min-width:140px;padding:4px}.row-menu [role=menuitem]{text-align:left;background:0 0;border:none;padding:3px 8px}.row-menu [role=menuitem]:hover{background:var(--raised);outline:none}.row-menu [role=menuitem]:focus-visible{background:var(--raised);outline:none}.row-menu [role=menuitem].danger{color:var(--error)}.preview-image{aspect-ratio:1;background:var(--viewport);overflow:hidden;border-radius:4px}.description{color:var(--muted);margin:0;font-size:11px}.modal-backdrop{position:fixed;display:flex;z-index:100;background:#0000004d;justify-content:center;align-items: center;inset:0}.modal{overflow:auto;display:flex;flex-direction:column;gap:8px;max-width:900px;max-height:85vh;padding:12px}.modal>h2{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:11px}.modal h3{color:var(--muted);margin-top:4px;font-size:11px}.modal p{margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:4px}.picker-grid{list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));border:1px dashed var(--line);border-radius:6px;gap:6px;margin:0;padding:6px}.picker-card{text-align:left;display:flex;flex-direction:column;gap:4px;width:100%;height:100%;padding:6px}.picker-card .preview-card{display:flex;flex-direction:column;gap:4px}.centre{display:flex;flex-direction:column;height:100%;min-height:0}.centre>.tabs{border-bottom:1px solid var(--line);background:var(--panel);padding:6px 10px}.view-area{overflow:auto;flex:1;min-height:0;padding:8px}.view-area>.empty{padding:0}.empty-library{display:flex;flex-direction:column;justify-content:center;align-items: center;gap:8px;height:100%}.load-errors{color:var(--fg);padding:8px 10px}.load-errors ul{margin:4px 0;padding-left:16px}.load-errors code{color:var(--error)}.all-four{display:grid;gap:8px;height:100%}.view-area:has(>.all-four){overflow:hidden}.all-four{grid-template-columns:minmax(0,1fr)minmax(0,1fr);grid-template-rows:minmax(0,1fr)minmax(0,1fr);overflow:hidden;min-height:0}.all-four>*{border:1px solid var(--line);background:var(--viewport);border-radius:6px;min-width:0;height:auto;min-height:0}.all-four .front-view{padding:0 8px 8px}.all-four .front-view .view-toolbar{overflow:hidden;white-space:nowrap;flex-wrap:nowrap;flex:none;height:28px;min-height:28px}.all-four .front-drawing{margin:auto}.view-placeholder{border:1px dashed var(--line);display:flex;color:var(--muted);border-radius:6px;justify-content:center;align-items: center;min-height:160px}.inspector{display:flex;flex-direction:column;gap:6px;padding:8px 10px}.inspector>h2{font-size:13px}.cabinet-facts{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0;font-size:12px}.cabinet-facts dt{color:var(--muted)}.cabinet-facts dd{text-align:right;font-variant-numeric:tabular-nums;margin:0}.inspector>.tabs{margin:4px 0 2px}.tab-panel h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:8px 0 4px;font-size:11px}.problems{border-bottom:none;flex-wrap:wrap;justify-content:flex-start;gap:0 10px}.problems-toggle{color:inherit;text-transform:inherit;letter-spacing:inherit}.problems-toggle:before{content:"▸ "}.problems-toggle[aria-expanded=true]:before{content:"▾ "}.problems-summary{text-transform:none;letter-spacing:0;font-variant-numeric:tabular-nums}.problems.open ul{overflow-y:auto;border-top:1px solid var(--line);text-transform:none;letter-spacing:0;color:var(--fg);flex-basis:100%;max-height:30vh;margin:6px -10px -6px;padding:0;font-size:12px}.problems ul>li{list-style:none;border-bottom:1px solid var(--line);padding:2px 10px}.problem{display:grid;grid-template-columns:14px 64px minmax(0,1fr)auto;align-items:baseline;gap:0 6px}.problem:hover{background:var(--raised)}.problem .dot{align-self: center}.problem-severity{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:10px}.problem-link:hover{text-decoration:underline}.problem-path{color:var(--muted);text-align:right;font-size:11px}.front-view{position:relative;display:flex;flex-direction:column;height:100%;min-height:160px;margin:0}.front-view .view-toolbar{display:flex;color:var(--muted);align-items: center;gap:8px;min-height:28px;font-size:11px}.front-view .view-toolbar button{padding:1px 8px;font-size:11px}.front-drawing{font-family:var(--mono);flex:1;width:100%;min-height:0}.front-drawing .part{fill:none;stroke:currentColor;stroke-width:.6;vector-effect:non-scaling-stroke}.front-drawing .part.front{fill:color-mix(in srgb,currentColor 6%,transparent)}.front-drawing .part.hidden{stroke-dasharray:4 3;opacity:.5}.front-drawing .dim line{stroke:var(--muted);stroke-width:.5;vector-effect:non-scaling-stroke}.front-drawing text{fill:currentColor;paint-order:stroke;stroke:var(--viewport);stroke-width:3px;stroke-linejoin:round}.front-drawing .selected .opening{fill:none;stroke:var(--accent);stroke-dasharray:6 4;stroke-width:1;vector-effect:non-scaling-stroke}.front-drawing .selected .tag{fill:var(--accent);font-weight:600}.front-drawing .selected .hardware circle{fill:var(--accent)}.front-drawing .niche{fill:var(--muted);font-style:italic}.front-drawing .hit rect{fill:transparent;cursor:pointer}.front-drawing .hit rect:hover{fill:#ffd16624;stroke:#ffd166;stroke-width:1;vector-effect:non-scaling-stroke}.section-menu{position:absolute;display:flex;flex-direction:column;gap:6px;max-width:320px;padding:6px 8px;font-size:12px;top:34px;right:10px}.section-menu .breadcrumb{font:12px var(--mono)}.section-menu .breadcrumb button{color:var(--accent);cursor:pointer;font:inherit}.section-menu .breadcrumb button:hover{text-decoration:underline}.section-menu .breadcrumb button[aria-current]{color:inherit}.section-menu .breadcrumb .close{float:right;color:var(--muted)}.section-menu .menu-row{display:flex;flex-wrap:wrap;align-items: center;gap:4px 8px}.section-menu .menu-row label{color:var(--muted);font-size:11px}.section-menu .menu-row select{width:auto}.section-menu .formula-field input{width:9em;margin-left:4px}.section-menu .error{color:var(--error);margin:0;font-size:11px}.projection-drawing .hatch-bg{fill:#8a7a62}.projection-drawing .hatch-line{stroke:#b9a582;stroke-width:.4;vector-effect:non-scaling-stroke}.projection-drawing .part.cut{stroke:#b9a582;stroke-width:1}.projection-drawing .part.leg{fill:color-mix(in srgb,currentColor 20%,transparent)}.front-drawing .cut-lines line{stroke:var(--accent);stroke-width:.8;stroke-dasharray:12 3 2 3;vector-effect:non-scaling-stroke}.front-drawing .cut-lines text{fill:var(--accent)}.projection-view .cut-name{color:var(--accent);font-family:var(--mono)}.front-drawing .dim .halo{fill:var(--viewport);stroke:none}.front-drawing .dim line.leader{stroke-dasharray:none;stroke-width:.4}.preview-image img{display:block;object-fit:contain;width:100%;height:100%}.view-3d{position:relative;border:1px solid var(--line);overflow:hidden;background:var(--viewport);border-radius:6px;height:100%;min-height:160px}.view-3d canvas{display:block}.view-3d .view-toolbar{position:absolute;display:flex;color:var(--muted);align-items: center;gap:12px;font-size:11px;top:8px;right:10px}.view-3d .view-toolbar label{display:flex;align-items: center;gap:4px}.export-errors h3{color:var(--error)}.zip-tree ul{font:11px var(--mono);margin:0;padding-left:1.2em}.import-errors,.merge-diff{border-collapse:collapse;font-size:11px}.import-errors th,.merge-diff th{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:10px;font-weight:400}.import-errors td,.import-errors th,.merge-diff td,.merge-diff th{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:3px 6px}.app-shell{display:flex;flex-direction:column;height:100%}.app-shell>.workbench{flex:1;height:auto;min-height:0}.persist-banner{display:flex;flex-wrap:wrap;align-items: center;gap:8px;margin:6px 12px}.persist-error{border-color:var(--error)}.persist-errors{color:var(--muted);flex-basis:100%;margin:0;padding-left:20px;font-size:11px}.catalogue{display:flex;flex-direction:column;flex:1;min-height:0}.catalogue>.tabs{border-bottom:1px solid var(--line);background:var(--panel);padding:6px 10px}.cat-panel{overflow:auto;flex:1;padding:8px 10px}.cat-broken{color:var(--error);margin:0 0 8px}.cat-table{border-collapse:collapse;font-size:11px}.cat-table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);white-space:nowrap;padding:3px 6px;font-size:10px;font-weight:400}.cat-table td{border-top:1px solid var(--line);vertical-align:top;white-space:nowrap;padding:3px 6px}.cat-table tbody>tr:not(.cat-detail):hover{background:var(--raised)}.cat-field{display:inline-flex;flex-direction:column;gap:1px}.cat-field input:not([type=checkbox]):not([type=color]){width:7em}.cat-field input.wide{width:16em}.cat-field select{width:auto}.cat-field .unit{color:var(--muted);font-size:10px}.cat-field .field-error{white-space:normal;max-width:18em}.cat-detail>td{background:var(--bg);padding:8px 10px}.cat-contract{display:flex;flex-wrap:wrap;gap:12px}.cat-sub h4{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 4px;font-size:11px}.cat-sub h5{color:var(--muted);margin:4px 0 2px;font-size:11px}.cat-vec{display:inline-flex;gap:4px}.cat-add{display:flex;align-items: flex-start;gap:6px;margin-top:6px}.cat-section>.cat-field{margin-top:6px}.formula-field{position:relative;display:flex;flex-direction:column;gap:2px;min-width:0}.formula-row{display:flex;align-items: center;gap:6px}.formula-input{flex:1;min-width:0}.formula-value{color:var(--muted);font:12px var(--mono);white-space:nowrap;font-variant-numeric:tabular-nums}.formula-suggestions{position:absolute;z-index:10;list-style:none;font:12px/18px var(--mono);overflow-y:auto;max-height:180px;margin:2px 0 0;padding:2px 0;top:100%;left:0}.formula-suggestions li{cursor:pointer;padding:0 8px}.formula-suggestions li:hover{background:var(--raised)}.formula-suggestions li[aria-selected=true]{background:var(--current)}.schema-field{display:flex;flex-direction:column;gap:2px;margin:4px 0}.schema-field .field-label{color:var(--muted);font-size:11px}.schema-field fieldset,.hardware-slot,.section-inspector>fieldset{margin:4px 0}.array-item{border-left:1px solid var(--line);margin:4px 0;padding-left:6px}.muted{font-size:11px}.parameters{list-style:none;margin:0;padding:0}.parameter{display:flex;border-bottom:1px solid var(--line);flex-direction:column;gap:4px;padding:6px 0}.parameter-head,.parameter-head code{color:var(--muted);font-size:11px}.parameter-label{color:var(--fg);font-size:13px}.parameter-value{display:flex;color:var(--muted);align-items: center;gap:4px;font-size:11px}.parameter>select{align-self: flex-start;width:auto}.parameter>input[type=checkbox]{align-self: flex-start}.parameter-range{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));color:var(--muted);gap:6px;font-size:11px}.parameter-range label{white-space:nowrap;overflow-wrap:normal;gap:4px;min-width:0}.number-field{text-align:right;appearance:textfield;-moz-appearance:textfield;width:80px}.number-field::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.number-field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-field-wrap{display:inline-flex;flex-direction:column;gap:1px;min-width:0}.number-field-wrap .field-error{white-space:normal;max-width:18em}.parameter-range .number-field-wrap,.parameter-range .number-field{width:100%}.derived-values{border-collapse:collapse;table-layout:fixed;width:100%;font-size:11px}.derived-values td{border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere;padding:2px 4px}.derived-values td:first-child{width:34%}.derived-values td.value{text-align:right;font:12px var(--mono);font-variant-numeric:tabular-nums;width:22%}.derived-values code{font-size:11px}.derived-values tr.generated{color:var(--muted)}.section-tree{list-style:none;margin:8px 0;padding:0}.section-name{font:12px var(--mono);padding:0 4px}.interior-name{color:var(--muted)}.build-table{margin:6px 0}.build-table>legend{text-transform:uppercase;letter-spacing:.06em;font-size:11px}.build-row{margin:4px 0}.build-row.has-errors{border-color:var(--error)}.row-errors{list-style:none;color:var(--error);margin:2px 0;padding:0;font-size:11px}.generated-list{list-style:none;margin:4px 0;padding:0}.generated-entry{color:var(--muted);border-bottom:1px solid var(--line);padding:2px 0;font-size:11px}.origin-link{color:var(--accent);cursor:pointer;font:11px var(--mono);padding:0 2px}.origin-link:hover{text-decoration:underline}.placements h5{color:var(--muted);margin:4px 0 2px;font-size:11px}
