:root{
  /* ---- 品牌 / 状态色 ---- */
  --blue:#1a5fd0;
  --blue-d:#14499f;
  --blue-l:#e8f0fd;
  --blue-b:#cfe0fb;
  --red:#d93a3a;
  --green:#0f9d58;
  /* ---- 文字 ---- */
  --ink:#1c2330;
  --ink-1:#333c4d;
  --ink-2:#5a6577;
  --ink-3:#9aa3b2;
  /* ---- 线条 / 面 ---- */
  --line:#e3e8f0;
  --line-2:#d5dde8;
  --bd:#e3e8f0;
  --bg:#f4f6fa;
  --panel:#ffffff;
  --surface:#ffffff;
  --surface-2:#f7f9fc;
  --surface-3:#eef1f6;
  --surface-hover:#fafbfe;
  /* ---- 语义文字色（用于卡片/表格里的强调数字） ---- */
  --v-blue:#1d4ed8;
  --v-slate:#475569;
  --v-green:#047857;
  --v-orange:#c2410c;
  --v-amber:#a36905;
  --v-cyan:#0e7490;
  --v-red:#b91c1c;
  --v-teal:#0f766e;
  --v-rose:#be123c;
  --v-violet:#6d28d9;
  --v-purple:#8e44ad;
  /* ---- 柔和 Chip 底色 ---- */
  --bg-red-soft:#fdeeee;
  --bg-green-soft:#e9f7ef;
  --bg-amber-soft:#fdf3e0;
  --bg-purple-soft:#f0e9fd;
  --bd-red:#f1c0c0;
  --bd-green:#c8e8d4;
  --bd-amber:#f0d9ac;
  --bd-purple:#ddccf5;
  /* ---- 遮罩 / toast / 顶栏 ---- */
  --mask:rgba(16,24,40,.45);
  --toast-bg:rgba(28,35,48,.94);
  --toast-err:rgba(185,40,40,.95);
  --toast-warn:rgba(176,104,16,.96);
  --topbar-a:#14499f;
  --topbar-b:#1a5fd0;
  --topbar-c:#2f7ae0;
  --topbar-shadow:rgba(20,73,159,.18);
  --radius:6px;
  color-scheme:light;
}

