/* 万机管家分析平台 · 前端样式
   设计规范 v1.0（原型/设计规范.md）落地版：
   - 颜色/字号/间距/圆角/阴影全部使用规范 token（6 级字号、6 级间距）
   - 组件类与原型保持一致；旧类名保留为样式别名，页面结构不变
   - 状态四态：skeleton / state--empty / state--error / nodata
   - 表格：sticky 表头 + 数字右对齐 + 窄屏首列冻结
   - 390 抽屉侧栏 + :focus-visible 键盘焦点环 */

/* ================= 1. Token（对齐 设计规范 §2） ================= */
:root{
  /* 品牌色 */
  --color-brand:#4f6ef7;
  --color-brand-strong:#3f57d8;
  --color-brand-stronger:#3243b0;
  --color-brand-soft:#eef1ff;
  --color-brand-soft-2:#dfe5ff;

  /* 中性色阶 */
  --color-bg:#f4f6fa;
  --color-surface:#ffffff;
  --color-surface-2:#f8fafc;
  --color-surface-3:#f1f5f9;
  --color-border:#e4e9f2;
  --color-border-strong:#cfd8e6;
  --color-text-1:#0f172a;
  --color-text-2:#334155;
  --color-text-3:#5b6b82;
  --color-text-4:#8a97a8;   /* 仅非文本装饰 */

  /* 侧栏 */
  --color-nav-bg:#0f172a;
  --color-nav-bg-hover:rgba(148,163,184,.12);
  --color-nav-text:#cbd5e1;
  --color-nav-text-dim:#94a3b8;
  --color-nav-divider:rgba(148,163,184,.16);

  /* 语义色 */
  --color-success:#0e9f6e;  --color-success-strong:#0a7a57; --color-success-soft:#e6f7f0;
  --color-warning:#d97706;  --color-warning-strong:#b45309; --color-warning-soft:#fef4e6;
  --color-danger:#e02424;   --color-danger-strong:#b91c1c;  --color-danger-soft:#fdecec;
  --color-info:#0284c7;     --color-info-strong:#0369a1;    --color-info-soft:#e0f2fe;
  --color-violet:#7c3aed;   --color-violet-strong:#6d28d9;  --color-violet-soft:#f1eafe;
  --color-slate:#64748b;    --color-amber:#d97706;          --color-teal:#0e9f6e;

  /* 字号（6 级，禁止第 7 种） */
  --font-size-12:12px;
  --font-size-13:13px;
  --font-size-14:14px;
  --font-size-16:16px;
  --font-size-20:20px;
  --font-size-24:24px;
  --font-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;

  /* 行高 */
  --line-height-tight:1.2;
  --line-height-title:1.3;
  --line-height-body:1.6;

  /* 间距（6 级） */
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:24px; --space-6:32px;

  /* 圆角 */
  --radius-xs:4px;
  --radius-sm:8px;
  --radius-md:10px;
  --radius-lg:12px;
  --radius-pill:999px;

  /* 阴影（仅浮层） */
  --shadow-1:0 1px 2px rgba(15,23,42,.06);
  --shadow-2:0 12px 32px rgba(15,23,42,.16);

  /* 布局 */
  --sidebar-width:236px;
  --topbar-height:56px;
  --content-max:1560px;
  --ease:160ms cubic-bezier(.4,0,.2,1);

  /* ---------- 兼容别名（旧类名/样式继续可用，值统一指向 token） ---------- */
  --bg:var(--color-bg);
  --card:var(--color-surface);
  --line:var(--color-border);
  --line-soft:var(--color-surface-3);
  --head-bg:var(--color-surface-2);
  --hover-bg:#f8faff;
  --text:var(--color-text-1);
  --sub:var(--color-text-3);
  --muted:var(--color-text-3);
  --primary:var(--color-brand);
  --primary-l:var(--color-brand-soft);
  --primary-d:var(--color-brand-soft-2);
  --red:var(--color-danger);         --red-l:var(--color-danger-soft);   --red-line:#f3d3d3; --red-bg:#fffafa;
  --orange:var(--color-warning);     --orange-l:var(--color-warning-soft); --orange-line:#fde2b3; --orange-text:#92400e; --orange-bg:#fff8e6;
  --green:var(--color-success);      --green-l:var(--color-success-soft); --green-line:#c9ecdd;
  --purple:var(--color-violet);      --purple-l:var(--color-violet-soft);
  --cyan:var(--color-info);          --gray-l:var(--color-surface-3);    --gray-text:#475569;
  --r:var(--radius-lg);
  --r-md:var(--radius-md);
  --r-sm:var(--radius-sm);
  --r-xs:var(--radius-sm);
  --r-pill:var(--radius-pill);
}

/* ================= 2. Reset / 可访问性 ================= */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--color-bg);color:var(--color-text-1);font-size:var(--font-size-13);
  line-height:var(--line-height-body);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
img,svg{display:block}
h1,h2,h3,h4{line-height:var(--line-height-title)}
:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px;border-radius:var(--radius-xs)}
.sidebar :focus-visible,.sidebar a:focus-visible{outline-color:#fff}
.num,.kpi .v,.kpi__value,.mono,.data td.num,.data th.num{font-variant-numeric:tabular-nums}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:absolute;left:var(--space-2);top:-48px;z-index:200;background:var(--color-surface);
  color:var(--color-text-1);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);
  padding:var(--space-2) var(--space-3);font-size:var(--font-size-13);transition:top var(--ease)}
.skip-link:focus{top:var(--space-2)}

/* ================= 3. 布局 / 侧栏 / 顶栏 / 抽屉 ================= */
.layout{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-width);background:var(--color-nav-bg);color:var(--color-nav-text);
  flex-shrink:0;padding:var(--space-4) var(--space-3);position:sticky;top:0;height:100vh;overflow:auto;z-index:90}
.logo{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:var(--space-1) var(--space-2) var(--space-4)}
.logo__img{display:block;height:28px;width:auto;max-width:100%}
.logo__sub{font-size:11px;font-weight:500;letter-spacing:.1em;color:var(--color-nav-text-dim);line-height:1}
.nav-group{margin-bottom:var(--space-3)}
.nav-title{font-size:var(--font-size-12);color:var(--color-nav-text-dim);padding:var(--space-1) var(--space-2);letter-spacing:.5px}
.nav-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2);border-radius:var(--radius-sm);
  cursor:pointer;font-size:var(--font-size-13);color:var(--color-nav-text);transition:background var(--ease),color var(--ease)}
.nav-item:hover{background:var(--color-nav-bg-hover);color:#fff}
.nav-item.active{background:var(--color-brand-strong);color:#fff;font-weight:600}
.nav-item .ico{width:16px;text-align:center;flex-shrink:0;opacity:.9;font-size:var(--font-size-14)}
.nav-item .badge{margin-left:auto;background:var(--color-danger-strong);color:#fff;
  font-size:var(--font-size-12);padding:0 6px;border-radius:var(--radius-pill);line-height:18px}
.nav-sub{margin-top:var(--space-1)}
.main{flex:1;min-width:0;display:flex;flex-direction:column}

.topbar{height:var(--topbar-height);background:var(--color-surface);border-bottom:1px solid var(--color-border);
  display:flex;align-items:center;padding:0 var(--space-4);gap:var(--space-3);position:sticky;top:0;z-index:80}
.menu-btn{display:none;width:32px;height:32px;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);
  align-items:center;justify-content:center;color:var(--color-text-2);font-size:var(--font-size-16)}
.crumb{font-size:var(--font-size-13);color:var(--color-text-3);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crumb .sep{color:var(--color-text-4);margin:0 var(--space-1)}
.crumb b{color:var(--color-text-1);font-weight:600}
.top-right{margin-left:auto;display:flex;align-items:center;gap:var(--space-3)}
.search{background:var(--color-surface-3);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-3);
  font-size:var(--font-size-13);color:var(--color-text-3);min-width:200px}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--color-brand-strong);color:#fff;
  display:grid;place-items:center;font-size:var(--font-size-12);flex-shrink:0}
.mode-badge{font-size:var(--font-size-12);padding:2px var(--space-2);border-radius:var(--radius-pill);
  white-space:nowrap;font-weight:600}
.mode-badge[data-mode="real"]{background:var(--color-success-soft);color:var(--color-success-strong)}
.mode-badge[data-mode="demo"]{background:var(--color-warning-soft);color:var(--color-warning-strong)}
.mode-badge[data-mode="unknown"]{background:var(--color-surface-3);color:var(--color-text-3)}
.scrim{display:none;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:85}

/* 内容区 */
.content{padding:var(--space-5) var(--space-5) var(--space-6);max-width:var(--content-max);width:100%}
.page-head{display:flex;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-4);flex-wrap:wrap}
.page-head__main{min-width:0;flex:1}
.page-title{font-size:var(--font-size-20);font-weight:700;letter-spacing:-.01em;margin-bottom:var(--space-1)}
.page-title__sub{font-size:var(--font-size-14);font-weight:400;color:var(--color-text-3);margin-left:var(--space-1)}
.page-desc{font-size:var(--font-size-13);color:var(--color-text-3);margin-bottom:0}
.page-desc b{color:var(--color-text-2);font-weight:600}
.page-head__actions{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}
.page-tools{display:flex;gap:var(--space-2);justify-content:flex-end;margin:calc(-1 * var(--space-1)) 0 var(--space-3);flex-wrap:wrap}

/* 常驻口径条：page-head 下、内容区上方，一行小字 */
.caliber-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-2);
  margin:calc(-1 * var(--space-2)) 0 var(--space-4);
  padding:var(--space-2) var(--space-3);
  background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-sm);font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body)}
.caliber-bar__tag{font-weight:600;color:var(--color-text-2)}
.caliber-bar b{font-weight:600;color:var(--color-text-2)}
.caliber-bar__sep{color:var(--color-text-4)}

/* ================= 4. KPI ================= */
.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-bottom:var(--space-4)}
.kpi{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-3) var(--space-4);position:relative;overflow:hidden}
.kpi--primary{padding-top:calc(var(--space-3) + 3px)}
.kpi--primary::before{content:"";position:absolute;left:0;top:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--color-brand),var(--color-violet))}
.kpi .k,.kpi__label{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-1);
  display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}
.kpi .v,.kpi__value{font-size:var(--font-size-24);font-weight:700;letter-spacing:-.02em;
  line-height:var(--line-height-tight);word-break:break-all}
.kpi--secondary .v,.kpi--secondary .kpi__value{font-size:var(--font-size-16)}
.kpi .s,.kpi__foot{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-1)}
.delta{font-size:var(--font-size-12);font-weight:600;border-radius:var(--radius-pill);padding:0 6px}
.delta--good{background:var(--color-success-soft);color:var(--color-success-strong)}
.delta--bad{background:var(--color-danger-soft);color:var(--color-danger-strong)}
.up{color:var(--color-success-strong)}
.down{color:var(--color-danger-strong)}

/* ================= 5. 卡片 ================= */
.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-4);margin-bottom:var(--space-4)}
.card--flush{padding:0;overflow:hidden}
.card-h,.card__head{display:flex;align-items:flex-start;justify-content:space-between;
  gap:var(--space-3);margin-bottom:var(--space-3);flex-wrap:wrap}
.card-t,.card__title{font-size:var(--font-size-14);font-weight:600;line-height:var(--line-height-title)}
.card__sub,.card-sub{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-1)}
.card-x,.link-btn{font-size:var(--font-size-12);color:var(--color-brand-strong);cursor:pointer;
  white-space:nowrap;font-weight:600}
.card-x:hover,.link-btn:hover{text-decoration:underline}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3)}
.chart{height:260px;width:100%}
.chart-sm{height:220px;width:100%}
.chart-lg{height:300px;width:100%}
.chart-wrap{display:block}
.chart-caption{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-1)}
.table-wrap{width:100%;overflow-x:auto}

/* ================= 6. 表格 ================= */
table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--font-size-13)}
th{text-align:left;color:var(--color-text-3);font-weight:600;font-size:var(--font-size-12);
  padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);
  background:var(--color-surface-2);white-space:nowrap;position:sticky;top:0;z-index:2}
td{padding:11px var(--space-3);border-bottom:1px solid var(--color-surface-3);vertical-align:middle}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--hover-bg)}
th.ta-r,td.ta-r,th.num,td.num{text-align:right;font-variant-numeric:tabular-nums}
td.strong{font-weight:600}
td.col-check,th.col-check{width:36px;text-align:center;padding-left:var(--space-2);padding-right:var(--space-2)}
.tc-name{font-weight:600}
.tc-sub{font-size:var(--font-size-12);color:var(--color-text-3)}
.tc-empty{text-align:center;color:var(--color-text-3);padding:var(--space-6) !important}
tr.row-click{cursor:pointer}
.scroll-hint{display:none;font-size:var(--font-size-12);color:var(--color-text-3);
  padding:var(--space-2) var(--space-3);background:var(--color-surface-2);
  border-bottom:1px solid var(--color-border)}
.table-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);
  padding:var(--space-3) var(--space-4);border-top:1px solid var(--color-border);
  font-size:var(--font-size-12);color:var(--color-text-3);flex-wrap:wrap}
.bulkbar{position:sticky;bottom:0;display:flex;align-items:center;gap:var(--space-3);
  background:var(--color-surface);border-top:1px solid var(--color-border);
  padding:var(--space-2) var(--space-4);font-size:var(--font-size-13);z-index:3}
.bulkbar__count{font-weight:600}
.sort-btn{font-weight:600;color:inherit;font-size:inherit;display:inline-flex;align-items:center;gap:var(--space-1)}
.sort-btn::after{content:"↕";font-size:10px;color:var(--color-text-4)}
.sort-btn[aria-sort="ascending"]::after{content:"↑";color:var(--color-brand-strong)}
.sort-btn[aria-sort="descending"]::after{content:"↓";color:var(--color-brand-strong)}

/* ================= 7. 标签 / 状态点 ================= */
.tag{display:inline-block;padding:0 var(--space-2);border-radius:var(--radius-pill);
  font-size:var(--font-size-12);font-weight:600;line-height:20px;white-space:nowrap}
.tag--red{background:var(--color-danger-soft);color:var(--color-danger-strong)}
.tag--orange{background:var(--color-warning-soft);color:var(--color-warning-strong)}
.tag--green{background:var(--color-success-soft);color:var(--color-success-strong)}
.tag--blue{background:var(--color-brand-soft);color:var(--color-brand-stronger)}
.tag--purple{background:var(--color-violet-soft);color:var(--color-violet-strong)}
.tag--gray{background:var(--color-surface-3);color:var(--color-text-3)}
.tag--cyan{background:var(--color-info-soft);color:var(--color-info-strong)}
.tag--outline{background:transparent;border:1px solid var(--color-border-strong);color:var(--color-text-3)}
.tag--dot::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
  background:currentColor;margin-right:5px;vertical-align:middle}
/* 旧类名别名 */
.t-red{background:var(--color-danger-soft);color:var(--color-danger-strong)}
.t-orange{background:var(--color-warning-soft);color:var(--color-warning-strong)}
.t-green{background:var(--color-success-soft);color:var(--color-success-strong)}
.t-blue{background:var(--color-brand-soft);color:var(--color-brand-stronger)}
.t-purple{background:var(--color-violet-soft);color:var(--color-violet-strong)}
.t-cyan{background:var(--color-info-soft);color:var(--color-info-strong)}
.t-gray{background:var(--color-surface-3);color:var(--color-text-3)}
.gap-dot{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-12);
  color:var(--color-text-3);border:1px dashed var(--color-border-strong);border-radius:var(--radius-pill);
  padding:0 var(--space-2);line-height:20px;cursor:help}
.gap-dot::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--color-text-4)}

/* ================= 8. 按钮 / 表单 / 筛选 ================= */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);
  height:32px;padding:0 var(--space-3);border:1px solid var(--color-border-strong);
  border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text-2);
  font-size:var(--font-size-13);font-weight:500;cursor:pointer;white-space:nowrap;
  transition:border-color var(--ease),color var(--ease),background var(--ease)}
.btn:hover{border-color:var(--color-brand-strong);color:var(--color-brand-strong)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn--primary,.btn-p{background:var(--color-brand-strong);border-color:var(--color-brand-strong);color:#fff;font-weight:600}
.btn--primary:hover,.btn-p:hover{background:var(--color-brand-stronger);border-color:var(--color-brand-stronger);color:#fff}
.btn--danger{background:var(--color-danger-strong);border-color:var(--color-danger-strong);color:#fff}
.btn--ghost{border-color:transparent;background:transparent;color:var(--color-text-3)}
.btn--ghost:hover{background:var(--color-surface-3);color:var(--color-brand-strong)}
.btn--sm,.btn-sm{height:28px;padding:0 var(--space-2);font-size:var(--font-size-12)}
.btn.btn-done{background:var(--color-success-soft);border-color:var(--color-success-soft);color:var(--color-success-strong)}
.btn-p.btn-done{background:var(--color-success-soft);color:var(--color-success-strong);border-color:var(--color-success-soft)}
.link-btn{background:none;border:none;padding:0}
select,.input,.search-input{height:32px;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);
  padding:0 var(--space-2);background:var(--color-surface);color:var(--color-text-2);font-size:var(--font-size-13);
  max-width:100%}
select:focus,.input:focus,.search-input:focus{outline:none;border-color:var(--color-brand-strong);
  box-shadow:0 0 0 3px var(--color-brand-soft)}
.input--search,.search-input{width:240px}
textarea.input{height:auto;padding:var(--space-2);line-height:var(--line-height-body)}
.chip{display:inline-flex;align-items:center;height:32px;padding:0 var(--space-3);
  border:1px solid var(--color-border-strong);border-radius:var(--radius-pill);
  background:var(--color-surface);color:var(--color-text-2);font-size:var(--font-size-13);cursor:pointer}
.chip:hover{border-color:var(--color-brand-strong);color:var(--color-brand-strong)}
.chip[aria-pressed="true"],.chip.is-active{background:var(--color-brand-strong);border-color:var(--color-brand-strong);color:#fff;font-weight:600}
.checkbox{width:16px;height:16px;accent-color:var(--color-brand-strong);cursor:pointer}
.filterbar,.toolbar{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap;margin-bottom:var(--space-3)}
.toolbar-label{font-size:var(--font-size-12);color:var(--color-text-3);margin-left:auto}
.summary-bar{display:flex;gap:var(--space-4);flex-wrap:wrap;font-size:var(--font-size-12);
  color:var(--color-text-3);padding:var(--space-2) 0;border-top:1px solid var(--color-border)}
.summary-bar b{color:var(--color-text-1);font-weight:600}
.summary-sel{margin-left:auto}

/* ================= 9. 页签 / 阶段条 / 时间轴 ================= */
.tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border);
  margin-bottom:var(--space-3);overflow-x:auto;scrollbar-width:thin}
.tab{padding:var(--space-2) var(--space-3);font-size:var(--font-size-13);color:var(--color-text-3);
  cursor:pointer;border-bottom:2px solid transparent;transition:color var(--ease);white-space:nowrap;user-select:none}
.tab:hover{color:var(--color-text-1)}
.tab.on,.tab[aria-selected="true"]{color:var(--color-brand-strong);border-bottom-color:var(--color-brand-strong);font-weight:600}
.stagebar,.stage-bar{display:flex;gap:var(--space-1);align-items:flex-start;overflow-x:auto;padding-bottom:var(--space-1)}
.stage-step{flex:1;min-width:104px;text-align:center}
.stage-line{height:4px;border-radius:2px;margin-bottom:var(--space-2);background:var(--color-border)}
.stage-step[data-state="done"] .stage-line{background:var(--color-brand)}
.stage-step[data-state="current"] .stage-line{background:var(--color-brand)}
.stage-name{font-size:var(--font-size-12);color:var(--color-text-3)}
.stage-step[data-state="done"] .stage-name{color:var(--color-text-1)}
.stage-step[data-state="current"] .stage-name{color:var(--color-brand-strong);font-weight:600}
.timeline{display:flex;flex-direction:column;gap:var(--space-2)}
.tl-item{display:flex;gap:var(--space-2);font-size:var(--font-size-13)}
.tl-item::before{content:"";width:8px;height:8px;border-radius:50%;border:2px solid var(--color-brand);
  margin-top:6px;flex-shrink:0}
.tl-item--pending::before{border-color:var(--color-border-strong)}

/* ================= 10. 泳道 / 动作卡 ================= */
.lane{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3);align-items:start}
.lane-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-3)}
.lane-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}
.lane-n{font-size:var(--font-size-13);font-weight:600}
.lane-c{font-size:var(--font-size-24);font-weight:700;font-variant-numeric:tabular-nums}
.lane-c--risk{color:var(--color-danger-strong)}
.lane-c--growth{color:var(--color-brand-strong)}
.lane-c--watch{color:var(--color-warning-strong)}
.act{background:var(--color-surface);border:1px solid var(--color-border);border-left:3px solid var(--color-brand);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);margin-bottom:var(--space-2)}
.act:last-child{margin-bottom:0}
.act.bad{border-left-color:var(--color-danger)}
.act.warn{border-left-color:var(--color-warning)}
.act.ok{border-left-color:var(--color-success)}
.act .h{display:flex;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-13);
  font-weight:600;margin-bottom:var(--space-1)}
