*{box-sizing:border-box}html{font-size:16px}body{color:var(--color-text-primary);background-color:var(--color-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;font-size:14px;line-height:1.5;transition:background-color .25s ease-in-out,color .25s ease-in-out}h1,h2,h3,h4,h5,h6{margin:0;font-weight:600;line-height:1.2}h1{font-size:24px}h2{font-size:20px}h3{font-size:18px}h4{font-size:16px}h5{font-size:14px}h6{font-size:12px}p{margin:0}a{color:var(--color-accent);text-decoration:none;transition:color .15s ease-in-out}a:hover{text-decoration:underline}code,pre{background-color:var(--color-surface);color:var(--color-text-secondary);border-radius:2px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:12px}code{padding:2px 6px}pre{padding:12px;overflow-x:auto}pre code{background-color:#0000;padding:0}ul,ol{margin:0;padding:0;list-style:none}hr{border:none;border-top:1px solid var(--color-border);margin:16px 0}::selection{background-color:var(--color-accent);color:#fff}html{scrollbar-color:var(--color-border) var(--color-background);scrollbar-width:thin}html::-webkit-scrollbar{width:8px;height:8px}html::-webkit-scrollbar-track{background-color:var(--color-background)}html::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:4px;transition:opacity .15s ease-in-out}html::-webkit-scrollbar-thumb:hover{opacity:.8}:root,.dark{--color-background:#1a1a1a;--color-surface:#222;--color-canvas:#1a1a1a;--color-border:#333;--color-text-primary:#e0e0e0;--color-text-secondary:#a0a0a0;--color-text-muted:#666;--color-accent:#4a90e2;--color-accent-hover:#357abd;--color-success:#51cf66;--color-danger:#ff6b6b;--color-warning:#ffd93d;--color-input-background:#2a2a2a;--color-hover:#ffffff0d;--color-active:#ffffff1a}.light{--color-background:#326273;--color-surface:#cee9f4;--color-canvas:#eee;--color-border:#d785262e;--color-text-primary:#fff;--color-text-secondary:#326273;--color-text-muted:#9ab5be;--color-accent:#e39774;--color-accent-hover:#c97d5e;--color-success:#51cf66;--color-danger:#ff6b6b;--color-warning:#ffd93d;--color-input-background:#2a5262;--color-hover:#ffffff14;--color-active:#ffffff26}button{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}button:focus{outline:none}.add-btn,.export-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.add-btn:focus,.export-btn:focus{outline:none}.add-btn,.export-btn{background:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:8px 12px;font-size:12px;font-weight:500;transition:all .15s ease-in-out}.add-btn:hover,.export-btn:hover{background:var(--color-accent-hover)}.btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.btn:focus{outline:none}.btn{cursor:pointer;border:none;border-radius:4px;padding:12px 16px;font-size:12px;font-weight:500;transition:all .15s ease-in-out}.btn.btn-primary{background:var(--color-accent);color:#fff}.btn.btn-primary:hover:not(:disabled){background:var(--color-accent-hover)}.btn.btn-primary:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn.btn-secondary{border:1px solid var(--color-background);color:var(--color-text-secondary);background:0 0}.btn.btn-secondary:hover{background:var(--color-background);color:var(--color-text-primary)}.btn.btn-danger{color:var(--color-danger);background:#ff6b6b26}.btn.btn-danger:hover{background:#ff6b6b40}.modal-footer .btn{padding:12px 32px;font-size:14px}.tool-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.tool-btn:focus{outline:none}.tool-btn{border:1px solid var(--color-border);background:var(--color-background);width:32px;height:32px;color:var(--color-text-primary);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;font-size:14px;font-weight:600;transition:all .15s ease-in-out;display:flex}.tool-btn:hover{border-color:var(--color-text-primary);color:var(--color-text-primary);background:var(--color-hover)}.tool-btn.active{border-color:var(--color-accent);color:var(--color-accent);background:#4a90e226}.tool-btn.active:hover{background:#4a90e240}.close-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.close-btn:focus{outline:none}.close-btn{color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;width:32px;height:32px;padding:0;font-size:28px;transition:all .15s ease-in-out;display:flex}.close-btn:hover{color:var(--color-text-primary)}.expand-btn,.visibility-btn,.lock-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.expand-btn:focus,.visibility-btn:focus,.lock-btn:focus{outline:none}.expand-btn,.visibility-btn,.lock-btn{width:24px;height:24px;color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:12px;transition:all .15s ease-in-out;display:flex}.expand-btn:hover,.visibility-btn:hover,.lock-btn:hover{color:var(--color-text-primary)}.visibility-btn,.lock-btn{opacity:.6}.visibility-btn:hover,.lock-btn:hover{opacity:1}.visibility-btn.hidden,.visibility-btn.locked,.lock-btn.hidden,.lock-btn.locked{opacity:1;color:var(--color-danger)}.action-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.action-btn:focus{outline:none}.action-btn{cursor:pointer;border:none;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;transition:all .15s ease-in-out;display:flex}.action-btn.place-btn{color:var(--color-success);background:#51cf6626}.action-btn.place-btn:hover{background:#51cf664d}.action-btn.delete-btn{color:var(--color-danger);background:#ff6b6b26}.action-btn.delete-btn:hover:not(:disabled){background:#ff6b6b4d}.action-btn.delete-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.tab-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.tab-btn:focus{outline:none}.tab-btn{color:var(--color-text-secondary);cursor:pointer;text-transform:uppercase;letter-spacing:.5px;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:12px;font-size:12px;font-weight:600;transition:all .15s ease-in-out}.tab-btn:hover{color:var(--color-text-primary);background:var(--color-hover)}.tab-btn.active{color:var(--color-accent);border-bottom-color:var(--color-accent);background:0 0}input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}input[type=text],input[type=number],input[type=email],input[type=password],input[type=search],input[type=url],textarea,select{border:1px solid var(--color-border);background-color:var(--color-surface);color:var(--color-text-primary);border-radius:4px;padding:8px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}input[type=text]:focus,input[type=number]:focus,input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=url]:focus,textarea:focus,select:focus{border-color:var(--color-accent);outline:none;box-shadow:0 0 0 3px #4a90e21a}input[type=text]:disabled,input[type=number]:disabled,input[type=email]:disabled,input[type=password]:disabled,input[type=search]:disabled,input[type=url]:disabled,textarea:disabled,select:disabled{opacity:.5;cursor:not-allowed;pointer-events:none;background-color:var(--color-border)}textarea{resize:vertical;min-height:80px}.input-group{align-items:center;gap:8px;margin-bottom:8px;display:flex}.input-group:last-child{margin-bottom:0}.input-group label{width:30px;color:var(--color-text-secondary);flex-shrink:0;font-size:12px}.input-group input{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text-primary);border-radius:4px;flex:1;min-width:0;padding:8px;font-family:inherit;font-size:12px}.input-group input:focus{border-color:var(--color-accent);outline:none;box-shadow:0 0 0 3px #4a90e21a}.form-group{margin-bottom:16px}.form-group label{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:12px;display:block}.form-group input,.form-group select{background:var(--color-background);border:1px solid var(--color-border);width:100%;color:var(--color-text-primary);border-radius:4px;padding:8px;font-family:inherit;font-size:14px}.form-group input:focus,.form-group select:focus{border-color:var(--color-accent);outline:none;box-shadow:0 0 0 3px #4a90e21a}.form-row{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}.step-btn{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.step-btn:focus{outline:none}.step-btn{border:1px solid var(--color-accent);color:var(--color-accent);cursor:pointer;background:0 0;border-radius:4px;flex-shrink:0;padding:4px 8px;font-size:11px;transition:all .15s ease-in-out}.step-btn:hover{background:var(--color-hover)}.color-input-wrapper{align-items:center;gap:12px;display:flex}.color-input-wrapper input[type=color]{cursor:pointer;border:1px solid var(--color-border);border-radius:4px;width:50px;height:36px;padding:2px}.color-input-wrapper span{color:var(--color-text-secondary);flex:1;font-size:12px}.layer-select{background:var(--color-background);border:1px solid var(--color-border);width:100%;color:var(--color-text-primary);cursor:pointer;border-radius:4px;padding:8px;font-family:inherit;font-size:12px}.layer-select:focus{border-color:var(--color-accent);outline:none;box-shadow:0 0 0 3px #4a90e21a}.rename-input-wrapper{flex:1;min-width:0}.rename-input-wrapper .rename-input{background:var(--color-background);border:1px solid var(--color-accent);width:100%;color:var(--color-text-primary);border-radius:2px;padding:4px;font-family:inherit;font-size:12px}.rename-input-wrapper .rename-input:focus{outline:none}.modal-overlay{z-index:1050;background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:var(--color-surface);border-radius:12px;flex-direction:column;width:90%;max-width:800px;max-height:90vh;display:flex;box-shadow:0 20px 25px #0000004d}.modal-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:32px;display:flex}.modal-header h2{color:var(--color-text-primary);margin:0;font-size:20px}.modal-body{flex:1;padding:32px;overflow-y:auto}.preset-card{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.preset-card:focus{outline:none}.preset-card{background:var(--color-background);border:2px solid var(--color-border);cursor:pointer;text-align:left;border-radius:8px;padding:12px;transition:all .15s ease-in-out}.preset-card:hover{border-color:var(--color-text-secondary);background:var(--color-hover)}.preset-card.active{border-color:var(--color-accent);background:#4a90e226}.preset-card .preset-name{color:var(--color-text-primary);margin-bottom:4px;font-size:12px;font-weight:500}.preset-card .preset-dims{color:var(--color-text-secondary);margin-bottom:4px;font-size:11px}.preset-card .preset-price{color:var(--color-accent);font-size:11px;font-weight:500}.context-menu{background:var(--color-surface);border:1px solid var(--color-border);z-index:1050;border-radius:4px;min-width:150px;position:fixed;overflow:hidden;box-shadow:0 10px 15px #0003}.context-menu button{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.context-menu button:focus{outline:none}.context-menu button{width:100%;color:var(--color-text-secondary);text-align:left;cursor:pointer;background:0 0;border:none;padding:12px 16px;font-size:12px;transition:all .15s ease-in-out}.context-menu button:hover{background:var(--color-hover);color:var(--color-accent)}.context-menu button.danger{color:var(--color-danger)}.context-menu button.danger:hover{background:#ff6b6b1a}.category-header{font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0}.category-header:focus{outline:none}.category-header{background:var(--color-surface);text-align:left;width:100%;color:var(--color-text-secondary);text-transform:uppercase;cursor:pointer;border:none;align-items:center;gap:8px;padding:12px 16px;font-size:12px;transition:all .15s ease-in-out;display:flex}.category-header:hover{background:var(--color-hover);color:var(--color-text-primary)}.category-header .arrow{min-width:16px;font-size:11px}.category-header .category-name{letter-spacing:.5px;flex:1}.app{background:var(--color-background);width:100%;height:100vh;color:var(--color-text-primary);grid-template-columns:280px 1fr 260px;gap:0;display:grid;position:fixed;inset:0}.toolbar{background:var(--color-surface);border:1px solid var(--color-border);z-index:1030;border-radius:8px;align-items:center;gap:8px;padding:8px;display:flex;position:absolute;top:16px;left:50%;transform:translate(-50%);box-shadow:0 10px 15px #0003}.toolbar .toolbar-group{border-right:1px solid var(--color-border);gap:2px;padding-right:16px;display:flex}.toolbar .toolbar-group:last-of-type{border-right:none;padding-right:0}.toolbar .toolbar-spacer{flex:1}.left-panel,.right-panel{background:var(--color-background);border-right:1px solid var(--color-border);flex-direction:column;height:100%;display:flex}.right-panel{border-right:none;border-left:1px solid var(--color-border)}.center-panel{background:var(--color-background);flex:1;position:relative;overflow:hidden}.panel-tabs{border-bottom:1px solid var(--color-border);background:var(--color-surface);display:flex}.panel-content{flex:1;overflow:hidden}.scene-tree{background:var(--color-background);flex-direction:column;height:100%;display:flex}.scene-tree .tree-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:16px;display:flex}.scene-tree .tree-header h3{color:var(--color-text-primary);margin:0;font-size:16px}.scene-tree .tree-content{flex:1;padding:0;overflow-y:auto}.scene-tree .layer-group{border-bottom:1px solid var(--color-border)}.scene-tree .layer-row,.scene-tree .part-row{align-items:center;gap:2px;display:flex}.scene-tree .layer-row.selected,.scene-tree .part-row.selected{background:#4a90e226}.scene-tree .layer-row{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:8px 12px}.scene-tree .part-row{cursor:pointer;gap:2px;padding:8px 12px;transition:all .15s ease-in-out}.scene-tree .part-row:hover{background:var(--color-hover)}.scene-tree .color-swatch{border:1px solid var(--color-border);border-radius:2px;flex-shrink:0;width:16px;height:16px}.scene-tree .layer-name{color:var(--color-text-secondary);flex:1;min-width:0;font-size:14px;font-weight:500}.scene-tree .part-label{color:var(--color-text-primary);flex:1;min-width:0;font-size:12px}.scene-tree .part-type{color:var(--color-text-muted);margin-left:8px;font-size:11px}.scene-tree .part-indent{flex-shrink:0;width:20px}.scene-tree .spacer{flex:1}.scene-tree .menu-btn{width:24px;height:24px;color:inherit;cursor:pointer;font-size:14px;font:inherit;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .15s ease-in-out;display:flex}.scene-tree .menu-btn:focus{outline:none}.scene-tree .menu-btn:hover{color:var(--color-text-primary)}.scene-tree .menu-divider{background:var(--color-border);height:1px;margin:8px 0}.scene-tree .menu-submenu .menu-label{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;padding:12px 16px;font-size:11px}.scene-tree .menu-submenu .submenu-item{padding-left:24px}.inspector{background:var(--color-background);flex-direction:column;height:100%;display:flex}.inspector .inspector-header{border-bottom:1px solid var(--color-border);padding:16px}.inspector .inspector-header h3{color:var(--color-text-primary);margin:0;font-size:16px}.inspector .inspector-empty{color:var(--color-text-muted);text-align:center;flex:1;justify-content:center;align-items:center;display:flex}.inspector .inspector-empty p{margin:0}.inspector .inspector-content{flex:1;padding:12px;overflow-y:auto}.inspector .section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;margin-bottom:16px;padding:12px}.inspector .section.actions{gap:12px;margin-bottom:0;display:flex}.inspector .section.actions .btn{flex:1}.inspector .section-title{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;font-size:11px;font-weight:600}.inspector .info-row{justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;font-size:12px;display:flex}.inspector .info-row:last-child{margin-bottom:0}.inspector .info-row .label{color:var(--color-text-secondary)}.inspector .info-row .value{color:var(--color-text-secondary);text-align:right}.materials{background:var(--color-background);flex-direction:column;height:100%;display:flex}.materials .materials-header{border-bottom:1px solid var(--color-border);padding:16px}.materials .materials-header h3{color:var(--color-text-primary);margin:0;font-size:16px}.materials .materials-content{flex-direction:column;flex:1;padding:12px;display:flex;overflow-y:auto}.materials .parts-table{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;margin-bottom:16px;font-size:11px}.materials .table-header{background:var(--color-background);border-bottom:1px solid var(--color-border);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;border-radius:8px 8px 0 0;grid-template-columns:1fr 30px 75px;gap:8px;padding:8px;font-weight:600;display:grid}.materials .table-row{border-bottom:1px solid var(--color-border);color:var(--color-text-secondary);grid-template-columns:1fr 25px 75px;gap:8px;padding:8px;display:grid}.materials .table-row:last-child{border-bottom:none}.materials .table-empty{text-align:center;color:var(--color-text-muted);padding:16px}.materials .col-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.materials .col-qty,.materials .col-price,.materials .col-total{text-align:right}.materials .summary-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;margin-bottom:12px;padding:12px}.materials .summary-row{justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;display:flex}.materials .summary-row:last-child{margin-bottom:0}.materials .summary-row.total{color:var(--color-text-secondary);margin-top:12px;font-weight:600}.materials .summary-row.total .value{color:var(--color-success);font-size:14px}.materials .summary-row .label{color:var(--color-text-secondary)}.materials .summary-row .value{color:var(--color-accent);font-weight:500}.materials .waste-section{border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);margin:12px 0;padding:12px 0}.materials .waste-label{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:11px}.materials .waste-slider{cursor:pointer;appearance:none;background:var(--color-background);border-radius:2px;outline:none;width:100%;height:4px;margin-bottom:8px}.materials .waste-slider::-webkit-slider-thumb{appearance:none;background:var(--color-accent);cursor:pointer;border-radius:50%;width:14px;height:14px}.materials .waste-slider::-moz-range-thumb{background:var(--color-accent);cursor:pointer;border:none;border-radius:50%;width:14px;height:14px}.materials .divider{background:var(--color-border);height:1px;margin:12px 0}.parts-bin{background:var(--color-background);flex-direction:column;height:100%;display:flex}.parts-bin .bin-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:16px;display:flex}.parts-bin .bin-header h3{color:var(--color-text-primary);margin:0;font-size:16px}.parts-bin .parts-list{flex:1;padding:0;overflow-y:auto}.parts-bin .category-section{border-bottom:1px solid var(--color-border)}.parts-bin .category-parts{background:var(--color-background);padding:8px}.parts-bin .part-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;margin-bottom:8px;padding:12px;transition:all .15s ease-in-out}.parts-bin .part-card:hover{border-color:var(--color-accent)}.parts-bin .part-header{gap:8px;margin-bottom:8px;display:flex}.parts-bin .part-header .color-dot{border:1px solid var(--color-border);border-radius:4px;flex-shrink:0;width:20px;height:20px}.parts-bin .part-header .part-info{flex:1;min-width:0}.parts-bin .part-header .part-info .part-name{color:var(--color-text-secondary);margin-bottom:2px;font-size:12px;font-weight:500}.parts-bin .part-header .part-info .part-dims{color:var(--color-text-secondary);font-size:11px}.parts-bin .part-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.parts-bin .part-footer .part-details{flex:1;min-width:0}.parts-bin .part-footer .part-details .part-price{color:var(--color-accent);margin-bottom:2px;font-size:11px;font-weight:500}.parts-bin .part-footer .part-details .part-count{color:var(--color-text-muted);font-size:11px}.parts-bin .part-footer .part-actions{gap:2px;display:flex}.modal-header h2{color:var(--color-text-secondary)}.section{margin-bottom:48px}.section h3{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:1px;margin:0 0 12px;font-size:14px}.preset-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-bottom:32px;display:grid}.modal-footer{border-top:1px solid var(--color-border);justify-content:flex-end;gap:12px;padding:32px;display:flex}.settings-bar{background:var(--color-surface);border:1px solid var(--color-border);z-index:1030;border-radius:8px;gap:16px;padding:12px;display:flex;position:absolute;bottom:16px;left:16px;right:16px;box-shadow:0 10px 15px #0003}.settings-bar .settings-group{align-items:center;gap:8px;display:flex}.settings-bar .settings-group label{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;font-size:12px}.settings-bar .settings-group select{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text-primary);cursor:pointer;border-radius:4px;padding:8px;font-family:inherit;font-size:12px}.settings-bar .settings-group select:focus{border-color:var(--color-accent);outline:none;box-shadow:0 0 0 2px #4a90e233}.canvas-container{background:var(--color-canvas);width:100%;height:100%;position:relative}.canvas-container .canvas{width:100%;height:100%;display:block}
