@font-face{font-family:Inter;src:url(../Inter/Inter-VariableFont_opsz,wght.ttf)format("truetype");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(../Inter/Inter-Italic-VariableFont_opsz,wght.ttf)format("truetype");font-weight:100 900;font-style:italic;font-display:swap}:root{--bg:#fff;--bg-subtle:#f8f9fb;--bg-hover:#f1f3f7;--surface:#fff;--border:#e2e5eb;--border-strong:#c8cdd8;--text-primary:#111827;--text-secondary:#6b7280;--text-muted:#9ca3af;--accent:#2563eb;--accent-light:#eff6ff;--accent-dark:#1d4ed8;--success:#059669;--success-light:#ecfdf5;--warning:#d97706;--warning-light:#fffbeb;--danger:#dc2626;--danger-light:#fef2f2;--orange:#ea580c;--orange-light:#fff7ed;--radius-sm:4px;--radius:6px;--radius-lg:10px;--shadow-sm:0 1px 3px #0000000f, 0 1px 2px #0000000a;--shadow:0 4px 6px -1px #00000012, 0 2px 4px -2px #0000000d;--shadow-lg:0 10px 15px -3px #00000014, 0 4px 6px -4px #0000000d}.launchpad-item{transition:transform .18s,background-color .18s,filter .18s;border-radius:14px!important}.launchpad-item:hover,.launchpad-item:focus-visible{transform:translateY(-5px);background:#f1f5f9!important}.launchpad-item:active{transform:translateY(-2px)scale(.97)}.launchpad-item .launchpad-icon{transition:transform .18s,box-shadow .18s,filter .18s;box-shadow:0 3px 8px #0f172a33}.launchpad-item:hover .launchpad-icon,.launchpad-item:focus-visible .launchpad-icon{filter:saturate(1.12)brightness(1.05);transform:scale(1.09)rotate(-2deg);box-shadow:0 8px 16px #0f172a40}.launchpad-item.is-active .launchpad-icon{transform:translateY(-2px)scale(1.08);box-shadow:0 0 0 3px #fff,0 0 0 5px #2563eb,0 6px 14px #2563eb47}.launchpad-label{transition:color .18s,transform .18s}.launchpad-item:hover .launchpad-label,.launchpad-item:focus-visible .launchpad-label{transform:translateY(-1px);color:#1d4ed8!important}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:14px}body{font-optical-sizing:auto;background:var(--bg-subtle);color:var(--text-primary);-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5}#root{flex-direction:column;min-height:100vh;display:flex}.app-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:100;height:56px;box-shadow:var(--shadow-sm);align-items:center;gap:20px;padding:0 24px;display:flex;position:sticky;top:0}.app-logo{align-items:center;gap:10px;text-decoration:none;display:flex}.app-logo-mark{background:var(--accent);border-radius:var(--radius);color:#fff;letter-spacing:-.5px;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;font-weight:800;display:flex}.app-logo-text{color:var(--text-primary);letter-spacing:-.2px;font-size:.95rem;font-weight:700}.app-logo-sub{color:var(--text-muted);font-size:.7rem;font-weight:400}.nav-tabs{flex:1;align-items:center;gap:2px;padding:0 16px;display:flex}.nav-tab{color:var(--text-secondary);border-radius:var(--radius);cursor:pointer;white-space:nowrap;background:0 0;border:none;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:.82rem;font-weight:500;transition:all .15s;display:flex}.nav-tab:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}.nav-tab.active{background:var(--accent-light);color:var(--accent);font-weight:600}.nav-tab:disabled{opacity:.35;cursor:not-allowed}.nav-tab-badge{background:var(--accent);color:#fff;border-radius:100px;padding:1px 6px;font-size:.68rem;font-weight:700}.header-actions{align-items:center;gap:8px;display:flex}.btn{border-radius:var(--radius);cursor:pointer;white-space:nowrap;border:1px solid #0000;align-items:center;gap:6px;padding:7px 14px;font-family:inherit;font-size:.82rem;font-weight:500;line-height:1;transition:all .12s;display:inline-flex}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-dark)}.btn-success{background:var(--success);color:#fff}.btn-success:hover{background:#047857}.btn-outline{background:var(--surface);color:var(--text-primary);border-color:var(--border-strong)}.btn-outline:hover{background:var(--bg-hover)}.btn-ghost{color:var(--text-secondary);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--bg-hover);color:var(--text-primary)}.btn-danger-ghost{color:var(--danger);background:0 0;border-color:#0000}.btn-danger-ghost:hover{background:var(--danger-light)}.btn-sm{padding:5px 10px;font-size:.78rem}.btn-icon{padding:6px}.app-body{flex-direction:column;flex:1;gap:16px;padding:20px 24px;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.card-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.card-title{color:var(--text-primary);align-items:center;gap:8px;font-size:.88rem;font-weight:600;display:flex}.card-body{padding:16px}.config-row{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;display:grid}.field{flex-direction:column;gap:4px;display:flex}.field-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:600}.field-input{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--radius);height:36px;color:var(--text-primary);outline:none;width:100%;padding:0 10px;font-family:inherit;font-size:.87rem;transition:border-color .12s}.field-input:focus{border-color:var(--accent);background:var(--surface)}.field-input::placeholder{color:var(--text-muted)}select.field-input{cursor:pointer}.data-table-wrap{overflow-x:auto}.data-table{border-collapse:collapse;width:100%;font-size:.83rem}.data-table thead tr{background:var(--bg-subtle)}.data-table th{text-align:left;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);white-space:nowrap;padding:9px 12px;font-size:.72rem;font-weight:600}.data-table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:6px 8px}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr:hover td{background:var(--bg-subtle)}.data-table-compact th{padding:7px 8px;font-size:.68rem}.data-table-compact td{padding:2px 6px}.data-table-compact .tbl-input{height:26px;font-size:.8rem}.data-table-compact .grain-btn{padding:2px 5px;font-size:.67rem}.capture-grid{grid-template-columns:1.15fr .85fr;align-items:start;gap:16px;display:grid}.capture-col-left,.capture-col-right{flex-direction:column;gap:16px;display:flex}@media (width<=1100px){.capture-grid{grid-template-columns:1fr}}.tbl-input{border-radius:var(--radius-sm);width:100%;height:32px;color:var(--text-primary);background:0 0;border:1px solid #0000;outline:none;padding:0 8px;font-family:inherit;font-size:.84rem;transition:border-color .1s,background .1s}.tbl-input:hover{background:var(--bg-subtle);border-color:var(--border)}.tbl-input:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px #2563eb14}.tbl-input::placeholder{color:var(--text-muted);font-size:.78rem}.grain-selector{gap:4px;display:flex}.grain-btn{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;background:var(--surface);color:var(--text-secondary);text-align:center;white-space:nowrap;flex:1;padding:4px 6px;font-family:inherit;font-size:.72rem;font-weight:600;transition:all .1s}.grain-btn.selected-veta{background:var(--warning-light);border-color:var(--warning);color:var(--warning)}.grain-btn.selected-libre{background:var(--success-light);border-color:var(--success);color:var(--success)}.mini-edge-wrap{justify-content:center;align-items:center;display:flex}.edge-grid{grid-template-columns:repeat(4,28px);gap:3px;display:grid}.edge-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;width:28px;height:28px;color:var(--text-muted);justify-content:center;align-items:center;font-family:inherit;font-size:.65rem;font-weight:700;transition:all .1s;display:flex}.edge-btn:hover{border-color:var(--accent);color:var(--accent)}.edge-btn.active-thin{color:#0284c7;background:#eff8ff;border-color:#0284c7}.edge-btn.active-thick{border-color:var(--danger);background:var(--danger-light);color:var(--danger)}.odoo-banner{background:var(--orange-light);border-radius:var(--radius);border:1px solid #fed7aa;align-items:center;gap:10px;padding:10px 14px;font-size:.82rem;display:flex}.odoo-dot{background:var(--orange);border-radius:50%;flex-shrink:0;width:8px;height:8px}.odoo-dot.connected{background:var(--success)}.odoo-config-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.empty-state{color:var(--text-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:60px 20px;display:flex}.empty-state-icon{opacity:.4;font-size:2.5rem}.empty-state-title{color:var(--text-secondary);font-size:1rem;font-weight:600}.empty-state-desc{max-width:360px;font-size:.83rem}.stats-bar{flex-wrap:wrap;gap:16px;display:flex}.stat-chip{background:var(--bg-subtle);border:1px solid var(--border);color:var(--text-secondary);border-radius:100px;align-items:center;gap:6px;padding:6px 12px;font-size:.78rem;font-weight:500;display:flex}.stat-chip-val{color:var(--text-primary);font-weight:700}.stat-chip-val.good{color:var(--success)}.stat-chip-val.warn{color:var(--warning)}.stat-chip-val.bad{color:var(--danger)}.fraction-selector{gap:3px;display:flex}.fraction-btn{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;background:var(--surface);color:var(--text-secondary);padding:4px 8px;font-family:inherit;font-size:.72rem;font-weight:600;transition:all .1s}.fraction-btn.selected{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.toast-container{z-index:9999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:var(--text-primary);color:#fff;border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:10px 16px;font-size:.82rem;font-weight:500;animation:.2s slideIn}.toast.success{background:var(--success)}.toast.error{background:var(--danger)}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.efficiency-bar-wrap{align-items:center;gap:8px;display:flex}.efficiency-bar{background:var(--border);border-radius:3px;flex:1;height:6px;overflow:hidden}.efficiency-bar-fill{background:var(--success);border-radius:3px;height:100%;transition:width .4s}.efficiency-bar-fill.warn{background:var(--warning)}.efficiency-bar-fill.bad{background:var(--danger)}.lepton-pages-scroll{background:#e5e7eb;flex-direction:column;align-items:center;gap:24px;min-height:400px;padding:24px;display:flex}.lepton-page{color:#111;box-sizing:border-box;background:#fff;flex-direction:column;gap:14px;width:794px;min-height:1123px;padding:28px 32px;font-family:Inter,Arial,sans-serif;font-size:11px;display:flex;box-shadow:0 4px 12px #00000026}.lp-header{border-collapse:collapse;width:100%}.lp-header td{vertical-align:middle;border:1px solid #111;padding:5px 10px}.lp-cell-logo{color:#fff;background:#ea580c;width:38%}.lp-logo-company{letter-spacing:-.3px;font-size:18px;font-weight:800;display:block}.lp-logo-tagline{opacity:.85;font-size:9px}.lp-cell-material{text-align:center;background:#f5f5f5;width:22%;font-size:13px;font-weight:700}.lp-cell-meta{width:40%;font-size:9.5px;line-height:1.5}.lp-cell-contact{font-size:9.5px}.lp-plate-title{border-bottom:2px solid #111;padding-bottom:4px;font-size:11.5px;font-weight:700}.lp-svg-wrap{justify-content:center;display:flex}.lp-svg{background:#f1f5f9;border:1px solid #111;max-width:100%;height:auto}.lp-board-bg{fill:#dde3ed;stroke:#111;stroke-width:1px}.lp-piece-rect{stroke:#111;stroke-width:.8px}.lp-bottom{grid-template-columns:1fr 200px;gap:20px;margin-top:6px;display:grid}.lp-table{border-collapse:collapse;width:100%;font-size:9.5px}.lp-table th{text-align:left;border-bottom:1.5px solid #111;padding:3px 4px;font-weight:700}.lp-table td{vertical-align:middle;border-bottom:.5px solid #ccc;padding:3px 4px}.lp-chk{background:#fff;border:1px solid #111;width:10px;height:10px;display:inline-block}.lp-stats{margin-top:10px;font-size:9px;font-weight:600;line-height:1.6}.lp-retal-col{border-left:1px solid #ddd;padding-left:14px}.lp-cut-guide{border:1px solid #111;margin-top:auto;padding:8px 10px;font-family:Courier New,monospace;font-size:8.5px;line-height:1.5}.labels-grid{background:var(--bg-subtle);grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;padding:16px;display:grid}.piece-label{border:2px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow-sm);background:#fff;flex-direction:column;gap:4px;padding:10px;font-family:Inter,sans-serif;display:flex}.label-code{color:var(--accent);letter-spacing:-.5px;font-size:1.1rem;font-weight:800}.label-name{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:.78rem;font-weight:600;overflow:hidden}.label-dims{color:var(--text-secondary);font-size:.75rem;font-weight:500}.label-grain{border-radius:100px;width:fit-content;padding:2px 6px;font-size:.68rem;font-weight:700}.label-grain.con-veta{background:var(--warning-light);color:var(--warning)}.label-grain.libre{background:var(--success-light);color:var(--success)}.label-edges-mini{gap:3px;margin-top:2px;display:flex}.label-edge-dot{border:1px solid var(--border);width:14px;height:14px;color:var(--text-muted);border-radius:2px;justify-content:center;align-items:center;font-size:.55rem;font-weight:700;display:flex}.label-edge-dot.active{background:var(--accent);color:#fff;border-color:var(--accent)}.pc-0{fill:#fef08a}.pc-1{fill:#bbf7d0}.pc-2{fill:#bfdbfe}.pc-3{fill:#fde68a}.pc-4{fill:#fbcfe8}.pc-5{fill:#a5f3fc}.pc-6{fill:#c7d2fe}.pc-7{fill:#fed7aa}.pc-8{fill:#d9f99d}.pc-9{fill:#fecdd3}.pc-10{fill:#e9d5ff}.pc-11{fill:#cffafe}@media print{@page{size:A4 portrait;margin:0}body{background:#fff!important}.no-print{display:none!important}.lepton-pages-scroll{background:0 0!important;gap:0!important;padding:0!important}.lepton-page{page-break-after:always;min-height:100vh;width:100%!important;box-shadow:none!important;zoom:1!important;padding:12mm!important}.labels-print-page{grid-template-columns:repeat(4,1fr)!important;gap:4mm!important;padding:10mm!important;display:grid!important}.piece-label{page-break-inside:avoid;border:1.5px solid #000!important}}