.act .d{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-2);
  overflow-wrap:anywhere}
.act .f{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-3);flex-wrap:wrap}

/* ================= 11. 商家 360 ================= */
.pf-head{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-3);flex-wrap:wrap}
.pf-av{width:48px;height:48px;border-radius:var(--radius-md);
  background:linear-gradient(135deg,var(--color-brand),#8b5cf6);color:#fff;display:grid;place-items:center;
  font-size:var(--font-size-20);font-weight:700;flex-shrink:0}
.pf-name{font-size:var(--font-size-16);font-weight:700;display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}
.pf-meta{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-1)}
.pf-health{margin-left:auto;text-align:right;flex-shrink:0}
.pf-health__value{font-size:var(--font-size-24);font-weight:700;line-height:var(--line-height-tight)}
.pf-health__label{font-size:var(--font-size-12);color:var(--color-text-3)}
.pf-sel{display:flex;gap:var(--space-2);align-items:center;margin-bottom:var(--space-3);flex-wrap:wrap}
.pf-sel__label{font-size:var(--font-size-12);color:var(--color-text-3)}
.pf-sel .hint,.hint{font-size:var(--font-size-12);color:var(--color-text-3)}
.back-link{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-12);
  color:var(--color-brand-strong);margin-bottom:var(--space-2)}
.back-link:hover{text-decoration:underline}

/* ================= 12. 指标小格 / 明细 ================= */
/* 列数由 .mini--N 提供（不再用内联 style，内联会压过媒体查询导致窄屏破版） */
.mini{display:grid;grid-template-columns:repeat(var(--mini-cols,6),1fr);gap:var(--space-2)}
.mini--6{--mini-cols:6}
.mini--5{--mini-cols:5}
.mini--4{--mini-cols:4}
.mini--3{--mini-cols:3}
.mini--2{--mini-cols:2}
.mini--1{--mini-cols:1}
.mini .m{background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}
.mini .m .k{font-size:var(--font-size-12);color:var(--color-text-3)}
.mini .m .v{font-size:var(--font-size-16);font-weight:700;margin-top:var(--space-1);
  word-break:break-all;font-variant-numeric:tabular-nums}
.mini .m .v.sm{font-size:var(--font-size-12);font-weight:600}
.mini .m .v.is-empty{color:var(--color-text-3)}

/* ================= 13. 提示 / 状态四态 ================= */
.note,.callout{background:var(--color-warning-soft);border:1px solid var(--color-warning-soft);
  border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font-size:var(--font-size-12);
  color:var(--color-warning-strong);margin-bottom:var(--space-3);line-height:var(--line-height-body)}
.note.plain,.callout--muted{background:var(--color-surface-2);border-color:var(--color-border);color:var(--color-text-3)}
.callout--info{background:var(--color-info-soft);border-color:var(--color-info-soft);color:var(--color-info-strong)}
.callout--danger{background:var(--color-danger-soft);border-color:var(--color-danger-soft);color:var(--color-danger-strong)}
.note:last-child{margin-bottom:0}
.note b,.callout b{font-weight:700}
.demo-banner{display:flex;align-items:center;gap:var(--space-2);background:var(--color-warning-soft);
  border:1px solid #fde2b3;border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);
  font-size:var(--font-size-12);color:var(--color-warning-strong);margin-bottom:var(--space-3)}
.demo-banner b{font-weight:700}
.mono{font-family:var(--font-mono);font-size:var(--font-size-12)}
.muted{color:var(--color-text-3)}

/* 骨架屏 */
@keyframes sk-shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
.skeleton,.sk{background:linear-gradient(90deg,var(--color-surface-3) 25%,#e8edf5 37%,var(--color-surface-3) 63%);
  background-size:400% 100%;animation:sk-shimmer 1.3s ease infinite;border-radius:var(--radius-sm)}
.skel-line{height:12px;border-radius:var(--radius-sm);margin-bottom:var(--space-2)}
.skel-line--lg{height:24px;width:60%}
.skel-card{height:112px;border-radius:var(--radius-lg)}
.skel-chart{height:260px;border-radius:var(--radius-sm);margin-top:var(--space-3)}
.sk-title{width:180px;height:24px;margin-bottom:var(--space-3)}
.sk-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-bottom:var(--space-4)}
.sk-kpi{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-3) var(--space-4)}
.sk-kpi .sk{height:12px;margin-bottom:var(--space-2)}
.sk-kpi .sk.k2{width:60%;height:24px}
.sk-kpi .sk.k3{width:80%;height:12px;margin-bottom:0}
.sk-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-4);margin-bottom:var(--space-4)}
.sk-card .sk.h{width:130px;height:16px;margin-bottom:var(--space-3)}
.sk-card .sk.chart{height:260px}
.sk-grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}

/* 空态 / 错误态 */
.state{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-6) var(--space-4);text-align:center;margin-bottom:var(--space-4)}
.state__icon,.state .icon{font-size:var(--font-size-24);line-height:1;margin-bottom:var(--space-2);color:var(--color-text-3)}
.state__title,.state .t{font-size:var(--font-size-14);font-weight:600;margin-bottom:var(--space-1)}
.state__desc,.state .d{font-size:var(--font-size-13);color:var(--color-text-3);margin-bottom:var(--space-3);
  overflow-wrap:anywhere}
.state__actions{display:flex;gap:var(--space-2);justify-content:center;flex-wrap:wrap}
.state--error,.state.error{border-color:#f3d3d3;background:var(--color-danger-soft)}
.state--error .state__icon,.state.error .icon{color:var(--color-danger-strong)}
.state--empty .state__icon,.state.empty .icon{color:var(--color-text-3)}
.state-inline{padding:var(--space-4);text-align:center;color:var(--color-text-3);
  font-size:var(--font-size-13);border:1px dashed var(--color-border-strong);border-radius:var(--radius-md)}

/* 未接入（缺什么 / 现状 / 谁补 / 影响） */
.nodata{border:1px dashed var(--color-border-strong);background:var(--color-surface-2);
  border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4)}
.nodata__head{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-14);
  font-weight:600;margin-bottom:var(--space-2)}
.nodata__head::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--color-text-4)}
.nodata__rows{display:grid;grid-template-columns:max-content 1fr;gap:var(--space-1) var(--space-3);
  font-size:var(--font-size-13);margin:0}
.nodata__rows dt{color:var(--color-text-3);font-size:var(--font-size-12)}
.nodata__rows dd{color:var(--color-text-2);margin:0}
.pending-panel{border:1px dashed var(--color-border-strong);background:var(--color-surface-2);
  border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4)}
.pending-panel .pp-head{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);
  font-weight:600;font-size:var(--font-size-14)}
.pending-panel .pp-desc{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-2)}
.pending-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-2)}
.pending-item{background:var(--color-surface);border:1px solid var(--color-border);
  border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}
.pending-item .pi-k{font-size:var(--font-size-12);color:var(--color-text-3)}
.pending-item .pi-v{font-size:var(--font-size-13);font-weight:600;margin-top:2px}
.pending-item .pi-s{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}

/* ================= 14. 聊天（兼容旧 AI 页） ================= */
.chat{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  padding:var(--space-4);height:420px;overflow:auto}
.msg{display:flex;gap:var(--space-2);margin-bottom:var(--space-3)}
.msg .who{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  font-size:var(--font-size-12);flex-shrink:0}
.msg.ai .who{background:var(--color-brand-soft);color:var(--color-brand-strong)}
.msg.me .who{background:var(--color-nav-bg);color:#fff}
.bubble{background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-size:var(--font-size-13);
  max-width:820px;overflow-wrap:anywhere}
.msg.me .bubble{background:var(--color-brand-soft);border-color:var(--color-brand-soft-2);margin-left:auto}
.chat-in{display:flex;gap:var(--space-2);margin-top:var(--space-3)}
.chat-in input{flex:1;height:36px;border:1px solid var(--color-border-strong);
  border-radius:var(--radius-sm);padding:0 var(--space-3);font-size:var(--font-size-13)}
.chat-in input:focus{outline:none;border-color:var(--color-brand-strong);box-shadow:0 0 0 3px var(--color-brand-soft)}

/* ================= 15. 万机小智（能力说明页） ================= */
.ai-stage{display:grid;grid-template-columns:200px minmax(0,1fr) 240px;gap:var(--space-3);
  align-items:stretch;margin-bottom:var(--space-4)}
.ai-pane{background:var(--color-surface);border:1px solid var(--color-border);
  border-radius:var(--radius-lg);padding:var(--space-3);min-width:0}
.ai-pane__title{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-2);
  display:flex;justify-content:space-between;align-items:center}
.ai-session{display:flex;flex-direction:column;gap:var(--space-1)}
.ai-session__item{font-size:var(--font-size-12);color:var(--color-text-2);padding:var(--space-1) var(--space-2);
  border-radius:var(--radius-sm);background:var(--color-surface-2)}
.ai-session__item.is-active{background:var(--color-brand-soft);color:var(--color-brand-stronger);font-weight:600}
.ai-chat{display:flex;flex-direction:column;gap:var(--space-3)}
/* 旧版 .ai-hero 规则已移除：与 #/ai 新版 hero（.aiw-* / 674 行起）冲突，导致 390 下逐字竖排 */
.ai-scope{display:flex;gap:var(--space-1);flex-wrap:wrap}
.ai-scope span{font-size:var(--font-size-12);color:var(--color-text-3);background:var(--color-surface-2);
  border:1px solid var(--color-border);border-radius:var(--radius-pill);padding:0 var(--space-2);line-height:20px}
.prompt-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-2)}
.prompt-card{text-align:left;background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3)}
.prompt-card:hover{border-color:var(--color-brand-strong)}
.prompt-card__title{display:block;font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.prompt-card__desc{display:block;font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}
.prompt-card__tag{display:inline-block;font-size:var(--font-size-12);color:var(--color-brand-stronger);
  background:var(--color-brand-soft);border-radius:var(--radius-pill);padding:0 6px;line-height:18px;margin-bottom:var(--space-1)}
.ai-msg{display:flex;gap:var(--space-2)}
.ai-msg__avatar{width:24px;height:24px;border-radius:50%;background:var(--color-brand-soft);
  color:var(--color-brand-strong);display:grid;place-items:center;font-size:var(--font-size-12);flex-shrink:0}
.ai-msg__body{min-width:0;flex:1}
.ai-msg__meta{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-1)}
.ai-msg__bubble{background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-size:var(--font-size-13)}
.ai-msg--me .ai-msg__bubble{background:var(--color-brand-soft);border-color:var(--color-brand-soft-2);color:var(--color-brand-stronger)}
.ai-card-types{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2)}
.ai-card-type{background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3)}
.ai-card-type__kicker{font-size:var(--font-size-12);color:var(--color-brand-strong);font-weight:600}
.ai-card-type__name{font-size:var(--font-size-13);font-weight:600;margin-top:2px}
.ai-card-type__desc{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}
.ai-context__row{display:flex;justify-content:space-between;gap:var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-3);padding:var(--space-1) 0;
  border-bottom:1px dashed var(--color-border)}
.ai-context__row b{color:var(--color-text-1);font-weight:600;font-variant-numeric:tabular-nums}
.ai-caps{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.ai-caps span{font-size:var(--font-size-12);border:1px solid var(--color-border-strong);
  border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2);color:var(--color-text-2)}
.ai-caps span.is-pending{color:var(--color-text-3);border-style:dashed}

/* ================= 16. 售后归因 / 财务治理（骨架页） ================= */
.matrix{display:grid;gap:var(--space-1);overflow-x:auto}
.matrix__row{display:grid;grid-template-columns:112px repeat(6,minmax(88px,1fr));gap:var(--space-1);min-width:680px}
.matrix__cell{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-xs);
  min-height:44px;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-12);
  color:var(--color-text-3);padding:var(--space-1)}
.matrix__cell--head{background:var(--color-surface-3);font-weight:600;color:var(--color-text-2);text-align:center}
.matrix__cell--rowhead{justify-content:flex-start;font-weight:600;color:var(--color-text-2);background:var(--color-surface-3)}
.matrix__cell--empty{color:var(--color-text-3);border-style:dashed}
.stepflow{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-2)}
.stepflow__item{background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-md);padding:var(--space-2) var(--space-3)}
.stepflow__label{font-size:var(--font-size-12);color:var(--color-text-3)}
.stepflow__value{font-size:var(--font-size-20);font-weight:700;margin-top:var(--space-1)}
.stepflow__sub{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}
.scorebar{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-12);color:var(--color-text-3)}
.scorebar__track{flex:1;height:8px;background:var(--color-surface-3);border-radius:var(--radius-pill);overflow:hidden}
.scorebar__fill{height:100%;background:var(--color-danger);border-radius:var(--radius-pill);width:0}
.scorebar__fill--ok{background:var(--color-success)}
.gauge{display:flex;align-items:baseline;gap:var(--space-1)}
.gauge__value{font-size:var(--font-size-24);font-weight:700;font-variant-numeric:tabular-nums}
.gauge__unit{font-size:var(--font-size-12);color:var(--color-text-3)}

/* ================= 17. 工具类 ================= */
.text-right{text-align:right}
.text-center{text-align:center}
.mt-1{margin-top:var(--space-1)}
.mt-2{margin-top:var(--space-2)}
.mt-3{margin-top:var(--space-3)}
.mt-4{margin-top:var(--space-4)}
.mb-0{margin-bottom:0}
.mb-2{margin-bottom:var(--space-2)}
.mb-3{margin-bottom:var(--space-3)}
.nowrap{white-space:nowrap}
.w-full{width:100%}

/* ================= 18. Toast / 浮层 ================= */
.toast{position:fixed;left:50%;bottom:var(--space-5);transform:translateX(-50%) translateY(12px);
  background:var(--color-nav-bg);color:#fff;padding:var(--space-2) var(--space-3);
  border-radius:var(--radius-sm);font-size:var(--font-size-13);opacity:0;transition:opacity var(--ease),transform var(--ease);
  z-index:200;pointer-events:none;max-width:80vw}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ================= 19. 响应式（规范 §4 / §9） ================= */
@media (max-width:1279px){
  :root{--sidebar-width:220px}
  .content{padding:var(--space-4) var(--space-3)}
}

@media (max-width:1023px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:272px;height:100vh;transform:translateX(-100%);
    transition:transform var(--ease);z-index:90}
  body.drawer-open .sidebar{transform:translateX(0)}
  body.drawer-open .scrim{display:block}
  .menu-btn{display:inline-flex}
  .content{padding:var(--space-3) var(--space-3) var(--space-5)}
  .kpi-row,.sk-kpi-row{grid-template-columns:repeat(2,1fr)}
  .grid2,.sk-grid2{grid-template-columns:1fr}
  .grid3{grid-template-columns:1fr}
  .lane{grid-template-columns:1fr}
  .ai-stage{grid-template-columns:1fr}
  .ai-card-types{grid-template-columns:repeat(2,1fr)}
  .mini--6,.mini--5{--mini-cols:3}
  .mini--4{--mini-cols:2}
  .scroll-hint{display:block}
  .data th:first-child,.data td:first-child{position:sticky;left:0;z-index:2;background:var(--color-surface)}
  .data th:first-child{background:var(--color-surface-2);z-index:3}
  .data td:first-child{box-shadow:1px 0 0 var(--color-border)}
  /* 商家列表：勾选列之后才是商家名，冻结的应是名称列（勾选列固定 32px） */
  .data--merchants th:nth-child(1),.data--merchants td:nth-child(1){width:32px;min-width:32px;max-width:32px}
  .data--merchants th:nth-child(2),.data--merchants td:nth-child(2){
    position:sticky;left:32px;z-index:2;min-width:168px;max-width:168px;
    background:var(--color-surface)}
  .data--merchants th:nth-child(2){background:var(--color-surface-2);z-index:3}
  .data--merchants td:nth-child(2){box-shadow:1px 0 0 var(--color-border)}
}

@media (max-width:767px){
  .search{display:none}
  .page-title{font-size:var(--font-size-20)}
  .kpi .v,.kpi__value{font-size:var(--font-size-20)}
  .chart,.chart-lg{height:220px}
  .chart-sm{height:196px}
  .mini--6,.mini--5,.mini--4,.mini--3{--mini-cols:2}
  .mini--2{--mini-cols:2}
  .caliber-bar{margin-bottom:var(--space-3)}
  .prompt-grid{grid-template-columns:1fr}
  .stepflow{grid-template-columns:repeat(2,1fr)}
  .pf-health{margin-left:0;text-align:left}
  .summary-sel{margin-left:0}
  .top-right{gap:var(--space-2)}
  .content{padding:var(--space-3) var(--space-3) var(--space-5)}
  .table-wrap{overflow-x:auto}
  table,.data{min-width:680px}
  /* 首列（商家名）不小于 168px，避免「玉萍手机」被压成竖排 */
  .data--merchants th:nth-child(2),.data--merchants td:nth-child(2){min-width:168px;max-width:168px}
  .card{padding:var(--space-3)}
  .card-h,.card__head{margin-bottom:var(--space-2)}
}

