/* ============ 综八团队管理工作台 · 设计系统 ============ */
:root{
  --bg:#f4f6f9; --surface:#fff; --surface-2:#fafbfc; --surface-3:#f0f2f5;
  --border:#e2e6ec; --border-2:#d3d9e2;
  --text:#151a21; --text-2:#4a5361; --text-3:#8b95a3;
  --primary:#2563eb; --primary-h:#1d4ed8; --primary-bg:#eff5ff; --primary-br:#bfd4fe;
  --ok:#0f9d58; --ok-bg:#e8f6ee; --warn:#d97706; --warn-bg:#fef4e6; --danger:#dc2626; --danger-bg:#fdecec;
  --purple:#7c3aed; --purple-bg:#f3eeff; --teal:#0891b2; --teal-bg:#e6f6fa;
  --sidebar:#141a24; --sidebar-2:#1c2431; --sidebar-tx:#96a1b3; --sidebar-ac:#fff;
  --r:8px; --r-lg:12px;
  --sh:0 1px 2px rgba(16,24,40,.05); --sh-md:0 4px 14px rgba(16,24,40,.09);
  --sh-lg:0 14px 44px rgba(16,24,40,.16);
  --nav-w:90px; --hd-h:54px; --row-h:36px;
  --mono:'SF Mono',Menlo,Consolas,'Courier New',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font:13px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;
  background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overflow:hidden;
}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
a{color:var(--primary);text-decoration:none}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c6ccd6;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#a9b2bf}
::-webkit-scrollbar-track{background:transparent}

/* ============ 布局 ============ */
#app{display:flex;height:100vh;overflow:hidden}

