:root{--bg: #0f1117;--surface: #1a1d27;--surface-2: #222636;--surface-3: #2c3045;--border: #2e3348;--border-light: #3d4460;--accent: #f97316;--accent-dim: #c2560c;--accent-glow: rgba(249, 115, 22, .15);--text: #e8eaf0;--text-muted: #8b93ad;--text-dim: #555d78;--danger: #ef4444;--danger-dim: rgba(239, 68, 68, .15);--radius: 6px;--radius-lg: 10px;--font: "Inter", system-ui, sans-serif;--mono: "JetBrains Mono", "Fira Code", monospace}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:14px}body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;line-height:1.5;-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;min-height:100vh}.app-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10;gap:16px}.app-header__left{display:flex;align-items:center;gap:12px}.app-logo{font-size:28px;color:var(--accent);line-height:1;filter:drop-shadow(0 0 8px var(--accent-glow))}.app-title{font-size:18px;font-weight:700;letter-spacing:.02em;color:var(--text)}.app-subtitle{font-size:11px;color:var(--text-muted);margin-top:1px}.app-header__actions{display:flex;align-items:center;gap:8px}.header-btn{padding:7px 14px;border-radius:var(--radius);font-family:var(--font);font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;white-space:nowrap}.header-btn--primary{background:var(--accent);border:1px solid transparent;color:#fff}.header-btn--primary:hover{background:var(--accent-dim)}.header-btn--primary:disabled{opacity:.4;cursor:not-allowed}.header-btn--secondary{background:var(--surface-3);border:1px solid var(--border-light);color:var(--text-muted)}.header-btn--secondary:hover{background:var(--surface-2);border-color:var(--accent);color:var(--accent)}.print-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#fff;color:#1a1a1a;z-index:100;overflow-y:auto}.print-controls{display:flex;gap:12px;padding:12px 24px;background:#f5f5f5;border-bottom:1px solid #ddd;position:sticky;top:0}.print-btn,.close-btn{padding:8px 16px;border-radius:6px;border:none;font-size:13px;font-weight:600;cursor:pointer}.print-btn{background:#f97316;color:#fff}.close-btn{background:#e5e7eb;color:#374151}.print-doc{max-width:800px;margin:0 auto;padding:32px 24px;font-family:Georgia,serif}.print-header{margin-bottom:24px}.print-header h1{font-size:24px;margin-bottom:4px}.print-meta{font-size:13px;color:#555}.print-doc section{margin-bottom:28px}.print-doc h2{font-size:16px;font-weight:700;margin-bottom:10px;padding-bottom:6px;border-bottom:2px solid #e5e7eb}.print-doc h3{font-size:13px;font-weight:600;margin:14px 0 6px;color:#374151}.print-table{width:100%;border-collapse:collapse;font-size:12px;font-family:Inter,system-ui,sans-serif}.print-table th{background:#f3f4f6;text-align:left;padding:6px 8px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#6b7280;border-bottom:1px solid #e5e7eb}.print-table td{padding:5px 8px;border-bottom:1px solid #f3f4f6}.print-table tr:last-child td{border-bottom:none}.print-filament-group{margin-bottom:16px}.print-total{margin-top:12px;font-size:14px}@media print{.no-print{display:none!important}.print-overlay{position:static}}.import-error{font-size:12px;color:var(--danger);padding:4px 8px;background:var(--danger-dim);border-radius:var(--radius)}.app-panels{display:grid;grid-template-columns:340px 1fr;flex:1;overflow:hidden}.config-panel{background:var(--surface);border-right:1px solid var(--border);overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:4px}.results-panel{overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:4px}.config-section{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px;margin-bottom:8px}.section-label{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:10px;display:flex;align-items:center;gap:8px}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.section-header .section-label{margin-bottom:0}.section-count{font-size:11px;color:var(--text-dim)}.badge{display:inline-block;background:var(--surface-3);color:var(--text-muted);border-radius:100px;padding:1px 8px;font-size:10px;font-weight:600;margin-left:8px;letter-spacing:.04em;text-transform:none}.empty-hint{font-size:12px;color:var(--text-dim);font-style:italic}.size-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.size-btn{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);padding:10px 6px;color:var(--text-muted);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:3px;transition:all .15s;font-family:var(--font)}.size-btn:hover{border-color:var(--border-light);color:var(--text)}.size-btn--active{border-color:var(--accent);background:var(--accent-glow);color:var(--accent)}.size-btn__name{font-size:13px;font-weight:600}.size-btn__dims{font-size:9px;font-family:var(--mono);opacity:.7}.drawer-stack{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.drawer-module{display:flex;align-items:center;gap:8px;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px}.drawer-module__label{flex:0 0 24px}.drawer-index{font-size:10px;font-family:var(--mono);color:var(--text-dim)}.drawer-heights{display:flex;gap:3px;flex:1}.height-btn{flex:1;padding:5px 4px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);font-size:11px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all .12s;white-space:nowrap}.height-btn:hover{border-color:var(--border-light);color:var(--text)}.height-btn--active{background:var(--accent-glow);border-color:var(--accent);color:var(--accent)}.drawer-actions{display:flex;gap:2px}.icon-btn{width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:var(--radius);color:var(--text-dim);font-size:12px;cursor:pointer;transition:all .12s;font-family:var(--font);line-height:1}.icon-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--border);color:var(--text)}.icon-btn:disabled{opacity:.3;cursor:not-allowed}.icon-btn--danger:hover:not(:disabled){background:var(--danger-dim);border-color:var(--danger);color:var(--danger)}.add-btn{width:100%;padding:8px;background:transparent;border:1px dashed var(--border-light);border-radius:var(--radius);color:var(--accent);font-family:var(--font);font-size:12px;font-weight:600;cursor:pointer;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:6px}.add-btn:hover{background:var(--accent-glow);border-color:var(--accent);border-style:solid}.add-btn-sm{padding:3px 8px;background:transparent;border:1px solid var(--border-light);border-radius:var(--radius);color:var(--accent);font-family:var(--font);font-size:11px;font-weight:600;cursor:pointer;transition:all .15s}.add-btn-sm:hover{background:var(--accent-glow);border-color:var(--accent)}.toggle-row{display:flex;align-items:center;gap:10px;cursor:pointer}.toggle-checkbox{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.toggle-label{font-size:13px;color:var(--text)}.pegs-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.peg-field{display:flex;flex-direction:column;gap:4px}.peg-size-label{font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}.peg-input{width:100%;padding:6px 8px;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-family:var(--mono);font-size:13px;text-align:center}.peg-input:focus{outline:none;border-color:var(--accent)}.filament-list{display:flex;flex-direction:column;gap:6px}.filament-row{display:flex;align-items:center;gap:8px}.color-swatch{width:28px;height:28px;padding:2px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-3);cursor:pointer;flex-shrink:0}.filament-name-input{flex:1;padding:6px 10px;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-family:var(--font);font-size:13px}.filament-name-input:focus{outline:none;border-color:var(--accent)}.result-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;margin-bottom:12px}.result-section .section-label{margin-bottom:12px}.table-wrap{overflow-x:auto}.bom-table{width:100%;border-collapse:collapse;font-size:13px}.bom-table th{text-align:left;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);padding:6px 10px;border-bottom:1px solid var(--border)}.bom-table td{padding:7px 10px;border-bottom:1px solid var(--border);vertical-align:middle}.bom-table tr:last-child td{border-bottom:none}.bom-table tr:hover td{background:var(--surface-2)}.col-qty{width:50px;text-align:center}.col-g{width:80px}.col-filament{width:200px}.part-name{font-size:13px}.stl-path{font-size:11px;font-family:var(--mono);color:var(--text-dim)}.qty-badge{display:inline-block;min-width:24px;text-align:center;background:var(--surface-3);border-radius:4px;padding:1px 5px;font-family:var(--mono);font-size:12px;font-weight:600;color:var(--text-muted)}.gram-input{width:70px;padding:4px 6px;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-family:var(--mono);font-size:12px;text-align:right}.gram-input:focus{outline:none;border-color:var(--accent)}.filament-picker{display:flex;align-items:center;gap:6px}.color-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;display:inline-block}.color-dot--lg{width:13px;height:13px}.color-dot--none{background:transparent;border:1px solid var(--border-light)}.filament-select{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-family:var(--font);font-size:12px;padding:4px 6px;cursor:pointer;max-width:160px}.filament-select:focus{outline:none;border-color:var(--accent)}.filament-summary{margin-top:16px;border-top:1px solid var(--border);padding-top:14px}.summary-rows{display:flex;flex-direction:column;gap:6px}.summary-row{display:flex;align-items:center;justify-content:space-between;padding:6px 0}.summary-row__label{display:flex;align-items:center;gap:8px;font-size:13px}.summary-row__value{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--text)}.text-muted{color:var(--text-muted)}.summary-total{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding-top:10px;border-top:1px solid var(--border);font-size:14px;font-weight:700;color:var(--accent)}.summary-total span:last-child{font-family:var(--mono)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:300px;color:var(--text-dim);gap:12px}.empty-state__icon{font-size:48px;opacity:.3}.empty-state p{font-size:14px}.col-expand{width:32px;text-align:center}.expand-btn{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-dim);font-size:9px;cursor:pointer;transition:all .12s}.expand-btn:hover{border-color:var(--border-light);color:var(--text)}.expand-btn--open{border-color:var(--accent);color:var(--accent);background:var(--accent-glow)}.row-expanded-parent td{border-bottom:none}.instance-row td{background:var(--surface-2);border-bottom:1px solid var(--border);padding-top:5px;padding-bottom:5px}.instance-row:last-of-type td{border-bottom:1px solid var(--border)}.instance-label{font-size:12px;color:var(--text-dim);padding-left:20px!important}.instance-indent{margin-right:6px;color:var(--border-light)}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}@media print{.no-print{display:none!important}.print-overlay{position:static}.print-doc{padding:0;max-width:100%}}@media (max-width: 768px){.app-panels{grid-template-columns:1fr}.config-panel{border-right:none;border-bottom:1px solid var(--border)}}