@media (max-width:359px){
  .kpi-row,.sk-kpi-row{grid-template-columns:1fr}
  .mini--6,.mini--5,.mini--4,.mini--3,.mini--2{--mini-cols:1}
  .content{padding:var(--space-2)}
  .page-head{gap:var(--space-2)}
}

/* ================= 20. 补充工具类（迁移新增） ================= */
.text-danger{color:var(--color-danger-strong)}
.text-warning{color:var(--color-warning-strong)}
.text-success{color:var(--color-success-strong)}
.text-muted{color:var(--color-text-3)}
.pager-btns{display:flex;gap:var(--space-2);align-items:center}
.pager__info{font-variant-numeric:tabular-nums}
.filter-card{padding:var(--space-3) var(--space-4)}
.table-card{padding:0;overflow:hidden}
.grid2-mini{grid-template-columns:1fr 1fr}
.summary-sel{margin-left:auto}
.card > .table-wrap:last-child,.card > .table-foot:last-child{margin-bottom:calc(-1 * var(--space-4))}
.card--flush > .table-wrap:last-child{margin-bottom:0}
.card--flush > .table-foot:last-child{background:var(--color-surface)}
.empty-actions .btn{margin:0 auto}

/* ================= 21. 防溢出（grid/flex 子项允许收缩） ================= */
.grid2 > *,.grid3 > *,.lane > *,.lane-card > *,.kpi-row > *,.mini > *,.ai-stage > *,.sk-grid2 > *,.stepflow > *{min-width:0}
.card,.ai-pane,.state{min-width:0}
.table-wrap{max-width:100%}

/* 长 token（表名 / 字段名）在窄屏可断行，避免撑破网格 */
.nodata__rows{grid-template-columns:max-content minmax(0,1fr)}
.nodata__rows dd{min-width:0;overflow-wrap:anywhere;word-break:break-word}
.nodata__rows dt{max-width:120px}
.mono,.tc-sub{overflow-wrap:anywhere}
.matrix__cell--corner{justify-content:flex-start;line-height:1.35;text-align:left}
.matrix__row{grid-template-columns:132px repeat(6,minmax(88px,1fr))}

/* ---------- 万机小智（#/ai 真实对话） ---------- */
.ai-shell{display:flex;flex-direction:column;gap:12px}
.ai-chat{min-height:420px;max-height:62vh;overflow:auto;padding:16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:14px}
.ai-hero{text-align:center;padding:28px 12px}
.ai-hero__mark{width:52px;height:52px;margin:0 auto 12px;border-radius:16px;background:linear-gradient(135deg,var(--color-brand),#8b5cf6);color:#fff;display:grid;place-items:center;font-size:22px}
.ai-hero__title{font-size:var(--font-size-20);margin:0 0 6px}
.ai-hero__sub{color:var(--color-text-3);font-size:var(--font-size-13);margin:0 0 18px}
.ai-hero__hint{color:var(--color-text-3);font-size:12px;margin-top:14px}
.ai-chips{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-width:760px;margin:0 auto}
.ai-chip{justify-content:flex-start;text-align:left;gap:8px;padding:10px 12px;white-space:normal;line-height:1.45}
.ai-chip__tag{flex:none;font-size:11px;color:var(--color-brand-strong);background:var(--color-brand-soft,#eef1ff);border-radius:999px;padding:1px 7px}
.ai-msg{display:flex;gap:10px;align-items:flex-start}
.ai-msg--me{flex-direction:row-reverse}
.ai-msg__who{width:28px;height:28px;flex:none;border-radius:50%;background:var(--color-brand-soft,#eef1ff);color:var(--color-brand-strong);display:grid;place-items:center;font-size:12px;font-weight:600}
.ai-msg__body{min-width:0;max-width:min(860px,88%)}
.ai-bubble{background:var(--color-surface-2,#f8fafc);border:1px solid var(--color-border);border-radius:12px;padding:12px 14px;font-size:var(--font-size-13);line-height:1.7}
.ai-bubble--me{background:var(--color-brand);border-color:var(--color-brand);color:#fff}
.ai-bubble--loading{display:flex;gap:4px;align-items:center}
.ai-bubble--loading span{width:6px;height:6px;border-radius:50%;background:var(--color-text-3);animation:ai-blink 1s infinite alternate}
.ai-bubble--loading span:nth-child(2){animation-delay:.2s}
.ai-bubble--loading span:nth-child(3){animation-delay:.4s}
@keyframes ai-blink{from{opacity:.25}to{opacity:1}}
.ai-md-h{font-weight:700;margin:10px 0 4px}
.ai-md-p{margin:4px 0}
.ai-md-ul{margin:4px 0 4px 18px;padding:0}
.ai-md-gap{height:6px}
.ai-msg__foot{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px;font-size:11px;color:var(--color-text-3)}
.ai-msg__foot code{background:var(--color-surface-3,#eef1f7);padding:1px 5px;border-radius:4px;font-size:11px}
.ai-warn{color:var(--color-danger,#d92d20)}
.ai-compose{display:flex;gap:8px;align-items:flex-end}
.ai-input{flex:1;resize:vertical;min-height:46px;max-height:160px;padding:10px 12px;border:1px solid var(--color-border);border-radius:10px;font:inherit;font-size:var(--font-size-13);background:var(--color-surface);color:var(--color-text-1)}
.ai-input:focus-visible{outline:2px solid var(--color-brand);outline-offset:1px}
.ai-foot-note{font-size:11px;color:var(--color-text-3)}
@media (max-width:640px){.ai-chips{grid-template-columns:1fr}.ai-msg__body{max-width:92%}}

/* 无障碍：仅供读屏 */
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* 万机小智：流式与校验 */
.ai-caret{display:inline-block;width:7px;height:14px;margin-left:2px;background:var(--color-brand);border-radius:2px;vertical-align:-2px;animation:ai-caret 1s steps(2) infinite}
@keyframes ai-caret{0%,50%{opacity:1}50.01%,100%{opacity:0}}
.ai-step{margin-top:8px;font-size:11px;color:var(--color-text-3)}
.ai-verify{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:11px;padding:3px 8px;border-radius:999px}
.ai-verify--ok{color:#087443;background:#e8f7ef}
.ai-verify--warn{color:#a15c07;background:#fdf3e3}

/* ---------- 供给与库存：库龄口径切换条（2026-10-30 新增，修 D1） ---------- */
.caliber-switch-card{padding:var(--space-3) var(--space-4);margin-bottom:var(--space-4)}
.caliber-switch{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.caliber-switch__btn{flex:1 1 260px;min-width:0;display:flex;flex-direction:column;align-items:flex-start;
  gap:2px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);
  border-radius:var(--radius-md);background:var(--color-surface-2);color:var(--color-text-2);
  font:inherit;text-align:left;cursor:pointer;transition:var(--ease);overflow-wrap:anywhere}
.caliber-switch__btn:hover{border-color:var(--color-border-strong)}
.caliber-switch__btn.is-active{border-color:var(--color-brand);background:var(--color-brand-soft);color:var(--color-text-1);
  box-shadow:inset 0 0 0 1px var(--color-brand)}
.caliber-switch__btn:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px}
.cs-label{font-size:var(--font-size-13);font-weight:600}
.cs-val{font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums}
.caliber-switch__btn.is-active .cs-val{color:var(--color-text-2)}
.caliber-note{margin:var(--space-2) 0 0;font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body);overflow-wrap:anywhere}
.caliber-note b{color:var(--color-text-2);font-weight:600}
.caliber-switch-card .caliber-note:last-child{margin-bottom:0}
/* 口径面板互斥显示：author 的 display 会盖过 UA [hidden]，这里显式收口 */
[data-panel][hidden],[data-note][hidden]{display:none!important}
@media (max-width:767px){
  .caliber-switch__btn{flex:1 1 100%}
  .caliber-switch-card{padding:var(--space-3)}
}

/* ---------- 今日必做：三个「先说清楚」（2026-10-30 新增，daily=1） ---------- */
.todo-brief{background:var(--color-surface);border:1px solid var(--color-border);
  border-left:3px solid var(--color-brand);border-radius:var(--radius-lg);
  padding:var(--space-3) var(--space-4);margin-bottom:var(--space-3)}
.todo-brief__top{display:flex;align-items:center;justify-content:space-between;
  gap:var(--space-2) var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-2)}
.todo-brief__count{font-size:var(--font-size-13);color:var(--color-text-2);
  display:flex;align-items:baseline;flex-wrap:wrap;gap:0 4px;min-width:0}
.todo-brief__count b{font-size:var(--font-size-16);font-weight:700;color:var(--color-text-1);
  font-variant-numeric:tabular-nums}
.todo-brief__sep{color:var(--color-text-4)}
.todo-brief__now{color:var(--color-text-3)}
.todo-brief__row{display:flex;gap:var(--space-2);padding-top:var(--space-1);
  font-size:var(--font-size-12);line-height:var(--line-height-body);color:var(--color-text-2)}
.todo-brief__k{flex:0 0 56px;font-weight:600;color:var(--color-text-3)}
.todo-brief__v{flex:1;min-width:0;overflow-wrap:anywhere}
.todo-brief__v b{font-weight:600;color:var(--color-text-1);font-variant-numeric:tabular-nums}
.todo-brief__warn{color:var(--color-warning-strong);font-weight:600}
.todo-brief__note{color:var(--color-text-3)}

/* ---------- 今日必做：观察跟进泳道下的 SaaS 到期分组 ---------- */
.todo-sub{margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px dashed var(--color-border)}
.todo-sub__head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}
.todo-sub__t{font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.todo-sub__n{font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums}
.todo-sub__note{margin:var(--space-1) 0 var(--space-2);font-size:var(--font-size-12);
  line-height:var(--line-height-body);color:var(--color-text-3);overflow-wrap:anywhere}
.todo-saas{display:flex;flex-direction:column;gap:2px}
.todo-saas__row{display:flex;align-items:center;gap:var(--space-2);min-height:24px;
  padding:2px var(--space-1);border-radius:var(--radius-xs);
  font-size:var(--font-size-12);color:var(--color-text-2)}
.todo-saas__row:hover{background:var(--color-surface-3)}
.todo-saas__n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.todo-saas__d{flex:0 0 auto;color:var(--color-text-3);font-variant-numeric:tabular-nums;white-space:nowrap}
.todo-saas__d.is-urgent{color:var(--color-danger-strong);font-weight:600}
.todo-saas__row .tag{flex:0 0 auto}

@media (max-width:767px){
  .todo-brief{padding:var(--space-3)}
  .todo-brief__top{margin-bottom:var(--space-2)}
  .todo-brief__row{flex-direction:column;gap:2px}
  .todo-brief__k{flex:0 0 auto}
  .todo-brief__count b{font-size:var(--font-size-16)}
}

/* ---------- 会员体系：双身份开关 + 权益矩阵 + 覆盖率组件（2026-10-30 Wave 1 新增） ---------- */
/* 身份开关：同屏一个，切换只切面板、不重新请求 */
.member-switch-card{padding:var(--space-3) var(--space-4);margin-bottom:var(--space-4)}
.member-switch{display:flex;flex-wrap:wrap;gap:var(--space-1);padding:2px;background:var(--color-surface-3);
  border-radius:var(--radius-md);width:fit-content;max-width:100%}
.member-switch__btn{display:inline-flex;align-items:center;gap:var(--space-2);min-height:32px;
  padding:0 var(--space-3);border:1px solid transparent;border-radius:var(--radius-sm);
  background:transparent;color:var(--color-text-2);font:inherit;font-size:var(--font-size-13);
  cursor:pointer;transition:var(--ease);white-space:nowrap}
.member-switch__btn:hover{color:var(--color-text-1)}
.member-switch__btn:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
.member-switch__btn[aria-pressed="true"]{background:var(--color-brand-soft);border-color:var(--color-brand);
  color:var(--color-brand-stronger);font-weight:600;box-shadow:inset 0 0 0 1px var(--color-brand)}
.member-switch__dot{width:8px;height:8px;border-radius:var(--radius-pill);background:currentColor;opacity:.4}
.member-switch__btn[aria-pressed="true"] .member-switch__dot{opacity:1}
.member-switch__count{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.member-switch__btn[aria-pressed="true"] .member-switch__count{color:var(--color-text-2)}
.member-switch__note{margin:var(--space-2) 0 0;font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body);overflow-wrap:anywhere}
.member-side[hidden]{display:none!important}

/* 权益矩阵：行=权益 列=档位 格=强度 */
.member-mx th:not(:first-child){text-align:center;min-width:96px}
.member-mx td:not(:first-child){text-align:center}
.member-mx__tier{display:block;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);margin-top:2px}
.member-mx__name{font-weight:600;min-width:150px}
.member-mx__sub{display:block;font-weight:400;font-size:var(--font-size-12);color:var(--color-text-3);
  white-space:normal;margin-top:2px}
.member-mx td.is-none{color:var(--color-text-3)}
.member-mx td.is-best{background:var(--color-brand-soft);color:var(--color-brand-stronger);font-weight:600}
.member-mx thead th.is-best{background:var(--color-brand-soft);color:var(--color-brand-stronger)}
.member-mx--buyer td.is-best{background:var(--color-violet-soft);color:var(--color-violet-strong)}
.member-mx--buyer thead th.is-best{background:var(--color-violet-soft);color:var(--color-violet-strong)}

/* 覆盖率统一组件：轨道 + 百分比（+ 计数） */
.member-cov{display:inline-flex;align-items:center;gap:var(--space-2);min-width:118px;max-width:100%}
.member-cov__track{flex:1;height:6px;min-width:48px;background:var(--color-surface-3);
  border-radius:var(--radius-pill);overflow:hidden}
.member-cov__fill{display:block;height:100%;border-radius:var(--radius-pill);background:var(--color-brand)}
.member-cov.is-warn .member-cov__fill{background:var(--color-warning)}
.member-cov.is-miss .member-cov__fill{background:var(--color-danger)}
.member-cov__val{font-size:var(--font-size-12);color:var(--color-text-2);
  font-variant-numeric:tabular-nums;white-space:nowrap}
.member-cov-cell{display:flex;flex-direction:column;gap:2px;min-width:132px}
.member-cov-sub{font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums}

/* 定级规则：因子 / 字段 / 缺口 */
.member-rule__f b{display:block;font-weight:600}
.member-rule__field{display:block;font-size:var(--font-size-12);color:var(--color-text-3);
  margin-top:2px;overflow-wrap:anywhere;white-space:normal}
.member-rule__note{margin-top:2px;font-size:var(--font-size-12);color:var(--color-text-3)}
.member-rule__gap{margin-top:2px;font-size:var(--font-size-12);color:var(--color-warning-strong)}
.member-rule-sum{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);
  padding:var(--space-2) var(--space-3);margin-bottom:var(--space-3);
  background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-sm)}
.member-rule-sum__k{font-size:var(--font-size-12);color:var(--color-text-2);font-weight:600}
.member-rule-sum .member-cov{min-width:160px}
.member-rule-sum .muted{font-size:var(--font-size-12)}

/* 身份构成说明 */
.member-notes{margin:var(--space-2) 0 0;padding-left:var(--space-4);font-size:var(--font-size-12);
  color:var(--color-text-2);line-height:var(--line-height-body)}
.member-notes li{margin-bottom:var(--space-1);overflow-wrap:anywhere}

/* 缺口 / 迁移 */
.member-gaps .nodata{margin-bottom:0}

@media (max-width:767px){
  .member-switch{width:100%}
  .member-switch__btn{flex:1 1 100%;justify-content:flex-start}
  .member-switch-card{padding:var(--space-3)}
  .member-mx th:not(:first-child){min-width:88px}
  .member-mx__name{min-width:132px;max-width:132px;white-space:normal}
  .member-rule-sum .member-cov{min-width:120px;flex:1}
}

/* 会员页 3 列小表在窄屏不必强制 680px（矩阵仍保留 680 → 横滚 + 首列冻结） */
@media (max-width:767px){
  /* 会员页 3 列小表（档位结构 / 迁移现状）内容本身不宽，不套用 680px 最小宽；
     矩阵与规则/阈值表仍保留 680 → 横滚 + 首列冻结 */
  .data.member-lv,
  .data.member-mig{min-width:0}
}

/* 今日必做：卡片头部的「刷新 / 展开全部 / 共 N 条」 */
.todo-card-extra{display:inline-flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.todo-count{font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums}
.todo-sub__head .link-btn{margin-left:auto}

/* ================= 22. 商家列表 · 表格密度与行内操作（Wave1 · Top3-2，S 级） =================
   范围：只作用于 #/merchants（.page-merchants / .filter-card--dense / .data--dense / .rowmenu）。
   不改全局 token、不动其他页面的 .data / .card 规则。
   目标：行高 63px → 44px，1440×900 一屏 8 行 → ≥12 行。 */

/* ---- 页头与筛选卡收薄：把纵向空间让给表格（合计约 -36px） ---- */
.page-merchants .page-head{margin-bottom:var(--space-3)}
.page-merchants .caliber-bar{margin-bottom:var(--space-3)}
.page-merchants .card{margin-bottom:var(--space-3)}
.filter-card--dense{padding:var(--space-2) var(--space-4)}
.filter-card--dense .toolbar{margin-bottom:var(--space-2)}
.filter-card--dense .toolbar .btn,
.filter-card--dense .toolbar .chip,
.filter-card--dense .toolbar select,
.filter-card--dense .toolbar .search-input{height:28px}
.filter-card--dense .summary-bar{padding:var(--space-1) 0;gap:var(--space-3)}

/* ---- 默认排序提示（表头上方一行小字） ---- */
.sort-hint{color:var(--color-text-3);cursor:help;min-width:0}
.sort-hint::before{content:"·";margin-right:var(--space-2);color:var(--color-text-4)}

/* ---- 紧凑表：行高 44px（设计规范 §5.5）、单行不换行 ---- */
.data--dense thead th{height:34px;padding:0 var(--space-3);line-height:16px}
.data--dense tbody td{height:44px;padding:0 var(--space-3);white-space:nowrap;line-height:20px}
.data--dense .col-check{width:36px;padding:0 var(--space-2);text-align:center}
.data--dense .col-ops{width:56px;padding:0 var(--space-2);text-align:center}
/* 超长文本：单行省略 + title（名称列允许名称省略，但 ID 恒可见） */
.data--dense .cell-ell{display:block;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.data--dense .cell-inline{display:inline-flex;align-items:baseline;gap:var(--space-1);
  max-width:200px;min-width:0;vertical-align:middle}
.data--dense .cell-inline .cell-ell{flex:0 1 auto;min-width:0;max-width:none}
.data--dense .cell-inline .tc-sub{flex:0 0 auto;font-variant-numeric:tabular-nums}
.data--dense .tc-date{font-variant-numeric:tabular-nums}

/* ---- 健康分条形（阈值沿用原型：≥70 健康 / 40–69 观察 / <40 风险） ---- */
.hbar{display:inline-flex;align-items:center;gap:var(--space-1);justify-content:flex-end}
.hbar__track{display:inline-block;width:44px;height:6px;border-radius:var(--radius-xs);
  background:var(--color-surface-3);overflow:hidden}
.hbar__fill{display:block;height:100%;border-radius:var(--radius-xs);background:var(--color-success)}
.hbar__fill--warn{background:var(--color-warning)}
.hbar__fill--danger{background:var(--color-danger)}
.hbar__num{font-variant-numeric:tabular-nums;font-weight:600;min-width:24px;text-align:right}

/* ---- 行内「⋯」按钮 + 浮层菜单（position:fixed，避开 .table-wrap 的横向滚动裁剪） ---- */
.row-more{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;
  color:var(--color-text-3);font-size:var(--font-size-14);line-height:1;cursor:pointer;
  transition:color var(--ease),background var(--ease)}
.row-more:hover{background:var(--color-surface-3);color:var(--color-brand-strong)}
.row-more:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
.row-more[aria-expanded="true"]{background:var(--color-brand-soft);color:var(--color-brand-stronger)}
.rowmenu{position:fixed;z-index:120;min-width:176px;max-width:280px;padding:var(--space-1);
  background:var(--color-surface);border:1px solid var(--color-border);
  border-radius:var(--radius-md);box-shadow:var(--shadow-2)}
.rowmenu[hidden]{display:none}
.rowmenu__item{display:flex;align-items:center;width:100%;height:32px;padding:0 var(--space-2);
  border:none;border-radius:var(--radius-xs);background:none;color:var(--color-text-2);
  font-size:var(--font-size-13);text-align:left;white-space:nowrap;cursor:pointer}
.rowmenu__item:hover,.rowmenu__item:focus-visible{background:var(--color-surface-3);
  color:var(--color-brand-strong);outline:none}
.rowmenu__item:disabled{opacity:.6;cursor:progress}
.rowmenu__head{margin-bottom:var(--space-1);padding:var(--space-1) var(--space-2);
  border-bottom:1px solid var(--color-border);
  font-size:var(--font-size-12);color:var(--color-text-3)}

/* ---- 首列冻结：展开全部列后横向滚动时，勾选列 + 商家名保持可见（≥1024） ---- */
@media (min-width:1024px){
  .data--merchants th:nth-child(1),.data--merchants td:nth-child(1){
    position:sticky;left:0;z-index:2;width:36px;min-width:36px;max-width:36px;
    background:var(--color-surface)}
  .data--merchants th:nth-child(1){background:var(--color-surface-2);z-index:3}
  .data--merchants th:nth-child(2),.data--merchants td:nth-child(2){
    position:sticky;left:36px;z-index:2;min-width:180px;background:var(--color-surface)}
  .data--merchants th:nth-child(2){background:var(--color-surface-2);z-index:3}
  .data--merchants td:nth-child(2){box-shadow:1px 0 0 var(--color-border)}
}
/* 冻结列的背景会盖掉行悬停色，这里显式补回 */
.data--merchants tbody tr:hover td:nth-child(1),
.data--merchants tbody tr:hover td:nth-child(2){background:var(--hover-bg)}

@media (max-width:1023px){
  .data--dense tbody td{padding:0 var(--space-2)}
  .data--dense .cell-inline{max-width:150px}
  .data--dense .cell-ell{max-width:110px}
}

/* ================= 23. 分层与分群（#/tiers · Wave 1：能看到 + 能派单） =================
   范围：只新增，不改动其他页面规则。
   - 矩阵横滚 + 首列冻结（≤767 由 table min-width 触发横滚）
   - 热力底色只用 surface-2 / brand-soft / brand-soft-2 派生，不新增色板
   - 未分层：虚线卡 + 斜纹底，视觉上是「体系外」而不是第五层 */

/* ---- 分层 KPI：层次感靠色点，不加阴影 ---- */
.caliber-bar--tiers .caliber-bar__sep{color:var(--color-text-3)}
.tier-kpi .k::before{content:"";width:6px;height:6px;border-radius:var(--radius-pill);
  background:var(--color-brand);flex:0 0 auto}
.tier-kpi[data-tier="头部"] .k::before{background:var(--color-violet)}
.tier-kpi[data-tier="腰部"] .k::before{background:var(--color-brand)}
.tier-kpi[data-tier="长尾"] .k::before{background:var(--color-info)}
.tier-kpi[data-tier="边缘"] .k::before{background:var(--color-slate)}
.tier-kpi .kpi-bound{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3);
  margin-left:var(--space-1)}
.tier-kpi .kpi-unit{font-size:var(--font-size-14);font-weight:400;color:var(--color-text-3);
  margin-left:2px}
.tier-kpi .s + .s{margin-top:2px}

/* ---- 未分层：必须上屏（斜纹底 + 虚线边） ---- */
.untiered-card{border-style:dashed;border-color:var(--color-border-strong);
  background-image:repeating-linear-gradient(135deg,transparent 0 8px,rgba(15,23,42,.024) 8px 16px)}
.untiered-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);
  flex-wrap:wrap;margin-bottom:var(--space-3)}
.untiered-kicker{font-size:var(--font-size-12);font-weight:600;color:var(--color-warning-strong);
  letter-spacing:.02em}
.untiered-v{font-size:var(--font-size-24);font-weight:700;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums}
.untiered-v span{font-size:var(--font-size-14);font-weight:400;color:var(--color-text-3);
  margin-left:var(--space-1)}
.untiered-s{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}
.untiered-s b{color:var(--color-text-1)}
.untiered-gmv{text-align:right;flex-shrink:0}
.untiered-gmv-k{font-size:var(--font-size-12);color:var(--color-text-3)}
.untiered-gmv-v{font-size:var(--font-size-20);font-weight:700;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums}
.untiered-gmv-s{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}

/* ---- 矩阵：合计行 + 横滚 + 首列冻结 ---- */
.mx-sum{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-4);
  margin-bottom:var(--space-3);font-size:var(--font-size-13);color:var(--color-text-2)}
.mx-sum b{font-weight:700;color:var(--color-text-1);font-variant-numeric:tabular-nums}
.mx-sum .muted{font-size:var(--font-size-12)}
.tier-mx{min-width:720px}
.tier-mx .mx-rowhead{width:172px;min-width:172px;max-width:172px;text-align:left;vertical-align:middle}
.tier-mx .mx-tier{display:block;font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.tier-mx .mx-tier-sub{display:block;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);margin-top:2px;white-space:nowrap}
.tier-mx .mx-col{text-align:center;min-width:136px}
.tier-mx .mx-col-sub{display:block;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);margin-top:2px;white-space:nowrap}
.tier-mx .mx-cell{text-align:center;vertical-align:top;padding:var(--space-1) var(--space-2);
  background:var(--color-surface)}
.tier-mx .mx-cell[data-heat="1"]{background:var(--color-surface-2)}
.tier-mx .mx-cell[data-heat="2"]{background:var(--color-brand-soft)}
.tier-mx .mx-cell[data-heat="3"]{background:var(--color-brand-soft-2)}
.tier-mx .mx-cell--none{background:var(--color-surface)}
.tier-mx .mx-open{display:flex;flex-direction:column;align-items:center;gap:2px;width:100%;
  padding:var(--space-1) var(--space-1);border-radius:var(--radius-sm);color:var(--color-text-1)}
.tier-mx .mx-open:hover{box-shadow:inset 0 0 0 1px var(--color-brand)}
.tier-mx .mx-n{font-size:var(--font-size-14);font-weight:600;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums}
.tier-mx .mx-u{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-2);
  margin-left:2px}
.tier-mx .mx-g{font-size:var(--font-size-12);color:var(--color-text-2);font-variant-numeric:tabular-nums}
.tier-mx .mx-dispatch{display:block;margin:2px auto 0;height:20px;padding:0 var(--space-2);
  font-size:var(--font-size-12);font-weight:600;color:var(--color-brand-strong);
  border-radius:var(--radius-pill)}
.tier-mx .mx-dispatch:hover:not(:disabled){background:var(--color-brand-soft)}
.tier-mx .mx-dispatch:disabled{color:var(--color-text-2);cursor:not-allowed}
.tier-mx .mx-none{color:var(--color-text-3)}
.tier-mx tfoot th,
.tier-mx tfoot td{background:var(--color-surface-2);border-top:1px solid var(--color-border);
  font-weight:600}
.tier-mx thead th:first-child,
.tier-mx tbody th{position:sticky;left:0;z-index:2;background:var(--color-surface-2)}
.tier-mx thead th:first-child{z-index:5}
.tier-mx tbody th{top:auto}
.tier-mx tfoot th{position:sticky;left:0;top:auto;z-index:2}
.tier-mx tbody tr:hover th{background:var(--color-surface-3)}
.mx-rowhead--untiered{background-image:repeating-linear-gradient(135deg,transparent 0 6px,
  rgba(15,23,42,.03) 6px 12px)}

/* ---- 热力图例 ---- */
.mx-legend{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-1) var(--space-2);
  margin-top:var(--space-3);font-size:var(--font-size-12);color:var(--color-text-3)}
.mx-legend__k{font-weight:600;color:var(--color-text-2)}
.mx-legend__sw{width:12px;height:12px;border-radius:var(--radius-xs);
  border:1px solid var(--color-border)}
.mx-legend__sw[data-heat="1"]{background:var(--color-surface-2)}
.mx-legend__sw[data-heat="2"]{background:var(--color-brand-soft)}
.mx-legend__sw[data-heat="3"]{background:var(--color-brand-soft-2)}
.mx-legend__none{margin-left:auto}

/* ---- 格内明细面板（点格后展开） ---- */
.cell-panel{margin-top:var(--space-4);padding:var(--space-4);background:var(--color-surface);
  border:1px solid var(--color-border-strong);border-radius:var(--radius-lg)}
.cell-panel[hidden]{display:none}
.cell-panel .mini{margin-bottom:var(--space-3)}
.cp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);
  flex-wrap:wrap;margin-bottom:var(--space-3)}
.cp-sub{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}
.cp-actions{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}
.cp-act{display:inline-flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}
.cp-owner{font-size:var(--font-size-12);color:var(--color-text-3)}
.cp-name{display:block;font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px}

/* ---- RFM 交叉表 ---- */
.rfm-x{min-width:720px}
.rfm-x .mx-col-sub{display:block;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);margin-top:2px;white-space:nowrap}
.rfm-x .rf-rowhead{min-width:96px;text-align:left;white-space:nowrap}
.rfm-x thead th:first-child,
.rfm-x tbody th{position:sticky;left:0;z-index:2;background:var(--color-surface-2)}
.rfm-x thead th:first-child{z-index:5}
.rfm-x tbody th{top:auto}
.rfm-x tfoot th,
.rfm-x tfoot td{background:var(--color-surface-2);border-top:1px solid var(--color-border);
  font-weight:600}
.rfm-x tfoot th{position:sticky;left:0;top:auto;z-index:2}
.rfm-x tbody tr:hover th{background:var(--color-surface-3)}

@media (max-width:1023px){
  .tier-mx{min-width:660px}
  .tier-mx .mx-rowhead{width:148px;min-width:148px;max-width:148px}
  .tier-mx .mx-col{min-width:124px}
  .rfm-x{min-width:660px}
}

@media (max-width:767px){
  .untiered-gmv{text-align:left}
  .untiered-head{gap:var(--space-3)}
  .tier-mx{min-width:640px}
  .tier-mx .mx-rowhead{width:132px;min-width:132px;max-width:132px}
  .tier-mx .mx-col{min-width:112px}
  .mx-sum{font-size:var(--font-size-12);gap:var(--space-1) var(--space-2)}
  .mx-legend__none{margin-left:0}
  .cell-panel{padding:var(--space-3)}
  .cp-actions{width:100%}
  .cp-actions .btn{flex:1 1 auto}
  .rfm-x{min-width:640px}
  .rfm-x .rf-rowhead{min-width:84px}
}

/* ================= 24. 线索与客户（#/crm · Wave 2 · Top3-1：公海池） =================
   范围：只新增 .crm-* 类，用于 #/crm；不改全局 token，不影响其他页面的 .card / .data。 */

/* ---- 页头：窗口期口径提示（D5） ---- */
.crm-window{display:flex;gap:var(--space-2);align-items:flex-start;margin-bottom:var(--space-4);
  padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);
  background:var(--color-warning-soft);border:1px solid var(--color-warning-soft);
  color:var(--color-warning-strong);font-size:var(--font-size-12);line-height:var(--line-height-body)}
