/* ===== 个人财务管理系统 - 样式 ===== */
:root{
  --primary:#2563eb; --primary-dark:#1d4ed8; --primary-soft:#eff6ff;
  --sidebar:#0f172a; --sidebar2:#1e293b;
  --bg:#f1f5f9; --card:#ffffff; --border:#e2e8f0; --border2:#cbd5e1;
  --text:#1e293b; --muted:#64748b; --muted2:#94a3b8;
  --green:#16a34a; --green-bg:#dcfce7;
  --red:#dc2626; --red-bg:#fee2e2;
  --amber:#d97706; --amber-bg:#fef3c7;
  --radius:10px; --shadow:0 1px 3px rgba(15,23,42,.06),0 6px 18px rgba(15,23,42,.06);
}
*{box-sizing:border-box}
[hidden]{display:none !important}
html,body{height:100%}
body{
  margin:0; background:var(--bg); color:var(--text);
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0}
.grow{flex:1}
.muted{color:var(--muted);font-size:13px}
.ta-right{text-align:right}
.hide{display:none !important}

/* 仅查看角色：隐藏所有可写入口 */
.is-viewer .admin-only{display:none !important}
.viewer-only{display:none}
.is-viewer .viewer-only{display:inline}

/* 员工列表：部门可点击直接更换 */
.btn-dept{
  display:inline-flex;align-items:center;gap:3px;max-width:100%;
  padding:2px 6px;margin:-2px -4px;border:1px dashed transparent;border-radius:6px;
  background:none;color:inherit;font:inherit;cursor:pointer;text-align:left;
}
.btn-dept:hover{border-color:var(--primary);background:#eef5fc;color:var(--primary)}
.btn-dept .dt-caret{font-size:10px;opacity:.55}
.btn-dept:hover .dt-caret{opacity:1}

/* ---------- 登录 ---------- */
.login-page{
  min-height:100vh; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,#0f172a 0%,#1e3a8a 55%,#2563eb 100%);
  padding:20px;
}
.login-card{
  width:400px; max-width:100%; background:#fff; border-radius:16px; padding:36px 34px 26px;
  box-shadow:0 20px 50px rgba(2,6,23,.35);
}
.login-brand{display:flex; align-items:center; gap:14px; margin-bottom:26px}
.login-logo{
  width:48px;height:48px;border-radius:12px;background:linear-gradient(135deg,#2563eb,#1e40af);
  color:#fff;font-size:24px;font-weight:700;display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 16px rgba(37,99,235,.35);
}
.login-brand h1{font-size:19px;letter-spacing:.5px}
.login-brand p{margin:2px 0 0;font-size:11px;color:var(--muted2);letter-spacing:1px;text-transform:uppercase}
.login-tip{margin-top:20px;padding-top:16px;border-top:1px dashed var(--border);font-size:12px;color:var(--muted);line-height:1.9}
.login-tip b{color:var(--primary)}
.login-err{color:var(--red);font-size:13px;min-height:22px;padding:2px 0}

/* ---------- 表单 ---------- */
.form-item{margin-bottom:14px}
.form-item label{display:block;font-size:13px;color:#475569;margin-bottom:6px;font-weight:500}
.input,.input-icon input,select.input,textarea.input{
  width:100%;height:38px;padding:0 12px;border:1px solid var(--border2);border-radius:8px;
  font-size:14px;color:var(--text);background:#fff;outline:none;transition:.15s;font-family:inherit;
}
textarea.input{height:auto;padding:8px 12px;resize:vertical;min-height:64px}
.input:focus,.input-icon input:focus,select.input:focus,textarea.input:focus{
  border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)
}
.input-icon{position:relative}
.input-icon .ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:14px;opacity:.6}
.input-icon input{padding-left:34px}
.form-row{display:flex;gap:14px}
.form-row .form-item{flex:1}
.req::after{content:'*';color:var(--red);margin-left:3px}
.field-tip{margin-top:5px;font-size:12px;color:var(--muted2)}

/* ---------- 按钮 ---------- */
.btn{
  height:36px;padding:0 16px;border:1px solid var(--border2);background:#fff;color:#334155;
  border-radius:8px;font-size:13px;cursor:pointer;transition:.15s;font-family:inherit;
  display:inline-flex;align-items:center;justify-content:center;gap:4px;white-space:nowrap;
}
.btn:hover{border-color:var(--primary);color:var(--primary)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff}
.btn.ghost:hover{background:#f8fafc}
.btn.danger{color:var(--red);border-color:#fecaca}
.btn.danger:hover{background:var(--red);color:#fff;border-color:var(--red)}
.btn.sm{height:28px;padding:0 10px;font-size:12px;border-radius:6px}
.btn.block{width:100%;height:42px;font-size:15px;margin-top:6px}
.btn:disabled{opacity:.55;cursor:not-allowed}

/* ---------- 布局 ---------- */
.layout{display:grid;grid-template-columns:210px 1fr;grid-template-rows:56px 1fr;height:100vh}
.topbar{
  grid-column:1/3;background:#fff;border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;padding:0 20px;z-index:20;
}
.topbar-left{display:flex;align-items:center;gap:10px}
.logo{
  width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,#2563eb,#1e40af);
  color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:17px;
}
.sys-name{font-size:16px;font-weight:600;letter-spacing:.5px}
.topbar-right{display:flex;align-items:center;gap:14px}
.role-badge{padding:3px 10px;border-radius:20px;font-size:12px;background:var(--primary-soft);color:var(--primary);font-weight:500}
.role-badge.viewer{background:var(--amber-bg);color:var(--amber)}
.user-menu{position:relative;display:flex;align-items:center;gap:8px;cursor:pointer;padding:5px 8px;border-radius:8px}
.user-menu:hover{background:#f1f5f9}
.avatar{
  width:28px;height:28px;border-radius:50%;background:#334155;color:#fff;font-size:12px;
  display:flex;align-items:center;justify-content:center;font-weight:600;
}
.caret{font-size:10px;color:var(--muted)}
.dropdown{
  position:absolute;right:0;top:44px;background:#fff;border:1px solid var(--border);
  border-radius:10px;box-shadow:var(--shadow);min-width:130px;padding:6px;z-index:30;
}
.dropdown a{display:block;padding:8px 12px;border-radius:6px;font-size:13px}
.dropdown a:hover{background:var(--primary-soft);color:var(--primary)}

.sidebar{background:var(--sidebar);padding:14px 0;overflow-y:auto}
.menu-group{margin-bottom:10px}
.menu-title{padding:8px 20px;font-size:11px;color:#64748b;letter-spacing:1px}
.menu-item{display:block;padding:10px 20px;color:#cbd5e1;font-size:14px;border-left:3px solid transparent}
.menu-item:hover{background:var(--sidebar2);color:#fff}
.menu-item.active{background:var(--sidebar2);color:#fff;border-left-color:var(--primary);font-weight:500}

.main{padding:20px 22px;overflow-y:auto}

/* ---------- 页面 ---------- */
.page-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:16px}
.page-head h2{font-size:19px;font-weight:600}
.crumb{margin:3px 0 0;font-size:12px;color:var(--muted2)}
.page-actions{display:flex;gap:10px}

.stat-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.stat{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}
.stat .k{font-size:12px;color:var(--muted)}
.stat .v{font-size:19px;font-weight:600;margin-top:2px;letter-spacing:.3px}
.stat .v.money{color:var(--primary)}

.panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.filter-bar{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.filter-bar .input{width:auto;min-width:150px}
/* 每页条数：紧跟在查询按钮后面，下拉做窄一点，不与筛选框抢宽度 */
.filter-bar .page-size{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--muted);white-space:nowrap}
.filter-bar .page-size .input{width:auto;min-width:62px;padding:6px 8px}

/* 简码重复提示：直接挂在简码输入框下方，橙色警示 + 一键改用建议值 */
.short-tip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:5px;font-size:12.5px}
.short-tip[hidden]{display:none}
.short-tip .sh-warn{color:#b45309;background:#fff7ed;border:1px solid #fed7aa;border-radius:6px;padding:3px 8px;line-height:1.5}
.split{display:flex;min-height:420px}
.cat-tree{width:152px;flex:none;border-right:1px solid var(--border);padding:10px 0;overflow-y:auto;background:#fcfdff}
.cat-item{
  display:flex;justify-content:space-between;align-items:center;gap:6px;
  padding:9px 16px;font-size:13px;cursor:pointer;color:#334155;border-left:3px solid transparent;
}
.cat-item:hover{background:#f1f5f9}
.cat-item.active{background:var(--primary-soft);color:var(--primary);border-left-color:var(--primary);font-weight:500}
.cat-item .cnt{font-size:11px;color:var(--muted2);background:#f1f5f9;border-radius:10px;padding:1px 7px}
.cat-item.active .cnt{background:#dbeafe;color:var(--primary)}
.cat-sub{padding:7px 16px 7px 32px;font-size:12px;color:var(--muted);cursor:pointer;border-left:3px solid transparent}
.cat-sub:hover{background:#f1f5f9}
.cat-sub.active{color:var(--primary);background:var(--primary-soft);border-left-color:#93c5fd}

.table-wrap{overflow:auto;flex:1}
.grid{width:100%;border-collapse:collapse;white-space:nowrap}
/* 固定列宽：宽度严格按表头指定，长文本靠 .ell 截断，不撑破表格、不挤走操作列 */
.grid.fixed{table-layout:fixed}
.grid.fixed th,.grid.fixed td{overflow:hidden}
/* 操作列固定在右侧：横向滚动时按钮始终可见，这样户名列可以放心加宽 */
.grid.fixed th.admin-only{position:sticky;right:0;top:0;z-index:3;border-left:1px solid var(--border)}
.grid.fixed td.admin-only{position:sticky;right:0;z-index:1;background:#fff;border-left:1px solid var(--border)}
.grid.fixed tbody tr:hover td.admin-only{background:#f8fafc}
.grid.fixed tr.editing td.admin-only{background:#fffbeb}
.grid th{
  background:#f8fafc;text-align:left;padding:10px 14px;font-size:12px;font-weight:600;color:#475569;
  border-bottom:1px solid var(--border);position:sticky;top:0;z-index:2;
}
.grid td{padding:10px 14px;border-bottom:1px solid #f1f5f9;font-size:13px;vertical-align:middle}
/* 金额列表头右对齐：
   .grid th 自带 text-align:left，特异性(0,1,1)高于 .ta-right(0,1,0)，
   单写 class="ta-right" 会被覆盖，必须显式提高特异性才生效。 */
.grid th.ta-right{text-align:right}
.grid td.ta-right{text-align:right}
.grid th.ta-right,.grid td.ta-right{padding-right:12px}
/* 报销欠付·按人汇总表：固定窄表，不撑满整行 */
.grid.fixed[style*="760px"]{width:760px !important;max-width:100%}
.grid.fixed[style*="760px"] th,.grid.fixed[style*="760px"] td{
  padding-left:8px;padding-right:8px;text-overflow:ellipsis;
}
.grid tbody tr:hover{background:#f8fafc}
.grid td.money{font-variant-numeric:tabular-nums;letter-spacing:.2px}
.code-tag{font-family:ui-monospace,Consolas,monospace;background:#f1f5f9;padding:2px 7px;border-radius:5px;font-size:12px;color:#334155}
.grid td.mono{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;color:var(--muted)}
.grid tfoot tr.sum-row td{background:#f8fafc;font-weight:600;border-top:1px solid var(--border)}
.grid tfoot tr.sum-row td:first-child{padding-right:8px}
.cell-name{font-weight:500}
.cat-tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;background:#f1f5f9;color:#475569}
.sub-tag{font-size:12px;color:var(--muted)}
.tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px}
.tag.on{background:var(--green-bg);color:var(--green)}
.tag.off{background:#f1f5f9;color:var(--muted2)}
.tag.admin{background:var(--primary-soft);color:var(--primary)}
.tag.viewer{background:var(--amber-bg);color:var(--amber)}
.ops{display:flex;gap:6px}
.empty{padding:60px 0;text-align:center;color:var(--muted2);font-size:13px}

/* ---------- 流水表格 ---------- */
.input.xs{height:30px;padding:0 8px;font-size:12px;width:100%}
select.input.xs{padding:0 4px}
.grid tr.editing{background:#fffbeb}
.grid tr.editing td{padding:6px 10px}
.grid tfoot tr td{
  background:#f8fafc;font-size:12px;font-weight:600;color:#475569;
  padding:9px 14px;border-top:1px solid var(--border);position:sticky;bottom:0;
}
.grid tfoot tr.foot-all td{background:#eff6ff;color:var(--primary)}
.grid td.out{color:var(--red)}
.grid td.in{color:var(--green)}
.grid td.fee{color:var(--muted)}
.thumb{
  width:30px;height:30px;object-fit:contain;background:#f1f5f9;border-radius:5px;border:1px solid var(--border);
  cursor:pointer;margin-right:3px;vertical-align:middle;
}
.thumb:hover{opacity:.8;border-color:var(--primary)}
.thumb-more{font-size:11px;color:var(--muted);vertical-align:middle}

/* ---------- 表单多列布局 ---------- */
.form-row.row4>.form-item{flex:1;min-width:0}
.form-row.row3>.form-item{flex:1;min-width:0}
.form-row.row3>.form-item.fi-sm{flex:0 0 128px}

.form-row.row3>.form-item:first-child{flex:2}

/* 新建账单弹窗：顶部字段按内容长度分配宽度
 * 账单号只读（"自动生成"）→ 窄；账单类型文本最长（"采购账单（采购供应商）"）→ 宽；
 * 往来对象含 "KH001 xxx" → 最宽。第二行备注给足空间。 */
.form-row.row3.bill-head-row>.form-item{flex:1;min-width:0}
.form-row.row3.bill-head-row>.fi-no{flex:0 0 132px}
.form-row.row3.bill-head-row>.fi-type{flex:1.5}
.form-row.row3.bill-head-row>.fi-party{flex:1.7}
.form-row.row2.bill-head-row2>.form-item{flex:1;min-width:0}
.form-row.row2.bill-head-row2>.fi-date{flex:0 0 190px}
.form-row.row2.bill-head-row2>.fi-rmk{flex:1}
.form-row.row2>.form-item{flex:1;min-width:0}
/* 实际流出 / 实际流入 只读展示框：与输入框等高对齐 */
.calc-val{
  height:38px;display:flex;align-items:center;justify-content:flex-end;
  padding:0 12px;border:1px solid var(--border);border-radius:8px;background:#f8fafc;
  font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.3px;
}
.calc-val.out{color:var(--red);background:#fef2f2;border-color:#fecaca}
.calc-val.in{color:var(--green);background:#f0fdf4;border-color:#bbf7d0}

/* ---------- 账单：核销进度条 ---------- */
/* ---------- 本地草稿 ---------- */
.draft-bar{
  display:flex;align-items:center;gap:12px;margin:0 0 16px;padding:12px 14px;
  background:#fffbeb;border:1px solid #fde68a;border-left:4px solid #f59e0b;border-radius:10px;
}
.draft-bar .db-icon{font-size:20px;flex:none}
.draft-bar .db-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.45}
.draft-bar .db-txt b{color:#92400e;font-weight:600}
.draft-bar .db-txt span{color:#78350f;font-size:12.5px}
.draft-bar .db-ops{display:flex;gap:8px;flex:none}
.draft-tip{margin:10px 0 0;text-align:center;font-size:12.5px;color:var(--muted)}
.draft-tip.warn{color:var(--amber, #b45309)}
@media(max-width:640px){
  .draft-bar{flex-wrap:wrap}
  .draft-bar .db-ops{width:100%;justify-content:flex-end}
}

.pay-bar{
  display:inline-block;width:52px;height:7px;border-radius:20px;background:#e2e8f0;
  overflow:hidden;vertical-align:middle;
}
.pay-bar>i{display:block;height:100%;background:var(--green);border-radius:20px}
.pay-pct{margin-left:6px;font-size:11px;color:var(--muted);vertical-align:middle}
.st-tag{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px}
.st-red{background:var(--red-bg);color:var(--red)}
.st-amber{background:var(--amber-bg);color:var(--amber)}
.st-green{background:var(--green-bg);color:var(--green)}

/* 账单明细行（弹窗内） */
.bi-row{
  display:grid;grid-template-columns:1.6fr 90px 70px 90px 110px 1fr 34px;
  gap:6px;align-items:center;margin-bottom:8px;
}

/* ---------- 账单明细：加宽弹窗内的多行表格 ---------- */
/* 列顺序：类型 | 项目名称 | 规格型号 | 单位 | 数量 | 单价 | 金额 | 抹零 | 备注 | 附图 | 实际金额 | ✕ */
.bi-head,.bi-card{
  display:grid;
  grid-template-columns:74px minmax(180px,3.2fr) minmax(120px,1.5fr) 54px 68px 80px 92px 66px minmax(130px,1.6fr) 96px 100px 30px;
  gap:6px;align-items:center;
}
.bi-head{
  background:#f8fafc;border:1px solid var(--border);border-radius:8px;
  padding:7px 8px;font-size:11px;font-weight:600;color:#475569;margin-bottom:8px;
}
.bi-head .bi-h-act{color:var(--green);text-align:right}
.bi-card{padding:6px 8px;border:1px solid #eef2f7;border-radius:8px;margin-bottom:6px;background:#fcfdff}
.bi-card:hover{border-color:#cbd5e1}
.bi-card .input.xs{height:32px;font-size:12px;padding:0 7px}
.bi-card select.input.xs{padding:0 2px}
.bi-actual{
  height:32px;display:flex;align-items:center;justify-content:flex-end;padding:0 8px;
  background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;
  font-size:13px;font-weight:600;color:var(--green);font-variant-numeric:tabular-nums;
}
.bi-file{display:flex;align-items:center;gap:4px}

/* ---------- 报表：账户多选下拉 ---------- */
.ac-pick{position:relative;display:inline-block}
.ac-pick .btn{min-width:118px}
.ac-pick .btn b{color:var(--primary);font-weight:600}
.ac-panel{
  position:absolute;z-index:60;top:calc(100% + 6px);left:0;
  width:280px;max-height:320px;overflow:auto;
  background:#fff;border:1px solid var(--border2);border-radius:10px;
  box-shadow:0 8px 24px rgba(15,23,42,.14);padding:8px;
}
.ac-panel-ops{display:flex;align-items:center;gap:8px;padding:2px 2px 8px;border-bottom:1px solid var(--border);margin-bottom:6px}
.ac-panel-list{display:flex;flex-direction:column;gap:2px}
.ac-panel-list label{
  display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;
  cursor:pointer;font-size:13px;line-height:1.3;
}
.ac-panel-list label:hover{background:var(--primary-soft)}
.ac-panel-list input{margin:0;flex:0 0 auto}
.ac-panel-list .ac-code{color:var(--muted);font-size:12px;flex:0 0 auto}
.ac-panel-list .ac-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bi-file-btn{
  position:relative;display:inline-flex;align-items:center;gap:2px;
  height:32px;padding:0 9px;border:1px dashed var(--border2);border-radius:6px;
  background:#fff;cursor:pointer;font-size:12px;color:var(--muted);white-space:nowrap;
}
.bi-file-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.bi-file-btn input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
.bi-file-btn b{color:var(--primary);font-size:11px}
.bi-thumbs{display:flex;gap:3px;max-width:46px;overflow:hidden}
.bi-thumbs img{width:26px;height:26px;object-fit:contain;background:#f1f5f9;border-radius:3px;border:1px solid var(--border);cursor:pointer}
.bi-thumbs .pv-doc{
  width:22px;height:22px;display:flex;align-items:center;justify-content:center;
  background:#f1f5f9;border:1px solid var(--border);border-radius:3px;font-size:8px;color:#475569;text-decoration:none;
}
.bi-addrow{
  width:100%;height:38px;border:1px dashed var(--border2);background:#fff;color:var(--primary);
  border-radius:8px;font-size:13px;cursor:pointer;font-family:inherit;
}
.bi-addrow:hover:not(:disabled){background:var(--primary-soft);border-color:var(--primary)}
.bi-addrow:disabled{color:var(--muted2);border-color:#e2e8f0;background:#f8fafc;cursor:not-allowed}
.bi-total-box{
  display:flex;gap:18px;align-items:center;justify-content:flex-end;flex-wrap:wrap;
  margin-top:12px;padding:12px 14px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;
}
.bi-total-box>div{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--muted)}
.bi-total-box b{font-size:16px;font-variant-numeric:tabular-nums}
.bi-total-box .bi-net b{font-size:18px;color:var(--primary)}
.io-tag{
  display:inline-block;padding:1px 8px;border-radius:20px;font-size:11px;line-height:1.6;vertical-align:middle;
}
.io-tag.in{background:var(--green-bg);color:var(--green)}
.io-tag.out{background:var(--red-bg);color:var(--red)}
/* 详情表：字段多，允许横向滚动 */
.bi-view-table{display:table;min-width:900px}
.bill-detail{overflow-x:auto}

/* ---------- 连续录入开关 ---------- */
.switch-line{
  display:flex;align-items:center;gap:8px;padding:10px 12px;margin-top:2px;
  background:#f8fafc;border:1px solid var(--border);border-radius:8px;
  font-size:13px;cursor:pointer;user-select:none;
}
.switch-line input{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--primary)}
.switch-line>span:nth-child(2){font-weight:500}
.switch-line .muted{font-size:12px}

/* ---------- 单笔 / 批量 模式切换 ---------- */
.mode-tab{display:flex;gap:6px;margin-bottom:16px;border-bottom:1px solid var(--border);padding-bottom:12px}
.mode-btn{
  flex:1;height:34px;border:1px solid var(--border2);background:#fff;border-radius:8px;
  font-size:13px;cursor:pointer;color:#475569;font-family:inherit;
}
.mode-btn:hover{border-color:var(--primary);color:var(--primary)}
.mode-btn.active{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:500}

/* ---------- 拖拽上传区 ---------- */
.dropzone{
  border:2px dashed var(--border2);border-radius:10px;padding:18px 14px;text-align:center;
  cursor:pointer;transition:.15s;background:#fcfdff;
}
.dropzone:hover{border-color:var(--primary);background:var(--primary-soft)}
.dropzone.dragover{border-color:var(--primary);background:var(--primary-soft);box-shadow:inset 0 0 0 2px rgba(37,99,235,.12)}
.dz-text{font-size:13px;color:var(--muted);line-height:1.8;pointer-events:none}
.dz-text b{color:var(--primary)}

/* ---------- 新增流水：计算框 / 图片预览 ---------- */
.calc-box{
  display:flex;gap:14px;margin:4px 0 16px;padding:12px 14px;
  background:var(--primary-soft);border:1px solid #bfdbfe;border-radius:8px;
}
.calc-box>div{flex:1;display:flex;align-items:baseline;gap:8px;font-size:13px}
.calc-box span:first-child{color:#475569}
.calc-box b{font-size:16px;color:var(--primary)}
.calc-box .muted{font-size:11px}
.preview-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.pv-item{
  width:78px;text-align:center;font-size:11px;color:var(--muted);position:relative;
}
.pv-item img{width:78px;height:78px;object-fit:contain;background:#f1f5f9;border-radius:6px;border:1px solid var(--border)}
.pv-item .pv-doc{
  display:flex;align-items:center;justify-content:center;width:78px;height:78px;
  background:#f1f5f9;border:1px solid var(--border);border-radius:6px;font-weight:600;color:#475569;
}
.pv-item i{display:block;font-style:normal;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.pv-item i:hover{color:var(--red)}

/* ---------- 附件管理 ---------- */
.file-list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto}
.file-item{
  display:flex;align-items:center;gap:10px;padding:8px 10px;
  border:1px solid var(--border);border-radius:8px;
}
.file-item img{width:56px;height:56px;object-fit:contain;background:#f1f5f9;border-radius:6px;cursor:pointer;border:1px solid var(--border)}
.file-item .pv-doc{
  display:flex;align-items:center;justify-content:center;width:56px;height:56px;flex:none;
  background:#f1f5f9;border:1px solid var(--border);border-radius:6px;font-weight:600;font-size:12px;color:#475569;
}
.file-meta{flex:1;min-width:0;font-size:13px}
.file-meta div:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--border)}
.pager .info{font-size:12px;color:var(--muted);margin-right:auto}
.pager button{
  min-width:32px;height:30px;padding:0 9px;border:1px solid var(--border2);background:#fff;
  border-radius:6px;font-size:12px;cursor:pointer;color:#334155;
}
.pager button:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}
.pager button.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.pager button:disabled{opacity:.45;cursor:not-allowed}

.notice{margin-top:14px;padding:12px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;font-size:13px;color:#92400e}

/* ---------- 弹窗 ---------- */
.modal-mask{
  position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px;
}
.modal{background:#fff;border-radius:12px;width:560px;max-width:100%;max-height:88vh;overflow:auto;box-shadow:0 24px 60px rgba(2,6,23,.3)}
.modal-head{padding:16px 20px;border-bottom:1px solid var(--border);font-size:16px;font-weight:600;display:flex;justify-content:space-between;align-items:center}
.modal-head .x{cursor:pointer;color:var(--muted);font-size:18px;line-height:1}
.modal-body{padding:20px}
.modal-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px;background:#fcfdff}
/* ================= 报表中心 ================= */
.rpt-tabs{display:flex;gap:6px;margin-bottom:14px;border-bottom:2px solid var(--border);padding-bottom:0}
.rpt-tab{
  border:none;background:none;cursor:pointer;font-size:14px;color:var(--muted);
  padding:9px 18px;border-bottom:2px solid transparent;margin-bottom:-2px;
}
.rpt-tab:hover{color:var(--text)}
.rpt-tab.active{color:var(--primary);font-weight:600;border-bottom-color:var(--primary)}

.stat .sub{font-size:11px;color:var(--muted);margin-top:4px;line-height:1.4}
.chk{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted);cursor:pointer}
.chk input{cursor:pointer}

/* 单元格长文本截断：给窄列用，避免撑破表格、挤掉操作列 */
.ell{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.input.sm{padding:5px 9px;font-size:12.5px;height:auto;width:auto}
.ldg-loading{padding:30px;text-align:center;color:var(--muted)}

/* A4 导出预览 */
.lp{display:flex;flex-direction:column;gap:10px}
.lp-bar,.lp-ops{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px}
.lp-bar .grow,.lp-ops .grow{flex:1}
.lp-idx{min-width:56px;text-align:center;font-variant-numeric:tabular-nums;color:var(--muted)}
.lp-stage{
  background:#eef2f7;border:1px solid var(--border);border-radius:8px;
  padding:8px;display:flex;justify-content:center;align-items:flex-start;
  max-height:66vh;overflow:auto;
}
.lp-page{background:#fff;box-shadow:0 6px 22px rgba(15,23,42,.18);border-radius:2px;line-height:0}
.lp-canvas{width:620px;max-width:100%;height:auto;display:block}
.lp-loading{padding:40px;color:var(--muted)}
@media (max-width:900px){ .lp-canvas{width:100%} }

/* 流水弹窗导出工具条 */
.ldg-ops{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:12.5px}
.ldg-ops .grow{flex:1}

/* 流水弹窗头部 */
.sub-ttl{
  font-size:13.5px;font-weight:600;color:#123a5e;margin:14px 0 8px;
  padding-left:9px;border-left:3px solid #1565c0;line-height:1.3;
}
.sub-ttl .muted{font-weight:400;font-size:12px}
.ldg-head{border-bottom:1px solid var(--border);padding-bottom:10px;margin-bottom:12px}
.ldg-acc{font-size:14px;margin-bottom:8px}
.ldg-acc b{font-size:15px}
.ldg-kv{display:flex;flex-wrap:wrap;gap:10px}
.ldg-kv>div{
  flex:1 1 108px;background:#f8fafc;border:1px solid var(--border);
  border-radius:6px;padding:7px 10px;
}
.ldg-kv i{display:block;font-size:11px;color:var(--muted);font-style:normal}
.ldg-kv b{font-size:15px;font-variant-numeric:tabular-nums}

/* 往来明细卡片 */
.arap-bill{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:#fff}
.arap-bill:last-child{margin-bottom:0}
.ab-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ab-head .grow{flex:1}
.ab-nums{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:6px}
.ab-nums>div{font-size:12px;color:var(--muted)}
.ab-nums b{display:block;font-size:14px;color:var(--text);font-variant-numeric:tabular-nums}
.ab-links{border-top:1px dashed var(--border);padding-top:7px;font-size:12.5px}
.ab-lk-title{font-size:11.5px;color:var(--muted);margin-bottom:4px}
.lnk{display:flex;align-items:center;gap:8px;padding:3px 0}
.lnk .money{margin-left:auto;font-variant-numeric:tabular-nums}

.tag-in,.tag-out{
  padding:1px 8px;border-radius:20px;font-size:11.5px;font-weight:600;
}
.tag-in{background:#ecfdf5;color:#047857}
.tag-out{background:#fef2f2;color:#b91c1c}
.tag-warn{background:#fffbeb;color:#b45309}

.modal.sm{width:400px}
.modal.md{width:620px}
.modal.lg{width:780px}
.modal.xl{width:980px}
.modal.xxl{width:1280px;max-width:96vw}
/* 计件工资明细：弹窗尽量占满屏幕高度，行高收紧，一屏能看到更多行 */
.modal.pc-tall{max-height:92vh}
.modal.pc-tall .grid th{padding:6px 10px}
.modal.pc-tall .grid td{padding:6px 10px}
/* 按钮自带在 body 底部时隐藏底栏 */
.modal.noFoot .modal-foot{display:none}

/* ---------- Toast ---------- */
.toast-root{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:400;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{
  padding:10px 18px;border-radius:8px;background:#fff;border:1px solid var(--border);
  box-shadow:var(--shadow);font-size:13px;animation:tin .18s ease;display:flex;align-items:center;gap:8px;
}
.toast.ok{border-left:4px solid var(--green)}
.toast.err{border-left:4px solid var(--red)}
.toast.warn{border-left:4px solid var(--amber)}

/* 次要警示按钮（如「发放失败」） */
.btn.warn{background:#fffbeb;border-color:#fcd34d;color:#b45309}
.btn.warn:hover{background:#fef3c7;border-color:#f59e0b}
.btn.warn:disabled{opacity:.5;cursor:not-allowed}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
/* 加载中转圈（用于"正在处理图片"等持久提示） */
.spin{
  width:14px;height:14px;border:2px solid #fde68a;border-top-color:#d97706;border-radius:50%;
  display:inline-block;animation:sp .7s linear infinite;flex:none;
}
@keyframes sp{to{transform:rotate(360deg)}}
.captcha-tip{margin-top:6px;font-size:12px;color:var(--amber)}
.captcha-tip[hidden]{display:none}

@media (max-width:900px){
  .layout{grid-template-columns:1fr;grid-template-rows:56px auto 1fr}
  .sidebar{display:flex;overflow-x:auto;padding:0}
  .menu-group{display:flex;margin:0}
  .menu-title{display:none}
  .menu-item{padding:12px 16px;white-space:nowrap}
  .sidebar{grid-column:1/2}
  .main{grid-column:1/2}
  .split{flex-direction:column}
  .cat-tree{width:auto;border-right:none;border-bottom:1px solid var(--border);display:flex;overflow-x:auto}
  .cat-item,.cat-sub{white-space:nowrap}
}


/* ============================================================
 *  报销审核：逐条明细卡片
 * ============================================================ */
.au-summary{
  display:flex;gap:18px;flex-wrap:wrap;align-items:center;
  padding:12px 14px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;margin-bottom:14px;
}
.au-summary>div{display:flex;align-items:baseline;gap:7px;font-size:13px;color:var(--muted)}
.au-summary b{font-size:15px;color:var(--text)}
.au-item{
  display:flex;gap:10px;align-items:flex-start;
  border:1px solid var(--border);border-radius:9px;padding:8px 10px;margin-bottom:6px;background:#fff;
}
.au-main{flex:1;min-width:0}
/* 右栏：金额 → 状态 → 归类 → 按钮 → 不通过原因，竖向堆叠 */
.au-side{
  flex:none;width:186px;display:flex;flex-direction:column;
  gap:5px;align-items:stretch;
}
.au-amtbox{display:flex;flex-direction:column;align-items:flex-end;gap:2px;line-height:1.1}
.au-amt{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.au-cat,.au-side .input.xs{height:29px;font-size:12.5px;padding:0 6px;min-width:0;width:100%}
.au-btns{display:flex;gap:4px}
.au-btns .btn.sm{flex:1;height:27px;padding:0 6px;font-size:12px;min-width:0}
.au-note{width:100%;font-size:12.5px;height:29px;padding:0 6px}
/* 窄屏（手机）：左右分栏改为上下，右栏横向铺开，避免挤成一团 */
@media (max-width:760px){
  .au-item{flex-direction:column;gap:7px}
  .au-side{width:100%;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px}
  .au-amtbox{flex-direction:row;align-items:center;gap:7px;margin-right:auto}
  .au-cat{flex:1;min-width:130px;width:auto}
  .au-btns{flex:none}
  .au-btns .btn.sm{flex:none;min-width:58px}
  .au-note{flex:1 1 100%}
}
.au-item.au-ok{border-color:#bbf7d0;background:#f0fdf4}
.au-item.au-rej{border-color:#fecaca;background:#fef2f2}
.au-item.au-pend{border-color:#fde68a;background:#fffbeb}
.au-item.au-ok .au-idx{background:#dcfce7;color:#15803d}
.au-item.au-rej .au-idx{background:#fee2e2;color:#b91c1c}
.au-item.au-pend .au-idx{background:#fef3c7;color:#b45309}
/* 多图横向排布：容器必须 flex，否则 img 的 display:block 会让它们纵向堆叠 */
.au-files{display:flex;gap:5px;flex-wrap:wrap;margin-top:5px}
/* ---------- 往来明细弹窗 ---------- */
.ar-detail{max-height:72vh;overflow:auto;padding-right:4px}
.ar-sum{
  display:flex;gap:8px;flex-wrap:wrap;align-items:stretch;
  padding:10px 12px;background:#f5f7ff;border:1px solid #c7d2fe;border-radius:8px;margin-bottom:12px;
}
.ar-sum>div{
  flex:1;min-width:96px;display:flex;flex-direction:column;gap:2px;
  padding:6px 8px;background:#fff;border-radius:6px;border-left:2px solid var(--border2);
}
.ar-sum i{font-style:normal;font-size:11px;color:var(--muted2)}
.ar-sum b{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.2}
.ar-sum s{text-decoration:none;font-size:10px;color:var(--muted2)}
.ar-sum>div.net{flex:1.4;background:#eef2ff;border-left-color:#4f46e5}
.ar-sum b.in{color:var(--green)}
.ar-sum b.out{color:var(--red)}
.ar-expbar{
  display:flex;align-items:center;gap:10px;margin-top:14px;padding-top:12px;
  border-top:1px solid var(--border);
}
.ar-detail .sec-title{margin-top:16px}
.ar-detail .cell-note{
  max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.ar-detail .io-tag{
  display:inline-block;padding:1px 7px;border-radius:20px;font-size:11px;
}
.ar-detail .io-tag.in{background:#dcfce7;color:#15803d}
.ar-detail .io-tag.out{background:#fee2e2;color:#b91c1c}

.bd-item-files{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;align-items:center}
.au-files img,.bd-item-files img{
  width:44px;height:44px;flex:none;object-fit:contain;background:#f1f5f9;border-radius:6px;
  border:1px solid var(--border);cursor:pointer;display:block;
}
.au-files img:hover,.bd-item-files img:hover{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft)}
.pv-big{text-align:center;padding:6px}
.pv-big img{max-width:100%;max-height:70vh;object-fit:contain;border-radius:8px;background:#fff}
.au-head{display:flex;align-items:center;gap:8px;line-height:1.25}
.au-idx{
  flex:none;width:20px;height:20px;border-radius:50%;background:var(--primary-soft);color:var(--primary);
  font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;
}
.au-title{flex:1;min-width:0}
.au-title b{font-size:13.5px;color:var(--text);display:block;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.au-sub{font-size:11.5px;color:var(--muted);margin-top:1px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.au-quick{display:flex;gap:8px;margin-top:6px}
.btn.ghost{background:#fff;color:var(--muted);border:1px solid var(--border2)}
.btn.ghost:hover{background:#f8fafc;color:var(--text)}

/* 明细归类标签 / 不通过原因 */
.cat-tag{
  display:inline-block;padding:1px 9px;border-radius:20px;font-size:12px;
  background:var(--primary-soft);color:var(--primary);
}
.row-rej{background:#fef2f2}
.row-rej td{color:#b91c1c}
.rej-note{font-size:11px;color:#b91c1c;margin-top:3px;line-height:1.4}
.eib-cat{
  flex:none;font-size:11px;padding:1px 8px;border-radius:20px;
  background:var(--primary-soft);color:var(--primary);
}

/* ============================================================
 *  凭证图片展示（账单 / 报销共用）
 * ============================================================ */
.ok-voucher{margin:14px 0;padding:14px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}
.ok-voucher-title{
  font-size:13px;font-weight:600;color:#334155;margin-bottom:10px;
  padding-left:9px;border-left:3px solid var(--primary);
}
.ok-voucher-imgbox{
  background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px;
  max-height:340px;overflow:auto;
}
.ok-voucher-imgbox img{width:100%;display:block;border-radius:4px}
.ok-voucher-acts{margin-top:12px;display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.ok-voucher-acts .btn{text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
.ok-keep{
  margin:16px 0;padding:12px 14px;border-radius:10px;
  background:#fffbeb;border:1px solid #fde68a;color:#92400e;font-size:13px;line-height:1.75;
}
.ok-keep b{color:#b45309}


/* 报销整单状态：部分通过 */
.st-partial{background:#fef3c7;color:#92400e;border-color:#fde68a}
/* 审核：通过按钮 */
.btn.sm.ok{background:var(--green);border-color:var(--green);color:#fff}
.btn.sm.ok:hover{filter:brightness(1.06)}
/* 图片加载失败占位 */
.img-broken{
  width:56px;height:56px;border-radius:6px;border:1px dashed var(--red);
  background:#fef2f2;color:var(--red);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:2px;font-size:10px;line-height:1;
}
.img-broken span{font-size:13px;font-weight:700}
.img-broken i{font-style:normal}

/* 报销状态徽标（管理端 index.html 使用） */
.st-pending,.st-warn{background:var(--amber-bg);color:var(--amber)}
.st-paid,.st-ok{background:var(--green-bg);color:var(--green)}
.st-rejected,.st-err{background:var(--red-bg);color:var(--red)}


/* ===================== 报销单查看（美化版）===================== */
.ep-view{font-size:13px}
.epv-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 16px;border-radius:10px;margin-bottom:12px;color:#fff;
  background:linear-gradient(90deg,#2563eb,#1d4ed8);
}
.epv-head.pending{background:linear-gradient(90deg,#f59e0b,#d97706)}
.epv-head.pass{background:linear-gradient(90deg,#10b981,#059669)}
.epv-head.partial{background:linear-gradient(90deg,#f59e0b,#d97706)}
.epv-head.reject{background:linear-gradient(90deg,#ef4444,#dc2626)}
.epv-no span{display:block;font-size:11px;opacity:.85;margin-bottom:2px}
.epv-no b{font-size:17px;letter-spacing:.5px;font-family:ui-monospace,Consolas,monospace}
.epv-head .st-tag{background:rgba(255,255,255,.22);color:#fff;border-color:rgba(255,255,255,.35);font-size:13px;padding:3px 12px}

.epv-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--border);border:1px solid var(--border);border-radius:10px;overflow:hidden;
}
.epv-grid>div{background:#fff;padding:10px 12px}
.epv-grid span{display:block;font-size:11px;color:var(--muted);margin-bottom:3px}
.epv-grid b{font-size:14px;color:var(--text);font-weight:600}
.epv-grid b.money{font-variant-numeric:tabular-nums}

.epv-stat{display:flex;gap:8px;margin:12px 0 10px;flex-wrap:wrap}
.ep-tag{
  display:inline-block;padding:3px 12px;border-radius:20px;font-size:12px;font-weight:600;
}
.ep-tag.ok{background:#dcfce7;color:#15803d}
.ep-tag.err{background:#fee2e2;color:#b91c1c}
.ep-tag.warn{background:#fef3c7;color:#b45309}

.epv-item{
  border:1px solid var(--border);border-left:3px solid var(--border);border-radius:9px;
  padding:11px 13px;margin-bottom:8px;background:#fff;
}
.epv-item.ok{border-left-color:#10b981;background:#f0fdf4}
.epv-item.rej{border-left-color:#ef4444;background:#fef2f2}
.epvi-top{display:flex;align-items:center;gap:10px}
.epvi-idx{
  flex:none;width:22px;height:22px;border-radius:50%;background:#f1f5f9;color:#475569;
  font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;
}
.epv-item.ok .epvi-idx{background:#dcfce7;color:#15803d}
.epv-item.rej .epvi-idx{background:#fee2e2;color:#b91c1c}
.epvi-title{flex:1;min-width:0}
.epvi-title b{display:block;font-size:14px;color:var(--text);margin-bottom:2px}
.epvi-sub{font-size:12px;color:var(--muted)}
.epvi-amt{flex:none;font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.epvi-rej{
  margin-top:7px;padding:6px 10px;border-radius:6px;background:#fee2e2;color:#b91c1c;font-size:12px;
}
.epvi-rmk{margin-top:6px;font-size:12px;color:var(--muted)}
.epvi-files{margin-top:8px;padding-top:8px;border-top:1px dashed var(--border)}

.epv-total{
  display:flex;gap:24px;justify-content:flex-end;align-items:center;
  margin-top:12px;padding:12px 16px;border-radius:10px;background:#f8fafc;border:1px solid var(--border);
}
.epv-total span{font-size:12px;color:var(--muted);margin-right:6px}
.epv-total b{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums}
.epv-total b.in{color:#15803d}

@media (max-width:700px){
  .epv-grid{grid-template-columns:repeat(2,1fr)}
  .epv-total{flex-direction:column;align-items:flex-start;gap:8px}
}

/* ===================== 工资管理 ===================== */
/* 超小号按钮：列表操作列按钮多，用更小尺寸省横向空间 */
.btn.xs{height:24px;padding:0 7px;font-size:12px;border-radius:5px;line-height:1}
.btn.xs.primary{padding:0 9px}

/* 状态徽标补充 */
.st-pass{background:var(--green-bg);color:var(--green)}
.st-reject{background:var(--red-bg);color:var(--red)}

/* 离职员工行淡化 */
tr.row-off{background:#fafafa;color:var(--muted)}
tr.row-off td{opacity:.72}

/* ---- 员工工资卡编辑区 ---- */
.emp-card{margin-bottom:8px}
.cr-row{
  display:flex;gap:8px;align-items:center;
  padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:#fbfdff;
}
.cr-row .input{flex:1;min-width:0;height:30px;font-size:13px}
.cr-row .input[data-f="card_no"]{flex:1.3}
.cr-row .chk{flex:none;margin:0}
.chk.sm{font-size:12px;color:var(--muted)}
.chk.sm input{margin-right:4px}
.chk.sm input{width:14px;height:14px;vertical-align:-2px}

/* ---- 工资表录入表格 ---- */
.sal-table{max-height:64vh;overflow:auto}
/* 列多的时候（17 列）允许横向滚动；1108px 是「1366 屏内容区宽度」的保守值，
   配合 table 的同比缩放，常见笔记本可以一屏放下，不用左右拖动。
   更窄的屏或想再宽松些，用工具栏「⚙ 显示列」隐藏用不到的工资项目。 */
.sal-table table{min-width:1094px;width:100%}
.sal-table thead th{
  position:sticky;top:0;z-index:2;background:var(--thead-bg,#f4f7fb);
}
.sal-table tfoot th{
  position:sticky;bottom:0;z-index:2;background:#f4f7fb;
}
.sal-table tbody td{padding:2px 2px}
/* 列宽收紧后把输入框内边距一并收窄，保证 6~8 位金额（如 18318.89）完整显示不被截断 */
.sal-table input.sal-inp{padding:0 2px}
/* 计件工资格：右侧挂「📋 明细」小按钮。按钮浮在单元格右缘，输入框留出内边距，
   避免按钮被相邻单元格盖住或压住数字（列宽已在 gridCols 加宽到 94px）。
   注意 📋 emoji 实际渲染较宽：按钮收窄 + 输入框留 34px，确保末位数字不被盖住 */
.sal-table td.pc-cell{position:relative;white-space:nowrap}
.sal-table td.pc-cell input.sal-inp{padding-right:34px}
.sal-table td.pc-cell .btn.xs{position:absolute;right:2px;top:3px;z-index:1;padding:0 3px;min-width:0}
/* 录入表隔行底色：行多了不容易看串行。
   输入框背景是 transparent，所以 tr 的底色能透出来；
   td.net（实发）自带底色会盖住，故单独再给一档。 */
.sal-table tbody tr:nth-child(even){background:#f4f8fc}
.sal-table tbody tr:nth-child(even) td.net{background:#eaf1f9}
.sal-table tbody tr:hover{background:#e9f1fb}
.sal-table tbody tr:hover td.net{background:#e9f1fb}
/* 操作列是 sticky 右固定的，自带白底会打断隔行底色，这里补回同一档 */
.sal-table tbody tr:nth-child(even) td.admin-only{background:#f4f8fc}
.sal-table tbody tr:nth-child(even):hover td.admin-only{background:#e9f1fb}
/* 右侧还有列时给出阴影，提示可以横向滚动 */
.sal-table.sticky-right td.admin-only,.sal-table.sticky-right th.admin-only{box-shadow:-6px 0 8px -6px rgba(15,23,42,.18)}

/* 「显示列」弹窗：工资金额项较多，三列排布少滚动 */
.col-pick{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 10px;margin-top:4px}
@media (max-width:640px){.col-pick{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* 拉取计件工资时新补进来的人：整行浅黄 + 「新」标签，一眼看出表里多了谁 */
.sal-table tbody tr.is-new{background:#fffbeb}
.sal-table tbody tr.is-new:hover{background:#fef3c7}
.tag-new{display:inline-block;margin-left:4px;padding:0 4px;border-radius:3px;
  background:#f59e0b;color:#fff;font-size:11px;line-height:15px;vertical-align:middle}

/* 单元格内输入框：无边框，聚焦才显形，视觉上像可编辑表格 */
input.sal-inp{
  width:100%;height:26px;padding:0 5px;box-sizing:border-box;
  border:1px solid transparent;border-radius:4px;background:transparent;
  font-size:13px;font-family:inherit;color:inherit;text-align:right;
  font-variant-numeric:tabular-nums;
}
input.sal-inp[data-col="emp_code"],
input.sal-inp[data-col="emp_name"],
input.sal-inp[data-col="remark"]{text-align:left}
input.sal-inp:hover{border-color:var(--border2);background:#fff}
/* 出勤天数被自动带出时闪一下，提示这一格是系统填的 */
input.sal-inp.att-filled{border-color:var(--primary);background:#e8f1ff;
  transition:background .5s ease,border-color .5s ease}
input.sal-inp:focus{
  outline:none;border-color:var(--primary);background:#fff;
  box-shadow:0 0 0 2px rgba(37,99,235,.14);
}
/* 减项用红色，录入时不易填错方向 */
input.sal-inp.tone-minus:focus{border-color:var(--red);box-shadow:0 0 0 2px rgba(220,38,38,.14)}
input.sal-inp:disabled{background:#f8fafc;color:var(--muted)}

.sal-table td.net{background:#f8fafc}
.sal-table td.net b{font-size:13px;color:var(--primary);font-variant-numeric:tabular-nums}
.sal-table tfoot th.money{font-size:13px;font-variant-numeric:tabular-nums}

/* 日均工资（实发 ÷ 出勤天数）：只读派生列，配色比普通列醒目但不刺眼。
   隔行底色会盖住，故补两档；hover 时跟随整行。 */
.sal-table td.avg-day{background:#fff7ed}
.sal-table td.avg-day b{font-size:13px;font-weight:700;color:#c2410c;font-variant-numeric:tabular-nums}
.sal-table tbody tr:nth-child(even) td.avg-day{background:#fef3e2}
.sal-table tbody tr:hover td.avg-day{background:#feede0}
.sal-table tbody td.avg-day{cursor:default;user-select:none}
.sal-table tfoot th.avg-day{font-size:13px;font-weight:700;color:#c2410c;font-variant-numeric:tabular-nums}

@media (max-width:700px){
  .cr-row{flex-wrap:wrap}
  .cr-row .input{flex:1 1 45%}
}

/* ===================== 报销单合并导出 PDF ===================== */
/* 生成进度 */
.eb-prog{height:6px;background:#e8edf3;border-radius:4px;overflow:hidden}
.eb-bar{height:100%;width:0;background:linear-gradient(90deg,#2563eb,#38bdf8);border-radius:4px;transition:width .25s ease}
.eb-list{
  max-height:240px;overflow:auto;border:1px solid var(--border);border-radius:8px;
  background:#fbfdff;padding:6px 8px;
}
.eb-row{
  display:flex;align-items:center;gap:8px;padding:5px 6px;font-size:12.5px;
  border-bottom:1px dashed #e5eaf0;color:var(--muted);
}
.eb-row:last-child{border-bottom:0}
.eb-row.eb-ok{color:#15803d}
.eb-row.eb-skip{color:var(--amber)}

/* 预览：横版 240×140 页面用 img（比 canvas 省内存） */
.lp-img{width:760px;max-width:100%;height:auto;display:block}
@media (max-width:900px){ .lp-img{width:100%} }
.eb-foot{padding:6px 10px;border-radius:6px;background:#f8fafc;border:1px solid var(--border);
  font-size:12.5px;color:var(--muted);text-align:center}
.eb-skipbox{padding:8px 10px;border-radius:6px;background:var(--amber-bg);border:1px solid #fde68a}
.eb-warn{font-size:12.5px;color:var(--amber);word-break:break-all}

/* ===================== 工资模块 ===================== */
/* 员工联想下拉 */
.se-ac{
  position:fixed;z-index:9000;background:#fff;border:1px solid var(--border);
  border-radius:8px;box-shadow:0 10px 28px rgba(15,23,42,.16);
  max-height:264px;overflow:auto;padding:4px;
}
.se-ac-item{
  display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;
  font-size:12.5px;cursor:pointer;white-space:nowrap;
}
.se-ac-item:hover{background:#f1f5f9}
.se-ac-item.on{background:#e8f1fb;color:#0d47a1}
.se-ac-item .ac-code{min-width:60px;font-weight:600;color:#1565c0}
.se-ac-item .ac-sc{min-width:46px;color:var(--muted)}
.se-ac-item .ac-name{min-width:60px;font-weight:600}
.se-ac-item .ac-dept{margin-left:auto;color:var(--muted)}
.se-ac-item.on .ac-dept{color:#5a7a9a}
/* 离职人员：仍可选，只是弱化显示 + 打标签，避免误选 */
.se-ac-item.off{opacity:.72}
.se-ac-item .ac-tag-off{
  margin-left:5px;padding:0 5px;border-radius:8px;font-size:10.5px;font-weight:400;
  background:#fee2e2;color:#b91c1c;vertical-align:1px;
}
.se-ac-item.on .ac-tag-off{background:#fecaca;color:#991b1b}

/* 筛选栏内联复选框 */
.ck-inline{
  display:inline-flex;align-items:center;gap:5px;margin-left:6px;
  font-size:12.5px;color:var(--muted);cursor:pointer;user-select:none;white-space:nowrap;
}
.ck-inline input{margin:0;cursor:pointer}

/* 工资卡快速维护弹窗抬头 */
.emp-card-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 10px;margin-bottom:8px;border-radius:8px;
  background:#f8fafc;border:1px solid var(--border);font-size:12.5px;
}
/* 表单字段下方的小字提示 */
.field-tip{margin:4px 0 0;font-size:11.5px;color:var(--muted);line-height:1.5}

/* ===================== 员工批量导入 ===================== */
.imp-help{ padding:10px 12px; margin-bottom:12px; border-radius:8px; background:var(--primary-soft); border:1px solid #bfdbfe; }
.imp-help > b{ font-size:12.5px; color:var(--primary-dark); }
.imp-cols{ display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.imp-col{
  font-size:11.5px; padding:3px 8px; border-radius:6px; background:#fff;
  border:1px solid #bfdbfe; color:var(--primary-dark);
}
.imp-col i{ font-style:normal; opacity:.6; margin-right:4px; font-weight:700; }
.imp-text{
  width:100%; min-height:150px; resize:vertical;
  font-family:ui-monospace,Menlo,Consolas,monospace; font-size:12px; line-height:1.7;
}
.imp-report{ border:1px solid var(--border); border-radius:8px; overflow:hidden; }
.imp-report.ok .ir-head{ background:var(--green-bg); color:#14532d; }
.imp-report.warn .ir-head{ background:var(--amber-bg); color:#92400e; }
.ir-head{ padding:9px 12px; font-size:12.5px; font-weight:600; }
.ir-head .bad{ color:var(--red); }
.ir-errs{ padding:8px 12px; max-height:180px; overflow:auto; }
.ir-errs > div{ font-size:12px; padding:4px 0; border-bottom:1px dashed var(--border); color:#991b1b; }
.ir-errs > div:last-child{ border-bottom:0; }
.ir-errs i{ font-style:normal; color:var(--muted); margin-right:8px; }

/* ---------- 考勤管理 ---------- */
code.am-token{
  display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  vertical-align:bottom;font-size:12px;color:var(--primary);background:var(--primary-soft,#eff6ff);
  border-radius:5px;padding:2px 6px;cursor:pointer;
}
code.am-token:hover{text-decoration:underline}
/* 考勤数据 · 每日明细：逐日列（表头=日+星期），与数据列严格对齐 */
th.am-day{
  min-width:26px;max-width:30px;padding:5px 1px;text-align:center;
  font-size:10px;line-height:1.25;font-weight:600;color:#475569;white-space:nowrap;
}
td.am-day{
  min-width:26px;max-width:30px;padding:4px 1px;text-align:center;
  font-size:10.5px;line-height:1.3;white-space:nowrap;
}
td.am-day i{
  display:inline-block;min-width:19px;padding:1px 2px;border-radius:3px;
  font-style:normal;
}

/* ============================================================
 *  考勤管理 · 分配系统员工：搜索式选人面板
 *  332+ 员工用下拉框很难找，改成「输入片段 → 实时候选 → 点选」
 * ============================================================ */
.bd-list{
  max-height:300px; overflow:auto; border:1px solid var(--border);
  border-radius:8px; background:#fff; padding:4px;
}
.bd-item{
  display:flex; align-items:center; gap:8px; padding:7px 8px;
  border-radius:6px; font-size:12.5px; cursor:pointer; white-space:nowrap;
}
.bd-item:hover{background:#f1f5f9}
.bd-item.on{background:#e8f1fb; color:#0d47a1}
.bd-item.cur{background:#f0fdf4}
.bd-item .ac-code{min-width:58px; font-weight:600; color:#1565c0}
.bd-item .ac-sc{min-width:44px; color:var(--muted)}
.bd-item .ac-name{min-width:58px; font-weight:600}
.bd-item .ac-dept{margin-left:auto; color:var(--muted)}
.bd-item.on .ac-dept{color:#5a7a9a}
.bd-item .tag-in{margin-left:6px}
.bd-cur{
  display:flex; align-items:center; gap:4px; margin-top:8px; padding:8px 10px;
  border-radius:8px; background:#f8fafc; border:1px solid var(--border); font-size:12.5px;
}
.bd-cur.hide{display:none}
.tag-out{display:inline-block; font-size:11px; color:var(--muted);
  background:#f1f5f9; border-radius:5px; padding:1px 6px}
.empty.sm{padding:22px 12px; font-size:13px; color:var(--muted); text-align:center}

/* ===== 计件工资明细：可编辑弹窗 ===== */
.pd-wrap{max-height:46vh;overflow:auto;border:1px solid var(--border);border-radius:8px}
.pd-wrap table{width:100%;min-width:880px;border-collapse:collapse;font-size:12.5px}
.pd-wrap th{
  position:sticky;top:0;z-index:2;background:#f8fafc;
  padding:6px 4px;font-weight:600;color:var(--muted);white-space:nowrap;
  border-bottom:1px solid var(--border);
}
.pd-wrap td{padding:2px 3px;border-bottom:1px solid #f1f5f9}
input.pd-inp{
  width:100%;padding:4px 5px;font:inherit;font-size:12.5px;color:var(--text);
  border:1px solid transparent;border-radius:5px;background:#fff;
}
input.pd-inp:hover{border-color:var(--border2)}
input.pd-inp:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
input.pd-inp.num{text-align:right}
input.pd-inp[readonly]{background:#f8fafc;color:var(--muted)}
.pd-row-del{opacity:.5}
.pd-row-del input.pd-inp{text-decoration:line-through}
.pd-row-new input.pd-inp{border-color:#0fa47c;background:#f0fdf8}
.pd-del{opacity:.5}
.pd-sum{margin-top:10px;text-align:right;font-size:13px}
.pd-sum b{font-size:15px}

/* ===== 工资汇总表（按月 · 部门横向表头） ===== */
.ws-stat{display:flex;flex-wrap:wrap;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border)}
.ws-sc{flex:1 1 130px;min-width:120px;background:#fbfdff;border:1px solid var(--border);border-radius:8px;padding:8px 12px}
.ws-sc-label{font-size:12px;color:var(--muted)}
.ws-sc-value{font-size:17px;font-weight:700;margin-top:2px;color:#0f172a}
.ws-grid{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start}
.ws-col{flex:1 1 158px;min-width:148px;max-width:100%;border:1px solid var(--border);border-radius:6px;overflow:hidden;background:#fff}
.ws-colhead{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:5px 7px;background:#f3f6fb;font-weight:700;font-size:12.5px;border-bottom:1px solid var(--border)}
.ws-colname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-colamt{color:#c2410c;font-weight:700;font-size:12px;white-space:nowrap}
.ws-col table{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}
.ws-col th{padding:3px 6px;text-align:left;background:#fafbfd;color:var(--muted);font-weight:600;font-size:11px;border-bottom:1px solid var(--border)}
.ws-col td{padding:2px 6px;border-bottom:1px solid #f1f5f9}
.ws-col .c-wage{width:72px;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden}
.ws-col .c-name{text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-code{color:var(--muted);font-size:10.5px}
.ws-multi{display:inline-block;min-width:13px;height:13px;line-height:13px;padding:0 2px;
  margin-left:3px;border-radius:3px;background:#fff7ed;color:#c2410c;border:1px solid #fdba74;
  font-size:9.5px;font-weight:700;text-align:center;vertical-align:1px;cursor:help}
.ws-print .ws-multi{background:#fff !important;border-color:#999 !important;color:#666 !important}
.ws-grand{margin-top:14px;padding:10px 14px;background:#f3f6fb;border:1px solid var(--border);border-radius:8px;font-size:14px;text-align:right}
.ws-grand b{color:#c2410c;font-size:17px}

/* ===== 工资汇总 · A4 打印容器（横向，自动缩放保证一页打完） ===== */
.ws-a4host{display:none;background:#fff}
/* --ws-s：整体压缩系数（1 = 原始）。用「真布局缩放」而非 transform，
   因为 transform 不改变布局高度，浏览器打印时仍会按原始高度分页（导致多出空白页）。 */
.ws-a4page{width:1077px;background:#fff;--ws-s:1}
.ws-a4tt{display:flex;align-items:baseline;gap:calc(14px * var(--ws-s));padding:0 2px calc(8px * var(--ws-s));border-bottom:2px solid #1565c0;margin-bottom:calc(10px * var(--ws-s))}
.ws-a4tt h3{margin:0;font-size:calc(19px * var(--ws-s));color:#0d47a1;letter-spacing:1px}
.ws-a4tt .ws-a4sub{font-size:calc(12.5px * var(--ws-s));color:#5b6b7c}
.ws-a4tt .ws-a4sub b{color:#c2410c}
.ws-a4ft{margin-top:calc(8px * var(--ws-s));padding-top:calc(6px * var(--ws-s));border-top:1px solid #c3d9f2;font-size:calc(11px * var(--ws-s));color:#6b7f95;display:flex;justify-content:space-between}
/* A4 页内的部门栏随 --ws-s 收缩（列宽收窄 → 一行能放更多部门 → 总高下降） */
.ws-a4page .ws-grid{gap:calc(8px * var(--ws-s))}
.ws-a4page .ws-col{flex:1 1 calc(158px * var(--ws-s));min-width:calc(148px * var(--ws-s))}
.ws-a4page .ws-colhead{padding:calc(5px * var(--ws-s)) calc(7px * var(--ws-s));font-size:calc(12.5px * var(--ws-s));gap:calc(6px * var(--ws-s))}
.ws-a4page .ws-colamt{font-size:calc(12px * var(--ws-s))}
.ws-a4page .ws-col table{font-size:calc(12px * var(--ws-s))}
.ws-a4page .ws-col th{padding:calc(3px * var(--ws-s)) calc(6px * var(--ws-s));font-size:calc(11px * var(--ws-s))}
.ws-a4page .ws-col td{padding:calc(2px * var(--ws-s)) calc(6px * var(--ws-s))}
.ws-a4page .ws-col .c-wage{width:calc(72px * var(--ws-s))}
.ws-a4page .ws-code{font-size:calc(10.5px * var(--ws-s))}

@media print{
  /* 全局：打印时收起导航与操作区（对所有页面生效，勿删） */
  .sidebar,.topbar,.page-head,.filter-bar,.page-actions,.ws-stat{display:none !important}
  .main,.page{margin:0 !important;padding:0 !important}
  .panel{border:none;box-shadow:none}

  /* 工资汇总 A4：整页替换为 A4 容器 */
  @page{size:A4 landscape;margin:6mm}
  html.ws-printing,html.ws-printing body{margin:0 !important;padding:0 !important;background:#fff}
  html.ws-printing > body > *:not(.ws-a4host){display:none !important}
  html.ws-printing .ws-a4host{display:block !important;position:static !important}
  html.ws-printing .sidebar,html.ws-printing .topbar{display:none !important}
  .ws-col{break-inside:avoid;page-break-inside:avoid;border-color:#999}
  .ws-colhead{background:#eee !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ============ 生产管理：产品信息 ============ */
.prd-thumb{width:32px;height:32px;object-fit:cover;border-radius:4px;border:1px solid var(--border);cursor:zoom-in;display:block;background:#f8fafc}
.prd-thumb.empty{display:flex;align-items:center;justify-content:center;color:#cbd5e1;font-size:12px}
.prd-thumb.big{width:130px;height:98px}
table.grid tbody tr.is-off td{color:#94a3b8}
table.grid tbody tr.is-off .prd-thumb{filter:grayscale(1);opacity:.55}
.prd-form .frm-row{display:flex;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.prd-form .fld{flex:1;min-width:170px;display:flex;flex-direction:column;gap:4px;font-size:13px;color:#475569}
.prd-form .fld input,.prd-form .fld select{padding:7px 9px;border:1px solid #d7dee8;border-radius:6px;font-size:13px;font-family:inherit}
.prd-form .thumb-line{display:flex;align-items:center;gap:10px}
.prd-form .size-quick{display:inline-flex;gap:4px;margin-top:5px;flex-wrap:wrap}

/* ===== 产品信息：颜色尺码库 / SKU 预览 ===== */
.cs-pick{max-height:320px;overflow:auto}
.cs-group{margin-bottom:10px}
.cs-group-name{font-size:12px;color:#666;margin-bottom:4px;font-weight:600}
.cs-chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:3px;border:1px solid #dee2e6;border-radius:16px;padding:4px 10px;font-size:13px;cursor:pointer;background:#fff;color:#333}
.chip.on{background:#1565c0;border-color:#1565c0;color:#fff}
.chip.off{opacity:.45}
.cs-code-read{display:flex;flex-wrap:wrap;gap:4px;min-height:34px;border:1px solid #dee2e6;border-radius:6px;padding:6px 8px;background:#fafbfc;font-size:13px;align-items:center}
.cs-code-read .muted{font-size:12px}
.sku-preview{margin-top:8px;padding:10px 12px;background:#f6f9ff;border:1px solid #dbe6ff;border-radius:8px}
.sku-prev-t{font-size:12px;color:#1565c0;font-weight:600;margin-bottom:6px}
.sku-prev-list{display:flex;flex-wrap:wrap;gap:6px;min-height:20px;font-size:12px;color:#666}
.sku-chip{background:#e8f1ff;color:#1565c0;border-radius:4px;padding:2px 7px;font-family:Consolas,Menlo,monospace;font-size:12px}
/* 颜色尺码库管理 */
.cs-item-row{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #eee;border-radius:6px;margin-bottom:6px;flex-wrap:wrap}
.cs-item-code{font-family:Consolas,Menlo,monospace;font-size:12px;background:#f1f3f5;border-radius:4px;padding:2px 6px;color:#333}
.cs-item-name{font-weight:600;font-size:13px}
.cs-item-group{font-size:12px;color:#999}
.seg{display:inline-flex;border:1px solid #dee2e6;border-radius:8px;overflow:hidden;vertical-align:middle}
.seg button{padding:6px 14px;border:0;background:#fff;cursor:pointer;font-size:13px;color:#495057}
.seg button.on{background:#1565c0;color:#fff}
/* ===== 产品信息：颜色尺码内联面板 / 参数组 ===== */
.cs-panel{margin-top:6px;padding:8px;border:1px solid #dee2e6;border-radius:8px;background:#f8f9fa;max-height:220px;overflow:auto}
.prm-box{margin-top:8px;padding:10px 12px;border:1px solid #e9ecef;border-radius:8px;background:#fafbfc}
.prm-head{display:flex;align-items:center;gap:8px;font-size:13px;margin-bottom:8px}
.prm-head b{font-size:13px}
.prn-row{display:flex;gap:6px;margin-bottom:6px;align-items:center}
.prn-name{flex:1}
.prn-val{flex:1}
.prn-del{flex:0 0 auto}
/* ===== 订单信息：新增/编辑弹窗 + 款号矩阵明细 ===== */
.ord-form .ord-sec{
  display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:#334155;
  margin:4px 0 12px;padding-left:10px;position:relative;letter-spacing:.5px;
}
.ord-form .ord-sec::before{
  content:'';position:absolute;left:0;top:1px;bottom:1px;width:3px;border-radius:2px;
  background:linear-gradient(180deg,var(--primary),#60a5fa);
}
.ord-form .ord-sec .muted{font-weight:400}
.ord-form .form-item{margin-bottom:12px}
.ord-form .ord-hrow{flex-wrap:wrap}
.ord-form .ord-hrow .fi-date{flex:0 0 190px;min-width:170px}
.ord-form .ord-hrow .fi-cust{flex:2 1 260px;min-width:220px}
.ord-form .ord-hrow .fi-status{flex:1 1 130px;min-width:120px}
.ord-form #oRemark{background:#fbfdff}
.ord-form #oCustomer:focus,.ord-form #oDate:focus{background:#fff}

/* 款号块：卡片式 */
.ord-block{
  border:1px solid var(--border);border-left:3px solid #bfdbfe;border-radius:10px;
  background:#fff;padding:12px 14px;margin-bottom:12px;
  box-shadow:0 1px 2px rgba(15,23,42,.04);transition:border-color .15s,box-shadow .15s;
}
.ord-block:hover{box-shadow:0 2px 10px rgba(37,99,235,.08)}
.ord-block.has-qty{border-left-color:var(--primary)}
.ord-block-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ord-block-head .ord-tag{
  flex:0 0 auto;font-size:11px;font-weight:600;color:var(--primary);
  background:var(--primary-soft);border:1px solid #dbeafe;border-radius:99px;padding:3px 10px;
}
.ord-block-head .ord-prod{flex:1;min-width:200px;height:34px}
.ord-block-head .ord-field-label{flex:0 0 auto;font-size:12px;color:var(--muted)}
.ord-price-wrap{
  flex:0 0 auto;display:inline-flex;align-items:center;height:34px;border:1px solid var(--border2);
  border-radius:8px;background:#fff;overflow:hidden;transition:.15s;
}
.ord-price-wrap:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ord-price-wrap .ord-cur{padding:0 2px 0 10px;color:var(--muted);font-size:13px}
.ord-block-head .ord-price{
  width:86px;height:32px;border:none;border-radius:0;background:none;text-align:right;
}
.ord-block-head .ord-price:focus{box-shadow:none}
/* 数字框隐藏步进按钮，保持版面干净 */
.ord-price::-webkit-outer-spin-button,.ord-price::-webkit-inner-spin-button,
.ord-qty::-webkit-outer-spin-button,.ord-qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.ord-price{-moz-appearance:textfield;appearance:textfield}
.ord-block-amt{
  margin-left:auto;flex:0 0 auto;font-size:12px;color:var(--muted);min-width:86px;text-align:right;
}
.ord-block-amt b{font-size:15px;color:var(--primary-dark);font-variant-numeric:tabular-nums}
.ord-del{
  flex:0 0 auto;width:26px;height:26px;border:1px solid transparent;border-radius:7px;
  background:none;color:var(--muted2);font-size:13px;cursor:pointer;line-height:1;transition:.15s;
}
.ord-del:hover{border-color:var(--red);background:var(--red-bg);color:var(--red)}

/* 颜色 × 尺码矩阵 */
.ord-matrix{
  overflow:auto;max-height:320px;border:1px solid var(--border);border-radius:8px;
  background:#f8fafc;
}
.ord-matrix .muted{padding:10px 12px !important}
.ord-matrix-t{border-collapse:separate;border-spacing:0;width:auto;font-size:13px;background:#fff}
.ord-matrix-t th,.ord-matrix-t td{
  border-right:1px solid var(--border);border-bottom:1px solid var(--border);
  padding:0;text-align:center;white-space:nowrap;
}
.ord-matrix-t th:last-child,.ord-matrix-t td:last-child{border-right:none}
.ord-matrix-t tr:last-child td{border-bottom:none}
.ord-matrix-t th{
  background:linear-gradient(180deg,#f8fafc,#eef2f7);color:#475569;font-weight:600;
  font-size:12px;padding:7px 10px;position:sticky;top:0;z-index:2;
}
.ord-matrix-t tr:first-child th{border-top:none}
.ord-matrix-t th:first-child{border-left:none}
.ord-matrix-t tr:not(:first-child) th:first-child{
  position:sticky;left:0;top:auto;z-index:1;background:#f8fafc;font-weight:600;color:#334155;
  padding:7px 12px;text-align:left;min-width:72px;
}
.ord-matrix-t th.corner{
  z-index:3;background:#eef2f7;min-width:64px;
}
.ord-matrix-t tr:nth-child(even) td:not(.dim){background:#fbfdff}
.ord-matrix-t td input.ord-qty{
  width:100%;min-width:58px;height:32px;border:1px solid transparent;border-radius:6px;
  text-align:center;background:transparent;font-size:13px;color:var(--text);
  font-variant-numeric:tabular-nums;outline:none;transition:.12s;
}
.ord-matrix-t td input.ord-qty:hover{border-color:var(--border2);background:#fff}
.ord-matrix-t td input.ord-qty:focus{
  border-color:var(--primary);background:#fff;
  box-shadow:0 0 0 2px rgba(37,99,235,.15);
}
.ord-matrix-t td.dim{
  color:#cbd5e1;background:repeating-linear-gradient(135deg,#f8fafc,#f8fafc 5px,#f1f5f9 5px,#f1f5f9 10px);
  padding:7px 10px;
}

/* 添加款号：虚线大按钮 */
.ord-add-btn{
  display:block;width:100%;height:42px;margin:2px 0 12px;border:1.5px dashed var(--border2);
  border-radius:10px;background:none;color:var(--muted);font-size:13px;font-family:inherit;
  cursor:pointer;transition:.15s;letter-spacing:1px;
}
.ord-add-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}

/* 合计横幅 */
.ord-totalbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 16px;border-radius:10px;font-size:13px;color:#dbeafe;
  background:linear-gradient(135deg,#1e3a8a,#2563eb);box-shadow:0 4px 14px rgba(37,99,235,.25);
}
.ord-totalbar .ord-total-num{font-size:13px;color:#bfdbfe}
.ord-totalbar .ord-total-num b{
  font-size:22px;font-weight:700;color:#fff;margin-left:4px;
  font-variant-numeric:tabular-nums;letter-spacing:.5px;
}
/* 裁床/裁剪单样式见 assets/css/cutting.css（.cut-scope 作用域） */

/* 尺码库管理：分组折叠卡片 */
.sl-grp summary::-webkit-details-marker{display:none}
.sl-grp[open] > summary > span:first-child{transform:rotate(90deg)}
.sl-grp table.grid td{border-bottom:1px solid #f1f5f9}
.sl-grp table.grid tr:last-child td{border-bottom:none}

/* 订单矩阵：小计列 + 合计行 */
.ord-matrix-t th.mx-sub{background:#f0f7ff;color:#1d4ed8;min-width:56px}
.ord-matrix-t td.mx-sub{background:#f8fbff;text-align:center;font-variant-numeric:tabular-nums;color:#1d4ed8}
.ord-matrix-t tr.mx-totalrow th{background:#eff6ff;color:#1d4ed8}
.ord-matrix-t tr.mx-totalrow td{border-top:2px solid #bfdbfe;background:#f0f7ff}
.ord-matrix-t .mx-grand{font-size:14px}
.ord-matrix-t .mx-grandsum{color:#1d4ed8}

/* ===== 生产报表 ===== */
.ord-matrix-t tr.mx-stylerow td{background:#eef4ff;border-left:4px solid #2563eb;font-size:14px;padding:9px 12px}
.tb td.diff-neg{color:#dc2626}
.tb tfoot tr td{background:#f8fafc;font-weight:600;border-top:2px solid #dbe3ee}
.tb td.empty{color:#98a2b3;text-align:center;padding:18px}

/* ===== 生产报表美化 ===== */
.rpt-card{padding:0!important;overflow:hidden;margin-bottom:16px}
.rpt-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:14px 20px;background:linear-gradient(90deg,#eef4ff 0%,#ffffff 70%);border-bottom:1px solid #e5eaf2}
.rpt-title{font-size:15px;font-weight:700;color:#1e3a8a;display:flex;align-items:center;gap:9px}
.rpt-title i{display:inline-block;width:4px;height:16px;border-radius:2px;background:linear-gradient(180deg,#60a5fa,#2563eb)}
.rpt-title .rpt-sub{font-size:12px;font-weight:400;color:#94a3b8;margin-left:4px}
.rpt-filter{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:13px;color:#475569}
.rpt-filter label{display:flex;align-items:center;gap:6px}
.rpt-filter input[type=date]{padding:5px 9px;border:1px solid #d6dce5;border-radius:6px;font-size:13px;color:#1e293b}
.rpt-filter .btn{padding:6px 16px;border-radius:6px}
.rpt-body{padding:16px 20px}
.rpt-block{border:1px solid #e5eaf2;border-radius:10px;margin-bottom:14px;overflow:hidden;box-shadow:0 1px 3px rgba(30,58,138,.05)}
.rpt-block-head{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:10px 14px;background:#f4f7fd;font-size:13px;color:#475569;border-bottom:1px solid #e9eef6}
.rpt-block-head .rb-batch{font-size:14px;color:#1d4ed8}
.rpt-chip{background:#fff;border:1px solid #dbe3ee;border-radius:999px;padding:3px 12px;font-size:12.5px;color:#64748b;white-space:nowrap}
.rpt-chip b{color:#1e293b}
.rpt-chip.pos{border-color:#bfdbfe;background:#eff6ff}.rpt-chip.pos b{color:#2563eb}
.rpt-chip.neg{border-color:#fecaca;background:#fef2f2}.rpt-chip.neg b{color:#dc2626}
.rpt-block table{width:100%;border-collapse:collapse;font-size:13px}
.rpt-block th{background:#eef3fb;color:#334155;font-weight:600;padding:8px 10px;border-bottom:1px solid #e5eaf2;text-align:center;white-space:nowrap}
.rpt-block td{padding:7px 10px;border-bottom:1px solid #f0f3f8;text-align:center;font-variant-numeric:tabular-nums;color:#334155}
.rpt-block td.rpt-color{font-weight:600;color:#1e293b}
.rpt-block td.rpt-subcol,.rpt-block th.rpt-subcol{background:#f8fbff;color:#1d4ed8}
.rpt-block tbody tr:nth-child(even):not(.rpt-bedsum){background:#fafcff}
.rpt-block tbody tr:hover:not(.rpt-bedsum){background:#f2f7ff}
.rpt-block tr.rpt-bedsum td{background:#f0f7ff;font-weight:600;color:#1d4ed8;border-top:1px solid #dbe6f5}
.rpt-block tfoot td{background:#f4f7fd;font-weight:700;color:#1e293b;border-top:2px solid #dbe6f5}
.rpt-block tfoot td.rpt-subcol{color:#1d4ed8}
.rpt-grand{margin-bottom:0}
.rpt-grand .rpt-block-head{background:linear-gradient(90deg,#eef4ff,#f8fbff);border-bottom:none}
.rpt-empty{padding:36px;text-align:center;color:#98a2b3}

/* ===== 款式汇总三层格子（订单/裁剪/溢短） ===== */
.rpt-legend{display:flex;gap:14px;flex-wrap:wrap;align-items:center;font-size:12.5px;color:#64748b;margin-bottom:12px}
.rpt-legend .lg{display:flex;align-items:center;gap:5px}
.rpt-legend .lg i{display:inline-block;width:10px;height:10px;border-radius:3px}
.rpt-legend .lg-o i{background:#dbeafe;border:1px solid #93c5fd}
.rpt-legend .lg-c i{background:#dcfce7;border:1px solid #86efac}
.rpt-legend .lg-d i{background:#fef9c3;border:1px solid #fde047}
.rpt-block td.rpt-tri{padding:4px 8px}
.rpt-tri .c-o{color:#1e293b;background:#eff6ff;border-radius:4px;margin:2px 0;padding:1px 4px;font-variant-numeric:tabular-nums}
.rpt-tri .c-c{color:#166534;background:#f0fdf4;border-radius:4px;margin:2px 0;padding:1px 4px;font-variant-numeric:tabular-nums}
.rpt-tri .c-d{background:#fefce8;border-radius:4px;margin:2px 0;padding:1px 4px;color:#854d0e;font-variant-numeric:tabular-nums}
.rpt-tri .c-d.d-pos{color:#1d4ed8;background:#eff6ff;font-weight:700}
.rpt-tri .c-d.d-neg{color:#dc2626;background:#fef2f2;font-weight:700}

/* ===== 款式汇总横向三列（订单/裁剪/溢短）===== */
.rpt-block th.tri-h{font-size:11.5px;font-weight:500;padding:4px 6px}
.rpt-block th.tri-h.h-o{color:#1d4ed8;background:#e8f0fe}
.rpt-block th.tri-h.h-c{color:#166534;background:#e7f8ee}
.rpt-block th.tri-h.h-d{color:#854d0e;background:#fdf9e0}
.rpt-block td.tri-o{background:#f5f9ff;color:#1e293b;min-width:44px}
.rpt-block td.tri-c{background:#f4fcf6;color:#166534;min-width:44px}
.rpt-block td.tri-d{background:#fffdea;color:#854d0e;min-width:44px}
.rpt-block td.tri-d.d-pos{color:#1d4ed8;font-weight:700}
.rpt-block td.tri-d.d-neg{color:#dc2626;font-weight:700}
.rpt-block tfoot td.tri-o,.rpt-block tfoot td.tri-c,.rpt-block tfoot td.tri-d{font-weight:700}
.rpt-block table.rpt-h{table-layout:auto}

/* ===== 多选筛选下拉 ===== */
.rpt-ms{position:relative;display:inline-block}
.rpt-ms-btn{padding:5px 12px;border:1px solid #d6dce5;border-radius:6px;background:#fff;font-size:13px;color:#334155;cursor:pointer}
.rpt-ms-btn.on{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
.rpt-ms-panel{display:none;position:absolute;z-index:50;top:calc(100% + 4px);left:0;min-width:150px;max-height:260px;overflow-y:auto;background:#fff;border:1px solid #dbe3ee;border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.12);padding:6px}
.rpt-ms-it{display:flex;align-items:center;gap:7px;padding:5px 8px;border-radius:6px;font-size:13px;color:#334155;cursor:pointer;white-space:nowrap}
.rpt-ms-it:hover{background:#f2f7ff}
.rpt-ms-foot{display:flex;justify-content:space-between;border-top:1px solid #eef2f7;margin-top:4px;padding:5px 8px 2px}
.rpt-ms-foot a{font-size:12px;color:#2563eb;text-decoration:none}
.rpt-ms-none{padding:8px;font-size:12.5px;color:#98a2b3;text-align:center}

/* ===== 筛选面板搜索框 ===== */
.rpt-ms-search{width:calc(100% - 12px);margin:2px 4px 6px;padding:5px 8px;border:1px solid #d6dce5;border-radius:6px;font-size:12.5px;box-sizing:border-box}
.rpt-ms-search:focus{outline:none;border-color:#93c5fd}
.rpt-ms-list{max-height:200px;overflow-y:auto}

/* ===== 报表分段切换（分床次 / 合并床次）===== */
.rpt-seg{display:inline-flex;border:1px solid #d6dce5;border-radius:7px;overflow:hidden;background:#fff}
.rpt-seg button{border:0;background:transparent;padding:5px 13px;font-size:13px;color:#475569;cursor:pointer;font-family:inherit;line-height:1.6}
.rpt-seg button+button{border-left:1px solid #e5eaf2}
.rpt-seg button:hover{background:#f4f7fd}
.rpt-seg button.on{background:#2563eb;color:#fff;font-weight:600}

/* ===== 表单内一键复制（入职登记详情）===== */
.ipt-copy{display:flex;align-items:center;gap:6px}
.ipt-copy .input{flex:1 1 auto;min-width:0}
.ipt-copy .copy-btn{flex:0 0 auto;padding:6px 10px;color:#2563eb;border-color:#bfdbfe;background:#eff6ff;white-space:nowrap}
.ipt-copy .copy-btn:hover{background:#dbeafe}
.ipt-copy .copy-btn.copied{background:#dcfce7;border-color:#86efac;color:#15803d}

/* ===== 跟单分组分发链接 ===== */
.tg-link{color:#2563eb;cursor:pointer;word-break:break-all;font-size:12.5px}
.tg-link:hover{text-decoration:underline}
