/* P2-①-2 第 3 批断点归并（2026-10-01，收官批）：只动 @media 条件文本，规则体未改
     max-width 1200 → 1280
     max-width 1100 → 1280
     max-width 1000 → 1280
     max-width 1279 → 1280
     max-width 1180 → 1280
     max-width 1400 → 1440
     max-width 1300 → 1280
     max-width 1280 → （不变） */

/* v34: 返工列表分页 — 分离记录范围与翻页操作，强化按钮层级与边界态 */
.rw-pagination{
  position:sticky;
  bottom:0;
  z-index:4;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  min-height:58px;
  padding:10px 16px;
  border-top:1px solid var(--ui-line-200,#dbe3ed);
  background:rgba(255,255,255,.97);
  box-shadow:0 -5px 14px rgba(15,23,42,.035);
  backdrop-filter:blur(8px);
}
.rw-page-summary{display:flex;align-items:center;gap:10px;min-width:0;color:var(--sk-ink-2,#475569);font-size:12px;white-space:nowrap}
.rw-page-range{font-weight:600;color:var(--sk-ink-1,#1e293b);font-variant-numeric:tabular-nums}
.rw-page-range b{color:var(--ui-brand-700,#1769c2);font-weight:750}
.rw-page-total{color:var(--sk-ink-3,#64748b)}
.rw-page-controls{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto}
.rw-page-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:98px;height:36px;padding:0 12px;border:1px solid var(--ui-line-200,#dbe3ed);border-radius:9px;background:#fff;color:var(--ui-brand-700,#1769c2);font:inherit;font-size:12px;font-weight:650;line-height:1;white-space:nowrap;cursor:pointer;transition:background .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .16s ease}
.rw-page-btn:hover:not(:disabled){border-color:var(--ui-brand-500,#3b82f6);background:#f3f8ff;box-shadow:0 2px 7px rgba(37,99,235,.12);transform:translateY(-1px)}
.rw-page-btn:active:not(:disabled){transform:translateY(0);box-shadow:none}
.rw-page-btn:focus-visible{outline:3px solid rgba(59,130,246,.24);outline-offset:2px}
.rw-page-btn:disabled{border-color:#e7ebf1;background:#f7f8fa;color:#a0a9b6;cursor:not-allowed;box-shadow:none}
.rw-page-btn.rw-page-next:not(:disabled){border-color:var(--ui-brand-700,#1769c2);background:var(--ui-brand-700,#1769c2);color:#fff;box-shadow:0 2px 5px rgba(23,105,194,.18)}
.rw-page-btn.rw-page-next:hover:not(:disabled){border-color:var(--ui-brand-800,#1557a0);background:var(--ui-brand-800,#1557a0)}
.rw-page-arrow{font-size:18px;font-weight:500;line-height:10px}
.rw-page-current{display:flex;align-items:baseline;justify-content:center;gap:4px;min-width:66px;height:36px;padding:0 10px;border:1px solid #d9e7fb;border-radius:9px;background:#f2f7ff;color:var(--ui-brand-800,#1557a0);font-variant-numeric:tabular-nums}
.rw-page-current b{font-size:14px;font-weight:750}
.rw-page-current i{color:#718096;font-size:11px;font-style:normal}
@media(max-width:620px){
  .rw-pagination{align-items:stretch;flex-direction:column;gap:9px;padding:10px 12px}
  .rw-page-summary{justify-content:center}
  .rw-page-controls{justify-content:center}
  .rw-page-btn{min-width:92px}
}


/* ---- 订单详情页（Tab 布局 v2）---- */

.od-head {display:flex;flex-direction:column;gap:12px;margin:0 0 16px}

.od-title h3 {margin:0 0 4px;font-size:20px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}

.od-title .sub {font-size:12px;color:var(--txt-3)}

.od-status-bar {display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 14px}

.od-status-label {font-size:12px;color:var(--txt-3);font-weight:600;white-space:nowrap}

.od-status-chips {display:flex;gap:8px;flex-wrap:wrap}

.od-kpis {display:grid;grid-template-columns:repeat(4,1fr);gap:12px}

.odkpi {background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 12px;display:flex;align-items:center;gap:12px;min-width:0}
  .odkpi-icon {width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,rgba(68,68,68, .6),rgba(115,115,115, .35));display:flex;align-items:center;justify-content:center;color:var(--brand);font-size:16px;flex-shrink:0}

.odkpi-main {min-width:0}

#modalBody.wide .odkpi-main .v {font-size:18px;font-weight:800;line-height:1.15;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;overflow-wrap:break-word;}

.odkpi-main .l {font-size:12px;color:var(--txt-3);margin-top:2px}

.odkpi-main .v .u {font-size:12px;margin-left:2px;color:var(--txt-3)}

@media (max-width:720px){

  .od-kpis {grid-template-columns:repeat(2,1fr)}

  .od-status-bar {align-items:flex-start;flex-direction:column}

}

  :root{
    /* ★★ 2026-10-01 P2-①-1 老变量合并：这里原来重复定义了 --brand / --brand-2 / --brand-glow /
       --bg-0 / --bg-1 / --line / --line-strong / --grad / --shadow 九个变量，而 `theme.css:13-23`
       又定义了一遍**且值不同**（#3f3f3f 系 vs var(--sk-accent-deep) 系）。因为 theme.css 后加载，
       实际生效的一直是 theme.css 那份，app.css 这份是"看着像源头、其实从不生效"的僵尸定义 ——
       这正是"同屏两种蓝、改一处不生效"的根因。
       现在把这九个从这里删除，**唯一来源＝theme.css**（tokens.css 里登记了对应关系）。
       app.css 自己独有的变量（--panel* / --card / --cyan* / --bio / --amber / --red / --violet /
       --txt* / --r）保留原样，一个都没动。 */
    --panel:rgba(255,255,255,.86); --panel-2:rgba(255,255,255,.94);
    --panel-solid:#ffffff; --card:var(--ui-bg-soft);
    --cyan:var(--ui-brand-600); --cyan-bright:var(--ui-brand-500); --bio:var(--ui-ok-solid); --amber:var(--ui-warn-solid); --red:var(--ui-danger-solid); --violet:var(--pl-cyan-ink);
    --txt:var(--ui-ink-900); --txt-2:var(--ui-ink-500); --txt-3:var(--ui-ink-500);
    --r:16px;
  }

  *{box-sizing:border-box;margin:0;padding:0}

  html,body{height:100%}

  body{
    font-family:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
    background:var(--bg-0);color:var(--txt);overflow:hidden;-webkit-font-smoothing:antialiased;
    font-size:14px;line-height:1.6;text-rendering:optimizeLegibility;
    background-image:
      radial-gradient(1100px 720px at 2% -10%, rgba(86,86,86, .10), transparent 52%),
      radial-gradient(1000px 760px at 104% -4%, rgba(115,115,115, .08), transparent 50%),
      linear-gradient(180deg,var(--ui-line-100),var(--ui-line-200) 55%,var(--ui-line-100));}

  .bg-layer{position:fixed;inset:0;z-index:0;pointer-events:none}

  .bg-glow{background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E"),
    radial-gradient(1100px 720px at 2% -10%,rgba(86,86,86, .08),transparent 52%),
    radial-gradient(1000px 760px at 104% -4%,rgba(115,115,115, .06),transparent 50%),
    linear-gradient(180deg,var(--ui-line-100),var(--ui-line-200) 55%,var(--ui-line-100));}

  canvas#particles{position:fixed;inset:0;z-index:0;opacity:.5}

  .app{position:relative;z-index:2;display:flex;height:100vh}

  ::-webkit-scrollbar{width:9px;height:9px}

  ::-webkit-scrollbar-thumb{background:rgba(68,68,68, .18);border-radius:8px}

  ::-webkit-scrollbar-track{background:transparent}

  .sidebar{width:236px;flex:none;height:100%;display:flex;flex-direction:column;
    background:linear-gradient(180deg,rgba(255,255,255,.96),rgba(250,250,250, .98));
    border-right:1px solid var(--line);backdrop-filter:blur(14px);padding:18px 14px;gap:6px;box-shadow:var(--shadow)}

  .brand{display:flex;align-items:center;gap:12px;padding:6px 8px 16px}

    .logo{width:44px;height:44px;border-radius:50%;flex:none;display:grid;place-items:center;
    background:linear-gradient(135deg,var(--ui-brand-600),var(--sk-accent-deep));
    border:1px solid rgba(68,68,68, .25);box-shadow:0 8px 24px rgba(68,68,68, .25),inset 0 1px 0 rgba(255,255,255,.35)}

  .brand h1{font-size:16px;font-weight:700;line-height:1.3;letter-spacing:.3px;color:var(--txt)}

  .brand .sub{display:none}

  /* 2026-08-23 修复：导航项拆分为独立一级导航后数量增多，nav 需在品牌与底部脚之间自适应滚动，
     否则底部导航（如管理后台）被 body{overflow:hidden} 裁剪不可见 */
  nav{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:rgba(86,86,86, .28) transparent;padding-right:2px}
  nav::-webkit-scrollbar{width:6px}
  nav::-webkit-scrollbar-thumb{background:rgba(86,86,86, .25);border-radius:999px}
  nav::-webkit-scrollbar-thumb:hover{background:rgba(86,86,86, .40)}
  nav::-webkit-scrollbar-track{background:transparent}

  .nav-group{margin-top:14px}

  .nav-group .gt{font-size:12px;color:var(--txt-3);letter-spacing:2px;text-transform:uppercase;padding:0 10px 8px;font-weight:700}

  .nav-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;color:var(--txt-2);

    cursor:pointer;font-size:14px;font-weight:600;transition:.18s;border:1px solid transparent;position:relative}

  .nav-item svg{width:19px;height:19px;flex:none;opacity:.85}

  .nav-item:hover{background:rgba(198,198,198, .12);color:var(--txt)}

  .nav-item.active{background:linear-gradient(90deg,rgba(68,68,68, .12),rgba(86,86,86, .06));color:var(--brand);
    border-color:rgba(68,68,68, .25);box-shadow:0 0 18px -8px rgba(68,68,68, .25) inset}

  .nav-item.active::before{content:"";position:absolute;left:-14px;top:18%;bottom:18%;width:3px;border-radius:4px;

    background:var(--grad);box-shadow:0 0 10px var(--cyan)}

  .side-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid var(--line)}

  .conn{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--txt-2);padding:4px 6px}

  .dot{width:9px;height:9px;border-radius:50%}

  .dot.live{background:var(--bio);animation:pulse 2s infinite}

  .dot.demo{background:var(--amber);box-shadow:0 0 10px rgba(217,119,6,.6)}

/* ⚠ 原 `@keyframes pulse`（box-shadow 版）2026-10-09 删除：它被本文件后面那条同名 keyframes
   （opacity 版，见 .dot.live / .qc-dot.loading 那一段）**完全遮蔽**，属于死代码，且动非合成属性。 */

  .btn-ghost{font-size:12px;color:var(--cyan-bright);background:rgba(198,198,198, .10);border:1px solid var(--line-strong);
    padding:10px 12px;border-radius:10px;cursor:pointer;transition:.2s;font-weight:600;display:flex;align-items:center;justify-content:center;gap:8px}
  .btn-ghost:hover{background:rgba(198,198,198, .20);box-shadow:0 0 16px rgba(115,115,115, .28)}

  .main{flex:1;display:flex;flex-direction:column;min-width:0;height:100%}

  .topbar{display:flex;align-items:center;gap:16px;padding:14px 22px;border-bottom:1px solid var(--line);
    background:rgba(255,255,255,.82);backdrop-filter:blur(12px);box-shadow:var(--shadow)}

  .crumb{display:flex;flex-direction:column;line-height:1.2;min-width:0}

  .crumb .mt{font-size:16px;font-weight:700;letter-spacing:.4px}

  .crumb .ms{font-size:12px;color:var(--txt-3);letter-spacing:1.5px;text-transform:uppercase}

  .topbar .spacer{flex:1}

  .clock{text-align:right;line-height:1.15}

  .clock .t{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:1px}

  .clock .d{font-size:12px;color:var(--txt-2);letter-spacing:1px}

  .tbtn{font-size:12px;color:var(--txt-2);background:rgba(198,198,198, .10);border:1px solid var(--line);
    padding:8px 14px;border-radius:10px;cursor:pointer;transition:.2s;display:flex;align-items:center;gap:8px;font-weight:600}
  .tbtn:hover{color:var(--txt);border-color:var(--line-strong);background:rgba(198,198,198, .20)}
  .tbtn.primary{color:#fff;background:var(--grad);border:none;box-shadow:0 8px 20px -8px rgba(115,115,115, .45)}
  .tbtn.is-refreshing{pointer-events:none;opacity:.8;border-color:var(--cyan)}
  .tbtn.is-refreshing .tbtn-spin{display:inline-block;width:11px;height:11px;border:2px solid rgba(198,198,198, .25);border-top-color:var(--cyan);border-radius:50%;animation:sp .8s linear infinite;flex:none}

  .ach-header-actions{display:flex;align-items:center;flex-shrink:0}
  @media(max-width:860px){.ach-header{flex-wrap:wrap}.ach-header-actions{margin-left:auto}}

  .view{flex:1;overflow:auto;padding:22px;min-height:0}

  .grid{display:grid;gap:16px}

  .kpis{grid-template-columns:repeat(6,1fr)}

  @media (max-width:1280px){.kpis{grid-template-columns:repeat(3,1fr)}}

  .kpi{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px 18px;position:relative;overflow:hidden;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
  .kpi::after{content:"";position:absolute;right:-20px;top:-20px;width:80px;height:80px;border-radius:50%;
    background:radial-gradient(circle,rgba(198,198,198, .18),transparent 70%)}

  .kpi .k{font-size:13px;color:var(--txt-2);letter-spacing:.5px;font-weight:600}

  .kpi .v{font-size:32px;font-weight:800;margin-top:6px;font-variant-numeric:tabular-nums;color:var(--brand);letter-spacing:.5px;

    background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}

  .kpi.warn .v{background:linear-gradient(135deg,var(--ui-warn-solid),var(--ui-danger-solid));-webkit-background-clip:text;background-clip:text;color:transparent}

  .kpi .s{font-size:12px;color:var(--txt-2);margin-top:2px}

  .panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}

  .panel-h{display:flex;align-items:center;gap:10px;margin-bottom:14px}

  .panel-h .bar{width:4px;height:18px;border-radius:4px;background:var(--grad)}

  .panel-h h2{font-size:16px;font-weight:700}

  .panel-h .en{font-size:12px;color:var(--txt-3);letter-spacing:1px;text-transform:uppercase}

  .panel-h .right{margin-left:auto;display:flex;gap:8px;align-items:center}

  /* ============ 生产总览（首页看板升级，2026-08-23） ============ */
  .ov-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px}
  .ov-kpi{position:relative;border-radius:16px;padding:18px;color:#fff;overflow:hidden;box-shadow:var(--shadow);display:flex;align-items:center;gap:14px}
  .ov-kpi::after{content:'';position:absolute;right:-24px;top:-24px;width:110px;height:110px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.22),transparent 70%)}
  .ov-kpi-ico{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;background:rgba(255,255,255,.16);flex:none}
  .ov-kpi-copy{position:relative;z-index:1}
  .ov-kpi-label{font-size:12px;opacity:.85;letter-spacing:.5px}
  .ov-kpi-val{font-size:24px;font-weight:800;line-height:1.1;margin-top:2px}
  .ov-kpi-sub{font-size:12px;opacity:.85;margin-top:4px}
  .ov-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
  .ov-pane{min-width:0}
  .ov-pane-wide{min-height:280px}
  .ov-col2{display:flex;flex-direction:column;gap:14px;min-width:0}
  .ov-empty{color:var(--txt-3);font-size:12px;padding:6px 2px}
  .ov-link{color:var(--brand-2);cursor:pointer;text-decoration:underline}
  .ov-sglist{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
  .ov-sg{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:linear-gradient(135deg,rgba(86,86,86, .05),rgba(86,86,86, 0))}
  .ov-sg-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
  .ov-sg-name{font-weight:700;font-size:14px}
  .ov-sg-total{font-size:13px;color:var(--brand-2);font-weight:700}
  .ov-sg-cells{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
  .ov-sg-cell{display:flex;flex-direction:column;align-items:center;font-size:12px;color:var(--txt-3);background:rgba(179,179,179, .07);border-radius:8px;padding:6px 2px}
  .ov-sg-cell b{font-size:14px;color:var(--txt-1)}
  .ov-risklist,.ov-todolist{display:flex;flex-direction:column;gap:8px}
  .ov-risk,.ov-todo{border:1px solid var(--line);border-radius:12px;overflow:hidden;cursor:pointer;background:var(--ui-bg-card);box-shadow:0 1px 2px rgba(62,62,62, .04)}
  .ov-risk-h,.ov-todo-h{display:flex;align-items:center;gap:8px;padding:12px 14px}
  .ov-risk-name,.ov-todo-name{font-weight:600;font-size:13px}
  .ov-caret{margin-left:auto;color:var(--txt-3);font-size:12px}
  .ov-b{font-size:12px;padding:2px 8px;border-radius:20px;font-weight:600;flex:none}
  .ov-b-red{background:rgba(220,38,38,.12);color:var(--ui-danger-solid)}
  .ov-b-orange{background:rgba(217,119,6,.14);color:var(--ui-warn-solid)}
  .ov-subplist{display:none;border-top:1px dashed var(--line);padding:4px 14px 10px;max-height:220px;overflow:auto;background:rgba(86,86,86, .02)}
  .ov-subrow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed rgba(179,179,179, .16);font-size:12px}
  .ov-subrow:last-child{border-bottom:0}
  .ov-sub-od{font-family:monospace;font-weight:600;color:var(--txt-1)}
  .ov-sub-cust{color:var(--txt-3);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ov-todo-count{margin-left:auto;font-size:12px;font-weight:800;color:var(--brand-2)}
  .ov-chart{height:250px}
  .ov-dev-sum{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
  .ov-dev-pill{flex:1;min-width:64px;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:12px;color:var(--txt-3);background:var(--ui-bg-card);border:1px solid var(--line);border-radius:10px;padding:8px 4px}
  .ov-dev-pill b{font-size:18px;color:var(--txt-1)}
  .ov-dev-pill.ok b{color:var(--ui-ok-solid)}
  .ov-dev-pill.idle b{color:var(--ui-brand-600)}
  .ov-dev-pill.bad{border-color:rgba(220,38,38,.4);background:rgba(220,38,38,.06)}
  .ov-dev-pill.bad b{color:var(--ui-danger-solid)}
  @media (max-width:1280px){.ov-kpis{grid-template-columns:repeat(2,1fr)}.ov-grid{grid-template-columns:1fr}.ov-sglist{grid-template-columns:1fr}}

  /* ============ 第3期·总览深化：状态构成 + 综合达成率（2026-08-23） ============ */
  .ov-ringpane{display:flex;align-items:center;gap:22px;padding:14px 6px;min-height:250px;box-sizing:border-box;flex-wrap:wrap}
  .ov-ring{position:relative;width:128px;height:128px;border-radius:50%;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;box-shadow:0 8px 22px -10px rgba(68,68,68, .4)}
  .ov-ring::before{content:"";position:absolute;inset:12px;border-radius:50%;background:var(--ui-bg-card);box-shadow:inset 0 1px 4px rgba(68,68,68, .06)}
  .ov-ring b{position:relative;font-size:28px;font-weight:900;color:var(--brand);letter-spacing:-.5px;line-height:1}
  /* ★ 2026-08-25：标签由「绝对定位钉在环顶」改为跟随数字居中堆叠，消除脱节感 */
  .ov-ring i{position:relative;font-style:normal;font-size:12px;color:var(--txt-3);font-weight:700;line-height:1;letter-spacing:.5px}
  .ov-legend{flex:1;min-width:0;display:flex;flex-direction:column;gap:10px}
  .ov-lg{display:flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2);box-shadow:var(--shadow)}
  .ov-lg .dot{width:10px;height:10px;border-radius:4px;flex-shrink:0}
  .ov-lg .tx{flex:1;font-size:12px;color:var(--txt-2);font-weight:700}
  .ov-lg .vv{font-size:16px;font-weight:900;color:var(--txt)}
  .ov-lg .vv small{font-size:12px;color:var(--txt-3);font-weight:700}

  /* ============ 交期诊断（2026-08-23） ============ */
  .ov-reasonbar{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 12px}
  .orr{font-size:12px;font-weight:600;padding:4px 12px;border-radius:20px}
  .orr-red{background:rgba(220,38,38,.12);color:var(--ui-danger-solid)}
  .orr-orange{background:rgba(217,119,6,.14);color:var(--ui-warn-solid)}
  .orr-info{background:rgba(134,134,134, .10);color:var(--ui-brand-600)}
  .ov-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}
  .diag-tab{width:100%;border-collapse:collapse;font-size:12px}
  .diag-tab th{position:sticky;top:0;background:var(--ui-bg-page);color:var(--txt-2);font-weight:600;text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
  .diag-tab td{padding:10px 14px;border-bottom:1px dashed rgba(179,179,179, .16);color:var(--txt-1)}
  .diag-tab tr:last-child td{border-bottom:0}
  .diag-tab tbody tr:hover{background:rgba(86,86,86, .04)}
  .diag-station{display:inline-block;background:rgba(86,86,86, .08);color:var(--brand-2);font-weight:600;border-radius:6px;padding:2px 10px}
  .diag-days{font-weight:600;color:var(--txt-1)}
  .diag-days.is-late{color:var(--ui-danger-solid)}
  .diag-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:2px 0 12px}
  .diag-fbtn{border:1px solid var(--line);background:var(--ui-bg-card);color:var(--txt-2);border-radius:999px;padding:4px 14px;font-size:12px;font-weight:600;cursor:pointer}
  .diag-fbtn:hover{border-color:var(--line-strong);color:var(--txt)}
  .diag-fbtn.active{background:var(--grad);border-color:transparent;color:#fff}
  .diag-fbtn.active.late{background:var(--ui-danger-solid);border-color:var(--ui-danger-solid);color:#fff}
  .diag-fbtn.active.near{background:var(--ui-warn-solid);border-color:var(--ui-warn-solid);color:#fff}
  .diag-toolbar select{height:30px;border:1px solid var(--line);border-radius:8px;padding:0 8px;font-size:12px;color:var(--txt-2);background:var(--ui-bg-card);outline:none}
  .diag-toolbar select:focus{border-color:var(--brand-2)}
  .diag-search{display:flex;align-items:center;border:1px solid var(--line);border-radius:8px;padding:0 8px;background:var(--ui-bg-card);min-width:200px}
  .diag-search input{border:none;outline:none;height:28px;font-size:12px;width:180px;background:transparent;color:var(--txt-1)}
  .diag-search input::placeholder{color:var(--txt-3)}
  .diag-msg{font-size:12px;color:var(--txt-3);margin-top:8px}
  .diag-act{color:var(--brand-2);font-weight:600;cursor:pointer;background:none;border:none;font-size:12px;padding:2px 4px}
  .diag-act:hover{text-decoration:underline}
  .mono{font-family:Consolas,Menlo,monospace}

  /* ============ 统一数据查询（2026-08-23） ============ */
  .q-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
  .q-kpi{display:flex;align-items:center;gap:12px;background:var(--ui-bg-card);border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:0 1px 3px rgba(62,62,62, .05)}
  .q-kpi-ico{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex:none;border:1px solid;font-weight:800}
  .q-kpi-copy{min-width:0}
  .q-kpi-val{font-size:24px;font-weight:800;line-height:1.1}
  .q-kpi-label{font-size:12px;color:var(--txt-2);margin-top:2px}
  .q-kpi-sub{font-size:12px;color:var(--txt-3);margin-top:2px}
  .q-tabs{display:flex;gap:10px;margin-bottom:14px}
  .q-tabbtn{border:1px solid var(--line);border-radius:12px;padding:10px 16px;background:var(--ui-bg-card);cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:2px;transition:all .15s}
  .q-tabbtn b{font-size:13px;color:var(--txt);font-weight:700}
  .q-tabbtn i{font-size:12px;color:var(--txt-3);font-style:normal}
  .q-tabbtn.on{border-color:var(--brand);background:rgba(86,86,86, .06);box-shadow:0 0 0 1px rgba(86,86,86, .15) inset}
  .q-tabbtn.on b{color:var(--brand)}
  .q-search{display:flex;align-items:center;gap:8px;background:var(--ui-bg-card);border:1px solid var(--line);border-radius:10px;padding:8px 12px;color:var(--txt-3)}
  .q-search input{flex:1;border:none;outline:none;font-size:13px;color:var(--txt);background:transparent}
  .q-search:focus-within{border-color:var(--brand);box-shadow:0 0 0 2px rgba(86,86,86, .12)}
  .q-search-wrap{margin-top:4px}
  .q-tip{font-size:12px;color:var(--txt-3);margin:10px 2px}
  .q-stage{display:inline-block;font-size:12px;background:rgba(86,86,86, .07);color:var(--brand-2);border-radius:6px;padding:2px 8px;margin:2px 4px 2px 0}
  .q-st{font-size:12px;padding:2px 8px;border-radius:20px;font-weight:600}
  .q-st-ok{background:rgba(10,112,67,.12);color:var(--ui-ok-solid)}
  .q-person{color:var(--txt-1);font-weight:700}
  @media (max-width:1280px){.q-kpis{grid-template-columns:repeat(2,1fr)}}

  /* ============ 骨架屏加载动画（2026-08-21） ============ */
  .sk-loading{padding:4px 0 20px;animation:skIn .35s ease}
  @keyframes skIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
  /* ★ 2026-10-09 性能收口：发光带改成**覆盖层 + transform**（原来动 background-position 是非合成属性，
     每帧都要重绘整块骨架）。元素本身只留静态渐变，光带由 ::after 平移。 */
  .sk-bar{height:36px;border-radius:12px;margin-bottom:16px;background:linear-gradient(90deg,var(--ui-line-100) 25%,var(--ui-line-200) 40%,var(--ui-line-100) 55%);position:relative;overflow:hidden}
  .sk-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:18px}
  .sk-card{height:86px;border-radius:14px;background:linear-gradient(90deg,var(--ui-line-100) 25%,var(--ui-line-200) 40%,var(--ui-line-100) 55%);position:relative;overflow:hidden}
  .sk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}
  .sk-col{border-radius:14px;overflow:hidden}
  .sk-col-head{height:26px;border-radius:8px;margin-bottom:10px;background:linear-gradient(90deg,var(--ui-line-100) 25%,var(--ui-line-200) 40%,var(--ui-line-100) 55%);position:relative;overflow:hidden}
  .sk-item{height:74px;border-radius:10px;margin-bottom:8px;background:linear-gradient(90deg,var(--ui-line-100) 25%,var(--ui-line-200) 40%,var(--ui-line-100) 55%);position:relative;overflow:hidden}
  .sk-footer{height:120px;border-radius:14px;background:linear-gradient(90deg,var(--ui-line-100) 25%,var(--ui-line-200) 40%,var(--ui-line-100) 55%);position:relative;overflow:hidden}
  /* 光带覆盖层：只动 transform（合成属性） */
  .sk-bar::after,.sk-card::after,.sk-col-head::after,.sk-item::after,.sk-footer::after{
    content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%);
    transform:translateX(-120%);will-change:transform;animation:skSlide 1.3s ease-in-out infinite;
  }
  @keyframes skSlide{0%{transform:translateX(-120%)}100%{transform:translateX(120%)}}
  @media(max-width:900px){.sk-cards{grid-template-columns:repeat(2,1fr)}.sk-grid{grid-template-columns:repeat(2,1fr)}}

/* ===== 侧边栏待处理徽章（2026-09-01）=====
   利用 .nav-item 已是 flex 布局，margin-left:auto 把徽章推到右侧 */
.nav-badge{min-width:18px;height:18px;border-radius:8px;background:var(--danger,var(--ui-danger-solid));color:#fff;font-size:12px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;padding:0 6px;margin-left:auto;line-height:1;box-shadow:0 2px 6px rgba(220,38,38,.35);animation:nbPop .25s ease both}
.nav-badge[hidden]{display:none}
@keyframes nbPop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
.nav-item:hover .nav-badge{box-shadow:0 2px 8px rgba(220,38,38,.5)}

  /* ============ 品牌加载器（2026-08-21 · 深蓝高质感版）============ */
  .ld-primary{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:320px;padding:52px 20px;text-align:center;animation:skIn .35s ease;user-select:none}
  /* —— 中心徽标：外圈 + 扫描弧 + 内核 —— */
  .ld-emblem{position:relative;width:96px;height:96px;margin:4px 0 24px}
  .ld-emblem-ring{position:absolute;inset:0;border-radius:50%;border:1.5px dashed rgba(86,86,86, .28);animation:ldOrbit 26s linear infinite}
  .ld-emblem-sweep{position:absolute;inset:4px;border-radius:50%;background:conic-gradient(from -20deg,rgba(86,86,86, 0) 0deg,var(--brand-2) 80deg,rgba(86,86,86, 0) 130deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));animation:ldSpin 1.25s linear infinite}
  .ld-emblem-arc{position:absolute;inset:0;border-radius:50%;border:2px solid rgba(115,115,115, .55);border-top-color:rgba(115,115,115, 0);transform:rotate(0deg);animation:ldSpin 2.1s cubic-bezier(.45,.05,.35,1) infinite;box-shadow:0 0 14px rgba(86,86,86, .25)}
  .ld-emblem-core{position:absolute;inset:26px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at 35% 30%,#c6c6c6,var(--brand-2) 60%,var(--brand));color:#fff;font-size:18px;font-weight:700;box-shadow:0 4px 18px rgba(68,68,68, .45),inset 0 1px 0 rgba(255,255,255,.35);animation:ldCorePulse 2.4s ease-in-out infinite}
  .ld-emblem-core b{transform:translateY(-.5px)}
  .ld-emblem-orbit{position:absolute;top:-3px;left:50%;width:9px;height:9px;margin-left:-4.5px;border-radius:50%;background:var(--ui-bg-card);box-shadow:0 0 0 3px rgba(115,115,115, .35),0 0 12px rgba(115,115,115, .9);animation:ldOrbit 2.1s cubic-bezier(.45,.05,.35,1) infinite}
  @keyframes ldSpin{to{transform:rotate(360deg)}}
  /* ★ 2026-10-09 性能收口：`transform-origin` 是常量（center），放进 keyframes 只会让它变成"要插值的属性"；
     内核的呼吸改成「只动 transform + 一层静态辉光用 opacity 淡入淡出」。 */
  @keyframes ldOrbit{to{transform:rotate(360deg)}}
  @keyframes ldCorePulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
  @keyframes ldCoreGlow{0%,100%{opacity:0}50%{opacity:1}}
  .ld-emblem-core::after{
    content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;
    box-shadow:0 6px 26px rgba(86,86,86, .6),inset 0 1px 0 rgba(255,255,255,.4);
    opacity:0;will-change:opacity;animation:ldCoreGlow 2.4s ease-in-out infinite;
  }
  .ld-emblem-ring,.ld-emblem-orbit{transform-origin:center}
  .ld-title{margin-top:2px;font-size:18px;font-weight:700;letter-spacing:3px;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;animation:ldShimmer 2.6s ease-in-out infinite}
  @keyframes ldShimmer{0%,100%{filter:brightness(1)}50%{filter:brightness(1.22)}}
  .ld-track{position:relative;width:224px;height:4px;margin:20px auto 0;border-radius:999px;background:rgba(68,68,68, .12);overflow:hidden}
  .ld-track-fill{position:absolute;top:0;left:0;height:100%;width:42%;border-radius:999px;background:var(--grad);box-shadow:0 0 12px rgba(115,115,115, .7);animation:ldTrack 1.6s cubic-bezier(.4,0,.2,1) infinite}
  @keyframes ldTrack{0%{transform:translateX(-110%)}55%{transform:translateX(320%)}100%{transform:translateX(320%)}}
  .ld-sub{margin-top:14px;font-size:12px;color:var(--txt-3);letter-spacing:4px;text-transform:uppercase;animation:ldPulse 1.6s ease-in-out infinite}
  @keyframes ldPulse{0%,100%{opacity:.35}50%{opacity:1}}
  .ld-sub-dots{display:inline-flex;gap:4px;margin-left:6px}
  .ld-sub-dots i{width:4px;height:4px;border-radius:50%;background:var(--brand-2);animation:ldPulse 1.4s ease-in-out infinite}
  .ld-sub-dots i:nth-child(2){animation-delay:.18s}
  .ld-sub-dots i:nth-child(3){animation-delay:.36s}

  /* ---- 品牌标志内核：原子模型（2026-09-01 v4，与侧边栏 brand 同款）---- */
  .ld-atom{width:48px;height:48px;display:block;filter:drop-shadow(0 4px 12px rgba(28,28,28, .55));overflow:visible}
  .ld-atom ellipse, .ld-atom .at-core{transform-box:fill-box;transform-origin:center}
  .ld-atom .at-orbit-a{animation:atSpinA 6s linear infinite}
  .ld-atom .at-orbit-b{animation:atSpinB 9s linear infinite}
  .ld-atom .at-core{animation:atPulse 1.8s ease-in-out infinite}
  @keyframes atSpinA{to{transform:rotate(360deg)}}
  @keyframes atSpinB{to{transform:rotate(-360deg)}}
  @keyframes atPulse{0%,100%{opacity:.8;transform:scale(1)}50%{opacity:1;transform:scale(1.35)}}
  /* 徽标能量光晕：提升整体精致度（保留） */
  .ld-emblem::after{content:"";position:absolute;inset:16px;border-radius:50%;pointer-events:none;
    background:radial-gradient(circle,rgba(12,154,184,.30),rgba(12,154,184,0) 70%);
    animation:ldHalo 2.4s ease-in-out infinite}
  @keyframes ldHalo{0%,100%{opacity:.45;transform:scale(.88)}50%{opacity:1;transform:scale(1.14)}}
  @media (prefers-reduced-motion:reduce){
    .ld-atom .at-orbit-a,.ld-atom .at-orbit-b,.ld-atom .at-core,.ld-emblem::after{animation:none}
  }

  /* ============ 导出/耗时操作进度弹窗（2026-08-21）============ */
  .progress-modal{position:fixed;inset:0;z-index:9600;display:flex;align-items:center;justify-content:center;background:rgba(28,28,28, .58);backdrop-filter:blur(4px);animation:pmFade .18s ease}
  @keyframes pmFade{from{opacity:0}to{opacity:1}}
  .progress-content{width:min(92vw,360px);padding:30px 28px 24px;border-radius:16px;background:var(--ui-bg-card);text-align:center;box-shadow:0 30px 80px -18px rgba(28,28,28, .5),0 0 0 1px rgba(255,255,255,.6) inset;animation:pmPop .24s cubic-bezier(.2,.8,.25,1)}
  @keyframes pmPop{from{opacity:0;transform:translateY(16px) scale(.96)}to{opacity:1;transform:none}}
  .pm-emblem{position:relative;width:74px;height:74px;margin:4px auto 18px}
  .pm-emblem .ld-emblem-ring{inset:2px}
  .pm-emblem .ld-emblem-sweep{inset:6px}
  .pm-emblem .ld-emblem-core{inset:24px;font-size:0}
  .pm-emblem .ld-emblem-core b{color:#fff;display:flex}
  .pm-title{font-size:16px;font-weight:800;letter-spacing:1px;color:var(--ui-brand-900)}
  .pm-sub{margin-top:6px;font-size:12px;color:var(--ui-ink-400);word-break:break-all}
  .pm-title.danger{color:var(--ui-danger-solid)}
  .progress-content .ld-track{width:100%;height:6px;margin:20px auto 0}
  .pm-indeterminate{background:var(--grad);box-shadow:0 0 12px rgba(115,115,115, .7);animation:ldTrack 1.6s cubic-bezier(.4,0,.2,1) infinite}
  .pm-done{width:100%;animation:none;background:linear-gradient(90deg,var(--ui-ink-500),var(--ui-ok-solid));box-shadow:0 0 12px rgba(118,118,118, .55)}
  .pm-error{width:100%;animation:none;background:linear-gradient(90deg,var(--ui-danger-solid),var(--ui-danger-solid));box-shadow:0 0 12px rgba(220,38,38,.55)}
  .pm-step{margin-top:14px;font-size:12px;color:var(--ui-ink-700);min-height:18px}
  .pm-actions{margin-top:20px;display:flex;justify-content:center;gap:10px}
  .pm-btn{padding:10px 22px;border-radius:10px;border:1px solid var(--ui-line-200);background:var(--ui-bg-page);color:var(--ui-ink-700);font-size:13px;font-weight:600;cursor:pointer;transition:.2s}
  .pm-btn:hover{background:var(--ui-brand-100)}
  .pm-btn.pm-ok{border:0;background:var(--grad);color:#fff;box-shadow:0 10px 24px -8px rgba(115,115,115, .7)}
  .pm-btn.pm-ok:hover{filter:brightness(1.06)}
  .progress-content.is-success{animation:none}

  /* 数据就绪后内容淡入 */
  .view-fade{animation:viewFade .3s ease}
  @keyframes viewFade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

  .board{display:grid;grid-template-columns:repeat(8,minmax(150px,1fr));gap:12px;overflow-x:auto;padding-bottom:6px}

  .stcol{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;min-height:120px}
  .stcol .sh{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:700;
    color:var(--cyan-bright);margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed var(--line)}
  .stcol .cnt{background:rgba(198,198,198, .18);border-radius:8px;padding:2px 8px;font-size:12px}

  .ocard{background:linear-gradient(180deg,var(--ui-bg-card),var(--ui-bg-soft));border:1px solid var(--line);
    border-radius:10px;padding:10px 10px 10px;margin-bottom:8px;cursor:pointer;transition:.18s;overflow-x:clip;overflow-y:visible;box-sizing:border-box}
  .ocard:hover{border-color:var(--line-strong);transform:translateY(-2px);box-shadow:0 8px 20px -10px rgba(115,115,115, .45)}

  .ocard .od{font-size:14px;font-weight:700}

  .ocard .oc{font-size:12px;color:var(--txt-2);margin-top:4px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

  /* ★ 2026-10-09 性能收口：延期的"红光呼吸"原来是直接动 box-shadow（非合成）。
     现在：静态红光挂在 ::after 上，只让它的 opacity 呼吸 —— 观感一样，主线程不再被占用。 */
  .ocard.over{position:relative;border-color:rgba(220,38,38,.5)}
  .ocard.over::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    box-shadow:0 0 14px -2px rgba(220,38,38,.55);opacity:0;will-change:opacity;animation:ovp 1.6s ease-in-out infinite}
  @keyframes ovp{0%,100%{opacity:0}50%{opacity:1}}

  /* 未生产订单卡片：并入「合成」列展示，顶部色条 + 角标区分。
     ★ 2026-09-26 第三十六轮：橙色语义拆开的第二步 —— 整组由橙(#f97316/#ea580c)
     改中性灰蓝 rgba(93,112,137,·)（与 .b-unprod「⏳未生产」徽标同族），
     橙色/红色只留给逾期卡；边框仍为 2px、::before 仍 4px，几何零变化（无版面漂移）。
     ★ 2026-09-26 第三十七轮：灰蓝被用户判定「不够醒目」，整组改**靛蓝 Indigo**
     （#7b7b7b / #6a6a6a / #575757 / #9b9b9b 一族，紫蓝系）。
     选型理由：红＝逾期、青＝合作、橙已退役给逾期专用，靛蓝是这套配色里**唯一未被占用的强色**；
     且靛蓝的语义是「待开工」的中性提醒，不是告警，与「逾期」的红色警示不抢语义。
     边框同时由 solid 改 **dashed**（虚线＝还没开始），仍是 2px 同宽，几何/版面零变化。 */
  .ocard.unprod{position:relative;background:rgba(198,198,198, .08);border:2px dashed rgba(134,134,134, .55);box-shadow:0 2px 10px -4px rgba(134,134,134, .4)}
  .ocard.unprod::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;border-radius:10px 10px 0 0;background:linear-gradient(90deg,rgba(134,134,134, .85),rgba(198,198,198, .3))}
  .ocard.unprod:hover{border-color:rgba(134,134,134, .85);box-shadow:0 8px 20px -8px rgba(134,134,134, .6);transform:translateY(-2px)}
  .ocard.unprod .od{color:var(--ui-brand-600)}
  .ocard.unprod .oc{color:var(--ui-brand-500)}
  .ocard.unprod .pbar i{background:linear-gradient(90deg,var(--ui-brand-500),#c6c6c6);box-shadow:0 0 8px rgba(134,134,134, .45)}
  /* ★ 2026-09-26 第三十五轮：橙色语义拆开 —— 「未生产」徽标由橙(#f97316)改中性灰蓝
     （与合作徽标同一族、但可区分），橙色只保留给逾期；只改颜色，字号/字重/内边距不变。
     ★ 2026-09-26 第三十七轮：淡底浅字被用户判定「不够醒目」，改**实心靛蓝 + 白字**
     （#7b7b7b 底 / #FFFFFF 字，白字对比度 6.3:1 ≥ WCAG AA 4.5:1）。
     选择器由 `.b-unprod` 提升为 `.badge.b-unprod`：原 `.b-unprod{font-weight:800}` 被文件
     后面的 `.badge{font-weight:700}`（同为单类选择器、但位置更靠后）盖掉，实测 badgeWeight=700，
     故本轮用双类选择器让 800 真正生效 —— 仍是一处规则，未新增规则、未改字号/内边距。 */
  .badge.b-unprod{background:var(--ui-brand-500);color:#fff;border:none;font-weight:800;box-shadow:0 2px 6px -1px rgba(134,134,134, .55)}

  /* （旧的 box-shadow 版 ovp 已并入上面那条 opacity 版；此处保留占位说明，避免又出现两个同名 keyframes） */

  

/* ============ 订单类别构成 Redesign ============ */
.cat-page{display:flex;flex-direction:column;gap:16px;margin-top:12px}
.cat-hero{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;border-radius:16px;background:linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-700) 50%,var(--ui-brand-700) 100%);color:#fff;box-shadow:0 12px 34px -18px rgba(68,68,68, .45);position:relative;overflow:hidden}
.cat-hero::before{content:'';position:absolute;top:-50px;right:-30px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.06)}
.cat-hero::after{content:'';position:absolute;bottom:-70px;right:100px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.04)}
.cat-hero-left{z-index:1}
.cat-hero-title{font-size:24px;font-weight:800;letter-spacing:1px}
.cat-hero-sub{font-size:12px;opacity:.7;margin-top:6px;letter-spacing:2px}
.cat-hero-right{display:flex;align-items:center;gap:24px;z-index:1}
.cat-hero-stat{display:flex;flex-direction:column;align-items:center}
.cat-hs-label{font-size:12px;opacity:.7}
.cat-hs-val{font-size:28px;font-weight:800}
.cat-hs-val.warn{color:var(--ui-warn-solid)}
.cat-hs-val.bad{color:var(--ui-danger-line)}
.cat-hero-divider{width:1px;height:40px;background:rgba(255,255,255,.2)}
.cat-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.cat-kpi-card{position:relative;border-radius:14px;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 8px 24px -12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.cat-kpi-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px -12px rgba(0,0,0,.4)}
.cat-kpi-card::before{content:'';position:absolute;top:-30px;right:-20px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.08)}
.cat-kpi-body{z-index:1}
.cat-kpi-label{font-size:13px;opacity:.85}
.cat-kpi-val{font-size:40px;font-weight:800;line-height:1.1;margin:4px 0}
.cat-kpi-sub{font-size:12px;opacity:.7}
.cat-kpi-ring{position:relative;width:56px;height:56px;z-index:1;flex:none}
.cat-kpi-ring svg{width:56px;height:56px}
.cat-kpi-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:#fff}
.cat-kpi-bar{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
.cat-charts-row{display:grid;grid-template-columns:1fr 1fr 1.2fr;gap:14px}
.cat-chart-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.cat-chart-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:8px}
.cat-chart-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.cat-chart-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.cat-chart-body{width:100%}
.cat-chart-legend{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}
.cat-leg-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2)}
.cat-leg-dot{width:10px;height:10px;border-radius:4px;flex:none}
.cat-detail-section{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.cat-detail-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:12px}
.cat-detail-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.cat-detail-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.cat-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.cat-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid var(--line);background:var(--card);font-size:13px;color:var(--txt-2);cursor:pointer;transition:.18s}
.cat-tab:hover{border-color:var(--line-strong)}
.cat-tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.cat-tab-dot{width:8px;height:8px;border-radius:50%;flex:none}
.cat-tab-count{font-weight:700}
.cat-order-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;max-height:480px;overflow-y:auto;padding-right:4px}
.cat-ocard{display:flex;align-items:center;gap:12px;background:linear-gradient(180deg,var(--ui-bg-card),var(--ui-bg-soft));border:1px solid var(--line);border-radius:12px;padding:12px;transition:.18s}
.cat-ocard:hover{border-color:var(--line-strong);transform:translateY(-2px);box-shadow:0 8px 20px -10px rgba(115,115,115, .35)}
  .cat-ocard.over{position:relative;border-color:rgba(220,38,38,.4)}
  .cat-ocard.over::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    box-shadow:0 0 14px -2px rgba(220,38,38,.45);opacity:0;will-change:opacity;animation:catovp 1.6s ease-in-out infinite}
  @keyframes catovp{0%,100%{opacity:0}50%{opacity:1}}
.cat-ocard-ring{position:relative;width:64px;height:64px;flex:none}
.cat-ocard-ring svg{width:64px;height:64px}
.cat-ocard-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:var(--txt)}
.cat-ocard-info{flex:1;min-width:0}
.cat-ocard-id{font-size:14px;font-weight:700;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cat-ocard-cust{font-size:12px;color:var(--txt-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cat-ocard-meta{display:flex;align-items:center;gap:8px;margin-top:6px}
.cat-ocard-st{padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}
.cat-ocard-qty{font-size:12px;color:var(--txt-3)}
@media (max-width:1280px){
  .cat-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .cat-charts-row{grid-template-columns:1fr}
  .cat-hero-right{gap:12px}
  .cat-hs-val{font-size:20px}
}


/* ============ 周期达成率 Redesign ============ */
.cyc-page{display:flex;flex-direction:column;gap:16px;margin-top:12px}
.cyc-hero{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;border-radius:16px;background:linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-700) 50%,var(--ui-brand-700) 100%);color:#fff;box-shadow:0 12px 34px -18px rgba(68,68,68, .45);position:relative;overflow:hidden}
.cyc-hero::before{content:'';position:absolute;top:-50px;right:-30px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.06)}
.cyc-hero::after{content:'';position:absolute;bottom:-70px;right:100px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.04)}
.cyc-hero-left{z-index:1}
.cyc-hero-title{font-size:24px;font-weight:800;letter-spacing:1px}
.cyc-hero-sub{font-size:12px;opacity:.7;margin-top:6px;letter-spacing:1px}
.cyc-hero-right{display:flex;align-items:center;gap:24px;z-index:1}
.cyc-hero-stat{display:flex;flex-direction:column;align-items:center}
.cyc-hs-label{font-size:12px;opacity:.7}
.cyc-hs-val{font-size:28px;font-weight:800}
.cyc-hs-val.good{color:var(--ui-ink-300)}
.cyc-hs-val.warn{color:var(--ui-warn-solid)}
.cyc-hs-val.bad{color:var(--ui-danger-line)}
.cyc-hero-divider{width:1px;height:40px;background:rgba(255,255,255,.2)}
.cyc-kpi-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px}
.cyc-kpi-card{position:relative;border-radius:14px;padding:16px 18px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 8px 24px -12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.cyc-kpi-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px -12px rgba(0,0,0,.4)}
.cyc-kpi-card::before{content:'';position:absolute;top:-30px;right:-20px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.08)}
.cyc-kpi-body{z-index:1}
.cyc-kpi-label{font-size:12px;opacity:.85}
.cyc-kpi-val{font-size:32px;font-weight:800;line-height:1.1;margin:4px 0}
.cyc-kpi-sub{font-size:12px;opacity:.7}
.cyc-kpi-ring{position:relative;width:56px;height:56px;z-index:1;flex:none}
.cyc-kpi-ring svg{width:56px;height:56px}
.cyc-kpi-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:#fff}
.cyc-kpi-bar{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
.cyc-week-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
.cyc-week-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px;backdrop-filter:blur(8px);box-shadow:var(--shadow);transition:.18s}
.cyc-week-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px -10px rgba(86,86,86, .3)}
.cyc-week-card.current{border-color:var(--brand);background:linear-gradient(135deg,rgba(86,86,86, .06),rgba(68,68,68, .02));box-shadow:0 4px 16px -8px rgba(86,86,86, .3)}
.cyc-week-label{font-size:12px;color:var(--brand);font-weight:700;text-transform:uppercase;letter-spacing:1px}
.cyc-week-range{font-size:13px;font-weight:600;color:var(--txt);margin:4px 0 10px}
.cyc-week-stats{display:flex;gap:8px}
.cyc-week-stat{flex:1;display:flex;flex-direction:column;align-items:center;padding:6px 2px;border-radius:8px;background:rgba(68,68,68, .03)}
.cyc-ws-num{font-size:18px;font-weight:800;line-height:1}
.cyc-ws-num.new{color:var(--ui-brand-700)}
.cyc-ws-num.ship{color:var(--pl-cyan)}
.cyc-ws-num.over{color:var(--ui-danger-solid)}
.cyc-ws-label{font-size:12px;color:var(--txt-3);margin-top:4px}
.cyc-charts-row{display:grid;grid-template-columns:1.4fr 1fr 1.4fr;gap:14px}
.cyc-chart-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.cyc-chart-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:8px}
.cyc-chart-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.cyc-chart-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.cyc-chart-body{width:100%}
.cyc-detail-section{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.cyc-detail-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:12px}
.cyc-detail-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.cyc-detail-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.cyc-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.cyc-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid var(--line);background:var(--card);font-size:13px;color:var(--txt-2);cursor:pointer;transition:.18s}
.cyc-tab:hover{border-color:var(--line-strong)}
.cyc-tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.cyc-tab-dot{width:8px;height:8px;border-radius:50%;flex:none}
.cyc-tab-count{font-weight:700}
.cyc-order-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;max-height:480px;overflow-y:auto;padding-right:4px}
.cyc-ocard{display:flex;align-items:center;gap:12px;background:linear-gradient(180deg,var(--ui-bg-card),var(--ui-bg-soft));border:1px solid var(--line);border-radius:12px;padding:12px;transition:.18s}
.cyc-ocard:hover{border-color:var(--line-strong);transform:translateY(-2px);box-shadow:0 8px 20px -10px rgba(115,115,115, .35)}
  .cyc-ocard.over{position:relative;border-color:rgba(220,38,38,.4)}
  .cyc-ocard.over::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    box-shadow:0 0 14px -2px rgba(220,38,38,.45);opacity:0;will-change:opacity;animation:cycovp 1.6s ease-in-out infinite}
  @keyframes cycovp{0%,100%{opacity:0}50%{opacity:1}}
.cyc-ocard-ring{position:relative;width:64px;height:64px;flex:none}
.cyc-ocard-ring svg{width:64px;height:64px}
.cyc-ocard-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:var(--txt)}
.cyc-ocard-info{flex:1;min-width:0}
.cyc-ocard-id{font-size:14px;font-weight:700;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cyc-ocard-cust{font-size:12px;color:var(--txt-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cyc-ocard-meta{display:flex;align-items:center;gap:8px;margin-top:6px}
.cyc-ocard-st{padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}
.cyc-ocard-date{font-size:12px;color:var(--txt-3)}
@media (max-width:1280px){
  .cyc-kpi-grid{grid-template-columns:repeat(3,1fr)}
  .cyc-week-grid{grid-template-columns:repeat(3,1fr)}
  .cyc-charts-row{grid-template-columns:1fr}
  .cyc-hero-right{gap:12px}
  .cyc-hs-val{font-size:20px}
}


/* ============ 管理后台 Redesign ============ */
.am-page{display:flex;flex-direction:column;gap:18px;margin-top:12px;width:100%}
.am-hero{display:flex;justify-content:space-between;align-items:center;padding:24px 30px;border-radius:16px;background:
  radial-gradient(1100px 300px at 100% -40%, rgba(198,198,198, .35), transparent 55%),
  radial-gradient(800px 260px at -10% 120%, rgba(12,154,184,.22), transparent 60%),
  linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-900) 55%,var(--ui-brand-700) 100%);
  color:#fff;box-shadow:0 16px 40px -22px rgba(68,68,68, .65), inset 0 1px 0 rgba(255,255,255,.12);position:relative;overflow:hidden}
.am-hero::before{content:'';position:absolute;inset: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:34px 34px;mask-image:radial-gradient(circle at 30% 30%,#000,transparent 75%)}
.am-hero::after{content:'';position:absolute;top:-60px;right:-20px;width:260px;height:260px;border-radius:50%;background:rgba(255,255,255,.05);box-shadow:0 0 0 40px rgba(255,255,255,.02),0 0 0 90px rgba(255,255,255,.015)}
.am-hero-left{z-index:1}
.am-hero-eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;letter-spacing:3px;color:var(--ui-brand-100);background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.18);padding:4px 12px;border-radius:999px;margin-bottom:8px;text-transform:uppercase}
.am-hero-title{font-size:24px;font-weight:800;letter-spacing:.5px;line-height:1.2;text-shadow:0 2px 8px rgba(28,28,28, .25)}
.am-hero-sub{font-size:12px;opacity:.78;margin-top:6px;letter-spacing:1px}
.am-hero-right{display:flex;align-items:center;gap:22px;z-index:1}
.am-hero-user{display:inline-flex;align-items:center;gap:10px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.20);padding:6px 14px 6px 6px;border-radius:999px;backdrop-filter:blur(4px);box-shadow:inset 0 1px 0 rgba(255,255,255,.12)}
.am-hero-ava{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,var(--ui-bg-card),var(--ui-brand-050));color:var(--ui-brand-700);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:14px;box-shadow:0 2px 6px rgba(28,28,28, .3)}
.am-hero-user .am-hero-role{display:flex;flex-direction:column;line-height:1.25}
.am-hero-user .am-hur-label{font-size:12px;opacity:.7;letter-spacing:1px}
.am-hero-user .am-hur-name{font-size:13px;font-weight:700}
.am-hero-stat{display:flex;flex-direction:column;align-items:center}
.am-hs-label{font-size:12px;opacity:.7;letter-spacing:1px}
.am-hs-val{font-size:20px;font-weight:800}
.am-hero-divider{width:1px;height:44px;background:rgba(255,255,255,.22)}
.am-hero-clock{display:inline-flex;flex-direction:column;align-items:center;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.20);padding:8px 16px;border-radius:12px}
.am-hero-clock .am-hc-time{font-size:20px;font-weight:800;letter-spacing:1px;font-variant-numeric:tabular-nums}
.am-hero-clock .am-hc-date{font-size:12px;opacity:.75;margin-top:2px;letter-spacing:.5px}
/* 高端分段式页签导航 */
.am-tabs{display:flex;gap:4px;padding:6px;background:rgba(68,68,68, .04);border:1px solid var(--line);border-radius:14px;position:relative;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;-ms-overflow-style:none;box-shadow:var(--shadow)}
.am-tabs::-webkit-scrollbar{display:none}
.am-tab{display:flex;align-items:center;gap:8px;padding:12px 20px;border-radius:10px;border:none;background:transparent;color:var(--txt-2);font-size:13px;font-weight:600;cursor:pointer;transition:all .22s ease;white-space:nowrap;flex:none;position:relative}
.am-tab:hover{background:rgba(86,86,86, .08);color:var(--brand)}
.am-tab.active{background:linear-gradient(135deg,var(--ui-brand-600),var(--sk-accent-deep));color:#fff;box-shadow:0 8px 18px -8px rgba(68,68,68, .6), inset 0 1px 0 rgba(255,255,255,.18)}
.am-tab-ico{font-size:16px;opacity:.82;line-height:1}
.am-tab.active .am-tab-ico{opacity:1}
.am-tab .am-tab-dot{width:7px;height:7px;border-radius:50%;background:var(--amber);margin-left:2px;box-shadow:0 0 0 3px rgba(217,119,6,.25)}
/* 内核区内容容器 */
.am-content{display:flex;flex-direction:column;gap:18px}
.am-pane{display:block;animation:amFadeIn .28s ease both}
.am-hide{display:none!important}
@keyframes amFadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.am-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.am-kpi-card{position:relative;border-radius:14px;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 8px 24px -12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.am-kpi-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px -12px rgba(0,0,0,.4)}
.am-kpi-card::before{content:'';position:absolute;top:-30px;right:-20px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.08)}
.am-kpi-body{z-index:1}
.am-kpi-label{font-size:13px;opacity:.85}
.am-kpi-val{font-size:40px;font-weight:800;line-height:1.1;margin:4px 0}
.am-kpi-sub{font-size:12px;opacity:.7}
.am-kpi-ring{position:relative;width:56px;height:56px;z-index:1;flex:none}
.am-kpi-ring svg{width:56px;height:56px}
.am-kpi-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:#fff}
.am-kpi-icon{font-size:32px;font-weight:800;opacity:.5;z-index:1}
.am-kpi-bar{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
.am-two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.am-panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;backdrop-filter:blur(8px);box-shadow:var(--shadow);overflow:hidden}
.am-panel.am-full{grid-column:1/-1}
.am-panel-hd{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line)}
.am-panel-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px;flex:none}
.am-panel-hd h2{font-size:14px;font-weight:700;color:var(--txt);margin:0}
.am-panel-badge{margin-left:auto;font-size:12px;padding:2px 10px;border-radius:10px;background:var(--brand);color:#fff;font-weight:600}
.am-panel-en{margin-left:auto;font-size:12px;color:var(--txt-3);font-weight:400}
.am-panel-body{padding:14px 16px}
.am-tbl-wrap{overflow-x:auto;overflow-y:auto;max-height:calc(100vh - 320px);min-height:280px}
.am-table{width:100%;border-collapse:collapse;font-size:13px}
.am-table thead{position:sticky;top:0;z-index:1}
.am-table th{padding:10px 12px;text-align:left;font-weight:600;color:var(--txt-2);background:var(--card);border-bottom:1px solid var(--line);white-space:nowrap}
.am-table td{padding:10px 12px;border-bottom:1px solid rgba(68,68,68, .04);color:var(--txt);vertical-align:top}
.am-table tbody tr:hover{background:rgba(86,86,86, .03)}
.am-table tbody tr:last-child td{border-bottom:none}
.am-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}
.am-badge.bio{background:rgba(10,112,67,.12);color:var(--ui-ok-solid)}
.am-badge.amber{background:rgba(217,119,6,.12);color:var(--ui-warn-solid)}
.am-badge.red{background:rgba(220,38,38,.12);color:var(--ui-danger-solid)}
.am-badge.gray{background:rgba(118,118,118, .12);color:var(--ui-ink-500)}
.am-badge.cyan{background:rgba(12,154,184,.12);color:var(--pl-cyan)}
.am-btn{display:inline-flex;align-items:center;gap:4px;padding:8px 14px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--txt);font-size:13px;font-weight:500;cursor:pointer;transition:.18s;white-space:nowrap}
.am-btn:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-1px)}
.am-btn.bio{background:rgba(10,112,67,.08);border-color:rgba(10,112,67,.3);color:var(--ui-ok-solid)}
.am-btn.bio:hover{background:rgba(10,112,67,.15)}
.am-btn.red{background:rgba(220,38,38,.08);border-color:rgba(220,38,38,.3);color:var(--ui-danger-solid)}
.am-btn.red:hover{background:rgba(220,38,38,.15)}
.am-btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}
.am-btn.primary:hover{background:var(--brand-dark,var(--ui-brand-900));color:#fff}
.am-btn-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.am-btn-row:last-child{margin-bottom:0}
.am-input{flex:1;min-width:150px;background:var(--card);border:1px solid var(--line);color:var(--txt);border-radius:8px;padding:8px 12px;font-size:13px;outline:none;transition:.18s}
.am-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(86,86,86, .1)}
.am-textarea{width:100%;min-height:90px;background:var(--card);border:1px solid var(--line);color:var(--txt);border-radius:10px;padding:10px;font-size:13px;font-family:monospace;outline:none;transition:.18s;box-sizing:border-box}
.am-textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(86,86,86, .1)}
.am-checkbox{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2);cursor:pointer}
.am-checkbox input{vertical-align:middle}
.am-ledger-body{padding:16px}
.am-ledger-badges{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.am-ledger-info{display:flex;flex-direction:column;gap:10px}
.am-ledger-row{display:flex;align-items:center;gap:10px}
.am-ledger-label{font-size:12px;color:var(--txt-3);min-width:70px;flex:none}
.am-ledger-path{font-family:monospace;font-size:12px;color:var(--txt);background:rgba(86,86,86, .05);padding:4px 10px;border-radius:6px;word-break:break-all}
.am-text-dim{color:var(--txt-3);font-size:12px}
.am-text-dim-sm{color:var(--txt-3);font-size:12px}
.am-empty{text-align:center;padding:30px;color:var(--txt-3);font-size:13px}
.am-diag-box{margin-top:12px}
.am-tools-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}
@media (max-width:1280px){
  .am-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .am-two-col{grid-template-columns:1fr}
  .am-tools-grid{grid-template-columns:1fr}
  .am-hero-right{gap:14px}
  .am-hero-user .am-hur-label,.am-hero-clock .am-hc-date{display:none}
  .am-hc-time{font-size:18px}
  .am-perm-cell{min-width:0}
}
@media(max-width:760px){
  .am-hero{flex-direction:column;align-items:flex-start;gap:14px;padding:20px}
  .am-hero-right{width:100%;justify-content:space-between}
  .am-hero-title{font-size:20px}
  .am-tab{padding:10px 14px;font-size:13px}
}

/* 账号与权限管理（2026-08-22 第一期） */
.am-perm-hint{font-size:12px;color:var(--txt-3);line-height:1.7;background:rgba(86,86,86, .04);border:1px dashed rgba(86,86,86, .18);border-radius:10px;padding:8px 12px}
/* 2026-08-31：19 个模块改成分组竖排（原先 19 个平铺在一个单元格里过于拥挤） */
.am-perm-cell{display:flex;flex-direction:column;gap:6px;min-width:520px}
.am-perm-group{display:flex;flex-wrap:wrap;align-items:center;gap:2px 4px}
.am-perm-group-hd{flex:none;min-width:62px;font-size:12px;font-weight:600;color:var(--txt-3);letter-spacing:.3px}
/* 前端本地聚合的卡片：加虚线底标识，配 title 说明「仅控制显隐」 */
.am-perm-sw.is-fe{border-style:dashed;border-color:rgba(86,86,86, .22)}
.am-perm-sw.is-fe i::after{content:'显隐';margin-left:4px;font-size:12px;color:var(--txt-3);vertical-align:1px}
.am-perm-sw{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:8px;background:rgba(68,68,68, .02);border:1px solid transparent;margin:0;cursor:pointer;white-space:nowrap;user-select:none;transition:background .15s,border-color .15s}
.am-perm-sw:hover{background:rgba(86,86,86, .05);border-color:rgba(86,86,86, .12)}
.am-perm-sw input{display:none}
.am-perm-sw .am-sw{width:30px;height:17px;border-radius:999px;background:var(--line);position:relative;transition:background .18s;flex:none}
.am-perm-sw .am-sw::after{content:'';position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--ui-bg-card);box-shadow:0 1px 2px rgba(0,0,0,.25);transition:left .18s}
.am-perm-sw input:checked + .am-sw{background:var(--brand)}
.am-perm-sw input:checked + .am-sw::after{left:15px}
.am-perm-sw input:disabled + .am-sw{opacity:.45}
.am-perm-sw i{font-style:normal;font-size:12px;color:var(--txt-2)}
.am-perm-sw input:disabled ~ i{color:var(--txt-3)}
.am-acc-note{font-size:12px;color:var(--txt-3);margin-top:2px}
/* 批量授权工具条（2026-08-22） */
.am-bulk-bar{display:flex;align-items:center;gap:8px;margin-left:auto;flex-wrap:wrap}
.am-bulk-label{font-size:12px;color:var(--txt-3);font-weight:600}
.am-bulk-sel{width:118px;padding:6px 8px;font-size:12px}
.am-chip{display:inline-block;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.5}
.am-chip-ok{background:rgba(10,112,67,.12);color:var(--ui-ok-solid);border:1px solid rgba(10,112,67,.30)}
.am-col-sel{width:34px;text-align:center!important}
.am-confirm-sub{display:block;margin-top:6px;font-size:12px;color:var(--txt-3);word-break:break-all;line-height:1.7}

/* ============ 发货管理 Redesign ============ */
.sp-page{display:flex;flex-direction:column;gap:16px;margin-top:12px}
.sp-hero{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-radius:12px;background:linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-700) 50%,var(--ui-brand-700) 100%);color:#fff;box-shadow:0 12px 34px -18px rgba(68,68,68, .45);position:relative;overflow:hidden}
.sp-hero::before{content:'';position:absolute;top:-50px;right:-30px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.06)}
.sp-hero::after{content:'';position:absolute;bottom:-70px;right:100px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.04)}
.sp-hero-left{z-index:1}
.sp-hero-title{font-size:24px;font-weight:800;letter-spacing:1px}
.sp-hero-sub{font-size:12px;opacity:.7;margin-top:6px;letter-spacing:2px}
.sp-hero-right{display:flex;align-items:center;gap:24px;z-index:1}
.sp-hero-stat{display:flex;flex-direction:column;align-items:center}
.sp-hs-label{font-size:12px;opacity:.7}
.sp-hs-val{font-size:28px;font-weight:800}
.sp-hs-sub{font-size:12px;opacity:.55;margin-top:2px;line-height:1.1}
.sp-hs-val.good{color:var(--ui-ink-300)}
.sp-hs-val.warn{color:var(--ui-warn-solid)}
.sp-hero-divider{width:1px;height:40px;background:rgba(255,255,255,.2)}
.sp-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
/* ── 基类：周报统计的分类卡选择器（shipWeeklyFilter 那批卡）复用这整套，禁止删改 ──
   它们依赖这里的 `color:#fff` 把文字压在各自的彩色渐变上，也依赖下面
   body/label/val/sub 四条规则确定字号与弹性宽度。此前"规整化"重写时我一度把这
   四条删掉，会让周报的卡文字掉回默认字号并压到图标上 —— 已补回并在此标注。 */
.sp-kpi-card{position:relative;border-radius:14px;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 8px 24px -12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.sp-kpi-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px -12px rgba(0,0,0,.4)}
.sp-kpi-card::before{content:'';position:absolute;top:-30px;right:-20px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.08)}
.sp-kpi-body{z-index:1;min-width:0;flex:1 1 auto}
.sp-kpi-label{font-size:13px;opacity:.85}
.sp-kpi-val{font-size:40px;font-weight:800;line-height:1.1;margin:4px 0}
.sp-kpi-sub{font-size:12px;opacity:.7}
.sp-kpi-icon{font-size:32px;font-weight:800;opacity:.5;z-index:1}
.sp-kpi-bar{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
/* ★ 2026-09-25 回退：这里曾有一套"中性统计条"(.sp-stat-strip)，只用在发货出库页，
   而全系统其它视图用的是上面的 .sp-kpi-card 彩色渐变卡 —— 一个系统两套 KPI 样式
   不可接受，故已整段移除，本页恢复为与全系统一致的 .sp-kpi-card。
   教训：**新视觉要么全站统一，要么不要动**，不能只改一个页面。 */
.sp-charts-row{display:grid;grid-template-columns:1.2fr 1fr 1.4fr;gap:14px}
.sp-chart-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;backdrop-filter:blur(8px);box-shadow:0 1px 2px rgba(68,68,68, .04)}
.sp-chart-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:8px}
.sp-chart-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.sp-chart-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.sp-chart-body{width:100%}
.sp-filter-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.sp-tabs{display:flex;gap:8px}
.sp-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:20px;border:1px solid var(--line);background:var(--card);font-size:13px;color:var(--txt-2);cursor:pointer;transition:.18s}
.sp-tab:hover{border-color:var(--line-strong)}
.sp-tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.sp-tab-count{opacity:.6;font-weight:600}
.sp-search-row{display:flex;align-items:center;gap:10px;flex:1;min-width:300px}
.sp-search{flex:1;background:var(--card);border:1px solid var(--line);color:var(--txt);border-radius:10px;padding:10px 14px;font-size:13px;outline:none;transition:.18s}
.sp-search:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(86,86,86, .1)}
.sp-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;backdrop-filter:blur(8px);box-shadow:var(--shadow);overflow:hidden}
.sp-tbl-wrap{overflow-x:auto;max-height:600px;overflow-y:auto}
.sp-table{width:100%;border-collapse:collapse;font-size:13px}
.sp-table thead{position:sticky;top:0;z-index:1}
.sp-table th{padding:10px 12px;text-align:left;font-weight:600;color:var(--txt-2);background:var(--card);border-bottom:1px solid var(--line);white-space:nowrap}
.sp-table td{padding:10px 12px;border-bottom:1px solid rgba(68,68,68, .04);color:var(--txt);vertical-align:top}
.sp-table tbody tr:hover{background:rgba(86,86,86, .03)}
.sp-table tbody tr:last-child td{border-bottom:none}
.sp-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}
.sp-badge.bio{background:rgba(10,112,67,.12);color:var(--ui-ok-solid)}
.sp-badge.amber{background:rgba(217,119,6,.12);color:var(--ui-warn-solid)}
.sp-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--txt);font-size:12px;font-weight:500;cursor:pointer;transition:.18s;white-space:nowrap}
.sp-btn:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-1px)}
.sp-btn.bio{background:rgba(10,112,67,.08);border-color:rgba(10,112,67,.3);color:var(--ui-ok-solid)}
.sp-btn.bio:hover{background:rgba(10,112,67,.15)}
.sp-btn.red{background:rgba(220,38,38,.08);border-color:rgba(220,38,38,.3);color:var(--ui-danger-solid)}
.sp-btn.red:hover{background:rgba(220,38,38,.15)}
.sp-btn.ghost{background:transparent;border-color:var(--line);color:var(--txt-3)}
.sp-btn.ghost:hover{color:var(--red)}
.sp-btn.primary{background:var(--brand);color:#fff;border-color:var(--brand);font-size:13px;padding:10px 16px}
.sp-btn.primary:hover{background:var(--brand-dark,var(--ui-brand-900));color:#fff}
.sp-note-sub{color:var(--txt-3);font-size:12px;margin-top:2px}
.sp-note-reject{color:var(--red);font-size:12px;margin-top:2px}
.sp-empty{text-align:center;padding:30px;color:var(--txt-3);font-size:13px}
@media (max-width:1280px){
  .sp-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .sp-charts-row{grid-template-columns:1fr}
  .sp-hero-right{gap:12px}
  .sp-hs-val{font-size:20px}
  .sp-filter-bar{flex-direction:column;align-items:stretch}
  .sp-search-row{min-width:0}
}


/* ============ 订单中心 Redesign ============ */
.oc-hero{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;border-radius:16px;background:linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-700) 50%,var(--ui-brand-700) 100%);color:#fff;box-shadow:0 12px 34px -18px rgba(68,68,68, .45);position:relative;overflow:hidden}
.oc-hero::before{content:'';position:absolute;top:-50px;right:-30px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.06)}
.oc-hero::after{content:'';position:absolute;bottom:-70px;right:100px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.04)}
.oc-hero-left{z-index:1}
.oc-hero-title{font-size:24px;font-weight:800;letter-spacing:1px}
.oc-hero-sub{font-size:12px;opacity:.7;margin-top:6px;letter-spacing:2px}
.oc-hero-right{display:flex;align-items:center;gap:24px;z-index:1}
.oc-hero-stat{display:flex;flex-direction:column;align-items:center}
.oc-hs-label{font-size:12px;opacity:.7}
.oc-hs-val{font-size:28px;font-weight:800}
.oc-hs-val.bad{color:var(--ui-danger-line)}
.oc-hero-divider{width:1px;height:40px;background:rgba(255,255,255,.2)}
.oc-kpi-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:14px}
.oc-kpi-card{position:relative;border-radius:12px;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 6px 20px -10px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.oc-kpi-card:hover{transform:translateY(-2px);box-shadow:0 10px 24px -10px rgba(0,0,0,.4)}
.oc-kpi-card::before{content:'';position:absolute;top:-25px;right:-15px;width:80px;height:80px;border-radius:50%;background:rgba(255,255,255,.08)}
.oc-kpi-body{z-index:1}
.oc-kpi-label{font-size:12px;opacity:.85}
.oc-kpi-val{font-size:28px;font-weight:800;line-height:1.1;margin:2px 0}
.oc-kpi-sub{font-size:12px;opacity:.65}
.oc-kpi-ring{position:relative;width:52px;height:52px;z-index:1;flex:none}
.oc-kpi-ring svg{width:52px;height:52px}
.oc-kpi-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:#fff}
.oc-kpi-bar{position:absolute;bottom:0;left:0;height:2px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
.oc-tabs-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px}
.oc-tabs{flex:none}
.oc-search{flex:1;min-width:200px}
.oc-tbl-wrap{margin-top:14px;border-radius:14px;
  /* ★ 2026-08-25：hidden 改为横向自适应滚动——修复 1366/1440 笔记本上订单表右端列(预计完成等)被裁掉且无法查看 */
  overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
.oc-tbl-wrap table{border-radius:14px}
@media (max-width:1280px){
  .oc-kpi-grid{grid-template-columns:repeat(3,1fr)}
  .oc-hero-right{gap:12px}
  .oc-hs-val{font-size:20px}
  .oc-tabs-row{flex-direction:column;align-items:stretch}
  .oc-search{min-width:0}
}


/* ============ 交期分布 Redesign ============ */
.td-page{display:flex;flex-direction:column;gap:16px;margin-top:12px}
.td-hero{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;border-radius:16px;background:linear-gradient(135deg,var(--ui-brand-900) 0%,var(--ui-brand-700) 50%,var(--ui-brand-700) 100%);color:#fff;box-shadow:0 12px 34px -18px rgba(68,68,68, .45);position:relative;overflow:hidden}
.td-hero::before{content:'';position:absolute;top:-50px;right:-30px;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.06)}
.td-hero::after{content:'';position:absolute;bottom:-70px;right:100px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.04)}
.td-hero-left{z-index:1}
.td-hero-title{font-size:24px;font-weight:800;letter-spacing:1px}
.td-hero-sub{font-size:12px;opacity:.7;margin-top:6px;letter-spacing:2px}
.td-hero-right{display:flex;align-items:center;gap:24px;z-index:1}
.td-hero-stat{display:flex;flex-direction:column;align-items:center}
.td-hs-label{font-size:12px;opacity:.7}
.td-hs-val{font-size:28px;font-weight:800}
.td-hs-val.good{color:var(--ui-ink-300)}
.td-hs-val.warn{color:var(--ui-warn-solid)}
.td-hs-val.bad{color:var(--ui-danger-line)}
.td-hero-divider{width:1px;height:40px;background:rgba(255,255,255,.2)}
.td-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.td-kpi-card{position:relative;border-radius:14px;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;color:#fff;overflow:hidden;box-shadow:0 8px 24px -12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.td-kpi-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px -12px rgba(0,0,0,.4)}
.td-kpi-card::before{content:'';position:absolute;top:-30px;right:-20px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.08)}
.td-kpi-body{z-index:1}
.td-kpi-label{font-size:13px;opacity:.85}
.td-kpi-val{font-size:40px;font-weight:800;line-height:1.1;margin:4px 0}
.td-kpi-sub{font-size:12px;opacity:.7}
.td-kpi-ring{position:relative;width:56px;height:56px;z-index:1;flex:none}
.td-kpi-ring svg{width:56px;height:56px}
.td-kpi-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:#fff}
.td-kpi-bar{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.6);border-radius:0 4px 0 0;transition:width .8s ease}
.td-charts-row{display:grid;grid-template-columns:1fr 1fr 1.2fr;gap:14px}
.td-chart-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.td-chart-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:8px}
.td-chart-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.td-chart-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.td-chart-body{width:100%}
.td-chart-legend{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}
.td-leg-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2)}
.td-leg-dot{width:10px;height:10px;border-radius:4px;flex:none}
.td-detail-section{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;backdrop-filter:blur(8px);box-shadow:var(--shadow)}
.td-detail-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--txt);margin-bottom:12px}
.td-detail-hd .bar{width:4px;height:16px;background:var(--grad);border-radius:4px}
.td-detail-hd .en{font-size:12px;color:var(--txt-3);font-weight:400;margin-left:auto;text-transform:uppercase}
.td-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.td-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid var(--line);background:var(--card);font-size:13px;color:var(--txt-2);cursor:pointer;transition:.18s}
.td-tab:hover{border-color:var(--line-strong)}
.td-tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.td-tab-dot{width:8px;height:8px;border-radius:50%;flex:none}
.td-tab-count{font-weight:700}
.td-order-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;max-height:480px;overflow-y:auto;padding-right:4px}
.td-ocard{display:flex;align-items:center;gap:12px;background:linear-gradient(180deg,var(--ui-bg-card),var(--ui-bg-soft));border:1px solid var(--line);border-radius:12px;padding:12px;transition:.18s}
.td-ocard:hover{border-color:var(--line-strong);transform:translateY(-2px);box-shadow:0 8px 20px -10px rgba(115,115,115, .35)}
  .td-ocard.over{position:relative;border-color:rgba(220,38,38,.4)}
  .td-ocard.over::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    box-shadow:0 0 14px -2px rgba(220,38,38,.45);opacity:0;will-change:opacity;animation:tdovp 1.6s ease-in-out infinite}
  @keyframes tdovp{0%,100%{opacity:0}50%{opacity:1}}
.td-ocard-ring{position:relative;width:64px;height:64px;flex:none}
.td-ocard-ring svg{width:64px;height:64px}
.td-ocard-pct{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:700;color:var(--txt)}
.td-ocard-info{flex:1;min-width:0}
.td-ocard-id{font-size:14px;font-weight:700;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.td-ocard-cust{font-size:12px;color:var(--txt-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.td-ocard-meta{display:flex;align-items:center;gap:8px;margin-top:6px}
.td-ocard-st{padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}
.td-ocard-date{font-size:12px;color:var(--txt-3)}
@media (max-width:1280px){
  .td-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .td-charts-row{grid-template-columns:1fr}
  .td-hero-right{gap:12px}
  .td-hs-val{font-size:20px}
}


/* ============ 综合达成率 Redesign ============ */




/* ------- 综合达成率 · 细节视觉优化 ------- */
.ach-panel {
  gap: 16px;
  margin-top: 12px;
}

.ach-header {
  padding: 14px 22px 14px;
  border-radius: 16px;
}
.ach-title {
  font-size: 20px;
  font-weight: 800;
  letter-spacing: .8px;
}
.ach-subtitle {
  font-size:11px;
  letter-spacing: 1.2px;
  margin-top: 2px;
}
.ahs-val {
  font-size: 16px;
  font-weight: 800;
}

/* Sharper section header with underline */
.sec-hd {
  margin-bottom: 10px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(68,68,68, .07);
}
.sec-hd {
  font-size:13px;
  font-weight: 700;
}
.sec-hd .en {
  font-size: 11px;
  opacity: .75;
  letter-spacing: 1px;
}

/* ===== Row1 adjustments ===== */
.ach-row1 {
  grid-template-columns: 440px 1fr;
  gap: 16px;
}
.ach-hero-gauges {
  padding: 16px 10px 14px;
  border-radius: 16px;
  gap: 6px;
}
.ach-station-od {
  padding: 16px 18px 12px;
  border-radius: 16px;
}
.ach-station-chart {
  height:310px;
}
.rd-ring-val { font-size: 28px; }

/* ===== Row2 adjustments ===== */
.ach-row2 {
  grid-template-columns: 1.15fr 1fr;
  gap: 16px;
}
.ach-breakdown-wrap,
.ach-rose-wrap {
  padding: 16px 18px;
  border-radius: 16px;
}
.bd-grid { gap: 10px; }
.bd-card {
  padding: 12px;
  border-radius: 12px;
  gap: 8px;
}
.bd-icon {
  width: 36px; height: 36px;
  border-radius: 10px;
  font-size: 16px;
}
.bd-val {
  font-size: 20px;
  line-height: 1.05;
}
.bd-hint {
  display: none; /* remove vertical waste */
}
.ach-rose-chart {
  height:320px;
}

/* ===== Row3 adjustments ===== */
.ach-row3 {
  grid-template-columns: 1fr 1.15fr;
  gap: 16px;
}
.ach-customer-wrap,
.ach-trend-wrap {
  padding: 16px 18px;
  border-radius: 16px;
}
.ach-customer-chart { height: 284px; }
.ach-trend-chart { height:300px; }

/* ===== Add subtle zebra background for panel background depth ===== */
.ach-panel {
  padding: 2px;
}

/* Smooth card entrance animation (after paint) */
.ach-header,
.ach-hero-gauges,
.ach-station-od,
.ach-breakdown-wrap,
.ach-rose-wrap,
.ach-customer-wrap,
.ach-trend-wrap {
  animation: achCardIn .5s cubic-bezier(.22,1,.36,1) backwards;
}
.ach-header { animation-delay: 0.00s; }
.ach-hero-gauges { animation-delay: 0.05s; }
.ach-station-od { animation-delay: 0.10s; }
.ach-breakdown-wrap { animation-delay: 0.15s; }
.ach-rose-wrap { animation-delay: 0.20s; }
.ach-customer-wrap { animation-delay: 0.25s; }
.ach-trend-wrap { animation-delay: 0.30s; }

@keyframes achCardIn {
  0%   { opacity: 0; transform: translateY(6px); }
  100% { opacity: 1; transform: translateY(0); }
}


/* ============ 综合达成率 v2 - Command Center ============ */
.ach-panel {
  display:flex;
  flex-direction:column;
  gap:18px;
  margin-top:16px;
}

/* --- Header Band --- */
.ach-header {
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:18px 24px;
  border-radius:16px;
  background:
    radial-gradient(circle at 0% 0%, rgba(134,134,134, .12), transparent 50%),
    radial-gradient(circle at 100% 0%, rgba(10,112,67,.10), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card) 0%, var(--ui-brand-050) 100%);
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .06);
}

.ach-title {
  font-size:20px;
  font-weight:800;
  background: linear-gradient(135deg, var(--ui-brand-900) 0%, var(--ui-ok-solid) 100%);
  -webkit-background-clip:text;
  background-clip:text;
  color:transparent;
  letter-spacing:1px;
}

.ach-subtitle {
  font-size:12px;
  color:var(--txt-3);
  letter-spacing:1.5px;
  margin-top:4px;
  font-weight:500;
}

.ach-header-stats {
  display:flex;
  align-items:center;
  gap:14px;
}

.ahs {
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:2px;
}

.ahs-label {
  font-size:12px;
  color:var(--txt-3);
  letter-spacing:0.5px;
  font-weight:500;
}

.ahs-val {
  font-size:18px;
  font-weight:800;
  color:var(--txt);
  font-variant-numeric:tabular-nums;
}

.ahs-dot {
  width:1px;
  height:28px;
  background: linear-gradient(180deg, transparent, rgba(68,68,68, .2), transparent);
}

.ach-grade {
  padding:4px 10px;
  border-radius:10px;
  font-size:12px;
  font-weight:700;
}
.ach-grade.grade-excellent { background: rgba(10,112,67,.14); color:var(--ui-ok-solid); }
.ach-grade.grade-good      { background: rgba(217,119,6,.14); color:var(--ui-warn-solid); }
.ach-grade.grade-warn      { background: rgba(217,119,6,.14); color:var(--ui-warn-solid); }
.ach-grade.grade-danger    { background: rgba(220,38,38,.14); color:var(--ui-danger-solid); }

/* --- Shared Section Header --- */
.sec-hd {
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:12px;
}
.sec-hd .bar {
  width:4px;
  height:16px;
  background: linear-gradient(180deg, var(--ui-brand-700), var(--ui-brand-900));
  border-radius:4px;
}
.sec-hd {
  font-size:14px;
  font-weight:700;
  color:var(--txt);
}
.sec-hd .en {
  margin-left:auto;
  font-size:12px;
  color:var(--txt-3);
  font-weight:500;
  letter-spacing:0.8px;
}

/* --- Row 1: Radials + Station OD --- */
.ach-row1 {
  display:grid;
  grid-template-columns: 480px 1fr;
  gap:18px;
}

@media (max-width:1280px) {
  .ach-row1 { grid-template-columns: 1fr; }
}

.ach-hero-gauges {
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  gap:4px;
  padding:14px 6px 12px;
  border-radius:16px;
  background:
    radial-gradient(circle at 50% -20%, rgba(134,134,134, .08), transparent 60%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
  overflow: hidden;
}

.rd-ring-item {
  position:relative;
  display:flex;
  align-items:center;
  justify-content:center;
  min-height: 150px;
}

.rd-ring-center {
  position:absolute;
  inset:0;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  padding:0 4px;
  pointer-events:none;
}

.rd-ring-val {
  font-size:24px;
  font-weight:800;
  font-variant-numeric:tabular-nums;
  line-height:1;
}

.rd-ring-sub {
  font-size:12px;
  font-weight:700;
  color:var(--sk-ink-3);
  margin-top:4px;
  line-height:1;
}

.rd-ring-label {
  font-size:12px;
  color:var(--txt-3);
  margin-top:6px;
  font-weight:600;
  max-width: 96%;
  line-height: 1.25;
}

.ach-station-od {
  padding:18px 18px 14px;
  border-radius:16px;
  background:
    radial-gradient(circle at 100% 0%, rgba(10,112,67,.06), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
}

.ach-station-chart {
  width:100%;
  height:320px;
}

/* --- Row 2: Breakdown cards + Rose chart --- */
.ach-row2 {
  display:grid;
  grid-template-columns: 1.1fr 1fr;
  gap:18px;
}

@media (max-width:1280px) {
  .ach-row2 { grid-template-columns: 1fr; }
}

.ach-breakdown-wrap {
  padding:18px 20px;
  border-radius:16px;
  background:
    radial-gradient(circle at 0% 100%, rgba(12,154,184,.06), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
}

.bd-grid {
  display:grid;
  grid-template-columns: repeat(2, 1fr);
  gap:12px;
}

@media (max-width: 640px) {
  .bd-grid { grid-template-columns: 1fr; }
}

.bd-card {
  padding:14px;
  border-radius:14px;
  background:var(--ui-bg-card);
  border:1px solid rgba(68,68,68, .07);
  transition: all .25s cubic-bezier(.4,0,.2,1);
  display:flex;
  flex-direction:column;
  gap:10px;
}

.bd-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 22px rgba(68,68,68, .08);
}

.bd-head {
  display:flex;
  align-items:center;
  gap:12px;
}

.bd-icon {
  width:40px; height:40px;
  border-radius:12px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:18px;
  flex-shrink:0;
}

.bd-meta {
  display:flex;
  flex-direction:column;
  gap:2px;
  flex:1;
  min-width:0;
}

.bd-val {
  font-size:20px;
  font-weight:800;
  font-variant-numeric:tabular-nums;
  line-height:1.1;
}

.bd-unit {
  font-size:12px;
  font-weight:500;
  color:var(--txt-3);
  margin-left:4px;
}

.bd-label {
  font-size:12px;
  color:var(--txt-2);
  font-weight:600;
}

.bd-track {
  height:6px;
  background: rgba(68,68,68, .06);
  border-radius:4px;
  overflow:hidden;
}

.bd-fill {
  height:100%;
  border-radius:4px;
  transition: width 1s cubic-bezier(.22,1,.36,1);
}

.bd-hint {
  font-size:12px;
  color:var(--txt-3);
  font-weight:500;
}

.ach-rose-wrap {
  padding:18px 16px;
  border-radius:16px;
  background:
    radial-gradient(circle at 100% 100%, rgba(115,115,115, .06), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
}

.ach-rose-chart {
  width:100%;
  height:320px;
}

/* --- Row 3: Customer Rank + Trend --- */
.ach-row3 {
  display:grid;
  grid-template-columns: 1fr 1.1fr;
  gap:18px;
}

@media (max-width:1280px) {
  .ach-row3 { grid-template-columns: 1fr; }
}

.ach-customer-wrap {
  padding:18px 16px;
  border-radius:16px;
  background:
    radial-gradient(circle at 0% 0%, rgba(134,134,134, .07), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
}

.ach-customer-chart {
  width:100%;
  height:300px;
}

.ach-trend-wrap {
  padding:18px 16px;
  border-radius:16px;
  background:
    radial-gradient(circle at 100% 0%, rgba(217,119,6,.06), transparent 50%),
    linear-gradient(135deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .10);
  box-shadow: 0 4px 20px rgba(68,68,68, .05);
}

.ach-trend-chart {
  width:100%;
  height:300px;
}


.achievement-panel {
  display:flex;
  flex-direction:column;
  gap:20px;
  margin-top:16px;
}

.achievement-hero {
  display:grid;
  grid-template-columns: 340px 1fr;
  gap:20px;
  align-items:stretch;
}

@media (max-width: 960px) {
  .achievement-hero { grid-template-columns: 1fr; }
}

/* Gauge area */
.ach-gauge-wrap {
  position:relative;
  background: linear-gradient(145deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .1);
  border-radius:20px;
  padding:20px;
  box-shadow: 0 4px 20px rgba(68,68,68, .06);
}

.ach-gauge {
  width:100%;
  height:280px;
}

.ach-gauge-center {
  position:absolute;
  inset:0;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  pointer-events:none;
}

.ach-gauge-val {
  font-size:40px;
  font-weight:800;
  background: linear-gradient(135deg, var(--ui-brand-700), var(--ui-brand-900));
  -webkit-background-clip:text;
  background-clip:text;
  color:transparent;
  line-height:1;
  font-variant-numeric:tabular-nums;
}

.ach-gauge-suf {
  font-size:24px;
  margin-left:2px;
  font-weight:700;
}

.ach-gauge-label {
  font-size:14px;
  font-weight:600;
  color:var(--txt-2);
  margin-top:8px;
}

.ach-gauge-sub {
  font-size:12px;
  color:var(--txt-3);
  margin-top:2px;
}

/* Side sub-cards */
.achievement-side {
  display:flex;
  align-items:stretch;
}

.ach-sub-grid {
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  gap:12px;
  width:100%;
}

@media (max-width: 640px) {
  .ach-sub-grid { grid-template-columns: repeat(2, 1fr); }
}

.ach-subcard {
  position:relative;
  border:1px solid rgba(68,68,68, .08);
  border-radius:14px;
  padding:14px 14px 12px;
  transition: all .25s cubic-bezier(.4,0,.2,1);
  overflow:hidden;
}

.ach-subcard::before {
  content:'';
  position:absolute;
  top:0;left:0;right:0;
  height:3px;
  background: linear-gradient(90deg, transparent, var(--accent, var(--ui-brand-500)), transparent);
  opacity:.6;
}

.ach-subcard:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(68,68,68, .08);
}

.ach-sub-icon {
  width:32px;
  height:32px;
  border-radius:10px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:16px;
  margin-bottom:8px;
}

.ach-sub-body {
  display:flex;
  flex-direction:column;
  gap:2px;
}

.ach-sub-val {
  font-size:24px;
  font-weight:800;
  font-variant-numeric:tabular-nums;
  line-height:1.1;
}

.ach-sub-unit {
  font-size:12px;
  font-weight:500;
  margin-left:4px;
  color:var(--txt-3);
}

.ach-sub-label {
  font-size:12px;
  color:var(--txt-3);
  font-weight:500;
}

/* Distribution bars */
.achievement-distribution {
  background: linear-gradient(145deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .1);
  border-radius:16px;
  padding:18px 20px;
  box-shadow: 0 2px 12px rgba(68,68,68, .04);
}

.ach-dist-header {
  display:flex;
  align-items:center;
  gap:10px;
  font-size:14px;
  font-weight:700;
  color:var(--txt);
  margin-bottom:14px;
}

.ach-dist-header .bar {
  display:inline-block;
  width:4px;
  height:16px;
  background: linear-gradient(180deg, var(--ui-brand-700), var(--ui-brand-900));
  border-radius:4px;
}

.ach-dist-header .en {
  font-size:12px;
  color:var(--txt-3);
  font-weight:500;
  letter-spacing:.5px;
  margin-left:auto;
}

.ach-dist-bars {
  display:flex;
  flex-direction:column;
  gap:10px;
}

.ach-bar-row {
  display:grid;
  grid-template-columns: 90px 1fr 90px;
  align-items:center;
  gap:12px;
  font-size:12px;
}

.ach-bar-label {
  display:flex;
  align-items:center;
  gap:6px;
  color:var(--txt-2);
  font-weight:500;
}

.ach-bar-label i {
  width:8px;
  height:8px;
  border-radius:4px;
  display:inline-block;
}

.ach-bar-track {
  height:8px;
  background: rgba(68,68,68, .06);
  border-radius:4px;
  overflow:hidden;
  position:relative;
}

.ach-bar-fill {
  height:100%;
  border-radius:4px;
  transition: width .8s cubic-bezier(.22,1,.36,1);
  box-shadow: 0 0 8px currentColor;
  opacity:.9;
}

.ach-bar-val {
  text-align:right;
  color:var(--txt-3);
  font-variant-numeric:tabular-nums;
  font-weight:500;
}

/* Trend chart */
.achievement-trend {
  background: linear-gradient(145deg, var(--ui-bg-card), var(--ui-bg-soft));
  border: 1px solid rgba(68,68,68, .1);
  border-radius:16px;
  padding:18px 20px;
  box-shadow: 0 2px 12px rgba(68,68,68, .04);
}

.ach-trend-header {
  display:flex;
  align-items:center;
  gap:10px;
  font-size:14px;
  font-weight:700;
  color:var(--txt);
  margin-bottom:10px;
}

.ach-trend-header .bar {
  display:inline-block;
  width:4px;
  height:16px;
  background: linear-gradient(180deg, var(--ui-brand-700), var(--ui-brand-900));
  border-radius:4px;
}

.ach-trend-header .en {
  font-size:12px;
  color:var(--txt-3);
  font-weight:500;
  letter-spacing:.5px;
  margin-left:auto;
}

.ach-trend-chart {
  width:100%;
  height:300px;
}


.gauge{display:flex;align-items:center;gap:18px}

  .gwrap{position:relative;width:160px;height:160px;flex:none}

  .gwrap .gv{position:absolute;inset:0;display:grid;place-items:center;text-align:center}

  .gwrap .gv b{font-size:32px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}

  .gwrap .gv span{font-size:12px;color:var(--txt-3)}

  .glegend{display:flex;flex-direction:column;gap:8px;font-size:12px;color:var(--txt-2)}

  .glegend i{width:9px;height:9px;border-radius:4px;display:inline-block;margin-right:8px}

  /* ---- 实时动态 (redesign) ----
     ★ 2026-09-26 第三十八轮：筛选片从「一排各自带边框的胶囊」改成**分段控件**：
     直接复用已在用的 .sp-seg / .sp-seg-item（发货出库「子视图切换」、数据分析同一套），
     .live-tab 只留作 JS 选择钩子与计数徽标的挂点。这一条沿用至今。
     ★ 第三十九轮：事件主体由「3 列卡片网格」改成「单列行列表」（见下方 .live-rows），
     第三十八轮的 .live-list/.live-card/.live-r1~.live-r5 规则已随之整块删除，不留死规则。 */
  .live-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
  .live-seg{flex-wrap:wrap;max-width:100%}
  .live-seg .live-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 6px;
    border-radius:999px;background:rgba(68,68,68, .07);color:inherit;font-size:11px;font-weight:800;font-variant-numeric:tabular-nums}
  .live-seg .sp-seg-item.active .live-count{background:rgba(68,68,68, .10);color:var(--brand)}
  /* ★ 2026-09-26 第三十九轮：事件流由「3 列卡片网格」改成**单列行列表**。
     为什么：事件流是用来扫读的 —— 卡片网格在 1608px 内容宽下一行只放 3 张（每张 525px）、
     每张的「徽标+订单号+时间」只占左半边、右侧整片留白；1920×1080 首屏实测只看得到 6 条。
     行式列表把同样的屏高换成 3~5 倍条目：一行 47px、列宽固定 → 订单号/客户/工序交期/条数/时间成列对齐，
     一屏十几条，30 条一眼扫完，且没有卡片边框，视觉上不再「空」。
     配色：整行只有两处着色 —— 行首 4px 状态色条 + 状态 chip（同一个语义桶）；
     「逾期」交期文字红、「合作豁免」交期文字灰蓝；其余文字一律中性色。 */
  .live-rows{border:1px solid rgba(28,28,28, .075);border-radius:12px;background:var(--ui-bg-card);overflow:hidden;
    box-shadow:0 1px 2px rgba(28,28,28, .03)}
  /* 分组细分隔行：今天 / 昨天 / 更早（小字灰，把 30 条分段，不糊成一片） */
  .live-group{display:flex;align-items:center;gap:8px;height:26px;box-sizing:border-box;padding:0 16px;
    background:var(--ui-bg-soft);border-bottom:1px solid var(--ui-line-100);font-size:11px;font-weight:800;letter-spacing:.06em;color:var(--ui-ink-400)}
  .live-group b{font-weight:800;color:var(--sk-ink-2);font-variant-numeric:tabular-nums}
  .live-group i{font-style:normal;font-weight:700;color:var(--ui-ink-300)}
  /* 事件行：单行、47px、整行可点、悬停浅底（不再是立体的卡片） */
  .live-row{position:relative;display:flex;align-items:center;gap:10px;height:47px;box-sizing:border-box;
    padding:0 14px 0 16px;border-bottom:1px solid var(--ui-bg-page);background:var(--ui-bg-card);cursor:pointer;min-width:0;
    transition:background .12s ease}
  .live-rows .live-row:last-child{border-bottom:0}
  .live-row:hover{background:var(--ui-brand-050)}
  .live-row:active{background:var(--ui-brand-100)}
  /* 行首 4px 状态色条（原卡片左侧色条同尺寸、同语义） */
  .live-accent{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--live-stripe,var(--ui-brand-600))}
  /* 语义色桶（沿用工序看板已确立的那套，一字未改）：红＝逾期 / 灰蓝＝合作单逾期豁免 /
     青＝待审核·待办 / 蓝＝工序推进 / 靛蓝＝未生产·未投产。一屏实测只落到 3 种。 */
  .live-row.tone-late{--live-stripe:var(--ui-danger-solid);--live-ink:var(--ui-danger-solid);--live-soft:rgba(220,38,38,.10)}
  .live-row.tone-coop{--live-stripe:rgba(118,118,118, .85);--live-ink:var(--ui-ink-500);--live-soft:rgba(118,118,118, .12)}
  .live-row.tone-audit{--live-stripe:var(--pl-cyan-ink);--live-ink:var(--pl-cyan-ink);--live-soft:rgba(7,94,117,.10)}
  .live-row.tone-flow{--live-stripe:var(--ui-brand-600);--live-ink:var(--ui-brand-600);--live-soft:rgba(115,115,115, .10)}
  .live-row.tone-unprod{--live-stripe:var(--ui-brand-500);--live-ink:var(--ui-brand-500);--live-soft:rgba(134,134,134, .10)}
  /* ① 状态 chip：小、统一尺寸（固定 68×20，超出截断，title 给全），是全行唯一带底色的元素 */
  .live-chip{flex:0 0 68px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;
    height:20px;padding:0 6px;border-radius:6px;line-height:1;font-size:11px;font-weight:700;white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis;background:var(--live-soft,rgba(115,115,115, .10));color:var(--live-ink,var(--ui-brand-600))}
  /* ② 订单号：粗体主信息，定宽不换行（11 位单号在 --mono 下稳定成列） */
  .live-oid{flex:0 0 100px;font-size:12px;font-weight:800;color:var(--ui-ink-900);font-family:var(--mono);letter-spacing:.2px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* ③ 客户：单行截断 + title 全文。1920 下给到 240px —— 实测最长客户名
     「中国科学院杭州医学研究所-泮力菁组」只要 ~205px，行业里的长客户名基本能整名显示；
     空间不够时它先让位（flex-shrink），并保留 120px 下限。 */
  .live-cust{flex:0 1 240px;min-width:120px;font-size:12px;font-weight:600;color:var(--ui-ink-700);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* ④ 当前工序 · 交期（剩 N 天）· 合作豁免：只有「逾期」红、「合作豁免」灰蓝，其余中性。
     basis 336px 是按最长组合实测定的（「当前工序 未投产 · 交期 09/24 20:00（逾期 N 天）合作豁免」≈329px），
     定宽成列 + 不裁掉「合作豁免」旗标；overflow 只兜底，正常情况下不触发。 */
  .live-where{flex:0 1 336px;min-width:180px;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--sk-ink-2);
    white-space:nowrap;overflow:hidden}
  .live-where b{color:var(--ui-ink-700);font-weight:700;font-variant-numeric:tabular-nums}
  .live-where .live-sep{font-style:normal;color:var(--ui-line-200)}
  .live-where .live-due.is-over,.live-where .live-due.is-over b{color:var(--ui-danger-solid);font-weight:800}
  .live-where .live-due.is-coop,.live-where .live-due.is-coop b{color:var(--ui-ink-500);font-weight:800}
  .live-where.is-none{color:var(--ui-ink-300)}
  .live-where.is-none b{color:var(--ui-ink-300)}
  .live-flag{flex:none;height:18px;display:inline-flex;align-items:center;padding:0 6px;border-radius:4px;
    background:rgba(118,118,118, .12);color:var(--ui-ink-500);font-size:11px;font-weight:800;white-space:nowrap}
  /* ⑤ 本部门条数：定宽右对齐（数字成列） */
  .live-qty{flex:0 0 50px;text-align:right;font-size:12px;font-weight:800;color:var(--ui-ink-700);white-space:nowrap;
    font-variant-numeric:tabular-nums}
  .live-qty i{font-style:normal;font-size:11px;font-weight:700;color:var(--ui-ink-300);margin-left:2px}
  /* ⑥ 说明：按内容宽（不等宽），单行截断（title 给全文）。shrink 权重 20 → 空间不够时先压说明，
     不去挤「提交人 · 节点」这类定长事实列。 */
  .live-desc{flex:0 20 auto;min-width:0;font-size:12px;color:var(--sk-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* ⑦ 提交人 · 节点：紧跟说明之后（次要事实尾巴）—— 不再单开一个定宽列，
     否则说明短的那些行会在「说明」和「提交人」中间留下约 470px 的空洞（第三十九轮第一版实测照片里最显眼的问题）。
     字段不丢：可见 + title 全文。 */
  .live-sub{flex:0 1 auto;min-width:0;font-size:11px;color:var(--ui-ink-400);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .live-sub b{color:var(--ui-ink-500);font-weight:700}
  .live-sub .live-sep{font-style:normal;color:var(--ui-line-200);margin:0 4px}
  .live-sub .live-sep.live-lead{margin-left:0}
  /* 弹性留白：所有剩余空间由它吸收，落点固定在「明细 →」之前（表格右对齐区的自然留白），
     而不是落在行中间 —— 这是「不空」的关键一条。 */
  .live-gap{flex:1 1 auto;min-width:10px}
  /* ⑧ 相对时间 + 「明细 →」文字链接（右侧固定宽度，成列对齐） */
  .live-when{flex:0 0 58px;text-align:right;font-size:11px;color:var(--ui-ink-400);white-space:nowrap;
    font-variant-numeric:tabular-nums}
  .live-open{flex:0 0 50px;text-align:right;font-size:11px;font-weight:800;color:var(--brand);white-space:nowrap;cursor:pointer}
  .live-open:hover{color:var(--ui-brand-700);text-decoration:underline}
  .live-dash{color:var(--ui-ink-300);font-weight:400}
  /* 窄屏（<1280）：只让「说明」列让位，其余列（含色条/chip/订单号/客户/工序交期/条数/提交人节点/时间/明细）全部保留 */
  @media (max-width:1280px){
    .live-desc{display:none}
    .live-sub .live-lead{display:none}
    .live-cust{flex:0 1 150px}
    .live-where{flex:0 1 252px}
  }
  .live-empty { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; padding:60px 16px; color:var(--txt-3); text-align:center; }
  .live-empty svg { stroke:var(--txt-3); opacity:.5; width:50px; height:50px; }
  .live-empty div { font-size:14px; color:var(--txt-2); font-weight:600; }
  .live-empty p { font-size:12px; margin:0; max-width:320px; line-height:1.55; }

  /* ★ 2026-09-26 第三十九轮：生产动态页专有收尾（只作用于 .feed-page，不动其它页签）
     ① 「今日行动」4 块砖压成一行紧凑条（compact 形态，见 app.js ckTileHtml 的 compact 分支）：
        内边距 11/13 → 6/11，数值字号 27 → 21，两行布局（标签……查看 N 单 → / 数字+说明），
        实测砖高 97px → 66px；顶部每省 1px 都直接换成首屏多看到一条动态。
     ② 页面纵向间距收紧：卡内边距 14/16 → 11/14、卡头下边距 12 → 8、筛选条下边距 14 → 10；
        只改 .feed-page 作用域。
     ③ 新增两个色阶，把行动砖也收进本页同一套语义色：
        n＝青（待审核 / 待补报工 / 漏登记，与「合作」徽标同族）、u＝靛蓝（未生产·未投产，
        与工序看板 .badge.b-unprod 的 #7b7b7b 同一色）。其余砖沿用 tone-a 红 / tone-b 蓝 / tone-q 灰蓝。 */
  .feed-page .ov3-card{padding:12px 14px}
  .feed-page .ov3-h{margin-bottom:8px}
  .feed-page .dg-acts.is-compact{gap:8px}
  .feed-page .dg-g.is-compact{padding:6px 12px;gap:2px;border-radius:10px;min-height:66px;justify-content:center}
  .feed-page .dg-g.is-compact .dg-g-d1{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-width:0}
  .feed-page .dg-g.is-compact .dg-g-k{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .feed-page .dg-g.is-compact .dg-g-go{margin-top:0;flex:none}
  .feed-page .dg-g.is-compact .dg-g-d2{display:flex;align-items:baseline;gap:8px;min-width:0}
  .feed-page .dg-g.is-compact .dg-g-v b{font-size:20px;letter-spacing:-.4px}
  .feed-page .dg-g.is-compact .dg-g-s{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dg-g.tone-n{background:var(--ui-bg-page);border-color:var(--ui-line-200)}
  .dg-g.tone-n .dg-g-v b,.dg-g.tone-n .dg-g-go{color:var(--pl-cyan-ink)}
  .dg-g.tone-u{background:var(--ui-brand-050);border-color:var(--ui-brand-100)}
  .dg-g.tone-u .dg-g-v b,.dg-g.tone-u .dg-g-go{color:var(--ui-brand-500)}
  /* ④ 事件流行列表专用：筛选条与列表之间的间距（筛选片样式仍是共用的 .sp-seg） */
  .feed-page .live-tabs{margin:0 0 10px}

  /* ---- 实时动态 - 顶部统计概览 ---- */
  .feed-stats-wrap { margin-bottom:16px; }

/* ====== 卡片式统计区（高端大气版）====== */
.feed-stats-cards {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
  padding: 4px 0;
}
@media (max-width:1280px) {
  .feed-stats-cards { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 720px) {
  .feed-stats-cards { grid-template-columns: repeat(2, 1fr); }
}
.fs-card {
  position: relative;
  padding: 16px 18px;
  background: linear-gradient(135deg, rgba(255,255,255,0.96) 0%, rgba(249,249,249, 0.90) 100%);
  border: 1px solid rgba(144,144,144, 0.20);
  border-radius: 14px;
  cursor: pointer;
  transition: all 0.25s cubic-bezier(.4,0,.2,1);
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(68,68,68, 0.05);
}
.fs-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  border-radius: 14px 14px 0 0;
  transition: height 0.25s;
}
.fs-card::after {
  content: '';
  position: absolute;
  right: -20px;
  top: -20px;
  width: 80px;
  height: 80px;
  border-radius: 50%;
  opacity: 0.10;
  transition: opacity 0.25s;
}
.fs-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 20px rgba(68,68,68, 0.10), 0 16px 40px rgba(68,68,68, 0.06);
  border-color: rgba(179,179,179, 0.40);
}
.fs-card:hover::after {
  opacity: 0.18;
}
.fs-card.fs-critical::before { background: linear-gradient(90deg, var(--ui-danger-solid), var(--ui-ink-300)); }
.fs-card.fs-critical::after { background: var(--ui-danger-solid); }
.fs-card.fs-warning::before { background: linear-gradient(90deg, var(--ui-warn-solid), var(--ui-warn-line)); }
.fs-card.fs-warning::after { background: var(--ui-warn-solid); }
.fs-card.fs-active::before { background: linear-gradient(90deg, var(--ui-brand-600), var(--pl-cyan)); }
.fs-card.fs-active::after { background: var(--ui-brand-600); }
.fs-card.fs-shipped::before { background: linear-gradient(90deg, var(--pl-cyan), var(--ui-ink-400)); }
.fs-card.fs-shipped::after { background: var(--pl-cyan); }
.fs-card.fs-progress::before { background: linear-gradient(90deg, var(--ui-ok-solid), var(--ui-ok-solid)); }
.fs-card.fs-progress::after { background: var(--ui-ok-solid); }

.fs-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.fs-card-label {
  font-size: 12px;
  color: var(--ui-ink-500);
  font-weight: 600;
  letter-spacing: 0.3px;
}
.fs-card-icon {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: white;
}
.fs-card.fs-critical .fs-card-icon { background: linear-gradient(135deg, var(--ui-danger-solid), var(--ui-danger-solid)); }
.fs-card.fs-warning .fs-card-icon { background: linear-gradient(135deg, var(--ui-warn-solid), var(--ui-warn-solid)); }
.fs-card.fs-active .fs-card-icon { background: linear-gradient(135deg, var(--ui-brand-600), var(--pl-cyan)); }
.fs-card.fs-shipped .fs-card-icon { background: linear-gradient(135deg, var(--pl-cyan), var(--pl-cyan-ink)); }
.fs-card.fs-progress .fs-card-icon { background: linear-gradient(135deg, var(--ui-ok-solid), var(--ui-ok-solid)); }

.fs-card-value {
  font-size: 28px;
  font-weight: 800;
  line-height: 1.1;
  font-family: 'SF Pro Display', system-ui, sans-serif;
  letter-spacing: -0.5px;
}
.fs-card.fs-critical .fs-card-value { color: var(--ui-danger-solid); }
.fs-card.fs-warning .fs-card-value { color: var(--ui-warn-solid); }
.fs-card.fs-active .fs-card-value { color: var(--pl-cyan); }
.fs-card.fs-shipped .fs-card-value { color: var(--pl-cyan-ink); }
.fs-card.fs-progress .fs-card-value { color: var(--ui-ok-solid); }

.fs-card-sub {
  font-size: 11px;
  color: var(--ui-ink-400);
  margin-top: 6px;
  font-weight: 500;
}
.fs-card[data-filter].active {
  border-color: rgba(115,115,115, 0.50);
  box-shadow: 0 0 0 3px rgba(115,115,115, 0.12), 0 4px 14px rgba(68,68,68, 0.10);
}


  .feed-stats-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-bottom:14px; }
  @media (max-width:1280px){ .feed-stats-grid{ grid-template-columns:repeat(2,1fr); } }
  .feed-stat { position:relative; display:flex; gap:12px; padding:14px; border-radius:12px; background:linear-gradient(135deg, rgba(255,255,255,.85), rgba(249,249,249, .75)); border:1px solid var(--line); overflow:hidden; transition:.18s; }
  .feed-stat::after { content:""; position:absolute; right:-24px; top:-24px; width:110px; height:110px; border-radius:50%; background:radial-gradient(circle, var(--fc), transparent 70%); opacity:.14; }
  .feed-stat:hover { border-color:var(--line-strong); transform:translateY(-1px); box-shadow:0 10px 24px -14px rgba(68,68,68, .3); }
  .fs-icon { flex:0 0 42px; width:42px; height:42px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:var(--fc); background:rgba(28,28,28, .04); }
  .fs-icon svg { width:22px; height:22px; stroke-width:2; }
  .fs-body { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; justify-content:center; }
  .fs-val { font-size:24px; font-weight:800; line-height:1.1; font-variant-numeric:tabular-nums; letter-spacing:.5px; }
  .fs-label { font-size:12px; color:var(--txt-2); font-weight:600; letter-spacing:.3px; }
  .fs-sub { font-size:12px; color:var(--txt-3); margin-top:2px; line-height:1.4; }
  .fs-stations { display:grid; grid-template-columns:repeat(8,minmax(80px,1fr)); gap:8px; padding-top:4px; }
  @media (max-width:1280px){ .fs-stations{ grid-template-columns:repeat(4,1fr); } }
  .fs-stn { padding:8px 10px; border-radius:10px; background:rgba(28,28,28, .02); border:1px solid var(--line); }
  .fs-stn-hot { background:rgba(220,38,38,.06); border-color:rgba(220,38,38,.28); }
  .fs-stn-name { font-size:12px; color:var(--txt-2); font-weight:600; margin-bottom:6px; display:flex; align-items:center; justify-content:space-between; gap:4px; }
  .fs-stn-ht { display:inline-block; font-size:12px; font-weight:700; color:var(--ui-danger-solid); background:rgba(220,38,38,.14); padding:2px 6px; border-radius:4px; }
  .fs-stn-bar { height:5px; border-radius:4px; background:rgba(28,28,28, .06); overflow:hidden; margin-bottom:6px; }
  .fs-stn-num { font-size:12px; font-weight:800; color:var(--txt); font-variant-numeric:tabular-nums; }

  
  /* ===== 高端数据可视化图表 · 高端视觉风格 ===== */
  .chart-glow::before{
    content:""; pointer-events:none; position:absolute; inset:0;
    background:linear-gradient(120deg, transparent 30%, rgba(198,198,198, 0.08) 50%, transparent 70%);
    opacity:0; transition: opacity .3s ease;
  }
  .chart-glow:hover::before{ opacity:1; }

  .chart-sub {
    margin-left:14px; margin-right:auto; color:var(--ui-ink-400); font-size:12px;
    font-weight:500; letter-spacing:.2px;
  white-space:nowrap;
  overflow:hidden; padding-left:12px; border-left:1px dashed rgba(144,144,144, 0.35);
  }
  .chart-container { width:100%; position:relative; z-index:2;  min-height: 260px; width: 100%; position: relative;
  }

  /* 图表加载器 */
  .chart-loader {
    position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); z-index:5;
    display:flex; align-items:center; gap:10px; padding:10px 18px;
    border-radius:10px; background:rgba(255,255,255,0.9);
    color:var(--ui-ink-500); font-size:12px; font-weight:600; letter-spacing:.3px;
    box-shadow: 0 8px 24px -10px rgba(62,62,62, 0.25);
  }
  .cl-dot {
    width:8px; height:8px; border-radius:50%; background:#c6c6c6;
    animation: chartBounce 1s infinite ease-in-out both;
  }
  .cl-dot:nth-child(2){ background:var(--pl-cyan); }
  .cl-dot:nth-child(3){ background:var(--ui-ok-solid); }
  @keyframes chartBounce {
    0%,80%,100%{ transform:scale(0); opacity:.5; }
    40%{ transform:scale(1); opacity:1; }
  }

  /* ★ 2026-09-26 第三十八轮：「动态列表玻璃拟态升级版」(.glass-list) 整块删除 ——
     它的职责（玻璃渐变底 / 16px 圆角 / 柔和投影 / 左侧色条）当时并入了 .live-list .live-card；
     第三十九轮卡片整块下线后，这些职责由 .live-rows 的「1px 发丝边 + 12px 圆角 + 行首 4px 色条」承担。 */

  /* ★ 2026-09-26 第三十八轮：原「Enhanced Card Styles」里针对事件卡的 8 条覆盖已删；
     第三十九轮又连同 .live-r* 卡内结构一并下线，原结构（.live-order/.live-customer/.live-desc/
     .live-time/.live-btn/.live-meta/.live-foot/.live-station-badge）与本轮新结构（.live-row/.live-oid/
     .live-cust/.live-desc/.live-when/.live-open/.live-qty/.live-sub）没有同名冲突：
     新结构全部写在上面 .live-rows 一段里，这里不留任何 .live-* 覆盖。 */

.tbl-wrap{overflow:auto;border-radius:12px;border:1px solid var(--line);max-height:calc(100vh - 320px);min-height:260px;background:var(--panel)}
.tbl-wrap table{width:100%;border-collapse:collapse;font-size:13px}
.tbl-wrap thead th{position:sticky;top:0;background:var(--ui-bg-page);color:var(--txt-2);font-weight:700;font-size:12px;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;z-index:2;text-align:left}
.tbl-wrap tbody td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top;background:var(--panel)}
.tbl-wrap tbody tr:last-child td{border-bottom:none}
.tbl-wrap tbody tr:hover td{background:rgba(198,198,198, .06)}

  .board-tags{display:inline-flex;align-items:center;gap:4px;flex-wrap:wrap}

  .board-tag{display:inline-block;background:rgba(198,198,198, .08);color:var(--cyan-bright);border:1px solid var(--line);border-radius:6px;padding:2px 6px;font-size:12px;white-space:nowrap}

  .board-more{display:inline-block;background:rgba(68,68,68, .10);color:var(--brand);border-radius:6px;padding:2px 6px;font-size:12px;white-space:nowrap;cursor:help}

  .tbl-wrap::-webkit-scrollbar{width:8px;height:8px}

  .tbl-wrap::-webkit-scrollbar-thumb{background:rgba(198,198,198, .25);border-radius:4px}

  .tbl-wrap::-webkit-scrollbar-thumb:hover{background:rgba(198,198,198, .45)}

  table{width:100%;border-collapse:collapse;font-size:14px}

  thead th{position:sticky;top:0;background:rgba(250,250,250, .96);color:var(--txt-2);font-weight:700;
    text-align:left;padding:12px 14px;font-size:12px;letter-spacing:.5px;border-bottom:1px solid var(--line-strong);white-space:nowrap}

  tbody td{padding:12px 14px;border-bottom:1px solid rgba(198,198,198, .08);white-space:nowrap}

  tbody tr{cursor:pointer;transition:.15s}

  tbody tr:hover{background:rgba(198,198,198, .10)}

  .badge{font-size:12px;font-weight:700;padding:2px 8px;border-radius:8px;display:inline-block;line-height:1.2;letter-spacing:.3px;white-space:nowrap}

  .b-cyan{background:rgba(198,198,198, .15);color:var(--cyan-bright)}

  .b-bio{background:rgba(10,112,67,.12);color:var(--bio)}

  .b-amber{background:rgba(217,119,6,.15);color:var(--amber)}

  .b-red{background:rgba(220,38,38,.16);color:var(--red)}

  .b-violet{background:rgba(144,144,144, .16);color:var(--violet)}

  .b-gray{background:rgba(179,179,179, .14);color:var(--txt-2)}

  .pbar{height:8px;border-radius:999px;background:rgba(68,68,68, .10);overflow:hidden;min-width:80px;box-shadow:inset 0 1px 2px rgba(68,68,68, .08)}

  .pbar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--ui-brand-700),var(--ui-brand-500) 70%,#c6c6c6);box-shadow:0 0 10px rgba(134,134,134, .35);position:relative;transition:width .35s ease}

  .pbar i::after{content:"";position:absolute;inset:0;border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.28),transparent 55%)}

  .tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
  .tab{padding:8px 16px;border-radius:10px;background:rgba(198,198,198, .10);border:1px solid var(--line);
    color:var(--txt-2);cursor:pointer;font-size:13px;font-weight:600;transition:.18s}
  .tab:hover{color:var(--txt);background:rgba(198,198,198, .16)}
  .tab.active{background:linear-gradient(90deg,rgba(68,68,68, .10),rgba(86,86,86, .05));color:var(--brand);border-color:rgba(68,68,68, .25)}
  .tab .n{margin-left:6px;font-size:12px;background:rgba(198,198,198, .18);padding:2px 8px;border-radius:6px}

  .search{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}

  .search input,.search select{background:rgba(255,255,255,.9);border:1px solid var(--line);border-radius:10px;
    padding:10px 14px;font-size:13px;color:var(--txt);outline:none;transition:.18s}
  .search input:focus,.search select:focus{border-color:var(--line-strong);background:rgba(255,255,255,.96)}

  .chips{display:flex;gap:8px;flex-wrap:wrap}

  .chip{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:20px;background:rgba(198,198,198, .10);border:1px solid var(--line);
    color:var(--txt-2);cursor:pointer;font-size:12px;font-weight:600;line-height:1;transition:.18s}
  .chip.active{background:rgba(68,68,68, .12);color:var(--brand);border-color:rgba(68,68,68, .3)}

  .modal-bg{position:fixed;inset:0;background:rgba(28,28,28, .32);backdrop-filter:blur(6px);z-index:60;display:none;place-items:center;padding:20px}

  .modal-bg.show{display:grid}

  /* fullscreen 弹层必须连遮罩层一起铺满，不能保留普通弹窗的 20px 外边距 */
  .modal-bg.modal-fullscreen{padding:0;place-items:stretch}
  .modal-bg.modal-fullscreen .modal.fullscreen{height:100%;max-height:none;min-height:0}

  .modal{width:min(640px,96vw);max-height:92vh;overflow:auto;background:var(--panel-2);border:1px solid var(--line-strong);
    border-radius:16px;padding:58px 22px 22px;box-shadow:0 30px 80px -20px rgba(28,28,28, .55);position:relative}

  .modal.wide{width:min(900px,97vw);max-height:96vh}

  .modal.fullscreen{box-sizing:border-box;width:100%;max-width:none;max-height:100vh;height:100vh;border-radius:0;padding:60px 28px 24px}
  .modal.fullscreen{display:flex;flex-direction:column}
  /* 周报内容包含多组图表和明细表：滚动放在内容区内，避免底部被视口裁掉 */
  .modal.fullscreen #swBox{flex:1 1 auto;min-height:0;overflow:auto;padding-right:4px}
  .modal.fullscreen .eta-head{position:sticky;top:0;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:10px}
  .modal.fullscreen .eta-head h3{margin:0;font-size:20px;color:var(--brand)}
  .modal.fullscreen .eta-head .sub{font-size:12px;color:var(--txt-2);margin-top:4px}
  .modal.fullscreen .eta-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 0 10px;border-bottom:1px solid var(--line);margin-bottom:8px}
  .modal.fullscreen .eta-count{font-size:12px;color:var(--txt-2);flex:1}
  .modal.fullscreen .tbl-wrap{flex:1;overflow:auto;border:1px solid var(--line);border-radius:10px}
  .modal.fullscreen table{width:100%;border-collapse:collapse;font-size:12px}
  .modal.fullscreen thead th{position:sticky;top:0;background:var(--brand);color:#fff;z-index:2;white-space:nowrap;padding:10px 10px;text-align:left}
  .modal.fullscreen tbody td{padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle;text-align:left}
  .modal.fullscreen tbody td.mod{max-width:180px;white-space:normal;word-break:break-all;font-size:12px;color:var(--txt-2);text-align:left;vertical-align:middle}
  .modal.fullscreen tbody td.seq-cell{max-width:300px;white-space:normal;word-break:break-word;font-size:12px;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace)}
  .modal.fullscreen tbody td.num,.modal.fullscreen thead th.num{text-align:right;font-variant-numeric:tabular-nums;vertical-align:middle}
  .modal.fullscreen tbody td:first-child{text-align:center}
  .modal.fullscreen tbody td:last-child{text-align:center}
  .modal.fullscreen tbody tr:nth-child(even){background:rgba(28,28,28, .03)}

  .dlg-card{background:rgba(28,28,28, .035);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:12px 0;font-size:13px;line-height:1.9}

  .dlg-card b{color:var(--txt)}

  .dlg-lb{display:block;font-size:12px;color:var(--muted);margin:14px 0 6px}

  .dlg-ta,.dlg-ip,.dlg-sel{width:100%;background:rgba(255,255,255,.9);border:1px solid var(--line-strong);border-radius:10px;

    padding:10px 12px;color:var(--txt);font-size:13px;font-family:inherit;outline:none}

  .dlg-ta{min-height:96px;resize:vertical}

  .dlg-ta:focus,.dlg-ip:focus,.dlg-sel:focus{border-color:var(--cyan)}

  .dlg-ta.is-err,.dlg-ip.is-err,.dlg-sel.is-err{border-color:var(--ui-danger-solid)}

  .dlg-cnt{text-align:right;font-size:12px;color:var(--muted);margin-top:6px}

  .dlg-cnt.is-near{color:var(--amber)}

  .dlg-err{color:var(--ui-danger-solid);font-size:12px;margin-top:8px;display:none}

  .dlg-err.show{display:block}

  .dlg-btns{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}

  .btn-ghost{padding:8px 16px;border:1px solid var(--ui-line-200);border-radius:8px;background:var(--ui-bg-card);color:var(--sk-ink-2);cursor:pointer;font-size:14px}
  .btn-primary{padding:8px 16px;border:none;border-radius:8px;background:var(--ui-brand-500);color:#fff;cursor:pointer;font-size:14px}
  .btn-primary:hover{background:var(--ui-brand-600)}




.modal h3{font-size:18px;margin-bottom:4px}

  .modal .sub{font-size:12px;color:var(--txt-3);margin-bottom:16px}

  .modal
.od-back{position:absolute;top:12px;left:16px;display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;background:linear-gradient(135deg,var(--ui-brand-600),var(--sk-accent-deep));border-radius:10px;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .22s cubic-bezier(.4,0,.2,1);line-height:1;box-shadow:0 2px 8px rgba(68,68,68, .25), 0 1px 2px rgba(68,68,68, .15);z-index:10}.od-back:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(68,68,68, .32), 0 2px 4px rgba(68,68,68, .18);background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900))} .od-back:active{transform:translateY(0);box-shadow:0 1px 4px rgba(68,68,68, .3)}
.close{position:absolute;top:14px;right:16px;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.95);border:1px solid var(--line);color:var(--sk-ink-3);cursor:pointer;font-size:20px;font-weight:400;line-height:1;transition:all .22s cubic-bezier(.4,0,.2,1);z-index:10;padding:0;box-shadow:0 2px 6px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04)}
  .close:hover{background:var(--ui-danger-bg);color:var(--ui-danger-solid);border-color:var(--ui-danger-line);transform:rotate(90deg);box-shadow:0 4px 10px rgba(220,38,38,.12)}
  .close:active{transform:rotate(90deg) scale(.93)}

  .fld{margin-bottom:14px}

  .fld label{display:block;font-size:12px;color:var(--txt-2);margin-bottom:6px;font-weight:600}

  .fld input,.fld textarea,.fld select{width:100%;padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.9);
    border:1px solid var(--line);color:var(--txt);font-size:13px;outline:none;font-family:inherit}
  .fld textarea{resize:vertical;min-height:70px}
  .fld input:focus,.fld textarea:focus,.fld select:focus{border-color:var(--line-strong);background:rgba(255,255,255,.96)}

  .row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}

  .mbtns{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px}

  .mbtn{flex:1;min-width:130px;padding:12px;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.9);

    color:var(--txt);cursor:pointer;font-weight:600;font-size:13px;transition:.18s;display:flex;align-items:center;justify-content:center;gap:8px}

  .mbtn:hover{border-color:var(--line-strong);background:rgba(198,198,198, .08)}

  .mbtn.bio{border-color:rgba(10,112,67,.4);color:var(--bio)}

  .mbtn.bio:hover{background:rgba(10,112,67,.12)}

  .mbtn.red{border-color:rgba(220,38,38,.4);color:var(--red)}

  .mbtn.red:hover{background:rgba(220,38,38,.12)}

  .mbtn.amber{border-color:rgba(217,119,6,.4);color:var(--amber)}

  .mbtn.cyan{background:var(--grad);color:#fff;border:none}

  /* 详情页：当前工序（按部门）块 */

  .dept-block{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-top:10px;background:rgba(28,28,28, .025)}

  .dept-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}

  .dept-steps{margin-top:8px;display:flex;flex-wrap:wrap}

  .primer-detail{margin-top:8px;border:1px solid var(--line);border-radius:10px;max-height:260px;overflow:auto;padding:6px 8px}

  .primer-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 8px;border-bottom:1px solid rgba(198,198,198, .06);font-size:12px}

  .primer-row:last-child{border-bottom:none}

  .primer-name{color:var(--txt-2);word-break:break-all}

  .dept-btns{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}

  .mbtn.mini{flex:0 0 auto;min-width:auto;padding:6px 12px;font-size:12px;font-weight:600}

  .mbtn.mini.bio{border-color:rgba(10,112,67,.4);color:var(--bio)}

  .mbtn.mini.bio:hover{background:rgba(10,112,67,.12)}

  .mbtn.mini.amber{border-color:rgba(217,119,6,.4);color:var(--amber)}
  .mbtn.mini.amber:hover{background:rgba(217,119,6,.12)}
  .mbtn.mini.mag-del{border-color:rgba(220,38,38,.4);color:var(--red)}
  .mbtn.mini.mag-del:hover{background:rgba(220,38,38,.12)}

  .qc-badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2);

    border:1px solid var(--line);border-radius:999px;padding:2px 10px;background:rgba(28,28,28, .035)}

  .qc-dot{width:8px;height:8px;border-radius:50%;background:var(--txt-2);display:inline-block}

  .qc-dot.loading{background:var(--ui-ink-500);animation:pulse 1s infinite}

  .qc-dot.ok{background:var(--bio);box-shadow:0 0 6px rgba(86,86,86, .5)}

  .qc-dot.none{background:var(--ui-ink-500)}

  .qc-dot.err{background:var(--red)}

  @keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}

  .dept-auto{margin-top:10px}

  .dept-auto-block{border-style:dashed}

  .info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}

  .info-grid .ic{background:rgba(255,255,255,.85);border:1px solid var(--line);border-radius:10px;padding:10px 12px}

  .info-grid .ic .l{font-size:12px;color:var(--txt-3)}

  .info-grid .ic .v{font-size:14px;font-weight:700;margin-top:4px}

  .station-track{display:flex;gap:4px;margin:10px 0 18px;flex-wrap:wrap}

  .stp{flex:1;min-width:70px;text-align:center;font-size:12px;padding:8px 4px;border-radius:8px;

    background:rgba(255,255,255,.85);border:1px solid var(--line);color:var(--txt-2);position:relative}

  .stp.done{background:rgba(10,112,67,.12);border-color:rgba(10,112,67,.4);color:var(--bio)}

  .stp.cur{background:rgba(198,198,198, .18);border-color:var(--cyan);color:var(--cyan-bright);box-shadow:0 0 14px -3px rgba(86,86,86, .5)}

  .toast-wrap{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:80;display:flex;flex-direction:column;gap:8px;align-items:center}

  .toast{background:var(--panel-2);border:1px solid var(--line-strong);border-radius:12px;padding:12px 18px;font-size:13px;

    box-shadow:var(--shadow);animation:tin .25s ease;display:flex;align-items:center;gap:10px}

  .toast.err{border-color:rgba(220,38,38,.5)}

  .toast.ok{border-color:rgba(10,112,67,.5)}

  @keyframes tin{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

  .loading{display:grid;place-items:center;padding:60px;color:var(--txt-3);font-size:13px;gap:12px}

  .spin{width:26px;height:26px;border:3px solid rgba(198,198,198, .2);border-top-color:var(--cyan);border-radius:50%;animation:sp 1s linear infinite}

  @keyframes sp{to{transform:rotate(360deg)}}

  .empty{padding:40px;text-align:center;color:var(--txt-3);font-size:13px}

  /* dashboard enhancements */

  .kpi .v{font-size:28px;font-weight:800;line-height:1.05;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}

  .kpi .vrow{display:flex;align-items:baseline;gap:8px}

  .spark{display:block;width:100%;height:24px;margin:4px 0 2px}

  .loadbar{display:flex;gap:6px;margin:2px 0 14px}
  .sh{cursor:pointer;transition:background .18s}
  .sh:hover{background:rgba(68,68,68, .06)}
  .station-detail-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}
  .station-detail-head h3{margin:0;font-weight:700}
  .station-detail-head .cnt{color:var(--txt-3);font-size:14px;font-weight:500;margin-left:8px}
  .station-sorts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .station-sorts .close{position:static}
  .station-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;padding:4px}
  .station-detail-grid .ocard{margin-top:0;cursor:pointer}




  .lb{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;cursor:pointer}
  .lb:hover .lbl{color:var(--blue)}

  .lb .lbl{font-size:12px;color:var(--txt-3);display:flex;justify-content:space-between;margin-bottom:4px}

  .lb .track{height:7px;border-radius:999px;background:rgba(68,68,68, .10);overflow:hidden;box-shadow:inset 0 1px 2px rgba(68,68,68, .08)}

  .lb .track i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--ui-brand-700),var(--ui-brand-500) 70%,#c6c6c6);box-shadow:0 0 10px rgba(134,134,134, .35);position:relative;transition:width .35s ease}

  .lb .track i::after{content:"";position:absolute;inset:0;border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.28),transparent 55%)}

  .ocard .ometa{
    display:grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items:baseline;
    column-gap:6px;
    font-size:12px;
    color:var(--txt-3);
    margin:6px 0;
    width:100%;
    box-sizing:border-box;
  }
  .ocard .ometa .ometa-label{
    color:var(--txt-3);
    white-space:nowrap;
    font-size:12px;
  }
  /* plain 板号 (short 1-2 boards): full text, no truncation */
  .ocard .ometa .board-cell.board-cell-plain{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    color:var(--txt-2);
    font-weight:500;
    cursor:pointer;
  }
  /* has-more 板号 (>2 boards or super long): first + compact badge */
  .ocard .ometa .board-cell.has-more{
    display:flex;
    align-items:baseline;
    gap:4px;
    overflow:hidden;
    min-width:0;
  }
  .ocard .ometa .board-cell.has-more .board-text{
    display:block;
    flex:0 1 auto;
    max-width:100%;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    color:var(--txt-2);
    font-weight:500;
    min-width:0;
  }
  .ocard .ometa .board-cell.has-more .board-more{
    flex-shrink:0;
    font-size:11px;
    line-height:1;
    color:#ffffff;
    font-weight:800;
    padding:2px 4px;
    border-radius:4px;
    background:linear-gradient(135deg,var(--ui-brand-500),var(--ui-brand-600));
    white-space:nowrap;
    vertical-align:middle;
  }
  .ocard .ometa .ometa-qty{
    white-space:nowrap;
    font-weight:700;
    color:var(--bio-dark);
    font-variant-numeric:tabular-nums;
    font-size:12px;
    justify-self:end;
  }
  .ocard .board-dash{color:var(--muted)}

  .ocard .otags{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px;margin-bottom:2px}

  .ocard .pbar{height:5px}

  .shift{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--txt-2);background:rgba(255,255,255,.85);border:1px solid var(--line);padding:6px 12px;border-radius:10px}

  .shift b{color:var(--bio);font-weight:700}

  .gauge .gwrap svg circle.arc{transition:stroke-dashoffset 1.1s cubic-bezier(.22,1,.36,1)}

  .ftag{font-size:12px;font-weight:700;padding:2px 6px;border-radius:6px;background:rgba(28,28,28, .06);white-space:nowrap;margin-right:4px}

  /* board display helpers */

  .board-cell{display:flex;align-items:center;gap:6px;max-width:260px}

  .board-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--txt)}

  .board-more{flex:none;font-size:12px;font-weight:700;padding:2px 8px;border-radius:8px;background:rgba(198,198,198, .14);color:var(--cyan-bright);cursor:pointer;white-space:nowrap}

  .board-more:hover{background:rgba(198,198,198, .22)}

  .board-tag{font-size:12px;padding:4px 8px;border-radius:8px;background:rgba(255,255,255,.9);border:1px solid var(--line);display:inline-block;margin:0 6px 6px 0;white-space:nowrap}

  .board-wrap{display:flex;flex-wrap:wrap;max-height:78px;overflow:hidden;position:relative}

  .board-wrap.open{max-height:none}

  .board-expand{display:inline-block;margin-top:6px;font-size:12px;color:var(--cyan-bright);cursor:pointer}

  .board-expand:hover{text-decoration:underline}

  /* detail page */

  .detail-section{margin-bottom:20px}

  .detail-section h4{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--txt-2);margin-bottom:10px;font-weight:700}

  .detail-section h4 .bar{width:3px;height:14px;border-radius:4px;background:var(--grad)}

  .detail-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}

  .detail-meta .ic{background:rgba(255,255,255,.85);border:1px solid var(--line);border-radius:10px;padding:10px 12px}

  .detail-meta .ic .l{font-size:12px;color:var(--txt-3)}

  .detail-meta .ic .v{font-size:14px;font-weight:700;margin-top:4px;word-break:break-all}

  .detail-table{width:100%;font-size:12px;border-collapse:collapse}
  .modal.fullscreen #rowTbl{table-layout:fixed;width:100%!important;min-width:1710px!important}
  .detail-table td .col-shown{margin-right:6px}
  .detail-table td .col-more{display:inline-block;cursor:help;user-select:none;background:rgba(198,198,198, .18);color:var(--brand);border:1px solid rgba(68,68,68, .25);border-radius:10px;padding:0 8px;font-size:12px;font-weight:700;line-height:18px}
  .detail-table td .col-shown{margin-right:6px}
  .detail-table td .col-more{display:inline-block;cursor:pointer;user-select:none;background:rgba(198,198,198, .18);color:var(--brand);border:1px solid rgba(68,68,68, .25);border-radius:10px;padding:0 8px;font-size:12px;font-weight:700;line-height:18px;transition:.15s}
  .detail-table td .col-more:hover{background:rgba(68,68,68, .18);color:var(--brand)}

  .detail-table th{background:rgba(250,250,250, .95);padding:8px 10px;text-align:left;color:var(--txt-2);border-bottom:1px solid var(--line-strong);white-space:nowrap}

  .detail-table td{padding:8px 10px;border-bottom:1px solid rgba(198,198,198, .06);vertical-align:top}
  .detail-table td.seq-cell{padding:8px 10px;border-bottom:1px solid rgba(198,198,198, .06);vertical-align:top;white-space:normal;line-height:1.45;width:300px;max-width:300px}
  .detail-table td.seq-cell .seq-inner{max-width:300px;overflow-wrap:break-word;word-break:break-word;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-size:12px}

  .detail-table tr:hover{background:rgba(198,198,198, .04)}

  .detail-table .empty{background:transparent;color:var(--txt-3);padding:16px;text-align:center}

  .history-item{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.82);border:1px solid var(--line);margin-bottom:8px;font-size:12px}

  .history-item .dot{width:8px;height:8px;border-radius:50%;margin-top:6px;flex:none}

  .history-item .body{flex:1}

  .history-item .time{white-space:nowrap;color:var(--txt-3);font-size:12px;margin-left:auto}

  /* ---- 订单详情页（Tab 布局 v2）---- */

  

  

  

  

  

  

  

  .tabbar{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin:6px 0 14px}

  .tab{padding:10px 16px;font-size:13px;font-weight:700;color:var(--txt-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s}

  .tab:hover{color:var(--txt)}

  .tab.active{color:var(--brand);border-bottom-color:var(--brand)}

  .tabpane{display:none}

  .tabpane.active{display:block}

  .ov-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}

  .ov-col{min-width:0}

  .detail-meta.two{grid-template-columns:repeat(2,1fr)}

  .detail-meta.two .ic .v{font-size:13px}

  @media(max-width:760px){.ov-grid{grid-template-columns:1fr}}

  @media(max-width:760px){.sidebar{width:64px}.brand h1,.brand .sub,.nav-item span,.nav-group .gt,.conn span{display:none}.nav-item{justify-content:center}.detail-meta{grid-template-columns:repeat(2,1fr)}.board-cell{max-width:140px}}

/* 2026-09-01 去重：此处原为与文件头部重复的 @media(max-width:720px) 块，已删除 */

/* ---- 各工段作业完成时间 时间线 ---- */

.station-timeline {display:flex;gap:8px;overflow-x:auto;padding:4px 2px 12px}

.tl-item {position:relative;flex:1;min-width:110px;max-width:160px;display:flex;flex-direction:column;align-items:center;text-align:center;padding:14px 10px 12px;background:rgba(255,255,255,.9);border:1px solid var(--line);border-radius:14px;opacity:.65}

.tl-item.has {opacity:1;border-color:var(--line-strong);box-shadow:0 2px 8px rgba(198,198,198, .06)}

.tl-dot {width:10px;height:10px;border-radius:50%;background:var(--line-strong);margin-bottom:10px;position:relative}

.tl-item.has .tl-dot {background:var(--ui-ink-500)}

.tl-item.has .tl-dot::after {content:'';position:absolute;inset:-4px;border-radius:50%;border:2px solid var(--ui-ink-500);opacity:.35}

.tl-station {font-size:12px;font-weight:700;color:var(--txt-2);margin-bottom:6px}

.tl-time {font-size:13px;font-weight:800;color:var(--ui-brand-700);line-height:1.2;word-break:break-all}

.tl-meta {font-size:12px;color:var(--txt-3);margin-top:6px}

@media (max-width:720px){

  .station-timeline {gap:10px}

  .tl-item {min-width:120px}

}

/* ===== login : 百力格生物 — 左右分栏高端设计 ===== */
.auth-bg{position:fixed;inset:0;z-index:120;display:none;overflow:hidden;
  font-family:"PingFang SC","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  background:var(--ui-bg-page);}
.auth-bg.auth-modal{position:fixed;inset:0;z-index:9000;display:none;}
.auth-bg.show{display:flex;align-items:center;justify-content:center;}

/* 左右分栏容器 */
.auth-split{position:relative;z-index:2;display:flex;width:min(92vw,960px);min-height:560px;
  border-radius:20px;overflow:hidden;
  background:var(--ui-bg-card);
  box-shadow:0 40px 100px -24px rgba(28,28,28, .55),0 0 0 1px rgba(255,255,255,.6) inset;
  animation:fsCard .8s cubic-bezier(.2,.8,.25,1) both;}
@keyframes fsCard{from{opacity:0;transform:translateY(28px) scale(.97);}to{opacity:1;transform:none;}}

/* 左侧品牌区 */
/* ===== 左侧品牌区 · 生物实验室主题 ===== */
/* ===== 左侧品牌区 · 生物实验室主题（深海蓝调） ===== */
/* ===== 左侧品牌区 · 生物实验室主题（深海蓝调 · 精致版） ===== */
.auth-left{position:relative;flex:1;display:flex;flex-direction:column;justify-content:flex-end;
  padding:0;color:#fff;overflow:hidden;background:var(--ui-ink-900);}
/* 背景视觉图 */
.auth-left-bg{position:absolute;inset:0;z-index:0;}
.auth-left-bg img{width:100%;height:100%;object-fit:cover;display:block;transform-origin:60% 40%;
  animation:bgKenBurns 28s ease-in-out infinite alternate;}
@keyframes bgKenBurns{from{transform:scale(1.0) translateX(0) rotate(0deg);}to{transform:scale(1.14) translateX(-3.5%) rotate(.5deg);}}
/* 遮罩：底部加深保证文字可读，顶部轻微压暗 */
.auth-left-veil{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,
    rgba(28,28,28, .42) 0%,
    rgba(28,28,28, .08) 26%,
    rgba(28,28,28, .18) 52%,
    rgba(0,0,0,.78) 86%,
    rgba(0,0,0,.96) 100%);}
.auth-left-veil::after{content:"";position:absolute;inset:0;
  background:radial-gradient(85% 55% at 50% 102%, rgba(12,154,184,.14), transparent 62%);
  mix-blend-mode:screen;}
/* 顶部状态条 */
.auth-top{position:absolute;top:26px;left:28px;right:28px;z-index:3;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  animation:topFade 1s ease .1s both;}
@keyframes topFade{from{opacity:0;transform:translateY(-10px);}to{opacity:1;transform:none;}}
.auth-top-badge{display:flex;align-items:center;gap:10px;padding:8px 16px;border-radius:999px;
  background:rgba(28,28,28, .42);border:1px solid rgba(190,227,235,.16);backdrop-filter:blur(14px);
  font-size:12px;letter-spacing:2.5px;color:var(--pl-cyan-line);box-shadow:0 8px 28px rgba(0,0,0,.25);}
.auth-top-badge i{width:6px;height:6px;border-radius:50%;background:var(--ui-ok-solid);
  box-shadow:0 0 10px 2px rgba(10,112,67,.85);animation:onlinePulse 2.4s ease-in-out infinite;}
@keyframes onlinePulse{0%,100%{opacity:1;}50%{opacity:.3;}}
.auth-top-mark{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:rgba(28,28,28, .42);border:1px solid rgba(190,227,235,.16);backdrop-filter:blur(14px);}
.auth-top-mark svg{width:18px;height:18px;display:block;color:var(--pl-cyan-line);}
/* 底部品牌区 */
.auth-left-content{position:relative;z-index:2;padding:0 42px 46px;max-width:460px;text-align:left;
  animation:brandRise 1s cubic-bezier(.22,.9,.3,1) .25s both;}
@keyframes brandRise{from{opacity:0;transform:translateY(30px);}to{opacity:1;transform:none;}}
.auth-left-mark{width:58px;height:58px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  margin-bottom:24px;position:relative;
  background:
    radial-gradient(130% 130% at 28% 18%, rgba(12,154,184,.28), transparent 52%),
    linear-gradient(150deg, rgba(86,86,86, .96), rgba(68,68,68, .98));
  border:1px solid rgba(190,227,235,.45);
  box-shadow:0 14px 40px -8px rgba(12,154,184,.5),0 0 0 1px rgba(255,255,255,.12) inset,
    0 0 30px rgba(12,154,184,.16) inset;
  animation:markFloat 5.5s ease-in-out infinite, markGlow 3.6s ease-in-out infinite;
  transform-style:preserve-3d;}
.auth-left-mark::before{content:"";position:absolute;inset:0;border-radius:16px;pointer-events:none;
  background:linear-gradient(155deg, rgba(255,255,255,.32), rgba(255,255,255,0) 46%);
  opacity:.55;}
@keyframes markFloat{0%,100%{transform:translateY(0) scale(1);}50%{transform:translateY(-6px) scale(1.02);}}
/* ★ 2026-10-09 性能收口：原来 markGlow 动 box-shadow（非合成）。改成"静态辉光 + opacity 呼吸"，
   与 markFloat（transform）一起跑，观感不变。（下面还有一条同名 keyframes 供 index.html 用） */
@keyframes markGlow{0%,100%{opacity:0}50%{opacity:1}}
.auth-left-mark svg{width:40px;height:40px;display:block;}
.auth-left-mark .dn{animation:dnPulse 3.2s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
@keyframes dnPulse{0%,100%{opacity:.5;transform:scale(.82);}50%{opacity:1;transform:scale(1.12);}}
/* 脉冲光环 */
.mark-pulse-ring{position:absolute;inset:-2px;border-radius:20px;border:1px solid rgba(12,154,184,.35);animation:markPulse 3.6s ease-out infinite;pointer-events:none;}
.mark-pulse-ring:nth-child(2){animation-delay:1.2s;}
.mark-pulse-ring:nth-child(3){animation-delay:2.4s;}
/* 只留 transform + opacity（border-color 是每帧重绘的罪魁，静态描边已经够看） */
@keyframes markPulse{0%{transform:scale(1);opacity:.85;}100%{transform:scale(2.2);opacity:0;}}
.auth-left-name{font-size:28px;font-weight:800;letter-spacing:1px;color:#fff;line-height:1.12;
  margin-bottom:10px;text-shadow:0 2px 26px rgba(0,0,0,.45);position:relative;overflow:hidden;}
/* ★ 2026-10-09 性能收口：文字流光原来是 background-position 无限扫（非合成、每帧重绘文字）。
   这里改成**静态流光**（同一张渐变，不再动）—— 3.5s 的滚动光带换来的是持续的样式重算，不值。
   ⚠ 不能改成对 ::after 做 transform：它是 background-clip:text 的文字层，平移会把字一起挪走。 */
.auth-left-name::after{content:attr(data-text);position:absolute;left:0;top:0;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(190,227,235,.6) 50%,transparent 100%);-webkit-background-clip:text;background-clip:text;color:transparent;}
.auth-left-dept{font-size:13px;color:#c6c6c6;letter-spacing:2px;margin-bottom:20px;text-shadow:0 1px 12px rgba(0,0,0,.4);}
.auth-left-line{display:flex;align-items:center;gap:0;margin-bottom:18px;position:relative;}
.auth-left-line::before{content:"";width:46px;height:2px;border-radius:4px;
  background:linear-gradient(90deg,var(--pl-cyan),rgba(12,154,184,0));position:relative;}
.auth-left-line::after{content:"";position:absolute;left:0;top:0;width:20px;height:2px;border-radius:4px;
  background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.8),rgba(255,255,255,0));
  animation:lineShine 2.8s ease-in-out infinite;filter:blur(1px);}
@keyframes lineShine{0%{transform:translateX(-10px);opacity:0;}20%{opacity:1;}80%{opacity:1;}100%{transform:translateX(50px);opacity:0;}}
.auth-left-slogan{font-size:12px;color:rgba(190,227,235,.72);line-height:1.85;letter-spacing:.5px;text-shadow:0 1px 14px rgba(0,0,0,.55);}
.auth-left-slogan b{color:var(--ui-brand-050);font-weight:700;letter-spacing:1px;display:block;margin-bottom:2px;}
/* 底部高光线 */
.auth-left-foot{position:absolute;left:0;right:0;bottom:0;height:3px;z-index:3;
  background:linear-gradient(90deg,var(--pl-cyan) 0%,var(--ui-brand-500) 45%,var(--pl-cyan) 100%);opacity:.55;}

/* 右侧表单区 */
/* 右侧表单区 */
.auth-right{flex:1;display:flex;flex-direction:column;justify-content:center;
  padding:48px 44px;background:var(--ui-bg-card);position:relative;}
.auth-right-close{position:absolute;top:20px;right:20px;width:32px;height:32px;border-radius:50%;
  border:none;background:var(--ui-brand-100);color:var(--ui-ink-400);font-size:16px;cursor:pointer;z-index:10;
  display:flex;align-items:center;justify-content:center;transition:.2s;}
.auth-right-close:hover{background:var(--ui-brand-100);color:var(--ui-ink-700);}

.auth-brand{display:flex;align-items:center;gap:14px;margin-bottom:22px;}
.fosun-mark{width:48px;height:48px;border-radius:14px;flex:none;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,var(--ui-brand-900),var(--ui-brand-600));
  box-shadow:0 9px 22px -7px rgba(115,115,115, .75),0 0 0 1px rgba(255,255,255,.18) inset;}
.fosun-mark svg{width:28px;height:28px;display:block;}
.auth-name{font-size:20px;font-weight:800;letter-spacing:1.5px;color:var(--ui-brand-900);line-height:1.1;}
.auth-dept{font-size:12px;color:var(--ui-ink-500);margin-top:4px;letter-spacing:.4px;}
.auth-right h1{font-size:24px;font-weight:800;color:var(--ui-brand-900);margin:6px 0 4px;letter-spacing:.5px;}
.auth-right .sub{font-size:12px;color:var(--ui-ink-400);margin-bottom:20px;}
.auth-err{min-height:18px;color:var(--pl-pink);font-size:12px;margin-bottom:6px;font-weight:600;}
.auth-fld{margin-bottom:16px;opacity:0;animation:fsField .6s ease both;}
.auth-fld:nth-of-type(1){animation-delay:.16s;}
.auth-fld:nth-of-type(2){animation-delay:.28s;}
@keyframes fsField{from{opacity:0;transform:translateY(9px);}to{opacity:1;transform:none;}}
.auth-fld label{display:block;font-size:12px;color:var(--ui-ink-700);font-weight:600;margin-bottom:6px;letter-spacing:.3px;}
.auth-input{display:flex;align-items:center;gap:10px;height:47px;padding:0 14px;border-radius:12px;
  background:var(--ui-brand-100);border:1.5px solid var(--ui-line-200);transition:.22s;}
.auth-input:focus-within{border-color:var(--ui-brand-500);background:rgba(255,255,255,.9);box-shadow:0 0 0 4px rgba(134,134,134, .15);}
.auth-input svg{width:18px;height:18px;flex:none;color:var(--ui-ink-300);transition:.22s;}
.auth-input:focus-within svg{color:var(--ui-brand-500);}
.auth-input input{border:0;outline:0;background:transparent;flex:1;font-size:14px;color:var(--ui-ink-700);
  font-family:inherit;min-width:0;}
.auth-input input::placeholder{color:var(--ui-ink-300);}
.auth-btn{width:100%;height:49px;margin-top:6px;border:0;border-radius:12px;cursor:pointer;position:relative;overflow:hidden;
  background:linear-gradient(135deg,var(--ui-brand-900),var(--ui-brand-500) 55%,#c6c6c6);
  color:#fff;font-size:16px;font-weight:700;letter-spacing:4px;font-family:inherit;
  box-shadow:0 14px 30px -10px rgba(115,115,115, .75);transition:transform .2s, box-shadow .2s;}
.auth-btn:hover{transform:translateY(-2px);box-shadow:0 22px 40px -10px rgba(115,115,115, .85);}
.auth-btn:active{transform:translateY(0);}
/* ★ 2026-10-09 性能收口：掠过光原来动 left（重排），改 transform: translateX（合成）。 */
.auth-btn::after{content:"";position:absolute;top:0;left:0;width:42%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  transform:translateX(-160%) skewX(-20deg);will-change:transform;
  animation:fsShine 3.6s ease-in-out infinite;}
.auth-btn.loading{opacity:.92;cursor:wait;}
.auth-btn.loading::after{animation:none;}
.auth-btn .auth-spin{display:inline-flex;gap:4px;margin-right:2px;vertical-align:middle;}
.auth-btn .auth-spin i{width:5px;height:5px;border-radius:50%;background:rgba(255,255,255,.95);animation:ldPulse 1.2s ease-in-out infinite;}
.auth-btn .auth-spin i:nth-child(2){animation-delay:.18s;}
.auth-btn .auth-spin i:nth-child(3){animation-delay:.36s;}
@keyframes fsShine{0%,60%{transform:translateX(-160%) skewX(-20deg);}100%{transform:translateX(340%) skewX(-20deg);}}
.auth-foot{margin-top:16px;display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--ui-ink-400);}
.auth-foot a{color:var(--ui-brand-500);font-weight:600;text-decoration:none;}
.auth-foot a:hover{text-decoration:underline;}
.auth-enc{margin-top:14px;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ui-ink-400);}
.auth-enc svg{width:14px;height:14px;color:var(--ui-brand-500);flex:none;}
.auth-slogan{margin-top:18px;text-align:center;font-size:12px;letter-spacing:1px;color:var(--ui-ink-300);
  border-top:1px solid var(--ui-brand-100);padding-top:14px;line-height:1.7;}
.auth-slogan b{color:var(--ui-brand-500);font-weight:700;letter-spacing:2px;}

@media (max-width:840px){
  .auth-split{flex-direction:column;width:92vw;min-height:auto;}
  .auth-left{min-height:320px;justify-content:flex-end;}
  .auth-left-content{padding:0 24px 34px;}
  .auth-left-mark{width:48px;height:48px;border-radius:14px;margin-bottom:16px;}
  .auth-left-mark svg{width:25px;height:25px;}
  .auth-left-name{font-size:20px;}
  .auth-left-dept{font-size:12px;margin-bottom:14px;}
  .auth-left-slogan{font-size:12px;}
  .auth-top{top:16px;left:16px;right:16px;}
  .auth-right{padding:32px 24px;}
}


/* ══════════════════════════════════════════════════════════════════════════
   登记共用组件（★ 2026-09-25 收敛）
   原先这里是"台账内联新建行登记表单"的一整套样式（.sf / .sf-head / .sf-grid /
   .sf-f / .sf-acts-cell …）。该表单已被独立的「登记台」页面取代，样式随代码一起删除，
   只保留**三个登记入口共用**的那几个组件：人员 chips、备注折叠、按钮、小标。
   共用情况：登记台（#dkChips）/ 待发货工作台（#wbChips）共用 .sf-chips + .sf-chip；
   登记台用 .sf-addnote + .sf-notehint + .sf-opt + .sf-req + .sf-lnk + .sf-last；
   待发货工作台的提交按钮用 .sf-btn。
   ══════════════════════════════════════════════════════════════════════════ */
/* 人员 chips：点一下即同时填入包装/报工/发货（实测 98% 的单三人是同一人）。
   按历史频次排序，最常用的人在第一个 —— 常见情况 1 次点击完成原本 9 次交互的活。 */
.sf-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:34px;padding:4px 6px;
  border:1px solid var(--line-strong);border-radius:8px;background:var(--ui-bg-card);box-sizing:border-box}
.sf-chips.is-error{border-color:var(--ui-danger-solid);box-shadow:0 0 0 3px rgba(220,38,38,.10)}
.sf-chip{height:24px;padding:0 10px;border-radius:6px;border:1px solid var(--line-strong);
  background:var(--card);color:var(--txt-2);font-size:12px;font-family:inherit;cursor:pointer;transition:.13s}
.sf-chip:hover{border-color:var(--cyan-bright);color:var(--txt);background:var(--ui-bg-card)}
.sf-chip.on{background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));border-color:transparent;color:#fff;font-weight:600;
  box-shadow:0 4px 10px -6px rgba(68,68,68, .7)}
/* 「沿用上一单」链接与"上一单：XXX"提示 */
.sf-last{margin-left:auto;font-weight:500;color:var(--txt-3);font-size:11px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.sf-lnk{font-size:11px;font-weight:600;color:var(--brand-2);text-decoration:none;padding:2px 4px;border-radius:4px}
.sf-lnk:hover{background:rgba(68,68,68, .08);text-decoration:none}
/* 备注折叠：实测填写率 1/89（1%），收起后不占高度；两种状态都写明"不影响记录状态" */
.sf-addnote{height:34px;padding:0 14px;border-radius:8px;border:1px dashed var(--line-strong);background:var(--ui-bg-card);
  color:var(--txt-2);font-size:12px;font-family:inherit;font-weight:600;cursor:pointer;transition:.13s}
.sf-addnote:hover{border-color:var(--cyan-bright);color:var(--brand-2);border-style:solid}
.sf-notehint{font-size:11px;color:var(--txt-3);line-height:1.5}
.sf-notehint b{color:var(--ui-warn-ink);font-weight:700}
/* 必填星号与「选填」小标 */
.sf-req{color:var(--ui-danger-solid);font-style:normal;font-weight:700}
.sf-opt{margin-left:0;background:transparent;font-weight:500;padding-left:0;font-size:11px;color:var(--txt-3)}
/* 按钮（待发货工作台的提交按钮复用） */
.sf-btn{flex:0 0 auto;height:34px;padding:0 18px;border-radius:8px;border:1px solid transparent;
  font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;transition:.15s}
.sf-btn.ghost{background:var(--ui-bg-card);border-color:var(--line-strong);color:var(--txt-2)}
.sf-btn.ghost:hover{background:var(--card);color:var(--txt)}
.sf-btn.primary{background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));color:#fff;box-shadow:0 6px 16px -8px rgba(68,68,68, .65)}
.sf-btn.primary:hover{filter:brightness(1.07)}
.sf-btn:active{transform:translateY(.5px)}
/* ★ 2026-09-25（⑤ 订单行入口）：订单中心里"还没有发货记录"的单，行内给一个「发货」小入口。
   与旁边那个圆形追溯按钮同风格（小、低调、不抢订单号），点一下即带单跳转发货登记。 */
.oc-ship-btn{display:inline-flex;align-items:center;height:16px;padding:0 6px;margin-left:6px;
  border-radius:8px;background:rgba(86,86,86, .12);color:var(--ui-brand-700);font-size:11px;font-weight:700;
  cursor:pointer;vertical-align:middle;transition:background .15s,color .15s;user-select:none}
.oc-ship-btn:hover{background:var(--ui-brand-700);color:#fff}
.oc-preship-btn,.oc-preship-badge{display:inline-flex;align-items:center;height:16px;padding:0 6px;margin-left:5px;
  border-radius:8px;font-size:10.5px;font-weight:700;line-height:16px;vertical-align:middle;white-space:nowrap}
.oc-preship-btn{background:rgba(217,119,6,.08);color:var(--ui-warn-ink);border:1px solid rgba(217,119,6,.30);cursor:pointer;transition:background .15s,color .15s;user-select:none}
.oc-preship-btn:hover{background:var(--ui-warn-ink);color:#fff}
.oc-preship-btn.is-busy{opacity:.72;cursor:wait;pointer-events:none}
.oc-preship-badge{background:rgba(16,185,129,.11);color:var(--ui-ok-ink);border:1px solid rgba(16,185,129,.28);font-weight:750}
/* ══════════════════════════════════════════════════════════════════════════
   订单中心台账表 · 工整化（★ 2026-09-25）
   实测问题（1440px 视口）：表格是 auto 布局，宽 1538px 而容器只有约 1318px ——
   **横向溢出 256px**，最右的「预计完成」被切在面板外，看数据得左右拖；
   行高 46px、字号 14.5px、内边距 11px 13px，与旁边的发货台账（40px / 12.5px）不是一套节奏；
   列宽还随内容浮动，翻页/切换页签时列位置会变。
   改法与发货台账同一套：固定列宽（colgroup，由 JS 与表头一起生成）+ 单行省略 +
   统一行高 + 极淡竖分隔线；会被截断的列都补了 title 悬停看全文。
   ══════════════════════════════════════════════════════════════════════════ */
.oc-table{table-layout:fixed;width:100%;border-collapse:collapse}
.oc-table th,.oc-table td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;
  text-align:left;padding:0 10px;font-size:12px}
.oc-table thead th{height:38px;background:var(--card);color:var(--txt-3);font-weight:600;
  border-bottom:1px solid var(--line-strong)}
.oc-table thead th+th,.oc-table tbody td+td{border-left:1px solid rgba(68,68,68, .055)}
.oc-table tbody td{height:40px;border-bottom:1px solid var(--line)}
.oc-table tbody tr:last-child td{border-bottom:none}
.oc-table tbody tr:hover{background:rgba(68,68,68, .035)}
.oc-table .oc-num{text-align:right;font-variant-numeric:tabular-nums}
/* 格内徽标/按钮一律不换行；撑不下就随整格省略（整格已加 title，悬停看全文） */
.oc-table td .badge,.oc-table td span,.oc-table td b{white-space:nowrap}
/* 进度条在窄列里收紧：.pbar 自带 min-width:80px，在 8% 列宽下刚好放下；
   这里再兜一层 min-width:0，窗口更窄时让条子自己变短，而不是整格被省略号吃掉 */
.oc-table .pbar{margin:0;min-width:0}
.oc-table td .oc-trace-btn,.oc-table td .oc-ship-btn,.oc-table td .oc-preship-btn,.oc-table td .oc-preship-badge,.oc-table td .oc-tag{flex:none}
/* ══════════════════════════════════════════════════════════════════════════
   登记台（★ 2026-09-25 新交互页面）：扫码 → 核对 → 登记，一屏一件事
   布局：居中的两栏 —— 左侧主卡（三步纵向，最多 900px）+ 右侧「本次已登记」日志栏。
   进入登记台会同时进入"登记模式"（收起 Hero/KPI，整页高度都给登记）。
   ★ 2026-09-25 修：原来这一块不收宽度，宽窗口下整块贴着左边、右侧留一大片空白
   （用户截图里很明显）。现在整块居中并限宽 1240px，两边留白对称，
   看起来才是"一个页面"而不是"贴在左边的两栏"。
   ══════════════════════════════════════════════════════════════════════════ */
.sp-page-desk{height:100%;min-height:0;margin:0 auto;flex-direction:row;gap:14px;align-items:stretch;
  width:100%;max-width:1240px}
.dk-main{flex:1 1 auto;min-width:0;max-width:900px;display:flex;flex-direction:column;gap:14px;
  padding:16px 18px;border-radius:12px;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);overflow:auto}
.dk-head{display:flex;align-items:baseline;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.dk-head .sp-btn{margin-left:auto;align-self:center}
.dk-title{font-size:14px;font-weight:700;color:var(--brand);letter-spacing:.2px}
.dk-sub{font-size:12px;color:var(--txt-3)}
/* 步骤块：序号 + 内容，形成清晰的先后节奏（而不是 9 个字段一次摊开） */
.dk-step{display:flex;gap:12px;align-items:flex-start;animation:dkIn .18s ease-out}
@keyframes dkIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.dk-no{flex:0 0 22px;height:22px;margin-top:2px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));color:#fff;font-size:12px;font-weight:700}
.dk-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:8px}
.dk-label{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--txt-2)}
.dk-scan-row{display:flex;gap:10px}
.dk-scan{flex:1 1 auto;height:44px;padding:0 14px;border:1px solid var(--line-strong);border-radius:10px;background:var(--ui-bg-card);
  font-size:14px;font-weight:600;letter-spacing:.4px;color:var(--txt);font-family:inherit;outline:none;box-sizing:border-box;
  transition:border-color .15s,box-shadow .15s}
.dk-scan:focus{border-color:var(--cyan-bright);box-shadow:0 0 0 3px rgba(115,115,115, .14)}
.dk-scan::placeholder{font-size:13px;font-weight:400;letter-spacing:0;color:var(--ui-ink-400)}
.dk-hint{font-size:12px;color:var(--txt-3);min-height:17px}
.dk-hint.ok{color:var(--ui-ok-solid);font-weight:600}
.dk-hint.warn{color:var(--ui-warn-ink);font-weight:600}
.dk-hint.err{color:var(--ui-danger-ink);font-weight:600}
/* 核对卡：把系统知道的这一单摊开给你对（防发错的正向做法） */
.dk-card{border:1px solid var(--line);border-radius:10px;background:var(--ui-bg-card);padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.dk-card.prod{border-color:rgba(217,119,6,.4);background:var(--ui-warn-bg)}
.dk-card.manual{border-color:rgba(217,119,6,.5);background:var(--ui-warn-bg)}
.dk-card-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dk-oid{font-size:16px;font-weight:800;color:var(--brand);letter-spacing:.4px}
.dk-cust{font-size:13px;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.dk-kvs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px 14px}
.dk-kv{display:flex;flex-direction:column;gap:2px;min-width:0}
.dk-k{font-size:11px;color:var(--txt-3)}
.dk-v{font-size:13px;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dk-card-tip{font-size:11px;color:var(--txt-3)}
.dk-dup{padding:8px 10px;border-radius:8px;background:rgba(220,38,38,.09);border:1px solid rgba(220,38,38,.3);
  color:var(--ui-danger-ink);font-size:12px;font-weight:600;line-height:1.5}
.dk-manual-note{font-size:12px;line-height:1.6;color:var(--ui-warn-ink)}
.dk-tag{font-size:11px;font-weight:700;padding:2px 8px;border-radius:20px}
.dk-tag.ok{background:rgba(10,112,67,.14);color:var(--ui-ok-solid)}
.dk-tag.warn{background:rgba(217,119,6,.16);color:var(--ui-warn-ink)}
/* 发货信息的栅格：原来两栏等宽，导致「发货人员」只有一半宽度、8 个 chips 折成两行；
   改成「日期定宽 200px + 人员占满剩余」—— 日期本来就不需要那么宽。 */
.dk-grid{display:grid;grid-template-columns:200px minmax(0,1fr);gap:10px 16px}
.dk-f{display:flex;flex-direction:column;gap:6px;min-width:0}
/* ══ 发货人员：同一人 / 分别指定（★ 2026-09-25 补）════════════════════════════
   默认「同一人」——实测 98% 的单（87/89）包装＝报工＝发货是同一人，一行 chips
   点一下即填满三格；确实要分开时切到「分别指定」，三格先继承当前选择，只改不同的那格。 */
.sf-pmode{display:flex;align-items:center;gap:8px;min-height:22px;flex-wrap:wrap}
.sf-seg2{display:inline-flex;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;background:var(--ui-bg-card)}
.sf-seg2-i{padding:2px 10px;font-size:11px;font-weight:600;color:var(--txt-2);cursor:pointer;user-select:none;transition:.13s}
.sf-seg2-i+.sf-seg2-i{border-left:1px solid var(--line-strong)}
.sf-seg2-i:hover{background:var(--card);color:var(--txt)}
.sf-seg2-i.on{background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));color:#fff}
.sf-pmode .sf-last{margin-left:auto;max-width:200px}
.sf-role{display:flex;align-items:center;gap:8px}
.sf-role-t{flex:0 0 52px;font-size:11px;font-weight:600;color:var(--txt-2);white-space:nowrap;display:inline-flex;align-items:center;gap:2px}
.sf-role .sf-chips{flex:1 1 auto;min-width:0}
.dk-f>label{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--txt-2);line-height:1.2}
.dk-f>label .sf-lnk{margin-left:auto}
.dk-in{width:100%;height:34px;padding:0 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--ui-bg-card);
  font-size:13px;color:var(--txt);font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s,box-shadow .15s}
.dk-in:focus{border-color:var(--cyan-bright);box-shadow:0 0 0 3px rgba(115,115,115, .13)}
textarea.dk-note{height:auto;min-height:52px;padding:8px 10px;line-height:1.5;resize:vertical}
.dk-hint2{font-size:11px;color:var(--txt-3)}
.dk-note-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dk-foot{display:flex;align-items:center;gap:10px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line)}
.dk-err{flex:1 1 auto;min-width:0;font-size:12px;font-weight:700;color:var(--ui-danger-ink);line-height:1.5}
.dk-btn{flex:0 0 auto;height:38px;padding:0 20px;border-radius:8px;border:1px solid transparent;font-size:13px;
  font-weight:700;font-family:inherit;cursor:pointer;transition:.15s}
.dk-btn.ghost{background:var(--ui-bg-card);border-color:var(--line-strong);color:var(--txt-2);font-weight:600}
.dk-btn.ghost:hover{background:var(--card);color:var(--txt)}
.dk-btn.primary{background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));color:#fff;box-shadow:0 6px 16px -8px rgba(68,68,68, .65)}
.dk-btn.primary:hover{filter:brightness(1.07)}
/* 「已武装」：第一次点击后的等待确认态（4 秒内再点一次才真正提交） */
.dk-btn.primary.armed{background:linear-gradient(135deg,var(--ui-warn-solid),var(--ui-warn-ink));box-shadow:0 6px 16px -8px rgba(180,83,9,.7);
  animation:dkPulse .9s ease-in-out infinite}
@keyframes dkPulse{0%,100%{transform:none}50%{transform:scale(1.015)}}
.dk-btn:disabled{opacity:.6;cursor:not-allowed;filter:grayscale(.35)}
/* 右侧：本次已登记 */
.dk-side{flex:0 0 288px;display:flex;flex-direction:column;gap:8px;padding:14px;border-radius:12px;
  background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);overflow:auto}
.dk-side-h{font-size:13px;font-weight:700;color:var(--brand)}
.dk-side-h b{font-size:14px}
.dk-log{display:flex;flex-direction:column;gap:6px}
.dk-log-item{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:8px;background:var(--card);
  border:1px solid var(--line)}
.dk-log-item b{font-size:12px;color:var(--brand)}
.dk-log-cust{font-size:11px;color:var(--txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dk-log-t{font-size:11px;color:var(--txt-3);font-variant-numeric:tabular-nums}
.dk-log-empty{font-size:12px;color:var(--txt-3);padding:8px 2px}
.dk-side-tip{margin-top:auto;font-size:11px;color:var(--txt-3);line-height:1.5}
@media (max-width:1280px){
  .sp-page-desk{flex-direction:column}
  .dk-side{flex:0 0 auto;max-height:200px}
  .dk-kvs{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dk-grid{grid-template-columns:minmax(0,1fr)}
}
/* ══════════════════════════════════════════════════════════════════════════
   待发货工作台（★ 2026-09-25 新登记方式）—— 清单驱动 + 一次提交 N 条
   布局：整页高度撑满，顶部一条"扫码 + 筛选 + 统计 + 批量动作"，下面左清单右批次设置。
   与台账同源：同一套 --line/--panel/--brand、12px 圆角、12.5px 表头字号。
   ══════════════════════════════════════════════════════════════════════════ */
.sp-page-work{height:100%;min-height:0;margin-top:0}
.wb-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;border-radius:12px;
  background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}
.wb-scan-wrap{flex:1 1 260px;min-width:220px}
.wb-scan{width:100%;height:36px;padding:0 12px;border:1px solid var(--line-strong);border-radius:8px;
  background:var(--ui-bg-card);font-size:13px;color:var(--txt);font-family:inherit;outline:none;box-sizing:border-box}
.wb-scan:focus{border-color:var(--cyan-bright);box-shadow:0 0 0 3px rgba(115,115,115, .13)}
.wb-scan::placeholder{color:var(--ui-ink-400)}
.wb-filters{display:flex;gap:6px;flex:0 0 auto}
.wb-fchip{padding:4px 10px;border-radius:20px;border:1px solid var(--line-strong);background:var(--ui-bg-card);
  font-size:12px;color:var(--txt-2);cursor:pointer;user-select:none;transition:.13s}
.wb-fchip b{font-weight:700;color:var(--txt)}
.wb-fchip:hover{border-color:var(--cyan-bright)}
.wb-fchip.on{background:linear-gradient(135deg,var(--ui-brand-700),var(--ui-brand-900));border-color:transparent;color:#fff}
.wb-fchip.on b{color:#fff}
.wb-topstat{flex:1 1 auto;font-size:12px;color:var(--txt-2);text-align:right;min-width:180px}
.wb-topstat b{color:var(--txt);font-weight:700}
.wb-topstat .wb-sel-n{color:var(--brand);font-size:13px}
.wb-topacts{display:flex;gap:8px;flex:0 0 auto}
.wb-body{display:flex;gap:14px;flex:1 1 auto;min-height:0;margin-top:14px}
.wb-list-wrap{flex:1 1 auto;min-width:0;overflow:auto;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--shadow)}
.wb-side{flex:0 0 306px;display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:12px;
  background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);overflow:auto}
.wb-side-h{font-size:13px;font-weight:700;color:var(--brand);display:flex;align-items:center;gap:8px}
.wb-side-tag{font-size:11px;font-weight:600;padding:2px 6px;border-radius:4px;background:rgba(68,68,68, .07);color:var(--txt-3)}
.wb-f{display:flex;flex-direction:column;gap:6px;min-width:0}
.wb-f>label{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--txt-2);line-height:1.2}
.wb-f>label .sf-lnk{margin-left:auto}
.wb-in{width:100%;height:34px;padding:0 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--ui-bg-card);
  font-size:13px;color:var(--txt);font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s,box-shadow .15s}
textarea.wb-in{height:auto;padding:8px 10px;line-height:1.5;resize:vertical}
.wb-in:focus{border-color:var(--cyan-bright);box-shadow:0 0 0 3px rgba(115,115,115, .13)}
.wb-hint{font-size:11px;color:var(--txt-3);line-height:1.5}
.wb-side-foot{margin-top:auto;display:flex;flex-direction:column;gap:8px}
.wb-msg{font-size:12px;line-height:1.55;color:var(--txt-3);word-break:break-all}
.wb-msg.ok{color:var(--ui-ok-solid);font-weight:600}
.wb-msg.err{color:var(--ui-danger-ink);font-weight:600}
.wb-msg.warn{color:var(--ui-warn-ink);font-weight:600}
.wb-submit{width:100%;height:38px;font-size:13px}
.wb-submit:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.4)}
/* 清单表格：与台账同款固定列宽 + 单行省略，行高 40px。
   ⚠️ 列宽是**实测反推**的：右侧批次栏占 306px，清单实际只有约 838px 可用 ——
   第一版按"整页宽"拍的百分比把「订单日期」压到 9.5%（79px），`2026-09-21` 显示成
   `2026-09…`；「当前工序」「纯化方式」也都放不下（实测 `HPLC, UPAGE, DSL` 需要 122px、
   `合成、氨解、分装、接酯、纯化` 需要 196px）。
   取舍：**去掉「纯化方式」列** —— 工作台是"该发哪些单"的决策台，纯化方式不影响发不发，
   而它的宽度给「客户单位/当前工序」更值；纯化方式在发货台账里本来就有。
   定完实测：订单号/订单日期/状态/操作/当前工序 全部 0 截断，只剩客户单位超长名仍省略
   （有 title 悬停，与台账同一取舍）。 */
.wb-table{table-layout:fixed;width:100%;border-collapse:collapse}
.wb-table col.wb-c-chk{width:42px}
.wb-table col.wb-c-oid{width:17.3%}
.wb-table col.wb-c-cust{width:27.7%}
.wb-table col.wb-c-date{width:11%}
.wb-table col.wb-c-st{width:21%}
.wb-table col.wb-c-flag{width:8%}
.wb-table col.wb-c-act{width:9%}
.wb-table th,.wb-table td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;
  text-align:left;padding:0 10px;font-size:12px}
.wb-table thead th{height:38px;background:var(--card);color:var(--txt-3);font-weight:600;
  border-bottom:1px solid var(--line-strong)}
.wb-table thead th+th,.wb-table tbody td+td{border-left:1px solid rgba(68,68,68, .055)}
.wb-table tbody td{height:40px;border-bottom:1px solid var(--line)}
.wb-table tbody tr:last-child td{border-bottom:none}
.wb-table tbody tr:hover{background:rgba(68,68,68, .035)}
.wb-table tbody tr.wb-on{background:rgba(86,86,86, .075)}
.wb-table tbody tr.wb-on td{border-bottom-color:rgba(68,68,68, .16)}
.wb-th-chk,.wb-td-chk{text-align:center;padding:0}
.wb-td-chk input,.wb-th-chk input{margin:0;cursor:pointer;accent-color:var(--brand)}
.wb-td-oid b{font-weight:700}
.wb-td-act{text-align:center}
.wb-td-act .sp-btn{padding:4px 10px;font-size:12px}
.wb-num{font-variant-numeric:tabular-nums}
.wb-tag{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:4px;font-size:11px;font-weight:700;vertical-align:middle}
.wb-tag.prod{background:rgba(217,119,6,.14);color:var(--ui-warn-ink)}
.wb-tag.done{background:rgba(10,112,67,.14);color:var(--ui-ok-solid)}
.wb-tag.late{background:rgba(220,38,38,.12);color:var(--ui-danger-ink)}
.wb-tag.hand{background:rgba(115,115,115, .12);color:var(--ui-brand-700)}
/* 合作订单：与订单中心「合作」徽标同色系（紫），含义是"交期由合作部门决定" */
.wb-tag.coop{background:rgba(217,83,138,.14);color:var(--pl-pink)}
/* 台账里订单号后的「合作」小标（.sp-tag 已有基础样式，这里只给合作单换色） */
.sp-tag-coop{background:rgba(217,83,138,.14)!important;color:var(--pl-pink)!important}
/* 「只看合作」快捷筛选：与"只看延期发货"区分开（紫 vs 红） */
.sp-qchip-coop.on{background:linear-gradient(135deg,var(--pl-pink),var(--pl-pink-ink));border-color:transparent;color:#fff}
.sp-qchip-coop.on b{color:#fff}
.sp-empty{padding:28px 0;text-align:center;color:var(--txt-3);font-size:13px}
/* 批量确认弹层 */
.wb-cf-h{font-size:16px;font-weight:700;color:var(--txt);margin-top:8px}
.wb-cf-sub{margin-top:10px;font-size:13px;line-height:1.7;color:var(--txt-2)}
.wb-cf-sub b{color:var(--brand)}
.wb-cf-list{margin-top:12px;max-height:38vh;overflow:auto;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.6)}
.wb-cf-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--line);font-size:13px}
.wb-cf-item:last-child{border-bottom:none}
.wb-cf-item b{color:var(--brand);min-width:120px}
.wb-cf-item span{color:var(--txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-cf-foot{margin-top:18px;text-align:center}
/* 窄窗口：工作台改为上下堆叠，批次设置整行放下 */
@media (max-width:1280px){
  .wb-body{flex-direction:column}
  .wb-side{flex:0 0 auto}
  .wb-topstat{text-align:left}
}
/* ══════════════════════════════════════════════════════════════════════════
   登记模式（★ 2026-09-25）：点「登记发货」时收起 Hero 与 KPI 卡片
   实测依据：900px 视口下表格可视区只有 370px，而登记表单高 325px —— 表单一打开，
   数据行就被整个挤出屏幕（登记时一条数据都看不到）。而登记时根本不需要看 KPI，
   所以把这段高度让给表格：表格区 370px → 600px+，表单与数据同屏。
   类名挂在 #view 而不是 .sp-page：paintShip 每次都重建 .sp-page，挂它上面会掉。
   ══════════════════════════════════════════════════════════════════════════ */
#view.sp-compact .sp-hero{display:none}
#view.sp-compact .sp-kpi-grid{display:none}
#view.sp-compact .sp-page{gap:10px;margin-top:8px}
/* 收起时留一条极窄提示，避免用户以为页面出了问题（也给出"复原"的位置感） */
#view.sp-compact .sp-page::after{content:'';display:block}

/* ===== 看板可读性 & 工序列滚动优化 ===== */
.kpi{padding:18px 20px}
.kpi .k{font-size:13px}
.kpi .v{font-size:32px}
.kpi .s{font-size:12px}

.board{grid-template-columns:repeat(8,minmax(200px,1fr));gap:14px}
.stcol{padding:12px;min-height:150px;max-height:calc(100vh - 380px);overflow-y:auto;position:relative}
.stcol .sh{font-size:13px;margin-bottom:10px;padding-bottom:10px}
.stcol .cnt{font-size:12px;padding:2px 10px}
.stcol::-webkit-scrollbar{width:6px}
.stcol::-webkit-scrollbar-thumb{background:rgba(198,198,198, .35);border-radius:4px}
.stcol::-webkit-scrollbar-thumb:hover{background:rgba(198,198,198, .55)}

.ocard{padding:12px 12px 12px;margin-bottom:10px;overflow-x:clip;overflow-y:visible;box-sizing:border-box}
.ocard .od{font-size:13px}
.ocard .oc{font-size:12px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ocard .ometa{font-size:12px}
.ocard .pbar{height:6px;margin-top:6px}

@media (max-width:1440px){
  .board{grid-template-columns:repeat(8,minmax(180px,1fr))}
  .stcol{max-height:calc(100vh - 360px)}
}

@media(max-width:760px){
  .board{grid-template-columns:repeat(4,minmax(160px,1fr))}
}

/* ===== 订单中心：日期切片器 ===== */
.due-slicer{display:inline-flex;align-items:center;gap:6px;vertical-align:top;margin:0 4px;flex-wrap:wrap}
.due-slicer .chip{padding:4px 10px;font-size:12px;border-radius:999px;background:var(--bg-1);border:1px solid var(--line);color:var(--txt-2);cursor:pointer;user-select:none;white-space:nowrap}
.due-slicer .chip:hover{background:var(--bg-2);color:var(--txt)}
.due-slicer .chip.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.due-slicer .chip .cnt{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:16px;padding:0 6px;border-radius:8px;background:rgba(86,86,86, .10);color:var(--txt-2);font-size:12px;font-weight:700;margin-left:2px;line-height:1}
.due-slicer .chip.active .cnt{background:rgba(255,255,255,.22);color:#fff}
.btn-sm{display:inline-flex;align-items:center;justify-content:center;padding:4px 10px;border-radius:6px;font-size:12px;font-weight:500;color:var(--txt-2);background:transparent;border:1px solid var(--line);cursor:pointer;transition:.18s}
.btn-sm:hover{color:var(--ui-danger-solid);border-color:rgba(220,38,38,.3);background:rgba(220,38,38,.06)}

/* ---- 图标按钮（放大倍数删除行） ---- */
.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--txt-2);cursor:pointer;transition:.18s}
.btn-icon:hover{background:var(--panel);color:var(--red)}
.btn-icon.danger:hover{background:rgba(220,38,38,.1);border-color:rgba(220,38,38,.25);color:var(--red)}
.btn-icon svg{pointer-events:none}

  /* 仅最高权限账号 BLG181 可见的菜单项 */
  body:not(.is-super) .nav-super { display: none !important; }

/* ===== 交互式抽屉 (Drawer) ===== */
.drawer { position: fixed; top: 0; right: 0; width: 900px; max-width: 96vw; height: 100vh; z-index: 9999; pointer-events: none; }
.drawer.open { pointer-events: auto; }
.drawer-mask { position: absolute; inset: 0; background: rgba(28,28,28, .42); backdrop-filter: blur(3px); opacity: 0; transition: opacity .25s ease; }
.drawer.open .drawer-mask { opacity: 1; }
.drawer-panel { position: absolute; top: 0; right: 0; width: 100%; height: 100%; background: var(--ui-bg-card); box-shadow: -10px 0 40px rgba(0,0,0,.15); display: flex; flex-direction: column; transform: translateX(100%); transition: transform .3s cubic-bezier(.4,0,.2,1); }
.drawer.open .drawer-panel { transform: translateX(0); }
.drawer-header { padding: 20px 24px 16px; border-bottom: 1px solid rgba(28,28,28, .06); display: flex; flex-direction: column; gap: 4px; position: relative; }
.drawer-title { font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -.01em; }
.drawer-sub { font-size:12px; color: var(--text-secondary); }
.drawer-close { position: absolute; top: 18px; right: 18px; width: 36px; height: 36px; border: none; background: rgba(28,28,28, .05); border-radius: 10px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all .2s; color: var(--text); }
.drawer-close:hover { background: rgba(220,38,38,.08); color: var(--ui-danger-solid); transform: scale(1.05); }
.drawer-close svg { width: 18px; height: 18px; }
.drawer-body { flex: 1; overflow-y: auto; padding: 16px 24px 24px; }
.drawer-empty { text-align: center; color: var(--text-secondary); padding: 40px 0; font-size: 13px; }
.drawer-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.drawer-table th { text-align: left; padding: 10px 8px; border-bottom: 2px solid rgba(28,28,28, .1); color: var(--text-secondary); font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; position: sticky; top: 0; background: var(--ui-bg-card); }
.drawer-table td { padding: 12px 8px; border-bottom: 1px solid rgba(28,28,28, .06); color: var(--text); }
.drawer-table tr:hover td { background: rgba(86,86,86, .03); }
.drawer-badge { display: inline-flex; padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 600; }
.drawer-badge.critical { background: rgba(220,38,38,.1); color: var(--ui-danger-solid); }
.drawer-badge.warning { background: rgba(217,119,6,.1); color: var(--ui-warn-ink); }
.drawer-badge.muted { background: rgba(86,86,86, .1); color: var(--ui-brand-700); }
.drawer-badge.success { background: rgba(10,112,67,.1); color: var(--ui-ok-solid); }
.drawer-link { color: var(--ui-brand-700); cursor: pointer; text-decoration: none; font-weight: 600; }
.drawer-link:hover { text-decoration: underline; }

/* ===== 可折叠面板 (Collapsible) ===== */
.analyze-collapsible { margin: 0; border-radius: 16px; border: 1px solid rgba(28,28,28, .06); background: var(--ui-bg-card); box-shadow: 0 2px 10px rgba(28,28,28, .03); overflow: hidden; }
.analyze-header { padding: 14px 20px; cursor: pointer; display: flex; align-items: center; justify-content: space-between; background: linear-gradient(135deg, rgba(12,154,184,.04) 0%, rgba(176,58,106,.04) 100%); transition: background .2s; user-select: none; }
.analyze-header:hover { background: linear-gradient(135deg, rgba(12,154,184,.08) 0%, rgba(176,58,106,.08) 100%); }
.analyze-title { display: flex; align-items: center; font-weight: 700; color: var(--text); font-size:14px; }
.analyze-title svg { flex-shrink: 0; }
.analyze-toggle { color: var(--text-secondary); font-size: 13px; display: flex; align-items: center; gap: 4px; }
.analyze-toggle svg { transition: transform .2s; }

/* ===== 卡片点击钻取交互 ===== */
.stat-card.drillable { cursor: pointer; transition: transform .2s, box-shadow .2s, border-color .2s; }
.stat-card.drillable:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(28,28,28, .08); border-color: rgba(86,86,86, .25); }
.stat-card.drillable::after { content: '→'; position: absolute; top: 16px; right: 16px; color: rgba(28,28,28, .15); font-size: 14px; transition: right .2s, color .2s; }
.stat-card.drillable:hover::after { right: 12px; color: var(--text-secondary); }

/* feed 列表项点击 */
.feed-card.clickable { cursor: pointer; }
.feed-card.clickable:hover { transform: translateX(2px); }

  /* ★ 2026-09-26 第三十八轮：原「Enhanced Card Styles」里针对事件卡的 8 条覆盖全删 ——
     它们属于已被替换掉的旧结构（.live-order/.live-customer/.live-desc/.live-time/.live-btn/.live-meta/
     .live-foot/.live-station-badge），且因为写在文件更后面，会盖掉新定义。
     ★ 第三十九轮：事件主体换成行列表后，新结构全部由上面的 .live-rows / .live-row 一套撑起
     （.live-oid/.live-cust/.live-desc/.live-sub/.live-qty/.live-when/.live-open），
     这里同样不保留任何 .live-* 覆盖 —— 覆盖写在文件更后面会盖掉上面的成列宽度定义。 */

/* ============ 生产实时监控台 v2 ============ */
/* ===== 生产实时监控台 v3 · UICraft 美化版 ===== */

/* --- 设计令牌 --- */
.pm-container {
  --pm-radius: 14px;
  --pm-radius-sm: 10px;
  --pm-radius-lg: 18px;
  --pm-shadow-sm: 0 1px 2px rgba(68,68,68, .04), 0 2px 8px -2px rgba(68,68,68, .06);
  --pm-shadow-md: 0 2px 4px rgba(68,68,68, .04), 0 8px 24px -6px rgba(68,68,68, .10);
  --pm-shadow-lg: 0 4px 12px rgba(68,68,68, .06), 0 20px 48px -12px rgba(68,68,68, .14);
  --pm-ease-out: cubic-bezier(0.25, 1, 0.5, 1);
  --pm-ease-decisive: cubic-bezier(0.16, 1, 0.3, 1);
  display:flex;
  flex-direction:column;
  gap:20px;
}

/* --- 入口动画 --- */
@keyframes pm-fade-in-up {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes pm-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
/* ★ 2026-10-09 性能收口：进度条入场由 width（触发重排）改成 scaleX（合成属性） */
@keyframes pm-progress-fill {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
@keyframes pm-pulse-soft {
  0%, 100% { opacity: 1; }
  50% { opacity: .6; }
}
@keyframes pm-shimmer {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(120%); }
}

.pm-container > * {
  animation: pm-fade-in-up 0.5s var(--pm-ease-out) backwards;
}
.pm-container > *:nth-child(1) { animation-delay: 0ms; }
.pm-container > *:nth-child(2) { animation-delay: 80ms; }
.pm-container > *:nth-child(3) { animation-delay: 160ms; }
.pm-container > *:nth-child(4) { animation-delay: 240ms; }
.pm-container > *:nth-child(5) { animation-delay: 320ms; }

/* --- 面板基础 --- */
.pm-section {
  background: linear-gradient(180deg, rgba(255,255,255,.96), rgba(255,255,255,.92));
  border:1px solid var(--line);
  border-radius:var(--pm-radius);
  padding:18px 20px;
  position:relative;
  box-shadow: var(--pm-shadow-sm);
  transition: box-shadow .3s var(--pm-ease-out), transform .3s var(--pm-ease-out);
}
.pm-section:hover {
  box-shadow: var(--pm-shadow-md);
}
.pm-section::before {
  content:'';
  position:absolute;
  top:0; left:0; right:0;
  height:3px;
  background: linear-gradient(90deg, var(--ui-brand-700), var(--ui-brand-500), var(--pl-cyan));
  border-radius: var(--pm-radius) var(--pm-radius) 0 0;
  opacity:.85;
}
.pm-section-title {
  display:flex; align-items:center; gap:10px;
  font-size:14px; font-weight:800;
  color:var(--txt);
  margin-bottom:16px;
  letter-spacing:.3px;
}
.pm-section-title .bar {
  width:4px; height:16px;
  background: linear-gradient(180deg, var(--ui-brand-700), var(--ui-brand-500));
  border-radius:4px;
}
.pm-en-title {
  margin-left:6px;
  font-size:12px;
  color:var(--txt-3);
  letter-spacing:1.5px;
  font-weight:500;
  text-transform:uppercase;
}

/* --- 工序负载分布 --- */
.pm-station-load-grid {
  display:flex; flex-direction:column;
  gap:10px;
}
.pm-station-row {
  display:grid;
  grid-template-columns:174px 1fr 46px;
  align-items:center;
  gap:14px;
  padding:10px 4px;
  transition: background .2s var(--pm-ease-out);
  border-radius: 10px;
}
.pm-station-row:hover {
  background: rgba(68,68,68, .03);
}
.pm-station-name {
  font-size:13px;
  font-weight:700;
  display:flex; align-items:center; gap:8px;
  letter-spacing:.2px;
  white-space:nowrap;
  min-width:0;
  overflow:visible;
}
.pm-station-name .pm-txt {
  flex:0 0 auto;
  white-space:nowrap;
}
.pm-hot {
  flex:0 0 auto;
  font-size:12px;
  line-height:1;
  padding:4px 10px;
  border-radius:6px;
  white-space:nowrap;
  background: linear-gradient(135deg, rgba(220,38,38,.15), rgba(220,38,38,.08));
  color:var(--ui-danger-solid);
  font-weight:700;
  letter-spacing:.4px;
  animation: pm-pulse-soft 2s ease-in-out infinite;
  border:1px solid rgba(220,38,38,.2);
  box-shadow: 0 1px 3px rgba(220,38,38,.12);
}
.pm-station-bar-wrap {
  height:16px;
  background: linear-gradient(180deg, rgba(68,68,68, .06), rgba(68,68,68, .10));
  border-radius:8px;
  overflow:hidden;
  position:relative;
  box-shadow: inset 0 1px 2px rgba(0,0,0,.08);
}
.pm-station-bar {
  height:100%;
  border-radius:8px;
  transition: width .6s var(--pm-ease-decisive);
  position:relative;
  transform-origin:left center;
  animation: pm-progress-fill .8s var(--pm-ease-out);
}
.pm-station-bar::after {
  content:'';
  position:absolute; inset:0;
  background: linear-gradient(90deg,
    transparent,
    rgba(255,255,255,.3) 50%,
    transparent);
  transform:translateX(-120%);will-change:transform;
  animation: pm-shimmer 2s ease-in-out infinite;
  border-radius: inherit;
}
.pm-station-count {
  font-size:14px;
  font-weight:800;
  text-align:right;
  font-variant-numeric:tabular-nums;
  letter-spacing:.3px;
}

/* --- 顶部行布局 --- */
.pm-top-row {
  display:grid;
  grid-template-columns: 1fr 1.2fr;
  gap:20px;
}

/* --- 通用面板 --- */
.pm-panel {
  background: linear-gradient(180deg, rgba(255,255,255,.96), rgba(255,255,255,.92));
  border:1px solid var(--line);
  border-radius:var(--pm-radius);
  padding:18px;
  position:relative;
  box-shadow: var(--pm-shadow-sm);
  transition: box-shadow .3s var(--pm-ease-out), transform .3s var(--pm-ease-out);
}
.pm-panel:hover {
  box-shadow: var(--pm-shadow-md);
}
.pm-panel-title {
  font-size:14px;
  font-weight:800;
  color:var(--txt);
  margin-bottom:14px;
  display:flex; align-items:center; gap:10px;
  letter-spacing:.3px;
}
.pm-icon {
  font-size:16px;
}
.pm-total-alerts {
  margin-left:auto;
  font-size:12px;
  font-weight:800;
  background: linear-gradient(135deg, rgba(220,38,38,.15), rgba(220,38,38,.08));
  color:var(--ui-danger-solid);
  padding:4px 10px;
  border-radius:10px;
  letter-spacing:.5px;
  border:1px solid rgba(220,38,38,.2);
}

/* --- 预警面板 --- */
.pm-alert-list {
  display:flex; flex-direction:column;
  gap:10px;
}
.pm-alert-item {
  display:flex; align-items:center; gap:12px;
  padding:12px 14px;
  border-radius:var(--pm-radius-sm);
  cursor:pointer;
  transition: all .25s var(--pm-ease-out);
  border:1px solid transparent;
  position:relative;
  overflow:hidden;
}
.pm-alert-item::before {
  content:'';
  position:absolute;
  left:0; top:0; bottom:0;
  width:3px;
  border-radius:4px 0 0 4px;
  opacity:.8;
}
.pm-alert-item:hover {
  transform: translateX(3px);
  box-shadow: var(--pm-shadow-md);
}
.pm-alert-critical {
  background: linear-gradient(90deg, rgba(220,38,38,.10), rgba(220,38,38,.04));
  border-color: rgba(220,38,38,.18);
}
.pm-alert-critical::before { background: linear-gradient(180deg, var(--ui-danger-solid), var(--ui-danger-solid)); }
.pm-alert-critical:hover {
  background: linear-gradient(90deg, rgba(220,38,38,.14), rgba(220,38,38,.06));
}
.pm-alert-warning {
  background: linear-gradient(90deg, rgba(217,119,6,.10), rgba(217,119,6,.04));
  border-color: rgba(217,119,6,.18);
}
.pm-alert-warning::before { background: linear-gradient(180deg, var(--ui-warn-solid), var(--ui-warn-solid)); }
.pm-alert-warning:hover {
  background: linear-gradient(90deg, rgba(217,119,6,.14), rgba(217,119,6,.06));
}
.pm-alert-high {
  background: linear-gradient(90deg, rgba(217,119,6,.10), rgba(217,119,6,.04));
  border-color: rgba(217,119,6,.18);
}
.pm-alert-high::before { background: linear-gradient(180deg, var(--ui-warn-solid), var(--ui-warn-solid)); }
.pm-alert-high:hover {
  background: linear-gradient(90deg, rgba(217,119,6,.14), rgba(217,119,6,.06));
}
.pm-alert-info {
  background: linear-gradient(90deg, rgba(10,112,67,.10), rgba(10,112,67,.04));
  border-color: rgba(10,112,67,.18);
}
.pm-alert-info::before { background: linear-gradient(180deg, var(--ui-ok-solid), var(--ui-ok-solid)); }
.pm-alert-info:hover {
  background: linear-gradient(90deg, rgba(10,112,67,.14), rgba(10,112,67,.06));
}
.pm-alert-icon {
  font-size:18px;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,.1));
}
.pm-alert-info {
  flex:1;
  display:flex; flex-direction:column;
  gap:2px;
}
.pm-alert-label {
  font-size:12px;
  font-weight:700;
  color:var(--txt);
  letter-spacing:.3px;
}
.pm-alert-count {
  font-size:18px;
  font-weight:800;
  color:var(--txt);
  font-variant-numeric:tabular-nums;
  line-height:1.1;
}
.pm-alert-count span {
  font-size:12px;
  color:var(--txt-3);
  font-weight:600;
  letter-spacing:.3px;
}
.pm-alert-action {
  font-size:12px;
  color:var(--txt-3);
  font-weight:700;
  letter-spacing:.5px;
  transition: color .2s, transform .2s;
}
.pm-alert-item:hover .pm-alert-action {
  color:var(--brand);
  transform: translateX(2px);
}
.pm-no-alerts {
  text-align:center;
  padding:28px 16px;
  color:var(--txt-3);
  font-size:13px;
  font-weight:600;
}

/* --- 生产概况 --- */
.pm-overview-panel {
  background: linear-gradient(135deg, rgba(255,255,255,.98), rgba(249,249,249, .94));
  border:1px solid var(--line);
  border-radius:var(--pm-radius);
}
.pm-overview-grid {
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:8px;
}
.pm-overview-item {
  text-align:center;
  padding:12px 8px;
  border-radius:var(--pm-radius-sm);
  transition: all .25s var(--pm-ease-out);
  position:relative;
}
.pm-overview-item:hover {
  background: rgba(68,68,68, .04);
  transform: translateY(-2px);
}
.pm-overview-val {
  font-size:24px;
  font-weight:900;
  font-variant-numeric:tabular-nums;
  line-height:1.1;
  letter-spacing:-.5px;
  background-clip: text;
  -webkit-background-clip: text;
}
.pm-overview-label {
  font-size:12px;
  color:var(--txt-3);
  font-weight:700;
  margin-top:6px;
  letter-spacing:.8px;
  text-transform:uppercase;
}

/* --- 工序分组 --- */
.pm-stations-wrap {
  display:flex; flex-direction:column;
  gap:16px;
}
.pm-station-section {
  background: linear-gradient(180deg, rgba(255,255,255,.97), rgba(255,255,255,.93));
  border:1px solid var(--line);
  border-radius:var(--pm-radius);
  overflow:hidden;
  box-shadow: var(--pm-shadow-sm);
  transition: box-shadow .3s var(--pm-ease-out), transform .3s var(--pm-ease-out);
}
.pm-station-section:hover {
  box-shadow: var(--pm-shadow-md);
}
.pm-station-header {
  display:flex; align-items:center; gap:14px;
  padding:14px 18px;
  border-left:4px solid;
  background: linear-gradient(90deg, rgba(68,68,68, .04), transparent 70%);
  position:relative;
}
.pm-station-header::after {
  content:'';
  position:absolute;
  bottom:0; left:0; right:0;
  height:1px;
  background: linear-gradient(90deg, var(--line), transparent 80%);
}
.pm-station-title {
  font-size:16px;
  font-weight:900;
  letter-spacing:.5px;
  position:relative;
}
.pm-station-meta {
  display:flex; gap:14px;
  margin-left:auto;
}
.pm-meta-item {
  font-size:12px;
  color:var(--txt-2);
  font-weight:600;
  padding:4px 10px;
  border-radius:8px;
  background: rgba(68,68,68, .04);
  letter-spacing:.2px;
  white-space:nowrap;
  overflow:hidden;
}
.pm-meta-item b {
  color:var(--txt);
  font-weight:800;
  margin:0 4px;
}
.pm-meta-warn {
  background: rgba(220,38,38,.08) !important;
}
.pm-meta-warn b { color:var(--ui-danger-solid) !important; }

/* --- 订单卡片 --- */
.pm-order-grid {
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(190px, 1fr));
  gap:12px;
  padding:16px 18px;
}
.pm-order-card {
  background: linear-gradient(180deg, var(--ui-bg-card), var(--ui-bg-card));
  border:1px solid var(--line);
  border-radius:var(--pm-radius-sm);
  padding:12px 14px;
  cursor:pointer;
  transition: all .25s var(--pm-ease-out);
  border-top:3px solid transparent;
  position:relative;
  overflow:hidden;
}
.pm-order-card::after {
  content:'';
  position:absolute;
  top:0; right:0;
  width:60px; height:60px;
  background: radial-gradient(circle at top right, rgba(134,134,134, .06), transparent 70%);
  pointer-events:none;
  transition: all .3s var(--pm-ease-out);
}
.pm-order-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 24px -6px rgba(68,68,68, .12), 0 2px 6px rgba(68,68,68, .06);
  border-color: rgba(134,134,134, .35);
}
.pm-order-card:hover::after {
  background: radial-gradient(circle at top right, rgba(134,134,134, .12), transparent 70%);
}
.pm-oc-head {
  display:flex; align-items:center; justify-content:space-between;
  margin-bottom:6px;
}
.pm-oc-id {
  font-size:12px;
  font-weight:800;
  color:var(--brand);
  font-family: var(--mono, 'SF Mono', Consolas, monospace);
  letter-spacing:.3px;
}
.pm-oc-cat {
  font-size:11px;
  font-weight:700;
  padding:2px 8px;
  border-radius:6px;
  letter-spacing:.5px;
  text-transform:uppercase;
}
.pm-oc-customer {
  font-size:12px;
  color:var(--txt-2);
  font-weight:600;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  margin-bottom:6px;
  letter-spacing:.2px;
  white-space:nowrap;
  overflow:hidden;
}
.pm-oc-flags {
  display:flex; gap:4px;
  margin-bottom:6px;
  min-height:0;
}
.pm-flag {
  font-size:11px;
  font-weight:700;
  padding:2px 6px;
  border-radius:4px;
  letter-spacing:.5px;
}
.pm-flag-red {
  background: linear-gradient(135deg, rgba(220,38,38,.15), rgba(220,38,38,.08));
  color:var(--ui-danger-solid);
  border:1px solid rgba(220,38,38,.2);
}
.pm-flag-orange {
  background: linear-gradient(135deg, rgba(217,119,6,.15), rgba(217,119,6,.08));
  color:var(--ui-warn-solid);
  border:1px solid rgba(217,119,6,.2);
}
.pm-oc-progress {
  display:flex; align-items:center; gap:8px;
  margin-bottom:8px;
}
.pm-oc-pbar {
  flex:1;
  height:7px;
  background: linear-gradient(180deg, rgba(68,68,68, .06), rgba(68,68,68, .10));
  border-radius:4px;
  overflow:hidden;
  box-shadow: inset 0 1px 2px rgba(0,0,0,.06);
}
.pm-oc-pfill {
  height:100%;
  border-radius:4px;
  transition: width .5s var(--pm-ease-decisive);
  position:relative;
}
.pm-oc-pfill::after {
  content:'';
  position:absolute; inset:0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.25) 50%, transparent);
  transform:translateX(-120%);will-change:transform;
  animation: pm-shimmer 2.5s ease-in-out infinite;
  border-radius: inherit;
}
.pm-oc-pct {
  font-size:12px;
  font-weight:800;
  font-variant-numeric:tabular-nums;
  min-width:30px;
  text-align:right;
  letter-spacing:.3px;
}
.pm-oc-foot {
  display:flex; justify-content:flex-end;
}
.pm-oc-eta {
  font-size:12px;
  color:var(--txt-3);
  font-weight:600;
  letter-spacing:.2px;
  white-space:nowrap;
  overflow:hidden;
}

/* --- 底部统计条 --- */
.pm-bottom-stats {
  display:flex; align-items:center; justify-content:center;
  gap:12px;
  padding:14px 20px;
  background: linear-gradient(135deg, rgba(68,68,68, .06), rgba(134,134,134, .04), rgba(12,154,184,.03));
  border:1px solid var(--line);
  border-radius:var(--pm-radius);
  position:relative;
  overflow:hidden;
}
.pm-bottom-stats::before {
  content:'';
  position:absolute;
  top:0; left:0; right:0;
  height:2px;
  background: linear-gradient(90deg, var(--ui-brand-700), var(--ui-brand-500), var(--pl-cyan), var(--ui-brand-500), var(--ui-brand-700));
  opacity:.7;
}
.pm-bs-item {
  display:flex; flex-direction:column; align-items:center;
  gap:4px;
  padding:0 10px;
  transition: transform .2s var(--pm-ease-out);
}
.pm-bs-item:hover {
  transform: translateY(-2px);
}
.pm-bs-num {
  font-size:20px;
  font-weight:900;
  font-variant-numeric:tabular-nums;
  letter-spacing:-.3px;
  line-height:1.1;
}
.pm-bs-label {
  font-size:12px;
  color:var(--txt-3);
  font-weight:700;
  letter-spacing:.8px;
  text-transform:uppercase;
}
.pm-bs-divider {
  width:1px;
  height:32px;
  background: linear-gradient(180deg, transparent, var(--line-strong), transparent);
}

/* --- 响应式 --- */
@media (max-width:1280px) {
  .pm-top-row { grid-template-columns:1fr; }
  .pm-overview-grid { grid-template-columns:repeat(3,1fr); }
  .pm-overview-val { font-size:20px; }
}
@media (max-width: 768px) {
  .pm-overview-grid { grid-template-columns:repeat(2,1fr); }
  .pm-order-grid { grid-template-columns:1fr; }
  .pm-bottom-stats { flex-wrap:wrap; gap:14px; }
  .pm-bs-divider { display:none; }
  .pm-station-row { grid-template-columns:150px 1fr 38px; }
  .pm-overview-val { font-size:20px; }
}

/* --- 减弱动画偏好 --- */
@media (prefers-reduced-motion: reduce) {
  .pm-container > * { animation: none !important; }
  .pm-station-bar, .pm-oc-pfill { transition: none !important; }
  .pm-order-card, .pm-alert-item, .pm-overview-item, .pm-bs-item { transition: none !important; }
  .pm-hot, .pm-station-bar::after, .pm-oc-pfill::after { animation: none !important; }
}

/* ========== 生产看板 KPI 卡片新样式 v2 ========== */
.grid.kpis {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 12px;
  margin-bottom: 16px;
}
.grid.kpis .pk-card {
  position: relative;
  border-radius: 14px;
  padding: 16px 18px 14px;
  color: #fff;
  overflow: hidden;
  min-height: 128px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: 0 2px 10px rgba(0,0,0,.06);
  transition: transform .25s ease, box-shadow .25s ease;
}
.grid.kpis .pk-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(0,0,0,.14);
}
.grid.kpis .pk-card::before {
  content: "";
  position: absolute;
  top: -38px; right: -38px;
  width: 140px; height: 140px;
  border-radius: 50%;
  background: rgba(255,255,255,.14);
  pointer-events: none;
}
.grid.kpis .pk-card::after {
  content: "";
  position: absolute;
  top: 14px; right: 50px;
  width: 60px; height: 60px;
  border-radius: 50%;
  background: rgba(255,255,255,.22);
  pointer-events: none;
}
.grid.kpis .pk-body {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.grid.kpis .pk-left { flex: 1; min-width: 0; }
.grid.kpis .pk-label {
  font-size: 12px;
  opacity: .88;
  letter-spacing: .3px;
  margin-bottom: 6px;
  font-weight: 500;
}
.grid.kpis .pk-val {
  font-size: 32px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -.5px;
  text-shadow: 0 1px 3px rgba(0,0,0,.12);
}
.grid.kpis .pk-sub {
  font-size: 11px;
  opacity: .75;
  margin-top: 6px;
}
.grid.kpis .pk-ring {
  position: relative;
  width: 56px;
  height: 56px;
  flex-shrink: 0;
  z-index: 1;
}
.grid.kpis .pk-ring svg { width: 100%; height: 100%; }
.grid.kpis .pk-ring-bg {
  fill: none;
  stroke: rgba(255,255,255,.25);
  stroke-width: 4;
}
.grid.kpis .pk-ring-fg {
  fill: none;
  stroke: #fff;
  stroke-width: 4;
  stroke-linecap: round;
  transition: stroke-dashoffset .8s cubic-bezier(.4,0,.2,1);
}
.grid.kpis .pk-ring-pct {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 700;
  color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,.2);
}
.grid.kpis .pk-bar {
  position: relative;
  z-index: 1;
  height: 4px;
  background: rgba(255,255,255,.22);
  border-radius:4px;
  overflow: hidden;
  margin-top: 10px;
}
.grid.kpis .pk-bar i {
  display: block;
  height: 100%;
  background: var(--ui-bg-card);
  border-radius:4px;
  transition: width 1.2s cubic-bezier(.4,0,.2,1);
  box-shadow: 0 0 6px rgba(255,255,255,.4);
}
@media (max-width:1280px) {
  .grid.kpis { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 800px) {
  .grid.kpis { grid-template-columns: repeat(2, 1fr); }
}

/* === 星空粒子 v2 === */
.auth-particles{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden;}
.auth-particles::before,.auth-particles::after{content:"";position:absolute;inset:0;background-image:
  radial-gradient(2.5px 2.5px at 20px 30px, rgba(190,227,235,.7),transparent),
  radial-gradient(1.5px 3px at 40px 70px, rgba(12,154,184,.6),transparent),
  radial-gradient(2.5px 2.5px at 50px 160px, rgba(190,227,235,.65),transparent),
  radial-gradient(1.5px 3px at 90px 40px, rgba(12,154,184,.55),transparent),
  radial-gradient(2.5px 2.5px at 130px 80px, rgba(190,227,235,.6),transparent),
  radial-gradient(1.5px 3px at 160px 120px, rgba(12,154,184,.5),transparent),
  radial-gradient(2.5px 2.5px at 200px 20px, rgba(190,227,235,.65),transparent),
  radial-gradient(1.5px 3px at 220px 180px, rgba(12,154,184,.55),transparent),
  radial-gradient(2.5px 2.5px at 250px 60px, rgba(190,227,235,.6),transparent),
  radial-gradient(1.5px 3px at 280px 140px, rgba(12,154,184,.55),transparent),
  radial-gradient(2.5px 2.5px at 320px 30px, rgba(190,227,235,.65),transparent),
  radial-gradient(1.5px 3px at 350px 100px, rgba(12,154,184,.45),transparent),
  radial-gradient(2.5px 2.5px at 60px 200px, rgba(190,227,235,.55),transparent),
  radial-gradient(1.5px 3px at 110px 250px, rgba(12,154,184,.6),transparent),
  radial-gradient(2.5px 2.5px at 180px 280px, rgba(190,227,235,.65),transparent),
  radial-gradient(1.5px 3px at 240px 220px, rgba(12,154,184,.55),transparent),
  radial-gradient(2.5px 2.5px at 300px 260px, rgba(190,227,235,.6),transparent),
  radial-gradient(1.5px 3px at 370px 200px, rgba(12,154,184,.55),transparent);
  background-repeat:repeat;
  background-size:400px 300px;animation:starTwinkle 3.2s ease-in-out infinite;}
.auth-particles::after{background-size:350px 280px;animation-delay:1.6s;animation-name:starTwinkle;opacity:.75;}
@keyframes starTwinkle{0%,100%{opacity:1;filter:drop-shadow(0 0 2px rgba(190,227,235,.4));}50%{opacity:.25;filter:drop-shadow(0 0 0 transparent);}}
/* 内容稳定入场 */
@keyframes contentStabilize{0%{opacity:0;transform:translateY(24px) scale(.98);}60%{opacity:1;transform:translateY(0) scale(1.01);}100%{opacity:1;transform:translateY(0) scale(1);}}

/* === 旋转轨道环 === */
.orbit-ring{position:absolute;border-radius:50%;pointer-events:none;z-index:3;border:1px solid rgba(190,227,235,.15);}
.orbit-ring-1{width:200px;height:200px;left:50%;top:40%;transform:translate(-50%,-50%);
  animation:orbitSpin 12s linear infinite;border-color:rgba(190,227,235,.18);}
.orbit-ring-1::before{content:"";position:absolute;width:6px;height:6px;border-radius:50%;background:rgba(190,227,235,.8);
  box-shadow:0 0 8px rgba(190,227,235,.6);top:-3px;left:50%;transform:translateX(-50%);}
.orbit-ring-2{width:280px;height:280px;left:50%;top:40%;transform:translate(-50%,-50%);
  animation:orbitSpin 18s linear infinite reverse;border-color:rgba(12,154,184,.14);border-style:dashed;}
.orbit-ring-2::before{content:"";position:absolute;width:4px;height:4px;border-radius:50%;background:rgba(12,154,184,.7);
  box-shadow:0 0 6px rgba(12,154,184,.5);bottom:-2px;left:30%;}
@keyframes orbitSpin{from{transform:translate(-50%,-50%) rotate(0deg);}to{transform:translate(-50%,-50%) rotate(360deg);}}

/* === 漂浮光晕球 === */
.glow-orb{position:absolute;border-radius:50%;pointer-events:none;z-index:2;filter:blur(1px);}
.orb-1{width:60px;height:60px;background:radial-gradient(circle,rgba(12,154,184,.18),transparent 70%);
  left:10%;top:25%;animation:orbDrift1 10s ease-in-out infinite;}
.orb-2{width:45px;height:45px;background:radial-gradient(circle,rgba(12,154,184,.15),transparent 70%);
  right:8%;top:55%;animation:orbDrift2 13s ease-in-out infinite;}
.orb-3{width:35px;height:35px;background:radial-gradient(circle,rgba(190,227,235,.2),transparent 70%);
  left:65%;top:15%;animation:orbDrift3 8s ease-in-out infinite;}
@keyframes orbDrift1{0%,100%{transform:translate(0,0) scale(1);opacity:.6;}50%{transform:translate(25px,-20px) scale(1.15);opacity:1;}}
@keyframes orbDrift2{0%,100%{transform:translate(0,0) scale(1);opacity:.5;}50%{transform:translate(-18px,15px) scale(1.2);opacity:.9;}}
@keyframes orbDrift3{0%,100%{transform:translate(0,0) scale(1);opacity:.7;}50%{transform:translate(15px,12px) scale(1.1);opacity:1;}}

/* === 图标旋转增强 === */
.auth-left-mark .dn{animation:dnPulse 2.6s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
@keyframes dnPulse{0%,100%{opacity:.45;transform:scale(.78) rotate(0deg);}50%{opacity:1;transform:scale(1.18) rotate(5deg);}}


/* ============ 异常返工处理 · Hero 区域（两栏 + 网格背景 + 嵌入式 Tab） ============ */
.rework-page{display:flex;flex-direction:column;gap:18px;margin-top:12px}

/* —— Hero 主体 —— */
.rework-hero{
  position:relative;overflow:hidden;
  display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);
  gap:28px;align-items:stretch;
  padding:26px 30px;
  border-radius:16px;
  color:#fff;
  background:
    radial-gradient(ellipse at 100% 0%, rgba(198,198,198, .28) 0%, transparent 55%),
    radial-gradient(ellipse at 0% 100%, rgba(12,154,184,.18) 0%, transparent 60%),
    linear-gradient(135deg, var(--ui-brand-900) 0%, var(--ui-brand-700) 55%, var(--ui-brand-700) 100%);
  box-shadow:
    0 24px 60px -28px rgba(68,68,68, .55),
    0 1px 0 rgba(255,255,255,.10) inset,
    0 -1px 0 rgba(0,0,0,.10) inset;
  min-height:180px;
  isolation:isolate;
}
/* 网格背景 */
.rework-hero::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background-image:
    linear-gradient(rgba(255,255,255,.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.04) 1px, transparent 1px);
  background-size:32px 32px;
  -webkit-mask-image:radial-gradient(ellipse at 30% 50%, #000 0%, transparent 75%);
  mask-image:radial-gradient(ellipse at 30% 50%, #000 0%, transparent 75%);
}
/* 装饰光斑 */
.rework-hero-blob-1{position:absolute;right:-80px;top:-90px;width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.12) 0%,transparent 65%);pointer-events:none;z-index:0}
.rework-hero-blob-2{position:absolute;left:32%;bottom:-110px;width:240px;height:240px;border-radius:50%;background:radial-gradient(circle,rgba(198,198,198, .16) 0%,transparent 65%);pointer-events:none;z-index:0}

/* —— Hero 左侧主区 —— */
.rework-hero-main{display:flex;flex-direction:column;gap:10px;position:relative;z-index:2;min-width:0}
.rework-hero-badge{
  display:inline-flex;align-items:center;gap:8px;
  padding:4px 12px 4px 8px;
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.20);
  border-radius:999px;width:fit-content;
  font-size:12px;font-weight:500;letter-spacing:.10em;
  text-transform:uppercase;color:rgba(255,255,255,.85);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
.rework-hero-badge .dot{
  width:6px;height:6px;border-radius:50%;background:var(--ui-ink-400);
  box-shadow:0 0 8px rgba(144,144,144, .7);
  animation:reworkPulse 2.2s ease-in-out infinite;
}
@keyframes reworkPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(1.18)}}
.rework-hero h2{font-size:24px;font-weight:700;margin:2px 0 2px;letter-spacing:.5px;line-height:1.2}
.rework-hero p{font-size:13px;opacity:.85;line-height:1.6;max-width:640px;margin:0}
.rework-hero-meta{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-top:8px;padding-top:12px;
  border-top:1px dashed rgba(255,255,255,.18);
  font-size:12px;
}
.rework-hero-meta .meta-item{display:inline-flex;align-items:center;gap:8px}
.rework-hero-meta .meta-label{color:rgba(235,235,235, .62);font-weight:500;letter-spacing:.04em}
.rework-hero-meta .meta-sep{color:rgba(255,255,255,.30)}
.rework-hero-meta .meta-value{color:rgba(246,246,246, .92);font-variant-numeric:tabular-nums}
.rework-hero-meta .meta-value strong{color:#fff;font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.rework-hero-meta .meta-time{color:rgba(235,235,235, .85);font-variant-numeric:tabular-nums}

/* —— Hero 右侧侧栏（Tab + 刷新） —— */
.rework-hero-side{
  display:flex;flex-direction:column;gap:12px;
  align-items:stretch;justify-content:center;
  position:relative;z-index:2;min-width:0;
}

/* —— 嵌入到 Hero 的 Tab（玻璃主题） —— */
.rework-segments{
  display:grid;grid-template-columns:1fr 1fr;gap:4px;
  padding:6px;
  background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.18);
  border-radius:12px;
  box-shadow:0 1px 0 rgba(255,255,255,.06) inset;
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  align-self:stretch;width:100%;
}
.rework-segment{
  appearance:none;border:none;background:transparent;
  padding:10px 14px;
  font-size:13px;font-weight:600;
  color:rgba(255,255,255,.78);
  cursor:pointer;
  border-radius:8px;
  transition:all .2s ease;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  letter-spacing:.02em;
}
.rework-segment:hover{color:#fff;background:rgba(255,255,255,.06)}
.rework-segment.active{
  background:var(--ui-bg-card);color:var(--ui-brand-900);
  box-shadow:0 8px 22px -10px rgba(0,0,0,.45), 0 0 0 1px rgba(68,68,68, .06);
}
.rework-segment .count{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:22px;height:20px;padding:0 8px;
  border-radius:10px;
  font-size:12px;background:rgba(255,255,255,.18);color:#fff;font-weight:700;
  font-variant-numeric:tabular-nums;
}
.rework-segment.active .count{background:rgba(68,68,68, .10);color:var(--ui-brand-900)}

/* —— 刷新按钮（Hero 嵌入式变体） —— */
.rework-refresh-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:10px 16px;
  border-radius:10px;
  border:1px solid rgba(255,255,255,.28);
  background:rgba(255,255,255,.10);
  color:#fff;
  font-size:13px;font-weight:600;
  cursor:pointer;
  transition:all .2s ease;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  align-self:stretch;width:100%;
  letter-spacing:.02em;
}
.rework-refresh-btn:hover{background:rgba(255,255,255,.22);border-color:rgba(255,255,255,.5);transform:translateY(-1px)}
.rework-refresh-btn:active{transform:translateY(0);background:rgba(255,255,255,.16)}
.rework-refresh-btn svg{flex-shrink:0}
.rework-refresh-btn.is-spinning svg{animation:reworkSpin 1s linear infinite}
@keyframes reworkSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}

/* —— Hero 响应式 —— */
@media (max-width:960px){
  .rework-hero{grid-template-columns:1fr;gap:18px;padding:22px 22px}
  .rework-hero-side{flex-direction:row;gap:10px}
  .rework-segments{flex:1}
  .rework-refresh-btn{flex:0 0 auto;width:auto;padding:10px 18px}
}
@media (max-width:560px){
  .rework-hero-meta{flex-direction:column;align-items:flex-start;gap:6px}
  .rework-hero-side{flex-direction:column}
}

/* ============ 顶部 KPI 卡片(深色玻璃质感 + 主题色 + 图标 + 进度条) ============ */
.rework-stats-v3 {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 18px;
  margin: 4px 0 22px 0;
  padding: 6px 4px 4px;
}

.rework-stats-v3 > .rework-stat-card {
  position: relative;
  overflow: hidden;
  border-radius: 16px;
  padding: 16px 18px 14px;
  color: #fff;
  background: linear-gradient(135deg, var(--ui-ink-700) 0%, var(--ui-ink-700) 60%, var(--ui-brand-500) 100%);
  box-shadow:
    0 1px 0 rgba(255,255,255,.10) inset,
    0 10px 28px rgba(28,28,28, .22),
    0 1px 4px rgba(28,28,28, .20);
  display: flex;
  flex-direction: column;
  gap: 6px;
  transition: transform .25s ease, box-shadow .25s ease;
  isolation: isolate;
  min-height: 108px;
}
.rework-stats-v3 > .rework-stat-card:hover {
  transform: translateY(-4px);
  box-shadow:
    0 1px 0 rgba(255,255,255,.18) inset,
    0 24px 48px rgba(28,28,28, .34),
    0 3px 8px rgba(28,28,28, .22);
}
.rework-stats-v3 > .rework-stat-card.is-interactive {
  cursor: pointer;
  user-select: none;
}
.rework-stats-v3 > .rework-stat-card.is-interactive::after {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(circle at 30% 20%, rgba(255,255,255,.08) 0%, rgba(255,255,255,0) 50%);
  border-radius: inherit;
  pointer-events: none;
  opacity: 0;
  transition: opacity .25s ease;
}
.rework-stats-v3 > .rework-stat-card.is-interactive:hover::after { opacity: 1; }
.rework-stats-v3 > .rework-stat-card.is-interactive:active { transform: translateY(-2px) scale(.985); }
.rework-stats-v3 > .rework-stat-card.is-pressed {
  transform: translateY(-1px) scale(.97) !important;
  filter: brightness(1.05);
}
.rework-stat-card .rework-stat-arrow {
  position: absolute;
  right: 14px; bottom: 10px;
  width: 22px; height: 22px;
  display: inline-flex; align-items: center; justify-content: center;
  color: rgba(255,255,255,.78);
  background: rgba(255,255,255,.14);
  border-radius: 999px;
  pointer-events: none;
  z-index: 3;
  transition: transform .25s ease, background .25s ease;
}
.rework-stat-card .rework-stat-arrow svg { width: 14px; height: 14px; stroke-width: 2; }
.rework-stats-v3 > .rework-stat-card.is-interactive:hover .rework-stat-arrow {
  transform: translate(2px,-2px);
  background: rgba(255,255,255,.22);
  color: #fff;
}

/* 主题色 */
.rework-stats-v3 > .rework-stat-card.theme-indigo { background: linear-gradient(135deg, var(--ui-ink-700) 0%, var(--ui-ink-700) 60%, var(--ui-brand-500) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-cyan   { background: linear-gradient(135deg, var(--ui-brand-900) 0%, var(--pl-cyan-ink) 60%, var(--pl-cyan) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-emerald{ background: linear-gradient(135deg, var(--ui-ok-ink) 0%, var(--ui-ok-solid) 60%, var(--ui-ok-solid) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-rose   { background: linear-gradient(135deg, var(--ui-ink-700) 0%, var(--pl-pink-ink) 60%, var(--ui-danger-solid) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-amber  { background: linear-gradient(135deg, var(--ui-ink-700) 0%, var(--ui-warn-ink) 60%, var(--ui-warn-solid) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-violet { background: linear-gradient(135deg, var(--pl-pink-ink) 0%, var(--pl-cyan-ink) 60%, var(--pl-cyan-ink) 100%); }
.rework-stats-v3 > .rework-stat-card.theme-slate  { background: linear-gradient(135deg, var(--sk-ink) 0%, var(--ui-ink-900) 60%, var(--ui-ink-700) 100%); }

/* 光晕装饰 */
.rework-stat-card .rework-stat-glow {
  position: absolute;
  right: -60px; top: -70px;
  width: 200px; height: 200px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,.18) 0%, transparent 65%);
  pointer-events: none; z-index: 1;
}
.rework-stat-card .rework-stat-shine {
  position: absolute;
  left: -40px; bottom: -50px;
  width: 160px; height: 160px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,.10) 0%, transparent 65%);
  pointer-events: none; z-index: 1;
}

.rework-stat-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  position: relative; z-index: 2;
}
.rework-stat-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px;
  border-radius: 8px;
  background: rgba(255,255,255,.14);
  color: #fff;
  backdrop-filter: blur(4px);
}
.rework-stat-icon svg { width: 18px; height: 18px; stroke-width: 1.7; }
.rework-stat-trend {
  display: inline-flex; align-items: center;
  padding: 0 10px; border-radius: 999px;
  background: rgba(255,255,255,.14); color: #fff;
  font-size:11px; font-weight: 600; letter-spacing: .02em;
  backdrop-filter: blur(4px);
}

.rework-stat-label {
  font-size: 12px; color: rgba(246,246,246, .78);
  letter-spacing: .04em; font-weight: 500;
  text-transform: uppercase;
  position: relative; z-index: 2;
}
.rework-stat-value {
  font-size: 28px; font-weight: 700; color: #fff;
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
  line-height: 1.1; letter-spacing: -.01em;
  position: relative; z-index: 2;
}
.rework-stat-value .unit {
  font-size: 13px; font-weight: 500; margin-left: 4px;
  color: rgba(235,235,235, .72);
}
.rework-stat-sub {
  font-size:11px; color: rgba(235,235,235, .72);
  margin-top: 2px; display: flex; align-items: center; gap: 6px;
  position: relative; z-index: 2;
}
.rework-stat-bar {
  position: relative; z-index: 2;
  height: 5px; border-radius:999px;
  background: rgba(255,255,255,.12); overflow: hidden;
  margin-top: 6px;
}
.rework-stat-bar i {
  position: absolute; left: 0; top: 0; bottom: 0;
  border-radius:999px;
  background: linear-gradient(90deg,
    rgba(255,255,255,.35) 0%,
    rgba(255,255,255,.95) 100%);
  transition: width .6s cubic-bezier(.2,.7,.2,1);
}

/* 旧式 .rework-stat-value.match/.unmatch/.remade 颜色兜底 */
.rework-stat-value.match   { color: #fff; }
.rework-stat-value.unmatch { color: #fff; }
.rework-stat-value.remade  { color: #fff; }

/* 移动端 5 列收纳 */
@media (max-width: 1280px) {
  .rework-stats-v3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .rework-stats-v3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* 响应式 (略缩) */
@media (max-width: 768px) {
  table.rework-table { min-width: 980px; }
  .rework-stats-v3 { grid-template-columns: 1fr 1fr; }
}


/* ===== 返工搜索框（玻璃主题） ===== */
.rework-filter{margin:18px 0 12px 0}
.rework-search-wrap{position:relative;display:flex;align-items:center;background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(68,68,68, .18);border-radius:12px;padding:0 14px;height:42px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 6px 18px -10px rgba(68,68,68, .18);transition:border-color .15s,box-shadow .15s}
.rework-search-wrap:focus-within{border-color:var(--cyan);box-shadow:0 0 0 4px rgba(115,115,115, .15),inset 0 1px 0 rgba(255,255,255,.9)}
.rework-search-icon{width:18px;height:18px;flex:0 0 18px;color:var(--txt-3);margin-right:10px;pointer-events:none}
.rework-search-input{flex:1 1 auto;border:0;outline:0;background:0 0;height:100%;font-size:13px;color:var(--txt);min-width:0}
.rework-search-input::placeholder{color:var(--txt-3)}
.rework-search-clear{flex:0 0 auto;width:24px;height:24px;border:0;background:0 0;color:var(--txt-3);display:none;align-items:center;justify-content:center;cursor:pointer;border-radius:6px;padding:0;margin-left:4px}
.rework-search-clear svg{width:14px;height:14px}
.rework-search-clear:hover{background:rgba(68,68,68, .08);color:var(--txt)}
.rework-search-wrap.has-value .rework-search-clear{display:flex}

/* 按状态筛选指示条（点击统计卡片后出现） */
.rework-status-chip{display:flex;align-items:center;gap:6px;margin-top:8px;padding:8px 12px;border-radius:10px;font-size:12px;color:var(--ui-ink-700);background:linear-gradient(90deg,rgba(115,115,115, .10),rgba(115,115,115, .04));border:1px dashed rgba(115,115,115, .35)}
.rework-status-chip b{color:var(--primary,var(--ui-brand-700));font-weight:600}
.rework-chip-icon{flex:0 0 auto;color:var(--primary,var(--ui-brand-700))}
.rework-chip-clear{margin-left:auto;border:0;background:0 0;color:var(--primary,var(--ui-brand-700));cursor:pointer;font-size:12px;padding:2px 6px;border-radius:6px}
.rework-chip-clear:hover{background:rgba(115,115,115, .12)}


/* --- 追加:从 index.html 移出的内联样式 --- */


/* v33: 内部返工表格完整样式（浅灰表头 + 斑马纹 + 链接 + chip + 状态徽章容器）
   注意：此处曾残留 HTML 注释与 <style> 标签，导致浏览器把紧随其后的
   .rework-table-wrap{...} 规则当作坏规则吞掉，表格容器卡片样式全部失效。 */
  /* 外层容器：白底卡片 + 圆角阴影 + 滚动 */
  .rework-table-wrap{
    background:var(--ui-bg-card);
    border-radius:14px;
    box-shadow:0 1px 2px rgba(28,28,28, .04), 0 8px 24px rgba(28,28,28, .04);
    overflow:auto;
    max-height:72vh;
    border:1px solid var(--ui-line-200);
  }
  /* 表格基础 */
  .rework-table-v3{
    width:100%;
    border-collapse:separate;
    border-spacing:0;
    font-size:13px;
    table-layout:auto;
    background:var(--ui-bg-card);
  }
  /* 表头：浅灰底 + 强分割线 + 大写字距 */
  .rework-table-v3 thead{
    position:sticky;
    top:0;
    z-index:3;
  }
  .rework-table-v3 th{
    background:var(--ui-bg-page);
    color:var(--sk-ink-2);
    font-weight:600;
    font-size:12px;
    text-align:left;
    padding:12px 14px;
    border-bottom:2px solid var(--ui-line-200);
    border-right:1px solid var(--ui-line-200);
    white-space:nowrap;
    letter-spacing:.03em;
  }
  .rework-table-v3 th:last-child{ border-right:none; }
  /* 表体：边框 / 斑马纹 / hover */
  .rework-table-v3 td{
    padding:12px 14px;
    border-bottom:1px solid var(--ui-line-200);
    border-right:1px solid #fff;
    color:var(--ui-ink-900);
    vertical-align:middle;
    background:var(--ui-bg-card);
    transition:background .15s ease;
  }
  .rework-table-v3 td:last-child{ border-right:none; }
  .rework-table-v3 tbody tr:nth-child(even) td{ background:var(--sk-soft); }
  .rework-table-v3 tbody tr:hover td{ background:var(--ui-brand-050); }
  /* 已重合行：保留原有绿色横纹，叠加到斑马纹之上 */
  .rework-table-v3 tbody tr.is-overlap td{
    background:var(--ui-bg-soft) !important;
    box-shadow:inset 3px 0 0 var(--ui-ink-500);
  }
  .rework-table-v3 tbody tr.is-overlap:hover td{ background:var(--ui-bg-soft) !important; }

  /* 列：# 序号 */
  .rework-table-v3 .col-idx{
    width:48px;
    text-align:center;
    color:var(--ui-ink-400);
    font-family:'Cascadia Mono',Consolas,monospace;
    font-size:12px;
  }
  /* 列：订单号 / 引物（蓝色单字 + 鼠标下划线） */
  .rework-table-v3 .cell-mono{
    font-family:'Cascadia Mono',Consolas,'Courier New',monospace;
    font-size:12px;
  }
  .rework-table-v3 .cell-order,
  .rework-table-v3 .cell-primer{
    color:var(--ui-brand-700);
    cursor:pointer;
    font-weight:500;
  }
  .rework-table-v3 .cell-order:hover,
  .rework-table-v3 .cell-primer:hover{ text-decoration:underline; }
  /* 列：客户 */
  .rework-table-v3 .cell-customer{ color:var(--sk-ink-2); max-width:220px; }
  /* 空值占位 */
  .rework-table-v3 .muted{ color:var(--ui-ink-400); }

  /* 当前工序站点 chip：具体配色由内联 style() 注入，保证每个站点独立颜色 */
  .rework-table-v3 .curStation{
    display:inline-block;
    padding:4px 10px;
    border-radius:10px;
    font-size:12px;
    font-weight:600;
    white-space:nowrap;
    line-height:1.5;
    border:1px solid transparent;
  }
  .rework-table-v3 .curStation:hover{ transform:translateY(-1px); box-shadow:0 1px 3px rgba(28,28,28, .08); }
  /* 站点 chip 中显示作业条数的小角标（保留原 .cntHint 视觉） */

  /* 时间戳：浅绿数字，等宽字体 */
  .rework-table-v3 .timeStamp{
    font-family:'Cascadia Mono',Consolas,monospace;
    font-size:12px;
    color:var(--ui-ok-solid);
    font-weight:600;
    white-space:nowrap;
  }

  /* 重合确认人 / 登记人 chip */
  .rework-table-v3 .rework-badge{
    display:inline-block;
    padding:4px 10px;
    border-radius:10px;
    font-size:12px;
    font-weight:600;
    white-space:nowrap;
    border:1px solid;
  }
  .rework-table-v3 .rework-badge-overlap{
    color:var(--ui-danger-solid);
    background:var(--ui-warn-bg);
    border-color:var(--ui-warn-line);
  }
  .rework-table-v3 .rework-badge-reg{
    color:var(--ui-warn-ink);
    background:var(--ui-warn-bg);
    border-color:var(--ui-warn-solid);
  }
  .rework-table-v3 .rework-badge-od{
    color:var(--ui-brand-600);
    background:var(--ui-brand-100);
    border-color:#c6c6c6;
  }

  /* 原因文本 */
  .rework-table-v3 .rework-reason{
    display:inline-block;
    max-width:200px;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    vertical-align:middle;
  }
  /* 原因 chip：具体配色按语义分类由内联 style() 注入 */
  .rework-table-v3 .rework-reason-chip{
    display:inline-block;
    padding:4px 10px;
    border-radius:10px;
    font-size:12px;
    font-weight:600;
    white-space:nowrap;
    line-height:1.5;
    border:1px solid transparent;
  }
  .rework-table-v3 .rework-reason-chip:hover{ filter:brightness(.96); }

  /* 外部返工新增列 */
  .rework-table-v3 .cell-well{ font-family:'Cascadia Mono',Consolas,monospace; font-size:12px; color:var(--sk-ink-2); }
  .rework-table-v3 .cell-sequence,
  .rework-table-v3 .cell-allmod,
  .rework-table-v3 .cell-note{
    max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    font-size:12px;
  }
  .rework-table-v3 .cell-handler,
  .rework-table-v3 .cell-handletime{ font-size:12px; }
  .rework-table-v3 .rework-file-link{
    text-decoration:none; color:inherit;
  }
  .rework-table-v3 .rework-file-link:hover .rework-file-name{
    color:var(--ui-brand-600); text-decoration:underline;
  }

  /* 操作按钮 */
  .rework-table-v3 .rework-action-btn{
    display:inline-flex; align-items:center; gap:6px;
    padding:6px 12px; border-radius:10px; border:1px solid transparent;
    font-size:12px; font-weight:600; line-height:1.4; cursor:pointer;
    color:var(--ui-brand-600); background:var(--ui-brand-050); border-color:var(--ui-brand-100);
    transition:all .15s ease;
  }
  .rework-table-v3 .rework-action-btn::before{
    content:''; display:inline-block; width:6px; height:6px; border-radius:50%;
    background:var(--ui-brand-500); box-shadow:0 0 0 2px rgba(134,134,134, .25);
  }
  .rework-table-v3 .rework-action-btn:hover{
    color:#fff; background:var(--ui-brand-600); border-color:var(--ui-brand-600);
    transform:translateY(-1px); box-shadow:0 4px 10px rgba(115,115,115, .25);
  }
  .rework-table-v3 .rework-action-btn:hover::before{
    background:var(--ui-bg-card); box-shadow:0 0 0 2px rgba(255,255,255,.35);
  }
  .rework-table-v3 .rework-action-btn.is-handled{
    color:var(--ui-ok-solid); background:var(--ui-bg-soft); border-color:var(--ui-ink-300);
  }
  .rework-table-v3 .rework-action-btn.is-handled::before{
    background:var(--ui-ink-500); box-shadow:0 0 0 2px rgba(118,118,118, .25);
  }
  .rework-table-v3 .rework-action-btn.is-handled:hover{
    color:#fff; background:var(--ui-ok-solid); border-color:var(--ui-ok-solid);
  }

  /* 外部返工处理弹窗 */
  #external-handle-modal.modal-overlay{
    display:none; position:fixed; inset:0; background:rgba(28,28,28, .55); z-index:10001;
    align-items:center; justify-content:center;
  }
  #external-handle-modal.modal-overlay.show{ display:flex; }
  #external-handle-modal .modal-card{
    width:min(520px,92vw); max-height:86vh; background:var(--ui-bg-card); border-radius:16px;
    box-shadow:0 24px 70px rgba(0,0,0,.28); display:flex; flex-direction:column; overflow:hidden;
  }
  #external-handle-modal .modal-head{
    display:flex; align-items:center; justify-content:space-between;
    padding:16px 20px; border-bottom:1px solid var(--ui-line-200);
  }
  #external-handle-modal .modal-head h3{ margin:0; font-size:16px; color:var(--sk-ink); }
  #external-handle-modal .modal-close{
    background:none; border:none; font-size:24px; color:var(--sk-ink-3); cursor:pointer; line-height:1;
  }
  #external-handle-modal .modal-body{ padding:18px 20px; overflow:auto; }
  #external-handle-modal .form-row{ margin-bottom:14px; }
  #external-handle-modal .form-row label{
    display:block; font-size:12px; font-weight:600; color:var(--sk-ink-2); margin-bottom:6px;
  }
  #external-handle-modal .form-static{
    padding:10px 12px; background:var(--sk-soft); border:1px solid var(--ui-line-200); border-radius:8px;
    font-size:13px; color:var(--sk-ink); word-break:break-all;
  }
  #external-handle-modal .form-input,
  #external-handle-modal .form-select,
  #external-handle-modal .form-textarea{
    width:100%; padding:10px 12px; border:1px solid var(--ui-line-200); border-radius:8px;
    font-size:13px; color:var(--sk-ink); background:var(--ui-bg-card); box-sizing:border-box;
  }
  #external-handle-modal .form-input:focus,
  #external-handle-modal .form-select:focus,
  #external-handle-modal .form-textarea:focus{
    outline:none; border-color:var(--ui-brand-500); box-shadow:0 0 0 3px rgba(134,134,134, .12);
  }
  #external-handle-modal .modal-foot{
    display:flex; justify-content:flex-end; gap:10px; padding:14px 20px; border-top:1px solid var(--ui-line-200);
  }
  #external-handle-modal .btn{
    padding:10px 18px; border-radius:8px; font-size:13px; cursor:pointer; border:1px solid transparent;
  }
  #external-handle-modal .btn-secondary{ background:var(--ui-bg-page); color:var(--sk-ink-2); border-color:var(--ui-line-200); }
  #external-handle-modal .btn-secondary:hover{ background:var(--ui-line-200); }
  #external-handle-modal .btn-primary{ background:var(--ui-brand-600); color:#fff; }
  #external-handle-modal .btn-primary:hover{ background:var(--ui-brand-700); }



/* 状态徽章（v32：操作列 → 状态列） */
.rework-table-v3 .col-status { text-align:center; }
.rework-table-v3 .status-badge { display:inline-block; min-width:64px; padding:4px 10px; border-radius:10px; font-size:12px; font-weight:600; line-height:1.4; white-space:nowrap; }
.rework-table-v3 .status-overlap { color:var(--ui-ok-solid); background:rgba(10,112,67,.12); border:1px solid rgba(10,112,67,.35); }
.rework-table-v3 .status-not-overlap {
  position:relative;
  color:var(--ui-danger-ink);
  background:rgba(220,38,38,.10);
  border:1px solid rgba(220,38,38,.35);
  padding-left:22px;
}
.rework-table-v3 .status-not-overlap::before{
  content:'';
  position:absolute;
  left:8px;
  top:50%;
  transform:translateY(-50%);
  width:7px;
  height:7px;
  background:var(--ui-danger-solid);
  border-radius:50%;
  box-shadow:0 0 0 3px rgba(220,38,38,.22);   /* 静态红晕（原来靠 box-shadow 动画扩出去） */
  animation:rework-pulse-red 1.4s infinite;   /* ★ 性能收口：只动 transform/opacity（合成） */
}
@keyframes rework-pulse-red{
  0%{ transform:translateY(-50%) scale(1); opacity:1; }
  70%{ transform:translateY(-50%) scale(1.55); opacity:.6; }
  100%{ transform:translateY(-50%) scale(1); opacity:1; }
}



  /* 重合日期 */
  .rework-table-v3 .cell-overlapdate .timeStamp { color:var(--ui-ok-solid); font-weight:600; }
  /* 核酸序列（单字母，含全角省略号） */
  .rework-table-v3 .cell-sequence .cell-seq {
    font-family: 'Cascadia Mono', Consolas, 'Courier New', monospace;
    color:var(--ui-ink-700); font-size:12px;
  }
  /* 全部修饰 */
  .rework-table-v3 .cell-allmod .cell-mod {
    font-family: 'Cascadia Mono', Consolas, monospace;
    color:var(--ui-danger-ink); font-size:12px;
  }
  /* 已重合行：背景色 + 左侧 accent bar */
  .rework-table-v3 tbody tr.is-overlap {
    background: linear-gradient(to right, rgba(118,118,118, 0.07) 0%, rgba(118,118,118, 0.0) 28%);
    box-shadow: inset 3px 0 0 var(--ui-ink-500);
  }
  .rework-table-v3 tbody tr.is-overlap:hover { background: rgba(118,118,118, 0.13); }
  /* tooltips 友好 */
  .rework-table-v3 .cell-sequence, .rework-table-v3 .cell-allmod { cursor: help; }

  /* ===== 颜色框 chip 样式 ===== */
  /* 板号 chip：绿色 */
  .rework-table-v3 .plateTag, .plateTag {
    display:inline-flex; align-items:center; padding:2px 8px; border-radius:999px;
    font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:12px;
    background:var(--ui-brand-100); color:var(--pl-cyan-ink); border:1px solid var(--pl-cyan-line);
  }
  .rework-table-v3 .plateTag-new, .plateTag-new { background:var(--ui-bg-soft); color:var(--ui-ink-700); border-color:var(--ui-ok-line); }
  /* 柱号 chip：蓝色 */
  .rework-table-v3 .wellTag, .wellTag {
    display:inline-flex; align-items:center; padding:2px 8px; border-radius:6px;
    font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:12px;
    background:var(--ui-bg-page); color:var(--ui-ink-700); border:1px solid var(--ui-line-200);
  }
  .rework-table-v3 .wellTag-new, .wellTag-new { background:var(--ui-brand-100); color:var(--ui-brand-600); border-color:var(--ui-brand-100); }
  /* 文件类型标签 */
  .rework-table-v3 .fileTag, .fileTag {
    display:inline-flex; align-items:center; padding:2px 8px; border-radius:6px;
    font-family:ui-monospace,Consolas,monospace; font-size:12px; font-weight:700;
    letter-spacing:.5px; line-height:1.5; white-space:nowrap;
  }
  .rework-table-v3 .file-tag-pdf, .file-tag-pdf { background:var(--ui-danger-bg); color:var(--ui-danger-ink); border:1px solid var(--ui-danger-line); }
  .rework-table-v3 .file-tag-img, .file-tag-img { background:var(--pl-cyan-bg); color:var(--pl-pink-ink); border:1px solid var(--pl-pink-bg); }
  /* 打开按钮（覆盖上方朴素样式） */
  .rework-table-v3 .rework-file-wrap { display:inline-flex; align-items:center; gap:6px; }
  .rework-table-v3 .rework-file-link {
    display:inline-flex; align-items:center; gap:6px;
    padding:4px 10px; border-radius:8px;
    background:var(--ui-brand-050); color:var(--ui-brand-700); border:1px solid var(--ui-brand-100);
    text-decoration:none; font-size:12px; font-weight:600;
    transition:all .15s ease;
  }
  .rework-table-v3 .rework-file-link:hover {
    background:var(--ui-brand-100); border-color:#c6c6c6; color:var(--ui-brand-600);
    transform:translateY(-1px); box-shadow:0 3px 8px rgba(115,115,115, .15);
  }
  .rework-table-v3 .rework-file-link:hover .rework-file-name {
    color:var(--ui-brand-600); text-decoration:none;
  }
  .rework-table-v3 .rework-open-icon { width:14px; height:14px; flex:none; }
  .rework-table-v3 .rework-open-label { white-space:nowrap; }
  .rework-table-v3 .rework-file-name {
    max-width:180px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    font-size:12px; color:inherit;
  }

/* ==================== 返工历史台账 ==================== */
.rework-stats-history { margin-bottom:14px; }
.rh-filter {
  position:relative; overflow:hidden;
  background:linear-gradient(135deg,var(--ui-bg-card),var(--sk-soft));
  border:1px solid var(--ui-line-200); border-radius:14px;
  padding:14px 16px 16px; margin-bottom:14px;
  box-shadow:0 1px 3px rgba(28,28,28, .04), inset 0 1px 0 rgba(255,255,255,.8);
}
.rh-filter::before {
  content:''; position:absolute; left:0; top:0; bottom:0; width:3px;
  background:linear-gradient(180deg,var(--ui-brand-600),var(--pl-cyan),var(--pl-cyan));
}
.rh-filter-head {
  display:flex; align-items:center; justify-content:space-between;
  margin-bottom:12px;
}
.rh-filter-title {
  display:inline-flex; align-items:center; gap:8px;
  font-size:13px; font-weight:700; color:var(--ui-ink-900); letter-spacing:.02em;
}
.rh-filter-icon { color:var(--ui-brand-600); }
.rh-filter-count { font-size:12px; color:var(--ui-ink-400); font-weight:500; }
.rh-filter-grid {
  display:flex; flex-wrap:wrap; gap:10px 14px;
}
.rh-field { display:flex; flex-direction:column; gap:4px; min-width:150px; flex:1 1 170px; max-width:230px; }
.rh-field-label {
  font-size:12px; font-weight:600; color:var(--sk-ink-3); letter-spacing:.03em; padding-left:2px;
}
.rh-field-ctrl {
  position:relative; display:flex; align-items:center;
}
.rh-field-ctrl > svg {
  position:absolute; left:10px; top:50%; transform:translateY(-50%);
  color:var(--ui-ink-400); pointer-events:none; z-index:1;
}
.rh-field-ctrl .rh-filter-field {
  width:100%; height:36px; padding:0 10px 0 30px;
  border:1px solid var(--ui-line-200); border-radius:8px;
  background:var(--ui-bg-card); color:var(--ui-ink-700); font-size:13px; outline:none;
  transition:border-color .15s, box-shadow .15s, background .15s;
  box-shadow:0 1px 2px rgba(28,28,28, .03);
}
.rh-field-ctrl .rh-filter-field:hover { border-color:var(--ui-brand-100); }
.rh-field-ctrl .rh-filter-field:focus {
  border-color:var(--ui-brand-600); box-shadow:0 0 0 3px rgba(115,115,115, .14); background:var(--ui-bg-card);
}
.rh-field-ctrl .rh-filter-field::placeholder { color:var(--ui-ink-300); }
/* select: 图标置右 + 去掉原生箭头 */
.rh-field-ctrl.rh-field-select > svg { left:auto; right:10px; }
.rh-field-ctrl.rh-field-select .rh-filter-field { padding:0 30px 0 12px; cursor:pointer; appearance:none; }
/* date: 保留左侧日历图标 */
.rh-field-ctrl.rh-field-date .rh-filter-field { padding:0 10px 0 30px; }
.rh-filter-actions {
  display:flex; gap:10px; margin-top:12px;
}
.rh-filter-active {
  display:flex; align-items:center; flex-wrap:wrap; gap:8px;
  margin-top:12px; padding:8px 12px;
  background:linear-gradient(135deg,var(--ui-bg-soft),var(--pl-cyan-bg));
  border:1px solid var(--ui-brand-100); border-radius:8px;
  font-size:12px; color:var(--ui-brand-700);
}
.rh-filter-active b { font-weight:700; }
.rh-filter-active-clear {
  margin-left:auto; height:24px; padding:0 10px;
  border:1px solid var(--ui-brand-100); border-radius:6px; cursor:pointer;
  background:var(--ui-bg-card); color:var(--ui-brand-700); font-size:12px;
  transition:background .12s, border-color .12s;
}
.rh-filter-active-clear:hover { background:var(--ui-brand-700); color:#fff; border-color:var(--ui-brand-700); }
.rh-filter-btn {
  display:inline-flex; align-items:center; gap:6px;
  height:34px; padding:0 16px; border:none; border-radius:8px; cursor:pointer;
  font-size:13px; font-weight:600; transition:transform .1s, box-shadow .15s, opacity .15s;
}
.rh-btn-query {
  background:linear-gradient(135deg,var(--ui-brand-600),var(--pl-cyan)); color:#fff;
  box-shadow:0 2px 6px rgba(115,115,115, .28);
}
.rh-btn-query:hover { box-shadow:0 3px 10px rgba(115,115,115, .4); opacity:.96; }
.rh-btn-query:active { transform:scale(.97); }
.rh-btn-reset {
  background:var(--ui-bg-card); color:var(--sk-ink-3); border:1px solid var(--ui-line-200);
}
.rh-btn-reset:hover { background:var(--sk-soft); border-color:var(--ui-line-200); color:var(--sk-ink-2); }
.rh-btn-reset:active { transform:scale(.97); }
.rh-pager {
  display:flex; justify-content:flex-end; align-items:center; gap:10px;
  padding:12px 4px 0;
}
.rh-pager-info { font-size:12px; color:var(--sk-ink-3); }
.rh-pager-btn {
  height:30px; padding:0 14px; border:1px solid var(--ui-line-200); border-radius:8px; cursor:pointer;
  background:var(--ui-bg-card); color:var(--sk-ink-2); font-size:13px; transition:background .15s, border-color .15s;
}
.rh-pager-btn:hover:not(:disabled) { background:var(--ui-bg-page); border-color:var(--ui-line-200); }
.rh-pager-btn:disabled { opacity:.4; cursor:not-allowed; }
.rh-cell-time { white-space:nowrap; color:var(--sk-ink-2); font-size:12px; }
.rh-cell-order { font-weight:600; color:var(--ui-ink-900); }
.rh-cell-primer { font-family:Consolas,'Courier New',monospace; color:var(--sk-ink); }
/* 引物名称副行 / 登记人·文件 / 原因·意见 */
.rh-sub { margin-top:2px; }
.rh-primer-name {
  display:inline-block; max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-size:12px; color:var(--sk-ink-3);
}
.rh-file-name {
  display:inline-block; max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-size:12px; color:var(--sk-ink-2); vertical-align:middle; margin-left:4px;
}
.rh-note {
  display:inline-block; max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-size:12px; color:var(--sk-ink-2);
}
.rh-cell-note { max-width:170px; }
.rh-handler {
  display:inline-block; padding:2px 10px; border-radius:6px;
  background:var(--ui-bg-page); color:var(--ui-ink-700); font-size:12px; font-weight:600;
  border:1px solid var(--ui-line-200); white-space:nowrap;
}
.cell-handler { white-space:nowrap; }
.cell-handle-time { white-space:nowrap; font-size:12px; }
.rh-source-tag {
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 8px; border-radius:999px; font-size:12px; font-weight:600; white-space:nowrap;
}
.rh-source-internal { background:var(--ui-brand-100); color:var(--pl-cyan); }
.rh-source-external { background:var(--pl-cyan-bg); color:var(--pl-pink-ink); }
.rh-status-tag {
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 8px; border-radius:999px; font-size:12px; font-weight:600; white-space:nowrap;
}
.rh-status-done { background:var(--ui-bg-soft); color:var(--ui-ink-700); }
.rh-status-todo { background:var(--ui-warn-bg); color:var(--ui-warn-ink); }

/* 返工历史 v2：内部/外部子标签（与顶部 rework-segments 视觉同源） */
.rh-tabs {
  display:inline-flex; gap:6px; padding:4px;
  background:linear-gradient(135deg,var(--ui-bg-page),var(--ui-line-100));
  border:1px solid var(--ui-line-200); border-radius:12px; margin-bottom:14px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);
}
.rh-tab {
  appearance:none; border:none; background:transparent; cursor:pointer;
  display:inline-flex; align-items:center; gap:8px;
  padding:8px 18px; border-radius:8px;
  font-size:13px; font-weight:600; color:var(--sk-ink-2);
  transition:all .15s ease;
}
.rh-tab svg { flex:none; opacity:.75; }
.rh-tab:hover { color:var(--sk-ink); background:rgba(255,255,255,.6); }
.rh-tab.active {
  background:var(--ui-bg-card); color:var(--sk-ink);
  box-shadow:0 1px 3px rgba(28,28,28, .12), 0 0 0 1px rgba(115,115,115, .18);
}
.rh-tab.active svg { opacity:1; color:var(--ui-brand-600); }

/* ===== 分装测量复核 · 8×12 矩阵网格（对标参考平台） ===== */
.pd-disp-measstart{
  margin:2px 0 8px; padding:8px 12px; border-radius:10px;
  font-size:12px; color:var(--sk-ink-2);
  background:linear-gradient(135deg,var(--ui-brand-050),var(--pl-cyan-bg));
  border:1px solid var(--ui-brand-100);
}
.pd-disp-measstart b{color:var(--ui-brand-700);font-weight:700}
.pd-meas-clip{
  width:min(300px,52vw); padding:8px 10px; margin-right:8px;
  border:1px dashed var(--ui-ink-400); border-radius:8px; font-size:12px;
  background:var(--ui-bg-card); color:var(--ui-ink-700); outline:none;
}
.pd-meas-clip:focus{border-color:var(--ui-brand-600); box-shadow:0 0 0 2px rgba(115,115,115, .15)}
.pd-meas-grid{
  display:flex; flex-direction:column; gap:2px;
  background:linear-gradient(135deg,var(--sk-soft),var(--ui-bg-page));
  border:1px solid var(--ui-line-200); border-radius:12px; padding:8px; overflow:auto; max-width:100%;
}
.pd-meas-row{display:flex; gap:2px; align-items:stretch}
.pd-meas-head{height:20px}
.pd-meas-corner{width:22px;flex:none}
.pd-meas-rnum{
  width:22px; flex:none; display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:800; color:var(--sk-ink-3);
}
.pd-meas-cnum{
  flex:1; min-width:0; display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:700; color:var(--ui-ink-400);
}
.pd-meas-cell{
  flex:1; min-width:40px; height:40px; position:relative; display:flex;
  flex-direction:column; align-items:center; justify-content:center; gap:2px;
  background:var(--ui-bg-card); border:1px solid var(--ui-line-200); border-radius:4px;
  cursor:pointer; user-select:none; transition:all .12s ease;
}
.pd-meas-cell:hover{border-color:var(--ui-brand-600); box-shadow:0 0 0 1px rgba(115,115,115, .2)}
.pd-meas-cell.m{background:var(--ui-brand-050); border-color:var(--ui-brand-100)}
.pd-meas-cell.u{background:var(--ui-warn-bg)}
.pd-meas-cell.s{outline:2px solid var(--ui-brand-600); outline-offset:1px; border-color:var(--ui-brand-600)}
.pd-meas-cell.s .pd-meas-w{color:var(--ui-brand-700)}
.pd-meas-w{font-size:11px; font-weight:700; color:var(--ui-ink-400); line-height:1}
.pd-meas-p{font-size:11px; font-weight:700; color:var(--ui-brand-600); line-height:1; max-width:100%; overflow:hidden; white-space:nowrap}
.pd-meas-v{font-size:12px; font-weight:800; color:var(--ui-ink-900); line-height:1}
/* ★ 2026-10-07：③96孔测量的「空白/不参与」格（数值 ≤0，与 absorbOf 的口径一致）淡化显示 ——
   实测把酶标仪读数粘进来时，前半板常是 -0.0076 这类近零值，若与有效读数同样醒目，
   满屏小数字看着就是"一堆脏数据"。（显示层已把浮点噪声按 4 位小数收敛，见 production.js exFmtWell） */
.pd-meas-cell.z{background:var(--sk-soft); border-color:var(--ui-line-200)}
.pd-meas-cell.z:hover{border-color:var(--ui-ink-400); box-shadow:none}
.pd-meas-cell.z .pd-meas-v{color:var(--ui-ink-300); font-weight:600}
.pd-meas-cell.z.s{outline-color:var(--ui-ink-400)}

/* ===== 目标系统首页看板（7 张数据卡片复刻）· bp- 前缀 ===== */
/* ========================================================
   生产总览 · 复刻版（2026-08-29 重做）
   - 现代扁平 + 玻璃面板，沿用项目 token
   - ECharts 容器 + 表格 + 列表混排
   - 不再使用蓝紫/橙红/黄绿大色块
   ======================================================== */
.bp-home{display:flex;flex-direction:column;gap:14px;margin:6px 0 24px}

/* —— 顶部 4 联 KPI —— */
.bp-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.bp-kpi{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px 18px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow);overflow:hidden;transition:transform .18s,box-shadow .18s,border-color .18s}
.bp-kpi:hover{transform:translateY(-1px);box-shadow:0 14px 36px -16px rgba(68,68,68, .32);border-color:var(--line-strong)}
.bp-kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand);opacity:.85}
.bp-kpi.tone-a::before{background:linear-gradient(180deg,var(--ui-danger-solid),var(--ui-danger-ink))}
.bp-kpi.tone-b::before{background:linear-gradient(180deg,var(--ui-brand-500),var(--ui-brand-700))}
.bp-kpi.tone-c::before{background:linear-gradient(180deg,var(--ui-ink-400),var(--sk-ink-3))}
.bp-kpi-ico{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--brand-2),var(--brand));flex:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)}
.bp-kpi.kpi-overdue .bp-kpi-ico{background:linear-gradient(135deg,var(--ui-ink-300),var(--ui-danger-solid))}
.bp-kpi.kpi-tasks .bp-kpi-ico{background:linear-gradient(135deg,var(--ui-ink-400),var(--pl-cyan-ink))}
.bp-kpi.kpi-devices .bp-kpi-ico{background:linear-gradient(135deg,var(--ui-ok-solid),var(--ui-ok-solid))}
.bp-kpi-main{flex:1;min-width:0}
.bp-kpi-label{font-size:12px;color:var(--txt-3);letter-spacing:.5px;font-weight:600;text-transform:uppercase}
.bp-kpi-val b{font-size:28px;font-weight:800;color:var(--txt);line-height:1.05;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.bp-kpi-sub{font-size:12px;color:var(--txt-3);margin-top:4px}
.bp-kpi-delta{color:var(--bio);font-weight:600}
.bp-kpi.tone-a .bp-kpi-sub{color:var(--txt-2)}
.bp-kpi.tone-a .bp-kpi-val b{color:var(--ui-danger-solid)}

/* —— 优先告警条 —— */
.bp-alert{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:12px;text-decoration:none;color:#fff;font-size:13px;border:1px solid transparent;box-shadow:0 6px 18px -10px rgba(220,38,38,.45)}
.bp-alert.is-danger{background:linear-gradient(95deg,var(--ui-danger-solid) 0%,var(--ui-danger-ink) 100%)}
.bp-alert.is-warn{background:linear-gradient(95deg,var(--ui-warn-solid) 0%,var(--ui-warn-ink) 100%)}
.bp-alert-ico{width:30px;height:30px;background:rgba(255,255,255,.16);border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none}
.bp-alert-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bp-alert-text b{font-weight:800;letter-spacing:.3px}
.bp-alert-go{flex:none;font-size:12px;font-weight:600;background:rgba(255,255,255,.18);padding:6px 10px;border-radius:6px}

/* —— 通用栅格 —— */
.bp-row{display:grid;gap:14px;align-items:stretch}
.bp-row-8-4{grid-template-columns:2fr 1fr}
.bp-row-7-5{grid-template-columns:7fr 5fr}
.bp-col-8,.bp-col-4,.bp-col-7,.bp-col-5,.bp-col-12{min-width:0;display:flex;flex-direction:column;gap:14px}

/* —— 通用卡片（替代旧 .bp-panel） —— */
.bp-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px 16px 16px;box-shadow:var(--shadow);backdrop-filter:blur(8px);display:flex;flex-direction:column;min-width:0;min-height:0;flex:1}
.bp-card-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.bp-card-h h3{margin:0;font-size:14px;font-weight:700;color:var(--txt);line-height:1.2}
.bp-card-en{font-size:12px;color:var(--txt-3);letter-spacing:.8px;text-transform:uppercase;font-weight:600}
.bp-card-b{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px}
.bp-chart{width:100%;min-height:240px;flex:1}

/* —— 内部链接（跳转） —— */
.bp-link{font-size:12px;color:var(--cyan-bright);text-decoration:none;cursor:pointer;font-weight:500}
.bp-link:hover{text-decoration:underline}
.bp-link-block{display:inline-block;margin-top:6px;font-size:12px}

/* —— Top 客户排名 —— */
.bp-rank{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.bp-rank-row{display:grid;grid-template-columns:18px 1fr 80px auto;align-items:center;gap:8px;padding:6px 0}
.bp-rank-i{width:18px;height:18px;line-height:18px;text-align:center;border-radius:4px;font-size:12px;font-weight:700;background:rgba(68,68,68, .10);color:var(--brand)}
.bp-rank-row.has-over .bp-rank-i{background:rgba(220,38,38,.10);color:var(--ui-danger-solid)}
.bp-rank-n{font-size:12px;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bp-rank-b{position:relative;height:6px;border-radius:4px;background:rgba(68,68,68, .08);overflow:hidden}
.bp-rank-fill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,var(--brand-2),var(--brand));border-radius:4px}
.bp-rank-row.has-over .bp-rank-fill{background:linear-gradient(90deg,var(--ui-ink-300),var(--ui-danger-solid))}
.bp-rank-v{font-size:12px;color:var(--txt-2);text-align:right;font-variant-numeric:tabular-nums}
.bp-rank-v b{color:var(--txt);font-weight:800;margin-right:2px}
.bp-rank-v i{color:var(--ui-danger-solid);font-style:normal;font-weight:600}

/* —— 优先待办 —— */
.bp-todo{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.bp-todo-row{display:grid;grid-template-columns:1fr 26px auto;align-items:center;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line)}
.bp-todo-row:last-child{border-bottom:none}
.bp-todo-tx{display:flex;flex-direction:column;min-width:0}
.bp-todo-lb{font-size:12px;font-weight:600;color:var(--txt)}
.bp-todo-vl{font-size:12px;color:var(--txt-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bp-todo-cnt{height:22px;line-height:22px;border-radius:10px;text-align:center;background:rgba(68,68,68, .08);color:var(--brand);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.bp-todo-row.on .bp-todo-cnt{background:linear-gradient(135deg,var(--ui-ink-300),var(--ui-danger-solid));color:#fff;box-shadow:0 4px 10px -4px rgba(220,38,38,.45)}

/* —— 中间质检 —— */
.bp-qc{display:flex;flex-direction:column;gap:10px}
.bp-qc-big{display:flex;align-items:baseline;gap:8px}
.bp-qc-big b{font-size:28px;font-weight:800;line-height:1;color:var(--brand);letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.bp-qc-big i{font-style:normal;font-size:12px;color:var(--txt-3);font-weight:600}
.bp-qc-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.bp-qc-cell{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:2px}
.bp-qc-cell b{font-size:18px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums;line-height:1.1}
.bp-qc-cell span{font-size:12px;color:var(--txt-3);font-weight:600}
.bp-qc-cell.tone-a b{color:var(--pl-cyan-ink)}
.bp-qc-cell.tone-b b{color:var(--ui-brand-600)}

/* —— 表格（工段工作 / 交期风险） —— */
.bp-table{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}
.bp-table thead th{text-align:left;font-size:12px;font-weight:700;color:var(--txt-3);letter-spacing:.4px;text-transform:uppercase;padding:6px 8px;border-bottom:1px solid var(--line);background:rgba(68,68,68, .03)}
.bp-table tbody td{padding:10px 8px;border-bottom:1px solid var(--line);color:var(--txt-2)}
.bp-table tbody tr:last-child td{border-bottom:none}
.bp-table tbody tr:hover td{background:rgba(68,68,68, .03)}
.bp-tbl-nm{font-weight:700;color:var(--txt)}
.bp-tbl-bar{position:relative;height:6px;border-radius:4px;background:rgba(68,68,68, .08);overflow:hidden;min-width:60px}
.bp-tbl-fill{position:absolute;left:0;top:0;bottom:0;border-radius:4px}
.bp-tbl-fill.tone-a{background:linear-gradient(90deg,var(--ui-ink-300),var(--ui-danger-solid))}
.bp-tbl-fill.tone-b{background:linear-gradient(90deg,var(--ui-ok-solid),var(--ui-ok-solid))}
.bp-tbl-fill.tone-c{background:linear-gradient(90deg,var(--ui-warn-line),var(--ui-warn-solid))}
.bp-tbl-tags{display:flex;flex-wrap:wrap;gap:4px}
.bp-tag{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:4px;font-size:12px;font-weight:600;background:rgba(68,68,68, .08);color:var(--brand)}
.bp-tag.tone-a{background:rgba(220,38,38,.10);color:var(--ui-danger-solid)}
.bp-tag.tone-c{background:rgba(217,119,6,.12);color:var(--ui-warn-ink)}
.text-ok{color:var(--bio);font-weight:700}
.text-warn{color:var(--ui-warn-ink);font-weight:700}
.text-danger{color:var(--ui-danger-solid)}
.text-dim{color:var(--txt-3)}

/* —— 空状态 —— */
.bp-empty{font-size:12px;color:var(--txt-3);padding:14px;text-align:center}

/* —— 响应式 —— */
@media (max-width:1280px){ .bp-kpis{grid-template-columns:repeat(2,1fr)} }
@media (max-width:1280px){ .bp-row-8-4,.bp-row-7-5{grid-template-columns:1fr} }
.pd-meas-cell.s .pd-meas-v{color:var(--ui-brand-700)}

/* 异常返工 · 工段/站点筛选（对齐规格按工段筛选） */
.rework-filter-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:-6px 0 12px}
.rework-station-filter-lbl{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--ui-ink-700)}
.rework-station-filter{height:38px;min-width:180px;max-width:260px;padding:0 12px;border:1px solid rgba(68,68,68, .18);border-radius:10px;font-size:13px;color:var(--ui-ink-700);background:rgba(255,255,255,.72);outline:none}
.rework-station-filter:focus{border-color:var(--cyan,var(--ui-brand-600));box-shadow:0 0 0 4px rgba(115,115,115, .15)}

/* ============ 交期试算诊断（dd- 作用域，V4 多维规则）2026-08-25 ============ */
.dd-layout{display:flex;gap:14px;align-items:flex-start}
.dd-col{min-width:0}
.dd-col-left{flex:0 0 370px}
.dd-col-right{flex:1;min-width:0}
@media (max-width:1280px){.dd-layout{flex-direction:column}.dd-col-left{flex:1 1 auto;width:100%}}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;font-variant-numeric:tabular-nums}
.diag-tab .left{text-align:left}
/* 试算输入 */
.dd-form{display:flex;flex-direction:column;gap:10px;padding:4px 0 2px}
.dd-flabel{font-size:12px;color:var(--txt-2);font-weight:600}
.dd-select{height:34px;border:1px solid var(--line);border-radius:8px;padding:0 10px;font-size:13px;color:var(--txt-1);background:var(--ui-bg-card);outline:none}
.dd-select:focus{border-color:var(--brand-2);box-shadow:0 0 0 3px rgba(115,115,115, .12)}
.dd-dims{display:flex;flex-wrap:wrap;gap:6px}
.dd-dim{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--txt-2);background:rgba(198,198,198, .08);border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;user-select:none}
.dd-dim:hover{border-color:var(--line-strong)}
.dd-dim-cb{accent-color:var(--brand-2)}
.dd-run{width:100%;justify-content:center;padding:10px;color:#fff;background:var(--grad);border:none;box-shadow:0 8px 20px -8px rgba(115,115,115, .45)}
.dd-run:disabled{opacity:.65;cursor:not-allowed}
.dd-hints{display:flex;flex-wrap:wrap;gap:6px}
.dd-pill{font-size:12px;color:var(--txt-3);background:rgba(198,198,198, .08);border:1px solid var(--line);border-radius:999px;padding:4px 10px}
.dd-ok{color:var(--ui-ok-ink) !important;border-color:rgba(10,112,67,.3);background:rgba(10,112,67,.08) !important}
.dd-err{color:var(--ui-danger-ink)}
/* 汇总指标 */
.dd-metric{display:flex;flex-direction:column;gap:2px;padding:10px 2px;border-bottom:1px dashed rgba(179,179,179, .18)}
.dd-metric:last-of-type{border-bottom:none}
.dd-mn{font-size:12px;color:var(--txt-3)}
.dd-mv{font-size:20px;font-weight:800;color:var(--ui-ink-700);font-variant-numeric:tabular-nums}
.dd-ms{font-size:12px;color:var(--txt-3)}
.dd-msg{font-size:12px;color:var(--txt-2);padding:8px 0;line-height:1.5}
.dd-msg.dd-ok{color:var(--ui-ok-ink);font-weight:600}
/* 规则维护入口卡片 */
.dd-note{font-size:12px;color:var(--txt-2);margin:6px 0 10px;line-height:1.55}
.dd-rule-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
@media (max-width:760px){.dd-rule-cards{grid-template-columns:1fr}}
.dd-rule-card{text-align:left;border:1px solid var(--line);border-radius:12px;padding:12px 12px;background:var(--ui-bg-card);cursor:pointer;display:flex;flex-direction:column;gap:4px}
.dd-rule-card:hover{border-color:var(--brand-2);box-shadow:0 6px 16px -10px rgba(115,115,115, .35);transform:translateY(-1px)}
.dd-rule-title{font-size:13px;font-weight:700;color:var(--ui-ink-700)}
.dd-rule-desc{font-size:12px;color:var(--txt-3);line-height:1.5}
.dd-rule-count{margin-top:2px;font-size:12px;font-weight:700;color:var(--brand-2)}
/* 结果表状态 */
.dd-has-factor{background:rgba(217,119,6,.10)}
.dd-has-diff{background:rgba(115,115,115, .07)}
.dd-v4{font-weight:700;color:var(--ui-brand-700)}
.dd-reason{font-size:12px;color:var(--txt-2)}
.dd-apply{color:#fff;background:var(--grad);border:none}
/* 弹窗 */
.dd-mask{position:fixed;inset:0;background:rgba(28,28,28, .45);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px}
.dd-card{background:var(--ui-bg-card);border-radius:16px;box-shadow:0 30px 60px -20px rgba(28,28,28, .35);width:860px;max-width:96vw;max-height:92vh;display:flex;flex-direction:column;overflow:hidden}
.dd-card.dd-wide{width:1200px}
.dd-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 18px;border-bottom:1px solid var(--line)}
.dd-card-head h3{margin:0;font-size:14px;color:var(--ui-ink-700)}
.dd-card-body{padding:14px 18px;overflow:auto}
.dd-card-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 18px;border-top:1px solid var(--line);flex-wrap:wrap}
/* 规则维护页签 */
.dd-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.dd-tab{border:1px solid var(--line);background:var(--ui-bg-card);color:var(--txt-2);border-radius:999px;padding:6px 14px;font-size:12px;font-weight:600;cursor:pointer}
.dd-tab:hover{border-color:var(--line-strong);color:var(--txt)}
.dd-tab.active{background:var(--grad);border-color:transparent;color:#fff}
/* 规则表格 */
.dd-rule-table{width:100%;border-collapse:collapse;font-size:12px}
.dd-rule-table th{position:sticky;top:0;background:var(--ui-bg-page);color:var(--txt-2);font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;z-index:1}
.dd-rule-table td{padding:8px 10px;border-bottom:1px dashed rgba(179,179,179, .16);vertical-align:middle}
.dd-rule-table tr:last-child td{border-bottom:0}
/* 规则字段宽 */
.dd-inp{height:30px;border:1px solid var(--line);border-radius:8px;padding:0 8px;font-size:12px;color:var(--txt-1);background:var(--ui-bg-card);outline:none;box-sizing:border-box}
.dd-inp:focus{border-color:var(--brand-2);box-shadow:0 0 0 3px rgba(115,115,115, .12)}
.dd-inp.w-mini{width:62px}
.dd-inp.w-sm{width:92px}
.dd-inp.w-md{width:132px}
.dd-inp.w-lg{width:196px}
.dd-inp.w-type{width:150px}
.dd-inp.w-pos{width:120px}
.dd-del{color:var(--ui-danger-ink)}
.dd-arming{background:var(--ui-danger-bg) !important;border-color:var(--ui-danger-line) !important;color:var(--ui-danger-ink) !important;font-weight:700}
/* 修饰位置多选 */
.dd-pos{display:inline-flex;gap:4px;align-items:center}
.dd-pos-btn{border:1px solid var(--line);background:var(--ui-bg-card);color:var(--txt-2);border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer}
.dd-pos-btn:hover{border-color:var(--line-strong)}
.dd-pos-btn.active{background:var(--brand-2);border-color:var(--brand-2);color:#fff}
/* 写入核对弹窗 */
.dd-write-note{font-size:12px;color:var(--txt-2);line-height:1.55;padding:10px 0 12px}
.dd-write-sum{margin-bottom:12px}
.dd-write th,.dd-write td{white-space:nowrap}

/* ===== ★ 2026-08-25 模块切换即时骨架屏（配合 app.js ensureModule）===== */
.view-skeleton{padding:28px}
.view-skeleton .sk-line,.view-skeleton .sk-card{border-radius:12px;margin-bottom:14px;
  background:linear-gradient(90deg,rgba(144,144,144, .10),rgba(144,144,144, .22),rgba(144,144,144, .10));
  position:relative;overflow:hidden}
.view-skeleton .sk-line::after,.view-skeleton .sk-card::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.5) 50%,transparent 100%);
  transform:translateX(-120%);will-change:transform;animation:skPulse 1.2s ease-in-out infinite}
.view-skeleton .sk-title{height:34px;width:220px}
.view-skeleton .sk-card{height:88px}
.view-skeleton .sk-60{width:60%}
.view-skeleton .sk-80{width:80%}
/* ★ 2026-10-09 性能收口：光带由 background-position 改成平移覆盖层（合成属性） */
@keyframes skPulse{0%{transform:translateX(-120%)}100%{transform:translateX(120%)}}

/* ===== ★ 2026-08-25 移动端适配修复（基于 390px 无头浏览器实测）===== */
@media (max-width:760px){
  /* 顶栏：允许换行；时钟/日期在窄屏原本被屏幕裁掉一半，直接隐藏 */
  .topbar{flex-wrap:wrap;row-gap:8px;padding:10px 14px}
  .topbar .clock{display:none}

  /* 订单中心大表：从「直接裁切不可见」改为容器内横向滑动 */
  .oc-tbl-wrap{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
  .oc-tbl-wrap table{min-width:900px}

  /* 生产执行等模块的表格容器：确保窄屏下可横滑（覆盖早前的 overflow:hidden 规则） */
  .pd2-table-wrap,.pd-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}

  /* 详情抽屉窄屏占满 */
  .drawer{width:100vw;max-width:100vw}

  /* tab 触控目标加高 */
  .tabs .tab{padding-top:10px;padding-bottom:10px}
}

/* ===== ★ 2026-08-25 生产总览：中间质检待处理卡（吸收自 BP 卡区）===== */
.ov-qcpending{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:6px 2px}
.ov-qc-big{font-size:32px;font-weight:800;line-height:1;color:var(--brand,var(--ui-brand-700))}
.ov-qc-subs{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--txt-3,var(--sk-ink-3))}
.ov-qc-subs b{color:var(--txt,var(--ui-ink-900));font-size:13px}
.ov-qc-go{margin-left:auto;font-size:12px;font-weight:700;color:var(--cyan,var(--pl-cyan));text-decoration:none;white-space:nowrap}
.ov-qc-go:hover{text-decoration:underline}

/* ============================================================
   生产总览 · 高端化（2026-08-29）
   统一卡片玻璃质感、KPI 醒目大数、卡片头色条，整体更沉稳专业。
   仅增强样式，不影响数据与交互。
   ============================================================ */
/* 每块基础：更轻的玻璃面板 + 更精致的阴影 */
.bp-card{border-radius:16px;background:linear-gradient(180deg,rgba(255,255,255,.02),transparent),var(--panel);border:1px solid var(--line);box-shadow:0 10px 30px -18px rgba(68,68,68, .28),0 1px 0 rgba(255,255,255,.35) inset;backdrop-filter:blur(12px)}
.bp-card-h{position:relative;margin-bottom:12px;padding-bottom:10px}
.bp-card-h::after{content:'';position:absolute;left:0;bottom:0;width:46px;height:3px;border-radius:999px;background:linear-gradient(90deg,var(--cyan-bright,var(--pl-cyan)),var(--brand,var(--ui-brand-700)));opacity:.9}
.bp-card-h h3{font-size:14px;font-weight:800;letter-spacing:.2px}
.bp-card-en{font-size:12px;color:var(--txt-3);letter-spacing:1.1px;font-weight:700}

/* KPI 卡：渐变数值 + 更醒目的布局 */
.bp-kpi{border-radius:16px;padding:18px 20px;gap:16px;border:1px solid var(--line);box-shadow:0 14px 38px -20px rgba(68,68,68, .35),0 1px 0 rgba(255,255,255,.35) inset;backdrop-filter:blur(12px)}
.bp-kpi-ico{width:46px;height:46px;border-radius:12px;box-shadow:0 8px 20px -8px rgba(68,68,68, .45), inset 0 1px 0 rgba(255,255,255,.25)}
.bp-kpi-label{font-size:12px;letter-spacing:.9px;font-weight:700;color:var(--txt-3);text-transform:uppercase}
.bp-kpi-val b{font-size:32px;font-weight:900;letter-spacing:-1px;background:linear-gradient(120deg,var(--txt) 20%,var(--brand,var(--ui-brand-700)));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.bp-kpi-sub{font-size:12px;color:var(--txt-3)}
.bp-kpi.tone-a .bp-kpi-val b{background:linear-gradient(120deg,var(--ui-danger-ink),var(--ui-danger-solid));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.bp-kpi.tone-c .bp-kpi-val b{background:linear-gradient(120deg,var(--ui-ink-700),var(--sk-ink-3));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}

/* 告警条：更圆润 */
.bp-alert{border-radius:14px;padding:14px 18px;box-shadow:0 12px 28px -14px rgba(220,38,38,.5)}

/* 排名 / 表格：更细腻 */
.bp-rank-row{padding:6px 0}
.bp-rank-i{border-radius:6px;box-shadow:inset 0 0 0 1px rgba(68,68,68, .10)}
.bp-table thead th{background:rgba(68,68,68, .05);font-size:12px;letter-spacing:.8px}

/* 交期/设备等数值大图：统一字重与颜色 */
.bp-qc-big b,.ov-qc-big{font-size:32px;font-weight:900;letter-spacing:-1px;background:linear-gradient(120deg,var(--brand,var(--ui-brand-700)),var(--cyan-bright,var(--pl-cyan)));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.bp-qc-cell{border-radius:12px}
.bp-qc-cell b{font-size:18px;font-weight:800}


/* ===== 班次徽章 + 人员弹层（2026-09-02）===== */
.shift{cursor:pointer;position:relative;user-select:none}
.shift .lbl{opacity:.62;font-size:12px}
.shift .sh-arrow{opacity:.5;transition:transform .18s}
.shift:hover{border-color:rgba(115,115,115, .45);box-shadow:0 2px 8px rgba(115,115,115, .14)}
.shift:hover .sh-arrow{transform:translateY(1px);opacity:.85}
.shift-cnt{font-size:12px;font-weight:700;color:#fff;background:var(--bio,var(--ui-ok-solid));border-radius:8px;padding:2px 8px;line-height:16px}
.shift-pop{position:fixed;z-index:400;min-width:250px;max-width:380px;background:var(--ui-bg-card);border:1px solid var(--line,var(--ui-line-200));border-radius:14px;box-shadow:0 12px 34px rgba(68,68,68, .16);padding:14px 16px;font-size:12px;color:var(--txt,var(--ui-ink-900));animation:spIn .18s ease}
@keyframes spIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}
.shift-pop .sp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.shift-pop .sp-title{font-weight:700;font-size:13px}
.shift-pop .sp-date{font-size:12px;color:var(--txt-3,var(--ui-ink-400))}
.shift-pop .sp-cur{margin:8px 0 10px;padding:8px 10px;border-radius:8px;background:rgba(10,112,67,.10);color:var(--bio,var(--ui-ok-solid));font-weight:700;font-size:12px}
.shift-pop .sp-sec{margin-top:10px}
.shift-pop .sp-sec-h{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2,var(--ui-ink-500));font-weight:600}
.shift-pop .sp-sec-h .n{font-weight:700;color:var(--bio,var(--ui-ok-solid))}
.shift-pop .sp-sec-h .tm{font-size:12px;color:var(--txt-3,var(--ui-ink-400));font-weight:400}
.shift-pop .sp-sec.on .sp-sec-h{color:var(--bio,var(--ui-ok-solid))}
.shift-pop .sp-sec.on .sp-sec-h .tm{color:var(--bio,var(--ui-ok-solid))}
.shift-pop .sp-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.shift-pop .chip{background:var(--ui-brand-100);border:1px solid var(--ui-bg-soft);border-radius:6px;padding:2px 10px;font-size:12px;color:var(--ui-brand-900)}
.shift-pop .sp-sec.on .chip{background:rgba(10,112,67,.12);border-color:rgba(10,112,67,.35);color:var(--ui-ok-solid)}
.shift-pop .sp-empty{color:var(--txt-3,var(--ui-ink-400));font-size:12px;padding:6px 0}
.shift-pop .sp-foot{margin-top:12px;padding-top:8px;border-top:1px dashed var(--line,var(--ui-line-200));font-size:12px;color:var(--txt-3,var(--ui-ink-400));line-height:1.7}

/* ===== 明细行 · 「作业完成时间」列：8 工段紧凑竖排（定宽工段名 + 等宽时间，不折行） ===== */
.detail-table td.sjt-cell{padding:6px 8px;font-size:11px;line-height:1.5;white-space:normal;vertical-align:top}
.sjt-cell .sjt-row{display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.sjt-cell .sjt-row .sjt-st{flex:0 0 50px;color:var(--txt-3);font-size:11px}
.sjt-cell .sjt-row .sjt-tm{font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);color:var(--txt-2);font-size:11px;letter-spacing:.2px}
.sjt-cell .sjt-row.sjt-none .sjt-tm{color:var(--txt-3);opacity:.45}

/* ===== 明细行 · 「作业完成时间」列 v2：一行站点进度条（彩色小格子，悬停看该工段完成时间）+ 末段时间 ===== */
.detail-table td.sjt-cell{padding:8px 10px;white-space:normal;vertical-align:top}
.sjt-cell .sjt-bar{display:flex;flex-wrap:wrap;gap:4px}
.sjt-cell .sjt-chip{display:inline-block;padding:2px 6px;border-radius:4px;font-size:11px;line-height:16px;white-space:nowrap;border:1px solid transparent;cursor:default}
.sjt-cell .sjt-chip.done{background:rgba(10,112,67,.16);color:var(--ui-ok-solid);border-color:rgba(10,112,67,.38)}
.sjt-cell .sjt-chip.doing{background:rgba(115,115,115, .14);color:var(--ui-brand-700);border-color:rgba(115,115,115, .34)}
.sjt-cell .sjt-chip.skip{background:rgba(217,119,6,.14);color:var(--ui-warn-ink);border-color:rgba(217,119,6,.34)}
.sjt-cell .sjt-chip.none{background:rgba(144,144,144, .12);color:var(--ui-ink-300);border-color:rgba(144,144,144, .4);border-style:dashed}
.sjt-cell .sjt-last{margin-top:6px;font-size:11px;color:var(--txt-2);font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);white-space:nowrap}
.sjt-cell .sjt-last .sjt-empty{color:var(--txt-3);font-family:inherit}

/* ===== 站点进度条 v3：状态图标 + 末段高亮 + 进度摘要 ===== */
.sjt-cell .sjt-chip i{font-style:normal;font-size:11px;opacity:.92;margin-right:2px;font-weight:700}
.sjt-cell .sjt-chip.done i{color:var(--ui-ok-solid)}
.sjt-cell .sjt-chip.doing i{color:var(--ui-brand-700)}
.sjt-cell .sjt-chip.skip i{color:var(--ui-warn-ink)}
.sjt-cell .sjt-chip.none i{color:var(--ui-ink-300)}
.sjt-cell .sjt-chip.done.last{background:rgba(10,112,67,.26);box-shadow:0 0 0 1.5px rgba(10,112,67,.5)}
.sjt-cell .sjt-last b{color:var(--ui-ok-solid);font-weight:800;font-family:inherit}
/* v3 微调：收紧内边距，让 8 格压回 2 行 */
.sjt-cell .sjt-chip{padding:2px 4px}
.sjt-cell .sjt-chip i{margin-right:2px;font-size:11px}

/* ===== 站点进度条 v4：8 段等宽、永远单行（flex:1，不换行；完整名称/时间见悬停） ===== */
.sjt-cell .sjt-bar{display:flex;flex-wrap:nowrap;gap:2px;align-items:stretch}
.sjt-cell .sjt-seg{flex:1 1 0;min-width:0;display:flex;align-items:center;justify-content:center;padding:2px 2px;border-radius:4px;font-size:11px;line-height:15px;white-space:nowrap;overflow:hidden;border:1px solid transparent;cursor:default}
.sjt-cell .sjt-seg i{font-style:normal;font-size:11px;font-weight:700;opacity:.92;margin-right:2px}
.sjt-cell .sjt-seg.done{background:rgba(10,112,67,.16);color:var(--ui-ok-solid);border-color:rgba(10,112,67,.38)}
.sjt-cell .sjt-seg.done i{color:var(--ui-ok-solid)}
.sjt-cell .sjt-seg.doing{background:rgba(115,115,115, .14);color:var(--ui-brand-700);border-color:rgba(115,115,115, .34)}
.sjt-cell .sjt-seg.doing i{color:var(--ui-brand-700)}
.sjt-cell .sjt-seg.skip{background:rgba(217,119,6,.14);color:var(--ui-warn-ink);border-color:rgba(217,119,6,.34)}
.sjt-cell .sjt-seg.skip i{color:var(--ui-warn-ink)}
.sjt-cell .sjt-seg.none{background:rgba(144,144,144, .12);color:var(--ui-ink-300);border-color:rgba(144,144,144, .4);border-style:dashed}
.sjt-cell .sjt-seg.none i{color:var(--ui-ink-300)}
.sjt-cell .sjt-seg.done.last{background:rgba(10,112,67,.3);box-shadow:0 0 0 1.5px rgba(10,112,67,.55);font-weight:700}
/* v4 细节：进度条底轨 + 摘要行精修 */
.sjt-cell .sjt-bar{background:rgba(144,144,144, .08);border-radius:6px;padding:2px}
.sjt-cell .sjt-seg{padding:2px}
.sjt-cell .sjt-last{margin-top:4px;display:flex;align-items:center;gap:6px;font-size:11px;color:var(--txt-3);font-family:inherit}
.sjt-cell .sjt-last .n{display:inline-flex;align-items:center;gap:2px;font-weight:800;color:var(--ui-ok-solid);font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace)}
.sjt-cell .sjt-last .seg-tm{font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);color:var(--txt-2)}

/* ===== 面板通用骨架（此前缺失：eta-head / eta-toolbar / eta-count / eta-warn） ===== */
.eta-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:2px 0 14px;border-bottom:1px solid var(--line);margin-bottom:14px}
.eta-head h3{font-size:18px;font-weight:800;letter-spacing:.2px;margin:0;color:var(--txt)}
.eta-head .eta-sub{font-size:12px;color:var(--txt-3);margin-top:6px;line-height:1.6;max-width:820px}
.eta-head .eta-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.eta-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;margin:10px 0;border:1px solid var(--line);border-radius:12px;background:linear-gradient(180deg,rgba(115,115,115, .05),rgba(115,115,115, .015))}
.eta-count{font-size:12px;color:var(--txt-2);line-height:1.5}
.eta-count b{color:var(--txt);font-weight:800}
.eta-warn{margin:10px 0;padding:10px 12px;border:1px solid rgba(220,38,38,.28);background:rgba(220,38,38,.06);border-radius:12px;font-size:12px;color:var(--pl-pink-ink);line-height:1.6}
.eta-warn.ok{border-color:rgba(10,112,67,.32);background:rgba(10,112,67,.08);color:var(--ui-ok-solid)}
.eta-src{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--txt-3);background:rgba(68,68,68, .05);border:1px solid var(--line);border-radius:999px;padding:4px 10px}

/* ===== 上传交期面板 ===== */
.dlu{display:flex;flex-direction:column;gap:12px;min-height:0}
.dlu-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.dlu-stat{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(249,249,249, .75))}
.dlu-stat .k{font-size:11px;color:var(--txt-3);display:flex;align-items:center;gap:6px}
.dlu-stat .v{font-size:20px;font-weight:800;color:var(--txt);margin-top:4px;font-variant-numeric:tabular-nums}
.dlu-stat .v small{font-size:12px;font-weight:600;color:var(--txt-3);margin-left:4px}
.dlu-stat.warn{border-color:rgba(220,38,38,.3);background:linear-gradient(180deg,rgba(253,240,245,.95),rgba(253,240,245,.8))}
.dlu-stat.ok{border-color:rgba(10,112,67,.3);background:linear-gradient(180deg,rgba(250,250,250, .95),rgba(250,250,250, .8))}
.dlu-wrap{flex:1 1 auto;min-height:220px;max-height:calc(100vh - 400px)}
.dlu-wrap table{font-size:13px}
.dlu-wrap thead th{position:sticky;top:0;z-index:3;background:var(--ui-brand-050);font-size:12px;letter-spacing:.2px}
.dlu-wrap tbody tr:nth-child(even) td{background:rgba(249,249,249, .55)}
.dlu-wrap tbody tr:hover td{background:rgba(198,198,198, .10)}
.dlu-wrap td.oid{font-weight:800;color:var(--txt);white-space:nowrap}
.dlu-wrap td.tm{font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-variant-numeric:tabular-nums;white-space:nowrap}
.dlu-wrap td.tm.empty,.dlu-wrap td.cust.empty{color:var(--ui-warn-ink)}
.dlu-wrap td.cust{font-weight:700}
.dlu-wrap td.dept{color:var(--txt-2)}
.dlu-badge{display:inline-block;font-size:11px;font-weight:700;border-radius:6px;padding:2px 6px;margin-left:6px;vertical-align:middle}
.dlu-badge.src{background:rgba(115,115,115, .1);color:var(--ui-brand-700);border:1px solid rgba(115,115,115, .22)}
.dlu-badge.miss{background:rgba(180,83,9,.12);color:var(--ui-warn-ink);border:1px solid rgba(180,83,09,.25)}
.dlu-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.96);backdrop-filter:blur(6px);box-shadow:0 -6px 20px -12px rgba(28,28,28, .28)}
.dlu-bar .dlu-note{font-size:12px;color:var(--txt-3);line-height:1.55;flex:1 1 320px;min-width:220px}
.dlu-bar .dlu-btns{display:flex;align-items:center;gap:8px;margin-left:auto}
.dlu-bar .mbtn.primary{background:linear-gradient(135deg,var(--ui-brand-600),var(--ui-brand-600));color:#fff;border-color:transparent;font-weight:800;box-shadow:0 8px 20px -10px rgba(115,115,115, .75)}
.dlu-bar .mbtn.primary:hover{filter:brightness(1.06)}
.dlu-bar .mbtn.primary:disabled{opacity:.65;filter:grayscale(.15);cursor:not-allowed}
.dlu-file{font-size:12px;color:var(--txt-3);font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);word-break:break-all}
.dlu-empty{padding:26px 18px;text-align:center;color:var(--txt-3);font-size:13px;line-height:1.7;border:1px dashed var(--line);border-radius:14px;background:rgba(249,249,249, .5)}
@media (max-width:720px){.dlu-wrap{max-height:52vh}.eta-head h3{font-size:16px}}

/* ===== 上传交期：预计交货时间可手动调整 ===== */
.dlu-wrap td.eta-cell{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;white-space:nowrap}
.dlu-eta{width:150px;padding:4px 6px;border:1px solid var(--line);border-radius:8px;background:var(--ui-bg-card);color:var(--txt);font-size:12px;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);font-variant-numeric:tabular-nums}
.dlu-eta:focus{outline:none;border-color:rgba(115,115,115, .55);box-shadow:0 0 0 3px rgba(115,115,115, .12)}
.dlu-wrap tr.edited td{background:rgba(254,245,231,.85)!important}
.dlu-wrap tr.edited .dlu-eta{border-color:rgba(217,119,6,.6);background:var(--ui-warn-bg)}
.dlu-eta-btns{display:inline-flex;gap:4px}
.dlu-mini{padding:2px 6px;font-size:11px;line-height:1.4;border:1px solid var(--line);border-radius:6px;background:var(--ui-bg-card);color:var(--txt-2);cursor:pointer;white-space:nowrap}
.dlu-mini:hover{background:rgba(115,115,115, .07);border-color:rgba(115,115,115, .35);color:var(--ui-brand-700)}
.dlu-badge.edit{background:rgba(217,119,6,.14);color:var(--ui-warn-ink);border:1px solid rgba(217,119,6,.32)}
.dlu-sync{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2);margin-top:6px;cursor:pointer;user-select:none}
.dlu-sync input{width:14px;height:14px;accent-color:var(--ui-brand-600);cursor:pointer}
.dlu-bar .dlu-note b{color:var(--txt)}
@media (max-width:1280px){.dlu-eta-btns{display:none}}

/* ===== 上传交期：选 Excel 直接上传（与参考软件 EstimatedDate.exe 同一入口） ===== */
.dlu-xls{margin-top:10px;border:1px solid var(--line);border-radius:12px;background:rgba(249,249,249, .9);padding:10px 12px}
.dlu-xls-head{font-size:12px;color:var(--txt-2);line-height:1.6}
.dlu-xls-head b{color:var(--txt)}
.dlu-xls-wrap{max-height:230px;overflow:auto;margin-top:8px;border:1px solid var(--line);border-radius:10px;background:var(--ui-bg-card)}
.dlu-xls-tb{width:100%;border-collapse:collapse;font-size:12px}
.dlu-xls-tb thead th{position:sticky;top:0;background:var(--ui-brand-050);font-size:12px;text-align:left;padding:6px 10px;color:var(--txt-2);white-space:nowrap}
.dlu-xls-tb td{padding:6px 10px;border-top:1px solid var(--line);font-variant-numeric:tabular-nums;white-space:nowrap}
.dlu-xls-tb td:nth-child(1){font-weight:800;color:var(--txt)}
.dlu-xls-tb tbody tr:nth-child(even) td{background:rgba(249,249,249, .55)}
.dlu-up{color:var(--ui-warn-ink)}
.dlu-ok{margin-top:8px;font-size:12px;color:var(--pl-cyan-ink);background:rgba(10,112,67,.1);border:1px solid rgba(10,112,67,.3);border-radius:10px;padding:8px 10px}
.dlu-warn{margin-top:8px;font-size:12px;color:var(--ui-warn-ink);background:rgba(217,119,6,.1);border:1px solid rgba(217,119,6,.32);border-radius:10px;padding:8px 10px}
.dlu-logs{margin:8px 0 0;padding:8px 10px;max-height:150px;overflow:auto;background:var(--sk-ink);color:var(--ui-ok-line);border-radius:10px;font-size:11px;line-height:1.55;font-family:var(--mono,ui-monospace,Menlo,Consolas,monospace);white-space:pre-wrap}
.dlu-btns2{display:flex;align-items:center;gap:8px;margin-top:10px}
.dlu-btns2 .mbtn.primary{background:linear-gradient(135deg,var(--ui-brand-600),var(--ui-brand-600));color:#fff;border-color:transparent;font-weight:800}
.dlu-btns2 .mbtn.primary:disabled{opacity:.65;cursor:not-allowed}
.dlu-bar #dluExcelBox{flex:1 1 100%;min-width:100%}
.dlu-bar #dluExcelBox .dlu-xls{margin-top:2px}

/* ---------- 2026-09-24 补回：交期预估面板（合并上传交期 + 平台核对列 + 分钟级改时间）所需样式 ---------- */
#etaBody table:not(.show-detail) .eta-detail{display:none}
#etaBody td.plat{font-size:12px;color:var(--txt-2);white-space:nowrap}
#etaBody td.plat.num{text-align:right}
#etaBody .etaAutoHint{white-space:nowrap;line-height:1.4}
#etaBody .etaManualBadge .badge{font-size:11px;padding:2px 6px}

/* ============ 交期预估：操作优先布局（2026-10-21） ============ */
.modal.fullscreen:has(#etaBody){padding:58px 32px 24px;background:var(--panel-2)}
.modal.fullscreen:has(#etaBody) .eta-head{align-items:center;padding:4px 2px 14px;margin:0 0 12px;border-bottom:1px solid var(--line)}
.modal.fullscreen:has(#etaBody) .eta-head h3{font-size:22px;letter-spacing:0;color:var(--ui-brand-700)}
.modal.fullscreen:has(#etaBody) .eta-head .eta-sub{margin-top:5px;font-size:12px;color:var(--txt-3)}
.modal.fullscreen:has(#etaBody) .eta-head .eta-actions{margin:0}
#etaBody:not(.loading){display:flex;flex:1;flex-direction:column;gap:12px;min-height:0}
#etaBody .eta-toolbar{display:flex;flex:none;flex-direction:column;align-items:stretch;gap:12px;padding:14px 16px;margin:0;border:1px solid var(--line);border-radius:12px;background:var(--ui-bg-card)}
#etaBody .eta-toolbar-summary{display:flex;align-items:center;justify-content:space-between;gap:16px}
#etaBody .eta-toolbar-summary>div{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
#etaBody .eta-toolbar-summary strong{font-size:14px;color:var(--txt)}
#etaBody .eta-toolbar-summary>div span{font-size:12px;color:var(--txt-3)}
#etaBody .eta-selection-count{padding:5px 10px;border:1px solid var(--line);border-radius:999px;background:var(--ui-brand-050);font-size:12px;font-weight:700;color:var(--ui-brand-700);white-space:nowrap}
#etaBody .eta-toolbar-controls{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
#etaBody .eta-config{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
#etaBody .eta-operator>label{gap:8px;font-size:12px;font-weight:700;color:var(--txt-2)}
#etaBody .eta-operator select{min-width:150px;padding:8px 10px!important;border-radius:8px!important}
#etaBody .eta-dbchk{gap:7px;font-size:12px;color:var(--txt-2)}
#etaBody .eta-dbchk input{width:15px;height:15px;accent-color:var(--ui-brand-600)}
#etaBody .eta-detail-toggle{padding-left:16px;border-left:1px solid var(--line)}
#etaBody .eta-actions{display:flex;align-items:center;gap:8px;margin-left:auto}
#etaBody .eta-actions .mbtn{min-height:38px;padding:8px 16px;font-weight:700}
#etaBody #etaConfirmBtn{min-width:176px}
#etaBody .eta-table-wrap{flex:1;min-height:260px;max-height:none;overflow:auto;border:1px solid var(--line);border-radius:12px;background:var(--ui-bg-card)}
#etaBody .eta-table{width:100%;min-width:1280px;table-layout:fixed;border-collapse:separate;border-spacing:0;font-size:12px}
#etaBody .eta-table thead th{position:sticky;top:0;z-index:3;padding:11px 10px;background:var(--ui-brand-050);color:var(--ui-brand-700);border-bottom:1px solid var(--line);font-size:11px;letter-spacing:.15px}
#etaBody .eta-table tbody td{height:54px;padding:8px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border-bottom:1px solid var(--line);background:var(--ui-bg-card)}
#etaBody .eta-table tbody tr:nth-child(even) td{background:rgba(249,249,249,.72)}
#etaBody .eta-table tbody tr:hover td{background:var(--ui-brand-050)}
#etaBody .eta-table tbody tr:last-child td{border-bottom:0}
#etaBody .eta-table th:nth-child(1),#etaBody .eta-table td:nth-child(1){width:44px;text-align:center}
#etaBody .eta-table th:nth-child(2),#etaBody .eta-table td:nth-child(2){width:142px}
#etaBody .eta-table th:nth-child(3),#etaBody .eta-table td:nth-child(3){width:240px}
#etaBody .eta-table th:nth-child(4),#etaBody .eta-table td:nth-child(4){width:112px}
#etaBody .eta-table th:nth-child(5),#etaBody .eta-table td:nth-child(5){width:248px}
#etaBody .eta-table th:nth-child(6),#etaBody .eta-table td:nth-child(6){width:84px}
#etaBody .eta-table th:nth-child(7),#etaBody .eta-table td:nth-child(7){width:220px}
#etaBody .eta-table th:nth-child(8),#etaBody .eta-table td:nth-child(8){width:112px}
#etaBody .eta-table td:nth-child(2){font-weight:800;color:var(--ui-brand-700);font-variant-numeric:tabular-nums}
#etaBody .eta-table td:nth-child(3){font-weight:600}
#etaBody .eta-table .etaH{box-sizing:border-box;width:88px!important;padding:7px 8px!important;border:1px solid var(--line-strong)!important;border-radius:7px!important;background:var(--ui-bg-card)!important;font-size:13px!important;font-weight:700}
#etaBody .eta-table .etaEtaInput{box-sizing:border-box;width:100%!important;max-width:200px;padding:7px 8px!important;border:1px solid var(--line-strong)!important;border-radius:7px!important;background:var(--ui-bg-card)!important;font-size:12px!important;font-variant-numeric:tabular-nums}
#etaBody .eta-table .etaAutoHint{overflow:hidden;text-overflow:ellipsis;color:var(--txt-3);font-size:10px!important}
#etaBody .eta-table td.mod{max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:normal;color:var(--txt-2)}
#etaBody .eta-table .eta-detail{display:none}
#etaBody .eta-table.show-detail{width:max-content;min-width:2100px;table-layout:fixed}
#etaBody .eta-table.show-detail .eta-detail{display:table-cell}
#etaBody .eta-table.show-detail th:nth-child(n+9),#etaBody .eta-table.show-detail td:nth-child(n+9){width:132px;max-width:220px}
#etaBody .eta-table.show-detail th:nth-child(17),#etaBody .eta-table.show-detail td:nth-child(17){width:110px}
#etaBody .eta-table.show-detail th:nth-child(18),#etaBody .eta-table.show-detail td:nth-child(18),#etaBody .eta-table.show-detail th:nth-child(19),#etaBody .eta-table.show-detail td:nth-child(19){width:220px}
#etaBody .eta-table.show-detail th:nth-child(20),#etaBody .eta-table.show-detail td:nth-child(20){width:160px}
#etaBody .eta-table.show-detail th:nth-child(n+21),#etaBody .eta-table.show-detail td:nth-child(n+21){width:150px}
@media(max-width:1000px){
  .modal.fullscreen:has(#etaBody){padding:58px 16px 16px}
  #etaBody .eta-toolbar-controls{align-items:flex-start}
  #etaBody .eta-actions{width:100%;margin:0}
  #etaBody .eta-actions .mbtn{flex:1}
}
/* 明细改为逐单展开，主表始终保持在视口宽度内，避免超长横向滚动。 */
#etaBody .eta-table{width:100%;min-width:1280px;table-layout:fixed}
#etaBody .eta-table th:nth-child(9),#etaBody .eta-table td:nth-child(9){width:112px;text-align:center}
#etaBody .eta-table .eta-detail-row{display:none}
#etaBody .eta-table .eta-detail-row.open{display:table-row}
#etaBody .eta-table .eta-detail-row>td{height:auto;padding:0!important;background:var(--ui-bg-page)!important;white-space:normal;border-bottom:1px solid var(--line)}
#etaBody .eta-detail-panel{padding:14px 18px 16px;border-left:3px solid var(--ui-brand-500, var(--ui-brand-600))}
#etaBody .eta-detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
#etaBody .eta-detail-card{display:flex;flex-direction:column;gap:4px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--ui-bg-card)}
#etaBody .eta-detail-card>span{font-size:10px;color:var(--txt-3);font-weight:600}
#etaBody .eta-detail-card>b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;color:var(--txt-2)}
#etaBody .eta-detail-card.wide{grid-column:span 2}
#etaBody .eta-detail-card.wide>b{white-space:normal;overflow-wrap:anywhere;line-height:1.5}
#etaBody .eta-row-detail-btn{padding:6px 10px;border:1px solid var(--line);border-radius:7px;background:var(--ui-bg-card);color:var(--ui-brand-700);font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}
#etaBody .eta-row-detail-btn:hover,#etaBody .eta-row-detail-btn[aria-expanded="true"]{background:var(--ui-brand-050);border-color:var(--ui-brand-300,var(--line-strong))}
#etaBody .eta-detail-hint{font-size:11px;color:var(--txt-3);white-space:nowrap}
@media(max-width:1200px){#etaBody .eta-detail-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){#etaBody .eta-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#etaBody .eta-toolbar-summary>div{display:block}#etaBody .eta-toolbar-summary>div span{display:block;margin-top:4px}}
.eta-dbchk{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2);white-space:nowrap;cursor:pointer;padding:0 2px}
.eta-dbchk input{cursor:pointer;margin:0}
/* ============ 发货出库 · 2026-09-25 可视化重做 ============ */
/* KPI 由 4 张扩到 6 张（新增「发货周期中位」「延期订单」）：用 auto-fit 自适应列数，
   避免为每个断点写死 grid-template-columns。 */
.sp-kpi-grid{grid-template-columns:repeat(auto-fit,minmax(178px,1fr))}
/* 图表由「一排 3 图」改为三行，按信息层级分组：
   r1 = 趋势与效率（发货趋势 + 发包周期分布）
   r2 = 结构拆解（纯化方式 / 人员工作量 / 客户 TOP10）
   r3 = 作业时段（全宽低矮图） */
.sp-charts-row.r1{grid-template-columns:1.55fr 1fr}
.sp-charts-row.r2{grid-template-columns:repeat(3,1fr)}
.sp-charts-row.r3{grid-template-columns:1fr}
/* 窄屏：KPI 与图表都折成单列/两列。注意这些规则必须写在文件靠后位置，
   否则会被上方的旧 @media 规则按「同优先级后写优先」反过来覆盖。 */
@media (max-width:1280px){
  .sp-kpi-grid{grid-template-columns:repeat(3,1fr)}
  .sp-charts-row.r1,.sp-charts-row.r2,.sp-charts-row.r3{grid-template-columns:1fr}
}
@media(max-width:820px){
  .sp-kpi-grid{grid-template-columns:repeat(2,1fr)}
}

/* ============ 发货出库 · 吸顶操作栏 + 子视图（2026-09-25） ============ */
/* 工具栏吸顶：长表格滚动时，视图切换 / 页签 / 搜索 / 操作按钮始终可见。
   左右负外边距抵消 .view 的 22px 内边距，让工具栏横向铺满、视觉上成为一条"栏"。 */
.sp-actionbar{position:sticky;top:0;z-index:7;display:flex;flex-direction:column;gap:10px;
  margin:0 -22px;padding:12px 22px;background:var(--card);border-bottom:1px solid var(--line);
  box-shadow:0 6px 18px -14px rgba(68,68,68, .35)}
.sp-ab-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.sp-ab-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* 子视图分段控件 */
.sp-seg{display:inline-flex;gap:4px;padding:4px;background:rgba(68,68,68, .05);border:1px solid var(--line);border-radius:12px}
.sp-seg-item{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:8px;
  font-size:13px;font-weight:600;color:var(--txt-2);cursor:pointer;white-space:nowrap;transition:.15s;user-select:none}
.sp-seg-item:hover{color:var(--brand)}
.sp-seg-item.active{background:var(--card);color:var(--brand);box-shadow:0 2px 8px -2px rgba(68,68,68, .22)}
.sp-seg-item .n{font-size:12px;font-weight:700;opacity:.6}
.sp-scope-note{font-size:12px;color:var(--txt-3)}
.sp-scope-note b{color:var(--txt-2)}
/* 台账视图：把表格容器高度压到"一屏内"，使登记发货无需滚动页面。
   只作用于紧跟在吸顶栏之后的面板，不影响其它视图。 */
@media (max-width:1440px){
  }
@media (max-width:1280px){
  .sp-actionbar{margin:0 -14px;padding:10px 14px}
  }
/* ============ 数据分析板块样式（2026-09-25 扩展） ============ */
/* 板块容器与标题：给 15 张图分区，便于按分析目的快速定位 */
.sp-sec{display:flex;flex-direction:column;gap:12px}
.sp-sec-hd{display:flex;align-items:center;gap:10px;font-size:14px;font-weight:800;color:var(--txt);padding-left:2px}
.sp-sec-hd .n{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:6px;
  background:var(--grad);color:#fff;font-size:11px;font-weight:800;flex:none}
.sp-sec-hd .en{margin-left:auto;font-size:11px;font-weight:400;color:var(--txt-3);text-transform:uppercase;letter-spacing:.5px}
/* 周期最长 TOP10 明细（用表格而不是图：慢单必须看到订单号与责任人才可追） */
.sp-mini-wrap{max-height:300px;overflow:auto;border:1px solid var(--line);border-radius:10px}
.sp-mini{width:100%;border-collapse:collapse;font-size:12px}
.sp-mini th{padding:8px 10px;text-align:left;font-weight:600;color:var(--txt-2);background:var(--card);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1}
.sp-mini td{padding:8px 10px;border-bottom:1px solid rgba(68,68,68, .04);color:var(--txt)}
.sp-mini tbody tr:hover{background:rgba(86,86,86, .03)}
.sp-mini tbody tr:last-child td{border-bottom:none}
.sp-mini td.dim{color:var(--txt-3);font-variant-numeric:tabular-nums}
@media (max-width:1280px){
  .sp-sec-hd .en{display:none}
  .sp-mini-wrap{max-height:340px}
}
/* ============ 时间范围联动筛选（2026-09-25） ============ */
.sp-ab-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sp-range{display:inline-flex;align-items:center;gap:8px}
.sp-range-lb{font-size:12px;color:var(--txt-3);white-space:nowrap}
/* 紧凑版分段控件（范围用；比视图切换小一号，避免与它抢视觉重心） */
.sp-seg.sm{padding:4px;border-radius:10px}
.sp-seg.sm .sp-seg-item{padding:6px 12px;font-size:12px;border-radius:6px}
.sp-range-tip{font-size:11px;color:var(--txt-3);white-space:nowrap}
@media (max-width:1440px){ .sp-range-tip{display:none} }
/* ============ 数据分析精修（2026-09-25）：KPI 增减徽标 + 板块结论摘要 ============ */
/* 增减徽标：恢复到"压在彩色渐变卡上"的浅色高对比样式（与全系统 KPI 卡一致） */
.sp-kpi-delta{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;max-width:100%;
  padding:2px 8px;border-radius:8px;margin:2px 0 6px;white-space:nowrap;
  background:rgba(255,255,255,.18);color:#fff}
.sp-kpi-delta.up-good{background:rgba(255,255,255,.24);color:var(--ui-bg-soft)}
.sp-kpi-delta.up-bad{background:rgba(0,0,0,.20);color:var(--ui-danger-bg)}
.sp-kpi-delta.flat{background:rgba(255,255,255,.14);color:#fff}
/* 板块标题右侧的结论摘要（窄屏隐藏，避免标题换行） */
.sp-sec-sum{font-size:11px;font-weight:500;color:var(--txt-3);margin-left:10px;
  background:rgba(68,68,68, .045);border:1px solid var(--line);border-radius:8px;
  padding:2px 10px;white-space:nowrap}
@media (max-width:1440px){ .sp-sec-sum{display:none} }
/* ============ 发货台账 · 工作区设计（2026-09-25） ============ */
/* 工具栏第 1 行中段放"全局口径"（时间范围 + 对比基准） */
/* 快捷筛选 chips：与页签同排但视觉降级，避免和状态页签抢注意力 */
.sp-quick{display:inline-flex;align-items:center;gap:6px;margin-left:4px;padding-left:12px;
  border-left:1px solid var(--line)}
.sp-qchip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;
  border:1px dashed var(--line-strong,var(--ui-line-200));background:transparent;color:var(--txt-2);
  font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;transition:.15s;user-select:none}
.sp-qchip b{font-weight:800;opacity:.65;font-size:12px}
.sp-qchip:hover{border-color:var(--brand);color:var(--brand)}
.sp-qchip.on{background:rgba(86,86,86, .10);border-style:solid;border-color:var(--brand);color:var(--brand)}
.sp-qchip.on b{opacity:.9}
/* 可排序表头 */
.sp-table th.sp-th-sort{cursor:pointer;user-select:none;white-space:nowrap}
.sp-table th.sp-th-sort:hover{color:var(--brand)}
.sp-table th.sp-th-sort .sp-th-ar{display:inline-block;margin-left:6px;font-size:11px;opacity:.35}
.sp-table th.sp-th-sort.on{color:var(--brand)}
.sp-table th.sp-th-sort.on .sp-th-ar{opacity:.95}
/* 发货周期：★ 2026-09-25 收敛版 —— 只对**真正偏慢**的着色，正常值用普通字色。
   原版给每一行都套了彩色药丸，加上延期行红条/红底（延期占 85%）后整表发红、显脏，
   颜色也就不再是信号。现在颜色只标记例外：>72h 红、48-72h 橙、≤48h 不着色。
   单位「小时」移到表头，避免每行重复两个字。 */
.sp-cyc-cell{text-align:right}
.sp-cyc-cell span{font-variant-numeric:tabular-nums;white-space:nowrap}
.sp-cyc-norm{color:var(--txt);font-weight:600}
.sp-cyc-warn{color:var(--ui-warn-ink);font-weight:700}
.sp-cyc-bad{color:var(--ui-danger-ink);font-weight:800}
.sp-cyc-none{color:var(--txt-3)}
/* 客户单位与发货时间：降为次要字色，把注意力让给订单号与周期 */
.sp-cell-cust{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--txt-2)}
.sp-cell-time{color:var(--txt-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.sp-table th,.sp-table td{padding:10px 12px}
@media (max-width:1280px){
  .sp-quick{border-left:none;padding-left:0;margin-left:0}
}
/* ══════════════════════════════════════════════════════════════════════════
   发货台账 · 表格工整化（★ 2026-09-25）
   把"看起来毛糙"的台账变成一张整齐的网格，四个手段：
     ① **固定列宽**（table-layout:fixed + colgroup）—— 原先浏览器按内容自动分配，
        客户单位名长短不同会让整列宽窄逐页跳动，翻页时列位置都在变；
     ② **单元格统一单行 + 垂直居中** —— 原先备注格里塞了三行（备注+创建人+驳回），
        而同一排其它列只有一行且 vertical-align:top，文字基线错位；
        现在审计信息移入 title 悬停查看，行高完全一致；
     ③ **行高固定 40px / 表头 38px** —— 纵向节奏均匀，不再随内容起伏；
     ④ **极淡竖分隔线** —— 让列真正读成一个网格，而不是靠猜列边界。
   ══════════════════════════════════════════════════════════════════════════ */
.sp-table-fixed{table-layout:fixed}
/* ★ 2026-09-25 二改：列宽按**实测内容**反推，而不是拍脑袋。
   首版列宽拍下来，12 列里有 5 列在截断（1440px 视口，表宽 1158px）：
     订单号 27/30 行被截、状态 30/30 行被截（「已发货」标签被切掉一截）、
     操作 30/30 行被截（「删除」按钮被切掉一半）、发货日期 30/30 行被截；
   而备注列独占 15%（173px）却基本是空的「—」，实际只用了约 40px。
   结论：**"工整"不是把列排齐就够 —— 有内容被切掉就不叫工整。**
   于是按"每列实测需要的宽度"重分配，把空置的备注列匀给被截的列：
     订单号 147px（需 146）· 纯化方式 90（需 89）· 发货日期 120（需 118）
     发货周期 107（表头「发货周期(h)⇅」需 105）· 状态 83（需 82）
     操作 154（两按钮需 111，三按钮需 153 —— 留足「通过/驳回/删除」）
   改完以上各列截断数全部归零，只剩「客户单位」仍有长名截断 ——
   那是数据本身太长（实测最长 303px 文字，占全表 26%），任何列宽都放不下，
   只能靠 td 的 title 悬停看全名（这是有意的取舍，不是漏改）。

   ⚠️ 量列宽时别用 td.scrollWidth 判定是否截断：单元格 overflow:hidden 时它会被
   夹到 clientWidth 附近（实测「2026-09-24 19:22」文字 97px + 20px 内边距 = 117px，
   列宽 117、clientWidth 116，差值 1px 被 `> 1` 的阈值漏掉，看起来"没截断"其实在截）。
   正确做法是 Range.getBoundingClientRect() 量文字真实宽度，再和 clientWidth 比。 */
.sp-table-fixed col.c-seq{width:3.6%}
.sp-table-fixed col.c-oid{width:12.7%}
.sp-table-fixed col.c-cust{width:15%}
.sp-table-fixed col.c-puri{width:7.8%}
.sp-table-fixed col.c-p{width:5.2%}
.sp-table-fixed col.c-time{width:10.4%}
.sp-table-fixed col.c-cyc{width:9.2%}
.sp-table-fixed col.c-note{width:5.2%}
.sp-table-fixed col.c-st{width:7.2%}
.sp-table-fixed col.c-ops{width:13.3%}
.sp-table-fixed th,.sp-table-fixed td{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;
  text-align:left;padding:0 10px}
.sp-table-fixed thead th{height:38px;font-size:12px}
.sp-table-fixed tbody td{height:40px;font-size:12px;border-bottom:1px solid var(--line)}
.sp-table-fixed tbody tr:last-child td{border-bottom:none}
.sp-table-fixed thead th+th,.sp-table-fixed tbody td+td{border-left:1px solid rgba(68,68,68, .055)}
.sp-table-fixed thead th{border-bottom:1px solid var(--line-strong)}
/* 序号列 */
/* ⚠️ 2026-09-25 三改（真 bug）：下面这些对齐规则**原本全部失效**。
   原因是特异性：基础规则写的是 `.sp-table-fixed td{text-align:left}`（1 个类 + 1 个元素
   = 0,1,1），而 `.sp-cell-st{text-align:center}` 只有 1 个类（0,1,0）—— 基础规则赢。
   后果肉眼可见且恰好最伤"工整"：**「发货周期(h)」表头是右对齐（表头用内联样式，
   内联优先），同一列的数字却是左对齐**，表头和数字分居列两端，整列看着是散的；
   序号/状态/操作三列的居中意图也一并失效。
   修法：给这些规则加上 `.sp-table-fixed` 前缀，凑到 (0,2,0) 稳定压过 (0,1,1)。 */
.sp-table-fixed .sp-th-seq,.sp-table-fixed .sp-cell-seq{text-align:center;color:var(--txt-3);font-size:11px;font-variant-numeric:tabular-nums}
.sp-table-fixed .sp-cell-seq{padding:0}
/* 各列字色：把"主体信息"与"次要信息"分层，扫表更快 */
.sp-cell-oid b{font-weight:700}
.sp-cell-cust,.sp-cell-puri{color:var(--txt-2)}
.sp-cell-p{color:var(--txt-2)}
.sp-cell-time{color:var(--txt-2);font-variant-numeric:tabular-nums}
.sp-cell-note{color:var(--txt-2)}
.sp-table-fixed .sp-cyc-cell{text-align:right;padding-right:14px}
/* 备注格里被驳回的提示小标（原因全文在 td 的 title 里） */
.sp-mark-rej{display:inline-block;margin-left:6px;padding:0 6px;border-radius:4px;font-size:11px;
  font-weight:700;background:rgba(220,38,38,.12);color:var(--ui-danger-ink);vertical-align:middle}
.sp-tag{margin-left:6px;font-size:11px;padding:2px 6px}
/* 状态与操作列居中，两侧与列边界等距（配合上面的特异性修正才真正生效） */
.sp-table-fixed .sp-cell-st,.sp-table-fixed .sp-cell-ops{text-align:center}
.sp-cell-ops .sp-btn{padding:4px 10px;font-size:12px}
/* ---- 台账视图：让表格吃掉剩余高度（替代原先 calc(100vh - Npx) 的魔数）----
   魔数的问题是换个窗口高度就失配：实测 900px 视口下表格可视区只剩 258px（约 5 行），
   而页面上方 Hero/KPI/工具栏其实已经占满。改成"页面撑满视口 + 表格 flex 填充剩余"，
   任何窗口高度都能自动把余量给到表格，不必再估算常量。 ---- */
.sp-page-ledger{height:100%;margin-top:0;min-height:0}
.sp-page-ledger .sp-panel{flex:1 1 auto;display:flex;flex-direction:column;min-height:200px}
.sp-page-ledger .sp-tbl-wrap{flex:1 1 auto;min-height:0;max-height:none}

/* ============ 发货台账 · 高级工作台（2026-10-11） ============
   收敛卡片色彩、明确页面层级，并把筛选工具与数据表整理成连续工作区。 */
.sp-page.sp-page-ledger{gap:12px;padding-bottom:4px;color:var(--txt,#1f2937)}
.sp-page.sp-page-ledger .sp-hero{
  min-height:82px;padding:15px 22px;border:1px solid rgba(148,163,184,.28);border-radius:14px;
  color:#1e293b;background:linear-gradient(112deg,#fff 0%,#f8fafc 60%,#f2f7fb 100%);
  box-shadow:0 8px 22px -18px rgba(15,23,42,.35)
}
.sp-page.sp-page-ledger .sp-hero::before{top:0;right:auto;left:0;width:4px;height:100%;border-radius:14px 0 0 14px;background:#2563eb;opacity:1}
.sp-page.sp-page-ledger .sp-hero::after{display:none}
.sp-page.sp-page-ledger .sp-hero-left{padding-left:3px}
.sp-page.sp-page-ledger .sp-hero-title{font-size:22px;letter-spacing:.2px;color:#172554}
.sp-page.sp-page-ledger .sp-hero-sub{margin-top:4px;color:#64748b;opacity:1;letter-spacing:1.15px;font-size:10px}
.sp-page.sp-page-ledger .sp-hero-right{gap:0;align-self:stretch}
.sp-page.sp-page-ledger .sp-hero-stat{min-width:100px;padding:0 18px;justify-content:center;align-items:flex-end}
.sp-page.sp-page-ledger .sp-hero-stat:first-child{min-width:188px}
.sp-page.sp-page-ledger .sp-hs-label{color:#64748b;opacity:1;font-size:11px;font-weight:600}
.sp-page.sp-page-ledger .sp-hs-val{color:#1e293b;font-size:26px;line-height:1.15;font-variant-numeric:tabular-nums}
.sp-page.sp-page-ledger .sp-hs-val.good{color:#059669}
.sp-page.sp-page-ledger .sp-hs-val.warn{color:#b45309}
.sp-page.sp-page-ledger .sp-hs-sub{max-width:245px;color:#64748b;opacity:1;font-size:10px;text-align:right;line-height:1.45}
.sp-page.sp-page-ledger .sp-hero-divider{height:38px;background:#dbe3ed}
.sp-page.sp-page-ledger > .sp-kpi-grid{gap:10px}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-card{
  min-height:96px;padding:14px 16px;border:1px solid #e2e8f0;border-radius:12px;
  color:#334155;background:linear-gradient(145deg,#fff 0%,#f8fafc 100%)!important;
  box-shadow:0 3px 10px -8px rgba(15,23,42,.34);transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease
}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-card:hover{transform:translateY(-2px);border-color:#cbd5e1;box-shadow:0 8px 18px -14px rgba(15,23,42,.42)}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-card::before{display:none}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-label{color:#64748b;opacity:1;font-size:11px;font-weight:650;letter-spacing:.15px}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-val{margin:4px 0 3px;color:#172033;font-size:34px;line-height:1;font-variant-numeric:tabular-nums}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-sub{color:#718096;opacity:1;font-size:10px;line-height:1.45}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-icon{width:32px;height:32px;color:#64748b;opacity:.65}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-icon svg{width:100%;height:100%}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-ring{width:42px;height:42px;position:relative;flex:none;opacity:.88}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-ring svg{width:42px;height:42px}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-ring circle:first-child{stroke:#e2e8f0}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-ring circle:nth-child(2){stroke:#3b82f6}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-pct{position:absolute;inset:0;display:grid;place-items:center;color:#475569;font-size:9px;font-weight:700}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-delta{margin:2px 0 3px;padding:1px 6px;background:#eff6ff;color:#2563eb;font-size:10px}
.sp-page.sp-page-ledger > .sp-kpi-grid .sp-kpi-bar{height:2px;background:#3b82f6;opacity:.55}
.sp-page.sp-page-ledger .sp-actionbar{
  gap:8px;margin:0;padding:10px 12px;border:1px solid #e2e8f0;border-radius:13px;
  background:rgba(255,255,255,.96);box-shadow:0 5px 16px -14px rgba(15,23,42,.45);backdrop-filter:blur(12px)
}
.sp-page.sp-page-ledger .sp-ab-row{gap:10px}
.sp-page.sp-page-ledger .sp-ab-row2{padding-top:8px;border-top:1px solid #eef2f7}
.sp-page.sp-page-ledger .sp-seg{padding:3px;border-color:#e2e8f0;border-radius:10px;background:#f1f5f9}
.sp-page.sp-page-ledger .sp-seg-item{padding:7px 12px;border-radius:7px;color:#64748b;font-size:12px}
.sp-page.sp-page-ledger .sp-seg-item.active{color:#1d4ed8;background:#fff;box-shadow:0 1px 4px rgba(15,23,42,.12)}
.sp-page.sp-page-ledger .sp-tabs{gap:5px}
.sp-page.sp-page-ledger .sp-tab{padding:6px 12px;border-radius:8px;border-color:transparent;background:transparent;color:#64748b;font-size:12px;font-weight:650}
.sp-page.sp-page-ledger .sp-tab:hover{background:#f1f5f9;color:#334155}
.sp-page.sp-page-ledger .sp-tab.active{border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8}
.sp-page.sp-page-ledger .sp-quick{gap:5px;margin-left:2px;padding-left:9px;border-color:#e2e8f0}
.sp-page.sp-page-ledger .sp-qchip{padding:5px 9px;border:1px solid #e2e8f0;border-radius:7px;background:#fff;color:#64748b;font-size:11px}
.sp-page.sp-page-ledger .sp-qchip.on{border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8}
.sp-page.sp-page-ledger .sp-search-row{gap:8px;min-width:260px}
.sp-page.sp-page-ledger .sp-search{min-height:34px;padding:7px 11px;border-color:#dbe3ed;border-radius:8px;background:#fff;font-size:12px}
.sp-page.sp-page-ledger .sp-search:focus{border-color:#60a5fa;box-shadow:0 0 0 3px rgba(59,130,246,.12)}
.sp-page.sp-page-ledger .sp-panel{border-color:#dbe3ed;border-radius:13px;background:#fff;box-shadow:0 5px 18px -16px rgba(15,23,42,.45)}
.sp-page.sp-page-ledger .sp-table-fixed thead th{height:38px;background:#f1f5f9;color:#475569;border-bottom-color:#dbe3ed;font-size:11px;font-weight:700;letter-spacing:.1px}
.sp-page.sp-page-ledger .sp-table-fixed thead th+th,.sp-page.sp-page-ledger .sp-table-fixed tbody td+td{border-left-color:#f0f3f7}
.sp-page.sp-page-ledger .sp-table-fixed col.c-cyc{width:6.3%}
.sp-page.sp-page-ledger .sp-table-fixed col.c-note{width:8.1%}
.sp-page.sp-page-ledger .sp-table-fixed tbody td{height:42px;color:#334155;border-bottom-color:#edf1f5;font-size:11px}
.sp-page.sp-page-ledger .sp-table-fixed tbody tr:nth-child(even){background:#fafbfd}
.sp-page.sp-page-ledger .sp-table-fixed tbody tr:hover{background:#f1f7ff}
.sp-page.sp-page-ledger .sp-cell-oid b{color:#172554;font-weight:700}
.sp-page.sp-page-ledger .sp-cell-time{color:#526176;font-variant-numeric:tabular-nums}
.sp-page.sp-page-ledger .sp-cell-ops .sp-btn{min-height:27px;padding:3px 9px;border-radius:7px;font-size:10px}
@media(max-width:1280px){
  .sp-page.sp-page-ledger .sp-hero{align-items:flex-start;gap:12px}
  .sp-page.sp-page-ledger .sp-hero-right{flex-wrap:wrap;justify-content:flex-end}
  .sp-page.sp-page-ledger .sp-hero-stat{min-width:76px;padding:0 9px}
  .sp-page.sp-page-ledger .sp-hero-stat:first-child{min-width:150px}
  .sp-page.sp-page-ledger .sp-hs-val{font-size:22px}
  .sp-page.sp-page-ledger .sp-kpi-val{font-size:30px}
}
@media(max-width:820px){
  .sp-page.sp-page-ledger .sp-hero{flex-direction:column}
  .sp-page.sp-page-ledger .sp-hero-right{width:100%;justify-content:flex-start}
  .sp-page.sp-page-ledger .sp-hero-stat:first-child{align-items:flex-start;padding-left:0}
  .sp-page.sp-page-ledger .sp-hs-sub{text-align:left}
  .sp-page.sp-page-ledger .sp-actionbar{position:relative;top:auto}
  .sp-page.sp-page-ledger .sp-ab-row2{align-items:stretch}
  .sp-page.sp-page-ledger .sp-tabs,.sp-page.sp-page-ledger .sp-quick{flex-wrap:wrap}
}

/* v35: 返工页未选中分段的计数徽标保持清晰可读 */
.rework-segments .rework-segment .count{
  min-width:22px;
  height:20px;
  padding:0 7px;
  border:1px solid #d8e5f5;
  border-radius:999px;
  background:#edf4fd;
  color:#315f98;
  font-size:11px;
  font-weight:750;
  line-height:18px;
  text-align:center;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);
}
.rework-segments .rework-segment.active .count{
  border-color:#d7e6fa;
  background:#eaf2fc;
  color:#1557a0;
}



/* 放大倍数录入：主行聚焦当班动作，次要字段按订单展开。 */
#magEntryBody.mag-entry-body{display:flex;flex-direction:column;gap:12px;padding:12px 14px!important;text-align:left!important;color:var(--txt)!important;overflow:auto}
.mag-entry-guide{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:var(--ui-bg-page)}
.mag-entry-guide>b{font-size:12px;color:var(--ui-brand-700)}
.mag-entry-guide>span{font-size:12px;font-weight:700;color:var(--txt-2)}
.mag-entry-guide>em{margin-left:auto;font-size:11px;font-style:normal;color:var(--txt-3)}
.mag-table-wrap{width:100%;overflow:auto;border:1px solid var(--line);border-radius:10px;background:var(--ui-bg-card)}
.mag-entry-table{width:100%;min-width:980px;table-layout:fixed;border-collapse:collapse}
.mag-entry-table th,.mag-entry-table td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;font-size:12px}
.mag-entry-table thead th{position:sticky;top:0;z-index:1;background:var(--ui-brand-050);color:var(--ui-brand-700);font-weight:700;white-space:nowrap}
.mag-entry-table th:nth-child(1){width:30%}.mag-entry-table th:nth-child(2){width:10%}.mag-entry-table th:nth-child(3){width:11%}.mag-entry-table th:nth-child(4){width:15%}.mag-entry-table th:nth-child(5){width:15%}.mag-entry-table th:nth-child(6){width:14%}.mag-entry-table th:nth-child(7){width:5%}
.mag-entry-table tbody tr.mag-main-row:hover{background:var(--ui-bg-page)}
.mag-order-cell{display:flex;flex-direction:column;gap:3px;min-width:0}
.mag-order-cell>a,.mag-order-cell>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ui-brand-700);font-weight:800}
.mag-order-cell>small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--txt-3);font-size:10px}
.mag-entry-table .mag-count,.mag-entry-table .mag-pack{text-align:center;font-variant-numeric:tabular-nums;font-weight:700}
.mag-entry-table .mag-scale-input{box-sizing:border-box;width:100%;max-width:132px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--ui-bg-card);color:var(--txt);font-size:14px;font-weight:800;font-variant-numeric:tabular-nums}
.mag-entry-table .mag-scale-input:focus{outline:2px solid var(--ui-brand-200);border-color:var(--ui-brand-500)}
.mag-qc-state{display:inline-flex;align-items:center;padding:5px 8px;border-radius:999px;font-size:10px;font-weight:700;white-space:nowrap}
.mag-qc-state.ok{background:rgba(16,145,100,.1);color:#08734e}.mag-qc-state.missing{background:rgba(217,119,6,.1);color:#a85c00}.mag-qc-state.loading{background:var(--ui-bg-page);color:var(--txt-3)}
.mag-detail-btn{padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--ui-bg-card);color:var(--ui-brand-700);font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}
.mag-detail-btn:hover,.mag-detail-btn[aria-expanded="true"]{background:var(--ui-brand-050);border-color:var(--line-strong)}
.mag-detail-row{display:none}.mag-detail-row.open{display:table-row}
.mag-detail-row>td{padding:0!important;background:var(--ui-bg-page)}
.mag-detail-panel{padding:12px 16px 14px;border-left:3px solid var(--ui-brand-500,var(--ui-brand-600))}
.mag-detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.mag-detail-card{display:flex;flex-direction:column;gap:4px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--ui-bg-card)}
.mag-detail-card>span{font-size:10px;font-weight:600;color:var(--txt-3)}
.mag-detail-card>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;color:var(--txt-2)}
.mag-detail-card.wide{grid-column:span 2}.mag-detail-card.wide>b{white-space:normal;overflow-wrap:anywhere;line-height:1.5}
@media(max-width:1100px){.mag-detail-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){.mag-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mag-entry-guide>em{margin-left:0;width:100%}}

/* 窄窗口下仍能直接看到预计完成日期，不必把横向滚动条拖到最右。 */
.oc-table th:last-child,.oc-table td:last-child{position:sticky;right:0;background:var(--card);z-index:2;box-shadow:-5px 0 8px -8px rgba(20,45,75,.65)}
.oc-table thead th:last-child{z-index:4;background:var(--ui-brand-050)}
.oc-table tbody tr:hover td:last-child{background:var(--ui-bg-page)}


/* 放大倍数录入卡片版：直接填值、明细常驻、字段标签高对比。 */
#magEntryBody.mag-entry-body{display:flex;flex-direction:column;gap:12px;padding:12px 14px!important;text-align:left!important;color:var(--txt)!important;overflow:auto;max-height:min(58vh,620px)}
.mag-entry-guide{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:#F2F6FC}
.mag-entry-guide>b{font-size:12px;color:#173B66}.mag-entry-guide>span{font-size:12px;font-weight:700;color:#24384F}.mag-entry-guide>em{margin-left:auto;font-size:11px;font-style:normal;color:#53677E}
.mag-order-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,410px),1fr));align-items:start;gap:12px}
.mag-order-card{min-width:0;padding:13px;border:1px solid #C5D4E6;border-radius:10px;background:#fff;box-shadow:0 2px 8px rgba(30,65,105,.045)}
.mag-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding-bottom:10px;border-bottom:1px solid #E2EAF3}
.mag-card-identity{display:flex;flex-direction:column;gap:4px;min-width:0}.mag-card-identity>b{font-size:15px;font-weight:800;color:#123D68}.mag-card-identity>small{font-size:11px;color:#53677E;overflow-wrap:anywhere}
.mag-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap;flex:none}
.mag-card-entry{display:grid;grid-template-columns:.8fr .8fr 1.25fr;align-items:stretch;gap:8px;margin:10px 0 12px}
.mag-card-metric,.mag-card-scale{display:flex;flex-direction:column;justify-content:center;gap:5px;min-width:0;padding:9px 10px;border:1px solid #D9E3EF;border-radius:8px;background:#F7F9FC}
.mag-card-metric>span,.mag-card-scale>span{font-size:10px;font-weight:700;color:#53677E}
.mag-card-metric>b{font-size:17px;line-height:1.1;font-weight:800;color:#1D3856;font-variant-numeric:tabular-nums}
.mag-card-scale input{box-sizing:border-box;width:100%;min-width:0;padding:7px 9px;border:1px solid #9EB7D3;border-radius:7px;background:#fff;color:#173B66;font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.mag-card-scale input:focus{outline:2px solid #B6D2F2;border-color:#3679BE}
.mag-card-qc{padding:5px 8px;border:1px solid #B9D7CC;border-radius:7px;background:#F1FAF6;color:#126447;font-size:10px;font-weight:700;white-space:nowrap;cursor:pointer}
.mag-qc-state{display:inline-flex;align-items:center;padding:5px 8px;border-radius:7px;font-size:10px;font-weight:700;white-space:nowrap}
.mag-qc-state.ok{background:#E6F5EF;color:#126447}.mag-qc-state.missing{background:#FFF4E5;color:#8A4B00}.mag-qc-state.loading{background:#F1F4F8;color:#53677E}
.mag-info-title{margin:0 0 7px;font-size:11px;font-weight:800;color:#263C55}
.mag-info-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.mag-info-item{display:flex;flex-direction:column;gap:3px;min-width:0;padding:7px 8px;border:1px solid #E0E8F1;border-radius:7px;background:#FBFCFE}
.mag-info-item>span{font-size:9px;font-weight:700;color:#61758B}.mag-info-item>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;color:#24384F;font-variant-numeric:tabular-nums}
.mag-info-item.wide{grid-column:span 3}.mag-info-item.wide>b{white-space:normal;overflow-wrap:anywhere;line-height:1.45}
@media(max-width:900px){.mag-order-grid{grid-template-columns:1fr}.mag-info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mag-info-item.wide{grid-column:span 2}}
@media(max-width:560px){.mag-card-entry{grid-template-columns:1fr 1fr}.mag-card-scale{grid-column:span 2}.mag-info-grid{grid-template-columns:1fr 1fr}}


/* 订单中心 · 列对齐与节奏统一 */
#view .oc-filtercard .oc-tabs-row{align-items:center;gap:10px}
#view .oc-filtercard #orderControls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
#view .oc-tbl-wrap:has(.oc-live-table){padding:8px}
#view .oc-live-table{table-layout:fixed;width:100%;border-collapse:separate;border-spacing:0;overflow:hidden;border:1px solid #D7E2EF;border-radius:9px;background:#fff}
#view .oc-live-table th,#view .oc-live-table td{box-sizing:border-box;padding:0 12px;font-size:12px;vertical-align:middle}
#view .oc-live-table thead th{height:40px;background:#EDF3FA;color:#29445F;text-align:center;font-size:11px;font-weight:800;border-bottom:1px solid #CBD9E8;letter-spacing:.1px}
#view .oc-live-table thead th.oc-col-order,#view .oc-live-table thead th.oc-col-customer,#view .oc-live-table thead th.oc-col-eta{text-align:left}
#view .oc-live-table tbody td{height:42px;border-bottom:1px solid #E7EDF4;color:#26384D}
#view .oc-live-table tbody tr:nth-child(even){background:#F8FAFD}
#view .oc-live-table tbody tr:hover{background:#EEF5FC}
#view .oc-live-table tbody tr:last-child td{border-bottom:0}
#view .oc-live-table .oc-col-order,#view .oc-live-table .oc-col-customer,#view .oc-live-table .oc-col-eta{text-align:left}
#view .oc-live-table .oc-col-code,#view .oc-live-table .oc-col-board,#view .oc-live-table .oc-col-category,#view .oc-live-table .oc-col-station,#view .oc-live-table .oc-col-progress,#view .oc-live-table .oc-col-due{text-align:center}
#view .oc-live-table .oc-col-qty{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
#view .oc-live-table .oc-col-progress .pbar{width:min(100%,140px);margin:0 auto}
#view .oc-live-table .oc-col-order>b{font-size:12px;font-weight:800;color:#173B60;font-variant-numeric:tabular-nums}
#view .oc-live-table .oc-col-board{font-variant-numeric:tabular-nums}
#view .oc-live-table .oc-col-due .badge{display:inline-flex;justify-content:center}
/* 交期状态包含多个标签时，始终从单元格左侧同一位置开始排列。 */
#view .oc-live-table tbody td.oc-col-due{text-align:left!important;white-space:nowrap}
#view .oc-live-table thead th:last-child{position:sticky;right:0;z-index:4;background:#EDF3FA;color:#29445F;box-shadow:-5px 0 10px -8px rgba(25,55,90,.45)}
#view .oc-live-table tbody td:last-child{position:sticky;right:0;z-index:2;background:#fff;box-shadow:-5px 0 10px -8px rgba(25,55,90,.35)}
#view .oc-live-table tbody tr:nth-child(even) td:last-child{background:#F8FAFD}
#view .oc-live-table tbody tr:hover td:last-child{background:#EEF5FC}
@media(max-width:1100px){#view .oc-tbl-wrap:has(.oc-live-table){padding:5px}#view .oc-live-table th,#view .oc-live-table td{padding:0 8px}}


/* 订单中心细节精修：板号内部是 flex 容器，单元格 text-align 无法改变其起点。 */
#view .oc-live-table tbody td.oc-col-board{text-align:center!important}
#view .oc-live-table tbody td.oc-col-board .board-cell{display:flex!important;align-items:center;justify-content:center!important;width:max-content;max-width:100%;margin:0 auto!important;gap:6px;white-space:nowrap;}
#view .oc-live-table tbody td.oc-col-board .board-cell-plain{box-sizing:border-box;padding:3px 8px;border:1px solid #DCE6F0;border-radius:6px;background:#F5F8FC;color:#29445F;font-size:11px;font-weight:650;line-height:1.25;font-variant-numeric:tabular-nums;cursor:pointer;}
#view .oc-live-table tbody td.oc-col-board .board-cell-plain:hover{border-color:#B6CBE0;background:#ECF3FA;color:#173B60}
#view .oc-live-table tbody td.oc-col-board .board-cell.has-more{max-width:100%;}
#view .oc-live-table tbody td.oc-col-board .board-text{min-width:0;max-width:100%;font-size:11px;font-weight:650;font-variant-numeric:tabular-nums;color:#29445F;}
#view .oc-live-table tbody td.oc-col-board .board-more{padding:2px 6px;border:1px solid #DCE6F0;border-radius:999px;background:#F1F5FA;color:#47647F;font-size:10px;line-height:1.2;}
#view .oc-live-table tbody td.oc-col-board .board-dash{color:#9AA9B9}
#view .oc-live-table .oc-col-order>b{display:inline-block;margin-right:4px;vertical-align:middle}
#view .oc-live-table .oc-col-order .oc-ship-btn,#view .oc-live-table .oc-col-order .oc-preship-btn,#view .oc-live-table .oc-col-order .oc-preship-badge,#view .oc-live-table .oc-col-order .oc-trace-btn{vertical-align:middle;margin-left:2px;line-height:1}
#view .oc-live-table .oc-col-eta{font-variant-numeric:tabular-nums;letter-spacing:.05px}
#view .oc-live-table .oc-col-progress .pbar{height:6px;border-radius:999px;background:#E7EDF4}
#view .oc-live-table .oc-col-progress .pbar>i{border-radius:999px}
#view .oc-live-table tbody td{transition:background-color .12s ease}
#view .oc-live-table thead th.oc-col-qty,#view .oc-live-table tbody td.oc-col-qty{text-align:center!important;font-variant-numeric:tabular-nums;font-weight:700}