.crm-window b{font-weight:700}
.crm-card-tags{display:inline-flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}

/* ---- ① 池态条（替换环图）：堆叠占比 + 五行明细 ---- */
.crm-pool__stack{display:flex;height:10px;border-radius:var(--radius-pill);overflow:hidden;
  background:var(--color-surface-3);margin:var(--space-1) 0 var(--space-3)}
.crm-seg{display:block;height:100%;min-width:2px;background:var(--color-brand)}
.crm-seg--violet{background:var(--color-violet)}
.crm-seg--teal{background:var(--color-teal)}
.crm-seg--amber{background:var(--color-amber)}
.crm-seg--slate{background:var(--color-slate)}
.crm-seg--shared{background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.55) 0 3px,transparent 3px 7px)}
.crm-pool__head,.crm-pool__row{display:grid;
  grid-template-columns:minmax(112px,168px) minmax(70px,1fr) 96px 64px 74px;
  gap:var(--space-3);align-items:center}
.crm-pool__head{font-size:var(--font-size-12);color:var(--color-text-3);
  padding-bottom:var(--space-1);border-bottom:1px solid var(--color-border)}
.crm-pool__hr{text-align:right}
.crm-pool__list{list-style:none;margin:0;padding:0}
.crm-pool__row{padding:var(--space-2) 0;border-bottom:1px solid var(--color-surface-3)}
.crm-pool__row:last-child{border-bottom:none}
.crm-pool__name{display:flex;align-items:center;gap:var(--space-2);min-width:0;
  font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.crm-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 auto;
  background:var(--color-brand);vertical-align:1px}
.crm-dot--brand{background:var(--color-brand)}
.crm-dot--violet{background:var(--color-violet)}
.crm-dot--teal{background:var(--color-teal)}
.crm-dot--amber{background:var(--color-amber)}
.crm-dot--slate{background:var(--color-slate)}
.crm-pool__chiptag{flex:0 0 auto;font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3);
  border:1px solid var(--color-border-strong);border-radius:var(--radius-pill);
  padding:0 var(--space-2);line-height:18px;white-space:nowrap}
.crm-pool__track{height:6px;border-radius:var(--radius-pill);background:var(--color-surface-3);overflow:hidden}
.crm-pool__fill{display:block;height:100%;border-radius:var(--radius-pill);min-width:2px;
  background:var(--color-brand)}
.crm-pool__fill--violet{background:var(--color-violet)}
.crm-pool__fill--teal{background:var(--color-teal)}
.crm-pool__fill--amber{background:var(--color-amber)}
.crm-pool__fill--slate{background:var(--color-slate)}
.crm-pool__fill.is-shared{background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.55) 0 3px,transparent 3px 7px)}
.crm-pool__n{text-align:right;font-size:var(--font-size-14);font-weight:600;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.crm-pool__share,.crm-pool__conv{text-align:right;font-size:var(--font-size-13);
  color:var(--color-text-2);font-variant-numeric:tabular-nums}
.crm-pool__sub{display:block;font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.crm-pool__foot{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);
  margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border);
  font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-pool__foot b{color:var(--color-text-1);font-variant-numeric:tabular-nums}
.crm-pool__warn{color:var(--color-warning-strong)}
.crm-tag-mini{display:inline-block;margin-left:var(--space-1);padding:0 var(--space-1);
  border:1px solid var(--color-border-strong);border-radius:var(--radius-xs);
  font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3);
  line-height:16px;vertical-align:1px}

/* ---- ② 规则条（四项） ---- */
.crm-rules__meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2) var(--space-4);
  margin-bottom:var(--space-3);font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-rules__k{font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-rules__k b{color:var(--color-text-1);font-variant-numeric:tabular-nums}
.crm-rules__k--muted{color:var(--color-text-2)}
.crm-rules{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3)}
.crm-rule{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;
  padding:var(--space-3);background:var(--color-surface);
  border:1px solid var(--color-border);border-radius:var(--radius-md)}
.crm-rule__head{display:flex;align-items:center;justify-content:space-between;
  gap:var(--space-2);flex-wrap:wrap}
.crm-rule__name{font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.crm-rule__v{font-size:var(--font-size-20);font-weight:700;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.crm-rule__detail{display:block;margin-top:2px;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);letter-spacing:0}
.crm-rule__desc{margin:0;font-size:var(--font-size-12);color:var(--color-text-2);
  line-height:var(--line-height-body)}
.crm-rule__foot{margin-top:auto;font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-rules__note{margin-top:var(--space-3);font-size:var(--font-size-12);line-height:var(--line-height-body)}

/* ---- ③ 公海池（模拟）· 行内动作 ---- */
.crm-callout{margin-bottom:var(--space-3);font-size:var(--font-size-12);line-height:var(--line-height-body)}
.crm-owner{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  margin-bottom:var(--space-3);padding:var(--space-2) var(--space-3);
  background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-sm)}
.crm-owner label{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2)}
.crm-owner__input{width:200px;flex:0 1 200px}
.crm-owner__hint{font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-ops{display:flex;align-items:center;gap:var(--space-1);justify-content:flex-end;white-space:nowrap}
.crm-ops .btn.is-off{opacity:.45}
.data--pool{min-width:900px}
.data--pool .crm-gap-cell{min-width:220px;max-width:340px;font-size:var(--font-size-12);
  color:var(--color-text-2);white-space:normal;line-height:var(--line-height-body)}
.data--pool td.tc-name{white-space:nowrap}

/* ---- 动作回执（请求真实发出；未落库必须显式） ---- */
.crm-receipt{margin-top:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);
  background:var(--color-surface-2);border:1px solid var(--color-border-strong)}
.crm-receipt[hidden]{display:none}
.crm-receipt__head{display:flex;align-items:center;justify-content:space-between;
  gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)}
.crm-receipt__title{font-size:var(--font-size-13);font-weight:600}
.crm-receipt__rows{display:grid;grid-template-columns:max-content minmax(0,1fr);
  gap:var(--space-1) var(--space-3);margin:0;font-size:var(--font-size-12)}
.crm-receipt__rows dt{color:var(--color-text-3)}
.crm-receipt__rows dd{margin:0;color:var(--color-text-2);overflow-wrap:anywhere}

/* ---- ⑤ 分母缺失双栏 / ⑥ 客户版本 ---- */
.crm-gaps{gap:var(--space-3)}
.crm-gaps .nodata{margin-bottom:0}
.crm-ver-meta{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);
  margin-bottom:var(--space-2);font-size:var(--font-size-12);color:var(--color-text-3)}
.crm-ver-meta b{color:var(--color-text-1);font-variant-numeric:tabular-nums}

@media (max-width:1279px){
  .crm-rules{grid-template-columns:repeat(2,1fr)}
}