/* ================= 暗色主题 ================= */
[data-theme="dark"]{
  --blue:#6ea8ff;
  --blue-d:#3d82e8;
  --blue-l:#1b2942;
  --blue-b:#2f4570;
  --red:#ff7b7b;
  --green:#4ad28f;
  --ink:#e4eaf3;
  --ink-1:#cdd6e3;
  --ink-2:#939fb2;
  --ink-3:#6b7688;
  --line:#2b3646;
  --line-2:#3a4759;
  --bd:#2b3646;
  --bg:#11161f;
  --panel:#1a2130;
  --surface:#1a2130;
  --surface-2:#202a3a;
  --surface-3:#293343;
  --surface-hover:#243044;
  --v-blue:#8ab4ff;
  --v-slate:#a8b3c4;
  --v-green:#4ade80;
  --v-orange:#fb923c;
  --v-amber:#fbbf24;
  --v-cyan:#38bdf8;
  --v-red:#ff8080;
  --v-teal:#2dd4bf;
  --v-rose:#fb7185;
  --v-violet:#a78bfa;
  --v-purple:#c084fc;
  --bg-red-soft:#3a1f22;
  --bg-green-soft:#16332a;
  --bg-amber-soft:#3a2d15;
  --bg-purple-soft:#2c2440;
  --bd-red:#5c2f33;
  --bd-green:#2c5343;
  --bd-amber:#5c4622;
  --bd-purple:#463a63;
  --mask:rgba(0,0,0,.66);
  --toast-bg:rgba(38,48,64,.96);
  --toast-err:rgba(153,27,27,.96);
  --toast-warn:rgba(146,84,12,.96);
  --topbar-a:#12233f;
  --topbar-b:#1b3a6b;
  --topbar-c:#25508f;
  --topbar-shadow:rgba(0,0,0,.45);
  color-scheme:dark;
}
/* 暗色下把纯白图片的观感压一档，避免刺眼 */
[data-theme="dark"] img{filter:brightness(.9)}
/* 打印用的对账单/单据样式始终浅色，不受主题影响 */
[data-theme="dark"] .sheet-bill,
[data-theme="dark"] .sheet,
[data-theme="dark"] .sheet-list{background:#fff;color:#000}
*{box-sizing:border-box;margin:0;padding:0}
/* hidden 属性必须最高优先级：否则 .mask{display:flex} 等会盖掉它，导致弹窗默认显示 */
[hidden]{display:none !important}
body{
  font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;
}
/* ---------- 顶栏 ---------- */
.topbar{
  height:64px;background:linear-gradient(90deg,var(--topbar-a),var(--topbar-b));
  display:flex;align-items:center;justify-content:space-between;
  padding:0 24px;color:#fff;box-shadow:0 2px 8px var(--topbar-shadow);
}
.brand{display:flex;align-items:center;gap:12px}
.logo{
  width:40px;height:40px;border-radius:8px;background:rgba(255,255,255,.16);
  border:1px solid rgba(255,255,255,.35);display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:14px;letter-spacing:.5px;
}
.brand-text h1{font-size:19px;font-weight:700;letter-spacing:1px}
.brand-text p{font-size:12px;opacity:.85;margin-top:2px}
.sync-bar{display:flex;align-items:center;gap:10px;font-size:13px}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.dot.on{background:#4ade80;box-shadow:0 0 0 3px rgba(74,222,128,.25)}
.dot.off{background:#f87171;box-shadow:0 0 0 3px rgba(248,113,113,.2)}
.dot.wait{background:#fbbf24;box-shadow:0 0 0 3px rgba(251,191,36,.25)}

/* ---------- 按钮 ---------- */
.btn{
  border:1px solid var(--line);background:var(--surface);color:var(--ink);
  padding:7px 14px;border-radius:var(--radius);cursor:pointer;font-size:13px;
  font-family:inherit;transition:.15s;white-space:nowrap;
}
.btn:hover{border-color:var(--blue);color:var(--blue)}
.btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn-primary:hover{background:var(--blue-d);border-color:var(--blue-d);color:#fff}
.btn-danger{background:var(--red);border-color:var(--red);color:#fff}
.btn-danger:hover{background:#b82d2d;color:#fff}
.btn-ok{background:var(--bg-green-soft);border-color:var(--green);color:var(--green)}
.btn-ok:hover{border-color:var(--green);color:var(--green)}
.btn-ghost{background:var(--surface);border-color:var(--line-2);color:var(--ink)}
.btn-ghost:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-l)}
.topbar .btn-ghost{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.4);color:#fff}
.topbar .btn-ghost:hover{background:rgba(255,255,255,.26);color:#fff;border-color:#fff}
.btn-mini{padding:4px 9px;font-size:12px}
.btn-link{border:none;background:none;color:var(--blue);cursor:pointer;font-size:13px;padding:2px 6px;font-family:inherit}
.btn-link:hover{text-decoration:underline}
.btn-link.red{color:var(--red)}

/* ---------- Tab ---------- */
.tabs{background:var(--surface);border-bottom:1px solid var(--line);padding:0 24px;display:flex;gap:4px;flex-wrap:wrap}
.tab{
  border:none;background:none;padding:13px 20px;font-size:14px;cursor:pointer;
  color:var(--ink-2);border-bottom:2px solid transparent;font-family:inherit;
}
.tab:hover{color:var(--blue)}
.tab.active{color:var(--blue);border-bottom-color:var(--blue);font-weight:600}
/* 20261014j 页签防闪现：JS 权限裁定前隐藏所有数据页签（visibility 保持占位不跳动），
 * applyRoleTabs 裁定后对可见页签逐一放行——普通用户刷新时不再看到无权限页签闪 1~2 秒 */
.tab[data-view]{visibility:hidden}

/* ---------- 状态标签（仓库管理 / 生产单 / 成品入库） ---------- */
.st-pill{display:inline-block;padding:1px 9px;border-radius:10px;font-size:12px;line-height:19px;white-space:nowrap}
.st-ok{background:var(--bg-green-soft);color:var(--v-green)}
.st-warn{background:var(--bg-amber-soft);color:var(--v-amber)}
.st-red{background:var(--bg-red-soft);color:var(--v-red);font-weight:700}
.st-blue{background:var(--blue-l);color:var(--v-blue)}
.st-gray{background:var(--surface-3);color:var(--ink-2)}
.num-strong{font-weight:700}
.num-strong.is-red{color:var(--v-red)}
.num-strong.is-warn{color:var(--v-amber)}
.wh-flow{font-size:12px;color:var(--ink-2)}

/* ---------- 布局 ---------- */
.wrap{padding:20px 24px 60px;max-width:1500px;margin:0 auto}
.view{display:none}
.view.active{display:block}

/* ---------- 统计卡 ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:16px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 18px}
.card-label{font-size:12px;color:var(--ink-2)}
.card-value{font-size:24px;font-weight:700;color:var(--blue);margin-top:6px;font-variant-numeric:tabular-nums}

/* ---------- 工具条 ---------- */
.toolbar{
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 14px;
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px;
}
.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tilde{color:var(--ink-2)}
.toolbar-right{margin-left:auto;display:flex;gap:8px}
.ipt{
  border:1px solid var(--line);border-radius:var(--radius);padding:7px 10px;
  font-size:13px;font-family:inherit;color:var(--ink);background:var(--surface);outline:none;
}
.ipt:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-l)}
.grow{flex:1;min-width:200px}

/* ---------- 表格 ---------- */
.table-wrap{background:var(--surface);border:1px solid var(--line);border-radius:8px;overflow:auto}
.grid{width:100%;border-collapse:collapse;font-size:13px}
.grid th,.grid td{border:1px solid var(--line);border-width:0 1px 1px 0;padding:9px 10px;text-align:left;vertical-align:middle}
.grid th:first-child,.grid td:first-child{border-left:1px solid var(--line)}
.grid thead th{border-top:1px solid var(--line)}
.grid thead th{background:var(--surface-2);font-weight:600;color:var(--ink-2);white-space:nowrap;position:sticky;top:0;z-index:2}
.grid tbody tr:hover{background:var(--surface-hover)}
.grid td.num,.grid th.num{text-align:right;font-variant-numeric:tabular-nums}
/* 可排序表头：点击切换升序 / 降序 / 取消 */
.grid th.sortable{cursor:pointer;user-select:none}
.grid th.sortable:hover{color:var(--brand);background:var(--surface-hover)}
.grid th .sort-ind{display:inline-block;margin-left:4px;font-size:10px;line-height:1;opacity:.35}
.grid th.sort-asc,.grid th.sort-desc{color:var(--brand)}
.grid th.sort-asc .sort-ind,.grid th.sort-desc .sort-ind{opacity:1}
.ipt-cell{width:100%;border:none;background:transparent;font-size:13px;font-family:inherit;color:var(--ink);outline:none;padding:0}
.empty{padding:46px 0;text-align:center;color:var(--ink-2);font-size:13px}
.expand{cursor:pointer;color:var(--ink-2);user-select:none;display:inline-block;width:16px}
.detail-row td{background:var(--surface-2);padding:0}
.detail-inner{padding:10px 16px 14px 46px}
.detail-table{width:100%;border-collapse:collapse;font-size:13px}
.detail-table th,.detail-table td{border:1px solid var(--line);padding:6px 10px;text-align:left}
.detail-table th{background:var(--surface-3);color:var(--ink-2);font-weight:600}
.ops{display:flex;gap:2px 4px;flex-wrap:wrap;white-space:nowrap;align-items:center}
/* 出库日期（明细展开行顶部） */
.ship-date{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.detail-meta{font-size:12px;color:var(--ink-2);margin-bottom:6px;font-variant-numeric:tabular-nums}
.foot-sum{padding:12px 4px;font-size:13px;color:var(--ink-2)}
.foot-sum b{color:var(--blue);font-size:15px;font-variant-numeric:tabular-nums}

/* 分页控件（各表列表底部） */
.pager{display:flex;align-items:center;justify-content:center;gap:14px;padding:10px 4px;flex-wrap:wrap}
.pager:empty{display:none}
.pg-info{font-size:13px;color:var(--ink-2)}
.pg-btns{display:inline-flex;align-items:center;gap:4px}
.pg-btn{min-width:32px;height:30px;padding:0 8px;border:1px solid var(--line-2);background:var(--surface);border-radius:6px;color:var(--ink);font-size:14px;cursor:pointer;line-height:1;transition:all .15s}
.pg-btn:hover:not(:disabled){border-color:var(--blue);color:var(--blue);background:var(--blue-l)}
.pg-btn:disabled{opacity:.38;cursor:not-allowed}
.pg-cur{min-width:32px;height:30px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;background:var(--blue);color:#fff;font-size:13px;font-weight:700}
.pg-size{display:inline-flex;align-items:center;gap:6px;margin-left:4px}
.pg-size-label{font-size:12px;color:var(--ink-2)}
.pg-size-sel{height:30px;padding:0 6px;border:1px solid var(--line-2);background:var(--surface);border-radius:6px;color:var(--ink);font-size:13px;cursor:pointer;font-family:inherit}
.pg-size-sel:hover{border-color:var(--blue)}
.pg-size-sel:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-l)}

.tag-items{color:var(--ink-2);font-size:12px}
.tag-ledger{display:inline-block;padding:1px 7px;border-radius:3px;font-size:12px;background:var(--bg-red-soft);color:var(--v-red)}
.unshipped{color:var(--red);font-weight:700}
.tag-unshipped{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--bg-red-soft);color:var(--red);font-weight:700}
.tag-source{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--bg-red-soft);color:var(--red);font-weight:700}
/* 销售列表「产品明细」列：限定宽度并允许折行（不再把「配置及需求」列挤窄） */
#grid .item-brief{white-space:normal;word-break:break-word;max-width:240px}
#grid .item-brief .tag-items{display:inline}
/* 销售列表「产品明细」多项一项一行（20260923y）：销售订单/销售出库两视图共用 */
/* 「产品明细/领料（提货）」多项一项一行（20260923aa）：销售/采购/外协/生产各列表共用 */
table.grid .ib-row{display:block;line-height:1.75}
/* 订单块分隔（20260923y）：每张订单主行顶部加重分隔线、明细块结尾加重分隔线，
   明细头部显示订单号，避免分不清明细属于哪张订单 */
table.grid tr.doc-row td{border-top:2px solid var(--line-2)}
table.grid .detail-row td{border-bottom:2px solid var(--line-2)}
table.grid .detail-meta .dm-no{color:var(--ink);font-weight:700;margin-right:8px}
/* 销售列表「配置及需求」列：独立一格（位于产品明细与数量之间），灰色小字，长内容自动折行 */
.cfg-list-cell{color:var(--ink-2);font-size:12px;line-height:1.55;white-space:normal;word-break:break-word;vertical-align:top}
.cfg-list-cell .cfg-col-row+.cfg-col-row{margin-top:2px}
.cfg-list-cell .cfg-col-who{color:var(--ink);font-weight:600}
.cfg-list-cell .cfg-none{color:var(--ink-3)}
/* 部分发货进度：已发500/1000 */
.tag-ship-progress{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--bg-amber-soft);color:var(--v-amber);font-weight:700}
.ship-chk{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-2);cursor:pointer;white-space:nowrap}
.ship-chk input{width:14px;height:14px;cursor:pointer}

/* 本年份收入分类汇总（收入表页面最下方） */
.year-sum{margin-top:6px;background:var(--blue-l);border:1px solid var(--blue-b);border-radius:8px;padding:14px 16px}
.year-sum-head{display:flex;align-items:baseline;gap:12px;margin-bottom:10px}
.year-sum-label{font-size:13px;color:var(--ink-2)}
.year-sum-total{font-size:22px;font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums}
.year-sum-items{display:flex;gap:10px;flex-wrap:wrap}
.ysi{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:16px;font-size:13px;background:var(--surface);border:1px solid var(--line)}
.ysi b{font-variant-numeric:tabular-nums;font-weight:600}
.ysi-cash b{color:var(--ink)}
.ysi-pub b{color:var(--blue)}
.ysi-acc b{color:var(--v-amber)}
.ysi-out b{color:var(--v-purple)}

