:root{
  --brand:#005BFF; --brand-2:#2F7BFF; --brand-deep:#0043C0; --brand-soft:#E8F1FF;
  --ink:#0E1A2B; --ink-2:#334155; --muted:#6B7A90; --line:#DCE5F5; --line-2:#EEF3FB;
  --bg-card:rgba(255,255,255,.88); --ok:#0E9F6E; --warn:#D97706; --danger:#E02424;
  --r:14px; --shadow:0 1px 2px rgba(16,42,84,.05), 0 8px 24px -12px rgba(16,42,84,.18);
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0; color:var(--ink); font-size:14px; line-height:1.55;
  font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Segoe UI",system-ui,sans-serif;
  background:#EAF1FD url("assets/bg.png") center center / cover no-repeat fixed;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:14px;color:inherit;}
h1,h2,h3,p{margin:0;}
.app{margin:0 auto;padding:14px 18px 28px;}

/* ---------- 顶栏 ---------- */
.topbar{
  display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  background:var(--bg-card);backdrop-filter:blur(10px);
  border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);
  padding:12px 16px;margin-bottom:14px;
}
.brand{display:flex;align-items:center;gap:12px;min-width:250px;}
.logo{
  width:52px;height:52px;border-radius:13px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,#0A63FF,#0040B4);color:#fff;font-weight:700;letter-spacing:.5px;
  font-size:15px;box-shadow:0 6px 16px -6px rgba(0,91,255,.7);flex:none;
}
.logo-img{width:52px;height:52px;border-radius:13px;object-fit:contain;background:transparent;padding:0;flex:none;
  box-shadow:0 6px 16px -8px rgba(18,59,93,.5);border:0;}