@media (max-width:767px){
  /* 池态行改为三段：名称+数量 / 构成条 / 占比+转化 */
  .crm-pool__head{display:none}
  .crm-pool__row{grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"name n" "track track" "share conv";
    gap:var(--space-1) var(--space-3);padding:var(--space-3) 0}
  .crm-pool__name{grid-area:name}
  .crm-pool__n{grid-area:n}
  .crm-pool__track{grid-area:track;margin-top:var(--space-1)}
  .crm-pool__share{grid-area:share;text-align:left;font-size:var(--font-size-12)}
  .crm-pool__conv{grid-area:conv;text-align:right;font-size:var(--font-size-12)}
  .crm-pool__share::before{content:"占比 ";color:var(--color-text-3);font-variant-numeric:normal}
  .crm-pool__conv::before{content:"态内转化 ";color:var(--color-text-3);font-variant-numeric:normal}
  .crm-pool__foot{flex-direction:column;align-items:flex-start;gap:var(--space-1)}
  .crm-rules{grid-template-columns:1fr}
  .crm-rule__v{font-size:var(--font-size-16)}
  .crm-owner__input{flex:1 1 100%;width:100%}
  .crm-ops{gap:var(--space-1)}
  .crm-receipt__rows{grid-template-columns:1fr;gap:2px}
  .crm-receipt__rows dt{margin-top:var(--space-1)}
  .crm-ver-meta{gap:var(--space-1) var(--space-2)}
}

/* ================= 21. 商家 360 首屏：判定条 / 基准化 KPI / 健康分因子（Top3-1） ================= */
.pf-id{min-width:0;flex:1}
.pf-health__max{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}

/* ---- 判定条：一句话结论 + 置信度 + 看依据 ---- */
.m360-verdict{display:flex;align-items:flex-start;gap:var(--space-3);margin-top:var(--space-3);
  padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);
  border-left:3px solid var(--color-border-strong);border-radius:var(--radius-sm);
  background:var(--color-surface-2)}
.m360-verdict[data-tone="good"]{background:var(--color-success-soft);border-left-color:var(--color-success)}
.m360-verdict[data-tone="warn"]{background:var(--color-warning-soft);border-left-color:var(--color-warning)}
.m360-verdict[data-tone="bad"]{background:var(--color-danger-soft);border-left-color:var(--color-danger)}
.m360-verdict[data-tone="muted"]{background:var(--color-surface-2);border-left-color:var(--color-text-4)}
.m360-verdict[data-tone="flat"]{background:var(--color-surface-2);border-left-color:var(--color-border-strong)}
.m360-verdict__main{flex:1;min-width:0}
.m360-verdict__text{font-size:var(--font-size-13);line-height:var(--line-height-body);color:var(--color-text-1);text-wrap:pretty}
.m360-verdict__text b{font-weight:600}
.m360-verdict__meta{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  margin-top:var(--space-2);font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-evidence-btn{margin-left:auto}

.m360-evidence{margin-top:var(--space-2);padding:var(--space-3) var(--space-4);
  border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface-2)}
.m360-evidence__h{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2);
  margin-bottom:var(--space-1)}
.m360-evidence__row{display:grid;grid-template-columns:112px minmax(0,1fr) auto;gap:var(--space-2);
  align-items:start;padding:var(--space-2) 0;border-top:1px solid var(--color-border)}
.m360-evidence__row:first-child{border-top:none}
.m360-evidence__k{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2)}
.m360-evidence__v{font-size:var(--font-size-12);line-height:var(--line-height-body);color:var(--color-text-1)}
.m360-evidence__c{white-space:nowrap}
.m360-evidence__note{margin-top:var(--space-2);font-size:var(--font-size-12);line-height:var(--line-height-body);
  color:var(--color-text-3)}

/* ---- 4 个基准化 KPI ---- */
.m360-bench-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);
  flex-wrap:wrap;margin:var(--space-4) 0 var(--space-2)}
.m360-bench-head__t{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  font-size:var(--font-size-14);font-weight:600}
.m360-bench-head__s{font-size:var(--font-size-12);line-height:1.5;color:var(--color-text-3)}
.m360-bench{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3)}
.m360-bench__card{min-width:0;padding:var(--space-3);border:1px solid var(--color-border);
  border-radius:var(--radius-lg);background:var(--color-surface)}
.m360-bench__k{font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-bench__v{margin-top:var(--space-1);font-size:var(--font-size-24);font-weight:700;
  letter-spacing:-.02em;line-height:var(--line-height-tight);font-variant-numeric:tabular-nums}
.m360-bench__cmp{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;
  margin-top:var(--space-1)}
.m360-bench__delta{font-size:var(--font-size-12);font-weight:600;white-space:nowrap;
  font-variant-numeric:tabular-nums}
.m360-bench__delta.is-good{color:var(--color-success-strong)}
.m360-bench__delta.is-bad{color:var(--color-danger-strong)}
.m360-bench__delta.is-flat{color:var(--color-text-3)}
.m360-bench__med{font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-bench__foot{display:flex;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap;
  margin-top:var(--space-2);font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.m360-bench__foot span:first-child{flex:1 1 auto}

/* 分位轨道：10 段 + 当前位置打点（位置由 --p 数据驱动） */
.m360-track{position:relative;display:grid;grid-template-columns:repeat(10,1fr);gap:var(--space-1);
  height:6px;margin-top:var(--space-2)}
.m360-track__seg{background:var(--color-surface-3);border-radius:var(--radius-xs)}
.m360-track[data-tone="good"] .m360-track__seg.is-fill{background:var(--color-success)}
.m360-track[data-tone="warn"] .m360-track__seg.is-fill{background:var(--color-warning)}
.m360-track[data-tone="bad"] .m360-track__seg.is-fill{background:var(--color-danger)}
.m360-track[data-tone="flat"] .m360-track__seg.is-fill{background:var(--color-brand)}
.m360-track__dot{position:absolute;top:50%;left:clamp(5px, calc(var(--p, 0) * 1%), calc(100% - 5px));
  width:10px;height:10px;border-radius:var(--radius-pill);transform:translate(-50%,-50%);
  background:var(--color-text-2);border:2px solid var(--color-surface);
  box-shadow:0 0 0 1px var(--color-border)}
.m360-track[data-tone="good"] .m360-track__dot{background:var(--color-success-strong)}
.m360-track[data-tone="warn"] .m360-track__dot{background:var(--color-warning-strong)}
.m360-track[data-tone="bad"] .m360-track__dot{background:var(--color-danger-strong)}
.m360-track[data-tone="flat"] .m360-track__dot{background:var(--color-brand-strong)}
.m360-track.is-empty{height:6px;background:var(--color-surface-3);border-radius:var(--radius-pill)}

/* 其他 90 天指标（原 6 个裸 KPI 中下沉的 4 个，保留内容不丢） */
.m360-minor{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);
  margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px solid var(--color-border);
  font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-minor b{font-weight:600;color:var(--color-text-2);font-variant-numeric:tabular-nums}
.m360-minor__label{color:var(--color-text-3)}

/* ---- 健康分因子条 ---- */
.m360-mini{display:flex;gap:var(--space-1);width:104px;height:6px;margin-top:var(--space-1)}
.m360-mini__seg{position:relative;flex:1;min-width:0;background:var(--color-surface-3);
  border-radius:var(--radius-xs);overflow:hidden}
.m360-mini__seg b{display:block;height:100%;width:var(--v,0%);background:var(--color-brand);
  border-radius:var(--radius-xs)}
.m360-mini__seg[data-tone="good"] b{background:var(--color-success)}
.m360-mini__seg[data-tone="warn"] b{background:var(--color-warning)}
.m360-mini__seg[data-tone="bad"] b{background:var(--color-danger)}
.m360-mini__seg[data-tone="miss"]{background:var(--color-border)}
.m360-hf__head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  margin-bottom:var(--space-3)}
.m360-hf__scorebig{font-size:var(--font-size-24);font-weight:700;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums}
.m360-hf__max{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.m360-hf__cmp{font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-hf__rows{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2) var(--space-5)}
.m360-hf__row{display:grid;grid-template-columns:150px minmax(80px,1fr) 92px 76px;
  gap:var(--space-3);align-items:center}
.m360-hf__name{min-width:0;font-size:var(--font-size-13);font-weight:600}
.m360-hf__metric{display:block;font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.m360-hf__bar{height:8px;background:var(--color-surface-3);border-radius:var(--radius-pill);overflow:hidden}
.m360-hf__bar i{display:block;height:100%;width:var(--w,0%);border-radius:var(--radius-pill);
  background:var(--color-brand)}
.m360-hf__row[data-tone="good"] .m360-hf__bar i{background:var(--color-success)}
.m360-hf__row[data-tone="warn"] .m360-hf__bar i{background:var(--color-warning)}
.m360-hf__row[data-tone="bad"] .m360-hf__bar i{background:var(--color-danger)}
.m360-hf__row[data-tone="miss"] .m360-hf__bar i{display:none}
.m360-hf__score{text-align:right;font-size:var(--font-size-13);font-weight:600;
  font-variant-numeric:tabular-nums}
.m360-hf__weight{text-align:right;white-space:nowrap;font-size:var(--font-size-12);
  color:var(--color-text-3);font-variant-numeric:tabular-nums}
.m360-hf__cov{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--color-border)}
.m360-hf__cov-top{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;
  font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-hf__cov-label{font-weight:600;color:var(--color-text-2)}
.m360-hf__cov-val{font-weight:600;color:var(--color-text-1);font-variant-numeric:tabular-nums}
.m360-hf__cov-note{margin-left:auto;font-variant-numeric:tabular-nums}
.m360-cov__track{display:block;height:6px;margin-top:var(--space-1);overflow:hidden;
  background:var(--color-surface-3);border-radius:var(--radius-pill)}
.m360-cov__track i{display:block;height:100%;width:var(--v,0%);background:var(--color-brand);
  border-radius:var(--radius-pill)}
.m360-cov[data-state="ok"] .m360-cov__track i{background:var(--color-success)}
.m360-cov[data-state="warn"] .m360-cov__track i{background:var(--color-warning)}
.m360-cov[data-state="miss"] .m360-cov__track i{background:var(--color-danger)}
.m360-hf__note{margin:var(--space-2) 0 0;font-size:var(--font-size-12)}
.m360-hf__src{margin-top:var(--space-1);font-size:var(--font-size-12);line-height:var(--line-height-body);
  color:var(--color-text-3)}

@media (max-width:1023px){
  .m360-bench{grid-template-columns:repeat(2,1fr)}
  .m360-hf__rows{grid-template-columns:1fr}
  .m360-hf__row{grid-template-columns:130px minmax(60px,1fr) 84px 72px}
}

@media (max-width:767px){
  .m360-verdict{padding:var(--space-3);margin-top:var(--space-2)}
  .pf-health{flex:1 0 100%;width:100%;margin-left:0;padding-top:var(--space-1);
    border-top:1px solid var(--color-border);display:flex;flex-wrap:wrap;align-items:center;
    gap:var(--space-1) var(--space-2)}
  .pf-health__value{font-size:var(--font-size-20)}
  .m360-mini{width:80px}
  .m360-hf__scorebig{font-size:var(--font-size-20)}
  .m360-evidence{padding:var(--space-3)}
  .m360-evidence__row{grid-template-columns:1fr auto}
  .m360-evidence__v{grid-column:1 / -1;grid-row:2}
  .m360-bench__v{font-size:var(--font-size-20)}
  .m360-hf__row{grid-template-columns:1fr auto;grid-template-areas:"name score" "bar bar" "weight weight";
    gap:var(--space-1) var(--space-2);padding-bottom:var(--space-1);
    border-bottom:1px solid var(--color-surface-3)}
  .m360-hf__name{grid-area:name}
  .m360-hf__bar{grid-area:bar}
  .m360-hf__score{grid-area:score}
  .m360-hf__weight{grid-area:weight;text-align:left}
  .m360-hf__cov-note{margin-left:0}
  .m360-minor{gap:var(--space-1) var(--space-3)}
  .m360-evidence-btn{margin-left:0}
}

@media (max-width:359px){
  .m360-bench{grid-template-columns:1fr}
}

/* 池态表内小圆点与文字之间留出间距（.crm-dot 在 flex 行里已由 gap 控制） */
.data--pool td.tc-name .crm-dot{margin-right:var(--space-2)}

/* #/crm：口径条分隔符用 text-3（原全局 text-4 仅限装饰，作为文本节点对比度不足） */
.page-crm .caliber-bar__sep{color:var(--color-text-3)}

@media (max-width:1279px){
  .m360-hf__rows{grid-template-columns:1fr}
}
.page-crm .crm-owner__input:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
@media (max-width:767px){
  /* 客户版本仅两列，窄屏不套用 680px 最小宽，避免无意义的横向滚动 */
  .data.data--crm-ver{min-width:0}
}

/* ==========================================================================
   #/trade Wave 2（2026-10-30）：客户通路卡 + 观察窗漏斗
   只新增；token 全部走 :root 变量，不引入新色值/新字号/新圆角。
   作用范围全部收在 .page-trade 内，避免影响其他页面。
   ========================================================================== */
.page-trade .card{margin-bottom:var(--space-4)}
.page-trade .grid2{margin-bottom:0}
.page-trade .trade-sub{margin:0 0 var(--space-2);font-size:var(--font-size-12);
  color:var(--color-text-3);line-height:var(--line-height-body)}
.page-trade .trade-sub b{color:var(--color-text-2);font-weight:600}
.page-trade .trade-sub--warn{color:var(--color-text-2);background:var(--color-warning-soft);
  border:1px solid var(--color-warning-soft);border-radius:var(--radius-sm);
  padding:var(--space-2) var(--space-3);margin:var(--space-3) 0}

/* ---- 客户通路卡（规模 → 成交/未成交 → 转化率 + 金额占比 + 客单价） ---- */
.page-trade .trade-channels{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:var(--space-3);margin-top:var(--space-2)}
.page-trade .pcard{display:flex;flex-direction:column;gap:var(--space-2);
  background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-lg);padding:var(--space-3);min-width:0}
.page-trade .pcard--muted{background:var(--color-surface)}
.page-trade .pcard__head{display:flex;align-items:center;justify-content:space-between;
  gap:var(--space-2);min-width:0}
.page-trade .pcard__title{margin:0;font-size:var(--font-size-14);font-weight:600;
  line-height:var(--line-height-title);color:var(--color-text-1);min-width:0}
.page-trade .pcard__sub{margin:0;font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body);min-height:2.6em}
.page-trade .pcard__rows{margin:0;display:flex;flex-direction:column;gap:0}
.page-trade .pcard__row{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--space-2);padding:var(--space-1) 0;border-bottom:1px dashed var(--color-border)}
.page-trade .pcard__row:last-child{border-bottom:0}
.page-trade .pcard__row dt{font-size:var(--font-size-12);color:var(--color-text-3);
  font-weight:400;min-width:0}
.page-trade .pcard__row dd{margin:0;font-size:var(--font-size-13);font-weight:600;
  color:var(--color-text-1);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.page-trade .pcard__row--hero dt{color:var(--color-text-2);font-weight:600}
.page-trade .pcard__row--hero dd{font-size:var(--font-size-16)}
.page-trade .pcard__foot{margin-top:auto;background:var(--color-brand-soft);
  border-radius:var(--radius-sm);padding:var(--space-2);font-size:var(--font-size-12);
  color:var(--color-brand-stronger);line-height:var(--line-height-body)}
.page-trade .pcard__foot b{font-weight:700}
.page-trade .pcard__note{margin:0;font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body)}
.page-trade .pcard .nodata{margin:0}
.page-trade .pcard .nodata__rows{grid-template-columns:max-content minmax(0,1fr)}
.page-trade .trade-note{display:flex;align-items:flex-start;gap:var(--space-2);
  margin-top:var(--space-3);padding:var(--space-2) var(--space-3);
  background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-sm);font-size:var(--font-size-12);
  color:var(--color-text-3);line-height:var(--line-height-body)}
.page-trade .trade-note b{color:var(--color-text-2);font-weight:600}
.page-trade .trade-note .tag{flex:0 0 auto}

/* ---- 观察窗漏斗 ---- */
.page-trade .funnel-win{display:flex;flex-wrap:wrap;gap:var(--space-2);margin:var(--space-2) 0 var(--space-3)}
.page-trade .funnel-win .chip{height:28px;font-size:var(--font-size-12);padding:0 var(--space-2)}
.page-trade .tflow{display:flex;flex-direction:column;gap:var(--space-1);margin:0}
.page-trade .tflow[hidden]{display:none}
.page-trade .tflow__step{padding:var(--space-2) 0 var(--space-1)}
.page-trade .tflow__row{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;min-width:0}
.page-trade .tflow__name{font-size:var(--font-size-13);color:var(--color-text-2);min-width:56px}
.page-trade .tflow__abs{font-size:var(--font-size-16);font-weight:700;color:var(--color-text-1);
  font-variant-numeric:tabular-nums;margin-left:auto}