/* ---------- 账户余额（支出表底部） ---------- */
.balance-box{margin-top:6px;background:var(--blue-l);border:1px solid var(--blue-b);border-radius:8px;padding:14px 16px}
.balance-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}
.balance-label{font-size:13px;color:var(--ink-2)}
.balance-total{font-size:22px;font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums}
.balance-items{display:flex;gap:12px;flex-wrap:wrap}
.bal-item{flex:1 1 200px;min-width:200px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 14px}
.bal-name{font-size:13px;color:var(--ink-2);margin-bottom:4px}
.bal-value{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink)}
.bal-sub{margin-top:6px;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.bal-sub span{color:var(--ink);font-weight:600}
#balCash.bal-value,#balPub.bal-value,#balAcc.bal-value{color:var(--ink)}
#balPub.bal-value{color:var(--blue)}
#balAcc.bal-value{color:var(--v-amber)}

/* ---------- 面板 ---------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:18px;margin-bottom:16px}
.panel-title{font-size:15px;margin-bottom:12px;color:var(--ink)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.cm-search{display:flex;gap:6px;align-items:center}
.cm-search .ipt{width:240px}
@media (max-width:640px){.cm-search{width:100%}.cm-search .ipt{flex:1;width:auto}}
.rank-item{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px dashed var(--line)}
.rank-no{width:22px;height:22px;border-radius:4px;background:var(--blue-l);color:var(--blue);font-size:12px;display:flex;align-items:center;justify-content:center;font-weight:700}
.rank-name{flex:1}
.rank-bar{height:8px;border-radius:4px;background:linear-gradient(90deg,#1a5fd0,#5b9bff);min-width:2px}
.rank-bar-box{flex:2;background:var(--surface-3);border-radius:4px;overflow:hidden;height:8px}
.rank-val{width:120px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-2);font-size:13px}

/* ---------- 弹窗 ---------- */
/* 业务表单弹窗（maskMat / maskCat / maskProd / maskPur 等）默认 50 */
.mask{position:fixed;inset:0;background:var(--mask);display:flex;align-items:flex-start;justify-content:center;z-index:50;padding:36px 16px;overflow:auto}
/* 提示类弹窗（prompt 输入 / confirm 确认）：必须盖在业务弹窗之上，
   否则在分类管理里点「新建分类」会被后面的 maskCat 遮住输入框 */
.mask.mask-prompt,.mask.mask-confirm{z-index:60}
/* 客户选择器是二级弹窗：会从采购/付款/生产单等弹窗内打开，必须压在业务弹窗(50)之上；
   但低于 prompt/confirm(60)，以保证其内部的删除确认框仍可见 */
#maskCust{z-index:55}
#maskSup{z-index:55}
#maskSalePick{z-index:55}
#maskMat{z-index:55}
/* 关联生产单选择器：从「新增生产入库」弹窗(50)内打开，需压在其上 */
#maskProdPick{z-index:55}
/* 关联采购订单选择器：从「采购入库」弹窗(50)内打开，需压在其上 */
#maskPoPick{z-index:55}
#maskSaleName{z-index:55}
.modal{background:var(--surface);border-radius:10px;width:1000px;max-width:100%;box-shadow:0 18px 48px rgba(16,24,40,.25)}
.modal-s{width:400px}
.modal-head{padding:14px 18px;border-bottom:1px solid var(--line);font-size:15px;font-weight:600;display:flex;justify-content:space-between;align-items:center;user-select:none;-webkit-user-select:none}
/* 弹窗标题栏拖动（20261010e）：桌面端显示移动光标 */
@media (min-width:769px){.mask > .modal > .modal-head{cursor:move}}
.x{border:none;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--ink-2)}
.modal-body{padding:16px 18px;max-height:calc(100vh - 260px);overflow:auto}
.modal-foot{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px}
.modal-lg{width:1100px}
.modal-xl{width:1280px;max-width:calc(100vw - 32px)}
.btn-close{background:transparent;border:none;font-size:22px;line-height:1;cursor:pointer;color:var(--ink-2);width:34px;height:34px;border-radius:8px}
.btn-close:hover{background:var(--line)}
.history-table{max-height:60vh;overflow:auto;border:1px solid var(--line);border-radius:8px}
.history-table .grid{margin:0;border:none}
.history-table .grid th,.history-table .grid td{padding:8px 10px;font-size:12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.history-table .grid th{position:sticky;top:0;background:var(--surface-2);z-index:1}
.history-table .snap{font-family:Consolas,monospace;color:var(--ink-2);word-break:break-all;display:block;max-height:60px;overflow:auto}
.panel-actions{display:flex;gap:10px;margin-top:14px;justify-content:flex-end}
.setting-line{display:flex;flex-direction:column;gap:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:14px;margin:12px 0}
.setting-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.setting-row .ipt{width:240px}
.setting-row span{color:var(--ink-1)}
.empty{color:var(--ink-2);padding:24px;text-align:center;font-size:13px}
.form-row{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.form-row label{font-size:13px;color:var(--ink-2);width:64px;text-align:right}
.form-row .ipt{width:210px}
.store-checks{display:flex;flex-wrap:wrap;gap:8px 14px;max-width:340px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg-1)}
.store-checks label{display:inline-flex;align-items:center;gap:5px;width:auto;font-size:13px;color:var(--ink-1);cursor:pointer}
.store-checks input{accent-color:var(--brand,#2f7d4f)}
.modal-body .sec{font-weight:700;font-size:13px;color:var(--ink-1);margin:16px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}

/* 客户名称输入 + 选客户按钮组合 */
.ipt-cust-wrap{position:relative;display:inline-flex;align-items:stretch;width:210px}
.ipt-cust-wrap .ipt{border-top-right-radius:0;border-bottom-right-radius:0;flex:1;min-width:0}
.ipt-cust-btn{
  border:1px solid var(--line);border-left:none;background:var(--surface-2);
  color:var(--ink-1);font-size:12px;font-weight:600;padding:0 10px;cursor:pointer;
  border-top-right-radius:6px;border-bottom-right-radius:6px;transition:background .12s}
.ipt-cust-btn:hover{background:var(--blue-l);color:var(--blue)}
.form-row .ipt-cust-wrap{width:210px}
.form-row .ipt-cust-wrap .ipt{width:auto;flex:1}
.form-row textarea.ipt{font-family:inherit;line-height:1.5;padding:6px 8px;resize:vertical}

/* 客户资料弹窗：左列表 + 右表单 */
.cust-pick-layout{display:grid;grid-template-columns:minmax(280px,360px) 1fr;gap:16px;min-height:420px}
.cust-pick-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface-2)}
.cust-pick-search{display:flex;gap:6px;padding:8px;border-bottom:1px solid var(--line);background:var(--surface)}
.cust-pick-search .ipt{flex:1;min-width:0}
.cust-pick-scroll{flex:1;overflow:auto;max-height:520px}
.cust-pick-grid{margin:0}
/* 只有列表、没有右侧详情栏的选择器（发货管理「出库单选择器」）→ 让列表占满整宽，
   否则沿用 minmax(280px,360px) 的双栏布局会把表格挤窄、状态列文字被截断。
   注：领料/配套产品选择器（#maskBomMatPick）2026-09-22 起改用 .bom-pick-layout（左树 + 右列表），
   不再走这条规则 —— 见下方「领料物料选择器：左侧分类树」。 */
#maskShipPick .cust-pick-layout{grid-template-columns:1fr}

/* ============ 领料物料选择器：左侧分类树 + 右侧列表（2026-09-22） ============ */
.bom-pick-layout{display:grid;grid-template-columns:242px 1fr;gap:14px;min-height:440px}
.bom-pick-tree{
  display:flex;flex-direction:column;overflow:hidden;background:var(--surface);
  border:1px solid var(--line);border-radius:8px;max-height:560px;
}
.bom-pick-tree-head{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border-bottom:1px solid var(--line);background:var(--surface-2);
  font-weight:700;font-size:13px;color:var(--ink-1);
}
.bom-pick-tree-head .btn-link{font-size:12px;font-weight:400}
.bom-pick-tree-body{padding:6px 6px 10px;overflow:auto;flex:1}
/* 搜索框旁的「当前范围」提示（含清除按钮） */
.bom-pick-scope{
  display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46%;
}
.bom-pick-scope .btn-link{font-size:12px;flex:0 0 auto}
/* 树里已被勾选的物料叶子 */
.bom-pick-tree-body .tnode.is-picked{background:var(--blue-l)}
.bom-pick-tree-body .tnode.is-picked .tlabel{color:var(--blue);font-weight:700}
.bom-pick-picked{flex:0 0 auto;font-size:11px;color:var(--blue)}

/* ============ 发货数量弹窗（支持部分发货：客户要 1000、先发 500） ============ */
.ship-qty-hint{margin-bottom:10px;padding:8px 10px;border-radius:6px;background:var(--bg-amber-soft);
  font-size:12.5px;line-height:1.75;color:var(--ink-1)}
.ship-qty-table{width:100%}
.ship-qty-table thead th{text-align:left;font-size:12px;white-space:nowrap}
.ship-qty-table thead th:nth-child(2),
.ship-qty-table thead th:nth-child(3),
.ship-qty-table thead th:nth-child(4){text-align:right}
.ship-qty-table td{vertical-align:middle;font-size:13px}
.ship-qty-table td.num{text-align:right}
.ship-qty-table tr.is-partial td:first-child{font-weight:600}
.ship-qty-cfg{margin-top:2px;font-size:12px;line-height:1.5;color:var(--ink-2)}
.ship-qty-table .ship-now{width:110px;text-align:right}
.ship-qty-tip{margin-top:10px;font-size:12.5px;line-height:1.8;color:var(--v-amber)}
.ship-qty-tip:empty{display:none}
.cust-pick-grid th{position:sticky;top:0;background:var(--surface-2);z-index:1;font-size:12px}
.cust-pick-grid td{font-size:13px;padding:6px 8px}
/* 选择器「名称（含规格）」列：规格以浅色小字跟在名称后，避免单独一列浪费宽度 */
.pick-spec{color:var(--ink-3,#93a0b5);font-size:12px}
/* 物料选择器表格按内容自适应宽度，不强行铺满（否则剩余空间全灌给名称列，名称列虚宽） */
#maskBomMatPick .cust-pick-grid{width:auto}
.cust-pick-grid tbody tr{cursor:pointer}
.cust-pick-grid tbody tr:hover{background:var(--blue-l)}
.cust-pick-grid tbody tr.is-active{background:var(--blue-l);color:var(--blue);font-weight:600}
.cust-pick-form{padding:4px 8px 4px 0}
.cust-pick-form .ipt{width:auto;min-width:160px;max-width:100%}
.items-head{display:flex;justify-content:space-between;align-items:center;margin:6px 0 8px;font-size:13px;color:var(--ink-2)}
.grid-items th,.grid-items td{border:1px solid var(--line)}
.grid-items td{padding:4px 6px}
.grid-items .ipt{width:100%;border:1px solid transparent;background:var(--surface);padding:6px 8px}
.grid-items .ipt:focus{border-color:var(--blue)}
/* 采购/入库/生产明细表格：固定列宽，防止物料名称自动占满导致规格型号被挤窄 */
#poItemTable,#purItemTable,#bomItemTable{table-layout:fixed;width:100%}
#poItemTable th,#purItemTable th,#bomItemTable th{overflow:hidden;text-overflow:ellipsis}
#poItemTable td,#purItemTable td,#bomItemTable td{white-space:normal;word-break:break-word;overflow:visible}
#poItemTable .ipt,#purItemTable .ipt,#bomItemTable .ipt{min-width:0}
.cell-name{white-space:nowrap}
.ipt-mat-cell{display:flex;align-items:center;gap:4px}
.ipt-mat-cell .pq-name{flex:1;min-width:0;width:auto}
.ipt-mat-cell .pq-spec{flex:1;min-width:0;width:auto}
.ipt-mat-cell .i-name{flex:1;min-width:0;width:auto}
.bom-mat-btn{width:100%;text-align:left;cursor:pointer;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bom-mat-btn:hover{border-color:var(--blue);color:var(--blue)}
#maskBomMatPick{z-index:55}
.mat-reg{flex:0 0 auto;white-space:nowrap;font-size:12px;padding:2px 7px;border:1px solid var(--line-2);border-radius:6px;color:var(--blue);background:var(--surface);cursor:pointer}
.mat-reg:hover{background:var(--blue-l);text-decoration:none}
/* ---------- 销售单「配置及需求」单元格：配套产品标签 + 手写需求文字 ---------- */
.cfg-cell-in{display:flex;flex-direction:column;gap:4px;min-width:0;max-width:100%}
.cfg-tags{display:flex;flex-wrap:wrap;gap:4px}
.cfg-tag{display:inline-flex;align-items:center;gap:2px;max-width:100%;font-size:12px;line-height:1.6;
  padding:1px 3px 1px 7px;border:1px solid var(--blue);border-radius:10px;background:var(--blue-l);color:var(--blue)}
.cfg-tag .cfg-tag-t{max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cfg-x{border:none;background:transparent;color:inherit;cursor:pointer;font-size:13px;line-height:1;padding:0 2px;opacity:.7}
.cfg-x:hover{opacity:1}
.cfg-line{display:flex;align-items:center;gap:4px;min-width:0}
.cfg-line .i-custom{flex:1;min-width:0;width:auto}
.tf-label{text-align:right;font-weight:600;color:var(--ink-2)}
.ipt-flat{background:var(--surface-2)!important;border:1px solid var(--line)!important;text-align:right;font-weight:600;color:var(--blue)}
.big-amount{margin-top:10px;font-size:13px;color:var(--ink-2)}
.big-amount span{color:var(--ink);font-weight:600}

/* ---------- 对账单 / 数据管理 ---------- */
.fl{font-size:13px;color:var(--ink-2)}
.card-value.green{color:var(--green)}
.card-value.red{color:var(--red)}
.panel-title small{font-weight:400;color:var(--ink-2);font-size:12px;margin-left:8px}
.switch-inline{
  float:right;font-size:12px;font-weight:400;color:var(--ink-2);
  display:inline-flex;align-items:center;gap:5px;cursor:pointer;margin-top:2px;
}
.switch-inline input{width:14px;height:14px;margin:0;cursor:pointer;accent-color:var(--blue)}
/* 对账单：单据小计行 */
.grid tr.sub td{background:var(--surface-2);font-weight:600;color:var(--ink-2);font-size:13px}
.grid tr.sub td:first-child{padding-left:10px}
.grid td.muted{color:var(--ink-3)}
/* 结算方式徽章 */
.settle-chip{
  display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;
  font-size:12px;font-weight:600;white-space:nowrap;
  background:var(--blue-l);color:var(--blue);border:1px solid var(--blue-b);
}
.settle-chip.sc-cash{background:var(--bg-amber-soft);color:var(--v-amber);border-color:var(--bd-amber)}
.settle-chip.sc-month{background:var(--bg-green-soft);color:var(--green);border-color:var(--bd-green)}
.settle-chip.sc-quarter{background:var(--bg-purple-soft);color:var(--v-purple);border-color:var(--bd-purple)}
/* 产值明细可编辑表 */
/* === 产值明细：冻结客户名列 + 锁定前两行表头 === */
#viewOutput .table-wrap {
  max-height: min(70vh, 720px);
  overflow: auto;
}
/* 客户名称列（thead 与 tbody 第一格 + tfoot 合计列）锁定在左侧 */
.grid-out th:first-child,
.grid-out td.cust,
.grid-out tfoot td:first-child {
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--surface);
  box-shadow: 1px 0 0 var(--line);
}
.grid-out tfoot td:first-child { background: var(--surface-2); }
/* 表头两行锁定在顶部；行 1 top:0，行 2 top:36px（每行高 ≈ 36px） */
.grid-out thead tr:nth-child(1) th { position: sticky; top: 0; background: var(--surface-2); z-index: 3; }
.grid-out thead tr:nth-child(2) th { position: sticky; top: 36px; background: var(--surface-2); z-index: 3; }
/* 左上角格（同时 top + left）z 最高 */
.grid-out thead tr:nth-child(1) th:first-child { z-index: 5; }
.grid-out thead tr:nth-child(2) th:first-child { z-index: 5; }

.grid-out input.cell{
  width:74px;border:1px solid transparent;background:transparent;text-align:right;
  font-size:13px;padding:4px 6px;border-radius:4px;font-variant-numeric:tabular-nums;
}
.grid-out input.cell.pub{color:var(--blue)}
.grid-out input.cell:hover{border-color:var(--line);background:var(--surface)}
.grid-out input.cell:focus{border-color:var(--blue);background:var(--surface);outline:none}
.grid-out td.cust{font-weight:600}
.grid-out tfoot td{background:var(--surface-2);font-weight:700;border-top:2px solid var(--line)}
.chk{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--ink-2);cursor:pointer;white-space:nowrap}
.chk input{width:15px;height:15px;accent-color:var(--blue)}
.tag-inv{display:inline-block;padding:1px 7px;border-radius:3px;font-size:12px;background:var(--bg-green-soft);color:var(--green);white-space:nowrap;text-align:center}
.method-tag{display:inline-block;padding:1px 7px;border-radius:3px;font-size:12px;background:var(--surface-3);color:var(--ink-2);white-space:nowrap;text-align:center}
/* 收入/支出列表主表：每格付款方式 */
.method-cell{padding:4px 6px;font-size:12px;color:var(--ink-1);white-space:nowrap;text-align:center}
/* 含胶囊标签（method-tag / tag-inv）的单元格水平居中，让标签视觉上对得齐 */
.grid td:has(> .method-tag),
.grid td:has(> .tag-inv){text-align:center;vertical-align:middle}
.method-cell:nth-child(odd of .method-cell){background:var(--surface-2)}
.btn-mini{padding:3px 10px;font-size:12px}
/* 路径/文件名展示块：柔和底色 + 等宽字体，让文件名一眼可辨 */
.path-display{display:inline-block;margin-top:6px;padding:4px 10px;background:var(--surface-2);border-radius:4px;font-size:12px;color:var(--ink-1);font-family:Consolas,Menlo,monospace;max-width:100%;word-break:break-all}
.path-display b{color:var(--brand);font-weight:600}
.path-display[style*="cursor: pointer"],.path-display b{cursor:pointer}
/* 最近一次成功写入摘要 — 让用户能区分"绿点常亮（内存就绪）" vs "实际已写盘" */
.last-write{margin-top:8px;padding:6px 10px;background:var(--surface-2);border-left:3px solid var(--green);border-radius:3px;font-size:12px;color:var(--ink-1);line-height:1.6}
.last-write b{font-weight:600}
.path-display b:hover{text-decoration:underline}
.hint{font-size:13px;color:var(--ink-2);line-height:1.7;margin-bottom:14px}
.hint-inline{font-size:12px;color:var(--ink-2);margin-left:8px}
.cb-inline{font-size:13px;color:var(--ink-2);cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px}
.cb-inline input{cursor:pointer}
.btn-line{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
/* Excel 面板「目录绑定」行：chip + 按钮 + hint 提示，三段紧凑同行 */
.bind-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0 12px;padding:8px 10px;background:var(--surface-1);border-radius:4px;border-left:3px solid var(--brand)}
.btn-xs{padding:6px 10px;font-size:12px}
/* 多形式方式编辑器：纵向布局，避免窄弹窗内金额输入框被挤压到 0 宽 */
.form-col{flex-direction:column;align-items:stretch}
.form-col>label{width:auto;text-align:left}
.methods-box{display:flex;flex-direction:column;gap:6px;width:100%}
.methods-line{display:flex;gap:8px;align-items:center}
.methods-line select.ipt{min-width:110px;flex:0 0 auto}
.methods-line input.ipt{flex:1;min-width:80px}
.methods-line .btn-rm{padding:4px 10px;font-size:12px;color:var(--red);background:transparent;border:1px solid var(--bd-red);border-radius:6px;cursor:pointer}
.methods-line .btn-rm:hover{background:var(--bg-red-soft)}
.methods-foot{display:flex;align-items:center;gap:12px;margin-top:4px}
.methods-sum{font-size:13px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.methods-sum.ok{color:var(--blue);font-weight:600}
.methods-sum.warn{color:var(--red)}
.export-checks{display:flex;gap:20px;flex-wrap:wrap;padding:6px 2px}
.export-checks .chk{font-size:14px;color:var(--ink)}
.stat-line{
  font-size:13px;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--radius);padding:10px 12px;line-height:1.9
}
.stat-line b{color:var(--ink)}
.stat-line .k{display:inline-block;min-width:110px;color:var(--ink-2)}
.export-state{font-size:13px;color:var(--ink-2);align-self:center}
.export-state.ok{color:var(--blue)}
.export-state.err{color:var(--red)}
.bill-export-panel .btn-primary{font-weight:600}
.sheet-bill h2{text-align:center;font-size:20px;letter-spacing:3px}
.sheet-bill .sub{text-align:center;font-size:12px;color:#444;margin-bottom:10px;letter-spacing:2px}
.sheet-bill .meta{display:flex;justify-content:space-between;border-top:2px solid #000;border-bottom:1px solid #000;padding:6px 2px}
.sheet-bill table{width:100%;border-collapse:collapse;margin-top:8px}
.sheet-bill th,.sheet-bill td{border:1px solid #333;padding:5px 8px;font-size:12px}
.sheet-bill th{background:#f0f0f0;text-align:center;font-weight:600}
.sheet-bill td.c{text-align:center}
.sheet-bill td.r{text-align:right}
.sheet-bill .total td{font-weight:700;background:#f7f7f7}
.sheet-bill .balance{display:flex;border:1px solid #333;border-top:none;font-size:12px}
.sheet-bill .balance div{flex:1;padding:8px 10px;border-right:1px solid #333}
.sheet-bill .balance div:last-child{border-right:none}
.sheet-bill .balance b{font-size:14px}
.sheet-bill .sec{font-weight:700;margin-top:14px;font-size:13px}
.sheet-bill .sign{display:flex;justify-content:space-between;margin-top:26px;font-size:12px}
.sheet-bill .sign div{width:45%}
.sheet-bill .sign span{display:inline-block;border-bottom:1px solid #000;width:62%;height:18px;vertical-align:bottom}
.sheet-bill .foot-note{margin-top:14px;font-size:11px;color:#555;display:flex;justify-content:space-between}

/* ---------- 对账单归档查看弹窗（20261006c） ---------- */
/* 弹窗内嵌正式对账单版式（billSheetHtml 输出 .sheet-bill），白底居中、可滚动 */
.bill-arc-sheet{background:#fff;padding:14px;max-height:68vh;overflow:auto;border-radius:4px}
.bill-arc-sheet .sheet-bill{box-shadow:0 2px 12px rgba(0,0,0,.14);margin:0 auto;max-width:820px;padding:18px 22px;background:#fff;color:#000}

.toast{
  position:fixed;top:20px;left:50%;transform:translateX(-50%);
  background:var(--toast-bg);color:#fff;padding:10px 20px;border-radius:6px;
  font-size:13px;z-index:100001;box-shadow:0 6px 20px rgba(0,0,0,.2)
}

/* ---------- 打印 ---------- */
#printArea{display:none}
@media print{
  body>*:not(#printArea){display:none!important}
  #printArea{display:block!important}
  .sheet{page-break-after:always;padding:0}
  .sheet:last-child{page-break-after:auto}
  @page{size:A4 portrait;margin:12mm}
  /* 强制保留颜色：Chrome 打印默认把彩色文字去色成黑 */
  *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}
}
.sheet{width:190mm;margin:0 auto;color:#000;font-size:12px;background:#fff}
.sheet h2{text-align:center;font-size:20px;letter-spacing:4px;margin-bottom:2px}
.sheet .sub{text-align:center;font-size:12px;color:#444;margin-bottom:12px;letter-spacing:1px}
.sheet .meta{display:flex;justify-content:space-between;border-top:2px solid #000;border-bottom:1px solid #000;padding:6px 2px;margin-bottom:0}
.sheet table{width:100%;border-collapse:collapse}
.sheet table th,.sheet table td{border:1px solid #333;padding:6px 8px;font-size:12px}
.sheet table th{background:#f0f0f0;text-align:center;font-weight:600}
.sheet td.c{text-align:center}
.sheet td.r{text-align:right}
.sheet .total td{font-weight:700;background:#f7f7f7}
.sheet .sign{display:flex;justify-content:space-between;margin-top:26px;font-size:12px}
.sheet .sign div{width:30%}
.sheet .sign span{display:inline-block;border-bottom:1px solid #000;width:60%;height:18px;vertical-align:bottom}
.sheet .foot-note{margin-top:14px;font-size:11px;color:#555;display:flex;justify-content:space-between}
.sheet .big{margin-top:8px;font-size:12px;font-weight:600}
/* 排产单底部备注：加粗加大 + 红色（!important 防被覆盖；print-color-adjust 保证打印保色） */
.sheet .plan-note{margin-top:10px;font-size:16px;font-weight:700;color:#d00!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.sheet .plan-note span{font-weight:700;color:#d00!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.sheet-list h2{text-align:center;font-size:18px;margin-bottom:4px}
.sheet-list .sub{text-align:center;font-size:12px;margin-bottom:10px}
.sheet-list table{width:100%;border-collapse:collapse;font-size:11px;margin-top:10px}
.sheet-list th,.sheet-list td{border:1px solid #333;padding:4px 6px}
.sheet-list th{background:#f0f0f0}

/* ---------- 登录界面 ---------- */
.mask-login{
  background:linear-gradient(135deg,var(--topbar-a) 0%,var(--topbar-b) 55%,var(--topbar-c) 100%);
  align-items:center;z-index:200;
}
.modal-login{
  width:360px;max-width:92%;background:var(--surface);border-radius:12px;
  box-shadow:0 24px 64px rgba(10,30,70,.4);padding:34px 30px 28px;text-align:center;
}
.login-logo{
  width:56px;height:56px;margin:0 auto 14px;border-radius:12px;
  background:linear-gradient(135deg,var(--topbar-a),var(--topbar-b));color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:18px;letter-spacing:.5px;
}
.login-title{font-size:20px;font-weight:700;letter-spacing:1px;color:var(--ink)}
.login-sub{font-size:12px;color:var(--ink-2);margin:4px 0 22px;letter-spacing:1px}
.login-form{display:flex;flex-direction:column;gap:12px}
.login-remember{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);cursor:pointer;user-select:none}
.login-remember input{cursor:pointer}
.login-ipt{width:100%;height:42px;padding:0 14px;font-size:14px;border-radius:8px;border:1px solid var(--line)}
.login-ipt:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,95,208,.12)}
.btn-block{width:100%;height:42px;font-size:15px;font-weight:600;border-radius:8px;margin-top:4px}
.login-error{color:var(--red);font-size:12px;text-align:left;min-height:16px}

/* ---------- 账户管理 ---------- */
.user-bar{
  color:#fff;font-size:13px;padding:0 4px;max-width:160px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;opacity:.92;
}
.role-tag{
  display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;
  background:var(--blue-l);color:var(--blue);border:1px solid var(--blue-b);
}
.role-tag.admin{background:var(--bg-red-soft);color:var(--red);border-color:var(--bd-red)}
.perm-text{font-size:11px;color:var(--ink-3);margin-top:2px;line-height:1.3}
.me-tag{
  display:inline-block;padding:0 6px;border-radius:8px;font-size:11px;
  background:var(--bg-green-soft);color:var(--green);border:1px solid var(--bd-green);margin-left:4px;
}
#accBody .btn-link{padding:2px 4px}

/* ---------- JSON 备份面板 ---------- */
.panel code{background:var(--surface-3);padding:1px 6px;border-radius:4px;font-size:12px;color:var(--v-blue)}
.panel .stat-line{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:13px;color:var(--ink-2);flex-wrap:wrap}
#jsonSyncText{color:var(--ink);font-weight:600}

/* ---------- 应收账款账龄分析 ---------- */
.aging-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:12px 0}
.aging-toolbar label{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2)}
.aging-toolbar .ipt{padding:5px 10px}

.aging-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:14px 0}
.aging-card{border-radius:10px;padding:14px 16px;border:1px solid var(--bd);background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,0.04)}
.aging-card-label{font-size:12px;color:var(--ink-2);margin-bottom:6px}
.aging-card-value{font-size:22px;font-weight:700;color:var(--ink)}
.aging-card-sub{font-size:12px;color:var(--ink-2);margin-top:4px}
.aging-card-total .aging-card-value{color:var(--v-blue)}
.aging-card-paid .aging-card-value{color:var(--v-green)}
.aging-card-unpaid .aging-card-value{color:var(--v-red)}
.aging-card-advance .aging-card-value{color:var(--v-amber)}

.aging-bar{display:flex;flex-direction:column;gap:8px;margin:8px 0 14px}
.aging-bar-row{display:grid;grid-template-columns:90px 1fr 200px;align-items:center;gap:10px;font-size:13px}
.aging-bar-label{color:var(--ink-2);text-align:right}
.aging-bar-track{height:18px;background:var(--surface-3);border-radius:4px;overflow:hidden}
.aging-bar-fill{height:100%;border-radius:4px;transition:width .3s ease}
.aging-bar-fill-0-30{background:#3b82f6}
.aging-bar-fill-30-60{background:#f59e0b}
.aging-bar-fill-60-90{background:#f97316}
.aging-bar-fill-90plus{background:#dc2626}
.aging-bar-value{font-variant-numeric:tabular-nums;color:var(--ink-2)}

.aging-b-0-30{background:rgba(59,130,246,0.08);color:var(--v-blue)}
.aging-b-30-60{background:rgba(245,158,11,0.10);color:var(--v-amber)}
.aging-b-60-90{background:rgba(249,115,22,0.10);color:var(--v-orange)}
.aging-b-90plus{background:rgba(220,38,38,0.10);color:var(--v-red);font-weight:600}

.aging-detail>td{padding:0!important;background:var(--surface-2)}
.aging-detail-inner{padding:14px 18px;border-top:2px solid var(--bd)}
.aging-detail-inner table{margin:0}
.aging-detail-inner th{background:var(--surface-3)}

/* ============ 月度经营报表 ============ */
.mt-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.mt-card{padding:14px 16px;border-radius:8px;border:1px solid var(--bd);background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,0.03)}
.mt-card-title{font-size:12px;color:var(--ink-2);margin-bottom:6px}
.mt-card-val{font-size:20px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.mt-card-sub{font-size:11px;color:var(--ink-2);margin-top:2px}
.mt-card.kpi-revenue{border-left:4px solid #3b82f6}
.mt-card.kpi-revenue .mt-card-val{color:var(--v-blue)}
.mt-card.kpi-cost{border-left:4px solid #64748b}
.mt-card.kpi-cost .mt-card-val{color:var(--v-slate)}
.mt-card.kpi-gross-pos{border-left:4px solid #10b981;background:rgba(16,185,129,0.04)}
.mt-card.kpi-gross-pos .mt-card-val{color:var(--v-green)}
.mt-card.kpi-gross-neg{border-left:4px solid #f97316;background:rgba(249,115,22,0.04)}
.mt-card.kpi-gross-neg .mt-card-val{color:var(--v-orange)}
.mt-card.kpi-received{border-left:4px solid #06b6d4}
.mt-card.kpi-received .mt-card-val{color:var(--v-cyan)}
.mt-card.kpi-expense{border-left:4px solid #ef4444}
.mt-card.kpi-expense .mt-card-val{color:var(--v-red)}
.mt-card.kpi-cash-pos{border-left:4px solid #14b8a6;background:rgba(20,184,166,0.04)}
.mt-card.kpi-cash-pos .mt-card-val{color:var(--v-teal)}
.mt-card.kpi-cash-neg{border-left:4px solid #f43f5e;background:rgba(244,63,94,0.04)}
.mt-card.kpi-cash-neg .mt-card-val{color:var(--v-rose)}
.mt-card.kpi-output{border-left:4px solid #8b5cf6}
.mt-card.kpi-output .mt-card-val{color:var(--v-violet)}
.mt-card.kpi-profit-pos{border-left:4px solid #22c55e;background:rgba(34,197,94,0.06)}
.mt-card.kpi-profit-pos .mt-card-val{color:var(--v-green)}
.mt-card.kpi-profit-neg{border-left:4px solid #dc2626;background:rgba(220,38,38,0.06)}
.mt-card.kpi-profit-neg .mt-card-val{color:var(--v-red)}

.mt-bars{display:flex;align-items:flex-end;gap:6px;height:200px;padding:12px 8px;border:1px solid var(--bd);border-radius:8px;background:var(--surface);margin-bottom:18px}
.mt-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;min-width:0}
.mt-bar-pair{display:flex;align-items:flex-end;justify-content:center;gap:2px;height:160px;width:100%}
.mt-bar{width:42%;min-height:1px;border-radius:3px 3px 0 0;transition:height 0.4s ease}
.mt-bar-revenue{background:linear-gradient(to top,#3b82f6,#60a5fa)}
.mt-bar-profit-pos{background:linear-gradient(to top,#ef4444,#f87171)}
.mt-bar-profit-neg{background:linear-gradient(to top,#dc2626,#b91c1c);opacity:0.7}
.mt-bar-label{font-size:11px;color:var(--ink-2);margin-top:4px;font-variant-numeric:tabular-nums}

.mt-table{margin-top:8px}
.mt-table th,.mt-table td{padding:8px 10px}
.mt-table tfoot td{background:var(--surface-2);border-top:2px solid var(--bd);font-weight:600}
.mt-table .mt-row-avg td{background:var(--surface-3);color:var(--ink-2)}
.mt-pos{color:var(--v-green)}
.mt-neg{color:var(--v-red)}
.mt-rate{font-size:11px;color:var(--ink-2);font-weight:400;margin-left:2px}

/* ================= 主题切换按钮 ================= */
.theme-btn{
  width:34px;height:34px;padding:0;border-radius:8px;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:16px;cursor:pointer;transition:.15s;flex:none;
}
.topbar .theme-btn{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.4);color:#fff}
.topbar .theme-btn:hover{background:rgba(255,255,255,.26);border-color:#fff}

/* 顶部「未发货徽章」:打开系统第一时间可看见剩余待发数 */
.badge-chip{display:inline-flex;align-items:center;gap:4px;height:30px;padding:0 12px;border:1px solid rgba(255,255,255,.5);border-radius:16px;background:rgba(217,58,58,.92);color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:transform .15s,box-shadow .15s,background .15s;box-shadow:0 1px 4px rgba(217,58,58,.4)}
.badge-chip:hover{background:rgba(217,58,58,1);transform:translateY(-1px);box-shadow:0 3px 10px rgba(217,58,58,.55)}
.badge-chip[hidden]{display:none!important}
/* 20261009c：彻底移除徽章上的无限呼吸动画——之前 20261008d 用 will-change+translateZ
   强制独立合成层来修「Windows Chrome 指针悬停消失」，实测仍未根治（合成层动画吞指针
   是 Chromium 在 Windows 上的已知顽疾，GPU/驱动相关）。全系统不再保留任何 infinite
   动画，圆点改为静态显示，视觉上仍能标识「未发货」徽章。 */
.badge-chip .badge-pulse{display:inline-block;width:6px;height:6px;border-radius:50%;background:#ffd1d1}
[data-theme="dark"] .badge-chip{background:rgba(255,107,107,.95);border-color:rgba(255,200,200,.5)}
/* 暗色下按钮里的文字压暗，保持与浅色一致的对比 */
[data-theme="dark"] .btn-danger:hover{background:#a02525}
[data-theme="dark"] .grid tbody tr:hover{background:var(--surface-hover)}
[data-theme="dark"] .mt-card,
[data-theme="dark"] .aging-card{box-shadow:0 1px 3px rgba(0,0,0,.3)}

/* ============ 发货管理 ============ */
/* 子页切换：发货登记 / 运费查看 */
.subtabs{display:flex;gap:8px;margin:0 0 16px;border-bottom:1px solid var(--line);padding-bottom:0}
.subtab{background:transparent;border:none;border-bottom:2px solid transparent;padding:8px 16px;font-size:14px;font-weight:600;
  color:var(--ink-2);cursor:pointer;border-radius:6px 6px 0 0}
.subtab:hover{color:var(--ink)}
.subtab.active{color:var(--blue);border-bottom-color:var(--blue)}
/* 货物照片 */
.photo-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.photo-thumb{position:relative;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface-2);
  padding-top:75%;cursor:zoom-in}
.photo-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.photo-thumb .photo-del{position:absolute;top:4px;right:4px;width:22px;height:22px;border:none;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.photo-thumb .photo-del:hover{background:rgba(200,30,30,.9)}
.photo-grid .empty{grid-column:1/-1}

/* ============ 删除确认 / 回收站 ============ */
/* 确认框正文支持 \n 换行（删除确认会列出单据关键信息） */
#confirmText{white-space:pre-line}
/* 回收站列表里的「彻底删除」用红色弱化，避免和「还原」混淆 */
.btn-link.danger{color:#c0392b}
.btn-link.danger:hover{text-decoration:underline}
/* 照片放大层：压在所有业务弹窗之上 */
.mask.mask-photo{z-index:70;align-items:center;justify-content:center;background:rgba(0,0,0,.82);padding:24px}
.mask.mask-photo img{max-width:92vw;max-height:88vh;border-radius:8px;box-shadow:0 12px 40px rgba(0,0,0,.5);background:#fff}
.photo-big-close{position:fixed;top:18px;right:24px;width:40px;height:40px;border:none;border-radius:50%;
  background:rgba(255,255,255,.15);color:#fff;font-size:26px;line-height:1;cursor:pointer}
.photo-big-close:hover{background:rgba(255,255,255,.3)}
.photo-big-nav{position:fixed;top:50%;transform:translateY(-50%);width:48px;height:64px;border:none;border-radius:10px;
  background:rgba(255,255,255,.15);color:#fff;font-size:30px;line-height:1;cursor:pointer}
.photo-big-nav:hover{background:rgba(255,255,255,.32)}
.photo-big-nav.prev{left:20px}
.photo-big-nav.next{right:20px}
.photo-big-info{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);color:#fff;font-size:13px;
  background:rgba(0,0,0,.45);padding:4px 14px;border-radius:12px}
/* 发货单选择器：从「发货单编辑」弹窗(50)内打开 */
#maskShipPick{z-index:55}
/* 发货单：货运方式徽章 */
.sh-method{display:inline-block;font-size:12px;padding:1px 8px;border-radius:10px;background:var(--blue-l);color:var(--blue);white-space:nowrap}
.sh-photo-chip{font-size:12px;color:var(--ink-2);white-space:nowrap}

/* ============ 运费查看 ============ */
.fr-tip{font-size:12px;color:var(--ink-2);margin:12px 0 4px;padding:8px 12px;background:var(--surface);border:1px dashed var(--line);border-radius:6px}
.frt{margin-top:18px}
.frt h3{font-size:15px;font-weight:700;margin:0 0 8px;color:var(--ink);border-left:4px solid var(--blue);padding-left:8px}
.fr-table{width:100%;border-collapse:collapse;font-size:12px}
.fr-table th,.fr-table td{border:1px solid var(--line);padding:7px 8px;text-align:left;vertical-align:middle}
.fr-table thead th{background:var(--surface-2);font-weight:600;color:var(--ink-2);white-space:nowrap}
.fr-table tbody tr:hover{background:var(--surface-hover)}
.fr-note{margin-top:10px;font-size:12px;color:var(--ink-2);line-height:1.7;background:var(--surface);border:1px dashed var(--line);padding:10px 12px;border-radius:6px}
/* 可编辑单元格 */
.fr-editable{cursor:pointer;transition:background .12s}
.fr-editable:hover{background:var(--blue-l);outline:1px dashed var(--blue)}
.fr-editable.fr-editing{padding:0;background:#fff}
.fr-cell-ipt{width:100%;box-sizing:border-box;border:2px solid var(--blue);border-radius:4px;padding:6px 8px;font-size:12px;font-family:inherit;color:var(--ink);background:#fff;outline:none}

/* ===== 仓库管理：左侧分类导航树 + 右侧物料表 ===== */
.wh-layout{display:flex;gap:14px;align-items:flex-start}
.wh-main{flex:1;min-width:0}
.wh-tree-panel{
  width:232px;flex:0 0 232px;background:var(--surface);border:1px solid var(--line);
  border-radius:8px;display:flex;flex-direction:column;overflow:hidden;
  max-height:calc(100vh - 250px);position:sticky;top:0;
}
.wh-tree-head{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border-bottom:1px solid var(--line);background:var(--surface-2);
  font-weight:700;font-size:13px;color:var(--ink-1);
}
.wh-tree-head .btn-link{font-size:12px;font-weight:400}
.wh-tree-head-btns{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.wh-tree{padding:6px 6px 10px;overflow:auto;flex:1}
.tree-empty{padding:18px 12px;text-align:center;color:var(--ink-2);font-size:12px}
.tnode{
  display:flex;align-items:center;gap:4px;padding:4px 6px;border-radius:5px;
  cursor:pointer;font-size:13px;color:var(--ink-1);line-height:1.6;
  white-space:nowrap;user-select:none;
}
.tnode:hover{background:var(--surface-3)}
.tnode.is-sel{background:var(--blue-l);color:var(--blue);font-weight:700}
.tnode.is-sel .tw,.tnode.is-sel .tcount{color:var(--blue)}
.tw{width:13px;flex:0 0 13px;text-align:center;color:var(--ink-2);font-size:10px}
.tw-none{visibility:hidden}
.tlabel{overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.tcount{
  flex:0 0 auto;margin-left:auto;font-size:11px;color:var(--ink-2);
  background:var(--surface-3);border-radius:9px;padding:0 6px;line-height:17px;font-weight:400;
}
.tkids{margin-left:11px;border-left:1px dashed var(--line);padding-left:5px}
.tnode.is-leaf .tlabel{font-weight:400}
/* 空分类（已建档但还没挂物料）：压低视觉权重，仍可点击定位 */
.tnode.is-empty .tlabel{color:var(--ink-2);font-weight:400}
.tnode.is-empty .tcount{opacity:.55}
/* 分类管理弹窗 */
.cat-grid td{padding:6px 8px}
.cat-grid .cat-branch{color:var(--ink-2);margin-right:4px}
.cat-grid .ops{white-space:nowrap}
.cat-grid .ops .btn-link{margin-right:6px}
/* 表格里的规格参数列：过长时换行显示（不再省略截断，避免「显示不全」） */
.grid td.spec{font-size:12px;color:var(--ink-2);white-space:normal;word-break:break-word;overflow:visible;max-width:none}

/* ---------------- 价格/供应商可见性权限 ----------------
   仅最高权限管理员（role==='admin'）可见「供应商 / 采购价 / 成本」等敏感信息；
   次级权限账号（普通用户）登录后，body 挂上 .no-price，以下元素整体隐藏。 */
body.no-price .price-secret{display:none !important}

/* ================= 移动端适配（≤768px 竖屏手机/小平板） =================
   全部收在媒体查询内，桌面端（>768px）完全不受影响。目标：
   表单单列、按钮触控区≥40px、Tab 横滚不换行、弹窗近全屏、表格可横滑、卡片网格自适应。 */
@media (max-width:768px){
  /* 顶栏收紧，隐藏副标题，避免品牌区溢出 */
  .topbar{padding:8px 12px;height:auto;flex-wrap:wrap;gap:6px 12px}
  .brand-text h1{font-size:16px}
  .brand-text p{display:none}
  .sync-bar{font-size:11px;gap:6px;width:100%;order:99;justify-content:space-between;padding-top:6px;border-top:1px solid rgba(255,255,255,.12)}
  #syncText{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sync-bar #btnBind,.sync-bar #btnExport,.sync-bar #btnImport{display:none}
  .user-bar{max-width:84px}
  .badge-chip{height:28px;padding:0 10px;font-size:12px}
  /* 手机浏览器底部工具栏会遮挡内容，加大底部留白 */
  body{padding-bottom:env(safe-area-inset-bottom,12px)}
  .wrap{padding:12px 10px 64px}

  /* 内容留白收紧 */
  .wrap{padding:12px 10px 48px}

  /* Tab 横向滚动，避免换行堆叠占高度 */
  .tabs{padding:0 8px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .tab{padding:12px 14px;white-space:nowrap;flex:0 0 auto}

  /* 统计卡两列（足够宽），更窄再单列 */
  .cards{grid-template-columns:1fr 1fr}
  .aging-summary{grid-template-columns:1fr 1fr}
  .mt-kpi-grid{grid-template-columns:1fr 1fr}

  /* 工具条/筛选行间距收紧 */
  .toolbar{padding:10px;gap:8px}
  .toolbar-right{margin-left:0;width:100%;justify-content:flex-end}

  /* 表单单列：标签在上、输入占满宽度 */
  .form-row{flex-direction:column;align-items:stretch;gap:6px}
  .form-row label{width:auto;text-align:left}
  .form-row .ipt,.form-row .ipt-cust-wrap{width:100%}
  .ipt{width:100%}
  .setting-row{flex-direction:column;align-items:stretch}
  .setting-row .ipt{width:100%}
  .ipt-cust-wrap{width:100% !important}

  /* 按钮加大触控区，便于手指点按 */
  .btn{padding:9px 16px;font-size:14px;min-height:42px}
  .btn-mini{padding:7px 12px;min-height:36px}
  .btn-xs{min-height:40px;padding:8px 14px}
  .btn-link{min-height:36px;display:inline-flex;align-items:center}
  .pg-btn{min-width:38px;height:40px}
  .pg-size-sel{height:38px}
  .theme-btn{width:38px;height:38px}

  /* 弹窗近全屏：head 固定、body 撑满、foot 固定 */
  .mask{padding:0}
  .modal{width:100%;height:100%;max-width:100%;border-radius:0;display:flex;flex-direction:column}
  .modal-xl,.modal-lg{max-width:100%}
  .modal-head{padding:14px 16px;font-size:16px}
  .modal-body{flex:1;max-height:none;padding:14px 16px}
  .modal-foot{padding:12px 16px}

  /* 表格容器横向滚动 + 惯性，窄屏不会把页面撑破 */
  .table-wrap{overflow:auto;-webkit-overflow-scrolling:touch}
  .grid{font-size:13px}
  .grid th,.grid td{padding:9px 8px}

  /* 客户选择器：双栏改上下堆叠 */
  .cust-pick-layout{grid-template-columns:1fr;min-height:auto}
  .cust-pick-scroll{max-height:42vh}

  /* 领料物料选择器：分类树改到列表上方，高度收紧 */
  .bom-pick-layout{grid-template-columns:1fr;min-height:auto;gap:10px}
  .bom-pick-tree{max-height:200px}
  .bom-pick-tree-body{max-height:160px}
  .bom-pick-scope{max-width:100%}

  /* 账龄条形在窄屏简化 */
  .aging-bar-row{grid-template-columns:64px 1fr;gap:6px}
  .aging-bar-row .aging-bar-value{grid-column:1/-1;text-align:left;font-size:12px}
  .mt-bars{height:160px}

  /* 成本权限提示行在小屏不过宽 */
  .balance-items,.year-sum-items{gap:8px}
  .bal-item{flex:1 1 140px;min-width:140px}
}
@media (max-width:480px){
  .cards{grid-template-columns:1fr}
  .aging-summary{grid-template-columns:1fr}
  .mt-kpi-grid{grid-template-columns:1fr 1fr}
  .topbar .btn-ghost{padding:6px 10px}
}

/* ================= 表格卡片化（窄屏，仅对带 data-label 的 td 生效） =================
   由渲染层给每个 td 加 data-label="列名" 后，窄屏下每行变一张卡片，
   字段名以标签形式显示在值前，手机上无需横滑即可读。 */
@media (max-width:768px){
  .grid.responsive-cards thead{position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden}
  .grid.responsive-cards,.grid.responsive-cards tbody,.grid.responsive-cards tr,.grid.responsive-cards td{display:block;width:100%}
  .grid.responsive-cards tr{
    background:var(--surface);border:1px solid var(--line);border-radius:10px;
    margin-bottom:10px;padding:6px 4px;box-shadow:0 1px 2px rgba(16,24,40,.04)
  }
  .grid.responsive-cards td{
    border:none !important;padding:7px 12px !important;display:flex;justify-content:space-between;
    align-items:baseline;gap:12px;text-align:right;white-space:normal
  }
  .grid.responsive-cards td::before{
    content:attr(data-label);flex:0 0 auto;text-align:left;color:var(--ink-2);
    font-size:12px;font-weight:600;margin-right:8px
  }
  .grid.responsive-cards td.num{text-align:right}
  .grid.responsive-cards .ops{justify-content:flex-start;flex-wrap:wrap;gap:6px;padding-top:4px}
  .grid.responsive-cards .expand{width:auto}
}
/* 成本金额区在小屏下也保持两列排布清晰 */
.price-secret-tip{color:var(--ink-2);font-size:12px}

/* 不开票标签：灰色虚线胶囊，与已开票/需开票同尺寸 */
.tag-noinv{display:inline-block;padding:1px 7px;border-radius:3px;font-size:12px;background:#f2f3f5;color:#8a8f99;border:1px dashed #c9cdd4;white-space:nowrap;text-align:center}
.grid td:has(> .tag-noinv){text-align:center;vertical-align:middle}

/* 输入弹窗提示语支持换行（与确认弹窗 #confirmText 同口径） */
#promptText{white-space:pre-line}

/* ===== 备案页脚（ICP 备案 + 公安备案） ===== */
.beian-foot{display:flex;align-items:center;justify-content:center;gap:22px;flex-wrap:wrap;
  padding:16px 16px 26px;margin-top:6px;border-top:1px solid var(--line);
  font-size:12px;color:var(--ink-3);background:var(--panel)}
.beian-foot a{color:var(--ink-3);text-decoration:none;display:inline-flex;align-items:center;gap:5px}
.beian-foot a:hover{color:var(--blue)}
.beian-foot .ga-badge{flex:none}
.beian-foot .ga-link span{line-height:1}

/* 异常品清单（20261006k）：来源/状态小标签 */
.abn-kind{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--surface-3);color:var(--ink-2);margin-left:4px;white-space:nowrap}
.abn-tag-open{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--bg-red-soft);color:var(--v-red);font-weight:700}
.abn-tag-split{display:inline-block;padding:0 6px;border-radius:3px;font-size:11px;background:var(--bg-amber-soft);color:var(--v-amber);font-weight:700}

/* 应付明细双击查看/修改单据（20261006o） */
#bPayBody tr[data-po]{cursor:pointer}
#bPayBody tr[data-po]:hover{background:var(--surface-3)}

/* 上期对账（20261006p）：日期/余额/发票余额 手动可改 + 对账发票余额自动 */
.prev-bill-grid{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:flex-end}
.prev-bill-grid .pb-item{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-2)}
.prev-bill-grid .pb-item input{width:160px}
.prev-bill-grid .pb-ro b{font-size:18px;color:var(--ink)}
.prev-bill-grid .pb-formula{color:var(--ink-3, #8a93a3);font-size:11px}

/* ============ 云同步断线横幅（20261008d）：token 过期 401 醒目提醒 ============ */
#syncBrokenBar{position:fixed;top:0;left:0;right:0;z-index:85;display:flex;align-items:center;justify-content:center;gap:12px;padding:9px 16px;background:#c0392b;color:#fff;font-size:13px;font-weight:600;box-shadow:0 2px 10px rgba(0,0,0,.25)}
#syncBrokenBar[hidden]{display:none!important}
#syncBrokenBar button{border:1px solid rgba(255,255,255,.6);background:rgba(255,255,255,.14);color:#fff;border-radius:6px;padding:4px 14px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
#syncBrokenBar button:hover{background:rgba(255,255,255,.28)}
#syncBrokenBar #syncBarClose{padding:4px 9px;font-size:15px}

/* 20261009f：仓库管理表格「操作」列钉在右缘——列宽总和超出可视区时表格横向滚动，
   操作列（编辑/删除）恒定贴右缘可见，不再被推出屏幕外。
   注意：渲染层会无条件给 whTable 加 responsive-cards 类，不能用 :not(.responsive-cards) 判断，
   改用媒体查询区分——≥769px 桌面钉右，≤768px 手机走卡片布局不钉。 */
@media (min-width:769px){
  #whTable th:last-child,#whTable td:last-child{position:sticky;right:0;background:var(--surface);box-shadow:-8px 0 8px -8px rgba(15,23,42,.2)}
  #whTable thead th:last-child{background:var(--surface-2);z-index:3}
  #whTable tbody tr:hover td:last-child{background:var(--surface-hover)}
}

/* 20261009j：表格列宽手动拖拽——.grid 表头 th 右缘 9px 手柄，悬停/拖拽显示色条；
   th 已是 position:sticky（top:0），手柄绝对定位直接锚定 th。拖拽时全局 col-resize 光标。 */
.col-grip{position:absolute;top:0;right:-4px;width:9px;height:100%;cursor:col-resize;z-index:6;touch-action:none}
.col-grip::after{content:'';position:absolute;top:25%;bottom:25%;left:3.5px;width:2px;background:transparent;border-radius:2px}
.col-grip:hover::after{background:var(--brand)}
body.col-resizing{cursor:col-resize!important;user-select:none}
body.col-resizing *{cursor:col-resize!important}
body.col-resizing .col-grip::after{background:var(--brand)}