/* ---- 侧栏 ---- */
.sb{width:var(--nav-w);flex:0 0 var(--nav-w);background:var(--sidebar);display:flex;flex-direction:column;overflow:hidden;transition:margin-left .22s}
.sb-brand{height:var(--hd-h);display:flex;align-items:center;gap:9px;padding:0 12px;border-bottom:1px solid rgba(255,255,255,.07);flex:0 0 auto}
.sb-logo{width:26px;height:26px;border-radius:7px;background:linear-gradient(135deg,#3b82f6,#7c3aed);display:grid;place-items:center;color:#fff;font-weight:700;font-size:12px;flex:0 0 auto}
.sb-tt{color:#fff;font-weight:600;font-size:13.5px;letter-spacing:.2px;line-height:1.2}
.sb-tt small{display:block;color:var(--sidebar-tx);font-weight:400;font-size:10.5px;margin-top:1px}
.sb-nav{flex:1;overflow-y:auto;padding:8px 0 20px}
.sb-nav::-webkit-scrollbar-thumb{background:#39424f}
.sb-grp{padding:12px 15px 5px;color:#5f6b7d;font-size:10.5px;font-weight:600;letter-spacing:.7px;text-transform:uppercase}

/* 主题（一级）→ 二级子主题（可折叠） */
.sb-theme{margin:2px 6px}
.sb-theme-hd{display:flex;align-items:center;gap:8px;padding:7px 8px;color:#c7d0dd;font-size:12.3px;font-weight:600;
  border-radius:7px;cursor:pointer;user-select:none;transition:.13s}
.sb-theme-hd:hover{background:var(--sidebar-2);color:#e7ecf3}
.sb-theme-hd svg{width:15px;height:15px;flex:0 0 auto;opacity:.9}
.sb-theme[data-c="red"] .sb-theme-hd{border-left:3px solid #e05555}
.sb-theme[data-c="amber"] .sb-theme-hd{border-left:3px solid #e0a23a}
.sb-theme[data-c="green"] .sb-theme-hd{border-left:3px solid #4faa3a}
.sb-theme[data-c="blue"] .sb-theme-hd{border-left:3px solid #4f8fe0}
.sb-theme[data-c="purple"] .sb-theme-hd{border-left:3px solid #9b6be0}
.sb-theme-hd .caret{margin-left:auto;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid #6b7688;transition:transform .18s}
.sb-theme.open .sb-theme-hd .caret{transform:rotate(180deg)}
.sb-theme-bd{display:none;padding:2px 0 4px;margin-left:4px;border-left:1px solid rgba(255,255,255,.08)}
.sb-theme.open .sb-theme-bd{display:block}
.sb-theme-bd .sb-it{padding-left:20px}
.sb-theme-bd .sb-it::before{content:'';position:absolute;left:9px;top:50%;width:5px;height:1px;background:#3a4453}
.sb-it.home{margin:0 0 4px;font-weight:600;color:#cdd6e2}
.sb-it.home.on{color:#fff}
.sb-it{display:flex;align-items:center;gap:8px;padding:7px 12px;color:var(--sidebar-tx);font-size:12.6px;position:relative;transition:.13s;user-select:none}
.sb-it:hover{background:var(--sidebar-2);color:#dbe2ec}
.sb-it.on{background:var(--sidebar-2);color:var(--sidebar-ac);font-weight:500}
.sb-it.on::before{content:'';position:absolute;left:0;top:5px;bottom:5px;width:2.5px;background:var(--primary);border-radius:0 3px 3px 0}
.sb-it svg{width:15px;height:15px;flex:0 0 auto;opacity:.85}
.sb-it .cnt{margin-left:auto;font-size:10.5px;color:#59637a;font-family:var(--mono)}
.sb-it.on .cnt{color:#8b97ab}
.sb-ft{padding:9px 12px;border-top:1px solid rgba(255,255,255,.07);flex:0 0 auto}
.sb-user{display:flex;align-items:center;gap:8px;padding:6px 7px;border-radius:6px;cursor:pointer;transition:.13s}
.sb-user:hover{background:var(--sidebar-2)}
.sb-av{width:27px;height:27px;border-radius:50%;background:linear-gradient(135deg,#0891b2,#2563eb);display:grid;place-items:center;color:#fff;font-size:11px;font-weight:600;flex:0 0 auto}
.sb-un{color:#e4e9f0;font-size:12.3px;font-weight:500;line-height:1.25}
.sb-un small{display:block;color:#6b7688;font-size:10.5px;font-weight:400}

/* ---- 主区 ---- */
.main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.hd{height:var(--hd-h);flex:0 0 auto;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:11px;padding:0 16px}
.hd-menu{display:none;width:30px;height:30px;border-radius:6px;align-items:center;justify-content:center;color:var(--text-2)}
.hd-menu:hover{background:var(--surface-3)}
.hd-tt{font-size:15px;font-weight:600;letter-spacing:-.1px;white-space:nowrap}
.hd-sub{font-size:11.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:min(46vw,600px)}
.hd-sp{flex:1}
.hd-acts{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.body{flex:1;overflow:auto;position:relative;line-height:1.65}
.body.pad{padding:20px 24px}
.ov-embed-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.ov-embed-tt{font-size:14px;font-weight:700;color:var(--text)}
.ov-embed-link{font-size:12px;color:var(--primary);text-decoration:none;font-weight:600}
.ov-embed-link:hover{text-decoration:underline}
.ov-embed{box-shadow:0 1px 3px rgba(15,23,42,.08);border-radius:12px}

/* ============ 控件 ============ */
.btn{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border-radius:6px;background:var(--surface);
  border:1px solid var(--border-2);color:var(--text-2);font-size:12.3px;font-weight:500;white-space:nowrap;transition:.13s}
.btn:hover{background:var(--surface-3);border-color:#bcc5d1;color:var(--text)}
.btn svg{width:14px;height:14px}
.btn.pri{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.pri:hover{background:var(--primary-h);border-color:var(--primary-h);color:#fff}
.btn.dgr{color:var(--danger);border-color:#f3c3c3}
.btn.dgr:hover{background:var(--danger-bg);border-color:#e79f9f}
.btn.sm{height:26px;padding:0 8px;font-size:11.8px}
.btn.sm svg{width:12.5px;height:12.5px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.gh{border-color:transparent;background:transparent}
.btn.gh:hover{background:var(--surface-3)}

.inp,.sel{height:30px;padding:0 9px;border:1px solid var(--border-2);border-radius:6px;background:var(--surface);font-size:12.5px;outline:none;transition:.13s;width:100%}
.inp:focus,.sel:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.11)}
textarea.inp{height:auto;padding:7px 9px;resize:vertical;line-height:1.55;font-family:inherit}
.srch{position:relative;flex:0 0 auto}
.srch svg{position:absolute;left:8px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--text-3);pointer-events:none}
.srch .inp{padding-left:28px;width:210px}

.tag{display:inline-flex;align-items:center;gap:3px;height:19px;padding:0 7px;border-radius:4px;font-size:11px;font-weight:500;background:var(--surface-3);color:var(--text-2);white-space:nowrap}
.tag.pri{background:var(--primary-bg);color:var(--primary)}
.tag.ok{background:var(--ok-bg);color:var(--ok)}
.tag.warn{background:var(--warn-bg);color:var(--warn)}
.tag.bad{background:var(--danger-bg);color:var(--danger)}
.col-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 2px}
.col-chips .tag{height:auto;line-height:1.5;padding:3px 8px}
.tag.pp{background:var(--purple-bg);color:var(--purple)}
.tag.tl{background:var(--teal-bg);color:var(--teal)}

/* ============ 卡片 ============ */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh);width:100%}
.card-hd{display:flex;align-items:center;gap:9px;padding:12px 15px;border-bottom:1px solid var(--border)}
.card-hd svg{width:17px;height:17px;flex:0 0 auto;color:var(--primary);opacity:.92}
.card-tt{font-size:13.3px;font-weight:600}
.card-tt small{display:block;font-size:11px;color:var(--text-3);font-weight:400;margin-top:2px}
.card-bd{padding:15px}
.grid{display:grid;gap:13px}

/* KPI 数字卡 */
.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:13px 15px;box-shadow:var(--sh);position:relative;overflow:hidden}
.stat::after{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary);opacity:.85}
.stat.ok::after{background:var(--ok)}.stat.warn::after{background:var(--warn)}
.stat.bad::after{background:var(--danger)}.stat.pp::after{background:var(--purple)}.stat.tl::after{background:var(--teal)}
.stat-l{font-size:11.5px;color:var(--text-3);font-weight:500;display:flex;align-items:center;gap:5px}
.stat-v{font-size:24px;font-weight:650;letter-spacing:-.6px;margin-top:5px;font-variant-numeric:tabular-nums;line-height:1.1}
.stat-v small{font-size:12.5px;font-weight:500;color:var(--text-3);margin-left:2px}
.stat-d{font-size:11.3px;color:var(--text-3);margin-top:5px;display:flex;align-items:center;gap:5px;flex-wrap:wrap}

.bar{height:5px;border-radius:3px;background:var(--surface-3);overflow:hidden;margin-top:7px}
.bar>i{display:block;height:100%;border-radius:3px;background:var(--primary);transition:width .5s cubic-bezier(.4,0,.2,1)}
.bar.ok>i{background:var(--ok)}.bar.warn>i{background:var(--warn)}.bar.bad>i{background:var(--danger)}

/* ============ 数据表格 ============ */
.tw{display:flex;flex-direction:column;height:100%;background:var(--surface)}
.tbar{flex:0 0 auto;display:flex;align-items:center;gap:7px;padding:9px 14px;border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap}
.tbar .sp{flex:1}
.tinfo{font-size:11.8px;color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap}
.tinfo b{color:var(--text);font-weight:600}

.tscroll{flex:1;overflow:auto;position:relative;background:var(--surface-2)}
.thead{position:sticky;top:0;z-index:20;display:flex;background:var(--surface-3);border-bottom:1px solid var(--border-2);width:max-content;min-width:100%}
.th{flex:0 0 auto;padding:0 9px;height:34px;display:flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:var(--text-1);
  border-right:1px solid var(--border);user-select:none;position:relative;white-space:nowrap;overflow:hidden}
.th:hover{background:#e8ebf0}
.th.sortable{cursor:pointer}
.th .ord{font-size:9px;color:var(--primary)}
/* 通用表格（自定义渲染 <table>）表头排序：箭头指示（光标由 sortable.js 按可排序列注入） */
table thead th .ord{font-size:9px;color:var(--primary);margin-left:3px}
.th.lk{color:var(--teal)}
.th.lk::before{content:'⇢';font-size:11px;opacity:.75;margin-right:1px}
.th.fx,.td.fx{position:sticky;left:0;z-index:2;background:var(--surface-3);box-shadow:1px 0 0 var(--border-2)}
.td.fx{background:var(--surface)}
.trow:hover .td.fx{background:#f7f9fc}
.trow.sel .td.fx{background:var(--primary-bg)}

.tbody{width:max-content;min-width:100%;position:relative}
.trow{display:flex;height:var(--row-h);border-bottom:1px solid #eef1f5;background:var(--surface);position:absolute;left:0;right:0;min-width:100%}
.trow:hover{background:#f7f9fc}
.trow.sel{background:var(--primary-bg)}
.td{flex:0 0 auto;padding:0 9px;height:var(--row-h);display:flex;align-items:center;font-size:12.3px;border-right:1px solid #f0f3f7;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}
.td.num{justify-content:flex-end;font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:11.8px}
.td.lk{color:var(--teal);background:rgba(8,145,178,.032)}
.td.ro{color:var(--text-3)}
.td.ed{cursor:text}
.td.ed:hover{box-shadow:inset 0 0 0 1px var(--border-2)}
.td.editing{padding:0;overflow:visible;z-index:30}
.td.editing input,.td.editing select,.td.editing textarea{
  width:100%;height:100%;min-height:var(--row-h);border:2px solid var(--primary);border-radius:3px;padding:0 7px;
  outline:none;background:#fff;font-size:12.3px;box-shadow:var(--sh-md)}
/* ── 意向客户跟进表放大版（tbl-lg：行高/字体参考成交明细，用户拍板 2026-08-11）── */
.tbl-lg .th{height:44px;padding:0 12px;font-size:13.5px}
.tbl-lg .td{min-height:48px;padding:6px 12px;font-size:13px}
.tbl-lg .td.num{font-size:12.8px;font-weight:600;color:var(--text)}
.tbl-lg .trow-new .td{min-height:48px}
.tbl-lg .td.editing input,.tbl-lg .td.editing select,.tbl-lg .td.editing textarea{font-size:13px}
.tbl-lg .cell-tag{height:22px;padding:0 9px;font-size:12px;border-radius:6px}
.tbl-lg .src-pill{padding:3px 12px;font-size:12px}
.td.editing textarea{padding:6px 7px;height:88px;line-height:1.5;resize:none}
.td-bar{position:absolute;left:0;bottom:0;height:2.5px;background:var(--primary);opacity:.55}
.cell-tag{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:4px;font-size:11px;background:var(--surface-3);color:var(--text-2);max-width:100%;overflow:hidden;text-overflow:ellipsis}
.tempty{padding:56px 20px;text-align:center;color:var(--text-3)}
.tempty svg{width:40px;height:40px;opacity:.28;margin-bottom:10px}
.tempty p{font-size:13px;margin-bottom:4px;color:var(--text-2)}
.tempty span{font-size:11.8px}

.rowbtn{width:19px;height:19px;border-radius:4px;display:grid;place-items:center;color:var(--text-3);flex:0 0 auto}
.rowbtn:hover{background:var(--surface-3);color:var(--danger)}
.rowbtn svg{width:12px;height:12px}
.chk{width:13px;height:13px;accent-color:var(--primary);cursor:pointer}

/* ============ 抽屉 ============ */
.mask{position:fixed;inset:0;background:rgba(15,20,28,.42);z-index:200;opacity:0;transition:opacity .2s;backdrop-filter:blur(1.5px)}
.mask.on{opacity:1}
.drw{position:fixed;top:0;right:0;bottom:0;width:min(620px,94vw);background:var(--surface);z-index:201;display:flex;flex-direction:column;
  box-shadow:var(--sh-lg);transform:translateX(100%);transition:transform .26s cubic-bezier(.32,.72,0,1)}
.drw.on{transform:none}
.drw-hd{flex:0 0 auto;padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;gap:11px}
.drw-tt{font-size:15px;font-weight:600;line-height:1.35;word-break:break-all}
.drw-tt small{display:block;font-size:11.5px;color:var(--text-3);font-weight:400;margin-top:3px;font-family:var(--mono)}
.drw-bd{flex:1;overflow-y:auto;padding:16px 18px}
.drw-ft{flex:0 0 auto;padding:11px 18px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:center;background:var(--surface-2)}
.x{width:28px;height:28px;border-radius:6px;display:grid;place-items:center;color:var(--text-3);flex:0 0 auto}
.x:hover{background:var(--surface-3);color:var(--text)}
.x svg{width:16px;height:16px}

.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:14px;overflow-x:auto}
.tab{padding:7px 12px;font-size:12.5px;color:var(--text-2);border-bottom:2px solid transparent;white-space:nowrap;font-weight:500}
.tab:hover{color:var(--text)}
.tab.on{color:var(--primary);border-bottom-color:var(--primary)}

/* ============ 制度折叠卡（学习成长·部门制度） ============ */
.rule-group{margin-bottom:15px}
.rule-g-hd{display:flex;align-items:center;gap:7px;padding:7px 11px;background:#eef1f6;border:1px solid #dfe4ea;border-bottom:none;border-radius:10px 10px 0 0;font-size:13px;font-weight:700;color:#3f4a5a;max-width:1020px;width:100%;margin:0 auto;box-sizing:border-box}
.rule-g-hd svg{width:15px;height:15px;color:var(--primary)}
.rule-g-n{margin-left:auto;font-size:11.5px;font-weight:500;color:var(--text-3);font-variant-numeric:tabular-nums}
.rule-g-hd{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:700;color:var(--text);padding:0 0 8px}
.rule-g-hd svg{width:15px;height:15px;color:var(--primary);flex:0 0 auto}
.rule-g-n{font-size:10.5px;color:var(--text-3);font-weight:500;background:var(--surface-3);padding:1px 8px;border-radius:10px;line-height:1.6}
.rule{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);margin-bottom:7px;overflow:hidden;transition:box-shadow .15s}
.rule[open]{box-shadow:var(--sh)}
.rule summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;padding:9px 12px;user-select:none}
.rule summary::-webkit-details-marker{display:none}
.rule summary::marker{content:''}
.rule summary:before{content:'';width:6px;height:6px;border-right:1.5px solid var(--text-3);border-bottom:1.5px solid var(--text-3);transform:rotate(-45deg);transition:transform .18s;flex:0 0 auto;margin-top:-2px}
.rule[open] summary:before{transform:rotate(45deg);margin-top:3px}
.rule summary:hover{background:var(--surface-2)}
.rule-tt{font-size:12.8px;font-weight:600;color:var(--text);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rule-tag{font-size:10.5px;padding:1px 7px;border-radius:10px;font-weight:500;flex:0 0 auto;line-height:1.7}
.rule-tag.pun{color:var(--danger);background:var(--danger-bg)}
.rule-tag.awd{color:var(--ok);background:var(--ok-bg)}
.rule-bd{padding:2px 13px 12px;border-top:1px dashed var(--border)}
.rule-line{display:flex;gap:9px;padding-top:10px;font-size:12.5px;line-height:1.65;align-items:flex-start}
.rule-k{flex:0 0 auto;font-size:11px;font-weight:600;padding:2px 8px;border-radius:5px;white-space:nowrap;margin-top:1px}
.rule-k.req{color:var(--primary);background:var(--primary-bg)}
.rule-k.pun{color:var(--danger);background:var(--danger-bg)}
.rule-k.awd{color:var(--ok);background:var(--ok-bg)}
.rule-v{flex:1;color:var(--text-2);white-space:pre-wrap;word-break:break-word;min-width:0}
.rule-none{color:var(--text-3);font-size:12px;padding-top:10px}

.fgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:11px}
.fgrid .full{grid-column:1/-1}
.f label{display:block;font-size:11.5px;color:var(--text-2);margin-bottom:4px;font-weight:500}
.f label i{color:var(--danger);font-style:normal;margin-left:2px}
.f .hint{font-size:10.5px;color:var(--text-3);margin-top:3px}
.f.lock .inp,.f.lock .sel{background:var(--surface-3);color:var(--text-3);cursor:not-allowed}
.f .lkbadge{font-size:10px;color:var(--teal);background:var(--teal-bg);padding:1px 5px;border-radius:3px;margin-left:5px;font-weight:500}

/* 字段清单（客户全字段） */
.flist{border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.frow{display:flex;border-bottom:1px solid #eef1f5;min-height:32px;align-items:stretch}
.frow:last-child{border-bottom:none}
.frow:nth-child(2n){background:var(--surface-2)}
.fk{flex:0 0 40%;padding:7px 11px;font-size:11.8px;color:var(--text-2);display:flex;align-items:center;background:rgba(0,0,0,.012);border-right:1px solid #eef1f5}
.fv{flex:1;padding:7px 11px;font-size:12.3px;display:flex;align-items:center;word-break:break-all;min-width:0}
.fv.e{cursor:text}
.fv.e:hover{background:var(--primary-bg)}
.fv input,.fv select{width:100%;border:1px solid var(--primary);border-radius:4px;padding:3px 6px;outline:none;font-size:12.3px}
.fv.mut{color:var(--text-3)}

/* 关联全景 */
.bl{border:1px solid var(--border);border-radius:var(--r);margin-bottom:10px;overflow:hidden}
.bl-h{padding:8px 11px;background:var(--surface-3);font-size:12px;font-weight:600;display:flex;align-items:center;gap:7px}
.bl-h .tag{margin-left:auto}
.bl-b{max-height:200px;overflow-y:auto}
.bl-r{padding:7px 11px;border-top:1px solid #eef1f5;font-size:11.8px;display:flex;gap:9px;align-items:center}
.bl-r span{color:var(--text-3)}
.bl-r b{font-weight:600;font-variant-numeric:tabular-nums}

/* ============ 提示 ============ */
.toasts{position:fixed;right:16px;bottom:16px;z-index:400;display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.toast{background:#1a212c;color:#fff;padding:9px 14px;border-radius:8px;font-size:12.5px;box-shadow:var(--sh-lg);
  display:flex;align-items:center;gap:8px;max-width:400px;animation:tin .24s cubic-bezier(.32,.72,0,1)}
.toast svg{width:15px;height:15px;flex:0 0 auto}
.toast.ok{background:#0d7a45}.toast.bad{background:#b52020}.toast.warn{background:#b06a05}
.toast-act{background:rgba(255,255,255,.16);border:0;border-radius:6px;color:#fff;font-size:12px;font-weight:500;padding:3px 10px;cursor:pointer;margin-left:2px;white-space:nowrap}
.toast-act:hover{background:rgba(255,255,255,.28)}
@keyframes tin{from{opacity:0;transform:translateY(10px) scale(.97)}}

.loading{position:fixed;inset:0;background:var(--bg);z-index:500;display:grid;place-items:center;transition:opacity .32s}
.loading.out{opacity:0;pointer-events:none}
.ld{text-align:center}
.ld-logo{width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,#3b82f6,#7c3aed);margin:0 auto 15px;
  display:grid;place-items:center;color:#fff;font-weight:700;font-size:18px;animation:pl 1.7s ease-in-out infinite}
@keyframes pl{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.93);opacity:.8}}
.ld-t{font-size:14px;font-weight:600;margin-bottom:5px}
.ld-s{font-size:12px;color:var(--text-3);min-height:17px}
.ld-bar{width:190px;height:3px;background:var(--surface-3);border-radius:2px;margin:13px auto 0;overflow:hidden}
.ld-bar>i{display:block;height:100%;background:var(--primary);border-radius:2px;width:22%;animation:lb 1.25s ease-in-out infinite}
@keyframes lb{0%{margin-left:-24%}100%{margin-left:100%}}

/* ============ 各页面专用 ============ */
.sec-t{font-size:13px;font-weight:600;margin:20px 0 10px;display:flex;align-items:center;gap:7px}
.sec-t:first-child{margin-top:0}
.sec-t .tag{font-weight:500}
.sec-t .ln{flex:1;height:1px;background:var(--border)}

table.mini{width:100%;border-collapse:collapse;font-size:12.2px}
table.mini th{background:var(--surface-3);padding:7px 9px;text-align:left;font-weight:600;color:var(--text-1);font-size:13px;
  border-bottom:1px solid var(--border-2);white-space:nowrap;position:sticky;top:0;z-index:2}
table.mini td{padding:6px 9px;border-bottom:1px solid #f0f3f7;white-space:nowrap}
table.mini tbody tr:hover{background:var(--surface-2)}
table.mini td.n{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:11.6px}
table.mini th.n{text-align:right}
table.mini th.c,table.mini td.c{text-align:center}
table.mini td.c{font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:11.6px}
table.mini td.nm{font-weight:500}
table.mini tr.total{background:var(--surface-3);font-weight:600}
table.mini tr.total td{border-top:1.5px solid var(--border-2)}
/* mtx：居中数据表（与 mini 同底座，单元格居中；用于覆盖/矩阵/分组类表格）。
   此前缺失该基础规则，导致 .mtx / .mtx.grp 表格无边框、无内边距、文字拥挤，
   与 mini / mini.grp 家族视觉不一致；补齐后与工作台整体风格统一。 */
table.mtx{width:100%;border-collapse:collapse;font-size:12.2px}
table.mtx th{background:var(--surface-3);padding:7px 9px;text-align:center;font-weight:600;color:var(--text-1);font-size:13px;border-bottom:1px solid var(--border-2);white-space:nowrap;position:sticky;top:0;z-index:2}
table.mtx td{padding:6px 9px;border-bottom:1px solid #f0f3f7;white-space:nowrap}
table.mtx tbody tr:hover{background:var(--surface-2)}
table.mtx th.l,table.mtx td.l{text-align:left}
table.mtx th.c,table.mtx td.c{text-align:center}
table.mtx th.n,table.mtx td.n{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:11.6px}
table.mtx tr.total{background:var(--surface-3);font-weight:600}
table.mtx tr.total td{border-top:1.5px solid var(--border-2)}
table.mini.grp{width:auto;min-width:100%}
table.mini.grp thead tr:first-child th{text-align:center}
table.mini.grp thead tr:last-child th{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600}
table.mini.grp th{font-size:12.5px;padding:5px 7px}
table.mini.grp tr.sum td{background:var(--surface-3);font-weight:700;color:var(--text)}
/* 季度预估风格：按列归类着色（作用于 .mini.grp / .mtx.grp / .intent-tbl 三类表格）
   客户类型配色：expire=靛(到期续约) early=绿(提前续约) add=琥珀(期内增补) broken=蓝(断续客户A) out=粉(期外激活) multi=青(多产品) */
table.mini.grp thead th.g-expire, table.mtx.grp thead th.g-expire, table.intent-tbl thead th.g-expire{background:#e0e7ff;color:#3730a3}
table.mini.grp tbody td.g-expire, table.mtx.grp tbody td.g-expire, table.intent-tbl tbody td.g-expire{background:#eef2ff}
table.mini.grp thead th.g-early, table.mtx.grp thead th.g-early, table.intent-tbl thead th.g-early{background:#d1fae5;color:#065f46}
table.mini.grp tbody td.g-early, table.mtx.grp tbody td.g-early, table.intent-tbl tbody td.g-early{background:#ecfdf5}
table.mini.grp thead th.g-add, table.mtx.grp thead th.g-add, table.intent-tbl thead th.g-add{background:#fef3c7;color:#92400e}
table.mini.grp tbody td.g-add, table.mtx.grp tbody td.g-add, table.intent-tbl tbody td.g-add{background:#fef9ec}
table.mini.grp thead th.g-broken, table.mtx.grp thead th.g-broken, table.intent-tbl thead th.g-broken{background:#dbeafe;color:#1e40af}
table.mini.grp tbody td.g-broken, table.mtx.grp tbody td.g-broken, table.intent-tbl tbody td.g-broken{background:#eff6ff}
table.mini.grp thead th.g-out, table.mtx.grp thead th.g-out, table.intent-tbl thead th.g-out{background:#fce7f3;color:#9d174d}
table.mini.grp tbody td.g-out, table.mtx.grp tbody td.g-out, table.intent-tbl tbody td.g-out{background:#fdf2f8}
table.mini.grp thead th.g-multi, table.mtx.grp thead th.g-multi, table.intent-tbl thead th.g-multi{background:#ccfbf1;color:#115e59}
table.mini.grp tbody td.g-multi, table.mtx.grp tbody td.g-multi, table.intent-tbl tbody td.g-multi{background:#f0fdfa}
table.mini.grp thead th.g-purple, table.mtx.grp thead th.g-purple, table.intent-tbl thead th.g-purple{background:#f3e8ff;color:#6b21a8}
table.mini.grp tbody td.g-purple, table.mtx.grp tbody td.g-purple, table.intent-tbl tbody td.g-purple{background:#faf5ff}
/* mtx.grp 首行分组表头居中（与 mini.grp 一致） */
table.mtx.grp thead tr:first-child th{text-align:center}
.scrollx{width:100%;overflow-x:auto}

.hbar{display:flex;align-items:center;gap:8px}
.hbar .t{width:170px;height:16px;background:var(--surface-3);border-radius:3px;overflow:hidden;flex:0 0 auto}
.hbar .t>i{display:block;height:100%;background:var(--primary);border-radius:3px}
.hbar .v{font-size:11.5px;font-variant-numeric:tabular-nums;color:var(--text-2);min-width:56px}

.dz{border:2px dashed var(--border-2);border-radius:var(--r-lg);padding:32px 20px;text-align:center;transition:.16s;background:var(--surface-2);cursor:pointer}
.dz:hover,.dz.over{border-color:var(--primary);background:var(--primary-bg)}
.dz svg{width:34px;height:34px;color:var(--text-3);margin-bottom:9px}
.dz.over svg{color:var(--primary)}
.dz p{font-size:13px;font-weight:500;margin-bottom:3px}
.dz span{font-size:11.5px;color:var(--text-3)}

.diff{border:1px solid var(--border);border-radius:var(--r);overflow:hidden;margin-top:12px;max-height:340px;overflow-y:auto}
.diff-r{display:flex;gap:9px;padding:7px 11px;border-bottom:1px solid #eef1f5;font-size:11.8px;align-items:center}
.diff-r:last-child{border-bottom:none}
.diff-r .nm{flex:1;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.diff-r .ch{color:var(--text-3);font-family:var(--mono);font-size:11px}
.diff-r .ch b{color:var(--ok);font-weight:500}
.diff-r .ch s{color:var(--danger);opacity:.75}

.logrow{display:flex;gap:9px;padding:7px 0;border-bottom:1px solid #f0f3f7;font-size:11.8px;align-items:baseline}
.logrow time{color:var(--text-3);font-family:var(--mono);font-size:10.8px;flex:0 0 auto}
.logrow .w{flex:1;min-width:0}

.pill{display:inline-flex;background:var(--surface-3);border-radius:7px;padding:2px;gap:2px}
.pill button{padding:4px 11px;border-radius:5px;font-size:12px;color:var(--text-2);font-weight:500}
.pill button.on{background:var(--surface);color:var(--text);box-shadow:var(--sh)}

/* ============ 响应式 ============ */
@media (max-width:900px){
  :root{--hd-h:50px}
  .hd-menu{display:flex}
  .hd-sub{display:none}
  .srch .inp{width:130px}
  .fgrid{grid-template-columns:1fr}
  .body.pad{padding:11px}
  .drw{width:100vw}
  .hd-acts .btn span{display:none}
  .hd-acts .btn{padding:0 8px}
}
@media (max-width:560px){
  .hd-tt{font-size:13.5px}
  .tbar{padding:8px 10px}
  .srch .inp{width:110px}
}
.hide{display:none!important}

/* ============ 工作台总览：两行四列 hero 卡 ============ */
.ov-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:16px}
.ov-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:13px 14px;box-shadow:var(--sh);
  position:relative;overflow:hidden;border-left:3px solid var(--primary);transition:transform .12s,box-shadow .12s}
.ov-card:hover{box-shadow:var(--sh-md);transform:translateY(-1px)}
.ov-card.ok{border-left-color:var(--ok)}.ov-card.warn{border-left-color:var(--warn)}.ov-card.bad{border-left-color:var(--danger)}
.ov-cat{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--text-3);font-weight:500}
.ov-pill{font-size:10px;padding:1px 7px;border-radius:9px;font-weight:600;white-space:nowrap}
.ov-pill.warn{background:var(--warn-bg);color:var(--warn)}
.ov-pill.bad{background:var(--danger-bg);color:var(--danger)}
.ov-pill.na{background:var(--surface-3);color:var(--text-3)}
.ov-hero{font-size:26px;font-weight:800;line-height:1.05;margin:7px 0 6px;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.ov-hero.r{color:var(--danger)}
.ov-hero small{font-size:12.5px;font-weight:600;color:var(--text-3);margin-left:2px}
.ov-sup{display:flex;justify-content:space-between;font-size:11.5px;color:var(--text-2);padding:2px 0}
.ov-sup span:last-child{font-variant-numeric:tabular-nums;font-weight:500}
.ov-sup .bad{color:var(--danger);font-weight:600}.ov-sup .ok{color:var(--ok);font-weight:600}
.ov-bar{height:6px;border-radius:4px;background:var(--surface-3);overflow:hidden;margin-top:8px}
.ov-bar>i{display:block;height:100%;border-radius:4px;background:var(--primary);transition:width .5s cubic-bezier(.4,0,.2,1)}
.ov-bar>i.ok{background:var(--ok)}.ov-bar>i.warn{background:var(--warn)}.ov-bar>i.bad{background:var(--danger)}
@media (max-width:1080px){.ov-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:700px){.ov-grid{grid-template-columns:1fr}}

/* ============ 布局网格 & 页面组件 ============ */
.body.nopad{padding:0;overflow:hidden}
.g{display:grid;gap:13px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g5{grid-template-columns:repeat(5,minmax(0,1fr))}
.g6{grid-template-columns:repeat(6,minmax(0,1fr))}
@media (max-width:1360px){.g6{grid-template-columns:repeat(4,1fr)}.g5{grid-template-columns:repeat(3,1fr)}}
@media (max-width:1080px){.g4,.g6{grid-template-columns:repeat(2,1fr)}.g3,.g5{grid-template-columns:repeat(2,1fr)}}
@media (max-width:700px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:1fr}}

.savest{display:flex;align-items:center;gap:5px;font-size:11.3px;color:var(--text-3);white-space:nowrap}
.savest i{width:6px;height:6px;border-radius:50%;background:var(--ok);display:block}
.savest.dirty i{background:var(--warn);animation:bl .9s infinite}
@keyframes bl{50%{opacity:.25}}
.rolesel .sel{width:auto;min-width:96px}

.picklist{max-height:52vh;overflow-y:auto;border:1px solid var(--border);border-radius:var(--r)}
.picki{padding:8px 11px;border-bottom:1px solid #eef1f5;cursor:pointer;display:flex;gap:9px;align-items:center}
.picki:last-child{border-bottom:none}
.picki:hover{background:var(--primary-bg)}
.picki .nm{flex:1;font-size:12.5px;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.picki .id{font-family:var(--mono);font-size:11px;color:var(--text-3)}

.rank{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid #f0f3f7}
.rank:last-child{border-bottom:none}
.rank .no{width:19px;height:19px;border-radius:5px;display:grid;place-items:center;font-size:10.5px;font-weight:700;background:var(--surface-3);color:var(--text-3);flex:0 0 auto}
.rank .no.t1{background:#fef3c7;color:#b45309}.rank .no.t2{background:#e5e7eb;color:#4b5563}.rank .no.t3{background:#fde8d7;color:#c2410c}
.rank .nm{width:58px;font-size:12.3px;font-weight:500;flex:0 0 auto}
.rank .tk{flex:1;height:15px;background:var(--surface-3);border-radius:3px;overflow:hidden;min-width:40px}
.rank .tk>i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#60a5fa);border-radius:3px;transition:width .5s}
.rank .tk>i.ok{background:linear-gradient(90deg,#0f9d58,#34d399)}
.rank .tk>i.bad{background:linear-gradient(90deg,#dc2626,#f87171)}
.rank .tk>i.warn{background:linear-gradient(90deg,#d97706,#fbbf24)}
.rank .vv{font-size:11.6px;font-family:var(--mono);color:var(--text-2);min-width:78px;text-align:right;flex:0 0 auto}

.mtx{width:100%;border-collapse:separate;border-spacing:0;font-size:11.8px}
.mtx th,.mtx td{padding:5px 7px;border-bottom:1px solid #eef1f5;border-right:1px solid #f2f4f8;white-space:nowrap}
.mtx thead th{background:var(--surface-3);font-weight:600;color:var(--text-1);position:sticky;top:0;z-index:3;font-size:12.8px}
.mtx tbody th{position:sticky;left:0;background:var(--surface);z-index:2;font-weight:600;text-align:left;box-shadow:1px 0 0 var(--border)}
.mtx td{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--mono)}
.mtx th.c,.mtx td.c{text-align:center}
.mtx thead th.l{text-align:left}
.mtx tbody tr:hover td{background:var(--surface-2)}
.mtx tr.total th,.mtx tr.total td{background:var(--surface-3);font-weight:600;border-top:1.5px solid var(--border-2)}
.mtx tr.mean th,.mtx tr.mean td{background:#f8fafc;color:var(--text-2);font-style:italic;border-top:1px dashed var(--border)}
/* 红→绿 发散热力（相对团队均值）：hc0 红(警示) → hc4 黄(中性) → hc8 绿(健康) */
.hc0{background:#dc2626;color:#fff}.hc1{background:#ef4444;color:#fff}.hc2{background:#f97316;color:#fff}
.hc3{background:#f59e0b;color:#fff}.hc4{background:#eab308;color:#111}.hc5{background:#a3e635;color:#111}
.hc6{background:#84cc16;color:#fff}.hc7{background:#22c55e;color:#fff}.hc8{background:#15803d;color:#fff}
.hb-legend{display:flex;gap:14px;align-items:center;margin-top:8px;font-size:11px;color:var(--text-2);flex-wrap:wrap}
.hb-legend i{display:inline-block;width:13px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-1px}

.todo{display:flex;gap:9px;padding:8px 0;border-bottom:1px solid #f0f3f7;align-items:flex-start;font-size:12.2px}
.todo:last-child{border-bottom:none}
.todo .dot{width:7px;height:7px;border-radius:50%;margin-top:5px;flex:0 0 auto;background:var(--primary)}
.todo .dot.bad{background:var(--danger)}.todo .dot.warn{background:var(--warn)}.todo .dot.ok{background:var(--ok)}
.todo .w{flex:1;min-width:0}
.todo .w b{font-weight:600}
.todo .w small{display:block;color:var(--text-3);font-size:11.2px;margin-top:2px}
.todo .go{font-size:11.3px;color:var(--primary);flex:0 0 auto;cursor:pointer}

.kv{display:flex;gap:7px;font-size:12px;padding:5px 0;border-bottom:1px dashed #eef1f5}
.kv:last-child{border-bottom:none}
.kv .k{color:var(--text-3);flex:0 0 auto;min-width:86px}
.kv .v{flex:1;text-align:right;font-variant-numeric:tabular-nums;font-weight:500}
.tag.manual{background:#eef2ff;color:#4338ca}
.tag.import{background:#ecfdf5;color:#047857}
.todo-grid{display:grid;gap:12px;margin:6px 0 2px}
.todo-card{position:relative;padding:13px 14px}
.todo-card h4{font-size:13px;font-weight:600;margin:0 0 8px}
.todo-card .tag{margin-bottom:6px}
.cov-sel{height:28px;padding:0 7px;border:1px solid var(--border-2);border-radius:6px;font-size:12px;background:var(--surface);max-width:100%;margin:0 0 8px;display:block}
.cmp{font-size:10.5px;color:var(--text-3);margin-top:9px;line-height:1.45}
.todo-card .cmp{margin-top:9px}
.slash{color:var(--text-3);margin:0 2px}
.muted{color:var(--text-3)}
.cell-edit{width:52px;padding:3px 5px;border:1px solid var(--border-2);border-radius:5px;font-size:12px;background:var(--surface);text-align:right;font-variant-numeric:tabular-nums}
.cell-edit:focus{outline:none;border-color:var(--primary)}
/* 产能目标录入框：加宽以完整显示 5 位数；隐藏数字步进器腾出空间 */
.cell-edit.fcap{width:88px}
.cell-edit.fcap::-webkit-inner-spin-button,.cell-edit.fcap::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.cell-edit.fcap{-moz-appearance:textfield}
.mtx td.bad{color:var(--danger);font-weight:600}
.mtx td.ok{color:var(--ok)}
.mtx th .sub{font-weight:400;color:var(--text-3);font-size:10px}
.sub-sec{padding-top:4px}

.note{background:var(--primary-bg);border:1px solid var(--primary-br);border-radius:var(--r);padding:10px 12px;font-size:12px;color:#1e40af;line-height:1.65;display:flex;gap:8px}
.note svg{width:15px;height:15px;flex:0 0 auto;margin-top:1px}
.note.warn{background:var(--warn-bg);border-color:#f5d9a8;color:#92400e}
.note.ok{background:var(--ok-bg);border-color:#b7e2c8;color:#065f46}

.cardlist{display:flex;flex-direction:column;gap:9px}
.mini-card{border:1px solid var(--border);border-radius:var(--r);padding:10px 12px;background:var(--surface-2)}
.mini-card h5{font-size:12.3px;font-weight:600;margin-bottom:5px;display:flex;align-items:center;gap:6px}
.mini-card p{font-size:12px;color:var(--text-2);line-height:1.7;white-space:pre-wrap;margin-bottom:4px}
.mini-card p:last-child{margin-bottom:0}

.fsec{margin-bottom:16px}
.fsec>h4{font-size:11.5px;font-weight:600;color:var(--text-3);letter-spacing:.5px;margin-bottom:7px}
.emptyv{padding:40px 16px;text-align:center;color:var(--text-3);font-size:12.5px}
.sp8{height:8px}
.seg{display:flex;gap:18px;flex-wrap:wrap;font-size:12.5px;color:var(--text-2)}
.seg label{display:flex;align-items:center;gap:6px;cursor:pointer}

/* KPI 预估&进度对比：子弹图（灰底=预估产能目标 · 实心条=当前进度 · 蓝线=预估目标线） */
.fb-row{display:flex;align-items:center;gap:10px;padding:5px 0;border-bottom:1px solid #f0f3f7;min-width:480px}
.fb-row:last-of-type{border-bottom:none}
.fb-nm{width:64px;flex:0 0 auto;font-size:12.3px;font-weight:500;text-align:right;white-space:nowrap;color:var(--text-2)}
.fb-bullet{position:relative;flex:1;height:18px;min-width:120px}
.fb-track{position:absolute;left:0;top:4px;height:11px;border-radius:6px;background:var(--surface-3);display:block}
.fb-fill{position:absolute;left:0;top:4px;height:11px;border-radius:6px;display:block;z-index:2;transition:width .5s cubic-bezier(.4,0,.2,1)}
.fb-fill.ok{background:var(--ok)}.fb-fill.warn{background:var(--warn)}.fb-fill.danger{background:var(--danger)}
/* 销售进度对比 排位分组色：1~3 金橙 / 4~6 蓝 / 7~9 灰绿（用户拍板 2026-08-11） */
.fb-fill.r1{background:#f59e0b}.fb-fill.r2{background:#2563eb}.fb-fill.r3{background:#38a169}
.fb-mark{position:absolute;top:1px;width:2px;height:17px;background:#6366f1;transform:translateX(-1px);z-index:3;border-radius:1px}
.fb-num{width:188px;flex:0 0 auto;font-size:11.5px;color:var(--text-3);white-space:nowrap;font-variant-numeric:tabular-nums}
.fb-num b{color:var(--text);font-weight:600}
.fb-num .gap{color:var(--danger);font-weight:600}
.legend{display:flex;gap:14px;align-items:center;font-size:11.5px;color:var(--text-2);flex-wrap:wrap;margin-top:10px}
.legend .sw{display:inline-block;width:12px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.legend .sw.track-sw{width:2px;background:transparent;border-left:2px solid #6366f1}

/* ============ 意向客户管理 · 对齐看板「成交明细」 ============ */
.intent-ctl{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.intent-ttl{font-size:13.5px;font-weight:700;color:var(--text)}
.intent-cnt{font-size:11.5px;font-weight:400;color:var(--text-3);margin-left:4px}
.intent-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.intent-tools .srch .inp{width:220px}
.intent-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;background:var(--surface)}
.intent-tbl thead th{background:var(--surface-3);text-align:left;font-weight:600;color:var(--text-1);font-size:12.8px;
  padding:11px 16px;border-bottom:1px solid var(--border-2);white-space:nowrap;cursor:pointer;user-select:none;position:sticky;top:0;z-index:2}
.intent-tbl thead th:hover{color:var(--text)}
.intent-tbl thead th .ord{color:var(--primary);font-size:9px;margin-left:3px}
.intent-tbl tbody td{padding:11px 16px;border-bottom:1px solid #f0f3f7;white-space:nowrap;color:var(--text-2);vertical-align:middle}
.intent-tbl tbody tr:last-child td{border-bottom:none}
.intent-tbl tbody tr{cursor:pointer;transition:background .12s}
.intent-tbl tbody tr:hover{background:var(--surface-2)}
.intent-tbl .nm{font-weight:600;color:var(--text)}
.intent-tbl .amt{font-weight:600;color:var(--text)}
.intent-tbl .muted{color:var(--text-3);font-size:12px}
.intent-tbl td.dt{padding:6px 12px}
.intent-tbl .cell-date{width:100%;max-width:150px;font-size:12px;color:var(--text);background:var(--surface);border:1px solid #e6ebf2;border-radius:7px;padding:5px 8px;cursor:pointer;font-family:var(--mono)}
.intent-tbl .cell-date:hover{border-color:var(--primary)}
.intent-tbl .cell-date:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(43,108,229,.12)}
.intent-tbl .empty{text-align:center;color:var(--text-3);padding:40px 0;font-size:12.5px}
.intent-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;flex-wrap:wrap}
.intent-sum{font-size:11.8px;color:var(--text-3);font-variant-numeric:tabular-nums}
.intent-sum b{color:var(--text);font-weight:600}
.intent-pg{display:flex;align-items:center;gap:8px}
.intent-pg .pgn{font-size:11.8px;color:var(--text-2);font-variant-numeric:tabular-nums}
.b-pending{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;background:#fef3c7;color:#92400e}
/* 待办工作管理（复刻看板「待办任务」） */
.b-success{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;background:var(--ok-bg);color:var(--ok)}
.mtx td.nm{text-align:left;font-weight:600;color:var(--text)}
.mtx td.warn{color:var(--warn)}
.mtx tr.row-danger td{background:var(--danger-bg)}
.b-done{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;background:#dcfce7;color:#166534}
.src-pill{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:500}
.src-blue{background:#eff5ff;color:#1d4ed8}
.src-green{background:#e8f6ee;color:#0f9d58}
.src-amber{background:#fef4e6;color:#b45309}
.src-slate{background:#f0f2f5;color:#4a5361}

/* ============ 工作台总览（原生重建）============ */
.ov .grid{margin:0}
.ov-grid3{grid-template-columns:repeat(3,1fr)}
.ov-grid4{grid-template-columns:repeat(4,1fr)}
.ov-2col{grid-template-columns:1fr 1fr}
.ov-rank{display:flex;flex-direction:column;gap:9px}
.ov-rank-row{display:grid;grid-template-columns:22px 74px 1fr 156px 52px;align-items:center;gap:8px}
.ov-rank-no{text-align:right;font-weight:700;font-size:12.5px}
.ov-rank-nm{font-size:13px;font-weight:500;color:var(--text);text-align:right}
.ov-rank-bar{height:20px;border-radius:999px;background:var(--surface-3);overflow:hidden;box-shadow:inset 0 1px 2px rgba(0,0,0,.04)}
.ov-rank-bar>i{display:block;height:100%;border-radius:999px;transition:width .5s cubic-bezier(.4,0,.2,1)}
.ov-rank-val{text-align:right;font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums}
.ov-rank-pct{text-align:right;font-size:12px;font-weight:700;font-family:var(--mono)}
@media(max-width:1080px){
  .ov-grid3,.ov-grid4{grid-template-columns:repeat(2,1fr)}
  .ov-2col{grid-template-columns:1fr}
}

/* ── 列名/需求结构分析 内联条 ── */
.barcell{position:absolute;left:0;right:0;bottom:2px;height:3px;background:var(--primary);opacity:.28;border-radius:2px}
.mini-bar{display:inline-block;height:9px;border-radius:3px;min-width:2px;vertical-align:middle}
/* ── 按列归类着色：通用类别色板（作用于 .mini.grp / .mtx.grp / .intent-tbl）──
   goal=靛(目标/业绩) deal=绿(成交) new=琥珀(新客/增补) week=紫(周/月/活跃)
   q=天蓝(季度/汇总) blue=蓝(基础/客户) teal=青(覆盖/触达) green=翠(激活/完成)
   rose=玫(到期/时间) amber=金(档位/需求) */
table.mini.grp thead th.g-goal, table.mtx.grp thead th.g-goal, table.intent-tbl thead th.g-goal{background:#e0e7ff;color:#3730a3}
table.mini.grp tbody td.g-goal, table.mtx.grp tbody td.g-goal, table.intent-tbl tbody td.g-goal{background:#eef2ff}
table.mini.grp thead th.g-deal, table.mtx.grp thead th.g-deal, table.intent-tbl thead th.g-deal{background:#d1fae5;color:#065f46}
table.mini.grp tbody td.g-deal, table.mtx.grp tbody td.g-deal, table.intent-tbl tbody td.g-deal{background:#ecfdf5}
table.mini.grp thead th.g-new, table.mtx.grp thead th.g-new, table.intent-tbl thead th.g-new{background:#fef3c7;color:#92400e}
table.mini.grp tbody td.g-new, table.mtx.grp tbody td.g-new, table.intent-tbl tbody td.g-new{background:#fef9ec}
table.mini.grp thead th.g-week, table.mtx.grp thead th.g-week, table.intent-tbl thead th.g-week{background:#f3e8ff;color:#6b21a8}
table.mini.grp tbody td.g-week, table.mtx.grp tbody td.g-week, table.intent-tbl tbody td.g-week{background:#faf5ff}
table.mini.grp thead th.g-purple, table.mtx.grp thead th.g-purple, table.intent-tbl thead th.g-purple{background:#f3e8ff;color:#6b21a8}
table.mini.grp tbody td.g-purple, table.mtx.grp tbody td.g-purple, table.intent-tbl tbody td.g-purple{background:#faf5ff}
table.mini.grp thead th.g-q, table.mtx.grp thead th.g-q, table.intent-tbl thead th.g-q{background:#e0f2fe;color:#075985}
table.mini.grp tbody td.g-q, table.mtx.grp tbody td.g-q, table.intent-tbl tbody td.g-q{background:#f0f9ff}
table.mini.grp thead th.g-blue, table.mtx.grp thead th.g-blue, table.intent-tbl thead th.g-blue{background:#dbeafe;color:#1e40af}
table.mini.grp tbody td.g-blue, table.mtx.grp tbody td.g-blue, table.intent-tbl tbody td.g-blue{background:#eff6ff}
table.mini.grp thead th.g-teal, table.mtx.grp thead th.g-teal, table.intent-tbl thead th.g-teal{background:#ccfbf1;color:#115e59}
table.mini.grp tbody td.g-teal, table.mtx.grp tbody td.g-teal, table.intent-tbl tbody td.g-teal{background:#f0fdfa}
table.mini.grp thead th.g-green, table.mtx.grp thead th.g-green, table.intent-tbl thead th.g-green{background:#dcfce7;color:#166534}
table.mini.grp tbody td.g-green, table.mtx.grp tbody td.g-green, table.intent-tbl tbody td.g-green{background:#f0fdf4}
table.mini.grp thead th.g-rose, table.mtx.grp thead th.g-rose, table.intent-tbl thead th.g-rose{background:#ffe4e6;color:#9f1239}
table.mini.grp tbody td.g-rose, table.mtx.grp tbody td.g-rose, table.intent-tbl tbody td.g-rose{background:#fff1f2}
table.mini.grp thead th.g-amber, table.mtx.grp thead th.g-amber, table.intent-tbl thead th.g-amber{background:#ffedd5;color:#9a3412}
table.mini.grp tbody td.g-amber, table.mtx.grp tbody td.g-amber, table.intent-tbl tbody td.g-amber{background:#fff7ed}
.qsel-w{display:inline-flex;align-items:center;gap:5px;margin-right:10px;font-size:12px;color:var(--text-3)}
.qsel-w .qsel-l{font-weight:600;color:var(--text-2)}
.qsel-w .sel{width:auto;min-width:84px;padding:3px 8px}

/* ── 全局 Loading 遮罩（V1.0 手册 1.2：周期切换/重算统一 Loading） ── */
.loading-mask{position:fixed;inset:0;z-index:3000;display:flex;align-items:center;justify-content:center;background:rgba(244,246,249,.55);backdrop-filter:blur(1px);opacity:0;pointer-events:none;transition:opacity .15s}
.loading-mask.on{opacity:1;pointer-events:auto}
.loading-mask .loading-spin{display:flex;align-items:center;gap:10px;padding:14px 22px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.10);color:var(--text-2);font-size:13px}
.loading-mask .loading-spin i{width:18px;height:18px;border:2px solid var(--border-2);border-top-color:var(--primary);border-radius:50%;animation:wb-spin .7s linear infinite}
@keyframes wb-spin{to{transform:rotate(360deg)}}
/* ── 全局周期筛选控件 ── */
.hd .p-sel-w{display:inline-flex;align-items:center;gap:5px;margin-right:8px}
.hd .p-sel-w .sel{width:auto;min-width:96px;padding:3px 8px}

/* ── 会议看板（meetingBoard，用户拍板 2026-08-15）── */
.mb-tool .seg{gap:0}
.mb-tool .seg button{height:26px;padding:0 12px;font-size:12px;border:1px solid var(--border-2);background:var(--surface);color:var(--text-2);cursor:pointer;border-radius:0}
.mb-tool .seg button:first-child{border-radius:6px 0 0 6px}
.mb-tool .seg button:last-child{border-radius:0 6px 6px 0}
.mb-tool .seg button.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
.mb-alert{border:1px solid #f5c2c2;border-left:4px solid var(--danger)}

/* ═══════ 信息架构重构：取消左侧导航，改顶部场景舱条 + 指挥中心首屏（2026-08-26） ═══════ */
.hd-brand{display:flex;align-items:center;gap:8px;cursor:pointer;flex:0 0 auto;user-select:none}
.hd-logo{width:26px;height:26px;border-radius:7px;background:linear-gradient(135deg,#3b82f6,#7c3aed);display:grid;place-items:center;color:#fff;font-weight:700;font-size:12px}
.hd-tt2{font-weight:600;font-size:13.5px;letter-spacing:.2px;white-space:nowrap}
.hd-tt{font-size:15px;font-weight:600;letter-spacing:-.1px;white-space:nowrap;flex:0 0 auto}
.hd-user{display:flex;align-items:center;gap:8px;padding:4px 7px;border-radius:7px;cursor:pointer;flex:0 0 auto}
.hd-user:hover{background:var(--surface-3)}
.hd .sb-un{color:var(--text);font-size:12.3px;font-weight:500;line-height:1.25}
.hd .sb-un small{display:block;color:var(--text-3);font-size:10.5px;font-weight:400}

/* 场景舱条（固定，位于顶栏与正文之间） */
.podbar{display:flex;align-items:stretch;gap:4px;height:42px;flex:0 0 auto;background:var(--surface);border-bottom:1px solid var(--border);padding:0 12px;overflow-x:auto;overflow-y:hidden}
.podbar::-webkit-scrollbar{height:0}
.pb,.pt{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;padding:0 13px;border:0;background:transparent;color:var(--text-2);font-size:13px;font-weight:500;cursor:pointer;position:relative;border-bottom:2.5px solid transparent;height:42px}
.pb svg,.pt svg{width:15px;height:15px;opacity:.85;flex:0 0 auto}
.pb:hover,.pt:hover{color:var(--text);background:var(--surface-3)}
.pb.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.pb[data-c="blue"].on{color:#2f6bff;border-bottom-color:#2f6bff}
.pb[data-c="green"].on{color:#16a34a;border-bottom-color:#16a34a}
.pb[data-c="amber"].on{color:#d97706;border-bottom-color:#d97706}
.pb[data-c="purple"].on{color:#8b5cf6;border-bottom-color:#8b5cf6}
.pb-cur{display:inline-flex;align-items:center;gap:6px;padding:0 14px;font-size:13px;font-weight:700;color:var(--text);border-right:1px solid var(--border);margin-right:2px;height:42px}
.pb-cur svg{width:15px;height:15px}
.pb-cur[data-c="blue"]{color:#2f6bff}.pb-cur[data-c="green"]{color:#16a34a}.pb-cur[data-c="amber"]{color:#d97706}.pb-cur[data-c="purple"]{color:#8b5cf6}
.pt.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}

/* 指挥中心首屏 */
.cc{padding:8px 24px 24px}
.cc-hi{font-size:19px;font-weight:700;margin:14px 2px 18px;color:var(--text)}
.cc-sec{display:flex;align-items:baseline;gap:10px;margin:6px 2px 10px}
.cc-sec-t{font-size:14px;font-weight:700}
.cc-sec-s{font-size:12px;color:var(--text-3)}
.cc-pods{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.cc-pod{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px;cursor:pointer;transition:.15s;position:relative;overflow:hidden}
.cc-pod:hover{box-shadow:0 6px 20px rgba(20,30,50,.10);transform:translateY(-2px)}
.cc-pod::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px}
.cc-pod[data-c="blue"]::before{background:#2f6bff}.cc-pod[data-c="green"]::before{background:#16a34a}.cc-pod[data-c="amber"]::before{background:#f59e0b}.cc-pod[data-c="purple"]::before{background:#8b5cf6}
.cc-pod-h{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;color:var(--text)}
.cc-pod-h svg{width:18px;height:18px}
.cc-pod[data-c="blue"] .cc-pod-h svg{color:#2f6bff}.cc-pod[data-c="green"] .cc-pod-h svg{color:#16a34a}.cc-pod[data-c="amber"] .cc-pod-h svg{color:#f59e0b}.cc-pod[data-c="purple"] .cc-pod-h svg{color:#8b5cf6}
.cc-pod-m{font-size:12.5px;color:var(--text-3);margin:10px 0 14px;min-height:18px}
.cc-pod-go{font-size:12.5px;font-weight:600;color:var(--primary)}
.cc-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:18px}
.cc-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px}
.cc-card-t{font-size:14px;font-weight:700;margin-bottom:12px}
.cc-qs{display:flex;flex-wrap:wrap;gap:8px}
.cc-q{padding:7px 13px;border:1px solid var(--border-2);background:var(--surface-2);color:var(--text);font-size:12.5px;border-radius:8px;cursor:pointer;transition:.13s}
.cc-q:hover{border-color:var(--primary);color:var(--primary);background:var(--brand-soft,#eaf1ff)}
.cc-empty{font-size:12.5px;color:var(--text-3)}
.cc-date{float:right;font-size:12.5px;font-weight:500;color:var(--text-3);margin-top:6px}
.cc-hi::after{content:'';display:block;clear:both}
.cc-alerts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.cc-alert{display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:left;border:1px solid var(--border);border-left-width:4px;border-radius:12px;padding:14px 16px;background:var(--surface);cursor:pointer;transition:.15s}
.cc-alert:hover{box-shadow:0 6px 18px rgba(20,30,50,.10);transform:translateY(-2px)}
.cc-alert-v{font-size:26px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.cc-alert-t{font-size:13.5px;font-weight:600;color:var(--text)}
.cc-alert-s{font-size:11.5px;color:var(--text-3)}
.cc-alert.cc-red{border-left-color:var(--danger)}.cc-alert.cc-red .cc-alert-v{color:var(--danger)}
.cc-alert.cc-amber{border-left-color:#d97706}.cc-alert.cc-amber .cc-alert-v{color:#d97706}
.cc-alert.cc-blue{border-left-color:#2f6bff}.cc-alert.cc-blue .cc-alert-v{color:#2f6bff}
.cc-alert.cc-green{border-left-color:#16a34a}.cc-alert.cc-green .cc-alert-v{color:#16a34a}
.cc-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.cc-kpi{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.cc-kpi-v{font-size:24px;font-weight:800;color:var(--text);line-height:1;font-variant-numeric:tabular-nums}
.cc-kpi-t{font-size:12.5px;color:var(--text-2)}
.cc-kpi-t i{font-style:normal;color:var(--text-3);margin-left:4px}
.cc-li{font-size:12.5px;color:var(--text-3);line-height:1.75}
@media (max-width:900px){.cc-pods{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-alerts{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid{grid-template-columns:1fr}.hd-tt2{display:none}}
@media (max-width:560px){.cc-pods{grid-template-columns:1fr}.hd-tt{display:none}}
.mb-alert .card-hd .tag.bad{background:var(--danger-bg);color:var(--danger)}
.mb-ag{background:#fff5f5;border:1px solid #fbe3e3;border-radius:8px;padding:8px 10px}
.mb-ag-hd{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text);margin-bottom:5px}
.mb-al{font-size:12px;color:var(--text-2);padding:3px 0;border-bottom:1px dashed #f3e0e0;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-al:last-child{border-bottom:none}
.mb-al .mb-s{color:var(--text-3);margin-left:6px;font-size:11px}
.mb-more{font-size:11px;color:var(--text-3);padding-top:3px}
.mb-group{margin-bottom:10px}
.mb-g-hd{font-size:12px;font-weight:600;color:var(--text-2);padding:5px 8px;background:var(--surface-3);border-radius:6px;margin-bottom:5px}
.mb-row{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;margin-bottom:5px;background:var(--surface)}
.mb-row:hover{box-shadow:0 1px 4px rgba(0,0,0,.06)}
.mb-chk{width:15px;height:15px;margin-top:3px;cursor:pointer;accent-color:var(--ok)}
.mb-body{flex:1;min-width:0}
.mb-t{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px;color:var(--text)}
.mb-c{font-size:12.3px;color:var(--text-2);margin-top:3px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.mb-note{font-size:11.5px;color:var(--text-3);margin-top:3px}
.mb-due{font-size:11px;color:var(--text-3)}
.mb-due.over{color:var(--danger);font-weight:600}

/* ═══════ 三栏工作台（2026-08-27：左主题导航 + 顶二级标签页 + 中内容） ═══════ */
.app{display:flex;height:100vh;overflow:hidden;flex:1;min-width:0}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.work{flex:1;min-height:0;display:flex;width:100%}
.work>.body{flex:1;min-width:0;width:100%;overflow:auto;background:var(--surface)}
/* 左主题导航（4 组：业绩/客户/任务/设置）— 图标在上、文字在下，精致图标 */
.sb{width:90px;flex:0 0 90px;background:var(--sidebar);display:flex;flex-direction:column;overflow:hidden}
.sb-brand{flex-direction:column;gap:6px;align-items:center;text-align:center;padding:14px 8px 12px;color:#fff;border-bottom:1px solid rgba(255,255,255,.08);height:auto;min-height:80px}
.sb-logo{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#3b82f6,#7c3aed);display:grid;place-items:center;font-weight:800;color:#fff;font-size:15px}
.sb-tt{font-size:12px;font-weight:700;color:#fff;line-height:1.2}
.sb-tt small{display:block;font-size:9px;font-weight:400;color:var(--sidebar-tx);margin-top:2px}
.sb-nav{flex:1;overflow:auto;padding:12px 8px;display:flex;flex-direction:column;gap:8px;align-items:stretch}
.sb-theme{display:flex;flex-direction:column;align-items:center;gap:6px;padding:11px 4px;margin:0;border-radius:14px;cursor:pointer;color:var(--sidebar-tx);transition:.15s;text-align:center}
.sb-theme:hover{background:var(--sidebar-2);color:#fff}
.sb-theme.on{background:color-mix(in srgb, var(--c) 18%, transparent)}
.sb-ic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--sidebar-2);color:var(--c);transition:.15s}
.sb-theme:hover .sb-ic{background:color-mix(in srgb,var(--c) 24%, transparent);color:var(--c)}
.sb-theme.on .sb-ic{background:var(--c);color:#fff;box-shadow:0 6px 14px -4px var(--c)}
.sb-ic svg{width:22px;height:22px;stroke-width:1.8}
.sb-nm{font-size:11px;font-weight:600;line-height:1.15;letter-spacing:.02em}
.sb-theme.on .sb-nm{color:#fff;font-weight:700}
/* 顶二级标签页（Excel 式 sheet 标签，位于内容区上方，切换当前主题子页） */
.vtabs{display:flex;align-items:flex-end;gap:3px;padding:0 14px;background:var(--surface-2);border-bottom:1px solid var(--border);flex:0 0 auto;overflow-x:auto;min-height:44px}
.vt-tab{position:relative;padding:11px 20px;font-size:13px;color:var(--text-2);cursor:pointer;text-decoration:none;white-space:nowrap;border:1px solid transparent;border-bottom:none;border-radius:10px 10px 0 0;margin-bottom:-1px;transition:.13s}
.vt-tab:hover{color:var(--primary);background:var(--surface-3)}
.vt-tab.on{color:#fff;font-weight:800;font-size:13.5px;letter-spacing:.01em;background:linear-gradient(180deg,var(--c),color-mix(in srgb,var(--c) 82%, #000));border-color:var(--c);border-bottom:2px solid var(--c);box-shadow:0 4px 12px -3px color-mix(in srgb,var(--c) 55%, transparent)}
@media (max-width:900px){.sb{width:64px;flex-basis:64px}.sb .sb-nm{display:none}.sb .sb-theme{justify-content:center;padding:11px 0}.sb .sb-brand .sb-tt{display:none}.hd-tt2{display:none}}
.mb-ops{display:flex;gap:5px;flex:0 0 auto}
.fld{margin-bottom:10px}
.fld label{display:block;font-size:12px;color:var(--text-2);margin-bottom:3px;font-weight:500}
.fld .inp{width:100%;box-sizing:border-box}
.empty{text-align:center;color:var(--text-3);padding:26px 12px;font-size:12.5px}
.mb-notice{border:1px solid #fde68a;border-left:4px solid #d97706}
.mb-notice-item{display:flex;align-items:center;gap:6px;font-size:12.3px;color:var(--text-2);padding:6px 8px;border-bottom:1px dashed #f0f0f0;flex-wrap:wrap}
.mb-notice-item:last-child{border-bottom:none}
.mb-notice-item.read{color:var(--text-3)}
.mb-n-dot{width:7px;height:7px;border-radius:50%;background:var(--danger);flex:0 0 auto}
.mb-notice-item.read .mb-n-dot{background:var(--border-2)}
.mb-done{opacity:.72}

/* 意向跟进表「+新增意向」按钮：蓝色底图标，显眼（用户拍板 2026-08-15） */
.tbl-lg .tbar .btn.add-intent{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:700;height:28px;padding:0 14px;font-size:12.5px;box-shadow:0 2px 6px rgba(37,99,235,.25)}
.tbl-lg .tbar .btn.add-intent:hover{background:var(--primary-h);border-color:var(--primary-h);box-shadow:0 3px 8px rgba(37,99,235,.35)}
.tbl-lg .tbar .btn.add-intent svg{width:14px;height:14px}

/* 点击数字弹窗录入（全站统一交互，用户拍板 2026-08-15：周进度看板周目标同款） */
.mt-inp,.cell-click,.tgt-inp{display:inline-block;min-width:52px;padding:2px 8px;border:1px solid transparent;border-radius:6px;cursor:pointer;transition:all .15s;font-variant-numeric:tabular-nums}
.mt-inp:hover,.cell-click:hover,.tgt-inp:hover{border-color:var(--primary);background:rgba(37,99,235,.06);color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.08)}
.cell-click.ctr{min-width:42px}

/* 点击数字弹窗录入（全站统一交互，用户拍板 2026-08-15：周进度看板周目标同款） */
.mt-inp,.cell-click,.tgt-inp{display:inline-block;min-width:52px;padding:2px 8px;border:1px solid transparent;border-radius:6px;cursor:pointer;transition:all .15s;font-variant-numeric:tabular-nums}
.mt-inp:hover,.cell-click:hover,.tgt-inp:hover{border-color:var(--primary);background:rgba(37,99,235,.06);color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,.08)}
.cell-click.ctr{min-width:42px}

/* ══ 表格统一规范（对齐「每周任务」/月目标概览；2026-08-28）══
    姓名(销售)列黄底 #f2c94c；分组表头浅色块 黄#f2c94c/橙#f2994a/浅绿#d5e8d4；
    tbody 单元格去语义底色改白底(合计/汇总行除外)；数字 12px 居中；达标 .ok/.warn/.bad 保留绿/橙/红 */
table.mini.grp td.nm, table.mtx td.nm{background:#f2c94c;color:#1f2937;font-weight:700;text-align:center}
table.mini.grp td, table.mtx td{text-align:center}
table.mini.grp td.n, table.mtx td.n{text-align:center;font-size:12px}

/* 分组表头统一色系（黄 / 橙 / 浅绿，覆盖 304-604 原语义色） */
table.mini.grp thead th.g-expire,table.mtx.grp thead th.g-expire,table.intent-tbl thead th.g-expire,
table.mini.grp thead th.g-broken,table.mtx.grp thead th.g-broken,table.intent-tbl thead th.g-broken,
table.mini.grp thead th.g-blue,table.mtx.grp thead th.g-blue,table.intent-tbl thead th.g-blue,
table.mini.grp thead th.g-purple,table.mtx.grp thead th.g-purple,table.intent-tbl thead th.g-purple,
table.mini.grp thead th.g-goal,table.mtx.grp thead th.g-goal,table.intent-tbl thead th.g-goal,
table.mini.grp thead th.g-week,table.mtx.grp thead th.g-week,table.intent-tbl thead th.g-week
{background:#f2c94c;color:#1f2937}
table.mini.grp thead th.g-early,table.mtx.grp thead th.g-early,table.intent-tbl thead th.g-early,
table.mini.grp thead th.g-green,table.mtx.grp thead th.g-green,table.intent-tbl thead th.g-green,
table.mini.grp thead th.g-red,table.mtx.grp thead th.g-red,table.intent-tbl thead th.g-red,
table.mini.grp thead th.g-deal,table.mtx.grp thead th.g-deal,table.intent-tbl thead th.g-deal,
table.mini.grp thead th.g-q,table.mtx.grp thead th.g-q,table.intent-tbl thead th.g-q,
table.mini.grp thead th.g-amber,table.mtx.grp thead th.g-amber,table.intent-tbl thead th.g-amber
{background:#f2994a;color:#1f2937}
table.mini.grp thead th.g-add,table.mtx.grp thead th.g-add,table.intent-tbl thead th.g-add,
table.mini.grp thead th.g-multi,table.mtx.grp thead th.g-multi,table.intent-tbl thead th.g-multi,
table.mini.grp thead th.g-teal,table.mtx.grp thead th.g-teal,table.intent-tbl thead th.g-teal,
table.mini.grp thead th.g-new,table.mtx.grp thead th.g-new,table.intent-tbl thead th.g-new,
table.mini.grp thead th.g-rose,table.mtx.grp thead th.g-rose,table.intent-tbl thead th.g-rose
{background:#d5e8d4;color:#1f2937}
/* tbody 单元格去语义底色 → 白底（合计/汇总行 .sum/.total 除外，保留汇总底色；差额红底由内联 style 保留） */
table.mini.grp tbody tr:not(.sum):not(.total) td[class*="g-"],
table.mtx.grp tbody tr:not(.sum):not(.total) td[class*="g-"],
table.intent-tbl tbody tr:not(.sum):not(.total) td[class*="g-"]
{background:#fff}
/* 表头统一居中（覆盖 298/299 默认第二层右对齐；用户拍板 2026-08-28） */
table.mini.grp thead th,table.mtx.grp thead th,table.intent-tbl thead th{text-align:center!important;font-family:inherit;font-variant-numeric:normal}
/* ── 电话呼出表：达标项字体加速动画（2026-08-31）── */
.call-good{font-weight:700;transition:color .35s ease}

/* ═══ 部门制度 · 两级可编辑模型样式（2026-09-02 拍板改造，追加于 app.v20260827.css）═══ */
.rules-panel{display:flex;flex-direction:column;gap:0}
.rule-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 auto 14px;max-width:1360px;width:100%}
.rule-bar-st{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:700}
.rule-bar-st svg{width:16px;height:16px;color:var(--primary)}
.rule-bar-btns{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
.rule-mgmt-note{max-width:1360px;width:100%;box-sizing:border-box;font-size:11.5px;line-height:1.6;color:var(--text-2);background:var(--primary-bg);border:1px solid var(--primary);padding:6px 10px;border-radius:6px;margin:-2px auto 10px}
/* 卡片操作按钮（管理模式） */
.rule-ops{display:inline-flex;gap:2px;flex:0 0 auto;margin-left:2px}
.rule-iops{display:inline-flex;gap:2px;flex:0 0 auto;align-self:flex-start;margin-top:2px}
.io{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:var(--text-3);border-radius:5px;cursor:pointer;padding:0}
.io svg{width:13px;height:13px}
.io:hover{background:var(--surface-3);color:var(--text)}
.io.dgr:hover{background:var(--danger-bg);color:var(--danger)}
/* 停用态 */
.rule.off{opacity:.62;border-style:dashed}
.rule.off summary{background:var(--surface-2)}
.rule-line.off .rule-v{opacity:.55;text-decoration:line-through;text-decoration-color:#c9ced6}
.rule-tag.off{color:var(--text-3);background:var(--surface-3)}
.rule-sum{font-size:12px;color:var(--text-3);line-height:1.6;padding-top:9px;white-space:pre-wrap;word-break:break-word}
.rule-add{margin-top:9px;border-style:dashed;color:var(--text-2)}
.rule-add:hover{color:var(--primary);border-color:var(--primary)}
/* 变更历史 */
.rule-his{display:flex;flex-direction:column;gap:9px}
.rule-his-hd{font-size:11.5px;color:var(--text-3);padding-bottom:2px}
.log-row{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:8px 11px;font-size:12px}
.log-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.log-t{font-family:var(--mono);font-size:11px;color:var(--text-3)}
.log-w{font-weight:600;color:var(--primary)}
.log-a{font-size:10.5px;padding:0 6px;border-radius:9px;line-height:1.7;background:var(--surface-3);color:var(--text-2)}
.log-a.insert{color:var(--ok);background:var(--ok-bg)}
.log-a.remove{color:var(--danger);background:var(--danger-bg)}
.log-pk{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:280px;color:var(--text)}
.log-c{display:flex;align-items:center;gap:6px;margin-top:4px;flex-wrap:wrap}
.log-k{font-size:10.5px;color:var(--text-3);background:var(--surface);border:1px solid var(--border);padding:0 5px;border-radius:4px;line-height:1.7}
.log-v{color:var(--text-2);white-space:pre-wrap;word-break:break-all;max-width:calc(100% - 130px)}
.log-v.old{color:var(--text-3);text-decoration:line-through;text-decoration-color:#c9ced6}
.log-ar{color:var(--text-3);flex:0 0 auto}

/* ═══ 部门制度表格化（2026-09-03 用户拍板：折叠卡 → 结构化表格）═══ */
.rule-tbl{width:1020px;min-width:1020px;border-collapse:collapse;table-layout:fixed;background:var(--surface);border:1px solid #bfc7d1;border-radius:10px;overflow:hidden;margin:0 auto}
@media (min-width:1360px){ .rule-tbl{width:100%} }
.rule-tbl thead th{padding:10px 12px;border:1px solid #bfc7d1;background:#eef1f6;color:#3f4a5a;font-size:12px;font-weight:700;text-align:center;white-space:nowrap}
.rule-tbl thead th.rule-h-name{width:15%}
.rule-tbl thead th.rule-h-note{width:14%}
.rule-tbl thead th:nth-child(2){width:32%}
.rule-tbl thead th:nth-child(3){width:22%}
.rule-tbl thead th:nth-child(4){width:17%} /* 奖励豁免：2026-09-04 加宽至 17%（原 13% 内容拥挤），考核/处罚同步微调保证合计 100% */
.rule-tbl td{padding:10px 12px;border:1px solid #dfe4ea;vertical-align:top;font-size:13px;line-height:1.7;color:var(--text-2);overflow-wrap:break-word}
.rule-tbl td.rule-c-name{background:#fbf7ec}
.rule-tbl tr.rule-off-row td{opacity:.62;background:repeating-linear-gradient(-45deg,#f4f6f9,#f4f6f9 6px,#eceff3 6px,#eceff3 12px)}
.rule-tbl td.rule-c-req{background:#f7fafd}
.rule-tbl td.rule-c-pun{background:#fdf7f6}
.rule-tbl td.rule-c-awd{background:#f6fbf7}
.rule-c-name .rule-c-tt{font-size:14px;font-weight:700;color:var(--text);white-space:pre-wrap;line-height:1.5}
.rule-c-name .rule-tag{display:inline-block;margin:4px 5px 0 0;font-size:10px;padding:0 6px;border-radius:5px;line-height:1.75;font-weight:600}
.rule-tag.pun{color:var(--danger);background:var(--danger-bg)}
.rule-tag.awd{color:var(--ok);background:var(--ok-bg)}
.rule-tag.off{color:var(--text-3);background:var(--surface);border:1px solid var(--border)}
.rule-card-ops{display:flex;gap:3px;margin-top:7px;flex-wrap:wrap}
.rule-card-ops .io{width:22px;height:22px}
.rule-cell-mg{position:relative;display:flex;flex-direction:column;height:100%}
.rule-cell-mg .rule-add-m{margin-top:8px;align-self:center}   /* 2026-09-07 需求三修复：移除 margin-top:auto 贴底（配合常驻显示，杜绝 hover 显隐引发布局抖动） */
.rule-cell-i{display:flex;align-items:flex-start;gap:7px;padding:4px 2px;border-radius:6px}
.rule-cell-i.off{opacity:.5}
.rule-cell-i.off .rule-cell-bd{text-decoration:line-through;text-decoration-color:#c9ced6}
.rule-cell-i:hover{background:#fff}
.rule-cell-i .rule-cell-no{flex:0 0 auto;font-size:10.5px;font-weight:700;color:#9aa4b2;background:var(--surface-2);border:1px solid var(--border);border-radius:50%;min-width:15px;height:15px;line-height:14px;text-align:center;margin-top:3px}
.rule-cell-bd{flex:1;min-width:0;white-space:pre-wrap;word-break:break-word}
.rule-cell-off{display:inline-block;margin-left:5px;font-size:10px;color:var(--text-3);background:var(--surface-2);border-radius:4px;padding:0 5px;line-height:1.6;vertical-align:1px}
.rule-cell-none{color:#b6bec9;font-size:12px;display:block;text-align:center;padding-top:4px;line-height:1.5}
.rule-cell-i .rule-iops{display:none;flex:0 0 auto;gap:2px}
.rule-cell-i:hover .rule-iops{display:inline-flex}
/* 2026-09-07 需求三修复：「+」号悬停消失无法点击 —— 改常驻显示（该按钮仅管理模式渲染，销售只读视图无此元素），
   去掉父格 hover 显隐切换（display:none↔inline-flex 会引发行高变化 → 鼠标脱靶 → 按钮循环消失），加大点击热区，hover 仅高亮不位移 */
.rule-add-m{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--primary);background:var(--primary-bg);border:1px dashed var(--primary);border-radius:6px;padding:4px 10px;line-height:1.6;cursor:pointer;transition:background .15s,border-color .15s}
.rule-add-m svg{width:12px;height:12px;flex:0 0 auto}
.rule-add-m:hover{background:#dbe9ff;border-color:var(--primary)}
.rule-c-intro{font-size:11.5px;color:var(--text-3);white-space:pre-wrap;word-break:break-word;line-height:1.5}
/* 备注列（管理模式可点击整格编辑 = 卡「简介」） */
.rule-c-note{padding:4px !important;vertical-align:top}
.rule-c-note-b{display:block;width:100%;text-align:left;background:none;border:1px dashed transparent;border-radius:6px;padding:5px 7px;cursor:pointer;font:inherit;line-height:1.5}
.rule-c-note-b .rule-c-intro{display:block}
.rule-c-note-b:hover{border-color:var(--primary);background:var(--primary-bg)}
.rule-c-note-b:hover .rule-c-intro{color:var(--primary)}
.rule-c-note-b.empty .rule-cell-none{display:block;font-size:11.5px;color:var(--primary)}
.rule-c-note-b.empty{border-style:dashed;border-color:var(--primary);opacity:.75}
.rule-c-note-b.empty:hover{opacity:1}
/* 表格外层容器：水平居中 + 窄屏横向滚动自适应（2026-09-03） */
.rule-wrap{max-width:1360px;margin:0 auto;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px}
/* 表格式分组头：与 .rule-tbl 同宽 1020 + 居中（覆盖第 233 行旧折叠卡 .rule-g-hd 样式；2026-09-03） */
.rule-g-hd{padding:7px 11px;background:#eef1f6;border:1px solid #dfe4ea;border-bottom:none;border-radius:10px 10px 0 0;font-size:13px;color:#3f4a5a;max-width:1020px;width:100%;margin:0 auto;box-sizing:border-box}
@media (max-width:1100px){
  .rule-bar,.rule-mgmt-note{max-width:100%}
}
@media (max-width:640px){
  .rule-bar-st .rule-g-n{display:none}
  .rule-bar{margin:0 auto 10px}
}
/* 客户报告生成中加载圈（2026-09-04 客户报告页签） */
@keyframes spin{to{transform:rotate(360deg)}}
/* 意向客户跟进 · 「跟进状态」面板式多选下拉（2026-09-14） */
.msel{position:relative;display:inline-block}
.msel>.sel{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;width:auto;min-width:132px;
  font-family:inherit;text-align:left;cursor:pointer}
.msel>.sel .msel-lb{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px}
.msel>.sel .msel-caret{flex:0 0 auto;font-size:9px;color:var(--text-3);transition:.15s}
.msel.msel-on>.sel{border-color:var(--primary-br);background:var(--primary-bg);color:var(--primary);font-weight:600}
.msel.open>.sel,.msel>.sel:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.11)}
.msel.open>.sel .msel-caret{transform:rotate(180deg)}
.msel-pop{position:absolute;z-index:70;top:calc(100% + 4px);left:0;min-width:208px;background:var(--surface);
  border:1px solid var(--border-2);border-radius:8px;box-shadow:0 10px 26px rgba(15,23,42,.16);padding:6px;display:none}
.msel.open .msel-pop{display:block}
.msel-hd{display:flex;align-items:center;gap:8px;padding:3px 6px 7px;border-bottom:1px solid var(--border);margin-bottom:4px}
.msel-hd b{font-size:11.5px;color:var(--text-2);font-weight:600}
.msel-hd .msel-act{margin-left:auto;display:flex;gap:9px}
.msel-hd a{font-size:11px;cursor:pointer;color:var(--primary);font-weight:600}
.msel-hd a:hover{text-decoration:underline}
.msel-list{max-height:252px;overflow:auto}
.msel-it{display:flex;align-items:center;gap:7px;padding:5px 6px;border-radius:6px;cursor:pointer;
  font-size:12.3px;color:var(--text-2);white-space:nowrap}
.msel-it:hover{background:var(--surface-3)}
.msel-it.on{background:var(--primary-bg);color:var(--text)}
.msel-it .msel-tx{overflow:hidden;text-overflow:ellipsis}
.msel-it .msel-n{margin-left:auto;font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}

/* 商城客户管理表（.mall-tbl，2026-09-15 C哥三轮回馈）：
   ① 行高偏大 → 单独收窄 td 上下内边距与行高，与「免转收跟进」等表视觉齐平（本类只管行高）。
   ② 列宽：曾按「期内客户管理」口径限宽到 1252px（fixed + max-width + <col> 固定销售列），
      但 C哥随后反馈「太小了，和免转收的规则保持一致」→ **撤销限宽**，
      宽度规则改回与「免转收跟进」等表完全相同：由 structure.js 行内
      `width:100%;table-layout:auto;min-width:0` 提供（铺满容器、列宽随内容自适应，不设 max-width）。
      ⚠️ 经验：fixed + 每列写死宽度会锁死表格总宽，窄屏只能横向滚动；auto 布局才自适应。
   仅作用于 .mall-tbl，不改全局 .mini —— 避免波及其他表格。 */
table.mini.mall-tbl td{padding:3px 5px;line-height:1}
table.mini.mall-tbl td.nm{padding:3px 5px}

/* 管理规则面板（.rules，2026-09-17 C哥新增）：
   位置 = 卡片标题（.card-hd）下方、数据表上方，常驻展示该页的奖惩规则。
   左色条 + 浅琥珀底，视觉上「是说明不是数据」，不与表体争焦点；
   徽章（周/季/月奖惩）配色由 structure.js 的 ruleBox() 以行内色注入，本类只给结构与留白。 */
.rules{border:1px solid var(--border);border-left:3px solid var(--warn);background:#fdfaf3;border-radius:var(--r);padding:8px 11px 9px;margin:12px 15px}
.rules-hd{display:flex;align-items:center;gap:5px;font-size:12px;font-weight:800;color:#92400e;margin-bottom:5px}
.rules-hd svg{width:14px;height:14px;flex:0 0 auto;opacity:.95}
.rules-l{display:flex;gap:7px;align-items:flex-start;font-size:11.5px;color:var(--text-2);line-height:1.7;padding:1px 0}
.rules-l>em{flex:0 0 auto;font-style:normal;font-weight:700;font-size:10.5px;border-radius:4px;padding:0 6px;margin-top:2px;white-space:nowrap;font-variant-numeric:tabular-nums}
.rules-l>span{flex:1 1 auto}
.rules-l b{font-weight:700;color:#b91c1c}
.rules-l.no-badge{padding-left:2px}   /* 无徽章条目（「要求」类）左侧对齐不缩进 */

/* ── 部门制度 · 静态图片映射（2026-09-29 C哥拍板：整页换成一张制度总表图片，无可编辑入口）──
   要点：① 白底表格图，给足呼吸感但不喧宾夺主（浅灰描边 + 圆角 + 极淡阴影）；
        ② 原始宽高比居中，宽度自适应卡片（最高 1360px 与 .rule-bar 对齐）；
        ③ 窄屏整块横向滚动，避免把长表压变形；④ 点击进灯箱看原尺寸细节。 */
.rule-img-card{max-width:1360px;width:100%;margin:0 auto;border:1px solid var(--border);border-radius:var(--r-lg);
  background:#fff;box-shadow:0 1px 3px rgba(15,23,42,.06);overflow:auto;-webkit-overflow-scrolling:touch}
.rules-img{display:block;width:100%;height:auto;min-width:760px;cursor:zoom-in}
.rule-img-foot{display:flex;align-items:center;gap:6px;max-width:1360px;width:100%;margin:10px auto 0;
  font-size:12px;color:var(--text-3);line-height:1.6}
.rule-img-foot svg{width:14px;height:14px;flex:0 0 auto;opacity:.8}
/* 灯箱：全屏看原图（Esc 或点空白关闭） */
.rules-lb{position:fixed;inset:0;z-index:9999;background:rgba(15,23,42,.92);overflow:auto;
  padding:24px;display:flex;align-items:flex-start;justify-content:center;cursor:zoom-out}
.rules-lb-bd{max-width:1542px;width:100%;margin:auto}
.rules-lb-bd img{display:block;width:100%;height:auto;border-radius:6px;background:#fff}
.rules-lb-x{position:fixed;top:16px;right:18px;width:34px;height:34px;border:0;border-radius:50%;
  background:rgba(255,255,255,.16);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.rules-lb-x svg{width:17px;height:17px}
.rules-lb-x:hover{background:rgba(255,255,255,.3)}
@media (max-width:820px){ .rules-lb{padding:10px} .rules-lb-x{top:8px;right:8px} }