.brand-txt h1{font-size:18px;font-weight:600;letter-spacing:.2px;}
.brand-txt p{font-size:12px;color:var(--muted);margin-top:2px;}
.tabs{display:flex;gap:6px;background:#F1F6FE;padding:4px;border-radius:12px;margin-left:auto;}
.tab{
  border:0;background:transparent;padding:9px 18px;border-radius:9px;cursor:pointer;
  font-size:14px;color:var(--ink-2);transition:.15s;
}
.tab span{opacity:.45;margin-right:4px;font-size:12px;}
.tab:hover{background:#E4EEFF;}
.tab.active{background:var(--brand);color:#fff;box-shadow:0 4px 12px -4px rgba(0,91,255,.6);}
.tab.active span{opacity:.8;}
.topright{display:flex;align-items:center;gap:10px;}
.date-box{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:5px 10px;}
.date-box span{font-size:12px;color:var(--muted);white-space:nowrap;}
.date-box input{border:0;background:transparent;padding:2px 0;outline:none;font-size:13px;}

/* ---------- 按钮 ---------- */
.btn{
  border:1px solid var(--line);background:#fff;color:var(--ink-2);padding:8px 14px;border-radius:10px;
  cursor:pointer;transition:.15s;white-space:nowrap;
}
.btn:hover{border-color:#B9CDF0;color:var(--brand-deep);background:#F7FAFF;}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:500;}
.btn.primary:hover{background:var(--brand-deep);border-color:var(--brand-deep);color:#fff;}
.btn.ghost{background:rgba(255,255,255,.6);}
.btn.danger{color:var(--danger);border-color:#F5C6C6;background:#FFF7F7;}
.btn.danger:hover{background:#FDECEC;border-color:#EE9A9A;color:#B91C1C;}
.btn.sm{padding:6px 10px;font-size:13px;border-radius:8px;}
.btn.block{width:100%;}
.btn:disabled{opacity:.5;cursor:not-allowed;}

/* ---------- 面板 ---------- */
.pane{display:none;}
.pane.active{display:block;}
@keyframes fade{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}
.panel{
  background:var(--bg-card);backdrop-filter:blur(10px);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--shadow);padding:14px 16px;margin-bottom:14px;
}
.panel-title{font-size:15px;font-weight:600;margin-bottom:12px;}

/* ---------- 录入板块 ---------- */
#pane-entry{display:none;grid-template-columns:330px minmax(0,1fr);gap:14px;align-items:start;}
#pane-entry.active{display:grid;}
.slot-side,.slot-main{
  background:var(--bg-card);backdrop-filter:blur(10px);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--shadow);
}
.slot-side{display:flex;flex-direction:column;height:calc(100vh - 200px);position:sticky;top:80px;}
.side-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;padding:14px 14px 10px;border-bottom:1px solid var(--line-2);}
.side-head h2{font-size:15px;font-weight:600;}
.side-head p{font-size:12px;color:var(--muted);margin-top:3px;}
.slot-list{flex:1;overflow:auto;padding:10px;display:flex;flex-direction:column;gap:8px;}
.side-foot{padding:10px 12px;border-top:1px solid var(--line-2);}

.slot-item{
  display:flex;gap:10px;align-items:center;padding:9px;border:1px solid var(--line);
  border-radius:11px;cursor:pointer;background:#fff;transition:.15s;
}
.slot-item:hover{border-color:#B9CDF0;background:#F8FBFF;}
.slot-item.active{border-color:var(--brand);background:var(--brand-soft);box-shadow:inset 3px 0 0 var(--brand);}
.slot-thumb{
  width:44px;height:56px;border-radius:7px;flex:none;background:#F2F6FD;border:1px solid var(--line);
  overflow:hidden;display:flex;align-items:center;justify-content:center;color:#9DB2D0;font-size:10px;text-align:center;
}
.slot-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.slot-item .si-main{flex:1;min-width:0;}
.slot-item .si-code{font-weight:600;font-size:14px;letter-spacing:.3px;}
.slot-item .si-sub{font-size:12px;color:var(--muted);margin-top:2px;display:flex;gap:6px;flex-wrap:wrap;}
.pill{display:inline-flex;align-items:center;padding:1px 7px;border-radius:20px;font-size:11px;background:#EFF4FD;color:#4A5C77;}
.pill.blue{background:#E4EEFF;color:var(--brand-deep);}
.pill.green{background:#E6F6EF;color:#0B7A55;}
.pill.red{background:#FDECEC;color:#B91C1C;}
.pill.amber{background:#FFF4E5;color:#9A5B00;}
.pill.gray{background:#F1F3F7;color:#8A93A5;border:1px dashed #C9D1DE;}

.slot-main{min-height:calc(100vh - 200px);padding:16px 18px;}
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:60vh;text-align:center;gap:8px;color:var(--muted);}
.empty-state h3{font-size:16px;color:var(--ink);font-weight:600;}
.empty-state p{font-size:13px;max-width:420px;line-height:1.7;}
.empty-ico{width:64px;height:64px;border-radius:18px;background:linear-gradient(145deg,#E9F1FF,#D3E3FF);position:relative;margin-bottom:6px;}
.empty-ico:after{content:"";position:absolute;inset:18px;border:2.5px solid #9CBBEC;border-radius:5px;}

.slot-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--line-2);}
.slot-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.slot-title h2{font-size:22px;font-weight:600;letter-spacing:.4px;}
.slot-meta{font-size:12px;color:var(--muted);margin-top:5px;display:flex;gap:12px;flex-wrap:wrap;}
.slot-actions{display:flex;gap:8px;flex-wrap:wrap;}

.entry-grid{display:grid;grid-template-columns:280px minmax(0,1fr);gap:16px;margin-top:14px;}
.label-card{border:1px dashed #BFD3F2;border-radius:12px;background:#F9FBFF;padding:10px;text-align:center;}
.label-card .lb-title{font-size:12px;color:var(--muted);margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;}
.label-preview{
  border-radius:9px;overflow:hidden;background:#fff;border:1px solid var(--line);
  height:300px;display:flex;align-items:center;justify-content:center;cursor:zoom-in;position:relative;
}
.label-preview img{max-width:100%;max-height:100%;object-fit:contain;display:block;}
.label-preview .ph{color:#9DB2D0;font-size:12px;padding:20px;line-height:1.8;}
.label-upload{display:flex;gap:6px;margin-top:8px;}
.label-upload .btn{flex:1;}

.scan-box{border:1px solid var(--line);border-radius:12px;background:#fff;padding:14px;margin-bottom:12px;}
.scan-box .sb-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.scan-box .sb-head h3{font-size:14px;font-weight:600;}
.scan-box .sb-head .hint{font-size:12px;color:var(--muted);}
.scan-row{display:flex;gap:8px;}
#scanInput{
  flex:1;padding:14px 16px;border:2px solid #CFE0FA;border-radius:11px;font-size:19px;letter-spacing:1.2px;
  font-family:Consolas,"Courier New",monospace;outline:none;transition:.15s;background:#FBFCFF;
}
#scanInput:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(0,91,255,.13);background:#fff;}
#scanInput.err{border-color:var(--danger);box-shadow:0 0 0 4px rgba(224,36,36,.13);animation:shake .3s;}
@keyframes shake{0%,100%{transform:translateX(0);}25%{transform:translateX(-5px);}75%{transform:translateX(5px);}}
.dup-bar{margin-top:9px;font-size:12px;color:#B42318;background:#FFF5F5;border:1px solid #FAD2D2;border-radius:9px;padding:7px 10px;display:none;}
.dup-bar.show{display:block;}

.track-tools{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 8px;}
.track-tools h3{font-size:14px;font-weight:600;}
.track-tools .count{font-size:12px;color:var(--muted);}

.table-wrap{overflow:auto;border-radius:10px;}
table.grid{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;}
table.grid th{
  position:sticky;top:0;background:#F4F8FE;text-align:left;padding:9px 10px;font-weight:600;
  color:#42546E;border-bottom:1px solid var(--line);white-space:nowrap;z-index:2;font-size:12.5px;
}
table.grid td{padding:8px 10px;border-bottom:1px solid var(--line-2);vertical-align:middle;}
table.grid tbody tr:hover{background:#F8FBFF;}
table.grid tbody tr:last-child td{border-bottom:0;}
.mono{font-family:Consolas,"Courier New",monospace;font-size:13.5px;letter-spacing:.4px;}
.tnum{font-family:Consolas,"Courier New",monospace;color:#42546E;}
.row-actions{display:flex;gap:6px;white-space:nowrap;}
.icon-btn{
  border:1px solid var(--line);background:#fff;border-radius:7px;padding:4px 9px;font-size:12px;
  cursor:pointer;color:var(--ink-2);transition:.15s;
}
.icon-btn:hover{border-color:#B9CDF0;color:var(--brand-deep);background:#F5F9FF;}
.icon-btn.del:hover{border-color:#F0B4B4;color:#B91C1C;background:#FFF6F6;}
.icon-btn.track{color:var(--brand);border-color:#C7DBFB;background:#F5F9FF;}
.icon-btn.track:hover{background:var(--brand);color:#fff;border-color:var(--brand);}

/* ---------- 查询 ---------- */
.filter-bar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;}
.filter-bar label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);}
.filter-bar input,.filter-bar select{
  border:1px solid var(--line);border-radius:9px;padding:8px 10px;background:#fff;outline:none;min-width:140px;font-size:13px;
}
.filter-bar input:focus,.filter-bar select:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,91,255,.1);}
.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px;}
.metric{
  background:var(--bg-card);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:12px;
  padding:14px 16px;box-shadow:var(--shadow);
}
.metric p{font-size:12px;color:var(--muted);margin-bottom:6px;}
.metric strong{font-size:26px;font-weight:600;font-family:Consolas,"Courier New",monospace;color:var(--brand-deep);letter-spacing:.5px;}
.sub-tabs{display:flex;gap:6px;align-items:center;margin-bottom:10px;flex-wrap:wrap;}
.sub-tab{border:0;background:#F1F6FE;color:var(--ink-2);padding:7px 14px;border-radius:9px;cursor:pointer;font-size:13px;}
.sub-tab.active{background:var(--brand);color:#fff;}
.sub-tabs .spacer{flex:1;}

/* ---------- 异常 ---------- */
.issue-form{display:grid;grid-template-columns:220px 180px minmax(0,1fr) auto;gap:10px;align-items:end;}
.issue-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);}
.issue-form input,.issue-form select{border:1px solid var(--line);border-radius:9px;padding:8px 10px;background:#fff;outline:none;font-size:13px;}
.issue-form input:focus,.issue-form select:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,91,255,.1);}

/* ---------- 提示 ---------- */
.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:60;}
.toast{
  background:#12233D;color:#fff;padding:10px 16px;border-radius:10px;font-size:13px;
  box-shadow:0 10px 28px -10px rgba(0,0,0,.5);animation:slideIn .2s ease;max-width:380px;
}
.toast.ok{background:#0B7A55;}
.toast.err{background:#B42318;}
.toast.warn{background:#9A5B00;}
@keyframes slideIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}

.scan-flash{position:fixed;inset:0;pointer-events:none;opacity:0;transition:opacity .25s;z-index:55;}
.scan-flash.ok{background:radial-gradient(circle at 50% 40%,rgba(14,159,110,.14),transparent 60%);opacity:1;}
.scan-flash.err{background:radial-gradient(circle at 50% 40%,rgba(224,36,36,.16),transparent 60%);opacity:1;}

/* ---------- 弹窗 ---------- */

/* 后台弹窗遮罩（此前只 client.html 有定义，后台公用一套） */


/* ==================== 订单管理：二级导航 ==================== */
.tab-group{display:flex;flex-direction:column;gap:2px;}
.tab-group.sub-on > .tab-parent{background:linear-gradient(90deg,rgba(0,91,255,.34),rgba(0,194,255,.10));
  color:#fff;border-color:rgba(0,194,255,.22);}
.tab-group.sub-on > .tab-parent::before{content://;position:absolute;left:-10px;top:50%;transform:translateY(-50%);
  width:3px;height:14px;border-radius:0 3px 3px 0;background:linear-gradient(180deg,#00C2FF,#005BFF);opacity:.8;}
.tab-parent{width:100%;display:flex;align-items:center;gap:6px;text-align:left;}
.tab-parent .tab-arr{margin-left:auto;font-size:9px;opacity:.75;}
.tab-subs{display:none;flex-direction:column;gap:1px;padding-left:0;}
.tab-group.open .tab-subs{display:flex;}
.tab.sub{font-size:12.5px;color:rgba(226,236,250,.82);padding-left:26px;position:relative;}
.tab.sub::before{content://;position:absolute;left:14px;top:50%;width:4px;height:4px;border-radius:50%;background:rgba(150,180,220,.5);transform:translateY(-50%);}
.tab.sub.active::before{background:#4DA6FF;box-shadow:0 0 6px rgba(77,166,255,.9);}
.tab-badge{display:inline-block;min-width:18px;height:17px;line-height:17px;text-align:center;border-radius:9px;margin-left:auto;
  background:rgba(229,72,77,.9);color:#fff;font-size:10px;font-weight:800;padding:0 5px;}
.tab-badge.g{background:rgba(120,145,180,.55);}
.sbadge.g{background:rgba(120,145,180,.5);color:rgba(226,236,250,.9);}
.tab-badge[hidden]{display:none;}

/* ==================== 订单管理：汇总表格 ==================== */
.om-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px;}
.om-sub{margin:5px 0 0;font-size:11.5px;color:#8A9AB0;line-height:1.7;}
.om-head-r{display:flex;gap:8px;flex:none;}
.om-k{display:inline-flex;align-items:baseline;gap:5px;padding:7px 13px;border-radius:10px;background:#F5F8FD;border:1px solid #E9EEF6;font-size:10.5px;color:#7A8AA5;}
.om-k b{font-size:16px;font-family:Consolas,monospace;color:#1F2E4D;}
.om-k.warn{background:#FFF7EC;border-color:#F7E3C4;}
.om-k.warn b{color:#B76E00;}
.om-wrap{margin-top:6px;}
.om-table{display:flex;flex-direction:column;gap:5px;}
.om-row{display:grid;grid-template-columns:26px 92px 132px 104px 1fr 122px 104px 176px;gap:10px;align-items:center;
  padding:9px 12px;border-radius:10px;background:#fff;border:1px solid #EEF3FA;font-size:11.5px;color:#3C4E66;transition:.14s;}
.om-row:hover{background:#FBFDFF;border-color:#D8E6FA;}
.om-head-row{background:#F5F8FD;border-color:#E9EEF6;font-size:10.5px;color:#7A8AA5;font-weight:800;padding:8px 12px;}
.om-head-row:hover{background:#F5F8FD;border-color:#E9EEF6;}
.om-ck{display:flex;align-items:center;justify-content:center;}
.om-cust{font-weight:700;color:#1F2E4D;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-pn{font-family:Consolas,monospace;font-size:11px;color:#2F4A72;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-shop{color:#7A8AA5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-prods{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-more{font-style:normal;color:#2F7BFF;font-weight:800;margin-left:3px;}
.om-time{font-size:10.5px;color:#93A6BD;}
.om-refund{display:block;font-style:normal;color:#0B8A5B;font-size:10px;margin-top:2px;}
.om-tag{font-style:normal;font-size:10px;font-weight:800;padding:1px 8px;border-radius:6px;white-space:nowrap;}
.om-tag.blue{background:#EDF3FF;color:#1D6FE0;}
.om-tag.green{background:#E9F9F1;color:#0B8A5B;}
.om-tag.red{background:#FDECEE;color:#C93B3B;}
.om-tag.gray{background:#F2F5F9;color:#6B7A90;}
.om-tag.amber{background:#FFF7EC;color:#B76E00;}
.om-why{display:block;font-style:normal;font-size:9.5px;color:#A8B8CC;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-acts{display:flex;gap:5px;justify-content:flex-end;flex-wrap:wrap;}
.om-btn{border:1.5px solid #DCE6F5;background:#fff;color:#54657F;font-size:10.5px;font-weight:700;border-radius:7px;
  padding:3px 9px;cursor:pointer;font-family:inherit;white-space:nowrap;transition:.14s;}
.om-btn:hover{border-color:#9FB6D8;background:#FAFCFF;}
.om-btn.p{border-color:#0B8A5B;background:#F3FBF7;color:#0B8A5B;}
.om-btn.p:hover{background:#0B8A5B;color:#fff;}
.om-btn.d{border-color:#F3C7C7;background:#FFF8F8;color:#C93B3B;}
.om-btn.d:hover{background:#FDECEE;}
.om-empty{padding:44px 20px;text-align:center;border:1px dashed #DCE6F5;border-radius:14px;background:#FBFDFF;}
.om-empty b{display:block;font-size:14px;color:#1F2E4D;margin-bottom:6px;}
.om-empty p{margin:0;font-size:11.5px;color:#93A6BD;line-height:1.9;}
/* 订单详情弹窗 */
.od-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px;}
.od-grid > div{background:#F8FBFF;border:1px solid #EEF3FA;border-radius:9px;padding:8px 10px;}
.od-grid span{display:block;font-size:9.5px;color:#93A6BD;}
.od-grid b{display:block;font-size:11.5px;color:#1F2E4D;margin-top:2px;word-break:break-all;}
.od-sec{font-size:11.5px;font-weight:800;color:#1B3B6F;margin:10px 0 6px;}

/* ==================== 前台通知（后台） ==================== */
.tab-badge{display:inline-block;min-width:16px;height:16px;line-height:16px;text-align:center;border-radius:9px;
  background:#E5484D;color:#fff;font-size:10px;font-weight:800;margin-left:6px;padding:0 4px;}
.nt-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px;}
.nt-sub{margin:5px 0 0;font-size:11.5px;color:#8A9AB0;line-height:1.7;}
.nt-head-r{display:flex;align-items:center;gap:10px;flex:none;}
.nt-count{text-align:center;padding:7px 14px;border-radius:10px;background:#F5F8FD;border:1px solid #E9EEF6;}
.nt-count b{display:block;font-size:17px;color:#1F2E4D;font-family:Consolas,monospace;line-height:1.2;}
.nt-count span{font-size:10px;color:#93A6BD;}
.nt-count.warn{background:#F3F8FF;border-color:#DCE8FA;}
.nt-count.warn b{color:#1D6FE0;}
.nt-tips{font-size:11.5px;color:#6B7A90;background:#F8FBFF;border:1px dashed #DCE7F8;border-radius:10px;
  padding:9px 12px;margin-bottom:14px;line-height:1.75;}
.nt-tips b{color:#1D6FE0;}
.nt-list{display:flex;flex-direction:column;gap:10px;}
.nt-empty{padding:46px 20px;text-align:center;border:1px dashed #DCE6F5;border-radius:14px;background:#FBFDFF;}
.nt-empty .ico{font-size:32px;margin-bottom:8px;}
.nt-empty b{display:block;font-size:14px;color:#1F2E4D;margin-bottom:6px;}
.nt-empty p{margin:0;font-size:11.5px;color:#93A6BD;line-height:1.9;}
.nt-item{display:flex;gap:13px;padding:14px 16px;background:#fff;border:1px solid #E3EBF7;border-radius:13px;
  transition:.16s;position:relative;overflow:hidden;}
.nt-item::before{content://;position:absolute;left:0;top:0;bottom:0;width:3px;background:#B9CFEA;}
.nt-item.urgent::before{background:linear-gradient(180deg,#E5484D,#FF7A85);}
.nt-item.important::before{background:linear-gradient(180deg,#E88A1A,#FFB454);}
.nt-item.normal::before{background:linear-gradient(180deg,#0B62FF,#37C4FF);}
.nt-item.info::before{background:linear-gradient(180deg,#7A8AA5,#A9B8CC);}
.nt-item:hover{border-color:#C9DCF6;box-shadow:0 10px 26px -16px rgba(11,98,255,.4);transform:translateY(-1px);}
.nt-item.dim{opacity:.72;background:#FAFBFD;}
.nt-lv{flex:none;padding-top:1px;}
.nt-badge{display:inline-block;font-size:10px;font-weight:800;padding:2px 9px;border-radius:6px;white-space:nowrap;}
.nt-badge.urgent{background:#FDECEE;color:#C93B3B;border:1px solid #F5C6CC;}
.nt-badge.important{background:#FFF5E8;color:#B76E00;border:1px solid #FADFB5;}
.nt-badge.normal{background:#EDF3FF;color:#1D6FE0;border:1px solid #D5E3FA;}
.nt-badge.info{background:#F2F5F9;color:#6B7A90;border:1px solid #E2E8F1;}
.nt-main{flex:1;min-width:0;}
.nt-t{font-size:13.5px;font-weight:800;color:#1F2E4D;display:flex;align-items:center;gap:6px;}
.nt-pin{font-size:11px;}
.nt-b{font-size:11.5px;color:#6B7A90;line-height:1.75;margin-top:4px;word-break:break-all;}
.nt-meta{display:flex;flex-wrap:wrap;gap:12px;font-size:10.5px;color:#9DB2D0;margin-top:7px;}
.nt-st{font-weight:800;}
.nt-st.published{color:#0B8A5B;}
.nt-st.draft{color:#B76E00;}
.nt-st.offline{color:#93A6BD;}
.nt-acts{display:flex;flex-direction:column;gap:6px;flex:none;justify-content:center;}
.nt-btn{border:1.5px solid #DCE6F5;background:#fff;color:#54657F;font-size:11px;font-weight:700;border-radius:8px;
  padding:5px 12px;cursor:pointer;font-family:inherit;transition:.15s;white-space:nowrap;}
.nt-btn:hover{border-color:#9FB6D8;background:#FAFCFF;}
.nt-btn.primary{border-color:#0B62FF;background:#F2F7FF;color:#1D6FE0;}
.nt-btn.primary:hover{background:#0B62FF;color:#fff;}
.nt-btn.danger{border-color:#F3C7C7;background:#FFF8F8;color:#C93B3B;}
.nt-btn.danger:hover{background:#FDECEE;}
/* 编辑弹窗 */
.ne-head{display:flex;align-items:baseline;gap:10px;margin-bottom:14px;}
.ne-head h4{margin:0;}
.ne-hint{font-size:10.5px;color:#9DB2D0;}
.ne-sec{margin-bottom:14px;padding:12px 14px;border-radius:12px;background:#FBFDFF;border:1px solid #EEF3FA;}
.ne-lb{font-size:12px;font-weight:800;color:#33415E;margin-bottom:9px;}
.ne-lb i{font-weight:400;font-style:normal;font-size:10.5px;color:#9DB2D0;margin-left:6px;}
.ne-levels{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.ne-lv{display:flex;align-items:center;gap:8px;padding:9px 11px;border:1.5px solid #E3EBF7;border-radius:10px;
  background:#fff;cursor:pointer;transition:.15s;}
.ne-lv:hover{border-color:#C9DCF6;background:#FAFCFF;}
.ne-lv input{display:none;}
.ne-lv b{font-size:12px;color:#1F2E4D;}
.ne-lv em{font-style:normal;font-size:10px;color:#9DB2D0;margin-left:auto;text-align:right;line-height:1.4;}
.ne-dot{width:9px;height:9px;border-radius:50%;flex:none;background:#B9CFEA;}
.ne-lv.urgent .ne-dot{background:#E5484D;}
.ne-lv.important .ne-dot{background:#E88A1A;}
.ne-lv.normal .ne-dot{background:#0B62FF;}
.ne-lv.info .ne-dot{background:#8A9AB0;}
.ne-lv.on{border-color:#2F7BFF;background:#F3F8FF;box-shadow:0 0 0 3px rgba(47,123,255,.08);}
.ne-field{display:block;margin-bottom:10px;}
.ne-field > span{display:block;font-size:11.5px;font-weight:700;color:#54657F;margin-bottom:5px;}
.ne-field > span b{color:#E5484D;}
.ne-field input,.ne-field textarea{width:100%;box-sizing:border-box;padding:9px 11px;border:1.5px solid #DCE6F5;
  border-radius:9px;font-size:12.5px;font-family:inherit;background:#fff;transition:.15s;resize:vertical;}
.ne-field input:focus,.ne-field textarea:focus{outline:none;border-color:#2F7BFF;box-shadow:0 0 0 3px rgba(47,123,255,.12);}
.ne-field em{display:block;font-size:10.5px;color:#9DB2D0;font-style:normal;margin-top:4px;}
.ne-row2{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end;}
.ne-check{display:flex;align-items:center;gap:7px;font-size:11.5px;color:#54657F;padding-bottom:9px;}

.pmask{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:24px;
  background:rgba(6,22,46,.42);backdrop-filter:blur(3px);}
.pmask[hidden]{display:none;}
.pbox{background:#fff;border-radius:16px;padding:20px 22px 18px;box-shadow:0 30px 70px -22px rgba(6,22,46,.55);
  max-height:88vh;overflow:auto;animation:pmIn .18s ease;}
@keyframes pmIn{from{opacity:0;transform:translateY(8px) scale(.99);}to{opacity:1;transform:none;}}
.pbox h4{margin:0 0 8px;font-size:15.5px;color:#1F2E4D;font-weight:800;}
.pi-acts{display:flex;align-items:center;gap:9px;justify-content:flex-end;margin-top:16px;}
.pi-acts .btn{padding:9px 18px;}
.perr{color:#C93B3B;font-size:11.5px;min-height:16px;}

.modal{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;}
.modal[hidden]{display:none;}
.modal-mask{position:absolute;inset:0;background:rgba(10,25,50,.55);backdrop-filter:blur(3px);}
.modal-body{
  position:relative;background:#fff;border-radius:16px;max-width:min(860px,92vw);max-height:90vh;
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 30px 80px -20px rgba(0,20,50,.6);
}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line-2);}
.modal-head p{font-size:14px;font-weight:600;}
.modal-content{overflow:auto;padding:14px;background:#F7FAFF;}
.modal-content img{max-width:100%;display:block;margin:0 auto;border-radius:8px;}
.modal-content iframe{width:820px;max-width:100%;height:70vh;border:0;border-radius:8px;background:#fff;}

/* ---------- PDF 舞台（离屏） ---------- */
#pdfStage{position:absolute;left:-99999px;top:0;width:794px;background:#fff;}

.pdf-page{
  width:794px;height:1123px;position:relative;overflow:hidden;background:#fff;
  font-family:"Microsoft YaHei","PingFang SC",sans-serif;color:#0E1A2B;
}
.pdf-page .pdf-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.62;}
.pdf-page .pdf-inner{position:relative;padding:38px 44px 54px;height:100%;display:flex;flex-direction:column;}
.pdf-head{display:flex;align-items:flex-start;justify-content:space-between;border-bottom:2px solid #005BFF;padding-bottom:14px;}
.pdf-brand{display:flex;align-items:center;gap:12px;}
.pdf-logo{width:46px;height:46px;border-radius:11px;object-fit:contain;display:block;flex:none;}
.pdf-brand h1{font-size:19px;font-weight:600;margin:0;}
.pdf-brand p{font-size:11px;color:#5C6E88;margin:3px 0 0;}
.pdf-doctype{text-align:right;}
.pdf-doctype .dt{font-size:15px;font-weight:600;color:#005BFF;}
.pdf-doctype .dn{font-size:11px;color:#5C6E88;margin-top:4px;font-family:Consolas,monospace;}
.pdf-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:16px 0 0;}
.pdf-meta div{background:rgba(255,255,255,.78);border:1px solid #D8E4F7;border-radius:9px;padding:9px 11px;}
.pdf-meta span{display:block;font-size:10.5px;color:#6B7A90;}
.pdf-meta strong{display:block;font-size:13.5px;font-weight:600;margin-top:3px;word-break:break-all;}
.pdf-body{flex:1;margin-top:16px;display:flex;gap:16px;min-height:0;}
.pdf-table{flex:1;min-width:0;}
.pdf-table table{width:100%;border-collapse:collapse;font-size:11.5px;background:rgba(255,255,255,.82);}
.pdf-table th{background:#E8F1FF;border:1px solid #CFE0FA;padding:7px 8px;text-align:left;font-weight:600;color:#1B3B6F;}
.pdf-table tbody tr:nth-child(even){background:#F7FAFF;}
.pdf-table td{border:1px solid #D8E4F7;padding:6px 8px;}
.pdf-table td.mono{font-family:Consolas,monospace;font-size:12px;}
.pdf-label{width:230px;flex:none;}
.pdf-label .cap{font-size:10.5px;color:#6B7A90;margin-bottom:6px;text-align:center;}
.pdf-label .imgbox{border:1px solid #D8E4F7;border-radius:8px;overflow:hidden;background:#fff;padding:4px;}
.pdf-label .imgbox img{width:100%;display:block;}
.pdf-label .ph{border:1px dashed #C6D8F3;border-radius:8px;height:200px;display:flex;align-items:center;justify-content:center;color:#9DB2D0;font-size:11px;background:rgba(255,255,255,.6);}
.pdf-foot{margin-top:14px;border-top:1px dashed #C6D8F3;padding-top:10px;display:flex;justify-content:space-between;font-size:10.5px;color:#5C6E88;}
.pdf-hero{background:rgba(255,255,255,.85);border:1px solid #CFE0FA;border-radius:12px;padding:18px 20px;margin-top:16px;}
.pdf-hero .k{font-size:11px;color:#6B7A90;}
.pdf-hero .v{font-size:30px;font-weight:600;font-family:Consolas,monospace;letter-spacing:1.5px;color:#00337A;margin-top:5px;}
.pdf-hero .sub{font-size:12px;color:#42546E;margin-top:8px;}

/* ---------- 每日发货统计报告（PDF） ---------- */
.pd-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  background:linear-gradient(120deg,#0B2545,#134B7E);border-radius:14px;padding:18px 22px;margin-top:14px;color:#fff;}
.pd-eyebrow{font-size:8.5px;letter-spacing:2.6px;color:rgba(125,226,255,.9);font-weight:800;margin-bottom:6px;}
.pd-date{font-size:26px;font-weight:800;letter-spacing:1px;line-height:1.1;font-family:Consolas,monospace;}
.pd-date span{font-size:12px;font-weight:600;margin-left:10px;color:rgba(199,216,240,.9);letter-spacing:0;}
.pd-sub{font-size:10.5px;color:rgba(199,216,240,.75);margin-top:5px;}
.pd-hero-r{text-align:right;}
.pd-badge{display:inline-block;font-family:Consolas,monospace;font-size:10px;font-weight:700;color:#7DE2FF;
  border:1px solid rgba(125,226,255,.45);border-radius:5px;padding:2px 8px;}
.pd-gen{font-size:9.5px;color:rgba(199,216,240,.75);margin-top:7px;}
.pd-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin:12px 0 14px;}
.pd-stat{background:rgba(255,255,255,.9);border:1px solid #CFE0FA;border-radius:11px;padding:11px 12px;position:relative;overflow:hidden;}
.pd-stat::before{content://;position:absolute;left:0;top:0;bottom:0;width:3px;background:#B9CFEA;}
.pd-stat.pd-main{background:linear-gradient(135deg,#EAF2FF,#F8FBFF);border-color:#B9D2F5;}
.pd-stat.pd-main::before{background:linear-gradient(180deg,#0B62FF,#37C4FF);}
.pd-stat.pd-alert{background:linear-gradient(135deg,#FDECEE,#FFFAFB);border-color:#F3C4CC;}
.pd-stat.pd-alert::before{background:linear-gradient(180deg,#D93A57,#F07A90);}
.pd-k{font-size:9.5px;color:#6B7A90;}
.pd-v{font-size:24px;font-weight:800;color:#0B2545;font-family:Consolas,monospace;line-height:1.15;margin-top:3px;}
.pd-v i{font-size:10px;font-weight:600;font-style:normal;color:#8194AD;margin-left:3px;}
.pd-stat.pd-main .pd-v{color:#0B4BC4;}
.pd-stat.pd-alert .pd-v{color:#D93A57;}
.pd-sec-t{display:flex;align-items:baseline;gap:8px;font-size:12.5px;font-weight:800;color:#1B3B6F;margin:16px 0 8px;}
.pd-sec-t::before{content://;width:3px;height:13px;border-radius:2px;background:linear-gradient(180deg,#0B62FF,#37C4FF);}
.pd-sec-t span{font-size:10px;font-weight:600;color:#7C8FA8;}
.pd-note{font-size:9.5px;color:#6B7A90;margin-top:7px;}

/* 导出范围弹窗 + PDF 单货位信息卡 */

/* ---------- 查询日期范围：触发器 + 双月日历 ---------- */
.dr-label{display:flex;flex-direction:column;gap:6px;}
.dr-trigger{display:flex;align-items:center;gap:8px;min-width:236px;padding:9px 12px;border:1.5px solid var(--line);
  border-radius:10px;background:#fff;cursor:pointer;transition:.15s;font-family:Consolas,monospace;font-size:12.5px;color:#1F2E4D;}
.dr-trigger:hover{border-color:#9FB6D8;background:#FAFCFF;}
.dr-trigger .dr-ico{color:#8FA6C4;font-size:10px;font-style:normal;margin-left:auto;}
.dr-head{display:flex;align-items:baseline;gap:12px;margin-bottom:12px;}
.dr-head h4{margin:0;}
.dr-picked{font-family:Consolas,monospace;font-size:12px;color:#1D6FE0;background:#F0F6FF;border:1px solid #D8E6FA;border-radius:7px;padding:2px 9px;}
.dr-quick{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px;}
.dr-quick button{border:1.5px solid #E3EBF7;background:#fff;color:#54657F;font-size:11.5px;font-weight:700;
  border-radius:8px;padding:6px 12px;cursor:pointer;font-family:inherit;transition:.15s;}
.dr-quick button:hover{border-color:#2F7BFF;color:#1D6FE0;background:#F5FAFF;}
.dr-quick button.dr-all{border-color:#F3C7C7;color:#C93B3B;background:#FFF8F8;}
.dr-quick button.dr-all:hover{border-color:#E9A9A9;background:#FFEFEF;}
.dr-months{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px;}
.dr-mbtn{border:1.5px solid #E9EEF6;background:#FBFDFF;color:#54657F;font-size:11.5px;border-radius:8px;
  padding:5px 13px;cursor:pointer;font-family:inherit;transition:.15s;}
.dr-mbtn:hover{border-color:#9FB6D8;color:#1F2E4D;}
.dr-mbtn.on{background:linear-gradient(135deg,#0B62FF,#0A9BFF);border-color:transparent;color:#fff;font-weight:800;}
.dr-cal{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.dr-mhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.dr-mhead b{font-size:13px;color:#1F2E4D;}
.dr-nav{width:24px;height:24px;border:1px solid #E3EBF7;background:#fff;border-radius:7px;color:#5C6E88;
  cursor:pointer;font-size:13px;line-height:1;font-family:inherit;}
.dr-nav:hover{border-color:#2F7BFF;color:#1D6FE0;}
.dr-nav.ph{border:none;background:transparent;cursor:default;}
.dr-wd{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:4px;}
.dr-wd span{text-align:center;font-size:10px;color:#9DB2D0;padding:3px 0;}
.dr-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.dr-d{position:relative;text-align:center;font-size:12px;color:#33415E;padding:7px 0;border-radius:7px;cursor:pointer;transition:.12s;}
.dr-d.empty{cursor:default;}
.dr-d:not(.empty):hover{background:#EAF2FF;}
.dr-d.we{color:#D94A8C;}
.dr-d.in{background:#EEF3FF;color:#1D6FE0;border-radius:0;}
.dr-d.start,.dr-d.end{background:linear-gradient(135deg,#0B62FF,#0A9BFF);color:#fff;font-weight:800;border-radius:7px;
  box-shadow:0 3px 10px rgba(11,98,255,.3);}
.dr-d.today:not(.start):not(.end){box-shadow:inset 0 0 0 1.5px #7FB4F5;}
.dr-tip{font-size:10.5px;color:#9DB2D0;margin-top:12px;}

.ps-sum{font-size:11.5px;color:#7A8AA5;line-height:1.7;margin:0 0 12px;}
.ps-sum b{color:#1D6FE0;}
.ps-opts{display:flex;flex-direction:column;gap:9px;margin-bottom:14px;}
.ps-opt{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border:1.5px solid #E3EBF7;border-radius:11px;cursor:pointer;transition:.15s;background:#FBFDFF;}
.ps-opt:hover{border-color:#B9CFEF;background:#F5FAFF;}
.ps-opt input{margin-top:2px;flex:none;}
.ps-opt:has(input:checked){border-color:#2F7BFF;background:#F3F8FF;box-shadow:0 0 0 3px rgba(47,123,255,.08);}
.ps-opt-main{font-size:12.5px;font-weight:800;color:#1F2E4D;}
.ps-opt-sub{font-size:10.5px;color:#93A6BD;margin-top:3px;line-height:1.6;}
.ps-sel{width:100%;margin-top:7px;padding:7px 9px;border:1.5px solid #DCE6F5;border-radius:8px;font-size:11.5px;font-family:inherit;background:#fff;}
.ps-sel:disabled{background:#F3F6FA;color:#A8B8CC;}
.ps-sel:focus{outline:none;border-color:#2F7BFF;box-shadow:0 0 0 3px rgba(47,123,255,.12);}
.pd-slot-info{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0 4px;}
.pd-slot-info > div{background:rgba(255,255,255,.9);border:1px solid #DCE7F8;border-radius:9px;padding:8px 10px;}
.pd-slot-info span{display:block;font-size:9.5px;color:#6B7A90;}
.pd-slot-info b{display:block;font-size:11.5px;color:#1B3B6F;margin-top:2px;font-weight:700;word-break:break-all;}
.pd-slot-info b.mono{font-family:Consolas,monospace;}



@media (max-width:1180px){
  #pane-entry.active{grid-template-columns:1fr;}
  .slot-side{position:static;height:auto;}
  .slot-list{max-height:280px;}
  .entry-grid{grid-template-columns:1fr;}
  .metric-grid{grid-template-columns:repeat(2,1fr);}
  .issue-form{grid-template-columns:1fr 1fr;}
}

/* ---------- PDF 模板（table 布局，html2canvas 安全版） ---------- */
.pdf-page .pdf-inner{display:block;padding:36px 44px 92px;height:1123px;}
.pdf-meta-tbl{width:100%;border-collapse:collapse;margin-top:16px;}
.pdf-meta-tbl td{padding:0;vertical-align:top;width:25%;}
.pdf-meta-tbl td .pm{padding-right:9px;}
.pdf-meta-tbl td .pm-card{background:rgba(255,255,255,.86);border:1px solid #D8E4F7;border-radius:9px;padding:9px 11px;}
.pdf-meta-tbl td .pm-card span{display:block;font-size:10.5px;color:#6B7A90;}
.pdf-meta-tbl td .pm-card strong{display:block;font-size:13.5px;font-weight:600;margin-top:3px;word-break:break-all;}
.pdf-grid{width:100%;border-collapse:collapse;margin-top:16px;}
.pdf-grid>tbody>tr>td{padding:0;vertical-align:top;}
.pdf-grid td.side{width:238px;padding-right:16px;}
.pdf-stack{display:block;margin-top:16px;}
.pdf-foot{position:absolute;left:44px;right:44px;bottom:30px;margin-top:0;border-top:1px dashed #C6D8F3;padding-top:9px;display:block;font-size:10.5px;color:#5C6E88;}
.pdf-foot .fl{float:left;}
.pdf-foot .fr{float:right;}
.pdf-hero{background:rgba(255,255,255,.88);border:1px solid #CFE0FA;border-radius:12px;padding:16px 20px;margin-top:10px;}
.pdf-hero .k{font-size:11px;color:#6B7A90;}
.pdf-hero .v{font-size:28px;font-weight:600;font-family:Consolas,monospace;letter-spacing:1.4px;color:#00337A;margin-top:4px;}
.pdf-hero .sub{font-size:12px;color:#42546E;margin-top:7px;}
.pdf-table table{background:rgba(255,255,255,.86);}

/* ---------- 货位信息卡 ---------- */
.sh-left{flex:1;min-width:0;}
.slot-facts{display:flex;gap:20px;flex-wrap:wrap;margin-top:12px;}
.fact{min-width:96px;}
.fact span{display:block;font-size:11px;color:var(--muted);letter-spacing:.2px;}
.fact strong{display:block;font-size:13.5px;font-weight:600;margin-top:3px;color:#16233A;}
.fact strong.mono{font-family:Consolas,"Courier New",monospace;letter-spacing:.3px;}
.si-express{font-size:11px;color:#7A8CA6;font-family:Consolas,monospace;margin-top:3px;letter-spacing:.2px;}

/* ---------- 新建货位（上传标签自动识别） ---------- */
.sf{background:#fff;border-radius:14px;padding:18px;width:min(580px,92vw);}
.sf-drop{border:2px dashed #C7DBFB;border-radius:12px;background:#F7FAFF;padding:20px 16px;text-align:center;cursor:pointer;transition:.15s;}
.sf-drop:hover{border-color:var(--brand);background:#F1F7FF;}
.sf-drop strong{display:block;font-size:14px;font-weight:600;margin-top:8px;color:#16233A;}
.sf-drop span{display:block;font-size:12px;color:var(--muted);margin-top:4px;line-height:1.6;}
.sf-drop-ico{width:38px;height:38px;margin:0 auto;border-radius:10px;background:#E4EEFF;position:relative;}
.sf-drop-ico:after{content:"";position:absolute;inset:11px;border:2px solid #7FA8E8;border-radius:3px;}
.sf-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px;}
.sf-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);}
.sf-grid label.span2{grid-column:span 2;}
.sf-grid input{border:1px solid var(--line);border-radius:9px;padding:9px 10px;font-size:13px;outline:none;background:#fff;}
.sf-grid input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,91,255,.1);}
.sf-hint{font-size:12px;color:var(--muted);margin-top:12px;padding:8px 10px;border-radius:8px;background:#F5F8FD;line-height:1.6;}
.sf-hint.ok{background:#EAF7F1;color:#0B7A55;}
.sf-hint.warn{background:#FFF6E8;color:#9A5B00;}
.sf-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;}

/* ---------- 当前操作人 ---------- */
.who{display:flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:6px 12px;cursor:pointer;font-size:13px;color:var(--ink-2);transition:.15s;max-width:150px;}
.who:hover{border-color:#B9CDF0;background:#F7FAFF;color:var(--brand-deep);}
.who span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.who-dot{width:7px;height:7px;border-radius:50%;background:#0E9F6E;flex:none;box-shadow:0 0 0 3px rgba(14,159,110,.15);}

/* ---------- 登录 ---------- */
.login-mask{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;background:#EAF1FD url("assets/bg.png") center center / cover no-repeat;}
.login-mask[hidden]{display:none;}
.login-card{width:min(380px,92vw);background:#fff;border-radius:18px;padding:28px 26px;box-shadow:0 24px 60px -20px rgba(10,40,90,.35);text-align:center;}
.login-card .logo{width:52px;height:52px;object-fit:contain;margin:0 auto 14px;display:block;border-radius:13px;
  box-shadow:0 8px 20px -10px rgba(18,59,93,.55);}
.login-card h2{font-size:17px;font-weight:600;}
.login-sub{font-size:12px;color:var(--muted);margin:6px 0 18px;line-height:1.6;}
.login-card label{display:block;text-align:left;margin-bottom:12px;font-size:12px;color:var(--muted);}
.login-card input{width:100%;box-sizing:border-box;margin-top:5px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;font-size:14px;outline:none;background:#FBFCFF;}
.login-card input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,91,255,.1);background:#fff;}
.login-hint{font-size:11.5px;color:var(--muted);margin-top:12px;line-height:1.6;}
.login-card .btn.block{margin-top:4px;padding:11px;}

/* ---------- 操作记录 ---------- */
.audit-tag{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11.5px;background:#EEF3FB;color:#42546E;}
.audit-tag.del{background:#FDECEC;color:#B91C1C;}
.audit-tag.edit{background:#FFF4E5;color:#9A5B00;}
.audit-tag.add{background:#E6F6EF;color:#0B7A55;}

/* ---------- 按天汇总：日期卡片 ---------- */
.day-grid{display:grid;grid-template-columns:repeat(auto-fill,302px);gap:16px;padding:6px 2px 8px;}
/* 全时段统计说明 */
.m-scope{font-size:11.5px;color:#8A9AB0;margin:-4px 0 12px 2px;padding-left:2px;}
.m-scope:empty{display:none;}
/* 按天汇总：分组说明 + 磁条（折叠条）+ 分页 */
.day-note{font-size:11.5px;color:#7A8AA5;margin:0 0 10px 2px;line-height:1.7;}
.day-note b{color:#1D6FE0;}
.day-fold{grid-column:1/-1;display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:12px;cursor:pointer;
  background:linear-gradient(90deg,#F2F7FF 0%,#FAFCFF 60%,#F5F9FF 100%);border:1px dashed #B9CFEF;
  transition:all .16s ease;position:relative;overflow:hidden;}
.day-fold::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,#0B62FF,#37C4FF);}
.day-fold:hover{background:linear-gradient(90deg,#E8F1FF,#F7FBFF);border-color:#7FAEEA;box-shadow:0 6px 18px -10px rgba(11,98,255,.45);transform:translateY(-1px);}
.day-fold.open{background:linear-gradient(90deg,#EAF3FF,#FBFDFF);border-style:solid;border-color:#C9DCF6;margin-bottom:2px;}
.df-arr{flex:none;width:20px;height:20px;border-radius:6px;background:#fff;border:1px solid #D3E2F7;color:#2F7BFF;
  font-size:11px;display:flex;align-items:center;justify-content:center;font-weight:800;}
.df-range{font-family:Consolas,monospace;font-size:13px;font-weight:800;color:#1F2E4D;letter-spacing:.3px;}
.df-meta{font-size:11.5px;color:#7A8AA5;}
.df-hint{margin-left:auto;font-size:11px;font-weight:800;color:#2F7BFF;background:#fff;border:1px solid #D3E2F7;
  border-radius:20px;padding:3px 11px;white-space:nowrap;}
.day-fold:hover .df-hint{background:#2F7BFF;color:#fff;border-color:#2F7BFF;}
/* 分页条 */
.day-pg{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:16px;padding:10px;
  font-size:12px;color:#7A8AA5;}
.day-pg .mini{padding:6px 14px;}
.day-pg .mini:disabled{opacity:.45;cursor:not-allowed;}
.day-card{
  background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 18px 12px;cursor:pointer;
  transition:.16s;position:relative;overflow:hidden;
}
.day-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand);opacity:0;transition:.16s;}
.day-card:hover{border-color:#B9CDF0;box-shadow:0 10px 26px -14px rgba(16,66,140,.35);transform:translateY(-2px);}
.day-card:hover:before{opacity:1;}
.dc-top{display:flex;align-items:flex-start;justify-content:space-between;}
.dc-date{display:flex;align-items:baseline;gap:5px;}
.dc-d{font-size:34px;font-weight:600;color:#0E1A2B;line-height:1;letter-spacing:-.5px;font-family:Consolas,"Courier New",monospace;}
.dc-m{font-size:14px;color:#42546E;font-weight:500;}
.dc-side{text-align:right;line-height:1.5;}
.dc-wd{display:block;font-size:12px;color:var(--muted);}
.dc-y{display:block;font-size:11.5px;color:#9AA9BF;font-family:Consolas,monospace;}
.dc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:16px 0 13px;}
.dc-stat{background:#F5F8FD;border-radius:9px;padding:9px 10px;transition:.15s;position:relative;}
.dc-stat span{display:block;font-size:10.5px;color:var(--muted);}
.dc-stat strong{display:block;font-size:19px;font-weight:600;color:var(--brand-deep);font-family:Consolas,monospace;line-height:1.25;}
.dc-stat em{display:block;font-size:10px;color:#9DB2D0;font-style:normal;margin-top:2px;white-space:nowrap;}
.dc-stat.clickable{cursor:pointer;}
.dc-stat.clickable:hover{background:var(--brand);}
.dc-stat.clickable:hover span,.dc-stat.clickable:hover strong{color:#fff;}
.dc-stat.clickable:hover em{color:rgba(255,255,255,.9);}
.dc-stat.clickable:after{content:"";position:absolute;right:8px;top:8px;width:5px;height:5px;border-right:1.5px solid #85B7EB;border-bottom:1.5px solid #85B7EB;transform:rotate(45deg);}
.dc-stat.clickable:hover:after{border-color:#fff;}
/* ---------- 三个统计块配色区分：发货位数=靛蓝 · 面单数=薄荷绿 · 异常=中性灰(有异常转玫红) ---------- */
.dc-stat[data-act="slots"]{background:#EEF3FF;box-shadow:inset 0 0 0 1px #DBE5FA;}
.dc-stat[data-act="slots"] span{color:#6B82B8;}
.dc-stat[data-act="slots"] strong{color:#2A5BD7;}
.dc-stat[data-act="slots"] em{color:#94A8D5;}
.dc-stat[data-act="slots"]:after{border-color:#9FB6E8;}
.dc-stat[data-act="slots"].clickable:hover{background:#2A5BD7;}

.dc-stat[data-act="tracks"]{background:#E8F9F0;box-shadow:inset 0 0 0 1px #C8ECDA;}
.dc-stat[data-act="tracks"] span{color:#5A9077;}
.dc-stat[data-act="tracks"] strong{color:#0B8A5B;}
.dc-stat[data-act="tracks"] em{color:#7EB49C;}
.dc-stat[data-act="tracks"]:after{border-color:#7FC7A6;}
.dc-stat[data-act="tracks"].clickable:hover{background:#0B8A5B;}

.dc-stat[data-act="issues"]{background:#F3F5FA;box-shadow:inset 0 0 0 1px #E5EAF3;}
.dc-stat[data-act="issues"] span{color:#8798B0;}
.dc-stat[data-act="issues"] strong{color:#9CB0CE;}
.dc-stat[data-act="issues"] em{color:#AEBCCF;}
.dc-stat[data-act="issues"]:after{border-color:#C3CEDE;}
.dc-stat[data-act="issues"].clickable:hover{background:#8496B0;}

.dc-stat[data-act="issues"].alert{background:#FDECEE;box-shadow:inset 0 0 0 1px #F6C9D0;}
.dc-stat[data-act="issues"].alert span{color:#B2596A;}
.dc-stat[data-act="issues"].alert strong,.dc-stat[data-act="issues"].alert strong.red{color:#D93A57;}
.dc-stat[data-act="issues"].alert em{color:#C67E8C;}
.dc-stat[data-act="issues"].alert:after{border-color:#E8A0AE;}
.dc-stat[data-act="issues"].alert.clickable:hover{background:#D93A57;}
.dc-foot{display:flex;gap:6px;border-top:1px solid var(--line-2);padding-top:9px;}

/* 日期卡片底部按钮：导出为主，去录入为链接 */
.dc-foot{display:flex;align-items:center;gap:8px;}
.dc-btn{border:0;border-radius:8px;font-family:inherit;cursor:pointer;transition:.15s;padding:5px 11px;font-size:11px;font-weight:700;line-height:1.5;}
.dc-btn.primary{background:linear-gradient(135deg,#0B62FF,#0A9BFF);color:#fff;box-shadow:0 3px 10px rgba(11,98,255,.25);}
.dc-btn.primary:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(11,98,255,.34);}
.dc-btn.link{background:transparent;color:#7A8AA5;padding:5px 4px;}
.dc-btn.link:hover{color:#0B62FF;text-decoration:underline;}

.mini{border:0;background:transparent;color:var(--muted);font-size:11.5px;padding:2px 0;cursor:pointer;}
.mini:hover{color:var(--brand);}

/* ---------- 货位标签墙（弹窗） ---------- */
.wall-head{font-size:12px;color:var(--muted);margin-bottom:12px;}
.wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;min-width:min(720px,86vw);}
.wall-item{border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden;cursor:pointer;transition:.15s;}
.wall-item:hover{border-color:var(--brand);box-shadow:0 8px 22px -12px rgba(0,80,200,.45);transform:translateY(-2px);}
.wall-img{height:168px;background:#F7FAFF;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--line-2);overflow:hidden;}
.wall-img img{max-width:100%;max-height:100%;object-fit:contain;display:block;cursor:zoom-in;}
.wall-img .noimg{font-size:12px;color:#9DB2D0;}
.wall-info{padding:10px 12px 12px;display:flex;flex-direction:column;gap:2px;}
.wall-info strong{font-size:14px;font-family:Consolas,monospace;letter-spacing:.3px;}
.wi-express{font-size:11.5px;color:#5C6E88;font-family:Consolas,monospace;}
.wi-sub{font-size:11.5px;color:var(--muted);}
.wi-count{display:inline-block;margin-top:5px;font-size:11px;color:var(--brand-deep);background:#E8F1FF;border-radius:20px;padding:1px 8px;align-self:flex-start;}

/* 悬停放大浮层 */
.hover-zoom{position:fixed;z-index:300;opacity:0;pointer-events:none;transition:opacity .12s;background:#fff;border:1px solid #D8E4F7;border-radius:10px;padding:6px;box-shadow:0 14px 40px rgba(10,30,60,.3);}
.hover-zoom.show{opacity:1;}
.hover-zoom img{display:block;width:340px;height:auto;border-radius:6px;}
.hover-zoom .hz-body{display:flex;gap:10px;align-items:stretch;}
.hover-zoom .hz-label img{display:block;width:340px;height:auto;border-radius:6px;background:#fff;}
.hover-zoom .hz-photos{display:none;flex-direction:column;gap:4px;max-width:340px;}
.hover-zoom .hz-cap{font-size:11px;color:#5A7BA6;padding:0 2px;font-weight:600;white-space:nowrap;}
.hover-zoom .hz-cap.dim{color:#A5B4C8;font-weight:400;}
.hover-zoom .hz-plist{display:flex;gap:6px;flex:1;min-height:0;overflow-x:auto;}
.hover-zoom .hz-ph{width:150px;height:100%;object-fit:fill;border-radius:6px;border:1px solid var(--line);cursor:zoom-in;flex:none;}
.hover-zoom .hz-ph:hover{border-color:var(--brand);}

/* 打包照片卡片（录入页左栏）—— 与上方货位标签预览同尺寸（300px 高整宽），拉伸填满不裁剪 */
.entry-left{display:flex;flex-direction:column;gap:14px;min-width:0;}
.pack-card{cursor:default;}
.pack-grid{display:flex;flex-direction:column;gap:8px;}
.pack-thumb{position:relative;border-radius:9px;overflow:hidden;border:1px solid var(--line);background:#F3F7FD;height:300px;cursor:zoom-in;}
.pack-thumb img{width:100%;height:100%;object-fit:fill;display:block;}
.pack-thumb:hover{border-color:var(--brand);}
.pack-del{position:absolute;top:6px;right:6px;width:24px;height:24px;border:none;border-radius:50%;background:rgba(20,30,50,.62);color:#fff;font-size:14px;line-height:22px;text-align:center;cursor:pointer;opacity:0;transition:.12s;padding:0;}
.pack-thumb:hover .pack-del{opacity:1;}
.pack-del:hover{background:#D64545;}
/* 有照片时上传按钮是矮条；一张照片都没有时撑到 300px 和标签框一样高 */
.pack-add{border:1.5px dashed #B9CDEB;border-radius:9px;background:#F6FAFF;height:46px;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px;cursor:pointer;color:#5A7BA6;transition:.12s;padding:0 10px;font-family:inherit;width:100%;}
.pack-add:only-child{height:300px;flex-direction:column;gap:6px;}
.pack-add:hover{border-color:var(--brand);color:var(--brand);background:#EEF5FF;}
.pack-add .pa-ico{font-size:20px;line-height:1;}
.pack-add .pa-txt{font-size:12px;}
.pack-add:only-child .pa-ico{font-size:26px;}
.pack-hint{font-size:11px;color:#9AA9BF;margin-top:8px;text-align:left;line-height:1.5;}
.pack-hint b{color:#5A7BA6;}

/* 打包照片：查看弹窗 / 明细弹窗缩略条 */
.pv-wrap{display:flex;gap:16px;align-items:flex-start;}
.pv-img img{max-width:56vw;max-height:66vh;border-radius:8px;border:1px solid var(--line);display:block;}
.pv-side{min-width:180px;display:flex;flex-direction:column;gap:10px;}
.pv-title{font-size:13px;font-weight:600;color:#16233A;}
.pv-fact{display:flex;justify-content:space-between;gap:10px;font-size:12px;border-bottom:1px dashed var(--line-2);padding-bottom:6px;}
.pv-fact span{color:var(--muted);}
.pv-nav{display:flex;gap:8px;}
.sd-photos{margin-top:12px;}
.sdp-title{font-size:12px;color:var(--muted);margin-bottom:8px;}
.sdp-row{display:flex;gap:8px;flex-wrap:wrap;}
.sdp-row img{width:92px;height:70px;object-fit:cover;border-radius:6px;border:1px solid var(--line);cursor:zoom-in;}
.sdp-row img:hover{border-color:var(--brand);}

/* ---------- 货位下钻：面单列表 ---------- */
.sd-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;}
.sd-facts{display:flex;gap:18px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:11px;padding:11px 14px;}
.sd-facts div span{display:block;font-size:10.5px;color:var(--muted);}
.sd-facts div strong{display:block;font-size:13px;margin-top:2px;}
.sd-facts div strong.mono{font-family:Consolas,monospace;}

/* ---------- 可点击外链（面单号） ---------- */
.ext-link{color:var(--brand);text-decoration:none;border-bottom:1px dashed rgba(0,91,255,.45);cursor:pointer;transition:.12s;border-radius:3px;padding:0 1px;}
.ext-link:hover{color:var(--brand-deep);border-bottom-style:solid;background:#EFF5FF;}

/* ---------- 运单详情弹窗 ---------- */
.td-wrap{display:grid;grid-template-columns:300px minmax(0,1fr);gap:18px;min-width:min(820px,88vw);}
.td-label{border:1px solid var(--line);border-radius:12px;background:#fff;padding:8px;text-align:center;}
.td-label img{max-width:100%;max-height:340px;object-fit:contain;display:block;margin:0 auto;cursor:zoom-in;border-radius:6px;}
.td-label .ph{height:230px;display:flex;align-items:center;justify-content:center;color:#9DB2D0;font-size:12px;background:#F7FAFF;border-radius:8px;}
.td-label-cap{font-size:11px;color:var(--muted);margin-top:7px;}
.td-hero{background:linear-gradient(135deg,#F2F8FF,#E8F1FF);border:1px solid #CFE0FA;border-radius:12px;padding:16px 18px;}
.td-key{font-size:11px;color:#5C6E88;letter-spacing:.3px;}
.td-no{font-size:25px;font-weight:600;font-family:Consolas,"Courier New",monospace;letter-spacing:1px;color:#00337A;margin-top:3px;word-break:break-all;}
.td-when{font-size:12.5px;color:#1B4E8C;margin-top:8px;}
.td-when b{font-family:Consolas,monospace;font-weight:600;}
.td-table{width:100%;border-collapse:collapse;margin-top:14px;font-size:13px;}
.td-table th{width:104px;text-align:left;font-weight:400;color:var(--muted);padding:7px 10px 7px 0;vertical-align:top;font-size:12px;}
.td-table td{padding:7px 0;border-bottom:1px solid var(--line-2);color:#16233A;}
.td-table tr:last-child td{border-bottom:0;}
.td-table td.mono{font-family:Consolas,"Courier New",monospace;letter-spacing:.3px;}
.td-actions{display:flex;gap:9px;justify-content:flex-end;margin-top:18px;padding-top:14px;border-top:1px solid var(--line-2);flex-wrap:wrap;}
.td-tip{font-size:11.5px;color:var(--muted);margin-right:auto;line-height:1.6;}

/* PDF 发运说明 */
.pdf-note{background:rgba(255,255,255,.88);border:1px solid #CFE0FA;border-left:3px solid #005BFF;border-radius:10px;padding:12px 15px;margin-top:14px;}
.pdf-note .pn-t{font-size:11.5px;font-weight:600;color:#005BFF;margin-bottom:5px;}
.pdf-note p{font-size:11.5px;line-height:1.85;color:#22364f;margin:0;text-align:justify;}

/* ---------- 微信分享卡片（600px，供 html2canvas 渲染） ---------- */
.share-card{width:600px;background:#fff;font-family:"Microsoft YaHei","PingFang SC",sans-serif;color:#0E1A2B;}
.sc-head{background:#005BFF;padding:20px 26px;}
.sc-head table{width:100%;border-collapse:collapse;}
.sc-head td{vertical-align:middle;padding:0;}
.sc-logo{width:44px;height:44px;border-radius:11px;background:#fff;color:#005BFF;text-align:center;line-height:44px;font-weight:700;font-size:14px;letter-spacing:.5px;}
.sc-tt{padding-left:14px;}
.sc-title{font-size:17px;font-weight:600;color:#fff;}
.sc-sub{font-size:12px;color:#CFE0FA;margin-top:3px;}
.sc-hero{padding:24px 26px 20px;border-bottom:1px dashed #D8E4F7;}
.sc-key{font-size:11.5px;color:#6B7A90;}
.sc-no{font-size:33px;font-weight:600;font-family:Consolas,"Courier New",monospace;color:#00337A;letter-spacing:1.2px;margin-top:6px;word-break:break-all;line-height:1.15;}
.sc-when{font-size:13px;color:#1B4E8C;margin-top:9px;}
.sc-when b{font-family:Consolas,monospace;}
.sc-img{padding:18px 26px;text-align:center;background:#F7FAFF;border-bottom:1px solid #EEF3FB;}
.sc-img img{max-width:100%;max-height:250px;border:1px solid #D8E4F7;border-radius:8px;display:block;margin:0 auto;}
.sc-body{padding:16px 26px 4px;}
.sc-tbl{width:100%;border-collapse:collapse;font-size:13px;}
.sc-tbl th{width:94px;text-align:left;font-weight:400;color:#6B7A90;font-size:12px;padding:8px 10px 8px 0;border-bottom:1px solid #EEF3FB;vertical-align:top;}
.sc-tbl td{padding:8px 0;border-bottom:1px solid #EEF3FB;color:#16233A;}
.sc-tbl td.mono{font-family:Consolas,"Courier New",monospace;letter-spacing:.3px;}
.sc-note{margin:14px 26px 0;padding:13px 15px;background:#F2F8FF;border-left:3px solid #005BFF;border-radius:8px;font-size:12px;line-height:1.9;color:#22364f;text-align:justify;}
.sc-foot{padding:16px 26px 20px;}
.sc-foot table{width:100%;border-collapse:collapse;}
.sc-foot td{font-size:10.5px;color:#8A99B0;padding:0;}
.sc-foot td.r{text-align:right;}

/* 分享卡片头部：inline-block 布局，避免 html2canvas 的 table 宽度问题 */
.sc-head{padding:18px 26px;overflow:hidden;}
.sc-logo{display:inline-block;width:44px;height:44px;border-radius:11px;background:#fff;color:#005BFF;text-align:center;line-height:44px;font-weight:700;font-size:14px;vertical-align:middle;}
.sc-tt{display:inline-block;vertical-align:middle;margin-left:14px;}

/* 分享卡片头部：inline-block 布局，避免 html2canvas 的 table 宽度问题 */
.sc-head{padding:18px 26px;overflow:hidden;}
.sc-logo{display:inline-block;width:44px;height:44px;border-radius:11px;background:#fff;color:#005BFF;text-align:center;line-height:44px;font-weight:700;font-size:14px;vertical-align:middle;}
.sc-tt{display:inline-block;vertical-align:middle;margin-left:14px;}

/* ---------- 物流轨迹时间轴 ---------- */
.ex-wrap{min-width:min(560px,86vw);}
.ex-head{background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px 16px;margin-bottom:14px;}
.ex-head table{width:100%;border-collapse:collapse;}
.ex-head td{padding:0;vertical-align:middle;}
.ex-com{font-size:14px;font-weight:600;color:#16233A;}
.ex-nu{font-size:12.5px;color:var(--muted);font-family:Consolas,"Courier New",monospace;margin-top:3px;}
.ex-state{display:inline-block;font-size:12.5px;padding:5px 13px;border-radius:20px;background:#E8F1FF;color:var(--brand-deep);white-space:nowrap;}
.ex-state.done{background:#E6F6EF;color:#0B7A55;}
.ex-list{background:#fff;border:1px solid var(--line);border-radius:11px;padding:16px 18px 6px;max-height:52vh;overflow:auto;}
.ex-item{position:relative;padding:0 0 18px 20px;margin-left:5px;border-left:2px solid #E3EBF8;}
.ex-item:last-child{border-left-color:transparent;padding-bottom:2px;}
.ex-dot{position:absolute;left:-6px;top:4px;width:10px;height:10px;border-radius:50%;background:#C7D8F0;}
.ex-item.top .ex-dot{background:var(--brand);box-shadow:0 0 0 4px rgba(0,91,255,.14);}
.ex-time{font-size:12px;color:var(--muted);font-family:Consolas,"Courier New",monospace;}
.ex-text{font-size:13px;color:#16233A;margin-top:3px;line-height:1.65;}
.ex-item.top .ex-text{color:var(--brand-deep);font-weight:500;}
.ex-empty{padding:30px 20px;text-align:center;color:var(--muted);font-size:13px;line-height:1.9;}
.ex-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;}

/* 日期卡片：均单小字 + 异常格 */
.dc-sub{font-size:11px;color:#9DB2D0;margin:-5px 0 9px;letter-spacing:.2px;}
.dc-stat strong.red{color:#E02424;}
.dc-stat.alert{background:#FFF5F5;}
.dc-stat.alert:after{border-color:#E29A9A;}
.dc-stat.alert:hover{background:#E02424;}
.dc-stat.alert:hover span,.dc-stat.alert:hover strong,.dc-stat.alert:hover em{color:#fff;}
.dc-stat.alert:hover:after{border-color:#fff;}

/* ---------- 货位分组与结单状态 ---------- */
.slot-group{display:flex;align-items:center;gap:7px;padding:9px 8px 5px;font-size:11.5px;color:var(--muted);}
.slot-group b{font-weight:500;color:#42546E;}
.slot-group .ln{flex:1;height:1px;background:var(--line-2);}
.slot-group .tg{font-size:11px;color:var(--brand);cursor:pointer;padding:1px 6px;border-radius:5px;background:#EAF2FF;}
.slot-group .tg:hover{background:#DCE9FF;}

.slot-item.closed{background:#F7FAF9;border-color:#DCE8E2;}
.slot-item.closed .si-code{color:#4A6B5C;}
.slot-item.closed .slot-thumb{opacity:.75;}
.slot-item.closed.active{background:#EAF7F0;border-color:#9AD3B6;box-shadow:inset 3px 0 0 #0E9F6E;}

.si-check{width:15px;height:15px;border-radius:50%;background:#0E9F6E;color:#fff;font-size:10px;line-height:15px;text-align:center;flex:none;}

/* 已发运：详情页状态条 */
.closed-bar{display:flex;align-items:center;gap:10px;background:#EAF7F0;border:1px solid #B7E3CD;color:#0B6B4B;border-radius:10px;padding:10px 14px;margin-top:12px;font-size:13px;}
.closed-bar b{font-weight:600;}
.closed-bar .dot{width:8px;height:8px;border-radius:50%;background:#0E9F6E;flex:none;}

.scan-locked{background:#F5F8F6;border:1px dashed #B7E3CD;border-radius:12px;padding:16px;text-align:center;color:#4A7A63;font-size:13px;line-height:1.8;}
.scan-locked b{color:#0B6B4B;}

.btn.close{background:#0E9F6E;border-color:#0E9F6E;color:#fff;font-weight:500;}
.btn.close:hover{background:#0B7A55;border-color:#0B7A55;color:#fff;}
.btn.reopen{color:#0B6B4B;border-color:#B7E3CD;background:#F2FAF6;}
.btn.reopen:hover{background:#E4F5EC;border-color:#8FCFAE;color:#08553C;}

/* ---------- 录入区顶部导航（等待发运 / 已发运 / 遗留） ---------- */
.slot-tabs{
  grid-column:1 / -1;display:flex;align-items:center;gap:28px;height:52px;padding:0 24px;
  background:var(--bg-card);backdrop-filter:blur(10px);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--shadow);
}
.slot-tab{position:relative;height:52px;display:flex;align-items:center;gap:7px;border:0;background:none;cursor:pointer;font-size:14px;color:#42546E;padding:0;transition:color .15s;}
.slot-tab:hover{color:var(--brand-deep);}
.slot-tab .cnt{font-size:11.5px;background:#EDF1F7;color:#5C6E88;border-radius:20px;padding:1.5px 8px;min-width:22px;text-align:center;font-family:Consolas,monospace;}
.slot-tab.active{color:var(--brand);font-weight:500;}
.slot-tab.active .cnt{background:var(--brand);color:#fff;}
.slot-tab.active:after{content:"";position:absolute;left:-2px;right:-2px;bottom:0;height:2.5px;background:var(--brand);border-radius:2px 2px 0 0;}
.slot-tab.warn{color:#B45309;}
.slot-tab.warn .cnt{background:#FEF0DC;color:#B45309;}
.slot-tab.warn.active{color:#DC2626;font-weight:500;}
.slot-tab.warn.active .cnt{background:#DC2626;color:#fff;}
.slot-tab.warn.active:after{background:#DC2626;}
.slot-tabs .tb-right{margin-left:auto;display:flex;align-items:center;gap:10px;}

/* 遗留货位卡片 */
.slot-item.overdue{background:#FFF6F6;border-color:#F5C6C6;}
.slot-item.overdue .si-code{color:#B42318;}
.slot-item.overdue.active{background:#FFEFEF;border-color:#E9A3A3;box-shadow:inset 3px 0 0 #DC2626;}
.si-date{font-size:11px;color:#B42318;font-family:Consolas,monospace;margin-top:2px;}

/* 遗留提示条 */
.leftover-bar{background:#FFF6F6;border:1px solid #F5C6C6;border-left:3px solid #DC2626;border-radius:10px;padding:12px 16px;margin-top:12px;}
.leftover-bar .lb-t{font-size:13.5px;font-weight:600;color:#B42318;display:flex;align-items:center;gap:7px;}
.leftover-bar .lb-t .ico{width:16px;height:16px;border-radius:50%;background:#DC2626;color:#fff;font-size:11px;line-height:16px;text-align:center;flex:none;}
.leftover-bar p{font-size:12.5px;color:#7A3B3B;margin:6px 0 0;line-height:1.75;}
.leftover-bar .lb-note{background:#fff;border:1px solid #F7D4D4;border-radius:8px;padding:8px 10px;margin-top:8px;font-size:12.5px;color:#5C2A2A;}
.leftover-bar .lb-actions{display:flex;gap:8px;margin-top:10px;}

/* 订单板块统计条 */
.ord-sum{display:flex;gap:18px;flex-wrap:wrap;font-size:12.5px;color:#5C6E88;margin-top:10px;}
.ord-sum span{display:inline-flex;align-items:center;gap:4px;}
.ord-sum b{font-size:14px;color:#16325C;}
.ord-sum b.blue{color:#005BFF;}
.ord-sum b.orange{color:#B96A00;}
.ord-sum b.green{color:#1B8A4C;}

/* ============ 左侧导航 + 工作台（2026-10-26 改版） ============ */
.app-body{display:flex;gap:14px;align-items:flex-start;}
main{flex:1;min-width:0;}
.sidenav{
  width:176px;flex:none;position:sticky;top:14px;
  background:linear-gradient(170deg,#08172D,#10335C 60%,#12406F);
  border-radius:14px;padding:12px 10px 14px;
  display:flex;flex-direction:column;gap:3px;
  box-shadow:0 12px 30px rgba(6,24,52,.20);
}
.sidenav::after{content:"";position:absolute;inset:0;border-radius:14px;pointer-events:none;
  background:radial-gradient(320px 160px at 100% 0%,rgba(0,194,255,.16),transparent 70%);}
.snav-title{font-size:10px;color:#6E8CB6;letter-spacing:1.6px;padding:9px 11px 4px;position:relative;}
.sidenav .tab{
  width:100%;text-align:left;border:1px solid transparent;background:transparent;
  color:#B7CCE6;padding:9px 12px;border-radius:9px;font-size:13.5px;cursor:pointer;
  display:flex;align-items:center;gap:6px;position:relative;transition:.15s;font-family:inherit;
}
.sidenav .tab:hover{background:rgba(255,255,255,.08);color:#fff;}
.sidenav .tab span{opacity:1;margin:0;font-size:11.5px;}
.sidenav .tab.active{
  background:linear-gradient(90deg,rgba(0,91,255,.55),rgba(0,194,255,.16));
  color:#fff;border-color:rgba(0,194,255,.30);
  box-shadow:0 4px 16px rgba(0,91,255,.32);
}
.sidenav .tab.active::before{content:"";position:absolute;left:-10px;top:50%;transform:translateY(-50%);
  width:3px;height:16px;border-radius:0 3px 3px 0;background:linear-gradient(180deg,#00C2FF,#005BFF);
  box-shadow:0 0 8px rgba(0,194,255,.8);}
.sbadge{margin-left:auto;background:rgba(0,194,255,.20);color:#9FE3FF;font-size:10.5px;
  padding:1px 7px;border-radius:20px;font-weight:700;opacity:1 !important;}
.sidenav .tab.active .sbadge{background:rgba(255,255,255,.24);color:#fff;}
.snav-foot{margin-top:auto;padding-top:14px;}
.snav-id{font-size:10px;color:#5E7FAE;letter-spacing:1px;padding:0 11px;}
.topright{margin-left:auto;}

/* 工作台 */
.dash-hero{
  position:relative;border-radius:var(--r);padding:20px 22px;margin-bottom:14px;overflow:hidden;
  background:linear-gradient(115deg,#08192F,#123A6B 52%,#0C5DA8);color:#DCEBFF;
  box-shadow:0 14px 34px rgba(8,32,68,.20);
  display:flex;flex-wrap:wrap;gap:20px;align-items:center;justify-content:space-between;
}
.dash-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(520px 200px at 92% -20%,rgba(0,194,255,.30),transparent 70%);}
.dh-left{position:relative;}
.dh-tag{font-size:11px;letter-spacing:2.2px;color:#7DE2FF;font-weight:600;margin-bottom:8px;}
.dh-left h2{font-size:20px;margin:0;color:#fff;letter-spacing:.3px;}
.dh-left h2 span{font-family:Consolas,monospace;font-size:17px;color:#9FE3FF;}
.dh-left p{margin:7px 0 0;font-size:12.5px;color:#9DBEE6;}
.dh-left p b{color:#fff;font-family:Consolas,monospace;font-size:14px;}
.dh-stats{display:flex;gap:10px;position:relative;flex-wrap:wrap;}
.dh-s{min-width:86px;background:rgba(255,255,255,.09);border:1px solid rgba(160,210,255,.20);
  border-radius:11px;padding:10px 14px;text-align:center;backdrop-filter:blur(4px);}
.dh-s b{display:block;font-size:22px;font-family:Consolas,monospace;color:#fff;line-height:1.2;}
.dh-s span{font-size:10.5px;color:#9DBEE6;letter-spacing:.4px;}

.dash-todo{display:flex;flex-wrap:wrap;gap:10px;}
.todo-item{
  flex:1 1 200px;display:flex;align-items:center;gap:11px;padding:12px 14px;border-radius:11px;
  border:1px solid var(--line);background:linear-gradient(180deg,#FCFEFF,#F6FAFF);cursor:pointer;transition:.15s;
}
.todo-item:hover{border-color:rgba(0,91,255,.30);box-shadow:0 6px 18px rgba(10,40,90,.07);transform:translateY(-1px);}
.todo-item .ti-ico{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:16px;flex:none;background:#EAF2FF;color:#005BFF;}
.todo-item.warn .ti-ico{background:#FFF3E4;color:#B96A00;}
.todo-item.danger .ti-ico{background:#FDECEC;color:#E5484D;}
.todo-item.ok .ti-ico{background:#E7F8EF;color:#0E9F5B;}
.todo-item .ti-t{font-size:13px;font-weight:600;color:#16325C;}
.todo-item .ti-s{font-size:11.5px;color:#8FA2BC;margin-top:2px;}
.todo-item .ti-n{margin-left:auto;font-family:Consolas,monospace;font-size:19px;font-weight:800;color:#005BFF;}
.todo-item.warn .ti-n{color:#B96A00;}
.todo-item.danger .ti-n{color:#E5484D;}

.id-hint{font-size:11.5px;color:#8FA2BC;line-height:1.8;margin-top:8px;}
.cus-id{display:inline-block;background:linear-gradient(135deg,#005BFF,#00C2FF);color:#fff;
  font-family:Consolas,monospace;font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:20px;}
.cus-req{display:inline-block;background:#FDECEC;color:#E5484D;font-size:11px;padding:1px 8px;
  border-radius:20px;font-weight:700;margin-left:6px;}

@media(max-width:1080px){
  .app-body{flex-direction:column;}
  .sidenav{width:100%;position:static;flex-direction:row;flex-wrap:wrap;align-items:center;padding:10px;}
  .snav-title,.snav-foot{display:none;}
  .sidenav .tab{width:auto;}
}

/* ================= 左侧导航重设计（层次 + 图标 + 动画） ================= */
.sidenav{padding:12px 12px 16px;}
.sidenav .snav-sec{display:flex;align-items:center;gap:8px;margin:16px 0 7px 11px;
  font-size:9.5px;font-weight:800;letter-spacing:2.6px;color:rgba(138,170,208,.52);text-transform:uppercase;}
.sidenav .snav-sec:first-child{margin-top:2px;}
.sidenav .snav-sec::after{content://;flex:1;height:1px;background:linear-gradient(90deg,rgba(120,165,215,.24),rgba(120,165,215,0));}
.sidenav .tab{font-size:13.5px;font-weight:600;color:#C9DBF0;padding:9px 11px;border-radius:10px;gap:10px;letter-spacing:.2px;}
.sidenav .tab .tl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;}
.sidenav .tab .ti{width:15.5px;height:15.5px;flex:none;opacity:.92;transition:.15s;}
.sidenav .tab:hover .ti{opacity:1;transform:translateY(-.5px);}
.ti.c-blue{color:#6FA8FF;} .ti.c-teal{color:#4FD1C5;} .ti.c-cyan{color:#57C7F5;}
.ti.c-violet{color:#B39BFF;} .ti.c-amber{color:#F5B85C;} .ti.c-green{color:#68D391;}
.ti.c-rose{color:#F58EA6;} .ti.c-slate{color:#9AAEC6;}
.sidenav .tab-parent{font-size:13.5px;font-weight:800;color:#DCE9FA;}
.sidenav .tab-parent::before{content://;position:absolute;left:1px;top:50%;transform:translateY(-50%);
  width:3px;height:0;border-radius:2px;background:linear-gradient(180deg,#37C4FF,#0B62FF);transition:height .2s ease;}
.sidenav .tab-group.open > .tab-parent::before,
.sidenav .tab-group.sub-on > .tab-parent::before{height:16px;}
.sidenav .tab-parent .tab-arr{margin-left:2px;font-size:8px;color:rgba(160,190,225,.55);transition:transform .22s ease;}
.sidenav .tab-group.open > .tab-parent .tab-arr{transform:rotate(180deg);color:rgba(120,200,255,.9);}
.sidenav .tab .sbadge{margin-left:4px;}
.sidenav .tab.sub{font-size:12.5px;font-weight:400;color:#93A9C4;padding:7px 11px 7px 40px;border-radius:8px;
  letter-spacing:0;background:transparent;box-shadow:none;}
.sidenav .tab.sub::before{content:none;}
.sidenav .tab.sub:hover{background:rgba(255,255,255,.055);color:#DCE9FA;}
.sidenav .tab-subs,.sidenav .sub-nav{position:relative;padding:2px 0 4px;}
.sidenav .tab-subs::before,.sidenav .sub-nav::before{content://;position:absolute;left:22px;top:5px;bottom:7px;width:1px;
  background:linear-gradient(180deg,rgba(110,160,215,.26),rgba(110,160,215,.05));}
.sidenav .tab.sub .sd{position:absolute;left:19.5px;top:50%;width:5px;height:5px;border-radius:50%;
  transform:translateY(-50%);background:rgba(120,160,205,.42);transition:.15s;z-index:1;}
.sidenav .tab.sub.active{background:linear-gradient(90deg,rgba(0,91,255,.32),rgba(0,194,255,.08));
  color:#fff;font-weight:700;box-shadow:inset 0 0 0 1px rgba(80,170,255,.22);}
.sidenav .tab.sub.active .tl{opacity:1;}
.sidenav .tab.sub.active .sd{background:#5BC8FF;box-shadow:0 0 8px rgba(91,200,255,.95);width:6px;height:6px;}
.sidenav .tab.sub.active::after{content://;position:absolute;left:-11px;top:50%;transform:translateY(-50%);
  width:3px;height:14px;border-radius:0 3px 3px 0;background:linear-gradient(180deg,#00C2FF,#005BFF);
  box-shadow:0 0 8px rgba(0,194,255,.8);}
.sidenav .tab-group.sub-on > .tab-parent{background:rgba(0,91,255,.10);color:#fff;}
.sidenav .tab.active:not(.sub){background:linear-gradient(90deg,rgba(0,91,255,.55),rgba(0,194,255,.16));
  color:#fff;box-shadow:0 4px 16px rgba(0,91,255,.32);}
.sidenav .tab.active:not(.sub) .tl{opacity:1;}
.sidenav .tab.active:not(.sub)::before{content://;position:absolute;left:-11px;top:50%;transform:translateY(-50%);
  width:3px;height:16px;border-radius:0 3px 3px 0;background:linear-gradient(180deg,#00C2FF,#005BFF);
  box-shadow:0 0 8px rgba(0,194,255,.8);height:16px !important;}
.sidenav .tab-subs{display:flex;flex-direction:column;max-height:0;opacity:0;overflow:hidden;
  transition:max-height .28s ease,opacity .2s ease,padding .2s ease;padding:0;}
.sidenav .tab-group.open > .tab-subs{max-height:360px;opacity:1;padding:2px 0 4px;}

/* ===== 待打包：卡片列表的顶部操作条（2026-11-05 由表格改为卡片） ===== */
.om-cardbar{display:flex;align-items:center;gap:14px;padding:8px 12px;margin-bottom:10px;
  background:#F7FAFF;border:1px solid #E3EBF7;border-radius:10px;font-size:12.5px;color:#54657F;}
.om-cardbar input[type="checkbox"]{width:15px;height:15px;cursor:pointer;}
.om-cardtip{color:#8593A6;}

/* ===== 已打包订单卡片：轻微灰化（已完成，但仍要能看清） ===== */
.ocard.finished{filter:grayscale(.5);opacity:.9;}
.ocard.finished:hover{filter:grayscale(.12);opacity:1;}

/* ============ 创建货位 v2（2026-11-07 重做） ============ */
.osv2-hero{
  display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;
  padding:22px 26px;border-radius:16px;margin-bottom:14px;
  background:linear-gradient(120deg,#0E2A54 0%,#123E75 45%,#1B5FA8 100%);
  box-shadow:0 10px 28px -12px rgba(14,42,84,.55);
}
.osv2-hero h2{margin:0 0 5px;font-size:19px;font-weight:800;color:#fff;letter-spacing:.4px;}
.osv2-hero p{margin:0;font-size:12.5px;color:rgba(255,255,255,.66);}
.osv2-hero-r{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.osv2-hero-r i{color:rgba(255,255,255,.35);font-style:normal;font-size:12px;}
.osv2-chip{
  display:inline-block;padding:4px 11px;border-radius:20px;font-size:11.5px;font-weight:600;
  color:rgba(255,255,255,.86);background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);
}

.osv2-bar{
  display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;
  background:#fff;border:1px solid #E3EBF7;border-radius:14px;padding:16px 18px;margin-bottom:14px;
  box-shadow:0 1px 3px rgba(20,50,110,.04);
}
.osv2-field{display:flex;flex-direction:column;gap:6px;min-width:280px;}
.osv2-field label{font-size:11.5px;font-weight:700;color:#7A8AA5;letter-spacing:.4px;}
.osv2-sel{
  height:38px;padding:0 12px;border:1.5px solid #DCE6F5;border-radius:10px;background:#fff;
  font-size:13px;font-family:inherit;color:#1F2E4D;outline:none;cursor:pointer;transition:border-color .15s;
}
.osv2-sel:focus{border-color:#2F7BFF;box-shadow:0 0 0 3px rgba(47,123,255,.12);}
.osv2-go{height:38px;padding:0 20px;border-radius:10px;font-weight:700;}

.osv2-list{display:flex;flex-direction:column;gap:10px;}
.osv2-list-head{font-size:12px;color:#8593A6;font-weight:600;padding:2px 4px 4px;}
.osv2-empty{
  background:#fff;border:1px dashed #DCE6F5;border-radius:14px;padding:34px 20px;text-align:center;
  font-size:13px;color:#7A8AA5;line-height:1.9;
}
.osv2-item{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:#fff;border:1px solid #E3EBF7;border-radius:14px;padding:15px 18px;
  transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;
}
.osv2-item:hover{transform:translateY(-2px);box-shadow:0 12px 26px -14px rgba(0,80,200,.35);border-color:#BED6F5;}
.osv2-item-t{font-size:13.5px;color:#1F2E4D;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.osv2-item-t b{font-family:Consolas,monospace;font-size:14px;letter-spacing:.4px;}
.osv2-item-m{font-size:11.5px;color:#93A6BD;margin-top:5px;}
.osv2-badge{
  display:inline-block;padding:1.5px 9px;border-radius:20px;font-size:11px;font-weight:700;
  background:#EEF3FA;color:#5C6E88;
}
.osv2-badge.new{background:#FFF4E5;color:#B96A00;}
.osv2-badge.ok{background:#E7F8EF;color:#0E9F5B;}
.osv2-pick{
  flex:none;padding:8px 22px;border-radius:10px;border:none;cursor:pointer;font-family:inherit;
  font-size:12.5px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#2F7BFF,#0B62FF);box-shadow:0 6px 14px -8px rgba(11,98,255,.9);
  transition:filter .15s,transform .15s;
}
.osv2-pick:hover{filter:brightness(1.08);transform:translateY(-1px);}

/* 预览弹窗 */
.osv2-mask{
  position:fixed;inset:0;z-index:9999;background:rgba(12,24,44,.55);backdrop-filter:blur(2px);
  display:flex;align-items:center;justify-content:center;padding:24px;
}
.osv2-modal{
  width:min(760px,94vw);max-height:92vh;background:#fff;border-radius:18px;overflow:hidden;
  display:flex;flex-direction:column;box-shadow:0 30px 80px -20px rgba(0,0,0,.5);
}
.osv2-m-head{
  display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid #E9F0F9;
  background:linear-gradient(180deg,#FBFDFF,#F5F9FF);
}
.osv2-m-head b{font-size:14.5px;color:#1F2E4D;}
.osv2-m-head span{font-size:11.5px;color:#8593A6;}
.osv2-x{
  margin-left:auto;width:30px;height:30px;border-radius:9px;border:1px solid #E3EBF7;background:#fff;
  color:#7A8AA5;cursor:pointer;font-size:13px;line-height:1;
}
.osv2-x:hover{background:#F3F8FF;color:#1D6FE0;}
.osv2-m-pdf{flex:1;display:flex;min-height:0;background:#F3F7FD;}
.osv2-m-pdf iframe{flex:1;border:none;min-width:0;min-height:0;}
.osv2-pdf{flex:1;border:none;background:#F3F7FD;min-width:0;}
.osv2-m-side{
  width:300px;flex:none;padding:18px;border-left:1px solid #E9F0F9;background:#FCFDFF;
  display:flex;flex-direction:column;gap:10px;
}
.osv2-m-tip{
  font-size:12px;color:#5C6E88;line-height:1.8;background:#F2F7FF;border:1px solid #DDEBFF;
  border-radius:11px;padding:10px 12px;
}
.osv2-m-row{display:flex;justify-content:space-between;font-size:12.5px;padding:7px 2px;border-bottom:1px dashed #E9F0F9;}
.osv2-m-row span{color:#8593A6;}
.osv2-m-row b{color:#1F2E4D;font-family:Consolas,monospace;}
.osv2-import{margin-top:auto;height:44px;border-radius:11px;font-size:13.5px;font-weight:800;}
.osv2-cancel{height:36px;border-radius:10px;font-size:12.5px;}

/* 读取中的小转圈 */
.osv2-spin{
  display:inline-block;width:13px;height:13px;margin-right:7px;vertical-align:-2px;
  border:2px solid #D6E4F8;border-top-color:#2F7BFF;border-radius:50%;
  animation:osv2spin .8s linear infinite;
}
@keyframes osv2spin{to{transform:rotate(360deg);}}

/* 读取中的小转圈 */
.osv2-spin{
  display:inline-block;width:13px;height:13px;margin-right:7px;vertical-align:-2px;
  border:2px solid #D6E4F8;border-top-color:#2F7BFF;border-radius:50%;
  animation:osv2spin .8s linear infinite;
}
@keyframes osv2spin{to{transform:rotate(360deg);}}

.osv2-err{
  background:#FFF6F6;border:1px solid #F3C7C7;border-radius:12px;padding:12px 14px;
  font-size:12.5px;line-height:1.8;color:#C93B3B;margin-bottom:10px;
}

.osv2-err{
  background:#FFF6F6;border:1px solid #F3C7C7;border-radius:12px;padding:12px 14px;
  font-size:12.5px;line-height:1.8;color:#C93B3B;margin-bottom:10px;
}

/* 拉取标签时的居中加载框 */
.osv2-loading{
  background:#fff;border-radius:16px;padding:30px 44px;font-size:13.5px;color:#1F2E4D;
  box-shadow:0 24px 60px -18px rgba(0,0,0,.45);text-align:center;line-height:2;
}
.osv2-loading .osv2-spin{width:15px;height:15px;margin-right:8px;vertical-align:-2px;}
.osv2-loading-sub{display:block;font-size:11.5px;color:#93A6BD;margin-top:2px;}

/* 预览弹窗 v2：改成紧凑版（760 宽，PDF 固定高度，信息和按钮在底部一行） */
.osv2-modal .osv2-m-pdf{height:min(62vh,620px);}
.osv2-m-foot{
  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding:12px 16px;border-top:1px solid #E9F0F9;background:#FCFDFF;
}
.osv2-m-meta{display:flex;gap:18px;flex-wrap:wrap;font-size:11.5px;color:#8593A6;}
.osv2-m-meta b{color:#1F2E4D;font-family:Consolas,monospace;font-size:12.5px;}
.osv2-m-actions{display:flex;gap:8px;align-items:center;}
.osv2-m-actions .osv2-import{height:36px;padding:0 18px;border-radius:10px;font-size:12.5px;font-weight:800;margin:0;}
.osv2-m-actions .osv2-cancel{height:36px;padding:0 16px;border-radius:10px;font-size:12.5px;}
.osv2-dl{
  height:36px;padding:0 16px;border-radius:10px;font-size:12.5px;display:inline-flex;
  align-items:center;justify-content:center;text-decoration:none;border:1.5px solid #DCE6F5;
  color:#1D6FE0;background:#F7FAFF;font-weight:700;
}
.osv2-dl:hover{background:#EAF2FF;border-color:#BED6F5;}

/* 已发运（closed）的发运单：灰化 + 不可导入 */
.osv2-item.done{background:#FAFBFD;border-color:#E9EEF6;opacity:.82;}
.osv2-item.done .osv2-item-t b{color:#7A8AA5;}
.osv2-item.done:hover{transform:none;box-shadow:none;border-color:#E9EEF6;}
.osv2-badge.done{background:#EEF1F6;color:#8593A6;}
.osv2-pick.ghost{
  background:#fff;color:#5C6E88;border:1.5px solid #DCE6F5;box-shadow:none;
}
.osv2-pick.ghost:hover{background:#F5F8FE;color:#1D6FE0;border-color:#BED6F5;}
.osv2-list-head b{color:#1D6FE0;}
.osv2-ro{
  font-style:normal;font-size:11px;font-weight:700;color:#B96A00;background:#FFF4E5;
  padding:2px 9px;border-radius:20px;margin-left:2px;
}

/* ===== 2026-11-07 修：预览弹窗高度塌陷（iframe 在 flex 行里没有高度 → 变成横条） ===== */
.osv2-m-pdf{display:block !important;}
.osv2-m-pdf iframe{display:block;width:100%;height:100%;border:0;background:#F3F7FD;}

/* 状态胶囊：已导入 / 已使用 */
.osv2-badge.imp{background:#E8F1FF;color:#1D6FE0;}
/* 国内段（中通/圆通 到广东仓）：鹏哥只看这个，做成可点、颜色分明 */
.osv2-badge.dom{background:#EAF2FF;color:#1B5BC4;border:1px solid #C6D9F7;cursor:pointer;}
.osv2-badge.dom:hover{filter:brightness(.97);}
.osv2-badge.dom.done{background:#E6F7EC;color:#127A38;border-color:#B9E3C7;}
.osv2-badge.dom.under{background:#FFF7E6;color:#8A5B00;border-color:#F0D9A6;}
.osv2-badge.dom.none{background:#F2F4F7;color:#8894A6;border-color:#E1E6EE;}
.osv2-badge.used{background:#EEF1F6;color:#8593A6;}
.osv2-note{color:#C08A2E;}

/* 已导入但仍可点开看明细：灰底，不要看起来像禁用 */
.osv2-pick.used{
  background:#EEF1F6 !important;color:#7A8AA5 !important;box-shadow:none !important;
  border:1.5px solid #E3E9F3;
}
.osv2-pick.used:hover{background:#E6EBF4 !important;color:#1D6FE0 !important;}

/* 明细弹窗 */
.osv2-modal-sm{width:min(680px,94vw);height:auto;max-height:86vh;}
.osv2-detail{flex:1;overflow-y:auto;padding:14px 16px;display:flex;flex-direction:column;gap:10px;background:#FCFDFF;}
.osv2-slot{border:1px solid #E3EBF7;border-radius:12px;background:#fff;overflow:hidden;}
.osv2-slot-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;background:#F6FAFF;border-bottom:1px solid #EDF3FB;}
.osv2-slot-h b{font-family:Consolas,monospace;font-size:13.5px;color:#1F2E4D;}
.osv2-slot-b{padding:8px 12px;display:flex;flex-direction:column;gap:5px;}
.osv2-trk{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:#5C6E88;}
.osv2-trk b{font-family:Consolas,monospace;color:#1F2E4D;font-size:12.5px;}
.osv2-mini{
  margin-left:auto;font-size:11.5px;color:#1D6FE0;text-decoration:none;font-weight:700;
  padding:3px 10px;border-radius:8px;background:#fff;border:1px solid #DCE6F5;
}
.osv2-mini:hover{background:#EAF2FF;}

/* ===== 充值审核：凭证缩略图（2026-11-08 客户端自助充值上线后加的） ===== */
.rc-proof{width:44px;height:44px;border-radius:8px;object-fit:cover;border:1px solid #E2ECFA;
  cursor:zoom-in;display:block;transition:.15s;background:#F6F9FE;}
.rc-proof:hover{border-color:#005BFF;box-shadow:0 0 0 3px rgba(0,91,255,.12);transform:scale(1.04);}

/* ===== 充值特惠：后台列表与表单（2026-11-08） ===== */
.promo-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid #E8EFF9;
  border-radius:12px;background:#fff;margin-bottom:10px;transition:.15s;}
.promo-row:hover{border-color:#C9DCF5;box-shadow:0 6px 18px rgba(10,40,90,.06);}
.promo-row-l{flex:1;min-width:0;}
.promo-row-t{font-size:13.5px;font-weight:800;color:#1F2E4D;display:flex;align-items:center;gap:8px;}
.promo-row-t em{font-style:normal;font-size:10.5px;font-weight:700;color:#C0392B;background:#FDECEC;
  border-radius:6px;padding:2px 7px;letter-spacing:.3px;}
.promo-row-d{margin-top:5px;font-size:11.5px;color:#7C8FA8;line-height:1.7;}
.promo-row-d b{color:#1F2E4D;font-weight:800;}
.promo-row-r{display:flex;align-items:center;gap:9px;flex:none;}

.modal-form{display:flex;flex-direction:column;gap:12px;}
.modal-form>label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#54657F;font-weight:600;}
.modal-form>label input,.modal-form>label select{padding:9px 11px;border:1px solid #DCE6F5;border-radius:9px;
  font-size:13px;font-family:inherit;color:#1F2E4D;background:#fff;outline:none;font-weight:400;}
.modal-form>label input:focus,.modal-form>label select:focus{border-color:#005BFF;box-shadow:0 0 0 3px rgba(0,91,255,.09);}
.modal-form>label.pf-check{flex-direction:row;align-items:center;gap:8px;font-weight:600;color:#33415E;}
.modal-form>label.pf-check input{width:auto;padding:0;}

/* ===== 收款设置（后台）：客户确认金额后才会看到的收款码 ===== */
.paycfg{display:grid;grid-template-columns:262px 1fr;gap:22px;align-items:start;}
.paycfg-qr{display:flex;gap:12px;}
.paycfg-slot{position:relative;width:125px;height:125px;border-radius:12px;border:1.5px dashed #D3E0F2;
  background:#FAFCFF;display:flex;align-items:center;justify-content:center;text-align:center;
  cursor:pointer;overflow:hidden;transition:.15s;}
.paycfg-slot:hover{border-color:#9DC0FF;background:#F4F9FF;}
.paycfg-slot.has{border-style:solid;border-color:#E2EBF9;background:#fff;}
.paycfg-slot img{width:100%;height:100%;object-fit:contain;padding:6px;display:block;}
.paycfg-slot img[hidden]{display:none !important;}
.paycfg-slot span{font-size:11px;color:#8FA3BC;line-height:1.7;padding:0 8px;}
.paycfg-slot span em{font-style:normal;font-size:10px;color:#B3C2D6;}
.paycfg-slot span[hidden]{display:none !important;}
.paycfg-form{display:flex;flex-direction:column;gap:11px;max-width:520px;}
.paycfg-form>label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#54657F;font-weight:600;}
.paycfg-form>label input{padding:9px 11px;border:1px solid #DCE6F5;border-radius:9px;font-size:13px;
  font-family:inherit;color:#1F2E4D;background:#fff;outline:none;font-weight:400;}
.paycfg-form>label input:focus{border-color:#005BFF;box-shadow:0 0 0 3px rgba(0,91,255,.09);}
.paycfg-acts{display:flex;gap:10px;flex-wrap:wrap;}
@media (max-width:760px){.paycfg{grid-template-columns:1fr;}}

.paycfg-head{display:flex;align-items:baseline;gap:10px;margin:0 0 14px;flex-wrap:wrap;}
.paycfg-head b{font-size:14px;font-weight:800;color:#1F2E4D;}
.paycfg-head span{font-size:11.5px;color:#8FA3BC;}

.paycfg-form>label .paycfg-tip{font-size:10.5px;color:#A9B7CC;font-weight:400;letter-spacing:.2px;}

/* ================= 2026-11-08 问题订单 + 退货返厂（后台发起） =================
   问题卡沿用废弃卡的紧凑布局，但**不灰**——客户在等处理，必须显眼。
   order-card.css 是 tools/sync-card.js 生成的，别往那个文件里写。 */
.om-btn.w{border-color:#F4D08A;background:#FFFBF0;color:#B45309;}
.om-btn.w:hover{background:#FDF1D8;}
.om-btn.v{border-color:#C9B8F0;background:#F8F5FF;color:#6D28D9;}
.om-btn.v:hover{background:#EFE8FF;}
.disc-bar .shipped-foot{flex-basis:100%;display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin-top:3px;}
.disc-bar .shipped-time{font-variant-numeric:tabular-nums;opacity:.72;font-weight:600;letter-spacing:.2px;}

/* 弹窗表单（标记问题 / 发起退货）：多行输入 + 底部按钮 */
.mf-tip{font-size:11.5px;color:#8FA3BC;line-height:1.8;margin:0 0 10px;}
.mf-field{margin-bottom:10px;}
.mf-field > span{display:block;font-size:10.5px;font-weight:800;color:#93A6BD;margin-bottom:5px;letter-spacing:.3px;}
.mf-field textarea,.mf-field input{width:100%;box-sizing:border-box;border:1.5px solid #DCE6F5;border-radius:9px;
  padding:9px 11px;font-size:12.5px;font-family:inherit;color:#1F2E4D;background:#fff;outline:none;resize:vertical;}
.mf-field textarea:focus,.mf-field input:focus{border-color:#3B82F6;box-shadow:0 0 0 3px rgba(59,130,246,.12);}
.mf-quick{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 12px;}
.mf-quick button{border:1px solid #DCE6F5;background:#fff;color:#54657F;border-radius:99px;padding:3px 11px;
  font-size:11px;font-weight:700;cursor:pointer;font-family:inherit;}
.mf-quick button:hover{border-color:#3B82F6;color:#1D6FE0;background:#F5F9FF;}
.mf-act{display:flex;gap:8px;justify-content:flex-end;margin-top:4px;}

/* 退货返厂表：客户 / 货件号 / 店铺 / 来源 / 原因 / 退货码 / 状态 / 操作 */
.om-table.rt .om-row{grid-template-columns:104px 140px 100px 74px 1fr 136px 96px 200px;}
.om-src{font-size:10px;font-weight:800;padding:1px 7px;border-radius:6px;background:#EDF3FF;color:#1D6FE0;white-space:nowrap;}
.om-src.cust{background:#F1F5FB;color:#5C6E88;}
.om-code{font-family:Consolas,monospace;font-size:11px;color:#0B8A5B;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.om-code.none{color:#C08A1E;font-family:inherit;font-weight:700;}

/* ================= 显示偏好（2026-11-09 后台补齐，与客户端同一套机制） =================
   客户端早就有「标准/流畅」+「背景明暗」，后台一直缺。两边用同一套 data-* 属性 + CSS 变量，
   以后改一处逻辑两边都对得上。只作用于渲染，不碰任何数据。
   · html[data-mode]    std | lite（lite=流畅，关掉毛玻璃和重阴影）
   · html[data-bright]  1~5 背景明暗（靠 #dimLayer 调光层实现，不需要改每个元素的颜色）
   ============================================================ */
#dimLayer{position:fixed;inset:0;z-index:9;pointer-events:none;
  background:var(--dim-c,transparent);opacity:var(--dim-o,0);transition:opacity .22s,background .22s;}
html[data-bright="1"]{--dim-c:#081A38;--dim-o:.20;}
html[data-bright="2"]{--dim-c:#081A38;--dim-o:.10;}
html[data-bright="3"]{--dim-c:transparent;--dim-o:0;}
html[data-bright="4"]{--dim-c:#FFFFFF;--dim-o:.26;}
html[data-bright="5"]{--dim-c:#FFFFFF;--dim-o:.46;}

/* 顶栏右侧：模式切换小段 + 太阳按钮 */
.disp-seg{display:inline-flex;background:#EEF3FA;border:1px solid #DCE6F5;border-radius:9px;padding:2px;gap:2px;}
.disp-seg button{border:none;background:transparent;color:#5C6E88;font-size:12px;font-weight:700;
  padding:5px 11px;border-radius:7px;cursor:pointer;font-family:inherit;line-height:1.5;}
.disp-seg button:hover{color:#005BFF;}
.disp-seg button.on{background:#fff;color:#005BFF;box-shadow:0 1px 4px rgba(11,98,255,.18);}

.bright-wrap{position:relative;}
.bright-btn{font-size:14px;line-height:1;padding:8px 11px;}
.bright-pop{position:absolute;right:0;top:40px;z-index:30;background:#fff;border:1px solid #DCE6F5;
  border-radius:12px;padding:12px 14px 11px;box-shadow:0 14px 34px rgba(10,40,90,.16);width:214px;}
.bright-pop[hidden]{display:none !important;}
.bp-row{display:flex;align-items:center;gap:9px;}
.bp-b{width:26px;height:26px;flex:none;border:1px solid #DCE6F5;background:#F7FAFF;border-radius:8px;
  cursor:pointer;font-size:15px;line-height:1;color:#4A5C77;font-family:inherit;padding:0;}
.bp-b:hover{border-color:#005BFF;color:#005BFF;background:#fff;}
.bp-row input[type=range]{flex:1;min-width:0;accent-color:#005BFF;cursor:pointer;height:18px;}
.bp-tip{font-size:11.5px;color:#7B90AC;margin-top:8px;text-align:center;}
.bp-tip b{color:#005BFF;}

/* 流畅模式：去掉毛玻璃 / 重阴影 / 入场动画。
   注意保留 loading 转圈（osv2spin）和扫码错误抖动（shake）——那是功能反馈，不是装饰。 */
html[data-mode="lite"] .topbar,
html[data-mode="lite"] .card,
html[data-mode="lite"] .panel{backdrop-filter:none !important;-webkit-backdrop-filter:none !important;
  box-shadow:0 1px 2px rgba(10,40,90,.05) !important;}
html[data-mode="lite"] .pane,
html[data-mode="lite"] .modal-body,
html[data-mode="lite"] .toast,
html[data-mode="lite"] .pmask > *{animation:none !important;}
html[data-mode="lite"] .pane{transition:none !important;}

/* ================= 系统设置面板（2026-11-09 重做） =================
   原来是一坨 440px 窄弹窗一路往下堆，六个分组几十个字段，看着简陋也难找。
   现在：固定 920×640 + 左侧分组导航 + 右侧卡片式分组，字段统一控件样式。
   命名统一 sset-（settings-panel），避免和老的 .sf / .modal 打架。 */
.sset-mask{position:fixed;inset:0;z-index:85;display:flex;align-items:center;justify-content:center;
  background:rgba(9,20,38,.46);backdrop-filter:blur(3px);padding:24px;}
.sset-mask[hidden]{display:none !important;}

.sset{width:min(920px,94vw);height:min(650px,90vh);background:#fff;border-radius:16px;display:flex;flex-direction:column;
  box-shadow:0 28px 80px -20px rgba(6,22,50,.55),0 2px 8px rgba(6,22,50,.12);overflow:hidden;
  animation:ssetIn .18s cubic-bezier(.22,.8,.28,1);}
@keyframes ssetIn{from{opacity:0;transform:translateY(10px) scale(.99);}to{opacity:1;transform:none;}}

.sset-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  padding:20px 22px 16px;border-bottom:1px solid #EEF3FA;
  background:linear-gradient(180deg,#FBFDFF,#fff);}
.sset-hl h3{margin:0;font-size:17px;font-weight:700;letter-spacing:.3px;color:#0E1A2B;
  display:flex;align-items:center;gap:9px;}
.sset-hl h3::before{content:"";width:4px;height:16px;border-radius:3px;background:linear-gradient(180deg,#005BFF,#00C2FF);}
.sset-hl p{margin:6px 0 0;font-size:11.5px;color:#8FA3BC;line-height:1.6;}
.sset-x{width:30px;height:30px;flex:none;border:1px solid #E4EBF6;background:#fff;border-radius:9px;
  color:#7A8AA3;font-size:13px;cursor:pointer;font-family:inherit;line-height:1;}
.sset-x:hover{background:#F3F7FD;color:#0E1A2B;border-color:#CBDDF5;}

.sset-body{flex:1;min-height:0;display:flex;}
.sset-nav{width:178px;flex:none;padding:14px 10px;background:#F7FAFF;border-right:1px solid #EDF2FA;
  display:flex;flex-direction:column;gap:3px;overflow:auto;}
.sset-nav button{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:0;background:transparent;padding-left:13px;
  padding:9px 11px;border-radius:9px;font-size:12.5px;font-weight:600;color:#5C6E88;cursor:pointer;font-family:inherit;
  transition:background .14s,color .14s;position:relative;}
.sset-nav button .sn-i{width:14px;text-align:center;font-size:12px;opacity:.7;}
.sset-nav button:hover{background:#EDF4FE;color:#0B62FF;}
.sset-nav button.on{background:#fff;color:#005BFF;box-shadow:0 1px 3px rgba(11,98,255,.14),0 0 0 1px rgba(11,98,255,.08);}
.sset-nav button.on .sn-i{opacity:1;color:#005BFF;}
/* 选中条放在按钮**内部**：原来 left:-10px 超出 nav 的 overflow 区域被裁掉，根本看不见 */
.sset-nav button.on::before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:2px;
  background:linear-gradient(180deg,#005BFF,#00C2FF);}

.sset-main{flex:1;min-width:0;overflow:auto;padding:18px 22px 22px;background:#FCFDFF;}
.sset-pane{display:none;}
.sset-pane.on{display:block;animation:none;}

/* 分组卡片 */
.sset-card{background:#fff;border:1px solid #EDF2FA;border-radius:12px;padding:15px 16px 16px;margin-bottom:13px;}
.sset-card:last-child{margin-bottom:0;}
.sset-ch{display:flex;align-items:flex-start;gap:10px;margin-bottom:12px;}
.sset-ci{width:26px;height:26px;flex:none;border-radius:8px;display:flex;align-items:center;justify-content:center;
  font-size:13px;color:#005BFF;background:linear-gradient(145deg,#EAF2FF,#F5F9FF);border:1px solid #E1EDFF;}
.sset-ct{min-width:0;}
/* ⚠ 必须用直接子元素（>）：副标题 span 里还有 <b>（"支持中通"这种强调），
   用后代选择器会把那些行内 b 也变成 block，整句被拆成好几行（2026-11-09 实际踩到）。 */
.sset-ct > b{display:block;font-size:13px;font-weight:700;color:#1B2A41;letter-spacing:.2px;}
.sset-ct > span{display:block;font-size:11.5px;color:#93A6BD;line-height:1.65;margin-top:2px;}
.sset-ct > span b{display:inline;font-size:inherit;font-weight:800;color:#5C6E88;}
.sset-ch-r{margin-left:auto;flex:none;}

/* 字段 */
.sset-f{display:block;margin-bottom:11px;}
.sset-f:last-child{margin-bottom:0;}
.sset-f > span{display:block;font-size:11px;font-weight:700;color:#8296B0;letter-spacing:.3px;margin-bottom:5px;}
.sset-main input:not([type=checkbox]):not([type=range]):not([type=file]):not([type=radio]):not([type=hidden]),
.sset-main select{
  width:100%;box-sizing:border-box;height:34px;padding:0 11px;border:1px solid #DCE6F5;border-radius:9px;
  font-size:12.5px;font-family:inherit;color:#1B2A41;background:#fff;outline:none;transition:.14s;}
.sset-main input:focus,.sset-main select:focus{border-color:#005BFF;box-shadow:0 0 0 3px rgba(0,91,255,.10);}
.sset-main input::placeholder{color:#B3C2D6;}
.sset-2{display:grid;grid-template-columns:1fr 1fr;gap:11px;}
.sset-hint{font-size:11px;color:#93A6BD;line-height:1.7;margin:8px 0 0;}
.sset-hint b{color:#55677F;}
.sset-hint a{color:#1F6FEB;text-decoration:none;}
.sset-hint a:hover{text-decoration:underline;}
.sset-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:11px;}

/* 状态点 / 徽章 */
.sset-badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;padding:2px 9px;
  border-radius:20px;line-height:1.8;}
.sset-badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;}
.sset-badge.ok{background:#E9F9F1;color:#0B8A5B;}
.sset-badge.warn{background:#FFF7E8;color:#B45309;}
.sset-badge.off{background:#F2F5F9;color:#7A8AA3;}

/* 分段选择（标准/流畅、每页票数） */
.sset-seg{display:inline-flex;background:#F1F6FE;border:1px solid #E1EAF7;border-radius:9px;padding:2px;gap:2px;}
.sset-seg button{border:0;background:transparent;color:#5C6E88;font-size:12px;font-weight:700;
  padding:5px 14px;border-radius:7px;cursor:pointer;font-family:inherit;}
.sset-seg button:hover{color:#005BFF;}
.sset-seg button.on{background:#fff;color:#005BFF;box-shadow:0 1px 4px rgba(11,98,255,.16);}

/* 明暗滑块行 */
.sset-br{display:flex;align-items:center;gap:11px;}
.sset-br input[type=range]{flex:1;min-width:0;accent-color:#005BFF;height:20px;cursor:pointer;}
.sset-br .sset-br-v{width:44px;flex:none;text-align:right;font-size:12px;font-weight:800;color:#005BFF;}

/* 开关 */
.sset-sw{position:relative;display:inline-flex;align-items:center;gap:9px;cursor:pointer;user-select:none;}
.sset-sw input{position:absolute;opacity:0;width:0;height:0;}
.sset-sw i{width:38px;height:21px;border-radius:20px;background:#DCE5F2;position:relative;transition:.16s;flex:none;}
.sset-sw i::after{content:"";position:absolute;left:2px;top:2px;width:17px;height:17px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(10,30,60,.22);transition:.16s;}
.sset-sw input:checked + i{background:#005BFF;}
.sset-sw input:checked + i::after{transform:translateX(17px);}
.sset-sw span{font-size:12px;color:#54657F;font-weight:600;}

/* 客户列表 */
.sset-tn{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid #EDF2FA;border-radius:9px;
  margin-bottom:7px;background:#FCFDFF;}
.sset-tn:last-child{margin-bottom:0;}
.sset-tn b{font-size:12.5px;color:#1B2A41;font-weight:700;}
.sset-tn em{font-style:normal;font-size:11px;color:#93A6BD;}
.sset-tn .sset-tn-r{margin-left:auto;display:flex;gap:6px;align-items:center;}

/* 底部 */
.sset-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 22px;border-top:1px solid #EEF3FA;background:#FBFDFF;}
.sset-fr{display:flex;align-items:center;gap:9px;}
.sset-save-tip{font-size:11px;color:#A3B3C8;margin-right:2px;}

/* 窄屏：导航改横向（不然 920 的宽度在 1024 屏上挤成一坨） */
@media(max-width:820px){
  .sset{width:min(96vw,640px);height:min(86vh,680px);}
  .sset-body{flex-direction:column;}
  .sset-nav{width:auto;flex-direction:row;overflow-x:auto;padding:9px 10px;border-right:0;border-bottom:1px solid #EDF2FA;}
  .sset-nav button{white-space:nowrap;width:auto;}
  .sset-nav button.on::before{display:none;}
  .sset-main{padding:14px 14px 18px;}
  .sset-2{grid-template-columns:1fr;}
}

/* ================= 打包工作台（2026-11-09 重做） =================
   场景：桌上 100 个包裹、一把扫描枪。扫一个包裹的国内快递单号，
   立刻把客户预报的那一票卡片调出来，看一眼要求就打包。
   所以这一页只有两块：上面一个超大的扫描框（占工作区高度 1/5），下面是卡片区。
   旧的「选店铺 → 开打包会话 → 并货位 → 封箱」跟「创建货位」重复，已整段删掉。 */
.pk-scan-box{background:linear-gradient(180deg,#FBFDFF,#F4F9FF);border:1px solid #E4EDFA;
  border-radius:16px;padding:16px 18px 14px;margin-bottom:16px;box-shadow:0 2px 10px -6px rgba(16,42,84,.18);}
.pk-scan-hd{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:10px;}
.pk-scan-title{font-size:14.5px;font-weight:800;color:#0E1A2B;letter-spacing:.3px;
  display:inline-flex;align-items:center;gap:8px;}
.pk-scan-title::before{content:"";width:4px;height:15px;border-radius:3px;background:linear-gradient(180deg,#005BFF,#00C2FF);}
.pk-scan-sub{font-size:11.5px;color:#93A6BD;}

/* 高度 = 工作区高度的 1/5：100vh 减去顶栏和上下留白（约 150px）再除以 5。
   小屏（笔记本）再低一点也不会挤成一条线，所以留了 min-height。 */
.pk-scan-input{display:block;width:100%;box-sizing:border-box;
  height:calc((100vh - 150px) / 5);min-height:112px;max-height:200px;
  padding:0 22px;border:2px solid #CFE0F6;border-radius:14px;background:#fff;
  font-size:clamp(22px,2.4vw,34px);font-family:Consolas,"Courier New",monospace;font-weight:700;
  letter-spacing:2px;color:#0E1A2B;outline:none;transition:border-color .15s,box-shadow .15s,background .15s;}
.pk-scan-input::placeholder{font-family:inherit;font-size:14px;font-weight:500;letter-spacing:1px;color:#B7C6D9;}
.pk-scan-input:hover{border-color:#B6CFEF;}
.pk-scan-input:focus{border-color:#005BFF;background:#FBFDFF;box-shadow:0 0 0 4px rgba(0,91,255,.11);}
/* 扫描结果反馈：整框变色，仓库扫一眼就知道中没中 */
.pk-scan-input.ok{border-color:#16A34A;box-shadow:0 0 0 4px rgba(22,163,74,.12);}
.pk-scan-input.bad{border-color:#E02424;box-shadow:0 0 0 4px rgba(224,36,36,.11);}
.pk-scan-input.bad{animation:pkShake .32s;}
@keyframes pkShake{0%,100%{transform:translateX(0);}20%{transform:translateX(-6px);}60%{transform:translateX(6px);}}

.pk-scan-tip{margin-top:9px;font-size:12px;color:#8FA3BC;line-height:1.7;min-height:18px;}
.pk-scan-tip.ok{color:#0B8A5B;font-weight:700;}
.pk-scan-tip.bad{color:#C93B3B;font-weight:700;}
.pk-scan-tip b{color:#1B2A41;font-family:Consolas,monospace;}

/* 结果区 */
.pk-result{min-height:180px;}
.pk-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:52px 20px;border:1px dashed #DCE7F5;border-radius:14px;background:#FBFDFF;text-align:center;}
.pk-empty-ico{font-size:26px;color:#C8D8EC;line-height:1;}
.pk-empty b{font-size:13.5px;color:#8296B0;font-weight:700;}
.pk-empty span{font-size:11.5px;color:#A9B9CE;}
/* 命中提示条（在卡片上方，说明怎么匹配上的 / 有什么要注意的） */
.pk-hit{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px;
  padding:9px 13px;border-radius:10px;font-size:12px;font-weight:700;}
.pk-hit.ok{background:#EAF8F0;border:1px solid #BCE7CF;color:#0B6B42;}
.pk-hit.warn{background:#FFF7E8;border:1px solid #F3DBA6;color:#8A5A00;}
.pk-hit.bad{background:#FDECEC;border:1px solid #F5C6C6;color:#B02A2A;}
.pk-hit .pk-code{font-family:Consolas,monospace;letter-spacing:1px;font-size:12.5px;}
.pk-hit .pk-how{margin-left:auto;font-weight:600;opacity:.8;}
/* 卡片容器：和「待打包」列表同样的卡片，宽度自适应 */
.pk-cards{display:flex;flex-direction:column;gap:12px;}
/* 单票提示（已打包过/已废弃这种），压在卡片上方一行 */
.pk-note{margin:0 0 8px;padding:7px 11px;border-radius:8px;background:#FFF7E8;border:1px solid #F3DBA6;
  color:#8A5A00;font-size:11.5px;font-weight:700;}
.pk-note.danger{background:#FDECEC;border-color:#F5C6C6;color:#B02A2A;}

@media(max-width:1080px){
  .pk-scan-input{height:calc((100vh - 130px) / 5);min-height:96px;font-size:22px;}
}

/* 打包台里的卡片要「瘦身」
   原因：「待打包」页没有右侧留白，内容区能到 1590px；打包台容器只有 ~1260px，
   而卡片里 lead(180)+采购(104)+商品(556)+信息(348)+操作(96)+预报块(238) = 1522px，
   直接溢出 260px，最右边的「打包完成 / 标记问题」按钮被裁在屏幕外 —— 仓库根本点不到。
   这里：去掉采购列和勾选框（打包时不采购、也不批量选），商品列允许收缩，信息列收窄。 */
#pkResult .ocard{min-width:0;}
#pkResult .oc-ck{display:none;}                    /* 一次只处理一票，不需要勾选 */
#pkResult .oc-buy{display:none;}                   /* 打包时不采购，省 104px */
#pkResult .oc-prod{flex:1 1 240px;min-width:210px;}
#pkResult .oc-info{flex:none;width:300px;min-width:0;}
#pkResult .oc-act{min-width:92px;}
#pkResult .oc-dinfo{min-width:0;flex:0 0 238px;}
/* 异常票（已发走/已取消/已打包/问题单）不显示「打包完成」按钮：
   扫错或重复扫时，误点一下等于白干一次，还可能扣费。 */
#pkResult .pk-one.blocked [data-pack]{display:none;}
/* 左侧合同 ID 列稍微给点内边距，不然「系」字贴边被圆角吃掉半个 */
#pkResult .oc-tag{padding-left:2px;}

/* 国内快递签收状态（2026-11-09 打包台扫码用）
   多票一单时一个订单要合好几个包裹，仓库扫一个就要能看出「还差哪个没到」。 */
.dom-st{display:inline-block;margin-left:6px;padding:0 6px;border-radius:5px;font-size:10px;font-weight:800;
  line-height:1.75;background:#F2F5F9;color:#93A6BD;vertical-align:middle;}
.dom-st.ok{background:#E8F8EF;color:#0B8A5B;}
.dom-multi{display:inline-block;padding:0 7px;border-radius:6px;font-size:10.5px;font-weight:800;
  background:#EEF4FF;color:#1F6FEB;line-height:1.75;}
.dom-lines{margin:3px 0 0;display:flex;flex-direction:column;gap:2px;}
.dom-line{display:flex;align-items:center;gap:2px;font-size:11px;}
.dom-line .mono{color:#33415E;}

/* ---- 国内快递方框（2026-11-09 重做，覆盖客户端那套横排小胶囊）----
   鹏哥要求：单号独立成块、字号大、签收胶囊放单号下面、同在一个方框里。
   多票一单时一个号一个框，横排换行；已签收整块转绿，扫一眼就知道哪个包裹到了。 */
.rd-exp.dom-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:4px;width:100%;min-width:0;box-sizing:border-box;padding:12px 10px 11px;border-radius:12px;
  border:1.5px solid #CFE0F6;background:linear-gradient(180deg,#FBFDFF,#F4F9FF);
  text-decoration:none;transform:none;box-shadow:none;overflow:hidden;}
.rd-exp.dom-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,#94B7E8,#C7DBF5);}
.rd-exp.dom-card::after{display:none;}            /* 去掉原来的扫光动效，仓库作业看着晃眼 */
.rd-exp.dom-card.ok{border-color:#8FDCB4;background:linear-gradient(180deg,#F5FCF8,#E9F9F1);}
.rd-exp.dom-card.ok::before{background:linear-gradient(180deg,#16A34A,#4ADE80);}
.rd-exp.dom-card .rd-exp-lb{font-size:11.5px;font-weight:700;color:#8296B0;letter-spacing:1.6px;}
.rd-exp.dom-card.ok .rd-exp-lb{color:#0B8A5B;}
.rd-exp.dom-card .rd-exp-no{font-size:18px;font-weight:800;letter-spacing:.8px;color:#0E1A2B;
  font-family:Consolas,"Courier New",monospace;line-height:1.25;word-break:break-all;text-align:center;}
.rd-exp.dom-card .dom-badge{margin-top:4px;padding:4px 15px;border-radius:20px;font-size:13px;font-weight:800;
  background:#EDF1F7;color:#8296B0;letter-spacing:.5px;white-space:nowrap;}
.rd-exp.dom-card .dom-badge.ok{background:#16A34A;color:#fff;box-shadow:0 2px 8px -2px rgba(22,163,74,.55);}
.rd-exp.dom-card:hover{transform:none;border-color:#005BFF;box-shadow:0 2px 10px -4px rgba(11,98,255,.28);}
.rd-exp.dom-card.ok:hover{border-color:#16A34A;}

/* 已打包完成的提示条用中性色，不要用警告黄 —— 那不是异常，是"这单已经完事了" */
.pk-hit.done{background:#EEF4FF;border:1px solid #CBDDF8;color:#1F4E9E;}
/* 已打包过的卡片提示：中性蓝（不是异常，只是复核时扫到了） */
.pk-note.done{background:#EEF4FF;border:1px solid #CBDDF8;color:#1F4E9E;}
/* 载体列保底宽度：方框里的单号是 18px 等宽字，17 位约 165px，列太窄会被压到换行 */
.ocard .oc-dinfo{min-width:232px;}
.ocard.done .oc-dinfo{min-width:232px;}

/* ---- 已打包卡片瘦身（2026-11-09）----
   实测：已打包卡片内容宽 1804px，而 1600 视口下容器只有 ~1310px，
   最右边的国内快递方框和操作按钮被挤出屏幕（鹏哥截图里单号显示不全就是这个原因）。
   打包完的单不需要采购入口，商品列也可以窄一点。 */



/* 兜底：万一某台电脑更窄，允许容器横向滚动，别把内容裁掉看不见 */
#omBody-pending, #omBody-packed{overflow-x:auto;}
/* 已打包列表【不显示】快递签收方框（2026-11-09）
   原因：那一页本来就窄，方框一挤，商品列和订单信息列会互相压字。
   签收/未签收是「打包工作台」作业时要看的信息，打包完就不需要再盯了。 */
#omBody-packed .ocard.finished .rd-exp.dom-card{display:none;}

/* ================= 卡片第五分区：功能按钮列（2026-11-10 鹏哥定版）=================
   最右侧一列就是「所有功能按钮」分区：2 列 × 4 行网格，左右竖着各 4 个。
   上 4 个作业功能：国际面单 / 条形码 / 货位面单 / 发起退货；
   下 4 个流程操作：打包完成 / 标记问题 / 废弃 / 订单详情（随列表模式增减）。
   颜色按用途分：面单=蓝、条码=青、货位=紫、退货=橙，流程按钮沿用 om-btn 配色。 */
.ocard .oc-act.grid8{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;
  min-width:150px;max-width:168px;align-self:center;}
.oc-fn-b{border:1px solid #DCE6F5;background:#FBFDFF;color:#42546E;font-size:11px;font-weight:700;
  padding:6px 2px;border-radius:7px;cursor:pointer;font-family:inherit;line-height:1.2;
  white-space:nowrap;transition:background .14s,border-color .14s,color .14s;}
.oc-fn-b:hover{background:#fff;border-color:#005BFF;color:#005BFF;}
.oc-fn-b.intl{color:#1F6FEB;border-color:#CFE0F6;background:#F5F9FF;}
.oc-fn-b.intl:hover{background:#EAF3FF;border-color:#1F6FEB;}
.oc-fn-b.bc{color:#0E9384;border-color:#C9EDE6;background:#F3FCFA;}
.oc-fn-b.bc:hover{background:#E7F9F5;border-color:#0E9384;}
.oc-fn-b.slot{color:#6D5BD0;border-color:#DDD8F5;background:#F8F6FF;}
.oc-fn-b.slot:hover{background:#F1EDFF;border-color:#6D5BD0;}
.oc-fn-b.ret{color:#C2410C;border-color:#F3D8C4;background:#FFF8F3;}
.oc-fn-b.ret:hover{background:#FFEFE5;border-color:#C2410C;}

/* 条形码弹窗 */
.bc-list{max-height:52vh;overflow:auto;display:flex;flex-direction:column;gap:10px;padding-right:2px;}
.bc-row{border:1px solid #EDF2FA;border-radius:10px;padding:10px 12px 8px;text-align:center;background:#FCFDFF;}
.bc-name{font-size:11.5px;color:#54657F;text-align:left;line-height:1.5;margin-bottom:6px;}
.bc-svg{max-width:100%;height:auto;}
.bc-num{font-family:Consolas,monospace;font-size:12px;letter-spacing:1px;color:#1B2A41;margin-top:3px;}
.bc-miss{font-size:11px;color:#B45309;padding:6px 0;line-height:1.6;}
/* 已打包列表的卡片再瘦一点：加了 4 个作业按钮后，操作列从 96 变 166，必须从商品列挤回来 */
.ocard.finished .oc-prod{flex:1 1 320px;min-width:280px;}

/* 后台卡片里「预报信息块」的宽度必须卡死（2026-11-10）
   它基础样式是 width:auto，内容里那句"消费明细 贴单费…+普通打包…"很长，
   会把块撑到 300+，连带整张卡超出容器，最右边的操作按钮直接跑出屏幕。
   客户端的 done 卡片用的是 flex:1 撑开，不受这条影响（这里只限后台四类列表）。 */
#omBody-pending .oc-dinfo,
#omBody-packed .oc-dinfo,
#omBody-problem .oc-dinfo,
#omBody-discard .oc-dinfo,
#pkResult .oc-dinfo{flex:0 0 238px;width:238px;max-width:238px;box-sizing:border-box;overflow:hidden;}

/* 后台卡片里「预报信息块」的宽度必须卡死（2026-11-10）
   它基础样式是 width:auto，内容里那句"消费明细 贴单费…+普通打包…"很长，
   会把块撑到 300+，连带整张卡超出容器，最右边的操作按钮直接跑出屏幕。
   客户端的 done 卡片用的是 flex:1 撑开，不受这条影响（这里只限后台四类列表）。 */
#omBody-pending .oc-dinfo,
#omBody-packed .oc-dinfo,
#omBody-problem .oc-dinfo,
#omBody-discard .oc-dinfo,
#pkResult .oc-dinfo{flex:0 0 238px;width:238px;max-width:238px;box-sizing:border-box;overflow:hidden;}
/* 待打包卡片的商品列原来没有 flex 约束（只有 disc/prob/done 三个变体有），
   按内容一直撑到 520px，把整张卡顶宽 78px。这里补上，让它跟随容器收缩。 */
#omBody-pending .oc-prod{flex:1 1 300px;min-width:280px;}
#pkResult .oc-prod{flex:1 1 300px;min-width:280px;}

/* ---- 2026-11-10 修：五分区宽度均匀分配（对齐跨境巴士）----
   上一版 prod 固定 430px + info flex:1：剩余宽度全被「订单数据」一列吃掉，
   它内容短，列内右侧就是一大块空白，看起来"中间空白那么大"。
   巴士的做法：剩余宽度按比例匀给各内容列，每列都撑开，间隙均匀。
   1590 容器算下来：prod≈440 / info≈445 / dinfo≈310，三列视觉均衡。 */
#omBody-pending .ocard,
#omBody-packed .ocard,
#omBody-problem .ocard,
#omBody-discard .ocard,
#pkResult .ocard{justify-content:flex-start;}

#omBody-pending .oc-prod,
#omBody-packed .oc-prod,
#omBody-problem .oc-prod,
#omBody-discard .oc-prod,
#pkResult .oc-prod{flex:1.1 1 360px;width:auto;min-width:320px;overflow:hidden;}

#omBody-pending .oc-info,
#omBody-packed .oc-info,
#omBody-problem .oc-info,
#omBody-discard .oc-info,
#pkResult .oc-info{flex:1.4 1 340px;width:auto;min-width:320px;}

#omBody-pending .oc-dinfo,
#omBody-packed .oc-dinfo,
#omBody-problem .oc-dinfo,
#omBody-discard .oc-dinfo,
#pkResult .oc-dinfo{flex:1 1 238px;width:auto;min-width:232px;max-width:none;}

/* ---- 2026-11-10 按钮列 2×4 网格 + 打包台窄容器瘦身 ----
   打包台容器 ~1260px：lead(170)+act(156)+gap(40)+prod(280)+info(260)+dinfo(232) ≈ 1138，不溢出。 */
#pkResult .oc-prod{flex:1.1 1 280px;min-width:280px;}
#pkResult .oc-info{flex:1.4 1 260px;min-width:260px;}
#pkResult .oc-dinfo{flex:1 1 232px;min-width:232px;}
#pkResult .oc-act.grid8{min-width:140px;max-width:156px;}

/* ================= 库存管理 · 等待入库 / 在售库存（2026-11-10） =================
   卡片按鹏哥定的三段式重做，不用订单卡那套 .ocard：
     ① 入库编号 + 平台胶囊 + 客户 ID   ② 商品主图 + 基础信息
     ③ 国内快递单号 + 待签收/已签收大号胶囊   ④ 右侧三个动作按钮
   三列按 0 0 208 / 1.4 1 320 / 0 0 300 分宽，剩余空间全给商品列，保证整行铺满。 */
.iv-subtip{font-size:12px;color:var(--muted);font-weight:600;margin-left:6px;}
.iv-tools{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:12px;
  padding:9px 12px;background:#F7FAFF;border:1px solid #E3EBF7;border-radius:10px;}
.iv-tooltip{font-size:11.5px;color:#8593A6;}
.iv-chip{padding:5px 12px;border-radius:20px;border:1px solid #DCE6F5;background:#fff;color:#54657F;
  font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;transition:.15s;}
.iv-chip b{font-family:Consolas,monospace;margin-left:5px;font-size:12.5px;}
.iv-chip:hover{border-color:#B9CFEE;color:#2F4A70;}
.iv-chip.on{background:#0B62FF;border-color:#0B62FF;color:#fff;box-shadow:0 3px 10px rgba(11,98,255,.28);}
.iv-chip.on b{color:#fff;}
.iv-search{margin-left:auto;width:250px;height:32px;border:1px solid #DCE6F5;border-radius:8px;
  padding:0 10px;font-size:12.5px;font-family:inherit;outline:none;background:#fff;}
.iv-search:focus{border-color:#7FB4F5;box-shadow:0 0 0 3px rgba(11,98,255,.10);}
.iv-list{display:flex;flex-direction:column;gap:10px;}

/* ---- 满铺卡片 ---- */
.ivcard{display:flex;align-items:stretch;width:100%;background:#fff;border:1px solid #E3EBF7;
  border-radius:14px;box-shadow:0 1px 3px rgba(20,50,110,.04);overflow:hidden;
  transition:box-shadow .18s ease,border-color .18s ease;}
.ivcard:hover{box-shadow:0 10px 26px -12px rgba(0,80,200,.26);border-color:#C9D9F2;}
.ivcard.done{border-color:#CDE9DA;}
.ivcard.ret{border-color:#F5D5B4;background:#FFFDF9;}
.ivcard.bad{border-color:#F5C9C9;background:#FFFCFC;}
.iv-seg{padding:13px 16px;display:flex;flex-direction:column;justify-content:center;gap:6px;min-width:0;}
.iv-seg + .iv-seg{border-left:1px dashed #E8EFF9;}
.iv-lb{font-size:9.5px;font-weight:800;letter-spacing:1.4px;color:#9AACC4;text-transform:uppercase;}

/* ① 入库编号 */
.iv-a{flex:0 0 210px;}
.iv-no{font-family:Consolas,monospace;font-size:14.5px;font-weight:800;color:#12294A;letter-spacing:.3px;}
.iv-tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.iv-cus{padding:1.5px 8px;border-radius:6px;background:#F3F6FC;border:1px solid #DFE7F3;color:#54657F;
  font-size:10.5px;font-weight:800;font-family:Consolas,monospace;white-space:nowrap;}
.iv-shop{font-size:11px;color:#8593A6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ② 商品 */
.iv-b{flex:1.4 1 320px;flex-direction:row;align-items:center;gap:12px;}
.iv-img{flex:none;width:66px;height:66px;border-radius:10px;overflow:hidden;border:1px solid #E6EDF8;
  background:#F6F9FF;display:flex;align-items:center;justify-content:center;color:#C3D2E6;font-size:18px;}
.iv-img img{width:100%;height:100%;object-fit:cover;display:block;}
.iv-pinfo{min-width:0;flex:1;}
.iv-pname{font-size:13px;font-weight:700;color:#16233A;line-height:1.36;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.iv-pmeta{margin-top:4px;font-size:11px;color:#7A8BA3;font-family:Consolas,monospace;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.iv-pmeta b{color:#0B62FF;font-size:13px;}

/* ③ 国内快递 + 两个大号签收胶囊 */
.iv-c{flex:0 0 302px;}
.iv-exp{display:flex;flex-wrap:wrap;gap:5px;}
.iv-exp a{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:7px;
  background:#EFF5FF;border:1px solid #C9DDFA;color:#0B4AA8;font-family:Consolas,monospace;
  font-size:11.5px;font-weight:700;text-decoration:none;transition:.15s;}
.iv-exp a:hover{background:#E1EDFF;border-color:#0B62FF;}
.iv-signs{display:flex;gap:8px;margin-top:3px;}
.iv-sign{padding:6px 17px;border-radius:999px;border:1.5px solid #DFE7F3;background:#F7FAFF;
  color:#93A6BE;font-size:13px;font-weight:800;letter-spacing:.6px;cursor:pointer;
  font-family:inherit;transition:.15s;line-height:1.35;}
.iv-sign:hover{border-color:#B9CFEE;color:#5C7FA8;}
.iv-sign.wait.on{background:#FFF4E5;border-color:#F3CF95;color:#B96A00;box-shadow:0 3px 12px rgba(217,119,6,.20);}
.iv-sign.signed.on{background:#E6F8EF;border-color:#A9E2C6;color:#0B7A55;box-shadow:0 3px 12px rgba(11,122,85,.18);}
.iv-sign.lock{cursor:default;opacity:.55;}
.iv-sign.lock:hover{border-color:#DFE7F3;color:#93A6BE;}

/* ④ 右侧动作 */
.iv-act{flex:0 0 136px;display:flex;flex-direction:column;justify-content:center;gap:7px;
  padding:13px 14px;border-left:1px dashed #E8EFF9;background:#FBFDFF;}
.iv-btn{width:100%;padding:7px 4px;border-radius:8px;font-size:12px;font-weight:800;cursor:pointer;
  font-family:inherit;border:1.5px solid transparent;transition:.15s;letter-spacing:.4px;}
.iv-btn.ok{background:#0E9F6E;border-color:#0E9F6E;color:#fff;}
.iv-btn.ok:hover{background:#0B8A5F;box-shadow:0 4px 12px rgba(14,159,110,.30);}
.iv-btn.ret{background:#FFF6EF;border-color:#F5C79B;color:#C2410C;}
.iv-btn.ret:hover{background:#FFEDDD;border-color:#E8873A;}
.iv-btn.bad{background:#FFF3F3;border-color:#F5C6C6;color:#B02A2A;}
.iv-btn.bad:hover{background:#FDE7E7;border-color:#E47C7C;}
.iv-btn.plain{background:#fff;border-color:#D7E2F1;color:#54657F;font-weight:700;}
.iv-btn.plain:hover{border-color:#B9CFEE;color:#1D6FE0;}

/* 在售库存卡片里的库存数字块 */
.iv-qty{font-family:Consolas,monospace;font-size:24px;font-weight:800;color:#0E9F6E;line-height:1;}
.iv-qty span{font-size:11px;font-weight:700;color:#7A8BA3;margin-left:3px;}
.iv-statrows{display:flex;flex-direction:column;gap:3px;font-size:11px;color:#7A8BA3;font-family:Consolas,monospace;}
/* 累计出库那行（2026-11-12 补出库后的对账信息） */
.iv-out{font-size:11px;color:#8A9BB2;margin-top:-1px;}
.iv-out b{color:#C2410C;font-weight:800;font-family:Consolas,monospace;}
/* 库存流水弹窗 */
.iv-mvhead{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#54657F;
  padding:0 0 10px;border-bottom:1px solid var(--line-2,#E8EFF9);flex-wrap:wrap;}
.iv-mvhead b{font-family:Consolas,monospace;color:#0F2B4D;}
.iv-mvhead em{margin-left:auto;font-style:normal;font-size:11.5px;color:#9AACC4;}
.iv-mvtab{margin-top:10px;max-height:52vh;display:block;overflow:auto;}
.iv-mvtab thead th{position:sticky;top:0;z-index:1;}
.iv-mvtab th.r,.iv-mvtab td.r{text-align:right;}
.iv-mvtab td.ivd-up{color:#0E9F6E;font-weight:800;}
.iv-mvtab td.ivd-down{color:#C2410C;font-weight:800;}
.iv-mvtab td.ivd-flat{color:#9AACC4;}
.iv-short{font-style:normal;margin-left:6px;padding:1px 6px;border-radius:6px;
  background:#FFF3F3;border:1px solid #F5C6C6;color:#B02A2A;font-size:10.5px;font-weight:800;}
.iv-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  padding:56px 20px;border:1px dashed #DCE7F5;border-radius:14px;background:#FBFDFF;text-align:center;}
.iv-empty .ei{font-size:28px;color:#C8D8EC;line-height:1;}
.iv-empty b{font-size:13.5px;color:#8296B0;font-weight:700;}
.iv-empty span{font-size:11.5px;color:#A9B9CE;}

@media(max-width:1420px){
  .iv-a{flex:0 0 180px;}
  .iv-c{flex:0 0 262px;}
}

/* ================= 日常管理（操作员 + 操作日志，2026-11-12） ================= */
.st-head{display:flex;align-items:flex-start;gap:16px;justify-content:space-between;margin-bottom:14px;}
.st-sub{font-size:12px;color:#93A2BA;margin:6px 0 0;line-height:1.6;}
.st-me{display:inline-block;font-size:10px;font-weight:700;padding:1px 6px;border-radius:6px;
  background:#EEF4FF;border:1px solid #C7DCFB;color:#1D6FE0;vertical-align:middle;}
.st-on{font-size:11.5px;font-weight:700;color:#0E9F6E;}
.st-off{font-size:11.5px;font-weight:700;color:#B02A2A;}
.st-tip{font-size:11.5px;color:#93A2BA;}
.st-cards{display:flex;flex-wrap:wrap;gap:10px;}
.st-card{flex:1 1 120px;min-width:120px;background:#FBFDFF;border:1px solid #E6EFF9;border-radius:12px;
  padding:12px 14px;display:flex;flex-direction:column;gap:4px;}
.st-card b{font-size:22px;font-weight:800;color:#0F2B4D;font-family:Consolas,monospace;line-height:1;}
.st-card span{font-size:11.5px;color:#7A8BA3;}
.st-perm-h{font-size:12px;color:#7A8BA3;background:#F7FAFF;border:1px solid #E6EFF9;border-radius:10px;
  padding:9px 11px;margin-bottom:10px;line-height:1.6;}
.st-perm{display:flex;align-items:center;gap:9px;padding:7px 4px;border-bottom:1px dashed #EEF3FA;font-size:13px;cursor:pointer;}
.st-perm:last-of-type{border-bottom:0;}
.st-perm input{width:15px;height:15px;flex:none;cursor:pointer;}
.st-perm span{flex:1;color:#33415E;}
.st-ov{font-style:normal;font-size:10.5px;font-weight:700;color:#B45309;background:#FFF7E0;
  border:1px solid #F0CE7C;border-radius:6px;padding:1px 6px;}

/* ================= 邀约注册（2026-11-12） ================= */
.login-join{margin:12px 0 0;text-align:center;font-size:12.5px;line-height:1.6;}
.login-join a{color:#1D6FE0;text-decoration:none;border-bottom:1px dashed #A9C6F0;padding-bottom:1px;}
.login-join a:hover{color:#0B62FF;border-bottom-color:#0B62FF;}
td.inv-valid{color:#0E9F6E;font-weight:700;}
td.inv-used{color:#7A8BA3;}
td.inv-expired,td.inv-revoked{color:#B02A2A;font-weight:700;}
.inv-done{text-align:center;padding:4px 0 2px;}
.inv-code{font-family:Consolas,monospace;font-size:26px;font-weight:800;letter-spacing:3px;color:#0F2B4D;
  background:#F4F8FF;border:1px dashed #B9CFEE;border-radius:12px;padding:14px 10px;margin:6px 0 12px;user-select:all;}
.inv-tip{font-size:12.5px;color:#7A8BA3;line-height:1.75;text-align:left;margin:0 0 14px;}

/* ================= 注册短信验证码（2026-11-12） ================= */
.sms-block{margin-top:12px;}
.sms-row{display:flex;gap:8px;align-items:stretch;}
.sms-row input{flex:1;min-width:0;box-sizing:border-box;padding:11px 12px;border:1px solid var(--line);border-radius:10px;
  font-size:14px;outline:none;background:#FBFCFF;font-family:Consolas,monospace;letter-spacing:2px;}
.sms-row input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,91,255,.1);background:#fff;}
.sms-btn{flex:none;padding:0 14px;border-radius:10px;border:1px solid #B9CFEE;background:#EEF4FF;color:#1D6FE0;
  font-size:12.5px;font-weight:800;cursor:pointer;font-family:inherit;white-space:nowrap;transition:.15s;}
.sms-btn:hover:not(:disabled){background:#E1EDFF;border-color:#0B62FF;}
.sms-btn:disabled{background:#F3F6FB;color:#A9B9CE;border-color:#E3EBF7;cursor:not-allowed;}
.sms-tip{font-size:11.5px;color:#93A2BA;margin-top:6px;line-height:1.6;}
.sms-tip.ok{color:#0E9F6E;}
.sms-tip.err{color:#B02A2A;}

/* ---------------- 老客户认领弹窗（2026-11-13 上线交接） ---------------- */
.cl-shoplist{max-height:220px;overflow-y:auto;border:1px solid #E2E8F1;border-radius:10px;padding:4px;background:#F7FAFE;}
.cl-shop{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;}
.cl-shop:hover{background:#EDF3FC;}
.cl-shop input[type=checkbox]{width:16px;height:16px;cursor:pointer;flex:none;}
.cl-shop-name{flex:1;font-size:13px;color:#1B2B44;font-weight:600;line-height:1.35;}
.cl-shop-name i{display:block;font-style:normal;font-size:11px;color:#8A9AB0;font-weight:400;margin-top:2px;letter-spacing:.3px;}
.cl-shop-tag{flex:none;font-size:10.5px;color:#0F7A3D;background:#E3F6EA;border-radius:99px;padding:2px 9px;font-weight:600;}
.cl-shop-none{padding:16px;text-align:center;color:#8A9AB0;font-size:12.5px;}
