:root{
  --bg:#f4f8fd; --panel:#fff; --line:#e2ecf7; --line-2:#c9dcef;
  --text:#16232f; --muted:#5d7186; --hint:#94a7ba;
  --primary:#2a7fd4; --primary-d:#1b5fa0; --primary-l:#e9f4ff;
  --ok:#1f8a5c; --ok-l:#e8f8f0; --warn:#9a6a12; --warn-l:#fdf6e6;
  --danger:#c23a3a; --danger-l:#fdeeee; --purple:#5b57c9; --purple-l:#eeedfd;
  --r:10px; --r-lg:14px;
  --shadow:0 1px 2px rgba(26,90,160,.05),0 6px 16px rgba(26,90,160,.07);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:13px;color:var(--text);background:var(--bg);line-height:1.6;-webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#d5e3f0;border-radius:4px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:212px 1fr;height:100vh;overflow:hidden}
.sidebar{background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}
.brand{padding:15px 16px 13px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#f7fbff,#fff)}
.brand-mark{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#2a7fd4,#5cb0ef);display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.brand-mark svg{width:17px;height:17px}
.brand-name{color:var(--text);font-size:13.5px;font-weight:500;letter-spacing:.2px;line-height:1.25}
.brand-sub{color:var(--hint);font-size:11px;line-height:1.3}
.nav{flex:1;overflow-y:auto;padding:10px 8px 18px}
.nav::-webkit-scrollbar-thumb{background:#dbe8f5}
.nav-title{color:#a3b4c6;font-size:11px;padding:12px 10px 5px;letter-spacing:.6px;cursor:pointer;user-select:none;display:flex;align-items:center;gap:4px}
.nav-title:hover{color:var(--primary-d)}
.nav-fold-arrow{font-size:9px;opacity:.75;width:10px;display:inline-block}
.nav-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:8px;color:#4f6377;font-size:13px;cursor:pointer;transition:background .12s,color .12s}
.nav-item:hover{background:#f1f8ff;color:var(--primary-d)}
.nav-item.active{background:var(--primary-l);color:var(--primary-d);font-weight:500;box-shadow:inset 2.5px 0 0 var(--primary)}
.nav-item .ic{width:15px;height:15px;flex:0 0 auto;opacity:.9}
.nav-item .dot{margin-left:auto;background:#e24b4a;color:#fff;font-size:10.5px;line-height:1;padding:2px 5px;border-radius:8px;min-width:16px;text-align:center}
.nav-item.active .dot{background:var(--primary);color:#fff}
.sidebar-foot{border-top:1px solid var(--line);padding:10px 14px;color:var(--hint);font-size:11.5px;display:flex;align-items:center;justify-content:space-between}
.sidebar-foot button{background:none;border:0;color:var(--primary);font-size:11.5px;cursor:pointer;text-decoration:underline}
.main{display:flex;flex-direction:column;overflow:hidden;min-width:0}
.topbar{height:52px;flex:0 0 52px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 20px;gap:14px}
.topbar h1{font-size:15px;font-weight:500}
.topbar .crumb{color:var(--hint);font-size:12px}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--primary-l);color:var(--primary-d);display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:500}
.who{font-size:12px;color:var(--muted);white-space:nowrap}
.ro-switch{display:flex;align-items:center;gap:6px;border:1px solid var(--line-2);border-radius:8px;padding:4px 8px;background:#f8fbff;color:var(--primary-d)}
.ro-switch select{border:0;outline:none;background:transparent;font-size:12.5px;cursor:pointer}
.ro-tag{display:inline-block;margin-left:6px;font-size:10px;line-height:15px;padding:0 5px;border-radius:8px;background:#eef5fd;color:#7c93a8;vertical-align:1px}
.nav-item.active .ro-tag{background:rgba(42,127,212,.14);color:var(--primary-d)}
.ro-banner{display:flex;align-items:center;gap:8px;background:var(--warn-l);color:var(--warn);border:1px solid #f2e2c2;border-radius:12px;padding:10px 14px;font-size:12.5px;margin-bottom:14px}
.ro-banner b{font-weight:600}
.content{flex:1;overflow-y:auto;padding:18px 20px 40px}

/* ---------- generic ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);margin-bottom:16px;overflow:hidden}
.card-hd{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
/* 2026-11-05 版式修正：卡片头里 h3 / 说明 / 右侧筛选是一行 flex，屏幕窄或筛选控件多时
   h3 会被压到最小宽度，出现「车 辆 台 账」竖排。这里锁死标题不缩放、不换行，
   说明文字占据剩余宽度，右侧控件在放不下时整体折到下一行。 */
.card-hd h3{font-size:13.5px;font-weight:500;flex:0 0 auto;white-space:nowrap}
.card-hd .sub{color:var(--hint);font-size:12px;flex:1 1 220px;min-width:0}
.card-hd .right{margin-left:auto;display:flex;align-items:center;gap:8px;flex:0 0 auto;flex-wrap:wrap}
.card-bd{padding:16px}
.card-bd.flush{padding:0}
.row{display:flex;gap:16px;align-items:flex-start}
.col{flex:1;min-width:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}

.btn{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border-radius:8px;border:1px solid var(--line-2);background:var(--panel);cursor:pointer;font-size:12.5px;transition:all .12s;white-space:nowrap}
.btn:hover{border-color:var(--primary);color:var(--primary)}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-d);border-color:var(--primary-d);color:#fff}
.btn-sm{padding:3.5px 9px;font-size:12px;border-radius:7px}
.btn-ghost{border-color:transparent;background:transparent;color:var(--primary);padding:3.5px 6px}
.btn-ghost:hover{background:var(--primary-l)}
.btn-danger:hover{border-color:var(--danger);color:var(--danger)}
.btn:disabled{opacity:.45;cursor:not-allowed}

.badge{display:inline-flex;align-items:center;gap:4px;padding:1.5px 8px;border-radius:20px;font-size:11.5px;line-height:1.7;white-space:nowrap}
.b-gray{background:#eef3f9;color:#5d7186}
.b-blue{background:var(--primary-l);color:var(--primary-d)}
.b-green{background:var(--ok-l);color:var(--ok)}
.b-amber{background:var(--warn-l);color:var(--warn)}
.b-red{background:var(--danger-l);color:var(--danger)}
.b-purple{background:var(--purple-l);color:var(--purple)}
.dot-i{width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}

table{width:100%;border-collapse:collapse;font-size:12.5px}
thead th{background:#f4f9fe;color:var(--muted);font-weight:500;text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:12px;vertical-align:middle}
tbody td{padding:9px 12px;border-bottom:1px solid #eef3f9;vertical-align:middle}
tbody tr:hover{background:#f7fbff}
tbody tr:last-child td{border-bottom:0}
/* 全站表格统一极浅竖线（与 .ff-grid 同款浅灰）：订单 / 财务对账 / 明细 / 台账逐列一致可读 */
.tbl-scroll table th,
.tbl-scroll table td{border-right:1px solid #eef2fa}
.t-r{text-align:right}
.t-c{text-align:center}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;letter-spacing:.2px}
.link{color:var(--primary);cursor:pointer}
.link:hover{text-decoration:underline}
.muted{color:var(--muted)}
.hint{color:var(--hint)}
.strong{font-weight:500}

/* 在途跟踪 · 卡片 */
.tk-card{padding:0;border-bottom:1px solid #eef3f9}
.tk-card:last-child{border-bottom:0}
/* 卡片内部分区：柜号与车组 / 进度与动态 / 复制信息，区与区之间用细线 + 分区标签切开 */
.tk-sec{padding:12px 14px}
.tk-sec+.tk-sec{border-top:1px solid #eef3f9;background:#fbfdff}
.tk-sec2{background:#fbfdff}
.tk-sec-t{font-size:11px;font-weight:600;color:var(--hint);letter-spacing:.04em;text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.tk-sec-t::before{content:"";width:3px;height:11px;border-radius:2px;background:var(--primary);flex:0 0 3px}
.tk-sec3 .tk-sec-t{margin-bottom:6px}
.tk-hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:3px}
.tk-sub{color:var(--muted);font-size:12px;margin-bottom:0;display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}

/* 在途跟踪 · 单行动态节点线 */
.tk-line{display:flex;align-items:center;gap:0;margin-top:9px;overflow:hidden;white-space:nowrap}
.tk-n{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;font-size:11.5px;color:var(--hint);line-height:1.6}
.tk-n i{width:6px;height:6px;border-radius:50%;background:#e2ecf6;flex:0 0 6px}
.tk-n em{font-style:normal;font-size:11px;color:var(--hint);font-variant-numeric:tabular-nums}
.tk-n.done{color:var(--muted)}
.tk-n.done i{background:var(--primary)}
.tk-n.cur{color:var(--primary);font-weight:500}
.tk-n.cur i{background:#fff;border:1.5px solid var(--primary);box-shadow:0 0 0 2px rgba(42,127,212,.14)}
.tk-n.cur em{color:var(--primary)}
.tk-arw{flex:0 0 auto;color:#ccd9e6;font-size:11px;margin:0 7px}
.tk-ph{flex:0 0 auto;font-size:10px;line-height:1.35;padding:0 5px;border-radius:5px;background:var(--primary-l);color:var(--primary-d)}

/* 在途跟踪 · 快捷复制（固定单行，字段多时横向滚动） */
.tk-copy{display:flex;align-items:center;gap:5px;flex-wrap:nowrap;margin-top:2px;padding-top:2px}
.tk-tip{font-size:11.5px;color:var(--hint);margin-right:2px}
.tk-scroll{display:flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;padding:2px 14px 2px 0;scrollbar-width:thin;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 16px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 16px),transparent)}
.tk-scroll::-webkit-scrollbar{height:4px}
.tk-scroll::-webkit-scrollbar-track{background:transparent}
.tk-scroll::-webkit-scrollbar-thumb{background:#e2ecf6;border-radius:2px}
.tk-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 6px;border:1px solid var(--line-2);border-radius:7px;background:#fff;cursor:pointer;font-size:12px;color:var(--text);transition:all .12s;line-height:1.4;flex:0 0 auto}
.tk-chip:hover{border-color:var(--primary);background:var(--primary-l);color:var(--primary-d)}
.tk-chip:active{transform:translateY(1px)}
.tk-k{color:var(--muted);font-size:10.5px;white-space:nowrap}
.tk-v{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;white-space:nowrap}
.tk-actions{margin-left:auto;display:flex;align-items:center;gap:4px}
.tk-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.tk-pills{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.tk-pill{padding:4px 11px;border:1px solid var(--line-2);border-radius:999px;background:#fff;cursor:pointer;font-size:12px;color:var(--muted);transition:all .12s;white-space:nowrap}
.tk-pill:hover{border-color:var(--primary);color:var(--primary)}
.tk-pill.on{background:var(--primary);border-color:var(--primary);color:#fff}
.tk-tools{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tk-kw{width:230px}
.tk-cust{width:140px}
@media(max-width:760px){.tk-kw{width:100%}.tk-tools{margin-left:0;width:100%}}

/* 在途跟踪 · 卡片分享按钮 */
.tk-share{margin-left:auto;padding:2.5px 9px;border:1px solid var(--line-2);border-radius:6px;background:#fff;cursor:pointer;font-size:11.5px;color:var(--primary);transition:all .12s}
.tk-share:hover{background:var(--primary-l);border-color:var(--primary)}

/* 复制项配置弹窗 */
.cc-list{display:flex;flex-direction:column;gap:2px;max-height:46vh;overflow:auto}
.cc-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;border-radius:8px;background:#f4f9fe}
.cc-row:nth-child(odd){background:#f8fbff}
.cc-row[draggable="true"]{cursor:grab}
.cc-row.dragging{opacity:.45;outline:2px dashed var(--primary);background:var(--primary-l)}
.cc-grip{width:16px;text-align:center;color:var(--hint);font-size:14px;cursor:grab;user-select:none;flex:0 0 16px}
.cc-opt{margin-top:10px;padding:8px 10px;border-radius:8px;background:#eff7ff}
.cc-chk{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}
.cc-chk input{width:15px;height:15px;accent-color:var(--primary)}
.cc-seq{display:flex;align-items:center;gap:6px}
.cc-no{font-size:11px;color:var(--muted);min-width:14px;text-align:center;font-variant-numeric:tabular-nums}
.cc-mv{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line-2);border-radius:6px;background:#fff;cursor:pointer;font-size:13px;color:var(--primary);line-height:1}
.cc-mv:hover:not(:disabled){background:var(--primary-l)}
.cc-mv:disabled{opacity:.4;cursor:not-allowed}
.cc-tip{margin-top:10px;font-size:12px;color:var(--hint);line-height:1.7}

/* 分享说明 */
.sh-tip{margin-top:12px;font-size:12px;color:var(--hint);line-height:1.8;background:#f4f9fe;border-radius:8px;padding:9px 11px}
.sh-tip b{color:var(--muted)}
/* 在途跟踪 · 每票复制按钮 */
.tk-act{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:500}
.tk-act:hover{background:var(--primary-d);border-color:var(--primary-d);color:#fff}
.tk-act2{background:#fff;border-color:var(--primary);color:var(--primary-d);font-weight:500}
.tk-act2:hover{background:var(--primary-l)}

/* 调度台 · 从订单管理带入的柜高亮 */
#dTable tr.pk-in td{background:var(--primary-l)}

/* 工厂库 · 已关联客户标签 */
.fc-tag{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border:1px solid var(--line-2);border-radius:14px;background:#fff;font-size:12px;line-height:1.4}
.fc-tag .fc-x{border:none;background:none;cursor:pointer;color:var(--muted);font-size:11px;padding:0 1px;line-height:1}
.fc-tag .fc-x:hover{color:var(--danger)}

/* 在途跟踪 · 日期筛选 */
.tk-toolbar2{gap:9px;margin-top:-2px}
.tk-date{width:142px}
.tk-done{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;white-space:nowrap}
.tk-done input{width:14px;height:14px;accent-color:var(--primary)}
.tk-more{margin:0 0 8px;padding:7px 10px;border-radius:8px;background:#fff8e8;border:1px solid #f3e2bd;color:#8a6116;font-size:12px;line-height:1.6}
.tk-more b{color:#6d4c0f}
.nowrap{white-space:nowrap}

/* kpi */
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
/* 结算中心 KPI 卡（10-19）：随检索联动 6 张，窄屏自动折行；compact = 紧凑卡（一行标题+数值，副信息挂 foot） */
.kpi-grid.kpi-6{grid-template-columns:repeat(6,1fr);gap:10px}
/* 5 张 KPI 一行排开（车辆管理、挂靠核算等）：默认 4 列会让第 5 张孤零零掉到第二行 */
.kpi-grid.kpi-5{grid-template-columns:repeat(5,1fr);gap:12px}
@media (max-width:1360px){.kpi-grid.kpi-5{grid-template-columns:repeat(3,1fr)}}
@media (max-width:1000px){.kpi-grid.kpi-5{grid-template-columns:repeat(2,1fr)}}
.kpi-grid.kpi-6 .kpi{padding:10px 12px}
.kpi-grid.kpi-6 .kpi-value{font-size:19px;margin-top:1px}
.kpi-grid.kpi-6 .kpi-label{font-size:11.5px}
.kpi-grid.kpi-6 .kpi-foot{font-size:11px}
.kpi-grid.kpi-6 .kpi-accent{top:12px;bottom:12px}
@media (max-width:1440px){.kpi-grid.kpi-6{grid-template-columns:repeat(3,1fr)}}
@media (max-width:820px){.kpi-grid.kpi-6{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.kpi-grid.kpi-6{grid-template-columns:1fr}}
/* 财务应收/应付管理：KPI 卡强制单行（不再因卡多或窄屏换行），卡少自动撑满、卡多横向滚动 */
.kpi-grid.kpi-6.kpi-single{display:flex;flex-wrap:nowrap;overflow-x:auto}
.kpi-grid.kpi-6.kpi-single .kpi{flex:1 1 124px;min-width:124px}

/* ==== 工作台（§77 调度作战看板）专属布局 ==== */
/* 一页 4 格：上排 左 OA / 右 待办，下排 左 作业进度 / 右 司机打卡 */
.wb-4grid{align-items:stretch}
.wb-4grid>.card,.wb-4grid>[id]{min-width:0}
.wb-4grid>.card,.wb-4grid>[id]> .card,.wb-cell{height:100%}
.wb-cell .card-bd{padding:10px 14px}
/* OA 待我审批：紧凑行式表格（一页 10/20 条）+ 翻页条 */
.wb-oa-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
/* 表格滚动区封顶：20 条/页也不会把 4 格拉高，超出在卡内滚动 */
.wb-oa-scroll{max-height:296px;overflow-y:auto;scrollbar-width:thin}
.wb-oa-tbl th{background:#eef3fe;font-weight:500;font-size:11.5px;color:var(--muted);padding:5px 9px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
.wb-oa-tbl td{padding:3px 9px;border-bottom:1px solid #eef3f9;vertical-align:middle;line-height:1.45}
.wb-oa-tbl tbody tr:hover{background:var(--primary-l)}
.wb-oa-tbl tbody tr:last-child td{border-bottom:0}
.wb-oa-ttl{max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-oa-tbl .badge{padding:1px 6px;font-size:10.5px;line-height:1.5}
.wb-oa-tbl .btn{padding:2px 8px;font-size:11.5px;border-radius:6px;margin-left:4px}
/* 翻页条：紧凑（比 U.pageBar 矮一档，塞进 4 格小卡） */
.wb-oa-pager{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;border-top:1px solid var(--line);background:var(--panel);flex-wrap:wrap}
.wb-oa-pg-info{font-size:11.5px;color:var(--muted)}
.wb-oa-pg-btns{display:flex;align-items:center;gap:4px}
.wb-oa-pg-btns .pg{min-width:26px;height:22px;padding:0 7px;font-size:11.5px;border:1px solid var(--line-2);border-radius:6px;background:var(--panel);color:var(--text);cursor:pointer}
.wb-oa-pg-btns .pg:hover:not(:disabled){border-color:var(--primary);color:var(--primary-d)}
.wb-oa-pg-btns .pg:disabled{opacity:.45;cursor:default}
.wb-oa-pg-btns .pg.on{background:var(--primary);border-color:var(--primary);color:#fff;cursor:default}
.wb-oa-pg-btns .pg-ell{border:0;background:none;color:var(--hint);font-size:11.5px;padding:0 2px;cursor:default}
.wb-oa-pg-btns .pg-size{border-style:dashed}
.wb-oa-pg-btns .pg-size.class-on{border-style:solid;border-color:var(--primary);color:var(--primary-d);background:var(--primary-l)}
/* 今日待办（右上格，逐条紧凑） */
.wb-todo-list{display:flex;flex-direction:column;gap:6px}
.wb-todo-item{display:flex;align-items:center;gap:8px;padding:6px 9px;border:1px solid var(--line);border-radius:8px;background:var(--warn-l)}
.wb-todo-item .strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
.wb-todo-item .btn{padding:4px 10px;font-size:12px}
/* 外部自助注册待审核提示条（§81）：车队 / 客户门户在各自外端注册后，工作台首屏红条直给，点按钮直达审核页 */
.wb-alert{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid #f7c9c9;border-left:3px solid var(--danger);border-radius:8px;background:#fff5f5;margin-bottom:10px}
.wb-alert:last-child{margin-bottom:0}
.wb-alert-n{min-width:22px;height:22px;padding:0 5px;border-radius:50%;background:var(--danger);color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center;flex:0 0 auto;font-variant-numeric:tabular-nums}
.wb-alert-txt{display:flex;flex-direction:column;min-width:0;line-height:1.45}
.wb-alert-txt b{font-size:12.5px;color:var(--text)}
.wb-alert-txt span{font-size:11.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-alert .btn{margin-left:auto;flex:0 0 auto}
@media (max-width:900px){.wb-oa-pager{justify-content:center}}

/* ==== 工作台 11-06 重构：业务 KPI + 财务条 + 待办中心 / 预警 / 台账 / 趋势 / 公告 ==== */
.wb-sec{display:flex;align-items:baseline;gap:8px;margin:0 0 8px}
.wb-sec-t{font-size:12.5px;font-weight:600;color:var(--text)}
.wb-sec-s{font-size:11.5px;color:var(--hint)}
/* 财务条：一横排 6 格，点格跳页 */
.wb-fin{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 14px 12px}
.wb-fin-hd{font-size:12px;color:var(--muted);display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.wb-fin-hd span{font-size:11px;color:var(--hint)}
.wb-fin-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.wb-fin-i{display:flex;flex-direction:column;gap:2px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel);cursor:pointer;text-align:left;font:inherit;min-width:0}
.wb-fin-i:hover{border-color:var(--primary);background:var(--primary-l)}
.wb-fin-i span{font-size:11.5px;color:var(--muted)}
.wb-fin-i b{font-size:17px;font-weight:500;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wb-fin-i em{font-size:10.5px;color:var(--hint);font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 三列网格：待办/调度占两列，右侧预警/台账 */
.wb-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:stretch}
.wb-grid3>.span2{grid-column:span 2;min-width:0}
.wb-grid3>.card{min-width:0}
.wb-grid3>.span2>.card,.wb-grid3>#wbTodoWrap>.card,.wb-grid3>#wbWarnWrap>.card,.wb-grid3>#wbLedgerWrap>.card{height:100%}
/* 待办中心 Tab */
.wb-tabs{display:inline-flex;gap:2px;margin-left:10px;padding:2px;background:#eef3fe;border-radius:8px}
.wb-tab{border:0;background:none;font:inherit;font-size:12px;color:var(--muted);padding:3px 10px;border-radius:6px;cursor:pointer}
.wb-tab.on{background:#fff;color:var(--primary-d);font-weight:500;box-shadow:0 1px 2px rgba(20,60,120,.08)}
.wb-tab b{margin-left:4px;font-weight:500;font-size:11px;color:var(--danger)}
/* 预警列表 */
.wb-warn-list{padding:6px 10px}
.wb-warn{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:8px;cursor:pointer}
.wb-warn:hover{background:var(--primary-l)}
.wb-warn-t{min-width:0;display:flex;flex-direction:column;line-height:1.45}
.wb-warn-t b{font-size:12.5px;font-weight:500;color:var(--text)}
.wb-warn-t em{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal}
.wb-warn-go{margin-left:auto;color:var(--hint);font-style:normal}
/* 台账 / 报表快捷格子 */
.wb-lg-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.wb-lg{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:var(--panel);cursor:pointer;font:inherit;text-align:left;min-width:0;transition:border-color .12s,background .12s}
.wb-lg:hover{border-color:var(--primary);background:var(--primary-l)}
.wb-lg-i{color:var(--primary);display:flex}
.wb-lg-n{font-size:12px;color:var(--text)}
.wb-lg em{font-size:10.5px;color:var(--hint);font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
/* 趋势脚注 */
.wb-trend-foot{font-size:11.5px;color:var(--muted);margin-top:6px}
.wb-trend-foot b{font-weight:500;color:var(--text)}
/* 公告 */
.wb-nt-list{display:flex;flex-direction:column}
.wb-nt{display:flex;align-items:center;gap:9px;padding:9px 12px;border-bottom:1px solid #eef3f9;cursor:pointer;min-width:0}
.wb-nt:last-child{border-bottom:0}
.wb-nt:hover{background:var(--primary-l)}
.wb-nt b{font-size:12.5px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.wb-nt em{margin-left:auto;font-size:11px;color:var(--hint);font-style:normal;white-space:nowrap;flex:0 0 auto}
@media (max-width:1180px){
  .wb-fin-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .wb-grid3{grid-template-columns:1fr}
  .wb-grid3>.span2{grid-column:auto}
}

.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;position:relative}
.kpi-label{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px}
.kpi-value{font-size:24px;font-weight:500;line-height:1.35;font-variant-numeric:tabular-nums;margin-top:2px}
.kpi-value small{font-size:13px;font-weight:400;color:var(--muted);margin-left:3px}
.kpi-foot{font-size:11.5px;color:var(--hint);margin-top:2px}
.kpi-accent{position:absolute;left:0;top:16px;bottom:16px;width:3px;border-radius:0 3px 3px 0}

/* forms */
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field label{font-size:12px;color:var(--muted)}
.field label .req{color:var(--danger)}
.field input,.field select,.field textarea{border:1px solid var(--line-2);border-radius:8px;padding:0 10px;background:#fff;outline:none;transition:border-color .12s,box-shadow .12s;width:100%;font-size:12.5px;box-sizing:border-box}
.field textarea{padding:6.5px 10px;min-height:56px}
.field input,.field select{height:var(--ctl-h,32px)}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(42,127,212,.1)}
.field input:disabled{background:#f4f9fe;color:var(--muted)}
.form-grid{display:grid;grid-template-columns:repeat(var(--fg-cols,4),1fr);gap:var(--fg-gy,10px) var(--fg-gapx,12px)}
.form-grid .span2{grid-column:span var(--sp2,2)}
.form-grid .span4{grid-column:span var(--sp4,4)}
.form-sec{grid-column:1/-1;font-size:12px;color:var(--primary-d);font-weight:500;padding-top:6px;border-top:1px dashed var(--line);margin-top:4px}
.form-sec:first-child{border-top:0;margin-top:0;padding-top:0}
/* 整行跨列（字段布局自定义里把某个字段拉到整行用） */
.form-grid .span-all{grid-column:1/-1}
/* 字段说明气泡：默认不占位，鼠标悬停 label 问号才出，避免说明文字把行高撑高。
   注意：选择器不能限定在 .field label 下 —— 折叠头等非 label 位置也要用，否则气泡文字会撑高元素。 */
.qmark{display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;flex:none;
  margin-left:3px;border-radius:50%;background:var(--primary-l);color:var(--primary-d);font-size:9.5px;font-weight:700;
  cursor:help;vertical-align:middle;position:relative}
.qmark:hover .qtip{display:block}
.qtip{display:none;position:absolute;left:50%;top:19px;transform:translateX(-50%);z-index:60;
  width:250px;padding:7px 9px;background:#1f2d3d;color:#fff;font-size:11.5px;font-weight:400;line-height:1.65;
  border-radius:8px;box-shadow:0 6px 20px rgba(16,32,48,.28);text-align:left;white-space:normal;pointer-events:none}
.qtip::before{content:'';position:absolute;left:50%;top:-5px;margin-left:-5px;border:5px solid transparent;border-bottom-color:#1f2d3d}
/* ================= 货代转拖车：信息自动带出区（§29） =================
   转拖车弹窗里把「已从货代单带出来的字段」集中只读展示，
   与下方「还需你确认 4 项」形成对照，用户一眼知道哪些不用再录。 */
.ffcarry-sec{margin:0 0 12px;border:1px solid var(--line);border-radius:10px;background:#f8fbfe;overflow:hidden}
.ffcarry-hd{display:flex;align-items:center;gap:6px;padding:7px 10px;font-size:12px;font-weight:600;
  color:var(--muted);background:#f0f6fb;border-bottom:1px solid var(--line)}
.ffcarry-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:1px;background:var(--line)}
.ffcarry{background:#fff;padding:7px 10px;min-width:0}
.ffcarry label{display:block;font-size:11px;color:var(--muted);margin-bottom:2px}
.ffcarry b{display:block;font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ffcarry .hint{display:inline-block;margin-top:3px;font-size:10px;color:var(--primary-d);
  background:var(--primary-l);border-radius:4px;padding:0 4px;cursor:help}
/* 字段布局条 + 内联字段设置面板（理单等宽表单） */
.ffbar .grow{flex:1}
.ffbar .seg{display:inline-flex;border:1px solid var(--line-2);border-radius:8px;overflow:hidden;background:#fff}
.ffbar .seg button{border:0;background:#fff;font-size:11.5px;color:var(--muted);padding:4px 9px;cursor:pointer;border-right:1px solid var(--line-2)}
.ffbar .seg button:last-child{border-right:0}
.ffbar .seg button.on{background:var(--primary);color:#fff}
.ffpanel{border:1px solid var(--line);border-radius:10px;padding:10px;margin:-4px 0 10px;background:#fcfdff}
.ffpanel .fph{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted);margin-bottom:7px}
.fflist{max-height:262px;overflow:auto;border:1px solid var(--line);border-radius:8px;background:#fff}
.fflist .ffi{display:flex;align-items:center;gap:7px;padding:5px 8px;border-bottom:1px solid var(--line);font-size:12px}
/* 拖拽排序（10-19：字段布局支持直接拖动，≡ 是手柄，整行都可拖） */
.fflist .ffi{cursor:grab}
.fflist .ffi:active{cursor:grabbing}
.fflist .ffi .ffi-grip{flex:none;width:11px;color:var(--hint);font-size:13px;line-height:1;cursor:grab;
  letter-spacing:-1px;user-select:none;-webkit-user-select:none}
.fflist .ffi.dragging{cursor:grabbing}
.fflist .ffi:last-child{border-bottom:0}
.fflist .ffi.off{background:#fafbfc;color:var(--hint)}
.fflist .ffi.dragging{opacity:.4}
.fflist .ffi .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fflist .ffi .wd{display:inline-flex;border:1px solid var(--line-2);border-radius:7px;overflow:hidden}
.fflist .ffi .wd button{border:0;border-right:1px solid var(--line-2);background:#fff;font-size:11px;color:var(--muted);
  padding:2px 7px;cursor:pointer}
.fflist .ffi .wd button:last-child{border-right:0}
.fflist .ffi .wd button.on{background:var(--primary-l);color:var(--primary-d);font-weight:600}
.fflist .ffi .ord{display:inline-flex;gap:2px}
.fflist .ffi .ord button{border:1px solid var(--line-2);background:#fff;border-radius:6px;font-size:10px;color:var(--muted);
  width:20px;height:20px;line-height:1;cursor:pointer;padding:0}
.fflist .ffi .ord button:hover{border-color:var(--primary);color:var(--primary)}
.ffpanel .pft{display:flex;align-items:center;gap:8px;margin-top:8px}
.ffpanel .pft .grow{flex:1}
/* 折叠块（柜清单等：空的时候收起不占位置） */
.fold{margin:16px 0 0;border:1px solid var(--line);border-radius:10px;background:#fcfdff;overflow:hidden}
.fold-hd{display:flex;align-items:center;gap:7px;padding:9px 11px;cursor:pointer;font-size:12.5px;color:var(--primary-d);user-select:none}
.fold-hd:hover{background:#f4f9fe}
.fold-hd svg{color:var(--hint);flex:none}
.fold-hd .fold-ar{margin-left:auto;display:inline-flex;transition:transform .18s;color:var(--hint)}
.fold.open .fold-hd .fold-ar{transform:rotate(90deg)}
.fold-bd{padding:0 11px 11px}
.fold-bd .form-sec:first-child{margin-top:0}
/* ⚙ 浮层里的本单字段清单 */
.fdns-pop.wide{width:372px}
.fdns-fields{border-top:1px dashed var(--line);margin-top:2px}
.fdns-fields .fflist{max-height:228px}

.toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:13px}
.toolbar .grow{flex:1}
.search{position:relative}
/* 输入框带 .plain 类时，下方 input.plain 的 padding:0 10px 与本条同级(specificity 相同)，
   但因靠后书写会盖掉这里的 padding-left:30px，导致放大镜(left:9px)压在占位文字上。
   故用 .search input.plain 提升优先级，确保左内边距恒为放大镜预留 30px。 */
.search input.plain{padding-left:30px;width:230px}
.search svg{position:absolute;left:9px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--hint)}
select.plain,input.plain{border:1px solid var(--line-2);border-radius:8px;padding:0 10px;background:#fff;outline:none;height:var(--ctl-h,32px);box-sizing:border-box}
select.plain[multiple],textarea.plain{height:auto;padding:6.5px 10px}
/* 年/月双选翻页器（10-24：所有日期翻页支持年翻） */
.ym-picker{display:inline-flex;gap:4px;align-items:center;vertical-align:middle}
.ym-picker select{border:1px solid var(--line-2);border-radius:8px;padding:0 6px;background:#fff;outline:none;height:var(--ctl-h,32px);box-sizing:border-box;font:inherit;color:inherit;cursor:pointer}

/* 订单管理 · 按字段精查工具条（第二排） */
.toolbar.qbar{gap:8px;background:#f7fbff;border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-top:-5px}
.qbar .qtag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--primary-d);background:var(--primary-l);border:1px solid #cfe4f8;border-radius:7px;padding:4px 8px;white-space:nowrap}
.qbar .q{display:inline-flex;align-items:center;gap:6px}

/* 订单管理 · 批量操作条（11-05 最终版：独占工具栏第 1 行、从行首排）
   bb-break：占满一行的 flex 断点，把下面那排检索条件换到第二行；
   bb-grp：靠左排布，没勾选时整体淡化，勾选后恢复（refreshBar 切 .bb-on）。 */
/* 11-05 用户拍板：批量操作条从「检索条行尾」挪到「检索条最前面」——
   整条独占第 1 行、从行首开始排，勾选后不用再跨过一整排筛选项去找。
   .bb-break 仍是这条与检索条之间的换行点（bar 在前，filters 在后）。 */
.bb-break{flex:0 0 100%;height:0;margin:0}
.bb-grp{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-start;flex:1 1 auto;
  opacity:.5;transition:opacity .12s;padding-bottom:7px;border-bottom:1px solid var(--line)}
.bb-grp.bb-on{opacity:1}
.bb-grp .bb-n{font-size:12px;color:var(--muted);white-space:nowrap;margin-right:2px}
.bb-grp.bb-on .bb-n{color:var(--primary-d);font-weight:600}
.qbar .q label{font-size:11.5px;color:var(--muted);white-space:nowrap}
.qbar .q input,.qbar .q select{padding:5px 8px;font-size:12px}
.qbar .q input{width:134px}
.qbar .q select{width:106px}

/* 新增订单 · 柜条目表格（一柜一条，行内编辑） */
.bx-scroll{max-height:330px;overflow:auto;border:1px solid var(--line);border-radius:10px}
.cntr-scroll{max-height:186px;overflow:auto;border:1px solid var(--line);border-radius:9px;margin-top:4px}
.bx-table{width:100%;border-collapse:collapse;font-size:12px}
.bx-table th{position:sticky;top:0;z-index:1;background:#f4f9fe;color:var(--muted);font-weight:500;text-align:left;padding:7px 6px;border-bottom:1px solid var(--line);white-space:nowrap}
.bx-table td{padding:4px 5px;border-bottom:1px solid #eef3f9;vertical-align:middle}
.bx-table input,.bx-table select{border:1px solid var(--line-2);border-radius:6px;padding:5px 6px;font-size:12px;width:100%;background:#fff}
.bx-table input:disabled{background:#f5f9fe;color:var(--hint)}
.bx-table input[type=number]{text-align:right}
.bx-table .bx-no{font-size:11.5px;color:var(--primary-d);white-space:nowrap}
/* 柜级往来单位：应收固定本单客户，应付=分派供应商（自有车无应付） */
.bx-table .bx-party{font-size:11.5px;line-height:1.45}
.bx-table .bx-party span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bx-table .ar-unit{color:var(--danger)}
.bx-table .ap-unit{color:var(--muted)}

/* 订单详情：应收 / 应付 上下两栏（10-18 收紧排版，减少空白） */
.ar-sec{margin-top:14px}
.ar-sec-hd{display:flex;align-items:baseline;gap:10px;padding:6px 10px;border-radius:8px 8px 0 0;border:1px solid var(--line);border-bottom:0;background:#f7fbff}
.ar-sec-hd .t{font-weight:600;font-size:13px}
.ar-sec-hd.ar-rec .t{color:var(--danger)}
.ar-sec-hd.ar-pay .t{color:var(--muted)}
.ar-sec-hd .n{font-size:11px;color:var(--hint)}
.ar-sec-hd .v{margin-left:auto;font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.ar-sec-hd.ar-rec .v{color:var(--danger)}
.ar-sec-hd.ar-margin{margin-top:10px}
/* ===== 单票毛利 · 两段口径（§38） =====
   ① 对外毛利：应收 − 应付（商务口径，自有车必然接近 100%）
   ② 经营毛利：再扣自有车内部成本 + 管理费（管理口径，真实赚的钱）
   两段并排显示，避免用户看到 100% 以为是系统算错。 */
.ar-profit{margin-top:10px;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}
.ar-profit .pf-hd{display:flex;align-items:center;gap:8px;padding:7px 10px;background:#f7fbff;border-bottom:1px solid var(--line)}
.ar-profit .pf-hd .t{font-weight:600;font-size:13px}
.ar-profit .pf-hd .hint{font-size:11px;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ar-profit .pf-row{display:flex;align-items:baseline;gap:10px;padding:7px 10px;border-top:1px dashed var(--line)}
.ar-profit .pf-row:first-of-type{border-top:0}
.ar-profit .pf-k{width:96px;flex:none;font-size:12.5px;color:var(--muted)}
.ar-profit .pf-v{flex:none;min-width:132px;font-weight:700;font-size:15px;font-variant-numeric:tabular-nums;color:var(--purple)}
.ar-profit .pf-v i{font-style:normal;font-weight:400;font-size:11.5px;color:var(--muted);margin-left:6px}
.ar-profit .pf-s{flex:1;font-size:11px;color:var(--hint);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ar-profit .pf-row.ops{background:#fbfaff}
.ar-profit .pf-row.ops .pf-k{color:var(--text);font-weight:600}
.ar-profit .pf-row.ops .pf-v{color:var(--ok)}
/* 往来应收应付与毛利：顶部币种汇总条 + 按币种分组小标题 */
.aap-sum{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center;padding:10px 12px;background:var(--accent-soft,#eef4ff);border:1px solid var(--accent,#2f6fed);border-radius:10px;font-size:13px;line-height:1.8}
.aap-sum b{color:var(--primary-d)}
.aap-sum .hint{font-weight:400}
.cur-h{font-size:12px;font-weight:600;color:var(--muted);margin-bottom:4px;padding-left:2px}
/* 按币种成块：人民币块 / 美元块各含「应收在上、应付在下」一张表，列严格对齐 */
.aap-block{margin-bottom:10px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.aap-block .cur-h{padding:7px 12px;margin:0;background:#f5f7fa;border-bottom:1px solid var(--line);font-size:12.5px;color:var(--text)}
.aap-block .tbl-scroll{max-height:none}
.aap-tbl{margin:0;border-top:0}
.aap-tbl th,.aap-tbl td{font-size:11.5px}
.aap-tbl .grp-row td{background:#eef3fb;font-weight:700;color:var(--primary-d);padding:5px 12px;font-size:12px;letter-spacing:.3px}
.aap-tbl tfoot td{background:#fafbfc;border-top:2px solid var(--line)}
.ar-profit .pf-row.total{background:#f3f9f3}
.ar-profit .pf-row.total .pf-k{color:#1f7a32;font-weight:700}
.ar-profit .pf-row.total .pf-v{color:#137a2e;font-size:16px}
.wtbl{width:100%;border-collapse:collapse}
.wtbl td{padding:6px 8px;border-bottom:1px solid var(--line);font-size:12.5px}
.wtbl td.r{text-align:right;font-variant-numeric:tabular-nums}
.wtbl tr:hover td{background:#fafcff}
.ar-sec-hd.ar-bordered{border-top:0}
/* ===== 订单账款卡片（10-19 重设计：应收 / 应付 各一张卡，票级可编辑在上、柜级只读在下） ===== */
.acct-card{border:1px solid var(--line);border-radius:10px;background:#fff;margin-top:12px;overflow:hidden}
.acct-card.acct-rec{border-color:#f3d3d3}
.acct-card.acct-pay{border-color:#dfe6ee}
.acct-card.is-locked{background:#fcfcfd}
.acct-hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 12px;background:#f7fbff;border-bottom:1px solid var(--line)}
.acct-pay .acct-hd{background:#f7f9fc}
.acct-hd .t{font-weight:600;font-size:13.5px}
.acct-rec .acct-hd .t{color:var(--danger)}
.acct-pay .acct-hd .t{color:#5b6b7f}
.acct-hd .n{font-size:11px;color:var(--hint)}
.acct-hd .ar-chips{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}
.acct-hd .v{margin-left:auto;text-align:right;font-weight:700;font-size:16px;font-variant-numeric:tabular-nums;line-height:1.25}
.acct-rec .acct-hd .v{color:var(--danger)}
.acct-pay .acct-hd .v{color:#3d4b5c}
.acct-hd .v .hint{display:block;font-size:10.5px;font-weight:400;color:var(--hint);font-variant-numeric:tabular-nums}
/* 顶部右上角：当前选中柜的「本柜应收/应付合计」（10-30 用户要求从卡片内上移到此处） */
.ar-boxsum{margin-left:auto;display:flex;gap:16px;align-items:center;padding:4px 12px;background:#fff;border:1px solid var(--line);border-radius:9px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.ar-boxsum .bs{display:flex;flex-direction:column;line-height:1.18;text-align:right}
.ar-boxsum .bs .lbl{font-size:10.5px;color:var(--hint);white-space:nowrap}
.ar-boxsum .bs b{font-size:15px;font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}
.ar-boxsum .bs-rec b{color:var(--danger)}
.ar-boxsum .bs-pay b{color:#2f7fd0}
.ar-boxsum .bs-paid{font-style:normal;font-size:10px;color:var(--ok);font-weight:400;margin-left:3px}
.ar-boxsum.is-locked{border-color:#e8b6b1;background:#fff6f5}
.acct-sub{display:flex;align-items:center;gap:8px;padding:7px 12px 3px;font-size:12px;font-weight:600;color:var(--text)}
.acct-sub .i{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#e8f0fa;color:var(--primary-d);font-size:10.5px;font-weight:700}
.acct-sub .hint{font-weight:400;font-size:11px}
.acct-ticket{padding:2px 12px 8px}
.acct-card .fee-row:last-of-type{margin-bottom:2px}
.fee-add{margin-top:5px}
.acct-empty{padding:8px 10px;margin:4px 0;border:1px dashed var(--line-2);border-radius:7px;background:#fafcfe;color:var(--hint);font-size:12px}
.acct-card .tbl-scroll{margin:4px 0 0}
.acct-card .ar-tbl{border:0;border-radius:0}
.acct-card .ar-tbl thead th{background:#f4f7fb}
.ar-tbl{margin-top:0}
.ar-tbl th{position:static}
.ar-tbl td{padding:5px 8px;vertical-align:top}
.ar-tbl .ar-lv{display:inline-block;padding:1px 6px;border-radius:8px;font-size:10.5px;line-height:16px;background:#eef4fb;color:var(--primary-d);white-space:nowrap}
.ar-tbl .ar-lv.box{background:#f3f0fb;color:var(--purple)}
.ar-tbl .ar-party{font-size:11.5px}
.ar-tbl .ar-row-ticket{background:#fcfdff}
.ar-tbl .ar-row-box td{border-bottom:1px dashed #e6eef7}
.ar-tbl .ar-row-none{opacity:.55}
.ar-tbl .ar-ft{text-align:right;font-weight:600;font-size:11.5px;color:var(--muted);border-top:1px solid var(--line);padding-top:6px}
.ar-tbl .ar-ft-v{font-weight:700;font-size:13px;color:var(--danger)}
/* 票级应收的往来单位固定跟随客户 → 只读展示 */
.fee-party-fix{display:flex;align-items:center;height:30px;padding:0 9px;border:1px dashed var(--line-2);border-radius:7px;background:#f6f9fd;color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* tabs */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 16px;background:#f8fbff}
.tab{padding:10px 14px;font-size:12.5px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--text)}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:500}
.tab .n{color:var(--hint);margin-left:4px}

/* empty */
.empty{text-align:center;padding:46px 20px;color:var(--hint)}
.empty svg{width:34px;height:34px;opacity:.35;margin-bottom:8px}

/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(26,90,160,.42);display:flex;align-items:flex-start;justify-content:center;padding:52px 20px 20px;z-index:100;overflow-y:auto;animation:fade .14s ease}
/* 垂直居中弹窗（U.modal({center:true})）：确认类对话框用，视线不用往网页上方找 */
.modal-mask.modal-center{align-items:center;padding:20px}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}
.modal{background:var(--panel);border-radius:var(--r-lg);width:820px;max-width:100%;box-shadow:0 18px 48px rgba(26,90,160,.2);animation:pop .16s ease;overflow:hidden}
.modal.wide{width:1000px}
.modal.narrow{width:520px}
.modal-hd{padding:15px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center}
.modal-hd h3{font-size:14.5px;font-weight:500}
.modal-hd .x{margin-left:auto;cursor:pointer;color:var(--hint);font-size:20px;line-height:1;padding:0 4px;border:0;background:none}
.modal-hd .x:hover{color:var(--text)}
/* 弹窗头部「字段密度自定义」齿轮：所有弹窗通用，调的是全局 CSS 变量 */
.modal-hd .m-gear{margin-left:auto;cursor:pointer;color:var(--hint);border:0;background:none;font-size:14px;line-height:1;padding:3px 6px;border-radius:6px}
.modal-hd .m-gear:hover{color:var(--primary);background:var(--primary-fade,rgba(42,127,212,.08))}
.modal-hd .m-gear + .x{margin-left:2px}
.fdns-pop{position:fixed;z-index:3000;width:288px;background:#fff;border:1px solid var(--line-2);border-radius:10px;box-shadow:0 10px 34px rgba(15,40,80,.18);padding:12px 14px;font-size:12px}
.fdns-pop h4{margin:0 0 8px;font-size:12.5px;font-weight:600}
.fdns-pop .fdns-row{display:flex;align-items:center;gap:8px;margin:7px 0}
.fdns-pop .fdns-row>span{width:76px;color:var(--muted);flex:none}
.fdns-pop .fdns-opts{display:flex;gap:4px;flex:1}
.fdns-pop .fdns-opts button{flex:1;border:1px solid var(--line-2);background:#fff;border-radius:6px;padding:4px 0;font-size:11.5px;cursor:pointer;color:var(--muted)}
.fdns-pop .fdns-opts button.on{border-color:var(--primary);color:var(--primary-d);background:rgba(42,127,212,.08);font-weight:600}
.fdns-pop .fdns-ft{display:flex;justify-content:space-between;margin-top:9px;padding-top:8px;border-top:1px dashed var(--line)}
.fdns-pop .hint{font-size:11px;color:var(--hint);line-height:1.5;margin-top:6px}
/* 行内「操作 ▾」悬浮菜单（10-19：按钮全挪到工具条，行内只留一个入口，腾出上下高度） */
.btn-rowmenu{min-width:72px;white-space:nowrap}
.rowmenu-pop{position:fixed;z-index:3200;min-width:150px;max-width:260px;background:#fff;border:1px solid var(--line-2);
  border-radius:9px;box-shadow:0 10px 30px rgba(15,40,80,.2);padding:5px;font-size:12.5px}
.rowmenu-pop .rm-it{display:block;width:100%;text-align:left;border:0;background:none;border-radius:6px;
  padding:7px 10px;font-size:12.5px;color:var(--text);cursor:pointer;white-space:nowrap}
.rowmenu-pop .rm-it:hover{background:var(--primary-fade,rgba(42,127,212,.09));color:var(--primary-d)}
.rowmenu-pop .rm-it.rm-primary{color:var(--primary-d);font-weight:600}
.rowmenu-pop .rm-it.rm-danger{color:var(--danger)}
.rowmenu-pop .rm-it.rm-danger:hover{background:rgba(214,69,69,.1);color:var(--danger)}
.rowmenu-pop .rm-it.dis{color:var(--hint);cursor:default}
.rowmenu-pop .rm-it.dis:hover{background:none;color:var(--hint)}
.rowmenu-pop .rm-sep{height:1px;background:var(--line);margin:4px 2px}
/* 操作列收窄后表格行更紧凑 */
.tbl-scroll table.data td.rm-cell{padding:2px 4px;white-space:nowrap}
/* 应收 / 应付工作台：行高压缩（10-19 用户「减少上下高度间距」，一屏多放几行）
   根因：这两张表 20+ 列，table-layout:auto 时浏览器把列压得比声明宽度更窄，
        长文本（车队名 / 往来单位 / 费用类型）折行，行高被撑到 77~128px。
   解法：U.table(..., {cls:'rm-tbl'}) 打标记 → 固定布局按声明列宽排布
        + 单元格单行省略，行高恒定在一行内（不影响其它表格）。
        次要信息（日期 / 税额 / 张数 / 期间等）统一移到 title 悬浮提示，不再占行高。 */
.tbl-scroll table.rm-tbl{table-layout:fixed}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td{padding:2px 6px;line-height:1.25;vertical-align:middle;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td > *{margin:0}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td input.plain,
.tbl-scroll table.rm-tbl tr[data-rm-row] > td select.plain,
.tbl-scroll table.rm-tbl tr[data-rm-row] > td input[type="date"]{height:24px;line-height:22px;font-size:11.5px;padding:0 4px}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td .badge{padding:0 6px;line-height:18px}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td .btn-sm{padding:1px 8px;line-height:18px}
.tbl-scroll table.rm-tbl tr[data-rm-row] > td .pill{padding:0 6px;line-height:18px}
/* 操作列（rm-cell）要完整显示按钮，不做省略 */
.tbl-scroll table.rm-tbl td.rm-cell{overflow:visible}
.modal-bd{padding:16px 18px;max-height:calc(100vh - 230px);overflow-y:auto}
.modal-ft{padding:13px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:9px;background:#f8fbff}

/* toast */
.toast-wrap{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:300;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:#1b1f26;color:#fff;padding:9px 16px;border-radius:9px;font-size:12.5px;box-shadow:0 8px 24px rgba(26,90,160,.24);animation:pop .16s ease;display:flex;align-items:center;gap:8px}
.toast.ok{background:#2f5c0e}
.toast.err{background:#8f2727}

/* timeline */
.tl{position:relative;padding-left:22px}
.tl::before{content:"";position:absolute;left:5px;top:5px;bottom:5px;width:1.5px;background:var(--line)}
.tl-item{position:relative;padding:0 0 16px}
.tl-item:last-child{padding-bottom:0}
.tl-item .pd{position:absolute;left:-22px;top:4px;width:11px;height:11px;border-radius:50%;background:#fff;border:2px solid var(--line-2)}
.tl-item.done .pd{background:var(--primary);border-color:var(--primary)}
.tl-item.cur .pd{background:#fff;border-color:var(--primary);box-shadow:0 0 0 3px rgba(42,127,212,.18)}
.tl-t{font-size:12.5px;font-weight:500;display:flex;align-items:center;gap:8px}
.tl-s{font-size:11.5px;color:var(--hint)}

/* misc */
.pill{display:inline-block;background:#eef3f9;border-radius:6px;padding:1px 7px;font-size:11.5px;color:var(--muted)}
.plate{font-family:ui-monospace,Menlo,monospace;background:#eef5fd;border:1px solid #d6e4f2;border-radius:5px;padding:1px 6px;font-size:11.5px;color:#20303f;white-space:nowrap}
.bar{height:6px;background:#eaf2fa;border-radius:4px;overflow:hidden}
.bar>i{display:block;height:100%;background:var(--primary);border-radius:4px}
.photo-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.photo{aspect-ratio:4/3;border-radius:9px;background:linear-gradient(135deg,#eef6ff,#e4f0fb);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8fa4b8;font-size:11px;gap:5px;cursor:pointer}
.photo:hover{border-color:var(--primary);color:var(--primary)}
.photo svg{width:20px;height:20px;opacity:.6}
.upload{border:1px dashed var(--line-2);border-radius:9px;aspect-ratio:4/3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--hint);font-size:11.5px;cursor:pointer}
.upload:hover{border-color:var(--primary);color:var(--primary);background:#fafcfe}
.upload svg{width:19px;height:19px}
.stat-line{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px dashed var(--line);font-size:12.5px}
.stat-line:last-child{border-bottom:0}
.stat-line .v{font-variant-numeric:tabular-nums;font-weight:500}
/* 订单详情 › 派车信息（10-30 用户：右侧空白区补派车明细） */
.od-disp{display:flex;flex-direction:column;gap:10px;margin-top:2px}
.od-disp-item{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--panel-2)}
.od-disp-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.od-disp-top .link{font-weight:600;color:var(--primary)}
.od-disp-grid{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:12.5px}
.od-dl{display:contents}
.od-dl .k{color:var(--muted)}
.od-dl .v{text-align:right;font-variant-numeric:tabular-nums}
.od-disp-empty{font-size:12px;color:var(--muted);padding:2px 0 6px;line-height:1.7}
/* 派车信息 › 作业号标签（点哪个显示哪个，不再全部堆在一起，10-30） */
.od-job-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 10px}
.od-job-tab{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border:1px solid var(--line);border-radius:999px;background:var(--panel-2);cursor:pointer;font-size:12px;line-height:1;transition:background .12s,border-color .12s}
.od-job-tab:hover{border-color:var(--primary);background:var(--panel-3,var(--panel-2))}
.od-job-tab.active{border-color:var(--primary);background:var(--primary);color:#fff}
.od-job-tab.active .hint{color:rgba(255,255,255,.8)}
.od-job-tab b{font-weight:600}
.od-job-tab .badge{font-size:10px;padding:1px 6px}
.od-job-detail{margin-top:2px}
.plate{font-family:var(--mono,ui-monospace,monospace);letter-spacing:.5px}
.note{background:#f7fafe;border-left:3px solid var(--primary);padding:7px 10px;border-radius:0 8px 8px 0;font-size:12px;color:var(--muted);line-height:1.6}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px}
.hbar-row{display:flex;align-items:center;gap:10px;margin-bottom:9px;font-size:12.5px}
.hbar-row .lb{width:112px;flex:0 0 auto;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hbar-row .vl{width:78px;flex:0 0 auto;text-align:right;font-variant-numeric:tabular-nums}
.vbars{display:flex;align-items:flex-end;gap:12px;height:150px;padding:0 4px}
.vbars .vb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%}
.vbars .vb i{display:block;width:100%;max-width:38px;background:var(--primary);border-radius:5px 5px 0 0;min-height:3px}
.vbars .vb span{font-size:11px;color:var(--hint);white-space:nowrap}
.vbars .vb b{font-size:11.5px;font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums}

/* 批量操作条 / 视图切换 */
.batch-bar{display:flex;align-items:center;gap:9px;background:var(--primary-l);border:1px solid #cfe4f8;border-radius:10px;padding:8px 12px;margin:0 16px 12px}
.batch-bar .bb-n{font-size:12.5px;color:var(--primary-d);font-weight:500}
.batch-bar .grow{flex:1}
.seg{display:inline-flex;border:1px solid var(--line-2);border-radius:8px;overflow:hidden}
.seg button{border:0;background:#fff;padding:5px 11px;font-size:12px;cursor:pointer;color:var(--muted);white-space:nowrap}
.seg button:hover{color:var(--primary)}
.seg button.active{background:var(--primary);color:#fff}

/* 客户箱量统计表（分析） */
.cb-layerbar{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--line)}
.cb-layer{font-size:12.5px;color:var(--muted);padding:3px 10px;border-radius:7px;background:#f1f5fa}
.cb-layer.on{color:var(--primary-d);background:#e7f0fb;font-weight:500}
.icon-btn{border:1px solid var(--line-2);background:#fff;border-radius:7px;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted)}
.icon-btn:hover{color:var(--primary);border-color:var(--primary)}
.cb-total{background:#f6f9fc}
.cb-total-row{background:#f6f9fc;font-weight:600;border-top:2px solid var(--line-2)}
.cb-total-row td{padding:8px 10px}
/* 利润明细表：毛利为负的业务整行标红，一眼可见 */
tr.profit-neg{background:var(--danger-l)}
tr.profit-neg:hover{background:#fbdcdc}
tr.profit-neg td:first-child{box-shadow:inset 3px 0 0 var(--danger)}
/* ===== §172 应收已全部收齐：整行浅绿 + 状态列绿字 =====
   与单车毛利表亏损行 tr.profit-neg(--danger-l) 同一套视觉语言，底色取对称的 --ok-l。
   ⚠ td 必须一起上色：.tbl-scroll 里 sticky 的序号列 / 操作列自带白底，
   只给 tr 上色会出现「一行里几格白、几格绿」。 */
tr.ar-settled,tr.ar-settled>td{background:var(--ok-l)}
.tbl-scroll tr.ar-settled>td.tbl-idx,
.tbl-scroll table tr.ar-settled>td.tms-op-col,
.card-bd.flush.tms-scroll-x>table tr.ar-settled>td.tms-op-col{background:var(--ok-l)}
tbody tr.ar-settled:hover,tbody tr.ar-settled:hover>td,
.tbl-scroll tbody tr.ar-settled:hover>td.tbl-idx,
tbody tr.ar-settled:hover>td.tms-op-col{background:#d8f2e5}
tr.ar-settled>td:first-child{box-shadow:inset 3px 0 0 var(--ok)}
/* 状态列里的财务状态绿字：另起一行，不覆盖原业务状态徽标（作业进度不能丢） */
.ar-settled-tag{display:inline-block;margin-top:3px;color:var(--ok);font-size:11px;font-weight:700;line-height:1.25;white-space:nowrap}
.ar-settled-tag::before{content:'✓ '}
/* 新单高亮优先于收齐底色（flashNew 给行临时加 row-flash） */
tr.row-flash,tr.row-flash>td{background:#fff3c4!important}

/* 逐柜录入编辑器 */
.box-add-form{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;background:#f7fafe;border:1px solid var(--line);border-radius:10px;padding:12px;margin:0 0 12px}
.box-add-form .f{display:flex;flex-direction:column;gap:4px;min-width:0}
.box-add-form .f label{font-size:11px;color:var(--muted)}
.box-add-form .f input,.box-add-form .f select{border:1px solid var(--line-2);border-radius:7px;padding:6px 8px;font-size:12px;width:140px}
.box-add-form .addbtn{margin-left:auto}
.box-list-hint{font-size:12px;color:var(--hint);background:#f7fbff;border:1px dashed var(--line-2);border-radius:9px;padding:10px 12px;margin:0 0 10px}

/* 批量录箱归集卡片 */
.bb-ord{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:#fff}
.bb-ord-h{font-size:12.5px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.bb-ord-list{display:flex;flex-wrap:wrap;gap:7px}
.bb-ord-list .hint{padding:2px 0}
.bb-chip{display:inline-flex;align-items:center;gap:6px;background:var(--primary-l);border:1px solid #cfe4f8;border-radius:20px;padding:3px 10px;font-size:11.5px;color:var(--primary-d)}
.bb-chip button{border:0;background:none;color:var(--danger);cursor:pointer;font-size:13px;line-height:1;padding:0 2px}

/* 订单行展开的柜清单子行 */
.sub-tr>td{background:#f8fafc;border-bottom:1px solid var(--line);padding:0 !important}
.sub-wrap{padding:8px 14px 12px 46px}
.sub-wrap table{background:#fff;border:1px solid var(--line);border-radius:8px}
.sub-wrap th{background:#f4f9fe}
.exp{display:inline-block;width:18px;cursor:pointer;color:var(--muted);font-size:11px;user-select:none}
.exp:hover{color:var(--primary)}
.exp.on{color:var(--primary)}

/* 列设置弹窗 */
.col-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.col-item{display:flex;align-items:center;gap:7px;border:1px solid var(--line-2);border-radius:8px;padding:8px 10px;font-size:12.5px;cursor:pointer;background:#fff}
.col-item:hover{border-color:var(--primary)}
.col-item.fixed{background:#f5f9fe;color:var(--hint);cursor:default}

/* 订单表格：横向/纵向滚动 + 首列粘性 */
.tbl-scroll{overflow:auto;max-height:calc(100vh - 320px);-webkit-overflow-scrolling:touch}
.tbl-scroll>table{min-width:100%}
.tbl-scroll thead th{position:sticky;top:0;z-index:3;background:#f4f9fe}
.tbl-scroll th.tbl-idx,.tbl-scroll td.tbl-idx{position:sticky;left:0;z-index:2;background:#fff}
.tbl-scroll thead th.tbl-idx{z-index:4;background:#f4f9fe}
.tbl-scroll tbody tr:hover td.tbl-idx{background:#f7fbff}
/* 货运代理 / 订单管理列表：列宽固定、内容不换行，超宽时靠容器横向滚动（不挤压缩行） */
.tbl-scroll .ff-grid,.tbl-scroll .ord-grid{table-layout:auto;width:auto;min-width:100%}
.tbl-scroll .ff-grid td,.tbl-scroll .ff-grid th,.tbl-scroll .ord-grid td,.tbl-scroll .ord-grid th{white-space:nowrap;vertical-align:middle}
.tbl-scroll .ff-grid td .btn,.tbl-scroll .ff-grid td .badge,.tbl-scroll .ord-grid td .btn,.tbl-scroll .ord-grid td .badge{white-space:nowrap}
/* 表头统一居中（现代数据表惯例：表头居中、文本列左、数字右、短标签居中）；右对齐数字列头保持右对齐 */
.tbl-scroll .ff-grid thead th:not(.t-r),.tbl-scroll .ord-grid thead th:not(.t-r){text-align:center}
/* 极淡网格：竖线帮横向滚动时对齐列，横线分行；不抢眼 */
.tbl-scroll .ff-grid th,.tbl-scroll .ff-grid td,.tbl-scroll .ord-grid th,.tbl-scroll .ord-grid td{border-right:1px solid #eef2fa;border-bottom:1px solid var(--line)}
.tbl-scroll .ff-grid thead th,.tbl-scroll .ord-grid thead th{border-bottom:2px solid var(--line-2)}
.tbl-scroll .ff-grid th.tbl-idx,.tbl-scroll .ff-grid td.tbl-idx,.tbl-scroll .ord-grid th.tbl-idx,.tbl-scroll .ord-grid td.tbl-idx{border-right:1px solid var(--line-2)}
.tbl-idx{white-space:nowrap}

/* 紧凑表格：多列指标表（单车充电效率 / 里程 / 成本）用，压缩词条间距 */
.tbl-tight thead th{padding:6px 8px;font-size:11.5px;letter-spacing:0}
.tbl-tight tbody td{padding:6px 8px;font-size:12px;line-height:1.45}
.tbl-tight .mono{font-size:11.5px}
.tbl-tight .badge{padding:0 6px;font-size:10.5px}

/* 翻页条：固定吸底，随表格窗口一起停在最下方，上下拖动表格时始终可见 */
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line);
  position:sticky;bottom:0;background:var(--panel,#fff);z-index:3}
.pg-info{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.pg-size{width:auto;padding:3px 6px;font-size:12px}
.pg-btns{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.pg{min-width:28px;height:26px;padding:0 8px;border:1px solid var(--line-2);background:#fff;border-radius:6px;font-size:12px;color:var(--ink);cursor:pointer}
.pg:hover{border-color:var(--primary);color:var(--primary)}
.pg.on{background:var(--primary);border-color:var(--primary);color:#fff}
.pg:disabled{opacity:.45;cursor:not-allowed}
.pg-ell{color:var(--hint);padding:0 4px}

/* 列设置：可排序列表 */
.col-list{display:flex;flex-direction:column;gap:6px;max-height:52vh;overflow:auto;padding-right:4px}
.col-row{display:flex;align-items:center;gap:8px;border:1px solid var(--line-2);border-radius:8px;padding:8px 10px;font-size:12.5px;background:#fff}
.col-row.dragging{opacity:.5;border-color:var(--primary)}
.col-row .col-drag{cursor:grab;color:var(--hint);font-size:15px;user-select:none}
/* 列设置弹窗（核销 / 应收核销）：≡ 手柄，整行可拖（10-19 用户：不要只能上下点） */
.col-row[draggable="true"]{cursor:grab}
.col-row[draggable="true"]:active{cursor:grabbing}
.col-row .col-grip{flex:none;cursor:grab;color:var(--hint);font-size:14px;line-height:1;user-select:none;
  -webkit-user-select:none;letter-spacing:-1px}
.col-row-lb{flex:1;display:flex;align-items:center;gap:8px;cursor:pointer}
.col-row .col-mv{display:flex;gap:3px}
/* 列设置 · 列宽（10-19 用户「所有带列设置的都加间距设置」）：
   箱号是 11 位定长，表宽一紧就被 CSS 截成 COSU233162…，右侧却空着 → 交出数字框手动调 */
.col-row .col-w{flex:none;display:flex;align-items:center;gap:3px}
.col-row .col-w .btn{min-width:24px;padding:0 5px;line-height:20px}
.col-row .col-w-in{width:62px;text-align:center;font-variant-numeric:tabular-nums;padding:3px 4px;font-size:12px}
.col-row.fixed{background:#f5f9fe}
.col-row.fixed .col-row-lb{color:var(--hint);cursor:default}

/* 费用逐行编辑 */
.fee-block{margin:10px 0}
.fee-head{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--primary-d);font-weight:500;margin-bottom:6px}
.fee-row{display:flex;gap:8px;margin-bottom:6px;align-items:center}
.fee-row input.fr-name{flex:1;min-width:120px}
.fee-row input.fr-amt{width:120px}
.fee-row .fr-del{flex:0 0 auto}

/* 批量新增订单表格（模块已移除，样式保留待复用） */

/* 只读展示值（弹窗内） */
.static{padding:6.5px 10px;background:#f4f9fe;border:1px solid var(--line);border-radius:8px;color:var(--text);font-size:12.5px}
.static.num{font-variant-numeric:tabular-nums;font-weight:500}
.static.muted{color:var(--muted)}

/* 作业照片管理卡片 */
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.photo-card{border:1px solid var(--line);border-radius:12px;background:var(--panel);overflow:hidden;display:flex;flex-direction:column;transition:border-color .12s,box-shadow .12s}
.photo-card:hover{border-color:var(--primary);box-shadow:var(--shadow)}
.pc-top{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,#eef3fa,#e7eef9)}
.pc-top .mono{font-size:13px;font-weight:500;letter-spacing:.3px}
.pc-sub{padding:8px 12px 0;font-size:12.5px;color:var(--text);display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}
.pc-sub .mono{color:var(--muted);font-size:11.5px}
.pc-meta{padding:3px 12px 0;font-size:11.5px;color:var(--hint)}
.pc-acts{padding:10px 12px;margin-top:auto;display:flex;gap:8px}
.pc-acts .btn{flex:1;justify-content:center}
/* 照片卡片勾选（勾一个柜 / 勾十个八个批量下载 ZIP） */
.photo-card{cursor:pointer;user-select:none}
.photo-card .pc-ck{display:flex;align-items:center;padding:0 2px 0 0}
.photo-card .pc-ck input{width:15px;height:15px;cursor:pointer;accent-color:var(--primary)}
.photo-card .pc-top .mono{margin-right:auto}
.photo-card.on{border-color:var(--primary);box-shadow:inset 0 0 0 1.5px var(--primary)}
.photo-card.on .pc-top{background:linear-gradient(135deg,#e4f1ff,#dceafc)}
.pc-nodes{display:flex;flex-wrap:wrap;gap:4px;padding:6px 12px 0}
.pc-nodes span{font-size:11px;color:var(--muted);background:#eef5fc;border-radius:4px;padding:1px 5px;white-space:nowrap}
/* 卡片头图：司机端真实上传的缩略图（最多并排 3 张），无真图时只留底色 */
.pc-thumb{display:flex;flex-wrap:wrap;gap:4px;background:#e9f2fb;padding:6px;max-height:200px;overflow:auto;position:relative}
.pc-thumb:empty::after{content:"";display:block;width:100%;height:100%;background:repeating-linear-gradient(45deg,#eef6fd,#eef6fd 8px,#e6f0fa 8px,#e6f0fa 16px)}
.pc-thumb img{flex:0 0 calc(33.333% - 3px);height:88px;object-fit:cover;display:block;border-radius:5px;cursor:pointer}
.pc-thumb-n{position:absolute;right:6px;bottom:6px;background:rgba(26,90,160,.62);color:#fff;font-size:10.5px;border-radius:10px;padding:1px 7px}
.pck-all{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--primary-d);cursor:pointer}
.pck-all input{width:15px;height:15px;cursor:pointer;accent-color:var(--primary)}
/* 勾选条随滚动吸顶（.content 是滚动容器，抵消其 18px 上内边距） */
.p-bar{position:sticky;top:-18px;z-index:6;box-shadow:0 6px 14px rgba(24,34,54,.07)}

/* ---------- 往来单位管理 ---------- */
.u-lic{border:1px dashed var(--line-2);border-radius:10px;aspect-ratio:4/3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--hint);font-size:11.5px;cursor:pointer;background:#f7fbff;overflow:hidden;position:relative}
.u-lic:hover{border-color:var(--primary);color:var(--primary);background:#fafcfe}
.u-lic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.u-lic .rm{position:absolute;top:6px;right:6px;z-index:2;background:rgba(26,90,160,.65);color:#fff;border:0;border-radius:6px;padding:2px 8px;font-size:11px;cursor:pointer}
.u-shot{max-width:100%;max-height:60vh;border:1px solid var(--line);border-radius:10px;display:block;margin:0 auto;cursor:zoom-in}
.u-role{display:flex;gap:8px}
.u-role label{flex:1;display:flex;align-items:center;gap:6px;border:1px solid var(--line-2);border-radius:8px;padding:7px 10px;font-size:12.5px;cursor:pointer;background:#fff}
.u-role label.on{border-color:var(--primary);background:var(--primary-l);color:var(--primary-d)}
.u-role input{accent-color:var(--primary)}
/* ---------- 往来单位 · 对接人名单（可多人，10-19） ---------- */
.u-ct-row .plain{height:28px;font-size:12.5px;padding:0 7px}
.u-ct-list{display:flex;flex-direction:column;gap:5px}
.u-ct-item{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;background:#fff}
.u-ct-item .num{color:var(--muted);font-family:var(--mono,monospace);font-size:12px}
/* ---------- 往来单位 · 负责客服多选（10-29） ---------- */
.cs-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.cs-chip{display:inline-flex;align-items:center;background:var(--primary-l,#eef3ff);color:var(--primary-d,#2b4a8b);border:1px solid var(--primary-2,#c9d8f5);border-radius:14px;padding:2px 4px 2px 10px;font-size:12.5px;line-height:1.7}
.cs-chip b{font-weight:700;opacity:.55;cursor:pointer;padding:0 6px;border-radius:10px}
.cs-chip b:hover{opacity:1;background:rgba(0,0,0,.06)}
.cs-pop{position:absolute;z-index:90;top:calc(100% + 3px);left:0;min-width:208px;max-height:248px;overflow:auto;background:#fff;border:1px solid var(--line-2);border-radius:9px;box-shadow:0 10px 26px rgba(24,34,54,.14);padding:4px}
.cs-opt{padding:6px 10px;border-radius:6px;font-size:12.5px;cursor:pointer;display:flex;justify-content:space-between;gap:8px;align-items:center}
.cs-opt:hover{background:var(--primary-l,#eef3ff)}
.cs-empty{padding:10px;color:var(--hint);font-size:12px;text-align:center}

/* ---------- 可检索选择器（客户 / 往来单位）：输入即筛，点选回填 ---------- */
.cb{position:relative;min-width:0}
.cb-in{width:100%;box-sizing:border-box}
/* 下拉箭头：提示这是可检索下拉框（.cb .cb-in 提权以压过 .field input 的 padding） */
.cb .cb-in:not(:disabled){padding-right:30px;background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12'><path d='M2 4l4 4 4-4' fill='none' stroke='%23899' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>") no-repeat right 10px center;background-size:12px}
.cb-list{position:absolute;z-index:120;top:calc(100% + 3px);left:0;right:0;max-height:236px;overflow:auto;background:#fff;border:1px solid var(--line-2);border-radius:9px;box-shadow:0 10px 26px rgba(24,34,54,.14);padding:3px}
/* 面板 portal 到 body 后用 inline 的 position:fixed 覆盖上面这条；以下为面板内部样式 */
.cb-hd{position:sticky;top:0;background:#f6f9fc;color:var(--hint);font-size:11px;padding:5px 9px;border-bottom:1px solid var(--line);z-index:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cb-item{padding:6px 9px;border-radius:6px;cursor:pointer;font-size:12.5px;line-height:1.35;color:var(--text)}
.cb-item b{font-weight:600}
.cb-item span{display:block;color:var(--hint);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cb-item:hover,.cb-item.on{background:#eef6ff}
.cb-item .cb-mute{color:var(--hint);display:inline}
.cb-empty{padding:9px;color:var(--hint);font-size:11.5px;text-align:center}

/* ---------- 费用行栅格：名称固定窄列，收付单位占主宽度（国际货代条目多，名称走标准项目） ---------- */
.fee-line{display:grid;grid-template-columns:168px minmax(170px,1fr) 108px 88px 74px 28px;gap:7px;align-items:center;margin:5px 0}
.fee-line .fee-tax{width:100%}
.fee-ro-line{padding:2px 0}
.fee-ro-line .fee-ro{font-size:12.5px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 对账确认后的锁定提示 */
.lock-bar{display:flex;gap:8px;align-items:flex-start;border:1px solid #d8e6f8;background:#f1f7ff;color:#3f6291;border-radius:10px;padding:9px 12px;font-size:12px;line-height:1.7;margin:10px 0}
.lock-bar svg{flex:0 0 auto;margin-top:2px}
.lock-bar b{color:#2f5178}
.lock-tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#8a6d1f;background:#fdf6e3;border:1px solid #f0e0b8;border-radius:999px;padding:2px 8px}
.fee-row{display:grid!important;grid-template-columns:168px 104px minmax(170px,1fr) 40px 28px;gap:7px;align-items:center;margin:5px 0}
.fee-line .fee-name,.fee-row .fee-name{width:100%}
.fee-line .fee-amt,.fee-row .fee-amt{width:100%}
.fee-line.fee-head{color:var(--hint);font-size:11.5px;margin:2px 0 1px}
.fee-line.fee-head span{padding-left:2px}

/* ---------- 外派车队对账（管理端 + 车队端共用） ---------- */
.tag{display:inline-block;font-size:11px;padding:1px 7px;border-radius:20px;background:#eef4fa;color:var(--muted)}
.vs-steps{display:flex;align-items:center;gap:0;margin:2px 0}
.vs-steps i{display:flex;flex-direction:column;align-items:center;position:relative;flex:1;font-style:normal}
.vs-steps i:before{content:'';position:absolute;top:9px;left:-50%;width:100%;height:2px;background:var(--line-2)}
.vs-steps i:first-child:before{display:none}
.vs-steps i.on:before{background:var(--primary)}
.vs-steps i b{width:19px;height:19px;border-radius:50%;background:#e8f1fa;color:var(--hint);font-size:10.5px;font-weight:600;display:flex;align-items:center;justify-content:center;position:relative;z-index:1}
.vs-steps i.on b{background:var(--primary);color:#fff}
.vs-steps i.bad b{background:var(--danger);color:#fff}
.vs-steps i span{font-size:10.5px;color:var(--hint);margin-top:3px;white-space:nowrap}
.vs-steps i.on span{color:var(--primary-d)}
.vs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px dashed var(--line-2);margin-bottom:9px}
.vs-h-l{font-size:15px;font-weight:600}
.vs-h-r{text-align:right}
.vs-amt{font-size:20px;font-weight:600;color:var(--primary);font-variant-numeric:tabular-nums;margin-bottom:3px}
.vs-sub{font-size:12.5px;font-weight:600;margin:16px 0 7px;padding-left:8px;border-left:3px solid var(--primary)}
.vs-inv{display:grid;grid-template-columns:repeat(3,1fr);gap:9px 14px;background:#f7fafe;border-radius:9px;padding:11px 13px;font-size:12.5px}
.vs-inv span{display:block;font-size:11px;margin-bottom:2px}
.vs-check{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;background:#f7fafe;border-radius:9px;padding:12px 14px;font-size:12.5px}
.vs-check span{display:block;font-size:11px;color:var(--muted);margin-bottom:3px}
.vs-check b{font-size:16px}
.vs-file{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;background:#eef6ff;color:var(--primary-d);border-radius:20px;padding:3px 10px;margin-right:6px}
.vs-file a{color:inherit;text-decoration:none}
.vs-prev{background:#f7fafe;border-left:3px solid var(--primary);border-radius:0 8px 8px 0;padding:10px 13px;font-size:12.5px}
.vs-timeline{position:relative;padding-left:4px}
.vs-tl{display:flex;gap:9px;padding:0 0 11px;position:relative}
.vs-tl i{width:7px;height:7px;border-radius:50%;background:var(--primary);margin-top:5px;flex:none;position:relative;z-index:1}
.vs-tl:not(:last-child):after{content:'';position:absolute;left:3px;top:12px;bottom:0;width:1px;background:var(--line-2)}
.vs-tl div{font-size:12.5px;line-height:1.5}

/* ---------- 货运代理：货物明细 / 单证附件（2026-10-17） ---------- */
.cargo-row{display:grid;grid-template-columns:minmax(180px,1fr) 210px 30px;gap:7px;align-items:center;margin:5px 0}
.cargo-row .cg-hs{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.2px}
.att-chips{display:inline-flex;gap:3px;align-items:center}
.att-chip{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;padding:0 4px;border-radius:5px;font-size:10.5px;font-style:normal;background:#eef5fd;color:#9aa6b5;border:1px solid transparent}
.att-chip.on{background:#e6f2ff;color:var(--primary-d);border-color:#cfe4fb;font-weight:600}
.att-chip.cnt{background:#f4f6f9;color:var(--muted);font-weight:600;margin-left:2px}
.att-kind{display:inline-block;font-size:10.5px;line-height:1.6;padding:0 7px;border-radius:20px;white-space:nowrap}
.att-kind.k-tuo{background:#eaf4ff;color:#1a5fb4}
.att-kind.k-box{background:#eef9ee;color:#1d7a3c}
.att-kind.k-decl{background:#fff4e8;color:#9a5b00}
.att-kind.k-list{background:#f3eeff;color:#5b3fa8}
.att-kind.k-bl{background:#e8f7f6;color:#14706b}
.att-kind.k-other{background:#f1f3f6;color:#66707d}
.att-nm{font-size:12.5px;word-break:break-all}
.att-nm.has{color:var(--primary-d);cursor:pointer;text-decoration:underline dotted}
.att-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.att-tools select{min-width:118px}
.att-line{display:flex;gap:8px;align-items:center;flex-wrap:wrap;border-bottom:1px dashed var(--line-2);padding:5px 0}
.att-line .att-nm{flex:1;min-width:160px}
.att-table td,.att-table th{padding:6px 8px}


/* ========== 承运单（后台订单管理导出 / 打印，与供应商端同一版式） ========== */
.wb{background:#fff;padding:16px 18px;font-size:12.5px;color:#1b1f26;border-radius:8px}
.wb-hd{display:flex;align-items:flex-start;justify-content:space-between;border-bottom:2px solid #1b1f26;padding-bottom:9px;margin-bottom:11px}
.wb-t{font-size:19px;font-weight:700;letter-spacing:2px}
.wb-s{font-size:11.5px;color:#6b7280;margin-top:3px}
.wb-qr{text-align:center;flex:0 0 auto;margin-left:12px}
.wb-qrbox{width:132px;height:132px;background:#fff}
.wb-qrc{font-family:ui-monospace,Menlo,monospace;font-size:11px;margin-top:3px;letter-spacing:.5px}
.wb-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid #d5dae1;border-radius:6px;overflow:hidden}
.wb-c{display:flex;border-bottom:1px solid #eaf2fa;min-height:30px}
.wb-c.span2{grid-column:span 2}
.wb-c span{flex:0 0 76px;background:#f6f8fa;color:#5d7186;padding:6px 8px;font-size:11.5px;border-right:1px solid #eaf2fa}
.wb-c b{flex:1;padding:6px 9px;font-weight:600;font-size:12.5px;min-width:0;word-break:break-all}
.wb-note{margin-top:9px;font-size:12px;color:#5d7186}
.wb-tip{margin-top:9px;font-size:11px;color:#9aa1ad;line-height:1.7}
.wb-sign{display:flex;justify-content:space-between;margin-top:16px;font-size:12px;color:#39414d}
.wb-page{border-bottom:2px dashed #d5dae1;padding-bottom:14px;margin-bottom:14px}
.wb-page:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}
/* 打印：只留承运单（modal 挂在 body 下，主内容整体隐藏） */
@media print{
  body.wb-on .app > .main > *{display:none!important}
  body.wb-on .app > .sidebar{display:none!important}
  body.wb-on .modal-mask{position:static;background:#fff;display:block;padding:0}
  body.wb-on .modal{width:100%;max-width:none;margin:0;box-shadow:none;border-radius:0}
  body.wb-on .modal-hd,body.wb-on .modal-ft{display:none!important}
  body.wb-on .modal-bd{padding:0;max-height:none;overflow:visible}
  body.wb-on .wb-page{page-break-after:always;border-bottom:0}
  body.wb-on .wb-page:last-child{page-break-after:auto}
}

/* 结算中心 · 应收对账明细表：表头拖拽换列序 */
.col-dd th[draggable="true"]{cursor:grab}
.col-dd th[draggable="true"]:active{cursor:grabbing}
.col-dd th.col-dragging{opacity:.4}
.col-dd th.col-over{box-shadow:inset 2px 0 0 var(--primary)}

/* 订单管理（按订单/按柜）表头拖拽换列序：与「列设置」共用 ctms_colcfg */
#oTable thead th.th-drag{cursor:grab;user-select:none}
#oTable thead th.th-drag:active{cursor:grabbing}
#oTable thead th.th-dragging{opacity:.4}
#oTable thead th:hover .th-grip{opacity:.6}


/* ==========================================================================
   2026-10-17 视觉改版：白底 + 浅蓝；订单管理紧凑化（一屏更多信息、少横移）
   ========================================================================== */

/* ---- 全局留白收紧 ---- */
.content{padding:12px 14px 30px}
.card{margin-bottom:12px}
.card-hd{padding:10px 14px}
.card-bd{padding:12px 14px}
.toolbar{gap:7px;margin-bottom:9px}
.toolbar.qbar{padding:7px 9px;margin-top:-3px}
.note{font-size:11.5px;line-height:1.6;padding:6px 10px;margin-bottom:8px}
.kpi-grid{gap:10px;margin-bottom:12px}
.kpi{padding:11px 13px}
.kpi-value{font-size:21px}
.pager{padding:7px 12px}
.p-bar{top:-12px}
.batch-bar{padding:6px 10px;margin:0 14px 9px}
.tbl-scroll{max-height:calc(100vh - 236px)}

/* ---- 订单管理：表头/单元格收紧 ---- */
#oTable thead th{padding:6px 7px;font-size:11.5px;line-height:1.35}
#oTable tbody td{padding:4.5px 7px;font-size:12px;line-height:1.4}
#oTable .mono{font-size:11.5px;letter-spacing:0}
#oTable .badge{padding:0 6px;font-size:10.5px;line-height:1.7}
#oTable .plate{padding:0 4px;font-size:10.5px}
#oTable .hint{font-size:10.5px}
#oTable .exp{width:14px;margin-right:1px}
#oTable .sub-wrap{padding:6px 10px 9px 34px}
#oTable .sub-wrap th{padding:5px 8px;font-size:11px}
#oTable .sub-wrap td{padding:4px 8px;font-size:11.5px}
#oTable tbody td{overflow:hidden}

/* ---- 订单管理：列宽整体压缩 16%，减少左右横移 ----
   （按 th 的内联宽度精确匹配，不影响其它页面的表格） */
#oTable th[style="width:34px"]{width:34px!important}
#oTable th[style="width:42px"]{width:35px!important}
#oTable th[style="width:58px"]{width:49px!important}
#oTable th[style="width:62px"]{width:52px!important}
#oTable th[style="width:76px"]{width:64px!important}
#oTable th[style="width:82px"]{width:69px!important}
#oTable th[style="width:84px"]{width:71px!important}
#oTable th[style="width:86px"]{width:72px!important}
#oTable th[style="width:92px"]{width:77px!important}
#oTable th[style="width:96px"]{width:81px!important}
#oTable th[style="width:100px"]{width:84px!important}
#oTable th[style="width:104px"]{width:87px!important}
#oTable th[style="width:112px"]{width:94px!important}
#oTable th[style="width:116px"]{width:97px!important}
#oTable th[style="width:126px"]{width:106px!important}
#oTable th[style="width:128px"]{width:108px!important}
#oTable th[style="width:130px"]{width:109px!important}
#oTable th[style="width:132px"]{width:111px!important}
#oTable th[style="width:138px"]{width:116px!important}
#oTable th[style="width:140px"]{width:118px!important}
#oTable th[style="width:144px"]{width:121px!important}
#oTable th[style="width:148px"]{width:124px!important}
#oTable th[style="width:150px"]{width:126px!important}
#oTable th[style="width:156px"]{width:131px!important}
#oTable th[style="width:158px"]{width:133px!important}
#oTable th[style="width:170px"]{width:143px!important}

/* ---- 订单管理：长文本单行截断，行高从 4 行压到 2 行 ---- */
#oTable tbody td{white-space:nowrap;text-overflow:ellipsis}
#oTable tbody td .hint{white-space:nowrap}

/* ==========================================================================
   2026-10-17 16:xx 二次调整：
   1) 修复订单表格内 Combo 下拉被 td overflow:hidden 裁剪（承运方/车号无法模糊查询）
   2) 护眼配色：白底亮蓝 → 浅豆沙绿灰底 + 沉稳蓝，降低整体亮度
   ========================================================================== */

/* ---- 1) 修复：单元格进入编辑（含 Combo 下拉）时放开裁剪 ---- */
#oTable tbody td:has(.cb){overflow:visible;text-overflow:clip}
#oTable .sub-wrap td:has(.cb){overflow:visible}
#oTable tbody td:has(.iebar){overflow:visible}
.cb-list{box-shadow:0 10px 26px rgba(23,58,148,.18)}

/* ---- 2) 主题色板（2026-10-18 现代深蓝：与客户门户登录页同源 #1e40af→#2563eb→#3b82f6） ---- */
:root{
  --bg:#f3f6fc; --panel:#ffffff; --line:#e4eaf6; --line-2:#cdd9f0;
  --text:#1b2540; --muted:#5a6b8c; --hint:#93a0bf;
  --primary:#2563eb; --primary-d:#1d4ed8; --primary-l:#e9effd;
  --ok:#15803d; --ok-l:#e8f7ee; --warn:#b45309; --warn-l:#fdf3e3;
  --danger:#dc2626; --danger-l:#fdeeee; --purple:#6d5bd0; --purple-l:#efedfd;
  --shadow:0 1px 2px rgba(30,64,175,.06),0 6px 18px rgba(30,64,175,.08);
}
thead th,.tbl-scroll thead th{background:#eef3fe}
.tbl-scroll th.tbl-idx,.tbl-scroll td.tbl-idx{background:var(--panel)}
.tbl-scroll thead th.tbl-idx{background:#eef3fe}
tbody td{border-bottom-color:#eaeff9}
tbody tr:hover{background:#f5f8ff}
.cb-item:hover,.cb-item.on{background:#e9effd}
.toolbar.qbar{background:#f4f7fe;border-color:var(--line)}
.qbar .qtag{color:var(--primary-d);background:var(--primary-l);border-color:#cbd9f5}
.lock-bar{border-color:#d6e0f5;background:#f0f5fe;color:#3b5bb0}
.lock-bar b{color:#2c4a9e}
.btn-primary{background:var(--primary)}
.btn-primary:hover{background:var(--primary-d)}

/* ===== 结算中心 · 对账明细（固定窗口 + 紧凑行距，与订单管理同款密度） =====
   .tbl-scroll 提供表头吸顶 + 区内滚动；这里只是把可用高度按「KPI + 检索条 + tabs」扣掉 */
#sBody .tbl-scroll{max-height:calc(100vh - 404px);min-height:240px}
#sBody .tbl-scroll thead th{padding:6px 7px;font-size:11.5px;line-height:1.35;white-space:nowrap}
#sBody .tbl-scroll tbody td{padding:4.5px 7px;font-size:12px;line-height:1.4}
#sBody .tbl-scroll .mono{font-size:11.5px;letter-spacing:0}
#sBody .tbl-scroll .badge{padding:0 6px;font-size:10.5px;line-height:1.7}
#sBody .tbl-scroll .btn-sm{padding:2px 6px;font-size:11px}
#sBody .tbl-scroll .fee-tax{font-size:11.5px;padding:2px 4px}
#sBody .tbl-scroll thead th[draggable="true"]{cursor:grab;user-select:none}
#sBody .tbl-scroll thead th[draggable="true"]:active{cursor:grabbing}
#sBody .tbl-scroll thead th.col-over{box-shadow:inset 2px 0 0 var(--primary)}
#sBody .pager{padding:2px 4px 0}

/* ===== 21:55 订单模块：编辑/新增订单弹窗加宽档位 =====
   12 柜清单 12+ 列在 wide(1000px) 里挤不下；新增 xwide 档（1280px，随视口收缩），
   仅 views-core.js 编辑/新增订单弹窗使用，不影响其他 size:'wide' 弹窗 */
.modal.xwide{width:min(var(--modal-xw,1200px),calc(100vw - 56px))}
/* 货运代理单（编辑 / 详情 / 箱号 / 转拖车）：费用表格列多，专属更宽弹窗，避免横向滚动 */
.modal.ffwide{width:min(1360px,calc(100vw - 36px))}

/* ===== 22:55 全局视觉精修层（只调观感、不动布局密度；全部用 var() 适配护眼主题） ===== */
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
/* 侧栏：品牌区更挺括，导航更聚焦 */
.brand{padding:14px 14px 12px}
.brand-mark{box-shadow:0 3px 9px rgba(42,127,212,.32)}
.brand-name{font-weight:600}
.nav-item{margin:1px 0;border-radius:9px}
.nav-item.active{font-weight:600}
.nav-item .ic{transition:transform .15s}
.nav-item:hover .ic{transform:scale(1.12)}
.sidebar-foot{background:linear-gradient(180deg,transparent,rgba(42,127,212,.04))}
/* 顶栏：轻投影分隔 */
.topbar{box-shadow:0 1px 0 var(--line),0 2px 10px rgba(26,90,160,.04)}
/* 卡片与 KPI：柔和投影 + 悬停微反馈 */
.card{box-shadow:var(--shadow)}
.card-hd h3{font-weight:600}
.kpi{overflow:hidden;transition:box-shadow .15s ease,transform .15s ease}
.kpi:hover{box-shadow:0 10px 24px rgba(26,90,160,.13);transform:translateY(-1px)}
.kpi-value{font-weight:600;letter-spacing:-.2px}
.kpi-accent{top:0;bottom:0;width:4px;border-radius:0 0 3px 3px}
/* 按钮：主按钮微渐变 + 按压反馈 */
.btn-primary{background:linear-gradient(180deg,color-mix(in srgb,var(--primary) 92%,#fff),var(--primary));box-shadow:0 2px 7px rgba(42,127,212,.26)}
.btn-primary:hover{color:#fff}
.btn:active{transform:translateY(1px)}
.btn-danger{border-color:var(--danger);color:var(--danger)}
/* 表格：表头字重与行悬停更清晰 */
thead th{font-weight:600;letter-spacing:.2px}
tbody tr{transition:background .1s}
/* 徽标轻微加重 */
.badge{font-weight:500}
/* 弹窗更柔和 */
.modal{box-shadow:0 18px 50px rgba(16,24,40,.22)}

/* ===== 23:05 调度台·派车总览：空闲车辆明细小卡 ===== */
.ov-veh{display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;background:var(--bg2,#f5f8fb);border:1px solid var(--line);border-radius:8px;padding:5px 9px;line-height:1.4;min-width:132px}
.ov-veh:hover{border-color:var(--primary)}
.ov-veh .plate{font-size:12.5px}
.ov-veh .hint{font-size:10.5px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ===== 2026-10-20 调度台·派车总览改版：左右两块（当日 | 明日），一级=省市区 二级=工厂 ===== */
.ov-split{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
@media (max-width:1180px){.ov-split{grid-template-columns:1fr}}
.ov-side{border:1px solid var(--line);border-radius:10px;background:var(--bg2,#f5f8fb);padding:10px 12px 12px;min-width:0}
.ov-side-hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:8px;border-bottom:1px dashed var(--line)}
.ov-side-hd b{font-size:13.5px}
.ov-d{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.ov-sum{margin-left:auto;font-size:11.5px;color:var(--muted)}
.ov-bt{display:flex;flex-wrap:wrap;gap:4px;padding:8px 0 2px}
.ov-empty{padding:16px 0;text-align:center;color:var(--muted);font-size:12px}
/* 一级：省 + 市 + 地级区 */
.ov-city{margin-top:10px;border-top:1px solid var(--line);padding-top:8px}
.ov-city-hd{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ov-city-nm{font-size:12.5px;font-weight:600;color:var(--text);margin-right:auto}
/* 二级：工厂（门点） */
.ov-fac{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:4px 0 0 12px;padding:4px 8px;background:var(--bg,#fff);border:1px solid var(--line);border-left:2px solid var(--primary);border-radius:6px}
.ov-fac-nm{font-size:12px;max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ov-fac-n{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.ov-fac-bt{display:flex;flex-wrap:wrap;gap:3px}
/* 底部自有空闲车辆区 */
.ov-own{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}

/* ===== 2026-10-20 调度台·派车总览：今日/明日总数 + 湖北门点统计 + 筛选分页 ===== */
/* ① 一眼看清：今天 / 明天 各多少任务（两张大数字卡） */
.ov-tot{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}
.ov-tot-item{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:var(--bg,#fff);display:flex;flex-direction:column;gap:4px}
.ov-tot-today{border-left:3px solid var(--primary)}
.ov-tot-tmr{border-left:3px solid var(--warn)}
.ov-tot-lab{font-size:12px;color:var(--muted);font-weight:600;letter-spacing:.3px}
.ov-tot-num{font-size:30px;line-height:1;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.ov-tot-d{font-size:11.5px;color:var(--muted)}
/* 今天/明天卡：各城市计划数 / 箱型 / 各客户下单量 三行明细 */
.ov-tot-line{display:flex;align-items:flex-start;gap:5px;font-size:11px;color:var(--text);line-height:1.5;border-top:1px dashed var(--line);padding-top:5px}
.ov-tot-line .lab{flex:none;color:var(--muted);font-size:10.5px}
.ov-tot-line span:not(.lab){color:var(--text)}
/* ② 湖北门点统计区 */
/* 7 天看板（10-29）：顶部 7 张日卡，今天居中高亮，选中态填充 */
.ov-tot-week{grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:0}
/* 7 天看板翻页导航（10-29） */
.ov-weekwrap{margin-bottom:14px}
.ov-week-nav{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.ov-wk-btn{padding:3px 12px;font-size:12px;white-space:nowrap}
.ov-wk-range{flex:1;text-align:center;font-size:13px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:.3px}
.ov-wk-today{margin-left:auto}
.ov-day{border:1px solid var(--line);border-radius:10px;padding:10px 6px;background:var(--bg,#fff);display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;transition:.15s;min-width:0}
.ov-day:hover{border-color:var(--primary);box-shadow:0 2px 8px rgba(0,0,0,.06)}
.ov-day-past{opacity:.7}
.ov-day-hd{font-size:12px;color:var(--muted);font-weight:600;display:flex;align-items:center;gap:4px;white-space:nowrap}
.ov-day-tag{background:var(--primary);color:#fff;border-radius:4px;font-size:10px;padding:0 4px;line-height:15px;font-weight:600}
.ov-day-d{font-size:11px;color:var(--muted);white-space:nowrap}
.ov-day-num{font-size:25px;line-height:1.05;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.ov-day-sub{font-size:10.5px;color:var(--muted);white-space:nowrap}
.ov-day-un{color:var(--danger)}
.ov-day-today{border-color:var(--primary);background:#eef4ff}
.ov-day-today .ov-day-num{color:var(--primary)}
.ov-day-sel{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary) inset;background:#e3edff}
@media(max-width:900px){.ov-tot-week{grid-template-columns:repeat(4,1fr)}.ov-day-num{font-size:22px}}
.ov-facs{margin-top:4px}
.ov-fac-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;padding:9px 12px;background:var(--bg2,#f5f8fb);border:1px solid var(--line);border-radius:8px}
.ov-fac-filter label{font-size:11.5px;color:var(--muted)}
.ov-fac-filter select{min-width:110px}
/* 门点卡片网格：一行 6 张 × 3 行 = 18 张/页，卡片压缩（紧凑占一半空白）；宽屏 6 列、中屏 3 列、窄屏 2 列 */
.ov-fac-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
@media (max-width:1500px){.ov-fac-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:900px){.ov-fac-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.ov-fac-card{border:1px solid var(--line);border-radius:8px;background:var(--bg,#fff);padding:7px 9px;display:flex;flex-direction:column;gap:5px;min-width:0}
.ov-fac-card:hover{border-color:var(--primary)}
.ov-fac-hd{display:flex;align-items:center;gap:5px;flex-wrap:wrap;line-height:1.3}
.ov-fac-hd b{font-size:12.5px;color:var(--text)}
.ov-fac-fac{font-size:9.5px}
.ov-fac-nums{display:flex;flex-direction:column;gap:3px}
/* 单日行锁死为 4 列：[今天][计划数][计划·箱型 可省略][已/未 固定右列]。
   各列 nowrap → 中文不再逐字竖排；中列 minmax(0,1fr)+省略号兜住长箱型；已/未永远靠右。 */
.ov-fac-n{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:5px;font-size:11px;white-space:nowrap}
.ov-fac-n .lab{color:var(--muted);font-size:10.5px;white-space:nowrap}
.ov-fac-n b{font-size:12.5px;color:var(--text);font-variant-numeric:tabular-nums;min-width:14px;text-align:right}
.ov-fac-mid{min-width:0;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:10.5px}
.ov-fac-ar{display:inline-flex;gap:6px;justify-content:flex-end;white-space:nowrap;font-variant-numeric:tabular-nums}
.ov-fac-ar i{font-style:normal;font-size:11px}
.ov-fac-ar .ov-ok{color:var(--ok)}
.ov-fac-ar .ov-dg{color:var(--danger)}
.ov-fac-custs{display:flex;align-items:flex-start;gap:4px;flex-wrap:wrap;font-size:10.5px;color:var(--text);border-top:1px dashed var(--line);padding-top:5px;line-height:1.4}
.ov-fac-custs .lab{flex:none;color:var(--muted);font-size:10.5px}
/* 门点卡：箱型 + 客户下单量 */
.ov-fac-box{font-weight:400}
.ov-fac-cust{border-top:1px dashed var(--line);padding-top:5px;display:flex;flex-direction:column;gap:2px}
.ov-fac-custrow{display:flex;align-items:center;gap:5px;font-size:10.5px}
.ov-fac-custn{margin-left:auto;color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}
/* 门点卡（地市）内列「区县 → 门点」明细 */
.ov-fac-dist{border-top:1px dashed var(--line);padding-top:5px;display:flex;flex-direction:column;gap:2px}
.ov-fac-distrow{display:flex;align-items:center;gap:5px;font-size:10.5px;line-height:1.4}
.ov-fac-dname{flex:none;color:var(--text);font-weight:600}
.ov-fac-distrow .hint{font-size:10px}
/* 门点卡可点击：点城市词条弹出订单明细悬浮浮层 */
.ov-fac-card{cursor:pointer}
.ov-fac-card .ov-fac-hd b::after{content:'▸';margin-left:6px;font-size:10px;color:var(--muted)}
.ov-fac-card.expanded{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary) inset}
.ov-fac-card.expanded .ov-fac-hd b::after{content:'▾';color:var(--primary)}
/* 城市订单明细·悬浮浮层（点击城市词条弹出，不挤占栅格） */
.ov-float-mask{position:fixed;inset:0;z-index:900;display:none}
.ov-float-mask.show{display:block}
/* 浮层固定屏幕居中（10-21 用户拍板）：fixed + left/top 50% + translate(-50%,-50%)；
   遮罩已是 fixed inset:0(z900)，点遮罩/×/空白收起。祖先链无 transform（.app 是 grid），fixed 相对视口。 */
.ov-float{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:901;width:900px;max-width:calc(100vw - 24px);max-height:82vh;overflow:auto;background:var(--bg,#fff);border:1px solid var(--line);border-radius:10px;box-shadow:0 18px 50px rgba(16,24,40,.22);padding:0;display:none}
.ov-float.show{display:block}
.ov-float-hd{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg,#fff);z-index:1}
.ov-float-hd b{font-size:13px;color:var(--text)}
.ov-float-hd .hint{font-size:11px}
.ov-float-x{margin-left:auto;background:none;border:0;cursor:pointer;font-size:18px;line-height:1;color:var(--muted);padding:0 4px}
.ov-float-x:hover{color:var(--text)}
.ov-float-bd{padding:10px 14px}
/* 浮层内订单明细行：今天/明天分组，每单可派车/改派/取消 */
.ov-cp-hd{font-size:11px;color:var(--muted);margin:4px 0 6px;font-weight:600}
.ov-cp-day{margin-bottom:10px}
.ov-cp-day:last-child{margin-bottom:0}
.ov-cp-daylab{font-size:11.5px;font-weight:600;margin-bottom:6px;padding:2px 8px;border-radius:4px;display:inline-block}
.ov-cp-daylab.t{background:#eef4ff;color:var(--primary)}
.ov-cp-daylab.m{background:#fff6e8;color:var(--warn)}
/* 浮层内订单明细行：横版一行六区（10-21 用户拍板）——订单/门点/车队/车牌/司机/动态+操作，
   grid 列宽固定保证车队、车牌、司机每单都占位可见（外派柜一眼看到派给哪个车队） */
.ov-cp-row{display:grid;grid-template-columns:112px minmax(140px,1fr) 96px 86px 110px 66px auto;align-items:center;gap:4px 10px;padding:7px 10px;border:1px solid var(--line);border-radius:6px;margin-bottom:5px;background:var(--bg2,#f5f8fb);font-size:12px}
.ov-cp-row:last-child{margin-bottom:0}
.ov-cp-row.ov-cp-headrow{background:none;border:0;border-radius:0;padding:0 10px 3px;margin-bottom:4px;color:var(--muted);font-size:11px;font-weight:600}
.ov-cp-c{min-width:0}
.ov-cp-c b{font-family:var(--mono,monospace);font-size:11.5px;font-weight:600;display:block;line-height:1.35}
.ov-cp-c i{font-style:normal;color:var(--muted);font-size:10.5px;display:block;line-height:1.3}
.ov-cp-facline{display:flex;align-items:center;gap:4px;min-width:0}
.ov-cp-fac{font-weight:600;color:var(--text);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ov-cp-sub{color:var(--muted);font-size:10.5px;display:block;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ov-cp-sub.ov-cp-city{color:var(--primary);background:#eef4ff;border-radius:3px;padding:0 5px;display:inline-block;width:auto}
.ov-cp-self{font-size:11.5px;color:var(--muted)}
.ov-cp-unrec{font-size:10px;color:var(--warn);background:#fdf3e3;border-radius:3px;padding:0 4px;cursor:help;flex:none}
.ov-cp-addr{color:var(--muted);font-size:11px}
.ov-cp-city{font-size:10.5px;color:var(--primary);background:#eef4ff;border-radius:3px;padding:0 5px}
.ov-cp-tel{color:var(--muted);font-size:11px}
.ov-cp-no{font-family:var(--mono,monospace);font-size:11.5px}
.ov-cp-acts{display:flex;gap:5px;justify-content:flex-end}
.ov-cp-acts button{font-size:11px;padding:3px 10px;white-space:nowrap}
.ov-cp-empty{font-size:12px;color:var(--muted);padding:6px 2px}
/* 窄屏（<960px）横版放不下时：门点列让位、车队/车牌/司机压缩，保持单行不拆 */
@media (max-width:960px){
  .ov-float{width:calc(100vw - 24px)}
  .ov-cp-row{grid-template-columns:96px minmax(90px,1fr) 76px 72px 88px 56px auto;gap:4px 6px}
}
/* ③ 自有车辆安排看板（短挂/长挂两栏 → 栏内双驱/单驱分组 → 组内四/五/六轴排序；每车标签 车号+司机+轴数+长短挂+驱动形式；今/明哪天派了哪天亮色，都没派=灰） */
/* 10-22 车辆看板改「驱动×长短挂」整行铺开（原短挂/长挂两栏 .ov-veh-cols/.ov-vehcol 已废弃删除） */
.ov-vehgrp{margin-bottom:10px}
.ov-vehgrp:last-child{margin-bottom:0}
.ov-vehgrp-hd{font-size:12px;font-weight:600;color:var(--muted);margin-bottom:6px;display:flex;align-items:center;gap:6px}
.ov-vehgrp-hd::before{content:'';width:3px;height:11px;border-radius:2px;background:var(--primary)}
.ov-vehboard{display:flex;flex-wrap:wrap;gap:6px}
.ov-vehtag{display:inline-flex;flex-direction:column;gap:1px;background:var(--bg,#fff);border:1px solid var(--line);border-left:3px solid var(--muted);border-radius:6px;padding:4px 8px;min-width:138px;line-height:1.35}
.ov-vehtag b{font-size:12px}
.ov-vehtag-name{font-size:10.5px;color:var(--text)}
.ov-vehtag-tel{font-size:9.5px;color:var(--muted);margin-left:4px;font-variant-numeric:tabular-nums}
/* ④ 供应商车辆看板（检索底座+显示自选，10-22 用户拍板）：独立于自有/挂靠看板 */
.ov-sup{border:1px solid var(--line);border-radius:8px;background:var(--bg2,#f5f8fb);padding:10px 12px;margin-top:12px}
.ov-sup-hd{display:flex;align-items:flex-start;gap:10px;justify-content:space-between;margin-bottom:8px}
.ov-sup-hd .hint{flex:1;min-width:0;line-height:1.6}
.ov-sup .ov-vehtag{position:relative}
.ov-sup-x{position:absolute;top:3px;right:4px;font-size:11px;line-height:1;color:var(--danger);cursor:pointer;opacity:.4;padding:1px 2px}
.ov-sup-x:hover{opacity:1}
.sup-add-sug{max-height:180px;overflow:auto;margin-top:4px;border:1px solid var(--line);border-radius:6px;background:var(--bg,#fff)}
.sup-add-sug:empty{display:none}
.sup-add-sug-it{display:flex;align-items:center;gap:8px;padding:5px 9px;cursor:pointer;font-size:12.5px;border-bottom:1px solid var(--line)}
.sup-add-sug-it:last-child{border-bottom:none}
.sup-add-sug-it:hover{background:var(--bg2,#f5f8fb)}
.sup-add-sug-it .hint{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sup-add-sug-on{color:var(--muted);font-size:10.5px;border:1px solid var(--line);border-radius:4px;padding:0 4px}
.ov-sup-grp{margin-top:6px}
.ov-sup-grp-hd{font-size:12px;font-weight:600;color:var(--text);margin-bottom:5px}
.ov-sup-board{display:flex;flex-wrap:wrap;gap:6px}
/* 供应商卡顶部供应商名称 */
.ov-sup-tag{font-size:10px;color:#fff;background:var(--accent,#7a5cff);border-radius:4px;padding:0 5px;align-self:flex-start;margin-bottom:1px}
.ov-vehtag-ax{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.ov-vehtag-d{display:flex;gap:6px;font-size:10px;font-variant-numeric:tabular-nums;margin-top:1px}
.ov-vehday{color:var(--muted);padding:0 4px;border-radius:4px}
.ov-vehday.on{color:#fff;background:var(--primary);font-weight:600}
/* 今天派了=蓝底、明天派了=琥珀底、都没派=灰 */
.ov-vehtag-d1{border-left-color:var(--primary);background:#eef4ff}
.ov-vehtag-d2{border-left-color:var(--warn);background:#fff6e8}
.ov-vehtag-idle{border-left-color:#c8ccd2;background:#f1f3f5;opacity:.9}
.ov-vehtag-idle b{color:var(--muted)}
/* 分页条 */
.ov-pager{display:flex;align-items:center;gap:8px;justify-content:center;padding:12px 0 2px}
.ov-pager button:disabled{opacity:.4;cursor:not-allowed}

/* ==========================================================================
   2026-10-18 全端主题统一：现代深蓝（客户门户登录页同源色系）
   #1e40af → #2563eb → #3b82f6 ｜ 深蓝渐变侧栏 + 白卡片 + 蓝晕背景
   ========================================================================== */

/* ---- 页面底色：极浅蓝灰 + 右上蓝晕（与客户门户 body 同款手法） ---- */
body{background:radial-gradient(1100px 520px at 85% -8%,#e3ecfb 0%,rgba(227,236,251,0) 55%),var(--bg)}

/* ---- 侧栏：深蓝渐变 + 白字导航（品牌面板质感） ---- */
.sidebar{background:linear-gradient(178deg,#1b2f7e 0%,#1e40af 52%,#2456d9 125%);border-right:0;position:relative}
.sidebar::after{content:'';position:absolute;right:-70px;top:-70px;width:210px;height:210px;border-radius:50%;background:rgba(255,255,255,.06);pointer-events:none}
.brand{background:none;border-bottom:1px solid rgba(255,255,255,.14);position:relative;z-index:1}
.brand-mark{background:linear-gradient(135deg,#3b82f6,#7fb0f7);box-shadow:0 4px 12px rgba(10,25,80,.45)}
.brand-name{color:#fff}
.brand-sub{color:rgba(255,255,255,.55)}
.nav{position:relative;z-index:1}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18)}
.nav-title{color:rgba(255,255,255,.38)}
.nav-item{color:rgba(255,255,255,.74)}
.nav-item:hover{background:rgba(255,255,255,.10);color:#fff}
.nav-item.active{background:rgba(255,255,255,.16);color:#fff;box-shadow:inset 2.5px 0 0 #93c5fd}
.nav-item.active .dot{background:#fff;color:#1d4ed8}
.sidebar-foot{border-top:1px solid rgba(255,255,255,.14);color:rgba(255,255,255,.55);position:relative;z-index:1}
.sidebar-foot button{color:#93c5fd}
.sidebar-foot b{color:#fff}

/* ---- 顶栏：白底毛玻璃轻投影 ---- */
.topbar{background:rgba(255,255,255,.86);backdrop-filter:blur(10px)}
.topbar h1{font-weight:600;letter-spacing:.2px}

/* ---- 卡片/KPI/弹窗：蓝色系投影 ---- */
.card{border-color:#e4eaf6}
.kpi:hover{box-shadow:0 10px 26px rgba(30,64,175,.14)}
.brand-mark{box-shadow:0 4px 12px rgba(10,25,80,.45)}

/* ---- 滚动条 / 表单聚焦：蓝色统一 ---- */
::-webkit-scrollbar-thumb{background:#c6d4ee}
::-webkit-scrollbar-thumb:hover{background:#a9bde6}
input:focus,select:focus,textarea:focus{outline:none;border-color:#7ea4f2 !important;box-shadow:0 0 0 3px rgba(37,99,235,.13)}

/* ---- 主按钮：亮蓝渐变（客户门户 .btn.primary 同源） ---- */
.btn-primary{background:linear-gradient(180deg,#3b82f6,#2563eb);border-color:#1d4ed8;color:#fff;box-shadow:0 3px 10px rgba(37,99,235,.28)}
.btn-primary:hover{background:linear-gradient(180deg,#2f6fe6,#1d4ed8);color:#fff}

/* ---- 徽标 / 表头微调 ---- */
.badge{letter-spacing:.2px}
thead th{color:#3d4c6b}

/* 订单弹窗「显示说明文字」开关：只隐藏描述性 hint（.f-tips），不影响状态提示（如 已生成 N 条） */
#oGrid.no-tips .f-tips{display:none}

/* ---------- 行内修改「保存修改」按钮（订单管理，紧挨搜索键） ----------
   10-20 用户拍板：删掉页面底部的「有 N 处修改未保存」悬浮条，只留工具栏这一个入口。
   没有待保存修改时置灰（disabled），有待保存时高亮为 primary 并带处数。 */
.btn.ie-save:disabled{opacity:.45;cursor:not-allowed}
.btn.ie-save:not(:disabled){font-weight:600}

/* ================= 删除守卫 · 业务痕迹清单（2026-10-19） ================= */
.tg-wrap{font-size:13px;line-height:1.7;color:var(--tx)}
.tg-hd{padding:9px 12px;margin-bottom:10px;border-radius:8px;background:rgba(245,158,11,.10);border:1px solid rgba(245,158,11,.28)}
.tg-hd b{color:#d97706}
.tg-list{max-height:52vh;overflow:auto;display:flex;flex-direction:column;gap:9px}
.tg-grp{border:1px solid var(--line);border-radius:8px;overflow:hidden}
.tg-k{display:flex;align-items:center;gap:7px;padding:6px 10px;background:var(--panel-2);font-weight:600;font-size:12.5px;border-bottom:1px solid var(--line)}
.tg-n{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:17px;padding:0 5px;border-radius:9px;background:var(--err);color:#fff;font-size:11px;font-weight:600}
.tg-r{padding:6px 10px;border-top:1px dashed var(--line)}
.tg-r:first-of-type{border-top:0}
.tg-t{font-size:12.5px}
.tg-no{font-size:11.5px;opacity:.72;margin-left:4px}
.tg-d{font-size:11.5px;opacity:.68;margin-top:1px}
.tg-tip{padding:6px 10px;background:rgba(59,130,246,.05);border-top:1px dashed var(--line);font-size:11.5px;color:var(--blue,#2563eb)}
.tg-ft{margin-top:11px;padding-top:9px;border-top:1px solid var(--line);font-size:12px;opacity:.85}
.tg-ft b{color:var(--err,#dc2626)}

/* ===== §39 应收/应付卡片美化（10-19 用户：「浅色比较容易开重复了」——头部要一眼分清） ===== */
/* 头部色带：应收=淡红渐变、应付=淡蓝渐变（覆盖上方 #f7fbff / #f7f9fc 通用底色） */
.acct-card.acct-rec{border-color:#e8cfcb}
.acct-card.acct-pay{border-color:#cfe1f5}
.acct-card.acct-rec .acct-hd{background:linear-gradient(90deg,#fbf0ee 0%,#fef9f8 70%);border-bottom-color:#e8cfcb}
.acct-card.acct-pay .acct-hd{background:linear-gradient(90deg,#e9f3fd 0%,#f7fbff 70%);border-bottom-color:#cfe1f5}
/* 标题改白字药丸：红=应收、蓝=应付，浅色下不再混淆 */
.acct-hd .t{display:inline-flex;align-items:center;gap:5px;padding:4px 13px;border-radius:999px;color:#fff;font-size:13px;font-weight:700;letter-spacing:.5px}
/* ⚠ 白字必须写在同权重选择器里：上方 .acct-rec/.acct-pay .acct-hd .t（3 类）已设了深红/深蓝文字色，
   只写 .acct-hd .t（2 类）会被覆盖 → 深色字压深色药丸底，完全看不清（10-20 用户实测反馈） */
.acct-rec .acct-hd .t{color:#fff;background:linear-gradient(135deg,#c05a52,#a3453e);box-shadow:0 1px 3px rgba(163,69,62,.3)}
.acct-pay .acct-hd .t{color:#fff;background:linear-gradient(135deg,#2f7fd0,#1d66b2);box-shadow:0 1px 3px rgba(29,102,178,.3)}
/* 小节序号圈与表头跟随应收/应付色 */
.acct-rec .acct-sub .i{background:#f6e0dd;color:#9c403a}
.acct-pay .acct-sub .i{background:#dbeafb;color:#1d5f9f}
.acct-rec .ar-tbl thead th{background:#faf0ee}
.acct-pay .ar-tbl thead th{background:#eff6fd}
/* 票级/柜级工具条按钮区淡色衬底，与标题带呼应 */
.acct-rec .acct-tools{background:rgba(163,69,62,.04);border-radius:8px;margin:4px 12px 6px;padding:6px 10px}
.acct-pay .acct-tools{background:rgba(42,127,212,.045);border-radius:8px;margin:4px 12px 6px;padding:6px 10px}
/* 封账/锁定卡整体压灰，不参与红蓝 */
.acct-card.is-locked .acct-hd{background:#f4f5f7;border-bottom-color:var(--line)}
.acct-card.is-locked .acct-hd .t{color:#fff;background:#66717d;box-shadow:none}

/* ============ 列表表头点击排序（升/降序） ============ */
.tbl-scroll thead th.sortable,
.ff-grid thead th.sortable{user-select:none}
.tbl-scroll thead th.sortable:hover,
.ff-grid thead th.sortable:hover{background:var(--accent-soft,#eef4fb);color:var(--text)}
.tbl-scroll thead th.sorted,
.ff-grid thead th.sorted{color:var(--primary);background:var(--accent-soft,#eef4fb)}
.tbl-scroll thead th .sort-ico,
.ff-grid thead th .sort-ico{font-style:normal;font-size:10px;margin-left:2px;opacity:.45;vertical-align:middle}
.tbl-scroll thead th.sorted .sort-ico,
.ff-grid thead th.sorted .sort-ico{opacity:1;color:var(--primary);font-weight:700}
/* ---------- 货代列表：状态列快速改状态 ---------- */
.ff-status-cell{display:inline-flex;align-items:center;gap:2px;cursor:pointer;position:relative;padding:1px 2px;border-radius:6px}
.ff-status-cell:hover{background:var(--accent-soft,#eef4fb)}
.ff-status-cell .ff-caret{font-size:9px;line-height:1;color:var(--muted);opacity:.35;transition:.12s}
.ff-status-cell:hover .ff-caret{opacity:.85}
.ff-status-pop{position:fixed;z-index:9000;background:#fff;border:1px solid var(--line-2,#dfe6f2);border-radius:10px;box-shadow:0 12px 34px rgba(20,40,80,.18);padding:8px;min-width:134px}
.ff-sp-title{font-size:12px;color:var(--muted);padding:2px 6px 7px;white-space:nowrap}
.ff-sp-title .mono{color:var(--text);font-weight:600}
.ff-sp-list{display:flex;flex-direction:column;gap:4px}
.ff-sp-item{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;border:1px solid transparent;background:#f7f9fc;border-radius:8px;padding:5px 8px;cursor:pointer;font-size:12px;transition:.1s}
.ff-sp-item:hover{background:var(--accent-soft,#eef4fb);border-color:var(--line-2,#dfe6f2)}
.ff-sp-item.on{background:#fff;border-color:var(--primary,#2f6fed)}
.ff-sp-on{font-size:10.5px;color:var(--primary,#2f6fed);font-weight:600}
.ff-sp-go{font-size:10.5px;color:var(--muted)}

/* ================= 利润明细表（按作业号 / 每个柜子） ================= */
.profit-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:14px}
@media(max-width:1200px){.profit-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:640px){.profit-kpis{grid-template-columns:repeat(2,1fr)}}
.profit-kpis .kpi{padding:12px 14px}
.profit-kpis .kpi-label{font-size:12px;display:flex;align-items:center;gap:6px}
.profit-kpis .kpi-value{font-size:21px;line-height:1.3;font-variant-numeric:tabular-nums;font-weight:500;margin-top:2px}
.profit-kpis .kpi-foot{font-size:11px;color:var(--hint);margin-top:2px}
.profit-kpis .kpi-accent{position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:0 3px 3px 0}

/* 分组色带（视觉分组，独立于 table，横向随内容滚动、纵向吸顶） */
.grp-band{position:sticky;top:0;z-index:6;display:grid;background:#fff;border-bottom:1px solid var(--line-2);height:30px}
.grp-band .gb{display:flex;align-items:center;padding:0 12px;font-size:11.5px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:1px solid rgba(255,255,255,.45)}
.grp-band .gb.g-basic{background:var(--primary)}
.grp-band .gb.g-rec{background:#3f8fd0}
.grp-band .gb.g-pay{background:var(--purple)}
.grp-band .gb.g-gross{background:var(--ok)}

.profit-tbl{table-layout:fixed;border-collapse:collapse;font-size:12.5px;width:auto}
.profit-tbl thead th{position:sticky;top:30px;z-index:5;background:#f4f9fe;color:var(--muted);font-weight:500;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line-2);white-space:nowrap;font-size:12px}
.profit-tbl thead th.t-r{text-align:right}
.profit-tbl thead th.t-c{text-align:center}
.profit-tbl thead th.g-rec{background:#eaf3fb}
.profit-tbl thead th.g-pay{background:#efedfc}
.profit-tbl thead th.g-gross{background:#e9f7f0}
.profit-tbl thead th.sortable{cursor:pointer}
.profit-tbl thead th.sortable:hover{color:var(--primary-d)}
.profit-tbl thead th .sort-ico{margin-left:3px;opacity:.4;font-style:normal;font-size:9px}
.profit-tbl thead th.sorted .sort-ico{opacity:1;color:var(--primary)}
.profit-tbl thead th.tbl-idx{position:sticky;left:0;z-index:7;background:#eef3fe}
.profit-tbl tbody td{padding:8px 10px;border-bottom:1px solid #eef3f9;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.profit-tbl tbody td.t-r{text-align:right}
.profit-tbl tbody td.t-c{text-align:center}
.profit-tbl tbody td.tbl-idx{position:sticky;left:0;z-index:2;background:#fff}
.profit-tbl tbody td.g-rec{background:rgba(42,127,212,.035)}
.profit-tbl tbody td.g-pay{background:rgba(91,87,201,.04)}
.profit-tbl tbody td.g-gross{background:rgba(31,138,92,.045)}
.profit-tbl tbody tr:hover td{background:#f7fbff}
.profit-tbl tbody tr:hover td.g-rec{background:#eef6fd}
.profit-tbl tbody tr:hover td.g-pay{background:#f3f1fd}
.profit-tbl tbody tr:hover td.g-gross{background:#eefaf3}
.profit-tbl tbody tr.profit-neg{background:var(--danger-l)}
.profit-tbl tbody tr.profit-neg:hover td{background:#fbdcdc}
.profit-tbl tbody tr.profit-neg td.tbl-idx{box-shadow:inset 3px 0 0 var(--danger);background:#fff}
.profit-tbl .cb-total-row{background:#f6f9fc;font-weight:600}
.profit-tbl .cb-total-row td{padding:8px 10px;border-top:2px solid var(--line-2)}
.profit-tbl .cb-total-row td.tbl-idx{background:#f6f9fc}
.profit-tbl .mono{font-size:12px;letter-spacing:.2px}

/* ===== 2026-11-05 UI 巡检：卡片标题栏统一基准高度 =====
   原先同一页里纯文字标题栏 42.6px、带 1 个按钮 49.2px、带 4 个控件 53px，
   并排卡片的标题分隔线高低不齐（工作台 / 在途跟踪 / 保险管理 / 工资核对 / 电费核算 等 11 页）。
   统一到 49px 后，0~1 个控件的卡片头齐平；多控件工具栏型头部仍按内容增高。
   如要改这一档，只改本行即可，勿逐页打补丁。 */
.card-hd{min-height:49px}

/* ===== 2026-11-05 UI 巡检 · 第二轮：全站版式基线（配套 assets/js/layout.js）=====
   只在此处调版式，勿逐页打补丁。layout.js 只移动已有 DOM 节点 / 加类名，不碰业务逻辑。 */

/* ① 卡片标题栏：固定一行的 49px，说明文字单行省略，控件不再把标题撑成 53/59/84px */
.card-hd{min-height:49px;max-height:49px;padding:10px 16px;flex-wrap:nowrap}
.card-hd > .sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto}
.card-hd > .right{flex-wrap:nowrap;min-width:0}

/* ② 控件多的标题栏由 layout.js 下沉为独立工具条，允许折行但不影响标题栏 */
.card-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 16px;background:#f9fcff;border-bottom:1px solid var(--line);min-height:44px}
.card-tools > .right{margin-left:0;flex-wrap:wrap;flex:1 1 auto}
.card-tools .search,.card-tools .seg,.card-tools .ym-picker{flex:0 0 auto}

/* ③ 首卡之前的 KPI / 筛选 / 预警统一收进卡片顶部，所有页面首卡从同一水平线起 */
.view-top{background:#f8fbff;border-bottom:1px solid var(--line);padding:12px 16px}
.view-top > *{margin-bottom:10px}
.view-top > *:last-child{margin-bottom:0}
.view-top .kpi-grid,.view-top .profit-kpis,.view-top .toolbar,.view-top .wb-alert{margin-bottom:0;margin-top:0}
.view-top .kpi{box-shadow:none}
.view-top .kpi-grid{margin-bottom:0}
.view-top .ro-banner{margin-bottom:0}
/* 独立页头卡片：自身已有 .card 边框，不要再叠一条 .view-top 分隔线 */
.card.view-top-card{border-bottom:1px solid var(--line);margin-bottom:16px}
/* 3 张 / 2 张 KPI 不要留在 4 列网格里空出右侧一格（ETC 充值、码头堆场、账号权限、供应商账号）；
   :has 只在「恰好 N 张卡」时命中，不影响 kpi-5 / kpi-6 / kpi-single 的既有布局。 */
.kpi-grid:not(.kpi-5):not(.kpi-6):not(.kpi-single):has(> .kpi:nth-child(3):last-child){grid-template-columns:repeat(3,1fr)}
.kpi-grid:not(.kpi-5):not(.kpi-6):not(.kpi-single):has(> .kpi:nth-child(2):last-child){grid-template-columns:repeat(2,1fr)}

/* ④ 宽表：横向滚动 + 末列吸附，操作按钮不再被 .card{overflow:hidden} 裁到视口外 */
.card-bd.flush.tms-scroll-x{overflow-x:auto;overflow-y:hidden}
/* 宽表始终显示一条可见的横向滚动条，明确提示右侧还有列（如应收汇总的「附件」对账单） */
.tms-scroll-x::-webkit-scrollbar{height:8px}
.tms-scroll-x::-webkit-scrollbar-track{background:#f4f7fb;border-radius:4px}
.tms-scroll-x::-webkit-scrollbar-thumb{background:#c3d3e8;border-radius:4px}
.tms-scroll-x::-webkit-scrollbar-thumb:hover{background:#a8bdd8}
.tms-scroll-x{scrollbar-width:thin;scrollbar-color:#c3d3e8 #f4f7fb}
.tbl-scroll table th.tms-op-col,.tbl-scroll table td.tms-op-col,
.card-bd.flush.tms-scroll-x > table th.tms-op-col,.card-bd.flush.tms-scroll-x > table td.tms-op-col{
  position:sticky;right:0;z-index:2;background:#fff;box-shadow:-3px 0 6px rgba(16,24,40,.07)}
thead th.tms-op-col{z-index:5 !important;background:#eef3fe}
tbody tr:hover td.tms-op-col{background:#f7fbff}
.tms-scroll-x > table td.tms-op-col,.tbl-scroll table td.tms-op-col{border-left:1px solid var(--line-2)}

/* ⑤ 长文本 2 行封顶（layout.js 同时给单元格补 title 悬浮全文），行列高不再忽高忽低。
     用 max-height 而不是 -webkit-line-clamp：单元格里常含 div/flex 块级子元素，
     line-clamp 对块级子元素无效（实测操作日志仍被撑到 190px），max-height 稳定生效。 */
/* white-space 用 inherit 而不是 normal：很多表格列靠 nowrap 保持数字单行，
   word-break:break-all 会把 1,000.00 拆成两行，属于明显视觉退化，一律不用。 */
.tms-clip-in{display:block;max-height:2.9em;overflow:hidden;
  white-space:inherit;line-height:1.45;overflow-wrap:anywhere;text-align:inherit}
