:root{--bg:#0d0d0e;--panel:#141416;--panel-2:#191919;--line:#262628;--ink:#ececec;--dim:#8a8a8d;--faint:#56565a;--accent:#a3be8c;--cut:#ff5d54;--guide:#57e0d0;--mono:"JetBrains Mono",ui-monospace,monospace;--sans:"Inter",system-ui,sans-serif}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--sans);flex-direction:column;font-size:14px;display:flex;overflow:hidden}header{border-bottom:1px solid var(--line);flex:none;align-items:center;gap:14px;padding:12px 16px;display:flex}header .mark{font-family:var(--mono);letter-spacing:.04em;font-size:15px;font-weight:500}header .mark b{color:var(--accent);font-weight:500}header .sub{color:var(--faint);font-size:12px;font-family:var(--mono)}header .spacer{flex:1}.bbox-readout{font-family:var(--mono);color:var(--dim);font-size:12px}.bbox-readout b{color:var(--ink);font-weight:500}main{flex:1;min-height:0;display:flex}.nav{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;flex:0 0 272px;width:272px;min-height:0;display:flex}.props{background:var(--panel);border-left:1px solid var(--line);flex-direction:column;flex:0 0 296px;width:296px;min-height:0;display:flex}.navhead{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);border-bottom:1px solid var(--line);flex:none;padding:13px 16px 11px;font-size:11px}.nav .scroll,.props .scroll{flex:1;padding:16px;overflow-y:auto}.navfoot{border-top:1px solid var(--line);background:var(--panel-2);flex:none;padding:14px 16px}.navfoot .label{margin-bottom:10px}.navfoot .field{margin-bottom:8px}.dock{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;flex:0 0 50px;align-items:center;gap:6px;width:50px;padding:12px 0;display:flex}.dockbtn{width:36px;height:36px;color:var(--dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;font-size:18px;line-height:1;transition:all .12s;display:flex}.dockbtn:hover{color:var(--ink);background:var(--panel-2)}.dockbtn.on{color:var(--accent);border-color:var(--line);background:var(--panel-2)}.dock-sep{background:var(--line);width:24px;height:1px;margin:3px 0}.headtabs{width:230px}.hintline{font-family:var(--mono);color:var(--faint);margin-top:4px;padding-left:2px;font-size:10px}.stage{flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.group{margin-bottom:18px}.group>.label{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint);justify-content:space-between;align-items:center;margin-bottom:10px;font-size:11px;display:flex}.addrow{grid-template-columns:repeat(2,1fr);gap:6px;margin-bottom:6px;display:grid}.addrow.full{grid-template-columns:1fr}.chip{background:var(--panel-2);border:1px solid var(--line);color:var(--dim);font-family:var(--mono);cursor:pointer;text-align:center;border-radius:6px;padding:8px;font-size:12px}.chip:hover{border-color:var(--accent);color:var(--ink)}.chip.cut:hover{border-color:var(--cut);color:var(--ink)}.chip.pen.on{border-color:var(--guide);color:var(--guide)}.parts{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.prow{border:1px solid var(--line);cursor:pointer;background:var(--panel-2);border-radius:6px;align-items:center;gap:7px;padding:7px 8px;display:flex}.prow.sel{border-color:var(--accent)}.prow.drop-over{border-top:2px solid var(--accent)}.prow.dragging{opacity:.4}.prow .grip{color:var(--faint);cursor:grab;text-align:center;flex:0 0 12px;font-size:12px;line-height:1}.prow .swatch{background:var(--accent);border-radius:2px;flex:0 0 9px;width:9px;height:9px}.prow.iscut .swatch{background:var(--cut)}.prow .name{font-size:12.5px;font-family:var(--mono);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.prow .role{font-family:var(--mono);letter-spacing:.05em;color:var(--faint);text-transform:uppercase;font-size:9px}.prow .rowbtn{text-align:center;color:var(--faint);cursor:pointer;flex:0 0 14px;font-size:9px}.prow .x{text-align:center;color:var(--faint);flex:0 0 16px;font-size:14px}.prow .x:hover{color:var(--cut)}.empty{font-family:var(--mono);color:var(--faint);padding:4px 2px;font-size:11.5px}.editor{border-top:1px solid var(--line);margin-top:4px;padding-top:14px}.field{justify-content:space-between;align-items:center;gap:10px;margin-bottom:9px;display:flex}.field label{color:var(--dim);font-size:13px}.input{align-items:center;display:flex;position:relative}.input input{background:var(--panel-2);border:1px solid var(--line);width:96px;color:var(--ink);font-family:var(--mono);text-align:right;border-radius:6px;padding:7px 30px 7px 10px;font-size:13px}.input input:focus{border-color:var(--accent);outline:none}.input .unit{font-family:var(--mono);color:var(--faint);pointer-events:none;font-size:11px;position:absolute;right:9px}.input.short input{width:64px}.seg{border:1px solid var(--line);border-radius:6px;display:flex;overflow:hidden}.seg button{color:var(--dim);font-family:var(--sans);cursor:pointer;border:0;border-right:1px solid var(--line);background:0 0;flex:1;padding:7px 4px;font-size:12.5px;transition:all .12s}.seg button:last-child{border-right:0}.seg button.on{background:var(--accent);color:#16201a;font-weight:600}.seg button.on.cutmode{background:var(--cut)}.seg button:hover:not(.on){color:var(--ink);background:var(--panel-2)}.edhead{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.edhead .t{font-family:var(--mono);color:var(--ink);font-size:12px}.dupe{border:1px solid var(--line);color:var(--dim);font-family:var(--mono);cursor:pointer;background:0 0;border-radius:5px;padding:4px 8px;font-size:11px}.dupe:hover{color:var(--ink);border-color:var(--dim)}.alignrow{gap:6px;margin:4px 0 12px;display:flex}.alignrow button{background:var(--panel-2);border:1px solid var(--line);color:var(--dim);font-family:var(--mono);cursor:pointer;border-radius:5px;flex:1;padding:6px;font-size:11px}.alignrow button:hover{border-color:var(--accent);color:var(--ink)}.toggle{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.toggle span{color:var(--dim);font-size:13px}.switch{background:var(--line);cursor:pointer;border-radius:11px;flex:0 0 38px;width:38px;height:21px;transition:all .15s;position:relative}.switch.on{background:var(--accent)}.switch:after{content:"";background:#0d0d0e;border-radius:50%;width:17px;height:17px;transition:all .15s;position:absolute;top:2px;left:2px}.switch.on:after{transform:translate(17px)}.actions{gap:8px;margin-top:4px;display:flex}.btn{background:var(--accent);color:#16201a;font-family:var(--sans);cursor:pointer;border:0;border-radius:6px;flex:1;padding:10px;font-size:13px;font-weight:600}.btn:hover{filter:brightness(1.08)}.btn.ghost{color:var(--dim);border:1px solid var(--line);background:0 0;font-weight:500}.btn.ghost:hover{color:var(--ink);border-color:var(--dim)}.note{color:var(--faint);font-size:11.5px;line-height:1.5;font-family:var(--mono);margin-top:14px}.viewbar{border-bottom:1px solid var(--line);flex:none;align-items:center;gap:8px;padding:10px 14px;display:flex}.viewbar .seg{width:190px}.viewbar .tool{background:var(--panel-2);border:1px solid var(--line);color:var(--dim);font-family:var(--mono);cursor:pointer;border-radius:6px;padding:7px 12px;font-size:12px}.viewbar .tool.on{border-color:var(--guide);color:var(--guide)}.viewbar .tool:hover{color:var(--ink)}.viewbar .spacer{flex:1}.canvaswrap{cursor:crosshair;flex:1;min-height:0;position:relative;overflow:hidden}.statusbar{border-top:1px solid var(--line);background:var(--panel);font-family:var(--mono);color:var(--dim);flex:none;align-items:center;gap:14px;padding:6px 14px;font-size:11px;display:flex}.statusbar .grow{flex:1}.statusbar .k{color:var(--faint)}.statusbar .st-mode{color:#16201a;background:var(--accent);letter-spacing:.06em;border-radius:3px;padding:1px 7px;font-weight:500}.statusbar .st-coord{color:var(--ink)}.statusbar #stZoom,.statusbar #stHint{color:var(--faint)}.statusbar .st-snap{color:var(--faint);letter-spacing:.05em}.statusbar .st-snap.off{opacity:.4}.reticle{pointer-events:none;z-index:5;background:#ffb00038;display:none;position:absolute}.reticle-h{height:1px;left:0;right:0}.reticle-v{width:1px;top:0;bottom:0}.zlabel{font-family:var(--mono);letter-spacing:.09em;text-transform:uppercase;color:var(--faint);border-top:1px dashed var(--line);margin:6px 0 7px;padding-top:8px;font-size:10px}#svgHost{position:absolute;inset:0}#svgHost svg{touch-action:none;cursor:default;display:block}#svgHost .rothandle{cursor:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='26'%20height='26'%20viewBox='0%200%2024%2024'%20fill='none'%3E%3Cg%20stroke='%23000'%20stroke-width='3.4'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2012a8%208%200%201%201-2.3-5.6'/%3E%3Cpath%20d='M20%203v5h-5'/%3E%3C/g%3E%3Cg%20stroke='%23fff'%20stroke-width='1.7'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2012a8%208%200%201%201-2.3-5.6'/%3E%3Cpath%20d='M20%203v5h-5'/%3E%3C/g%3E%3C/svg%3E") 13 13,grab}#svgHost .rothandle:hover{fill:var(--accent)}#threeHost{display:none;position:absolute;inset:0}#threeHost canvas{width:100%;height:100%;display:block}.hud{font-family:var(--mono);color:var(--faint);pointer-events:none;font-size:11px;position:absolute;bottom:12px;left:14px}.coord{font-family:var(--mono);color:var(--dim);pointer-events:none;font-size:11px;position:absolute;bottom:12px;right:14px}.feedback{font-family:var(--mono);color:var(--accent);opacity:0;font-size:11px;transition:all .2s;position:absolute;top:12px;right:14px}.feedback.show{opacity:1}@media (max-width:820px){main{flex-direction:column;overflow-y:auto}.nav,.props{border:0;border-bottom:1px solid var(--line);flex:none;width:100%;max-height:40vh}.dock{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;flex:none;justify-content:center;width:100%}.dock-sep{width:1px;height:24px}.stage{min-height:50vh}.headtabs{width:auto}}.search{background:var(--panel-2);border:1px solid var(--line);width:100%;color:var(--ink);font-family:var(--mono);border-radius:6px;margin-bottom:14px;padding:8px 10px;font-size:12px}.search:focus{border-color:var(--accent);outline:none}.search::placeholder{color:var(--faint)}.tree{margin-bottom:4px}.tree>summary{cursor:pointer;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--faint);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:7px 2px;font-size:11px;list-style:none;display:flex}.tree>summary::-webkit-details-marker{display:none}.tree>summary:before{content:"▸";color:var(--faint);font-size:9px;transition:transform .12s;display:inline-block}.tree[open]>summary:before{transform:rotate(90deg)}.tree>summary:hover{color:var(--dim)}.tree>summary .cnt{color:var(--faint);letter-spacing:0;margin-left:auto}.treebody{border-left:1px solid var(--line);margin-left:5px;padding:2px 0 10px 6px}.titem{cursor:pointer;font-family:var(--mono);color:var(--dim);border-radius:6px;align-items:center;gap:9px;padding:6px 8px;font-size:12.5px;display:flex}.titem:hover{background:var(--panel-2);color:var(--ink)}.titem.on{color:var(--accent)}.titem .ic{color:var(--faint);text-align:center;width:13px;font-size:12px}.prow .ic{text-align:center;color:var(--faint);flex:0 0 13px;font-size:12px}.ic-svg{pointer-events:none;display:block}.navhead{justify-content:space-between;align-items:center;gap:8px;display:flex}.navtools{gap:2px;display:flex}.navtools button{width:27px;height:27px;color:var(--dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;transition:all .12s;display:flex}.navtools button:hover{color:var(--ink);background:var(--panel-2);border-color:var(--line)}.layertree{flex-direction:column;gap:1px;margin-bottom:10px;display:flex}.grp{flex-direction:column;gap:1px;display:flex}.gbody{border-left:1px solid var(--line);flex-direction:column;gap:1px;margin:1px 0 1px 11px;padding-left:6px;display:flex}.lparts{border-left:1px solid var(--line);flex-direction:column;gap:1px;margin:1px 0 4px 11px;padding-left:6px;display:flex}.lyrow,.grow{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:7px;align-items:center;gap:7px;padding:7px 6px 7px 9px;transition:background .1s;display:flex;position:relative}.lyrow:before,.grow:before{content:"";background:0 0;border-radius:2px;width:2px;transition:background .1s;position:absolute;top:5px;bottom:5px;left:0}.lyrow:hover,.grow:hover,.lyrow.active{background:var(--panel-2)}.lyrow.active:before{background:var(--accent)}.lyrow.lsel:before,.grow.lsel:before{background:var(--accent);opacity:.5}.lyrow.lsel,.grow.lsel{background:#ffb0000d}.lyrow.drop-into{box-shadow:inset 0 0 0 1px var(--guide);background:#57e0d014}.grow.dim .lname,.grow.dim .lic{opacity:.5}.lcaret{color:var(--faint);flex:0 0 12px;justify-content:center;align-items:center;transition:transform .12s,color .1s;display:flex;transform:rotate(90deg)}.lcaret.col{transform:rotate(0)}.lcaret:hover{color:var(--ink)}.lcheck{border:1.5px solid var(--faint);cursor:pointer;opacity:.55;border-radius:4px;flex:0 0 13px;width:13px;height:13px;transition:all .12s;position:relative}.lyrow:hover .lcheck,.grow:hover .lcheck{opacity:1}.lcheck:hover{border-color:var(--dim)}.lcheck.on{background:var(--accent);border-color:var(--accent);opacity:1}.lcheck.on:after{content:"";border:2px solid #16201a;border-width:0 2px 2px 0;width:3.5px;height:7px;position:absolute;top:1px;left:3.5px;transform:rotate(45deg)}.lic{color:var(--faint);flex:0 0 16px;justify-content:center;align-items:center;display:flex}.grow .lic{color:var(--dim)}.lyrow.active .lic{color:var(--accent)}.lname{font-family:var(--mono);color:var(--dim);white-space:nowrap;text-overflow:ellipsis;outline:none;flex:1;font-size:12.5px;transition:color .1s;overflow:hidden}.lyrow.active .lname,.grow .lname{color:var(--ink)}.lname.editing{background:var(--bg);border:1px solid var(--accent);color:var(--ink);border-radius:4px;padding:1px 4px}.prow .name.editing{background:var(--bg);border:1px solid var(--accent);color:var(--ink);cursor:text;border-radius:4px;outline:none;padding:0 4px;overflow:visible}.lcount{font-family:var(--mono);color:var(--faint);text-align:center;opacity:.7;min-width:13px;font-size:10px}.leye,.lx{height:20px;color:var(--faint);cursor:pointer;border-radius:5px;flex:0 0 20px;justify-content:center;align-items:center;transition:all .12s;display:flex}.lx{opacity:0}.lyrow:hover .lx,.grow:hover .lx{opacity:1}.leye{opacity:0}.lyrow:hover .leye,.grow:hover .leye,.leye.off{opacity:1}.leye:hover{color:var(--ink);background:var(--panel)}.leye.off{color:var(--faint)}.lx:hover{color:var(--cut);background:var(--panel)}.lparts .prow{background:0 0;border:1px solid #0000;border-radius:7px;gap:8px;padding:6px 6px 6px 8px;position:relative}.lparts .prow:before{content:"";background:0 0;border-radius:2px;width:2px;transition:background .1s;position:absolute;top:5px;bottom:5px;left:0}.lparts .prow:hover{background:var(--panel-2)}.lparts .prow.sel{background:var(--panel-2);border-color:#0000}.lparts .prow.sel:before{background:var(--accent)}.lparts .prow.sel.iscut:before{background:var(--cut)}.lparts .prow .ic{text-align:left;color:var(--faint);flex:0 0 15px;justify-content:center;align-items:center;font-size:0;display:flex}.lparts .prow.sel .ic{color:var(--accent)}.lparts .prow.sel.iscut .ic{color:var(--cut)}.prow .swatch{flex:0 0 7px;width:7px;height:7px}.prow .name{color:var(--dim);transition:color .1s}.lparts .prow.sel .name{color:var(--ink)}.prow .role{opacity:0;transition:opacity .1s}.prow:hover .role{opacity:1}.prow .rowbtn{height:15px;color:var(--faint);cursor:pointer;opacity:0;flex:0 0 15px;justify-content:center;align-items:center;transition:all .12s;display:flex}.prow:hover .rowbtn{opacity:1}.prow .rowbtn:hover{color:var(--ink)}.prow .rowbtn.up{transform:rotate(-90deg)}.prow .rowbtn.down{transform:rotate(90deg)}.prow .x{height:18px;color:var(--faint);cursor:pointer;opacity:0;border-radius:5px;flex:0 0 18px;justify-content:center;align-items:center;transition:all .12s;display:flex}.prow:hover .x{opacity:1}.prow .x:hover{color:var(--cut);background:var(--panel)}.bottombar{-webkit-backdrop-filter:blur(10px);border:1px solid var(--line);z-index:20;background:#141416f0;border-radius:13px;align-items:center;gap:3px;width:max-content;margin-inline:auto;padding:6px;display:flex;position:absolute;bottom:16px;left:0;right:0;box-shadow:0 10px 30px #00000080}.tbtn{width:38px;height:38px;color:var(--dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;justify-content:center;align-items:center;transition:all .12s;display:flex}.tbtn:hover{color:var(--ink);background:var(--panel-2)}.tbtn.on{color:var(--accent);background:var(--panel-2);border-color:var(--line)}.tbtn.cut{color:var(--cut)}.tbtn.cut:hover{background:#ff5d541f}.tbsep{background:var(--line);flex:0 0 1px;width:1px;height:24px;margin:0 3px}.hdr-hist{align-items:center;gap:4px;margin-left:4px;display:flex}.hbtn:disabled{opacity:.32;cursor:default}.hbtn:disabled:hover{color:var(--dim);border-color:var(--line)}.hdr-actions{align-items:center;gap:6px;display:flex}.hbtn{background:var(--panel-2);border:1px solid var(--line);color:var(--dim);font-family:var(--sans);cursor:pointer;white-space:nowrap;border-radius:7px;align-items:center;gap:6px;padding:7px 11px;font-size:12.5px;font-weight:500;transition:all .12s;display:flex}.hbtn:hover{color:var(--ink);border-color:var(--dim)}.hbtn.icon{padding:7px}.hbtn.primary{background:var(--accent);color:#16201a;border-color:var(--accent);font-weight:600}.hbtn.primary:hover{filter:brightness(1.08);color:#16201a}.hbtn svg{flex:none;display:block}.alignrow.icons{gap:5px}.alignrow.icons button{color:var(--dim);justify-content:center;align-items:center;padding:8px 0;display:flex}.alignrow.icons button:hover{border-color:var(--accent);color:var(--ink);background:var(--panel-2)}.alignrow.icons button.on{border-color:var(--accent);color:var(--accent);background:var(--panel-2)}.alignrow.icons button:disabled{opacity:.3;cursor:default}.alignrow.icons button:disabled:hover{border-color:var(--line);color:var(--dim);background:var(--panel-2)}.alignrow.icons button svg{display:block}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(2px);background:#0000008c;justify-content:center;align-items:center;animation:.12s ease-out modal-fade;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;width:340px;max-width:calc(100vw - 32px);padding:20px;animation:.12s ease-out modal-pop;box-shadow:0 18px 50px #0009}.modal-title{font-family:var(--sans);color:var(--ink);margin-bottom:8px;font-size:15px;font-weight:600}.modal-body{color:var(--dim);margin-bottom:18px;font-size:13px;line-height:1.55}.modal-actions{justify-content:flex-end;gap:8px;display:flex}.modal-actions .btn{flex:none;padding:9px 16px}.btn.danger{background:var(--cut);color:#1a0c0b}.btn.danger:hover{filter:brightness(1.08)}.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}@keyframes modal-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-pop{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:none}}.emptystate{text-align:center;flex-direction:column;align-items:center;gap:10px;padding:26px 10px 30px;display:flex}.es-ic{background:var(--panel-2);border:1px solid var(--line);width:54px;height:54px;color:var(--faint);border-radius:14px;justify-content:center;align-items:center;display:flex}.es-title{font-family:var(--mono);color:var(--dim);letter-spacing:.02em;margin-top:2px;font-size:13px}.es-sub{color:var(--faint);max-width:220px;font-size:12px;line-height:1.55}.es-tips{flex-direction:column;gap:6px;width:100%;margin-top:8px;display:flex}.es-tips span{font-family:var(--mono);color:var(--faint);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:6px 9px;font-size:10.5px}.tree-empty{gap:9px;padding:22px 6px 18px}.tree-empty .es-ic{border-radius:12px;width:46px;height:46px}.tree-empty:not(:only-child){border-top:1px dashed var(--line);margin-top:8px;padding-top:20px}.docsection{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.unitseg{margin:2px 0 14px}.unitseg button{font-family:var(--mono);padding:7px 2px;font-size:11px}@media (max-width:820px){.bottombar{bottom:10px}}
