:root{--bg:#f1f5f9;--surface:#fff;--sidebar-bg:#0f172a;--sidebar-fg:#e2e8f0;--sidebar-muted:#64748b;--border:#e2e8f0;--text:#1e293b;--text-muted:#64748b;--primary:#2563eb;--primary-hover:#1d4ed8;--danger:#ef4444;--success:#16a34a;--radius:8px;--sans:system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;font-family:var(--sans);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:15px;line-height:1.5}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;padding:0}body{background:var(--bg)}h1,h2,h3{color:var(--text);margin:0;font-weight:600}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}.dashboard{flex-direction:column;gap:1.5rem;display:flex}.dash-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.dash-title{font-size:1.6rem;font-weight:700}.dash-refresh{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);align-items:center;gap:.5rem;padding:.55rem .9rem;font-size:.88rem;font-weight:600;transition:background .12s,border-color .12s;display:inline-flex}.dash-refresh:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.dash-refresh:disabled{opacity:.6;cursor:not-allowed}.dash-state{min-height:40vh;color:var(--text-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;display:flex}.dash-state-error{color:var(--danger)}.dash-retry,.dash-state-error .dash-retry{border-radius:var(--radius);background:var(--primary);color:#fff;border:none;margin-top:.25rem;padding:.5rem 1.1rem;font-size:.85rem;font-weight:600}.dash-retry:hover{background:var(--primary-hover)}.dash-empty-note{border:1px dashed var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text-muted);padding:.85rem 1rem;font-size:.9rem}.metric-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;display:grid}.metric-card{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--border);border-radius:var(--radius);align-items:center;gap:1rem;padding:1.15rem 1.25rem;transition:box-shadow .12s,transform .12s;display:flex;box-shadow:0 1px 2px #0f172a0a}.metric-card:hover{transform:translateY(-1px);box-shadow:0 6px 18px -8px #0f172a2e}.metric-icon{width:44px;height:44px;color:var(--text-muted);background:#f1f5f9;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.metric-body{flex-direction:column;min-width:0;display:flex}.metric-value{color:var(--text);font-size:1.85rem;font-weight:700;line-height:1.05}.metric-label{color:var(--text-muted);margin-top:.2rem;font-size:.82rem;font-weight:500}.tone-neutral{border-left-color:#475569}.tone-neutral .metric-icon{color:#475569;background:#e2e8f0}.tone-info{border-left-color:#0ea5e9}.tone-info .metric-icon{color:#0284c7;background:#e0f2fe}.tone-progress{border-left-color:#f59e0b}.tone-progress .metric-icon{color:#b45309;background:#fef3c7}.tone-testing{border-left-color:#8b5cf6}.tone-testing .metric-icon{color:#7c3aed;background:#ede9fe}.tone-ready{border-left-color:#2563eb}.tone-ready .metric-icon{color:#1d4ed8;background:#dbeafe}.tone-success{border-left-color:#16a34a}.tone-success .metric-icon{color:#15803d;background:#dcfce7}.metric-delayed.is-clear{border-left-color:#16a34a}.metric-delayed.is-clear .metric-icon{color:#15803d;background:#dcfce7}.metric-delayed.is-alert{border-color:#fecaca;border-left-color:var(--danger);background:#fef2f2;box-shadow:0 0 0 1px #ef444426}.metric-delayed.is-alert .metric-icon{color:var(--danger);background:#fee2e2}.metric-delayed.is-alert .metric-value,.metric-delayed.is-alert .metric-label{color:#b91c1c}.metric-flag{letter-spacing:.03em;text-transform:uppercase;background:var(--danger);color:#fff;border-radius:999px;align-self:flex-start;margin-top:.4rem;padding:.12rem .5rem;font-size:.68rem;font-weight:700}.delivery-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:1rem;padding:1.25rem;display:flex;box-shadow:0 1px 2px #0f172a0a}.delivery-head{color:var(--text);align-items:center;gap:.65rem;display:flex}.delivery-head>svg{color:var(--primary,#2563eb);flex-shrink:0}.delivery-title{margin:0;font-size:1.1rem;font-weight:700}.delivery-sub{color:var(--text-muted);margin:.1rem 0 0;font-size:.82rem}.delivery-state{border:1px dashed var(--border);border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:.6rem;padding:.85rem 1rem;font-size:.9rem;display:flex}.delivery-state-error{color:var(--danger);background:#fef2f2;border-color:#fecaca}.delivery-groups{flex-direction:column;gap:1.1rem;display:flex}.delivery-group{flex-direction:column;gap:.4rem;display:flex}.delivery-group-title{letter-spacing:.03em;text-transform:uppercase;color:var(--text-muted);align-items:center;gap:.35rem;margin:0;font-size:.78rem;font-weight:700;display:flex}.delivery-group-title.is-overdue{color:var(--danger)}.delivery-list{flex-direction:column;gap:.3rem;margin:0;padding:0;list-style:none;display:flex}.delivery-row{border:1px solid var(--border);background:#fff;border-left:3px solid #cbd5e1;border-radius:8px;grid-template-columns:minmax(96px,auto) minmax(70px,auto) minmax(90px,1.4fr) minmax(60px,auto) auto minmax(90px,1.2fr) minmax(80px,auto) minmax(96px,auto);align-items:center;gap:.6rem;padding:.5rem .7rem;font-size:.84rem;display:grid}.delivery-row.is-overdue{border-color:#fecaca;border-left-color:var(--danger);background:#fef2f2}.delivery-date{color:var(--text);white-space:nowrap;font-weight:600}.delivery-wo{color:var(--primary,#1d4ed8);white-space:nowrap;font-weight:600}.delivery-part,.delivery-customer{text-overflow:ellipsis;white-space:nowrap;color:var(--text);overflow:hidden}.delivery-jobtype{letter-spacing:.02em;text-transform:uppercase;color:var(--text-muted);white-space:nowrap;font-size:.72rem;font-weight:600}.delivery-qty{font-variant-numeric:tabular-nums;color:var(--text-muted);white-space:nowrap}.delivery-status{letter-spacing:.02em;text-transform:uppercase;color:#475569;white-space:nowrap;background:#f1f5f9;border-radius:999px;justify-self:start;padding:.1rem .5rem;font-size:.7rem;font-weight:700}.delivery-due{text-align:right;color:var(--text-muted);white-space:nowrap;justify-self:end;font-size:.78rem;font-weight:600}.delivery-due.is-overdue{color:var(--danger)}@media (width<=720px){.delivery-row{grid-template-columns:1fr 1fr;gap:.3rem .6rem}.delivery-due{text-align:left;justify-self:start}.delivery-status{justify-self:start}}.dashboard .spin{animation:.8s linear infinite dash-spin}@keyframes dash-spin{to{transform:rotate(360deg)}}.sbx{background:#fff;border:1px solid #cbd5e1;border-radius:8px;align-items:center;gap:6px;min-width:220px;padding:4px 8px;display:inline-flex}.sbx-icon{color:#94a3b8;flex:none}.sbx-input{background:0 0;border:none;outline:none;flex:1;min-width:0;font-size:13px}.sbx-clear{color:#94a3b8;cursor:pointer;background:0 0;border:none;align-items:center;padding:0;display:inline-flex}.sbx-clear:hover{color:#b91c1c}.sbx-count{color:#64748b;white-space:nowrap;font-size:11px}.kanban{flex-direction:column;gap:1rem;height:100%;min-height:0;display:flex}.kanban .kb-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.kanban .kb-heading{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.kanban .kb-title{margin:0;font-size:1.5rem;font-weight:700}.kanban .kb-count{color:#64748b;white-space:nowrap;font-size:.8125rem}.kanban .kb-actions{align-items:center;gap:.75rem;display:flex}.kanban .kb-readonly{color:#92400e;background:#fef3c7;border:1px solid #fde68a;border-radius:999px;align-items:center;gap:.35rem;padding:.3rem .6rem;font-size:.8rem;display:inline-flex}.kanban .kb-refresh,.kanban .kb-retry{color:#0f172a;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;align-items:center;gap:.4rem;padding:.45rem .8rem;font-size:.85rem;display:inline-flex}.kanban .kb-refresh:hover:not(:disabled),.kanban .kb-retry:hover{background:#f1f5f9}.kanban .kb-refresh:disabled{opacity:.6;cursor:default}.kanban .kb-state{color:#64748b;flex-direction:column;align-items:center;gap:.6rem;padding:3rem 1rem;display:flex}.kanban .kb-state-error{color:#b91c1c}.kanban .kb-empty{text-align:center;color:#64748b;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:2rem}.kanban .kb-tabs{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:10px;flex-wrap:wrap;flex:none;align-self:flex-start;gap:.25rem;padding:.25rem;display:flex}.kanban .kb-tab{color:#475569;cursor:pointer;background:0 0;border:none;border-radius:8px;padding:.4rem .9rem;font-size:.85rem;font-weight:600;transition:background .12s,color .12s}.kanban .kb-tab:hover{background:#e2e8f0}.kanban .kb-tab.is-active{color:#0f172a;background:#fff;box-shadow:0 1px 2px #0f172a14}.kanban .kb-board{scroll-behavior:smooth;flex:auto;align-items:flex-start;gap:.6rem;min-height:0;padding-bottom:.5rem;display:flex;overflow:auto hidden}.kanban .kb-board:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:8px}.kanban .kb-scroll-nav{gap:.25rem;display:inline-flex}.kanban .kb-scroll-btn{border:1px solid var(--border);background:var(--surface);width:32px;height:32px;color:var(--text);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.kanban .kb-scroll-btn:hover{background:var(--primary);border-color:var(--primary);color:#fff}.kanban .kb-col{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:12px;flex-direction:column;flex:0 0 200px;width:200px;max-height:100%;transition:background .12s,border-color .12s,box-shadow .12s;display:flex}.kanban .kb-col.is-over{background:#e0f2fe;border-color:#38bdf8;box-shadow:inset 0 0 0 2px #38bdf8}.kanban .kb-col-head{z-index:1;background:#f1f5f9;border-bottom:1px solid #e2e8f0;border-top-left-radius:12px;border-top-right-radius:12px;justify-content:space-between;align-items:center;gap:.4rem;padding:.55rem .65rem;display:flex;position:sticky;top:0}.kanban .kb-col-name{color:#1e293b;text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;font-weight:600;overflow:hidden}.kanban .kb-col-count{color:#475569;text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:999px;min-width:1.4rem;padding:.05rem .5rem;font-size:.75rem}.kanban .kb-col-body{flex-direction:column;gap:.5rem;padding:.6rem;display:flex;overflow-y:auto}.kanban .kb-col-empty{text-align:center;color:#94a3b8;margin:0;padding:.5rem 0;font-size:.85rem}.kanban .kb-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;flex-direction:column;gap:.4rem;padding:.6rem .65rem;display:flex;box-shadow:0 1px 2px #0f172a0d}.kanban .kb-card[draggable=true]{cursor:grab}.kanban .kb-card.is-dragging{opacity:.5;cursor:grabbing}.kanban .kb-card.is-busy{opacity:.85}.kanban .kb-card-top{justify-content:space-between;align-items:center;display:flex}.kanban .kb-card-wo{letter-spacing:.02em;color:#2563eb;font-size:.7rem;font-weight:600;text-decoration:none}.kanban .kb-card-wo:hover{text-decoration:underline}.kanban .kb-card-handle{color:#94a3b8;margin-left:auto;padding-left:4px;display:inline-flex}.kanban .kb-card{border-left-width:4px}.kanban .kb-card.kb-prio-critical{background:snow;border-left-color:#ef4444}.kanban .kb-card.kb-prio-high{background:#fffcf7;border-left-color:#f97316}.kanban .kb-card.kb-prio-normal{border-left-color:#3b82f6}.kanban .kb-card.kb-prio-low{border-left-color:#cbd5e1}.kanban .kb-prio-badge{letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;border-radius:999px;padding:1px 5px;font-size:.55rem;font-weight:700}.kanban .kb-prio-badge-critical{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca}.kanban .kb-prio-badge-high{color:#c2410c;background:#fff7ed;border:1px solid #fed7aa}.kanban .kb-prio-badge-normal{color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe}.kanban .kb-prio-badge-low{color:#475569;background:#f8fafc;border:1px solid #e2e8f0}.kanban .kb-card-part{color:#0f172a;word-break:break-word;font-size:.9rem;font-weight:600}.kanban .kb-card-meta,.kanban .kb-card-foot{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.kanban .kb-qty{color:#475569;font-size:.72rem}.kanban .kb-batch-name{color:#334155;background:#eef2ff;border-radius:6px;padding:.1rem .4rem;font-size:.72rem;font-weight:600}.kanban .kb-card-time{color:#475569;background:#f1f5f9;border-radius:6px;align-self:flex-start;align-items:center;gap:.3rem;padding:.15rem .4rem;font-size:.7rem;display:inline-flex}.kanban .kb-cust{color:#475569;text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:.7rem;overflow:hidden}.kanban .kb-card-busy{color:#2563eb;align-items:center;gap:.35rem;font-size:.72rem;display:inline-flex}.kanban .kb-card-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;align-items:flex-start;gap:.4rem;padding:.4rem .5rem;font-size:.72rem;display:flex}.kanban .kb-card-error span{flex:auto}.kanban .kb-card-error-x{color:#991b1b;cursor:pointer;background:0 0;border:none;flex:none;padding:0;display:inline-flex}.kanban .spin{animation:.9s linear infinite kb-spin}@keyframes kb-spin{to{transform:rotate(360deg)}}.ship{flex-direction:column;gap:1.25rem;display:flex}.ship-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.ship-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ship-title{margin:0;font-size:1.6rem;font-weight:700}.ship-refresh{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;align-items:center;gap:.5rem;padding:.55rem .9rem;font-size:.88rem;display:inline-flex}.ship-refresh:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.ship-refresh:disabled{opacity:.6;cursor:default}.ship-state{color:var(--text-muted);flex-direction:column;align-items:center;gap:.75rem;padding:3rem 1rem;display:flex}.ship-state-error{color:var(--danger)}.ship-retry,.ship-empty-note{font-size:.88rem}.ship-retry{border:1px solid var(--danger);background:var(--surface);color:var(--danger);border-radius:var(--radius);cursor:pointer;padding:.45rem .9rem}.ship-empty-note{background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);color:var(--text-muted);padding:.75rem 1rem}.ship-lanes{grid-template-columns:repeat(4,minmax(220px,1fr));align-items:start;gap:1rem;display:grid}@media (width<=1100px){.ship-lanes{grid-template-columns:repeat(2,minmax(220px,1fr))}}@media (width<=640px){.ship-lanes{grid-template-columns:1fr}}.ship-lane{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;min-height:120px;display:flex}.lane-head{border-bottom:2px solid var(--border);border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);justify-content:space-between;align-items:center;padding:.65rem .8rem;font-size:.9rem;font-weight:600;display:flex}.tone-ready .lane-head{border-bottom-color:#2563eb}.tone-planned .lane-head{border-bottom-color:#7c3aed}.tone-partial .lane-head{border-bottom-color:#d97706}.tone-completed .lane-head{border-bottom-color:var(--success)}.lane-count{background:var(--surface);border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:.05rem .55rem;font-size:.78rem}.lane-body{flex-direction:column;gap:.6rem;padding:.6rem;display:flex}.lane-empty{color:var(--text-muted);text-align:center;margin:0;padding:.5rem 0;font-size:.82rem}.ship-card{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:.5rem;padding:.7rem;display:flex}.ship-card.rag-red{border-left-color:var(--danger)}.ship-card.rag-amber{border-left-color:#d97706}.ship-card.rag-green{border-left-color:var(--success)}.card-top{justify-content:space-between;align-items:center;gap:.4rem;display:flex}.card-wo{font-size:.9rem;font-weight:700}.card-status{background:var(--bg);color:var(--text-muted);border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:.1rem .45rem;font-size:.7rem}.card-status.status-ready-to-ship{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.card-status.status-partial-shipment{color:#b45309;background:#fffbeb;border-color:#fde68a}.card-status.status-fully-shipped,.card-status.status-closed{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.card-part{color:var(--text);align-items:center;gap:.35rem;font-size:.82rem;display:flex}.card-part-num{font-weight:600}.card-jobtype{color:var(--text-muted);background:var(--bg);border-radius:4px;margin-left:auto;padding:.05rem .4rem;font-size:.7rem}.card-customer{color:var(--text-muted);font-size:.76rem}.card-qtys{flex-wrap:wrap;gap:.4rem;display:flex}.qty{background:var(--bg);border-radius:6px;flex-direction:column;flex:1 1 0;align-items:center;min-width:52px;padding:.3rem .2rem;display:flex}.qty-val{font-size:.95rem;font-weight:700}.qty-lbl{text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);font-size:.62rem}.qty-remaining .qty-val{color:var(--primary)}.qty-planned .qty-val{color:#7c3aed}.card-actions{align-items:center;gap:.4rem;display:flex}.card-toggle{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:.25rem;padding:.35rem .55rem;font-size:.76rem;display:inline-flex}.card-toggle:hover{border-color:var(--primary);color:var(--primary)}.card-batches{border-top:1px dashed var(--border);padding-top:.5rem}.batches-state{color:var(--text-muted);align-items:center;gap:.35rem;margin:0;font-size:.78rem;display:flex}.batches-error{color:var(--danger)}.batch-list{flex-direction:column;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.batch-row{background:var(--bg);border-radius:6px;flex-direction:column;gap:.2rem;padding:.35rem .45rem;font-size:.76rem;display:flex}.batch-line{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.batch-num{font-weight:700}.batch-delivery{font-size:.72rem}.batch-date{color:var(--text-muted)}.batch-weeks{color:var(--primary);background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:.02rem .4rem;font-weight:600}.batch-weeks-overdue{color:var(--danger);background:#fef2f2;border-color:#fecaca}.batch-extra{font-size:.72rem}.batch-qty{color:var(--text)}.batch-status{border:1px solid var(--border);border-radius:999px;padding:.05rem .4rem;font-size:.68rem}.bs-planned{color:#6d28d9;background:#f5f3ff;border-color:#ddd6fe}.bs-shipped{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.bs-closed{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.batch-meta{color:var(--text-muted)}.batch-meta-empty{font-style:italic}@keyframes ship-spin{to{transform:rotate(360deg)}}.fe4{color:#1f2937;max-width:1200px;margin:0 auto;padding:1.5rem}.fe4 a{color:#2563eb;text-decoration:none}.fe4 a:hover{text-decoration:underline}.fe4-header{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;display:flex}.fe4-title{margin:0;font-size:1.5rem;font-weight:700}.fe4-sub{color:#6b7280;margin:.25rem 0 0;font-size:.9rem}.fe4-back{align-items:center;gap:.35rem;margin-bottom:.75rem;font-size:.9rem;display:inline-flex}.fe4-state{color:#6b7280;text-align:center;flex-direction:column;align-items:center;gap:.75rem;padding:3rem 1rem;display:flex}.fe4-state-error{color:#b91c1c}.fe4-retry,.fe4-btn{cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:6px;align-items:center;gap:.4rem;padding:.4rem .85rem;font-size:.85rem;display:inline-flex}.fe4-btn-primary{color:#fff;background:#2563eb;border-color:#2563eb}.fe4-btn-danger{color:#b91c1c;background:#fff;border-color:#fca5a5}.fe4-btn-danger:hover{background:#fef2f2}.fe4-btn:disabled{opacity:.55;cursor:not-allowed}.fe4-header-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.fe4-section-head-row{justify-content:space-between;align-items:center;gap:.75rem;margin:.5rem 0 .75rem;display:flex}.fe4-item-head-right{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.fe4-item-fields{color:#4b5563;flex-wrap:wrap;gap:.35rem 1.25rem;margin:.25rem 0 .5rem;font-size:.85rem;display:flex}.fe4-item-fields strong{color:#6b7280;font-weight:600}.fe4-progress{flex-direction:column;gap:.45rem;max-width:32rem;display:flex}.fe4-progress-row{align-items:center;gap:.6rem;display:flex}.fe4-progress-label{text-transform:uppercase;letter-spacing:.03em;color:#6b7280;flex:0 0 4.5rem;font-size:.7rem;font-weight:700}.fe4-bar{background:#e5e7eb;border-radius:999px;flex:auto;min-width:0;height:8px;position:relative;overflow:hidden}.fe4-bar-fill{background:#2563eb;border-radius:999px;height:100%;transition:width .2s}.fe4-bar-fill-done{background:#16a34a}.fe4-bar-fill-flow{background:#2563eb}.fe4-progress-value{color:#475569;font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;flex:none;max-width:14rem;font-size:.72rem;font-weight:600;overflow:hidden}.fe4-progress-row-phases{align-items:center}.fe4-stackbar{background:#e5e7eb;border-radius:999px;flex:auto;min-width:0;height:8px;display:flex;overflow:hidden}.fe4-stack-seg{min-width:2px;height:100%;transition:width .2s}.fe4-stack-seg.phase-MATERIAL_PLANNING,.fe4-legend-swatch.phase-MATERIAL_PLANNING{background:#9ca3af}.fe4-stack-seg.phase-IN_PRODUCTION,.fe4-legend-swatch.phase-IN_PRODUCTION{background:#2563eb}.fe4-stack-seg.phase-TESTING,.fe4-legend-swatch.phase-TESTING{background:#f59e0b}.fe4-stack-seg.phase-READY_TO_SHIP,.fe4-legend-swatch.phase-READY_TO_SHIP{background:#14b8a6}.fe4-stack-seg.phase-SHIPPING,.fe4-legend-swatch.phase-SHIPPING{background:#22c55e}.fe4-stack-seg.phase-COMPLETED,.fe4-legend-swatch.phase-COMPLETED{background:#15803d}.fe4-stack-legend{flex-wrap:wrap;gap:.3rem .6rem;padding-left:5.1rem;display:flex}.fe4-legend-chip{color:#475569;font-variant-numeric:tabular-nums;white-space:nowrap;align-items:center;gap:.3rem;font-size:.68rem;font-weight:600;display:inline-flex}.fe4-legend-swatch{border-radius:3px;flex:none;width:10px;height:10px;display:inline-block}@keyframes fe4-spin{to{transform:rotate(360deg)}}.fe4-badge{letter-spacing:.02em;color:#3730a3;white-space:nowrap;background:#eef2ff;border-radius:999px;padding:.15rem .55rem;font-size:.72rem;font-weight:600;display:inline-block}.fe4-badge.prio-CRITICAL{color:#991b1b;background:#fee2e2}.fe4-badge.prio-HIGH{color:#9a3412;background:#ffedd5}.fe4-badge.prio-NORMAL{color:#075985;background:#e0f2fe}.fe4-badge.prio-LOW{color:#475569;background:#f1f5f9}.fe4-badge.status{color:#065f46;background:#ecfdf5}.fe4-badge.phase-MATERIAL_PLANNING{color:#475569;background:#f1f5f9}.fe4-badge.phase-IN_PRODUCTION{color:#1e40af;background:#dbeafe}.fe4-badge.phase-TESTING{color:#92400e;background:#fef3c7}.fe4-badge.phase-READY_TO_SHIP{color:#115e59;background:#ccfbf1}.fe4-badge.phase-SHIPPING{color:#166534;background:#dcfce7}.fe4-badge.phase-COMPLETED{color:#f0fdf4;background:#14532d}.fe4-wo-meta{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem 1.5rem;margin-bottom:1.5rem;padding:1rem 1.25rem;display:grid}.fe4-meta-item{flex-direction:column;gap:.2rem;display:flex}.fe4-meta-label{text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;font-size:.72rem}.fe4-meta-value{font-size:.95rem;font-weight:600}.fe4-item-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:1.25rem;padding:1rem 1.25rem}.fe4-item-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.75rem;display:flex}.fe4-item-title{margin:0;font-size:1.05rem;font-weight:700}.fe4-item-qty{color:#6b7280;font-size:.85rem}.fe4-section-label{text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;margin:.85rem 0 .5rem;font-size:.75rem;font-weight:700}.fe4-timeline{flex-wrap:wrap;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.fe4-stage{background:#fafafa;border:1px solid #e5e7eb;border-left:3px solid #cbd5e1;border-radius:6px;min-width:150px;padding:.5rem .7rem}.fe4-stage.is-done{background:#f0fdf4;border-left-color:#16a34a}.fe4-stage-name{text-transform:uppercase;letter-spacing:.03em;color:#374151;font-size:.78rem;font-weight:700}.fe4-stage-status{margin-top:.2rem;font-size:.85rem}.fe4-stage-date{color:#9ca3af;margin-top:.2rem;font-size:.72rem}.fe4-table{border-collapse:collapse;width:100%;font-size:.85rem}.fe4-table th,.fe4-table td{text-align:left;vertical-align:top;border-bottom:1px solid #eef0f3;padding:.5rem .6rem}.fe4-table th{text-transform:uppercase;letter-spacing:.04em;color:#9ca3af;font-size:.72rem;font-weight:700}.fe4-table tbody tr:hover{background:#f9fafb}.fe4-muted{color:#9ca3af;font-size:.85rem}.fe4-badge.batch-status{text-transform:capitalize}.fe4-badge.batch-status.status-PLANNED{color:#475569;background:#f1f5f9}.fe4-badge.batch-status.status-READY{color:#115e59;background:#ccfbf1}.fe4-badge.batch-status.status-SHIPPED{color:#1e40af;background:#dbeafe}.fe4-badge.batch-status.status-DELIVERED{color:#166534;background:#dcfce7}.fe4-badge.batch-status.status-CLOSED{color:#f9fafb;background:#1f2937}.fe4-batch-table .fe4-batch-row td{border-bottom:none}.fe4-batch-table .fe4-batch-bar-row td{padding-top:.25rem;padding-bottom:.6rem}.fe4-batch-table .fe4-batch-bar-row:hover{background:0 0}.fe4-stepbar{border-radius:999px;gap:2px;width:100%;height:7px;display:flex;overflow:hidden}.fe4-step-seg{background:#e5e7eb;border-radius:2px;flex:1 1 0;min-width:2px;height:100%}.fe4-step-seg.is-done{background:#16a34a}.fe4-step-seg.is-current{background:#fbbf24;box-shadow:inset 0 0 0 2px #d97706}.fe4-step-seg.is-future{background:#e5e7eb}.fe4-step-seg.is-unknown{background:#cbd5e1}.fe4-searchbar{gap:.5rem;margin-bottom:1rem;display:flex}.fe4-searchbar .fe4-input{flex:1}.fe4-input,.fe4-select{color:#1f2937;background:#fff;border:1px solid #d1d5db;border-radius:6px;width:100%;padding:.45rem .6rem;font-size:.88rem}.fe4-input:focus,.fe4-select:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb26}.fe4-filters{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;margin-bottom:1.25rem;padding:1rem;display:grid}.fe4-field{flex-direction:column;gap:.25rem;display:flex}.fe4-field label{text-transform:uppercase;letter-spacing:.04em;color:#9ca3af;font-size:.72rem;font-weight:700}.fe4-filters-actions{grid-column:1/-1;justify-content:flex-end;gap:.5rem;display:flex}.fe4-results{flex-direction:column;gap:.6rem;display:flex}.fe4-result{color:inherit;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:.85rem 1rem;display:block;text-decoration:none!important}.fe4-result:hover{border-color:#2563eb;box-shadow:0 1px 3px #0000000f}.fe4-result-head{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.fe4-result-wo{font-size:1rem;font-weight:700}.fe4-result-meta{color:#6b7280;flex-wrap:wrap;gap:.5rem 1rem;margin-top:.3rem;font-size:.85rem;display:flex}.fe4-result-items{color:#4b5563;margin-top:.4rem;font-size:.82rem}.fe4-pager{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-top:1rem;display:flex}.fe4-pager-info{color:#6b7280;font-size:.85rem}.fe4-pager-controls{align-items:center;gap:.5rem;display:flex}.fe4-denied{text-align:center;color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;flex-direction:column;align-items:center;gap:.75rem;padding:3rem 1rem;display:flex}.fe4-diff{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.fe4-diff-old{color:#b91c1c;text-decoration:line-through}.fe4-diff-new{color:#047857;font-weight:600}.wom-backdrop{z-index:100;background:#0f172a73;justify-content:center;align-items:flex-start;padding:40px 16px;display:flex;position:fixed;inset:0;overflow:auto}.wom{background:#fff;border-radius:10px;flex-direction:column;width:100%;max-width:960px;max-height:calc(100vh - 80px);display:flex;box-shadow:0 20px 50px #0f172a4d}.wom-sm{max-width:460px}.wom-header{border-bottom:1px solid #e2e8f0;justify-content:space-between;align-items:center;gap:12px;padding:16px 20px;display:flex}.wom-title{color:#0f172a;margin:0;font-size:1.125rem;font-weight:700}.wom-close{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.wom-close:hover{color:#0f172a;background:#f1f5f9}.wom-body{flex-direction:column;gap:16px;padding:16px 20px;display:flex;overflow:auto}.wom-footer{border-top:1px solid #e2e8f0;justify-content:flex-end;align-items:center;gap:10px;padding:14px 20px;display:flex}.wom-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;display:grid}.wom-field{flex-direction:column;gap:4px;display:flex}.wom-field-wide{grid-column:1/-1}.wom-field label{text-transform:uppercase;letter-spacing:.04em;color:#64748b;font-size:.6875rem;font-weight:600}.wom-field .wom-req{color:#dc2626}.wom-field input,.wom-field select,.wom-field textarea{font:inherit;box-sizing:border-box;background:#fff;border:1px solid #cbd5e1;border-radius:6px;width:100%;padding:6px 8px;font-size:.8125rem}.wom-field textarea{resize:vertical;min-height:48px}.wom-field input:focus,.wom-field select:focus,.wom-field textarea:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb26}.wom-section-title{color:#0f172a;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 0;font-size:.875rem;font-weight:700;display:flex}.wom-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px;position:relative}.wom-item+.wom-item{margin-top:10px}.wom-item-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.wom-item-label{color:#475569;font-size:.75rem;font-weight:700}.wom-item-remove{color:#b91c1c;cursor:pointer;background:0 0;border:1px solid #fca5a5;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:.75rem;display:inline-flex}.wom-item-remove:hover{background:#fef2f2}.wom-btn{font:inherit;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;align-items:center;gap:6px;padding:7px 14px;font-size:.8125rem;display:inline-flex}.wom-btn:hover{background:#f8fafc}.wom-btn-primary{color:#fff;background:#2563eb;border-color:#2563eb}.wom-btn-primary:hover{background:#1d4ed8}.wom-btn-danger{color:#fff;background:#dc2626;border-color:#dc2626}.wom-btn-danger:hover{background:#b91c1c}.wom-btn:disabled{opacity:.6;cursor:default}.wom-btn-add{color:#2563eb;border-style:dashed;border-color:#93c5fd}.wom-error{color:#b91c1c;white-space:normal;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;align-items:flex-start;gap:8px;padding:10px 12px;font-size:.8125rem;display:flex}.wom-field-error{color:#b91c1c;font-size:.6875rem}.wom-confirm-text{color:#334155;margin:0;font-size:.875rem;line-height:1.5}.wog-group-actions{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.wog-item-del{color:#94a3b8;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:3px;display:inline-flex}.wog-item-del:hover{color:#b91c1c;background:#fef2f2;border-color:#fca5a5}.wog{flex-direction:column;gap:16px;min-height:100%;display:flex}.wog-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.wog-heading{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.wog-title{margin:0;font-size:1.5rem;font-weight:700}.wog-count{color:#64748b;white-space:nowrap;font-size:.8125rem}.wog-actions{align-items:center;gap:12px;display:flex}.wog-readonly{color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;align-items:center;gap:6px;padding:4px 10px;font-size:.8125rem;display:inline-flex}.wog-new-btn{color:#fff;cursor:pointer;background:#2563eb;border:1px solid #2563eb;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:.875rem;display:inline-flex}.wog-new-btn:hover{background:#1d4ed8}.wog-refresh{cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:.875rem;display:inline-flex}.wog-refresh:disabled{opacity:.6;cursor:default}.wog-export{cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:.875rem;display:inline-flex}.wog-export:hover:not(:disabled){background:#f8fafc}.wog-export:disabled{opacity:.6;cursor:default}.wog-filters{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;flex-wrap:wrap;align-items:flex-end;gap:10px;padding:12px;display:flex}.wog-field{flex-direction:column;gap:4px;display:flex}.wog-field label{text-transform:uppercase;letter-spacing:.04em;color:#64748b;font-size:.6875rem;font-weight:600}.wog-field input,.wog-field select{background:#fff;border:1px solid #cbd5e1;border-radius:6px;min-width:120px;padding:5px 8px;font-size:.8125rem}.wog-field .wog-q{min-width:220px}.wog-filter-actions{gap:8px;display:flex}.wog-btn{cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:.8125rem;display:inline-flex}.wog-btn-primary{color:#fff;background:#2563eb;border-color:#2563eb}.wog-btn:disabled{opacity:.6;cursor:default}.wog-state{color:#64748b;text-align:center;flex-direction:column;align-items:center;gap:10px;padding:48px;display:flex}.wog-state-error{color:#b91c1c}.wog-retry{cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;margin-top:4px;padding:6px 14px}.wog-scroll{border:1px solid #e2e8f0;border-radius:8px;max-height:calc(100vh - 220px);overflow:hidden auto}.wog-table{table-layout:fixed;border-collapse:separate;border-spacing:0;width:100%;font-size:.8125rem}.wog-col-expand{width:34px}.wog-col-wo{width:10%}.wog-col-part{width:auto}.wog-col-job{width:74px}.wog-col-qty{width:60px}.wog-col-shipped{width:132px}.wog-col-workflow{width:24%}.wog-col-status{width:118px}.wog-table th,.wog-table td{text-align:left;vertical-align:middle;border-bottom:1px solid #eef2f7;padding:6px 8px}.wog-table thead th{z-index:2;text-transform:uppercase;letter-spacing:.03em;color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;background:#f1f5f9;font-size:.6875rem;font-weight:700;position:sticky;top:0}.wog-th-inner{align-items:center;gap:4px;display:inline-flex}.wog-th-static{cursor:default}.wog-sort-icon{opacity:.4}.wog-sort-icon.active{opacity:1;color:#2563eb}.wog-truncate{text-overflow:ellipsis;white-space:nowrap;max-width:0;overflow:hidden}.wog-group-row td{color:#1e3a8a;background:#eef4ff;border-bottom:1px solid #c7d7fb;font-weight:600}.wog-group-inner{flex-wrap:wrap;align-items:center;gap:10px;display:inline-flex}.wog-collapse-btn{color:#1e3a8a;cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;font-size:.8125rem;font-weight:700;display:inline-flex}.wog-group-meta{color:#334155;font-size:.75rem;font-weight:500}.wog-group-actions{align-items:center;gap:6px;display:inline-flex}.wog-group-act{color:#1e3a8a;cursor:pointer;background:#fff;border:1px solid #c7d2fe;border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-size:.6875rem;font-weight:600;display:inline-flex}.wog-group-act:hover{background:#eef2ff}.wog-group-act-danger{color:#b91c1c;border-color:#fca5a5}.wog-group-act-danger:hover{background:#fef2f2}.wog-item-row{cursor:pointer}.wog-item-row:hover td{background:#f8fafc}.wog-item-row-open td{background:#f1f5f9}.wog-c-expand{text-align:center;color:#64748b}.wog-expand-btn{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:2px;display:inline-flex}.wog-expand-btn:hover{color:#334155;background:#e2e8f0}.wog-c-part{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem}.wog-ro{color:#334155}.wog-ro-derived{color:#475569;font-variant-numeric:tabular-nums}.wog-muted{color:#94a3b8}.wog-spare{color:#64748b;font-size:.6875rem}.wog-th-status,.wog-c-status{text-align:right}.wog-status-pill{letter-spacing:.01em;white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;border:1px solid #0000;border-radius:999px;max-width:100%;padding:2px 9px;font-size:.6875rem;font-weight:700;display:inline-block;overflow:hidden}.wog-status-pill-green{color:#15803d;background:#dcfce7;border-color:#bbf7d0}.wog-status-pill-yellow{color:#b45309;background:#fef3c7;border-color:#fde68a}.wog-status-pill-red{color:#b91c1c;background:#fee2e2;border-color:#fecaca}.wog-bar-wrap{align-items:center;gap:7px;min-width:0;display:flex}.wog-bar-stack{flex-direction:column;gap:2px;width:100%;min-width:0;display:flex}.wog-bar{background:#e2e8f0;border-radius:999px;flex:auto;min-width:0;height:7px;position:relative;overflow:hidden}.wog-bar-fill{border-radius:999px;height:100%;transition:width .2s}.wog-bar-fill-green{background:#16a34a}.wog-bar-fill-yellow{background:#d97706}.wog-bar-fill-red{background:#dc2626}.wog-bar-fill-flow{background:#2563eb}.wog-bar-label{color:#475569;font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:.6875rem;font-weight:700}.wog-bar-caption{color:#64748b;max-width:100%;font-size:.625rem;font-weight:600;display:block}.wog-link{color:#2563eb;font-weight:600;text-decoration:none}.wog-link:hover{text-decoration:underline}.wog-prio{border-radius:999px;padding:1px 7px;font-size:.6875rem;font-weight:700;display:inline-block}.wog-prio-critical{color:#b91c1c;background:#fee2e2}.wog-prio-high{color:#c2410c;background:#ffedd5}.wog-prio-normal{color:#475569;background:#e2e8f0}.wog-prio-low{color:#64748b;background:#f1f5f9}.wog-c-part .wog-prio{vertical-align:middle;margin-left:6px;padding:0 6px;font-size:.625rem}.wog-job{color:#475569;background:#e2e8f0;border-radius:4px;padding:1px 6px;font-size:.6875rem;font-weight:700;display:inline-block}.wog-job-pcba{color:#1d4ed8;background:#dbeafe}.wog-job-chs{color:#b45309;background:#fef3c7}.wog-job-tray{color:#6d28d9;background:#ede9fe}.wog-job-assembly{color:#0f766e;background:#ccfbf1}.wog-jt-pcba td:first-child{box-shadow:inset 3px 0 #3b82f6}.wog-jt-chs td:first-child{box-shadow:inset 3px 0 #f59e0b}.wog-jt-tray td:first-child{box-shadow:inset 3px 0 #8b5cf6}.wog-jt-assembly td:first-child{box-shadow:inset 3px 0 #14b8a6}.wog-detail-row td{background:#fbfcfe;border-bottom:1px solid #e2e8f0}.wog-detail-cell{padding:0!important}.wog-detail{flex-direction:column;gap:14px;padding:14px 16px 16px;display:flex}.wog-detail-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 18px;display:grid}.wog-field-ro{flex-direction:column;gap:2px;display:flex}.wog-detail-wide{max-width:720px}.wog-field-label{text-transform:uppercase;letter-spacing:.03em;color:#94a3b8;font-size:.6875rem;font-weight:700}.wog-field-value{color:#1e293b;white-space:pre-wrap;word-break:break-word;font-size:.8125rem}.wog-detail-section{flex-direction:column;gap:8px;display:flex}.wog-detail-h{text-transform:uppercase;letter-spacing:.03em;color:#475569;margin:0;font-size:.75rem;font-weight:700}.wog-batch-table{border-collapse:separate;border-spacing:0;table-layout:fixed;background:#fff;border:1px solid #e2e8f0;border-radius:8px;width:100%;max-width:100%;font-size:.75rem;overflow:hidden}.wog-batch-table th,.wog-batch-table td{text-align:left;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #eef2f7;padding:5px 10px;overflow:hidden}.wog-batch-table thead th{color:#475569;text-transform:uppercase;letter-spacing:.03em;background:#f8fafc;font-size:.6875rem;font-weight:700}.wog-batch-table tbody tr:last-child td{border-bottom:none}.wog-bt-batch{width:74px}.wog-bt-qty{width:48px}.wog-bt-status{width:96px}.wog-bt-progress{width:auto}.wog-bt-stage{width:18%}.wog-bt-date{width:104px}.wog-bt-stage-text{color:#475569}.wog-batch-status{text-transform:uppercase;letter-spacing:.02em;border-radius:999px;padding:1px 7px;font-size:.625rem;font-weight:700;display:inline-block}.wog-batch-status.bs-planned{color:#475569;background:#f1f5f9;border:1px solid #e2e8f0}.wog-batch-status.bs-ready{color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe}.wog-batch-status.bs-shipped{color:#0e7490;background:#ecfeff;border:1px solid #a5f3fc}.wog-batch-status.bs-delivered{color:#047857;background:#ecfdf5;border:1px solid #a7f3d0}.wog-batch-status.bs-closed{color:#6d28d9;background:#f5f3ff;border:1px solid #ddd6fe}@keyframes wog-spin{to{transform:rotate(360deg)}}.wog-summary{flex-wrap:wrap;gap:10px;margin:4px 0 12px;display:flex}.wog-sum-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:2px;min-width:110px;padding:10px 14px;display:flex}.wog-sum-value{color:#0f172a;font-size:20px;font-weight:700}.wog-sum-value small{color:#64748b;font-size:12px;font-weight:600}.wog-sum-label{text-transform:uppercase;letter-spacing:.03em;color:#64748b;font-size:11px}.wog-sum-rag-row{gap:6px;margin-top:2px;display:flex}.wog-rag-pip{text-align:center;border-radius:6px;min-width:26px;padding:2px 6px;font-size:13px;font-weight:700}.wog-rag-green{color:#047857;background:#ecfdf5;border:1px solid #a7f3d0}.wog-rag-yellow{color:#b45309;background:#fffbeb;border:1px solid #fde68a}.wog-rag-red{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca}.wog-sum-bottleneck{flex:240px}.wog-sum-stages{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.wog-stage-chip{color:#475569;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:999px;padding:2px 8px;font-size:11px}.wog-stage-chip b{color:#1e3a8a}.wog-views{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;font-size:12px;display:flex}.wog-views-icon{color:#64748b}.wog-views-label{color:#64748b;font-weight:600}.wog-view-chip{background:#eef4ff;border:1px solid #c7d7fb;border-radius:999px;align-items:center;display:inline-flex;overflow:hidden}.wog-view-apply{color:#1e3a8a;cursor:pointer;background:0 0;border:none;padding:3px 6px 3px 10px;font-weight:600}.wog-view-del{color:#64748b;cursor:pointer;background:0 0;border:none;align-items:center;padding:3px 7px 3px 3px;display:inline-flex}.wog-view-del:hover{color:#b91c1c}.wog-view-save{color:#475569;cursor:pointer;background:#fff;border:1px dashed #cbd5e1;border-radius:999px;align-items:center;gap:4px;padding:3px 10px;display:inline-flex}.wog-view-save:hover{color:#2563eb;border-color:#2563eb}.bsb-bar{gap:2px;width:100%;min-width:90px;display:flex}.bsb-seg{background:#e2e8f0;border-radius:2px;flex:1;height:8px}.bsb-seg.is-done{background:#2563eb}.bsb-seg.is-current{background:#f59e0b}.bsb-seg.is-future{background:#e2e8f0}.bsb-seg.is-unknown{background:#cbd5e1}.eim-section{border-top:1px solid #e2e8f0;margin-top:14px;padding-top:14px}.eim-section:first-child{border-top:none;margin-top:0;padding-top:0}.eim-section-head{align-items:center;gap:10px;margin-bottom:10px;display:flex}.eim-section-title{color:#0f172a;margin:0;font-size:.9375rem;font-weight:700}.eim-ro-badge{color:#64748b;background:#f1f5f9;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:.6875rem;font-weight:600;display:inline-flex}.eim-section-actions{justify-content:flex-end;margin-top:10px;display:flex}.eim-empty{color:#64748b;margin:0;font-size:.875rem}.eim-state{color:#64748b;align-items:center;gap:8px;font-size:.875rem;display:flex}.eim-input{font:inherit;box-sizing:border-box;background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:5px 7px;font-size:.8125rem}.eim-input:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb26}.eim-ro-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 20px;margin:0;display:grid}.eim-ro-field dt{text-transform:uppercase;letter-spacing:.04em;color:#64748b;font-size:.6875rem;font-weight:600}.eim-ro-field dd{color:#1e293b;word-break:break-word;margin:2px 0 0;font-size:.875rem}.eim-ro-field-wide{grid-column:1/-1}.eim-batch-summary{color:#475569;flex-wrap:wrap;gap:16px;margin-bottom:10px;font-size:.8125rem;display:flex}.eim-batch-summary strong{color:#0f172a}.eim-batch-table{border-collapse:collapse;width:100%;font-size:.8125rem}.eim-batch-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:#64748b;border-bottom:1px solid #e2e8f0;padding:6px 8px;font-size:.6875rem;font-weight:600}.eim-batch-table td{vertical-align:top;color:#1e293b;border-bottom:1px solid #f1f5f9;padding:6px 8px}.eim-num{text-align:right;font-variant-numeric:tabular-nums}.eim-track{word-break:break-word;max-width:200px}.eim-muted{color:#94a3b8}.eim-bstatus{border-radius:999px;padding:1px 8px;font-size:.6875rem;font-weight:700;display:inline-block}.eim-bstatus-planned{color:#92400e;background:#fef3c7}.eim-bstatus-ready{color:#3730a3;background:#e0e7ff}.eim-bstatus-shipped{color:#1e40af;background:#dbeafe}.eim-bstatus-delivered{color:#155e75;background:#cffafe}.eim-bstatus-closed{color:#166534;background:#dcfce7}.eim-row-actions{white-space:nowrap;gap:6px;display:flex}.eim-icon-btn{padding:5px 7px}.eim-icon-danger{color:#b91c1c;border-color:#fca5a5}.eim-icon-danger:hover:not(:disabled){background:#fef2f2}.eim-icon-btn:disabled{opacity:.5;cursor:not-allowed}.eim-edit-row td{background:#f8fafc}.eim-edit-track{flex-direction:column;gap:4px;min-width:140px;display:flex}.eim-edit-track .eim-input{width:100%}.eim-batch-tools{flex-direction:column;gap:12px;margin-top:12px;display:flex}.eim-subhead{color:#334155;align-items:center;gap:6px;margin-bottom:6px;font-size:.8125rem;font-weight:700;display:flex}.eim-add{border-top:1px solid #e2e8f0;padding-top:12px}.eim-add-row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.eim-add-row .wom-field{max-width:160px}.eim-add-btn{height:34px}.eim-split-toggle{align-self:flex-start}.eim-split{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:8px;padding:12px}.eim-split-hint{color:#64748b;font-size:.75rem;font-weight:500}.eim-split-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.eim-split-label{color:#475569;flex:0 0 64px;font-size:.8125rem;font-weight:600}.eim-split-qty{width:90px}.eim-split-actions{gap:8px;margin-top:4px;display:flex}.eim-bsplit-row>td{background:#f8fafc;padding:0}.eim-bsplit{margin:8px 0}.eim-split-ok{color:#15803d}.eim-split-bad{color:#b91c1c}.eim-bstage{flex-direction:column;gap:4px;min-width:150px;display:flex}.eim-bstage-top{align-items:center;gap:6px;display:flex}.eim-bstage-select{flex:auto;min-width:0;max-width:180px}.eim-bstage-pill{color:#3730a3;white-space:nowrap;text-overflow:ellipsis;background:#eef2ff;border-radius:999px;flex:auto;padding:2px 8px;font-size:.6875rem;font-weight:700;display:inline-block;overflow:hidden}.eim-bstage-ro{color:#1e293b;font-size:.8125rem}.eim-bstage-hist-btn{flex:none;padding:4px 6px}.eim-bstage-error{font-size:.75rem}.eim-bhist-row>td{background:#f8fafc;padding:0}.eim-bhist{padding:10px 12px}.eim-bhist-list{flex-direction:column;gap:4px;margin:6px 0 0;padding:0;list-style:none;display:flex}.eim-bhist-item{border-bottom:1px solid #eef2f7;align-items:baseline;gap:10px;padding:3px 0;font-size:.8125rem;display:flex}.eim-bhist-item:last-child{border-bottom:none}.eim-bhist-stage{color:#1e293b;flex:none;font-weight:700}.eim-bhist-time{color:#64748b;font-variant-numeric:tabular-nums;margin-left:auto}.eim-bhist-by{color:#94a3b8;font-size:.75rem}.eim-footer{align-items:center;gap:10px;width:100%;display:flex}.eim-footer-spacer{flex:auto}.eim-delete-item-btn{color:#b91c1c;border-color:#fca5a5;align-items:center;gap:6px;display:inline-flex}.eim-delete-item-btn:hover:not(:disabled){background:#fef2f2;border-color:#f87171}.eim-history-toggle{cursor:pointer;color:#0f172a;background:0 0;border:none;align-items:center;gap:6px;padding:0;display:inline-flex}.eim-history-toggle .eim-section-title{font-size:.9375rem}.eim-history-toggle:hover .eim-section-title{color:#2563eb}.eim-history-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.eim-history-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:8px 10px}.eim-history-meta{flex-wrap:wrap;align-items:baseline;gap:8px;font-size:.8125rem;display:flex}.eim-history-action{color:#1e293b;font-weight:700}.eim-history-user{color:#475569;font-weight:600}.eim-history-time{color:#94a3b8;font-variant-numeric:tabular-nums;margin-left:auto;font-size:.75rem}.eim-history-change{flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;font-size:.8125rem;display:flex}.eim-history-old{color:#b91c1c;word-break:break-word;text-decoration:line-through}.eim-history-arrow{color:#94a3b8}.eim-history-new{color:#15803d;word-break:break-word;font-weight:600}.eim-history-comment{color:#475569;word-break:break-word;margin-top:4px;font-size:.8125rem}.dgantt{--dg-label-w:220px;--dg-overdue-w:96px;--dg-week-min:64px;--dg-border:#e2e8f0;--dg-ink:#0f172a;--dg-muted:#64748b;flex-direction:column;gap:1rem;height:100%;min-height:0;display:flex}.dgantt .dg-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.dgantt .dg-heading{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.dgantt .dg-title{color:var(--dg-ink);align-items:center;gap:.5rem;margin:0;font-size:1.5rem;font-weight:700;display:inline-flex}.dgantt .dg-count{color:var(--dg-muted);white-space:nowrap;font-size:.8125rem}.dgantt .dg-actions{align-items:center;gap:.75rem;display:flex}.dgantt .dg-refresh,.dgantt .dg-export,.dgantt .dg-retry{color:var(--dg-ink);cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;align-items:center;gap:.4rem;padding:.45rem .8rem;font-size:.85rem;display:inline-flex}.dgantt .dg-refresh:hover:not(:disabled),.dgantt .dg-export:hover:not(:disabled),.dgantt .dg-retry:hover{background:#f8fafc}.dgantt .dg-refresh:disabled,.dgantt .dg-export:disabled{opacity:.6;cursor:default}.dgantt .dg-legend{color:var(--dg-muted);flex-wrap:wrap;gap:1rem;font-size:.78rem;display:flex}.dgantt .dg-legend-item{align-items:center;gap:.35rem;display:inline-flex}.dgantt .dg-legend-marker{background:0 0;border:none;padding:0;font-size:.9rem}.dgantt .dg-legend-swatch{border-radius:3px;width:14px;height:14px;display:inline-block}.dgantt .dg-legend-now{background:#eff6ff;border:1px solid #bfdbfe}.dgantt .dg-state{color:var(--dg-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:3rem 1rem;display:flex}.dgantt .dg-state-error{color:#b91c1c}.dgantt .dg-empty{border:1px dashed var(--dg-border);color:var(--dg-muted);text-align:center;background:#f8fafc;border-radius:10px;padding:2rem 1rem}.dgantt .dg-scroll{border:1px solid var(--dg-border);background:#fff;border-radius:10px;min-height:0;overflow:auto}.dgantt .dg-grid{min-width:max-content;display:grid}.dgantt .dg-cell{border-bottom:1px solid var(--dg-border);border-right:1px solid var(--dg-border);box-sizing:border-box;min-height:2.75rem;padding:.5rem;font-size:.8rem}.dgantt .dg-head{z-index:3;color:var(--dg-ink);background:#f8fafc;border-bottom:2px solid #cbd5e1;font-weight:600;position:sticky;top:0}.dgantt .dg-week-head{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.1rem;display:flex}.dgantt .dg-week-no{font-size:.8rem;font-weight:700}.dgantt .dg-week-date{color:var(--dg-muted);font-size:.7rem;font-weight:500}.dgantt .dg-week-head.is-month{border-left:2px solid #94a3b8}.dgantt .dg-head.is-now,.dgantt .dg-week-cell.is-now{background:#eff6ff}.dgantt .dg-head.is-now{border-bottom-color:#3b82f6}.dgantt .dg-overdue-head{color:#b91c1c;text-align:center}.dgantt .dg-label,.dgantt .dg-corner{z-index:2;background:#fff;position:sticky;left:0}.dgantt .dg-corner{z-index:4;background:#f8fafc;align-items:center;display:flex}.dgantt .dg-label{color:var(--dg-ink);border-right:2px solid #cbd5e1;flex-direction:column;gap:.15rem;text-decoration:none;display:flex}.dgantt .dg-label:hover{background:#f1f5f9}.dgantt .dg-label-wo{font-size:.82rem;font-weight:700}.dgantt .dg-label-part{color:#334155;text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;overflow:hidden}.dgantt .dg-label-meta{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.dgantt .dg-job{text-transform:uppercase;letter-spacing:.02em;color:#334155;background:#e2e8f0;border-radius:999px;padding:.05rem .35rem;font-size:.66rem;font-weight:700}.dgantt .dg-job-pcb{color:#1e40af;background:#dbeafe}.dgantt .dg-job-chassis{color:#92400e;background:#fef3c7}.dgantt .dg-job-assembly{color:#166534;background:#dcfce7}.dgantt .dg-cust{color:var(--dg-muted);text-overflow:ellipsis;white-space:nowrap;font-size:.7rem;overflow:hidden}.dgantt .dg-row{grid-template-columns:subgrid;grid-column:1/-1;display:grid}.dgantt .dg-week-cell,.dgantt .dg-overdue-cell{flex-wrap:wrap;justify-content:center;align-items:center;gap:.25rem;display:flex}.dgantt .dg-empty-mark{color:#cbd5e1;-webkit-user-select:none;user-select:none;font-size:.9rem}.dgantt .dg-marker{color:#2563eb;cursor:pointer;border-radius:6px;align-items:center;gap:.15rem;padding:.1rem .25rem;font-size:.95rem;line-height:1;text-decoration:none;display:inline-flex}.dgantt .dg-marker:hover{background:#eff6ff}.dgantt .dg-marker-qty{color:var(--dg-muted);font-size:.66rem;font-weight:600}.dgantt .dg-marker.is-overdue{color:#dc2626}.dgantt .dg-marker.is-overdue:hover{background:#fef2f2}.dgantt .dg-marker.is-delivered{color:#16a34a;opacity:.85}.dgantt .dg-marker.is-delivered:hover{background:#f0fdf4}.dgantt .dg-marker.is-overdue.is-delivered{color:#16a34a}.dgantt .dg-spin{animation:.9s linear infinite dg-spin}@keyframes dg-spin{to{transform:rotate(360deg)}}.an{padding:4px 2px}.an-header{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:14px;display:flex}.an-title{color:#0f172a;margin:0;font-size:1.6rem;font-weight:700}.an-refresh{color:#334155;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;display:inline-flex}.an-refresh:disabled{opacity:.6;cursor:default}.an-state{text-align:center;color:#64748b;padding:48px 0}.an-state-error{color:#b91c1c}.an-retry{cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;margin-top:8px;padding:6px 14px}.an-kpis{flex-wrap:wrap;gap:10px;margin-bottom:16px;display:flex}.an-kpi{background:#fff;border:1px solid #e2e8f0;border-radius:10px;flex-direction:column;gap:2px;min-width:130px;padding:12px 16px;display:flex}.an-kpi-val{color:#0f172a;font-size:22px;font-weight:700}.an-kpi-lbl{text-transform:uppercase;letter-spacing:.03em;color:#64748b;font-size:11px}.an-kpi-rag{justify-content:center;gap:6px;min-width:200px}.an-grid{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;display:grid}.an-panel{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:14px 16px}.an-h2{color:#334155;align-items:center;gap:6px;margin:0 0 10px;font-size:13px;font-weight:700;display:flex}.an-empty{color:#94a3b8;font-size:13px}.an-table{border-collapse:collapse;width:100%;font-size:13px}.an-table th{text-align:left;color:#64748b;text-transform:uppercase;letter-spacing:.02em;border-bottom:1px solid #eef2f7;padding:4px 6px;font-size:11px;font-weight:600}.an-table td{color:#334155;border-bottom:1px solid #f1f5f9;padding:5px 6px}.an-num{text-align:right;font-variant-numeric:tabular-nums}.an-muted{color:#94a3b8}.an-job{color:#1e3a8a;background:#eef4ff;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:700}.an-bars{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.an-bar-row{grid-template-columns:90px 1fr 28px;align-items:center;gap:8px;font-size:12px;display:grid}.an-bar-label{color:#64748b}.an-bar-track{background:#f1f5f9;border-radius:6px;height:14px;overflow:hidden}.an-bar-fill{background:#2563eb;height:100%;display:block}.an-bar-val{text-align:right;font-variant-numeric:tabular-nums;color:#334155}.an-ragbar{background:#f1f5f9;border-radius:6px;width:100%;height:18px;display:flex;overflow:hidden}.an-ragseg{color:#fff;justify-content:center;align-items:center;min-width:18px;font-size:11px;font-weight:700;display:flex}.an-green{background:#10b981}.an-yellow{background:#f59e0b}.an-red{background:#ef4444}.an-raglist{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.an-ragrow{grid-template-columns:110px 1fr;align-items:center;gap:10px;display:grid}.an-ragrow-label{color:#334155;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.an-foot{color:#94a3b8;margin-top:14px;font-size:11px}.about{flex-direction:column;gap:1rem;display:flex}.about-hero{align-items:center;gap:.85rem;display:flex}.about-logo{border-radius:var(--radius);background:var(--primary);color:#fff;flex-shrink:0;justify-content:center;align-items:center;width:52px;height:52px;display:flex}.about-hero-text{min-width:0}.about-name{color:var(--text);margin:0;font-size:1.15rem;font-weight:700}.about-tagline{color:var(--text-muted);margin:.15rem 0 0;font-size:.85rem}.about-designer{border-radius:var(--radius);color:var(--text);background:#2563eb14;border:1px solid #2563eb2e;align-items:center;gap:.5rem;padding:.6rem .75rem;font-size:.9rem;display:flex}.about-designer strong{font-weight:700}.about-facts{flex-direction:column;gap:.5rem;margin:0;display:flex}.about-fact{justify-content:space-between;align-items:center;gap:1rem;font-size:.85rem;display:flex}.about-fact dt{color:var(--text-muted);align-items:center;gap:.4rem;margin:0;display:inline-flex}.about-fact dd{color:var(--text);margin:0;font-weight:600}.about-blurb{color:var(--text-muted);margin:0;font-size:.82rem;line-height:1.5}.about-copyright{color:var(--text-muted);opacity:.8;margin:0;font-size:.72rem}.app-shell{--rail-width:56px;--sidebar-width:248px;min-height:100vh;display:flex}.sidebar-rail{width:var(--rail-width);flex-shrink:0}.sidebar{z-index:50;width:var(--sidebar-width);background:var(--sidebar-bg);color:var(--sidebar-fg);flex-direction:column;padding:1.25rem 0;transition:width .18s;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden}.sidebar.collapsed{width:var(--rail-width)}.sidebar.collapsed:hover,.sidebar.expanded{width:var(--sidebar-width);box-shadow:4px 0 24px -8px #00000059}.sidebar.expanded.pinned{box-shadow:none}.brand{align-items:center;gap:.75rem;min-height:26px;padding:0 1rem 1.5rem;display:flex}.brand-text{white-space:nowrap;flex:1;min-width:0;overflow:hidden}.brand-icon{color:var(--primary);flex-shrink:0}.sidebar-toggle{border-radius:var(--radius);width:30px;height:30px;color:var(--sidebar-muted);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;transition:background .12s,color .12s,opacity .12s;display:inline-flex}.sidebar-toggle:hover{color:#fff;background:#ffffff14}.sidebar.collapsed .brand-text,.sidebar.collapsed .sidebar-toggle{opacity:0;pointer-events:none}.sidebar.collapsed:hover .brand-text,.sidebar.collapsed:hover .sidebar-toggle{opacity:1;pointer-events:auto}.brand-name{color:#fff;flex-direction:column;font-size:1.2rem;font-weight:700;line-height:1.05;display:flex}.brand-sub{color:var(--sidebar-muted);font-size:.7rem}.nav{flex-direction:column;flex:1;gap:.15rem;padding:0 .75rem;display:flex;overflow:hidden}.nav-item{border-radius:var(--radius);color:var(--sidebar-fg);white-space:nowrap;align-items:center;gap:.65rem;padding:.6rem .75rem;font-size:.9rem;transition:background .12s;display:flex}.nav-item:hover{background:#ffffff0f}.nav-item.active{background:var(--primary);color:#fff}.nav-icon{flex-shrink:0;justify-content:center;align-items:center;width:18px;display:inline-flex}.nav-label{text-overflow:ellipsis;flex:1;transition:opacity .12s;overflow:hidden}.brand-text,.user-meta{transition:opacity .12s}.sidebar.collapsed .nav-label,.sidebar.collapsed .brand-text{opacity:0}.sidebar.collapsed:hover .nav-label,.sidebar.collapsed:hover .brand-text{opacity:1}.sidebar-footer{border-top:1px solid #ffffff14;margin-top:1rem;padding:1rem .75rem 0;overflow:hidden}.user-card{white-space:nowrap;align-items:center;gap:.65rem;margin-bottom:.85rem;display:flex}.sidebar.collapsed .user-meta,.sidebar.collapsed .logout-btn .nav-label{opacity:0}.sidebar.collapsed:hover .user-meta,.sidebar.collapsed:hover .logout-btn .nav-label{opacity:1}.sidebar.collapsed .logout-btn{justify-content:center}.user-avatar{border-radius:var(--radius);background:var(--primary);color:#fff;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;font-weight:700;display:flex}.user-meta{overflow:hidden}.user-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;font-weight:600;overflow:hidden}.role-badge{letter-spacing:.04em;color:#93c5fd;background:#2563eb33;border-radius:999px;margin-top:.15rem;padding:.1rem .45rem;font-size:.65rem;font-weight:600;display:inline-block}.logout-btn{border-radius:var(--radius);color:#fca5a5;background:0 0;border:1px solid #ffffff1f;align-items:center;gap:.5rem;width:100%;padding:.55rem .75rem;font-size:.85rem;display:flex}.logout-btn:hover{background:#ef44441f;border-color:#ef444466}.footer-actions{align-items:center;gap:.5rem;display:flex}.footer-actions .logout-btn{flex:1;min-width:0}.info-btn{border-radius:var(--radius);color:#cbd5e1;background:0 0;border:1px solid #ffffff1f;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;padding:0;display:flex}.info-btn:hover{color:#fff;background:#ffffff14;border-color:#ffffff40}.sidebar.collapsed .footer-actions{flex-direction:column}.sidebar.collapsed .info-btn{width:100%}.sidebar.collapsed:hover .footer-actions{flex-direction:row}.sidebar.collapsed:hover .info-btn{width:38px}.main-content{flex:1;padding:2rem 2.5rem;overflow-y:auto}.page-placeholder{text-align:center;min-height:60vh;color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:.5rem;display:flex}.placeholder-icon{color:var(--primary);margin-bottom:.5rem}.page-placeholder h1{font-size:1.6rem}.login-page{background:linear-gradient(135deg,#0f172a 0%,#1e293b 100%);justify-content:center;align-items:center;min-height:100vh;padding:1rem;display:flex}.login-card{background:var(--surface);border-radius:12px;flex-direction:column;width:100%;max-width:380px;padding:2.25rem 2rem;display:flex;box-shadow:0 20px 40px -12px #0006}.login-logo{color:#fff;background:linear-gradient(135deg,#2563eb 0%,#6d28d9 100%);border-radius:16px;justify-content:center;align-items:center;width:60px;height:60px;margin:0 auto .85rem;display:flex;box-shadow:0 8px 18px -6px #6d28d98c}.login-brand{justify-content:center;align-items:center;gap:.6rem;display:flex}.login-brand h1{letter-spacing:-.01em;font-size:1.9rem;font-weight:800}.login-sub{text-align:center;color:var(--text-muted);margin:.3rem 0 1.75rem;font-size:.85rem}.login-foot{text-align:center;color:var(--text-muted);margin:1.25rem 0 0;font-size:.72rem}.field{flex-direction:column;gap:.35rem;margin-bottom:1.1rem;display:flex}.field span{color:var(--text);font-size:.85rem;font-weight:500}.field input{border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .75rem;font-family:inherit;font-size:.95rem}.field input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2563eb26}.login-error{color:#b91c1c;border-radius:var(--radius);background:#fef2f2;border:1px solid #fecaca;margin-bottom:1rem;padding:.55rem .75rem;font-size:.85rem}.btn-primary{border-radius:var(--radius);background:var(--primary);color:#fff;border:none;justify-content:center;align-items:center;gap:.5rem;width:100%;padding:.7rem 1rem;font-size:.95rem;font-weight:600;transition:background .12s;display:inline-flex}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-primary:disabled{opacity:.7;cursor:not-allowed}.spin{animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}