.page-trade .tflow__unit{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.page-trade .tflow__rate{font-size:var(--font-size-12);font-weight:600;color:var(--color-brand-stronger);
  font-variant-numeric:tabular-nums;min-width:48px;text-align:right}
.page-trade .tflow__win{flex:0 0 auto}
.page-trade .tflow__bar{height:4px;background:var(--color-surface-3);border-radius:var(--radius-pill);
  margin-top:var(--space-1);overflow:hidden}
.page-trade .tflow__bar > span{display:block;height:100%;background:var(--color-brand);
  border-radius:inherit;min-width:2px}
.page-trade .tflow__link{display:flex;align-items:center;gap:var(--space-2);
  padding:0 0 0 var(--space-3);margin-left:var(--space-3);
  border-left:1px dashed var(--color-border-strong)}
.page-trade .tflow__drop{font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.page-trade .tflow__overall{margin:var(--space-2) 0 0;padding-top:var(--space-2);
  border-top:1px solid var(--color-border);font-size:var(--font-size-13);color:var(--color-text-2)}
.page-trade .tflow__overall b{font-size:var(--font-size-16);color:var(--color-text-1);
  font-variant-numeric:tabular-nums}
.page-trade .card .table-wrap{margin-top:var(--space-2)}
.page-trade .chart-caption{margin-top:var(--space-2)}

@media (max-width:1359px){
  /* 四卡并排需要 ≥1360；1280 下 2×2 更可读，且不影响 1440 目标档 */
  .page-trade .trade-channels{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:767px){
  .page-trade .trade-channels{grid-template-columns:1fr}
  .page-trade .pcard__sub{min-height:0}
  .page-trade .tflow__abs{margin-left:0}
  .page-trade .tflow__row{gap:var(--space-1) var(--space-2)}
  .page-trade .pcard__row{flex-wrap:wrap}
}

/* ================= 25. 商家列表 · 保存视图 + 列配置（Wave2 · Top3-1，M 级） =================
   范围：只新增，不改动其他页面/既有规则。复用既有 token 与组件形态
         （.chip / .btn / .card / .table-foot / .checkbox），不新增色板与字号。
   - 视图条：44px 高、可横滚；chip 带命中量，当前项沿用 .chip[aria-pressed="true"] 主色填充
   - 列配置：表头「⋮」与工具栏按钮指向同一浮层面板（position:fixed，避开 .table-wrap 的横向滚动裁剪）
   - 视图弹窗：原生 <dialog>，不引入新库；遮罩色沿用 .scrim 的 rgba(15,23,42,.45) */

/* ---- 视图条 ---- */
.viewbar-card{padding:var(--space-2) var(--space-4)}
.viewbar{display:flex;align-items:center;gap:var(--space-2);min-height:44px}
.viewbar__scroll{display:flex;align-items:center;gap:var(--space-2);flex:1 1 auto;min-width:0;
  overflow-x:auto;scrollbar-width:thin;padding:2px 0}
.viewbar__group{flex:0 0 auto;font-size:var(--font-size-12);color:var(--color-text-3);white-space:nowrap}
.viewbar__group:not(:first-child){margin-left:var(--space-2);padding-left:var(--space-2);
  border-left:1px solid var(--color-border)}
.viewbar__ops{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto;margin-left:auto}
.viewbar__act{font-size:var(--font-size-12);color:var(--color-text-3);white-space:nowrap}
.viewbar__act:hover{color:var(--color-brand-strong)}
.vchip{flex:0 0 auto;gap:var(--space-2);height:28px;padding:0 var(--space-2);white-space:nowrap}
.vchip__label{max-width:168px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vchip__n{font-size:var(--font-size-12);font-weight:600;font-variant-numeric:tabular-nums;
  color:var(--color-text-3)}
.vchip.is-on .vchip__n,.vchip[aria-pressed="true"] .vchip__n{color:inherit}
.vchip__tag{display:inline-flex;align-items:center;height:16px;padding:0 4px;border-radius:var(--radius-pill);
  background:var(--color-warning-soft);color:var(--color-warning-strong);
  font-size:var(--font-size-12);font-weight:600;line-height:1}
.vchip--gap{border-style:dashed}

/* ---- 工具栏右侧（列配置 / 导出） ---- */
.merch-toolbar__end{display:flex;align-items:center;gap:var(--space-2);margin-left:auto;flex-wrap:wrap}

/* ---- 表头：排序指示落到 th（aria-sort 在 th 上才合规） ---- */
.data--dense th[aria-sort="descending"] .sort-btn{color:var(--color-brand-strong)}
.data--dense th[aria-sort="descending"] .sort-btn::after{content:"↓";color:var(--color-brand-strong)}

/* ---- 表头「⋮」列配置入口 + 待接入列 ---- */
.data--dense .col-colcfg{width:40px;padding:0 var(--space-1);text-align:center}
.th-cols{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;
  border:1px solid transparent;border-radius:var(--radius-sm);background:none;
  color:var(--color-text-3);font-size:var(--font-size-14);line-height:1;cursor:pointer}
.th-cols:hover{background:var(--color-surface-3);color:var(--color-brand-strong)}
.th-cols[aria-expanded="true"]{background:var(--color-brand-soft);color:var(--color-brand-stronger)}
.th-gap{display:inline-flex;align-items:center;gap:var(--space-1);white-space:nowrap}
.th-gap__tag{display:inline-flex;align-items:center;height:16px;padding:0 4px;border-radius:var(--radius-pill);
  background:var(--color-warning-soft);color:var(--color-warning-strong);
  font-size:var(--font-size-12);font-weight:600;line-height:1}
.data--dense .col-gap{white-space:nowrap}

/* ---- 列配置浮层 ---- */
.colpanel{position:fixed;z-index:130;display:flex;flex-direction:column;width:328px;
  max-height:min(78vh,600px);padding:var(--space-3);background:var(--color-surface);
  border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-2)}
.colpanel[hidden]{display:none}
.colpanel__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);
  padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}
.colpanel__title{font-size:var(--font-size-13);font-weight:600}
.colpanel__now{font-size:var(--font-size-12);color:var(--color-text-3)}
.colpanel__list{display:flex;flex-direction:column;gap:var(--space-2);flex:1 1 auto;min-height:0;
  overflow-y:auto;overscroll-behavior:contain;padding:var(--space-2) 0}
.colpanel__group-t{font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-1)}
.colpanel__items{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-1) var(--space-2)}
.colpanel__item{display:flex;align-items:center;gap:var(--space-2);min-height:28px;
  font-size:var(--font-size-13);color:var(--color-text-2);cursor:pointer}
.colpanel__item.is-fixed{color:var(--color-text-3);cursor:default}
.colpanel__name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.colpanel__fixed{font-size:var(--font-size-12);color:var(--color-text-3)}
.colpanel__foot{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-2);
  border-top:1px solid var(--color-border)}
.colpanel__note{font-size:var(--font-size-12);color:var(--color-text-3)}

/* ---- 视图弹窗（原生 dialog） ---- */
.vdialog{position:fixed;inset:0;margin:auto;width:min(440px,calc(100vw - 32px));max-height:calc(100vh - 32px);
  padding:0;border:none;border-radius:var(--radius-lg);
  background:var(--color-surface);box-shadow:var(--shadow-2);overflow:auto}
.vdialog::backdrop{background:rgba(15,23,42,.45)}
.vdialog__inner{padding:var(--space-4)}
.vdialog__head{font-size:var(--font-size-16);font-weight:600;color:var(--color-text-1);
  margin-bottom:var(--space-3)}
.vdialog__label{display:block;font-size:var(--font-size-12);color:var(--color-text-3);margin-bottom:var(--space-1)}
.vdialog__input{width:100%}
.vdialog__desc{font-size:var(--font-size-12);color:var(--color-text-3);line-height:var(--line-height-body);
  margin-top:var(--space-2)}
.vdialog__text{font-size:var(--font-size-13);color:var(--color-text-2);line-height:var(--line-height-body)}
.vdialog__err{font-size:var(--font-size-12);color:var(--color-danger-strong);margin-top:var(--space-2)}
.vdialog__acts{display:flex;justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4)}

/* ---- 即将到期：未接入说明卡 ---- */
.merch-expiring{padding-top:var(--space-2)}
.merch-expiring__acts{display:flex;flex-wrap:wrap;gap:var(--space-2);
  padding:var(--space-2) var(--space-4) var(--space-3)}

/* ---- 分页：每页条数 ---- */
.pager-size{display:inline-flex;align-items:center;gap:var(--space-2)}
.pager-size select{height:28px}

@media (max-width:767px){
  .viewbar{flex-wrap:wrap;row-gap:var(--space-2)}
  .viewbar__scroll{flex-basis:100%;order:1}
  .viewbar__ops{order:2;width:100%;margin-left:0;justify-content:flex-end}
  .merch-toolbar__end{margin-left:0;width:100%;justify-content:flex-end}
  .colpanel{left:8px !important;right:8px;width:auto}
  .vdialog__acts .btn{flex:1 1 0}
  .pager-size{margin-left:auto}
}

/* 视图条：分享链接带来的「当前视图」标记（本机未保存） */
.vchip--ext{cursor:default}
.vchip__tag--info{background:var(--color-info-soft);color:var(--color-info-strong)}

/* #/trade：全期对照行（与近 90 天窗口并列说明，避免被误读为口径漂移） */
.page-trade .trade-sub--all{margin:var(--space-2) 0 0}

/* ================= 23. 会员体系 · Wave 2：分值制 + 双池（Top3-1） =================
   只作用于 #/member；不改全局 token 与既有 .member-* 规则（Wave1 保留）。
   结构：当前商家双池 → 我的位置（分值/档位/差距/因子）→ 五档分布 → 阈值现实性 → 双池规则 → 权益矩阵。 */

/* ---- 当前商家与双池 ---- */
.member-pool{padding:var(--space-4);margin-bottom:var(--space-4);min-width:0}
.member-pool__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}
.member-pool__title{font-size:var(--font-size-16);font-weight:600;color:var(--color-text-1);line-height:var(--line-height-title)}
.member-pool__id{font-family:var(--font-mono);font-weight:400;color:var(--color-text-3);font-size:var(--font-size-13);margin-left:var(--space-1)}
.member-pool__sub{margin-top:var(--space-1);font-size:var(--font-size-12);color:var(--color-text-3);
  line-height:var(--line-height-body);max-width:920px}
.member-pool__sub b{color:var(--color-text-2)}
.member-find{display:flex;gap:var(--space-2);align-items:center;flex:0 0 auto}
.member-find__input{width:132px;height:32px}
.member-pool__grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-top:var(--space-3)}
.member-pool__item{border:1px solid var(--color-border);border-radius:var(--radius-sm);
  padding:var(--space-3);background:var(--color-surface-2);min-width:0}
.member-pool__item.is-current{border-color:var(--color-brand);background:var(--color-brand-soft)}
.member-pool__who{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-12);
  font-weight:600;color:var(--color-text-2)}
.member-pool__now{font-size:var(--font-size-12);font-weight:400;color:var(--color-brand-stronger)}
.member-pool__line{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2)}
.member-pool__rule{font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.member-pool__formula{margin-top:var(--space-1);font-size:var(--font-size-12);color:var(--color-text-2);
  line-height:var(--line-height-body);overflow-wrap:anywhere}
.member-pool__demo{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px dashed var(--color-border)}
.member-pool__demo-k{font-size:var(--font-size-12);color:var(--color-text-3)}
.member-chip{display:inline-flex;align-items:center;gap:var(--space-2);height:32px;
  padding:0 var(--space-3);border:1px solid var(--color-border-strong);background:var(--color-surface);
  border-radius:var(--radius-pill);font-size:var(--font-size-12);color:var(--color-text-2);
  cursor:pointer;min-width:0;max-width:100%}
.member-chip:hover{border-color:var(--color-brand);color:var(--color-brand-stronger)}
.member-chip:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
.member-chip b{font-weight:600;font-variant-numeric:tabular-nums}
.member-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
.member-chip i{font-style:normal;color:var(--color-text-3)}
.member-chip[aria-pressed="true"]{background:var(--color-brand-soft);border-color:var(--color-brand);
  color:var(--color-brand-stronger)}
.member-chip[aria-pressed="true"] i{color:var(--color-brand-stronger)}

/* ---- S1 我的位置 ---- */
.member-me{padding:var(--space-4);min-width:0}
.member-me__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}
.member-me__main{min-width:0;flex:1 1 480px}
.member-me__eyebrow{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}
.member-me__scoreline{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2)}
.member-me__num{font-size:var(--font-size-24);font-weight:700;line-height:var(--line-height-tight);
  color:var(--color-text-1);font-variant-numeric:tabular-nums}
.member-me__unit{font-size:var(--font-size-13);color:var(--color-text-3)}
.member-me__merchant{margin-left:var(--space-2);font-size:var(--font-size-12);color:var(--color-text-3)}
.member-me__gap{margin:var(--space-2) 0 0;font-size:var(--font-size-13);color:var(--color-text-2);
  line-height:var(--line-height-body);overflow-wrap:anywhere}
.member-me__gap b{color:var(--color-text-1)}
.member-me__side{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-1);
  text-align:right;font-size:var(--font-size-12);color:var(--color-text-3);min-width:0}
.member-me__meta b{color:var(--color-text-1);font-variant-numeric:tabular-nums}

/* 分值刻度条：5 段等宽 + 游标 */
.member-scale{margin:var(--space-5) 0 var(--space-3)}
.member-scale__track{position:relative;display:flex;height:10px;border-radius:var(--radius-pill);
  background:var(--color-surface-3)}
.member-scale__seg{display:block;height:100%}
.member-scale__seg--1{width:20%;background:var(--color-surface-3);border-radius:var(--radius-pill) 0 0 var(--radius-pill)}
.member-scale__seg--2{width:20%;background:var(--color-brand-soft)}
.member-scale__seg--3{width:20%;background:var(--color-brand-soft-2)}
.member-scale__seg--4{width:20%;background:var(--color-brand)}
.member-scale__seg--5{width:20%;background:var(--color-brand-strong);border-radius:0 var(--radius-pill) var(--radius-pill) 0}
.member-scale__seg.is-on{box-shadow:inset 0 0 0 2px var(--color-text-1)}
.member-scale__mark{position:absolute;top:-6px;width:2px;height:22px;background:var(--color-text-1);
  border-radius:var(--radius-xs);transform:translateX(-50%)}
.member-scale__mark b{position:absolute;top:-20px;left:50%;transform:translateX(-50%);
  font-size:var(--font-size-12);font-weight:600;color:var(--color-surface);background:var(--color-text-1);
  padding:1px var(--space-1);border-radius:var(--radius-xs);white-space:nowrap;
  font-variant-numeric:tabular-nums}
.member-scale__labs{display:grid;grid-template-columns:repeat(5,1fr) auto;margin-top:var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-3)}
.member-scale__lab{display:flex;align-items:center;gap:var(--space-1);min-width:0}
.member-scale__lab i{font-style:normal;color:var(--color-text-3);font-variant-numeric:tabular-nums}
.member-scale__lab--end{justify-content:flex-end}

.member-me__grid{display:grid;grid-template-columns:minmax(0,1fr) 248px;gap:var(--space-4);
  margin-top:var(--space-3);align-items:start}
.member-me__factors{min-width:0}
.member-me__h{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);
  flex-wrap:wrap;font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1);
  margin-bottom:var(--space-2)}
.member-me__h .muted{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}

.member-factor{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(60px,1fr) 108px;
  gap:var(--space-3);align-items:center;padding:var(--space-2) 0;border-bottom:1px solid var(--color-border)}
