:root{
  --primary:#2563eb;
  --primary-dark:#1d4ed8;
  --primary-soft:#eaf1ff;
  --side-bg:#0f2137;
  --side-bg2:#132a45;
  --side-text:#a8bcd6;
  --bg:#f4f6fa;
  --card:#ffffff;
  --border:#e6eaf0;
  --border-strong:#d4dae4;
  --text:#1f2937;
  --text-2:#5b6779;
  --text-3:#8b95a6;
  --green:#12a150;
  --green-soft:#e6f6ed;
  --red:#e5484d;
  --red-soft:#fdebee;
  --amber:#d97706;
  --amber-soft:#fdf3e3;
  --purple:#7c3aed;
  --purple-soft:#f1ebfe;
  --cyan:#0891b2;
  --cyan-soft:#e3f6fa;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.04), 0 4px 16px rgba(16,24,40,.06);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
html,body{height:100%}
body{
  font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
  background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;
}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
a{color:inherit;text-decoration:none;cursor:pointer}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#cdd5e0;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- Layout ---------- */
.layout{display:flex;height:100vh;overflow:hidden}
.sidebar{
  width:224px;flex:0 0 224px;background:var(--side-bg);color:var(--side-text);
  display:flex;flex-direction:column;transition:width .18s ease, flex-basis .18s ease;overflow:hidden;
}
.layout.collapsed .sidebar{width:64px;flex-basis:64px}
.brand{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 12px;border-bottom:1px solid rgba(255,255,255,.07);text-align:center}
/* v1.0.3：去掉原 LOGO，折叠态用品牌字母块代替（系统蓝） */
.brand-mini{display:none;width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff;font-size:13px;font-weight:800;letter-spacing:.5px;align-items:center;justify-content:center;box-shadow:0 4px 12px rgba(37,99,235,.35);font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",-apple-system,"Segoe UI",sans-serif}
.layout.collapsed .brand-mini{display:flex}
.layout.collapsed .brand{padding:12px 4px;gap:6px}
.brand-title{color:#fff;font-size:15px;font-weight:800;letter-spacing:.4px;white-space:nowrap;font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
.brand-sub{font-size:11.5px;color:#93b8e0;font-weight:600;letter-spacing:1.2px;white-space:nowrap;font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
.layout.collapsed .brand-text{display:none}
.nav{flex:1;overflow-y:auto;padding:12px 10px}
.nav-group{font-size:11px;color:#5d7695;padding:12px 10px 6px;letter-spacing:1px;white-space:nowrap}
.layout.collapsed .nav-group{opacity:0;height:8px;padding:4px}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;
  color:var(--side-text);font-size:13.5px;margin-bottom:2px;white-space:nowrap;
}
.nav-item .ni{width:18px;text-align:center;font-size:14px;opacity:.9}
/* 导航功能项悬浮高亮（老板 2026-09-10 要求）：主题色高亮背景 + 左侧亮条 + 平滑过渡 */
.nav-item{transition:background .18s ease,color .18s ease,box-shadow .18s ease}
.nav-item:hover{background:rgba(59,130,246,.32);color:#fff;box-shadow:inset 3px 0 0 #93c5fd}
.nav-item.active{background:var(--primary);color:#fff;font-weight:600;box-shadow:0 4px 12px rgba(37,99,235,.35)}
.layout.collapsed .nav-item{justify-content:center;padding:10px 0}
.layout.collapsed .nav-item span:not(.ni){display:none}
.sidebar-foot{padding:14px 16px;border-top:1px solid rgba(255,255,255,.07)}
.sf-title{font-size:12px;color:#c7d5e8;font-weight:600}
.sf-desc{font-size:11px;color:#5d7695;margin:2px 0 8px}
.sf-actions{display:flex;gap:6px}
.layout.collapsed .sidebar-foot{display:none}

.main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.topbar{
  height:62px;background:#fff;border-bottom:1px solid var(--border);
  display:flex;align-items:center;gap:14px;padding:0 20px;flex:0 0 62px;
}
.icon-btn{
  width:32px;height:32px;border:1px solid var(--border);background:#fff;border-radius:8px;
  cursor:pointer;color:var(--text-2);font-size:14px;line-height:1;
}
.icon-btn:hover{background:var(--bg);color:var(--text)}
.topbar-title h1{font-size:16.5px;font-weight:700}
.topbar-title p{font-size:12px;color:var(--text-3);margin-top:1px}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:14px}
.search-global{position:relative}
.search-global input{
  width:250px;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 12px 0 30px;
  background:var(--bg);outline:none;transition:.15s;
}
.search-global input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.1)}
.sg-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-3);font-size:14px}
.user-chip{display:flex;align-items:center;gap:8px}
.avatar{
  width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#2563eb,#4f8cff);
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;
}
.uc-name{font-size:13px;font-weight:600;line-height:1.2}
.uc-role{font-size:11px;color:var(--text-3)}
.content{flex:1;overflow-y:auto;padding:20px}

/* ---------- Generic ---------- */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-hd{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.card-hd h3{font-size:14.5px;font-weight:700}
.card-hd .sub{font-size:12px;color:var(--text-3)}
.card-bd{padding:16px}
.card-bd.nopad{padding:0}

.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.toolbar .grow{flex:1}
.input,.select{
  height:34px;border:1px solid var(--border-strong);border-radius:8px;padding:0 10px;background:#fff;outline:none;
}
.input:focus,.select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.1)}
textarea.input{height:auto;padding:8px 10px;resize:vertical;min-height:70px}
.input.search{width:230px}

.btn{
  height:34px;padding:0 14px;border-radius:8px;border:1px solid var(--border-strong);background:#fff;
  cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-weight:500;transition:.15s;white-space:nowrap;
}
.btn:hover{background:var(--bg)}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-dark)}
.btn-danger{color:var(--red);border-color:#f2c4c6}
.btn-danger:hover{background:var(--red-soft)}
.btn-ghost{border-color:var(--border);color:var(--text-2)}
.btn-xs{height:26px;padding:0 9px;font-size:12px;border-radius:6px}
.btn-sm{height:30px;padding:0 11px;font-size:13px}
.btn:disabled{opacity:.5;cursor:not-allowed}

.table-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{
  text-align:left;padding:10px 14px;background:#fafbfd;color:var(--text-2);font-weight:600;
  border-bottom:1px solid var(--border);white-space:nowrap;font-size:12.5px;
}
table.tbl td{padding:11px 14px;border-bottom:1px solid #f0f2f6;vertical-align:middle}
table.tbl tbody tr:hover{background:#f8fafd}
table.tbl tbody tr:last-child td{border-bottom:none}
.td-right{text-align:right}
.td-center{text-align:center}
/* 列宽拖拽把手 */
table.tbl th{position:relative}
table.tbl th .th-txt{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
table.tbl th .col-resizer{position:absolute;top:0;right:0;bottom:0;width:11px;cursor:col-resize;z-index:2}
table.tbl th .col-resizer::after{content:"";position:absolute;top:0;right:4px;bottom:0;width:2px;background:transparent;transition:background .15s}
table.tbl th .col-resizer:hover::after{background:var(--primary)}
/* 单元格内容溢出省略（配合悬浮提示） */
table.tbl td.td-ellipsis{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 悬浮提示框 */
.cell-tip{position:fixed;z-index:9999;max-width:440px;padding:8px 12px;background:rgba(17,24,39,.94);color:#fff;border-radius:6px;font-size:12.5px;line-height:1.55;pointer-events:none;box-shadow:0 8px 24px rgba(0,0,0,.28);word-break:break-word;display:none}
.cell-tip.bom-tip{max-width:560px;padding:10px 12px}
.ss-wrap{position:relative}
.ss-panel{position:absolute;left:0;right:0;top:calc(100% + 4px);background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 32px rgba(15,23,42,.14);max-height:260px;overflow-y:auto;z-index:60;display:none}
.ss-item{padding:8px 12px;font-size:13px;cursor:pointer;color:var(--text)}
.ss-item:hover{background:var(--primary-soft);color:var(--primary)}
.ss-empty{padding:10px 12px;font-size:12.5px;color:var(--text-3)}
/* search-select 的「＋ 新建」入口与内联新建表单 */
.ss-new{color:var(--primary);font-weight:600;border-top:1px solid var(--border);position:sticky;bottom:0;background:#fff}
.ss-new:hover{background:var(--primary-soft)}
.ss-create-host{margin-top:6px}
.ss-create-box{border:1px dashed var(--primary);border-radius:8px;padding:12px 12px 8px;background:var(--primary-soft)}
.ss-create-hd{display:flex;align-items:center;font-size:13px;margin-bottom:8px;color:var(--primary)}
.ss-create-ft{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}
.mono{font-family:"SFMono-Regular",Consolas,Menlo,monospace;font-size:12.5px}
.muted{color:var(--text-3)}
.strong{font-weight:600}
.link{color:var(--primary);cursor:pointer}
.link:hover{text-decoration:underline}

.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap}
.b-gray{background:#f1f3f7;color:#6b7484}
.b-blue{background:var(--primary-soft);color:var(--primary)}
.b-green{background:var(--green-soft);color:var(--green)}
.b-red{background:var(--red-soft);color:var(--red)}
.b-amber{background:var(--amber-soft);color:var(--amber)}
.b-purple{background:var(--purple-soft);color:var(--purple)}
.b-cyan{background:var(--cyan-soft);color:var(--cyan)}

.empty{padding:48px 20px;text-align:center;color:var(--text-3)}
.empty .e-icon{font-size:34px;opacity:.5;margin-bottom:8px}
.empty .e-title{font-size:14px;color:var(--text-2);margin-bottom:4px}

/* ---------- Stats ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px}
.stat{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}
.stat .s-label{font-size:12.5px;color:var(--text-3);display:flex;align-items:center;gap:6px}
.stat .s-value{font-size:24px;font-weight:700;margin-top:6px;letter-spacing:-.5px}
.stat .s-foot{font-size:12px;color:var(--text-3);margin-top:6px}
.stat .s-icon{
  width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  font-size:16px;margin-left:auto;
}
.stat .s-head{display:flex;align-items:flex-start}
.up{color:var(--red)}     /* 中国习惯：涨=红 */
.down{color:var(--green)}

.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media (max-width:1100px){.grid-2{grid-template-columns:1fr}.grid-3{grid-template-columns:1fr}}

/* ---------- Charts ---------- */
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--text-2);margin-top:10px}
.legend i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px}
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;font-size:12.5px}
.bar-row .bl{width:74px;color:var(--text-2);flex:0 0 74px;text-align:right}
.bar-track{flex:1;height:9px;background:#f0f2f6;border-radius:6px;overflow:hidden}
.bar-fill{height:100%;border-radius:6px}
.bar-row .bv{width:96px;flex:0 0 96px;text-align:right;font-weight:600}

/* ---------- Modal ---------- */
.mask{
  position:fixed;inset:0;background:rgba(16,24,40,.45);display:flex;align-items:flex-start;justify-content:center;
  padding:40px 20px;overflow-y:auto;z-index:100;animation:fade .15s ease;
}
.mask.mask-top{z-index:9999}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{
  background:#fff;border-radius:12px;width:640px;max-width:100%;box-shadow:0 20px 50px rgba(16,24,40,.22);
  animation:pop .18s ease;display:flex;flex-direction:column;
}
@keyframes pop{from{transform:translateY(-10px);opacity:0}to{transform:none;opacity:1}}
.modal-hd{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.modal-hd h3{font-size:15.5px;font-weight:700}
.modal-hd .x{margin-left:auto;cursor:pointer;color:var(--text-3);font-size:18px;line-height:1}
.modal-hd .x:hover{color:var(--text)}
.modal-sizes{display:flex;gap:4px;align-items:center}
.modal-sizes .size-btn{
  width:26px;height:26px;border:1px solid var(--border);background:#fff;border-radius:6px;
  display:inline-flex;align-items:center;justify-content:center;font-size:13px;line-height:1;
  color:var(--text-3);cursor:pointer;padding:0;transition:all .15s ease;
}
.modal-sizes .size-btn:hover{border-color:var(--primary);color:var(--primary)}
.modal-sizes .size-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}
.modal-bd{padding:20px;max-height:62vh;overflow-y:auto;flex:1 1 auto}
.modal-ft{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}

/* ---------- Form ---------- */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-grid.one{grid-template-columns:1fr}
.fld{display:flex;flex-direction:column;gap:5px}
.fld.full{grid-column:1/-1}
.fld label{font-size:12.5px;color:var(--text-2);font-weight:600}
.fld label .req{color:var(--red);margin-left:2px}
.fld .hint{font-size:11.5px;color:var(--text-3)}
.fld .err{font-size:11.5px;color:var(--red)}
.section-title{
  font-size:13px;font-weight:700;color:var(--text);margin:6px 0 2px;padding-left:8px;
  border-left:3px solid var(--primary);grid-column:1/-1;
}
.line-items{width:100%;border-collapse:collapse;font-size:13px}
.line-items th{background:#fafbfd;padding:8px 10px;text-align:left;font-size:12px;color:var(--text-2);border-bottom:1px solid var(--border)}
.line-items td{padding:6px 10px;border-bottom:1px solid #f0f2f6}
.line-items input,.line-items select{width:100%;height:30px;border:1px solid var(--border);border-radius:6px;padding:0 8px}
.line-items input:focus{border-color:var(--primary);outline:none}
.total-bar{display:flex;justify-content:flex-end;gap:22px;padding:14px 4px 0;font-size:13px}
.total-bar .big{font-size:19px;font-weight:700;color:var(--primary)}

/* ---------- 物料附件上传 ---------- */
.file-item{display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid var(--border);border-radius:8px;margin-bottom:8px;background:#fbfcfe}
.fi-label{min-width:76px;font-size:12.5px;font-weight:600;color:var(--text-2)}
.fi-body{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1}
.fi-name{font-size:12.5px;color:var(--text);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mat-thumb{width:34px;height:34px;object-fit:cover;border-radius:6px;border:1px solid var(--border);vertical-align:middle;background:#fff;cursor:zoom-in}
.mat-thumb.lg{width:48px;height:48px}

/* 表格内附件缩略图：鼠标悬浮显示大图预览 */
.mat-thumb-link{position:relative;display:inline-block;line-height:0;vertical-align:middle}
.mat-thumb-link .mat-zoom{position:fixed;display:none;z-index:99999;pointer-events:none;border-radius:8px;box-shadow:0 8px 30px rgba(0,0,0,.25);border:2px solid #fff;background:#fff;overflow:hidden}
.mat-thumb-link .mat-zoom img{display:block;max-width:320px;max-height:320px;object-fit:contain}
.mat-thumb-link:hover .mat-zoom{display:block}

/* ---------- Tabs / Steps ---------- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:16px}
.tab{padding:9px 14px;cursor:pointer;color:var(--text-2);font-size:13.5px;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.tab:hover{color:var(--primary)}

.steps{display:flex;align-items:center;gap:8px;margin-bottom:18px;font-size:12.5px;color:var(--text-3)}
.steps .st{display:flex;align-items:center;gap:6px}
.steps .st .dot{width:20px;height:20px;border-radius:50%;background:#eef1f6;color:var(--text-3);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}
.steps .st.done .dot{background:var(--green);color:#fff}
.steps .st.active .dot{background:var(--primary);color:#fff}
.steps .line{width:26px;height:1px;background:var(--border-strong)}

.timeline{position:relative;padding-left:18px}
.timeline::before{content:"";position:absolute;left:4px;top:4px;bottom:4px;width:2px;background:#e8ecf2}
.tl-item{position:relative;padding-bottom:14px}
.tl-item:last-child{padding-bottom:0}
.tl-item::before{content:"";position:absolute;left:-18px;top:4px;width:10px;height:10px;border-radius:50%;background:#cbd5e1;border:2px solid #fff}
.tl-item.first::before{background:var(--green)}
.tl-t{font-size:13px;font-weight:600}
.tl-d{font-size:12px;color:var(--text-3)}

/* ---------- Import ---------- */
.drop{
  border:2px dashed var(--border-strong);border-radius:12px;padding:34px;text-align:center;
  background:#fbfcfe;cursor:pointer;transition:.15s;
}
.drop:hover,.drop.over{border-color:var(--primary);background:var(--primary-soft)}
.drop .d-icon{font-size:32px;color:var(--primary);opacity:.8}
.drop .d-title{font-size:15px;font-weight:600;margin-top:8px}
.drop .d-desc{font-size:12.5px;color:var(--text-3);margin-top:4px}
.imp-res{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}
.imp-res div{border:1px solid var(--border);border-radius:9px;padding:12px;text-align:center;background:#fff}
.imp-res .n{font-size:20px;font-weight:700}
.err-row{background:var(--red-soft)!important}
.ok-dot{color:var(--green)}
.no-dot{color:var(--red)}

/* ---------- Toast ---------- */
.toast-root{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{
  background:#1f2937;color:#fff;padding:10px 18px;border-radius:8px;font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.18);
  animation:tin .2s ease;display:flex;align-items:center;gap:8px;
}
.toast.ok{background:#0f7a3d}
.toast.err{background:#c22f34}
.toast.warn{background:#b45309}
@keyframes tin{from{transform:translateY(-12px);opacity:0}to{transform:none;opacity:1}}

/* ---------- Misc ---------- */
.pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 16px;font-size:12.5px;color:var(--text-2)}
.pager button{min-width:30px;height:28px;border:1px solid var(--border-strong);background:#fff;border-radius:6px;cursor:pointer}
.pager button:disabled{opacity:.45;cursor:not-allowed}
.pager button.active{background:var(--primary);border-color:var(--primary);color:#fff}
.pager .pg-jump{display:inline-flex;align-items:center;gap:5px;color:var(--text-3)}
.pager .pg-jump input{width:52px;height:28px;padding:0 6px;border:1px solid var(--border-strong);border-radius:6px;font-size:12.5px;text-align:center;color:var(--text-1);background:#fff}
.pager .pg-jump input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft)}
.kv{display:grid;grid-template-columns:110px 1fr;gap:8px 14px;font-size:13px}
.kv .k{color:var(--text-3)}
.divider{height:1px;background:var(--border);margin:16px 0}
.chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:6px;background:#f1f3f7;font-size:12px;color:var(--text-2)}
.row-actions{display:flex;gap:6px;justify-content:flex-end}
.warn-box{background:var(--amber-soft);border:1px solid #f3ddb5;color:#8a5a08;padding:10px 14px;border-radius:8px;font-size:12.5px;margin-bottom:14px}
.info-box{background:var(--primary-soft);border:1px solid #cfe0ff;color:#1c47a8;padding:10px 14px;border-radius:8px;font-size:12.5px;margin-bottom:14px}

/* =========================================================
 * 登录页 · 绿色森林系（v1.1.27 设计改版）
 * 配色：与系统主色一致（蓝 #2563eb + 浅灰蓝底），干净无背景图
 * ========================================================= */
.login-mask{position:fixed;inset:0;background-color:var(--bg);background-image:linear-gradient(160deg,#f4f6fa 0%,#eaf1ff 45%,#e8eefb 100%);display:none;align-items:center;justify-content:center;z-index:500}
.login-mask.show{display:flex;animation:fade .35s ease}
.login-mask::before{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(37,99,235,.05) 0%,rgba(244,246,250,0) 62%);pointer-events:none}
.login-mask::after{content:'';position:absolute;left:-10%;bottom:-20%;width:600px;height:600px;background:radial-gradient(circle,rgba(37,99,235,.10) 0%,transparent 65%);pointer-events:none;filter:blur(40px)}
.login-card{position:relative;background:#fff;border:1px solid var(--border);width:300px;border-radius:14px;padding:24px 24px 18px;box-shadow:0 18px 48px rgba(16,24,40,.12);z-index:2;animation:slideUp .5s cubic-bezier(.16,.84,.44,1)}
@keyframes slideUp{from{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
.login-brand{display:flex;align-items:center;gap:11px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px dashed var(--border)}
.login-brand .lb-icon{width:36px;height:36px;border-radius:11px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px rgba(37,99,235,.28);flex:none}
.login-brand .lb-icon svg{width:21px;height:21px;color:#fff}
.login-brand .lb-text h1{font-family:'PingFang SC','HarmonyOS Sans SC','Microsoft YaHei',-apple-system,'Segoe UI',sans-serif;-webkit-font-smoothing:antialiased;font-size:16px;font-weight:700;color:var(--text);margin:0;letter-spacing:.4px;line-height:1.2}
.login-brand .lb-text p{font-family:'PingFang SC','HarmonyOS Sans SC','Microsoft YaHei',-apple-system,'Segoe UI',sans-serif;-webkit-font-smoothing:antialiased;font-size:15px;color:var(--text-2);margin:4px 0 0;letter-spacing:2px;font-weight:600}
.login-form{display:flex;flex-direction:column;gap:12px}
.login-form .fld{display:flex;flex-direction:column;gap:5px;position:relative}
.login-form .fld label{font-size:11.5px;color:var(--text-2);font-weight:600;letter-spacing:.5px;padding-left:2px}
.login-form .input{height:38px;border-radius:9px;border:1.5px solid var(--border-strong);background:#fff;padding:0 12px 0 38px;font-size:13.5px;color:var(--text);outline:none;transition:all .2s ease;width:100%;box-sizing:border-box}
.login-form .input::placeholder{color:var(--text-3)}
.login-form .input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 4px rgba(37,99,235,.15)}
.login-form .fld .input-icon{position:absolute;left:13px;top:31px;color:var(--primary);font-size:14px;pointer-events:none;line-height:1}
.login-form .fld.pwd .input-icon{font-size:16px;top:32px}
.login-form .input:hover{border-color:var(--primary)}
.login-err{color:#dc2626;font-size:12.5px;min-height:18px;padding:2px 0;text-align:center;font-weight:500}
.login-err:empty{display:none}
.login-btn{height:42px;border:none;border-radius:10px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff;font-size:14.5px;font-weight:600;letter-spacing:1px;cursor:pointer;margin-top:4px;box-shadow:0 6px 18px rgba(37,99,235,.28),inset 0 -2px 0 rgba(0,0,0,.06);transition:all .2s ease;position:relative;overflow:hidden}
.login-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 24px rgba(37,99,235,.35),inset 0 -2px 0 rgba(0,0,0,.06)}
.login-btn:active:not(:disabled){transform:translateY(0);box-shadow:0 3px 10px rgba(37,99,235,.3)}
.login-btn:disabled{opacity:.7;cursor:not-allowed}
.login-btn::after{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.25),transparent);transition:left .5s ease}
.login-btn:hover::after{left:100%}
.login-foot{font-size:11px;color:var(--text-3);text-align:center;margin-top:14px;letter-spacing:.3px;line-height:1.5}
.login-foot b{color:var(--primary)}
.login-hint{font-size:12.5px;color:#b45309;background:#fef3c7;padding:8px 12px;border-radius:8px;margin-top:12px;border-left:3px solid #f59e0b;text-align:center}


/* ---------- 在线指示 ---------- */
.live-chip{display:flex;align-items:center;gap:5px;padding:0 11px;height:28px;border:1px solid var(--border);border-radius:14px;background:#fff;font-size:12.5px;color:var(--text-2)}
.live-chip .dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px rgba(18,161,80,.18);animation:pulse 1.6s infinite}
.live-chip .cnt{margin-left:4px;color:var(--text-3);font-size:11.5px}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(18,161,80,.5)}100%{box-shadow:0 0 0 6px rgba(18,161,80,0)}}

/* ---------- 用户菜单 ---------- */
.user-chip{position:relative;cursor:pointer;padding:4px 10px 4px 4px;border-radius:8px}
.user-chip:hover{background:#f5f7fa}
.user-chip.open .user-menu{display:block}
.user-menu{position:absolute;right:0;top:100%;margin-top:6px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 20px rgba(16,24,40,.12);min-width:160px;padding:4px 0;display:none;z-index:50}
.user-menu a{display:block;padding:9px 14px;font-size:13px;color:var(--text)}
.user-menu a:hover{background:var(--primary-soft);color:var(--primary)}
.user-menu a:first-child{border-radius:8px 8px 0 0}
.user-menu a:last-child{border-radius:0 0 8px 8px}

/* ---------- 模式提示条 ---------- */
.mode-banner{position:fixed;top:0;left:0;right:0;background:#fef3c7;color:#92400e;padding:6px 16px;font-size:12.5px;text-align:center;z-index:200;border-bottom:1px solid #f3ddb5}

/* ---------- 线索跟进日志（按周新鲜度染色） ---------- */
.follow-cell{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:78px;max-width:180px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500;cursor:help;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.4}
.follow-cell.green{background:#dcfce7;color:#15803d}
.follow-cell.yellow{background:#fef9c3;color:#a16207}
.follow-cell.red{background:#fee2e2;color:#b91c1c}
.follow-cell.none{background:#f1f5f9;color:#94a3b8}
.follow-cell .fc-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:5px;background:currentColor;opacity:.7}
.follow-tip{position:fixed;z-index:300;max-width:340px;padding:10px 14px;background:#1f2937;color:#f9fafb;border-radius:8px;font-size:12.5px;line-height:1.55;box-shadow:0 8px 24px rgba(0,0,0,.25);pointer-events:none;display:none;white-space:normal}
.follow-tip.show{display:block}
.follow-tip .ft-head{font-size:11.5px;color:#9ca3af;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid #374151;display:flex;justify-content:space-between;align-items:center}
.follow-tip .ft-head .ft-tag{padding:1px 7px;border-radius:10px;font-size:10.5px;font-weight:600}
.follow-tip .ft-item{padding:5px 0;border-bottom:1px dashed #374151}
.follow-tip .ft-item:last-child{border-bottom:none}
.follow-tip .ft-date{color:#9ca3af;font-size:11px;margin-bottom:2px}
.follow-tip .ft-content{color:#f9fafb}
.follow-tip .ft-empty{color:#9ca3af;text-align:center;padding:8px 0}

/* ---------- 合同模板 · 上传 hero / drag & drop ---------- */
.ct-upload-hero{max-width:560px;margin:32px auto;padding:40px 36px 32px;background:linear-gradient(180deg,#fff 0%,#f8fafc 100%);border:1px solid var(--border);border-radius:14px;text-align:center;box-shadow:0 2px 8px rgba(16,24,40,.04)}
.ct-upload-icon{font-size:48px;margin-bottom:10px;line-height:1}
.ct-upload-title{font-size:18px;font-weight:600;color:var(--text);margin-bottom:8px}
.ct-upload-desc{font-size:13px;color:var(--text-2);line-height:1.65;margin-bottom:18px}
.ct-upload-desc code{background:#eef2f7;padding:1px 6px;border-radius:4px;font-size:12px;color:#1e40af;font-family:'SF Mono','Consolas',monospace}
.ct-upload-drop{padding:32px 20px;border:2px dashed #cbd5e1;border-radius:10px;background:#f8fafc;cursor:pointer;transition:all .18s ease}
.ct-upload-drop:hover{border-color:#3b82f6;background:#eff6ff}
.ct-upload-drop.drag{border-color:#3b82f6;background:#dbeafe;transform:scale(1.01)}
.ct-upload-drop-icon{font-size:32px;color:#94a3b8;margin-bottom:6px;line-height:1}
.ct-upload-drop-text{font-size:14px;color:var(--text);font-weight:500;margin-bottom:4px}
.ct-upload-drop-hint{font-size:12px;color:var(--text-3)}
.ct-drop{padding:24px 16px;border:2px dashed #cbd5e1;border-radius:8px;background:#fafbfc;text-align:center;cursor:pointer;transition:all .18s ease}
.ct-drop:hover{border-color:#3b82f6;background:#eff6ff}
.ct-drop.drag{border-color:#3b82f6;background:#dbeafe}
.ct-drop-icon{font-size:26px;color:#94a3b8;margin-bottom:4px;line-height:1}
.ct-drop-text{font-size:13px;color:var(--text);font-weight:500;margin-bottom:4px}
.ct-drop-hint{font-size:11.5px;color:var(--text-3)}
.ct-drop-file{display:flex;align-items:center;gap:8px;margin-top:10px;padding:8px 12px;background:#fff;border:1px solid var(--border);border-radius:6px;font-size:13px;text-align:left}
.ct-drop-file-icon{font-size:18px}

/* =========================================================
 * 合同模板 · 识别结果界面（v1.1.25 核心 UI）
 * ========================================================= */
.ct-preview-wrap{display:flex;flex-direction:column;gap:0;height:min(72vh,640px);font-size:13px}
.ct-preview-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;padding:0 4px 12px;border-bottom:1px solid var(--border);margin-bottom:12px}
.ct-preview-title{font-size:15.5px;font-weight:600;color:var(--text);margin-bottom:6px}
.ct-preview-sub{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-bottom:4px;font-size:13px}
.ct-preview-sub .badge{font-size:11px}
.ct-preview-file{font-size:12.5px;color:var(--text-2);display:flex;align-items:center}
.ct-preview-ops{display:flex;gap:6px;flex-shrink:0}
.ct-preview-body{display:grid;grid-template-columns:1fr 320px;gap:14px;flex:1;min-height:0}
.ct-pv-left{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:8px;background:#fafbfc;min-height:0}
.ct-pv-text-toolbar{display:flex;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);background:#fff;border-radius:8px 8px 0 0}
.ct-pv-text{flex:1;overflow-y:auto;padding:18px 22px;line-height:1.85;font-size:13.5px;color:#1e293b;font-family:'PingFang SC','Microsoft YaHei',sans-serif;background:#fff}
.ct-pv-para{padding:4px 0;transition:background .25s ease;border-radius:4px;padding-left:6px;margin-left:-6px}
.ct-pv-para.highlight{background:#fef3c7;box-shadow:0 0 0 4px #fde68a inset}
.ct-pv-page-divider{margin:18px 0 10px;padding:6px 12px;background:linear-gradient(90deg,#e2e8f0 0%,transparent 100%);color:#64748b;font-size:12px;font-weight:600;border-radius:4px;letter-spacing:.5px}
.ct-pv-ph{display:inline;background:#fef9c3;color:#854d0e;padding:1px 4px;border-radius:3px;font-weight:600;cursor:pointer;transition:all .15s ease;border:1px solid #fde047;font-size:12.5px}
.ct-pv-ph:hover{background:#fde047;color:#713f12;transform:scale(1.05)}
.ct-pv-right{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:8px;background:#fff;min-height:0;overflow:hidden}
.ct-pv-side-head{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);background:#f8fafc}
.ct-pv-fields{flex:1;overflow-y:auto;padding:8px}
.ct-pv-field{margin-bottom:8px;border:1px solid var(--border);border-radius:6px;background:#fff;transition:all .2s ease;overflow:hidden}
.ct-pv-field.highlight{border-color:#3b82f6;box-shadow:0 0 0 3px #bfdbfe;background:#eff6ff}
.ct-pv-field-head{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f1f5f9;border-bottom:1px solid var(--border)}
.ct-pv-field-key{font-family:'SF Mono','Consolas',monospace;font-size:12px;color:#0f172a;font-weight:600}
.ct-pv-field-del{background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:16px;line-height:1;padding:0 4px}
.ct-pv-field-del:hover{color:#ef4444}
.ct-pv-field-body{padding:8px 10px}
.ct-pv-field-row{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-size:12.5px}
.ct-pv-field-row label{color:#64748b;width:54px;flex-shrink:0}
.ct-pv-field-row .inp.sm{font-size:12px;padding:4px 8px}
.ct-pv-req{display:display:flex;align-items:center;gap:4px;color:#475569;cursor:pointer;width:auto !important}
.ct-pv-req input{margin:0}
.ct-pv-field-pos{font-size:11.5px;color:#64748b;padding:5px 8px;background:#f8fafc;border-radius:4px;cursor:pointer;transition:background .15s ease;margin-top:4px;line-height:1.5}
.ct-pv-field-pos:hover{background:#e0f2fe;color:#0369a1}
.ct-pv-pos-icon{margin-right:2px}
.ct-pv-pos-count{display:inline-block;background:#dbeafe;color:#1e40af;font-size:10px;padding:0 5px;border-radius:8px;margin-left:4px;font-weight:600}
.ct-pv-empty{padding:60px 30px;color:#94a3b8;text-align:center;background:#fafbfc}
.ct-pv-empty-sm{padding:30px 14px;color:#94a3b8;text-align:center;font-size:12.5px;background:#fafbfc;border-radius:6px;border:1px dashed var(--border)}
.ct-pv-hint{padding:10px 12px;background:#f0f9ff;border-top:1px solid var(--border);font-size:11.5px;color:#1e40af;line-height:1.65}
.ct-pv-hint b{color:#0c4a6e}
.ct-pv-hint code{background:#dbeafe;padding:0 4px;border-radius:3px;font-size:11px}
.ct-preview-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 0 0;border-top:1px solid var(--border);margin-top:12px}

/* ---------- 全系统加粗渲染（老板 2026-09-10 指令） ---------- */
.nav-item{font-weight:500}
.nav-item.active{font-weight:700}
.nav-group{font-weight:600;color:#7fb493;letter-spacing:1.2px}
.card-hd h3{font-weight:800;letter-spacing:.3px}
.card-hd .sub{font-weight:600}
table.tbl th{font-weight:700}
table.tbl td{font-weight:500;color:#1f2937}
.btn{font-weight:600}
.link{font-weight:600}
.badge{font-weight:600}
.stat-card .n{font-weight:800}
.stat-card .l{font-weight:600}
.module-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.module-head .title{font-size:19px;font-weight:800;color:#0f3e25;letter-spacing:.4px;display:flex;align-items:center;gap:8px}
.module-head .ops{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.module-stat{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.stat-card{flex:1;min-width:130px;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow)}
.stat-card .n{font-size:24px;color:var(--primary-dark)}
.stat-card .l{font-size:12px;color:var(--text-3);margin-top:2px}
.module-list{display:flex;flex-direction:column;gap:10px}
.empty{padding:36px 20px;text-align:center;color:var(--text-3);font-weight:600;font-size:13px;background:var(--card);border:1px dashed var(--border-strong);border-radius:12px}
.topbar-title b{font-weight:800;letter-spacing:.3px}
.uc-role{font-weight:600}
.mono{font-weight:600}
/* 色系回退为原蓝色系（老板 2026-09-10 指令）：移除绿色渐变覆盖，主按钮/侧边栏恢复主题变量默认 */

/* ---------- 用户权限复选网格 + 数据清空类型勾选（2026-09-10） ---------- */
.perm-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:2px 22px;background:#f8fafc;border:1px solid var(--border);border-radius:10px;padding:10px 14px}
.perm-row{display:flex;align-items:center;gap:10px;padding:3px 0;font-size:12.5px}
.perm-name{flex:1;font-weight:600;color:var(--text-2)}
.perm-chk{display:flex;align-items:center;gap:4px;cursor:pointer;color:var(--text-3);font-weight:500}
.perm-chk input{width:14px;height:14px;accent-color:var(--primary);cursor:pointer}
.perm-row input[type="checkbox"][data-ct]{accent-color:#d83a3a;cursor:pointer}

/* ============================================================
   移动端适配（v1.1.32，老板 2026-09-10 要求 · 核心 5 模块）
   - 桌面 ≥769px 完全不进入此块（不改变现有样式）
   - 手机 ≤768px：sidebar 转抽屉、表格转卡片、9 模块入口隐藏、对话框全屏
   ============================================================ */

@media (max-width: 768px) {
  body { font-size: 13.5px; }

  /* sidebar 转抽屉（默认收起） */
  .layout { position: relative; }
  .layout .sidebar {
    position: fixed !important; left: 0; top: 0; bottom: 0;
    width: 240px !important; flex-basis: 240px !important;
    z-index: 100;
    transform: translateX(-100%);
    transition: transform .25s ease;
  }
  body.mobile-sidebar-open .sidebar { transform: translateX(0); box-shadow: 4px 0 16px rgba(0,0,0,.25); }
  body.mobile-sidebar-open { overflow: hidden; }

  /* overlay */
  .app-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.4); z-index: 99; opacity: 0; pointer-events: none; transition: opacity .2s; }
  body.mobile-sidebar-open .app-overlay { opacity: 1; pointer-events: auto; }

  /* topbar 紧凑 */
  .topbar { height: 50px; flex: 0 0 50px; padding: 0 12px; gap: 8px; }
  .topbar-title h1 { font-size: 15px; }
  .topbar-title p { display: none; }
  .topbar-right { gap: 8px; }
  .search-global input { width: 130px; height: 30px; padding: 0 10px 0 26px; font-size: 13px; }
  .uc-name, .uc-role { font-size: 12px; }
  .uc-role { display: none; }

  /* content padding 减小 */
  .content { padding: 12px; }
  .module-head { gap: 8px; margin-bottom: 10px; }
  .module-head .title { font-size: 16px; }

  /* 9 模块 sidebar 入口隐藏（material/product/customer/supplier/contract/contractTemplate/lead/invoice/admin） */
  .nav-item[data-mobile-hide] { display: none; }
  .nav-group:has(.nav-item:not([data-mobile-hide])){display:block}
  .nav-group:has(.nav-item[data-mobile-hide]:only-child){display:none}

  /* 表格 → 卡片堆叠（核心改造） */
  .table-wrap { background: transparent; border: none; overflow: visible; }
  .tbl { border: none; }
  .tbl thead { display: none; }
  .tbl tbody, .tbl tr, .tbl td { display: block; width: 100% !important; }
  .tbl tr {
    margin-bottom: 10px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--card);
    padding: 10px 14px;
    box-shadow: var(--shadow);
  }
  .tbl td {
    display: flex; justify-content: space-between; align-items: baseline;
    padding: 7px 0 !important;
    border: none !important;
    font-size: 13px;
    gap: 12px;
    text-align: right !important;
    white-space: normal !important;
  }
  .tbl td::before {
    content: attr(data-label);
    font-weight: 600; color: var(--text-3); font-size: 12px;
    text-align: left; flex: 0 0 auto;
  }
  .tbl td:not(:last-child) { border-bottom: 1px dashed rgba(0,0,0,.06) !important; }
  /* 操作列全宽、贴底 */
  .tbl td:last-child { padding-top: 10px !important; margin-top: 6px; border-top: 1px solid var(--border) !important; }
  .tbl td:last-child::before { display: none; }
  .tbl td:last-child .row-actions { display: flex; flex-wrap: wrap; gap: 4px 12px; justify-content: flex-end; }

  /* toolbar 在窄屏堆叠 */
  .toolbar { gap: 6px; }
  .toolbar .input, .toolbar .select { height: 36px; }
  .toolbar > .grow { flex: 1 1 100%; order: 99; }

  /* 卡片层 stat */
  .module-stat { gap: 8px; }
  .stat-card { min-width: 0; padding: 10px 12px; }
  .stat-card .n { font-size: 18px; }

  /* 对话框全屏 */
  .modal-card, .ui-modal .modal-card {
    width: 100% !important; max-width: 100% !important;
    height: calc(100vh - 16px); max-height: calc(100vh - 16px);
    border-radius: 12px !important; margin: 8px;
  }

  /* 模块头部行动紧凑 */
  .module-head .ops { gap: 6px; flex-wrap: wrap; }
  .module-head .ops .btn { height: 32px; }

  /* 分页紧凑 */
  .pager { font-size: 12px; padding: 12px; flex-wrap: wrap; gap: 4px; }
  .pager .pg { width: 30px; height: 30px; }

  /* 卡片 grid 2/3 列 → 单列 */
  .grid-2, .grid-3 { grid-template-columns: 1fr !important; }

  /* 隐藏一些桌面专属 UI（如导出 CSV 大按钮） */
  .toolbar .desktop-only { display: none; }
}

/* 极小屏（≤480px）进一步压缩 */
@media (max-width: 480px) {
  .topbar { padding: 0 8px; }
  .topbar-title h1 { font-size: 14px; }
  .search-global input { width: 100px; font-size: 12px; }
  .content { padding: 10px 8px; }
  .tbl td { font-size: 12.5px; }
}


/* ---------- 运单号物流轨迹缩略卡片 ---------- */
.track-pop-wrap{position:fixed;display:none;z-index:70;width:340px}
.track-pop{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 10px 30px rgba(17,24,39,.18);padding:12px 14px;font-size:12.5px}
.tp-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.tp-body{max-height:240px;overflow-y:auto}
.tp-item{display:flex;gap:8px;padding:6px 0;border-bottom:1px dashed var(--border)}
.tp-item:last-of-type{border-bottom:none}
.tp-dot{width:8px;height:8px;border-radius:50%;background:var(--border-strong);margin-top:5px;flex:none}
.tp-new .tp-dot{background:var(--primary)}
.tp-new .tp-d{font-weight:700;color:var(--primary)}
.tp-d{line-height:1.45;word-break:break-all}
.tp-t{font-size:11px;color:var(--text-3);margin-top:2px}
.tp-more{color:var(--text-3);font-size:11.5px;margin-top:4px}
.tp-empty{color:var(--text-3);padding:10px 0;text-align:center}
.tp-ft{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border);font-size:12.5px}
.tp-tip{color:var(--text-3);font-size:11px}
/* v1.1.75 悬浮实时同步状态行 */
.tp-live{display:flex;align-items:center;gap:6px;margin-top:8px;padding:6px 8px;background:var(--primary-soft);color:var(--primary);border-radius:6px;font-size:12px}
.tp-live::before{content:"";width:10px;height:10px;border:2px solid var(--primary);border-top-color:transparent;border-radius:50%;animation:tp-spin .8s linear infinite;flex:none}
@keyframes tp-spin{to{transform:rotate(360deg)}}


/* ---------- 系统管理页签三色（绿=账号与权限 蓝=操作日志 黄=数据维护） ---------- */
.tab .tab-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}
.tab.tab-c-green{color:var(--green)}
.tab.tab-c-green:hover,.tab.tab-c-green.active{color:var(--green);border-bottom-color:var(--green)}
.tab.tab-c-blue{color:var(--primary)}
.tab.tab-c-blue:hover,.tab.tab-c-blue.active{color:var(--primary);border-bottom-color:var(--primary)}
.tab.tab-c-amber{color:var(--amber)}
.tab.tab-c-amber:hover,.tab.tab-c-amber.active{color:var(--amber);border-bottom-color:var(--amber)}

/* 合计行（tfoot） */
table.tbl tfoot td{background:#f8fafc;font-weight:700;border-top:2px solid var(--border);border-bottom:none}
@media (max-width:820px){ table.tbl tfoot{display:none} }

/* 佣金人员复选 + 逐人比例 */
.chip-comm{display:inline-block;background:var(--primary-soft);color:var(--primary);border-radius:6px;padding:1px 7px;font-size:11.5px;margin:1px 3px 1px 0;white-space:nowrap}
.chip-comm b{margin-left:5px;font-weight:700}
/* 佣金明细列：每人独占一行、靠左（2026-09-15） */
.chip-line{display:block;margin:3px 0;text-align:left}
.mbr-wrap{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow:auto}
.mbr-row{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--border);border-radius:8px;cursor:pointer;background:#fff}
.mbr-row:hover{border-color:var(--border-strong)}
.mbr-row.on{border-color:var(--primary);background:var(--primary-soft)}
.mbr-row input[type=checkbox]{width:16px;height:16px;flex:0 0 auto;cursor:pointer}
.mbr-nm{flex:1;font-size:13px;color:var(--text)}
.mbr-nm i{color:var(--text-3);font-style:normal;font-size:11.5px;margin-left:6px}
.mbr-rt{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--text-3)}
.mbr-rt .input{width:84px;text-align:right;padding:4px 8px}
.mbr-sum{font-size:12.5px;color:var(--text-3);padding:2px 2px 0}
.mbr-sum b{color:var(--text)}

/* 佣金人员与比例：工具栏 + 档案多选弹窗（2026-09-15） */
.mbr-tools{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.mbr-tip{font-size:12px;color:var(--text-3)}
.mbr-empty{font-size:12.5px;color:var(--text-3);padding:12px;text-align:center;border:1px dashed var(--border-strong);border-radius:8px;background:#fbfcfe}
.mbr-pick-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.mbr-pick-hd .input{flex:1}
.mbr-wrap-pick{max-height:52vh}
.mbr-row.mbr-done{opacity:.72;cursor:default;background:#fbfcfe}
.mbr-tag{display:inline-block;font-style:normal;font-size:11px;padding:1px 6px;border-radius:5px;background:var(--primary-soft);color:var(--primary);margin-left:6px}
.mbr-tag.warn{background:var(--amber-soft);color:var(--amber)}
.mbr-tag.err{background:var(--red-soft);color:var(--red)}

/* 佣金比例必填：未填 / 超范围时输入框标红（2026-09-15） */
.mbr-rt .input.mbr-in-bad{border-color:var(--red);background:var(--red-soft)}
.mbr-row:has(.mbr-in-bad){border-color:var(--red)}
.mbr-sum b[style*="--red"]{font-weight:700}

/* 物流服务商：物流费明细 / 说明列超长截断，完整内容看 title 与详情弹窗（2026-09-15） */
.lp-fee{max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12.5px;color:var(--text-2)}

/* 销售订单：订单类型徽章（2026-09-15）；商业订单为常规订单，中性色；其余三类醒目区分 */
.ot-tag{display:inline-block;padding:1px 7px;border-radius:4px;font-size:11.5px;white-space:nowrap}
.ot-biz{background:var(--primary-soft);color:var(--primary)}
.ot-inner{background:var(--purple-soft);color:var(--purple)}
.ot-gift{background:var(--amber-soft);color:var(--amber)}
.ot-sample{background:var(--cyan-soft);color:var(--cyan)}
/* 非商业订单的单价取值提示 */
.oi-price-hint{font-size:11.5px;color:var(--amber)}

/* 佣金人员：重复录入提示 +「今天」标记（2026-09-15，消除「数据被清空」误判） */
.cmp-tip{padding:8px 12px;margin-bottom:8px;border-radius:6px;background:var(--primary-soft);color:var(--primary);font-size:12.5px;line-height:1.6}
.cmp-tip-warn{background:var(--amber-soft);color:var(--amber)}
.cmp-dup{display:inline-block;padding:0 5px;border-radius:4px;background:var(--amber-soft);color:var(--amber);font-size:11px;font-weight:400;vertical-align:middle}
.cmp-today{display:inline-block;padding:0 6px;border-radius:4px;background:var(--green-soft);color:var(--green);font-size:11.5px}

/* =========================================================
   公司档案（v1.1.66）：左侧公司列表 + 右侧详情（信息/资质/授权）
   ========================================================= */
.cp-layout{display:grid;grid-template-columns:280px 1fr;gap:14px;align-items:start}
.cp-side{min-height:420px}
.cp-item{padding:11px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:.12s}
.cp-item:hover{background:var(--bg)}
.cp-item.active{background:var(--primary-soft);border-left:3px solid var(--primary);padding-left:13px}
.cp-item-name{font-weight:600;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-item-sub{font-size:11.5px;color:var(--text-3);margin-top:2px}
.cp-detail{min-width:0}
.cp-form{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.cp-form .fld.full{grid-column:1/3}
.cp-form .fld label{display:block;font-size:12.5px;color:var(--text-3);margin-bottom:4px}
.cp-entry{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:var(--bg)}
.cp-entry-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.cp-entry-name{font-size:13.5px}
.cp-entry-hd .row-actions{margin-left:auto;display:flex;gap:10px}
.cp-files{display:flex;flex-wrap:wrap;gap:10px}
.cp-file{display:flex;gap:8px;align-items:flex-start;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:8px;max-width:260px}
.cp-thumb{width:56px;height:56px;object-fit:cover;border-radius:6px;border:1px solid var(--border);background:#fff;cursor:zoom-in;display:block}
.cp-thumb-doc{display:flex;align-items:center;justify-content:center;font-size:26px;cursor:default}
.cp-file-meta{min-width:0}
.cp-file-name{font-size:12.5px;font-weight:600;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-file-sub{font-size:11px;color:var(--text-3);margin:1px 0 3px}
.cp-file-acts{font-size:12px}
@media (max-width:1100px){.cp-layout{grid-template-columns:1fr}.cp-side{min-height:0}}
/* v1.1.71 列表排序表头 */
th[data-sort]{cursor:pointer;user-select:none;white-space:nowrap}
th[data-sort]:hover .th-txt{color:var(--primary)}
th[data-sort].sort-active .th-txt{color:var(--primary);font-weight:700}
.sort-ind{font-size:9px;margin-left:3px;opacity:.6;font-weight:400}