/* ============================================================
   业务流管理系统 · 样式
   ============================================================ */
:root{
  --brand:#1f5eff;
  --brand-dark:#1749cc;
  --brand-soft:#eaf0ff;
  --ink:#111827;
  --ink-2:#374151;
  --ink-3:#6b7280;
  --ink-4:#9ca3af;
  --line:#e5e7eb;
  --line-2:#eef1f5;
  --bg:#f4f6fa;
  --card:#ffffff;
  --side:#101828;
  --side-2:#1b2537;
  --ok:#0f9960;
  --ok-bg:#e7f7ef;
  --warn:#d97706;
  --warn-bg:#fff5e6;
  --err:#dc2626;
  --err-bg:#fdecec;
  --info:#2563eb;
  --info-bg:#eaf0ff;
  --grey-bg:#f1f3f6;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.06),0 4px 16px rgba(16,24,40,.06);
  --shadow-lg:0 12px 40px rgba(16,24,40,.18);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;
}
.hidden{display:none !important}
.muted{color:var(--ink-4);font-style:normal;font-weight:400}
a{color:var(--brand);text-decoration:none}
h1,h2,h3,h4{margin:0;font-weight:600}
button{font-family:inherit}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#cfd6e0;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 启动遮罩 ---------- */
.boot{position:fixed;inset:0;z-index:999;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:18px;background:#fff}
.boot-logo{width:56px;height:56px;border-radius:16px;background:var(--brand);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;
  box-shadow:0 8px 24px rgba(31,94,255,.35)}
.boot-text{color:var(--ink-3);font-size:13px}

/* ---------- 登录 ---------- */
.login-wrap{display:flex;min-height:100vh}
.login-side{flex:0 0 460px;background:
  radial-gradient(120% 90% at 10% 0%,#2554e0 0%,#12203f 55%,#0b1428 100%);
  color:#fff;padding:64px 52px;display:flex;flex-direction:column;justify-content:space-between}
.login-brand-logo{width:52px;height:52px;border-radius:14px;background:rgba(255,255,255,.16);
  border:1px solid rgba(255,255,255,.25);display:flex;align-items:center;justify-content:center;
  font-size:24px;font-weight:700;margin-bottom:28px}
.login-brand h1{font-size:28px;letter-spacing:.5px}
.login-brand p{margin:14px 0 0;color:#b8c4dd;font-size:14px;line-height:1.9}
.login-feats{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:18px}
.login-feats li{display:flex;gap:14px;color:#cfd8ea;font-size:13.5px;line-height:1.7;
  padding-top:18px;border-top:1px solid rgba(255,255,255,.1)}
.login-feats li span{color:#7ea2ff;font-weight:700;font-family:ui-monospace,monospace;flex:0 0 auto}
.login-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px;background:#fff}
.login-card{width:100%;max-width:400px}

/* 待激活 / 已停用提示条（登录卡片上方） */
.login-pending{width:100%;max-width:400px;margin:0 auto 14px;padding:14px 16px;border-radius:10px;
  background:#fff8e6;border:1px solid #f5d68a;color:#7a5200}
.login-pending .lp-title{font-size:14px;font-weight:700;margin-bottom:6px}
.login-pending .lp-body{font-size:12.5px;line-height:1.7;color:#8a6200}
.login-pending .btn{margin-top:10px}
.login-card h2{font-size:24px}
.login-sub{color:var(--ink-3);margin:8px 0 26px;font-size:13px}
.tabs{display:flex;gap:24px;border-bottom:1px solid var(--line);margin-bottom:22px}
.tab{border:0;background:none;padding:0 0 12px;cursor:pointer;color:var(--ink-3);
  font-size:14px;font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab.active{color:var(--brand);border-bottom-color:var(--brand)}
.seg{display:flex;background:var(--grey-bg);border-radius:8px;padding:3px;margin-bottom:16px}
.seg-item{flex:1;border:0;background:none;padding:7px 0;border-radius:6px;cursor:pointer;
  font-size:13px;color:var(--ink-3)}
.seg-item.active{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.12)}
.login-form{display:flex;flex-direction:column;gap:14px}
.login-form.hidden{display:none}
.field{display:block}
.field>span{display:block;font-size:13px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.field input{width:100%;height:42px;padding:0 13px;border:1px solid var(--line);border-radius:8px;
  font-size:14px;background:#fff;color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s}
.field input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.field input:disabled{background:var(--grey-bg);color:var(--ink-4)}
.input-row{display:flex;gap:8px}
.input-row input{flex:1}
.btn-code{flex:0 0 auto;width:118px;height:42px;font-size:13px}
.field-error{color:var(--err);font-size:12.5px;min-height:0}
.field-error:empty{display:none}
.login-links{text-align:right;font-size:12.5px;margin-top:0}
.login-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}
.login-remember{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-2);cursor:pointer;user-select:none}
.login-remember input[type=checkbox]{width:16px;height:16px;accent-color:var(--brand);cursor:pointer;flex:none}
.login-or{display:flex;align-items:center;gap:12px;color:var(--ink-4);font-size:12px;margin:20px 0}
.login-or::before,.login-or::after{content:"";flex:1;height:1px;background:var(--line)}
.login-foot{margin-top:22px;text-align:center;color:var(--ink-4);font-size:12px}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:36px;padding:0 16px;border-radius:8px;border:1px solid transparent;
  font-size:13.5px;font-weight:500;cursor:pointer;white-space:nowrap;
  transition:background .15s,border-color .15s,color .15s,opacity .15s}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{background:var(--brand);color:#fff}
.btn-primary:hover:not(:disabled){background:var(--brand-dark)}
.btn-ghost{background:#fff;border-color:var(--line);color:var(--ink-2)}
.btn-ghost:hover:not(:disabled){border-color:#c9d2e0;background:#fafbfd}
.btn-ok{background:var(--ok);color:#fff}
.btn-ok:hover:not(:disabled){filter:brightness(.94)}
.btn-danger{background:#fff;border-color:#f3c9c9;color:var(--err)}
.btn-danger:hover:not(:disabled){background:var(--err-bg)}
.btn-wechat{background:#07c160;color:#fff}
.btn-wechat:hover:not(:disabled){background:#06ad56}
.btn-block{width:100%}
.btn-sm{height:30px;padding:0 11px;font-size:12.5px;border-radius:7px}
.btn-link{border:0;background:none;color:var(--brand);padding:0 4px;height:auto;
  font-size:13px;cursor:pointer;font-weight:500}
.btn-link:hover{text-decoration:underline}
.btn-link.danger{color:var(--err)}
.icon-btn{width:32px;height:32px;border-radius:8px;border:1px solid var(--line);background:#fff;
  cursor:pointer;color:var(--ink-3);font-size:15px;line-height:1}
.icon-btn:hover{color:var(--brand);border-color:#c9d2e0}

/* ---------- 应用布局 ---------- */
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{flex:0 0 232px;background:var(--side);display:flex;flex-direction:column;color:#c7d0e0}
.side-brand{display:flex;align-items:center;gap:11px;padding:20px 18px 18px;
  border-bottom:1px solid rgba(255,255,255,.07)}
.side-logo{width:34px;height:34px;border-radius:9px;background:var(--brand);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;flex:0 0 auto}
.side-brand-txt strong{display:block;color:#fff;font-size:14px;line-height:1.3}
.side-brand-txt small{color:#7d8aa3;font-size:11.5px}
.nav{flex:1;overflow-y:auto;padding:12px 10px 20px}
.nav-group{margin-bottom:14px}
.nav-group-title{font-size:11px;color:#5f6b83;padding:8px 10px 6px;letter-spacing:.6px}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;
  color:#c7d0e0;cursor:pointer;font-size:13.5px;margin-bottom:2px;
  transition:background .15s,color .15s;user-select:none}
.nav-item:hover{background:var(--side-2);color:#fff}
.nav-item.active{background:var(--brand);color:#fff;font-weight:500}
.nav-item .ni{width:18px;text-align:center;font-size:14px;flex:0 0 auto;opacity:.9}
.nav-badge{margin-left:auto;background:#ef4444;color:#fff;font-size:10.5px;
  padding:1px 6px;border-radius:9px;font-weight:600;line-height:1.6}
.nav-item.active .nav-badge{background:rgba(255,255,255,.28)}
.nav-item .soon{margin-left:auto;font-size:10px;color:#6b7794;border:1px solid #38445c;
  padding:0 5px;border-radius:5px;line-height:1.6}

/* ---------- 导航 · 二级菜单（采购管理 → 采购订单 / 采购明细） ----------
   2026-10-18：采购管理页内原本是页签，用户反馈两个界面看不出是两个模块，
   改为侧边栏二级菜单——入口常驻可见，不依赖用户点到页内才发现。 */
.nav-sub{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;
  color:#c7d0e0;cursor:pointer;font-size:13.5px;margin-bottom:2px;
  transition:background .15s,color .15s;user-select:none}
.nav-sub:hover{background:var(--side-2);color:#fff}
.nav-sub.active{background:var(--brand);color:#fff;font-weight:500}
.nav-sub .ni{width:18px;text-align:center;font-size:14px;flex:0 0 auto;opacity:.9}
/* 二级项缩进一级，与父级拉开层级；父级展开时圆点提示「有子项」 */
.nav-subs{padding-left:9px;margin:2px 0 4px 12px;border-left:1px solid #2a3548}
.nav-parent{position:relative}
.nav-parent .caret{margin-left:auto;font-size:10px;color:#7d8aa3;transition:transform .15s}
.nav-parent.open .caret{transform:rotate(90deg)}
.nav-parent.on{color:#fff}
.side-foot{padding:14px;border-top:1px solid rgba(255,255,255,.07)}
.side-user{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.avatar{width:32px;height:32px;border-radius:50%;background:#2f3d55;color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:0 0 auto}
.side-user-txt strong{display:block;color:#fff;font-size:13px;line-height:1.3}
.side-user-txt small{color:#7d8aa3;font-size:11.5px}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{height:58px;background:#fff;border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 22px;flex:0 0 auto}
.crumb{font-size:15px;font-weight:600}
.topbar-right{display:flex;align-items:center;gap:14px}
.topbar-date{color:var(--ink-3);font-size:12.5px}
.content{flex:1;overflow-y:auto;padding:20px 22px 40px}

/* ---------- 卡片 / 通用 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow)}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:15px 18px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.card-head h3{font-size:14.5px}
.card-head .sub{color:var(--ink-4);font-size:12.5px;margin-top:2px}
.card-body{padding:18px}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:14px;
  margin-bottom:16px;flex-wrap:wrap}
.page-head h2{font-size:18px}
.page-head .desc{color:var(--ink-3);font-size:12.5px;margin-top:3px}

/* ---------- 统计卡 ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:18px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;
  box-shadow:var(--shadow)}
.stat .lbl{color:var(--ink-3);font-size:12.5px;display:flex;align-items:center;gap:6px}
.stat .val{font-size:25px;font-weight:700;margin-top:8px;letter-spacing:-.4px;
  font-variant-numeric:tabular-nums}
.stat .foot{color:var(--ink-4);font-size:12px;margin-top:5px}
.stat.accent .val{color:var(--brand)}
.stat.warn .val{color:var(--warn)}
.stat.ok .val{color:var(--ok)}
.stat.err .val{color:var(--err)}
/* 可点击筛选的统计卡（回款登记等）：右上角箭头提示，选中态描边 */
.stat.click{cursor:pointer;transition:border-color .15s,box-shadow .15s}
.stat.click:hover{border-color:var(--brand)}
.stat.click.on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft),var(--shadow)}
.stat .go{display:inline-block;font-size:11px;color:var(--brand);opacity:0;margin-left:auto}
.stat.click:hover .go,.stat.click.on .go{opacity:1}

/* ---------- 筛选栏 ---------- */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.filters .field{min-width:150px}
.filters .field>span{font-size:12px}
.filters input,.filters select{height:36px;padding:0 11px;border:1px solid var(--line);
  border-radius:8px;font-size:13px;outline:none;background:#fff;color:var(--ink);width:100%}
.filters input:focus,.filters select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}

/* ---------- 列表工具条（搜索 + 操作按钮） ----------
   原先供货登记用内联 flex + 固定 220px 搜索框，手机上加 4 个按钮总宽 660px，
   直接挤出可视区（按钮点不到）。这里统一抽类：允许换行、搜索框可伸缩，
   窄屏搜索框独占一行、按钮两列铺满。 */
.list-tools{display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap;min-width:0}
.list-tools .lt-search{height:36px;padding:0 12px;border:1px solid var(--line);border-radius:8px;
  font-size:13px;outline:none;background:#fff;color:var(--ink);width:220px;min-width:0;flex:0 1 220px}
.list-tools .lt-search:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}

/* ---------- 表格 ---------- */
.table-wrap{overflow-x:auto}
/* 兼容别名：多张页面表容器写的是 .tbl-wrap（无 overflow），宽表在弹窗里会撑破右缘 */
.tbl-wrap{overflow-x:auto;min-width:0;max-width:100%}
table.grid{width:100%;border-collapse:collapse;font-size:13.5px}
table.grid th{background:#fafbfd;color:var(--ink-2);font-weight:600;font-size:12.5px;
  text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
table.grid td{padding:12px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.grid tbody tr:hover{background:#fafbfd}
table.grid tbody tr:last-child td{border-bottom:0}
table.grid td.num,table.grid th.num{text-align:right;font-variant-numeric:tabular-nums}
table.grid td.amt,table.grid th.amt{text-align:right;font-variant-numeric:tabular-nums}
/* 列表合计行（tfoot）：与数据行用 2px 分隔线切开，加底底色便于扫读 */
table.grid tfoot td{padding:11px 14px;border-top:2px solid var(--line);background:#fafbfd;
  font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
table.grid tfoot td.lbl{font-weight:600;color:var(--ink-3);font-size:12.5px}
table.grid tfoot tr.sub td{font-weight:500;color:var(--ink-3);font-size:12.5px;border-top:1px solid var(--line-2)}
/* 表内分组小计行（库存明细按供应商小计）：浅底 + 顶部细线，和明细行区分但不抢眼 */
table.grid tbody tr.subs td{background:#f6f8fb;font-weight:600;border-top:1px solid var(--line);
  font-variant-numeric:tabular-nums;white-space:nowrap}
table.grid tbody tr.subs:hover td{background:#f6f8fb}
table.grid tbody tr.subs td:first-child{color:var(--ink-2)}
table.grid td.ops{white-space:nowrap;text-align:right}
table.grid td.ops .btn-link+.btn-link{margin-left:10px}
/* 结算明细录入表：紧凑内边距 + 输入框撑满单元格，便于表内连续录入（只作用于 .itbl，不影响其它列表） */
table.itbl th{padding:7px 6px;font-size:12px}
table.itbl td{padding:4px 5px}
table.itbl .ed{width:100%;min-width:0;height:34px;padding:0 8px;border:1px solid var(--line);border-radius:7px;
  font-size:13px;background:#fff;box-sizing:border-box}
table.itbl .ed:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
table.itbl .ed.numi,table.itbl .ed.pct{text-align:right;font-variant-numeric:tabular-nums}
table.itbl td.ro{text-align:right;font-variant-numeric:tabular-nums;padding-right:9px}
/* 可手调的计算列（结算重量/结算金额/剩余尾款）
   用于对齐历史 Excel 未 ROUND 造成的尾差；改过即红字+浅黄底，一眼看出哪些数被人工动过 */
table.itbl td.adjcell{position:relative;padding-right:9px}
table.itbl .ed.adj{text-align:right;font-variant-numeric:tabular-nums;background:#fafbfd;color:var(--ink-2)}
table.itbl .ed.adj::placeholder{color:var(--ink-4);font-size:12px;text-align:center}
table.itbl .ed.adj:focus{background:#fff}
table.itbl .ed.adj.on{background:#fffbe6;border-color:#ffd666;color:#d4380d;font-weight:700}
table.itbl .ed.adj.on:focus{box-shadow:0 0 0 3px rgba(255,214,102,.45);border-color:#ffc53d}
/* 「手」小角标：提示该值被人工调整过 */
table.itbl .adjmark{position:absolute;top:1px;right:2px;font-size:9.5px;line-height:1;font-style:normal;
  color:#fff;background:#fa8c16;border-radius:4px;padding:1px 3px;pointer-events:none;font-weight:700}
table.itbl .sumrow td{padding:7px 5px;background:#fafbfd;font-variant-numeric:tabular-nums}
/* 结算明细表可视滚动区：常规限高，弹窗最大化时放开、交由 modal-body 滚动 */
.itbl-scroll{max-height:56vh;overflow:auto}
.modal.max .itbl-scroll{max-height:none;overflow:visible}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}
.ellip{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- 状态徽标 ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;
  font-size:12px;font-weight:500;line-height:1.7;white-space:nowrap}
.badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}
.badge.b-draft{background:var(--grey-bg);color:#5b6472}
.badge.b-pending{background:var(--warn-bg);color:#b45309}
.badge.b-approved,.badge.b-ok{background:var(--ok-bg);color:#0b7a4b}
.badge.b-rejected{background:var(--err-bg);color:#b91c1c}
.badge.b-paid{background:#e6efff;color:#1d4ed8}
.badge.b-closed,.badge.b-info{background:var(--info-bg);color:#1d4ed8}
.role-tag{display:inline-block;padding:1px 8px;border-radius:6px;font-size:12px;font-weight:500}
.role-admin{background:#ede9fe;color:#6d28d9}
.role-operator{background:#e0f2fe;color:#0369a1}
.role-approver{background:#fef3c7;color:#b45309}
.role-finance{background:#dcfce7;color:#15803d}

/* ---------- 空状态 / 加载 ---------- */
.empty{padding:56px 20px;text-align:center;color:var(--ink-4)}
.empty .ico{font-size:34px;opacity:.35;margin-bottom:10px}
.empty p{margin:0;font-size:13.5px}
.loading{padding:44px;text-align:center;color:var(--ink-3);font-size:13px}
.spin{display:inline-block;width:15px;height:15px;border:2px solid var(--line);
  border-top-color:var(--brand);border-radius:50%;animation:sp .7s linear infinite;
  vertical-align:-2px;margin-right:7px}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---------- 分页 ---------- */
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 18px;border-top:1px solid var(--line-2);flex-wrap:wrap}
.pager .info{color:var(--ink-3);font-size:12.5px}
.pager .ctrl{display:flex;align-items:center;gap:6px}
.pg-btn{min-width:32px;height:32px;padding:0 9px;border:1px solid var(--line);background:#fff;
  border-radius:7px;cursor:pointer;font-size:13px;color:var(--ink-2)}
.pg-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.pg-btn.active{background:var(--brand);border-color:var(--brand);color:#fff}
.pg-btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 弹窗 ---------- */
.modal-mask{position:fixed;inset:0;background:rgba(16,24,40,.5);z-index:200;
  display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}
.modal{background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);width:100%;max-width:560px;
  animation:mm .18s ease-out;margin:auto}
.modal.wide{max-width:920px}
.modal.xwide{max-width:1100px}
/* 最大化 / 还原（弹窗右上按钮切换，配合 util.js modal({maximizable:true})） */
.modal-mask.max{padding:12px;align-items:stretch}
.modal.max{max-width:none;width:100%;height:100%;margin:0;display:flex;flex-direction:column}
.modal.max .modal-body{flex:1 1 auto;min-height:0;overflow:auto}
.modal-head-btns{display:flex;align-items:center;gap:2px}
.modal-max{font-size:16px}
.modal-max-btn{border:1px solid var(--line);background:#fff;color:var(--ink-2);font-size:12px;
  line-height:1;padding:4px 10px;border-radius:6px;cursor:pointer;margin-right:8px;font-family:inherit}
.modal-max-btn:hover{color:var(--brand);border-color:var(--brand)}
.modal-mask.max{overflow:hidden}
@keyframes mm{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;
  border-bottom:1px solid var(--line-2)}
.modal-head h3{font-size:15.5px}
.modal-x{border:0;background:none;font-size:20px;line-height:1;color:var(--ink-4);cursor:pointer;
  padding:0 4px}
.modal-x:hover{color:var(--ink)}
.modal-body{padding:20px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;
  border-top:1px solid var(--line-2);background:#fafbfd;border-radius:0 0 12px 12px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}
/* 网格子项默认 min-width:auto，内嵌宽表时会把弹窗撑破（如付款申请的结算明细表） */
.form-grid>*{min-width:0}
.form-grid .span2{grid-column:1/-1}
.form-grid .field>span{font-size:12.5px;color:var(--ink-2);margin-bottom:6px;display:block}
.form-grid input,.form-grid select,.form-grid textarea{
  width:100%;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:8px;
  font-size:13.5px;outline:none;background:#fff;color:var(--ink);font-family:inherit}
.form-grid textarea{height:auto;min-height:76px;padding:9px 12px;resize:vertical;line-height:1.6}
.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{
  border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.hint{color:var(--ink-4);font-size:12px;margin-top:5px}
.section-title{font-size:13px;font-weight:600;color:var(--ink-2);margin:22px 0 12px;
  padding-bottom:8px;border-bottom:1px solid var(--line-2);display:flex;
  align-items:center;justify-content:space-between}
.section-title:first-child{margin-top:0}

/* 明细行表格 */
table.items{width:100%;border-collapse:collapse;font-size:13px}
table.items th{background:#fafbfd;color:var(--ink-2);font-weight:600;font-size:12px;
  padding:9px 10px;border:1px solid var(--line);text-align:left;white-space:nowrap}
table.items td{padding:6px 8px;border:1px solid var(--line)}
table.items input,table.items select{width:100%;height:32px;padding:0 9px;border:1px solid transparent;
  border-radius:6px;font-size:13px;outline:none;background:#fff;color:var(--ink);font-family:inherit}
table.items input:hover,table.items select:hover{border-color:var(--line)}
table.items input:focus,table.items select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
table.items td.calc{text-align:right;font-variant-numeric:tabular-nums;padding-right:12px;
  color:var(--ink-2)}
.total-bar{display:flex;justify-content:flex-end;align-items:baseline;gap:10px;
  margin-top:14px;padding:12px 18px;background:#fafbfd;border:1px solid var(--line-2);
  border-radius:9px}
.total-bar .lbl{color:var(--ink-3);font-size:13px}
.total-bar .val{font-size:20px;font-weight:700;color:var(--brand);
  font-variant-numeric:tabular-nums}

/* ---------- 详情 ---------- */
.detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  padding-bottom:16px;border-bottom:1px solid var(--line-2);margin-bottom:18px;flex-wrap:wrap}
.detail-head .no{font-size:16px;font-weight:700;font-family:ui-monospace,monospace;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.detail-head .meta{color:var(--ink-3);font-size:12.5px;margin-top:6px}
.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px 24px}
.kv .k{color:var(--ink-4);font-size:12.5px;margin-bottom:3px}
.kv .v{font-size:13.5px;color:var(--ink);word-break:break-all}
.kv .v.big{font-size:16px;font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums}

/* 时间轴 */
.timeline{position:relative;padding-left:22px}
.timeline::before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:1.5px;background:var(--line)}
.tl-item{position:relative;padding-bottom:18px}
.tl-item:last-child{padding-bottom:0}
.tl-item::before{content:"";position:absolute;left:-21px;top:5px;width:9px;height:9px;
  border-radius:50%;background:#fff;border:2px solid var(--ink-4)}
.tl-item.ok::before{border-color:var(--ok);background:var(--ok)}
.tl-item.err::before{border-color:var(--err);background:var(--err)}
.tl-item.warn::before{border-color:var(--warn);background:var(--warn)}
.tl-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.tl-head strong{font-size:13.5px}
.tl-time{color:var(--ink-4);font-size:12px;margin-left:auto}
.tl-body{color:var(--ink-3);font-size:12.5px;margin-top:4px}
.tl-comment{margin-top:7px;padding:8px 11px;background:#fafbfd;border-left:2px solid var(--line);
  border-radius:0 6px 6px 0;font-size:12.5px;color:var(--ink-2)}

/* ---------- Tab（页内） ---------- */
.subtabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto}
.subtab{border:0;background:none;padding:10px 15px;cursor:pointer;color:var(--ink-3);
  font-size:13.5px;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.subtab:hover{color:var(--ink)}
.subtab.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}

/* ---------- Toast ---------- */
.toast-root{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:900;
  display:flex;flex-direction:column;gap:9px;align-items:center;pointer-events:none}
.toast{background:#1f2937;color:#fff;padding:10px 18px;border-radius:9px;font-size:13.5px;
  box-shadow:var(--shadow-lg);animation:ti .2s ease-out;max-width:82vw}
.toast.ok{background:#0f9960}
.toast.err{background:#dc2626}
.toast.warn{background:#d97706}
@keyframes ti{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* ---------- 审批中心 ---------- */
.appr-row{display:flex;align-items:center;gap:14px;padding:14px 18px;
  border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.appr-row:last-child{border-bottom:0}
.appr-row:hover{background:#fafbfd}
.appr-main{flex:1;min-width:220px}
.appr-main .t{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:9px;
  flex-wrap:wrap}
.appr-main .s{color:var(--ink-3);font-size:12.5px;margin-top:5px;display:flex;gap:14px;flex-wrap:wrap}
.appr-oper{display:flex;gap:8px;align-items:center}

/* ---------- 提示条 ---------- */
.notice{display:flex;gap:10px;padding:12px 15px;border-radius:9px;font-size:13px;
  background:var(--info-bg);color:#1e40af;border:1px solid #d3e0ff;margin-bottom:16px}
.notice.warn{background:var(--warn-bg);color:#92400e;border-color:#fde3b8}
.notice .nc{flex:1}

/* ---------- 占位页 ---------- */
.coming{text-align:center;padding:64px 24px}
.coming .ico{font-size:44px;opacity:.3;margin-bottom:14px}
.coming h3{font-size:17px;margin-bottom:10px}
.coming p{color:var(--ink-3);font-size:13.5px;max-width:560px;margin:0 auto 8px;line-height:1.9}
.coming .chips{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:20px}
.chip{background:#fff;border:1px solid var(--line);border-radius:20px;padding:5px 13px;
  font-size:12.5px;color:var(--ink-2)}
.chip b{color:var(--brand)}

/* ---------- 响应式 ---------- */
@media (max-width:1080px){
  .login-side{display:none}
  .form-grid{grid-template-columns:1fr}
}
/* 汉堡按钮：仅窄屏显示（见下方 @media），桌面始终隐藏 */
.nav-toggle{display:none}

@media (max-width:820px){
  /* 窄屏抽屉式侧栏：顶栏 ☰ 打开、遮罩点击关闭（原先侧栏被移出屏幕且无入口，手机上进不了菜单） */
  .nav-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;
    margin-right:10px;border:1px solid var(--line);background:#fff;border-radius:8px;
    font-size:17px;line-height:1;color:var(--ink-2);cursor:pointer;flex:0 0 auto}
  .nav-toggle:active{background:var(--grey-bg)}
  .topbar{justify-content:flex-start;padding:0 12px;gap:0}
  .topbar .topbar-right{margin-left:auto;gap:10px}
  .topbar-date{display:none}
  .side-mask{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:145;
    background:rgba(16,24,40,.45);opacity:0;pointer-events:none;transition:opacity .2s}
  .side-mask.on{opacity:1;pointer-events:auto}
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:150;width:250px;flex-basis:250px;
    transform:translateX(-100%);transition:transform .2s;box-shadow:6px 0 28px rgba(16,24,40,.28)}
  .sidebar.open{transform:none}
  body.nav-open{overflow:hidden}
  .content{padding:14px}
  .modal{max-width:calc(100vw - 20px);width:calc(100vw - 20px);max-height:calc(100vh - 24px)}
  .modal-mask{padding:12px}
  /* 窄屏弹窗限高后内容溢出修复：头部/底部固定，正文内部滚动（与桌面「最大化」同一套布局）。
     此前只限高不滚动，内容多的弹窗（编辑采购明细/各单据详情…）会从盒子下方直接画出屏幕 */
  .modal{display:flex;flex-direction:column;overflow:hidden}
  .modal-head{flex:0 0 auto}
  .modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .modal-foot{flex:0 0 auto}
  /* 列表工具条：搜索框独占一行，按钮在下一行换行排列，不再挤出屏幕 */
  .list-tools{width:100%;justify-content:flex-start}
  .list-tools .lt-search{flex:1 1 100%;width:100%;max-width:none}
}
@media (max-width:620px){
  .list-tools .btn{flex:1 1 calc(50% - 4px);min-width:0}
}


/* ---------- 移动审批模式（小屏 + 审批员 · 仅「待我审批」） ---------- */
.app.mob-approval .sidebar,
.app.mob-approval .topbar{display:none}
.app.mob-approval .main{width:100%}
.app.mob-approval .content{padding:0;background:var(--grey-bg,#f5f6f8);overflow-y:auto}
.m-appr-top{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;
  padding:12px 16px;background:var(--side,#1f2a44);color:#fff;box-shadow:0 1px 6px rgba(0,0,0,.15)}
.m-appr-brand{display:flex;align-items:center;gap:10px}
.m-logo{width:32px;height:32px;border-radius:9px;background:var(--brand);color:#fff;display:flex;
  align-items:center;justify-content:center;font-weight:700;flex:0 0 auto}
.m-appr-tt strong{display:block;font-size:15px;line-height:1.2}
.m-appr-tt small{display:block;font-size:12px;color:#c7d0e0;margin-top:2px}
.m-appr-tools{display:flex;align-items:center;gap:10px}
.m-ico{width:34px;height:34px;border-radius:8px;border:1px solid rgba(255,255,255,.28);background:transparent;
  color:#fff;font-size:18px;line-height:1;cursor:pointer}
.m-out{padding:7px 12px;border-radius:8px;border:1px solid rgba(255,255,255,.28);background:transparent;
  color:#fff;font-size:13px;cursor:pointer}
.m-appr-body{padding:14px 14px 28px}
.m-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px;
  box-shadow:0 1px 3px rgba(16,24,40,.06)}
.m-card-head{display:flex;align-items:center;gap:8px}
.m-card-head .mono{font-size:13.5px;font-weight:600}
.m-card-title{margin-top:8px;font-size:14px;color:var(--ink,#1f2430);font-weight:600;word-break:break-all}
.m-card-meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;font-size:12.5px;color:var(--ink-4,#6b7280)}
.m-card-cmt{margin-top:8px;font-size:12.5px;color:var(--ink-2,#374151);background:#f7f8fa;border-radius:8px;
  padding:8px 10px;word-break:break-all}
.m-card-ops{display:flex;gap:8px;margin-top:12px}
.m-card-ops .btn{flex:1;justify-content:center}


/* ============================================================
   供货外部临时录入页（免登录 · 移动端优先）
   ============================================================ */
.ext-wrap{min-height:100vh;background:var(--bg);display:flex;flex-direction:column;
  align-items:center;justify-content:flex-start;padding:20px 16px 40px;box-sizing:border-box}
.ext-card{width:100%;max-width:480px;background:var(--card);border:1px solid var(--line);
  border-radius:16px;box-shadow:var(--shadow);padding:22px 18px;margin-top:8px}
.ext-title{font-size:20px;font-weight:700;color:var(--ink);text-align:center}
.ext-sub{font-size:13px;color:var(--ink-3);text-align:center;margin:6px 0 18px}
.ext-hint{font-size:12px;color:#d97706;margin-top:6px;line-height:1.5}
.ext-field{display:block;margin:0 0 18px}
.ext-field>span{display:block;font-size:13.5px;color:var(--ink-2);margin-bottom:8px;font-weight:600}
.ext-input{width:100%;box-sizing:border-box;height:56px;padding:0 14px;font-size:18px;
  border:1.5px solid var(--line);border-radius:12px;outline:none;color:var(--ink);background:#fff}
.ext-input:focus{border-color:var(--brand)}
.ext-photos{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ext-thumb{position:relative;width:84px;height:84px}
.ext-thumb img{width:84px;height:84px;object-fit:cover;border-radius:10px;border:1px solid var(--line);display:block}
.ext-del{position:absolute;top:-6px;right:-6px;width:22px;height:22px;line-height:18px;padding:0;
  border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--err);font-size:15px;cursor:pointer;z-index:2}
.ext-addbtn{display:inline-flex;align-items:center;justify-content:center;height:44px;padding:0 18px;
  border:1.5px dashed var(--line);border-radius:12px;color:var(--brand);font-size:14px;cursor:pointer;background:#fff}
.ext-submit{width:100%;height:54px;margin-top:6px;border:0;border-radius:12px;background:var(--brand);
  color:#fff;font-size:17px;font-weight:700;cursor:pointer}
.ext-submit:disabled{opacity:.6;cursor:default}
.ext-close{width:100%;height:48px;margin-top:12px;border:1.5px solid var(--line);border-radius:12px;
  background:#fff;color:var(--ink-2);font-size:15.5px;font-weight:600;cursor:pointer}
.ext-close:hover{border-color:var(--ink-4);color:var(--ink)}
.ext-closehint{margin-top:10px;font-size:12.5px;color:#d97706;line-height:1.7;text-align:center}
.ext-closehint:empty{display:none}
.ext-foot{margin-top:18px;font-size:12px;color:var(--ink-4);text-align:center}
.ext-err{font-size:40px;text-align:center;margin:24px 0 8px}
.ext-msg{font-size:15px;color:var(--ink-2);text-align:center;line-height:1.8;margin:0}
.ext-red{color:var(--err,#dc2626)!important;font-weight:700}
.ext-listcard{margin-top:8px}
.ext-listtitle{font-size:13.5px;color:var(--ink-2);margin-bottom:10px;font-weight:700;text-align:center}
.ext-listwrap{max-height:288px;overflow-y:auto;-webkit-overflow-scrolling:touch;border-radius:8px}
.ext-list{width:100%;border-collapse:collapse;font-size:12.5px}
.ext-list th,.ext-list td{border:1px solid var(--line);padding:7px 8px;text-align:left;word-break:break-all}
.ext-list th{background:#f2f4f8;color:var(--ink-2);font-weight:600;white-space:nowrap;
  position:sticky;top:0;z-index:1}
.ext-list tr.is-new td{background:#fff7ed}
.ext-newtag{display:inline-block;margin-left:4px;padding:0 5px;border-radius:4px;background:#f59e0b;
  color:#fff;font-size:11px;line-height:16px;vertical-align:1px;white-space:nowrap}
.ext-listmore{margin-top:8px;font-size:12px;color:var(--ink-4);text-align:center}
.ext-ops{text-align:center;white-space:nowrap}
.ext-delrec{padding:2px 9px;border:1px solid #f3c2b8;border-radius:6px;background:#fff5f3;
  color:var(--err,#dc2626);font-size:12.5px;line-height:20px;cursor:pointer}
.ext-delrec:disabled{opacity:.6;cursor:default}
.ext-lock{font-size:12px;color:var(--ink-4)}
.ext-empty{font-size:13px;color:var(--ink-4);text-align:center;padding:6px 0}
.ext-head{width:100%;max-width:480px;padding:12px 4px 0;box-sizing:border-box}
.ext-head .ext-sub{margin:6px 0 6px}
@media (min-width:520px){ .ext-card{padding:28px 30px} }


/* ---------- 过磅化验采录（独立页） + 编辑明细只读摘要 ---------- */
/* 弹窗（.modal 是 flex 纵向布局）：采录页要让左栏队列铺满高度，故 body 撑满 */
.modal-mask.modal-wb .modal{width:min(1180px,96vw)}
.modal-mask.modal-wb .modal-body{display:flex;flex-direction:column;min-height:0;padding:16px 20px 0}
.modal-mask.modal-wb .modal-body>div:last-child{margin-top:auto}

.wb-wrap{display:grid;grid-template-columns:186px minmax(0,1fr);gap:16px;align-items:start}

/* 左：待录队列 */
.wb-q{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.wb-q-head{display:flex;align-items:center;justify-content:space-between;gap:6px;
  padding:9px 11px;background:#f7f9fc;border-bottom:1px solid var(--line);font-size:12.5px}
.wb-q-head b{font-weight:600;color:var(--ink-2)}
.wb-q-head .muted{font-size:11.5px}
.wb-qi{display:grid;grid-template-columns:1fr auto;grid-template-areas:"no st" "meta st";
  gap:1px 6px;padding:8px 11px;border-bottom:1px solid var(--line-2);cursor:pointer;
  transition:background .13s}
.wb-qi:last-child{border-bottom:0}
.wb-qi:hover{background:#f5f9ff}
.wb-qi.on{background:var(--brand-soft,#eaf3ff);box-shadow:inset 3px 0 0 var(--brand)}
.wb-qi-no{grid-area:no;font-size:12.5px;font-weight:600;color:var(--ink)}
.wb-qi-meta{grid-area:meta;font-size:11.5px;color:var(--ink-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wb-qi-st{grid-area:st;align-self:center;font-size:12px}

/* 右：录入主区 */
.wb-main{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}
.wb-col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 12px}
.wb-cell{grid-column:1/-1}
.wb-row{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:9px;
  background:#f7f9fc;border:1px solid var(--line);font-size:13px}
.wb-row>span:first-child{color:var(--ink-2);font-size:12.5px}
.wb-row b{font-size:14px}
.wb-net{grid-column:1/-1;padding:7px 12px;border-radius:9px;background:#fbfcfe;
  border:1px dashed var(--line);font-size:12.5px;color:var(--ink-2);line-height:1.9}
.wb-net b{color:var(--ink);font-size:13.5px}
.wb-net .muted{font-size:11.5px}
.wb-ocr{border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  background:rgba(127,127,127,.035);min-height:200px}

/* 底部动作条（贴在 body 末尾，flex 的 auto 边距把它顶到最下） */
.wb-foot{position:sticky;bottom:0;display:flex;align-items:center;gap:8px;
  margin:14px -20px 0;padding:11px 20px;border-top:1px solid var(--line-2);background:#fafbfd}

/* 编辑明细：只读摘要 chip + 进度点 */
.wb-chips{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:8px}
.wb-chip{padding:7px 11px;border:1px solid var(--line);border-radius:9px;background:#fafbfd;
  display:flex;flex-direction:column;gap:2px;min-width:0}
.wb-chip i{font-style:normal;font-size:11.5px;color:var(--ink-4);white-space:nowrap}
.wb-chip b{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wb-steps{height:38px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.wb-dot{font-size:11.5px;padding:2px 9px;border-radius:999px;border:1px solid var(--line);
  color:var(--ink-4);background:#fff;white-space:nowrap}
.wb-dot.on{color:var(--brand);border-color:var(--brand);background:var(--brand-soft,#eaf3ff);font-weight:600}
.wb-dot.wb-dot-rej{color:var(--err,#dc2626);border-color:#f3c9c9;background:#fef2f2;font-weight:600}
.wb-bills{display:flex;gap:16px;flex-wrap:wrap}
.wb-bills>div{min-width:0}

@media (max-width:1100px){
  .wb-main{grid-template-columns:minmax(0,1fr)}
  .wb-ocr{min-height:0}
}
@media (max-width:860px){
  .wb-wrap{grid-template-columns:1fr}
  .wb-q{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
  .wb-q-head{grid-column:1/-1}
  .wb-col{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* 表格操作区的次级按钮（2026-10-19 选定方案 9）：
   白底 + 左侧主色色条 + 轻投影。与右上角「新建」同高同字号，
   靠色条和阴影立住「可点」，又不像实心按钮那样抢主按钮的视觉。 */
.btn-soft{background:#fff;border-color:#dbe6fb;color:var(--brand-dark,#164bd6);
  box-shadow:0 1px 2px rgba(22,75,214,.10),inset 3px 0 0 var(--brand,#1f5eff);
  padding-left:13px}
.btn-soft:hover:not(:disabled){background:#f7faff;border-color:#c3d7fa;
  box-shadow:0 2px 5px rgba(22,75,214,.16),inset 3px 0 0 var(--brand,#1f5eff)}
td.ops .ops-btn{vertical-align:middle;margin-right:10px}

/* 带单位后缀的输入框：单位常显在框内右侧，输入框只留数字，读起来更干净 */
.fld-u{position:relative;display:block}
.fld-u>input{padding-right:46px}
.fld-u>i{position:absolute;right:11px;top:50%;transform:translateY(-50%);
  font-style:normal;font-size:12px;color:var(--ink-4);pointer-events:none;white-space:nowrap}
.wb-col .fld-u>input{padding-right:34px}
.wb-col .fld-u>i{right:9px;font-size:11.5px}

/* ---- 两步式「选择采购明细」（结算 / 对账第一步） ---- */
.pk-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.pk-sel{height:32px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:13px;color:var(--ink-2);min-width:148px}
.pk-kw{height:32px;padding:0 11px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:13px;min-width:200px;flex:1;max-width:320px}
.pk-sum{font-size:12px;color:var(--brand-dark,#164bd6);margin-left:auto}
.pk-tag{display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;background:#fff4e5;color:#b45309;font-size:11px;line-height:16px;border:1px solid #f5d6ac}
tr.pk-off>td{background:#f7f8fa;color:var(--ink-4)}
tr.pk-off>td .badge{opacity:.55}
tr.pk-lack>td{background:#fffdf3}

/* ============================================================
   采购追踪看板（tracking.js）
   一个方块 = 一箱/一车；颜色按阶段，填充属性区分「未定稿 / 在厂 / 在途 / 已归档」
   ============================================================ */
.trk-card{padding:16px 18px}
.trk-filter{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:14px}
.trk-filter label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-3)}
.trk-filter select,.trk-filter input{height:34px;padding:0 10px;border:1px solid var(--line);
  border-radius:8px;background:#fff;font-size:13px;color:var(--ink);font-family:inherit;min-width:130px}
.trk-filter select:focus,.trk-filter input:focus{outline:none;border-color:var(--brand)}
.trk-filter .grow{flex:1;min-width:240px}
.trk-filter .grow input{width:100%}
.trk-tip{font-size:11.5px;color:var(--ink-4);margin-left:auto;padding-bottom:7px}

.trk-stats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.trk-chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 9px;border-radius:999px;
  border:1px solid var(--line);background:#fff;font-size:11.5px;color:var(--ink-2);cursor:pointer;
  transition:border-color .15s,background .15s}
.trk-chip b{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.trk-chip:hover{border-color:#c9d2e0;background:#fafbfd}
.trk-chip.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-dark)}
.trk-chip.off{opacity:.55}
.trk-chip.sum{cursor:default;background:var(--grey-bg);color:var(--ink-3)}
.trk-chip.warn{border-color:#f3c9c9;background:var(--err-bg);color:var(--err)}
.trk-miss{font-style:normal;font-size:11px;color:var(--ink-4)}
.trk-chip.warn b{color:var(--err)}

.trk-board{display:grid;grid-template-columns:minmax(215px,245px) minmax(175px,215px) minmax(0,1fr);gap:12px;align-items:start}
.trk-zone{border:1px solid var(--line);border-radius:12px;background:#fbfcfe;padding:10px 12px 12px}
.trk-zone>header{display:flex;justify-content:space-between;align-items:baseline;gap:8px;
  margin:0 -2px 8px;padding-bottom:7px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.trk-zone>header b{font-size:13px;color:var(--ink)}
.trk-zone>header span{font-size:11.5px;color:var(--ink-4);font-variant-numeric:tabular-nums}
.z-road{background:#fffdf7;border-color:#f3e3c6}
.z-site{background:#fbfcfd}
.trk-piles{display:grid;gap:8px}
.z-site .trk-piles{grid-template-columns:repeat(5,minmax(0,1fr))}

.trk-pile{border:1px dashed var(--line);border-radius:10px;padding:6px 8px 8px;min-height:66px;
  background:#fff;transition:opacity .2s,border-color .2s,box-shadow .2s}
.trk-pile.empty{opacity:.5}
.trk-pile.dim{opacity:.25}
.trk-pile.focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft);opacity:1}
.trk-ph{display:flex;justify-content:space-between;align-items:center;gap:6px;margin-bottom:6px;
  font-size:12px;color:var(--ink-2)}
.trk-ph>span{display:inline-flex;align-items:center;gap:5px;min-width:0}
.trk-cnt{padding:0 6px;border-radius:999px;background:var(--grey-bg);color:var(--ink-2);
  font-size:11px;line-height:17px;font-variant-numeric:tabular-nums}
.trk-none{font-size:11px;color:var(--ink-4)}
.trk-boxes{display:flex;flex-wrap:wrap;gap:5px}

.trk-b{position:relative;width:54px;height:38px;padding:0;border:1px solid;border-radius:5px;
  background:transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:1px;font-family:inherit;line-height:1.05;overflow:hidden;
  transition:transform .15s,box-shadow .15s}
.trk-b:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(16,24,40,.16);z-index:3}
.trk-b:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
.trk-b.k-bulk{border-radius:14px}
.trk-tag{font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.2px}
.trk-q{font-style:normal;font-size:9.5px;opacity:.78;font-variant-numeric:tabular-nums}
/* 运输方式图标（在途方块）：与天数左右布置，尺寸≈天数字高（9.5px 字 → 10px 图标） */
.trk-ico{display:inline-flex;width:10px;height:10px;vertical-align:-1.5px;margin-right:2px}
.trk-ico svg{width:100%;height:100%;fill:currentColor;display:block}
.trk-seq{position:absolute;right:2px;top:0;font-style:normal;font-size:8.5px;opacity:.55}
.trk-b.late{border-color:var(--err)}
.trk-b.late::after{content:"";position:absolute;right:3px;top:3px;width:5px;height:5px;
  border-radius:50%;background:var(--err);box-shadow:0 0 0 2px #fff}
.trk-more{align-self:center;height:38px;padding:0 7px;border:1px dashed #c9d2e0;border-radius:6px;
  background:#fff;color:var(--ink-3);font-size:11px;cursor:pointer;font-family:inherit}
.trk-more:hover{border-color:var(--brand);color:var(--brand)}

/* 阶段色：底色 + 描边 + 填充属性（虚线=未定稿、斜纹=在途、实心=在厂/在客户） */
.trk-dot{width:8px;height:8px;border-radius:2px;border:1px solid;background:#fff;flex:0 0 auto}
.st-supply{background-color:#f2f1ec;border-color:#8a8a82;border-style:dashed;
  background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.05) 0 2px,transparent 2px 6px)}
.st-pack{background-color:#e6f1fb;border-color:#378add}
.st-transit{background-color:#faeeda;border-color:#ba7517;
  background-image:repeating-linear-gradient(-45deg,rgba(186,117,23,.14) 0 2px,transparent 2px 7px)}
.st-weigh{background-color:#e1f5ee;border-color:#1d9e75}
.st-lab{background-color:#eeedfe;border-color:#7f77dd}
.st-settle{background-color:#eaf3de;border-color:#639922}
.st-recon{background-color:#faece7;border-color:#d85a30}
.st-done{background-color:#e7e7e2;border-color:#5f5e5a;opacity:.82;border-style:solid}
.st-reject{background-color:#fcebeb;border-color:#dc2626;border-style:dashed}
.trk-dot.st-supply,.trk-dot.st-pack,.trk-dot.st-transit,.trk-dot.st-weigh,
.trk-dot.st-lab,.trk-dot.st-settle,.trk-dot.st-recon,.trk-dot.st-done,.trk-dot.st-reject{background-color:currentColor}

/* 动效：在途轻微呼吸；新方块淡入；方块换堆由 JS FLIP 平移 */
@media (prefers-reduced-motion:no-preference){
  .z-road .trk-b{animation:trkRoad 3.6s ease-in-out infinite}
  .trk-b.trk-in{animation:trkIn .5s ease-out}
}
@keyframes trkRoad{0%,100%{transform:translateX(0)}50%{transform:translateX(2px)}}
@keyframes trkIn{from{opacity:0;transform:scale(.86)}to{opacity:1;transform:scale(1)}}

/* 详情弹窗 */
.trk-detail-head{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid;
  border-radius:10px}
.trk-detail-head>div{display:flex;flex-direction:column;gap:2px}
.trk-detail-head b{font-size:14px;color:var(--ink)}
.trk-detail-head span:not(.trk-detail-tag){font-size:12px;color:var(--ink-3)}
.trk-detail-tag{display:inline-flex;align-items:center;justify-content:center;width:56px;height:40px;
  border-radius:6px;background:rgba(255,255,255,.72);font-size:12.5px;font-weight:600;
  font-variant-numeric:tabular-nums;color:var(--ink)}
.trk-tl{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);display:grid;gap:6px}
.trk-tl-item{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2)}
.trk-tl-item i{width:6px;height:6px;border-radius:50%;background:var(--brand);flex:0 0 auto}
.trk-tl-item b{font-weight:500;color:var(--ink-3);min-width:80px}
.trk-tl-item span{font-variant-numeric:tabular-nums;color:var(--ink-2)}

/* 经营标识：库 / 票 / 款 三枚小标（只挂在客户现场的块上，工厂/在途保持原样） */
.trk-b.has-st{height:52px}
/* 在途块只挂「款」一枚（预付已付常发生在到货前），比三枚略矮，看板不臃肿 */
.trk-b.has-pay{height:46px}
/* 报警设置弹窗 */
.trk-cfg{display:grid;gap:10px}
.trk-cfg-tip{font-size:12.5px;color:var(--ink-4);line-height:1.65}
.trk-cfg label{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-2)}
.trk-cfg input{width:96px;height:32px;padding:0 8px;border:1px solid var(--line);border-radius:6px;
  font-family:inherit;font-size:13px;color:var(--ink);background:#fff}
.trk-cfg input:disabled{background:var(--grey-bg);color:var(--ink-4)}
.trk-cfg-min{font-style:normal;font-size:10.5px;opacity:.72;margin-left:4px}
/* 详情里的采购单号超链接 */
.trk-polink{color:var(--brand);text-decoration:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  border-bottom:1px dashed rgba(31,94,255,.42);cursor:pointer}
.trk-polink:hover{color:var(--brand-dark);border-bottom-style:solid}
.trk-st{display:flex;justify-content:center;gap:2px;margin-top:2px;line-height:1}
.trk-st i{width:14px;height:12px;border-radius:3px;font-style:normal;font-size:8.5px;font-weight:600;
  line-height:12px;text-align:center;color:#fff;background:#c9ced8}
.trk-st i.tm-ok{background:var(--ok)}
.trk-st i.tm-mid{background:var(--warn)}
.trk-st i.tm-bad{background:var(--err)}
.trk-st i.tm-out{background:#1f6fb2}
.trk-st i.tm-info{background:#5b8fd6}
.trk-st i.tm-off{background:#e3e6eb;color:#8b93a1}

/* 经营待办条：与阶段统计分开一行，点了即筛 */
.trk-todo{margin-top:-6px;padding-top:8px;border-top:1px dashed var(--line)}
.trk-td-label{font-size:11.5px;color:var(--ink-4);align-self:center;margin-right:2px}
.trk-chip.td{cursor:pointer}
.trk-chip.td.warn{border-color:#f3d3b4;background:var(--warn-bg);color:var(--warn)}
.trk-chip.td.warn b{color:var(--warn)}
.trk-chip.td.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-dark)}

/* 详情里的经营状态块 */
.trk-biz{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);display:grid;gap:7px}
.trk-biz-h{font-size:12px;color:var(--ink-4);display:flex;align-items:center;gap:6px}
.trk-biz-h .trk-bz{height:18px;min-width:44px;font-size:11px}
.trk-biz-pay{margin-top:10px}
/* 过磅 / 化验数据组：名称在左、数值靠右同一行，压行数 */
.trk-gr{display:flex;align-items:baseline;gap:10px;font-size:12.5px;line-height:1.9;color:var(--ink-2)}
.trk-gr b{font-weight:500;color:var(--ink-3);flex:0 1 auto;min-width:0}
.trk-gr span{margin-left:auto;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums;word-break:break-word}
.trk-pay{display:grid;gap:4px;margin-top:2px}
.trk-pay-row{display:grid;grid-template-columns:104px 92px minmax(0,1fr);align-items:baseline;gap:8px;
  font-size:12.5px;color:var(--ink-2)}
.trk-pay-row b{font-weight:500;color:var(--ink-3)}
.trk-pay-row em{font-style:normal;text-align:right;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.trk-pay-row i{font-style:normal;font-size:11.5px;color:var(--ink-4);word-break:break-word}
.trk-pay-row.owe em,.trk-pay-row.owe i{color:var(--err)}
.trk-pay-none{font-size:12.5px;color:var(--ink-4)}
.trk-biz-row{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:var(--ink-2)}
.trk-biz-row>b{font-weight:500;color:var(--ink-3);min-width:52px;flex:0 0 auto;line-height:20px}
.trk-bz{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:48px;height:20px;
  padding:0 6px;border-radius:4px;font-size:11.5px;font-weight:600;color:#fff;background:#c9ced8}
.trk-bz.m-ok{background:var(--ok)}
.trk-bz.m-mid{background:var(--warn)}
.trk-bz.m-bad{background:var(--err)}
.trk-bz.m-out{background:#1f6fb2}
.trk-bz.m-info{background:#5b8fd6}
.trk-bz.m-off{background:var(--grey-bg);color:var(--ink-4)}
.trk-biz-row>em{font-style:normal;flex:1;min-width:0;line-height:1.7;word-break:break-word}
.trk-owe{color:var(--err)}

@media (max-width:1180px){
  .trk-board{grid-template-columns:1fr;gap:10px}
  .z-site .trk-piles{grid-template-columns:repeat(5,minmax(0,1fr))}
}
@media (max-width:820px){
  .z-site .trk-piles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .trk-tip{margin-left:0}
  .trk-b{width:50px;height:36px}
}

/* ================= 表格窄屏适配（2026-10-20） =================
   统一在 util.js 的 U.fitTable 里做列显隐与「更多」折叠，这里只管样式：
   · 操作列 sticky 右侧 —— 宽表横向滚动时永远看得到、点得到
   · 列设置按钮 / 列设置面板 / 次要操作浮层
   · 窄屏表格与工具条的整体收紧 */
table.grid th.ops, table.grid td.ops{position:sticky;right:0;z-index:2;
  box-shadow:-14px 0 14px -10px rgba(16,24,40,.32)}
table.grid thead th.ops{z-index:4;background:#fafbfd}
table.grid tbody td.ops{background:#fff}
table.grid tbody tr:hover td.ops{background:#fafbfd}
table.grid tbody tr.subs td.ops{background:#f6f8fb}
table.grid tfoot td.ops{background:#fafbfd}
table.grid td.ops .ops-more{color:var(--ink-3)}
table.grid td.ops .ops-more::after{content:" ▾";font-size:9px;opacity:.7}

.ops-pop{position:fixed;z-index:9000;display:none;min-width:152px;max-width:260px;padding:6px;
  background:#fff;border:1px solid var(--line);border-radius:10px;
  box-shadow:0 14px 34px rgba(16,24,40,.2)}
.ops-pop.on{display:block}
.ops-pop .btn-link{display:block;width:100%;text-align:left;margin:0;padding:9px 10px;
  border-radius:7px;font-size:13px;white-space:nowrap}
.ops-pop .btn-link:hover{background:var(--grey-bg,#f5f6f8)}
.ops-pop .btn-link+.btn-link{margin-left:0}

.colset-btn{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.colset-ico{font-size:12px;opacity:.65;line-height:1}
.colset{font-size:13.5px;color:var(--ink-2);line-height:1.7}
.colset-tip{color:var(--ink-3);font-size:12.5px;line-height:1.75;margin-bottom:10px}
.colset-tools{display:flex;gap:16px;margin-bottom:6px;border-bottom:1px dashed var(--line);
  padding-bottom:8px}
.colset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(146px,1fr));gap:2px 10px;
  max-height:54vh;overflow:auto;padding:2px 2px 4px}
.colset-it{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:7px;
  cursor:pointer;font-size:13px;overflow:hidden}
.colset-it span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.colset-it:hover{background:var(--grey-bg,#f5f6f8)}
.colset-it.locked{opacity:.5;cursor:default}
.colset-it input{width:15px;height:15px;accent-color:var(--brand);flex:0 0 auto}

@media (max-width:960px){
  table.grid{font-size:12.8px}
  table.grid th{padding:9px 9px;font-size:12px}
  table.grid td{padding:9px 9px}
  table.grid tfoot td{padding:9px 9px}
  table.grid td.ops .btn-link+.btn-link{margin-left:8px}
}
@media (max-width:820px){
  .card-head{padding:12px 13px;gap:10px}
  .card-body{padding:13px}
  .page-head{margin-bottom:12px;gap:10px}
  .page-head h2{font-size:16.5px}
  .page-head .desc{font-size:12px;line-height:1.7}
  .filters{width:100%;gap:8px}
  .filters .field{flex:1 1 calc(50% - 4px);min-width:0}
  .filters .field>span{font-size:11.5px}
  .filters input,.filters select{height:34px;padding:0 9px;font-size:12.8px}
  .stats{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:13px}
  .stat{padding:12px 13px}
  .stat .val{font-size:19px;margin-top:6px}
  .stat .lbl,.stat .foot{font-size:11.5px}
  /* 页签：窄屏可横滑，不再挤压成两行 */
  .tabs{gap:16px;margin-bottom:16px;overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab{white-space:nowrap;font-size:13px}
  .pager{flex-wrap:wrap;gap:8px}
  .modal-head{padding:14px 15px}
  .modal-body{padding:14px 15px}
  .modal-foot{padding:12px 15px;flex-wrap:wrap;gap:8px}
  .modal-foot .btn{flex:1 1 auto;min-width:0}
  .list-tools{justify-content:flex-start}
}

/* ============================================================
   财务分析（pages/finance.js）
   资金托盘口径的图表与比率面板，颜色沿用全站变量
   ============================================================ */
.fin-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fin-seg{display:inline-flex;background:var(--grey-bg);border-radius:8px;padding:3px}
.fin-seg-i{border:0;background:none;padding:6px 11px;border-radius:6px;cursor:pointer;
  font-size:12.5px;color:var(--ink-3);white-space:nowrap}
.fin-seg-i:hover{color:var(--ink-2)}
.fin-seg-i.on{background:#fff;color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.12)}
.fin-date{height:30px;padding:0 8px;border:1px solid var(--line);border-radius:7px;
  font-size:12.5px;color:var(--ink-2);background:#fff;outline:none}
.fin-date:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.fin-warn{margin:0 0 14px;padding:10px 13px;border-radius:8px;font-size:12.5px;
  background:var(--warn-bg);color:#8a6200;border:1px solid #f3e0be}

/* 图表容器：SVG 基准宽固定在图内（800~1000），宽屏不再被拉满整行后高度翻倍；
   靠 max-width + 居中留白，保持 1:1 左右的清晰度与紧凑高度 */
.fin-chart{padding:10px 12px 6px}
.fin-svg{display:block;width:100%;height:auto;margin:0 auto}

.fin-legend{display:flex;gap:14px;font-size:12px;color:var(--ink-3);flex-wrap:wrap}
.fin-legend span{display:inline-flex;align-items:center;gap:5px}
.fin-legend i{width:9px;height:9px;border-radius:2px;display:inline-block}

.fin-2col{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}

/* 比率列表：键左值右，行间距紧凑 */
.fin-ratios{display:flex;flex-direction:column}
.fin-row{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:10px;
  padding:9px 0;border-bottom:1px dashed var(--line-2)}
.fin-row:last-child{border-bottom:0}
.fin-row-k{font-size:12.8px;color:var(--ink-3)}
.fin-row-v{font-size:13.5px;font-weight:600;font-variant-numeric:tabular-nums;text-align:right;
  font-feature-settings:"tnum"}
.fin-row-v.ok{color:var(--ok)}
.fin-row-v.warn{color:var(--warn)}
.fin-row-v.err{color:var(--err)}
.fin-row-h{grid-column:1 / -1;font-size:11.5px;color:var(--ink-4);margin-top:-4px;padding-bottom:2px}

/* 占用构成：横向条 */
.fin-br{margin-bottom:14px}
.fin-br-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  font-size:12.8px;color:var(--ink-3);margin-bottom:6px}
.fin-br-top b{font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums}
.fin-br-bar{height:8px;border-radius:4px;background:var(--grey-bg);overflow:hidden}
.fin-br-bar i{display:block;height:100%;border-radius:4px;background:var(--brand);
  transition:width .5s ease}
.fin-br-bar i.ok{background:var(--ok)}
.fin-br-bar i.warn{background:var(--warn)}
.fin-br-bar i.err{background:var(--err)}
.fin-br-hint{font-size:11.5px;color:var(--ink-4);margin-top:5px}
.fin-br-sum{border-top:1px solid var(--line);padding-top:13px;margin-top:4px}
.fin-br-sum .fin-br-top span{font-size:13px;color:var(--ink-2);font-weight:600}
.fin-br-sum .fin-br-top b{font-size:17px;color:var(--brand)}
.fin-kv{display:flex;justify-content:space-between;gap:10px;padding:7px 0;font-size:12.5px;
  color:var(--ink-3);border-bottom:1px dashed var(--line-2)}
.fin-kv:last-child{border-bottom:0}
.fin-kv b{color:var(--ink-2);font-variant-numeric:tabular-nums}

/* 应收账龄 */
.fin-age{display:flex;flex-direction:column;gap:12px}
.fin-age-row{display:grid;grid-template-columns:70px 1fr 108px;align-items:center;gap:10px}
.fin-age-l{font-size:12.5px;color:var(--ink-3)}
.fin-age-bar{height:10px;border-radius:5px;background:var(--grey-bg);overflow:hidden}
.fin-age-bar i{display:block;height:100%;border-radius:5px;background:var(--line);
  transition:width .5s ease}
.fin-age-bar i.ok{background:#7ac8a4}
.fin-age-bar i.warn{background:var(--warn)}
.fin-age-bar i.err{background:var(--err)}
.fin-age-v{text-align:right;font-size:12.5px;font-variant-numeric:tabular-nums;color:var(--ink-2)}
.fin-age-foot{border-top:1px solid var(--line);padding-top:11px;font-size:12.5px;color:var(--ink-3)}
.fin-badge{font-size:12px;color:var(--ink-3);background:var(--grey-bg);
  padding:3px 9px;border-radius:20px;white-space:nowrap}

.fin-tag{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:20px;
  background:var(--grey-bg);color:var(--ink-3);white-space:nowrap}
.fin-tag.ok{background:var(--ok-bg);color:var(--ok)}
.fin-tag.warn{background:var(--warn-bg);color:#8a6200}

/* 预付 / 尾款拆分表 */
.fin-split th,.fin-split td{white-space:nowrap}
.fin-split .fin-note{font-size:12px;color:var(--ink-4);white-space:normal;min-width:190px;line-height:1.6}
.fin-sumrow td{background:#fafbfd;border-top:1px solid var(--line)}
.fin-chain{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:14px;
  padding:11px 13px;border-radius:8px;background:#f7f9fc;font-size:12.8px;color:var(--ink-3)}
.fin-chain b{color:var(--ink);font-variant-numeric:tabular-nums}
.fin-chain i{color:var(--ink-4);font-style:normal}

/* 参数弹窗 */
.fin-cfg{display:flex;flex-direction:column;gap:14px}
.fin-cfg label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink-2);font-weight:500}
.fin-cfg input{height:40px;padding:0 12px;border:1px solid var(--line);border-radius:8px;
  font-size:14px;color:var(--ink);background:#fff;outline:none}
.fin-cfg input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.fin-cfg input:disabled{background:var(--grey-bg);color:var(--ink-4)}
.fin-cfg-tip{font-size:12px;color:var(--ink-4);line-height:1.75;
  background:#f7f9fc;border-radius:8px;padding:10px 12px}

@media (max-width:960px){
  .fin-2col{grid-template-columns:1fr;gap:12px}
  .fin-acts{width:100%}
  .fin-seg{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%}
  .fin-seg::-webkit-scrollbar{display:none}
  .fin-seg-i{padding:6px 9px;font-size:12px}
  .fin-date{flex:1 1 40%;min-width:0}
  .fin-row{padding:8px 0}
  .fin-age-row{grid-template-columns:62px 1fr 94px;gap:8px}
  .fin-age-v{font-size:12px}
}