.member-factor:last-child{border-bottom:0}
.member-factor__name{min-width:0}
.member-factor__name b{display:block;font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.member-factor__w{display:block;font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.member-factor__field{display:block;font-size:var(--font-size-12);color:var(--color-text-3);
  font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.member-factor__bar{display:block;height:8px;background:var(--color-surface-3);
  border-radius:var(--radius-pill);overflow:hidden}
.member-factor__bar i{display:block;height:100%;background:var(--color-brand);border-radius:var(--radius-pill)}
.member-factor.is-missing .member-factor__bar i{background:var(--color-danger)}
.member-factor__pts{display:flex;flex-direction:column;align-items:flex-end;gap:2px;
  font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums;text-align:right}
.member-factor__pts b{font-size:var(--font-size-16);font-weight:600;color:var(--color-text-1)}
.member-factor.is-missing .member-factor__pts b{color:var(--color-text-3)}

.member-cov-box{border:1px solid var(--color-border);border-radius:var(--radius-md);
  padding:var(--space-3);background:var(--color-surface-2);min-width:0}
.member-cov-box__k{font-size:var(--font-size-12);color:var(--color-text-3)}
.member-cov-box__v{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;
  font-size:var(--font-size-24);font-weight:700;color:var(--color-text-1);
  font-variant-numeric:tabular-nums;line-height:var(--line-height-tight)}
.member-cov-box__v span{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.member-cov-box .member-cov{width:100%;margin-top:var(--space-2)}
.member-cov-box__note{margin:var(--space-2) 0 0;font-size:var(--font-size-12);
  color:var(--color-text-2);line-height:var(--line-height-body);overflow-wrap:anywhere}
.member-cov-box__note b{color:var(--color-text-1)}

/* ---- 五档分布 ---- */
.member-dist__stats{margin-bottom:var(--space-3)}
.member-dist{display:flex;flex-direction:column;gap:var(--space-1)}
.member-dist__row{display:grid;grid-template-columns:232px minmax(0,1fr) 148px;
  gap:var(--space-3);align-items:center;padding:var(--space-2);border-radius:var(--radius-sm);min-width:0}
.member-dist__row.is-current{background:var(--color-brand-soft)}
.member-dist__label{display:flex;align-items:center;gap:var(--space-2);min-width:0;flex-wrap:wrap}
.member-dist__range{font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.member-dist__track{height:14px;background:var(--color-surface-3);border-radius:var(--radius-pill);
  overflow:hidden;min-width:0}
.member-dist__track i{display:block;height:100%;background:var(--color-brand);border-radius:var(--radius-pill)}
.member-dist__row.is-current .member-dist__track i{background:var(--color-brand-strong)}
.member-dist__num{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums;min-width:0}
.member-dist__num b{font-size:var(--font-size-16);font-weight:600;color:var(--color-text-1)}

/* ---- 双池规则 ---- */
.member-formula{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);margin-bottom:var(--space-3)}
.member-formula__item{display:flex;flex-direction:column;gap:var(--space-1);
  padding:var(--space-2) var(--space-3);background:var(--color-surface-2);
  border:1px solid var(--color-border);border-radius:var(--radius-sm);
  font-size:var(--font-size-12);color:var(--color-text-2);line-height:var(--line-height-body);min-width:0}
.member-formula__k{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  font-weight:600;color:var(--color-text-1)}

/* ---- 权益矩阵列头的分值区间 ---- */
.member-mx__band{display:block;margin-top:2px;font-size:var(--font-size-12);font-weight:400;
  color:var(--color-text-3);font-variant-numeric:tabular-nums}

@media (max-width:1023px){
  .member-me__grid{grid-template-columns:minmax(0,1fr)}
  .member-cov-box{max-width:none}
  .member-dist__row{grid-template-columns:196px minmax(0,1fr) 128px}
}

@media (max-width:767px){
  .member-pool{padding:var(--space-3)}
  .member-pool__head{display:block}
  .member-find{margin-top:var(--space-3);width:100%}
  .member-find__input{flex:1 1 auto;width:auto;min-width:0}
  .member-pool__grid{grid-template-columns:1fr}
  .member-pool__demo{gap:var(--space-1)}
  .member-chip{max-width:100%}
  .member-chip span{max-width:132px}
  .member-chip i{display:none}
  .member-me{padding:var(--space-3)}
  .member-me__side{align-items:flex-start;text-align:left}
  .member-me__merchant{margin-left:0;display:block;width:100%}
  .member-scale__labs{font-size:var(--font-size-12)}
  .member-factor{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name pts" "bar bar";
    row-gap:var(--space-1);column-gap:var(--space-2)}
  .member-factor__name{grid-area:name}
  .member-factor__pts{grid-area:pts}
  .member-factor__bar{grid-area:bar}
  .member-dist__row{grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"label num" "track track";row-gap:var(--space-1);column-gap:var(--space-2)}
  .member-dist__label{grid-area:label}
  .member-dist__num{grid-area:num}
  .member-dist__track{grid-area:track}
  .member-dist__range{display:none}
  .member-formula{grid-template-columns:1fr}
}

@media (max-width:479px){
  .member-me__num{font-size:var(--font-size-24)}
  .member-dist__num .tag{display:none}
  .member-scale__lab i{display:none}
}

/* ==================================================================
   #/merchant/:id · 商家 360 Wave2 第二项：4 页签 + 视角切换器 + 常驻动作区
   - 页签降到 4 个；售后与治理降级为折叠区块；行动建议改常驻动作区
   - 全部复用既有 token，不新增字号 / 间距 / 圆角 / 色值
   ================================================================== */

/* ---- 页签：从 div 改为 button（role=tab + roving tabindex），仅重置 UA 样式 ---- */
.tabs .tab{background:none;border:0;border-bottom:2px solid transparent;
  font-family:inherit;font-size:var(--font-size-13);line-height:var(--line-height-title);
  color:var(--color-text-3)}
.tabs .tab:hover{color:var(--color-text-1)}
.tabs .tab[aria-selected="true"]{color:var(--color-brand-strong);
  border-bottom-color:var(--color-brand-strong);font-weight:600}
.tabs .tab:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}

/* ---- 页头动作区（常驻三件套：建待办 / 查看今日必做 / 导出该商家） ---- */
.m360-pageacts{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}

/* ---- 常驻工具条：左「待办动作」（常驻）+ 右「视角切换器」 (卖家/买家) ---- */
.m360-tb{padding:var(--space-2) var(--space-4);margin-bottom:var(--space-3)}
.m360-tb__row{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.m360-tb__acts{display:flex;align-items:center;gap:var(--space-2);flex:1 1 420px;min-width:0;
  padding:0;background:none;border:0;text-align:left;font-family:inherit;
  font-size:var(--font-size-12);line-height:var(--line-height-body);color:var(--color-text-3);
  cursor:pointer;flex-wrap:wrap}
.m360-tb__acts b{font-size:var(--font-size-13);font-weight:600;color:var(--color-text-1)}
.m360-tb__acts.is-empty{cursor:default;color:var(--color-text-3)}
.m360-tb__sig{display:inline-flex;align-items:center;height:20px;padding:0 var(--space-2);
  border-radius:var(--radius-pill);background:var(--color-danger-soft);
  color:var(--color-danger-strong);font-weight:600}
.m360-tb__why{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:420px}
.m360-tb__meta{color:var(--color-text-3);white-space:nowrap}
.m360-tb__more{color:var(--color-brand-strong);font-weight:600;white-space:nowrap}
.m360-tb__acts:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
.m360-tb__side{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto}
.m360-tb__label{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-3)}
.m360-tb .chip{height:28px;padding:0 var(--space-3);font-size:var(--font-size-13)}
.m360-tb .chip:disabled{opacity:.45;cursor:not-allowed;
  border-color:var(--color-border);color:var(--color-text-3);background:var(--color-surface-2)}
.m360-tb .chip:disabled:hover{border-color:var(--color-border);color:var(--color-text-3)}
.m360-tb__hint{font-size:var(--font-size-12);line-height:var(--line-height-body);color:var(--color-text-3);
  margin-top:var(--space-1)}
.m360-tb #m360-acts-panel{margin-top:var(--space-3)}

/* ---- 页签内小节标题（经营与交易里的「交易质量」） ---- */
.m360-sec-h{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;
  margin:var(--space-5) 0 var(--space-3);padding-top:var(--space-3);
  border-top:1px solid var(--color-border)}
.m360-sec-h > span:first-child{font-size:var(--font-size-14);font-weight:600;color:var(--color-text-1)}

/* ---- 售后与治理（折叠区块，标「数据稀薄，仅作参考」） ---- */
.m360-as .card-h{align-items:center}
.m360-as .card-t{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}
.m360-as__sum{font-size:var(--font-size-12);line-height:var(--line-height-body);color:var(--color-text-3)}
.m360-as #m360-as-panel{margin-top:var(--space-3)}
.m360-thin{font-size:var(--font-size-12)}

/* ---- 里程碑 rail（横向；窄屏转纵向，不横向滚动） ---- */
.m360-rail{display:flex;gap:0;list-style:none;margin:var(--space-3) 0 0;padding:0;
  align-items:flex-start;overflow:visible}
.m360-rail__item{position:relative;flex:1 1 0;min-width:0;
  display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-1);
  padding:0 var(--space-2) 0 0}
.m360-rail__item::after{content:"";position:absolute;top:7px;left:16px;right:var(--space-1);
  height:2px;background:var(--color-border);z-index:0}
.m360-rail__item:last-child::after{display:none}
.m360-rail__item[data-state="done"]::after{background:var(--color-brand-soft-2)}
.m360-rail__dot{position:relative;z-index:1;width:12px;height:12px;border-radius:var(--radius-pill);
  background:var(--color-brand);border:2px solid var(--color-brand)}
.m360-rail__item[data-state="last"] .m360-rail__dot{background:var(--color-surface);
  border:2px solid var(--color-brand-strong)}
.m360-rail__item[data-state="todo"] .m360-rail__dot{background:var(--color-surface);
  border:2px dashed var(--color-border-strong)}
.m360-rail__item[data-state="nodata"] .m360-rail__dot{background:var(--color-surface-3);
  border:2px dotted var(--color-border-strong)}
.m360-rail__name{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2);
  line-height:var(--line-height-title)}
.m360-rail__date{font-size:var(--font-size-12);color:var(--color-text-1);
  font-variant-numeric:tabular-nums}
.m360-rail__item[data-state="todo"] .m360-rail__date,
.m360-rail__item[data-state="nodata"] .m360-rail__date{color:var(--color-text-3)}
.m360-rail__day{font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-rail__delta{display:inline-flex;align-items:center;height:20px;padding:0 var(--space-2);
  border-radius:var(--radius-pill);font-size:var(--font-size-12);font-weight:600;
  background:var(--color-surface-3);color:var(--color-text-3);white-space:nowrap}
.m360-rail__delta.is-fast{background:var(--color-success-soft);color:var(--color-success-strong)}
.m360-rail__delta.is-slow{background:var(--color-warning-soft);color:var(--color-warning-strong)}
.m360-rail__delta.is-none{background:var(--color-surface-2);color:var(--color-text-3);
  font-weight:400;border:1px dashed var(--color-border)}
.m360-rail__small{font-size:var(--font-size-12);color:var(--color-warning-strong)}

/* ---- 事件时间轴（圆点 + 虚线 + 一行标题 + 时间） ---- */
.m360-tlbar{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-3)}
.m360-tlbar .chip{height:28px;padding:0 var(--space-3);font-size:var(--font-size-12)}
.m360-tl{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0}
.m360-tl__item{position:relative;display:flex;gap:var(--space-3);
  padding:0 0 var(--space-3) 0}
.m360-tl__item::before{content:"";position:absolute;left:4px;top:12px;bottom:0;width:0;
  border-left:1px dashed var(--color-border-strong)}
.m360-tl__item:last-child::before{display:none}
.m360-tl__dot{position:relative;z-index:1;flex:0 0 auto;width:9px;height:9px;margin-top:var(--space-1);
  border-radius:var(--radius-pill);background:var(--color-surface);
  border:2px solid var(--color-brand)}
.m360-tl__item[data-kind="done"] .m360-tl__dot{border-color:var(--color-success)}
.m360-tl__item[data-kind="cancel"] .m360-tl__dot{border-color:var(--color-danger)}
.m360-tl__item[data-kind="flow"] .m360-tl__dot{border-color:var(--color-info)}
.m360-tl__item[data-kind="other"] .m360-tl__dot{border-color:var(--color-border-strong)}
.m360-tl__body{min-width:0;flex:1}
.m360-tl__title{font-size:var(--font-size-13);line-height:var(--line-height-body);
  color:var(--color-text-1);overflow-wrap:anywhere}
.m360-tl__amt{display:inline-flex;align-items:center;height:20px;padding:0 var(--space-2);
  margin-left:var(--space-1);border-radius:var(--radius-pill);
  background:var(--color-surface-3);color:var(--color-text-2);
  font-size:var(--font-size-12);font-weight:600;font-variant-numeric:tabular-nums}
.m360-tl__meta{font-size:var(--font-size-12);color:var(--color-text-3);
  font-variant-numeric:tabular-nums}

/* ---- 买家视角 ---- */
.m360-buyer .note code{font-family:var(--font-mono);font-size:var(--font-size-12)}

/* ---- 响应式：1024 以下 rail 收紧；767 以下 rail 转纵向列表 ---- */
@media (max-width:1023px){
  .m360-rail__item{padding-right:var(--space-1)}
  .m360-rail__name{font-size:var(--font-size-12)}
  .m360-tb__side{margin-left:auto}
}

@media (max-width:767px){
  .m360-rail{flex-direction:column;gap:var(--space-2)}
  .m360-rail__item{flex:0 0 auto;width:100%;padding:0 0 0 var(--space-4);
    display:grid;grid-template-columns:1fr auto;grid-template-areas:"name date" "day delta";
    gap:0 var(--space-2);align-items:center}
  .m360-rail__item::after{display:none}
  .m360-rail__dot{position:absolute;left:0;top:var(--space-1);margin:0}
  .m360-rail__name{grid-area:name}
  .m360-rail__date{grid-area:date;text-align:right}
  .m360-rail__day{grid-area:day}
  .m360-rail__foot{grid-area:delta;justify-self:end}
  .m360-tb{padding:var(--space-2) var(--space-3)}
  .m360-tb__row{gap:var(--space-2)}
  .m360-tb__acts{flex:1 1 100%}
  .m360-tb__why{max-width:100%;white-space:normal}
  .m360-tb__side{flex:1 1 100%}
  .m360-tb__side .chip{flex:1 1 auto;justify-content:center}
  .m360-pageacts{width:100%}
  .m360-pageacts .btn{flex:1 1 auto;justify-content:center}
  .m360-tl__title{font-size:var(--font-size-12)}
}

@media (max-width:479px){
  .m360-pageacts{flex-wrap:nowrap;gap:var(--space-1)}
  .m360-pageacts .btn{flex:1 1 0;min-width:0;padding:0 var(--space-2);white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis}
  .m360-rail__item{grid-template-columns:1fr;grid-template-areas:"name" "date" "day" "delta"}
  .m360-rail__date{text-align:left}
  .m360-rail__foot{justify-self:start}
}

/* ---- 概览「累计与最近成交」：金额 2 格 + 日期键值行（避免半栏 5 列挤成竖排） ---- */
.m360-kv{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);
  margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px solid var(--color-border);
  font-size:var(--font-size-12);color:var(--color-text-3)}
.m360-kv b{font-weight:600;color:var(--color-text-1);font-variant-numeric:tabular-nums}

/* ---- rail：差值胶囊 + 小样本标同一行 ---- */
.m360-rail__foot{display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}

/* ---- 商家 360 页头：窄屏让标题与动作区各占整行（否则描述被挤成竖排） ---- */
@media (max-width:767px){
  .page-m360 .page-head__main{flex:1 1 100%;min-width:0}
  .page-m360 .page-head__actions{width:100%}
  .page-m360 .page-desc{line-height:var(--line-height-body)}
}

/* 商家 360：概览 / 售后区块双栏改为顶部对齐（避免短卡被拉高留白） */
.page-m360 .m360-top{align-items:start}

.member-scale__hint{margin:calc(-1 * var(--space-1)) 0 var(--space-2);font-size:var(--font-size-12);
  color:var(--color-text-3);line-height:var(--line-height-body)}

/* 360 首屏压缩：健康分因子明细默认折叠，让页签回到首屏 */
.pf-health__more{margin-top:4px}
.pf-health__more>summary{cursor:pointer;font-size:12px;color:var(--color-text-3);list-style:none;padding:2px 0}
.pf-health__more>summary::-webkit-details-marker{display:none}
.pf-health__more>summary::before{content:"▸ ";color:var(--color-text-3)}
.pf-health__more[open]>summary::before{content:"▾ "}
.pf-health__more>summary:hover{color:var(--color-text-1)}

/* 360 健康分因子卡：默认折叠，页签进首屏 */
.m360-hf__more>summary{cursor:pointer;font-size:12px;color:var(--color-text-3);list-style:none;padding:4px 0}
.m360-hf__more>summary::-webkit-details-marker{display:none}
.m360-hf__more>summary::before{content:"▸ ";color:var(--color-text-3)}
.m360-hf__more[open]>summary::before{content:"▾ "}
.m360-hf__more>summary:hover{color:var(--color-text-1)}

/* 360 首屏紧凑：让页签进 1440×900 首屏（压缩卡片内边距与区块间距，不改字号） */
.page-m360>.card{padding:12px 14px}
.page-m360 .m360-verdict{margin:6px 0 8px;padding:8px 10px}
.page-m360 .m360-bench{gap:8px}
.page-m360 .m360-bench-head{margin-top:4px}
.page-m360 .m360-minor{margin-top:6px}
.page-m360 .m360-hf__head{gap:8px}

/* 侧栏图标：统一 16px 线性图标（sprite），替代此前的 unicode 字符 */
.nav-item .ico{width:16px;height:16px;flex-shrink:0;color:currentColor;opacity:.72;
  fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;
  transition:opacity .15s ease}
.nav-item:hover .ico{opacity:.92}
.nav-item.is-active .ico,.nav-item[aria-current="page"] .ico{opacity:1}

/* ==========================================================================
   TDesign 主题（对标腾讯 TDesign 的视觉规范）
   仅覆盖视觉 token 与关键组件外观，不改布局与交互结构。
   ========================================================================== */
:root{
  /* 品牌色：TDesign brand */
  --color-brand:#0052D9; --color-brand-strong:#0034B5; --color-brand-stronger:#002A8F;
  --color-brand-soft:#F2F3FF; --color-brand-soft-2:#E6E9FF;
  /* 中性色：TDesign 文本/边框/背景 */
  --color-bg:#F3F3F3; --color-surface:#FFFFFF; --color-surface-2:#FAFAFA; --color-surface-3:#F3F3F3;
  --color-border:#E7E7E7; --color-border-strong:#DCDCDC;
  --color-text-1:rgba(0,0,0,.9); --color-text-2:rgba(0,0,0,.6); --color-text-3:rgba(0,0,0,.4); --color-text-4:rgba(0,0,0,.26);
  /* 语义色 */
  --color-success:#2BA471; --color-success-strong:#1F8A5E; --color-success-soft:#E3F9E9;
  --color-warning:#E37318; --color-warning-strong:#B85B12; --color-warning-soft:#FFF1E9;
  --color-danger:#D54941; --color-danger-strong:#B3362F; --color-danger-soft:#FFF0ED;
  --color-info:#0052D9; --color-info-strong:#0034B5; --color-info-soft:#F2F3FF;
  --color-violet:#7C5CFF; --color-violet-strong:#5B3FD9; --color-violet-soft:#F1EEFF;
  /* 圆角：TDesign radius */
  --radius-xs:2px; --radius-sm:3px; --radius-md:6px; --radius-lg:6px;
  --font-sans:"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
}
body{font-family:var(--font-sans)}
/* 卡片：TDesign 卡片 = 白底 + 1px #E7E7E7，无阴影、无顶部色条 */
.card,.kpi{box-shadow:none!important;border:1px solid var(--color-border)!important;border-radius:var(--radius-md)!important;background:#fff}
.kpi--primary{padding-top:var(--space-4)!important}
.kpi--primary::before{display:none!important}
.kpi .v,.kpi__value{font-size:28px;font-weight:600;letter-spacing:-.01em;color:rgba(0,0,0,.9)}
.kpi .k,.kpi__label{font-size:14px;font-weight:400;color:rgba(0,0,0,.6);margin-bottom:6px}
.kpi .s,.kpi__foot{font-size:12px;color:rgba(0,0,0,.4);margin-top:6px;line-height:1.5}
/* 页面标题 */
.page-head h1,.page-title{font-size:20px;font-weight:600;color:rgba(0,0,0,.9)}
.page-head .sub,.page-head__sub{font-size:12px;color:rgba(0,0,0,.4)}
/* 按钮：TDesign 中号按钮（32px / radius 3） */
.btn{height:32px;padding:0 16px;font-size:14px;border-radius:var(--radius-sm);
  border:1px solid var(--color-border-strong);background:#fff;color:rgba(0,0,0,.9);transition:all .15s}
.btn:hover{border-color:var(--color-brand);color:var(--color-brand)}
.btn--primary{background:var(--color-brand);border-color:var(--color-brand);color:#fff}
.btn--primary:hover{background:#366EF4;border-color:#366EF4;color:#fff}
.btn--primary:active{background:#0034B5;border-color:#0034B5}
.btn--sm{height:24px;padding:0 8px;font-size:12px}
.btn--ghost{border-color:transparent;background:transparent}
/* 标签：TDesign tag */
.tag{border-radius:var(--radius-sm);font-size:12px;line-height:20px;padding:0 8px;border:1px solid transparent}
/* 表格：TDesign 表头浅灰、行高 48 */
.table thead th,.table-wrap thead th{background:#F3F3F3;color:rgba(0,0,0,.6);font-weight:500;font-size:14px}
.table tbody td,.table-wrap tbody td{border-bottom:1px solid var(--color-border);padding-top:12px;padding-bottom:12px}
.table tbody tr:hover,.table-wrap tbody tr:hover{background:#FAFAFA}
/* 页签：TDesign Tabs */
.tabs{gap:24px;border-bottom:1px solid var(--color-border)}
.tab{font-size:14px;color:rgba(0,0,0,.6);padding:12px 0}
.tab.is-active{color:var(--color-brand);font-weight:500}
/* 输入框 */
.input,.select,select,input[type="search"],input[type="text"]{height:32px;border-radius:var(--radius-sm);border-color:var(--color-border-strong)}
.input:focus,select:focus,input:focus{border-color:var(--color-brand);box-shadow:0 0 0 2px rgba(0,82,217,.12)}
/* 顶栏与内容背景 */
.topbar{background:#fff;border-bottom:1px solid var(--color-border)}
.main{background:var(--color-bg)}

/* TDesign 补充：视图 chip / 侧栏 / 分页 */
.chip[aria-pressed="true"],.chip.is-active{background:var(--color-brand-soft);border-color:var(--color-brand);color:var(--color-brand);font-weight:500}
.chip:hover{border-color:var(--color-brand);color:var(--color-brand)}
.chip{height:32px;border-radius:var(--radius-sm);font-size:14px}
/* 侧栏：TDesign 深色侧栏的密度与圆角 */
.nav-item{height:40px;padding:0 12px;border-radius:var(--radius-sm);font-size:14px;color:rgba(255,255,255,.72)}
.nav-item:hover{background:rgba(255,255,255,.08);color:#fff}
.nav-item.active{background:var(--color-brand);color:#fff;font-weight:500}
.nav-item.active .ico{opacity:1}
.nav-title{font-size:12px;color:rgba(255,255,255,.38);letter-spacing:.02em;margin:16px 12px 6px}
.nav-group:first-child .nav-title{margin-top:8px}
/* 表格数字列等宽 */
.num,.table td.num,.table-wrap td.num{font-variant-numeric:tabular-nums}
/* 分页 / 工具栏 */
.pager,.toolbar{border-radius:var(--radius-sm)}

/* ================= 24. 售后归因（#/aftersales · Wave 1：可算区块做实） =================
   范围：只新增，不改动其他页面规则。
   - 口径条：售后口径独立，不复用全站 GMV 口径条
   - KPI 4 卡：用 data-accent 控制顶部色条，不新增色板
   - 可算区块 / 未接入区块用编号小标题分隔，未接入 5 卡在窄屏降为单列 */

/* ---- 口径条：标记口径告警 ---- */
.caliber-bar--as .caliber-bar__sep{color:var(--color-text-3)}
.caliber-bar--as .as-flag{display:inline-flex;align-items:center;gap:var(--space-1);
  margin-left:auto;padding:1px var(--space-2);border-radius:var(--radius-pill);
  background:var(--color-warning-soft);color:var(--color-warning-strong);
  font-weight:600;white-space:nowrap;cursor:help}

/* ---- KPI 4 卡 ---- */
.as-kpirow{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-bottom:var(--space-4)}
.as-kpi{position:relative;overflow:hidden;padding-top:calc(var(--space-3) + 3px)}
.as-kpi::before{content:"";position:absolute;left:0;top:0;right:0;height:3px;background:var(--color-brand)}
.as-kpi[data-accent="violet"]::before{background:var(--color-violet)}
.as-kpi[data-accent="cyan"]::before{background:var(--color-info)}
.as-kpi[data-accent="amber"]::before{background:var(--color-warning)}
.as-kpi .v{font-size:var(--font-size-24)}
.as-kpi .as-unit{font-size:var(--font-size-14);font-weight:400;color:var(--color-text-3);
  margin-left:2px}

/* ---- 结论三卡 ---- */
.as-insights{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3);
  margin-bottom:var(--space-4)}
.as-insight{background:var(--color-surface);border:1px solid var(--color-border);
  border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4);min-width:0}
.as-insight__k{display:inline-block;font-size:var(--font-size-12);font-weight:600;
  color:var(--color-brand-strong);background:var(--color-brand-soft);
  border-radius:var(--radius-pill);padding:0 var(--space-2);margin-bottom:var(--space-1)}
.as-insight__t{font-size:var(--font-size-14);font-weight:600;line-height:var(--line-height-title);
  overflow-wrap:anywhere}
.as-insight__s{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:2px;
  line-height:var(--line-height-body)}

/* ---- 区块编号标题 ---- */
.as-sec{margin:var(--space-5) 0 var(--space-3)}
.as-sec__h{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;
  font-size:var(--font-size-16);font-weight:700}
.as-sec__n{font-family:var(--font-mono);font-size:var(--font-size-12);font-weight:600;
  color:var(--color-brand-strong);background:var(--color-brand-soft);
  border-radius:var(--radius-xs);padding:1px 6px}
.as-sec__s{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}

/* ---- 图表 / 说明 ---- */
.as-chart{height:236px;width:100%}
.as-caption{font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-2);
  line-height:var(--line-height-body)}
.as-statline{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-3);margin-top:var(--space-2)}
.as-statline b{color:var(--color-text-1);font-variant-numeric:tabular-nums}
.as-statline__sep{color:var(--color-text-4)}
.as-sub{margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px solid var(--color-surface-3)}
.as-sub--top{margin:0 0 var(--space-3);padding:0;border:0;font-size:var(--font-size-12);
  color:var(--color-text-3)}
.as-sub__t{font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2);
  margin-bottom:var(--space-1)}

/* ---- 行内条形（占比） ---- */
.as-bar{display:inline-flex;align-items:center;gap:var(--space-1);justify-content:flex-end}
.as-bar__track{width:52px;height:6px;border-radius:var(--radius-pill);
  background:var(--color-surface-3);overflow:hidden;flex:0 0 auto}
.as-bar__fill{display:block;height:100%;width:var(--w,0%);border-radius:inherit;
  background:var(--color-brand)}
.as-bar--warn .as-bar__fill{background:var(--color-warning)}
.as-bar__n{font-variant-numeric:tabular-nums;font-weight:600;min-width:48px;text-align:right}

/* ---- 码值 / 药丸 ---- */
.as-code{display:inline-block;min-width:22px;margin-right:var(--space-1);text-align:center;
  font-family:var(--font-mono);font-size:var(--font-size-12);color:var(--color-text-3);
  background:var(--color-surface-3);border-radius:var(--radius-xs);padding:0 4px}
.as-pills{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.as-pill{font-size:var(--font-size-12);color:var(--color-text-2);background:var(--color-surface-2);
  border:1px solid var(--color-border);border-radius:var(--radius-pill);
  padding:1px var(--space-2);white-space:nowrap}
.as-pill b{font-variant-numeric:tabular-nums;color:var(--color-text-1)}
.as-mid{font-family:var(--font-mono);font-size:var(--font-size-12);color:var(--color-text-4);
  margin-left:var(--space-1)}
.as-link{font-weight:600;color:var(--color-brand-strong)}
.as-link:hover{text-decoration:underline}

/* ---- 机型关联：三张小表并排 ---- */
.as-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3);align-items:start}
.as-mini{min-width:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);
  overflow:hidden;background:var(--color-surface)}
.as-mini__wrap{overflow-x:auto}
.as-mini__h{display:flex;flex-direction:column;gap:1px;padding:var(--space-2) var(--space-3);
  background:var(--color-surface-2);border-bottom:1px solid var(--color-border);
  font-size:var(--font-size-12);font-weight:600;color:var(--color-text-2)}
.as-mini__h span{font-weight:400;color:var(--color-text-3)}
.as-mini__t{font-size:var(--font-size-12)}
.as-mini__t th,.as-mini__t td{padding:6px var(--space-2);white-space:nowrap}
.as-mini__t th{position:static;background:transparent;border-bottom:1px solid var(--color-border)}
.as-mini__t tr.is-muted td{color:var(--color-text-3)}

/* ---- 原因缺口 ---- */
.as-reason{display:grid;grid-template-columns:1fr;gap:var(--space-3);
  margin-bottom:var(--space-3);align-items:start}
.as-reason__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2)}
.as-rstat{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);
  background:var(--color-surface-2);border:1px solid var(--color-border);
  border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}
