/* ===== 全局 ===== */
* { box-sizing: border-box; margin: 0; padding: 0; }
:root{
  --nav-bg:#16243f;
  --nav-bg2:#1b2c4d;
  --nav-active:#2f6fed;
  --nav-hover:#22365c;
  --nav-text:#c7d3e6;
  --nav-text-dim:#7e8eaa;
  --accent:#2f6fed;
  --bg:#f4f6fa;
  --card:#ffffff;
  --line:#d7dee9;
  --text:#1f2937;
  --text-2:#5b6677;
  --danger:#e0524d;
  --warn:#e8a33d;
  --ok:#2bb673;
  --shadow:0 1px 3px rgba(20,30,50,.08),0 6px 18px rgba(20,30,50,.06);
}
html,body{height:100%;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg); color:var(--text); font-size:14px;
}
#app{display:flex;min-height:100vh;}

/* 通用按钮基线：未单独定样的按钮（如查询结果「加入」、预览关闭等）
   统一为查询栏「高级查询」同款圆润白底描边框 */
.btn{
  display:inline-flex; align-items:center; justify-content:center;
  height:34px; padding:0 16px; border-radius:8px; cursor:pointer; box-sizing:border-box;
  border:1px solid #d7dee9; background:#fff; color:var(--text);
  font-size:13px; line-height:1.4; white-space:nowrap;
}
.btn:hover{ background:#f5f8ff; border-color:#c3d4f7; }
/* 危险操作按钮（删除 / 退出登录 的确认键） */
.btn.danger{ background:#e0524d; border-color:#e0524d; color:#fff; }
.btn.danger:hover{ background:#cc423e; border-color:#cc423e; color:#fff; }
/* 主操作按钮（非破坏性的「确定 / 加入清单」等） */
.btn.primary{ background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; }
.btn.primary:hover{ background:#2a63d6; border-color:#2a63d6; }
/* 2026-10-22：确认框默认选中「确定」时给个明显的焦点圈（回车就直接执行） */
.nx-modal-acts .btn:focus{ outline:none; box-shadow:0 0 0 3px rgba(47,111,237,.28); }
.nx-modal-acts .btn.danger:focus{ box-shadow:0 0 0 3px rgba(224,82,77,.45); }

/* 工作台占位（内容待定） */
.dash-tbd{ padding:66px 24px; text-align:center; }
.dash-tbd-icon{ width:54px; height:54px; margin:0 auto 16px; color:#cbd5e1; }
.dash-tbd-icon svg{ width:100%; height:100%; }
.dash-tbd-title{ font-size:16px; font-weight:700; color:#64748b; }
.dash-tbd-sub{ font-size:13px; color:#9aa6bb; margin-top:8px; }

/* ===== 付款/收款登记弹窗 ===== */
.nx-modal-box.nx-blue.nx-pay{ width:min(480px, 94vw); }
.pay-form .pf-row{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.pay-form .pf-row > label{ width:64px; flex-shrink:0; text-align:right; color:#334155; }
.pay-form .pf-row > label.req::before{ content:"*"; color:#e0524d; margin-right:2px; }
.pay-form input, .pay-form select{
  flex:1; min-width:0; height:34px; border:1px solid var(--line); border-radius:8px;
  padding:0 10px; font-size:13px; box-sizing:border-box; outline:none; background:#fff; color:var(--text);
}
.pay-form textarea{
  flex:1; min-width:0; border:1px solid var(--line); border-radius:8px; padding:8px 10px;
  font-size:13px; box-sizing:border-box; outline:none; resize:vertical; min-height:62px;
  font-family:inherit; color:var(--text);
}
.pay-form input:focus, .pay-form select:focus, .pay-form textarea:focus{
  border-color:#2563eb; box-shadow:0 0 0 3px rgba(37,99,235,.12);
}
.pf-upload{ margin-top:16px; }
.pf-up-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.pf-up-title.req::before{ content:"*"; color:#e0524d; margin-right:2px; }
.pf-up-paste{ color:#2563eb; font-size:12px; }
.pf-ups{ display:grid; grid-template-columns:repeat(3, 1fr); gap:10px; }
.pf-up{
  position:relative; aspect-ratio:1/1; border:1px dashed #c8d3e2; border-radius:10px;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  cursor:pointer; color:#b6c2d4; background:#fbfcfe; overflow:hidden;
}
.pf-up:hover{ border-color:#93b4ea; color:#7ea2dd; background:#f7faff; }
.pf-up-ico svg{ width:26px; height:26px; margin-bottom:6px; }
.pf-up-txt{ font-size:12px; }
.pf-up.filled{ border-style:solid; border-color:var(--line); cursor:default; }
.pf-up.filled img{ width:100%; height:100%; object-fit:cover; display:block; }
.pf-up-del{
  position:absolute; top:4px; right:4px; width:20px; height:20px; border-radius:50%;
  border:none; background:rgba(15,23,42,.6); color:#fff; font-size:13px; line-height:1;
  cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0;
}
.pf-up-del:hover{ background:rgba(224,82,77,.95); }
.pf-up-hint{ font-size:11px; color:#e0524d; margin-top:8px; line-height:1.6; }

/* ===== 收付款登记：已结清 / 结果反馈 / 台账 ===== */
.btn.pay-done{ background:#e7f7ee; border-color:#b7e4c7; color:#15803d; font-weight:700; }
.btn.pay-done:hover{ background:#d9f2e3; border-color:#8ed6a9; }
/* 单据已确认后的按钮态（2026-10-23 用户标注：确认后这里要显示「已确认」）。
   disabled 时浏览器默认会把按钮压灰，这里显式盖回来，绿底表明「这事已经做完了」。 */
.btn.confirm-done, .btn.confirm-done:disabled, .btn.confirm-done[disabled]{
  background:#e7f7ee; border-color:#b7e4c7; color:#15803d; font-weight:700;
  opacity:1; cursor:default;
}
.nx-modal-box.nx-pay-ok{ width:min(440px, 94vw); }
.pay-ok{ text-align:center; padding:4px 2px 0; }
.pay-ok-ico{
  width:58px; height:58px; margin:0 auto 12px; border-radius:50%;
  background:#e7f7ee; border:1px solid #b7e4c7; color:#15803d;
  font-size:32px; font-weight:700; line-height:56px;
}
.pay-ok-title{ font-size:18px; font-weight:700; color:#0f172a; }
.pay-ok-sub{ margin-top:8px; font-size:13px; color:#334155; }
.pay-ok-meta{ margin-top:6px; font-size:12px; color:#7e8eaa; }
.pay-ok-note{
  margin-top:16px; padding:10px 12px; text-align:left;
  background:#f7faff; border:1px solid #dbe7f8; border-radius:8px;
  font-size:12.5px; line-height:1.8; color:#41506b;
}
.pay-view-head{ display:flex; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.pay-view-tip{ font-size:12px; color:#7e8eaa; }
.pay-chip{ display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; line-height:18px; white-space:nowrap; }
.pay-chip.ok{ background:#e7f7ee; color:#15803d; border:1px solid #b7e4c7; }
.pay-chip.warn{ background:#fff4e5; color:#b45309; border:1px solid #f5d8a8; }
.pay-view-grid{ display:grid; grid-template-columns:96px 1fr; gap:9px 12px; font-size:13px; }
.pv-k{ color:#7e8eaa; text-align:right; }
.pv-v{ color:#1f2d42; word-break:break-all; }
.pay-view-imgs{ display:flex; gap:8px; flex-wrap:wrap; margin-top:14px; }
.pay-view-imgs .pay-img{
  width:88px; height:88px; object-fit:cover; border-radius:8px;
  border:1px solid var(--line); cursor:zoom-in;
}
.pay-view-noimg{ margin-top:14px; font-size:12px; color:#9aa6bb; }
.pay-view-note{
  margin-top:14px; padding:8px 10px; border-radius:8px;
  background:#fff9ef; border:1px solid #f5e2bf; color:#b45309; font-size:12px; line-height:1.7;
}
.pay-img-big img{ max-width:82vw; max-height:74vh; display:block; margin:0 auto; border-radius:8px; }
.pay-ledger-tabs{ display:flex; gap:8px; margin:10px 0 12px; flex-wrap:wrap; }
.pay-ledger-stat{ font-size:12px; color:#7e8eaa; font-weight:400; }
.pay-ledger-stat b{ color:#15803d; }
.pay-ledger-tbl th.num, .pay-ledger-tbl td.num{ text-align:right; }
.pay-ledger-tbl .pay-track{ font-family:Consolas,monospace; font-size:12px; color:#41506b; }
.pay-acts{ white-space:nowrap; }
.pay-acts .btn{ margin:2px 2px 2px 0; padding:4px 10px; font-size:12px; }
.pay-noauth{ font-size:11px; color:#9aa6bb; }
/* 从喇叭 / 提交付款申请后跳进台账时，被定位到的那一行闪一下，方便一眼认出来 */
.pay-ledger-tbl tr.pl-hl td{ background:#fff6e5 !important; }
.pay-ledger-tbl tr.pl-hl td:first-child{ box-shadow:inset 3px 0 0 #f79009; }
.pay-edit-tip{
  margin-bottom:12px; padding:8px 10px; border-radius:8px;
  background:#fff9ef; border:1px solid #f5e2bf; color:#b45309; font-size:12px; line-height:1.7;
}

/* ===== 左侧导航 ===== */
.sidebar{
  width:240px; flex:0 0 240px;
  background:linear-gradient(180deg,var(--nav-bg) 0%,var(--nav-bg2) 100%);
  color:var(--nav-text);
  display:flex; flex-direction:column;
  transition:width .22s ease, flex-basis .22s ease;
  position:sticky; top:0; height:100vh; overflow:hidden;
}
.sidebar.collapsed{ width:66px; flex-basis:66px; }

.sidebar-brand{
  display:flex; align-items:center; gap:10px;
  padding:16px 14px; position:relative;
  border-bottom:1px solid rgba(255,255,255,.06);
}
.brand-logo{
  width:38px; height:38px; border-radius:9px; flex:0 0 38px;
  background:linear-gradient(135deg,#3b82f6,#2f6fed);
  display:flex; align-items:center; justify-content:center;
  font-size:20px; font-weight:700; color:#fff;
}
.brand-text{ line-height:1.3; overflow:hidden; white-space:nowrap; min-width:0; }
.brand-title{ font-size:12.5px; font-weight:700; color:#fff; letter-spacing:-.2px; }
.brand-sub{ font-size:11px; color:var(--nav-text-dim); }
.collapse-btn{
  margin-left:auto; width:24px; height:24px; border:none; cursor:pointer;
  background:rgba(255,255,255,.08); color:var(--nav-text);
  border-radius:6px; font-size:13px; transition:.15s;
}
.collapse-btn:hover{ background:rgba(255,255,255,.18); }
.sidebar.collapsed .brand-text{ display:none; }
/* 折叠后保留展开按钮：品牌区改为纵向，按钮位于 Logo 下方，箭头转为展开方向 */
.sidebar.collapsed .sidebar-brand{ flex-direction:column; gap:10px; padding:14px 8px 10px; }
.sidebar.collapsed .brand-logo{ margin:0; }
.sidebar.collapsed .collapse-btn{ margin-left:0; transform:rotate(180deg); }

/* 导航菜单 */
.nav{ flex:1; overflow-y:auto; padding:8px 0; }
.nav::-webkit-scrollbar{ width:6px; }
.nav::-webkit-scrollbar-thumb{ background:rgba(255,255,255,.12); border-radius:3px; }
.nav-group{ margin-bottom:2px; }
.nav-group-title{
  display:flex; align-items:center; gap:8px;
  padding:12px 16px 6px; font-size:11px; letter-spacing:.5px;
  text-transform:uppercase; color:var(--nav-text-dim); cursor:pointer; user-select:none;
}
.nav-group-title .g-caret{ margin-left:auto; transition:transform .2s; font-size:10px; }
.nav-group.collapsed .g-caret{ transform:rotate(-90deg); }
.nav-group.collapsed .nav-items{ display:none; }
.nav-items{ display:flex; flex-direction:column; }

.nav-item{
  display:flex; align-items:center; gap:11px;
  padding:10px 16px 10px 18px; color:var(--nav-text);
  cursor:pointer; border-left:3px solid transparent;
  transition:background .15s, color .15s; white-space:nowrap;
  font-size:13.5px;
}
.nav-item:hover{ background:var(--nav-hover); }
.nav-item.active{
  background:linear-gradient(90deg,rgba(47,111,237,.22),rgba(47,111,237,.05));
  border-left-color:var(--nav-active); color:#fff; font-weight:600;
}
.nav-item .ni-icon{ width:20px; height:20px; flex:0 0 20px; display:flex; }
.nav-item .ni-icon svg{ width:20px; height:20px; }
.nav-item .ni-text{ overflow:hidden; }
.sidebar.collapsed .nav-group-title,.sidebar.collapsed .ni-text{ display:none; }
.sidebar.collapsed .nav-item{ justify-content:center; padding-left:0; padding-right:0; }
.sidebar.collapsed .nav-group-title{ justify-content:center; padding:10px 0 4px; }

/* 底部水印 */
.sidebar-foot{
  padding:12px 16px; border-top:1px solid rgba(255,255,255,.06);
  font-size:11px; color:var(--nav-text-dim);
}
.sidebar-foot .foot-line{ white-space:nowrap; overflow:hidden; }
.sidebar-foot .watermark{ margin-top:3px; opacity:.7; }
/* 备案号：常驻可见（大陆硬性要求），不抢视觉，hover 才提亮 */
.sidebar-foot .icp-line{ display:block; margin-top:4px; color:var(--nav-text-dim);
  text-decoration:none; opacity:.85; }
.sidebar-foot .icp-line:hover{ color:#fff; opacity:1; text-decoration:underline; }
.sidebar.collapsed .sidebar-foot{ text-align:center; padding:12px 4px; }
.sidebar.collapsed .foot-line{ font-size:0; }
.sidebar.collapsed .watermark{ font-size:9px; }
.sidebar.collapsed .icp-line{ display:none; }

/* ===== 主区域 ===== */
.main{ flex:1; display:flex; flex-direction:column; min-width:0; }

/* 页脚（ICP 备案号，大陆硬性要求）：margin-top:auto 贴视口底部，
   内容比视口长时自然排到内容末尾，不遮挡任何东西 */
.app-foot{
  margin-top:auto; padding:14px 22px 16px; text-align:center;
  font-size:12px; line-height:1.8; color:#8b98ad; letter-spacing:.2px;
}
.app-foot .af-dot{ margin:0 6px; opacity:.55; }
.app-foot a{ color:#63738c; text-decoration:none; }
.app-foot a:hover{ color:var(--accent); text-decoration:underline; }
@media (max-width:768px){
  .app-foot{ padding:10px 12px 12px; font-size:11px; }
}
.topbar{
  height:56px; background:var(--card); border-bottom:1px solid var(--line);
  display:flex; align-items:center; padding:0 22px; position:sticky; top:0; z-index:5;
}
.topbar-title{ font-size:17px; font-weight:700; }
.topbar-right{ margin-left:auto; color:var(--text-2); font-size:13px; }
.topbar-user{ background:var(--bg); padding:6px 12px; border-radius:20px; }

/* ===== 多标签页（2026-10-30 用户标注）=====
   所有导航打开的页面横排在顶栏，像浏览器标签：点一下切过去，× 关掉。
   当前页蓝色实心，其它白底；标签多了横向滚动（不换行、不挤压右侧帐号区）。 */
.topbar{ padding:0 14px 0 10px; gap:8px; }
.topbar-title{ display:none; }        /* 标题由标签承担，元素保留给老代码写入 */
.tb-tabs{
  flex:1 1 auto; min-width:0; height:38px; display:flex; align-items:flex-end;
  gap:3px; overflow-x:auto; overflow-y:hidden; padding-top:6px;
  scrollbar-width:thin; -ms-overflow-style:none;
}
.tb-tabs::-webkit-scrollbar{ height:3px; }
.tb-tabs::-webkit-scrollbar-thumb{ background:#c9d5e6; border-radius:2px; }
.tb-tabs::-webkit-scrollbar-track{ background:transparent; }
.tb-tab{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:5px; max-width:190px;
  height:32px; padding:0 7px 0 11px; box-sizing:border-box;
  border:1px solid var(--line); border-bottom:none; border-radius:8px 8px 0 0;
  background:#f5f7fb; color:#41506b; font-size:13px; cursor:pointer; user-select:none;
  white-space:nowrap; transition:background .12s ease, color .12s ease;
}
.tb-tab:hover{ background:#eaf1ff; color:#2f6fed; }
.tb-tab .tb-name{ overflow:hidden; text-overflow:ellipsis; }
.tb-tab.active{ background:#2f6fed; border-color:#2f6fed; color:#fff; font-weight:600; }
.tb-tab.active:hover{ color:#fff; }
.tb-tab .tb-x{
  width:16px; height:16px; line-height:14px; text-align:center; border-radius:4px;
  color:#98a6ba; font-size:13px; flex:0 0 auto;
}
.tb-tab .tb-x:hover{ background:rgba(15,23,42,.12); color:#fff; }
.tb-tab.active .tb-x{ color:#d6e4ff; }
.tb-tab.active .tb-x:hover{ background:rgba(255,255,255,.24); color:#fff; }

/* ===== 「服务器上有新版本」提示条（2026-10-30）=====
   页面长期开着不刷新，浏览器里跑的还是部署前那份 app.js；
   底部弹一条，点「立即刷新」才真的换新版。 */
.ver-tip{
  position:fixed; left:50%; transform:translateX(-50%); bottom:20px; z-index:9999;
  display:flex; align-items:center; gap:10px; max-width:80vw;
  padding:9px 10px 9px 16px; border-radius:10px;
  background:#1e293b; color:#e8eefc; font-size:13px; line-height:1.5;
  box-shadow:0 10px 30px rgba(15,23,42,.28);
}
.ver-tip b{ color:#7fb0ff; }
.ver-tip .btn{ padding:4px 12px; font-size:12px; }
.ver-tip-x{
  width:22px; height:22px; line-height:20px; border:none; border-radius:6px;
  background:transparent; color:#93a4bd; font-size:15px; cursor:pointer;
}
.ver-tip-x:hover{ background:rgba(255,255,255,.14); color:#fff; }

.content{ padding:22px; }
.page-head{ margin-bottom:16px; }
.page-head h2{ font-size:18px; }
.page-head p{ color:var(--text-2); margin-top:4px; font-size:13px; }

/* 卡片 / 网格 */
.grid{ display:grid; gap:16px; }
.kpi-grid{ grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); }
.card{
  background:var(--card); border:1px solid var(--line); border-radius:12px;
  padding:18px; box-shadow:var(--shadow);
}
.kpi .kpi-label{ color:var(--text-2); font-size:13px; }
.kpi .kpi-value{ font-size:26px; font-weight:700; margin-top:8px; }
.kpi .kpi-sub{ font-size:12px; color:var(--text-2); margin-top:6px; }
.kpi .bar{ height:4px; border-radius:3px; margin-top:12px; background:var(--accent); opacity:.85; }

/* 图表 */
.chart-card{ margin-top:16px; }
.chart-title{ font-weight:600; margin-bottom:12px; }
.chart-svg{ width:100%; height:220px; }

/* 工具栏 */
.toolbar{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-bottom:14px; }
.toolbar input,.toolbar select{
  height:38px; border:1px solid var(--line); border-radius:8px; padding:0 12px;
  font-size:13px; background:#fff; color:var(--text); outline:none; min-width:180px;
}
.toolbar input:focus,.toolbar select:focus{ border-color:var(--accent); }
.toolbar .btn{
  height:38px; padding:0 16px; border:none; border-radius:8px; cursor:pointer;
  background:var(--accent); color:#fff; font-size:13px; font-weight:600;
}
.toolbar .btn:hover{ filter:brightness(1.05); }
.toolbar .btn.ghost{ background:#fff; color:var(--text); border:1px solid var(--line); }
.toolbar .spacer{ flex:1; }
.toolbar .count{ color:var(--text-2); font-size:13px; }

/* 表格 */
.table-wrap{ background:var(--card); border:1px solid var(--line); border-radius:12px; overflow:auto; box-shadow:var(--shadow); }
table{ border-collapse:collapse; width:100%; font-size:13px; }
/* 🔴 2026-10-22 用户标注（全站通用）：两个字段/两列文字之间只留「一个中文字宽」。
   单元格左右各半字（.5em）→ 相邻两格文字间距正好 1em≈13px（原来左右各 12px，合计 24px≈1.8 字）。
   首列/末列仍留 12px，别让文字贴到卡片边框上。 */
thead th{
  position:sticky; top:0; background:#f7f9fc; color:var(--text-2);
  text-align:left; padding:9px .5em; font-weight:600; white-space:nowrap;
  border-bottom:1px solid var(--line);
}
thead th:first-child, tbody td:first-child{ padding-left:12px; }
thead th:last-child, tbody td:last-child{ padding-right:12px; }
tbody td{ padding:8px .5em; border-bottom:1px solid #f0f2f7; white-space:nowrap; }
tbody tr:hover{ background:#f8faff; }
.num{ text-align:right; font-variant-numeric:tabular-nums; }
/* 2026-10-22 用户标注：表头必须跟下面这一列数据同向对齐（数字/金额列右对齐） */
thead th.num{ text-align:right; }
.empty{ padding:40px; text-align:center; color:var(--text-2); }
.empty.hint-card{ padding:28px 20px; margin:8px 2px; border:1px dashed var(--line); border-radius:10px; background:#f8fafc; color:var(--text-2); font-size:13px; line-height:1.7; }

/* 分页 */
.pager{ display:flex; align-items:center; gap:8px; margin-top:14px; }
.pager button{ height:34px; min-width:34px; border:1px solid var(--line); background:#fff; border-radius:8px; cursor:pointer; }
.pager button:disabled{ opacity:.45; cursor:default; }
.pager .pinfo{ color:var(--text-2); font-size:13px; }

/* 报价 */
.quote-result .qrow{ display:flex; gap:10px; align-items:center; padding:10px; border-bottom:1px solid var(--line); }
.tag{ display:inline-block; padding:2px 8px; border-radius:6px; font-size:12px; background:var(--bg); color:var(--text-2); }
.tag.ok{ background:#e7f7ee; color:#1f9254; }
.tag.warn{ background:#fdf2e0; color:#b9772a; }
.info-box{ background:#eef3ff; border:1px solid #d6e2ff; color:#2b4a8b; border-radius:10px; padding:14px; font-size:13px; line-height:1.7; }

/* toast */
/* ===== v2 新增组件 ===== */
.toolbar .sel{ height:36px; border:1px solid var(--line); border-radius:8px; padding:0 10px; background:#fff; font-size:13px; color:var(--text); }
.tabs{ display:flex; gap:6px; }
.tab{ padding:7px 16px; border:1px solid var(--line); background:#fff; border-radius:8px; cursor:pointer; font-size:13px; color:var(--text-2); }
.tab.active{ background:#2f6fed; border-color:#2f6fed; color:#fff; font-weight:600; }
.sec-title{ font-size:15px; font-weight:700; color:var(--text); margin:18px 0 10px; }
.card .sec-title:first-child{ margin-top:4px; }
.sub-title{ font-size:13px; font-weight:700; color:#2f6fed; margin-bottom:8px; }
/* 采购/销售单据页：本系统单据 + 尼西历史单据合并在一张卡片里，中间虚线分隔 */
.docs-drafts{ padding-bottom:12px; margin-bottom:14px; border-bottom:1px dashed var(--line); }
.docs-drafts .sub-title{ margin-bottom:10px; }
.docs-list .docs-sub{ margin-bottom:10px; }
/* 合并成一张表后的分组行：浅蓝底，横跨整行（没有本系统单时它就是卡片的第一行） */
.docs-tbl .docs-grp td{
  background:#eef4ff; color:#1e40af; font-size:12.5px; font-weight:700;
  padding:7px 10px; border-top:1px solid #dfe8fb; border-bottom:1px solid #dfe8fb;
  white-space:normal;
}
.docs-tbl .docs-grp .st-sub{ font-weight:400; color:#4b6fa8; }
.docs-tbl .docs-local td{ background:#fbfdff; }
.docs-tbl .docs-local .mono{ font-family:Consolas,Menlo,monospace; font-size:12.5px; }
.docs-tbl .doc-row:hover td{ background:#f5f9ff; }
/* 备注列（排在「操作」后面）：列表里只占一行，超长省略号，悬停看全文 */
.docs-tbl .remark-cell{ max-width:240px; }
.docs-tbl .remark-cell .rc-in{ display:block; max-width:240px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.docs-tbl .remark-cell .rc-in.rc-empty{ color:#b9c3d2; }
/* 表头右边缘的拖拽热区：拖动调整列宽，双击恢复自适应 */
.docs-tbl thead th .col-grip{ position:absolute; top:0; right:-5px; width:10px; height:100%; cursor:col-resize; z-index:3; }
.docs-tbl thead th .col-grip::after{
  content:""; position:absolute; top:24%; left:4px; width:2px; height:52%;
  border-radius:2px; background:transparent;
}
.docs-tbl thead th:hover .col-grip::after{ background:#c9d5e8; }
.docs-tbl thead th .col-grip.on::after{ background:#2f6fed; }
/* 选中的行（下方订单明细正在显示的那一张） */
.docs-tbl tr.doc-row.sel td,.docs-tbl tr.docs-local.sel td{ background:#eaf1ff; }
.docs-tbl tr.doc-row.sel td:first-child{ box-shadow: inset 3px 0 0 #2f6fed; }
.docs-tbl tr.docs-local.sel td:first-child{ box-shadow: inset 3px 0 0 #2f6fed; }
/* 列表下方的订单明细卡片 */
/* 2026-10-29：单据列表能按件号 / 明细编码搜单了。
   行上给个「命中 N 行」小徽标，点开后明细里命中的那几行标黄，不用自己找。 */
.docs-tbl .dl-hit{
  display:inline-block; margin-left:6px; padding:1px 6px; border-radius:9px;
  background:#fff3e0; color:#b45309; border:1px solid #fcd9a8;
  font-size:11px; font-weight:500; line-height:16px; white-space:nowrap;
  cursor:help; vertical-align:middle;
}
.docs-detail table tbody tr.hit-row td{ background:#fff8e1 !important; }
.docs-detail table tbody tr.hit-row td:first-child{ box-shadow: inset 3px 0 0 #f59e0b; }

.docs-detail .sub-title{ display:flex; align-items:center; gap:2px; flex-wrap:wrap; }
.docs-detail .dd-ops{ margin-left:auto; display:inline-flex; gap:8px; }
.docs-detail .dd-ops .btn{ height:30px; padding:0 12px; font-size:12.5px; line-height:28px; }
.docs-detail .dd-foot{
  margin-top:10px; padding-top:10px; border-top:1px dashed var(--line);
  font-size:13px; color:var(--text-2);
}
.docs-detail .dd-foot b{ color:#e8833a; font-size:15px; }
.docs-detail .dd-remark{
  margin-bottom:10px; padding:7px 10px; border:1px dashed #ccd6e2; border-radius:6px;
  background:#fcfdff; font-size:12.5px; color:#43536b; line-height:1.6; white-space:normal;
}
.docs-detail .empty{ padding:24px 10px; }
.pager .pg-size{ display:inline-flex; align-items:center; gap:6px; }
.pager .pg-size select{ height:32px; padding:0 8px; border:1px solid var(--line); border-radius:8px; background:#fff; font-size:13px; color:var(--text); }
/* 本系统单据列表的快速过滤框（搜单号/往来单位/制单人） */
.od-filter{ height:26px; padding:0 8px; font-size:12px; border:1px solid #d8dee9; border-radius:6px; outline:none; min-width:200px; background:#fff; color:#1f2733; }
.od-filter:focus{ border-color:#2f6fed; box-shadow:0 0 0 2px rgba(47,111,237,.12); }
.doc-row{ cursor:pointer; }
.doc-detail td{ background:#f8faff; white-space:normal; }
.doc-detail .table-wrap{ max-height:320px; overflow:auto; margin-top:6px; }
.pending-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:8px; margin-top:12px; }
.pending-item{ background:#fff; border:1px solid var(--line); border-radius:9px; padding:9px 12px; font-size:13px; color:var(--text); }
#content > div > .page-head, #content .page-head{ margin-bottom:4px; }
textarea:focus, .sel:focus{ outline:none; border-color:#2f6fed; }

/* toast */
/* 启动自检遮罩 */
.bootcheck {
  display: none; position: fixed; inset: 0; z-index: 99999;
  background: rgba(241, 245, 249, .96); align-items: center; justify-content: center;
  font-size: 14px;
}
.bootcheck-box {
  width: min(520px, 90vw); background: #fff; border-radius: 14px; padding: 26px 28px;
  box-shadow: 0 18px 50px rgba(15, 23, 42, .18); border: 1px solid #e2e8f0;
}
.bootcheck-title { font-size: 18px; font-weight: 700; color: #1e293b; margin-bottom: 10px; }
.bootcheck-msg { color: #e0524d; font-weight: 600; line-height: 1.6; margin-bottom: 14px; word-break: break-all; }
.bootcheck-hint { color: #64748b; line-height: 1.9; }
.bootcheck-hint code { background: #f1f5f9; border-radius: 5px; padding: 1px 6px; color: #2563eb; font-weight: 600; }
.bootcheck-hint b { color: #334155; }

.toast{
  position:fixed; bottom:24px; left:50%; transform:translateX(-50%) translateY(20px);
  background:#1f2937; color:#fff; padding:10px 18px; border-radius:8px; font-size:13px;
  opacity:0; pointer-events:none; transition:.25s; z-index:99;
}
.toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }

/* 响应式 */
@media(max-width:820px){
  .sidebar{ position:fixed; z-index:50; box-shadow:4px 0 20px rgba(0,0,0,.2); }
  .sidebar.collapsed{ transform:translateX(-100%); width:240px; flex-basis:240px; }
  .sidebar.collapsed .brand-text,.sidebar.collapsed .collapse-btn{ display:flex; }
  .sidebar.collapsed .nav-group-title,.sidebar.collapsed .ni-text{ display:block; }
  .sidebar.collapsed .nav-item{ justify-content:flex-start; padding-left:18px; }
}

/* 毛利计算器 / 保本计算器 */
.gp-form{ display:flex; flex-wrap:wrap; gap:14px 22px; margin-bottom:14px; }
.gp-form label{ display:flex; flex-direction:column; gap:6px; font-size:13px; color:var(--text-2); }
.gp-form input[type="number"]{ width:170px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; font-size:14px; }
.gp-chk{ flex-direction:row !important; align-items:center; gap:8px !important; font-size:13px; color:var(--text); }
.gp-chk input{ width:16px; height:16px; }
.gp-panel{ max-width:520px; background:#fff; border:1px solid var(--line); border-radius:12px; overflow:hidden; box-shadow:var(--shadow); }
.gp-head{ background:#2f6fed; color:#fff; font-weight:600; padding:10px 16px; font-size:14px; }
.gp-body{ padding:6px 0; }
.gp-row{ display:flex; justify-content:space-between; padding:7px 16px; font-size:13px; border-bottom:1px dashed #f0f2f7; }
.gp-row span{ color:var(--text-2); }
.gp-row b{ font-variant-numeric:tabular-nums; }
.gp-row.hl{ background:#f0f6ff; }
.gp-row.hl b{ color:#2f6fed; }
.gp-tips{ border-top:1px solid var(--line); background:#fffdf3; padding:12px 16px; font-size:12.5px; line-height:1.9; color:#6b4e00; }
tr.sel{ background:#eef4ff !important; }

/* 导航子项（开销售单 / 开采购单） */
.nav-subitem{ display:flex; align-items:center; gap:10px; padding:8px 14px 8px 34px; font-size:13px; color:#a9b6cf; cursor:pointer; border-left:2px solid transparent; }
.nav-subitem:hover{ background:rgba(255,255,255,.06); color:#fff; }
.nav-subitem.active{ background:rgba(47,111,237,.22); color:#fff; border-left-color:#5b9bff; }
.nav-subitem .ni-icon{ width:15px; height:15px; opacity:.8; }

/* 开单（销售/采购草稿） */
.order-head .order-fields{ display:flex; flex-wrap:wrap; gap:10px 18px; align-items:flex-end; }
.order-head label{ display:flex; flex-direction:column; font-size:12px; color:var(--text-2); gap:4px; }
.order-head .ro-static{ padding:8px 12px; background:#f3f6fb; border-radius:8px; font-weight:600; color:var(--text); }
.order-acts{ display:flex; gap:10px; flex-wrap:wrap; }
.order-tbl td, .order-tbl th{ padding:6px 8px; }
.ac-wrap{ position:relative; }
.ac-list{ position:absolute; z-index:30; background:#fff; border:1px solid var(--line); border-radius:8px; box-shadow:var(--shadow); width:240px; max-height:240px; overflow:auto; display:none; }
.ac-item{ padding:7px 10px; font-size:13px; cursor:pointer; border-bottom:1px solid #f3f5f9; }
.ac-item:hover{ background:#eef4ff; }
/* 订单状态徽章 */
.st-badge{ display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; line-height:18px; }
.st-badge.st-gray{ background:#eef1f6; color:#5b6b84; border:1px solid #d7dee9; }
.st-badge.st-blue{ background:#e8f0fe; color:#2563eb; border:1px solid #bcd3fb; }
.st-badge.st-green{ background:#e7f7ee; color:#15803d; border:1px solid #b7e4c7; }
.st-badge.st-amber{ background:#fff4e5; color:#b45309; border:1px solid #f5d8a8; }
/* 单据类型标签：退货单用红底，解释负数来源 */
.dt-chip{ display:inline-block; padding:2px 8px; border-radius:4px; font-size:12px; line-height:18px; white-space:nowrap;
  background:#f1f5f9; color:#475569; border:1px solid #e2e8f0; }
.dt-chip.ret{ background:#fdeceb; color:#b93a33; border-color:#f6c9c5; font-weight:600; }
.dt-chip.urg{ background:#fff4e5; color:#b45309; border-color:#f5d8a8; }
/* 急件采购单：一条备件一张单，标签后面跟备件编码，列表里好区分（2026-10-25） */
.dt-chip-sub{ display:inline-block; margin-left:4px; padding:2px 6px; border-radius:4px;
  font-size:11.5px; line-height:18px; color:#64748b; background:#f8fafc;
  border:1px dashed #d7dee8; white-space:nowrap; vertical-align:top; }
.st-sub{ font-size:12px; color:#8a94a6; margin-left:4px; }
.ac-item.active{ background:#d8e6ff; }
.ac-tip{ color:#9aa6bb; font-size:11px; margin-left:6px; }
.ac-new{ display:inline-block; margin-left:6px; padding:0 6px; border-radius:999px; background:#e7f7ee; color:#15803d; font-size:10px; border:1px solid #b7e4c7; }
.ac-item.ac-add{ color:var(--primary); font-weight:600; border-top:1px dashed #d7dee9; margin-top:2px; }
.ac-item.ac-add:hover{ background:#e8f0fe; }
.ac-empty{ padding:8px 10px; color:#9aa6bb; font-size:12px; }
/* ===== 可搜索下拉（2026-10-21 供应商供货价页：原生 select 换成能打字的联想框） ===== */
.ss-wrap{ position:relative; display:inline-block; vertical-align:middle; }
.ss-wrap .ss-in{ padding-right:44px; }
.ss-wrap .ss-arrow{
  position:absolute; right:11px; top:50%; width:0; height:0; margin-top:-2px; pointer-events:none;
  border-left:4px solid transparent; border-right:4px solid transparent; border-top:5px solid #97a3b6;
}
.ss-wrap .ss-clear{
  position:absolute; right:26px; top:50%; transform:translateY(-50%);
  width:16px; height:16px; line-height:15px; text-align:center; border-radius:50%;
  background:#dbe2ec; color:#fff; font-size:12px; font-style:normal; cursor:pointer;
  display:none; user-select:none;
}
.ss-wrap .ss-clear:hover{ background:#b6c1d1; }
.ss-wrap.has-val .ss-clear{ display:block; }
.ss-list{
  position:absolute; z-index:60; left:0; top:calc(100% + 4px); min-width:100%; max-width:560px;
  max-height:290px; overflow:auto; background:#fff; border:1px solid var(--line); border-radius:8px;
  box-shadow:0 10px 26px rgba(20,40,80,.14); display:none;
}
.ss-list.open{ display:block; }
.ss-list .ac-item{ white-space:nowrap; padding-right:16px; }
.ss-list .ac-item b{ color:var(--primary); font-weight:700; }
.ss-list .ac-empty{ white-space:normal; line-height:1.6; border-top:1px dashed #eef2f8; }
.od-hint{ font-size:11px; color:#9aa6bb; margin-top:2px; }
/* 单据明细表（销售单/采购单共用）：列宽由内容决定，相邻输入框紧挨，不被拉伸留白 */
.od-grid{ table-layout:auto; width:auto; }
.od-grid th, .od-grid td{ padding:4px 6px; }
.od-grid th{ white-space:nowrap; }
.od-grid td input{
  height:30px; box-sizing:border-box; padding:0 6px;
  border:1px solid var(--line); border-radius:6px; background:#fff;
  font-size:13px; color:var(--text);
}
.od-grid td input.od-code{ width:134px; }
.od-grid td input.od-name{ width:260px; }
.od-grid td input.od-qty{ width:68px; }
.od-grid td input.od-price{ width:92px; }
.od-grid td input:focus{ outline:none; border-color:var(--accent); }
.od-grid .od-hint{ margin-top:1px; font-size:10px; line-height:1.2; }
.od-grid .btn{ height:26px; padding:0 8px; font-size:12px; }
.od-amt{ font-weight:600; font-variant-numeric:tabular-nums; }
.order-totals{ padding:10px 8px; font-size:14px; text-align:right; }
.order-totals b{ color:var(--primary); }
.draft-list{ margin-top:12px; }

/* ---------- 开单页 · 配件查询工具条（仿旺旺查询栏） ---------- */
.ps-bar{ display:flex; gap:8px; align-items:center; margin:4px 0 8px; flex-wrap:wrap; justify-content:flex-start; }
.ps-bar .ps-q{ flex:0 0 210px; width:210px; height:36px; border:1px solid var(--line); border-radius:8px; padding:0 12px; font-size:13px; background:#fff; color:var(--text); outline:none; }
.ps-bar .ps-q:focus{ border-color:var(--primary); }
.ps-bar .btn{
  height:36px; padding:0 18px; border-radius:8px; cursor:pointer;
  border:1px solid #d7dee9; background:#fff; color:var(--text);
  font-size:13px; line-height:34px;
}
.ps-bar .btn:hover{ background:#f5f8ff; border-color:#c3d4f7; }
.ps-bar .btn.primary{
  background:#3b82f6; border-color:#3b82f6; color:#fff; font-weight:600;
}
.ps-bar .btn.primary:hover{ background:#2f74ee; }
.ps-adv{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; background:var(--bg); border:1px dashed var(--line); border-radius:8px; padding:8px 12px; margin-bottom:8px; }
.ps-adv label{ font-size:12px; color:var(--text-2); }
.ps-adv .sel{ height:32px; border:1px solid var(--line); border-radius:8px; padding:0 8px; background:#fff; font-size:13px; }
.ps-res{ margin-bottom:10px; }
.ps-res table{ width:auto; border-collapse:collapse; font-size:12.5px; background:#fff; table-layout:auto; }
.ps-res th,.ps-res td{ border-bottom:1px solid var(--line); padding:4px 6px; text-align:left; white-space:nowrap; max-width:280px; overflow:hidden; text-overflow:ellipsis; }
.ps-res .ps-name{ max-width:none; }
.ps-res .btn{ height:26px; padding:0 8px; font-size:12px; }
.ps-res th{ position:sticky; top:0; background:#f7f9fc; color:var(--text-2); font-weight:600; }
.ps-res tbody tr{ cursor:pointer; }
.ps-res tbody tr:hover{ background:#f0f5ff; }
.ps-res .ps-tip{ font-size:12px; color:var(--text-2); padding:6px 2px; display:flex; gap:8px; align-items:center; }
.ps-res .ps-tip .btn{ height:28px; font-size:12px; }

/* ---------- 开单页 · 单据头（仿旺旺：白底、标签在上、横向一排） ---------- */
.order-head{ padding:14px 16px 12px; }
.oh-row{ display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap; }
.oh-row2{ margin-top:10px; }
.oh-f{ display:flex; flex-direction:column; gap:5px; }
.oh-f label{ font-size:12px; color:var(--text-2); white-space:nowrap; }
.oh-f input,.oh-f select{
  height:34px; border:1px solid var(--line); border-radius:8px;
  padding:0 10px; font-size:13px; background:#fff; color:var(--text); outline:none;
  box-sizing:border-box; width:120px;
}
.oh-f input:focus,.oh-f select:focus{ border-color:var(--primary); }
.oh-f input::placeholder{ color:#b7c0cf; }
/* 按截图比例定宽（8字段一行） */
.oh-partner{ width:200px; }
.oh-partner .ac-wrap{ width:100%; }
.oh-partner input{ width:100%; }
.oh-f:nth-child(2) input{ width:130px; }   /* 联系电话 */
.oh-f:nth-child(3) select{ width:104px; }  /* 付款方式 */
.oh-f:nth-child(4) select{ width:88px; }   /* 发货方式 */
.oh-f:nth-child(5) select{ width:88px; }   /* 发票方式 */
.oh-f:nth-child(6) select{ width:104px; }  /* 物流 */
.oh-f:nth-child(7) input{ width:140px; }   /* 单据编号 */
.oh-f:nth-child(8) input{ width:140px; }   /* 日期 */
.oh-row2 input{ width:150px; }
.oh-memo input{ width:320px; }
.oh-f .ac-wrap input{ width:100%; }

/* ---------- 开单页 · 页头/费用行/按钮排/预览（仿参考版式） ---------- */
.oh-phead{ display:flex; align-items:flex-end; gap:16px; }
.oh-phead-l h2{ margin:0; }
.oh-phead-r{ margin-left:auto; display:flex; align-items:center; gap:10px; padding-bottom:4px; }
/* 页头右侧工具栏（待发货订单的「客户搜索 + 刷新」等）：h2/p 在左，工具贴右 */
.page-head.phead-flex{ display:flex; align-items:flex-end; gap:16px; }
.page-head.phead-flex .phead-l h2{ margin:0; }
.page-head.phead-flex .phead-tools{ margin-left:auto; display:flex; align-items:center; gap:8px; padding-bottom:2px; }
.ps-kw{ width:230px; padding:6px 10px; border:1px solid var(--line, #d9dee7); border-radius:6px;
  font-size:13px; line-height:1.2; background:#fff; color:var(--text, #222); }
.ps-kw:focus{ outline:none; border-color:var(--accent, #2f7cf6); box-shadow:0 0 0 2px rgba(47,124,246,.12); }
@media (max-width:760px){
  .page-head.phead-flex{ flex-wrap:wrap; align-items:flex-start; }
  .page-head.phead-flex .phead-tools{ margin-left:0; width:100%; }
  .ps-kw{ flex:1; width:auto; }
}
.oh-autosave{ font-size:12px; color:#e8833a; }
.oh-autosave .oh-godraft{ margin-left:6px; color:var(--accent); text-decoration:underline; cursor:pointer; }
/* 草稿箱里的「未保存」自动暂存行 */
.ad-draft-row{ background:#fff8ee; }
.ad-draft-row:hover{ background:#fff3e0; }
.ad-tag{ display:inline-block; margin-right:6px; padding:1px 6px; border-radius:4px; font-size:11px;
  color:#b25a12; background:#ffe9cc; border:1px solid #f5c98c; vertical-align:1px; }
.ad-oper{ font-size:11px; color:var(--text-2); margin-left:4px; }
.od-feerow{ display:flex; align-items:center; gap:10px; margin-top:12px; flex-wrap:wrap; }
.od-feerow label{ font-size:13px; color:var(--text-2); white-space:nowrap; }
.od-feerow input,.od-feerow select{ height:32px; border:1px solid var(--line); border-radius:6px; padding:0 8px; width:92px; font-size:13px; background:#fff; color:var(--text); outline:none; }
.od-feerow input:focus,.od-feerow select:focus{ border-color:var(--primary); }
/* 百分比优惠：窄一点，一眼看出是「%」而不是金额 */
.od-feerow input.od-pct{ width:72px; text-align:right; }
.od-feerow .od-sum{ margin-left:auto; font-size:13px; color:var(--text-2); white-space:nowrap; }
.od-feerow .od-sum b{ color:var(--text); }
.od-feerow .od-sum .od-orange{ color:#e8833a; }
/* 退货单红冲金额（负数） */
.od-neg{ color:#e0524d !important; }
.od-feerow .od-sum .od-orange.od-neg{ color:#e0524d; }
/* 订单备注：整张单的备注，打印在合计金额下方 */
.od-remarkrow{ display:flex; align-items:flex-start; gap:10px; margin-top:10px; }
.od-remarkrow > label{ font-size:13px; color:var(--text-2); white-space:nowrap; padding-top:7px; min-width:56px; }
.od-remarkrow .od-remark{
  flex:1 1 auto; min-height:52px; max-height:160px; resize:vertical; line-height:1.55;
  border:1px solid var(--line); border-radius:6px; padding:6px 8px;
  font-size:13px; font-family:inherit; color:var(--text); background:#fff; outline:none;
}
.od-remarkrow .od-remark:focus{ border-color:var(--primary); }
.od-remarkrow .od-remark-tip{ font-size:12px; color:var(--text-3); padding-top:7px; white-space:nowrap; min-width:52px; text-align:right; }
.od-row .od-code[readonly],.od-row .od-name[readonly]{ background:#f7f8fa; color:var(--text-2); cursor:not-allowed; }
.od-actions{ display:flex; align-items:center; gap:8px; margin-top:12px; flex-wrap:wrap; justify-content:flex-end; }
/* 底部操作按钮 → 与查询栏「高级查询」同款：白底描边 */
.od-actions .btn{
  height:36px; padding:0 18px; border-radius:8px; cursor:pointer;
  border:1px solid #d7dee9; background:#fff; color:var(--text);
  font-size:13px; line-height:34px;
}
.od-actions .btn:hover{ background:#f5f8ff; border-color:#c3d4f7; }
.od-actions .od-lab{ font-size:13px; color:var(--text-2); margin-left:4px; white-space:nowrap; }
.od-actions select{ height:32px; border:1px solid var(--line); border-radius:6px; padding:0 6px; font-size:13px; background:#fff; color:var(--text); }
.empty-tip{ text-align:center; color:var(--text-2); padding:24px 0; font-size:13px; }
/* ---------- 全系统单据预览弹窗（纸张效果：A5 优先，放不下 A4） ---------- */
.nx-modal-box.nx-prev{ width:min(1040px, 96vw); height:min(92vh, 940px); max-height:92vh; }
.nx-prev .nx-modal-body{ padding:0; display:flex; flex-direction:column; overflow:hidden; }
.nx-prev{ display:flex; flex-direction:column; flex:1 1 auto; min-height:0; }
.nx-prev-bar{ display:flex; align-items:center; gap:10px; padding:8px 14px; background:#f6f9fe; border-bottom:1px solid var(--line); font-size:12px; color:var(--text-2); flex-shrink:0; flex-wrap:wrap; }
.nx-prev-chip{ white-space:nowrap; }
.nx-prev-chip b{ color:#2f7bd8; font-size:12.5px; }
.nx-prev-pg{ flex:0 0 auto; white-space:nowrap; padding:1px 8px; border-radius:10px;
  background:#fff2e2; border:1px solid #f0cfae; color:#b5601a; font-size:11.5px; }
.nx-prev-note{ color:#e8833a; }
.nx-prev-hint{ margin-left:auto; color:#9aa8bd; white-space:nowrap; }
.nx-prev-stage{ flex:1 1 auto; min-height:0; overflow:auto; padding:14px; background:#e9eef6; }
.nx-prev-sheet{ margin:0 auto; background:#fff; padding:8mm; box-sizing:border-box; box-shadow:0 3px 18px rgba(15,23,42,.18); }
/* 单据可点击放大：放大后鼠标变成缩小，再点还原 */
.nx-prev-sheet.zoomable{ cursor:zoom-in; transition:zoom .12s ease; }
.nx-prev-sheet.zoomable.zoomed{ cursor:zoom-out; }
.doc-prev-bar{ margin-top:8px; }
.doc-prev-bar .count{ color:var(--text-2); font-size:12px; }

/* ---------- 通用弹窗（单据明细等） ---------- */
.nx-modal{
  display:none; position:fixed; inset:0; z-index:99970;
  background:rgba(15,23,42,.45); backdrop-filter:blur(2px);
  align-items:center; justify-content:center; padding:24px;
}
.nx-modal.open{ display:flex; }
.nx-modal-box{
  position:relative;
  width:min(960px, 94vw); max-height:86vh; display:flex; flex-direction:column;
  background:#fff; border-radius:12px; overflow:hidden;
  box-shadow:0 20px 60px rgba(0,0,0,.3);
}
/* 2026-10-23 用户标注：所有弹框都能左右拉伸（拖右边中间那条小把手）
   只做中间一小段，别整条盖住 body 的纵向滚动条，否则鼠标拖不动滚动条了。 */
.nx-modal-grip{
  position:absolute; right:2px; top:50%; transform:translateY(-50%);
  width:12px; height:52px; cursor:ew-resize; z-index:6; touch-action:none;
  display:flex; align-items:center; justify-content:center;
  border-radius:6px; background:rgba(148,163,184,.16);
  opacity:.8; transition:opacity .15s, background .15s;
}
.nx-modal-box:hover .nx-modal-grip{ opacity:1; }
.nx-modal-grip:hover{ background:rgba(148,163,184,.32); }
.nx-modal-grip::before{
  content:""; width:4px; height:28px; border-radius:2px; background:#94a3b8;
}
body.nx-resizing, body.nx-resizing *{ cursor:ew-resize !important; user-select:none !important; }
.nx-modal-head{
  display:flex; align-items:center; justify-content:space-between;
  padding:14px 18px; border-bottom:1px solid var(--line); flex-shrink:0;
}
.nx-modal-title{ font-size:15px; font-weight:700; color:var(--text); }
.nx-modal-x{
  border:none; background:#f1f5f9; color:#475569; cursor:pointer;
  width:28px; height:28px; border-radius:7px; font-size:18px; line-height:1;
}
.nx-modal-x:hover{ background:#e2e8f0; }
.nx-modal-body{ padding:14px 18px 18px; overflow:auto; min-height:0; }
.nx-modal-tt{ flex:1; min-width:0; }
.nx-modal-sub{ font-size:12px; color:#7e8eaa; margin-top:4px; }
.nx-modal-acts{ display:flex; gap:8px; flex-shrink:0; margin-right:10px; flex-wrap:wrap; justify-content:flex-end; }
.nx-modal-acts .btn{ height:30px; padding:0 12px; font-size:12.5px; }
.nx-modal-acts .btn.danger{ color:#e0524d; border-color:#e0524d; background:#fff; }
.nx-modal-acts .btn.danger:hover{ background:#fdeeee; }
.nx-modal-foot{ display:flex; justify-content:flex-end; align-items:baseline; gap:6px; padding:10px 2px 0; font-size:13px; color:var(--text); }
.nx-modal-foot b{ font-size:15px; }
/* 蓝色标题栏弹窗（高级查询-查询配件） */
.nx-modal-box.nx-blue{ width:min(400px, 94vw); }
.nx-blue .nx-modal-head{ background:#2f7bd8; border-bottom:none; padding:10px 14px; }
.nx-blue .nx-modal-title{ color:#fff; }
.nx-blue .nx-modal-x{ background:transparent; color:#fff; }
.nx-blue .nx-modal-x:hover{ background:rgba(255,255,255,.18); }
.nx-blue .nx-modal-body{ padding:16px 20px 18px; }
/* ---------- 单据明细弹窗（销售单据 / 采购单据 点行下钻，2026-10-21 用户标注「不能下拉」） ----------
   原来：.nx-modal-body 自己滚（overflow:auto），表格里那份 .table-wrap 也带 overflow:auto
   → 横向前 12 列挤出 1000+px，横向滚动条掉到 39 行明细的最底部才看得到，等于拉不动。
   现在：body 不滚，交给 .table-wrap 吃满剩余高度做**双向**滚动容器，横向滚动条永远贴底可见，
   表头 sticky 照旧；底部合计固定不滚、弹窗加宽到 1180px（12 列基本一屏放得下）。 */
.nx-modal-box.nx-doc{ width:min(1180px, 96vw); max-height:88vh; }
.nx-doc .nx-modal-body{ padding:0; display:flex; flex-direction:column; overflow:hidden; min-height:0; }
.nx-doc .table-wrap{
  flex:0 1 auto; min-height:0; overflow:auto;
  border:none; border-radius:0; box-shadow:none;
}
.nx-doc table{ min-width:100%; }
.nx-doc .nx-modal-foot{
  flex-shrink:0; padding:10px 16px; border-top:1px solid var(--line);
  background:#f8fafd; justify-content:flex-end;
}
/* ---------- 查询历史弹窗（开单页「查看」） ---------- */
/* 弹窗高度按「表格区一屏 20 条」反推：表头 24px + 20 行 × 22px = 464px */
.nx-modal-box.nx-hist{ width:min(1080px, 96vw); height:min(94vh, 900px); max-height:94vh; }
.nx-hist .nx-modal-head{ padding:8px 14px; }
.nx-hist .nx-modal-body{ padding:0; display:flex; flex-direction:column; max-height:none; flex:1 1 auto; min-height:0; overflow:hidden; }
.hist-form{ padding:8px 12px 2px; background:#f6f9fe; border-bottom:1px solid var(--line); flex-shrink:0; }
.hist-line{ display:flex; align-items:center; flex-wrap:wrap; gap:5px 8px; margin-bottom:5px; }
.hist-line > label{ font-size:12.5px; color:#334155; flex-shrink:0; }
.hist-line input[type="text"], .hist-line input[type="date"], .hist-line select{
  height:28px; border:1px solid #cfd8e6; border-radius:4px; padding:0 6px;
  font-size:12.5px; background:#fff; color:var(--text); outline:none; box-sizing:border-box;
}
.hist-line input[type="text"]{ width:132px; }
.hist-line input[type="date"]{ width:130px; }
.hist-line select{ max-width:158px; }
.hist-line input:focus, .hist-line select:focus{ border-color:#2f7bd8; }
.hist-line .btn{ height:28px; padding:0 12px; font-size:12.5px; border-radius:4px; }
.hist-line .btn.primary{ background:#2f7bd8; color:#fff; border-color:#2f7bd8; }
.hist-line .btn.primary:hover{ background:#2668b8; }
.hist-sep{ color:#94a3b8; font-size:12px; }
.hist-tabs{ display:flex; flex-wrap:wrap; gap:2px; border-bottom:1px solid var(--line); margin:2px 0 6px; }
.hist-tab{
  border:none; background:transparent; padding:5px 10px; font-size:12.5px;
  color:#475569; cursor:pointer; border-radius:4px 4px 0 0; font-family:inherit;
}
.hist-tab:hover{ background:#e8f1ff; color:#1b62c9; }
.hist-tab.on{ background:#e8f1ff; color:#1b62c9; font-weight:600; box-shadow:inset 0 -2px 0 #2f7bd8; }
.hist-line2 select{ max-width:124px; }
.hist-result{ flex:1 1 auto; min-height:0; overflow:hidden; padding:0 12px; display:flex; flex-direction:column; }
.hist-tbwrap{ flex:1 1 auto; min-height:0; border:1px solid var(--line); border-radius:4px; overflow:auto; }
.hist-tb{ width:100%; border-collapse:collapse; font-size:12.5px; }
.hist-tb th{
  background:#eef3fa; color:#334155; font-weight:600; white-space:nowrap;
  border:1px solid #dde5f0; padding:3px 6px; height:24px; line-height:16px; text-align:left;
  position:sticky; top:0; z-index:1;
}
.hist-tb td{
  border:1px solid #e6ecf5; padding:2px 6px; height:22px; line-height:16px; white-space:nowrap;
  max-width:220px; overflow:hidden; text-overflow:ellipsis; color:#334155;
}
.hist-tb tbody tr:nth-child(even){ background:#fafcff; }
.hist-tb tbody tr:hover{ background:#eef5ff; }
.hist-tb .hist-idx{ width:44px; text-align:center; color:#64748b; }
.hist-empty{ padding:30px; text-align:center; color:#8a97ab; font-size:13px; }
.hist-foot{ display:flex; align-items:center; justify-content:flex-end; gap:8px; padding:6px 2px 8px; font-size:12.5px; color:#64748b; flex-shrink:0; }
.hist-foot .btn{ height:28px; padding:0 10px; font-size:12.5px; border-radius:4px; }
/* 矮屏（笔记本 768 高）紧凑排版，保证一屏仍是 20 条 */
@media (max-height:820px){
  .nx-modal{ padding:8px; }
  .nx-modal-box.nx-hist{ height:calc(100vh - 16px); max-height:none; }
  .nx-hist .nx-modal-head{ padding:5px 14px; }
  .nx-hist .nx-modal-title{ font-size:14px; }
  .hist-form{ padding:6px 12px 2px; }
  .hist-line{ margin-bottom:4px; gap:4px 6px; }
  .hist-line input[type="text"], .hist-line input[type="date"], .hist-line select, .hist-line .btn{ height:26px; }
  .hist-tabs{ margin:0 0 4px; }
  .hist-tab{ padding:3px 9px; }
  .hist-tb th{ height:22px; padding:2px 6px; line-height:15px; }
  .hist-tb td{ height:20px; padding:1px 6px; line-height:15px; }
  .hist-foot{ padding:4px 2px 6px; }
  .hist-foot .btn{ height:26px; }
}
/* 更矮（720p 笔记本 / 分屏）再压一档 */
@media (max-height:700px){
  .hist-form{ padding:4px 10px 0; }
  .hist-line{ margin-bottom:3px; }
  .hist-line input[type="text"], .hist-line input[type="date"], .hist-line select, .hist-line .btn{ height:24px; }
  .hist-tab{ padding:2px 8px; }
  .hist-tb th{ height:21px; }
  .hist-tb td{ height:19px; line-height:14px; }
  .hist-foot{ padding:3px 2px 4px; }
  .hist-foot .btn{ height:24px; }
}

/* 高级查询表单 */
.adv-form .adv-row{ display:flex; align-items:center; gap:8px; margin-bottom:9px; }
.adv-form .adv-row > label:first-child{ width:72px; flex-shrink:0; font-size:13px; color:var(--text); text-align:left; }
.adv-form input[type="text"], .adv-form input[type="number"], .adv-form select{
  height:32px; border:1px solid var(--line); border-radius:8px;
  padding:0 10px; font-size:13px; background:#fff; color:var(--text); outline:none;
  box-sizing:border-box; flex:1; min-width:0;
}
.adv-form input:focus, .adv-form select:focus{ border-color:#2f7bd8; }
.adv-form select{ flex:0 0 74px; padding:0 4px; }
.adv-form .adv-row:nth-child(2) select, .adv-form .adv-row:nth-child(3) select{ flex:0 0 74px; }
.adv-form input[type="checkbox"]{ width:15px; height:15px; flex-shrink:0; cursor:pointer; accent-color:#2f7bd8; }
.adv-form .adv-symrow{ margin-top:2px; }
.adv-form .adv-sym{ display:flex; align-items:center; gap:6px; font-size:13px; color:var(--text); cursor:pointer; }
.adv-form .adv-btns{ display:flex; justify-content:center; gap:10px; margin-top:14px; }
.adv-form .adv-btns .btn{ min-width:96px; height:34px; }
.adv-form .adv-btns .btn.primary{ background:#2f7bd8; color:#fff; border-color:#2f7bd8; }
.adv-form .adv-btns .btn.primary:hover{ background:#2668b8; }
/* 去掉旧的内嵌高级查询条样式引用 */
.ps-adv{ display:none !important; }
.ps-res table{ table-layout:fixed; }
.ps-res .ps-name{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.detail-tbl th{ text-align:left; background:#f7f9fc; width:120px; color:#5b6677; font-weight:600; white-space:nowrap; }


/* 动态库存为 0 或负（已被占满）时标红提示 */
.od-dyn-zero{ color:#e0524d; font-weight:600; }

/* 退货红冲：负数标红 */
.num-neg{ color:#e0524d; }

/* ---------- AI 入库弹窗 ---------- */
.nx-modal-box.nx-ai{ width:min(920px, 96vw); }
.nx-ai .nx-modal-body{ padding:0 2px 4px; }
.ai-tabs{ display:flex; gap:4px; border-bottom:1px solid var(--line); margin:0 0 10px; }
.ai-tab{
  border:1px solid var(--line); border-bottom:none; background:#f5f8fc; color:var(--text-2);
  font-size:13px; padding:7px 16px; border-radius:7px 7px 0 0; cursor:pointer; outline:none;
}
.ai-tab.active{ background:#fff; color:var(--primary); font-weight:600; margin-bottom:-1px; }
.ai-pane{ padding:0 2px; }
.ai-hint{ font-size:12.5px; color:var(--text-2); line-height:1.7; margin:2px 0 8px; }
/* 识别原文折叠区（2026-10-23：漏行时点开看 OCR 到底读到了什么） */
.ai-raw{ margin:0 0 10px; font-size:12px; color:var(--text-2); }
.ai-raw summary{ cursor:pointer; color:var(--primary); font-size:12.5px; padding:2px 0; }
.ai-raw pre{
  margin:6px 0 0; max-height:240px; overflow:auto; background:#f8fafc;
  border:1px solid var(--line); border-radius:8px; padding:10px 12px;
  font-family:ui-monospace,Consolas,monospace; font-size:11.5px; line-height:1.65;
  white-space:pre-wrap; word-break:break-all; color:var(--text);
}
.ai-pane textarea{
  width:100%; box-sizing:border-box; min-height:118px; border:1px solid var(--line);
  border-radius:8px; padding:10px 12px; font-size:13.5px; line-height:1.7;
  color:var(--text); background:#fff; outline:none; resize:vertical;
}
.ai-pane textarea:focus{ border-color:var(--primary); }
.ai-tools{ display:flex; align-items:center; gap:8px; margin-top:8px; flex-wrap:wrap; }
.ai-count{ font-size:12.5px; color:var(--text-2); }
.ai-drop{
  border:1.5px dashed #c3d2e5; border-radius:10px; padding:22px 16px; text-align:center;
  cursor:pointer; background:#f8fbff; color:var(--text-2); font-size:13px;
  display:flex; flex-direction:column; gap:5px;
}
.ai-drop b{ color:var(--primary); font-size:14px; }
.ai-drop.over{ border-color:var(--primary); background:#eef5ff; }
.ai-row{ display:flex; align-items:center; gap:8px; margin-top:10px; }
.ai-row label{ font-size:12.5px; color:var(--text-2); white-space:nowrap; }
.ai-row input{
  flex:1; height:32px; box-sizing:border-box; padding:0 10px; font-size:13px;
  border:1px solid var(--line); border-radius:7px; background:#fff; color:var(--text); outline:none;
}
.ai-row input:focus{ border-color:var(--primary); }
.ai-shots{ display:flex; flex-wrap:wrap; gap:10px; margin-top:10px; }
.ai-thumb{
  position:relative; width:128px; height:92px; border:1px solid var(--line);
  border-radius:8px; overflow:hidden; background:#f8fafc;
}
.ai-thumb img{ width:100%; height:100%; object-fit:contain; background:#fff; display:block; }
.ai-thumb-del{
  position:absolute; top:3px; right:3px; width:20px; height:20px; padding:0;
  border:none; border-radius:50%; background:rgba(15,23,42,.62); color:#fff;
  font-size:14px; line-height:20px; text-align:center; cursor:pointer;
}
.ai-thumb-del:hover{ background:#dc2626; }
.ai-result{ margin-top:12px; }
.ai-tb{ width:100%; border-collapse:collapse; font-size:12.5px; }
.ai-tb th{
  background:#eef3fa; color:#334155; font-weight:600; border:1px solid #dde5f0;
  padding:6px 8px; text-align:left; white-space:nowrap;
}
.ai-tb td{
  border:1px solid #e6ecf5; padding:5px 8px; white-space:nowrap; color:#334155;
  max-width:220px; overflow:hidden; text-overflow:ellipsis;
}
.ai-ok{ color:#15803d; font-weight:600; }
.ai-warn{ color:#b45309; font-weight:600; }
.ai-bad{ color:#dc2626; font-weight:600; }
.ai-chk{ display:inline-flex; align-items:center; gap:4px; margin-left:8px; font-size:12px; color:#334155; cursor:pointer; }
.ai-chk input{ margin:0; }
#od-ai-btn{ font-weight:600; }
#od-ai-btn::before{ content:"✦ "; color:#7c5cff; }

/* ===== 右侧导航：报价（独立模块，暂不关联左侧 ERP） =====
   紧凑竖条：栏宽只够 3 个中文字，类目名居中，上下不留多余空白 */
:root{ --rail-w:66px; }          /* 栏宽 58 + 右边距 8 */
.quote-rail{
  width:58px; flex:0 0 58px; align-self:flex-start;
  position:sticky; top:66px; margin:66px 8px 0 0;   /* 66 = 顶栏 56 + 10，贴在顶栏下方 */
  max-height:calc(100vh - 76px);
  background:#fff; border:1px solid var(--line); border-radius:9px;
  box-shadow:0 3px 12px rgba(20,30,50,.07);
  display:flex; flex-direction:column; overflow:hidden;
  z-index:4;
}
/* 头部：只有「报价」两个字 */
.quote-rail .qr-brand{
  padding:7px 2px 6px; text-align:center;
  background:linear-gradient(180deg,#eef5ff,#fff);
  border-bottom:1px solid var(--line);
}
.quote-rail .qr-title{
  font-size:12.5px; font-weight:700; color:#1d4ed8;
  letter-spacing:1px; line-height:1.3; white-space:nowrap;
}
/* 类目：文字水平居中 */
.quote-rail .qr-nav{ padding:3px 0 4px; overflow-y:auto; }
.quote-rail .qr-nav::-webkit-scrollbar{ width:4px; }
.quote-rail .qr-nav::-webkit-scrollbar-thumb{ background:#dde5f0; border-radius:2px; }
.quote-rail .qr-item{
  display:flex; align-items:center; justify-content:center;
  margin:1px 3px; padding:6px 0; border-radius:6px;
  font-size:12px; line-height:1.2; color:#41506b;
  cursor:pointer; user-select:none; white-space:nowrap;
  transition:background .15s, color .15s;
}
.quote-rail .qr-item:hover{ background:#f2f6ff; color:#1d4ed8; }
.quote-rail .qr-item.active{ background:#e6efff; color:#1d4ed8; font-weight:700; }
.quote-rail .qr-label{ display:block; }
/* 窄屏直接隐藏这条辅助导航，优先保证单据表格宽度 */
@media (max-width:920px){
  :root{ --rail-w:0px; }
  .quote-rail{ display:none; }
}

/* ---------- 备件资料修改弹窗（库存查询 → 操作 → 修改） ---------- */
.nx-modal-box.pa-modal{ width:min(880px, 94vw); }
.pa-tip{ font-size:12px; line-height:1.6; color:#41506b; background:#f4f8ff;
  border:1px solid #dbe6fa; border-radius:8px; padding:8px 10px; margin-bottom:10px; }
.pa-grid{ display:flex; flex-direction:column; gap:8px; }
.pa-row{ display:flex; gap:10px; flex-wrap:wrap; }
.pa-row .pa-f{ flex:1 1 0; min-width:180px; }
.pa-f{ display:flex; flex-direction:column; gap:3px; }
.pa-f > span{ font-size:12px; color:#64748b; }
.pa-f .sel{ width:100%; height:32px; box-sizing:border-box; }
.pa-f textarea.sel{ height:auto; min-height:64px; padding:6px 8px; resize:vertical; font-family:inherit; }
.pa-wide{ margin-top:8px; }

/* ---------- 修改库存 / 调整记录弹窗（2026-10-30） ---------- */
.sa-facts{ display:flex; flex-direction:column; gap:5px; margin-top:10px; padding:10px 12px;
  background:#f8fafc; border:1px solid var(--line); border-radius:10px; font-size:13px; }
.sa-fact{ display:flex; gap:.7em; align-items:baseline; flex-wrap:wrap; }
.sa-fact > span{ flex:0 0 5.2em; color:var(--text-2); font-size:12px; }
.sa-fact b{ font-weight:600; }
.sa-fact i{ font-style:normal; color:var(--text-2); font-size:12px; }
.sa-fact .sa-cur{ font-size:16px; font-variant-numeric:tabular-nums; }
.sa-delta{ margin-top:10px; min-height:18px; font-size:13px; color:var(--text-2); }
.sa-delta.up{ color:#c02626; font-weight:600; }
.sa-delta.down{ color:#1f9254; font-weight:600; }
.sa-sub{ margin-top:2px; font-size:12px; color:var(--text-2); }
.sa-why{ white-space:normal; max-width:220px; }
.sa-tip2{ margin-top:8px; font-size:12px; color:var(--text-2); }
/* 表格里的「操作」列 */
.ops-cell{ white-space:nowrap; }
.ops-cell .btn{ padding:2px 10px; font-size:12px; }

/* ---------- 单据列表筛选条：带标签单行 + 右侧按钮组 ---------- */
.doc-filter{ gap:14px; }
.doc-filter .tf{ display:flex; align-items:center; gap:6px; min-width:0; }
.doc-filter .tf > span{ font-size:12px; color:#64748b; white-space:nowrap; }
.doc-filter .tf .sel{ height:34px; padding:0 8px; font-size:13px; }
.doc-filter .tf:not(.tf-grow) .sel{ min-width:118px; }
.doc-filter .tf-range{ display:flex; align-items:center; gap:6px; }
.doc-filter .tf-range .sel{ min-width:140px; }
.doc-filter .tf-range i{ font-style:normal; font-size:12px; color:#94a3b8; }
.doc-filter .tf-grow{ flex:1 1 240px; }
.doc-filter .tf-grow .sel{ width:100%; min-width:180px; }
.doc-filter .spacer{ flex:0 0 auto; }
.doc-filter .btn{ height:34px; padding:0 14px; }
.doc-filter .btn.ghost{ background:#fff; color:var(--text); border:1px solid var(--line); }

/* ---------- 单据列表筛选条 v2（仿尼西版：两行紧凑、第二行可收起） ---------- */
.doc-filter2{
  display:flex; flex-direction:column; gap:8px;
  padding:10px 12px; background:#fff; border:1px solid var(--line); border-radius:10px;
}
.df-row{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.df-in{
  height:30px; border:1px solid #cfd8e3; border-radius:4px; background:#fff;
  padding:0 6px; font-size:13px; color:var(--text); outline:none; min-width:92px;
}
.df-in:focus{ border-color:#8fb3f6; box-shadow:0 0 0 2px rgba(47,111,237,.12); }
.df-in::placeholder{ color:#9aa7b8; }
.df-in[type="date"]{ width:124px; min-width:124px; color:#334155; }
select.df-in{ min-width:92px; color:#334155; }
#d-pay{ min-width:104px; }
#d-fetch{ min-width:104px; }
.df-q{ flex:1 1 160px; min-width:120px; }
/* 关键字框不再拉满整行：最宽 220px（宽屏下约为原来的三分之一），
   右侧留白，查询/重置跟在后面 —— 2026-10-20 用户口径 */
#d-q{ flex:1 1 160px; max-width:220px; }
.df-extra .df-in{ min-width:112px; }
/* 制单员 / 业务员：下拉（选项 = 本系统帐号 + 尼西历史单据里出现过的姓名） */
.df-people{ min-width:126px; max-width:150px; }
.df-btn{
  height:30px; padding:0 10px; border-radius:4px; cursor:pointer; font-size:13px;
  border:1px solid #cfd8e3; background:#fff; color:var(--text-2); white-space:nowrap;
}
.df-btn:hover{ border-color:#9fb6d4; color:var(--text); }
.df-btn.primary{ background:#2f6fed; border-color:#2f6fed; color:#fff; }
.df-btn.primary:hover{ background:#2560d8; }
.df-link{
  height:30px; padding:0 6px; border:0; background:none; cursor:pointer;
  font-size:13px; color:#2f6fed; white-space:nowrap;
}
.df-link:hover{ text-decoration:underline; }
.df-extra{ padding-top:2px; border-top:1px dashed #e6ecf5; }

/* ---------- 库存查询：尼西式筛选条（动作行 + 主条件行 + 更多行） ---------- */
.inv-bar{
  display:flex; flex-direction:column; gap:8px;
  padding:10px 12px; background:#fff; border:1px solid var(--line); border-radius:10px;
}
.inv-acts{ display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  padding-bottom:8px; border-bottom:1px solid #eef2f8; }
.inv-acts .df-btn{ color:#475569; }
/* 一格一列：让输入框按比例分摊整行宽度（原生 input 的默认 size=20 会把一行挤断） */
.inv-bar .df-row{ gap:6px; flex-wrap:nowrap; }
.inv-bar .df-extra{ padding-top:4px; flex-wrap:wrap; }
.inv-bar .df-in{ flex:1 1 110px; width:auto; min-width:92px; }
.inv-bar .df-extra .df-in{ flex:1 1 96px; min-width:84px; }
#i-code,#i-name{ flex:1.2 1 130px; }
#i-eng{ flex:1 1 140px; }
#i-store,#i-wh{ flex:0 1 132px; }
#i-stock{ flex:0 0 96px; }
.inv-bar .df-btn,.inv-bar .df-link{ flex:0 0 auto; }
@media (max-width:1180px){ .inv-bar .df-row{ flex-wrap:wrap; } }
/* 选中行：修改备件属性按选中的这一行来 */
.inv-row{ cursor:pointer; }
.inv-row[data-sel="1"] td{ background:#e8f1ff !important; box-shadow:inset 0 0 0 1px #bcd4fb; }

/* ---------- 采购付款审核弹窗 ---------- */
.pay-audit .nx-modal-box{ width:min(720px, 94vw); }
.pav-head{ display:flex; align-items:center; gap:12px; margin-bottom:10px; }
.pav-amt{ font-size:20px; font-weight:700; color:#0f172a; }
.pav-tbl{ width:100%; border-collapse:collapse; }
.pav-tbl th{ width:16%; text-align:left; font-weight:400; color:#4a5a72; background:#f4f7fb;
  border:1px solid #dbe3ee; padding:6px 8px; font-size:12px; }
.pav-tbl td{ border:1px solid #dbe3ee; padding:6px 8px; font-size:12.5px; }
.pav-imgs{ display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
.pav-imgs img{ width:104px; height:104px; object-fit:cover; border:1px solid var(--line); border-radius:6px; }
.pav-note{ font-size:12px; color:#64748b; line-height:1.7; margin-top:10px; }
.om-list{ display:flex; flex-direction:column; gap:8px; }
.om-list .om-btn{ justify-content:flex-start; text-align:left; }
.om-list .om-btn[disabled]{ opacity:.45; cursor:not-allowed; }
#od-shipreg.od-done{ background:#e8f7ee; color:#10794a; border:1px solid #b7e3c9; }

/* ---------- 顶栏帐号：只留帐号名 + 小三角，悬停展开下拉 ---------- */
.topbar-user-wrap{ position:relative; display:inline-flex; align-items:center; gap:2px; }
.topbar-user{ background:var(--bg); padding:6px 12px; border-radius:20px; cursor:default; }
.topbar-caret{ width:20px; height:26px; display:inline-flex; align-items:center; justify-content:center;
  border:0; background:transparent; padding:0; cursor:pointer; color:#8a97a8; }
.topbar-caret i{ width:0; height:0; border-left:4.5px solid transparent; border-right:4.5px solid transparent;
  border-top:6px solid currentColor; transition:transform .16s ease; }
.topbar-user-wrap:hover .topbar-caret, .topbar-user-wrap.open .topbar-caret{ color:#2f6fed; }
.topbar-user-wrap:hover .topbar-caret i, .topbar-user-wrap.open .topbar-caret i{ transform:rotate(180deg); }
.topbar-menu{ position:absolute; right:0; top:calc(100% + 6px); min-width:140px; background:#fff;
  border:1px solid var(--line); border-radius:10px; box-shadow:0 12px 30px rgba(15,23,42,.16); padding:5px;
  opacity:0; visibility:hidden; transform:translateY(-4px); transition:opacity .16s ease, transform .16s ease, visibility .16s;
  z-index:80; }
/* 悬停桥：菜单与三角之间不留空隙，否则鼠标一移就消失 */
.topbar-menu::before{ content:""; position:absolute; left:0; right:0; top:-9px; height:9px; }
.topbar-user-wrap:hover .topbar-menu,
.topbar-user-wrap.open .topbar-menu,
.topbar-user-wrap:focus-within .topbar-menu{ opacity:1; visibility:visible; transform:translateY(0); }
.tm-item{ display:block; width:100%; text-align:left; border:0; background:transparent; padding:8px 10px;
  border-radius:7px; font-size:13px; color:#334155; cursor:pointer; white-space:nowrap; }
.tm-item:hover{ background:#f2f6ff; color:#2f6fed; }
.tm-item[data-act="logout"]{ color:#d0463f; }
.tm-item[data-act="logout"]:hover{ background:#fdf2f1; color:#b93a33; }

/* 个人中心弹窗 */
.pf-card{ display:flex; gap:14px; align-items:center; padding:4px 0 12px; }
.pf-avatar{ width:52px; height:52px; border-radius:50%; background:linear-gradient(135deg,#4a8cff,#2f6fed);
  color:#fff; font-size:20px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.pf-name{ font-size:16px; font-weight:700; color:#0f172a; }
.pf-role{ font-size:12px; color:#64748b; margin-top:3px; }
.pf-tbl{ width:100%; border-collapse:collapse; }
.pf-tbl th{ width:96px; text-align:left; font-weight:400; color:#4a5a72; background:#f4f7fb;
  border:1px solid #dbe3ee; padding:6px 8px; font-size:12px; }
.pf-tbl td{ border:1px solid #dbe3ee; padding:6px 8px; font-size:12.5px; }
.pf-note{ font-size:12px; color:#64748b; line-height:1.7; margin-top:10px; }

/* 修改密码弹窗（2026-10-29 安全改造） */
.cpw-box{ width:470px; max-width:100%; }
.cpw-tip{ font-size:12px; color:#64748b; line-height:1.75; background:#f7f9fc;
  border:1px solid #e6ecf5; border-radius:8px; padding:10px 12px; margin-bottom:14px; }
.cpw-f{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.cpw-f > span{ width:78px; flex:0 0 78px; text-align:right; font-size:13px; color:#475569; }
.cpw-f > input{ flex:1 1 auto; min-width:0; height:36px; border:1px solid #d7dee9;
  border-radius:7px; padding:0 10px; font-size:14px; outline:none; box-sizing:border-box; }
.cpw-f > input:focus{ border-color:#2563eb; box-shadow:0 0 0 3px rgba(37,99,235,.12); }
.cpw-err{ color:#e0524d; font-size:12px; min-height:17px; padding-left:88px; line-height:1.5; }

/* ---------- 付款审核状态标签 & 采购单按钮态 ---------- */
.pay-chip.info{ background:#e8f0fe; color:#1d4ed8; border:1px solid #c3d6fb; }
.pay-chip.rej{ background:#fdeceb; color:#b93a33; border:1px solid #f6c9c5; }
.pay-chip.mute{ background:#f1f5f9; color:#64748b; border:1px solid #e2e8f0; }
.pl-pending{ color:#b45309; }
.pav-rej{ color:#b93a33; }
#od-shipreg.od-wait{ background:#e8f0fe; color:#1d4ed8; border:1px solid #c3d6fb; }
#od-shipreg.od-rej{ background:#fdeceb; color:#b93a33; border:1px solid #f6c9c5; }
.pf-modal .nx-modal-box{ width:min(660px, 94vw); }

/* ---------- 设置 › 打印设置 ---------- */
.pts-wrap{ display:grid; grid-template-columns:236px minmax(0,1fr); gap:14px; align-items:start; }
.pts-rail{ padding:10px 8px; position:sticky; top:8px; }
.pts-rail-h{ font-size:12px; color:var(--text-2); padding:4px 8px 8px; letter-spacing:.5px; }
.pts-list{ display:flex; flex-direction:column; gap:2px; }
.pts-item{ display:flex; align-items:center; gap:6px; padding:9px 10px; border-radius:8px; cursor:pointer;
  font-size:13.5px; color:#3b4a61; border:1px solid transparent; }
.pts-item:hover{ background:#f1f5fb; }
.pts-item.active{ background:#e8f0fe; color:#1d4ed8; font-weight:600; border-color:#c7dbfb; }
.pts-nm{ flex:1; }
.pts-badge{ font-size:10px; padding:1px 6px; border-radius:999px; background:#fff4e5; color:#b45309; border:1px solid #f5d8a8; }
.pts-dot{ width:6px; height:6px; border-radius:50%; background:#2f6fed; flex:0 0 auto; }
.pts-rail-f{ font-size:11px; color:#909cb2; padding:10px 8px 4px; border-top:1px dashed var(--line); margin-top:8px; line-height:1.6; }
.pts-main{ min-width:0; }
.pts-card{ padding:16px 18px; }
.pts-head{ display:flex; justify-content:space-between; gap:12px; align-items:flex-start;
  border-bottom:1px solid var(--line); padding-bottom:12px; flex-wrap:wrap; }
.pts-title{ font-size:17px; font-weight:700; color:var(--text); }
.pts-sub{ font-size:12px; color:var(--text-2); margin-top:4px; }
.pts-acts{ display:flex; gap:8px; flex-wrap:wrap; }
.pts-sec{ padding:14px 0 8px; border-bottom:1px dashed #eef2f8; }
.pts-sec:last-child{ border-bottom:none; }
.pts-sec-t{ font-size:13px; font-weight:600; color:#334155; margin-bottom:10px; }
.pts-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:12px 16px; }
.pts-grid > label{ display:flex; flex-direction:column; gap:6px; font-size:12.5px; color:var(--text-2); }
.pts-grid input, .pts-grid select{ padding:7px 9px; border:1px solid var(--line); border-radius:8px;
  font-size:13px; color:var(--text); background:#fff; width:100%; box-sizing:border-box; }
.pts-wide{ grid-column:1 / -1; }
.pts-chks{ display:flex; flex-wrap:wrap; gap:8px 14px; }
.pts-chk{ display:inline-flex; align-items:center; gap:7px; font-size:13px; color:#334155;
  padding:5px 10px; border:1px solid var(--line); border-radius:8px; background:#fbfcfe; cursor:pointer; }
.pts-chk input{ width:15px; height:15px; }
.pts-cols{ display:grid; grid-template-columns:repeat(auto-fill,minmax(216px,1fr)); gap:8px 14px; }
.pts-col{ display:flex; align-items:center; justify-content:space-between; gap:8px; }
.pts-wbox{ font-size:11.5px; color:var(--text-2); white-space:nowrap; }
.pts-w{ width:58px; padding:5px 6px; border:1px solid var(--line); border-radius:6px; font-size:12.5px; text-align:right; }
.pts-note{ width:100%; box-sizing:border-box; padding:8px 10px; border:1px solid var(--line);
  border-radius:8px; font-size:13px; font-family:inherit; resize:vertical; color:var(--text); }
/* 本机纸张（连续纸 / 针式打印机的纸宽·折页高） */
.pts-paper{ padding:14px 18px; margin-bottom:14px; }
.pts-paper-hd{ display:flex; } 
.pts-paper-hd b{ font-size:14px; color:var(--text); white-space:nowrap; margin-right:10px; }
.pts-paper-hint{ font-size:11.5px; color:var(--text-2); line-height:1.7; }
.pts-paper-bd{ display:flex; flex-wrap:wrap; align-items:flex-end; gap:12px 18px; margin-top:12px; }
.pts-paper-bd > label{ display:flex; flex-direction:column; gap:5px; font-size:12px; color:var(--text-2); }
.pts-paper-bd input{ width:92px; padding:7px 9px; border:1px solid var(--line); border-radius:8px;
  font-size:13px; color:var(--text); background:#fff; box-sizing:border-box; }
.pts-paper-bd select{ padding:7px 9px; border:1px solid var(--line); border-radius:8px;
  font-size:13px; color:var(--text); background:#fff; }
.pts-pp-pre{ display:flex; flex-wrap:wrap; align-items:center; gap:6px; font-size:12px; color:var(--text-2); }
.pts-pp-btn{ display:inline-flex; flex-direction:column; align-items:center; gap:1px; line-height:1.15;
  height:auto; padding:5px 9px; font-size:12px; }
.pts-pp-btn i{ font-style:normal; font-size:10px; color:#909cb2; }
.pts-paper-ft{ margin-top:10px; font-size:11.5px; color:var(--text-2); line-height:1.7; }
.pts-paper-ft b{ color:#1d4ed8; }
/* 还没选过纸型时的引导条：只在第一次进来出现，点一下就消失 */
.pts-paper-alert{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:11px;
  padding:9px 12px; border:1px solid #f3d38a; background:#fff9e8; border-radius:9px;
  font-size:12px; line-height:1.65; color:#7a5410; }
.pts-paper-alert span{ flex:1 1 320px; }
.pts-paper-alert b{ color:#8a5b00; }
.pts-paper-alert .btn{ flex:0 0 auto; }
/* 三等分是针式机最常见的规格，按钮上给个推荐色，一眼能找到 */
.pts-pp-btn.is-rec{ border-color:#1d4ed8 !important; background:#eef4ff !important; color:#1d4ed8 !important; }
.pts-pp-btn.is-rec i{ color:#3b6fd4; }
@media (max-width:1080px){
  .pts-wrap{ grid-template-columns:1fr; }
  .pts-rail{ position:static; }
}

/* ---------- 采购付款申请：单据锁定态 ---------- */
.od-lockbar{ display:flex; gap:12px; align-items:flex-start; margin:12px 0 0; padding:12px 14px;
  border-radius:10px; border:1px solid #bfd3f6; background:#eef4fe; }
.od-lockbar.rej{ border-color:#f3c3c3; background:#fdf0f0; }
.od-lockbar.ok{ border-color:#b8e0cc; background:#eefaf3; }
.od-lock-ico{ font-size:17px; line-height:1.2; }
.od-lock-txt b{ display:block; font-size:13.5px; color:#1e3a8a; margin-bottom:3px; }
.od-lockbar.rej .od-lock-txt b{ color:#a32d2d; }
.od-lockbar.ok .od-lock-txt b{ color:#0f6e56; }
.od-lock-txt span{ font-size:12px; color:#4a5a72; line-height:1.7; }
.od-locked-dis{ opacity:.72; cursor:not-allowed; background:#f5f7fa !important; color:#64748b !important; }
.st-lock{ display:inline-flex; align-items:center; gap:3px; font-size:11px; padding:1px 7px;
  border-radius:999px; background:#eef4fe; color:#1d4ed8; border:1px solid #c7dbfb; white-space:nowrap; }

/* ---------- 单据撤回（2026-10-25）：钱没动、货没动 → 业务员可以撤回改/删 ---------- */
.od-lockbar.revoke{ border-color:#f6dfae; background:#fffaeb; }
.od-lockbar.revoke .od-lock-txt b{ color:#a4630a; }
.od-lockbar.revoke .od-lock-txt span{ color:#7c5a20; }
.od-revoke{ align-self:center; margin-left:auto; flex-shrink:0; white-space:nowrap;
  background:#fff; border:1px solid #e3b979; color:#a4630a; font-weight:600; }
.od-revoke:hover{ background:#fdf2dc; border-color:#d9a54f; }
.st-canrev{ display:inline-flex; align-items:center; gap:3px; font-size:11px; padding:1px 7px;
  border-radius:999px; background:#fffaeb; color:#a4630a; border:1px solid #f6dfae; white-space:nowrap; }
/* 待订货的「卡点」提示 + 时间轴里的说明块 */
.ug-wait-tip{ display:block; margin-top:3px; font-size:10.5px; font-style:normal; color:#b0762a;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ug-callout{ margin-top:14px; padding:12px 14px; border-radius:10px;
  border:1px solid #f6dfae; background:#fffaeb; }
.ug-callout-t{ font-size:13px; font-weight:700; color:#8a5300; margin-bottom:5px; }
.ug-callout-s{ font-size:12px; line-height:1.75; color:#7c5a20; }
.ug-callout-s b{ color:#a4630a; }
.ug-callout .btn{ margin-top:10px; }

/* 付款申请弹窗 */
.pa-form .pa-head{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding-bottom:10px; margin-bottom:12px; border-bottom:1px dashed #e2e8f2; }
.pa-head-l{ display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; }
.pa-title{ font-size:15px; font-weight:700; color:#1b2433; }
.pa-no{ font-size:12px; color:#5b6b85; letter-spacing:.4px; font-family:Consolas,Monaco,monospace; }
.pa-base{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:8px 14px;
  padding:10px 12px; margin-bottom:14px; border-radius:9px; background:#f7f9fd; border:1px solid #e6edf7; }
.pa-base > div{ display:flex; flex-direction:column; gap:3px; min-width:0; }
.pa-base span{ font-size:11px; color:#8895ab; }
.pa-base b{ font-size:13px; color:#22314a; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pa-base b.pa-amt{ color:#c2410c; }
.pa-qr{ margin-top:4px; padding-top:10px; border-top:1px dashed #e6ecf5; }
.pay-form .pf-row{ align-items:center; }
.pay-form .pf-row label{ min-width:86px; }
.nx-modal-box.nx-blue.nx-pay.nx-apply{ width:min(620px, 94vw); }

/* ---------- 设置 › 参数设置 ---------- */
.pset-bar{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:12px; flex-wrap:wrap; }
.pset-bar-l{ font-size:12.5px; color:var(--text-2); }
.pset-bar-l b{ color:#1d4ed8; }
.pset-bar-r{ display:flex; gap:8px; }
.pset-wrap{ display:grid; gap:12px; margin-top:12px; }
.pset-card{ padding:14px 16px; }
.pset-t{ font-size:14px; font-weight:700; color:#22314a; }
.pset-sub{ font-size:12px; color:var(--text-2); margin:4px 0 12px; line-height:1.6; }
.pset-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:12px 18px; }
.pset-f{ display:flex; flex-direction:column; gap:6px; font-size:12.5px; color:#3b4a61; }
.pset-f-wide{ grid-column:1 / -1; }
.pset-in{ padding:7px 9px; border:1px solid var(--line); border-radius:8px; font-size:13px;
  color:var(--text); background:#fff; width:100%; box-sizing:border-box; font-family:inherit; }
.pset-in:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 3px rgba(47,111,237,.08); }
.pset-ta{ resize:vertical; line-height:1.7; }
.pset-hint{ font-size:11px; color:#909cb2; font-style:normal; }
.pset-chips{ display:flex; flex-wrap:wrap; gap:6px; margin-top:2px; }
.pset-chip{ font-size:11.5px; padding:2px 8px; border-radius:999px; background:#eef4fe;
  color:#1d4ed8; border:1px solid #d6e4fb; }
.pset-none{ font-size:11.5px; color:#a3aec2; }

/* ---------- 客户与供应商 / 物流公司 ---------- */
.partner-bar{ flex-wrap:wrap; }
.partner-sp{ flex:1 1 auto; }
.partner-pick{ font-size:12px; color:var(--text-2); white-space:nowrap; }
.partner-tbl td{ font-size:12.5px; }
.partner-tbl th.pk, .partner-tbl td.pk{ width:34px; text-align:center; padding-left:8px; padding-right:0; }
.partner-tbl td.pk input{ width:15px; height:15px; cursor:pointer; }
.partner-tbl tbody tr{ cursor:pointer; }
.partner-tbl tbody tr.picked{ background:#eef4fe; }
.partner-tbl tbody tr.picked:hover{ background:#e4edfd; }
.partner-tbl .pt-name{ font-weight:600; color:#22314a; }
.partner-tbl .pt-name .st-badge{ margin-left:6px; font-weight:400; }
.partner-tip{ font-size:12px; color:var(--text-2); padding:10px 4px 0; line-height:1.7; }
.nx-modal-box.partner-modal{ width:min(760px, 95vw); }
.pn-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px 16px; }
.pn-f{ display:flex; flex-direction:column; gap:6px; font-size:12.5px; color:#3b4a61; }
.pn-f-wide{ grid-column:1 / -1; }
.pn-in{ padding:7px 9px; border:1px solid var(--line); border-radius:8px; font-size:13px;
  color:var(--text); background:#fff; width:100%; box-sizing:border-box; font-family:inherit; }
.pn-in:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 3px rgba(47,111,237,.08); }
.pn-req{ color:#e0563f; }
.pn-foot-note{ font-size:11.5px; color:#909cb2; margin-top:10px; }
@media (max-width:720px){ .pn-grid{ grid-template-columns:1fr; } }
.mg-list{ display:flex; flex-direction:column; gap:6px; max-height:46vh; overflow:auto; }
.mg-item{ display:flex; align-items:center; gap:10px; padding:9px 12px; border:1px solid var(--line);
  border-radius:9px; cursor:pointer; background:#fbfcfe; }
.mg-item:hover{ background:#f1f5fb; }
.mg-item input{ width:15px; height:15px; }
.mg-nm{ flex:1; font-size:13.5px; color:#22314a; }
.mg-t{ font-size:11px; color:#1d4ed8; background:#eef4fe; border:1px solid #d6e4fb;
  padding:1px 8px; border-radius:999px; }

/* 开单明细：仓库列（库位只显示具体仓位） */
.od-grid td.od-wh{ color:#4a5a72; white-space:nowrap; }
.od-grid td.od-loc{ white-space:nowrap; }

/* 库存查询 · 打印条形码弹窗（2026-10-20） */
.nx-modal-box.bc-modal{ width:min(880px, 96vw); }
.bc-wrap{ display:flex; flex-direction:column; gap:10px; }
.bc-bar{ display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  padding:10px 12px; background:#f5f8fd; border:1px solid #dfe8f5; border-radius:9px;
  font-size:12.5px; color:#3b4a61; }
.bc-bar label{ display:flex; align-items:center; gap:5px; }
.bc-bar input{ width:58px; padding:5px 7px; border:1px solid var(--line); border-radius:7px;
  font-size:13px; text-align:center; font-family:inherit; }
.bc-bar input:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 3px rgba(47,111,237,.08); }
.bc-range{ color:#5b6a82; }
.bc-range b{ color:#22314a; }
.bc-stage{ max-height:56vh; overflow:auto; padding:12px; background:#f0f2f6;
  border:1px solid #dfe5ee; border-radius:10px; }
.bc-preview{ background:#fff; padding:10px 12px; box-shadow:0 2px 10px rgba(23,43,77,.12);
  transform-origin:top left; }
.bc-preview .nx-print-doc .pd-label{ border-style:dashed; }
.bc-tip{ font-size:11.5px; color:#8d99ad; line-height:1.6; }

/* ===== 财务账台（2026-10-23 按用户给的版式重做） =====
   版式：按钮条 → 门店 / 单据状态 → 多条件筛选 → 左侧快捷口径 + 汇总/明细 → 宽表明细。
   字段间距沿用全站口径：相邻两列文字间距 = 1 个中文字（左右各 .5em）。 */
.fin-bar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  background:var(--card); border:1px solid var(--line); border-radius:10px;
  padding:8px 10px; margin-bottom:8px; box-shadow:var(--shadow); }
.fin-bar-r{ margin-left:auto; display:flex; align-items:center; gap:8px; }
.fbtn{ display:inline-flex; align-items:center; justify-content:center; height:30px; padding:0 12px;
  border:1px solid #d7dee9; background:#fff; color:var(--text); border-radius:7px;
  font-size:13px; cursor:pointer; white-space:nowrap; font-family:inherit; }
.fbtn:hover{ background:#f5f8ff; border-color:#c3d4f7; }
.fbtn.primary{ background:#2f6fed; border-color:#2f6fed; color:#fff; }
.fbtn.primary:hover{ background:#2560d8; border-color:#2560d8; }
.fbtn.danger{ color:#c0392b; border-color:#f0c7c2; background:#fff; }
.fbtn.danger:hover{ background:#fdf3f2; border-color:#e2483d; color:#b93a33; }
.fin-in{ height:30px; padding:0 8px; border:1px solid #d7dee9; border-radius:7px;
  background:#fff; color:var(--text); font-size:13px; font-family:inherit; }
.fin-in:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 3px rgba(47,111,237,.08); }
#fin-kw{ width:240px; }
#fin-track,#fin-maker,#fin-sales{ width:110px; }
#fin-from,#fin-to{ width:140px; }

.fin-store{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  background:var(--card); border:1px solid var(--line); border-radius:10px;
  padding:7px 10px; margin-bottom:8px; }
.fin-store .fs-lb{ font-size:12.5px; color:var(--text-2); white-space:nowrap; }
.fin-store .fs-sel{ min-width:230px; }
.fin-store .fs-tip{ font-size:11.5px; color:#93a0b4; }
.fin-store .fs-r{ margin-left:auto; display:flex; align-items:center; gap:8px; }

.fin-filter{ display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center;
  background:var(--card); border:1px solid var(--line); border-radius:10px;
  padding:9px 10px; margin-bottom:8px; }
.fin-filter .ff{ display:flex; align-items:center; gap:6px; }
.fin-filter .ff label{ font-size:12.5px; color:var(--text-2); white-space:nowrap; }
.fin-filter .ff-sep{ color:#a8b2c2; }
.fin-filter .ff-btns{ margin-left:auto; gap:8px; }

/* 左右两栏等高：左侧快捷口径框跟右边的汇总/明细卡片上下边对齐（2026-10-24 用户标注） */
.fin-wrap{ display:flex; gap:8px; align-items:stretch; }
.fin-rail{ flex:0 0 118px; display:flex; flex-direction:column; gap:2px;
  background:var(--card); border:1px solid var(--line); border-radius:10px; padding:6px; align-self:stretch; }
.fin-rail button{ text-align:left; border:0; background:transparent; padding:6px 9px; border-radius:7px;
  font-size:13px; color:#374151; cursor:pointer; font-family:inherit; }
.fin-rail button:hover{ background:#f2f6ff; }
.fin-rail button.on{ background:#e8f0fe; color:#1a56db; font-weight:600; }

.fin-main{ flex:1 1 auto; min-width:0; background:var(--card); border:1px solid var(--line);
  border-radius:10px; display:flex; flex-direction:column; overflow:hidden; }
.fin-tabs{ display:flex; align-items:center; gap:4px; padding:6px 10px 0; border-bottom:1px solid var(--line); }
.fin-tab{ border:1px solid transparent; border-bottom:0; background:transparent; padding:6px 14px;
  border-radius:8px 8px 0 0; font-size:13px; color:var(--text-2); cursor:pointer; font-family:inherit; }
.fin-tab.on{ background:#f2f6ff; border-color:var(--line); color:#1a56db; font-weight:600;
  margin-bottom:-1px; padding-bottom:7px; }
.fin-note{ margin-left:auto; font-size:12px; color:#93a0b4; padding-bottom:6px; }
.fin-body{ flex:1 1 auto; min-height:120px; max-height:calc(100vh - 330px); overflow:auto; }
.fin-scroll{ overflow:auto; }

.fin-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; white-space:nowrap; }
.fin-tbl th,.fin-tbl td{ padding:5px .5em; border-bottom:1px solid #eef1f6; text-align:left; }
.fin-tbl th{ position:sticky; top:0; z-index:1; background:#f5f7fa; color:#4b5563;
  font-weight:600; font-size:12px; border-bottom:1px solid var(--line); }
.fin-tbl th.num,.fin-tbl td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.fin-tbl tbody tr:hover{ background:#f7faff; }
.fin-tbl tbody tr.on{ background:#eef4ff; }
.fin-chk{ width:30px; text-align:center; padding-left:8px !important; }
.fin-no{ width:44px; color:#8b95a7; }
.fin-dim{ color:#6b7280; }
.fin-track{ color:#1d4ed8; cursor:pointer; text-decoration:none; }
.fin-track:hover{ text-decoration:underline; }
.fin-track.warn{ color:#e06c2d; }
.fin-chip{ display:inline-block; padding:0 7px; border-radius:999px; font-size:11.5px; line-height:19px; }
.fin-chip.ok{ background:#e7f7ee; color:#15803d; }
.fin-chip.warn{ background:#fdf1e0; color:#b45309; }
.fin-chip.red{ background:#fdeaea; color:#c0392b; }
.fin-chip.blue{ background:#e8f0fe; color:#1d4ed8; }
.fin-chip.orange{ background:#fdf0e6; color:#c2410c; }
.fin-sum td{ background:#fafbfd; font-weight:600; border-top:1px solid var(--line);
  position:sticky; bottom:0; }
.fin-sum-lb{ color:#4b5563; }

.fin-kpis{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; padding:12px; }
.fin-kpi{ border:1px solid var(--line); border-radius:10px; padding:10px 12px; background:#fbfcfe; }
.fin-kpi.blue{ border-left:3px solid #2f6fed; }
.fin-kpi.ok{ border-left:3px solid #2bb673; }
.fin-kpi.orange{ border-left:3px solid #e8a33d; }
.fk-lb{ font-size:12px; color:var(--text-2); }
.fk-val{ font-size:19px; font-weight:700; margin:3px 0 2px; color:#1f2937;
  font-variant-numeric:tabular-nums; }
.fk-sub{ font-size:11.5px; color:#8d99ad; }
.fin-sect{ padding:12px 12px 4px; font-size:13px; font-weight:600; color:#374151; }
@media (max-width:1400px){ .fin-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
.fin-cut{ padding:8px 12px; font-size:12px; color:#8d99ad; background:#fbfcfe;
  border-top:1px solid #eef1f6; }
/* 表头不许折行（「物流单号」「应收金额(虚)」这类四五个字挤一格会断成两行） */
.fin-tbl th{ white-space:nowrap; }
.fin-tbl td.fin-dim{ max-width:96px; overflow:hidden; text-overflow:ellipsis; }

/* ===== 收支明细 / 已收款查询（2026-10-24 按用户给的尼西版式重做） =====
   两页共用：按钮条 → 快捷日期 + 组合筛选 → 带边框的宽明细表 →（已收款查询还有）
   「收款明细」子表 + 显示行数/翻页。 */
.fl-bar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  background:var(--card); border:1px solid var(--line); border-radius:10px;
  padding:8px 10px; margin-bottom:8px; box-shadow:var(--shadow); }
.fl-sum{ margin-left:auto; font-size:12.5px; color:#5b6677; white-space:nowrap; }

.fl-filter{ background:var(--card); border:1px solid var(--line); border-radius:10px;
  padding:8px 10px; margin-bottom:8px; box-shadow:var(--shadow); }
.fl-row{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.fl-row + .fl-row{ margin-top:8px; }
.fl-row .fin-in{ width:112px; }
.fl-row input[type="date"]{ width:142px; }
.fl-row .fl-quick{ width:96px; }
.fl-row .fl-store{ width:220px; }
.fl-row .fl-w120{ width:120px; }
.fl-row .fl-w140{ width:148px; }
.fl-row .fl-w160{ width:170px; }
.fl-tilde{ font-size:12.5px; color:#93a0b4; }
.fl-lb{ font-size:12.5px; color:var(--text-2); white-space:nowrap; }
.fl-filter .hide{ display:none; }

.fl-card{ background:var(--card); border:1px solid var(--line); border-radius:10px;
  box-shadow:var(--shadow); overflow:hidden; }
.fl-scroll{ overflow:auto; }
#fl-scroll{ max-height:calc(100vh - 275px); }
#pi-scroll{ max-height:38vh; }
#pi-sub{ max-height:34vh; }

.fl-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; background:#fff; white-space:nowrap; }
.fl-tbl th{ position:sticky; top:0; z-index:1; background:#f5f7fa; color:#4b5563; font-weight:600;
  font-size:12px; text-align:left; padding:6px .5em; border:1px solid #e6ebf2; white-space:nowrap; }
.fl-tbl td{ padding:5px .5em; border:1px solid #eef1f6; }
.fl-tbl th.num,.fl-tbl td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.fl-tbl tbody tr:hover{ background:#f7faff; }
.fl-tbl tbody tr.on{ background:#eef4ff; }
.fl-tbl tbody tr.void td{ color:#a8b2c2; }
.fl-tbl tbody tr.empty-row td{ height:180px; text-align:center; color:#b3bccb; white-space:normal; }
.fl-no{ width:44px; color:#8b95a7; }
/* 🔴 2026-10-28 收支明细「按明细展开多条」：
   同笔记录的连续几行要能看出是一组 —— 组首上边加一条深线、组内行用浅底，
   组内只显示明细自己的金额/科目/摘要，整笔字段（单据号/制单员/审核）留空。 */
.fl-tbl tr.fl-grp-first td{ border-top:1px solid #cfd7e3; }
.fl-tbl tr.fl-grp-more td{ border-top:1px dashed #eef1f6; color:#5b6472; }
.fl-tbl tr.fl-grp-more:hover td{ background:#f7faff; }
.fl-tbl td.fl-no i.fl-subno{ display:inline-block; margin-left:2px; font-style:normal;
  font-size:10.5px; color:#9aa4b4; }
.fl-tbl td.fl-no i.fl-subno::before{ content:""; }
.fl-track{ color:#1d4ed8; }
.fl-dim{ color:#6b7280; }
.fl-note{ max-width:220px; overflow:hidden; text-overflow:ellipsis; }
.fl-chip{ display:inline-block; padding:0 7px; border-radius:999px; font-size:11.5px; line-height:19px; }
.fl-chip.red{ background:#fdeaea; color:#c0392b; }

.fl-sect{ display:flex; align-items:center; gap:8px; margin:10px 0 6px;
  background:#f2f6fc; border:1px solid #e2e9f3; border-left:3px solid #2f6fed;
  border-radius:6px; padding:6px 10px; font-size:13px; font-weight:600; color:#374151; }
.fl-sect-tip{ font-weight:400; font-size:12px; color:#7c8ba1; }

.fl-foot{ display:flex; align-items:center; gap:8px; justify-content:flex-end;
  padding:6px 10px; font-size:12.5px; color:#5b6677; border-top:1px solid #eef1f6; background:#fbfcfe; }
.fl-foot select,.fl-foot input{ height:26px; border:1px solid #d7dee9; border-radius:6px;
  padding:0 6px; font-size:12.5px; font-family:inherit; color:var(--text); background:#fff; }
.fl-foot input{ width:60px; }
.fl-foot .fbtn{ height:26px; padding:0 10px; font-size:12.5px; }

/* ===== 现金流（2026-10-24 用户新增子类目） =====
   版式对齐用户给的表头：序号/银行流水号/对方户名/对方银行账号/支出金额/收入金额/
   交易时间/己方账户余额/摘要/附言（用途）/渠道。表头下面带一行筛选输入。
   2026-10-24 用户标注：账户页签那一行删掉，账户改用筛选行的下拉选。 */

#cf-scroll{ max-height:calc(100vh - 310px); }
.cf-tbl td{ vertical-align:middle; }
.cf-tbl thead tr.cf-h th{ height:30px; box-sizing:border-box; z-index:3; }
.cf-tbl thead tr.cf-f th{ position:sticky; top:30px; z-index:2; background:#fafbfd;
  padding:3px .5em; border:1px solid #e6ebf2; }
.cf-fin{ width:100%; min-width:56px; height:22px; padding:0 5px; font-size:11.5px;
  border:1px solid #dbe3ee; border-radius:5px; background:#fff; font-family:inherit; color:#334155; }
.cf-fin:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.08); }
.cf-fin::placeholder{ color:#b6c0cf; }
.cfc-no{ width:66px; color:#8b95a7; }
.cfc-no input{ margin-right:5px; vertical-align:-1px; }
.cfc-time{ color:#4b5563; font-variant-numeric:tabular-nums; }
.cfc-payee{ max-width:190px; overflow:hidden; text-overflow:ellipsis; }
.cfc-txt{ max-width:180px; overflow:hidden; text-overflow:ellipsis; }
.cf-out{ color:#b4342a; }
.cf-in{ color:#137a4a; }
.fl-chip.ok{ background:#e8f7ee; color:#137a4a; }

/* 导入弹窗 */
.cf-imp .pf-row{ margin-bottom:10px; }
.cf-drop{ border:1px dashed #b9cdf3; background:#f7faff; border-radius:10px;
  padding:22px 12px; text-align:center; cursor:pointer; transition:.15s; }
.cf-drop:hover{ background:#eef4ff; border-color:#8fb3f5; }
.cf-drop b{ display:block; font-size:14px; color:#1d4ed8; margin-bottom:4px; }
.cf-drop span{ font-size:12px; color:#7c8ba1; }
.cf-drop-paste{ padding:12px; cursor:default; }
.cf-drop-paste b{ font-size:13px; }
/* 2026-10-28：粘贴区改成「Ctrl + V 粘贴上传」，文本和截图都能粘
   （原来 .cf-drop 是居中 + b 独占一行的版式，这里是横排一行，所以单独压掉） */
.cf-drop-paste{ padding:10px 12px; cursor:text; text-align:left;
  display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.cf-drop-paste b{ display:inline; margin:0; font-size:13px; }
.cf-paste-k{ display:inline-flex; align-items:center; gap:3px; }
.cf-paste-k kbd{ padding:1px 6px; border:1px solid #c9d6ea; border-bottom-width:2px; border-radius:4px;
  background:#fff; color:#4a5568; font-family:inherit; font-size:11px; font-style:normal; }
.cf-paste-k i{ font-style:normal; color:#9aa6bb; font-size:11px; }
.cf-paste-sub{ font-size:12px; color:#7c8ba1; }
/* 2026-10-28 用户标注「改成复制黏贴上传图片」：
   这个框现在既可点击选图、也能把图片拖进来，拖拽悬停时高亮。 */
.cf-drop-paste.over{ background:#e3edff; border-color:#5b8def; border-style:solid; }
.cf-drop-paste{ margin-bottom:8px; }
/* 「图片信息」区：粘进来的截图缩略图 + 大小，粘错图当场能看出来 */
.cf-imgs{ display:flex; gap:8px; flex-wrap:wrap; margin-top:8px; align-items:flex-start; }
.cf-imgs:empty{ display:none; }
.cf-imgs:not(:empty){ margin-bottom:8px; }
/* 🔴 不能写死 width/height + object-fit:cover —— 银行 App 的流水截图是
   「窄长条」（900×1600），cover 会把中间一段裁出来，用户根本认不出是哪天的单。
   用 max-width/max-height + 自适应，竖图变窄条、横图变宽条，都看得到全貌。 */
.cf-img{ position:relative; display:inline-block; border:1px solid #dbe3ef; border-radius:8px;
  overflow:hidden; background:#fff; box-shadow:0 1px 2px rgba(15,23,42,.06); max-width:160px; }
.cf-img img{ display:block; max-width:160px; max-height:120px; width:auto; height:auto; }
.cf-img b{ display:block; padding:2px 5px; font-size:10.5px; font-weight:500;
  color:#64748b; background:#f7f9fc; border-top:1px solid #eef2f8; text-align:center; }
.cf-imp-msg{ margin-top:8px; font-size:12.5px; }
.cf-imp-msg:empty{ display:none; }
.cf-imp-msg b{ color:#1d4ed8; }
.cf-imp-msg.is-ok{ color:#137a4a; }
.cf-imp-msg.is-bad{ color:#b4342a; padding:8px 10px; border-radius:8px; background:#fff6f5;
  border:1px solid #f3d6d3; }
.cf-msg-wait{ color:#8d99ad; }
.cf-pickname{ margin-top:6px; font-size:12px; color:#5b6677; min-height:16px; }
.cf-paste{ width:100%; height:150px; padding:8px 10px; font-size:12.5px; line-height:1.6;
  border:1px solid #d7dee9; border-radius:8px; font-family:inherit; resize:vertical; }
.cf-paste:focus{ outline:none; border-color:#93b4f0; }
.cf-tip{ margin-top:10px; font-size:12px; line-height:1.7; color:#7c8ba1;
  background:#f8fafc; border:1px solid #edf1f7; border-radius:8px; padding:8px 10px; }
.cf-errtip{ margin-top:10px; font-size:12px; line-height:1.7; color:#b4342a;
  background:#fdf2f1; border:1px solid #f6d6d2; border-radius:8px; padding:8px 10px; }
.cf-imp-sum{ display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  background:#f7faff; border:1px solid #e2e9f3; border-radius:8px; padding:8px 12px;
  font-size:12.5px; color:#4b5563; margin-bottom:8px; }
.cf-imp-sum b{ font-size:15px; }
.cf-imp-sum .cf-ok b{ color:#137a4a; }
.cf-imp-sum .cf-dup b{ color:#b7791f; }
.cf-imp-sum .cf-bad b{ color:#b4342a; }
.cf-imp-sum .cf-file{ margin-left:auto; color:#8d99ad; }
.cf-imp-tbl{ max-height:46vh; overflow:auto; border:1px solid var(--line); border-radius:8px; }
.cf-imp-tbl .fl-tbl th{ position:static; }
.cf-imp-tbl tr.dup td{ color:#9aa5b6; background:#fcfcfd; }

/* 账户管理 */
.cf-accm-tip{ font-size:12px; color:#7c8ba1; margin-bottom:8px; }
.cf-accm-row{ display:flex; align-items:center; gap:8px; padding:6px 0;
  border-bottom:1px dashed #eef1f6; }
.cf-accm-row .cf-ac-name,.cf-accm-row .cf-ac-new{ flex:1 1 auto; min-width:200px; }
.cf-accm-n{ width:70px; text-align:right; font-size:12px; color:#8d99ad; }
.cf-accm-new{ border-bottom:0; padding-top:10px; }
/* 现金流表列多（11 列），收紧左右留白让 1280 少滚一点 */
.cf-tbl th,.cf-tbl td{ padding-left:.35em; padding-right:.35em; }
.cf-tbl thead tr.cf-f th{ padding-left:.2em; padding-right:.2em; }
.cf-tbl .cfc-no{ width:56px; }
.cf-fin{ min-width:44px; }

/* ===== 工作台 · 采购待办（2026-10-24 用户标注：占位卡换成待办） ===== */
.dash-todo{ padding:0; overflow:hidden; }
.dt-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:10px 14px; border-bottom:1px solid #eef1f6; background:#fbfcfe; }
.dt-head b{ font-size:14px; color:#1b2433; }
.dt-sum{ font-size:12.5px; color:#5b6677; }
.dt-sum b{ color:#1d4ed8; font-size:13px; }
.dt-sum .dt-red{ color:#c0392b; }
.dt-acts{ margin-left:auto; display:flex; gap:8px; }
/* 版块页签（2026-10-24 第二批标注）：待办 = 多个版块的集合体，
   采购需求 / 备忘录 … 集中在这一张卡里，切页签看对应版块 */
.dt-tabs{ display:flex; gap:2px; padding:6px 10px 0; border-bottom:1px solid #eef1f6;
  background:#fbfcfe; flex:0 0 auto; }
.dt-tab{ border:1px solid transparent; border-bottom:none; background:transparent;
  color:#64748b; font-size:12.5px; padding:5px 12px 6px; border-radius:7px 7px 0 0;
  cursor:pointer; display:flex; align-items:center; gap:6px; position:relative; top:1px; }
.dt-tab:hover{ color:#1f6fd0; }
.dt-tab.on{ background:#fff; border-color:#e6ebf2; color:#1b2433; font-weight:600; }
.dt-tab i{ font-style:normal; font-size:11px; min-width:16px; height:16px; line-height:16px;
  text-align:center; padding:0 4px; border-radius:8px; background:#eef2f8; color:#5b6677; }
.dt-tab.on i{ background:#e8f1ff; color:#1d4ed8; }
.dt-tab.off{ color:#a9b3c2; }
.dt-dim2{ color:#93a0b4; }
.dt-memo-tbl td{ vertical-align:middle; }
.dt-memo-tbl .fbtn{ margin-right:4px; }
.dt-memo-tbl .fbtn:last-child{ margin-right:0; }
.dt-scroll{ max-height:calc(100vh - 300px); overflow:auto; }
.dt-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; background:#fff; white-space:nowrap; }
.dt-tbl th{ position:sticky; top:0; z-index:1; background:#f5f7fa; color:#4b5563; font-weight:600;
  font-size:12px; text-align:left; padding:6px .5em; border-bottom:1px solid #e6ebf2; }
.dt-tbl td{ padding:6px .5em; border-bottom:1px solid #f2f5f9; }
.dt-tbl tbody tr{ cursor:pointer; }
.dt-tbl tbody tr:hover{ background:#f7faff; }
.dt-tbl tbody tr.unread{ background:#fcfdff; }
.dt-no{ color:#8b95a7; }
.dt-dot{ display:inline-block; width:6px; height:6px; border-radius:50%; background:#e2483d;
  margin-right:5px; vertical-align:1px; }
.dt-id{ color:#1d4ed8; }
.dt-mono{ font-family:Consolas,Monaco,monospace; font-size:12px; }
.dt-num{ text-align:right; font-variant-numeric:tabular-nums; }
/* 2026-10-24 用户标注：默认宽度要够显示 15 个中文字 ——
   这里按 15em 算（12.5px 字号 ≈ 187px），名称/目录车型超过 15 个字才省略，悬停看全文 */
.dt-txt{ max-width:15em; overflow:hidden; text-overflow:ellipsis; }
.dt-time{ color:#6b7280; }
.dt-dim{ color:#9aa6bb; font-size:12px; }
.dt-chip{ display:inline-block; padding:0 7px; border-radius:999px; font-size:11.5px;
  line-height:19px; background:#eef2f7; color:#475569; }
.dt-chip.red{ background:#fdeaea; color:#c0392b; }
.dt-chip.blue{ background:#e8f0fe; color:#1d4ed8; }
.dt-empty{ padding:52px 20px; text-align:center; font-size:13px; line-height:1.9; color:#9aa6bb; }
.dt-foot{ padding:6px 14px; font-size:12px; color:#8d99ad; border-top:1px solid #eef1f6; background:#fbfcfe; }

/* ===== 待办 · 两张表（2026-10-28 用户标注：采购需求 / 备忘录分开，别再混成一条流） =====
   两张表共用上面的 .dt-tbl（吸顶表头 / 斑马行 / 点击整行），各自带一条小节标题条：
   采购需求 = 名称 编码 件号 数量 提交人 时间；备忘录 = 标题 提醒 @同事 操作。 */
.dt-sec + .dt-sec{ border-top:10px solid #f4f6fa; }
.dt-sec-h{ display:flex; align-items:center; gap:8px; padding:7px 12px;
  background:#f8fafc; border-bottom:1px solid #eef1f6; }
.dt-sec-h b{ font-size:12.5px; color:#1b2433; }
.dt-sec-n{ font-size:11.5px; line-height:17px; padding:0 7px; border-radius:999px;
  background:#fff; border:1px solid #e6ebf2; color:#5b6677; }
.dt-sec-t{ margin-left:auto; font-size:11.5px; color:#a3aebf; }
.dt-sec-e{ padding:18px 12px; text-align:center; font-size:12.5px; line-height:1.8; color:#9aa6bb; }
.dt-tblw{ overflow-x:auto; }
/* 采购需求常有二三十条，不封顶的话备忘录会被顶到卡片最底下、等于看不见 ——
   两张表各自限高、自己滚（表头 sticky 跟着自己的滚动容器走），两块永远同屏 */
.dt-sec .dt-tblw{ max-height:320px; overflow:auto; }
.dt-sec:last-child .dt-tblw{ max-height:260px; }
/* 卡片可能只有 400 多px 宽（工作台右栏），名称列在这里收窄一点，别把「操作」挤出去 */
.dt-name{ display:flex; align-items:center; gap:5px; }
.dt-name .dt-txt{ display:inline-block; max-width:13em; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap; }
.dt-tbl .dt-chip{ font-style:normal; }
.dt-actcol{ width:46px; text-align:center; }
.dt-tbl tbody tr.due{ background:#fffafa; box-shadow:inset 3px 0 0 #e2483d; }
.dt-tbl tbody tr.due:hover{ background:#fff5f4; }
.dt-tbl tbody tr.is-done td{ color:#8d99ad; }
.dt-tbl .dt-ck{ width:20px; height:20px; }

/* 工作台 · 财务待办（待收 / 待付 + 到期时间） */
.dash-fin{ padding:0; overflow:hidden; margin-bottom:14px; }
.df-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:10px 14px; border-bottom:1px solid #eef1f6; background:#fbfcfe; }
.df-head b{ font-size:14px; color:#1b2433; }
.df-seg{ display:inline-flex; border:1px solid #dfe6f0; border-radius:8px; overflow:hidden; background:#fff; }
.df-seg button{ border:0; background:#fff; padding:4px 10px; font-size:12.5px; color:#5b6677;
  cursor:pointer; border-right:1px solid #eef1f6; }
.df-seg button:last-child{ border-right:0; }
.df-seg button:hover{ background:#f5f9ff; color:#1d4ed8; }
.df-seg button.on{ background:#1d4ed8; color:#fff; }
.df-sum{ display:flex; gap:12px; padding:12px 14px; flex-wrap:wrap; }
.df-box{ flex:1 1 220px; min-width:200px; border:1px solid #edf1f7; border-radius:10px;
  padding:9px 12px; background:#fcfdff; display:flex; flex-direction:column; gap:2px; }
.df-box.in{ border-left:3px solid #2563eb; }
.df-box.out{ border-left:3px solid #e07b39; }
.df-box.net{ border-left:3px solid #6b7a90; background:#f8fafc; }
.df-k{ font-size:12.5px; color:#7c8ba1; }
.df-v{ font-size:19px; font-weight:700; color:#1b2433; font-variant-numeric:tabular-nums; }
.df-v.neg{ color:#c0392b; }
.df-s{ font-size:12px; color:#8d99ad; }
.df-s i{ font-style:normal; }
.df-s .df-od{ color:#c0392b; }
.df-s .df-so{ color:#b4720f; }
.df-scroll{ max-height:calc(100vh - 700px); min-height:240px; overflow:auto; }
.df-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; background:#fff; white-space:nowrap; }
.df-tbl th{ position:sticky; top:0; z-index:1; background:#f5f7fa; color:#4b5563; font-weight:600;
  font-size:12px; text-align:left; padding:6px .5em; border-bottom:1px solid #e6ebf2; }
.df-tbl th.r{ text-align:right; }
.df-tbl td{ padding:6px .5em; border-bottom:1px solid #f2f5f9; }
.df-tbl tbody tr:hover{ background:#f7faff; }
.df-tbl tbody tr.od{ background:#fffafa; }
.df-chip{ display:inline-block; padding:0 7px; border-radius:999px; font-size:11.5px; line-height:19px; }
.df-chip.in{ background:#e8f0fe; color:#1d4ed8; }
.df-chip.out{ background:#fdf1e6; color:#b45309; }
.df-tag{ display:inline-block; font-size:12px; }
.df-tag.od{ color:#c0392b; font-weight:600; }
.df-tag.soon{ color:#b4720f; }

/* 指派 / 转交采购员 弹窗（quote-ui） */
.qm-assign{ font-size:13px; }
.qa-top{ font-size:14px; color:#1b2433; margin-bottom:4px; }
.qa-top b{ color:#1d4ed8; }
.qa-top2{ font-size:12.5px; color:#7c8ba1; margin-bottom:10px; }
.qa-opt{ display:flex; align-items:flex-start; gap:8px; padding:9px 10px; border:1px solid #e5eaf2;
  border-radius:8px; margin-bottom:8px; cursor:pointer; }
.qa-opt:hover{ border-color:#b9cdf3; background:#fafcff; }
.qa-opt input{ margin-top:2px; }
.qa-opt span{ font-weight:600; color:#334155; }
.qa-opt i{ display:block; font-style:normal; font-weight:400; font-size:12px; color:#8d99ad; margin-top:2px; }
.qa-h{ font-size:12.5px; color:#5b6677; margin:10px 0 6px; }
.qa-users{ display:flex; flex-wrap:wrap; gap:8px; padding:2px 0 2px 26px; }
.qa-users.off{ opacity:.38; pointer-events:none; }
.qa-u{ display:inline-flex; align-items:center; gap:6px; border:1px solid #dfe6f0; border-radius:999px;
  padding:4px 12px; font-size:12.5px; color:#334155; background:#fff; cursor:pointer; }
.qa-u:hover{ border-color:#8fb3f5; color:#1d4ed8; }
.qa-dim{ font-size:12.5px; color:#9aa6bb; }
.qa-tip{ margin-top:12px; font-size:12px; line-height:1.7; color:#7c8ba1;
  background:#f8fafc; border:1px solid #edf1f7; border-radius:8px; padding:8px 10px; }

/* =========================================================
   2026-10-24 顶栏消息中心（喇叭）/ 工作台待办浮窗 / 批量清除
   ========================================================= */
/* ---------- 喇叭 ---------- */
.topbar-bell-wrap{ position:relative; display:inline-flex; align-items:center; margin-right:4px; }
.topbar-bell{ position:relative; width:34px; height:30px; border:0; background:transparent; color:#5b6677;
  border-radius:8px; cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
  padding:0; transition:background .15s ease, color .15s ease; }
.topbar-bell:hover, .topbar-bell-wrap.open .topbar-bell{ background:#f2f6ff; color:#2f6fed; }
.tb-badge{ position:absolute; top:-3px; right:-1px; min-width:16px; height:16px; padding:0 4px;
  border-radius:9px; background:#e2483d; color:#fff; font-size:10.5px; line-height:16px;
  text-align:center; font-weight:700; box-shadow:0 0 0 2px #fff; }
.tb-badge[hidden]{ display:none; }
.tb-panel{ position:absolute; right:-6px; top:calc(100% + 8px); width:392px;
  max-width:calc(100vw - 32px); max-height:min(74vh, 580px); background:#fff;
  border:1px solid var(--line); border-radius:12px; box-shadow:0 18px 44px rgba(15,23,42,.18);
  display:none; flex-direction:column; overflow:hidden; z-index:90; }
.topbar-bell-wrap.open .tb-panel{ display:flex; }
.tb-head{ display:flex; align-items:center; gap:10px; padding:11px 14px; border-bottom:1px solid #eef1f6;
  background:#fbfcfe; }
.tb-head b{ font-size:14px; color:#1b2433; }
.tb-acts{ margin-left:auto; display:flex; gap:8px; }
.tb-body{ flex:1 1 auto; min-height:0; overflow:auto; padding:4px 0 6px; }
.tb-sec{ display:flex; align-items:center; gap:6px; padding:9px 14px 5px; font-size:12px;
  font-weight:700; color:#7c8ba1; letter-spacing:.02em; }
.tb-n{ background:#eef2f7; color:#5b6677; border-radius:9px; padding:0 6px; font-size:11px;
  font-weight:600; line-height:16px; }
.tb-item{ padding:9px 14px 10px; border-left:3px solid transparent; cursor:pointer; }
.tb-item:hover{ background:#f7faff; }
.tb-item.hot{ border-left-color:#2f6fed; }
.tb-item.warn{ border-left-color:#e0a33a; background:#fffdf7; }
.tb-i-h{ display:flex; align-items:baseline; gap:8px; }
.tb-i-h b{ font-size:13px; color:#25303f; font-weight:600; line-height:1.5;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tb-i-t{ margin-left:auto; flex:0 0 auto; font-size:11.5px; color:#9aa6bb; }
.tb-i-d{ margin-top:3px; font-size:12px; line-height:1.65; color:#6b7280;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.tb-empty{ padding:40px 20px; text-align:center; font-size:12.5px; line-height:1.8; color:#9aa6bb; }
.tb-foot{ flex:0 0 auto; padding:8px 14px; border-top:1px solid #eef1f6; background:#fbfcfe;
  font-size:11.5px; line-height:1.6; color:#9aa6bb; }
/* 发通知 / 升级详情 */
.tb-flds{ display:flex; flex-direction:column; gap:12px; }
.tb-fld{ display:flex; flex-direction:column; gap:6px; }
.tb-fld span{ font-size:12.5px; color:#5b6677; }
.tb-fld input, .tb-fld textarea{ width:100%; box-sizing:border-box; border:1px solid #dfe6f0;
  border-radius:8px; padding:8px 10px; font-size:13px; font-family:inherit; color:var(--text);
  background:#fff; outline:none; resize:vertical; }
.tb-fld input:focus, .tb-fld textarea:focus{ border-color:#8fb3f5; box-shadow:0 0 0 3px #eaf1fe; }
.tb-chk{ display:flex; align-items:center; gap:7px; font-size:12.5px; color:#5b6677; cursor:pointer; }
.tb-rel{ font-size:13px; line-height:1.8; color:#334155; }
.tb-rel-t{ font-size:15px; font-weight:700; color:#1b2433; margin-bottom:4px; }
.tb-rel-d{ font-size:12px; color:#9aa6bb; margin-bottom:8px; }
.tb-rel ul{ margin:0; padding-left:18px; }
.tb-rel li{ margin:5px 0; }
.tb-rel-b{ white-space:pre-wrap; color:#334155; }

/* ---------- 工作台待办：浮窗 ---------- */
.dt-chkcol{ width:34px; text-align:center; }
.dt-chkcol input{ cursor:pointer; margin:0; vertical-align:middle; }
.dt-grip{ display:none; }
.card.dash-todo.is-float{ position:fixed; z-index:99940; margin:0; padding:0; border-radius:12px;
  display:flex; flex-direction:column; overflow:hidden; background:#fff;
  border:1px solid #c9d6ea; box-shadow:0 22px 60px rgba(15,23,42,.3);
  min-width:520px; min-height:240px; }
.card.dash-todo.is-float .dt-head{ cursor:move; user-select:none; flex:0 0 auto; }
.card.dash-todo.is-float .dt-head button{ cursor:pointer; }
.card.dash-todo.is-float .dt-scroll{ flex:1 1 auto; min-height:0; max-height:none; overflow:auto; }
.card.dash-todo.is-float .dt-empty{ flex:1 1 auto; display:flex; align-items:center; justify-content:center; }
.card.dash-todo.is-float .dt-foot{ flex:0 0 auto; }
.card.dash-todo.is-float.dragging{ opacity:.96; }
.card.dash-todo.is-float .dt-grip{ display:block; position:absolute; right:0; bottom:0;
  width:18px; height:18px; cursor:nwse-resize; z-index:2;
  background:linear-gradient(135deg, transparent 0 48%, #c3cfe2 48% 52%, transparent 52% 62%,
    #c3cfe2 62% 66%, transparent 66% 76%, #c3cfe2 76% 80%, transparent 80%); }
/* 顶部固定后，浮窗里的表头仍要吸顶（sticky 相对的是滚动容器） */
.card.dash-todo.is-float .dt-tbl th{ background:#f5f7fa; }
/* 窄屏兜底：14 列在 1440 / 1280 上本来就放不下 —— 先收「目录车型」，再收「提交人」，
   两列都是点开详情就能看到的次要信息，别让用户为了看「操作」去拖横向滚动条 */
@media (max-width:1500px){ .dash-todo .dt-h1{ display:none; } }
@media (max-width:1340px){ .dash-todo .dt-h2{ display:none; } }
/* 浮窗宽度是拖出来的，媒体查询看不到 —— 由 JS 按实际宽度挂 narrow1 / narrow2 */
.card.dash-todo.is-float.narrow1 .dt-h1{ display:none; }
.card.dash-todo.is-float.narrow2 .dt-h1,
.card.dash-todo.is-float.narrow2 .dt-h2{ display:none; }
/* 浮窗的列显隐只认上面两条（按浮窗自己的宽度算），不再吃整页宽度的媒体查询：
   默认 1180 宽的浮窗挂在 1440 屏上时，「目录车型」不该被 1500 的断点藏掉 */
@media (max-width:1500px){ .card.dash-todo.is-float .dt-h1{ display:table-cell; } }
@media (max-width:1340px){ .card.dash-todo.is-float .dt-h2{ display:table-cell; } }

/* ================= 工作台 › 备忘录（2026-10-24） =================
   待办卡标题栏的「新建备忘录」按钮 + 弹框（提醒时间 / 贴图 / @同事）。
   待办卡浮起来时标题栏整条可拖，按钮单独把 cursor 抢回来。 */
.memo-btn{ position:relative; }
.card.dash-todo.is-float .dt-head .memo-btn{ cursor:pointer; }
.memo-btn .memo-n{ position:absolute; top:-6px; right:-6px; min-width:15px; height:15px;
  line-height:15px; padding:0 4px; border-radius:8px; background:#e2483d; color:#fff;
  font-size:10.5px; font-style:normal; text-align:center; box-shadow:0 0 0 1.5px #fff; }
.memo-btn.has-due{ border-color:#f0c7c2; color:#c0392b; background:#fff7f6; }

.memo-modal .nx-modal-body{ max-height:min(74vh, 760px); overflow:auto; }
.memo-list{ display:flex; flex-direction:column; gap:10px; }
.memo-card{ border:1px solid #e6ebf2; border-radius:10px; padding:10px 12px; background:#fff; }
.memo-card.due{ border-color:#f3c9c4; background:#fffbfa; }
.memo-card.done{ background:#fafbfd; }
.memo-card.done .memo-c-h b{ color:#94a3b8; text-decoration:line-through; }
.memo-c-h{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.memo-c-h b{ font-size:13.5px; color:#1b2433; }
.memo-c-tags{ margin-left:auto; display:flex; gap:6px; flex-wrap:wrap; }
.memo-tag{ font-size:11px; color:#64748b; background:#f1f4f9; border-radius:999px; padding:1px 8px; }
.memo-tag.red{ background:#fdecea; color:#c0392b; }
.memo-tag.blue{ background:#e8f0fe; color:#1d4ed8; }
.memo-c-body{ margin-top:6px; font-size:12.5px; line-height:1.85; color:#475569;
  white-space:pre-wrap; word-break:break-word; }
.memo-c-imgs{ display:flex; gap:8px; flex-wrap:wrap; margin-top:8px; }
.memo-c-imgs img{ width:96px; height:96px; object-fit:cover; border-radius:8px;
  border:1px solid #e6ebf2; cursor:zoom-in; }
.memo-c-f{ display:flex; align-items:center; gap:8px; margin-top:8px; }
.memo-c-by{ font-size:11.5px; color:#9aa6bb; }
.memo-c-acts{ margin-left:auto; display:flex; gap:6px; }
.memo-c-acts .fbtn{ height:26px; padding:0 10px; font-size:12px; }
.memo-empty{ padding:36px 12px; text-align:center; font-size:13px; line-height:2; color:#94a3b8; }

.memo-form{ display:flex; flex-direction:column; gap:12px; }
.memo-fld{ display:flex; flex-direction:column; gap:6px; }
.memo-lb{ font-size:12.5px; color:#5b6677; font-weight:600; }
.memo-form input[type=text], .memo-form input:not([type]),
.memo-form input[type=datetime-local], .memo-form textarea, .memo-form #memo-at{
  width:100%; border:1px solid #dfe6f0; border-radius:8px; padding:7px 10px;
  font-size:13px; color:#1b2433; background:#fff; font-family:inherit; box-sizing:border-box; }
.memo-form textarea{ resize:vertical; line-height:1.8; min-height:110px; }
.memo-form input:focus, .memo-form textarea:focus{ outline:none; border-color:#8ab0f5;
  box-shadow:0 0 0 3px rgba(47,111,237,.10); }
.memo-row{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.memo-row input[type=datetime-local]{ width:212px; flex:0 0 auto; }
.memo-hint{ font-size:11.5px; color:#94a3b8; line-height:1.7; }
.memo-people{ display:flex; gap:6px; flex-wrap:wrap; }
.memo-chip{ display:inline-flex; align-items:center; gap:4px; background:#eef4ff; color:#1d4ed8;
  border-radius:999px; padding:2px 9px; font-size:12px; }
.memo-chip button{ border:0; background:none; color:#5b7fd0; cursor:pointer;
  font-size:13px; line-height:1; padding:0; }
.memo-atlist{ display:none; border:1px solid #e6ebf2; border-radius:8px; overflow:hidden; }
.memo-at-item{ display:flex; align-items:center; gap:8px; padding:6px 10px;
  font-size:12.5px; color:#334155; cursor:pointer; }
.memo-at-item span{ margin-left:auto; font-size:11px; color:#9aa6bb; }
.memo-at-item:hover{ background:#f5f8ff; }
.memo-drop{ border:1.5px dashed #cfd9e8; border-radius:10px; padding:12px; min-height:66px;
  display:flex; align-items:center; justify-content:center; flex-wrap:wrap; gap:4px;
  text-align:center; font-size:12.5px; line-height:1.7; color:#8a97ab;
  background:#fbfcfe; cursor:pointer; box-sizing:border-box; }
.memo-drop b{ color:#2f6fed; }
.memo-drop.on{ border-color:#2f6fed; background:#f5f9ff; color:#1d4ed8; }
.memo-imgs{ display:flex; gap:8px; flex-wrap:wrap; margin-top:8px; }
.memo-img{ position:relative; }
.memo-img img{ width:88px; height:88px; object-fit:cover; border-radius:8px;
  border:1px solid #e6ebf2; cursor:zoom-in; }
.memo-img button{ position:absolute; top:-6px; right:-6px; width:18px; height:18px;
  border-radius:50%; border:0; background:#e2483d; color:#fff; font-size:12px;
  line-height:1; cursor:pointer; }
.memo-zoom img{ display:block; max-width:100%; max-height:74vh; margin:0 auto; border-radius:8px; }
@media (max-width:760px){
  .memo-c-imgs img, .memo-img img{ width:72px; height:72px; }
  .memo-row input[type=datetime-local]{ width:100%; }
}

/* ================= 呆滞品 + 呆滞品处理清单（2026-10-24 用户标注） ================= */
.ss-head{ display:flex; align-items:flex-start; gap:12px; }
.ss-head-txt{ flex:1 1 auto; margin-bottom:0 !important; }
.ss-head-txt h2{ display:flex; align-items:center; gap:8px; }
.ss-head-acts{ flex:0 0 auto; display:flex; align-items:center; gap:8px; padding-top:2px; }
.ss-head-acts .btn{ position:relative; }
.ss-badge{
  position:absolute; top:-7px; right:-7px; min-width:17px; height:17px; padding:0 4px;
  border-radius:999px; background:#e2483d; color:#fff; font-size:11px; font-style:normal;
  line-height:17px; text-align:center; box-shadow:0 0 0 2px #fff;
}
.ss-bar .df-row{ flex-wrap:wrap; }
.ss-pickrow{ align-items:center; gap:8px; }
.ss-pickinfo{ font-size:12.5px; color:#64748b; }
.ss-bar .spacer, .ss-tools .spacer{ flex:1 1 auto; }
.ss-sumline{
  display:flex; align-items:center; gap:.6em; flex-wrap:wrap;
  padding:0 2px 9px; font-size:12.5px; color:#526079;
}
.ss-sumline b{ color:#1e293b; font-variant-numeric:tabular-nums; }
.ss-sumline .ss-amt{ color:#1d4ed8; }
.ss-sumline .ss-red{ color:#c0392b; }
.ss-legend{ margin-left:auto; display:flex; align-items:center; gap:5px; color:#93a1b5; font-size:11.5px; }
.ss-legend i{ width:9px; height:9px; border-radius:2px; display:inline-block; }
.ss-legend i.a1{ background:#fde8c8; border:1px solid #e8b96e; }
.ss-legend i.a2{ background:#fbd9b4; border:1px solid #df9a4c; }
.ss-legend i.a3{ background:#f7c9c4; border:1px solid #d9786d; }

/* 库龄徽标 */
.ss-age{
  display:inline-block; padding:1px 7px; border-radius:999px; font-size:11.5px;
  font-variant-numeric:tabular-nums; background:#f1f5f9; color:#64748b; white-space:nowrap;
}
.ss-age.a1{ background:#fdf3e3; color:#a16207; }
.ss-age.a2{ background:#fde8d2; color:#b45309; }
.ss-age.a3{ background:#fde2df; color:#b91c1c; font-weight:600; }

/* 列表 / 清单表 */
.ss-tbl td.c, .ss-tbl th.c{ text-align:center; }
.ss-tbl td.r{ text-align:right; font-variant-numeric:tabular-nums; }
.ss-tbl td.mono{ font-family:Consolas,"Courier New",monospace; font-size:12.5px; color:#334155; }
.ss-tbl td.nm{ max-width:330px; overflow:hidden; text-overflow:ellipsis; }
.ss-tbl td.sup{ max-width:120px; overflow:hidden; text-overflow:ellipsis; color:#64748b; }
.ss-tbl td.ss-chk, .ss-tbl th.ss-chk{ width:36px; text-align:center; padding-left:12px; }
.ss-row{ cursor:pointer; }
.ss-row.on td{ background:#eef5ff !important; }
.ss-detail{
  border:1px solid #cfd8e3; background:#fff; border-radius:4px; height:23px;
  padding:0 8px; font-size:12px; color:#2f6fed; cursor:pointer;
}
.ss-detail:hover{ border-color:#8fb3f6; background:#f3f8ff; }
.ss-x{
  border:0; background:none; color:#b91c1c; font-size:12px; cursor:pointer; padding:0 2px;
}
.ss-x:hover{ text-decoration:underline; }

/* 弹窗：清单一览 / 详情 / 选表 */
.nx-modal-box.ss-modal{ width:min(1180px, 96vw); max-height:88vh; }
.nx-modal-box.ss-modal .nx-modal-body{ display:flex; flex-direction:column; min-height:0; overflow:hidden; }
.nx-modal-box.ss-modal-s{ width:min(760px, 94vw); }
.ss-tabs{ display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  padding:2px 0 9px; border-bottom:1px solid #eef2f7; flex:0 0 auto; }
.ss-tab{
  height:29px; padding:0 11px; border-radius:7px; border:1px solid #dbe4f0; background:#fff;
  color:#4b5b73; font-size:13px; cursor:pointer; display:inline-flex; align-items:center; gap:5px;
}
.ss-tab:hover{ border-color:#9fb6d4; }
.ss-tab.on{ background:#eaf3ff; border-color:#9cc4f5; color:#1f6fd0; font-weight:600; }
.ss-tab i{ font-style:normal; font-size:11px; background:#eef2f8; color:#64748b;
  border-radius:999px; padding:0 5px; line-height:15px; }
.ss-tab.on i{ background:#d8e8fe; color:#1d4ed8; }
.ss-tab.add{ border-style:dashed; color:#2f6fed; }
.ss-edit{ display:flex; flex-direction:column; min-height:0; flex:0 1 auto; padding-top:10px; }
.ss-meta{ display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap; flex:0 0 auto; }
.ss-f{ display:flex; flex-direction:column; gap:3px; }
.ss-f > span{ font-size:11.5px; color:#8a97ab; }
.ss-f .df-in{ height:30px; min-width:150px; }
.ss-f.grow{ flex:1 1 220px; }
.ss-f.grow .df-in{ width:100%; }
.ss-saved{ margin-left:auto; font-size:11.5px; color:#94a3b8; }
.ss-tools{ display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  padding:9px 0 8px; flex:0 0 auto; }
.ss-sum{ font-size:12.5px; color:#526079; }
.ss-sum b{ color:#1e293b; font-variant-numeric:tabular-nums; }
.df-btn.danger{ color:#b91c1c; border-color:#eec7c2; }
.df-btn.danger:hover{ background:#fdf0ef; border-color:#e0a49d; }
.df-btn:disabled{ opacity:.5; cursor:default; }
.ss-tbl-wrap{ flex:0 1 auto; min-height:0; max-height:52vh; overflow:auto;
  border:1px solid #eef2f7; border-radius:8px; }
.ss-tbl{ font-size:12.5px; min-width:100%; }
.ss-tbl thead th{ position:sticky; top:0; z-index:1; }
.ss-tbl-foot{ flex:0 0 auto; padding:7px 2px 0; font-size:11.5px; color:#94a3b8; }
.ss-none{ padding:34px 20px; text-align:center; }
.ss-none b{ display:block; font-size:15px; color:#334155; margin-bottom:6px; }
.ss-none p{ font-size:12.5px; color:#8a97ab; line-height:1.8; margin-bottom:14px; }

/* 详情 */
.ss-det{ position:relative; }
.ss-det-tools{ position:absolute; right:0; top:0; display:flex; gap:8px; }
.ss-det-top{ display:flex; align-items:center; gap:12px; padding-right:180px; }
.ss-det-code{ font-family:Consolas,"Courier New",monospace; font-size:12.5px; color:#64748b; }
.ss-det-name{ font-size:17px; font-weight:600; color:#1e293b; margin-top:2px; line-height:1.35; }
.ss-kv{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px 18px; margin-top:16px; }
.ss-kv-i{ display:flex; align-items:baseline; gap:10px; border-bottom:1px dashed #eef2f7; padding-bottom:6px; }
.ss-kv-i span{ flex:0 0 76px; color:#8a97ab; font-size:12px; }
.ss-kv-i b{ color:#1e293b; font-size:13px; font-weight:500; word-break:break-all; }
.ss-det-tip{ margin-top:16px; padding:9px 12px; border-radius:8px; background:#f7faff;
  border:1px solid #e3edfb; font-size:12.5px; line-height:1.75; color:#4b5b73; }

/* 选表 */
.ss-choose-tip{ font-size:13px; color:#334155; margin-bottom:12px; line-height:1.7; }
.ss-choose-tip b{ color:#1d4ed8; }
.ss-choose-tip span{ display:block; font-size:11.5px; color:#94a3b8; margin-top:2px; }
.ss-picklist{ display:flex; flex-direction:column; gap:7px; max-height:52vh; overflow:auto; }
.ss-pick{
  display:flex; align-items:center; gap:9px; padding:9px 12px; border:1px solid #e2e8f0;
  border-radius:8px; cursor:pointer; font-size:13px;
}
.ss-pick:hover{ border-color:#9cc4f5; background:#f7fbff; }
.ss-pick input{ margin:0; }
.ss-pick b{ color:#1e293b; font-weight:600; }
.ss-pick span{ margin-left:auto; font-size:11.5px; color:#94a3b8; }
@media (max-width:760px){
  .ss-head{ flex-direction:column; }
  .ss-head-acts{ padding-top:0; }
  .ss-kv{ grid-template-columns:1fr; }
  .ss-det-top{ padding-right:0; }
  .ss-det-tools{ position:static; margin-bottom:10px; }
}

/* =======================================================================
   2026-10-24 第四批标注：待办改成窄条列表（宽 20 个字）+ 置顶小窗
   ======================================================================= */
/* 卡片在页面里也收窄：20 个中文字（约 300px）够放「来源 + 标题 + 时间」 */
/* 2026-10-28 用户要求回到两张表 → 340px 上限取消（6 列在里面只剩名称和编码），卡片跟着栏宽走 */
.card.dash-todo{ max-width:none; }
.card.dash-todo .dt-head{ padding:9px 12px; gap:8px; }
.card.dash-todo .dt-acts{ flex-wrap:wrap; }
.dt-list{ display:flex; flex-direction:column; max-height:calc(100vh - 380px); overflow:auto; }
.dt-item{ display:flex; align-items:flex-start; gap:8px; padding:8px 12px;
  border-bottom:1px solid #f2f5f9; cursor:pointer; background:#fff; }
.dt-item:hover{ background:#f7faff; }
.dt-item.due{ background:#fffafa; box-shadow:inset 3px 0 0 #e2483d; }
.dt-item.due:hover{ background:#fff5f4; }
.dt-src{ flex:0 0 auto; margin-top:1px; font-size:11px; line-height:17px; padding:0 6px;
  border-radius:4px; background:#eef2f7; color:#5b6677; white-space:nowrap; }
.dt-src.dem{ background:#e8f0fe; color:#1d4ed8; }
.dt-src.mem{ background:#fdf1e6; color:#b45309; }
.dt-main{ flex:1 1 auto; min-width:0; }
.dt-t1{ display:flex; align-items:baseline; gap:6px; min-width:0; }
.dt-t1 b{ font-size:13px; font-weight:600; color:#1b2433; line-height:1.5;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dt-flag{ flex:0 0 auto; font-style:normal; font-size:11px; line-height:16px; padding:0 5px;
  border-radius:3px; background:#eef2f7; color:#5b6677; }
.dt-flag.red{ background:#fdeaea; color:#c0392b; }
.dt-t2{ margin-top:1px; font-size:11.5px; color:#8d99ad; line-height:1.5;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dt-side{ flex:0 0 auto; display:flex; flex-direction:column; align-items:flex-end; gap:3px; }
.dt-tm{ font-size:11px; color:#9aa6bb; white-space:nowrap; }
.dt-tm.hot{ color:#c0392b; font-weight:600; }
.dt-ck{ width:20px; height:20px; border:1px solid #dfe6f0; border-radius:50%; background:#fff;
  color:#94a3b8; font-size:12px; line-height:1; cursor:pointer; padding:0; }
.dt-ck:hover{ border-color:#5aa06a; color:#3f8b52; background:#f4fbf6; }
.dt-check{ margin:3px 0 0; cursor:pointer; flex:0 0 auto; }
.dt-err{ padding:8px 12px; font-size:11.5px; line-height:1.7; color:#b45309;
  background:#fffdf5; border-bottom:1px solid #f7ecd6; }
.dt-foot a{ color:#2f6fed; margin-left:6px; text-decoration:none; }
.dt-foot a:hover{ text-decoration:underline; }
/* 浮窗：最小 240（20 个字够用），列表自己滚，头部和底部固定 */
.card.dash-todo.is-float{ min-width:240px; max-width:none; }
.card.dash-todo.is-float .dt-head{ padding:8px 10px; gap:6px; }
.card.dash-todo.is-float .dt-head .fbtn{ height:24px; padding:0 8px; font-size:11.5px; }
.card.dash-todo.is-float .dt-acts{ gap:5px; }
.card.dash-todo.is-float .dt-sum{ font-size:11.5px; }
.card.dash-todo.is-float .dt-list{ flex:1 1 auto; min-height:0; max-height:none; overflow:auto; }
.card.dash-todo.is-float .dt-foot{ flex:0 0 auto; font-size:11px; padding:5px 10px; }

/* 备忘录 › 重复提醒档位 */
.memo-reps{ display:flex; gap:6px; flex-wrap:wrap; }
.memo-rep{ border:1px solid #dfe6f0; background:#fff; border-radius:999px; padding:5px 12px;
  font-size:12.5px; color:#475569; cursor:pointer; font-family:inherit; }
.memo-rep:hover{ border-color:#8fb3f5; color:#1d4ed8; }
.memo-rep.on{ background:#e8f1ff; border-color:#9cc4f5; color:#1d4ed8; font-weight:600; }
.memo-cust{ display:none; align-items:center; gap:6px; font-size:12.5px; color:#5b6677; }
.memo-form .memo-cust input[type=number]{ width:78px; height:30px; box-sizing:border-box;
  border:1px solid #dfe6f0; border-radius:8px; padding:0 8px; font-size:13px;
  font-family:inherit; color:var(--text); background:#fff; outline:none; }
.memo-form .memo-cust input[type=number]:focus{ border-color:#8ab0f5; }
.memo-cust-u{ display:inline-flex; border:1px solid #dfe6f0; border-radius:8px; overflow:hidden; }
.memo-cust-u button{ border:0; background:#fff; padding:0 10px; height:30px; font-size:12.5px;
  color:#475569; cursor:pointer; font-family:inherit; }
.memo-cust-u button + button{ border-left:1px solid #eef1f6; }
.memo-cust-u button.on{ background:#e8f1ff; color:#1d4ed8; font-weight:600; }

/* 置顶小窗说明 */
.pin-help{ font-size:13px; line-height:1.85; color:#334155; }
.pin-help p{ margin:0 0 9px; }
.pin-help ul{ margin:0 0 9px; padding-left:20px; }
.pin-help li{ margin:4px 0; }
.pin-help code{ background:#f4f7fb; border:1px solid #e6ebf2; border-radius:4px;
  padding:1px 5px; font-size:12px; word-break:break-all; }
.pin-help-x{ background:#fffdf5; border:1px solid #f7ecd6; border-radius:8px; padding:8px 10px; }
.pin-help-x code{ background:#fff; }

/* 待办头分两行：上行「待办事项 · 共N条 · 置顶/浮窗/刷新」，下行整条「新建备忘录」 */
.dt-head{ display:flex; flex-direction:column; gap:6px; align-items:stretch; }
.dt-hrow{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.dt-hrow .dt-acts{ margin-left:auto; display:flex; gap:6px; flex-wrap:wrap; }
.dt-head .memo-btn{ width:100%; height:27px; font-size:12px; }
.card.dash-todo.is-float .dt-head .memo-btn{ width:100%; }
/* 「新建备忘录」现在是整条宽的按钮：红点挪到按钮内侧右边，别压住上一行的小按钮 */
.card.dash-todo .dt-head .memo-btn .memo-n{ top:50%; right:8px; margin-top:-8px; }

/* =======================================================================
   2026-10-24 第七批标注
   ① 工作台改成卡片（widget）体系：可拖动排序 / 移除 / 新增
   ② 待办卡：未完成·已完成页签 + 底部批量删除
   ③ 销售单：保存待发货 / 收款按钮；待发货订单页
   ======================================================================= */

/* ---- ① 工作台卡片 ---- */
.dash-tools{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 16px; }
.dash-tools .btn{ height:30px; }
.dash-tools .dw-tip{ font-size:12px; color:#9aa6bb; }
/* 工作台左右两栏（2026-10-25 标注）：中间一条竖分隔线，拖动自由伸缩。
   宽度写在本机（--dw-split），卡片放哪一栏也记在本机。 */
.dash-wrap{ display:flex; align-items:flex-start; padding-top:10px; --dw-split:68%; }
.dash-wrap[data-mode="single"]{ display:block; }
.dash-col{ display:flex; flex-direction:column; gap:16px; min-width:0; }
.dash-col[data-col="L"]{ flex:0 0 auto; width:calc(var(--dw-split) - 9px); }
.dash-col[data-col="R"]{ flex:1 1 0; min-width:0; }
.dash-col:empty{ display:none; }
.dash-split{ flex:0 0 18px; align-self:stretch; position:relative; cursor:col-resize;
  touch-action:none; user-select:none; }
.dash-split::before{ content:""; position:absolute; left:8px; top:2px; bottom:2px; width:2px;
  border-radius:2px; background:#e3eaf4; transition:background .15s; }
.dash-split:hover::before, .dash-split.on::before{ background:#8fb3f5; }
.dash-split::after{ content:""; position:absolute; left:5px; top:50%; width:8px; height:26px;
  margin-top:-13px; border-radius:4px; background:#fff; border:1px solid #dbe3ee;
  box-shadow:0 1px 4px rgba(15,23,42,.08); opacity:.55; transition:opacity .15s, border-color .15s; }
.dash-split:hover::after, .dash-split.on::after{ opacity:1; border-color:#9cc4f5; }
.dash-wrap[data-mode="single"] .dash-split{ display:none; }
.dash-wrap[data-mode="single"] .dash-col[data-col="L"],
.dash-wrap[data-mode="single"] .dash-col[data-col="R"]{ width:auto; flex:1 1 auto; }
@media (max-width:1100px){
  .dash-wrap{ display:block; }
  .dash-split{ display:none; }
  .dash-col[data-col="L"], .dash-col[data-col="R"]{ width:auto; flex:none; }
  .dash-col + .dash-col{ margin-top:16px; }
}
.dash-widget{ position:relative; }
.dash-widget .dw-bar{ position:absolute; right:14px; top:-12px; z-index:6;
  display:flex; align-items:center; gap:2px; opacity:0; transition:opacity .15s;
  background:rgba(255,255,255,.96); border:1px solid #e6ebf2; border-radius:8px;
  padding:2px 4px; box-shadow:0 2px 10px rgba(15,23,42,.08); cursor:grab; }
.dash-widget:hover .dw-bar{ opacity:1; }
.dash-widget .dw-bar:active{ cursor:grabbing; }
.dw-grab{ color:#b3becd; font-size:12px; letter-spacing:-1px; padding:0 2px; }
.dw-name{ font-size:12px; color:#5b6677; padding:0 4px; white-space:nowrap; }
.dw-b{ border:0; background:transparent; color:#64748b; font-size:12px; line-height:1;
  width:20px; height:20px; border-radius:5px; cursor:pointer; padding:0; }
.dw-b:hover{ background:#eef4ff; color:#1d4ed8; }
.dw-b:disabled{ color:#d8dfe9; cursor:default; background:transparent; }
.dw-x:hover{ background:#fdeaea; color:#c0392b; }
.dash-widget.dw-dragging{ opacity:.5; }
.dash-widget.dw-over{ outline:2px dashed #8fb3f5; outline-offset:3px; border-radius:14px; }
.dash-widget .dw-body > .card{ margin-bottom:0; }
.dash-widget .dw-body > .dash-todo-slot .card{ margin-bottom:0; }
.dash-none{ padding:26px 20px; display:flex; flex-direction:column; gap:6px;
  align-items:center; text-align:center; color:#8d99ad; font-size:13px; }
.dash-none b{ color:#1b2433; font-size:14px; }
/* 添加卡片 */
.dw-addlist{ display:flex; flex-direction:column; gap:8px; }
.dw-addrow{ display:grid; grid-template-columns:96px 1fr auto; gap:10px; align-items:center;
  border:1px solid #e6ebf2; border-radius:10px; padding:10px 12px; cursor:pointer; background:#fff; }
.dw-addrow:hover{ border-color:#9cc4f5; background:#f7faff; }
.dw-addrow b{ font-size:13.5px; color:#1b2433; }
.dw-addrow span{ font-size:12px; color:#7b8798; line-height:1.6; }
.dw-addrow i{ font-style:normal; font-size:12px; color:#1d4ed8; white-space:nowrap; }
.dw-addrow.on{ background:#fbfcfe; }
.dw-addrow.on i{ color:#9aa6bb; }
.dw-addtip{ margin-top:12px; font-size:12px; color:#9aa6bb; line-height:1.7; }

/* 经营概览卡 */
.dash-stats{ padding:0; overflow:hidden; }
.ds-head, .dq-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:10px 14px; border-bottom:1px solid #eef1f6; background:#fbfcfe; }
.ds-head b, .dq-head b{ font-size:14px; color:#1b2433; }
.ds-date{ font-size:12px; color:#9aa6bb; }
.ds-head .fbtn{ margin-left:auto; }
.ds-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr));
  gap:10px; padding:12px 14px; }
.ds-box{ border:1px solid #e9eef6; border-radius:10px; padding:10px 12px; background:#fff;
  display:flex; flex-direction:column; gap:3px; }
.ds-box.hold{ background:#fffdf5; border-color:#f7ecd6; }
.ds-k{ font-size:12px; color:#6b7787; }
.ds-v{ font-size:18px; font-weight:700; color:#1b2433; }
.ds-s{ font-size:11.5px; color:#94a3b8; }
.ds-foot{ padding:0 14px 10px; font-size:11.5px; color:#9aa6bb; line-height:1.7; }
/* 快捷入口卡 */
.dq-grid{ display:flex; flex-wrap:wrap; gap:8px; padding:12px 14px; }
.dq-b{ border:1px solid #dfe6f0; background:#fff; border-radius:8px; padding:7px 14px;
  font-size:12.5px; color:#334155; cursor:pointer; font-family:inherit; }
.dq-b:hover{ border-color:#9cc4f5; background:#f7faff; color:#1d4ed8; }

/* ---- ② 待办卡：未完成 / 已完成 页签 ---- */
.dt-tabsrow{ display:flex; gap:6px; padding:0 10px 6px; }
.card.dash-todo .dt-tab{ border:1px solid #e6ebf2; border-radius:999px; background:#fff;
  color:#64748b; font-size:12px; padding:3px 10px; cursor:pointer; display:inline-flex;
  align-items:center; gap:5px; position:static; }
.card.dash-todo .dt-tab i{ font-style:normal; font-size:11px; min-width:15px; height:15px;
  line-height:15px; text-align:center; padding:0 4px; border-radius:8px;
  background:#eef2f8; color:#5b6677; }
.card.dash-todo .dt-tab.on{ background:#e8f1ff; border-color:#9cc4f5; color:#1d4ed8; font-weight:600; }
.card.dash-todo .dt-tab.on i{ background:#d7e6ff; color:#1d4ed8; }
.card.dash-todo .dt-item.is-done{ background:#fafbfd; }
.card.dash-todo .dt-item.is-done .dt-t1 b{ color:#5b6677; font-weight:500; }
.dt-ck.dt-undo{ border-color:#dfe6f0; color:#8d99ad; }
.dt-ck.dt-undo:hover{ border-color:#9cc4f5; color:#1d4ed8; background:#f4f8ff; }
/* 底部：一句话说明 + 删除 / 全部需求 */
.card.dash-todo .dt-foot{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  justify-content:space-between; line-height:1.6; }
.dt-foot-t{ flex:1 1 auto; min-width:0; }
.dt-foot-b{ flex:0 0 auto; display:inline-flex; align-items:center; gap:8px; }
.dt-foot-b .fbtn{ height:24px; font-size:11.5px; padding:0 9px; }
.card.dash-todo .dt-foot a{ color:#2f6fed; text-decoration:none; }
.card.dash-todo .dt-foot a:hover{ text-decoration:underline; }

/* ---- ③ 销售单：待发货 / 收款 ---- */
.btn.hold-done{ background:#eef7f0; border-color:#bfe0c8; color:#3f8b52; }
.btn.confirm-hold{ background:#fffdf5; border-color:#f0dcae; color:#a16207; font-weight:600; }
/* 待发货订单页 */
.ps-tbl td{ white-space:nowrap; }
.ps-tbl .ops-cell .btn{ height:26px; padding:0 10px; font-size:12px; }

/* 图片预览（盖在上一层弹窗上的临时层）里的说明文字 */
.memo-zoom-tip{ margin-top:8px; text-align:center; font-size:12px; color:#8d99ad; }

/* ===== 弹窗回退：盖在上面那层（图片预览）背后的「灰海报」=====
   2026-10-24 第七批标注：× / ESC 只退一步。为了让用户看得见「下面那层还在」，
   把被盖住的那层 clone 一份灰掉贴后面（去 id、不吃鼠标事件，纯装饰）。
   z-index 要比 .nx-modal(99970) 小、比页面内容大。 */
.nx-modal-under{
  display:none; position:fixed; inset:0; z-index:99965;
  background:rgba(15,23,42,.22);
  align-items:center; justify-content:center; padding:24px;
  pointer-events:none;
}
.nx-modal-under.on{ display:flex; }
.nx-modal-under .nx-modal-box{
  pointer-events:none; opacity:.62; filter:saturate(.75);
  box-shadow:0 12px 32px rgba(0,0,0,.22);
}
.nx-modal-under .nx-modal-x,
.nx-modal-under .nx-modal-grip{ display:none; }

/* ===== 第八批标注（v20261024y）===== */
/* ① 开单页「约定发货时间」：按钮上直接显示约定结果 */
#od-shipdue.shipdue-on{ border-color:#c7a15a; background:#fff8e8; color:#8a5a00; font-weight:600; }

/* 约定发货时间弹窗（三种输入方式） */
.nx-modal-box.sd-modal{ width:min(460px,92vw); }
.sd-form{ font-size:13px; color:#334155; }
.sd-modes{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:14px; }
.sd-mode{ display:inline-flex; align-items:center; gap:6px; padding:7px 12px; border:1px solid #dfe4ec;
  border-radius:8px; cursor:pointer; background:#fff; }
.sd-mode.on{ border-color:#2f6fed; background:#f2f7ff; color:#1b4fbf; font-weight:600; }
.sd-mode input{ margin:0; }
.sd-pane{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.sd-pane label{ color:#5b6677; }
.sd-pane input[type="date"],.sd-pane input[type="time"]{ border:1px solid #dfe4ec; border-radius:8px;
  padding:6px 8px; font-size:13px; }
.sd-pane input[type="number"]{ width:82px; border:1px solid #dfe4ec; border-radius:8px; padding:6px 8px; font-size:13px; }
.sd-chips{ display:flex; gap:6px; flex-wrap:wrap; }
.sd-chip{ border:1px solid #dfe4ec; background:#fff; border-radius:999px; padding:4px 12px;
  font-size:12px; color:#475569; cursor:pointer; }
.sd-chip:hover{ border-color:#2f6fed; color:#1b4fbf; }
.sd-tip{ display:block; width:100%; margin-top:8px; font-size:12px; color:#8a97ab; }

/* 销售单据列表：约定发货时间列 */
.docs-tbl td.sd-cell{ white-space:nowrap; }
.sd-val{ font-variant-numeric:tabular-nums; color:#334155; }
.sd-val.sd-late{ color:#c8433e; font-weight:600; }
.sd-none{ color:#b3bdcb; }

/* 收款推进小标签（转财务 / 延迟收款） */
.cl-chip{ display:inline-block; padding:1px 6px; border-radius:999px; font-size:11px; line-height:18px;
  border:1px solid transparent; white-space:nowrap; }
.cl-chip.cl-fin{ background:#eef4ff; border-color:#c9dbff; color:#1b4fbf; }
.cl-chip.cl-wait{ background:#fff6e6; border-color:#f2d9a8; color:#8a5a00; }
#od-paybtn.pay-next{ border-color:#c9dbff; background:#f2f7ff; color:#1b4fbf; }

/* 报价 · 批量比价：替代件编号 / 备注两列（长文本省略，悬停看全文） */
.qm-txt-cell{ max-width:190px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:#5b6677; }
/* 结算状态：未结清 + 转财务 / 延迟收款 两个小标签并排一行，别叠成两行 */
.docs-tbl td.pay-cell{ white-space:nowrap; }
.docs-tbl td.pay-cell .cl-chip{ margin-left:4px; vertical-align:middle; }

/* ===== 急件仓（2026-10-25） =====
   库存不足的备件拆成「急件仓」行，状态链：已订货 → 已发货(预计到货) → 已到货 */
.od-row.od-urgent{ background:#fffaf0; }
.od-row.od-urgent td{ background:#fffaf0; }
.od-row.od-urgent .od-wh{ color:#b26b00; font-weight:600; }
.od-row.od-urgent .od-hint{ color:#b26b00; }
.od-row.od-urgent td:first-child{ box-shadow:inset 3px 0 0 #e8a33d; }

.wh-urg{ display:inline-block; padding:1px 7px; border-radius:999px; font-size:11px; line-height:18px;
  background:#fff3dc; border:1px solid #f0d5a3; color:#8a5a00; white-space:nowrap; }

/* 急件状态胶囊 */
.ug-chip{ display:inline-block; padding:1px 8px; border-radius:999px; font-size:11px; line-height:18px;
  border:1px solid transparent; white-space:nowrap; }
.ug-wait{ background:#f1f4f9; border-color:#dde4ee; color:#5b6677; }
.ug-move{ background:#eef4ff; border-color:#c9dbff; color:#1b4fbf; }
.ug-ok{ background:#eaf8f1; border-color:#bfe7d2; color:#1a7d4c; }

/* 待发货清单：急件备件子表 */
.ps-tbl tr.ps-urg-tr > td{ padding:0; background:#fbfcfe; }
/* 2026-10-29 标注：待发货订单要能勾选具体某几单再打印（以前一点就把整页全印出来）。
   勾选列做窄一点，方框居中，别把「保存时间 / 客户」挤走。 */
.ps-tbl th.ps-ck, .ps-tbl td.ps-ck{ width:34px; min-width:34px; text-align:center;
  padding-left:6px; padding-right:2px; }
.ps-tbl th.ps-ck input, .ps-tbl td.ps-ck input{ width:14px; height:14px; margin:0; cursor:pointer;
  vertical-align:middle; }
/* 2026-10-27 标注：明细默认收起，点客户那一格才展开 —— 客户格做成可点的展开开关。
   箭头用 ::before 画（不是真实文本）：客户名复制 / innerText / 导出不会被 ▸ 污染。 */
.ps-tbl tr.ps-doc > td.ps-cust{ cursor:pointer; user-select:none; }
.ps-tbl tr.ps-doc > td.ps-cust::before{ content:"▸"; display:inline-block; width:1em; margin-right:1px;
  color:#8a97ab; transition:transform .15s ease; }
.ps-tbl tr.ps-doc > td.ps-cust:hover{ background:#f2f7ff; }
.ps-tbl tr.ps-doc.ps-open > td.ps-cust{ background:#f6faff; font-weight:600; }
.ps-tbl tr.ps-doc.ps-open > td.ps-cust::before{ transform:rotate(90deg); color:#2f6fed; }
.ug-sub{ padding:10px 12px 12px; border-top:1px dashed #e3e9f2; }
.ug-sub-t{ font-size:12px; color:#5b6677; margin-bottom:8px; }
.ug-sub-t .ug-left{ color:#c07a00; }
.ug-sub-t .ug-all{ color:#1a7d4c; }
.ug-sub-tb{ width:100%; border-collapse:collapse; font-size:12px; background:#fff; }
.ug-sub-tb th,.ug-sub-tb td{ padding:5px .5em; border-bottom:1px solid #eef2f8; text-align:left; }
.ug-sub-tb th{ background:#f5f8fd; color:#5b6677; font-weight:600; white-space:nowrap; }
.ug-sub-tb tr:last-child td{ border-bottom:none; }
/* 明细勾选列 + 「删除勾选行」工具条（2026-10-30 标注：可以选择部分配件删除） */
.ug-sub-tb th.ps-ck, .ug-sub-tb td.ps-ck{ width:28px; min-width:28px; text-align:center; padding-left:2px; padding-right:2px; }
.ug-sub-tb th.ps-ck input, .ug-sub-tb td.ps-ck input{
  width:14px; height:14px; margin:0; cursor:pointer; vertical-align:middle; }
.ug-sub-tb td.ps-ck input:disabled{ cursor:not-allowed; opacity:.45; }
.ug-cut-bar{ display:flex; align-items:center; justify-content:flex-end; gap:10px; margin:-2px 0 8px; }
.ug-cut-n{ font-size:12px; color:#8a97ab; }
.ug-cut-n.on{ color:#1b4fbf; font-weight:600; }
.ug-cut-go{ padding:3px 12px; font-size:12px; }
.ug-cut-go:disabled{ opacity:.5; cursor:not-allowed; }
.ug-cut-why{ font-size:12px; color:#b45309; }
/* 2026-10-28 标注：待发货明细 / 退货可退清单都多了一列「车型」。
   车型名常见「长安 CS75 PLUS 2021款」，整行 nowrap 会把表撑爆 → 限宽折行。 */
.ug-sub-tb td.ug-veh, .ps-res td.ret-veh{
  max-width:130px; white-space:normal; word-break:break-word; line-height:1.35; color:#475569; }
.ug-st{ display:inline-flex; align-items:center; gap:6px; padding:3px 10px; border-radius:999px;
  border:1px solid #dde4ee; background:#fff; font-size:12px; cursor:pointer; color:#334155; }
.ug-st:hover{ border-color:#2f6fed; }
.ug-st-dot{ width:7px; height:7px; border-radius:50%; background:#b3bdcb; flex:0 0 auto; }
.ug-st.ug-wait .ug-st-dot{ background:#b3bdcb; }
.ug-st.ug-move{ background:#eef4ff; border-color:#c9dbff; color:#1b4fbf; }
.ug-st.ug-move .ug-st-dot{ background:#2f6fed; }
.ug-st.ug-ok{ background:#eaf8f1; border-color:#bfe7d2; color:#1a7d4c; }
.ug-st.ug-ok .ug-st-dot{ background:#2bb673; }
.ug-st-more{ color:#8a97ab; font-size:11px; }

/* 急件状态弹框（快递式时间轴） */
.nx-modal-box.ug-modal{ width:min(560px,94vw); }
.ug-loading{ padding:16px; color:#8a97ab; font-size:13px; }
.ug-hd{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
.ug-code{ font-size:17px; font-weight:700; letter-spacing:.3px; }
.ug-name{ font-size:13px; color:#5b6677; margin-top:3px; }
.ug-state{ flex:0 0 auto; padding:5px 12px; border-radius:999px; font-size:12px; font-weight:600;
  border:1px solid transparent; white-space:nowrap; }
.ug-state.ug-wait{ background:#f1f4f9; border-color:#dde4ee; color:#5b6677; }
.ug-state.ug-move{ background:#eef4ff; border-color:#c9dbff; color:#1b4fbf; }
.ug-state.ug-ok{ background:#eaf8f1; border-color:#bfe7d2; color:#1a7d4c; }
.ug-meta{ margin-top:10px; font-size:12px; color:#8a97ab; }
.ug-tl{ list-style:none; margin:16px 0 4px; padding:0 0 0 6px; }
.ug-tl-i{ position:relative; padding:0 0 16px 22px; border-left:2px solid #e6ecf5; }
.ug-tl-i:last-child{ border-left-color:transparent; padding-bottom:2px; }
.ug-dot{ position:absolute; left:-7px; top:2px; width:12px; height:12px; border-radius:50%;
  background:#fff; border:2px solid #d7dee9; }
.ug-tl-i.done{ border-left-color:#bfe7d2; }
.ug-tl-i.done .ug-dot{ background:#2bb673; border-color:#2bb673; }
.ug-tl-i.cur .ug-dot{ box-shadow:0 0 0 4px rgba(43,182,115,.16); }
.ug-tl-i:not(.done) .ug-dot{ border-color:#d7dee9; background:#fff; }
.ug-tl-t{ font-size:13px; font-weight:600; color:#1f2937; }
.ug-tl-i:not(.done) .ug-tl-t{ color:#a0aec0; font-weight:500; }
.ug-tl-at{ font-size:12px; color:#8a97ab; margin-top:2px; font-variant-numeric:tabular-nums; }
.ug-tl-n{ font-size:12px; color:#5b6677; margin-top:3px; }
.ug-logi{ margin-top:6px; padding:8px 10px; background:#f7f9fd; border:1px solid #e8eef7; border-radius:8px;
  font-size:12px; color:#475569; }
.ug-pic{ margin-top:10px; }
/* 时间轴里只放缩略图：点一下会进「供应商物流单」子视图看大图（2026-10-25） */
.ug-pic img{ max-width:100%; max-height:190px; width:auto; border:1px solid #e3e9f2;
  border-radius:8px; cursor:zoom-in; display:block; }
.ug-tip{ margin-top:12px; font-size:11px; color:#a0aec0; }

/* 时间轴上可点的两步：「已订货」看采购订单、「已发货」看供应商物流单（2026-10-25 标注②） */
.ug-tl-i.ug-tl-act{ cursor:pointer; border-radius:0 8px 8px 0; transition:background .12s; }
.ug-tl-i.ug-tl-act:hover{ background:linear-gradient(90deg,#f2f7ff,rgba(242,247,255,0)); }
.ug-tl-i.ug-tl-act:hover .ug-tl-t{ color:#1b4fbf; }
.ug-tl-act:not(.done):hover .ug-tl-t{ color:#1b4fbf; }
.ug-tl-go{ margin-left:6px; font-size:11px; font-weight:500; color:#2f6fed; opacity:.9; }
.ug-tl-act:hover .ug-tl-go{ text-decoration:underline; }

/* 弹框内的子视图（急件采购单 / 物流单）——同一个弹框里翻页，不另开窗口 */
.ugv-hd{ display:flex; align-items:center; gap:10px; padding-bottom:10px;
  border-bottom:1px solid #eef1f7; margin-bottom:12px; }
.ugv-tt{ font-size:13px; color:#334155; }
.ugv-tt b{ color:#1f2937; }
.ugv-st{ margin-left:auto; font-size:12px; color:#1a7d4c; background:#eaf8f1;
  border:1px solid #bfe7d2; border-radius:999px; padding:1px 9px; }
.ugv-st.warn{ color:#8a5300; background:#fff8e8; border-color:#f0d5a3; }
.ugv-card{ font-size:12px; color:#334155; }
.ugv-kv{ display:grid; grid-template-columns:repeat(2,1fr); gap:4px 1em; margin-bottom:10px; }
.ugv-kv>div{ display:flex; gap:.5em; align-items:baseline; min-width:0; }
.ugv-kv span{ color:#8a97ab; flex:0 0 auto; }
.ugv-kv b{ color:#1f2937; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 「这件备件到底跟哪个供应商买的」是这块的主角（2026-10-25 标注①） */
.ugv-kv .ugv-kv-sup{ grid-column:1 / -1; }
.ugv-kv .ugv-kv-sup b{ color:#0f2b5b; font-size:14px; font-weight:700; }
.ugv-tw{ border:1px solid #e8eef7; border-radius:8px; overflow:auto; max-height:46vh; }
.ugv-tb{ width:100%; border-collapse:collapse; font-size:12px; }
.ugv-tb th{ position:sticky; top:0; background:#f7f9fd; color:#5b6677; font-weight:600;
  padding:6px 8px; border-bottom:1px solid #e8eef7; white-space:nowrap; text-align:left; }
.ugv-tb td{ padding:6px 8px; border-bottom:1px solid #f1f4f9; white-space:nowrap; }
.ugv-tb tr:last-child td{ border-bottom:0; }
.ugv-tb tr.ugv-on td{ background:#fff8e8; font-weight:600; }
.ugv-tb .num{ text-align:right; }
.ugv-none{ text-align:center; color:#a0aec0; }
.ugv-tot{ display:flex; flex-wrap:wrap; gap:.5em 1em; justify-content:flex-end;
  padding:9px 2px 2px; font-size:12px; color:#5b6677; }
.ugv-tot b{ color:#1f2937; }
.ugv-tot b.hi{ color:#c2410c; font-size:13px; }
.ugv-acts{ display:flex; gap:8px; margin-top:10px; }
.ugv-empty{ margin:10px 0; padding:14px; border:1px dashed #cfd8e6; border-radius:8px;
  background:#fafbfe; color:#8a97ab; font-size:12px; line-height:1.8; text-align:center; }
.ugv-pic{ margin-top:10px; max-height:52vh; overflow:auto; }
.ugv-pic img{ max-width:100%; border:1px solid #e3e9f2; border-radius:8px; cursor:zoom-in; display:block; }
.ugv-pic img.zoom{ max-width:none; }

/* 急件闸门弹框（还没到货时拦住确认/发送库房） */
.nx-modal-box.ug-gate-modal{ width:min(520px,94vw); }
.ug-gate{ font-size:13px; color:#334155; }
.ug-gate-t{ font-size:13px; margin-bottom:8px; }
.ug-gate-list{ margin:0 0 10px; padding:10px 12px; background:#fffaf0; border:1px solid #f0e0c2;
  border-radius:8px; font-size:12px; line-height:1.8; color:#8a5a00; white-space:pre-wrap;
  font-family:inherit; max-height:260px; overflow:auto; }
.ug-gate-tip{ font-size:12px; color:#8a97ab; line-height:1.7; }

/* 采购端：急件物流登记弹框 */
.nx-modal-box.ul-modal{ width:min(720px,96vw); }
.ul-hd{ font-size:13px; color:#334155; margin-bottom:12px; }
.ul-grid{ display:grid; grid-template-columns:88px 1fr; gap:8px 10px; align-items:center; font-size:13px; }
.ul-grid label{ color:#5b6677; }
.ul-grid input{ height:32px; border:1px solid #dfe4ec; border-radius:8px; padding:0 10px; font-size:13px; }
.ul-picwrap{ margin:12px 0; }
.ul-pic-tip{ font-size:12px; color:#8a97ab; margin-bottom:6px; }
.ul-pic{ min-height:76px; display:flex; align-items:center; justify-content:center;
  border:1px dashed #cfd8e6; border-radius:8px; color:#8a97ab; font-size:12px; cursor:pointer;
  background:#fafbfe; overflow:hidden; }
.ul-pic:hover{ border-color:#2f6fed; color:#1b4fbf; }
.ul-pic.has{ border-style:solid; padding:0; }
.ul-pic img{ max-width:100%; max-height:220px; display:block; cursor:zoom-in; }
.ul-rows{ margin-top:8px; }
.ul-rows table{ width:100%; border-collapse:collapse; font-size:12px; }
.ul-rows th,.ul-rows td{ padding:5px .5em; border-bottom:1px solid #eef2f8; text-align:left; }
.ul-rows th{ background:#f5f8fd; color:#5b6677; font-weight:600; }
.ul-tip{ margin-top:10px; font-size:12px; color:#8a97ab; }
.btn.ug-logi-btn{ border-color:#f0d5a3; background:#fff8e8; color:#8a5a00; }
.btn.ug-logi-btn:hover{ border-color:#e8a33d; background:#fff2d8; }
.btn.ug-blocked{ border-color:#f0d5a3; background:#fff8e8; color:#8a5a00; }

/* ===== 销售明细弹窗（2026-10-25 标注第 2 条） =====
   双击开单页查询结果里的备件先弹这个：库存 / 上次销售 / 打印信息 / 本次销售，
   确认后才落到明细；库存不够再问「是否开急件单」。 */
.nx-modal-box.dl-modal{ width:min(760px,96vw); }
.dl-loading{ padding:18px; color:#8a97ab; font-size:13px; }
.dl-wrap{ font-size:13px; color:#334155; }
.dl-hd{ padding:0 0 10px; border-bottom:1px solid #eef2f8; margin-bottom:10px; }
.dl-code{ font-size:15px; font-weight:700; letter-spacing:.3px; }
.dl-nm{ display:inline-block; margin-left:10px; font-size:14px; color:#1f2937; }
.dl-meta{ margin-top:4px; font-size:12px; color:#8a97ab; }
.dl-sec{ margin:12px 0 8px; font-size:12px; font-weight:600; color:#5b6677;
  padding-left:8px; border-left:3px solid #cfe0ff; line-height:1.2; }
.dl-grid{ display:grid; grid-template-columns:max-content minmax(0,1fr) max-content minmax(0,1fr);
  gap:8px 10px; align-items:center; }
.dl-grid1{ grid-template-columns:max-content minmax(0,1fr); margin-top:8px; }
.dl-grid label{ color:#5b6677; text-align:right; white-space:nowrap; }
.dl-grid input,.dl-grid select{ height:30px; min-width:0; border:1px solid #dfe4ec; border-radius:7px;
  padding:0 8px; font-size:13px; background:#fff; color:#1f2937; }
.dl-grid input[readonly]{ background:#f6f8fc; color:#64748b; }
.dl-grid input:focus,.dl-grid select:focus{ outline:none; border-color:#2f6fed; box-shadow:0 0 0 3px rgba(47,111,237,.12); }
.dl-tip{ margin-top:12px; padding:8px 10px; border-radius:8px; background:#f7f9fd; border:1px solid #e8eef7;
  font-size:12px; color:#5b6677; line-height:1.7; }

/* 急件状态：已订货（采购单已确认）单独一档颜色 */
.ug-chip.ug-ord{ background:#fff6e6; border-color:#f3ddb4; color:#8a5a00; }
.ug-state.ug-ord{ background:#fff6e6; border-color:#f3ddb4; color:#8a5a00; }
.ug-st.ug-ord{ background:#fff6e6; border-color:#f3ddb4; color:#8a5a00; }
.ug-st.ug-ord .ug-st-dot{ background:#e8a33d; }

/* 库存不足是否开急件单（对齐原软件的「确认信息 / 确定 / 取消」） */
.nx-modal-box.ug-ask-modal{ width:min(480px,94vw); }
.ug-ask{ font-size:13px; color:#334155; }
.ug-ask-q{ font-size:15px; font-weight:600; color:#1f2937; margin-bottom:10px; }
.ug-ask-l{ padding:10px 12px; background:#fffaf0; border:1px solid #f0e0c2; border-radius:8px;
  font-size:12px; line-height:1.9; color:#8a5a00; max-height:220px; overflow:auto; }
.ug-ask-l b{ color:#1f2937; }
.ug-ask-l .ug-miss{ color:#c0392b; }
.ug-ask-tip{ margin-top:10px; font-size:12px; color:#8a97ab; line-height:1.75; }

/* ================= 缺货提醒（2026-10-25 重构：急件不再是单据） =================
   一条口径：库存不够只在行上标一个「缺货」，系统不生成任何采购单。
   下面的样式覆盖上面旧版「急件仓」的 .ugv-* 定义（同特异性，后定义优先）。 */
.ugv-hd{ display:flex; align-items:baseline; gap:1em; padding-bottom:10px;
  border-bottom:1px solid #eef2f8; margin-bottom:12px; }
.ugv-ht{ font-size:14px; font-weight:600; color:#1f2937; }
.ugv-hs{ margin-left:auto; font-size:12px; color:#5b6677; }
.ugv-miss{ color:#c2410c; }
.ugv-ok{ color:#1a7d4c; }

.ugv-card{ border:1px solid #e8eef7; border-radius:10px; padding:12px 14px; margin-bottom:10px; }
.ugv-card.warn{ border-color:#f2d6b3; background:#fffbf4; }
.ugv-card-hd{ display:flex; align-items:center; gap:.7em; margin-bottom:8px; }
.ugv-card-hd .mono{ font-size:13px; color:#0f2b5b; font-weight:600; }
.ugv-name{ flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis;
  white-space:nowrap; color:#334155; font-size:12px; }
.ugv-st{ margin-left:auto; flex:0 0 auto; font-size:12px; padding:2px 10px;
  border-radius:999px; border:1px solid #bfe7d2; background:#eaf8f1; color:#1a7d4c; }
.ugv-st.warn{ border-color:#f0d5a3; background:#fff8e8; color:#8a5300; }

.ugv-kv{ display:flex; flex-wrap:wrap; gap:.4em 1em; margin-bottom:10px;
  font-size:12px; color:#5b6677; }
.ugv-kv b{ color:#1f2937; font-weight:600; }
.ugv-kv .ugv-move{ color:#1b4fbf; }
.ugv-kv .ugv-move b{ color:#1b4fbf; }

.ugv-tl{ display:flex; flex-direction:column; }
.ugv-tl-i{ display:flex; gap:8px; position:relative; padding-bottom:10px; }
.ugv-tl-i:last-child{ padding-bottom:0; }
.ugv-tl-i::before{ content:""; position:absolute; left:3.5px; top:14px; bottom:0;
  width:1px; background:#e2e8f2; }
.ugv-tl-i:last-child::before{ display:none; }
.ugv-dot{ width:8px; height:8px; border-radius:50%; background:#cbd5e1;
  margin-top:5px; flex:0 0 auto; }
.ugv-tl-i.done .ugv-dot{ background:#2bb673; }
.ugv-tl-i.warn .ugv-dot{ background:#e08a00; }
.ugv-tl-t{ font-size:12px; color:#334155; font-weight:600; }
.ugv-tl-i:not(.done) .ugv-tl-t{ color:#9aa6bb; font-weight:400; }
.ugv-tl-s{ font-size:11px; color:#8a97ab; margin-top:1px; }
.ugv-tip{ font-size:11px; color:#8a97ab; line-height:1.75;
  border-top:1px dashed #e8eef7; padding-top:8px; }

/* 开单页：缺货提示（以前是「急件仓」） */
.od-hint-warn{ color:#b26b00 !important; }
.od-hint-ok{ color:#1a7d4c !important; }

/* 待发货清单：数量格里的小字「已发 N」 */
.ps-out{ display:block; font-size:11px; color:#1b4fbf; font-style:normal; }

/* 工作台「缺货待补」卡 */
.ds-short-hd{ display:flex; align-items:center; gap:1em; font-size:12px;
  color:#5b6677; margin-bottom:8px; }
.ds-short-hd span{ flex:1 1 auto; }
.ds-short-hd b{ color:#c2410c; }
.mini-tbl{ width:100%; border-collapse:collapse; font-size:12px; }
/* 窄栏里别把卡片撑破：缺货清单放不下就卡内横滚（单元格不折字，否则「品牌」会竖排） */
#ds-short{ overflow-x:auto; }
#ds-short .mini-tbl th, #ds-short .mini-tbl td{ white-space:nowrap; }
.mini-tbl th{ text-align:left; color:#8a97ab; font-weight:500; padding:5px 6px;
  border-bottom:1px solid #eef2f8; white-space:nowrap; }
.mini-tbl td{ padding:5px 6px; border-bottom:1px solid #f4f7fb; color:#334155; }
.mini-tbl td.num{ text-align:right; }
.mini-tbl tr:last-child td{ border-bottom:0; }

/* ===== 财务 › 销售付款：付款凭证（2026-10-27 用户标注第 21 条） =====
   列表最前面一列勾选框（单选 / 多选都行）→ 上方勾选条「上传付款凭证」；
   「付款凭证」列显示 已上传 / 未上传，点开看记录与图片。 */
.docs-pickbar{ display:flex; align-items:center; gap:10px;
  padding:7px 12px; margin:0 0 10px;
  background:#f5f9ff; border:1px solid #dbe7fb; border-radius:8px; }
.dpb-info{ flex:1 1 auto; min-width:0; font-size:12.5px; color:#3b5477; }
.dpb-info b{ margin-left:10px; color:#1d4ed8; font-size:13px; }
.docs-pickbar .btn{ height:28px; padding:0 12px; font-size:12.5px; flex-shrink:0; }
.docs-pickbar .btn:disabled{ opacity:.55; }

/* 勾选列：窄、居中、不参与列宽拖拽记忆 */
.docs-tbl th.pick-h, .docs-tbl td.pick-c{ width:34px; min-width:34px; text-align:center; padding-left:6px; padding-right:6px; }
.docs-tbl td.pick-c input, .docs-tbl th.pick-h input{ width:15px; height:15px; margin:0; cursor:pointer; vertical-align:middle; }
.docs-tbl tr.docs-local.picked td, .docs-tbl tr.doc-row.picked td{ background:#f2f7ff; }

/* 「已上传」标签可点 */
.vch-chip{ cursor:pointer; }
.vch-chip:hover{ filter:brightness(.96); box-shadow:0 0 0 2px rgba(21,128,61,.12); }

/* 上传凭证弹窗：比收付款登记宽，表格要放得下「订单金额 / 已上传 / 本次付款金额」 */
.nx-modal-box.nx-blue.nx-vch{ width:min(780px, 96vw); }
.nx-modal-box.nx-blue.nx-vch-view{ width:min(580px, 94vw); }
.vch-form .pf-row{ margin-bottom:8px; }
.vch-form .pf-row > label{ width:72px; }
.vch-form #vc-at{ background:#f7f9fc; color:#5b6677; }
/* 弹窗比收付款登记宽，1:1 的大格子会占掉半屏 → 图片格固定 140px 见方 */
.vch-form .pf-ups{ grid-template-columns:repeat(3, minmax(0, 140px)); }
.vch-form .pf-up-hint{ color:#7c8ba1; }

.vch-docs{ margin-top:12px; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
.vch-docs-head{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:7px 12px; background:#f7faff; border-bottom:1px solid var(--line);
  font-size:12.5px; color:#3b5477; }
.vch-docs-head b{ color:#1d4ed8; }
.vch-tbl-wrap{ max-height:236px; overflow:auto; }
.vch-tbl{ width:100%; border-collapse:separate; border-spacing:0; font-size:12.5px; }
.vch-tbl th{ position:sticky; top:0; z-index:1; background:#fafbfd; color:#6b7a90;
  font-weight:500; text-align:left; padding:6px 10px; border-bottom:1px solid #e6ebf2; white-space:nowrap; }
.vch-tbl td{ padding:5px 10px; border-bottom:1px solid #f1f4f9; color:#334155; }
.vch-tbl tr:last-child td{ border-bottom:0; }
.vch-tbl th.num, .vch-tbl td.num{ text-align:right; }
.vch-tbl td.mono{ font-family:Consolas,Menlo,monospace; font-size:12px; }
.vch-tbl .vch-amt{ width:112px; height:26px; padding:0 8px; text-align:right;
  border:1px solid #d7dee9; border-radius:6px; background:#fff;
  font-family:inherit; font-size:12.5px; color:#1d4ed8; font-variant-numeric:tabular-nums; }
.vch-tbl .vch-amt:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.10); }
.vch-n{ color:#8b95a7; font-size:11.5px; }
.vch-none{ color:#b6c0cf; }
.vch-tip{ padding:6px 12px; font-size:11.5px; color:#7c8ba1;
  background:#fbfcfe; border-top:1px solid #f1f4f9; line-height:1.6; }

/* 凭证查看：一笔一张卡 */
.vch-view{ font-size:13px; color:var(--text); }
.vch-view-head{ font-size:13px; color:#3b5477; margin-bottom:10px; }
.vch-card{ border:1px solid var(--line); border-radius:8px; padding:10px 12px;
  margin-bottom:10px; background:#fff; }
.vch-card:last-child{ margin-bottom:0; }
.vch-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }
.vch-card-head .mono{ font-family:Consolas,Menlo,monospace; font-size:12.5px; color:#334155; }
.vch-amt-b{ color:#b45309; font-weight:700; font-size:13px; }
.vch-card-head .vch-del{ margin-left:auto; height:24px; padding:0 10px; font-size:12px; }
.vch-kv{ display:flex; flex-wrap:wrap; gap:4px 16px; font-size:12.5px; color:#54637a; margin-bottom:4px; }
.vch-imgs{ display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.vch-img{ width:96px; height:96px; object-fit:cover; border-radius:6px;
  border:1px solid var(--line); cursor:zoom-in; background:#f7f9fc; }
.vch-img:hover{ border-color:#93b4f0; }
.vch-noimg{ font-size:12px; color:#b6c0cf; margin-top:6px; }

/* ===== 财务 › 收支明细：勾选 / 明细科目 / 批量修改（2026-10-27 用户标注） =====
   ① 列表最前面加勾选列（单选 / 多选都行），勾完点「修改」逐条改
   ② 新增弹窗：总金额 + 明细表（一张图一条明细，各自填金额、选一级 / 二级科目）
   ③ 删掉「银行账户」，「往来单位」改叫「摘要」 */
.fl-tbl th.fl-pick-h, .fl-tbl td.fl-pick-c{ width:34px; min-width:34px; padding-left:6px; padding-right:6px; text-align:center; }
.fl-tbl th.fl-pick-h input, .fl-tbl td.fl-pick-c input{ width:15px; height:15px; margin:0; vertical-align:middle; cursor:pointer; }
.fl-tbl tbody tr.picked td{ background:#f2f7ff; }
.fl-pickinfo{ margin-left:auto; font-size:12.5px; color:#1d4ed8; white-space:nowrap; display:none; }
.fl-pickinfo.on{ display:inline-block; }
.fl-bar .fl-sum{ margin-left:8px; }
.fl-party-c{ max-width:260px; overflow:hidden; text-overflow:ellipsis; }
.fl-chip.amber{ background:#fff4e0; color:#b06f00; }

/* 两个弹窗都比收付款登记宽：明细表 / 批量表放得下 */
.nx-modal-box.nx-blue.nx-pay.nx-flow{ width:min(1180px, 98vw); }
.nx-modal-box.nx-blue.nx-pay.nx-bulk{ width:min(1060px, 97vw); }
.fl-form .pf-row{ margin-bottom:8px; }
.fl-form .pf-row > label{ width:72px; }
.ff-hint{ font-size:11.5px; color:#8b95a7; white-space:nowrap; }

.ff-sub-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin:14px 0 8px; padding-top:10px; border-top:1px dashed #e6ebf2; }
.ff-sub-head b{ font-size:13px; color:#334155; }
.ff-sub-tip{ font-size:11.5px; color:#8b95a7; }
.ff-sub-acts{ margin-left:auto; display:flex; gap:8px; }
.ff-sub-acts .fbtn{ height:26px; padding:0 10px; font-size:12px; }

/* 凭证图片粘贴区（2026-10-28）：截图直接 Ctrl+V，不用先存成文件 */
.ff-paste{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin:0 0 8px; padding:9px 12px; border:1.5px dashed #cbd6e6; border-radius:8px;
  background:#fbfcfe; font-size:12.5px; color:#6b7a90; cursor:text;
  transition:border-color .16s, background .16s, box-shadow .16s; }
.ff-paste:hover{ border-color:#aabdd8; }
.ff-paste:focus{ outline:none; border-color:#93b4f0; background:#f7faff;
  box-shadow:0 0 0 3px rgba(47,111,237,.10); }
.ff-paste.is-on{ border-color:#2f6fed; background:#eef4ff; box-shadow:0 0 0 3px rgba(47,111,237,.14); }
.ff-paste b{ color:#334155; font-weight:600; }
.ff-paste-sub{ color:#98a3b4; font-size:11.5px; }
.ff-paste-k{ display:inline-flex; align-items:center; gap:3px; color:#93a2b6; font-size:11px; }
.ff-paste-k kbd{ padding:1px 6px; border:1px solid #d7dee9; border-bottom-width:2px;
  border-radius:4px; background:#fff; color:#4a5568; font-family:inherit; font-size:11px; }
.ff-paste-pick{ margin-left:auto; color:#2f6fed; font-size:12px; text-decoration:none; cursor:pointer; }
.ff-paste-pick:hover{ text-decoration:underline; }

.fl-subs{ border:1px solid var(--line); border-radius:8px; overflow:hidden; background:#fff; }
.ff-sub-tbl{ width:100%; border-collapse:separate; border-spacing:0; font-size:12.5px; }
.ff-sub-tbl th{ background:#f7f9fc; color:#6b7a90; font-weight:500; text-align:left;
  padding:6px 8px; border-bottom:1px solid #e6ebf2; white-space:nowrap; }
.ff-sub-tbl td{ padding:5px 8px; border-bottom:1px solid #f1f4f9; vertical-align:middle; }
.ff-sub-tbl tr:last-child td{ border-bottom:0; }
.ff-sub-tbl .c-no{ width:32px; color:#8b95a7; text-align:center; }
.ff-sub-tbl .c-img{ width:68px; }
.ff-sub-tbl .c-amt{ width:124px; }
/* 2026-10-28：明细表头拆成「收入金额 / 支出金额」两列，各填各的 */
.ff-sub-tbl .c-in, .ff-sub-tbl .c-out{ width:112px; }
.ff-sub-tbl .c-aud{ width:78px; }
.ff-sub-tbl .c-note{ min-width:130px; }
.ff-sub-tbl .c-del{ width:36px; text-align:center; }
.ff-sub-tbl input.ff-amt{ width:100%; height:26px; padding:0 8px; text-align:right;
  border:1px solid #d7dee9; border-radius:6px; font-size:12.5px; font-family:inherit;
  color:#1d4ed8; background:#fff; box-sizing:border-box; }
.ff-sub-tbl input.ff-amt.ff-out{ color:#c2410c; }
.ff-sub-tbl select.ff-sel{ width:100%; height:26px; padding:0 6px; border:1px solid #d7dee9;
  border-radius:6px; font-size:12.5px; font-family:inherit; background:#fff; color:var(--text); box-sizing:border-box; }
.ff-sub-tbl input.ff-amt:focus, .ff-sub-tbl select.ff-sel:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.10); }
/* 明细摘要（2026-10-28）：原来顶部那个「摘要」字段取消了，改成每条明细自己一个 */
.ff-sub-tbl .c-memo{ min-width:170px; }
.ff-sub-tbl input.ff-memo{ width:100%; height:26px; padding:0 8px; border:1px solid #d7dee9;
  border-radius:6px; font-size:12.5px; font-family:inherit; background:#fff; color:var(--text);
  box-sizing:border-box; }
.ff-sub-tbl input.ff-memo:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.10); }
/* 明细备注（2026-10-28）：跟着每条明细走 */
.ff-sub-tbl input.ff-note-i{ width:100%; height:26px; padding:0 8px; border:1px solid #d7dee9;
  border-radius:6px; font-size:12.5px; font-family:inherit; background:#fff; color:#6b7a90;
  box-sizing:border-box; }
.ff-sub-tbl input.ff-note-i:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.10); }
/* 顶部只剩「发生日期 / 付款方式」两格（收/支、总金额、是否审核、备注 2026-10-28 已删） */
.ff-top{ display:flex; gap:16px; flex-wrap:wrap; }
.ff-top .pf-row{ flex:1 1 240px; min-width:0; }
/* 收支明细列表：一笔多明细时，摘要列逐条列出 */
.fl-party-c .fl-memo-l{ display:block; line-height:1.5; white-space:normal; word-break:break-all; }
.fl-party-c .fl-memo-l i{ font-style:normal; color:#a6b1c2; font-size:10.5px; margin-right:4px; }
.fl-party-c .fl-memo-more{ display:block; font-size:11px; }
.ff-thumb{ position:relative; display:inline-block; width:44px; height:44px; border-radius:5px;
  overflow:hidden; border:1px solid var(--line); }
.ff-thumb img{ width:100%; height:100%; object-fit:cover; display:block; cursor:zoom-in; }
.ff-thumb-x{ position:absolute; top:0; right:0; width:15px; height:15px; line-height:14px;
  text-align:center; background:rgba(224,82,77,.92); color:#fff; font-size:11px;
  border-radius:0 0 0 5px; cursor:pointer; font-weight:400; }
.ff-noimg{ color:#c3cbd8; }
.ff-rowdel{ width:22px; height:22px; line-height:1; border:1px solid #e6d2d2; border-radius:5px;
  background:#fff; color:#c0392b; cursor:pointer; font-size:14px; padding:0; }
.ff-rowdel:hover{ background:#fdeaea; }
.ff-sub-sum{ padding:6px 10px; font-size:12px; color:#5b6677; background:#fbfcfe; border-top:1px solid #f1f4f9; }
.ff-sub-sum b{ color:#b45309; font-size:13px; font-variant-numeric:tabular-nums; }

/* 不在表里再套一层滚动：表格自带 overflow 滚动条 + 表头 sticky 会多出一条竖灰条，
   行多时交给 .nx-modal-body 滚（它本来就是 overflow:auto） */
.fl-bulk-wrap{ border:1px solid var(--line); border-radius:8px; overflow:hidden; }
/* table-layout:fixed：列宽严格按 c-* 走，不会被内容顶宽（顶宽 1px 就会横竖两条滚动条） */
.fl-bulk-tbl{ width:100%; table-layout:fixed; border-collapse:separate; border-spacing:0;
  font-size:12.5px; white-space:nowrap; }
.fl-bulk-tbl th{ position:sticky; top:0; z-index:1; background:#f7f9fc; color:#6b7a90;
  font-weight:500; text-align:left; padding:6px 8px; border-bottom:1px solid #e6ebf2; }
.fl-bulk-tbl td{ padding:4px 8px; border-bottom:1px solid #f1f4f9; }
/* 列宽合计 ≈ 830 + 每格左右 padding 16×9 = 974，比弹窗可视宽（1060-40）小，
   否则宽出 1px 就会同时冒出横竖两条滚动条 */
.fl-bulk-tbl .c-no{ width:28px; text-align:center; color:#8b95a7; }
.fl-bulk-tbl .c-d{ width:78px; }
.fl-bulk-tbl .c-t{ width:78px; }
.fl-bulk-tbl .c-party{ width:168px; }
.fl-bulk-tbl .c-amt{ width:96px; }
.fl-bulk-tbl .c-l1{ width:108px; }
.fl-bulk-tbl .c-l2{ width:100px; }
.fl-bulk-tbl .c-st{ width:106px; }
.fl-bulk-tbl .c-a{ width:68px; }
.fl-bulk-tbl input.bk-in, .fl-bulk-tbl select.bk-in{ width:100%; height:26px; padding:0 6px;
  border:1px solid #d7dee9; border-radius:6px; font-size:12px; font-family:inherit;
  background:#fff; color:var(--text); box-sizing:border-box; }
.fl-bulk-tbl input.bk-in:focus, .fl-bulk-tbl select.bk-in:focus{ outline:none; border-color:#93b4f0; box-shadow:0 0 0 2px rgba(47,111,237,.10); }
.fl-bulk-tbl input.bk-amt{ text-align:right; color:#1d4ed8; }
.fl-bulk-bar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:10px;
  padding:8px 10px; background:#f7faff; border:1px solid #dbe7fb; border-radius:8px; }
.fl-bulk-bar .bk-t{ font-size:12.5px; color:#3b5477; }
.fl-bulk-bar select{ height:26px; padding:0 6px; border:1px solid #d7dee9; border-radius:6px;
  font-size:12px; background:#fff; }
.fl-bulk-bar .fbtn{ height:26px; padding:0 10px; font-size:12px; }
.fl-bulk-bar .ff-hint{ margin-left:auto; }
.fl-bulk-bar .ff-hint b{ color:#b45309; font-size:13px; }

/* ================= 财务 › 发票管理（2026-10-27） =================
   已开发票 / 已收发票：明细只读，只有「备注」列是可写的输入框。
   表格 15 列放不下就横向滚动（.invm-scroll），表头由 .fl-tbl 自带 sticky。 */
.fl-row .fl-w180{ width:190px; }
.fl-row .fl-w200{ width:210px; }
.invm-tabs{ margin:0 0 8px; }
.invm-bar .invm-sum{ margin-left:auto; font-size:12.5px; color:#5b6677;
  display:flex; align-items:center; gap:6px; flex-wrap:wrap; white-space:nowrap; }
.invm-sumi{ font-style:normal; background:#eef4ff; color:#2b6cd4; border-radius:5px;
  padding:1px 6px; font-size:11.5px; }
.invm-sum b{ color:#1f2a3a; font-variant-numeric:tabular-nums; }
.invm-sum .invm-m{ color:#0f5f3f; }
.invm-sum .invm-big{ font-size:14px; }
.invm-card{ margin-bottom:10px; }
.invm-scroll{ overflow:auto; max-height:calc(100vh - 300px); }
.invm-tbl{ table-layout:auto; }
.invm-tbl th, .invm-tbl td{ white-space:nowrap; }
.invm-tbl td.invm-c-partner, .invm-tbl td.invm-c-item{
  max-width:180px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.invm-c-no{ width:44px; text-align:center; color:#8b96a8; }
.invm-tbl td.invm-c-note{ padding:2px 4px; }
.invm-note{ width:100%; min-width:104px; height:26px; border:1px solid transparent;
  border-radius:5px; padding:0 6px; font-size:12.5px; color:#334155; background:transparent;
  outline:none; }
.invm-note::placeholder{ color:#c2cad8; }
.invm-note:hover{ background:#f5f7fa; }
.invm-note:focus{ background:#fff; border-color:#7aa7ef; box-shadow:0 0 0 2px rgba(43,108,212,.12); }
.invm-alert{ font-size:13.5px; line-height:1.8; color:#334155; max-height:52vh; overflow:auto; }
.invm-alert p{ margin:0 0 6px; }
.invm-skip{ font-size:13px; line-height:1.7; color:#334155; }
.invm-skip ul{ margin:8px 0 0 18px; padding:0; }
.invm-skip li{ margin:2px 0; color:#8a5a00; }
.invm-raw{ color:#98a3b4; font-size:12px; }
.invm-bills{ font-size:13px; color:#334155; }
.invm-bills p{ margin:0 0 8px; color:#5b6677; }
.invm-bill-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; }
.invm-bill-tbl th{ background:#f5f7fa; color:#4b5563; font-weight:600; padding:6px 8px;
  border:1px solid #eef1f6; text-align:left; white-space:nowrap; }
.invm-bill-tbl td{ padding:5px 8px; border:1px solid #eef1f6; white-space:nowrap; }
.invm-bill-tbl th.num, .invm-bill-tbl td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.invm-bill-tbl .invm-bill-f{ max-width:260px; overflow:hidden; text-overflow:ellipsis; }
.invm-bills-modal{ width:min(880px,96vw); }

/* ================= 采购单「发货登记」+ 缺货时间轴「物流周转中」（2026-10-27） =================
   时间轴那格：没登记时是灰的「供应商还没发货」，登记后变绿并显示 公司 · 单号；
   有照片时整格可点，点开看物流单。 */
.ugv-tl-i.lg-on .ugv-dot{ background:#2bb673; }
.ugv-tl-i.lg-img{ cursor:pointer; border-radius:6px; margin-left:-4px; padding-left:4px; }
.ugv-tl-i.lg-img:hover{ background:#f4f8ff; }
.ugv-tl-x{ font-size:11px; color:#2b6cd4; margin-top:2px; }
.ugv-tl-x::before{ content:"🖼 "; }

/* 发货登记弹窗 */
.nx-modal-box.nx-logi{ width:min(720px,96vw); }
.lg-form{ font-size:13px; color:#334155; }
.lg-tip{ background:#f6f9ff; border:1px solid #e3ecfb; color:#41618f; border-radius:8px;
  padding:8px 10px; font-size:12.5px; line-height:1.75; margin-bottom:10px; }
.lg-tip b{ color:#1f4d8f; }
.lg-f{ display:flex; align-items:center; gap:0.8em; margin-bottom:8px; }
.lg-f > label{ flex:0 0 5.2em; text-align:right; font-size:12.5px; color:#5b6677; }
.lg-f .fin-in{ flex:1 1 auto; min-width:0; height:28px; }
.lg-f-top{ align-items:flex-start; }
.lg-f-top > label{ padding-top:5px; }
.lg-ta-wrap{ flex:1 1 auto; display:flex; gap:8px; align-items:flex-start; min-width:0; }
.lg-ta-wrap textarea{ flex:1 1 auto; min-width:0; height:auto; min-height:66px;
  padding:5px 8px; line-height:1.6; resize:vertical; }
.lg-ta-wrap .fbtn{ flex:0 0 auto; margin-top:2px; }
.lg-ups{ border:1px solid #e7edf6; border-radius:8px; padding:8px 10px; margin-top:4px; }
.lg-ups-hd{ display:flex; align-items:center; gap:8px; font-size:12.5px; color:#5b6677;
  flex-wrap:wrap; }
.lg-ups-hd b{ color:#334155; }
.lg-ups-hd span{ color:#93a0b4; font-size:12px; }
.lg-ups-hd .fbtn{ margin-left:auto; }
.lg-ups-hd .fbtn + .fbtn{ margin-left:0; }
.lg-thumbs{ display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.lg-thumb{ position:relative; width:88px; height:88px; border:1px solid #e3e9f3;
  border-radius:6px; overflow:hidden; background:#fafbfd; }
.lg-thumb img{ width:100%; height:100%; object-fit:cover; cursor:zoom-in; }
.lg-thumb-x{ position:absolute; top:2px; right:2px; width:18px; height:18px; line-height:16px;
  border:0; border-radius:50%; background:rgba(190,40,40,.9); color:#fff; font-size:13px;
  cursor:pointer; padding:0; }
.lg-noimg{ font-size:12px; color:#a7b2c4; padding:6px 2px; }

/* 物流单查看 */
.nx-modal-box.nx-lg-view{ width:min(760px,96vw); }
.lg-view{ font-size:13px; color:#334155; }
.lg-view-hd{ display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding-bottom:8px; margin-bottom:8px; border-bottom:1px solid #eef1f6; }
.lg-view-hd span{ color:#8a97ab; font-size:12px; }
.lg-imgs{ display:flex; flex-wrap:wrap; gap:10px; max-height:66vh; overflow:auto; }
.lg-img{ width:220px; border:1px solid #e3e9f3; border-radius:8px; cursor:zoom-in;
  background:#fafbfd; }

/* ================= 库存查询：首列勾选框（2026-10-27） =================
   勾选集合可跨页累积；行底色沿用 .inv-row[data-sel="1"]。
   列宽靠 .inv-pk 的 padding 收窄，别让它把「备件编码」挤出去。 */
.inv-pickbar{ display:inline-flex; align-items:center; gap:6px; margin-right:4px;
  padding:0 10px 0 2px; border-right:1px solid #e6ebf3; }
.inv-pickbar b{ font-size:12.5px; font-weight:600; color:#8a97ab; }
.inv-pickbar b.on{ color:#2b6cd4; }
.inv-pickbar .df-link{ font-size:12px; }
td.ops-cell .inv-pk{ display:inline-flex; align-items:center; justify-content:center;
  padding:2px 4px; cursor:pointer; }
td.ops-cell .inv-pk input{ width:14px; height:14px; cursor:pointer; margin:0; }
th.tbl-pick-h{ width:36px; text-align:center; }
th.tbl-pick-h input{ width:14px; height:14px; cursor:pointer; vertical-align:middle; }

/* ================= 开单页：备件图片列（2026-10-27） =================
   缩略图固定 46×46，表格行高不会被图片撑开太多；
   没图时是一个虚线小方块，点一下就能传。 */
td.ps-thumb-c{ width:54px; text-align:center; padding:2px 2px !important; }
/* 🔴 2026-10-30 用户标注（全系统对齐）：表头「图片」两个字要和下面的缩略图同一列、
   同一个宽度、同一条中线。以前 th 是 width:46px、padding-left 12px（首列规则）、
   左对齐，而 td 是 54px、2px、居中 —— 表头文字偏在左边，看着就像跟下一列串了。 */
thead th.pimg-h, th.pimg-h{
  width:54px; min-width:54px; text-align:center !important;
  padding-left:2px !important; padding-right:2px !important;
}
.ps-thumb{ width:46px; height:46px; object-fit:cover; border-radius:5px;
  border:1px solid #e3e9f3; background:#fafbfd; cursor:zoom-in; display:block; margin:0 auto; }
.ps-thumb:hover{ border-color:#8fb3ea; box-shadow:0 0 0 2px rgba(43,108,212,.14); }
.ps-thumb-empty{ display:inline-flex; align-items:center; justify-content:center;
  width:46px; height:46px; border:1px dashed #cfd8e6; border-radius:5px;
  color:#b3bdcd; font-size:17px; cursor:pointer; background:#fbfcfe; }
.ps-thumb-empty:hover{ border-color:#7aa7ef; color:#2b6cd4; background:#f4f8ff; }

/* 拖图片到格子上时的高亮（2026-10-27 标注第 1 条：可以拖动或粘贴加图） */
.ps-thumb-empty.drop-hot{ border-color:#2b6cd4; color:#2b6cd4; background:#eaf2ff;
  box-shadow:0 0 0 3px rgba(43,108,212,.18); }
.ps-thumb.drop-hot{ border-color:#2b6cd4; box-shadow:0 0 0 3px rgba(43,108,212,.18); }

/* 粘贴 / 拖动上传弹窗（备件图片） */
.pimg-drop{ font-size:13px; color:#334155; }
.pimg-drop-hd{ display:flex; align-items:baseline; gap:10px; padding-bottom:8px;
  margin-bottom:10px; border-bottom:1px solid #eef1f6; flex-wrap:wrap; }
.pimg-drop-hd b{ font-size:14px; }
.pimg-drop-hd span{ color:#7b8798; }
.pimg-drop-zone{ border:2px dashed #cfd8e6; border-radius:12px; background:#fafcff;
  padding:26px 16px; text-align:center; cursor:pointer; transition:.15s; outline:none; }
.pimg-drop-zone:hover,.pimg-drop-zone:focus{ border-color:#7aa7ef; background:#f4f8ff; }
.pimg-drop-zone.over{ border-color:#2b6cd4; background:#eaf2ff;
  box-shadow:0 0 0 4px rgba(43,108,212,.12); }
.pimg-drop-ic{ display:block; margin:0 auto 10px; }
.pimg-drop-t{ font-size:14px; color:#40506b; margin-bottom:6px; }
.pimg-drop-t b{ color:#1f6feb; }
.pimg-drop-s{ font-size:12px; color:#93a0b4; }
.pimg-drop-s u{ color:#2b6cd4; text-decoration:underline; cursor:pointer; }
.pimg-drop-tip{ margin-top:10px; font-size:12px; color:#93a0b4; line-height:1.7; }

/* 大图弹窗 */
.nx-modal-box.nx-pimg{ width:min(720px,96vw); }
.pimg-view{ font-size:13px; color:#334155; }
.pimg-view-hd{ display:flex; align-items:baseline; gap:10px; padding-bottom:8px;
  margin-bottom:8px; border-bottom:1px solid #eef1f6; flex-wrap:wrap; }
.pimg-view-hd b{ font-size:14px; }
.pimg-view-hd span{ color:#7b8798; }
.pimg-view-box{ display:flex; justify-content:center; background:#f7f9fc;
  border:1px solid #eef1f6; border-radius:8px; padding:10px; max-height:60vh; overflow:auto; }
.pimg-view-box img{ max-width:100%; max-height:56vh; object-fit:contain;
  border-radius:6px; cursor:zoom-in; background:#fff; }
.pimg-view-tip{ margin-top:8px; font-size:12px; color:#93a0b4; line-height:1.7; }

/* ===== 现金流 · 批量标记 + 备注（v20261027g） =====
   工具栏那排「标记 N 条：对公往来 / 对私往来 / 不对账 / 重复入账 / 清除」
   一个都没勾时整排压暗不可点，勾了才亮 —— 避免误以为点了没用。 */
.cf-mk-bar{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:8px;
  background:#f4f6fa;color:#8b93a3;font-size:12px;opacity:.55;pointer-events:none;}
.cf-mk-bar.on{opacity:1;pointer-events:auto;background:#eef4ff;color:#40506b;}
.cf-mk-bar b{color:#1f6feb;font-weight:700;margin:0 2px;}
.cf-mk-btn{padding:2px 8px !important;font-size:12px !important;height:24px;line-height:1 !important;}
.cf-mk-btn.cf-mk-clr{color:#8b93a3;border-style:dashed;}
/* 标记小胶囊：4 个档次用不同底色区分 */
.cf-mk{display:inline-block;padding:1px 7px;border-radius:9px;font-size:12px;white-space:nowrap;
  background:#eef1f6;color:#5b6577;}
.cf-mk-0{background:#e6f0ff;color:#1f5fb8;}
.cf-mk-1{background:#eaf7ee;color:#2c7d45;}
.cf-mk-2{background:#fdeeee;color:#b03a3a;}
.cf-mk-3{background:#f3eefb;color:#6b46a8;}
.cf-mk-none{color:#c3c9d4;}
/* 备注格子：没字的时候像个虚线占位，鼠标进去才明显 */
.cf-note{width:100%;min-width:120px;border:1px solid transparent;background:transparent;
  padding:2px 4px;border-radius:4px;font-size:12px;color:inherit;}
.cf-note:hover{border-color:#d8dee9;background:#fff;}
.cf-note:focus{outline:none;border-color:#1f6feb;background:#fff;box-shadow:0 0 0 2px rgba(31,111,235,.12);}
.cf-note::placeholder{color:#c3c9d4;}

/* ---------- 开单查询「搜不到 → 是否新增」提示卡（2026-10-27 标注） ---------- */
.od-newtip{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;margin:2px 0 8px;
  background:#fffdf5;border:1px dashed #e8cf9a;border-radius:8px;}
.od-newtip-ic{flex:0 0 auto;width:26px;height:26px;border-radius:50%;background:#fff3d6;color:#b4791a;
  font-weight:700;font-size:16px;line-height:26px;text-align:center;}
.od-newtip-r{flex:1 1 auto;min-width:0;}
.od-newtip-t{font-weight:700;color:#8a5a00;margin-bottom:3px;word-break:break-all;}
.od-newtip-s{color:#8a6a33;font-size:12.5px;line-height:1.65;}
.od-newtip-acts{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap;}
.od-newtip-warn{min-height:18px;margin-top:6px;font-size:12.5px;color:#c0392b;}

/* ---------- 开单页：查询结果行 / 明细行的「修改 · 删除」（2026-10-29 用户标注） ----------
   结果表最后一列原来只有一个「查看」，现在 查看 + 修改 + 删除 三个并排；
   明细表操作列原来是「删」，现在 修改 + 删除。两处都收窄内边距，否则一格放不下。 */
.ps-tbl td.ps-acts{ white-space:nowrap; }
.ps-tbl td.ps-acts .btn{ height:26px; padding:0 8px; font-size:12px; margin-right:4px; }
.ps-tbl td.ps-acts .btn:last-child{ margin-right:0; }
.order-tbl td.od-rowacts{ white-space:nowrap; padding-left:4px; padding-right:4px; }
.order-tbl td.od-rowacts .btn{ height:26px; padding:0 7px; font-size:12px; margin-right:4px; }
.order-tbl td.od-rowacts .btn:last-child{ margin-right:0; }

/* ---------- 呆滞品「一键转发」：清单长图（2026-10-29 用户标注） ----------
   点「一键转发」把整张表画成一张 PNG，弹窗里看图 —— 微信 / 钉钉长按就转发。 */
.ss-share-box{ display:flex; justify-content:center; }
.ss-share-box img{ max-width:100%; height:auto; border:1px solid #e6ebf2; border-radius:10px;
  box-shadow:0 2px 12px rgba(15,23,42,.07); background:#fff; }
.ss-share-tip{ margin-top:10px; font-size:12px; color:#8a97ab; line-height:1.75; }

/* ---------- 单据列表：勾选后才能预览 / 打印（2026-10-29 用户标注） ---------- */
.df-picked{ flex:0 0 auto; font-size:12px; color:#94a3b8; padding-left:2px; white-space:nowrap; }
.df-picked b{ color:#2f6fed; font-variant-numeric:tabular-nums; }
.df-picked.on{ color:#3b5477; }

/* ---------- 开单查询结果 · 「单据件」（2026-10-29 用户报障 B018338） ----------
   主数据里没有、只在本系统单据里用过的备件：列出来但标灰底 + 小标签，
   免得业务员把它当成正常档案；行尾只给「建档」。 */
.ps-doctag{ display:inline-block; margin-left:6px; padding:0 5px; height:17px; line-height:17px;
  font-size:11px; border-radius:4px; background:#fff3e0; color:#b45309; border:1px solid #f6d8ae;
  vertical-align:1px; }
.ps-tbl tbody tr.ps-docrow td{ background:#fffbf5; }
.ps-tbl tbody tr.ps-docrow:hover td{ background:#fff6e9; }
.ps-dochie{ display:inline-block; margin-top:4px; color:#b45309; line-height:1.7; }
.ps-dochie b{ color:#8a4b06; }

/* ---------------- 行内「操作」下拉（2026-10-31 用户标注） ----------------
   开单查询结果行原来摆「查看 / 修改 / 删除」三个按钮，太挤；收成一个「操作」下拉，
   里面加「新增」（照该条资料复制一条新备件）。菜单浮在 body 上，避免被表格滚动容器裁切。 */
.rm-caret{ display:inline-block; width:0; height:0; margin-left:5px; vertical-align:middle;
  border-left:4px solid transparent; border-right:4px solid transparent;
  border-top:5px solid currentColor; opacity:.6; }
.rowmenu-btn{ display:inline-flex; align-items:center; padding:3px 9px; white-space:nowrap; }
.rowmenu-pop{ position:fixed; z-index:99990; min-width:100px; padding:4px; background:#fff;
  border:1px solid var(--line); border-radius:9px; box-shadow:0 12px 30px rgba(20,40,80,.18); }
.rowmenu-pop button{ display:block; width:100%; text-align:left; padding:7px 12px; border:0;
  background:none; border-radius:6px; font-size:13px; font-family:inherit;
  color:var(--text); cursor:pointer; }
.rowmenu-pop button:hover{ background:#eef4ff; color:#1d4ed8; }
.rowmenu-pop button.rm-del:hover{ background:#fdeaea; color:#c02626; }
/* 复制新增时的提示条：黄色，强调「编码必须改」 */
.pa-tip.pa-copy{ background:#fff8e6; border-color:#f0d79a; color:#8a5b00; }
.pa-tip.pa-copy b{ color:#b45309; }
/* 拼音命中的下拉项（不知道对上哪几个字，整串标蓝） */
.ss-list .ac-item b.ss-py, .ac-list .ac-item b.ss-py{ color:#1d4ed8; }
