/* ===========================================================
   工序报工管理系统  -  样式主文件
   浅色工业风：专业、克制、信息密度高
   =========================================================== */

:root{
  --bg:#f4f6fa;
  --panel:#ffffff;
  --panel-2:#f8fafc;
  --line:#e4e9f0;
  --line-strong:#d3dae5;
  --ink:#0f172a;
  --ink-2:#475569;
  --ink-3:#8494a8;
  --primary:#2563eb;
  --primary-soft:#e8f0ff;
  --success:#16a34a;
  --success-soft:#e6f6ec;
  --warn:#e09008;
  --warn-soft:#fdf2dd;
  --danger:#dc2626;
  --danger-soft:#fdeaea;
  --info:#0891b2;
  --purple:#7c3aed;
  --radius:10px;
  --radius-sm:6px;
  --shadow:0 1px 2px rgba(15,23,42,.04), 0 4px 16px rgba(15,23,42,.05);
  --shadow-lg:0 8px 32px rgba(15,23,42,.14);
  --sidebar-w:224px;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB","Segoe UI",system-ui,sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
svg{fill:currentColor}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
.hidden{display:none !important}

/* ---------- 布局 ---------- */
.app{display:flex;height:100vh;overflow:hidden}

.sidebar{
  width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
  background:#111a2e;color:#c7d2e4;display:flex;flex-direction:column;
  transition:width .18s ease,flex-basis .18s ease;overflow:hidden
}
.brand{display:flex;gap:10px;align-items:center;padding:18px 16px 16px;border-bottom:1px solid rgba(255,255,255,.07)}
.brand-logo{
  width:36px;height:36px;border-radius:9px;background:linear-gradient(135deg,#2f6bff,#1e49c4);
  display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:14px;letter-spacing:.5px;
  box-shadow:0 4px 12px rgba(47,107,255,.35)
}
.brand-text strong{display:block;color:#fff;font-size:14px;letter-spacing:.2px}
.brand-text span{display:block;font-size:10.5px;color:#7b8ca8;letter-spacing:.4px}

.nav{flex:1;overflow-y:auto;padding:10px 8px}
.nav-group{
  font-size:11px;color:#607291;letter-spacing:1px;padding:14px 10px 6px;font-weight:600;
}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;cursor:pointer;
  color:#b9c6dc;font-size:13.5px;margin-bottom:2px;transition:.15s;
}
.nav-item svg{width:17px;height:17px;opacity:.85;flex:0 0 17px}
.nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
.nav-item.active{background:linear-gradient(90deg,#2f6bff,#2757d6);color:#fff;box-shadow:0 3px 10px rgba(47,107,255,.3)}
.nav-item.active svg{opacity:1}

.sidebar-foot{border-top:1px solid rgba(255,255,255,.07);padding:12px 12px 14px}
.shift-chip{
  display:inline-block;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);
  color:#dbe4f2;font-size:11.5px;padding:3px 9px;border-radius:20px;margin-bottom:10px
}
.mini-user{display:flex;gap:9px;align-items:center}
.avatar{width:32px;height:32px;border-radius:50%;background:#2f6bff;color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600}
.mu-name{color:#eaf0fa;font-size:13px;line-height:1.2}
.mu-role{color:#7b8ca8;font-size:11px}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{
  height:66px;flex:0 0 66px;background:var(--panel);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 22px
}
.tb-left h1{font-size:17px;font-weight:650;letter-spacing:.2px}
.tb-left p{font-size:12px;color:var(--ink-3);margin-top:1px}
.tb-right{display:flex;align-items:center;gap:12px}
.clock{font-variant-numeric:tabular-nums;font-size:13px;color:var(--ink-2);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:4px 10px}

.content{flex:1;overflow-y:auto;padding:20px 22px 40px;min-width:0}
.page{width:100%;max-width:1600px;margin:0 auto}

/* ============ 多页签（Tab Bar） ============ */
.tabbar{
  flex:0 0 auto;background:var(--panel);border-bottom:1px solid var(--line);
  display:flex;align-items:stretch;gap:0;padding:0 10px;min-height:38px;
  box-shadow:0 1px 2px rgba(15,23,42,.03)
}
.tabbar.hidden{display:none}
.tab-scroll{
  display:flex;align-items:stretch;gap:4px;overflow-x:auto;overflow-y:hidden;
  flex:1;min-width:0;scrollbar-width:thin
}
.tab-scroll::-webkit-scrollbar{height:4px}
.tab-scroll::-webkit-scrollbar-thumb{background:#d7dee8;border-radius:2px}
.tab-item{
  flex:0 0 auto;display:flex;align-items:center;gap:6px;cursor:pointer;
  max-width:230px;height:37px;padding:0 8px 0 11px;margin-top:1px;
  border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;
  color:var(--ink-3);font-size:12.5px;position:relative;top:1px;
  transition:background .12s,color .12s,box-shadow .12s;user-select:none
}
/* 未激活页签：浅蓝底 + 蓝色左侧色条，颜色更显眼 */
.tab-item:not(.active){
  background:linear-gradient(180deg,#eef4ff,#e6efff);
  border-color:#d3e2fb;color:#33518a
}
.tab-item:not(.active):hover{background:linear-gradient(180deg,#e4eeff,#d9e7ff);color:#1d4ed8}
.tab-item.active{
  background:var(--bg);border-color:var(--line);color:var(--primary);font-weight:600;
  box-shadow:inset 0 3px 0 var(--primary)
}
.ti-ico{display:flex;align-items:center;flex:0 0 auto}
.ti-ico svg{width:14px;height:14px;opacity:.85}
.tab-item.active .ti-ico svg{opacity:1}
.ti-title{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;
  line-height:1
}
.ti-close{
  flex:0 0 auto;width:17px;height:17px;border-radius:4px;display:flex;align-items:center;
  justify-content:center;font-size:14px;line-height:1;color:var(--ink-3);
  cursor:pointer;transition:background .12s,color .12s
}
.ti-close:hover{background:#fdeaea;color:var(--danger)}
.tab-add{
  flex:0 0 auto;width:28px;height:28px;margin:auto 2px;border:1px solid var(--line);
  background:var(--panel);border-radius:6px;color:var(--ink-2);font-size:16px;line-height:1;
  cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.12s
}
.tab-add:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
/* 页签栏右侧：页签管理下拉 */
.tab-tools{
  flex:0 0 auto;display:flex;align-items:center;gap:6px;margin:auto 2px auto 6px;
  padding-left:8px;border-left:1px solid var(--line)
}
.tab-tools-btn{
  height:26px;padding:0 9px;border:1px solid var(--line);background:var(--panel);
  border-radius:6px;color:var(--ink-2);font-size:12px;cursor:pointer;
  display:inline-flex;align-items:center;gap:5px;transition:.12s;font-family:inherit
}
.tab-tools-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.tab-tools-btn svg{width:13px;height:13px}
.tab-tools-btn .caret{
  width:0;height:0;border-left:3.5px solid transparent;border-right:3.5px solid transparent;
  border-top:4.5px solid currentColor;opacity:.7
}
.tab-tools-menu{
  position:absolute;top:calc(100% + 4px);right:8px;z-index:80;min-width:168px;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;
  box-shadow:0 12px 32px rgba(16,30,54,.16);padding:5px
}
.tab-tools-menu[hidden]{display:none}
.tab-tools-item{
  display:flex;align-items:center;gap:8px;width:100%;border:none;background:none;
  border-radius:7px;padding:8px 10px;font-size:12.8px;color:var(--ink);cursor:pointer;
  text-align:left;transition:.12s;font-family:inherit
}
.tab-tools-item:hover{background:var(--primary-soft);color:var(--primary)}
.tab-tools-item.danger:hover{background:var(--danger-soft);color:var(--danger)}
.tab-tools-item:disabled{opacity:.4;cursor:not-allowed}
.tab-tools-item:disabled:hover{background:none;color:var(--ink)}
.tab-tools-item svg{width:14px;height:14px;flex:none;opacity:.75}
.tab-tools-sep{height:1px;background:var(--line);margin:4px 3px}
.tab-tools-count{margin-left:auto;font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}

/* ---------- 单据编号跳转链接（样式参考记账系统：下划线可点击） ---------- */
.doc-link{
  color:var(--primary);cursor:pointer;text-decoration:underline;
  text-decoration-color:rgba(37,99,235,.35);text-underline-offset:2px;
  transition:color .12s,text-decoration-color .12s
}
.doc-link:hover{color:#1d4ed8;text-decoration-color:#1d4ed8;background:var(--primary-soft);border-radius:3px}
.doc-link b{font-size:12.5px}

/* ---------- 通用组件 ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-hd{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-bottom:1px solid var(--line)}
.card-hd h3{font-size:14px;font-weight:650}
.card-hd .sub{font-size:11.5px;color:var(--ink-3);margin-top:1px}
.card-bd{padding:14px 16px}
.card-bd.flush{padding:0}

.grid{display:grid;gap:14px}
.g-2{grid-template-columns:1fr 1fr}
.g-3{grid-template-columns:repeat(3,1fr)}
.g-4{grid-template-columns:repeat(4,1fr)}
.g-6{grid-template-columns:repeat(6,1fr)}
.g-2-1{grid-template-columns:2fr 1fr}
.g-1-2{grid-template-columns:1fr 2fr}
.mb14{margin-bottom:14px}

@media (max-width:1280px){
  .g-6{grid-template-columns:repeat(3,1fr)}
  .g-4{grid-template-columns:repeat(2,1fr)}
  .g-3{grid-template-columns:repeat(2,1fr)}
  .g-2-1,.g-1-2,.g-2{grid-template-columns:1fr}
}

/* KPI */
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary);opacity:.85}
.kpi.ok::after{background:var(--success)} .kpi.bad::after{background:var(--danger)}
.kpi.warn::after{background:var(--warn)} .kpi.purple::after{background:var(--purple)}
.kpi-label{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:5px}
.kpi-val{font-size:25px;font-weight:700;letter-spacing:-.5px;margin:4px 0 2px;font-variant-numeric:tabular-nums}
.kpi-val small{font-size:13px;font-weight:500;color:var(--ink-3);margin-left:3px}
.kpi-foot{font-size:11.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.delta{font-weight:600;font-variant-numeric:tabular-nums}
.delta.up{color:var(--danger)} .delta.down{color:var(--success)} .delta.flat{color:var(--ink-3)}

/* 表格 */
.table-wrap{overflow-x:auto}
table.tb{width:100%;border-collapse:collapse;font-size:13px}
table.tb th{
  text-align:left;font-weight:600;color:var(--ink-2);background:var(--panel-2);
  padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:12.5px
}
table.tb td{padding:9px 12px;border-bottom:1px solid #eef2f7;white-space:nowrap}
table.tb tbody tr:hover{background:#f9fbfe}
table.tb tbody tr:last-child td{border-bottom:none}
table.tb .num{text-align:right;font-variant-numeric:tabular-nums}
.tb-empty{padding:34px;text-align:center;color:var(--ink-3);font-size:13px}

/* 徽章 / 标签 */
.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11.5px;font-weight:600;line-height:1.7}
.b-green{background:var(--success-soft);color:var(--success)}
.b-red{background:var(--danger-soft);color:var(--danger)}
.b-blue{background:var(--primary-soft);color:var(--primary)}
.b-amber{background:var(--warn-soft);color:#a76b06}
.b-gray{background:#eef2f7;color:var(--ink-2)}
.b-purple{background:#f1eafe;color:var(--purple)}
.tag{display:inline-block;padding:1px 7px;border:1px solid var(--line-strong);border-radius:4px;font-size:11.5px;color:var(--ink-2);background:#fff}

/* 按钮 */
.btn{
  display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-strong);background:#fff;color:var(--ink);
  padding:6px 13px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;transition:.15s;white-space:nowrap
}
.btn:hover{border-color:#b9c5d6;background:#f7f9fc}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:#1d4fd8;border-color:#1d4fd8}
.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn-danger:hover{background:#b91c1c}
.btn-ghost{background:transparent}
.btn-danger-ghost{background:transparent;border-color:#f0a3a3;color:var(--danger)}
.btn-danger-ghost:hover{background:#fdeaea;border-color:var(--danger);color:#b91c1c}
.btn-sm{padding:3px 9px;font-size:12px}
.btn-lg{padding:10px 20px;font-size:14.5px;font-weight:600}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn svg{width:15px;height:15px}

/* 表单 */
.field{display:flex;flex-direction:column;gap:5px}
.field label{font-size:12.5px;color:var(--ink-2);font-weight:500}
/* 必录项标签：加深加粗，配合红色星号更醒目 */
.field label.req-lb{color:var(--ink);font-weight:700}
.field .hint{font-size:11px;color:var(--ink-3)}
input[type=text],input[type=number],input[type=date],input[type=time],select,textarea{
  border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:7px 10px;background:#fff;width:100%;outline:none;transition:.15s
}
input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
input[readonly]{background:#f4f6fa;color:var(--ink-2)}
.form-grid{display:grid;gap:12px}
.fg-2{grid-template-columns:1fr 1fr}
.fg-3{grid-template-columns:repeat(3,1fr)}
.fg-4{grid-template-columns:repeat(4,1fr)}
@media (max-width:900px){.fg-3,.fg-4,.fg-2{grid-template-columns:1fr 1fr}}

.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;padding:12px 16px;border-bottom:1px solid var(--line)}
.filters .field{min-width:150px}
.filters .spacer{flex:1}

/* 进度条 */
.progress{height:7px;background:#eef2f7;border-radius:20px;overflow:hidden;min-width:80px}
.progress > i{display:block;height:100%;background:var(--primary);border-radius:20px}
.progress.ok > i{background:var(--success)} .progress.bad > i{background:var(--danger)} .progress.warn > i{background:var(--warn)}

/* ---------- 报工录入 ---------- */
.entry-layout{display:grid;grid-template-columns:330px 1fr;gap:14px}
@media (max-width:1180px){.entry-layout{grid-template-columns:1fr}}
.order-pick{max-height:520px;overflow-y:auto}
.order-pick-item{padding:11px 14px;border-bottom:1px solid #eef2f7;cursor:pointer;transition:.12s}
.order-pick-item:hover{background:#f7f9fd}
.order-pick-item.sel{background:var(--primary-soft);box-shadow:inset 3px 0 0 var(--primary)}
/* 已完工的任务单：不可再报工 */
.order-pick-item.finished{opacity:.62;cursor:not-allowed;background:#f7faf8}
.order-pick-item.finished:hover{background:#f7faf8}
.opi-top{display:flex;justify-content:space-between;align-items:center}
.opi-code{font-weight:650;font-size:13px;color:var(--ink)}
.opi-name{font-size:12px;color:var(--ink-2);margin-top:2px}
.opi-meta{font-size:11.5px;color:var(--ink-3);margin-top:4px}

.proc-steps{display:flex;flex-wrap:wrap;gap:8px}
.proc-step{
  border:1px solid var(--line-strong);border-radius:8px;padding:8px 12px;cursor:pointer;background:#fff;min-width:126px;transition:.15s
}
.proc-step:hover{border-color:var(--primary)}
.proc-step.sel{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 2px rgba(37,99,235,.1)}
.ps-name{font-weight:600;font-size:13px}
.ps-meta{font-size:11px;color:var(--ink-3);margin-top:2px}

.qty-board{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.qty-box{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:var(--panel-2)}
.qty-box .qb-label{font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:6px}
.qty-box input{font-size:22px;font-weight:700;padding:4px 8px;font-variant-numeric:tabular-nums;height:auto}
.qty-box.good{border-color:#bfe3cc;background:var(--success-soft)}
.qty-box.good input{border-color:#bfe3cc;color:#0f7a35}
.qty-box.bad{border-color:#f3c4c4;background:var(--danger-soft)}
.qty-box.bad input{border-color:#f3c4c4;color:#b91c1c}
.qty-box.total{background:#f1f5fb;border-color:#dbe3f0}
.qb-hint{font-size:11px;color:var(--ink-3);margin-top:5px}

.alloc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.alloc-status{font-size:12.5px;color:var(--ink-2)}
.alloc-status b{font-variant-numeric:tabular-nums}
.alloc-row{display:grid;grid-template-columns:1fr 130px 110px 36px;gap:8px;margin-bottom:8px;align-items:center}
@media (max-width:760px){.alloc-row{grid-template-columns:1fr 90px 90px 36px}}
.alloc-remain{font-size:12px;padding:8px 10px;border-radius:6px;background:var(--panel-2);border:1px dashed var(--line-strong);color:var(--ink-2)}
.alloc-remain.ok{background:var(--success-soft);border:1px solid #bfe3cc;color:#0f7a35}
.alloc-remain.err{background:var(--danger-soft);border:1px solid #f3c4c4;color:#b91c1c}
.icon-btn{border:1px solid var(--line-strong);background:#fff;border-radius:6px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ink-3)}
.icon-btn:hover{border-color:var(--danger);color:var(--danger)}
.icon-btn svg{width:15px;height:15px}

.qr-grid{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
.qr-chip{border:1px solid var(--line-strong);background:#fff;border-radius:20px;padding:4px 11px;font-size:12px;cursor:pointer}
.qr-chip:hover{border-color:var(--primary);color:var(--primary)}

.num-pad{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px}
.num-pad button{padding:11px 0;font-size:16px;font-weight:600;border:1px solid var(--line-strong);background:#fff;border-radius:8px;cursor:pointer}
.num-pad button:hover{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}

/* 超报判定提示条 */
.over-tip{margin-bottom:14px;padding:10px 12px;border-radius:8px;border:1px solid var(--line-strong);background:var(--panel-2);font-size:12.5px;color:var(--ink-2);line-height:1.7}
.over-tip.info{background:#f2f7ff;border-color:#bfd3fb;color:#1e3a8a}
.over-tip.ok{background:var(--success-soft);border-color:#bfe3cc;color:#0f7a35}
.over-tip.err{background:var(--danger-soft);border-color:#f3c4c4;color:#b91c1c}
.ot-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}
.ot-title{font-weight:700;font-size:13px}
.over-tip.info .ot-title{color:#1d4ed8}
.over-tip.ok .ot-title{color:#0f7a35}
.over-tip.err .ot-title{color:#b91c1c}
.ot-basis{font-size:12px;opacity:.9}
.ot-badge{margin-left:auto;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:20px;background:rgba(255,255,255,.75);border:1px solid rgba(0,0,0,.08)}
.ot-rule{font-size:12px;opacity:.92;margin-bottom:2px}
.ot-line{font-size:12px;font-variant-numeric:tabular-nums}
.ot-cur{font-weight:600;margin-top:2px}

/* ---------- 不良分析 ---------- */
.pareto-legend{display:flex;gap:14px;font-size:12px;color:var(--ink-2);align-items:center}
.lg{display:flex;align-items:center;gap:5px}
.lg i{width:11px;height:11px;border-radius:2px;display:inline-block}

/* ---------- 基础资料 tabs ---------- */
.tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--line);padding:0 16px;background:var(--panel-2)}
.tab{padding:10px 15px;font-size:13px;color:var(--ink-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--primary)}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600;background:#fff}

/* ---------- 模态 ---------- */
.mask{position:fixed;inset:0;background:rgba(15,23,42,.42);display:flex;align-items:center;justify-content:center;z-index:60;padding:20px}
.modal{background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);width:640px;max-width:100%;min-width:0;max-height:88vh;display:flex;flex-direction:column;animation:pop .16s ease}
.modal.sm{width:440px}
.modal.lg{width:860px}
.modal.xxl{width:1240px}
.modal.ordr-modal{width:1240px}
@keyframes pop{from{transform:translateY(8px) scale(.99);opacity:0}to{transform:none;opacity:1}}
.modal-hd{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line)}
/* 弹窗标题：加大加粗 + 主色，更醒目 */
.modal-hd h3{font-size:17px;font-weight:750;color:var(--ink);letter-spacing:.2px}
.modal-hd h3::before{
  content:"";display:inline-block;width:4px;height:16px;background:var(--primary);
  border-radius:2px;margin-right:8px;vertical-align:-2px
}
.modal-bd{padding:18px;overflow-y:auto;min-width:0}
.modal-ft{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:9px;background:var(--panel-2)}
.x-btn{border:none;background:none;cursor:pointer;color:var(--ink-3);font-size:20px;line-height:1;padding:2px 4px}
.x-btn:hover{color:var(--ink)}

/* 必录星号：全局红色加粗 */
.req{color:var(--danger);font-style:normal;font-weight:700;margin-left:2px}
.field > label .req,.pform .field > label .req,.form-grid label .req{color:var(--danger);font-weight:700}

.kv{display:grid;grid-template-columns:110px 1fr;gap:8px 12px;font-size:13px}
.kv dt{color:var(--ink-3)}
.kv dd{color:var(--ink)}

/* toast */
.toast-root{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:99;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{
  background:#111a2e;color:#fff;padding:9px 16px;border-radius:8px;font-size:13px;box-shadow:var(--shadow-lg);
  display:flex;align-items:center;gap:8px;animation:tin .18s ease
}
.toast.ok{background:#157f45} .toast.err{background:#c22626}
@keyframes tin{from{transform:translateY(-8px);opacity:0}to{transform:none;opacity:1}}

/* 帮助页 */
.help-sec{margin-bottom:18px}
.help-sec h4{font-size:14px;margin-bottom:6px;color:var(--ink)}
.help-sec p,.help-sec li{font-size:13px;color:var(--ink-2);line-height:1.75}
.help-sec ol,.help-sec ul{padding-left:20px}
.flow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0}
.flow .fnode{background:var(--primary-soft);color:var(--primary);border-radius:6px;padding:6px 12px;font-size:12.5px;font-weight:600}
.flow .farr{color:var(--ink-3)}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#cdd6e3;border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:#b4bfd0}
::-webkit-scrollbar-track{background:transparent}

/* ===========================================================
   单据式录入页（生产任务单）
   =========================================================== */
.doc-tabs{
  display:flex;gap:2px;background:#eaeff6;border:1px solid var(--line);
  border-radius:10px 10px 0 0;padding:5px 6px 0;overflow-x:auto
}
.doc-tab{
  padding:7px 15px;font-size:12.5px;color:var(--ink-2);cursor:pointer;
  background:#f4f7fb;border:1px solid var(--line);border-bottom:none;
  border-radius:6px 6px 0 0;white-space:nowrap
}
.doc-tab:hover{color:var(--primary)}
.doc-tab.active{background:#fff;color:var(--primary);font-weight:600;border-color:var(--line);position:relative;top:1px}

.doc-page{background:#fff;border:1px solid var(--line);border-radius:0 0 10px 10px;box-shadow:var(--shadow);margin-bottom:12px}

/* 标题行：左(审核章) / 中(标题) / 右(操作) 三栏，永不重叠 */
.doc-title-row{
  display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);
  align-items:center;gap:12px;padding:11px 18px;border-bottom:1px solid var(--line)
}
.doc-title-row h2{
  grid-column:2;grid-row:1;text-align:center;font-size:17px;font-weight:600;letter-spacing:3px;
  color:#1e293b;white-space:nowrap
}
.doc-tools{grid-column:3;grid-row:1;justify-self:end;width:100%;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px 15px}
.doc-tools button{
  background:none;border:none;color:var(--primary);font-size:12.5px;cursor:pointer;
  display:inline-flex;align-items:center;gap:4px;padding:2px 4px
}
.doc-tools button:hover{text-decoration:underline}
.doc-tools svg{width:13px;height:13px}

.dh-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px 22px;padding:12px 18px 14px}
.dh-item{display:flex;align-items:center;gap:8px;min-width:0}
.dh-item > label{font-size:12.5px;color:var(--ink-3);white-space:nowrap;flex:0 0 auto;min-width:56px;text-align:right}
.dh-item input,.dh-item select{
  border:none;border-bottom:1px solid var(--line-strong);border-radius:0;background:transparent;
  padding:4px 2px;font-size:13px;min-width:0;flex:1
}
.dh-item input:focus,.dh-item select:focus{box-shadow:none;border-bottom-color:var(--primary);background:#f7fbff}
.dh-item input[readonly]{background:transparent;color:var(--ink-2);border-bottom-color:#eef2f7}
.dh-item.wide{grid-column:span 2}
.dh-req::after{content:"*";color:var(--danger);margin-left:2px}

.doc-table-wrap{padding:0 18px;overflow-x:auto}
.doc-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:960px;table-layout:fixed}
.doc-table th{
  background:#eef3fa;border:1px solid #dbe3ee;padding:7px 8px;font-weight:600;color:#334155;
  white-space:nowrap;text-align:center;position:relative;overflow:hidden
}
.doc-table th.col-off{display:none}
/* 列宽拖拽把手 */
.doc-table th .col-rs{
  position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;
  background:transparent;border-right:2px solid transparent
}
.doc-table th .col-rs:hover{background:#dbe7ff;border-right-color:var(--primary)}
body.col-resizing{cursor:col-resize;user-select:none}
body.col-resizing .doc-table th .col-rs{background:#dbe7ff;border-right-color:var(--primary)}
.doc-table td{border:1px solid #e4e9f0;padding:0;height:34px;vertical-align:middle}
.doc-table td.c{text-align:center;color:var(--ink-3);background:#fafcff;font-variant-numeric:tabular-nums}
.doc-table td input,.doc-table td select{
  width:100%;height:33px;border:none;border-radius:0;background:transparent;
  padding:0 7px;font-size:12.5px;outline:none
}
.doc-table td input:focus,.doc-table td select:focus{background:#eff6ff;box-shadow:inset 0 0 0 1.5px var(--primary)}
.doc-table td input.num{text-align:right;font-variant-numeric:tabular-nums}
.doc-table td input.err{background:#fdeaea}
.doc-table tbody tr:hover td.c{background:#f4f8ff}
.doc-table tfoot td{background:#f7fafc;font-weight:600;color:#334155;padding:7px 10px;border:1px solid #dbe3ee}
.doc-table .del-cell{width:36px;text-align:center}
.doc-table .del-cell button{border:none;background:none;color:#c0cad8;cursor:pointer;padding:4px}
.doc-table .del-cell button:hover{color:var(--danger)}
.doc-table .del-cell svg{width:14px;height:14px}
/* 行号列：+ / − 增删行 */
.doc-table td.rn-cell{white-space:nowrap;background:#fafcff}
.doc-table td.rn-cell .rn-num{display:inline-block;min-width:16px;font-weight:600;color:#334155}
.doc-table td.rn-cell .rn-btn{
  display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin:0 1px;
  border:1px solid #cfdae8;border-radius:4px;background:#fff;color:#475569;font-size:12px;line-height:1;
  cursor:pointer;padding:0;vertical-align:middle
}
.doc-table td.rn-cell .rn-btn:hover{border-color:var(--primary);color:var(--primary);background:#eff6ff}
.doc-table td.rn-cell .rn-minus:hover{border-color:var(--danger);color:var(--danger);background:#fdeaea}
.doc-table td.rn-cell .rn-btn:active{transform:translateY(1px)}

.doc-rowtools{display:flex;gap:8px;flex-wrap:wrap;padding:8px 18px 0}
.doc-tip{font-size:11.5px;color:var(--ink-3);display:flex;align-items:center;gap:5px}
.doc-tip.warn{color:#b45309}

/* 列设置浮层 */
.colset-pop{
  position:fixed;z-index:120;width:196px;background:#fff;border:1px solid var(--line-strong,#cfdae8);
  border-radius:10px;box-shadow:0 12px 32px rgba(15,23,42,.16);padding:6px 0 8px;font-size:13px
}
.colset-pop .colset-hd{
  display:flex;align-items:center;justify-content:space-between;padding:8px 12px 8px;font-weight:600;
  color:#1e293b;border-bottom:1px solid var(--line);margin-bottom:4px
}
.colset-pop .colset-x{border:none;background:none;font-size:15px;line-height:1;color:#94a3b8;cursor:pointer;padding:0 2px}
.colset-pop .colset-x:hover{color:var(--danger)}
.colset-pop .colset-it{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;color:#334155}
.colset-pop .colset-it:hover{background:#f4f8ff}
.colset-pop .colset-it.lock{cursor:not-allowed;color:#94a3b8}
.colset-pop .colset-it input{cursor:pointer}
.colset-pop .colset-it.lock input{cursor:not-allowed}
.colset-pop .colset-it i{margin-left:auto;font-style:normal;font-size:10.5px;color:#b6c2d2;border:1px solid #e4e9f0;border-radius:4px;padding:0 4px}
.colset-pop .colset-ft{padding:8px 12px 0;margin-top:4px;border-top:1px solid var(--line)}

.doc-extra{display:grid;grid-template-columns:1.6fr 1fr;gap:18px;padding:14px 18px 16px;border-top:1px dashed #e4e9f0;margin-top:12px}
.doc-extra .field label{font-size:12.5px;color:var(--ink-3)}
.doc-extra textarea{border:1px solid var(--line-strong);border-radius:6px;padding:8px 10px;resize:vertical;font-size:13px;width:100%}

.att-box{border:1px dashed var(--line-strong);border-radius:8px;padding:9px;background:#fbfcfe;min-height:96px}
.att-list{display:flex;flex-wrap:wrap;gap:8px}
.att-add{
  width:76px;height:64px;border:1px dashed #c8d3e2;border-radius:6px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;color:var(--ink-3);cursor:pointer;background:#fff;font-size:11.5px;gap:2px
}
.att-add:hover{border-color:var(--primary);color:var(--primary)}
.att-add span:first-child{font-size:18px;line-height:1}
.att-file{
  width:76px;height:64px;border:1px solid var(--line);border-radius:6px;background:#fff;
  display:flex;flex-direction:column;justify-content:space-between;padding:6px;position:relative;overflow:hidden
}
.att-file .an{font-size:11px;color:var(--ink-2);line-height:1.3;max-height:32px;overflow:hidden;word-break:break-all}
.att-file .as{font-size:10px;color:var(--ink-3)}
.att-file .ax{position:absolute;right:2px;top:2px;border:none;background:none;color:#c0cad8;cursor:pointer;font-size:13px;line-height:1}
.att-file .ax:hover{color:var(--danger)}
.att-hint{font-size:11px;color:var(--ink-3);margin-top:7px}

.doc-foot{
  position:sticky;bottom:0;z-index:5;background:#fff;border:1px solid var(--line);border-radius:10px;
  padding:10px 16px;display:flex;align-items:center;justify-content:space-between;
  box-shadow:0 -6px 20px rgba(15,23,42,.07)
}
.doc-foot .df-left{font-size:12.5px;color:var(--ink-3)}
.doc-foot .df-right{display:flex;gap:9px}
.doc-foot .df-right .btn{min-width:96px;justify-content:center}

/* ===========================================================
   新增/编辑任务单：上下分区（上半区单据信息 / 下半区产品明细）
   =========================================================== */
.doc-fill{display:flex;flex-direction:column;min-height:0}
.doc-fill .doc-tabs{flex:0 0 auto}
.doc-fill .doc-page{
  flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0
}
.doc-fill .doc-title-row{flex:0 0 auto}
.doc-fill .doc-foot{
  position:static;flex:0 0 auto;border:none;border-top:1px solid var(--line);border-radius:0;
  background:#fbfcfe;box-shadow:none
}
.doc-split{flex:1;min-height:0;display:flex;flex-direction:column}
.doc-pane{display:flex;flex-direction:column;min-height:0;background:#fff}
.pane-top{flex:0 0 auto;height:250px}
/* 下半区再分为「产品明细 / 材料明细」两块，可各自增删行、各自收起 */
.pane-bot{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.pane-prod{flex:0 0 auto;height:176px;min-height:0}
.pane-mat{flex:1 1 auto;min-height:120px}
.pane-prod .pane-cap,.pane-mat .pane-cap{border-top:1px solid #e1e8f2}
.pane-prod.collapsed,.pane-mat.collapsed{flex:0 0 36px;height:36px;min-height:0}
.split-bar.split-in{flex:0 0 9px;background:#f3f7fc;border-top:1px solid #e6ecf4;border-bottom:1px solid #e6ecf4}
.split-bar.split-in .sb-grip{width:44px;height:3px}

.pane-cap{
  flex:0 0 34px;height:34px;display:flex;align-items:center;gap:8px;padding:0 14px;
  background:linear-gradient(#f8fbfe,#edf3fb);border-bottom:1px solid #e1e8f2;
  font-size:12.5px;color:#1e293b;user-select:none
}
.pane-top .pane-cap{border-top:1px solid #e1e8f2}
.pane-cap .pc-no{
  flex:0 0 16px;width:16px;height:16px;border-radius:50%;background:var(--primary);color:#fff;
  font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center
}
.pane-cap .pc-title{font-weight:600;letter-spacing:.5px}
.pane-cap .pc-sub{font-size:11.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pane-cap .pc-tools{margin-left:auto;display:flex;align-items:center;gap:8px}
.pane-tgl{
  border:none;background:none;color:#64748b;cursor:pointer;display:flex;align-items:center;
  padding:2px;border-radius:4px
}
.pane-tgl:hover{background:#e2ebf6;color:var(--primary)}
.pane-tgl svg{width:15px;height:15px;fill:currentColor;transition:transform .18s}
.doc-pane.collapsed .pane-tgl svg{transform:rotate(180deg)}
.doc-pane.collapsed .pane-body{display:none}

.pane-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}
.pane-scroll{overflow:auto}
.pane-scroll .doc-table-wrap{overflow:visible;padding:0 14px}
/* 表头在分区内滚动时吸顶、合计行吸底 */
.pane-scroll .doc-table th{position:sticky;top:0;z-index:3;box-shadow:inset 0 -1px 0 #dbe3ee}
/* 材料明细合计行吸底，滚动时始终可见 */
.pane-mat .pane-scroll .doc-table tfoot td{position:sticky;bottom:0;z-index:2;background:#f4f8fc}
.pane-tip{padding:8px 14px 12px;font-size:11.5px;color:var(--ink-3);line-height:1.6}

/* 上半区字段网格：3 列更贴近单据抬头 */
.dh-grid-3{grid-template-columns:repeat(3,minmax(0,1fr));padding:12px 18px 6px}
.pane-top .doc-extra{padding:6px 18px 10px;border-top:1px dashed #e9eef5;margin-top:2px;align-items:start}
.pane-top .doc-extra textarea{resize:none;height:46px}
.pane-top .att-box{min-height:48px;padding:5px}
/* 录入页附件位压缩成小方块，把高度留给产品/材料明细 */
.pane-top .att-add,.pane-top .att-file{width:66px;height:44px}
.pane-top .att-add span:first-child{font-size:15px}
.pane-top .att-hint{display:none}

/* 拖动分隔条 */
.split-bar{
  flex:0 0 11px;position:relative;cursor:row-resize;background:#eef3fa;
  border-top:1px solid #e1e8f2;border-bottom:1px solid #e1e8f2;
  display:flex;align-items:center;justify-content:center
}
.split-bar:hover{background:#e3ecfa}
.split-bar .sb-grip{width:52px;height:4px;border-radius:2px;background:#c3d2e5;transition:background .15s}
.split-bar:hover .sb-grip{background:var(--primary)}
body.row-resizing{cursor:row-resize;user-select:none}
body.row-resizing .split-bar{background:#e3ecfa}
body.row-resizing .split-bar .sb-grip{background:var(--primary)}

/* 商品列：可检索 / 可选择的产品选择器 */
.doc-table td .prod-combo{display:flex;align-items:center;height:33px;padding-left:6px}
.doc-table td .prod-combo .pc-input{
  flex:1;min-width:0;width:auto;padding:0 5px;font-size:12px;font-weight:600;color:#334155;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace
}
/* 物料编码/名称沿用常规字体，与产品编码的等宽字体区分 */
.doc-table td .prod-combo .pc-input.m-code,
.doc-table td .prod-combo .pc-input.m-name{font-family:inherit;font-weight:500}
.doc-table td .pn-cell{
  display:block;padding:0 7px;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  cursor:pointer
}
.doc-table td .pn-cell:hover{color:var(--primary);text-decoration:underline}
/* 工艺路线列：下拉占一行，工序链单行省略，避免撑高行 */
.doc-table td .l-route{height:28px;padding:0 18px 0 7px}
.doc-table td .l-ops{
  display:block;padding:0 7px 3px;font-size:10.5px;line-height:1.35;color:#8494a8;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.prod-combo .pc-btn{
  flex:0 0 20px;height:24px;border:none;background:none;color:#a3b1c4;cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0;border-radius:4px
}
.prod-combo .pc-btn:hover{color:var(--primary);background:#eaf2ff}
.prod-combo .pc-btn svg{width:15px;height:15px;fill:currentColor}

.prod-pop{
  position:fixed;z-index:400;display:flex;flex-direction:column;max-height:322px;overflow:hidden;
  background:#fff;border:1px solid #cbd8e8;border-radius:10px;box-shadow:0 18px 44px rgba(15,23,42,.2);
  font-size:12.5px
}
.prod-pop .pp-hd{
  display:flex;align-items:center;justify-content:space-between;padding:8px 12px;flex:0 0 auto;
  background:#f5f9ff;border-bottom:1px solid var(--line);font-weight:600;color:#1e293b
}
.prod-pop .pp-hd em{font-style:normal;font-weight:400;font-size:11.5px;color:var(--ink-3)}
.prod-pop .pp-head{
  flex:0 0 26px;height:26px;background:#fafcff;border-bottom:1px solid #eef2f8;
  color:#93a1b5;font-size:11px
}
.prod-pop .pp-head,.prod-pop .pp-item{
  display:grid;grid-template-columns:86px minmax(0,1fr) 92px 40px 116px;gap:8px;align-items:center;padding:0 12px
}
.prod-pop .pp-item{height:34px;cursor:pointer;border-bottom:1px solid #f4f7fb}
.prod-pop .pp-item:hover,.prod-pop .pp-item.act{background:#eff6ff}
.prod-pop .pp-item.cur{background:#f0fdf4}
.prod-pop .pp-item b,.prod-pop .pp-head b{font-weight:600;color:#334155;font-family:ui-monospace,Menlo,Consolas,monospace}
.prod-pop .pp-item.cur b{color:#15803d}
.prod-pop .pp-item span,.prod-pop .pp-item i,.prod-pop .pp-item u,.prod-pop .pp-item em,
.prod-pop .pp-head span,.prod-pop .pp-head i,.prod-pop .pp-head u,.prod-pop .pp-head em{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.prod-pop .pp-item i,.prod-pop .pp-head i{font-style:normal;color:#64748b}
.prod-pop .pp-item u,.prod-pop .pp-head u{text-decoration:none;color:#94a3b8}
.prod-pop .pp-item em,.prod-pop .pp-head em{font-style:normal;color:var(--ink-3);font-size:11.5px}
.prod-pop .pp-body{flex:1;min-height:0;overflow-y:auto}
.prod-pop .pp-empty{padding:22px 12px;text-align:center;color:var(--ink-3)}

@media (max-width:1100px){
  .dh-grid{grid-template-columns:1fr 1fr}
  .doc-extra{grid-template-columns:1fr}
  /* 上半区备注/附件保持并排，避免被分区高度裁切 */
  .pane-top .doc-extra{grid-template-columns:1.5fr 1fr}
}

/* 矮屏（笔记本 768/800 高）：压缩行高与分区标题，保证材料明细仍能看到多行 */
@media (max-height:840px){
  .doc-table td{height:29px}
  .doc-table td input,.doc-table td select{height:28px}
  .doc-table td .prod-combo{height:28px}
  .doc-table td .l-route{height:24px}
  .pane-cap{flex:0 0 30px;height:30px}
  .pane-prod,.pane-mat{min-height:0}
  .pane-top .doc-extra textarea{height:44px}
}

/* 窄屏 / 矮屏：取消上下分屏的固定高度，恢复为整页流式滚动 */
@media (max-width:1023px), (max-height:780px){
  .doc-fill{height:auto !important}
  .doc-fill .doc-page{overflow:visible;margin-bottom:12px}
  .doc-split{display:block}
  .split-bar{display:none}
  .doc-pane,.pane-top{height:auto !important}
  .pane-bot,.pane-prod,.pane-mat{display:block;min-height:0;height:auto !important}
  .pane-body,.pane-scroll{overflow:visible}
  .pane-scroll .doc-table-wrap{overflow-x:auto;padding:0 12px}
  .pane-scroll .doc-table th{position:static;box-shadow:none}
  .pane-scroll .doc-table tfoot td{position:static}
  .doc-fill .doc-foot{position:sticky;border:1px solid var(--line);border-radius:10px}
  .dh-grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .dh-grid-3{grid-template-columns:1fr}
  .pane-cap{flex-wrap:wrap;height:auto;flex-basis:auto;padding:6px 12px;row-gap:6px}
  .pane-cap .pc-sub{display:none}
  .pane-cap .pc-tools{margin-left:auto}
}

/* ============ 完工入库单「选单」弹窗 ============ */
.si-pick{display:flex;flex-direction:column;gap:10px}
.sip-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--line);position:relative}
.sip-sel{
  height:30px;padding:0 8px;border:1px solid var(--line-strong);border-radius:6px;
  background:#fff;font-size:12.5px;color:var(--ink);outline:none;cursor:pointer
}
.sip-sel:focus{border-color:var(--primary)}
.sip-date{display:inline-flex;align-items:center;gap:6px}
.sip-date input{
  height:30px;padding:0 8px;border:1px solid var(--line-strong);border-radius:6px;
  background:#fff;font-size:12.5px;color:var(--ink);outline:none
}
.sip-date input:focus{border-color:var(--primary)}
.sip-date i{font-style:normal;color:var(--ink-3);font-size:12px}
.sip-dots{
  height:30px;padding:0 9px;border:1px solid var(--line-strong);border-radius:0 6px 6px 0;
  background:#fff;color:var(--ink-2);cursor:pointer;font-size:13px;line-height:1;transition:.12s
}
.sip-dots:hover{background:#f2f7ff;color:var(--primary);border-color:var(--primary)}
.sip-link{
  background:none;border:none;color:var(--primary);font-size:12.5px;cursor:pointer;padding:0
}
.sip-link:hover{text-decoration:underline}
.sip-refresh{
  width:28px;height:28px;margin-left:auto;border:1px solid var(--line);border-radius:6px;
  background:#fff;color:var(--ink-2);cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;transition:.12s
}
.sip-refresh:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.sip-refresh svg{width:14px;height:14px}
.sip-table .sip-tb th{background:var(--panel-2);font-size:12.5px}
.sip-table .sip-tb td{font-size:12.5px}
.sip-table .sip-tb tbody tr{cursor:pointer}
.sip-table .sip-tb tbody tr:hover td{background:#f9fbfe}
.sip-table .sip-tb tbody tr.picked td{background:#f4f8ff}
.sip-foot{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding-top:10px}
.sip-foot span{font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.sip-size{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
/* 每页条数下拉（参考图：蓝框 + 右侧箭头） */
.sip-page-size{
  height:28px;min-width:58px;padding:0 22px 0 8px;border:1px solid var(--primary);
  border-radius:4px;background:#fff;font-size:13px;color:var(--ink);cursor:pointer;outline:none;
  font-family:inherit;appearance:none;text-align:center;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232f6df6' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 5px center;background-size:12px
}
.sip-page-size:focus{box-shadow:0 0 0 3px rgba(47,109,246,.12)}
/* 选单表格：固定展示 6 行，超出用纵向滚动条（表头吸顶） */
.sip-table{max-height:238px;overflow-y:auto;overflow-x:hidden}
.sip-table .sip-tb thead th{position:sticky;top:0;z-index:2}
.sip-tb tbody tr{height:33px}
.sip-tb tbody td{padding:6px 10px;vertical-align:middle}
.sip-tb .sip-blank td{height:33px;background:#fff}
.sip-tb .sip-blank:hover td{background:#fff}
/* 列表页时间预设下拉（宽度仅够显示「本月」两个字） */
.sil-preset{
  height:32px;width:70px;padding:0 22px 0 10px;border:1px solid var(--line-strong);
  border-radius:6px;background:#fff;font-size:13px;color:var(--ink);outline:none;cursor:pointer;
  font-family:inherit;appearance:none;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23788ba3' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 5px center;background-size:11px
}
.sil-preset:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.10)}
/* 审核状态筛选：需要放下「审核状态」四个字 */
.sil-preset.sil-audit{width:94px;padding:0 22px 0 10px}
/* 日期区间：合并为一个字段，右侧日历图标，点开浮层选起止 */
.sil-range{
  position:relative;display:inline-flex;align-items:center;gap:8px;
  height:32px;padding:0 10px 0 12px;border:1px solid var(--line-strong);border-radius:6px;
  background:#fff;font-size:13px;color:var(--ink);cursor:pointer;user-select:none;transition:.12s
}
.sil-range:hover{border-color:#b9c6d8}
.sil-range.open{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.10)}
.sil-range-txt{white-space:nowrap;font-variant-numeric:tabular-nums}
.sil-cal{width:15px;height:15px;color:#8494a8;flex:none}
.sil-range-pop{
  position:absolute;top:calc(100% + 6px);left:0;z-index:90;width:250px;
  background:#fff;border:1px solid var(--line);border-radius:10px;
  box-shadow:0 14px 40px rgba(16,30,54,.18);padding:12px 14px;cursor:default
}
.sil-range-pop[hidden]{display:none}
.sil-range-pop label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12.5px;color:var(--ink-2);margin-bottom:9px}
.sil-range-pop input{
  height:28px;padding:0 8px;border:1px solid var(--line-strong);border-radius:5px;
  font-size:12.5px;color:var(--ink);outline:none;font-family:inherit;width:140px
}
.sil-range-pop input:focus{border-color:var(--primary)}
.sil-range-btns{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
/* 列表页关键字搜索 */
.sil-kw{display:inline-flex;align-items:center}
.sil-kw input{
  height:32px;width:200px;padding:0 10px;border:1px solid var(--line-strong);
  border-radius:6px;font-size:13px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.sil-kw input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.10)}
.sil-kw input::placeholder{color:#a9b6c6}

/* 明细行商品检索输入框（与生产任务单一致的宽度与高度） */
.si-tb .prod-combo{width:100%}
.si-tb .pc-input{width:100%;height:28px;font-size:12.5px}
.si-tb .pc-btn{height:28px}
/* 数量 / 行摘要：可自由录入 */
.si-tb .si-qty,.si-tb .si-track{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:5px;
  padding:0 8px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.si-tb .si-qty{text-align:right;font-variant-numeric:tabular-nums}
.si-tb .si-qty:focus,.si-tb .si-track:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.si-tb td{vertical-align:middle}
/* 弹窗内明细表：紧凑行高 */
.modal .si-tb td{padding:6px 8px}
.modal .si-tb th{padding:8px}

/* ============ 完工入库单 ============ */
/* 品质类型下拉（明细行） */
.si-tb .si-quality{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:5px;
  padding:0 6px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.si-tb .si-quality:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
/* ===== 完工入库单详情页（参考图：左标题 + 右工具栏 + 灰底信息条） ===== */
.sid-doc{padding-bottom:0;border-radius:10px;overflow:hidden}
/* 完工入库单录入页（已去掉顶部标签条，需完整圆角） */
.si-doc{border-radius:10px;overflow:hidden}
/* 行号单元格：[-] 序号 [+]（逐行增减） */
.si-tb .si-rownum{white-space:nowrap;padding:4px 6px}
.si-tb .si-rno{
  display:inline-block;min-width:20px;text-align:center;font-weight:600;
  color:var(--ink);font-variant-numeric:tabular-nums
}
.si-tb .si-rbtn{
  width:24px;height:24px;padding:0;border:1px solid var(--line-strong);
  border-radius:5px;background:#fff;color:#5b6b80;cursor:pointer;
  font-size:16px;font-weight:700;line-height:1;font-family:inherit;
  display:inline-flex;align-items:center;justify-content:center;
  vertical-align:middle;transition:.12s
}
.si-tb .si-rbtn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.si-tb .si-rbtn:active{transform:scale(.94)}
.sid-title-row{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:12px 18px 8px;flex-wrap:wrap
}
.sid-title-row h2{
  font-size:17px;font-weight:700;color:var(--ink);letter-spacing:.5px;white-space:nowrap
}
.sid-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
.sid-tools .btn{height:30px;padding:0 13px;white-space:nowrap}
/* 已审核圆形印章（中式盖章样式） */
.sid-seal{
  width:92px;height:92px;display:inline-flex;align-items:center;justify-content:center;
  flex:none;opacity:.92
}
.sid-seal svg{width:100%;height:100%}
/* 单据信息条：灰底单行 */
.sid-info{
  display:flex;align-items:center;gap:34px;flex-wrap:wrap;
  padding:9px 18px;background:#f7f9fc;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  font-size:12.5px
}
.sid-info .si-i{display:inline-flex;align-items:center;gap:4px}
.sid-info em{font-style:normal;color:var(--ink-3)}
.sid-info b{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
/* 明细表：首列齿轮+勾选（装饰） */
.sid-tb .sid-pick-th{white-space:nowrap}
.sid-tb .sid-gear{color:#c3ccd8;font-size:12px;margin-right:3px}
.sid-tb .sid-pick-th .ckbox{width:13px;height:13px;vertical-align:middle}
.sid-tb .sid-pick{background:#fbfcfe}
/* 生产任务单号不换行 */
.sid-tb td:nth-child(3),.sid-tb th:nth-child(3){white-space:nowrap}
.sid-tb tbody tr:hover .sid-pick{background:#f4f8ff}
/* 备注：单行文本 */
.sid-remark-line{
  padding:12px 18px;font-size:12.5px;color:var(--ink-2);border-top:1px solid var(--line)
}
.sid-remark-line b{font-weight:600;color:var(--ink-3);margin-right:6px}
/* 关联单据区块：灰底 */
.sid-links-block{
  background:#f7f9fc;border-top:1px solid var(--line);padding:12px 18px 16px
}
.sid-links-hd{font-size:12.5px;font-weight:600;color:var(--ink-3);margin-bottom:9px}
.sid-link-item{
  display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2);margin-bottom:6px
}
.sid-link-item i{
  font-style:normal;width:16px;height:16px;border-radius:50%;border:1px solid #c7d3e3;
  color:#8494a8;font-size:10px;display:inline-flex;align-items:center;justify-content:center;flex:none
}
.sid-link-item:last-child{margin-bottom:0}
.si-head{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-end;padding:12px 14px;background:#f8fafc;border:1px solid var(--line);border-radius:8px;margin-bottom:10px}
.si-f{display:flex;flex-direction:column;gap:4px}
.si-f label{font-size:11.5px;color:var(--ink-3)}
.si-f .req{color:var(--danger);font-weight:700}
.si-f input,.si-f select{border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:5px 9px;font-size:13px;background:#fff;outline:none;min-width:150px}
.si-f input:focus,.si-f select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.si-ro{font-size:13px;font-weight:650;color:var(--ink-2);background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);padding:5px 9px;min-width:150px;display:inline-block}
.si-order{font-size:12.5px;color:var(--ink-2);padding:8px 12px;background:#f0f7ff;border:1px solid #d3e2fb;border-radius:8px;margin-bottom:10px}
.si-tb td{font-size:12.5px}
.si-tb tbody tr:hover td{background:#f9fbfe}
.si-remark{display:flex;gap:12px;align-items:flex-start;margin-top:12px}
.si-remark label{font-size:12.5px;color:var(--ink-2);font-weight:500;flex:0 0 auto;padding-top:7px}
.si-remark textarea{flex:1;min-width:0;resize:vertical;border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:7px 10px;font-size:13px;font-family:inherit;outline:none}
.si-remark textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.si-attach{margin-top:14px}
.si-attach > label{display:block;font-size:12.5px;color:var(--ink-2);font-weight:500;margin-bottom:6px}
.si-attach .att-add{
  display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  width:74px;height:74px;border:1px dashed var(--line-strong);border-radius:8px;
  background:#fff;color:var(--ink-3);cursor:pointer;font-size:11.5px;transition:.12s;font-family:inherit
}
.si-attach .att-add:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.si-attach .att-hint{font-size:11px;color:var(--ink-3);margin-top:8px}
.si-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
.si-hint{font-size:12px;color:var(--ink-3)}

/* ============ 生产进度节点链（详情页） ============ */
.prog-cell{min-width:0}
.prog-wrap{container-type:inline-size}
.prog-chain{display:flex;align-items:center;flex-wrap:wrap;row-gap:6px;padding:4px 2px}
.prog-line{flex:0 0 22px;height:2px;background:#cdd6e3;margin:0 -2px}
.prog-node{
  position:relative;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;
  min-width:64px;padding:8px 11px 7px;border:1.5px solid #cdd6e3;border-radius:10px;background:#f8fafc;text-align:center
}
.prog-node b{font-size:14px;font-weight:700;color:#475569;font-variant-numeric:tabular-nums;line-height:1.1}
.prog-node i{font-size:11.5px;color:#8494a8;font-style:normal;margin-top:2px}
.prog-node u.dot{position:absolute;left:6px;top:6px;width:7px;height:7px;border-radius:50%;background:#16a34a;display:block}
.prog-node.run{border-color:#e0a106;background:#fff8e8}
.prog-node.run b{color:#b4740a}
.prog-node.done{border-color:#16a34a;background:#f0fdf4}
.prog-node.done b{color:#16a34a}
.prog-node.final{border-style:double;border-width:3px}
/* 生产进度明细浮层 */
.prog-pop{
  position:fixed;z-index:520;background:#fff;border:1px solid var(--line-strong);
  border-radius:10px;box-shadow:0 14px 40px rgba(16,30,54,.2);padding:0;overflow:hidden
}
.pgp-hd{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;background:#f8fafc;border-bottom:1px solid var(--line)
}
.pgp-hd b{font-size:13px;font-weight:650;color:var(--ink)}
.pgp-hd span{font-size:11.5px;color:var(--ink-3)}
.pgp-body{padding:8px 12px}
.pgp-row{display:flex;align-items:center;justify-content:space-between;padding:3px 0;font-size:12px;color:var(--ink-2)}
.pgp-row b{font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--ink)}
.pgp-list{border-top:1px dashed var(--line);margin-top:4px;padding-top:6px;max-height:170px;overflow:auto}
.pgp-rpt{
  display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  border:none;background:none;border-radius:6px;padding:6px 8px;cursor:pointer;
  font-size:12px;color:var(--primary);text-align:left;font-family:inherit
}
.pgp-rpt:hover{background:var(--primary-soft)}
.pgp-rpt span{font-size:11px;color:var(--ink-3);flex:none}
.pgp-empty{padding:10px 12px;border-top:1px dashed var(--line);margin-top:4px;font-size:12px;color:var(--ink-3)}
.pgp-foot{padding:8px 12px;border-top:1px solid var(--line);background:#f8fafc}
.pgp-foot .btn{width:100%;justify-content:center}

/* 列宽不足时，节点链改为紧凑网格（隐藏连线），避免单行折成锯齿状 */
@container (max-width: 470px){
  .prog-chain{
    display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));
    gap:4px;row-gap:4px;padding:2px 0
  }
  .prog-line{display:none}
  .prog-node{min-width:0;padding:5px 4px 4px;border-radius:7px}
  .prog-node b{font-size:12.5px}
  .prog-node i{font-size:10.5px;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .prog-node u.dot{left:4px;top:4px;width:6px;height:6px}
}

/* ============ 详情页：只读字段 / 操作链接 / 审核章 ============ */
.dh-ro{padding:6px 2px;font-size:13px;color:var(--ink-2);font-weight:600}
.detail-table td{padding:10px 12px;vertical-align:middle}
.op-cell{white-space:normal;line-height:2}
.op-link{color:var(--primary);cursor:pointer;font-size:12.5px;margin-right:2px;white-space:nowrap}
.op-link:hover{text-decoration:underline}
.audit-seal{
  grid-column:1;grid-row:1;justify-self:end;transform:rotate(-9deg);
  border:2px solid #16a34a;color:#16a34a;border-radius:6px;padding:3px 10px;
  font-size:13px;font-weight:700;letter-spacing:2px;opacity:.85;pointer-events:none;
  white-space:nowrap;line-height:1.3
}

/* 任务单列表：窄屏横向滚动时，操作列吸附右侧，按钮始终可达 */
#page-orders .table-wrap th:last-child,
#page-orders .table-wrap td:last-child{
  position:sticky;right:0;background:#fff;z-index:1;
  box-shadow:-8px 0 10px -10px rgba(15,23,42,.35)
}
#page-orders .table-wrap th:last-child{background:var(--panel-2);z-index:2}
#page-orders .table-wrap tbody tr:hover td:last-child{background:#f9fbfe}

/* ============ 派工工作台 ============ */
.row-sel{background:#eef6ff !important;box-shadow:inset 3px 0 0 var(--primary)}
.row-sel td:first-child{font-weight:600}
.disp-foot{
  position:sticky;bottom:0;z-index:5;background:#fff;border-top:1px solid var(--line);
  padding:10px 16px;display:flex;align-items:center;justify-content:space-between;
  box-shadow:0 -6px 20px rgba(15,23,42,.07)
}
.disp-foot .df-left{font-size:12.5px;color:var(--ink-3)}

/* ============ 「更多」下拉菜单（详情页操作列） ============ */
.more-pop{
  position:fixed;z-index:900;min-width:118px;background:#fff;
  border:1px solid #dfe5ee;border-radius:6px;box-shadow:0 8px 24px rgba(15,23,42,.13);
  padding:4px 0;overflow:hidden
}
.more-pitem{
  display:block;width:100%;text-align:center;border:none;background:#fff;cursor:pointer;
  padding:9px 14px;font-size:13px;color:var(--primary);line-height:1.4
}
.more-pitem + .more-pitem{border-top:1px solid #eef1f6}
.more-pitem:hover{background:#f2f7ff}
.more-pitem:active{background:#e8f0fe}
/* 完工后置灰的操作项（派工 / 中止 / 完工） */
.more-pitem.disabled{color:#c3ccd8;cursor:not-allowed;background:none}
.more-pitem.disabled:hover{background:none;color:#c3ccd8}
.more-pitem[aria-disabled="true"]{color:#c3ccd8;cursor:not-allowed;background:none}
.more-pitem[aria-disabled="true"]:hover{background:none;color:#c3ccd8}

/* ============ 更多操作弹窗 ============ */
.more-list{display:flex;flex-direction:column;gap:8px;padding:4px 2px}
.more-item{
  text-align:left;padding:11px 14px;border:1px solid var(--line);border-radius:8px;background:#fff;
  font-size:13.5px;color:var(--ink-2);cursor:pointer
}
.more-item:hover{border-color:var(--primary);background:#f5f9ff;color:var(--primary)}

/* ============ 徽章颜色变体（业务 / 审核 / 派工状态） ============ */
.badge.b-green{background:#e7f7ee;color:#15803d;border:1px solid #b6e3c6}
.badge.b-amber{background:#fff4e0;color:#b45309;border:1px solid #f3d9a6}
.badge.b-red{background:#fdeaea;color:#b91c1c;border:1px solid #f5c2c2}
.badge.b-blue{background:#e8f0fe;color:#1d4ed8;border:1px solid #bcd2fa}
.badge.b-gray{background:#eef1f6;color:#64748b;border:1px solid #dde3ec}
.badge.b-purple{background:#f1eafd;color:#6d28d9;border:1px solid #ddc9f7}
.badge.b-teal{background:#e2f6f7;color:#0e7490;border:1px solid #b9e6ea}
.ctr{text-align:center}
.chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#334155;cursor:pointer;font-weight:400}
.chk input{cursor:pointer}
.scope-pick{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:13px}
.scope-pick .chk{font-weight:500}

/* ---------- 登录遮罩 ---------- */
.login-root{position:fixed;inset:0;z-index:1200;background:linear-gradient(135deg,#eaf1fb 0%,#f5f8fd 60%,#eef4ec 100%);display:flex;align-items:center;justify-content:center;padding:24px}
.login-card{width:100%;max-width:420px;background:#fff;border:1px solid #e4e9f0;border-radius:16px;box-shadow:0 18px 50px rgba(15,23,42,.12);padding:28px 30px 22px}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.login-brand .brand-logo{width:42px;height:42px;border-radius:11px;font-size:18px}
.login-brand-text strong{display:block;font-size:16px;color:#0f172a}
.login-brand-text span{display:block;font-size:11.5px;color:#8494a8;letter-spacing:.03em}
.login-title{font-size:19px;font-weight:700;color:#0f172a;margin:16px 0 14px}
.login-sep{display:flex;align-items:center;gap:10px;color:#94a3b8;font-size:12px;margin:18px 0 12px}
.login-sep::before,.login-sep::after{content:"";flex:1;height:1px;background:#e8ecf2}
.login-users{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.login-user{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:10px 12px;border:1px solid #e4e9f0;border-radius:10px;background:#f8fafc;cursor:pointer;transition:.15s;text-align:left}
.login-user:hover{border-color:#bcd2fa;background:#eef4fe}
.lu-name{font-size:13.5px;font-weight:600;color:#0f172a}
.login-foot{margin-top:16px;text-align:center;font-size:11.5px;color:#a3aec0}

/* ---------- 切换用户 ---------- */
.switch-btn{margin-top:10px;width:100%;padding:6px 10px;font-size:12px;color:#475569;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer}
.switch-btn:hover{background:#e6eefb;border-color:#bcd2fa;color:#1d4ed8}

/* ===========================================================
   侧边导航折叠态（图标栏）：窄屏/小笔记本节省横向空间
   =========================================================== */
.app.rail{--sidebar-w:62px}
.app.rail .brand{justify-content:center;padding:16px 8px 14px}
.app.rail .brand-text{display:none}
.app.rail .nav{padding:8px 7px}
.app.rail .nav-group{display:none}
.app.rail .nav-item{justify-content:center;padding:11px 0;border-radius:9px}
.app.rail .nav-item span{display:none}
.app.rail .nav-item svg{width:19px;height:19px;flex:0 0 19px;opacity:.9}
.app.rail .nav-item.active svg{opacity:1}
.app.rail .sidebar-foot{padding:10px 7px 12px}
.app.rail .shift-chip{display:none}
.app.rail .mini-user{justify-content:center}
.app.rail .mini-user > div:not(.avatar){display:none}
.app.rail .switch-btn{
  font-size:0;height:28px;padding:0;display:flex;align-items:center;justify-content:center;margin-top:9px
}
.app.rail .switch-btn::after{content:"⇄";font-size:14px;line-height:1}
.rail-btn{padding:6px 8px}
.rail-btn svg{width:16px;height:16px}
.app.rail .rail-btn{color:var(--primary);border-color:#bcd2fa;background:var(--primary-soft)}

/* ===========================================================
   自适应：大屏铺满 → 到窄屏逐级降级，不出现横向溢出
   =========================================================== */
@media (min-width:1700px){
  .page{max-width:100%}
  .content{padding:24px 30px 46px}
  .kpi-val{font-size:27px}
}
@media (max-width:1440px){
  .content{padding:18px 18px 36px}
  .topbar{padding:0 18px}
  .dh-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .g-6{grid-template-columns:repeat(3,1fr)}
  .g-4{grid-template-columns:repeat(2,1fr)}
  .doc-tools{gap:5px 12px}
  .doc-tools button{font-size:12px}
}
@media (max-width:1280px){
  .content{padding:16px 16px 32px}
  .doc-extra{grid-template-columns:1.4fr 1fr}
}
@media (max-width:1100px){
  .dh-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pane-top .dh-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .g-6{grid-template-columns:repeat(2,1fr)}
  .doc-extra{grid-template-columns:1fr}
  .doc-table{min-width:820px}
  .tb-left p{font-size:11.5px}
}
@media (max-width:900px){
  .topbar{height:56px;flex:0 0 56px;padding:0 14px}
  .tb-left h1{font-size:15.5px}
  .tb-left p{display:none}
  .tb-right{gap:8px}
  .topbar .btn{padding:5px 10px;font-size:12.5px}
  .clock{font-size:12px;padding:3px 8px}
  .content{padding:14px 12px 28px}
  .kpi-val{font-size:22px}
  .card-hd{padding:11px 13px}
  .card-bd{padding:12px 13px}
  .filters{padding:10px 13px}
  .filters .field{min-width:120px;flex:1 1 140px}
  .qty-board{grid-template-columns:1fr}
  .doc-title-row{padding:10px 12px;gap:8px}
  .doc-title-row h2{font-size:16px;letter-spacing:2px}
  .doc-table-wrap{padding:0 12px}
  .doc-rowtools{padding:8px 12px 0}
  .doc-extra{padding:12px 12px 14px}
  .dh-grid{padding:10px 12px 12px;gap:6px 14px}
  .detail-table td{padding:8px}
  .prog-node{min-width:56px;padding:7px 9px 6px}
}
@media (max-width:760px){
  .doc-title-row{grid-template-columns:1fr;justify-items:center;row-gap:8px}
  .doc-title-row h2,.doc-tools,.audit-seal{grid-column:1;grid-row:auto;justify-self:center}
  .doc-tools{justify-content:center}
  .clock{display:none}
  .g-2,.g-3,.g-4,.g-6,.g-2-1,.g-1-2{grid-template-columns:1fr}
  .doc-foot{flex-wrap:wrap;gap:8px}
  .doc-foot .df-right{width:100%}
  .doc-foot .df-right .btn{flex:1;min-width:0}
  .doc-table{min-width:780px}
}
@media (max-width:560px){
  .fg-2,.fg-3,.fg-4{grid-template-columns:1fr}
  .dh-grid{grid-template-columns:1fr}
  .login-users{grid-template-columns:1fr}
  .topbar .btn{padding:4px 8px;font-size:11.5px}
  .alloc-row{grid-template-columns:1fr 76px 76px 32px}
  .num-pad{grid-template-columns:repeat(3,1fr)}
}

/* ===== 商品：左分类 / 右明细（整页铺满到底部） ===== */
#page-settings.page-fill{display:flex;flex-direction:column;min-height:0;overflow:hidden}
#page-settings.page-fill > .card{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
#page-settings.page-fill > .card > .tabs{flex:0 0 auto}
.goods-wrap{display:flex;gap:14px;padding:14px 16px 16px;align-items:stretch;flex:1;min-height:0}
.cat-panel{flex:0 0 252px;display:flex;flex-direction:column;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;min-height:0}
.cat-panel-hd{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:11px 13px;border-bottom:1px solid var(--line);font-size:13px;font-weight:650;color:var(--ink)}
.cat-tree{flex:1;min-height:0;overflow:auto;padding:8px 8px 12px}

.cat-node{display:flex;align-items:center;gap:7px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--ink);position:relative;transition:.12s}
.cat-node:hover{background:#eef2f8}
.cat-node.active{background:#e3edff;color:#1d4ed8;font-weight:650}
.cat-node.active .cat-cnt{background:#1d4ed8;color:#fff;border-color:#1d4ed8}
.cat-ic{flex:0 0 20px;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px}
.cat-ic svg{width:15px;height:15px;display:block}
.cat-ic.lv0{color:#fff;background:linear-gradient(135deg,#3b82f6,#1d4ed8);box-shadow:0 1px 4px rgba(37,99,235,.35)}
.cat-ic.lv0 svg{width:11px;height:11px}
.cat-ic.lv1{color:#1d4ed8;background:#dbeafe;box-shadow:inset 0 0 0 1px #c7dcfd}
.cat-ic.lv2{color:#0e7490;background:#d9f2f7;box-shadow:inset 0 0 0 1px #b8e7ef}
.cat-top{font-weight:650}
.cat-child{font-weight:400;font-size:12.5px;padding:6px 8px}
.cat-kids{position:relative;margin:2px 0 5px 20px;padding-left:11px;border-left:1.5px dashed #c3d0e2}
.cat-kids .cat-node::before{content:"";position:absolute;left:-11px;top:50%;width:9px;height:1.5px;background:#c3d0e2}
.cat-lv{flex:0 0 auto;font-size:10.5px;line-height:15px;color:#64748b;background:#fff;border:1px solid var(--line);border-radius:4px;padding:0 4px;font-variant-numeric:tabular-nums}
.cat-node.active .cat-lv{color:#1d4ed8;border-color:#bfd3fb;background:#f2f7ff}
.cat-node:hover .cat-lv{display:none}
.cat-toggle{width:14px;flex:0 0 14px;text-align:center;color:#64748b;font-size:11px;user-select:none;font-weight:700}
.cat-toggle.empty{cursor:default}
.cat-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cat-cnt{flex:0 0 auto;font-size:11.5px;line-height:16px;color:var(--ink-3);background:#fff;border:1px solid var(--line);border-radius:10px;padding:0 7px;font-variant-numeric:tabular-nums}
.cat-ops{display:none;gap:4px;flex:0 0 auto;align-items:center}
.cat-node:hover .cat-ops,.cat-node:focus-within .cat-ops{display:flex}
.cat-ico{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;color:var(--ink-3);cursor:pointer;border-radius:7px;line-height:1;padding:0;transition:.12s;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.cat-ico svg{width:14px;height:14px;display:block;fill:currentColor}
.cat-ico:hover{color:#1d4ed8;border-color:#bfd3fb;background:#f2f7ff;box-shadow:0 1px 4px rgba(29,78,216,.18)}
.cat-ico.ico-del:hover{color:#dc2626;border-color:#fecaca;background:#fff1f2;box-shadow:0 1px 4px rgba(220,38,38,.18)}
.cat-ico:active{transform:translateY(1px)}

.cat-add{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 11px;border:1px solid transparent;background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:8px;line-height:1;box-shadow:0 1px 4px rgba(37,99,235,.35);transition:.12s}
.cat-add svg{width:14px;height:14px;display:block;fill:currentColor}
.cat-add:hover{filter:brightness(1.06);box-shadow:0 2px 9px rgba(37,99,235,.45)}
.cat-add:active{transform:translateY(1px)}

.goods-panel{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}
.goods-panel-hd{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.gp-title{font-size:14px;font-weight:650;color:var(--ink);display:flex;align-items:baseline;gap:8px}
.gp-sub{font-size:12px;font-weight:400;color:var(--ink-3)}
.gp-tools{display:flex;align-items:center;gap:8px}
.ipt-search{border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:6px 11px;font-size:13px;width:200px;outline:none;transition:.15s;background:#fff}
.ipt-search:focus{border-color:#1d4ed8;box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.goods-panel .table-wrap{flex:1;min-height:0;max-height:none;overflow:auto;border:1px solid var(--line);border-radius:var(--radius)}
.goods-panel .tb thead th{position:sticky;top:0;z-index:2}
.goods-panel .tb.g-tb{table-layout:fixed}
.goods-panel .tb.g-tb td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.goods-panel .tb.g-tb td.g-name{font-weight:600}
.goods-panel .tb.g-tb td .btn-sm{padding:3px 6px;font-size:11.5px}
.goods-panel .tb.g-tb td.g-ops{white-space:nowrap;text-overflow:clip}
.g-tb td.g-ops .btn-sm{display:inline-flex;align-items:center;justify-content:center;line-height:1.4}
.g-tb .bi{display:none;font-style:normal;font-size:12px;line-height:1}
@media (max-width:1279px){
  .g-tb .bi{display:inline}
  .g-tb .bt{display:none}
  .g-tb td.g-ops .btn-sm{padding:3px 8px}
}

/* ===== 商品新增/编辑表单（基本信息 + 商品设置） ===== */
.modal.xl{width:1080px}
.pform{display:block}
.form-sec{margin-bottom:20px}
.form-sec:last-child{margin-bottom:0}
.form-sec-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:650;color:var(--ink);margin-bottom:14px}
.form-sec-hd::before{content:"";width:3px;height:14px;border-radius:2px;background:var(--primary)}
.pform .field>label{font-size:12.5px;color:var(--ink-2)}
.pform-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px 28px}
.pform .hf{display:grid;grid-template-columns:92px 1fr;align-items:center;gap:10px}
.pform .hf>label{font-size:12.5px;color:var(--ink-2);line-height:1.4}
.pform .hf>.fi{min-width:0;display:block}
.pform .hf.wide{grid-column:1/-1}
.pform .hf.top{align-items:start}
.pform .hf.top>label{padding-top:7px}
.pform .req{color:var(--danger);font-style:normal}
.pform input[type=text],.pform input[type=number],.pform select,.pform textarea{border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:7px 10px;font-size:13px;background:#fff;outline:none;transition:.15s;width:100%}
.pform input[readonly]{background:var(--panel-2);color:var(--ink-2)}
.pform input:focus,.pform select:focus,.pform textarea:focus{border-color:#1d4ed8;box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.pform textarea{resize:vertical;min-height:52px;line-height:1.6}
/* 工序弹窗：同行「开关 + 输入框」与开关后的说明文字 */
.pform .hf>.fi>.sw{align-self:center;margin-top:0}
.pform .hf-hint{display:inline-block;margin-left:10px;font-size:12px;color:var(--ink-3);vertical-align:middle;line-height:1.5}
.pform .hf-inline{display:flex;align-items:center;gap:10px}
.pform .hf-inline>.sw{flex:0 0 auto}
.pform .hf-inline>.hf-sub{flex:0 0 auto;font-size:12.5px;color:var(--ink-2)}
.pform .hf-inline>.pick-row{flex:1;min-width:0}
.pform .hf-inline>input[type=text]{flex:1;min-width:0}
.pform .hf.top>.fi>textarea{min-height:86px}
/* 工序弹窗单列布局（参考图样式），标签列加宽避免换行 */
.pform-proc .pform-grid-1{grid-template-columns:1fr;gap:13px 0}
.pform-proc .hf{grid-template-columns:104px 1fr}
.pform-proc .hf>label{white-space:nowrap}
.pform-proc .hf.top{align-items:start}
.pform-proc .hf.top>label{padding-top:8px}
.pform-proc .hf.top>.fi>textarea{min-height:96px}
.unit-row{display:flex;align-items:center;gap:10px}
.unit-row>input{flex:1;min-width:0}
.multi-wrap{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.ratio-x{color:var(--ink-3);font-size:12px}
.sw{display:inline-flex;align-items:center;cursor:pointer;line-height:1}
.sw input{display:none}
.sw i{width:34px;height:18px;border-radius:9px;background:#cbd5e1;position:relative;display:inline-block;transition:.16s}
.sw i::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.28);transition:.16s}
.sw input:checked+i{background:var(--primary)}
.sw input:checked+i::after{transform:translateX(16px)}
.set-rows{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.set-row{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--ink-2)}
.price-wrap{max-width:520px}
.price-tb{width:100%;border-collapse:collapse;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
.price-tb th{background:var(--panel-2);border-bottom:1px solid var(--line);font-size:12.5px;font-weight:600;color:var(--ink-2);padding:7px 10px;text-align:left}
.price-tb th.num{text-align:right}
.price-tb td{border-top:1px solid var(--line);padding:0}
.price-tb td:first-child{background:var(--panel-2);padding:7px 10px;font-size:13px;color:var(--ink-2);width:120px}
.price-tb td input{border:none;width:100%;padding:8px 10px;font-size:13px;text-align:right;outline:none;background:#fff}
.price-tb td input:focus{box-shadow:inset 0 0 0 2px rgba(29,78,216,.3)}
.up-wrap{display:flex;flex-direction:column;gap:6px}
.up-box{width:96px;height:96px;border:1px dashed var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer;transition:.15s;overflow:hidden}
.up-box:hover{border-color:#1d4ed8;background:#f2f7ff}
.up-box .up-plus{font-size:20px;color:var(--ink-3);line-height:1}
.up-box .up-txt{font-size:11.5px;color:var(--ink-3)}
.up-box.has{padding:0;border-style:solid;background:#fff}
.up-box img{width:100%;height:100%;object-fit:cover;display:block}
.up-hint{font-size:11px;color:var(--ink-3)}
.btn-text{background:transparent;border-color:transparent;color:var(--ink-2)}
.btn-text:hover{background:var(--panel-2);color:var(--ink)}

/* ===== 工艺路线弹窗（参考图样式：字段 + 工序网格 + 拖拽排序） ===== */
.r-foot{display:flex;align-items:center;justify-content:space-between;width:100%;gap:9px}
.r-foot-right{display:flex;align-items:center;gap:9px}
.rprod-row{display:flex;align-items:center;gap:14px}
.rprod-row>.pick-row.grow{flex:1;min-width:0}
.r-seq{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.pick-row{display:flex;align-items:stretch}
.pick-row>input{flex:1;min-width:0;border-top-right-radius:0!important;border-bottom-right-radius:0!important}
.pick-btn{flex:0 0 34px;border:1px solid var(--line-strong);border-left:none;background:var(--panel-2);color:var(--ink-2);cursor:pointer;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:15px;line-height:1;padding:0}
.pick-btn:hover{background:#eef2f8;color:#1d4ed8}
.pick-btn:disabled{opacity:.55;cursor:not-allowed}

.r-ops-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:2px 0 10px}
.r-ops-tip{font-size:12px;color:var(--ink-3)}
.r-ops-wrap{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:auto}
.r-ops-tb{min-width:880px}
.r-ops-tb th{white-space:nowrap}
.r-ops-tb td{padding:5px 6px;vertical-align:middle}
.r-ops-tb .r-pname{font-size:12.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:126px}
.r-ops-tb .r-op,.r-ops-tb input[type=number],.r-ops-tb .r-req{border:1px solid var(--line);border-radius:6px;padding:5px 7px;font-size:12.5px;background:#fff;width:100%;outline:none;transition:.12s}
.r-ops-tb .r-op:focus,.r-ops-tb input:focus,.r-ops-tb .r-req:focus{border-color:#1d4ed8;box-shadow:0 0 0 2px rgba(29,78,216,.12)}
.r-ops-tb input[type=number]{text-align:right}
.r-ops-tb tr.sel{background:#eef4ff}
.r-ops-tb tr.dragging{opacity:.6;background:#e0ecff}
.r-grip{cursor:grab;color:#94a3b8;font-size:15px;user-select:none}
.r-grip:active{cursor:grabbing}
.qmark{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:#cbd5e1;color:#fff;font-size:10px;cursor:help;vertical-align:middle}

.r-ops-tools{display:flex;align-items:center;gap:6px;margin-top:8px}
/* 工艺路线行号：[-] n [+] */
.r-nocell{white-space:nowrap;padding:4px 6px}
.r-nocell .r-no{display:inline-block;min-width:18px;text-align:center;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.r-rbtn{
  width:22px;height:22px;padding:0;border:1px solid var(--line-strong);border-radius:5px;
  background:#fff;color:#5b6b80;cursor:pointer;font-size:15px;font-weight:700;line-height:1;
  font-family:inherit;display:inline-flex;align-items:center;justify-content:center;
  vertical-align:middle;transition:.12s
}
.r-rbtn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.r-rbtn:active{transform:scale(.94)}
.r-tool{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line-strong);background:#fff;border-radius:7px;cursor:pointer;padding:0;transition:.12s}
.r-tool svg{width:15px;height:15px;fill:#475569}
.r-tool:hover{border-color:#bfd3fb;background:#f2f7ff}
.r-tool:hover svg{fill:#1d4ed8}
.r-tool.danger:hover{border-color:#fecaca;background:#fff1f2}
.r-tool.danger:hover svg{fill:#dc2626}
.r-tools-hint{margin-left:6px;font-size:12px;color:var(--ink-3)}
.r-tools-hint b{color:var(--ink)}
/* 工序明细行数：自由输入 */
.r-rows-label{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3);white-space:nowrap;flex:0 0 auto}
.r-rows-sel{height:26px;border:1px solid var(--line-strong);border-radius:6px;background:#fff;font-size:12px;color:var(--ink);padding:0 6px;cursor:pointer}
.r-rows-sel:focus{outline:none;border-color:#93b4f5;box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.r-rows-input{width:66px;height:26px;border:1px solid var(--line-strong);border-radius:6px;background:#fff;font-size:12px;color:var(--ink);padding:0 6px;text-align:center}
.r-rows-input:focus{outline:none;border-color:#93b4f5;box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.r-rows-unit{font-size:12px;color:var(--ink-3)}
.r-ops-tools{flex-wrap:wrap;row-gap:6px}

.r-pick-pop{position:fixed;z-index:9999;background:#fff;border:1px solid var(--line-strong);border-radius:10px;box-shadow:0 12px 32px rgba(15,23,42,.18);overflow:hidden}
.rpp-hd{padding:9px 12px;font-size:12.5px;font-weight:650;color:var(--ink);border-bottom:1px solid var(--line);background:var(--panel-2)}
.rpp-list{max-height:250px;overflow:auto;padding:4px}
.rpp-item{display:flex;align-items:center;gap:9px;padding:6px 9px;border-radius:7px;cursor:pointer;font-size:13px}
.rpp-item:hover{background:var(--panel-2)}
.rpp-item input{width:15px;height:15px;accent-color:#1d4ed8;cursor:pointer;flex:0 0 auto}
.rpp-txt{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.rpp-txt b{font-weight:550;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rpp-txt em{font-style:normal;font-size:11px;color:var(--ink-3)}
.rpp-ft{display:flex;justify-content:flex-end;gap:8px;padding:8px 10px;border-top:1px solid var(--line);background:var(--panel-2)}

/* ===== 系统重置弹窗 ===== */
.reset-list{display:flex;flex-direction:column;gap:14px}
.reset-grp{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.reset-grp-hd{background:var(--panel-2);border-bottom:1px solid var(--line);padding:8px 12px}
.reset-grp-hd .chk{font-size:13px}
.reset-item{display:flex;align-items:center;gap:9px;padding:7px 14px;font-size:13px;color:var(--ink);cursor:pointer}
.reset-item:hover{background:var(--panel-2)}
.chk{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none}
.chk input{width:15px;height:15px;accent-color:#1d4ed8;cursor:pointer}

@media (max-width:1279px){
  .cat-panel{flex:0 0 224px}
  .modal.xl{width:960px}
  .r-ops-tb{min-width:820px}
  .r-ops-tb .r-pname{max-width:104px}
  .r-ops-tb th,.r-ops-tb td{padding-left:4px;padding-right:4px}
}
@media (max-width:1119px){
  .goods-wrap{flex-direction:column}
  .cat-panel{flex:0 0 auto;max-height:242px}
  .cat-tree{max-height:194px}
  .goods-panel{flex:1;min-height:0}
  .g-tb .bi{display:inline}
  .g-tb .bt{display:none}
  .g-tb td.g-ops .btn-sm{padding:3px 8px}
  .modal.xl{width:100%}
  /* 工序明细：窄屏隐藏工序名称列，压缩固定列宽 */
  .r-ops-tb{min-width:660px}
  .r-ops-tb .r-pname{display:none}
  .r-ops-tb th:nth-child(3),.r-ops-tb td:nth-child(3){display:none}
  .r-ops-tb th:nth-child(1),.r-ops-tb td:nth-child(1){width:38px}
  .r-ops-tb th:nth-child(2),.r-ops-tb td:nth-child(2){width:104px}
  .r-ops-tb th:nth-child(4),.r-ops-tb td:nth-child(4),
  .r-ops-tb th:nth-child(5),.r-ops-tb td:nth-child(5){width:52px}
  .r-ops-tb th:nth-child(6),.r-ops-tb td:nth-child(6){width:74px}
  .r-ops-tb th:nth-child(7),.r-ops-tb td:nth-child(7),
  .r-ops-tb th:nth-child(8),.r-ops-tb td:nth-child(8){width:74px}
  .r-ops-tb th:nth-child(10),.r-ops-tb td:nth-child(10){width:44px}
}
@media (max-width:1023px){
  #page-settings.page-fill{height:auto !important;overflow:visible}
  #page-settings.page-fill > .card{overflow:visible}
  .goods-wrap{flex:none}
  .goods-panel .table-wrap{max-height:calc(100vh - 340px);min-height:220px}
  .pform-grid{grid-template-columns:1fr}
  /* 基础资料页签过多时横向滚动，避免挤压换行占高 */
  .tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
  .tabs::-webkit-scrollbar{height:5px}
  .tabs::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}
  .tab{flex:0 0 auto}
}
/* ===== 基础资料批量删除（行首勾选 + 下拉菜单） ===== */
.bdd-wrap{position:relative;display:inline-flex;flex:0 0 auto}
.bdd-menu{
  position:absolute;right:0;top:calc(100% + 6px);z-index:70;
  min-width:238px;background:var(--panel);border:1px solid var(--line);border-radius:11px;
  box-shadow:0 12px 32px rgba(16,30,54,.16);padding:6px;
}
.bdd-menu[hidden]{display:none}
.bdd-item{
  display:flex;align-items:center;gap:8px;width:100%;
  border:none;background:none;border-radius:8px;padding:8px 10px;
  font-size:12.8px;color:var(--ink);cursor:pointer;text-align:left;transition:.13s;
}
.bdd-item:hover{background:var(--danger-soft);color:var(--danger)}
.bdd-item .ic{width:15px;height:15px;flex:none;opacity:.6}
.bdd-item .n{
  margin-left:auto;font-size:11.5px;font-weight:700;color:var(--ink-3);
  font-variant-numeric:tabular-nums;flex:none;
}
.bdd-item:hover .n{color:var(--danger)}
.bdd-item:disabled{opacity:.45;cursor:not-allowed}
.bdd-item:disabled:hover{background:none;color:var(--ink)}
.bdd-item:disabled:hover .n{color:var(--ink-3)}
.bdd-sep{height:1px;background:var(--line);margin:5px 3px}
.bdd-row{display:flex;gap:12px;padding:2px 4px 3px}
.bdd-link{background:none;border:none;padding:0;font-size:11.5px;color:var(--primary);cursor:pointer}
.bdd-link:hover{text-decoration:underline}
.bdd-tip{padding:4px 10px 5px;font-size:11px;color:var(--ink-3);line-height:1.6}
.bdd-caret{width:0;height:0;border-left:3.5px solid transparent;border-right:3.5px solid transparent;border-top:4.5px solid currentColor;opacity:.65;margin-left:1px}
.bdd-sel-info{font-size:12px;color:var(--danger);font-weight:700;white-space:nowrap}
.bdd-has-sel .btn-danger-ghost{background:var(--danger-soft);border-color:#f0a3a3}
.ckbox{width:15px;height:15px;accent-color:#1d4ed8;cursor:pointer;vertical-align:middle}
.tb tbody tr.picked td{background:#f4f8ff}
.tb tbody tr.picked:hover td{background:#eaf1ff}
.tb tbody tr.picked td:first-child{box-shadow:inset 3px 0 0 var(--primary)}

@media print{
  .sidebar,.topbar,.tabbar,.filters,.btn,.num-pad,.doc-tabs,.doc-foot,.doc-rowtools,.att-add,.del-cell,.rn-btn,.col-rs{display:none !important}
  .content{overflow:visible;padding:0}
  .card,.doc-page{break-inside:avoid;box-shadow:none}
  .doc-page{border:none}
  .doc-table td input,.doc-table td select{border:none}
  .doc-table{table-layout:auto}
}

/* ===== 任务单详情：工艺路线调整弹窗 ===== */
.ordr{display:flex;flex-direction:column;gap:10px}
.ordr-top{display:flex;justify-content:flex-end;align-items:center}
.ordr-seq{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink);cursor:pointer;user-select:none}
.ordr-seq input{width:15px;height:15px;accent-color:#2563eb;cursor:pointer}
/* 表格容器：横向可滚动（列比较多） */
.ordr-wrap{width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;border:1px solid var(--line);border-radius:6px}
.ordr-tb{min-width:1186px;table-layout:fixed}
.ordr-tb th{background:#f4f7fb;font-size:12.5px;white-space:nowrap}
.ordr-tb td{font-size:12.5px;padding:0 8px;height:36px;vertical-align:middle;border-top:1px solid var(--line)}
.ordr-tb tbody tr:first-child td{border-top:none}
.ordr-tb .ordr-blank td{background:#fff;height:36px}
/* 行号：[−] n [+]，直接在本行增减工序行 */
.ordr-tb .ordr-nocell{white-space:nowrap;padding:4px 6px}
.ordr-tb .ordr-no{display:inline-block;min-width:18px;text-align:center;font-weight:600;
  color:var(--ink);font-variant-numeric:tabular-nums}
.ordr-rbtn{
  width:22px;height:22px;padding:0;border:1px solid var(--line-strong);border-radius:5px;
  background:#fff;color:#5b6b80;cursor:pointer;font-size:15px;font-weight:700;line-height:1;
  font-family:inherit;display:inline-flex;align-items:center;justify-content:center;
  vertical-align:middle;transition:.12s
}
.ordr-rbtn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.ordr-rbtn:active{transform:scale(.94)}
/* 三个勾选列：可自由打钩 */
.ordr-tb input[type="checkbox"]{
  width:15px;height:15px;accent-color:#2563eb;cursor:pointer;vertical-align:middle;margin:0
}
.ordr-tb input[type="checkbox"]:disabled{cursor:not-allowed;opacity:.45}
.ordr-tb select.ordr-op{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:4px;
  padding:0 4px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit;cursor:pointer
}
.ordr-tb select.ordr-op:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.ordr-tb input.ordr-req{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:4px;
  padding:0 6px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.ordr-tb input.ordr-req:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.ordr-tb input[type="number"],.ordr-tb input[type="date"]{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:4px;
  padding:0 6px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.ordr-tb input[type="date"]{padding:0 2px;font-size:12px}
.ordr-tb input.ordr-ratio,.ordr-tb input.ordr-wage{text-align:right}
.ordr-tb input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.ordr-tb input:disabled{background:#f8fafc;border-color:#eef1f6}
.ordr-q{display:inline-block;width:13px;height:13px;line-height:13px;text-align:center;border-radius:50%;
  background:#c7d3e3;color:#fff;font-size:9px;vertical-align:middle;cursor:help}
.ordr-tip{font-size:12px;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:7px 10px}
.ordr-foot{display:flex;align-items:center;justify-content:space-between;width:100%}

/* ===== 任务单详情：物料信息弹窗 ===== */
.mat-pop-wrap{width:100%;max-width:100%;overflow:auto;max-height:60vh;border:1px solid var(--line);border-radius:6px}
.mat-pop-tb{min-width:798px;table-layout:fixed}
.mat-pop-tb th{background:#f4f7fb;font-size:12.5px;text-align:center;white-space:nowrap}
.mat-pop-tb td{font-size:12.5px;height:36px;vertical-align:middle;border-top:1px solid var(--line)}
.mat-pop-tb tbody tr:first-child td{border-top:none}
.mat-pop-tb .num{text-align:right;font-variant-numeric:tabular-nums}
.mat-gear{color:#c3ccd8;font-size:13px}

/* 选择工艺路线浮层 */
.ordr-pick{position:fixed;z-index:9999;background:#fff;border:1px solid var(--line-strong);
  border-radius:10px;box-shadow:0 12px 32px rgba(15,23,42,.2);overflow:hidden}
.ordr-pick-hd{padding:9px 12px;font-size:12.5px;font-weight:650;color:var(--ink);
  border-bottom:1px solid var(--line);background:var(--panel-2)}
.ordr-pick-list{max-height:260px;overflow:auto;padding:4px}
.ordr-pick-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 9px;border:none;
  background:none;border-radius:7px;cursor:pointer;font-size:12.5px;font-family:inherit;text-align:left}
.ordr-pick-item:hover{background:var(--panel-2)}
.ordr-pick-item.cur{background:var(--primary-soft)}
.ordr-pick-item b{color:var(--ink);min-width:52px}
.ordr-pick-item span{color:var(--ink-2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ordr-pick-item em{font-style:normal;color:var(--ink-3);font-size:11.5px;white-space:nowrap}


/* ===== 生产任务单进度表 ===== */
.pgp-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pgp-bar-right{margin-left:auto;display:flex;align-items:center;gap:8px}
.pgp-sel{width:104px}
.pgp-more{
  display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;
  padding:11px 16px;background:#f8fafc;border-bottom:1px solid var(--line)
}
.pgp-more label{display:flex;flex-direction:column;gap:4px;font-size:11.5px;color:var(--ink-3)}
.pgp-more select,.pgp-more input{
  height:30px;min-width:132px;border:1px solid var(--line-strong);border-radius:6px;
  padding:0 8px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.pgp-more select:focus,.pgp-more input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.10)}
.pgp-more .btn{align-self:flex-end}
.pgp-foot{font-size:12px;color:var(--ink-3);padding:9px 16px;border-top:1px solid var(--line)}
.pgp-foot b{color:var(--ink-2)}
.pgc-tb{table-layout:fixed;min-width:1890px}
.home-table .pgc-tb{min-width:1590px}
.pgc-tb td{font-size:12.5px;vertical-align:middle;overflow:hidden;padding-top:4px;padding-bottom:4px}
.pgc-tb td a{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.pgc-tb tbody tr:hover td{background:#f9fbfe}
.pgc-cell{min-width:0;padding:4px 8px;white-space:normal;overflow:visible}
/* 生产进度：圆形节点链（完成 ✓ / 进行中百分比 / 未开始 0%） */
.pgc-chain{display:flex;align-items:center;flex-wrap:wrap;gap:1px;row-gap:8px}
.pgc-line{flex:0 0 10px;height:2px;background:#d7dee8;align-self:flex-start;margin-top:15px}
.pgc-node{display:inline-flex;flex:0 0 auto;flex-direction:column;align-items:center;gap:1px;cursor:pointer}
.pgc-node em{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:55px;height:32px;padding:0 11px;border-radius:16px;
  border:2px solid #d7dee8;background:#fff;
  font-style:normal;font-size:14px;font-weight:700;color:#94a3b8;line-height:1;
  font-variant-numeric:tabular-nums;transition:.12s
}
.pgc-node i{
  font-size:11px;font-style:normal;color:#000;font-weight:600;white-space:nowrap;
  max-width:62px;overflow:hidden;text-overflow:ellipsis;margin-top:2px
}
.pgc-node:hover em{box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.pgc-node.done em{border-color:#16a34a;background:#f2fdf6;color:#16a34a}
.pgc-node.run em{border-color:#2563eb;background:#f5f8ff;color:#2563eb}
.pgc-node.idle em{border-color:#d7dee8;background:#fff;color:#94a3b8}
.pgc-node.late em{border-color:#dc2626;background:#fef4f4;color:#dc2626}
/* 工序名统一用黑色（状态由胶囊颜色区分） */
.pgc-node.final em{border-width:2px}
/* 图例 */
/* 问号悬停提示气泡 */
.q-tip{cursor:help}
.q-tip-pop{
  position:fixed;z-index:900;max-width:min(92vw,620px);pointer-events:none;
  background:#1f2d3d;color:#fff;font-size:12.5px;line-height:1.75;font-weight:400;
  padding:8px 12px;border-radius:7px;white-space:normal;word-break:break-word;
  box-shadow:0 10px 26px rgba(16,30,54,.26)
}

/* ===== 生产领料单 ===== */
.pk-tb .prod-combo{width:100%}
.pk-tb .pc-input{width:100%;height:28px;font-size:12.5px}
.pk-tb .pc-btn{height:28px}
.pk-tb .pk-req,.pk-tb .pk-act,.pk-tb .pk-track{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:5px;
  padding:0 8px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.pk-tb .pk-req,.pk-tb .pk-act{text-align:right;font-variant-numeric:tabular-nums}
.pk-tb .pk-req:focus,.pk-tb .pk-act:focus,.pk-tb .pk-track:focus{
  border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)
}
.pk-tb td{vertical-align:middle}
.pk-tb tbody tr:hover td{background:#f9fbfe}
.pk-tb .pk-name{font-weight:600;color:var(--ink)}
.pk-tb .pk-spec{color:var(--ink-2)}


/* ===== 采购入库单 / 销售出库单（通用单据） ===== */
.doc-tb .prod-combo{width:100%}
.doc-tb .pc-input{width:100%;height:28px;font-size:12.5px}
.doc-tb .pc-btn{height:28px}
.doc-tb .doc-qty,.doc-tb .doc-cost,.doc-tb .doc-price,.doc-tb .doc-track{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:5px;
  padding:0 8px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.doc-tb .doc-qty,.doc-tb .doc-cost,.doc-tb .doc-price{text-align:right;font-variant-numeric:tabular-nums}
.doc-tb .doc-qty:focus,.doc-tb .doc-cost:focus,.doc-tb .doc-price:focus,.doc-tb .doc-track:focus{
  border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)
}
.doc-tb .doc-quality{
  width:100%;height:28px;border:1px solid var(--line-strong);border-radius:5px;
  padding:0 6px;font-size:12.5px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.doc-tb .doc-quality:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.doc-tb td{vertical-align:middle}
.doc-tb tbody tr:hover td{background:#f9fbfe}
.doc-tb .doc-pname{font-weight:600;color:var(--ink)}
.doc-tb .doc-spec{color:var(--ink-2)}
.doc-tb .doc-srcno{color:var(--primary);font-variant-numeric:tabular-nums}


/* ===== 主页（登录后首页） ===== */
.home{display:flex;flex-direction:column;gap:14px}
.home-card{border-radius:10px;overflow:hidden}
.home-tools{display:flex;align-items:center;gap:8px}
.home-refresh{width:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1}
.home-table{overflow-x:auto}
.home-table.collapsed{max-height:252px;overflow-y:auto}
.home-table.collapsed .pgc-tb thead th{position:sticky;top:0;z-index:2}
.home-pager{
  display:flex;align-items:center;justify-content:flex-end;gap:12px;
  padding:8px 14px;border-top:1px solid var(--line);font-size:12px;color:#8494a8
}
.home-size{display:inline-flex;align-items:center;gap:5px}
.home-pager select{
  height:26px;border:1px solid var(--line-strong);border-radius:5px;padding:0 6px;
  font-size:12px;color:var(--ink);background:#fff;outline:none;font-family:inherit
}
.home-row{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px}
@media (max-width:1180px){.home-row{grid-template-columns:1fr}}
/* 业务流转流程图 */
.flow{padding:4px 0}
.flow-row{display:flex;align-items:center;gap:6px;padding:8px 0;overflow-x:auto}
.flow-node{display:flex;flex-direction:column;align-items:center;gap:7px;width:104px;flex:0 0 auto;cursor:pointer}
.flow-ic{
  width:42px;height:42px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;
  background:#eef4ff;border:1px solid #dbe7ff
}
.flow-ic svg{width:21px;height:21px;fill:none;stroke:#2563eb;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.flow-ic.c-orange{background:#fff3e8;border-color:#fbdfc0}
.flow-ic.c-orange svg{stroke:#ea580c}
.flow-ic.c-indigo{background:#eef0ff;border-color:#dde1fb}
.flow-ic.c-indigo svg{stroke:#4f46e5}
.flow-ic.c-red{background:#fdeeee;border-color:#fbd6d6}
.flow-ic.c-red svg{stroke:#dc2626}
.flow-ic.c-teal{background:#e6f7f6;border-color:#cdeeea}
.flow-ic.c-teal svg{stroke:#0d9488}
.flow-tx{font-size:12px;color:#475569;text-align:center;line-height:1.35}
.flow-arrow{flex:0 0 auto;width:24px;height:2px;background:#cbd5e1;position:relative;margin-top:-11px}
.flow-arrow::after{
  content:'';position:absolute;right:-1px;top:-4px;
  border-left:7px solid #cbd5e1;border-top:5px solid transparent;border-bottom:5px solid transparent
}
.flow-arrow.dash{background:repeating-linear-gradient(90deg,#cbd5e1 0 5px,transparent 5px 9px)}
.flow-row2{padding-left:268px;margin-top:2px}
.flow-branch{flex:0 0 auto;width:2px;height:18px;background:#cbd5e1;margin-right:16px;align-self:flex-start;margin-top:-8px}
.flow-node:hover .flow-ic{box-shadow:0 0 0 3px rgba(37,99,235,.14)}
/* 预警信息 */
.alert-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.alert-tile{background:#f7f9fc;border:1px solid #e6ebf3;border-radius:8px;padding:14px 6px;text-align:center}
.alert-tile b{display:block;font-size:20px;font-weight:700;color:#1f2d3d;font-variant-numeric:tabular-nums;line-height:1.2}
.alert-tile span{display:block;font-size:11.5px;color:#8494a8;margin-top:4px}
.alert-tile.warn{background:#fff7ed;border-color:#fbd9b4}
.alert-tile.warn b{color:#c2410c}
/* 顶栏「报表设置」 */
.tb-link{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--primary);cursor:pointer;text-decoration:none}
.tb-link:hover{text-decoration:underline}
.tb-link svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}


/* ===== 库存管理（库存查询 / 库存汇总表 / 库存明细表） ===== */
.st-tb{font-size:12.5px}
.st-tb td,.st-tb th{white-space:nowrap}
.st-tb .st-pname{font-weight:600;color:var(--ink)}
.st-tb .st-no{color:var(--primary);font-variant-numeric:tabular-nums}
/* 两级表头：分组列 */
.st-tb.st-2h thead tr:first-child th{background:#f4f7fb;border-bottom:1px solid var(--line);text-align:center}
.st-tb.st-2h thead tr:nth-child(2) th{background:#fafcff;font-size:12px;color:var(--ink-2);text-align:right}
.st-tb.st-2h thead tr:nth-child(2) th.ctr{text-align:center}
.st-tb.st-2h thead tr:first-child th.st-grp{
  background:#eaf1fd;color:var(--primary);font-weight:650;letter-spacing:.3px;
  border-left:1px solid #dbe6f8;border-right:1px solid #dbe6f8;text-align:center
}
.st-tb.st-2h thead tr:nth-child(2) th:first-child{border-left:1px solid #dbe6f8}
.st-tb.st-2h thead tr:nth-child(2) th:last-child{border-right:1px solid #dbe6f8}
/* 合计行 */
.st-tb tfoot .st-total td{background:#f4f7fb;font-weight:650;color:var(--ink);border-top:1px solid var(--line)}
.st-tb tfoot .st-total td.ctr{text-align:center}
/* 工具条 */
.sil-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:100%}
.sil-lb{font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.sil-ck{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink-2);white-space:nowrap;cursor:pointer}
.sil-ck input{margin:0}
.sil-kw{height:30px;border:1px solid var(--line-strong);border-radius:6px;padding:0 10px;font-size:12.5px;min-width:190px;outline:none;font-family:inherit}
.sil-kw:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
/* 更多筛选浮层 */
.ss-more{
  position:absolute;z-index:60;top:56px;right:16px;width:360px;padding:14px 16px;
  background:#fff;border:1px solid var(--line);border-radius:10px;
  box-shadow:0 10px 30px rgba(15,23,42,.14);display:flex;flex-direction:column;gap:10px
}
.ss-more[hidden]{display:none}
.ss-more label{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2)}
.ss-more label select{flex:1;height:30px;border:1px solid var(--line-strong);border-radius:6px;padding:0 8px;font-size:12.5px;outline:none;font-family:inherit;background:#fff}
.ss-more label select:focus{border-color:var(--primary)}
.ss-more-btns{display:flex;justify-content:flex-end;gap:8px;padding-top:4px;border-top:1px solid var(--line)}
/* 行内链接按钮 */
.linkbtn{background:none;border:none;padding:0;color:var(--primary);font-size:12.5px;cursor:pointer;font-family:inherit}
.linkbtn:hover{text-decoration:underline}
