:root{--bg:#171512;--surface:#211e19;--surface-2:#2c2821;--border:#38322a;--border-2:#4a4238;--text:#ede8df;--muted:#7a6f63;--accent:#d4802a;--accent-hi:#f0983a;--accent-bg:#2d1f0e;--danger:#c03520;--danger-bg:#2a0e08;--selected-bg:#0d2840;--selected:#4a9eff;--font-ui:system-ui, -apple-system, sans-serif;--font-mono:"IBM Plex Mono", "Fira Code", monospace;--topbar-h:48px;--mobile-bottom-h:240px;--mobile-split-h:28px;--nav-h:54px;--sidebar-w:220px;--r:6px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{touch-action:manipulation}html,body{height:100%;min-height:100%;background:var(--bg);min-height:-webkit-fill-available;color:var(--text);font:13px/1.5 var(--font-ui);overscroll-behavior:none;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;touch-action:manipulation;overflow:hidden}#app{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;flex-direction:column;height:100dvh;min-height:-webkit-fill-available;display:flex}#app input,#app textarea,#app select{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}#topbar{flex:0 0 var(--topbar-h);background:var(--surface);border-bottom:1px solid var(--border);z-index:10;align-items:center;gap:8px;padding:0 12px;display:flex}#topbar-left{flex:1;align-items:center;gap:8px;min-width:0;display:flex}#logo{color:var(--accent);flex-shrink:0}#project-name{border-radius:var(--r);min-width:0;color:inherit;font:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;background:0 0;border:1px solid #0000;flex:1;margin:0 -6px;padding:4px 6px;font-weight:500;overflow:hidden}#project-name:hover{border-color:var(--border);background:#ffffff08}.project-name-input{background:var(--bg);width:100%;min-width:0;color:var(--text);border:1px solid var(--accent);border-radius:var(--r);font:500 16px var(--font-ui);outline:none;margin:0 -6px;padding:4px 6px}#btn-add-panel{display:none}#toolbar-wrap{flex-shrink:0;position:relative}#btn-toolbar-menu{background:var(--surface-2);width:36px;height:36px;color:var(--text);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s;display:flex}#btn-toolbar-menu .toolbar-menu-icon{flex-shrink:0;display:block}#btn-toolbar-menu .toolbar-menu-icon--open,#toolbar-wrap.open #btn-toolbar-menu .toolbar-menu-icon--closed{display:none}#toolbar-wrap.open #btn-toolbar-menu .toolbar-menu-icon--open{display:block}#btn-toolbar-menu:hover,#btn-toolbar-menu[aria-expanded=true]{background:var(--border);border-color:var(--border-2)}#topbar:has(#toolbar-wrap.open){z-index:70}#toolbar-menu-overlay{z-index:65;display:none;position:fixed;inset:0}#toolbar-menu-overlay.open{display:block}#toolbar{background:var(--surface-2);border:1px solid var(--border-2);border-radius:var(--r);z-index:71;flex-direction:column;gap:4px;min-width:188px;padding:6px;display:none;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 10px 28px #00000073}#toolbar-wrap.open #toolbar{display:flex}#toolbar button{text-align:left;background:var(--surface);width:100%;color:var(--text);border:1px solid var(--border);border-radius:var(--r);font:13px var(--font-ui);cursor:pointer;padding:9px 12px;transition:background .12s}#toolbar button:hover{background:var(--border)}#toolbar button.active{background:var(--accent-bg);border-color:var(--accent);color:var(--accent-hi)}#toolbar button:disabled{opacity:.35;cursor:default}.toolbar-sep{display:none}#workspace{flex:1 1 0;min-height:0;display:flex;position:relative;overflow:hidden}#sidebar-left,#sidebar-right,#bottom-strip{display:none}#viewport{touch-action:none;flex:1;position:relative;overflow:hidden}#canvas{touch-action:none;cursor:default;-webkit-tap-highlight-color:transparent;width:100%;height:100%;display:block}#canvas.viewport-pan-mode{cursor:grab}#canvas.viewport-move-mode,#canvas.viewport-dragging{cursor:move}#viewport-hint{color:var(--muted);cursor:pointer;text-align:center;background:0 0;border:none;justify-content:center;align-items:center;font-size:13px;text-decoration:none;transition:color .15s;display:flex;position:absolute;inset:0}#viewport-hint:hover{color:var(--accent)}#viewport-hint.hidden{display:none}#btn-mobile-move{z-index:15;background:var(--surface-2);border:1px solid var(--border-2);width:44px;height:44px;color:var(--muted);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s,color .12s,transform .1s;display:flex;position:absolute;bottom:14px;left:14px;box-shadow:0 4px 16px #00000059}#btn-mobile-move:active:not(:disabled){transform:scale(.92)}#btn-mobile-move.active{background:var(--accent-bg);border-color:var(--accent);color:var(--accent-hi)}#btn-mobile-move:disabled{opacity:.35;cursor:default;box-shadow:none}.mobile-move-icon{display:block}#mobile-split-handle[hidden]{display:none!important}#mobile-split-handle{flex:0 0 var(--mobile-split-h);width:100%;min-height:var(--mobile-split-h);border:none;border-bottom:1px solid var(--border);touch-action:none;cursor:row-resize;background:var(--surface);-webkit-user-select:none;user-select:none;z-index:2;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}@media (hover:hover){#mobile-split-handle:hover{background:var(--surface-2)}#mobile-split-handle:hover:before{background:var(--accent);width:52px}#fab:hover{background:var(--accent-hi)}}#mobile-split-handle:before{content:"";background:var(--border-2);pointer-events:none;border-radius:2px;width:40px;height:4px;transition:background .12s,width .12s}#mobile-split-handle.is-pressed:before,#mobile-split-handle.dragging:before{background:var(--accent);width:52px}#mobile-split-handle.is-pressed,#mobile-split-handle.dragging{background:var(--surface-2)}#mobile-bottom{flex:0 0 var(--mobile-bottom-h);background:var(--surface);flex-direction:column;min-height:0;display:flex;overflow:hidden}#mobile-nav{flex:0 0 var(--nav-h);background:var(--surface);border-top:1px solid var(--border);touch-action:manipulation;display:flex}.mnav-btn{color:var(--muted);font:10px/1 var(--font-ui);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;padding:0;transition:color .15s;display:flex}.mnav-btn.active{color:var(--accent)}.mnav-btn:active,.mnav-btn.is-pressed{background:var(--surface-2);color:var(--text)}.mnav-btn.active:is(:active,.is-pressed){color:var(--accent-hi)}.mnav-btn svg{flex-shrink:0}#mobile-sheet{background:var(--surface);border-top:1px solid var(--border);flex:1;min-height:0;overflow:hidden}.mpane{-webkit-overflow-scrolling:touch;height:100%;overflow-y:auto}.mpane.hidden{display:none}#fab{right:16px;bottom:calc(var(--mobile-bottom-h) + 14px);background:var(--accent);color:#fff;cursor:pointer;z-index:60;touch-action:manipulation;border:none;border-radius:50%;width:50px;height:50px;font-size:26px;font-weight:300;line-height:1;transition:background .15s,transform .15s,opacity .15s;position:fixed;box-shadow:0 4px 20px #00000080}#app:has(#toolbar-wrap.open) #fab{z-index:30;opacity:0;pointer-events:none;transform:scale(.88)}#fab:is(:active,.is-pressed){background:var(--accent-hi);transform:scale(.91)}#m-props-overlay{z-index:30;background:#0000008c;display:none;position:fixed;inset:0}#m-props-overlay.open{display:block}#m-props-sheet{background:var(--surface-2);border:1px solid var(--border-2);z-index:31;border-bottom:none;border-radius:14px 14px 0 0;flex-direction:column;max-height:72vh;transition:transform .26s cubic-bezier(.4,0,.2,1);display:flex;position:fixed;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(100%)}#m-props-sheet.open{transform:translateY(0)}#m-properties{flex:1;min-height:0;padding:0;overflow:hidden}#m-properties [data-panel-form][data-layout=tabs],#m-properties .props-tabs{flex-direction:column;height:100%;min-height:0;display:flex}#m-properties .props-tab-bar{border-bottom:1px solid var(--border);background:var(--surface-2);flex-shrink:0;gap:4px;padding:0 12px;display:flex}#m-properties .props-tab-btn{color:var(--muted);font:600 12px var(--font-ui);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;margin-bottom:-1px;padding:10px 6px;transition:color .12s,border-color .12s}#m-properties .props-tab-btn.active{color:var(--accent-hi);border-bottom-color:var(--accent)}#m-properties .props-tab-body{-webkit-overflow-scrolling:touch;flex:1;min-height:0;overflow-y:auto}#m-properties .props-tab-pane{padding:12px}#m-properties .props-tab-hint{color:var(--muted);margin:0 0 10px;font-size:12px;line-height:1.4}#m-properties .props-dim-grid{grid-template-columns:1fr 1fr;gap:0 10px;display:grid}#m-properties .props-size-grid,#properties .props-size-grid,[data-group-form] .props-size-grid{grid-template-columns:1fr 1fr 1fr;gap:0 8px;margin-bottom:4px;display:grid}#properties .props-size-grid>label{text-transform:uppercase;letter-spacing:.07em;min-width:0;color:var(--muted);flex-direction:column;gap:3px;margin-bottom:10px;font-size:11px;font-weight:600;display:flex}#properties .props-size-grid>label input{width:100%;margin-top:0}#m-properties .props-dim-grid>label,#m-properties .props-size-grid>label,#properties .props-size-grid>label,[data-group-form] .props-size-grid>label{text-transform:uppercase;letter-spacing:.07em;min-width:0;color:var(--muted);flex-direction:column;gap:3px;margin-bottom:8px;font-size:11px;font-weight:600;display:flex}#m-properties .props-dim-grid>label input,#m-properties .props-size-grid>label input,#properties .props-size-grid>label input,[data-group-form] .props-size-grid>label input{width:100%;margin-top:0}#m-properties [data-panel-form] .actions{border-top:1px solid var(--border);margin-top:10px;padding-top:10px}#m-props-drag{background:var(--border-2);border-radius:2px;width:36px;height:4px;margin:10px auto 0}#m-props-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 16px 8px;font-size:13px;font-weight:600;display:flex}#btn-close-props{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:4px;font-size:16px}#onboarding-overlay{z-index:100;background:#0000001a;justify-content:center;align-items:center;padding:20px;display:none;position:fixed;inset:0}#onboarding-overlay.open{display:flex}#onboarding-dialog{background:color-mix(in srgb, var(--surface-2) 90%, transparent);border:1px solid var(--border-2);-webkit-backdrop-filter:blur(10px);border-radius:14px;width:min(100%,420px);max-height:min(88vh,560px);padding:20px 22px 18px;overflow-y:auto;box-shadow:0 16px 48px #00000073}#onboarding-title{margin:0 0 6px;font-size:18px;font-weight:600}.onboarding-lead{color:var(--muted);margin:0 0 16px;font-size:13px;line-height:1.45}.onboarding-tips{flex-direction:column;gap:10px;margin:0 0 18px;padding:0;list-style:none;display:flex}.onboarding-tip{align-items:baseline;gap:10px;font-size:13px;line-height:1.4;display:flex}.onboarding-keys{border-radius:var(--r);background:var(--surface);border:1px solid var(--border);min-width:7.5rem;font:500 11px var(--font-mono);color:var(--accent-hi);text-align:center;flex-shrink:0;padding:4px 8px}.onboarding-text{color:var(--text)}#btn-onboarding-close{border-radius:var(--r);background:var(--accent);color:#fff;width:100%;font:600 13px var(--font-ui);cursor:pointer;border:none;padding:10px 14px;transition:background .12s}#btn-onboarding-close:hover{background:var(--accent-hi)}.tree-pick-hint{color:var(--accent-hi);background:var(--accent-bg);border-bottom:1px solid var(--border);padding:8px 10px;font-size:11px}.tree-block{position:relative}.tree-block--solo .tree-panel{border-bottom:1px solid #ffffff08}.tree-group-members{border-bottom:1px solid #ffffff0a}.tree-group{cursor:pointer;-webkit-user-select:none;user-select:none;border-bottom:1px solid #ffffff0a;align-items:center;gap:6px;padding:8px 10px 4px 6px;display:flex}.tree-group:hover{background:var(--surface-2)}.tree-group[aria-selected=true]{background:var(--selected-bg);border-left:2px solid var(--selected)}.tree-drag-handle{width:20px;height:24px;color:var(--muted);cursor:grab;opacity:.45;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;margin:0;padding:0;transition:opacity .12s,color .12s,background .12s;display:inline-flex}.tree-drag-handle:hover,.tree-drag-handle:focus-visible{opacity:1;color:var(--text);background:#ffffff0d;outline:none}.tree-drag-handle:active{cursor:grabbing}.tree-drag-icon{display:block}.tree-dragging{opacity:.45}.tree-drop-before:before,.tree-drop-after:after{content:"";background:var(--accent);pointer-events:none;z-index:2;border-radius:1px;height:2px;position:absolute;left:6px;right:6px}.tree-drop-before:before{top:0}.tree-drop-after:after{bottom:0}.tree-block,[data-panel-id]{position:relative}.group-icon{color:var(--accent);flex-shrink:0;font-size:12px}.group-name{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:600;overflow:hidden}.group-count{font:11px var(--font-mono);color:var(--muted);background:var(--surface-2);border-radius:4px;flex-shrink:0;padding:1px 5px}.tree-panel.group-member{padding-left:22px}[data-panel-id]{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;border-bottom:1px solid #ffffff08;align-items:center;gap:6px;padding:8px 10px 8px 6px;transition:background .1s;display:flex}[data-panel-id]:hover{background:var(--surface-2)}[data-panel-id][aria-selected=true]{background:var(--selected-bg);border-left:2px solid var(--selected)}[data-panel-id].hidden{pointer-events:none}[data-panel-id].hidden>.visibility-btn,[data-panel-id].hidden>.props-btn{pointer-events:auto;opacity:.75;color:var(--text)}[data-panel-id].hidden>.visibility-btn{opacity:.75}[data-panel-id].hidden .panel-name,[data-panel-id].hidden .panel-dims{opacity:.38}[data-panel-id].collision{border-left:2px solid var(--danger)}.panel-label{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex;overflow:hidden}.panel-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.panel-dims{font:11px var(--font-mono);color:var(--muted);opacity:.85;flex-shrink:0}.tree-group>.props-btn,.tree-group>.visibility-btn,[data-panel-id]>.props-btn,[data-panel-id]>.visibility-btn{border-radius:var(--r);width:24px;height:24px;color:var(--muted);cursor:pointer;opacity:.55;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:opacity .1s,color .1s,background .1s;display:inline-flex}[data-panel-id]>.props-btn:hover,[data-panel-id]>.visibility-btn:hover,.tree-group>.props-btn:hover,.tree-group>.visibility-btn:hover{opacity:1;color:var(--text);background:#ffffff0d}.props-icon,.visibility-icon{display:block}.ei{flex-shrink:0;grid-template-areas:".t.""l c r"".b.";gap:1px;display:grid}.ei-core{background:var(--border-2);border-radius:1px;grid-area:c}.ei-t{grid-area:t}.ei-b{grid-area:b}.ei-l{grid-area:l}.ei-r{grid-area:r}.ei-t,.ei-b,.ei-l,.ei-r{background:var(--border);border-radius:1px;transition:background .15s}.ei-t.on,.ei-b.on,.ei-l.on,.ei-r.on{background:var(--accent)}#properties{padding:12px}#m-properties:not(:empty){padding:0}.props-dim-stack label{margin-bottom:10px}[data-panel-form],[data-group-form],[data-multi-form]{flex-direction:column;gap:0;display:flex}[data-panel-form] label,[data-group-form] label,[data-multi-form] label{text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:10px;font-size:11px;font-weight:600;display:block}[data-panel-form] input[type=text],[data-panel-form] input[type=number],[data-group-form] input[type=text],[data-group-form] input[type=number],[data-multi-form] input[type=text],[data-multi-form] input[type=number]{background:var(--bg);width:100%;color:var(--text);border:1px solid var(--border-2);border-radius:var(--r);font:13px var(--font-mono);margin-top:3px;padding:7px 8px;transition:border-color .12s;display:block}[data-panel-form] input:focus,[data-group-form] input:focus,[data-multi-form] input:focus{border-color:var(--accent);outline:none}[data-panel-form] input[type=color]{border:1px solid var(--border-2);border-radius:var(--r);cursor:pointer;background:0 0;width:100%;height:32px;margin-top:3px;display:block}[data-panel-form] input[type=checkbox],[data-group-form] input[type=checkbox]{accent-color:var(--accent);vertical-align:middle;width:14px;height:14px;margin-left:6px}@media (width<=767px){[data-panel-form] input[type=text],[data-panel-form] input[type=number],[data-group-form] input[type=text],[data-group-form] input[type=number],[data-multi-form] input[type=text],[data-multi-form] input[type=number],.project-name-input{font-size:16px}.tree-drag-handle{opacity:.8;width:32px;min-height:36px}}[data-panel-form] .edge-row{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px;display:grid}[data-panel-form] .edge-row label{text-transform:none;letter-spacing:0;color:var(--text);align-items:center;gap:4px;margin:0;font-size:12px;font-weight:400;display:flex}[data-panel-form] .props-check,[data-group-form] .props-check{text-transform:none;letter-spacing:0;color:var(--text);align-items:center;gap:6px;margin:0 0 10px;font-size:12px;font-weight:400;display:flex}[data-panel-form] .actions,[data-group-form] .actions,[data-multi-form] .actions{flex-wrap:wrap;gap:6px;margin-top:14px;display:flex}[data-panel-form] [data-action],[data-group-form] [data-action],[data-multi-form] [data-action]{background:var(--surface-2);min-width:80px;color:var(--text);border:1px solid var(--border);border-radius:var(--r);font:12px var(--font-ui);cursor:pointer;text-align:center;flex:1;padding:7px 10px;transition:background .12s}[data-panel-form] [data-action]:hover,[data-group-form] [data-action]:hover,[data-multi-form] [data-action]:hover{background:var(--border)}[data-panel-form] [data-action=delete],[data-group-form] [data-action=delete]{color:var(--danger);border-color:var(--danger-bg);flex-basis:100%}[data-panel-form] [data-action=delete]:hover,[data-group-form] [data-action=delete]:hover{background:var(--danger-bg)}[data-group-form] [data-action=ungroup]{color:var(--accent-hi);border-color:var(--accent-bg)}[data-group-form] [data-action=ungroup]:hover{background:var(--accent-bg)}[data-multi-form] [data-action=group]{color:var(--accent-hi);border-color:var(--accent);background:var(--accent-bg)}[data-multi-form] [data-action=group]:hover{background:var(--accent-bg);border-color:var(--accent-hi)}.props-section{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-top:1px solid var(--border);margin:10px 0 4px;padding-top:8px;font-size:10px;font-weight:600}[data-panel-form] .props-section:first-child,[data-group-form] .props-section:first-child{border-top:none;margin-top:0;padding-top:0}.props-group-header{background:var(--accent-bg);border-radius:var(--r);border:1px solid #d4802a40;align-items:flex-start;gap:10px;margin:0 0 12px;padding:10px 11px;display:flex}.props-group-header--select{background:var(--selected-bg);border-color:#4a9eff40}.props-group-icon{color:var(--accent);flex-shrink:0;margin-top:1px;font-size:15px;line-height:1}.props-group-header--select .props-group-icon{color:var(--selected)}.props-group-head-text{flex-direction:column;gap:2px;min-width:0;display:flex}.props-group-kicker{text-transform:uppercase;letter-spacing:.07em;color:var(--accent-hi);font-size:11px;font-weight:600}.props-group-header--select .props-group-kicker{color:var(--selected)}.props-group-meta{color:var(--muted);font-size:12px;line-height:1.4}#pieces-panel,#m-pieces-panel{padding:8px 10px}.pieces-label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:6px;font-size:10px;font-weight:600}[data-piece-row]{border-bottom:1px solid #ffffff08;align-items:baseline;gap:8px;padding:4px 0;display:flex}[data-qty]{font:500 12px var(--font-mono);color:var(--accent);text-align:right;min-width:20px}.piece-dims{font:12px var(--font-mono);flex-shrink:0}.piece-names{min-width:0;font:11px var(--font-ui);color:var(--muted);opacity:.85;text-overflow:ellipsis;white-space:nowrap;text-align:right;flex:1;overflow:hidden}.piece-t{font:11px var(--font-mono);color:var(--muted)}#problems-panel,#m-problems-panel{padding:8px 10px}[data-collision]{color:var(--danger);border-bottom:1px solid #ffffff08;align-items:center;gap:6px;padding:4px 0;font-size:12px;display:flex}[data-collision]:before{content:"⚠";font-size:11px}.no-issues{color:var(--muted);padding:4px 0;font-size:12px}@media (width>=768px){#sidebar-left{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;display:flex;overflow-y:auto}#sidebar-right{width:var(--sidebar-w);background:var(--surface);border-left:1px solid var(--border);flex-direction:column;flex-shrink:0;display:flex;overflow-y:auto}#bottom-strip{background:var(--surface);border-top:1px solid var(--border);flex:0 0 140px;display:flex;overflow:hidden}#pieces-panel{flex:1;overflow-y:auto}#problems-panel{border-left:1px solid var(--border);flex:1;overflow-y:auto}#mobile-split-handle,#mobile-bottom,#mobile-nav,#mobile-sheet,#fab,#m-props-overlay,#m-props-sheet,#btn-mobile-move{display:none!important}#btn-add-panel{background:var(--accent);color:#fff;border-radius:var(--r);font:600 12px var(--font-ui);cursor:pointer;white-space:nowrap;border:none;flex-shrink:0;align-items:center;gap:4px;padding:5px 12px;transition:background .12s;display:flex}#btn-add-panel:hover{background:var(--accent-hi)}#btn-toolbar-menu,#toolbar-menu-overlay{display:none!important}#toolbar-wrap{position:static}#toolbar{min-width:unset;box-shadow:none;background:0 0;border:none;border-radius:0;flex-direction:row;align-items:center;gap:4px;padding:0;position:static;display:flex!important}#toolbar button{text-align:center;background:var(--surface-2);width:auto;font:12px var(--font-ui);padding:5px 10px}.toolbar-sep{background:var(--border);align-self:center;width:1px;height:20px;margin:0 4px;display:block}}