.as-rstat .k{font-size:var(--font-size-12);color:var(--color-text-3)}
.as-rstat .v{font-size:var(--font-size-20);font-weight:700;font-variant-numeric:tabular-nums}
.as-rstat--warn{border-color:var(--color-warning-soft);background:var(--color-warning-soft)}
.as-rstat--warn .v{color:var(--color-warning-strong)}
.as-chips{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.as-chip{display:inline-flex;align-items:center;gap:4px;font-size:var(--font-size-12);
  color:var(--color-text-3);background:var(--color-surface-2);border:1px dashed var(--color-border-strong);
  border-radius:var(--radius-pill);padding:1px var(--space-2)}
.as-chip b{font-family:var(--font-mono);color:var(--color-text-2)}
.as-chip i{font-style:normal;color:var(--color-text-4)}

/* ---- 未接入 5 卡 ---- */
.as-gap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3)}
.as-gap-card{margin-bottom:0;display:flex;flex-direction:column;gap:0;min-width:0}
.as-gap-card .card-h{margin-bottom:var(--space-2)}
.as-gap-card .nodata{flex:1}

/* ---- 响应式 ---- */
@media (max-width:1279px){
  .as-kpirow{grid-template-columns:repeat(2,1fr)}
  .as-insights{grid-template-columns:1fr}
  .as-gap-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:1023px){
  .as-grid{grid-template-columns:1fr}
  .as-reason{grid-template-columns:1fr}
  .as-reason__stats{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:767px){
  .as-gap-grid{grid-template-columns:1fr}
  .as-kpirow{grid-template-columns:repeat(2,1fr)}
  .as-chart{height:228px}
  .as-reason__stats{grid-template-columns:1fr}
  /* 全站窄屏把 table/.data 统一拉到 680px 供横滚；三张机型小表不适用 */
  .as-mini table.as-mini__t{min-width:0;width:100%}
  .as-mini__t th,.as-mini__t td{padding:5px 6px}
}
@media (max-width:359px){
  .as-kpirow{grid-template-columns:1fr}
}


/* ================= 会话分析页（#/session，2026-10-30 真实化） =================
   只新增，不改既有类。全部为 sess- 前缀，避免与聊天演示类 .chat/.msg 冲突。
   窄屏（390）不许横向溢出：堆叠条、图例、KPI 栅格都在下方媒体查询里降列。 */

/* 段标题 */
.sess-h2{font-size:var(--font-size-16);font-weight:700;color:var(--color-text-1);
  margin:var(--space-5) 0 var(--space-3);letter-spacing:-.01em}

/* 样本口径 banner（常驻） */
.sess-scope{margin-bottom:var(--space-4);line-height:var(--line-height-body)}
.sess-scope__main{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-1) var(--space-2);min-width:0}
.sess-scope__tag{flex:0 0 auto;font-size:var(--font-size-12);font-weight:700;padding:1px var(--space-2);
  border-radius:var(--radius-pill);background:var(--color-warning-strong);color:#fff}
.sess-scope__main b{min-width:0;overflow-wrap:anywhere}
.sess-scope__total{font-size:var(--font-size-12);color:var(--color-text-2);font-variant-numeric:tabular-nums}
.sess-scope__sub{margin-top:var(--space-1);font-size:var(--font-size-12);color:var(--color-text-2);
  overflow-wrap:anywhere}

/* 域切换（商家 / 客服） */
.sess-panel{padding:var(--space-3) var(--space-4)}
.sess-switch{display:flex;flex-wrap:wrap;gap:var(--space-1);padding:2px;background:var(--color-surface-3);
  border-radius:var(--radius-md);width:fit-content;max-width:100%;margin-bottom:var(--space-3)}
.sess-switch__btn{display:inline-flex;align-items:center;gap:var(--space-2);min-height:32px;
  padding:0 var(--space-3);border:1px solid transparent;border-radius:var(--radius-sm);
  background:transparent;color:var(--color-text-2);font:inherit;font-size:var(--font-size-13);
  cursor:pointer;transition:var(--ease);white-space:nowrap;max-width:100%}
.sess-switch__btn:hover{color:var(--color-text-1)}
.sess-switch__btn:focus-visible{outline:2px solid var(--color-brand-strong);outline-offset:2px}
.sess-switch__btn[aria-pressed="true"]{background:var(--color-brand-soft);border-color:var(--color-brand);
  color:var(--color-brand-stronger);font-weight:600;box-shadow:inset 0 0 0 1px var(--color-brand)}
.sess-switch__dot{width:8px;height:8px;border-radius:var(--radius-pill);background:currentColor;opacity:.4;flex:0 0 auto}
.sess-switch__btn[aria-pressed="true"] .sess-switch__dot{opacity:1}
.sess-switch__count{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3);
  font-variant-numeric:tabular-nums}
.sess-switch__btn[aria-pressed="true"] .sess-switch__count{color:var(--color-text-2)}

/* KPI：会话页是 5 张卡，需要单独的列数（原 .kpi-row 固定 4 列） */
.kpi-row--5{grid-template-columns:repeat(5,1fr)}
.kpi--warn{border-color:#f5d9b8;background:linear-gradient(180deg,#fffdf8,#fff)}
.kpi--warn .v{color:var(--color-warning-strong)}

/* 单边会话堆叠轨道 */
.sess-track-block{margin-top:var(--space-3);padding-top:var(--space-3);
  border-top:1px dashed var(--color-border)}
.sess-track-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-1) var(--space-2);
  margin-bottom:var(--space-2);font-size:var(--font-size-13);min-width:0}
.sess-track-h .muted{min-width:0;overflow-wrap:anywhere}
.sess-stack{display:flex;width:100%;height:22px;border-radius:var(--radius-pill);overflow:hidden;
  background:var(--color-surface-3);border:1px solid var(--color-border)}
.sess-stack--tall{height:28px}
.sess-stack__seg{display:block;height:100%;min-width:0}
.sess-stack__seg + .sess-stack__seg{box-shadow:-1px 0 0 rgba(255,255,255,.7)}
.sess-seg--one{background:var(--color-danger)}
.sess-seg--solo{background:var(--color-warning)}
.sess-seg--both{background:var(--color-brand)}
.sess-legend{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);margin-top:var(--space-2);
  font-size:var(--font-size-12);color:var(--color-text-2);font-variant-numeric:tabular-nums}
.sess-legend__item{display:inline-flex;align-items:center;gap:var(--space-1);min-width:0;
  overflow-wrap:anywhere}
.sess-legend__dot{width:9px;height:9px;border-radius:2px;flex:0 0 auto}
.sess-legend__foot{width:100%;margin-top:2px;color:var(--color-text-3)}

/* 单域对比行 */
.sess-solo-row{padding:var(--space-2) 0}
.sess-solo-row + .sess-solo-row{border-top:1px dashed var(--color-border)}
.sess-solo-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-1) var(--space-2);
  margin-bottom:var(--space-2);min-width:0}
.sess-solo-v{font-size:var(--font-size-16);font-weight:700;color:var(--color-warning-strong);
  font-variant-numeric:tabular-nums}

/* 说明文字 / 可做不可做 */
.sess-note{margin:var(--space-2) 0 0;font-size:var(--font-size-12);line-height:var(--line-height-body);
  color:var(--color-text-2);overflow-wrap:anywhere}
.sess-note b{color:var(--color-text-1)}
.sess-do{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-top:var(--space-3)}
.sess-do__col{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);
  background:var(--color-surface-2);border:1px solid var(--color-border);min-width:0}
.sess-do__col b{display:block;font-size:var(--font-size-12);margin-bottom:var(--space-1)}
.sess-do__col ul{margin:0;padding-left:var(--space-4);font-size:var(--font-size-12);
  color:var(--color-text-2);line-height:var(--line-height-body)}
.sess-do__col li{overflow-wrap:anywhere}
.sess-do__col--ok{border-color:#c9ecdb;background:var(--color-success-soft)}
.sess-do__col--ok b{color:var(--color-success-strong)}
.sess-do__col--no{border-color:#f7d4d4;background:var(--color-danger-soft)}
.sess-do__col--no b{color:var(--color-danger-strong)}

/* 边界提示 / 空态 */
.sess-limit{margin-bottom:var(--space-3);line-height:var(--line-height-body)}
.sess-empty{margin-top:var(--space-3)}
.sess-empty__retry{margin-top:var(--space-2)}
.sess-empty .nodata{margin-bottom:var(--space-3)}

/* ---- 响应式：1440 五列；≤1023 三列；≤767 两列；≤359 一列，全程不横向溢出 ---- */
@media (max-width:1279px){
  .kpi-row--5{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:1023px){
  .sess-do{grid-template-columns:1fr}
}
@media (max-width:767px){
  .kpi-row--5{grid-template-columns:repeat(2,1fr)}
  .sess-switch{width:100%}
  .sess-switch__btn{flex:1 1 100%;justify-content:flex-start}
  .sess-switch__count{margin-left:auto}
  .sess-panel{padding:var(--space-3)}
  .sess-stack,.sess-stack--tall{height:24px}
  .sess-legend{gap:var(--space-1) var(--space-2)}
}
@media (max-width:359px){
  .kpi-row--5{grid-template-columns:1fr}
  .sess-switch__count{display:none}
}

/* ---------- 供给与库存：金额 raw→clean 对照 + 异常明细（2026-10-30 v1.5 新增，只新增） ---------- */
.caliber-bar--supply{margin-bottom:var(--space-3)}
.caliber-bar--supply .caliber-bar__sep{color:var(--color-text-3)}
.supply-amount{margin-bottom:var(--space-4)}
.amount-cmp{display:grid;grid-template-columns:1fr auto 1fr auto 1fr;align-items:stretch;
  gap:var(--space-2) var(--space-3);margin:var(--space-1) 0 var(--space-2)}
.amount-cmp__item{display:flex;flex-direction:column;gap:2px;min-width:0;
  padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);
  background:var(--color-surface-2)}
.amount-cmp__item--bad{border-color:#f0c7c7;background:var(--color-danger-soft)}
.amount-cmp__item--good{border-color:#b9e3cd;background:var(--color-success-soft)}
.ac-k{font-size:var(--font-size-12);color:var(--color-text-3);line-height:var(--line-height-body)}
.ac-v{font-size:var(--font-size-24);font-weight:700;letter-spacing:-.02em;line-height:var(--line-height-tight);
  font-variant-numeric:tabular-nums;color:var(--color-text-1);overflow-wrap:anywhere}
.amount-cmp__item--bad .ac-v{color:var(--color-danger-strong)}
.amount-cmp__item--good .ac-v{color:var(--color-success-strong)}
.ac-s{font-size:var(--font-size-12);color:var(--color-text-3);line-height:var(--line-height-body);overflow-wrap:anywhere}
.amount-cmp__op{display:flex;align-items:center;justify-content:center;min-width:16px;
  font-size:var(--font-size-16);font-weight:700;color:var(--color-text-4)}
.amount-cmp__note{margin-top:var(--space-2)}
.ac-delta{display:block;font-size:11px;font-weight:400;color:var(--color-text-4);
  text-decoration:line-through;font-variant-numeric:tabular-nums}
.amount-detail{margin-top:var(--space-3);border-top:1px dashed var(--color-border);padding-top:var(--space-2)}
.amount-detail>summary{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;
  cursor:pointer;font-size:var(--font-size-13);font-weight:600;color:var(--color-brand-strong);
  padding:var(--space-1) 0;border-radius:var(--radius-sm)}
.amount-detail>summary:hover{color:var(--color-text-1)}
.amount-detail>summary:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px}
.amount-detail>summary::marker{color:var(--color-brand)}
.amount-detail__hint{font-size:var(--font-size-12);font-weight:400;color:var(--color-text-3)}
.amount-detail__body{margin-top:var(--space-2)}
.amount-detail__body .table-wrap{margin-top:var(--space-1)}
.amount-detail__total td{font-weight:600;background:var(--color-surface-2)}
@media (max-width:1023px){
  .amount-cmp{grid-template-columns:1fr;gap:var(--space-1)}
  .amount-cmp__op{min-width:0;padding:2px 0;font-size:var(--font-size-14)}
  .ac-v{font-size:var(--font-size-20)}
}
@media (max-width:767px){
  .amount-cmp__item{padding:var(--space-2) var(--space-3)}
  .amount-detail>summary{font-size:var(--font-size-12)}
}

/* 会话页：窄屏可以压缩的小表（4 列内、纯数字）+ 合计行底色 */
.sess-tr--sum td{background:var(--color-surface-2)}
.sess-tr--sum td b{color:var(--color-text-1)}
@media (max-width:767px){
  .sess-t-sm{min-width:0;width:100%}
  .sess-t-sm th,.sess-t-sm td{padding:5px 6px;font-size:var(--font-size-12)}
}
/* 会话页：日期/时间跨度不折行（"2026-10-27" 被拆成两行会看成两个日期） */
.sess-nowrap{white-space:nowrap}

/* 会话页：sender_role 现状块（替代 4 列表格，窄屏不必横滚） */
.sess-role{margin:var(--space-1) 0 0}
.sess-role__row{padding:var(--space-2) 0;min-width:0}
.sess-role__row + .sess-role__row{border-top:1px dashed var(--color-border)}
.sess-role__h{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-1) var(--space-3);min-width:0}
.sess-role__h b{font-size:var(--font-size-13)}
.sess-role__k{font-size:var(--font-size-12);color:var(--color-text-3);font-variant-numeric:tabular-nums;
  overflow-wrap:anywhere}
.sess-role__k b{color:var(--color-text-1)}
