:root{--bg: #f8fafc;--surface: #ffffff;--surface-elevated: #ffffff;--border: #e2e8f0;--border-strong: #cbd5e1;--text: #0f172a;--text-soft: #64748b;--text-muted: #94a3b8;--accent: #4f46e5;--accent-soft: #eef2ff;--accent-weak: #e0e7ff;--accent-hover: #4338ca;--accent-active: #3730a3;--pending: #d97706;--pending-bg: #fff7ed;--warning: #d97706;--success: #059669;--available: #059669;--available-bg: #ecfdf5;--restricted: #ca8a04;--restricted-bg: #fefce8;--quarantine: #dc2626;--quarantine-bg: #fef2f2;--scrap: #475569;--scrap-bg: #f1f5f9;--danger: #dc2626;--danger-bg: #fef2f2;--danger-hover: #b91c1c;--shadow-xs: 0 1px 2px rgba(15, 23, 42, .04);--shadow-sm: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);--shadow-md: 0 4px 10px rgba(15, 23, 42, .06), 0 2px 4px rgba(15, 23, 42, .04);--shadow-lg: 0 12px 28px rgba(15, 23, 42, .12);--sidebar-width: 240px;--topbar-height: 64px;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Segoe UI,Microsoft YaHei,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layout{display:flex;height:100vh;height:100dvh;overflow:hidden}.content{flex:1;display:flex;flex-direction:column;min-width:0}.sidebar{width:var(--sidebar-width);flex-shrink:0;background:#0f172a;color:#cbd5e1;display:flex;flex-direction:column;padding:0;overflow:hidden;z-index:60;transition:width .22s ease,padding .22s ease}.sidebar .brand{display:flex;align-items:center;gap:10px;padding:0 20px 18px;font-size:16px;font-weight:700;color:#fff;border-bottom:1px solid rgba(255,255,255,.08);margin-bottom:10px}.brand-dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px #4f46e540}.nav-group{margin-bottom:6px}.nav-group-title{padding:14px 20px 6px;font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em}.nav-item{display:flex;align-items:center;gap:12px;padding:10px 18px;margin:0 10px;color:#94a3b8;text-decoration:none;cursor:pointer;border-radius:var(--radius-sm);font-size:13.5px;transition:background .15s,color .15s}.nav-item:hover{background:#ffffff0d;color:#e2e8f0}.nav-item.active{background:#4f46e52e;color:#fff;font-weight:600}.nav-item.active svg{color:var(--accent)}.topbar{height:var(--topbar-height);flex-shrink:0;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px;gap:16px}.topbar-left{display:flex;align-items:center;gap:14px;min-width:0}.topbar-title{font-size:18px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-hint{font-size:12px;color:var(--text-soft);display:none}@media (min-width: 768px){.topbar-hint{display:inline}}.menu-btn{display:none;width:34px;height:34px;align-items:center;justify-content:center;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-soft);cursor:pointer;box-shadow:none}.menu-btn:hover{background:#f1f5f9;color:var(--text)}.main{flex:1;overflow:hidden;padding:0;display:flex;flex-direction:column}.main>div{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;padding:12px 28px}.main>div>*{flex-shrink:0}.main>div>.table-wrap{flex:1;min-height:0;overflow:auto}.page-title,.page-desc,.page-title-hidden{display:none}.card,.panel,.panel-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-header,.panel-head,.card-title{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);font-weight:700;font-size:14px;color:var(--text)}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:18px}.filter-bar{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px;padding:10px 14px;background:#f8fafc;border:1px solid var(--border);border-radius:var(--radius-sm)}.filter-item{display:flex;flex-direction:column;gap:2px}.filter-label{font-size:11px;color:var(--text-tertiary, #94a3b8);font-weight:500;padding-left:2px}.filter-bar input,.filter-bar select{width:auto;min-width:130px;height:32px;font-size:13px}.filter-bar button{height:32px}.filter-extra{display:flex;align-items:center;gap:12px;margin-bottom:10px}.filter-chk{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--text-soft);cursor:pointer;-webkit-user-select:none;user-select:none}.filter-chk input{width:15px;height:15px;cursor:pointer}input,select,textarea{height:36px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);font-size:14px;color:var(--text);box-shadow:var(--shadow-xs);transition:border-color .15s,box-shadow .15s}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}input::placeholder{color:var(--text-muted)}select{cursor:pointer}button,.btn{height:36px;padding:0 16px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;font-size:14px;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:6px;color:var(--text);box-shadow:var(--shadow-xs);transition:background .15s,border-color .15s,color .15s,transform .05s}button:hover,.btn:hover{border-color:var(--border-strong);background:#f8fafc}button:active,.btn:active{transform:translateY(1px)}button:disabled,.btn:disabled{opacity:.5;cursor:not-allowed}button.primary,.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:var(--shadow-sm)}button.primary:hover,.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.primary:active,.btn.primary:active{background:var(--accent-active);border-color:var(--accent-active)}button.danger,.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}button.danger:hover,.btn.danger:hover{background:var(--danger-hover);border-color:var(--danger-hover)}button.ghost,.btn.ghost{background:transparent;border-color:transparent;box-shadow:none}button.ghost:hover,.btn.ghost:hover{background:#f1f5f9}.icon-btn{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;color:var(--text-soft);box-shadow:var(--shadow-xs)}.icon-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.btn-sm{height:26px;padding:0 10px;border-radius:var(--radius-sm);background:var(--primary, #1890ff);color:#fff;border:none;cursor:pointer;font-size:12px;white-space:nowrap;transition:all .15s}.btn-sm:hover{opacity:.85;background:var(--primary, #1890ff)}.op-btn{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 8px;border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;font-size:12px;white-space:nowrap;transition:all .15s;border:1px solid}.op-btn-view{color:#1890ff;border-color:#91d5ff}.op-btn-view:hover{background:#e6f7ff;border-color:#1890ff}.op-btn-edit{color:#2f54eb;border-color:#adc6ff}.op-btn-edit:hover{background:#f0f5ff;border-color:#2f54eb}.op-btn-del{color:#ff4d4f;border-color:#ffccc7}.op-btn-del:hover{background:#fff2f0;border-color:#ff4d4f}.op-btn-ok{color:#52c41a;border-color:#b7eb8f}.op-btn-ok:hover{background:#f6ffed;border-color:#52c41a}.op-btn-warn{color:#fa8c16;border-color:#ffd591}.op-btn-warn:hover{background:#fff7e6;border-color:#fa8c16}.op-btn-gray{color:#8c8c8c;border-color:#d9d9d9}.op-btn-gray:hover{background:#f5f5f5;border-color:#8c8c8c}.op-btn-purple{color:#722ed1;border-color:#d3adf7}.op-btn-purple:hover{background:#f9f0ff;border-color:#722ed1}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm)}table{width:100%;border-collapse:collapse;font-size:13px;background:var(--surface)}th,td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--border);border-right:1px solid var(--border)}th:last-child,td:last-child{border-right:none}th{color:var(--text-soft);font-weight:700;background:#f8fafc;position:sticky;top:0;z-index:5;font-size:12px;text-transform:uppercase;letter-spacing:.03em}tbody tr{transition:background .1s}tbody tr:hover{background:#f8fafc}tbody tr:last-child td{border-bottom:none}td.num{text-align:right;font-variant-numeric:tabular-nums}.dict-layout{display:flex;gap:16px;flex:1;min-height:0}.dict-sidebar{width:220px;flex-shrink:0;position:sticky;top:20px;display:flex;flex-direction:column;gap:10px}.dict-search{position:relative}.dict-search input{width:100%;height:34px;padding:0 10px 0 32px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.dict-search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-muted)}.dict-list{max-height:calc(100vh - 220px);overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm)}.dict-item{display:flex;align-items:center;gap:8px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--border);transition:background .15s;position:relative}.dict-item:last-child{border-bottom:none}.dict-item:hover,.dict-item.active{background:var(--accent-soft)}.dict-item.active:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}.dict-item-info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.dict-item-name{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dict-item.active .dict-item-name{font-weight:600}.dict-item-code{font-size:11px;font-family:Cascadia Code,JetBrains Mono,monospace;color:var(--text-muted)}.dict-item .edit-icon{opacity:0;transition:opacity .15s;flex-shrink:0;color:var(--text-muted);cursor:pointer}.dict-item:hover .edit-icon{opacity:1}.dict-item .edit-icon:hover{color:var(--accent)}.dict-main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.dict-main>.table-wrap{flex:1;min-height:0}.main>div>.report-page{flex:1;min-height:0;flex-shrink:1;display:flex;flex-direction:column;gap:16px}.report-tabs{display:flex;gap:4px;padding:5px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow-x:auto;scrollbar-width:none;flex-shrink:0}.report-tabs::-webkit-scrollbar{display:none}.report-tab{display:flex;align-items:center;gap:10px;padding:9px 16px;border:1px solid transparent;background:transparent;cursor:pointer;border-radius:var(--radius-sm);transition:all .15s;white-space:nowrap;flex-shrink:0;height:auto;box-shadow:none}.report-tab:hover{background:#f8fafc;border-color:var(--border)}.report-tab.active{background:var(--accent-soft);border-color:var(--accent-weak);box-shadow:inset 0 0 0 1px var(--accent-weak),var(--shadow-xs)}.report-tab-icon{color:var(--text-muted);flex-shrink:0;transition:color .15s}.report-tab:hover .report-tab-icon{color:var(--text-soft)}.report-tab.active .report-tab-icon{color:var(--accent)}.report-tab-text{display:flex;flex-direction:column;gap:1px;text-align:left;line-height:1.3}.report-tab-label{font-size:13px;font-weight:700;color:var(--text)}.report-tab.active .report-tab-label{color:var(--accent)}.report-tab-desc{font-size:11px;color:var(--text-muted)}.report-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;flex-shrink:0}.rpt-sum-card{display:flex;flex-direction:column;gap:4px;padding:12px 16px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-xs);transition:box-shadow .15s,transform .1s}.rpt-sum-card:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.rpt-sum-card.ok{border-left-color:var(--available)}.rpt-sum-card.err{border-left-color:var(--danger)}.rpt-sum-card.warn{border-left-color:var(--pending)}.rpt-sum-card.info{border-left-color:var(--accent)}.rpt-sum-label{font-size:11px;color:var(--text-soft);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.rpt-sum-value{font-size:22px;font-weight:800;color:var(--text);font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;font-variant-numeric:tabular-nums;line-height:1.2}.rpt-sum-card.ok .rpt-sum-value{color:var(--available)}.rpt-sum-card.err .rpt-sum-value{color:var(--danger)}.rpt-sum-card.warn .rpt-sum-value{color:var(--pending)}.rpt-sum-card.info .rpt-sum-value{color:var(--accent)}.report-content{display:flex;flex-direction:column;gap:14px;flex:1;min-height:0}.report-content>.table-wrap{flex:1;min-height:0;overflow:auto}.report-loading{display:flex;align-items:center;justify-content:center;height:200px;color:var(--text-soft);font-size:14px}.report-loading:before{content:"";width:22px;height:22px;border:2.5px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:rpt-spin .6s linear infinite}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-badge{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600;white-space:nowrap}.rpt-badge.ok{background:var(--available-bg);color:var(--available)}.rpt-badge.err{background:var(--danger-bg);color:var(--danger)}.rpt-badge.warn{background:var(--pending-bg);color:var(--pending)}.rpt-badge.info{background:var(--accent-soft);color:var(--accent)}.tag{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.4}.tag:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.tag.PENDING_QC{color:var(--pending);background:var(--pending-bg)}.tag.AVAILABLE{color:var(--available);background:var(--available-bg)}.tag.RESTRICTED{color:var(--restricted);background:var(--restricted-bg)}.tag.DEFECTIVE{color:var(--quarantine);background:var(--quarantine-bg)}.tag.RETURNED{color:var(--scrap);background:var(--scrap-bg)}.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-sm)}.kpi .label{color:var(--text-soft);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.kpi .value{font-size:24px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums;color:var(--text)}.kpi-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow-sm);transition:transform .15s,box-shadow .15s}.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.kpi-value{font-size:28px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text)}.msg{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:200;padding:12px 16px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px;box-shadow:var(--shadow-lg);max-width:min(720px,90vw);animation:msgSlide .25s ease}@keyframes msgSlide{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.msg.ok{background:var(--available-bg);color:var(--available);border:1px solid rgba(5,150,105,.15)}.msg.err{background:var(--quarantine-bg);color:var(--quarantine);border:1px solid rgba(220,38,38,.12)}.msg>span{flex:1 1 auto;min-width:0;line-height:1.5;word-break:break-word}.next-action-btn{margin-left:auto;padding:4px 12px;border-radius:var(--radius-sm);border:1px solid rgba(5,150,105,.3);background:#05966914;color:var(--available);font-size:12px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all .15s ease}.next-action-btn:hover{background:#05966926;border-color:#05966980}.msg-confirm-mask{z-index:300}.msg-confirm-box{animation:msg-pop .2s ease-out}.msg-confirm-icon{width:48px;height:48px;border-radius:50%;background:var(--available-bg);display:flex;align-items:center;justify-content:center;margin:0 auto 14px;color:var(--success)}.msg-confirm-text{font-size:14px;color:var(--text);line-height:1.6;margin-bottom:16px}.msg-confirm-doc{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:20px;font-size:13px}.msg-confirm-doc .doc-label{color:var(--text-soft)}.msg-confirm-doc .copyable{font-weight:600;color:var(--primary);font-family:Cascadia Code,JetBrains Mono,monospace}.msg-confirm-actions{display:flex;gap:8px;justify-content:center}@keyframes msg-pop{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}.ss-wrap{position:relative}.ss-input{width:100%;cursor:pointer}.ss-input:focus{cursor:text}.ss-dropdown{position:absolute;top:100%;left:0;right:0;z-index:200;max-height:260px;overflow-y:auto;background:var(--card, #fff);border:1px solid var(--border, #e0e0e0);border-radius:0 0 6px 6px;box-shadow:0 4px 12px #0000001f}.ss-option{padding:8px 12px;cursor:pointer;font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss-option:hover{background:var(--accent-soft, #f0f5ff)}.ss-option.active{background:var(--primary-soft, #e6f0ff);color:var(--primary, #4f46e5);font-weight:600}.ss-empty{padding:16px;text-align:center;color:var(--text-soft);font-size:13px}.empty{padding:48px 24px;text-align:center;color:var(--text-soft);font-size:13px}.empty td{text-align:center}.timeline{list-style:none;padding:0;margin:0}.timeline li{display:grid;grid-template-columns:150px 130px 1fr auto;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border);align-items:center;font-size:13px}.timeline li:last-child{border-bottom:none}.dir-in{color:var(--available);font-weight:700}.dir-out{color:var(--quarantine);font-weight:700}.lot-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:16px;background:#f8fafc;border-radius:var(--radius-sm);margin-bottom:10px;border:1px solid var(--border)}.lot-meta .k{font-size:12px;color:var(--text-soft);font-weight:600}.lot-meta .v{font-size:14px;margin-top:3px;color:var(--text)}.list-row{padding:12px 14px;cursor:pointer;border-bottom:1px solid var(--border)}.list-row:hover{background:#f6f8fb}.list-row.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.wh-list-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px}.wh-row-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.wh-code{font-weight:700;font-size:13px;white-space:nowrap}.wh-name{font-size:13px;color:var(--text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wh-mgr{font-size:11px;color:var(--text-muted);padding:1px 6px;border-radius:4px;background:#f1f5f9;white-space:nowrap}.wh-row-ops{display:flex;align-items:center;gap:4px;flex-shrink:0}.wh-row-ops .op-btn{width:26px;height:26px;padding:0;justify-content:center}.hint{font-size:12px;color:var(--text-soft)}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:flex-start;justify-content:center;padding:60px 16px 16px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);max-height:86vh;display:flex;flex-direction:column;width:100%}.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border);font-weight:700;font-size:15px}.modal-body{padding:20px;overflow:auto}.field{display:flex;flex-direction:column;gap:5px}.field-label{font-size:12px;color:var(--text-soft);font-weight:600}.req-mark{color:#ff4d4f;margin-right:4px;font-weight:700}.field input,.field select,.field textarea{width:100%}.line-editor{border:1px solid var(--border);border-radius:var(--radius);padding:14px;background:#f8fafc}.line-head,.line-row{display:grid;grid-template-columns:2.5fr 1fr 1fr 1.5fr 40px;gap:10px;align-items:center}.line-head{font-size:12px;color:var(--text-soft);font-weight:700;padding:0 4px 8px;text-transform:uppercase;letter-spacing:.03em}.line-row{margin-bottom:8px}.line-row:last-child{margin-bottom:0}.line-row>select,.line-row>input{min-width:0;width:100%}.line-row input[type=number]::-webkit-inner-spin-button,.line-row input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.line-row input[type=number]{-moz-appearance:textfield}.line-row>button{width:100%;height:36px;padding:0;display:inline-flex;align-items:center;justify-content:center}.pr-line-editor{padding:12px 14px}.pr-line-head,.pr-line-row{display:grid;grid-template-columns:1fr 80px 90px 80px 1fr 36px;gap:8px;align-items:center}.pr-line-head{font-size:11px;color:var(--text-soft);font-weight:700;padding:0 2px 8px;text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--border);margin-bottom:8px}.pr-line-row{margin-bottom:8px}.pr-line-row:last-of-type{margin-bottom:0}.pr-batch-cell{display:flex;gap:4px;align-items:center;min-width:0}.pr-batch-cell select,.pr-batch-cell input{flex:1;min-width:0}.pr-batch-back{flex-shrink:0;width:30px;height:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;color:var(--text-soft)}.pr-batch-back:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.pr-line-row>select,.pr-line-row>input{min-width:0;width:100%}.pr-line-row input[type=number]::-webkit-inner-spin-button,.pr-line-row input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.pr-line-row input[type=number]{-moz-appearance:textfield}.line-editor>button{margin-top:6px;border-style:dashed;width:100%;justify-content:center;background:transparent}.line-editor>button:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.flow-panel{display:flex;flex-direction:column;gap:14px;margin-top:16px}.flow-section{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.flow-title{background:var(--bg-soft);padding:7px 12px;font-size:13px;font-weight:600;color:var(--text-soft);border-bottom:1px solid var(--border)}.flow-table{width:100%;font-size:13px}.flow-table th{background:var(--bg-soft);padding:5px 10px;text-align:left;font-weight:600;color:var(--text-soft);border-right:1px solid var(--border)}.flow-table td{padding:5px 10px;border-right:1px solid var(--border);border-top:1px solid var(--border)}.flow-table .num{text-align:right;font-variant-numeric:tabular-nums}.flow-empty{text-align:center;color:var(--text-soft);font-size:13px;padding:16px 0}.addr-picker{display:flex;flex-direction:column;gap:10px}.addr-row{display:flex;gap:12px}.addr-row .addr-field{flex:1}.addr-field{display:flex;flex-direction:column;gap:4px}.addr-field label{font-size:12px;font-weight:600;color:var(--text-muted, #64748b)}.addr-field select,.addr-field input{padding:7px 10px;border:1px solid var(--border, #e2e8f0);border-radius:6px;font-size:13px;background:var(--surface, #fff);color:var(--text, #0f172a);transition:border-color .15s}.addr-field select:disabled,.addr-field input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.addr-field select:focus,.addr-field input:focus{border-color:var(--accent, #4f46e5);outline:none;box-shadow:0 0 0 3px #4f46e51f}.addr-detail{margin-top:2px}.addr-summary{font-size:13px;color:var(--text, #0f172a);line-height:1.7}.addr-summary .addr-label{font-weight:600;color:var(--text-muted, #64748b);margin-right:6px}.ship-dual-pane{display:flex;gap:12px;min-height:280px}.ship-stock-pane,.ship-picked-pane{flex:1;border:1px solid var(--border, #e2e8f0);border-radius:6px;overflow:hidden;display:flex;flex-direction:column}.pane-title{padding:6px 10px;font-size:12px;font-weight:700;color:var(--accent, #4f46e5);background:var(--accent-soft, #eef2ff);border-bottom:1px solid var(--border, #e2e8f0)}.ship-stock-pane table,.ship-picked-pane table{font-size:12px}.ship-stock-pane table tbody{max-height:260px;overflow-y:auto;display:block}.ship-stock-pane table thead,.ship-stock-pane table tbody tr,.ship-picked-pane table thead,.ship-picked-pane table tbody tr{display:table;width:100%;table-layout:fixed}.ship-picked-pane table tbody{max-height:260px;overflow-y:auto;display:block}tr.row-clickable{cursor:pointer;transition:background .1s}tr.row-clickable:hover{background:#f0f7ff}tr.row-added{opacity:.45;cursor:not-allowed}tr.row-added td:first-child:after{content:" ✓";color:var(--success, #059669);font-weight:700}tr.row-disabled{opacity:.5}tr.row-disabled td{color:#999}.status-timeline{margin-top:0;margin-bottom:16px;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface)}.status-timeline-title{background:var(--accent-soft, #eef2ff);padding:8px 12px;font-size:13px;font-weight:700;color:var(--accent, #4f46e5);border-bottom:1px solid var(--border);text-align:center}.status-timeline-body{padding:22px 16px 18px;overflow-x:auto}.status-timeline-rail{display:flex;align-items:center;min-width:100%}.tl-node{display:flex;align-items:center;flex:1}.tl-node:last-child{flex:0 0 auto}.tl-dot{width:16px;height:16px;border-radius:50%;border:2.5px solid #cbd5e1;background:var(--surface, #fff);flex-shrink:0;z-index:1;transition:all .2s}.tl-node.reached .tl-dot{background:var(--success, #059669);border-color:var(--success, #059669)}.tl-node.current .tl-dot{background:var(--accent, #4f46e5);border-color:var(--accent, #4f46e5);box-shadow:0 0 0 5px #4f46e52e;animation:tl-pulse 1.6s ease-in-out infinite}@keyframes tl-pulse{0%,to{box-shadow:0 0 0 4px #4f46e526}50%{box-shadow:0 0 0 8px #4f46e514}}.tl-link{flex:1;display:flex;align-items:center;height:16px;min-width:30px}.tl-link.on .tl-link-line{flex:1;height:3px;background:var(--success, #059669);border-radius:2px}.tl-link.on .tl-link-arrow{width:0;height:0;border-left:8px solid var(--success, #059669);border-top:6px solid transparent;border-bottom:6px solid transparent;flex-shrink:0;margin-left:-1px}.tl-link.off .tl-link-line{flex:1;height:3px}.tl-link.off .tl-link-arrow{display:none}.status-timeline-labels{display:flex;min-width:100%;margin-top:10px}.tl-label-cell{flex:1;text-align:center}.tl-label-cell:last-child{flex:0 0 auto}.tl-label{font-size:13px;font-weight:600;color:var(--text-muted, #94a3b8)}.tl-label-cell.reached .tl-label{color:var(--text, #0f172a)}.tl-label-cell.current .tl-label{color:var(--accent, #4f46e5);font-weight:700}.tl-badge{display:inline-block;font-size:11px;padding:2px 10px;border-radius:10px;margin-top:5px;font-weight:600}.tl-label-cell.reached .tl-badge{background:var(--available-bg, #ecfdf5);color:var(--success, #059669)}.tl-label-cell.current .tl-badge{background:var(--accent-soft, #eef2ff);color:var(--accent, #4f46e5)}.tl-badge.pending{background:#f1f5f9;color:var(--text-muted, #94a3b8)}.tl-time{font-size:11px;color:var(--text-muted, #94a3b8);margin-top:4px}.flex{display:flex}.flex-between{display:flex;justify-content:space-between;align-items:center}.flex-end{display:flex;justify-content:flex-end;align-items:center}.gap-8{gap:8px}.gap-12{gap:12px}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media (max-width: 1024px){.kpi-row,.report-summary,.dash-kpi-grid,.dash-sum-grid{grid-template-columns:repeat(2,1fr)}}.tab-bar{display:flex;align-items:center;gap:4px;padding:0 8px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;height:48px}.tab-bar-menu-btn{display:none;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:0 10px;height:100%;align-items:center;flex-shrink:0}.tab-bar-menu-btn:hover{color:var(--primary)}.tab-bar-brand{display:flex;align-items:center;gap:8px;padding:0 12px 0 4px;border-right:1px solid var(--border);flex-shrink:0;height:100%}.brand-logo{color:var(--accent);flex-shrink:0}.brand-text{font-size:15px;font-weight:700;color:var(--text);white-space:nowrap}.sidebar-toggle{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-soft);cursor:pointer;border-radius:var(--radius-sm);box-shadow:none}.sidebar-toggle:hover{background:#f1f5f9;color:var(--text)}.sidebar-toggle.active{color:var(--accent)}.tab-list{display:flex;gap:2px;flex:1;overflow:visible;align-items:center;height:100%}.tab-bar-right{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:auto;padding-left:8px}.tab-item{display:flex;align-items:center;gap:4px;padding:5px 10px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text-soft);white-space:nowrap;transition:background .15s,color .15s}.tab-item:hover{background:#f1f5f9;color:var(--text)}.tab-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.tab-item.pinned,.tab-item.pinned .pin-icon{color:var(--accent)}.tab-close{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:4px;border:none;background:transparent;cursor:pointer;color:var(--text-muted);padding:0;box-shadow:none}.tab-close:hover{background:var(--danger-bg);color:var(--danger)}.ctx-menu{position:fixed;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);z-index:200;padding:4px 0;min-width:120px}.ctx-item{padding:7px 16px;cursor:pointer;font-size:13px;color:var(--text);transition:background .15s}.ctx-item:hover{background:var(--accent-soft);color:var(--accent)}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a59;z-index:55}@media print{.sidebar,.topbar,.menu-btn{display:none}.layout{display:block;height:auto}.main{overflow:visible;padding:0}}.auth-page{display:flex;min-height:100vh;min-height:100dvh}.auth-brand-panel{flex:0 0 42%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;background:linear-gradient(135deg,#0f172a,#1e1b4b,#312e81)}.auth-brand-panel:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(rgba(99,102,241,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(99,102,241,.07) 1px,transparent 1px);background-size:40px 40px}.auth-brand-panel:after{content:"";position:absolute;top:-80px;right:-80px;width:280px;height:280px;background:radial-gradient(circle,rgba(79,70,229,.18) 0%,transparent 70%);pointer-events:none}.auth-hud{position:absolute;pointer-events:none;z-index:0}.auth-hud-gauge{width:90px;height:90px;top:14%;right:10%;border-radius:50%;border:3px solid rgba(255,255,255,.04);border-top:3px solid rgba(129,140,248,.22);border-right:3px solid rgba(129,140,248,.1)}.auth-hud-bars{width:70px;height:45px;bottom:22%;right:12%;background-image:linear-gradient(to top,rgba(129,140,248,.2),transparent 35%),linear-gradient(to top,rgba(129,140,248,.12),transparent 50%),linear-gradient(to top,rgba(129,140,248,.18),transparent 40%),linear-gradient(to top,rgba(129,140,248,.08),transparent 70%);background-size:12px 100%;background-position:0 100%,18px 100%,36px 100%,54px 100%;background-repeat:no-repeat}.auth-hud-line{width:100px;height:35px;top:18%;left:6%;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 40'%3E%3Cpolyline points='0,30 20,20 40,25 60,10 80,15 100,5' fill='none' stroke='%23818cf8' stroke-width='1.5' opacity='0.25'/%3E%3C/svg%3E") no-repeat center/contain}.auth-brand-content{position:relative;z-index:1;text-align:center;padding:40px}.auth-brand-logo{width:72px;height:72px;border-radius:18px;margin:0 auto 24px;background:#4f46e526;border:1px solid rgba(99,102,241,.3);display:flex;align-items:center;justify-content:center;color:#818cf8}.auth-brand-title{font-size:26px;font-weight:800;color:#fff;margin:0 0 8px;letter-spacing:.02em}.auth-brand-subtitle{font-size:14px;color:#94a3b8;margin:0 0 40px;letter-spacing:.05em}.auth-features{display:flex;flex-direction:column;gap:14px;text-align:left}.auth-feature{display:flex;align-items:center;gap:10px;font-size:14px;color:#cbd5e1}.auth-feature-dot{width:6px;height:6px;border-radius:50%;background:#818cf8;flex-shrink:0}.auth-form-panel{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 24px;position:relative;overflow:hidden;background:linear-gradient(180deg,var(--bg) 0%,var(--accent-soft) 100%)}.auth-form-card{width:400px;max-width:100%;position:relative;z-index:1;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:0 8px 30px #00000014,0 0 0 1px #00000005;padding:36px 32px 32px}.auth-form-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),#818cf8,var(--accent));border-radius:var(--radius-lg) var(--radius-lg) 0 0}.auth-form-header{text-align:center;margin-bottom:24px}.auth-form-title{font-size:22px;font-weight:800;color:var(--text);margin:0 0 6px}.auth-form-subtitle{font-size:13px;color:var(--text-soft);margin:0}.auth-tabs{display:flex;gap:4px;padding:4px;background:#f1f5f9;border-radius:var(--radius);margin-bottom:24px}.auth-tab{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px;border:none;background:transparent;border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-weight:600;color:var(--text-soft);transition:all .2s;height:42px;box-shadow:none}.auth-tab:hover{color:var(--text)}.auth-tab.active{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-sm);font-weight:700}.auth-form{display:flex;flex-direction:column;gap:18px}.auth-form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.input-with-icon{position:relative;display:flex;align-items:center}.input-with-icon .input-icon{position:absolute;left:12px;color:var(--text-muted);pointer-events:none;flex-shrink:0}.input-with-icon input{width:100%;height:36px;padding:0 12px 0 38px;background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);font-size:14px;transition:border-color .15s,box-shadow .15s}.input-with-icon input::placeholder{color:var(--text-muted)}.input-with-icon input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.input-pwd input{padding-right:38px}.input-with-icon .pwd-toggle{position:absolute;right:8px;border:none;background:transparent;cursor:pointer;color:var(--text-muted);padding:4px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;box-shadow:none;height:auto;width:auto}.input-with-icon .pwd-toggle:hover{color:var(--accent);background:var(--accent-soft)}.auth-submit{width:100%;height:44px;font-size:15px;font-weight:700;margin-top:6px;display:flex;align-items:center;justify-content:center;gap:8px}.auth-spin{animation:auth-spin .6s linear infinite}@keyframes auth-spin{to{transform:rotate(360deg)}}@media (max-width: 768px){.auth-brand-panel{display:none}.auth-form-panel{flex:1}}.sidebar{position:relative;padding:0}.sidebar-header{display:flex;align-items:center;gap:10px;padding:0 16px;height:48px;flex-shrink:0;cursor:pointer;border-bottom:1px solid rgba(255,255,255,.08);transition:background .15s}.sidebar-header:hover{background:#ffffff0a}.sidebar-logo{color:var(--accent);flex-shrink:0}.sidebar-title{font-size:14px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-footer{display:flex;align-items:center;gap:8px;padding:10px 16px;flex-shrink:0;border-top:1px solid rgba(255,255,255,.08);background:#00000026}.online-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 3px #22c55e40;flex-shrink:0}.sidebar-user-name{font-size:13px;color:#e2e8f0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-icon-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:#94a3b8;cursor:pointer;border-radius:var(--radius-sm);box-shadow:none;padding:0}.sidebar-icon-btn:hover{background:#3b82f633;color:#93c5fd}.sidebar-logout-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:#94a3b8;cursor:pointer;border-radius:var(--radius-sm);box-shadow:none;padding:0}.sidebar-logout-btn:hover{background:#dc262633;color:#f87171}.sidebar.collapsed{width:54px!important;overflow:visible}.sidebar.collapsed .sidebar-header{justify-content:center;padding:0}.sidebar.collapsed .sidebar-scroll{overflow-y:auto;overflow-x:visible}.sidebar-scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 0}.nav-parent{-webkit-user-select:none;user-select:none;font-weight:600}.nav-parent.expanded{color:#e2e8f0}.nav-sub{margin-left:0}.nav-sub .nav-item{font-size:13px}.nav-collapse-icon{justify-content:center!important;padding:10px 0!important}.nav-collapse-group{position:relative}.nav-collapse-group:hover .nav-flyout{display:block}.nav-flyout{display:none;position:absolute;left:54px;top:0;min-width:160px;background:#1e293b;border:1px solid rgba(255,255,255,.1);border-radius:6px;padding:6px 0;z-index:200;box-shadow:0 8px 24px #0000004d}.nav-flyout-item{display:block;padding:8px 16px;color:#cbd5e1;font-size:13px;text-decoration:none;white-space:nowrap;transition:background .15s}.nav-flyout-item:hover{background:#4f46e54d;color:#fff}.ghost-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:1px solid var(--border);background:var(--surface);color:var(--text-soft);border-radius:var(--radius-sm);font-size:13px;cursor:pointer;transition:all .15s}.ghost-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.more-tab{position:relative}.tab-more-dropdown{position:absolute;top:100%;right:0;min-width:160px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);z-index:200;padding:4px 0;max-height:320px;overflow-y:auto}.tab-more-item{display:flex;align-items:center;gap:6px;padding:7px 14px;cursor:pointer;font-size:13px;color:var(--text-soft);white-space:nowrap;transition:background .15s,color .15s}.tab-more-item:hover{background:#f1f5f9;color:var(--text)}.tab-more-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.filter-extra{margin-left:auto;display:flex;gap:8px;align-items:center}.pagination{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-top:10px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:13px;color:var(--text-soft)}.pagination .page-total{font-weight:600;color:var(--text);white-space:nowrap}.pagination .page-range{color:var(--text-soft);white-space:nowrap}.pagination select{height:30px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 6px;background:var(--surface)}.pagination .page-btn{height:30px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;font-size:13px;color:var(--text-soft);transition:all .15s}.pagination .page-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.pagination .page-btn:disabled{opacity:.4;cursor:not-allowed}.pagination .page-info{font-weight:600;color:var(--text);min-width:60px;text-align:center}.pagination .page-nav{margin-left:auto;display:flex;align-items:center;gap:8px}.pagination .page-jump{display:flex;align-items:center;gap:4px;font-size:13px;color:var(--text-soft);white-space:nowrap}.pagination .page-jump-input{width:48px;height:30px;text-align:center;padding:0 4px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm)}.copyable{display:inline-flex;align-items:center;gap:4px}.copyable .copy-btn{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;cursor:pointer;color:var(--text-soft);opacity:.4;transition:opacity .15s;padding:0;border-radius:3px}.copyable .copy-btn:hover{opacity:1;color:var(--accent);background:var(--accent-soft)}th.col-sn,td.col-sn{text-align:center;width:50px;min-width:50px;color:var(--text-soft);font-size:12px}.notif-bell-wrap{position:relative;flex-shrink:0}.notif-bell-btn{position:relative;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;border:none;background:var(--accent);color:#fff;cursor:pointer;border-radius:var(--radius-sm);transition:all .15s;font-size:13px;font-weight:600}.notif-bell-btn:hover{background:var(--accent-hover)}.notif-bell-btn:active{opacity:.85}.notif-bell-btn svg{flex-shrink:0}.notif-bell-btn.has-unread{animation:notif-pulse 2s ease-in-out infinite}@keyframes notif-pulse{0%,to{box-shadow:0 0 #dc26264d}50%{box-shadow:0 0 0 4px #dc262600}}.notif-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;background:var(--danger);color:#fff;font-size:11px;font-weight:700;line-height:18px;border-radius:9px;text-align:center;border:2px solid var(--surface)}.notif-dropdown{position:absolute;top:calc(100% + 6px);right:0;width:380px;max-width:90vw;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:300;overflow:hidden}.notif-dropdown-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--bg)}.notif-dropdown-title{font-size:14px;font-weight:700;color:var(--text)}.notif-read-all{display:inline-flex;align-items:center;gap:4px;border:none;background:transparent;color:var(--accent);font-size:12px;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);transition:background .15s}.notif-read-all:hover{background:var(--accent-soft)}.notif-list{max-height:420px;overflow-y:auto}.notif-empty{padding:40px 16px;text-align:center;color:var(--text-muted);font-size:13px}.notif-item{display:flex;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}.notif-item:hover{background:var(--bg)}.notif-item.unread{background:var(--accent-weak)}.notif-item.unread:hover{background:var(--accent-soft)}.notif-item-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:6px}.notif-item-body{flex:1;min-width:0}.notif-item-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px}.notif-item-type{font-size:11px;font-weight:600}.notif-item-time{font-size:11px;color:var(--text-muted);white-space:nowrap}.notif-item-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:2px}.notif-item-content{font-size:12px;color:var(--text-soft);line-height:1.4}.notif-item-source{font-size:11px;color:var(--text-muted);margin-top:2px;display:flex;align-items:center;gap:8px}.notif-item-link{display:inline-flex;align-items:center;gap:3px;border:none;background:transparent;padding:0;color:var(--accent);font-size:11px;cursor:pointer;text-decoration:underline}.notif-item-link:hover{color:var(--accent-hover)}.notif-item-check{color:var(--text-muted);flex-shrink:0;margin-top:6px}.notif-toast{position:fixed;top:60px;right:24px;display:flex;align-items:flex-start;gap:12px;min-width:320px;max-width:400px;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:9999;animation:notif-slide-in .3s ease-out}@keyframes notif-slide-in{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.notif-toast-icon{flex-shrink:0;margin-top:1px}.notif-toast-body{flex:1;min-width:0}.notif-toast-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:4px}.notif-toast-content{font-size:12px;color:var(--text-soft);line-height:1.4}.notif-toast-link{display:inline-block;margin-top:6px;border:none;background:transparent;padding:0;color:var(--accent);font-size:12px;cursor:pointer;text-decoration:underline}.notif-toast-link:hover{color:var(--accent-hover)}.notif-toast-close{flex-shrink:0;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);padding:0}.notif-toast-close:hover{background:var(--bg);color:var(--text)}.color-dot{display:inline-block;width:16px;height:16px;border-radius:50%;border:1px solid var(--border);vertical-align:middle}.dash-root{background-image:linear-gradient(rgba(59,130,246,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(59,130,246,.035) 1px,transparent 1px);background-size:28px 28px}.dash-cmd-header{display:flex;border-radius:var(--radius);overflow:hidden;margin-bottom:14px;box-shadow:var(--shadow-md)}.dash-cmd-brand{flex:1;background:linear-gradient(135deg,#0f172a,#1e293b 70%,#1e3a5f);padding:16px 24px;position:relative;overflow:hidden}.dash-cmd-brand:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);background-size:18px 18px;pointer-events:none}.dash-cmd-brand:after{content:"";position:absolute;top:-40%;right:-5%;width:280px;height:280px;background:radial-gradient(circle,rgba(245,158,11,.1) 0%,transparent 65%);pointer-events:none}.dash-cmd-title{font-size:19px;font-weight:800;color:#fff;letter-spacing:.02em;position:relative;z-index:1}.dash-cmd-sub{font-size:11px;color:#64748b;margin-top:4px;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;letter-spacing:.04em;position:relative;z-index:1}.dash-cmd-status{display:flex;flex-direction:column;justify-content:center;gap:6px;padding:0 24px;background:linear-gradient(135deg,#1e293b,#0f172a);border-left:1px solid rgba(255,255,255,.06);min-width:170px}.dash-cmd-sig{display:flex;align-items:center;gap:8px}.dash-sig-bars{display:flex;gap:2px;align-items:flex-end}.dash-sig-bar{width:3px;border-radius:1px;background:#22c55e;animation:dash-sig 2s ease-in-out infinite}.dash-sig-bar:nth-child(1){height:5px;animation-delay:0s}.dash-sig-bar:nth-child(2){height:8px;animation-delay:.15s}.dash-sig-bar:nth-child(3){height:11px;animation-delay:.3s}.dash-sig-bar:nth-child(4){height:14px;animation-delay:.45s}@keyframes dash-sig{0%,to{opacity:.35}50%{opacity:1}}.dash-cmd-sig-text{font-size:11px;font-weight:700;color:#22c55e;letter-spacing:.04em}.dash-cmd-ts{font-size:11px;color:#475569;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;letter-spacing:.06em}.dash-kpi-grid{display:grid;gap:10px;margin-bottom:12px}.dash-kpi-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:11px 14px 9px;display:flex;flex-direction:column;gap:2px;box-shadow:var(--shadow-sm);transition:all .2s;animation:dash-card-in .4s ease backwards;position:relative;overflow:hidden}.dash-kpi-card:before{content:"";position:absolute;top:0;left:0;width:3px;height:100%;background:var(--kpi-color, var(--accent));border-radius:3px 0 0 3px}@keyframes dash-card-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.dash-kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--kpi-color, var(--accent))}.dash-kpi-top{display:flex;align-items:center;justify-content:space-between}.dash-kpi-label{font-size:10px;color:var(--text-soft);font-weight:700;letter-spacing:.05em;text-transform:uppercase}.dash-kpi-icon-wrap{width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center}.dash-kpi-value{font-size:21px;font-weight:800;font-variant-numeric:tabular-nums;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;line-height:1.2;margin-top:2px}.dash-kpi-track{height:2px;background:var(--border);border-radius:1px;margin-top:6px;overflow:hidden}.dash-kpi-fill{height:100%;border-radius:1px;animation:dash-fill .8s ease backwards}@keyframes dash-fill{0%{width:0!important}}.dash-alert-bar{display:flex;align-items:center;gap:12px;padding:10px 16px;border-radius:var(--radius);margin-bottom:14px;box-shadow:var(--shadow-sm);border:1px solid var(--border);background:var(--surface)}.dash-alert-bar.danger{border-color:#ef444440;background:linear-gradient(90deg,var(--danger-bg),var(--surface) 45%)}.dash-alert-bar.ok{border-color:#10b98140;background:linear-gradient(90deg,var(--available-bg),var(--surface) 45%)}.dash-alert-icon{width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.dash-alert-content{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1}.dash-alert-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:6px;font-size:12px;font-weight:700;white-space:nowrap;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace}.dash-nav{display:flex;gap:4px;margin-bottom:14px;flex-shrink:0;overflow-x:auto;scrollbar-width:none}.dash-nav::-webkit-scrollbar{display:none}.dash-nav-item{display:flex;align-items:center;gap:7px;padding:8px 16px;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;font-size:13px;font-weight:600;color:var(--text-soft);white-space:nowrap;transition:all .15s;position:relative;box-shadow:var(--shadow-xs)}.dash-nav-item:hover{color:var(--text);border-color:var(--border-strong);transform:translateY(-1px)}.dash-nav-item.active{color:#fff;background:var(--accent);border-color:var(--accent);box-shadow:0 4px 14px #4f46e54d}.dash-nav-badge{background:var(--danger);color:#fff;font-size:10px;font-weight:800;border-radius:999px;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;padding:0 5px}.dash-content{flex:1;min-height:0;overflow:auto;animation:dash-fade .3s ease}@keyframes dash-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.dash-loading{display:flex;align-items:center;justify-content:center;height:300px;color:var(--text-soft);font-size:14px}.dash-loading:before{content:"";width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;margin-right:10px;animation:dash-spin .6s linear infinite}@keyframes dash-spin{to{transform:rotate(360deg)}}.dash-sum-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.dash-sum-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);transition:box-shadow .2s,border-color .2s,transform .15s}.dash-sum-card:hover{box-shadow:var(--shadow-md)}.dash-sum-card.clickable{cursor:pointer}.dash-sum-card.clickable:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.dash-sum-card.clickable:active{transform:translateY(0) scale(.99)}.dash-sum-footer{display:flex;align-items:center;justify-content:center;gap:4px;padding:8px 18px;border-top:1px solid var(--border);font-size:12px;color:var(--accent);font-weight:600;transition:background .15s}.dash-sum-card.clickable:hover .dash-sum-footer{background:var(--accent-soft)}.dash-sum-arrow{font-size:16px;opacity:.7;transition:transform .15s}.dash-sum-card.clickable:hover .dash-sum-arrow{transform:translate(3px)}.dash-sum-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);background:#f8fafc}.dash-sum-title{font-size:13px;font-weight:700;color:var(--text);letter-spacing:.02em}.dash-sum-total{font-size:15px;font-weight:800;color:var(--accent);font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;font-variant-numeric:tabular-nums}.dash-sum-body{padding:12px 18px;display:flex;flex-direction:column;gap:10px}.dash-sum-row{display:flex;align-items:center;gap:8px}.dash-sum-dot{width:8px;height:8px;border-radius:2px;flex-shrink:0}.dash-sum-label{font-size:12px;color:var(--text-soft);white-space:nowrap;min-width:50px}.dash-sum-bar{flex:1;height:6px;background:#f1f5f9;border-radius:3px;overflow:hidden}.dash-sum-fill{height:100%;border-radius:3px;transition:width .6s ease;animation:dash-fill .8s ease backwards}.dash-sum-val{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;min-width:80px;text-align:right}.dash-sum-pct{font-size:11px;color:var(--text-muted);white-space:nowrap;min-width:36px;text-align:right;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace}.dash-kpi-card.clickable{cursor:pointer}.dash-kpi-card.clickable:active{transform:translateY(0) scale(.98)}.dash-alert-chip.clickable{cursor:pointer;transition:filter .15s,transform .1s}.dash-alert-chip.clickable:hover{filter:brightness(.92);transform:translateY(-1px)}.dash-alert-arrow{font-size:14px;opacity:.6;margin-left:2px}.dash-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:8px 4px;font-size:12px;color:var(--text-soft)}.dash-pager-info{margin-right:auto}.dash-pager-btn{width:28px;height:28px;padding:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--text-soft);transition:all .15s}.dash-pager-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.dash-pager-btn:disabled{opacity:.4;cursor:not-allowed}.dash-pager-num{font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;font-weight:700;min-width:60px;text-align:center}.dash-mon-grid{display:flex;gap:20px;align-items:stretch;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-sm)}.dash-mon-reserved{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:0 20px;border-right:1px solid var(--border);min-width:120px}.dash-mon-label{font-size:12px;color:var(--text-soft);margin-bottom:4px}.dash-mon-value{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums}.dash-mon-cards{flex:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}.dash-mon-card{position:relative;display:flex;flex-direction:column;gap:4px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s;background:var(--surface);animation:dash-fade .4s ease backwards}.dash-mon-card:hover{border-color:var(--c);transform:translateY(-2px);box-shadow:0 4px 12px color-mix(in srgb,var(--c) 15%,transparent)}.dash-mon-card:active{transform:translateY(0) scale(.98)}.dash-mon-dot{width:10px;height:10px;border-radius:3px}.dash-mon-name{font-size:12px;color:var(--text-soft);font-weight:600}.dash-mon-qty{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace}.dash-mon-meta{display:flex;gap:4px;font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums}.dash-mon-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:18px;color:var(--c);opacity:0;transition:opacity .15s,transform .15s}.dash-mon-card:hover .dash-mon-arrow{opacity:.7;transform:translateY(-50%) translate(3px)}@media (max-width: 768px){body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:contain}.sidebar-scroll,.table-wrap,.modal-body,.notif-list,.dash-content,.dash-mon-cards{-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.sidebar{position:fixed!important;top:0;left:0;bottom:0;width:var(--sidebar-width)!important;z-index:100;transform:translate(-100%);transition:transform .25s ease;box-shadow:var(--shadow-lg);padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.sidebar.mobile-open{transform:translate(0)}.sidebar.collapsed{width:var(--sidebar-width)!important;overflow-y:auto}.sidebar.collapsed .sidebar-title{display:inline}.sidebar.collapsed .sidebar-header{justify-content:flex-start;padding:0 16px}.sidebar.collapsed .sidebar-footer{display:flex}.sidebar.collapsed .sidebar-scroll{overflow-x:hidden}.sidebar.collapsed .nav-collapse-icon{justify-content:flex-start!important;padding:10px 18px!important}.sidebar.collapsed .nav-collapse-group .nav-flyout{display:none!important}.backdrop{z-index:90;background:#0f172a80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.content{width:100%}.tab-bar{padding:0 4px;height:44px;height:calc(44px + env(safe-area-inset-top));padding-top:env(safe-area-inset-top)}.tab-bar-menu-btn{display:flex}.tab-bar-brand .brand-text{display:none}.tab-item{padding:5px 8px;font-size:12px}.tab-bar-right{padding-left:4px}.notif-bell-btn{padding:0 10px;font-size:12px;height:32px}.notif-dropdown{width:calc(100vw - 24px);right:0;max-height:60vh}.notif-toast{left:12px;right:12px;min-width:0;max-width:none}.main>div{padding:8px 12px}.filter-bar{flex-direction:column;align-items:stretch;padding:8px 10px}.filter-bar input,.filter-bar select{width:100%;min-width:0}.filter-extra{margin-left:0;flex-wrap:wrap}.toolbar{flex-direction:column;align-items:stretch;gap:8px}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.kpi-row{grid-template-columns:1fr;gap:10px}.report-summary{grid-template-columns:1fr}.line-head,.line-row,.pr-line-head,.pr-line-row{grid-template-columns:1fr;gap:4px}.modal-mask{padding:0}.modal{max-height:100vh;max-height:100dvh;border-radius:0;height:100vh;height:100dvh}.modal-body{padding:14px}.dict-layout{flex-direction:column}.dict-sidebar{width:100%;position:relative;top:0;max-height:200px}.dict-list{max-height:160px}.dash-kpi-grid,.dash-sum-grid{grid-template-columns:1fr}.dash-mon-grid{flex-direction:column}.dash-mon-reserved{border-right:none;border-bottom:1px solid var(--border);padding:0 0 16px;min-width:0}.dash-cmd-header{flex-direction:column}.dash-cmd-status{min-width:0;padding:12px 24px}.lot-meta{grid-template-columns:1fr}.timeline li{grid-template-columns:1fr;gap:4px}.pagination{flex-wrap:wrap;gap:6px;padding:8px 10px}.pagination .page-jump{display:none}.pagination select{height:28px}.auth-form-row{grid-template-columns:1fr}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}table{min-width:600px}.msg{top:calc(8px + env(safe-area-inset-top));max-width:calc(100vw - 24px)}.btn-sm{height:30px;padding:0 12px}.op-btn{height:30px;padding:0 10px}.icon-btn{width:36px;height:36px}.tab-close{width:22px;height:22px}}@media (max-width: 480px){.tab-bar-brand{display:none}.auth-form-card{padding:24px 20px}.dash-cmd-title{font-size:16px}.dash-kpi-value{font-size:18px}.topbar{padding:0 12px}.topbar-title{font-size:15px}.main>div{padding:6px 8px}.filter-bar{padding:6px 8px}.modal-body{padding:10px}.notif-bell-btn span{display:none}.notif-bell-btn{padding:0 8px}}@media (max-width: 768px) and (orientation: landscape){.modal-mask{padding:0}.modal{height:100dvh;max-height:100dvh}.modal-body{max-height:calc(100dvh - 60px)}}.spk{position:relative}.spk-trigger{width:100%;justify-content:space-between;text-align:left;gap:8px}.spk-trigger.has-val:hover{background:var(--surface)}.spk-placeholder{color:var(--text-muted);font-size:13px}.spk-caret{color:var(--text-muted);flex-shrink:0;transition:transform .15s}.spk-caret.open{transform:rotate(180deg);color:var(--accent)}.spk-sel{display:flex;align-items:baseline;gap:8px;min-width:0;overflow:hidden}.spk-sel-code{font-family:Cascadia Code,JetBrains Mono,monospace;font-size:12.5px;font-weight:700;color:var(--accent);letter-spacing:.02em}.spk-sel-name{font-size:13.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spk-sel-sub{font-size:12px;color:var(--text-soft);white-space:nowrap}.spk-pop{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:60;background:var(--surface-elevated);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg, 0 10px 30px rgba(15, 23, 42, .14));overflow:hidden;animation:spk-in .14s ease}@keyframes spk-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.spk-search{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border);color:var(--text-muted)}.spk-search input{flex:1;height:30px;border:none;box-shadow:none;padding:0;font-size:13px;background:transparent}.spk-search input:focus{box-shadow:none}.spk-list{max-height:264px;overflow-y:auto;padding:6px}.spk-row{width:100%;height:auto;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 10px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;box-shadow:none;cursor:pointer;text-align:left}.spk-row:hover{background:var(--accent-soft);border-color:var(--accent-weak)}.spk-row.active{background:var(--accent-soft);border-color:var(--accent)}.spk-row-info{display:flex;flex-direction:column;gap:5px;min-width:0;flex:1}.spk-row-t1{display:flex;align-items:baseline;gap:8px;min-width:0}.spk-code{font-family:Cascadia Code,JetBrains Mono,monospace;font-size:12px;font-weight:700;color:var(--accent)}.spk-name{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spk-row-t2{display:flex;gap:6px;flex-wrap:wrap}.spk-chip{font-size:11px;line-height:1;padding:3px 7px;border-radius:4px;background:var(--bg);border:1px solid var(--border);color:var(--text-soft)}.spk-row-qty{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0}.spk-qty-label{font-size:10px;letter-spacing:.08em;color:var(--text-muted);text-transform:uppercase}.spk-qty-num{font-family:Cascadia Code,JetBrains Mono,monospace;font-size:14px;font-weight:700;color:var(--text)}.spk-check{color:var(--accent);flex-shrink:0}.spk-empty{text-align:center;color:var(--text-muted);font-size:12.5px;padding:28px 0}.site-footer{flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;font-size:12px;line-height:1.4;text-align:center;color:var(--text-muted);background:var(--surface);border-top:1px solid var(--border)}.site-footer a{color:var(--text-soft);text-decoration:none;letter-spacing:.02em;transition:color .15s ease}.site-footer a:hover{color:var(--accent);text-decoration:underline}.site-footer a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.auth-page-wrap{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.auth-page-wrap>.auth-page{flex:1 1 auto;min-height:0}@media (max-width: 768px){.site-footer{font-size:11.5px}}@media print{.site-footer{display:none}}
