/* =========================================================================
   隆栖管理网页端 · 设计系统 v2.0 —「烟雨江南」
   清爽现代 / 黛蓝主调 / 高效数据后台
   保留所有现有 class 名，仅重写样式。
   web-v0.8.3：去 Google Fonts —— 正文用系统黑体栈（苹方/微软雅黑，秒出、国内永不失败、与思源黑体近乎无差），
   数字/等宽用【自托管】IBM Plex Mono（./fonts/*.woff，国内稳）。
   ========================================================================= */

/* ===== 自托管 IBM Plex Mono（web-v0.8.3：去 Google Fonts；数字等宽自带、国内稳；weight-range 覆盖 400~700）===== */
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400 550;font-display:swap;src:url('./fonts/IBMPlexMono-Regular.woff') format('woff');}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:551 700;font-display:swap;src:url('./fonts/IBMPlexMono-Bold.woff') format('woff');}

/* ========================= CSS Variables (Design Tokens) ========================= */
:root {
  /* 品牌色（UI v6：黛蓝微调 #2563EB→#2B5CE6 系） */
  --primary: #2B5CE6;
  --primary-deep: #1E46C0;
  --primary-tint: #EDF2FF;
  --primary-on: #FFFFFF;

  /* 中性色阶（UI v6） */
  --bg: #F4F6FA;
  --bg-alt: #EEF1F7;
  --surface: #FFFFFF;
  --surface-alt: #F8FAFD;
  --ink: #17203A;
  --ink-2: #3A4560;
  --muted: #5E6A85;
  --line: #E3E8F1;
  --line-2: #CDD5E4;

  /* 语义色 */
  --success: #16A34A;
  --success-tint: #DCFCE7;
  --warning: #D97706;
  --warning-tint: #FEF3C7;
  --danger: #DC2626;
  --danger-tint: #FEE2E2;
  --report-new: #0369A1;
  --off: #94A3B8;
  --off-tint: #F1F5F9;

  /* 侧栏（UI v6） */
  --side-bg: #111A2E;
  --side-bg-2: #18233C;
  --side-ink: #B9C3D8;
  --side-line: #26324D;
  --side-active: rgba(43,92,230,0.28);

  /* KPI 多色 */
  --k1: #2563EB; --k1t: #EFF6FF;
  --k2: #0891B2; --k2t: #ECFEFF;
  --k3: #D97706; --k3t: #FEF3C7;
  --k4: #16A34A; --k4t: #DCFCE7;
  --k5: #7C3AED; --k5t: #F3E8FF;
  --k6: #DC2626; --k6t: #FEE2E2;

  /* 全局颜色别名（兼容旧 var 名） */
  --paper: var(--bg);
  --paper-2: var(--bg-alt);
  --panel: var(--surface);
  --panel-2: var(--surface-alt);
  --jade: var(--primary);
  --jade-deep: var(--primary-deep);
  --jade-tint: var(--primary-tint);
  --amber: var(--warning);
  --amber-tint: var(--warning-tint);
  --clay: var(--danger);
  --clay-tint: var(--danger-tint);
  --side: var(--side-bg);
  --side-2: var(--side-bg-2);

  /* 字体 */
  --sans: system-ui, -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', 'Hiragino Sans GB', sans-serif;
  --mono: 'IBM Plex Mono', 'JetBrains Mono', 'Courier New', monospace;

  /* 圆角 */
  --radius-sm: 6px;
  --radius: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-full: 9999px;

  /* 阴影 */
  --shadow-xs: 0 1px 2px rgba(15,23,42,.04);
  --shadow-sm: 0 1px 3px rgba(15,23,42,.06), 0 1px 2px rgba(15,23,42,.04);
  --shadow-md: 0 4px 6px -1px rgba(15,23,42,.06), 0 2px 4px -2px rgba(15,23,42,.04);
  --shadow-lg: 0 10px 15px -3px rgba(15,23,42,.08), 0 4px 6px -4px rgba(15,23,42,.04);
  --shadow-xl: 0 20px 25px -5px rgba(15,23,42,.10), 0 8px 10px -6px rgba(15,23,42,.04);

  /* 焦点环 */
  --ring: 0 0 0 3px rgba(37,99,235,0.18);

  /* 过渡 */
  --ease: cubic-bezier(.4,0,.2,1);
}

/* ========================= Reset / Base ========================= */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }

body {
  font-family: var(--sans);
  font-size: var(--fs-16, 16px); /* UI v6：基准 14→16；登录页保持标准档，应用内由真实字号令牌切换。 */
  line-height: 1.65;
  color: var(--ink);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

::selection { background: rgba(37,99,235,.18); color: var(--ink); }
input, select, textarea, button { font-family: inherit; font-size: inherit; }
button { cursor: pointer; }
a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ========================= 登录页 ========================= */
.login-wrap {
  min-height: 100vh; display: flex; align-items: center; justify-content: center;
  position: relative; overflow: hidden;
}
.login-aurora {
  position: absolute; inset: 0; z-index: 0;
  background:
    radial-gradient(700px 420px at 30% 30%, rgba(37,99,235,.15), transparent 60%),
    radial-gradient(600px 400px at 72% 68%, rgba(8,145,178,.10), transparent 60%),
    linear-gradient(160deg, #0F172A, #1E293B 60%, #0F172A);
}
.login-card {
  position: relative; z-index: 1; width: 380px; max-width: 92vw;
  padding: 44px 40px 34px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-xl);
}
.brand { text-align: center; margin-bottom: 28px; }
.brand-mark {
  font-family: var(--sans); font-weight: 800; font-size: var(--fs-42, 42px);
  letter-spacing: 8px; color: var(--primary); line-height: 1;
}
.brand-sub {
  margin-top: 10px; color: var(--muted); font-size: var(--fs-14, 14px); letter-spacing: 1px;
}
.ver { display: inline-block; margin-left: 6px; font-family: var(--mono); font-size: var(--fs-12_5, 12.5px);
  color: var(--primary); border: 1px solid var(--primary); border-radius: var(--radius-sm);
  padding: 1px 7px; }

.login-form label {
  display: block; font-size: var(--fs-14, 14px); font-weight: 600; color: var(--ink-2);
  margin: 16px 0 6px; letter-spacing: .5px;
}
.login-form input {
  width: 100%; padding: 11px 14px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-15, 15px); color: var(--ink);
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease);
}
.login-form input::placeholder { color: var(--muted); }
.login-form input:focus {
  outline: none; border-color: var(--primary); box-shadow: var(--ring);
}

/* 登录按钮 */
.btn-primary {
  width: 100%; margin-top: 22px; padding: 12px 24px;
  border: none; border-radius: var(--radius);
  color: var(--primary-on); font-size: var(--fs-15, 15px); font-weight: 700;
  letter-spacing: 4px;
  background: var(--primary);
  box-shadow: 0 4px 14px rgba(37,99,235,.35);
  transition: background .15s var(--ease), transform .12s var(--ease), box-shadow .15s var(--ease);
}
.btn-primary:hover { background: var(--primary-deep); transform: translateY(-1px);
  box-shadow: 0 6px 20px rgba(37,99,235,.45); }
.btn-primary:active { transform: translateY(0); }
.btn-primary:disabled { opacity: .5; cursor: not-allowed; transform: none; }

.login-msg { min-height: 20px; margin-top: 12px; color: var(--danger); font-size: var(--fs-14, 14px); text-align: center; }
.login-foot { margin-top: 20px; text-align: center; color: var(--muted); font-size: var(--fs-13, 13px); line-height: 1.6; }

/* ========================= 应用骨架 ========================= */
.app-wrap {
  /* 字号档位改为真实排版尺寸；浏览器据此重算 scrollHeight，不再缩放整页。 */
  --fs-10:10px; --fs-10_5:10.5px; --fs-11:11px; --fs-11_5:11.5px;
  --fs-12:12px; --fs-12_5:12.5px; --fs-13:13px; --fs-13_5:13.5px;
  --fs-14:14px; --fs-14_5:14.5px; --fs-15:15px; --fs-15_5:15.5px;
  --fs-16:16px; --fs-17:17px; --fs-18:18px; --fs-19:19px;
  --fs-20:20px; --fs-22:22px; --fs-23:23px; --fs-24:24px;
  --fs-25:25px; --fs-26:26px; --fs-28:28px; --fs-29:29px;
  --fs-30:30px; --fs-32:32px; --fs-34:34px; --fs-42:42px;
  --ui-nav-pad-y:10px; --ui-topbar-height:66px;
  --ui-content-pad-y:28px; --ui-content-pad-x:32px;
  display: flex; height: 100vh; height: 100dvh; min-height: 0; overflow: hidden;
  font-size: var(--fs-16);
}
.app-wrap[data-font-scale="large"] {
  --fs-10:11.5px; --fs-10_5:12px; --fs-11:12.5px; --fs-11_5:13px;
  --fs-12:14px; --fs-12_5:14.5px; --fs-13:15px; --fs-13_5:15.5px;
  --fs-14:16px; --fs-14_5:16.5px; --fs-15:17px; --fs-15_5:18px;
  --fs-16:18.5px; --fs-17:19.5px; --fs-18:20.5px; --fs-19:22px;
  --fs-20:23px; --fs-22:25px; --fs-23:26.5px; --fs-24:27.5px;
  --fs-25:29px; --fs-26:30px; --fs-28:32px; --fs-29:33.5px;
  --fs-30:34.5px; --fs-32:37px; --fs-34:39px; --fs-42:48px;
  --ui-nav-pad-y:11px; --ui-topbar-height:72px;
  --ui-content-pad-y:30px; --ui-content-pad-x:34px;
}
.app-wrap[data-font-scale="xlarge"] {
  --fs-10:13px; --fs-10_5:13.5px; --fs-11:14.5px; --fs-11_5:15px;
  --fs-12:15.5px; --fs-12_5:16px; --fs-13:17px; --fs-13_5:17.5px;
  --fs-14:18px; --fs-14_5:19px; --fs-15:19.5px; --fs-15_5:20px;
  --fs-16:21px; --fs-17:22px; --fs-18:23.5px; --fs-19:25px;
  --fs-20:26px; --fs-22:28.5px; --fs-23:30px; --fs-24:31px;
  --fs-25:32.5px; --fs-26:34px; --fs-28:36.5px; --fs-29:38px;
  --fs-30:39px; --fs-32:42px; --fs-34:44px; --fs-42:55px;
  --ui-nav-pad-y:12px; --ui-topbar-height:78px;
  --ui-content-pad-y:32px; --ui-content-pad-x:36px;
}

/* 侧栏 */
.side {
  width: 244px; flex: 0 0 244px; /* UI v6：随 16px 基准加宽 */
  background: linear-gradient(180deg, var(--side-bg), var(--side-bg-2));
  color: var(--side-ink);
  display: flex; flex-direction: column;
  position: relative; height: 100%; min-height: 0; overflow: hidden;
  border-right: 1px solid rgba(0,0,0,.25);
  z-index: 30;
}
.side-brand {
  padding: 22px 20px 16px;
  border-bottom: 1px solid var(--side-line);
  display: flex; align-items: baseline; gap: 8px;
}
.sb-mark {
  font-family: var(--sans); font-weight: 800; font-size: var(--fs-24, 24px);
  letter-spacing: 4px; color: #F1F5F9;
}
.sb-sub { font-size: var(--fs-13, 13px); letter-spacing: 2px; color: var(--muted); }

/* 导航 */
.nav {
  padding: 12px 10px; display: flex; flex-direction: column; gap: 2px; flex: 1;
  min-height: 0; overflow-y: auto; overscroll-behavior: contain;
}
.nav a {
  display: flex; align-items: center; gap: 10px;
  padding: var(--ui-nav-pad-y) 12px;
  border-radius: var(--radius);
  color: var(--side-ink);
  text-decoration: none; font-size: var(--fs-16, 16px); font-weight: 500; /* UI v6：随基准放大 */
  letter-spacing: .3px;
  cursor: pointer;
  transition: background .14s var(--ease), color .14s var(--ease);
}
.nav a i {
  font-style: normal; width: 28px; height: 28px; flex: 0 0 28px;
  display: grid; place-items: center; border-radius: var(--radius-sm);
  font-family: var(--sans); font-size: var(--fs-14, 14px); font-weight: 600;
  background: rgba(255,255,255,.06); color: var(--muted);
  transition: background .14s var(--ease), color .14s var(--ease);
}
.nav a:hover { background: rgba(255,255,255,.06); color: #F1F5F9; }
.nav a:hover i { color: #F1F5F9; }
.nav a.active {
  background: var(--side-active); color: #F1F5F9;
  box-shadow: inset 3px 0 0 var(--primary);
}
.nav a.active i { background: var(--primary); color: var(--primary-on); }

/* v2.5：「线索管理」父分组标题 + 子项缩进 */
.nav-group-label {
  margin: 8px 12px 2px; padding: 6px 0 2px;
  font-size: var(--fs-12_5, 12.5px); font-weight: 600; letter-spacing: 1.5px;
  color: var(--muted); text-transform: none;
  border-top: 1px solid var(--side-line);
}
.nav a.nav-sub { padding-left: 22px; }
.nav a.nav-sub i { width: 24px; height: 24px; flex-basis: 24px; font-size: var(--fs-13, 13px); }

.side-foot {
  padding: 12px 20px; font-family: var(--mono); font-size: var(--fs-11_5, 11.5px);
  color: var(--muted); border-top: 1px solid var(--side-line);
}

/* 主内容区：与左栏各自滚动，页面本身不再被大字号撑出视口。 */
.main {
  flex: 1; min-width: 0; height: 100%; min-height: 0;
  display: flex; flex-direction: column;
  overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable;
}

/* 顶栏 */
.topbar {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: 18px;
  padding: 0 26px; height: var(--ui-topbar-height); flex: 0 0 var(--ui-topbar-height); /* UI v6：随字号档位真实加高 */
  background: rgba(248,250,252,.88);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--line);
}
.crumb {
  font-family: var(--sans); font-weight: 700; font-size: var(--fs-18, 18px);
  letter-spacing: .5px; color: var(--ink); white-space: nowrap;
}

/* 搜索 */
.search { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.search input {
  width: 240px; padding: 8px 12px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); color: var(--ink);
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease), width .2s var(--ease);
}
.search input::placeholder { color: var(--muted); }
.search input:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); width: 280px; }

/* 大字号下允许顶栏按真实内容换行；高度参与布局，不挤压或缩放主内容。 */
.app-wrap[data-font-scale="large"] .topbar,
.app-wrap[data-font-scale="xlarge"] .topbar {
  height: auto; min-height: var(--ui-topbar-height); flex-basis: auto;
  flex-wrap: wrap; padding-top: 8px; padding-bottom: 8px;
}
.app-wrap[data-font-scale="large"] .acct,
.app-wrap[data-font-scale="xlarge"] .acct { flex-wrap: wrap; }

/* 账户区 */
.acct { display: flex; align-items: center; gap: 10px; }
.acct-name { font-size: var(--fs-14, 14px); font-weight: 500; color: var(--ink-2); }

/* ========================= 按钮系统 ========================= */
.btn-ghost {
  padding: 9px 16px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); font-weight: 500;
  color: var(--ink-2);
  transition: border-color .14s var(--ease), color .14s var(--ease),
              background .14s var(--ease), box-shadow .14s var(--ease);
}
.btn-ghost:hover { border-color: var(--primary); color: var(--primary); }
.btn-ghost:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.btn-ghost:disabled { opacity: .5; cursor: not-allowed; }
.btn-ghost.sm { padding: 7px 13px; font-size: var(--fs-13, 13px); }
.btn-ghost.warn {
  border-color: rgba(220,38,38,.45); color: var(--danger);
}
.btn-ghost.warn:hover { background: var(--danger); border-color: var(--danger); color: #FFF; }

.btn-amber {
  padding: 10px 18px; border: none; border-radius: var(--radius);
  color: #FFF; font-size: var(--fs-14, 14px); font-weight: 600; letter-spacing: .3px;
  background: var(--warning);
  box-shadow: 0 4px 12px rgba(217,119,6,.30);
  transition: background .14s var(--ease), transform .12s var(--ease), box-shadow .14s var(--ease);
}
.btn-amber:hover { background: #B45309; transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(217,119,6,.35); }
.btn-amber:active { transform: translateY(0); }
.btn-amber:disabled { opacity: .5; cursor: not-allowed; transform: none; }

.btn-jade {
  padding: 10px 18px; border: none; border-radius: var(--radius);
  color: #FFF; font-size: var(--fs-14, 14px); font-weight: 600; letter-spacing: .3px;
  background: var(--primary);
  box-shadow: 0 4px 12px rgba(37,99,235,.30);
  transition: background .14s var(--ease), transform .12s var(--ease), box-shadow .14s var(--ease);
}
.btn-jade:hover { background: var(--primary-deep); transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(37,99,235,.40); }
.btn-jade:active { transform: translateY(0); }
.btn-jade:disabled { opacity: .5; cursor: not-allowed; transform: none; }

/* 认领按钮 */
.claim-btn { font-weight: 600; border-color: var(--primary); color: var(--primary); }
.claim-btn:hover { background: var(--primary); color: #FFF; border-color: var(--primary); }
.claim-btn:disabled { opacity: .5; cursor: not-allowed; }

/* ========================= 内容区 ========================= */
/* UI v6：居中限宽（疏朗骨架）——1600px 上限 = 旧 1440 视觉密度按 14→16 字号等比换算 */
.content { padding: var(--ui-content-pad-y) var(--ui-content-pad-x) 64px; max-width: 1600px; width: 100%; margin: 0 auto; }

/* ========================= 状态反馈 ========================= */
.loading, .empty, .err {
  padding: 48px 16px; text-align: center; font-size: var(--fs-15, 15px); line-height: 1.6;
}
.loading { color: var(--muted); }
.empty { color: var(--muted); }
.err { color: var(--danger); }

/* ========================= 区块标题 ========================= */
.section-title {
  font-family: var(--sans); font-weight: 700; font-size: var(--fs-19, 19px); letter-spacing: .3px;
  color: var(--ink); margin: 30px 0 12px;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.section-title:first-child { margin-top: 0; }
.section-title .tag {
  font-family: var(--sans); font-weight: 500; font-size: var(--fs-13, 13px); color: var(--muted);
  background: var(--bg-alt); border: 1px solid var(--line); border-radius: var(--radius-full);
  padding: 2px 10px; letter-spacing: .2px;
}
.section-title .btn-amber.sm { margin-left: auto; }

/* ========================= Note / 提示条 ========================= */
.note {
  margin-top: 14px; padding: 12px 16px;
  background: var(--surface-alt); border: 1px solid var(--line);
  border-left: 3px solid var(--warning);
  border-radius: var(--radius);
  color: var(--ink-2); font-size: var(--fs-14, 14px); line-height: 1.7;
}
.note b { color: var(--ink); font-weight: 600; }

/* 完整号码只读定位：复用现有后台色板，不做新页面；无链接、无按钮，避免被误认成客户详情入口。 */
.phone-locator {
  margin: 14px 0 18px; padding: 13px 16px;
  display: flex; flex-direction: column; gap: 7px;
  background: var(--surface-alt); border: 1px solid var(--line);
  border-left: 3px solid var(--primary); border-radius: var(--radius);
  color: var(--ink-2); font-size: var(--fs-14, 14px); line-height: 1.6;
}
.phone-locator > b { color: var(--ink); font-weight: 700; }
.phone-locator-row { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.phone-locator-row strong { color: var(--primary-deep); font-weight: 700; }
.phone-locator small { color: var(--muted); font-size: var(--fs-13, 13px); }

.muted { color: var(--muted); }
.link {
  color: var(--primary); cursor: pointer;
  border-bottom: 1px dashed rgba(37,99,235,.4);
  transition: border-color .14s var(--ease);
}
.link:hover { border-bottom-style: solid; }

/* ========================= KPI 卡片 ========================= */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(212px, 1fr));
  gap: 16px;
}
.kpi {
  position: relative; overflow: hidden;
  padding: 18px 20px 16px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  animation: kpiRise .4s var(--ease) both;
}
.kpi::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: var(--kc, var(--primary));
  border-radius: 0 2px 2px 0;
}
.kpi::after {
  content: ''; position: absolute; right: -16px; top: -16px;
  width: 56px; height: 56px; border-radius: 50%;
  background: radial-gradient(circle,
    color-mix(in srgb, var(--kc, var(--primary)) 18%, transparent),
    transparent 70%);
  opacity: .7;
}
.kpi .label { font-size: var(--fs-14, 14px); color: var(--muted); letter-spacing: .5px; font-weight: 500; }
.kpi .num {
  font-family: var(--mono); font-weight: 600; font-size: var(--fs-32, 32px);
  letter-spacing: -.5px; color: var(--ink); margin-top: 6px; line-height: 1;
}
.kpi.accent { border-color: color-mix(in srgb, var(--kc, var(--primary)) 28%, var(--line)); }
.kpi.accent .num { color: var(--kc, var(--primary)); }
.kpi.accent::after {
  background: radial-gradient(circle,
    color-mix(in srgb, var(--kc, var(--primary)) 22%, transparent),
    transparent 70%);
}
.kpi.clickable {
  cursor: pointer;
  transition: transform .15s var(--ease), box-shadow .15s var(--ease), border-color .15s var(--ease);
}
.kpi.clickable:hover {
  transform: translateY(-2px);
  border-color: var(--kc, var(--primary));
  box-shadow: 0 12px 28px -12px color-mix(in srgb, var(--kc, var(--primary)) 40%, transparent);
}
.kpi.clickable .label::after {
  content: ' →'; color: var(--kc, var(--primary)); font-weight: 600;
}

/* KPI 按位置着色 */
.cards .kpi:nth-child(1) { --kc: var(--k1); }
.cards .kpi:nth-child(2) { --kc: var(--k4); }
.cards .kpi:nth-child(3) { --kc: var(--k3); }
.cards .kpi:nth-child(4) { --kc: var(--k5); }
.cards .kpi:nth-child(5) { --kc: var(--k2); }
.cards .kpi:nth-child(6) { --kc: var(--k6); }
.cards .kpi:nth-child(7) { --kc: var(--k1); }
.cards .kpi:nth-child(8) { --kc: var(--k3); }
.cards .kpi:nth-child(n+9) { --kc: var(--k2); }

@keyframes kpiRise {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}
.cards .kpi:nth-child(1) { animation-delay: .02s; }
.cards .kpi:nth-child(2) { animation-delay: .05s; }
.cards .kpi:nth-child(3) { animation-delay: .08s; }
.cards .kpi:nth-child(4) { animation-delay: .11s; }
.cards .kpi:nth-child(5) { animation-delay: .14s; }
.cards .kpi:nth-child(6) { animation-delay: .17s; }
.cards .kpi:nth-child(7) { animation-delay: .20s; }
.cards .kpi:nth-child(8) { animation-delay: .23s; }

/* ========================= 表格 ========================= */
table {
  width: 100%; border-collapse: separate; border-spacing: 0;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  font-size: var(--fs-15, 15px);
}
thead th {
  background: var(--bg-alt); color: var(--ink-2);
  font-weight: 600; font-size: var(--fs-13_5, 13.5px); letter-spacing: .3px;
  text-align: left; padding: 13px 16px;
  border-bottom: 1px solid var(--line-2);
  white-space: nowrap;
  text-transform: none;
}
tbody td {
  padding: 14px 16px; border-bottom: 1px solid var(--line);
  font-size: var(--fs-15, 15px); color: var(--ink); vertical-align: middle;
  line-height: 1.45;
}
tbody tr:last-child td { border-bottom: none; }
tbody tr { transition: background .12s var(--ease); }
tbody tr:nth-child(even) { background: var(--surface-alt); }
tbody tr:hover { background: var(--primary-tint); }

th.num, td.num {
  text-align: right;
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
  font-weight: 500;
}
th.sortable { cursor: pointer; user-select: none; transition: color .14s var(--ease); }
th.sortable:hover { color: var(--primary); }
.sort-arrow { display: inline-block; margin-left: 4px; font-size: var(--fs-11, 11px); color: var(--line-2);
  transition: color .14s var(--ease); }
th.sortable:hover .sort-arrow { color: var(--ink-2); }
.sort-arrow.on { color: var(--primary); }

td .cust {
  color: var(--primary); cursor: pointer; font-weight: 500;
  border-bottom: 1px dashed rgba(37,99,235,.35);
  transition: border-color .14s var(--ease);
}
td .cust:hover { border-bottom-style: solid; }

/* ========================= 工具条 / 筛选条 ========================= */
.toolbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 6px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  padding: 12px 14px;
  box-shadow: var(--shadow-sm);
  font-size: var(--fs-14, 14px);
}
.toolbar .muted { font-size: var(--fs-14, 14px); letter-spacing: .3px; }
.toolbar input[type=date] {
  padding: 7px 10px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-family: var(--mono); font-size: var(--fs-14, 14px); color: var(--ink);
  transition: border-color .15s var(--ease);
}
.toolbar input[type=date]:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.toolbar .sep { color: var(--muted); }
.toolbar input[type=file] {
  font-size: var(--fs-14, 14px); font-family: var(--sans); color: var(--ink-2);
  padding: 6px 4px; max-width: 100%;
}

.filter-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 0 0 14px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  padding: 12px 14px;
  box-shadow: var(--shadow-sm);
  font-size: var(--fs-14, 14px); color: var(--ink-2); letter-spacing: .3px;
}
.filter-bar select {
  padding: 7px 12px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); color: var(--ink);
  cursor: pointer;
  transition: border-color .15s var(--ease);
}
.filter-bar select:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }

/* 区间快捷选择 */
.range-chips { display: flex; gap: 4px; }
.range-chips button {
  padding: 6px 12px;
  border: 1px solid var(--line-2); border-radius: var(--radius-full);
  background: var(--surface); font-size: var(--fs-13, 13px); font-weight: 500; color: var(--ink-2);
  transition: all .14s var(--ease);
}
.range-chips button:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-tint); }

/* ========================= Pill / Tag ========================= */
.pill {
  display: inline-block; padding: 2px 10px; border-radius: var(--radius-full);
  font-size: var(--fs-13, 13px); font-weight: 600; letter-spacing: .2px; line-height: 1.6;
}
.pill.green { background: var(--success-tint); color: var(--success); }
.pill.red { background: var(--danger-tint); color: var(--danger); }
.pill.amber { background: var(--warning-tint); color: var(--warning); }
.pill.off { background: var(--off-tint); color: var(--off); }
/* 本轮：有录音=醒目(实心金)、有报告=次一级(实心青) */
.pill.rec { background: var(--warning); color: #fff; }
.pill.rep { background: var(--success); color: #fff; }
/* web-v4.12.0：新版报告独立于旧版“有报告”，文字+颜色双重表意。 */
.pill.newrep { background: var(--report-new); color: #fff; }
/* 本轮：「带看过」标签（实心紫，区别于金/青；与有录音/有报告独立可共存） */
.pill.shown { background: #7C3AED; color: #fff; }
/* web-v4.0.1：「我的重点」标（个人置顶）——主色实心高对比（白字对 #2B5CE6 ≈ 5.5:1，过 AA） */
.pill.mypin { background: var(--primary); color: var(--primary-on); }
/* web-v4.0.1：行内置顶按钮（复用 .btn-ghost.sm 底子，收紧到表格行密度；图钉 SVG 线性风格同 .nav .ico） */
.pin-btn { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; font-size: var(--fs-12, 12px); vertical-align: middle; white-space: nowrap; }
.pin-btn .pin-ico { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.pin-btn[data-pinned="1"] { border-color: var(--primary); color: var(--primary); background: var(--primary-tint); }
/* 本轮：「带看过」筛选开关激活态（复用 .btn-ghost.sm，激活后实心紫） */
.btn-ghost.active { background: #7C3AED; border-color: #7C3AED; color: #fff; }
.btn-ghost.active:hover { background: #6D28D9; border-color: #6D28D9; color: #fff; }
/* 本轮：进入逾期弹层（mgr/super/hr 按人列「谁逾期了几个」）*/
.od-mask { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 1200; display: flex; align-items: center; justify-content: center; }
.od-panel { background: var(--card, #fff); border-radius: 14px; padding: 18px 20px; width: min(420px, 92vw); max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 12px 40px rgba(0,0,0,.25); }
.od-h { font-weight: 700; font-size: var(--fs-16, 16px); display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.od-x { cursor: pointer; color: var(--muted, #888); font-weight: 400; }
.od-list { overflow-y: auto; }
.od-prow { display: flex; justify-content: space-between; align-items: center; padding: 9px 2px; border-bottom: 1px solid var(--line, #eee); }

/* ========================= 标签页 ========================= */
.tabs { display: flex; gap: 6px; margin-bottom: 14px; }
.tabs button {
  padding: 10px 18px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); font-weight: 500; color: var(--ink-2);
  transition: all .14s var(--ease);
}
.tabs button:hover { border-color: var(--primary); color: var(--primary); }
.tabs button.active {
  background: var(--primary); color: var(--primary-on); border-color: var(--primary);
}

/* ========================= 每日趋势柱状图 ========================= */
.bars {
  display: flex; align-items: flex-end; gap: 6px; height: 160px;
  padding: 14px 16px 8px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow-x: auto;
}
.bar {
  flex: 1 0 28px; min-width: 28px;
  display: flex; flex-direction: column; align-items: center; gap: 5px;
  height: 100%; justify-content: flex-end;
}
.bar .v { font-family: var(--mono); font-size: var(--fs-12_5, 12.5px); color: var(--ink-2); font-weight: 500; }
.bar .col {
  width: 60%; min-height: 3px;
  border-radius: 4px 4px 2px 2px;
  background: linear-gradient(180deg, var(--primary), var(--primary-deep));
  transition: height .35s var(--ease);
}
.bar .d { font-family: var(--mono); font-size: var(--fs-11, 11px); color: var(--muted); }

/* ========================= v2.5 数据统计图表区（内联 SVG·零外部依赖）========================= */
.stat-charts { margin-top: 22px; }
.chart-pair {
  display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-start;
}
.chart-card {
  flex: 1 1 320px; min-width: 280px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  padding: 12px 14px 10px;
}
.ch-svg { display: block; width: 100%; height: auto; }
.ch-title { fill: var(--ink); font-size: var(--fs-14, 14px); font-weight: 600; }
.ch-axis { fill: var(--muted); font-size: var(--fs-11, 11px); font-family: var(--mono); }
.ch-grid { stroke: var(--line); stroke-width: 1; }
.ch-line { stroke: var(--primary); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.ch-dot { fill: #fff; stroke: var(--primary); stroke-width: 1.5; }
.ch-rname { fill: var(--ink-2); font-size: var(--fs-12_5, 12.5px); font-weight: 500; }
.ch-rval { fill: var(--ink-2); font-size: var(--fs-12_5, 12.5px); font-family: var(--mono); font-weight: 600; }
.chart-switch { display: flex; align-items: center; gap: 8px; margin-top: 14px; }
.chart-switch .muted { font-size: var(--fs-14, 14px); letter-spacing: .3px; }
.chart-tab {
  padding: 6px 16px;
  border: 1px solid var(--line-2); border-radius: var(--radius-full);
  background: var(--surface); font-size: var(--fs-14, 14px); font-weight: 500; color: var(--ink-2);
  cursor: pointer; transition: all .14s var(--ease);
}
.chart-tab:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-tint); }
.chart-tab.on { border-color: var(--primary); background: var(--primary); color: var(--primary-on); }

/* web-v4.8.5：人工接管集中恢复 + 客户盘点成员分布 */

/* web-v4.10.0：AI 视频中心运营驾驶舱。真实操作、真实封面与运营数据共用一套响应式页面。 */
.aiv-shell{--aiv-night:#0D1629;--aiv-night-2:#131F36;--aiv-line:rgba(148,163,184,.18);--aiv-cyan:#39D8C8;--aiv-blue:#6E8BFF;max-width:1380px;margin:0 auto}.aiv-hero{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(340px,.75fr);gap:28px;padding:30px;border:1px solid #223251;border-radius:22px;color:#F8FAFC;background:radial-gradient(720px 360px at 0 0,rgba(57,216,200,.15),transparent 64%),radial-gradient(540px 320px at 100% 100%,rgba(110,139,255,.17),transparent 65%),linear-gradient(135deg,var(--aiv-night),var(--aiv-night-2));box-shadow:0 24px 48px rgba(15,23,42,.16)}.aiv-hero:after{content:"";position:absolute;right:-70px;top:-90px;width:240px;height:240px;border:1px solid rgba(57,216,200,.12);border-radius:50%;box-shadow:0 0 0 42px rgba(57,216,200,.025),0 0 0 82px rgba(110,139,255,.025);pointer-events:none}.aiv-hero-copy,.aiv-control-card{position:relative;z-index:1}.aiv-eyebrow{display:inline-flex;margin-bottom:10px;color:#83E8DD;font-family:var(--mono);font-size:var(--fs-12, 12px);font-weight:700;letter-spacing:1.8px}.aiv-hero h2{margin:0 0 7px;color:#FFF;font-size:clamp(25px,2.5vw,36px);line-height:1.24;letter-spacing:.2px}.aiv-hero p{max-width:650px;margin:0;color:#B7C4D9;font-size:var(--fs-15, 15px)}.aiv-actions{display:grid;grid-template-columns:1.35fr 1fr;gap:12px;margin-top:24px}.aiv-actions button{min-height:82px;border-radius:14px;padding:15px 17px;text-align:left;display:flex;align-items:center;gap:13px;cursor:pointer;transition:transform .18s var(--ease),border-color .18s var(--ease),box-shadow .18s var(--ease)}.aiv-actions button:hover{transform:translateY(-2px)}.aiv-actions button:focus-visible,.aiv-choice:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(57,216,200,.32)}.aiv-actions button:disabled{opacity:.56;cursor:not-allowed;transform:none}.aiv-actions svg{flex:0 0 28px;width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:1.8}.aiv-actions strong{display:block;font-size:var(--fs-17, 17px);margin-bottom:3px}.aiv-actions small{display:block;font-size:var(--fs-12, 12px);line-height:1.45;opacity:.82}.aiv-primary{border:1px solid var(--aiv-cyan);background:var(--aiv-cyan);color:#08201F;box-shadow:0 12px 24px rgba(57,216,200,.18)}.aiv-primary svg path:first-child{fill:currentColor;stroke:none}.aiv-secondary{border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.06);color:#EDF4FF}.aiv-secondary:hover{border-color:rgba(57,216,200,.52);background:rgba(255,255,255,.09)}.aiv-control-card{padding:18px;border:1px solid rgba(255,255,255,.12);border-radius:17px;background:rgba(8,17,33,.52);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}.aiv-risk{display:flex;align-items:center;justify-content:space-between;min-height:46px;margin-bottom:16px;padding:10px 12px;border:1px solid rgba(148,163,184,.14);border-radius:11px;background:rgba(148,163,184,.07)}.aiv-risk span{color:#AEBBD0;font-size:var(--fs-13, 13px)}.aiv-risk strong{font-family:var(--mono);font-size:var(--fs-16, 16px);color:#EEF4FF}.aiv-risk.warn{border-color:rgba(245,158,11,.45);background:rgba(245,158,11,.1)}.aiv-risk.warn strong{color:#FBBF24}.aiv-risk.danger{border-color:rgba(248,113,113,.48);background:rgba(239,68,68,.11)}.aiv-risk.danger strong{color:#FCA5A5}.aiv-option{margin-top:14px}.aiv-option>span{display:block;margin-bottom:7px;color:#91A0B7;font-size:var(--fs-12, 12px)}.aiv-choice-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.aiv-choice{min-height:40px;padding:7px 8px;border:1px solid rgba(148,163,184,.2);border-radius:9px;background:rgba(255,255,255,.035);color:#C6D1E2;font-size:var(--fs-13, 13px);font-weight:600}.aiv-choice:hover{border-color:rgba(57,216,200,.46)}.aiv-choice.on{border-color:rgba(57,216,200,.72);background:rgba(57,216,200,.14);color:#8FF1E8}.aiv-ready-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:15px;padding-top:13px;border-top:1px solid rgba(148,163,184,.13)}.aiv-ready-row span{min-width:0;color:#A7B4C8;font-size:var(--fs-12, 12px);line-height:1.45}.aiv-ready-row b{display:block;margin-bottom:2px;color:#E7EDF7;font-size:var(--fs-12, 12px)}.aiv-progress{min-height:27px;margin:10px 3px 0;color:#3154C8;font-size:var(--fs-14, 14px)}.aiv-status{display:flex;align-items:center;gap:12px;max-width:900px;margin:2px 0 18px;padding:13px 15px;border:1px solid #DDE5F1;border-radius:12px;background:#F7F9FC}.aiv-status strong,.aiv-status small{display:block}.aiv-status small{margin-top:2px;color:var(--muted)}.aiv-dot{width:9px;height:9px;border-radius:50%;background:#3154D8;box-shadow:0 0 0 5px rgba(49,84,216,.1)}.aiv-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-top:18px}.aiv-kpi{position:relative;overflow:hidden;min-height:132px;padding:17px 18px;border:1px solid var(--line);border-radius:15px;background:#FFF;box-shadow:var(--shadow-xs)}.aiv-kpi:after{content:"";position:absolute;inset:auto -22px -30px auto;width:90px;height:90px;border-radius:50%;background:var(--kpi-tint)}.aiv-kpi-top{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:var(--fs-13, 13px)}.aiv-kpi-top i{width:9px;height:9px;border-radius:50%;background:var(--kpi)}.aiv-kpi>strong{position:relative;z-index:1;display:block;margin-top:10px;color:var(--ink);font-family:var(--mono);font-size:var(--fs-30, 30px);line-height:1.15}.aiv-kpi>small{position:relative;z-index:1;display:block;margin-top:6px;color:#7A869B;font-size:var(--fs-12, 12px)}.aiv-kpi.cyan{--kpi:#0F9F97;--kpi-tint:#E5FAF7}.aiv-kpi.green{--kpi:#16A34A;--kpi-tint:#E9F9EF}.aiv-kpi.amber{--kpi:#D97706;--kpi-tint:#FFF5DF}.aiv-kpi.violet{--kpi:#7C3AED;--kpi-tint:#F3ECFF}.aiv-dashboard{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(320px,.8fr);gap:14px;margin-top:14px}.aiv-panel{border:1px solid var(--line);border-radius:17px;background:#FFF;box-shadow:var(--shadow-xs)}.aiv-trend{overflow:hidden}.aiv-trend header{display:flex;align-items:flex-start;justify-content:space-between;padding:18px 20px 2px}.aiv-trend header span,.aiv-panel-kicker{color:#738097;font-size:var(--fs-11, 11px);font-weight:700;letter-spacing:1.1px;text-transform:uppercase}.aiv-trend h3,.aiv-focus h3{margin:3px 0 0;color:var(--ink);font-size:var(--fs-18, 18px);line-height:1.45}.aiv-trend header>strong{font-family:var(--mono);font-size:var(--fs-23, 23px);text-align:right}.aiv-trend header>strong small{display:block;color:var(--muted);font-family:var(--sans);font-size:var(--fs-11, 11px);font-weight:500}.aiv-trend-svg{display:block;width:100%;height:auto;min-height:220px}.aiv-chart-grid{stroke:#E8EDF4;stroke-width:1}.aiv-chart-line{fill:none;stroke:var(--aiv-cyan);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.aiv-chart-dot{fill:#FFF;stroke:#19AFA3;stroke-width:3}.aiv-chart-label{fill:#8490A4;font-family:var(--mono);font-size:var(--fs-11, 11px)}.aiv-chart-empty{fill:#8B96A8;font-family:var(--sans);font-size:var(--fs-14, 14px)}.aiv-focus{padding:18px 18px 16px;background:linear-gradient(155deg,#FFF,#F8FAFE)}.aiv-focus h3{min-height:54px;margin-top:6px}.aiv-focus-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:12px 0 17px;padding:10px 11px;border-radius:10px;background:#EEF3FF;color:#53617A;font-size:var(--fs-12, 12px)}.aiv-focus-meta b{color:#3154C8;font-family:var(--mono);font-size:var(--fs-11, 11px)}.aiv-funnel{padding-top:14px;border-top:1px solid var(--line)}.aiv-panel-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.aiv-panel-title span{font-size:var(--fs-14, 14px);font-weight:700}.aiv-panel-title small{color:var(--muted)}.aiv-funnel-row{display:grid;grid-template-columns:58px minmax(0,1fr) 38px;gap:8px;align-items:center;margin-top:9px;font-size:var(--fs-12, 12px)}.aiv-funnel-row>span{color:#667188}.aiv-funnel-row>div{height:8px;overflow:hidden;border-radius:999px;background:#EAF0F7}.aiv-funnel-row i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#39D8C8,#6E8BFF)}.aiv-funnel-row b{text-align:right;font-family:var(--mono);font-size:var(--fs-12, 12px)}.aiv-panel-empty{padding:20px 0;color:#8490A3;text-align:center;font-size:var(--fs-12, 12px)}.aiv-recent{margin-top:22px}.aiv-section-title{display:flex;align-items:end;justify-content:space-between;margin-bottom:12px}.aiv-section-title>div>span{color:#718096;font-family:var(--mono);font-size:var(--fs-11, 11px);font-weight:700;letter-spacing:1.4px}.aiv-section-title h3{margin:2px 0 0;font-size:var(--fs-20, 20px)}.aiv-section-title>b{color:#728097;font-family:var(--mono);font-size:var(--fs-13, 13px)}.aiv-products{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.aiv-product{display:grid;grid-template-columns:118px minmax(0,1fr);min-height:184px;overflow:hidden;border:1px solid var(--line);border-radius:15px;background:#FFF;box-shadow:var(--shadow-xs);transition:transform .18s var(--ease),box-shadow .18s var(--ease)}.aiv-product:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.aiv-cover{position:relative;min-height:184px;background:#EEF1F6;overflow:hidden}.aiv-cover img{width:100%;height:100%;object-fit:cover;display:block}.aiv-cover>span{position:absolute;right:7px;bottom:7px;padding:3px 6px;border-radius:6px;background:rgba(8,15,28,.8);color:#FFF;font-family:var(--mono);font-size:var(--fs-11, 11px)}.aiv-product-body{min-width:0;padding:12px 12px 11px}.aiv-product-platforms{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.aiv-platform{padding:3px 6px;border:1px solid #E4E9F1;border-radius:999px;background:#F6F8FB;color:#778298;font-size:var(--fs-10, 10px);line-height:1.3}.aiv-platform.is-published{border-color:#BDE8CC;background:#ECF9F1;color:#15803D}.aiv-product-body>strong{display:-webkit-box;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--ink);font-size:var(--fs-14, 14px);line-height:1.45}.aiv-product-body>small{display:block;margin-top:4px;color:#7C8799;font-size:var(--fs-11, 11px)}.aiv-product-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:10px}.aiv-product-metrics span{color:#8490A2;font-size:var(--fs-10, 10px)}.aiv-product-metrics b{display:block;margin-top:1px;color:#364158;font-family:var(--mono);font-size:var(--fs-11, 11px)}.aiv-fee{margin-top:7px;color:#59657A;font-size:var(--fs-11, 11px);font-weight:600}.aiv-card-actions{display:flex;gap:6px;margin-top:8px}.aiv-card-actions:empty{display:none}.aiv-card-actions .btn-ghost{min-height:34px;padding:5px 10px;font-size:var(--fs-12, 12px)}.aiv-empty{grid-column:1/-1;padding:42px;border:1px dashed #CDD6E4;border-radius:15px;background:#FAFBFD;color:#788497;text-align:center}.aiv-identify{position:relative;display:flex;align-items:center;gap:10px;max-width:900px;margin:0 0 18px;color:#596273;font-size:var(--fs-14, 14px)}.aiv-identify>button{min-height:40px;border:0;background:none;color:#3154C8;padding:6px;cursor:pointer}.aiv-correct{display:flex;gap:6px}.aiv-correct button{min-height:40px;border:1px solid #D8DEEA;background:#FFF;color:#35405A;border-radius:8px;padding:6px 10px;cursor:pointer}.aiv-correct[hidden]{display:none}
@media(max-width:1180px){.aiv-hero{grid-template-columns:1fr}.aiv-control-card{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.aiv-risk,.aiv-ready-row{grid-column:1/-1}.aiv-option{margin-top:8px}.aiv-dashboard{grid-template-columns:1fr}.aiv-products{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.aiv-hero{padding:20px;border-radius:17px}.aiv-actions{grid-template-columns:1fr}.aiv-actions button{min-height:72px}.aiv-control-card{display:block}.aiv-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.aiv-kpi{min-height:118px}.aiv-dashboard{grid-template-columns:1fr}.aiv-products{grid-template-columns:1fr}.aiv-product{grid-template-columns:104px minmax(0,1fr)}.aiv-ready-row{grid-template-columns:1fr 1fr}}
@media(max-width:480px){.aiv-hero{padding:17px}.aiv-hero p{font-size:var(--fs-14, 14px)}.aiv-choice-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.aiv-choice{min-height:44px;padding:6px 4px;font-size:var(--fs-12, 12px)}.aiv-kpis{gap:9px}.aiv-kpi{padding:14px}.aiv-kpi>strong{font-size:var(--fs-25, 25px)}.aiv-trend header{padding:15px 15px 0}.aiv-trend-svg{min-height:190px}.aiv-focus{padding:15px}.aiv-product{grid-template-columns:96px minmax(0,1fr)}.aiv-cover{min-height:178px}.aiv-ready-row{grid-template-columns:1fr}.aiv-section-title h3{font-size:var(--fs-18, 18px)}}
@media(prefers-reduced-motion:reduce){.aiv-actions button,.aiv-product{transition:none}.aiv-actions button:hover,.aiv-product:hover{transform:none}}
.aihold-head { display:flex; align-items:flex-start; justify-content:space-between; gap:18px; margin-bottom:14px; }
.aihold-head h2 { margin:0 0 6px; font-size:var(--fs-22, 22px); color:var(--ink); }
.aihold-head p { margin:0; color:var(--muted); }
.aihold-safe { margin-bottom:16px; padding:12px 14px; border:1px solid #F5D58A; border-radius:var(--radius-lg); background:var(--warning-tint); color:#7C4A03; }
#aiHoldRows { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:14px; }
.aihold-card { overflow:hidden; border:1px solid var(--line); border-radius:var(--radius-lg); background:var(--surface); box-shadow:var(--shadow-sm); }
.aihold-customer { width:100%; min-height:86px; display:flex; align-items:center; gap:12px; padding:16px; border:0; background:transparent; color:var(--ink); text-align:left; }
.aihold-customer:hover { background:var(--surface-alt); }
.aihold-customer:focus-visible,.aihold-resume:focus-visible { outline:none; box-shadow:var(--ring); }
.aihold-avatar { width:46px; height:46px; flex:0 0 46px; display:grid; place-items:center; border-radius:50%; background:var(--primary-tint); color:var(--primary); font-weight:800; }
.aihold-person { min-width:0; display:flex; flex:1; flex-direction:column; }
.aihold-person strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:var(--fs-17, 17px); }
.aihold-person span { color:var(--muted); font-size:var(--fs-14, 14px); }.aihold-person b { color:var(--warning); }
.aihold-arrow { color:var(--muted); font-size:var(--fs-28, 28px); }.aihold-resume { width:calc(100% - 28px); min-height:44px; margin:0 14px 14px; }
.aihold-empty { grid-column:1/-1; min-height:220px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px; border:1px dashed var(--line-2); border-radius:var(--radius-lg); background:var(--surface); text-align:center; }
.aihold-empty span { color:var(--muted); }.aihold-check { width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:var(--success-tint);color:var(--success);font-size:var(--fs-25, 25px);font-weight:800; }
.pulse-panel { margin:22px 0; padding:18px; border:1px solid var(--line); border-radius:var(--radius-lg); background:var(--surface); box-shadow:var(--shadow-xs); }
.pulse-panel .section-title { margin-top:0; }.pulse-list { display:flex; flex-direction:column; gap:10px; }
.pulse-row { display:grid; grid-template-columns:minmax(120px,180px) 1fr; gap:16px; align-items:center; padding:10px 0; border-top:1px solid var(--line); }
.pulse-row:first-child { border-top:0; }.pulse-who { min-width:0; display:flex; flex-direction:column; }.pulse-who strong,.pulse-who span { overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }.pulse-who span { color:var(--muted);font-size:var(--fs-13, 13px); }
.pulse-bars { display:grid; grid-template-columns:repeat(4,minmax(110px,1fr)); gap:12px; }.pulse-metric { display:grid;grid-template-columns:30px 1fr 32px;gap:7px;align-items:center;font-size:var(--fs-13, 13px);color:var(--muted); }.pulse-metric b { text-align:right;color:var(--ink);font-family:var(--mono); }.pulse-track { height:8px;overflow:hidden;border-radius:999px;background:var(--bg-alt); }.pulse-track i { display:block;height:100%;min-width:2px;border-radius:inherit;background:var(--primary); }
@media (max-width:900px){.pulse-row{grid-template-columns:1fr}.pulse-bars{grid-template-columns:repeat(2,minmax(120px,1fr))}.aihold-head{align-items:stretch;flex-direction:column}.aihold-head button{align-self:flex-start}}
@media (prefers-reduced-motion:reduce){.pulse-track i{transition:none!important}}
.stat-member-row:has([data-drill]:focus) { background:var(--primary-tint); }
.stat-drill-row > td { padding:0 12px 14px!important; background:var(--bg-alt); }
.stat-drill-card { overflow:hidden; padding:14px; border:1px solid #BDD0FA; border-left:4px solid var(--primary); border-radius:0 0 var(--radius-lg) var(--radius-lg); background:var(--surface); box-shadow:var(--shadow-xs); }
.stat-drill-card.loading { color:var(--muted); }
.stat-drill-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:10px; }
.stat-drill-head b { margin-right:8px; font-size:var(--fs-15, 15px); color:var(--ink); }
.stat-drill-scroll { max-height:420px; overflow:auto; border:1px solid var(--line); border-radius:var(--radius); }
.stat-drill-scroll thead { position:sticky; top:0; z-index:1; background:var(--surface-alt); }
.sopfb-row { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.sopfb-cat.on { border-color:var(--primary); color:var(--primary); background:var(--primary-tint); }
.sopfb-note { min-width:210px; flex:1; }
.sopfb-tip { font-size:var(--fs-12, 12px); }

/* ========================= 缩略图 / 灯箱 ========================= */
.thumbs { display: flex; gap: 4px; flex-wrap: wrap; }
.thumbs img {
  width: 42px; height: 42px; object-fit: cover;
  border-radius: var(--radius-sm);
  border: 1px solid var(--line-2);
  cursor: pointer;
  transition: transform .12s var(--ease), border-color .12s var(--ease);
}
.thumbs img:hover { transform: scale(1.08); border-color: var(--primary); }
/* 【批3 内容安全】未过审(pending/撤)带看照占位——真图不外露，只显「审核中」灰块 */
.thumb-pending {
  width: 42px; height: 42px; box-sizing: border-box;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm); border: 1px dashed var(--line-2);
  background: #f0ece3; color: #a89a86; font-size: var(--fs-12_5, 12.5px); user-select: none;
}

.lightbox {
  position: fixed; inset: 0; z-index: 200;
  display: none; align-items: center; justify-content: center;
  background: rgba(15,23,42,.78); backdrop-filter: blur(4px);
  cursor: zoom-out;
}
.lightbox.show { display: flex; }
.lightbox img {
  max-width: 88vw; max-height: 88vh;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-xl);
}

/* ========================= 分页 ========================= */
.pager {
  display: flex; align-items: center; gap: 12px; justify-content: center;
  margin-top: 16px;
}
.pager button {
  padding: 9px 16px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); color: var(--ink-2);
  font-weight: 500;
  transition: border-color .14s var(--ease), color .14s var(--ease);
}
.pager button:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); }
.pager button:disabled { opacity: .4; cursor: not-allowed; }
.pager .pinfo { font-family: var(--mono); font-size: var(--fs-14, 14px); color: var(--muted); }

.backlink {
  display: inline-flex; align-items: center; gap: 6px;
  margin-bottom: 4px; color: var(--primary); cursor: pointer;
  font-size: var(--fs-14, 14px); font-weight: 500;
  transition: color .14s var(--ease);
}
.backlink:hover { color: var(--primary-deep); }

/* ========================= 客户详情抽屉 ========================= */
.drawer { position: fixed; inset: 0; z-index: 120; display: none; }
.drawer.show { display: block; }
.drawer-mask {
  position: absolute; inset: 0;
  background: rgba(15,23,42,.4); backdrop-filter: blur(2px);
  animation: drawerFade .2s var(--ease) both;
}
.drawer-panel {
  position: absolute; top: 0; right: 0; height: 100%;
  width: min(620px, 92vw); /* UI v6：随 16px 基准加宽 */
  background: var(--surface);
  border-left: 1px solid var(--line);
  box-shadow: var(--shadow-xl);
  display: flex; flex-direction: column;
  transform: translateX(100%);
  animation: drawerSlide .26s cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes drawerSlide { to { transform: none; } }
@keyframes drawerFade { from { opacity: 0; } to { opacity: 1; } }

.drawer-top {
  display: flex; align-items: center; justify-content: space-between;
  padding: 18px 22px;
  border-bottom: 1px solid var(--line);
}
.drawer-title { font-family: var(--sans); font-weight: 700; font-size: var(--fs-18, 18px); color: var(--ink); }
.drawer-body { padding: 22px 24px 40px; overflow-y: auto; flex: 1; }

/* 详情 Hero */
.d-hero { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 2px; }
.d-name {
  font-family: var(--sans); font-weight: 700; font-size: var(--fs-24, 24px);
  letter-spacing: .5px; color: var(--ink);
}
.d-code { font-family: var(--mono); font-size: var(--fs-15, 15px); color: var(--muted); }
.d-phone {
  font-family: var(--mono); font-size: var(--fs-17, 17px); color: var(--primary);
  margin: 6px 0 2px; letter-spacing: .5px; font-weight: 500;
}
.d-phone .reveal-btn { margin-left: 10px; vertical-align: middle; }
.d-phone .reveal-btn:disabled { opacity: .5; cursor: not-allowed; }
.d-extra { font-family: var(--mono); font-size: var(--fs-14, 14px); color: var(--muted); }
.d-tags { display: flex; gap: 6px; flex-wrap: wrap; margin: 10px 0 2px; }

/* 详情区块 */
.d-sec { margin-top: 22px; }
.d-sec-h {
  font-family: var(--sans); font-weight: 700; font-size: var(--fs-15, 15px);
  color: var(--primary); letter-spacing: .3px;
  padding-bottom: 8px; border-bottom: 1px solid var(--line-2);
  margin-bottom: 12px;
}
.d-sec-h .tag { font-family: var(--sans); font-weight: 400; font-size: var(--fs-13, 13px); color: var(--muted); }

.d-grid {
  display: grid; grid-template-columns: auto 1fr; gap: 8px 16px;
}
.d-grid dt { color: var(--muted); font-size: var(--fs-14, 14px); white-space: nowrap; font-weight: 500; }
.d-grid dd { margin: 0; font-size: var(--fs-15, 15px); color: var(--ink); word-break: break-all; }
.d-grid dd.mono { font-family: var(--mono); }

/* 合作人 */
.coop-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 0; border-bottom: 1px dashed var(--line); font-size: var(--fs-15, 15px);
}
.coop-row:last-child { border-bottom: none; }
.coop-row .since { font-family: var(--mono); font-size: var(--fs-13, 13px); color: var(--muted); }
.coop-del {
  margin-left: 8px; font-size: var(--fs-13, 13px); color: var(--danger); cursor: pointer;
  border-bottom: 1px dashed rgba(220,38,38,.4);
}
.coop-del:hover { color: #B91C1C; border-bottom-style: solid; }

/* ========================= 跟进时间线 ========================= */
.timeline { position: relative; padding-left: 18px; }
.timeline::before {
  content: ''; position: absolute; left: 5px; top: 4px; bottom: 4px;
  width: 2px; background: var(--line-2);
}
.tl-item { position: relative; padding: 0 0 16px 6px; }
.tl-item::before {
  content: ''; position: absolute; left: -16px; top: 4px;
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--primary);
  box-shadow: 0 0 0 3px var(--primary-tint);
}
.tl-item.tl-tag::before { background: var(--warning); box-shadow: 0 0 0 3px var(--warning-tint); }
.tl-item.tl-note::before { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-tint); }
.tl-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 3px; }
.tl-date { font-family: var(--mono); font-size: var(--fs-13_5, 13.5px); color: var(--ink-2); font-weight: 500; }
.tl-author { font-size: var(--fs-13_5, 13.5px); color: var(--muted); }
.tl-body { font-size: var(--fs-15, 15px); color: var(--ink); line-height: 1.65; }
.tl-appt {
  display: inline-block; margin-top: 4px;
  font-family: var(--mono); font-size: var(--fs-13, 13px); color: var(--warning); font-weight: 500;
}

/* ========================= 管理跟进 ========================= */
.note-del {
  margin-left: auto; font-size: var(--fs-13, 13px); color: var(--danger); cursor: pointer;
  border-bottom: 1px dashed rgba(220,38,38,.4);
}
.note-del:hover { color: #B91C1C; border-bottom-style: solid; }
.note-add { display: flex; gap: 8px; align-items: flex-start; margin-top: 14px; }
.note-add textarea {
  flex: 1; resize: vertical; min-height: 44px;
  padding: 9px 12px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface);
  font-family: var(--sans); font-size: var(--fs-15, 15px); line-height: 1.55; color: var(--ink);
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease);
}
.note-add textarea::placeholder { color: var(--muted); }
.note-add textarea:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.note-msg { min-height: 16px; margin-top: 6px; font-size: var(--fs-14, 14px); color: var(--danger); }

/* ========================= 编辑客户区 ========================= */
.ed-row {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 9px 0; border-bottom: 1px dashed var(--line); font-size: var(--fs-15, 15px);
}
.ed-row:last-of-type { border-bottom: none; }
.ed-row.ed-col { flex-direction: column; align-items: stretch; }
.ed-row.ed-col .ed-lab { align-self: flex-start; }
.ed-lab { min-width: 72px; font-size: var(--fs-14, 14px); color: var(--muted); white-space: nowrap; font-weight: 500; }
.ed-hint { font-size: var(--fs-13, 13px); color: var(--muted); }
.ed-row input, .ed-row textarea, .ed-row select {
  flex: 1; min-width: 120px;
  padding: 8px 11px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-family: var(--sans); font-size: var(--fs-15, 15px); color: var(--ink);
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease);
}
.ed-row textarea { resize: vertical; line-height: 1.55; }
.ed-row input:focus, .ed-row textarea:focus, .ed-row select:focus {
  outline: none; border-color: var(--primary); box-shadow: var(--ring);
}
.ed-row .btn-ghost.sm { flex: none; }
.ed-row.ed-col .btn-ghost.sm { align-self: flex-end; }
.ed-inline { display: flex; gap: 8px; align-items: center; }
.ed-inline input { flex: 1; }
.ed-phones { display: flex; gap: 8px; flex-wrap: wrap; font-size: var(--fs-14, 14px); }
.ed-phone {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-family: var(--mono); font-size: var(--fs-14, 14px);
}
.ph-del { color: var(--danger); cursor: pointer; font-weight: 700; padding: 0 2px; }
.ph-del:hover { color: #B91C1C; }

/* 级别按钮 */
.gd-btn {
  width: 36px; height: 32px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-15, 15px); font-weight: 600; color: var(--ink-2);
  cursor: pointer;
  transition: border-color .14s var(--ease), color .14s var(--ease), background .14s var(--ease);
}
.gd-btn:hover { border-color: var(--primary); color: var(--primary); }
.gd-btn.on { background: var(--primary); border-color: var(--primary); color: var(--primary-on); }

/* 跟进行 */
.fu-row {
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
  margin-top: 10px; font-size: var(--fs-14, 14px); color: var(--ink-2);
}
.fu-row label { display: flex; gap: 8px; align-items: center; }
.fu-row input[type="date"] {
  padding: 7px 10px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-family: var(--sans); font-size: var(--fs-14, 14px); color: var(--ink);
  transition: border-color .15s var(--ease);
}
.fu-row input[type="date"]:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }

/* ========================= 录音报告 ========================= */
.rep-row { border-top: 1px solid var(--line); padding: 8px 0; }
.rep-row:first-child { border-top: 0; }
.rep-head { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.rep-who { font-weight: 700; }
.rep-meta { color: var(--muted); font-size: var(--fs-13_5, 13.5px); flex: 1; }
.rep-pdf { display: inline-block; margin: 6px 0; color: var(--primary); text-decoration: underline;
  font-size: var(--fs-14, 14px); }
.rep-text {
  white-space: pre-wrap; word-break: break-word;
  background: var(--bg-alt); border-radius: var(--radius);
  padding: 10px; margin-top: 6px; font-size: var(--fs-14, 14px); line-height: 1.6;
  max-height: 360px; overflow: auto;
}
/* web-v0.8.4：报告正文内联渲染容器（HTML 消毒后 / Markdown 渲染后都套这套排版，配蓝灰皮） */
.rep-html {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 14px 16px; margin-top: 6px; font-size: var(--fs-13_5, 13.5px); line-height: 1.7;
  color: var(--ink-2); word-break: break-word; max-height: 460px; overflow: auto;
}
.rep-html h1, .rep-html h2, .rep-html h3, .rep-html h4, .rep-html h5, .rep-html h6 {
  color: var(--ink); font-weight: 700; line-height: 1.35; margin: 14px 0 6px;
}
.rep-html h1 { font-size: var(--fs-17, 17px); } .rep-html h2 { font-size: var(--fs-15_5, 15.5px); } .rep-html h3 { font-size: var(--fs-14_5, 14.5px); }
.rep-html h4, .rep-html h5, .rep-html h6 { font-size: var(--fs-13_5, 13.5px); color: var(--ink-2); }
.rep-html > :first-child { margin-top: 0; }
.rep-html p { margin: 6px 0; }
.rep-html ul, .rep-html ol { margin: 6px 0; padding-left: 22px; }
.rep-html li { margin: 3px 0; }
.rep-html strong, .rep-html b { color: var(--ink); font-weight: 700; }
.rep-html hr { border: 0; border-top: 1px solid var(--line); margin: 12px 0; }
.rep-html blockquote {
  margin: 8px 0; padding: 6px 12px; color: var(--muted);
  border-left: 3px solid var(--primary); background: var(--primary-tint); border-radius: 0 6px 6px 0;
}
.rep-html code {
  font-family: var(--mono, ui-monospace, monospace); font-size: var(--fs-13_5, 13.5px);
  background: var(--bg-alt); padding: 1px 5px; border-radius: 4px;
}
.rep-html pre { background: var(--bg-alt); border-radius: 6px; padding: 10px; overflow: auto; }
.rep-html pre code { background: none; padding: 0; }
.rep-html table { border-collapse: collapse; width: 100%; margin: 8px 0; font-size: var(--fs-14, 14px); }
.rep-html th, .rep-html td { border: 1px solid var(--line); padding: 6px 8px; text-align: left; }
.rep-html th { background: var(--bg-alt); color: var(--ink); font-weight: 600; }
.rep-html a { color: var(--primary); text-decoration: underline; }
.rep-html + .rep-pdf { margin-top: 8px; font-size: var(--fs-13_5, 13.5px); color: var(--muted); text-decoration: underline; }

/* ===== web-v0.8.5：思为/Aidee 报告「彩色卡片」（识别分块后套我们自管的安全样式；复用本皮的设计变量，仍是蓝灰皮）===== */
.rep-cards { margin-top: 6px; max-height: 540px; overflow: auto; }
.rep-cards + .rep-pdf { margin-top: 8px; font-size: var(--fs-13_5, 13.5px); color: var(--muted); text-decoration: underline; }
.rc-hero { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 10px; }
.rc-eyebrow { font-size: var(--fs-11_5, 11.5px); letter-spacing: .12em; text-transform: uppercase; color: var(--primary); font-weight: 700; margin-bottom: 6px; }
.rc-title { font-size: var(--fs-17, 17px); font-weight: 700; color: var(--ink); line-height: 1.4; }
.rc-hero .rc-sub { font-size: var(--fs-13_5, 13.5px); color: var(--muted); margin-top: 4px; }
.rc-sum { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.rc-sum-item { flex: 1 1 120px; min-width: 108px; background: var(--primary-tint); border: 1px solid #BFDBFE; border-radius: 10px; padding: 8px 12px; }
.rc-sum-l { font-size: var(--fs-11, 11px); letter-spacing: .04em; text-transform: uppercase; color: var(--primary); font-weight: 600; margin-bottom: 3px; }
.rc-sum-v { font-size: var(--fs-15, 15px); font-weight: 700; color: var(--ink); line-height: 1.35; }
.rc-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.rc-chip { font-size: var(--fs-12_5, 12.5px); padding: 3px 9px; border-radius: 20px; background: var(--bg-alt); border: 1px solid var(--line); color: var(--ink-2); }
.rc-card { background: var(--surface); border: 1px solid var(--line); border-left: 3px solid var(--line-2); border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; }
.rc-card .rc-label { font-size: var(--fs-11, 11px); font-weight: 700; letter-spacing: .1em; color: var(--muted); margin-bottom: 6px; display: flex; align-items: center; gap: 6px; }
.rc-card .rc-label::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--off); display: inline-block; flex-shrink: 0; }
.rc-card .rc-ctitle { font-size: var(--fs-14_5, 14.5px); font-weight: 700; color: var(--ink); line-height: 1.45; margin-bottom: 5px; }
.rc-card .rc-text { font-size: var(--fs-13_5, 13.5px); line-height: 1.7; color: var(--ink-2); white-space: pre-line; margin: 4px 0; }
.rc-card .rc-text.rc-muted { font-size: var(--fs-13_5, 13.5px); color: var(--muted); }
.rc-card .rc-quote { border-left: 3px solid var(--line-2); background: var(--bg-alt); border-radius: 0 6px 6px 0; padding: 7px 10px; margin: 7px 0; font-size: var(--fs-14, 14px); line-height: 1.6; color: var(--ink-2); }
.rc-card .rc-quote-src { font-size: var(--fs-11_5, 11.5px); color: var(--muted); margin-top: 3px; }
.rc-hero .rc-quote { border-left: 3px solid var(--primary); background: var(--primary-tint); border-radius: 0 6px 6px 0; padding: 7px 10px; margin: 12px 0 0; font-size: var(--fs-14, 14px); line-height: 1.6; color: var(--ink-2); }
.rc-card ul.rc-bul { margin: 6px 0; padding-left: 18px; }
.rc-card ul.rc-bul li { margin: 3px 0; font-size: var(--fs-13_5, 13.5px); line-height: 1.6; color: var(--ink-2); }
.rc-card table.rc-tbl { border-collapse: collapse; width: 100%; margin: 6px 0; font-size: var(--fs-13_5, 13.5px); }
.rc-card table.rc-tbl th, .rc-card table.rc-tbl td { border: 1px solid var(--line); padding: 6px 8px; text-align: left; vertical-align: top; line-height: 1.5; }
.rc-card table.rc-tbl th { background: var(--bg-alt); color: var(--ink); font-weight: 600; font-size: var(--fs-12_5, 12.5px); }
/* 四色变体（蓝=整体判断 / 绿=确认·行动 / 黄=洞察·话术 / 红=风险·断点；权威取自思为自标 block-*） */
.rc-card.blue { background: var(--primary-tint); border-color: #BFDBFE; border-left-color: var(--primary); }
.rc-card.blue .rc-label { color: var(--primary-deep); } .rc-card.blue .rc-label::before { background: var(--primary); } .rc-card.blue .rc-ctitle { color: var(--primary-deep); }
.rc-card.green { background: var(--success-tint); border-color: #BBF7D0; border-left-color: var(--success); }
.rc-card.green .rc-label { color: #15803D; } .rc-card.green .rc-label::before { background: var(--success); }
.rc-card.amber { background: var(--warning-tint); border-color: #FCD34D; border-left-color: var(--warning); }
.rc-card.amber .rc-label { color: #B45309; } .rc-card.amber .rc-label::before { background: var(--warning); }
.rc-card.red { background: var(--danger-tint); border-color: #FCA5A5; border-left-color: var(--danger); }
.rc-card.red .rc-label { color: #B91C1C; } .rc-card.red .rc-label::before { background: var(--danger); }

/* ========================= 概览看板 ========================= */
/* web-v0.9：首页数据看板三栏网格（.span2=左侧大块占两列）。.board 仅首页 viewOverview 用，改它不影响其它视图。 */
.board {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px; align-items: stretch; /* UI v6：两栏等高，左卡白底延伸到与右栏同底、消色差空白 */
  margin-top: 18px;
}
.board .span2 { grid-column: span 2; display: flex; flex-direction: column; }
.board .span2 .due-body { flex: 1; }
.panel {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.panel-head {
  display: flex; align-items: center; gap: 12px;
  padding: 17px 22px 14px;
  border-bottom: 1px solid var(--line);
}
.panel-head h3 {
  font-family: var(--sans); font-weight: 700; font-size: var(--fs-17, 17px);
  letter-spacing: .3px; color: var(--ink); margin: 0;
}
.panel-head .tag {
  font-size: var(--fs-13, 13px); color: var(--muted);
  background: var(--bg-alt); border: 1px solid var(--line);
  border-radius: var(--radius-full); padding: 2px 10px;
}

/* 客户池分布条 */
.dist { padding: 16px 18px; display: flex; flex-direction: column; gap: 14px; }
.dist-row { display: flex; align-items: center; gap: 12px; }
.dist-row .nm { flex: 0 0 56px; width: 56px; font-size: var(--fs-14, 14px); color: var(--ink-2); font-weight: 500; }
.dist-row .track {
  flex: 1; height: 10px; border-radius: 5px;
  background: var(--bg-alt); overflow: hidden;
}
.dist-row .fill { height: 100%; border-radius: 5px; transition: width .4s var(--ease); }
.dist-row .v {
  flex: 0 0 96px; width: 96px; text-align: right;
  font-family: var(--mono); font-size: var(--fs-14, 14px); color: var(--ink-2);
}
.dist-row .v small { color: var(--muted); font-size: var(--fs-12_5, 12.5px); margin-left: 4px; }
.fill.f1 { background: var(--k1); }
.fill.f2 { background: var(--k3); }
.fill.f3 { background: var(--k2); }
.fill.f4 { background: var(--k4); }

/* 概览右侧 */
.ov-side { display: flex; flex-direction: column; padding: 6px 18px 4px; }
.ov-line {
  display: flex; align-items: center; justify-content: space-between;
  padding: 11px 0; border-bottom: 1px dashed var(--line);
}
.ov-line:last-child { border-bottom: none; }
.ov-line .k { font-size: var(--fs-14, 14px); color: var(--ink-2); }
.ov-line .val { font-family: var(--mono); font-size: var(--fs-18, 18px); font-weight: 600; color: var(--primary); }
.ov-note {
  padding: 13px 18px; border-top: 1px solid var(--line);
  font-size: var(--fs-14, 14px); line-height: 1.7; color: var(--ink-2);
}
.ov-note b { color: var(--ink); }

/* ========================= 积分排名 ========================= */
.sc-toolbar { display: flex; align-items: center; gap: 10px; margin: 10px 0; flex-wrap: wrap; }
.sc-week { font-weight: 700; font-family: var(--mono); font-size: var(--fs-15, 15px); color: var(--ink); }
.sc-note { color: var(--muted); font-size: var(--fs-13_5, 13.5px); margin: 4px 0 12px; line-height: 1.6; }
.sc-list { display: flex; flex-direction: column; gap: 10px; }

/* v2.4 汗水币·自助兑换：我的钱包卡 */
.coin-mine { border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; margin: 10px 0 16px;
  background: linear-gradient(135deg, var(--card), #f3faf6); }
.coin-mine-top { display: flex; align-items: center; justify-content: space-between; }
.coin-mine-label { font-weight: 700; color: var(--ink); }
.coin-mine-bal { font-family: var(--mono); font-weight: 700; font-size: var(--fs-22, 22px); color: var(--primary-deep); }
.coin-mine-act { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 12px 0 4px; }
/* v2.4.1：规则句 / 今日剩余 / 条数输入框 / 预校验提示 / 个人-部门切换 */
.coin-rule { font-size: var(--fs-13, 13px); margin-bottom: 8px; }
.coin-mine-sub { font-size: var(--fs-13, 13px); margin: 4px 0 2px; }
.coin-qty { width: 64px; padding: 6px 8px; border: 1px solid var(--line); border-radius: 8px; font-family: var(--mono); text-align: center; }
.coin-hint { font-size: var(--fs-13, 13px); color: #c0392b; }
.coin-scope { display: flex; gap: 8px; margin: 12px 0 4px; }
.coin-scope-btn { padding: 5px 16px; border: 1px solid var(--line); border-radius: 999px; background: var(--card); color: var(--muted); cursor: pointer; font-size: var(--fs-14, 14px); }
.coin-scope-btn.on { background: var(--primary-deep); border-color: var(--primary-deep); color: #fff; }
.coin-led { display: flex; flex-direction: column; margin-top: 8px; border-top: 1px solid var(--line); }
.coin-led-empty { margin-top: 10px; }
.coin-led-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--line); }
.coin-led-l { display: flex; flex-direction: row; align-items: baseline; gap: 10px; }
.coin-led-rsn { font-size: var(--fs-14, 14px); color: var(--ink); }
.coin-led-when { font-size: var(--fs-11_5, 11.5px); color: var(--muted); font-family: var(--mono); }
.coin-led-delta { font-family: var(--mono); font-weight: 700; font-size: var(--fs-15, 15px); }
.coin-led-delta.neg { color: #c0392b; }
.coin-led-delta.pos { color: #1a7a4a; }

.sc-row {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  background: var(--surface);
  box-shadow: var(--shadow-xs);
  transition: border-color .14s var(--ease), box-shadow .14s var(--ease);
}
.sc-row:hover { border-color: var(--primary); box-shadow: var(--shadow-sm); }

.sc-rank { width: 36px; text-align: center; font-size: var(--fs-20, 20px); flex: none; }
.sc-num { font-family: var(--mono); font-weight: 700; color: var(--ink-2); font-size: var(--fs-15, 15px); }
.sc-main { flex: 1; min-width: 0; }
.sc-line { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.sc-name { font-weight: 700; font-size: var(--fs-15, 15px); color: var(--ink); }
.sc-total { font-family: var(--mono); font-weight: 700; color: var(--primary); font-size: var(--fs-16, 16px); }
.sc-track {
  height: 6px; background: var(--primary-tint);
  border-radius: 3px; margin: 6px 0; overflow: hidden;
}
.sc-fill { height: 100%; background: var(--primary); border-radius: 3px; }
.sc-detail { color: var(--muted); font-size: var(--fs-13, 13px); line-height: 1.5; }

/* ========================= 批量导入 ========================= */
.imp-help {
  margin: 2px 0 14px; padding: 12px 14px;
  background: var(--surface); border: 1px solid var(--line);
  border-left: 3px solid var(--primary);
  border-radius: var(--radius);
  font-size: var(--fs-14, 14px); line-height: 1.7; color: var(--ink-2);
}
.imp-help > div { margin: 2px 0; }
.imp-help b { color: var(--ink); font-weight: 600; }

.imp-summary {
  margin: 14px 0 4px; padding: 14px 16px;
  background: var(--surface-alt);
  border: 1px solid var(--line-2);
  border-radius: var(--radius-lg);
  line-height: 1.8;
}
.imp-summary.ok { background: var(--success-tint); border-color: #BBF7D0; }
.imp-summary b { color: var(--primary); font-family: var(--mono); }
.imp-summary .muted { font-size: var(--fs-13_5, 13.5px); color: var(--muted); }
.imp-big { font-family: var(--sans); font-weight: 700; font-size: var(--fs-17, 17px); color: var(--ink); margin-top: 4px; }
.imp-big b { font-size: var(--fs-20, 20px); color: var(--primary); }

.imp-pend-owner {
  margin: 12px 0 4px; padding: 13px 15px;
  background: var(--warning-tint);
  border: 1px solid var(--warning);
  border-left: 3px solid var(--warning);
  border-radius: var(--radius);
  line-height: 1.7;
}
.imp-pend-owner .ipo-h { font-size: var(--fs-14, 14px); color: var(--ink-2); margin-bottom: 9px; }
.imp-pend-owner .ipo-h b { font-family: var(--mono); color: var(--danger); }
.imp-pend-owner .ipo-table { overflow: auto; }
.imp-pend-owner table {
  width: 100%; border-collapse: collapse; font-size: var(--fs-14, 14px);
  background: var(--surface); border-radius: var(--radius); overflow: hidden;
}
.imp-pend-owner th {
  text-align: left; font-weight: 600; color: var(--muted);
  background: var(--bg-alt); padding: 7px 10px;
  border-bottom: 1px solid var(--line); font-size: var(--fs-13, 13px);
}
.imp-pend-owner td {
  padding: 7px 10px; border-bottom: 1px solid var(--line); color: var(--ink);
}
.imp-pend-owner td.num { font-family: var(--mono); }
.imp-pend-owner .ipo-ta {
  width: 100%; box-sizing: border-box; resize: vertical;
  font-family: var(--mono); font-size: var(--fs-13_5, 13.5px); line-height: 1.7;
  padding: 8px 10px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); color: var(--ink-2);
}

/* ========================= 改密弹窗 ========================= */
.modal-mask {
  position: fixed; inset: 0; z-index: 120;
  display: flex; align-items: center; justify-content: center;
  background: rgba(15,23,42,.46); backdrop-filter: blur(2px);
}
.modal-card {
  width: 380px; max-width: 92vw;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-xl);
  padding: 24px 26px 22px;
  box-shadow: var(--shadow-xl);
}
.modal-title { font-size: var(--fs-18, 18px); font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.modal-hint { font-size: var(--fs-14, 14px); color: var(--muted); line-height: 1.6; margin-bottom: 8px; }
.modal-card label {
  display: block; font-size: var(--fs-14, 14px); font-weight: 600;
  color: var(--ink-2); margin: 14px 0 6px; letter-spacing: .5px;
}
.modal-card input {
  width: 100%; padding: 11px 13px;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-15, 15px); color: var(--ink);
  box-sizing: border-box;
  transition: border-color .15s var(--ease);
}
.modal-card input:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.modal-actions {
  display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px;
}
.modal-actions .btn-primary { width: auto; margin-top: 0; padding: 10px 22px; letter-spacing: 0; }
.modal-actions .btn-ghost { padding: 10px 18px; }

/* ========================= 动效偏好 ========================= */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}

/* ========================= 响应式 ========================= */
/* web-v0.9 首页看板三栏：大屏 3 列；中屏(≤1200)2 列、左大块仍占满整行；小屏(≤860)单列。 */
@media (max-width: 1400px) {
  .board { gap: 14px; }
}
@media (max-width: 1200px) {
  .board { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .board .span2 { grid-column: span 2; }
}
/* 1024px 窗口扣掉 244px 侧栏后，顶栏同样需要弹性换行；不改变这一档的侧栏形态。 */
@media (min-width: 861px) and (max-width: 1100px) {
  .topbar { flex-wrap: wrap; height: auto; min-height: 66px; padding: 10px 16px; gap: 8px 12px; }
  .crumb { min-width: 0; max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
  .search { flex: 1 1 160px; min-width: 0; }
  .search input { flex: 1 1 60px; width: auto; min-width: 0; }
  .search input:focus { width: auto; }
  .acct { flex-wrap: wrap; min-width: 0; max-width: 100%; row-gap: 6px; }
}

@media (max-width: 860px) {
  .board { grid-template-columns: 1fr; }
  .board .span2 { grid-column: span 1; }
}

@media (max-width: 860px) {
  .side { width: 64px; flex-basis: 64px; }
  .sb-sub, .side-foot { display: none; }
  .nav a { justify-content: center; font-size: 0; gap: 0; overflow: hidden; }
  .nav a i { font-size: var(--fs-15, 15px); }
  .content { padding: 16px 16px 40px; }
  .drawer-panel { width: 92vw; }
  /* 【375 响应修复·2026-07-27】顶栏允许换行并让搜索/账户区收缩，窄屏不再横向撑破。 */
  .topbar { flex-wrap: wrap; height: auto; min-height: 66px; padding: 10px 16px; gap: 8px 12px; }
  .crumb { min-width: 0; max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
  .search { flex: 1 1 160px; min-width: 0; }
  .search input { flex: 1 1 60px; width: auto; min-width: 0; }
  .search input:focus { width: auto; }
  .acct { flex-wrap: wrap; min-width: 0; max-width: 100%; row-gap: 6px; }
}

/* ===== web-v0.8.3 补全：app.js 用到、v2 未显式给规则的 3 个 class ===== */
/* 报告展开容器（reportGet 的 PDF 链 + 正文塞这里；.rep-pdf/.rep-text 已在上面有样式）*/
.rep-detail { margin-top: 6px; }
.rep-detail:empty { margin-top: 0; }
/* 「查看报告」按钮已套 .btn-ghost.sm，这里只把它在 .rep-head 里推到右侧 */
.rep-view { margin-left: auto; }
/* 导入·已是他人客户表里的「复制」小按钮 */
.ipo-copy { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; font-size: var(--fs-13, 13px); font-weight: 500;
  color: var(--ink-2); background: var(--surface); border: 1px solid var(--line-2); border-radius: var(--radius-sm); cursor: pointer; }
.ipo-copy:hover { border-color: var(--primary); color: var(--primary); }

/* ===== web-v0.9：录音报告大窗（抽屉内联→屏幕居中大窗；z-index 140 盖在抽屉 120 之上）===== */
.rep-modal { position: fixed; inset: 0; z-index: 140; display: none; }
.rep-modal.show { display: block; }
.rep-modal-mask { position: absolute; inset: 0; background: rgba(15,23,42,.5); backdrop-filter: blur(2px); }
.rep-modal-card {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 860px; max-width: 94vw; max-height: 90vh;
  display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); overflow: hidden;
}
.rep-modal-top {
  display: flex; align-items: center; gap: 10px;
  padding: 16px 20px; border-bottom: 1px solid var(--line); flex: 0 0 auto;
}
.rep-modal-title { font-size: var(--fs-16, 16px); font-weight: 700; color: var(--ink); flex: 1; min-width: 0; }
.rep-modal-top .btn-ghost { margin-left: auto; }
.rep-modal-body { padding: 16px 20px; overflow-y: auto; flex: 1 1 auto; min-height: 0; }
/* 报告卡片在弹窗里由弹窗 body 统一滚动，去掉 .rep-cards 自带的 540 内滚（不改 buildReportBody，仅 CSS 覆盖）*/
.rep-modal-body .rep-cards { max-height: none; overflow: visible; }
.rep-modal-foot {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 10px 20px 14px; border-top: 1px solid var(--line); flex: 0 0 auto;
}
.rep-modal-foot .rep-modal-disc { font-size: var(--fs-12_5, 12.5px); color: var(--muted); flex: 1; min-width: 120px; line-height: 1.5; }
.rep-modal-foot .rep-pdf { margin: 0; }

/* ========================= 首页排名卡片（三栏布局核心） ========================= */

/* 排名 tab 条 */
.rank-tabs {
  display: flex; gap: 4px; padding: 10px 14px 0; border-bottom: 1px solid var(--line);
}
.rank-tabs button {
  padding: 6px 14px; border: 1px solid transparent; border-radius: var(--radius) var(--radius) 0 0;
  background: transparent; font-size: var(--fs-13, 13px); font-weight: 500; color: var(--muted);
  transition: all .14s var(--ease);
}
.rank-tabs button:hover { color: var(--primary); background: var(--bg-alt); }
.rank-tabs button.active {
  color: var(--primary); background: var(--surface);
  border-color: var(--line) var(--line) var(--surface) var(--line);
  margin-bottom: -1px;
}

/* 排名滚动列表 */
.rank-list { padding: 6px 10px 10px; max-height: 440px; overflow-y: auto; }
.rank-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 10px; border-radius: var(--radius);
  transition: background .12s var(--ease); margin-bottom: 4px;
}
.rank-item:hover { background: var(--bg-alt); }
.rank-item:last-child { margin-bottom: 0; }

/* 排名数字（含金银铜） */
.rank-num {
  width: 28px; height: 28px; flex: 0 0 28px;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--mono); font-size: var(--fs-13, 13px); font-weight: 700; color: var(--muted);
}
.rank-num.gold {
  background: linear-gradient(135deg, #FFD700, #FFA500);
  color: #fff; border-radius: 50%; box-shadow: 0 2px 4px rgba(255,165,0,0.3);
}
.rank-num.silver {
  background: linear-gradient(135deg, #C0C0C0, #A0A0A0);
  color: #fff; border-radius: 50%; box-shadow: 0 2px 4px rgba(160,160,160,0.3);
}
.rank-num.bronze {
  background: linear-gradient(135deg, #CD7F32, #B87333);
  color: #fff; border-radius: 50%; box-shadow: 0 2px 4px rgba(184,115,51,0.3);
}

/* 头像 */
.rank-avatar {
  width: 36px; height: 36px; flex: 0 0 36px;
  border-radius: var(--radius); object-fit: cover;
  border: 1px solid var(--line);
}

/* 信息区 */
.rank-info { flex: 1; min-width: 0; }
.rank-name-row {
  display: flex; align-items: center; gap: 6px; margin-bottom: 1px;
}
.rank-name { font-weight: 600; font-size: var(--fs-14, 14px); color: var(--ink); }
.rank-badge {
  font-size: var(--fs-11, 11px); color: var(--primary); background: var(--primary-tint);
  border: 1px solid #BFDBFE; border-radius: var(--radius-full); padding: 1px 6px;
}
.rank-detail { font-size: var(--fs-12_5, 12.5px); color: var(--muted); line-height: 1.4; }

/* 排名尾部 */
.rank-tail { flex: 0 0 54px; text-align: right; }
.rank-value {
  font-family: var(--mono); font-size: var(--fs-16, 16px); font-weight: 700; color: var(--primary);
}
.rank-value.gold { color: #D97706; }
.rank-value.silver { color: var(--ink-2); }
.rank-value.bronze { color: #B87333; }

/* 日统计芯片 */
.date-chips {
  display: flex; gap: 6px; margin-bottom: 10px; overflow-x: auto; padding-bottom: 4px;
}
.date-chip {
  flex: 0 0 60px; padding: 8px 4px; text-align: center;
  background: var(--bg-alt); border: 1px solid var(--line); border-radius: var(--radius);
  cursor: pointer; transition: all .14s var(--ease);
}
.date-chip .d { font-size: var(--fs-12_5, 12.5px); color: var(--muted); }
.date-chip .n { font-family: var(--mono); font-size: var(--fs-16, 16px); font-weight: 700; }
.date-chip .date { font-size: var(--fs-11, 11px); color: var(--muted); margin-top: 2px; }
.date-chip.active {
  background: var(--primary); border-color: var(--primary); color: var(--primary-on);
}
.date-chip.active .d,
.date-chip.active .date { color: rgba(255,255,255,0.7); }

/* 小统计行 */
.mini-stats {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 10px;
}
.mini-stat {
  text-align: center; padding: 10px 6px;
  background: var(--bg-alt); border-radius: var(--radius);
}
.mini-stat .n { font-family: var(--mono); font-size: var(--fs-18, 18px); font-weight: 700; color: var(--primary); }
.mini-stat .l { font-size: var(--fs-12_5, 12.5px); color: var(--muted); margin-top: 2px; }

/* 紧凑客户池分布（底部） */
.pool-mini { padding: 10px 16px 14px; border-top: 1px solid var(--line); }
.pool-title { font-size: var(--fs-13, 13px); font-weight: 600; color: var(--ink-2); margin-bottom: 8px; }
.pool-bars { display: flex; flex-direction: column; gap: 6px; }
.pool-row { display: flex; align-items: center; gap: 8px; }
.pool-label { width: 44px; font-size: var(--fs-12_5, 12.5px); color: var(--muted); }
.pool-track { flex: 1; height: 8px; background: var(--bg-alt); border-radius: 4px; overflow: hidden; }
.pool-fill { height: 100%; border-radius: 4px; }
.pool-fill.f1 { background: var(--k1); }
.pool-fill.f2 { background: var(--k3); }
.pool-fill.f3 { background: var(--k2); }
.pool-fill.f4 { background: var(--k4); }
.pool-val { width: 48px; text-align: right; font-family: var(--mono); font-size: var(--fs-13, 13px); color: var(--ink-2); }
.pool-val small { color: var(--muted); font-size: var(--fs-11, 11px); }

/* ========================= 快捷操作 ========================= */
.quick-actions { display: flex; gap: 10px; padding: 14px 18px; border-top: 1px solid var(--line); }
.qa-btn {
  flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px;
  padding: 11px 14px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14, 14px); font-weight: 600; color: var(--ink-2);
  transition: all .14s var(--ease); cursor: pointer;
}
.qa-btn:hover { border-color: var(--primary); color: var(--primary); box-shadow: var(--shadow-sm); }
.qa-btn.primary-btn { background: var(--primary); color: var(--primary-on); border-color: var(--primary); }
.qa-btn.primary-btn:hover { background: var(--primary-deep); }
.qa-btn .qa-icon { font-size: var(--fs-16, 16px); }

/* 待跟进列表 */
.follow-list { display: flex; flex-direction: column; }
.follow-item {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 18px; border-bottom: 1px solid var(--bg-alt);
  transition: background .12s var(--ease);
}
.follow-item:hover { background: var(--bg-alt); }
.follow-item .fi-dot {
  width: 8px; height: 8px; flex: 0 0 8px; border-radius: 50%;
}
.follow-item .fi-dot.urgent { background: var(--danger); }
.follow-item .fi-dot.normal { background: var(--warning); }
.follow-item .fi-dot.info { background: var(--primary); }
.follow-item .fi-main { flex: 1; min-width: 0; }
.follow-item .fi-title { font-size: var(--fs-14, 14px); font-weight: 600; color: var(--ink); }
.follow-item .fi-sub { font-size: var(--fs-12_5, 12.5px); color: var(--muted); margin-top: 1px; }
.follow-item .fi-tag {
  font-size: var(--fs-12_5, 12.5px); padding: 2px 8px; border-radius: var(--radius-full);
  font-weight: 500; white-space: nowrap;
}
.fi-tag.red { background: var(--danger-tint); color: #B91C1C; }
.fi-tag.amber { background: var(--warning-tint); color: #B45309; }
.fi-tag.blue { background: var(--primary-tint); color: var(--primary); }
/* web-v0.9：待跟进可点条目（feed 跳对应页）；占位行不可点 */
.follow-item.clickable { cursor: pointer; }
.follow-item.placeholder { cursor: default; }
.follow-item.placeholder:hover { background: transparent; }

/* 速递卡片 */
.express-list { display: flex; flex-direction: column; }
.express-item {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 11px 16px; border-bottom: 1px solid var(--bg-alt);
  transition: background .12s var(--ease);
}
.express-item:hover { background: var(--bg-alt); }
.express-item .ex-icon {
  width: 28px; height: 28px; flex: 0 0 28px;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius); font-size: var(--fs-14, 14px);
}
.ex-icon.policy { background: var(--primary-tint); color: var(--primary); }
.ex-icon.hot { background: var(--danger-tint); color: #B91C1C; }
.ex-icon.new { background: var(--success-tint); color: var(--success); }
.ex-icon.cut { background: var(--warning-tint); color: #B45309; }
.express-item .ex-main { flex: 1; min-width: 0; }
.express-item .ex-title { font-size: var(--fs-13, 13px); font-weight: 600; color: var(--ink); line-height: 1.3; }
.express-item .ex-sub { font-size: var(--fs-12_5, 12.5px); color: var(--muted); margin-top: 2px; }
/* 姓名首字头像（替代外部头像图，避免外网依赖） */
.rank-avatar.ava{display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:var(--fs-15, 15px);}
/* 本轮·纯前端：概览右栏「特价房源清单」绝对填充，撑满到与左侧待跟进看板等高、且不反向撑高该行。
   仅 .board(概览 viewOverview) 语境生效；独立页 viewSpecials 不在 .board 内，sp-scroll 保持原 max-height:340px。
   stack-col 只当定位容器(align-self:stretch 拉到行高=较高的待跟进)；stack-inner 绝对铺满后 flex 列布局，
   规则速递按自然高、特价房 flex:1 吃掉剩余；sp-scroll min-height:0 避免内容很短时顶破行高。
   三排名区也是 .board，但没有 stack-col/stack-inner/sp-list-panel 这些类，选择器天然不旅行。 */
/* v3.0.2：右栏由「absolute 定高 + 特价房吃满剩余高」改为自然流三卡叠——特价房摘要卡自带
   max-height 内滚（.spov-list），三卡（审批待办/成交监测/特价房）互不挤压、成交监测稳定可见；
   右栏高于左栏时 .board stretch 撑行、左栏白底跟随（v3.0.0 等高机制双向成立）。 */
/* 【经纪人外置大脑·web-v4.6.0】第三卡换成对话卡后，右栏要能把「行高减去前两卡」的剩余高度交给它：
   stack-col（align-self:stretch，高度=行高）转 flex 列，stack-inner 撑满该高度，
   对话卡再 flex:1 吃掉剩余（见文件尾 .brain-card）。审批卡/成交监测卡仍按自然高、一点没动。 */
.board .stack-col { position: static; align-self: stretch; min-height: 0; display: flex; flex-direction: column; }
.board .stack-inner { position: static; display: flex; flex-direction: column; gap: 16px; flex: 1 1 auto; min-height: 0; }
.board .stack-inner > #rulesPanel { flex: 0 0 auto; }
.board .sp-list-panel { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.board .sp-list-panel .panel-head,
.board .sp-list-panel .sp-search-wrap { flex: 0 0 auto; }
.board .sp-list-panel #spView { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.board .sp-scroll { max-height: none; flex: 1 1 auto; min-height: 0; }
/* 排名卡空态 */
.rank-empty { padding: 22px 14px; text-align: center; color: var(--muted); font-size: var(--fs-14, 14px); }

/* ====== web-v0.9.3：首页「待跟进」看板 ====== */
.due-n { font-family: var(--mono); font-weight: 700; color: var(--primary); margin-left: 2px; }
/* 面板头右侧工具区（scope 切换 + 收起按钮）推到最右 */
.due-tools { margin-left: auto; display: flex; align-items: center; gap: 10px; }
/* scope 切换：私客 / 部门池 */
.due-scope { display: inline-flex; border: 1px solid var(--line-2); border-radius: var(--radius-full); overflow: hidden; }
.due-scope button {
  border: none; background: var(--surface); color: var(--ink-2);
  font-family: var(--sans); font-size: var(--fs-13, 13px); font-weight: 600; padding: 4px 12px; cursor: pointer;
  transition: all .14s var(--ease);
}
.due-scope button + button { border-left: 1px solid var(--line); }
.due-scope button.active { background: var(--primary); color: var(--primary-on); }
/* 收起 / 展开（▼，收起态旋转 -90°） */
.due-collapse {
  border: 1px solid var(--line-2); background: var(--surface); color: var(--muted);
  width: 26px; height: 24px; border-radius: var(--radius-sm); cursor: pointer; line-height: 1;
  font-size: var(--fs-13, 13px); transition: transform .16s var(--ease);
}
.due-collapse:hover { color: var(--ink); }
.due-collapsed .due-collapse { transform: rotate(-90deg); }
.due-collapsed .due-body { display: none; }
.due-collapsed .express-list { display: none; } /* 规则速递复用 due-collapsed 折叠 */
/* 看板主体 */
.due-body { padding: 14px 16px; }
.due-chips { margin-bottom: 12px; }
.due-cards { display: flex; flex-direction: column; gap: 8px; }
.due-empty { color: var(--muted); font-size: var(--fs-14, 14px); font-style: italic; padding: 18px 4px; text-align: center; }
/* 单张待跟进卡片 */
.due-card {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 10px 12px; background: var(--surface-alt);
  border: 1px solid var(--line); border-radius: var(--radius);
  cursor: pointer; transition: all .14s var(--ease);
}
.due-card:hover { border-color: var(--line-2); background: var(--surface); box-shadow: 0 1px 4px rgba(15,23,42,.05); }
.due-ava { flex: 0 0 auto; }
.due-ava .rank-avatar { width: 34px; height: 34px; font-size: var(--fs-15, 15px); }
.due-main { flex: 1 1 auto; min-width: 0; }
.due-title {
  display: flex; align-items: center; gap: 8px;
  font-size: var(--fs-15, 15px); font-weight: 600; color: var(--ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.due-badge {
  flex: 0 0 auto; color: #fff; font-size: var(--fs-12_5, 12.5px); font-weight: 700;
  padding: 1px 8px; border-radius: var(--radius-full); letter-spacing: .3px;
}
.due-need { font-size: var(--fs-13, 13px); color: var(--muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.due-meta { font-size: var(--fs-13, 13px); color: var(--ink-2); margin-top: 3px; }
.due-orphan { font-size: var(--fs-13, 13px); color: #c08a2e; margin-top: 3px; }
.due-next { font-size: var(--fs-13, 13px); color: var(--ink); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 看板下方「管理待办」小段（成交/报备/废客/待分配，复用 follow-item 行样式） */
.due-todo { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--line); }
.due-todo-h { font-size: var(--fs-13, 13px); font-weight: 700; color: var(--muted); letter-spacing: .5px; margin-bottom: 6px; }
.due-pager { margin-top: 10px; }

/* web-v0.9.9：特价房源清单 卡片 + 自动上下循环滚动（鼠标移上去暂停；变量取不到给兜底色） */
.sp-scroll{ max-height:340px; overflow-y:auto; overflow-x:hidden; position:relative;
            scrollbar-width:thin; scrollbar-color:var(--line,#cbd5e1) transparent; }
.sp-scroll::-webkit-scrollbar{ width:8px; }
.sp-scroll::-webkit-scrollbar-thumb{ background:var(--line,#cbd5e1); border-radius:4px; }
.sp-scroll::-webkit-scrollbar-track{ background:transparent; }
.sp-seg{ display:flex; flex-direction:column; gap:8px; }
.sp-track{ display:flex; flex-direction:column; gap:8px; }
/* web-v1.0.3：清单搜索框 */
.sp-search-wrap{ margin:0 0 8px; }
.sp-search{ width:100%; box-sizing:border-box; padding:6px 10px; border:1px solid var(--line,#cbd5e1); border-radius:8px; font-size:var(--fs-14, 14px); background:var(--card,#fff); color:inherit; }
.sp-search:focus{ outline:none; border-color:var(--brand,#3884ff); }
.sp-card{ border:1px solid var(--line,#e5e7eb); border-radius:10px; padding:10px 12px; background:var(--card,#fff); }
.sp-card .t{ font-weight:700; margin-bottom:2px; }
.sp-card .b{ color:var(--muted,#64748b); font-size:var(--fs-14, 14px); line-height:1.5; }
/* web-v0.9.10：客户需求已载入文件绿色标签 */
.sp-file-tag{ display:inline-block; background:rgba(34,197,94,0.12); color:#15803d; border:1px solid rgba(34,197,94,0.35); border-radius:8px; padding:4px 10px; font-size:var(--fs-14, 14px); }
.sp-file-tag a{ color:#b91c1c; margin-left:8px; }
/* web-v1.0：特价房清单 Markdown 表格/标题/引用/分割线 */
.sp-table{ width:100%; border-collapse:collapse; font-size:var(--fs-13, 13px); margin:4px 0 10px; }
.sp-table th,.sp-table td{ border:1px solid var(--line,#e5e7eb); padding:4px 6px; text-align:left; vertical-align:top; word-break:break-word; }
.sp-table th{ background:var(--soft,#f1f5f9); font-weight:700; white-space:nowrap; }
.sp-h{ font-weight:700; margin:8px 0 4px; }
.sp-q{ color:var(--muted,#64748b); font-size:var(--fs-13, 13px); margin:2px 0; }
.sp-line{ font-size:var(--fs-14, 14px); margin:2px 0; }
.sp-hr{ height:1px; background:var(--line,#e5e7eb); margin:8px 0; }

/* ========================= web-v1.1 新增（T1 录带看 / T3 进入加粗 / T5 字号 / T6 记住账号）========================= */
/* T3：首页「部门客/公海」卡的「进入 →」加深加粗（仅这两处用 .enter-link，不动全站 .num/.muted） */
.enter-link { color: var(--ink); font-weight: 700; }

/* T5：顶栏字号切换控件（老花放大） */
.fs-ctrl { display: inline-flex; border: 1px solid var(--line-2); border-radius: var(--radius); overflow: hidden; }
.fs-btn { border: none; background: var(--surface); color: var(--ink-2); font-size: var(--fs-13, 13px); padding: 5px 9px; cursor: pointer; border-left: 1px solid var(--line); }
.fs-btn:first-child { border-left: none; }
.fs-btn.on { background: var(--primary); color: var(--primary-on); }

/* T6：登录页「记住账号」勾选行 */
.li-remember { display: flex; align-items: center; gap: 7px; font-size: var(--fs-14, 14px); color: var(--ink-2); margin: 10px 0 4px; cursor: pointer; }
.li-remember input { width: auto; margin: 0; }

/* T1：录带看弹层 */
.show-card { width: 440px; }
.show-card input[type="checkbox"] { width: auto; margin: 0; }
.show-card input[type="file"] { width: 100%; padding: 9px; font-size: var(--fs-14, 14px); box-sizing: border-box; }
.show-card select { width: 100%; padding: 10px 12px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); font-size: var(--fs-15, 15px); color: var(--ink); box-sizing: border-box; }
.show-biz { display: flex; gap: 8px; }
.biz-btn { flex: 1; border: 1px solid var(--line-2); background: var(--surface); color: var(--ink-2); font-size: var(--fs-15, 15px); padding: 9px 0; border-radius: var(--radius); cursor: pointer; }
.biz-btn.on { background: var(--primary); color: var(--primary-on); border-color: var(--primary); }
.show-comp-row { display: flex; align-items: center; gap: 7px; cursor: pointer; }
.show-thumbs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; min-height: 20px; }
.sv-thumb { font-size: var(--fs-13, 13px); padding: 3px 8px; border-radius: 6px; background: var(--bg-alt); color: var(--ink-2); }
.sv-thumb.done { background: var(--success-tint); color: var(--success); }
.sv-thumb.fail { background: var(--danger-tint); color: var(--danger); }
.sv-thumb.up { background: var(--warning-tint); color: var(--warning); }

/* v1.5：成交监测（概览右栏精简卡 + 完整页看板/列表/趋势柱/联想下拉） */
.mon-card { cursor: pointer; }
.mon-card:hover { border-color: var(--primary); }
.mon-card-nums { display: flex; gap: 12px; margin: 10px 0 8px; }
.mon-num-box { flex: 1; text-align: center; background: var(--bg-alt); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 6px; }
.mon-num { font-family: var(--mono, monospace); font-size: var(--fs-26, 26px); font-weight: 700; color: var(--primary); line-height: 1.1; }
.mon-num-lbl { font-size: var(--fs-13, 13px); color: var(--muted); margin-top: 3px; }
.mon-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.mon-chip { font-size: var(--fs-13, 13px); color: var(--ink-2); background: var(--bg-alt); border: 1px solid var(--line); border-radius: var(--radius-full, 999px); padding: 2px 9px; }
.mon-chip b { color: var(--primary); font-weight: 700; }
.mon-board { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
@media (max-width: 920px) { .mon-board { grid-template-columns: 1fr; } }
.mon-sec { margin-bottom: 16px; }
.mon-big { margin: 8px 0; color: var(--muted); font-size: var(--fs-15, 15px); }
.mon-big-num { font-family: var(--mono, monospace); font-size: var(--fs-30, 30px); font-weight: 700; color: var(--primary); margin-right: 4px; }
.mon-price { font-size: var(--fs-13, 13px); margin-top: 6px; }
.mon-trend-h { font-size: var(--fs-13, 13px); color: var(--muted); margin: 12px 0 6px; }
.mon-bars { display: flex; align-items: flex-end; gap: 6px; height: 110px; }
.mon-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; }
.mon-bar-val { font-size: var(--fs-12_5, 12.5px); color: var(--ink-2); margin-bottom: 2px; }
.mon-bar-track { width: 60%; max-width: 28px; flex: 1; display: flex; align-items: flex-end; background: var(--bg-alt); border-radius: 4px 4px 0 0; }
.mon-bar-fill { width: 100%; min-height: 2px; background: var(--primary); border-radius: 4px 4px 0 0; }
.mon-bar-x { font-size: var(--fs-11, 11px); color: var(--muted); margin-top: 4px; }
.mon-filter { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 10px 0; font-size: var(--fs-14, 14px); color: var(--muted); }
.mon-input { padding: 7px 10px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); font-size: var(--fs-14, 14px); color: var(--ink); }
.mon-ac-wrap { position: relative; display: inline-block; }
.mon-ac { position: absolute; top: 100%; left: 0; right: 0; z-index: 30; background: var(--surface); border: 1px solid var(--line-2); border-radius: var(--radius); box-shadow: 0 6px 20px rgba(0,0,0,.12); max-height: 240px; overflow-y: auto; }
.mon-ac-item { padding: 7px 11px; font-size: var(--fs-14, 14px); cursor: pointer; color: var(--ink-2); }
.mon-ac-item:hover { background: var(--primary-tint); color: var(--primary-deep); }
.mon-table th, .mon-table td { font-size: var(--fs-14, 14px); }
.mon-sub { font-size: var(--fs-13, 13px); margin: 2px 0 6px; }
/* v1.7：看板区间控件 + 二手今日/昨日双栏 */
.mon-range-ctrl { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 8px 0; font-size: var(--fs-14, 14px); }
.mon-range-tag { font-size: var(--fs-13, 13px); margin: 4px 0; }
.mon-cols { display: flex; flex-wrap: wrap; gap: 16px; }
.mon-col { flex: 1; min-width: 180px; }
.mon-col-h { font-size: var(--fs-13, 13px); color: var(--muted); font-weight: 600; margin-bottom: 4px; }

/* ===== web-v1.8 文件分发：左栏可领取清单 + 右栏下载日志（沿用现有设计令牌）===== */
.fb-wrap { display: flex; gap: 16px; align-items: flex-start; }
.fb-left { flex: 1 1 60%; min-width: 0; }
.fb-right { flex: 0 0 34%; min-width: 240px; }
.fb-uploadbar { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.fb-prog { color: var(--muted); font-size: var(--fs-14, 14px); }
.fb-list { display: flex; flex-direction: column; gap: 8px; }
.fb-row { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }
.fb-name { font-weight: 600; word-break: break-all; color: var(--ink); }
.fb-meta { color: var(--muted); font-size: var(--fs-13, 13px); }
.fb-ops { display: flex; gap: 8px; margin-top: 4px; }
.fb-ops button { cursor: pointer; padding: 4px 12px; font-size: var(--fs-14, 14px); border-radius: var(--radius); border: 1px solid var(--line-2); background: var(--surface); color: var(--ink-2); }
.fb-ops .fb-dl { border-color: var(--primary); color: var(--primary); font-weight: 600; }
.fb-ops .fb-del { border-color: var(--danger); color: var(--danger); }
.fb-empty { color: var(--muted); padding: 16px 0; }
.fb-log-title { font-weight: 600; margin-bottom: 8px; color: var(--ink); }
.fb-log { display: flex; flex-direction: column; gap: 6px; max-height: 60vh; overflow: auto; }
.fb-log-item { font-size: var(--fs-14, 14px); line-height: 1.5; padding: 6px 10px; border-radius: 6px; background: var(--surface-alt); color: var(--ink-2); }
.fb-log-who { font-weight: 600; color: var(--ink); }
.fb-log-file { color: var(--primary); word-break: break-all; }

/* ========================= UI v6（web-v3.0.0）新增 =========================
   ① 左侧导航工作域分组：#nav 由平铺 <a> 改为 .nav-group 包裹（组 label + 组内 <a>）；
      applyRoleUI 通用化——组内 <a> 全隐则整组（含 label）隐藏。
   ② .nav-merged：并入「审批中心」的 5 个旧入口（reports/deals/trash/phoneedit/threeTiger）
      DOM 保留但常隐（!important 压过 applyRoleUI 的行内 display:''），视图键/函数全保留可直达。
   ③ .appr-*：审批中心壳视图（tab 容器复用现有五个视图函数渲染，函数体零改动）。 */
.nav-group { display: flex; flex-direction: column; gap: 2px; }
.nav-group + .nav-group { margin-top: 6px; }
.nav-group .nav-group-label { margin: 8px 12px 2px; }
.nav-group:first-child .nav-group-label { border-top: none; padding-top: 0; }
.nav a.nav-merged { display: none !important; }
.nav .badge {
  margin-left: auto; min-width: 20px; height: 20px; padding: 0 7px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--danger); color: #fff;
  font-family: var(--mono); font-size: var(--fs-12, 12px); font-weight: 700;
  border-radius: var(--radius-full);
}
.appr-tabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.appr-tabs button {
  display: flex; align-items: center; gap: 9px;
  padding: 10px 18px;
  border: 1px solid var(--line-2); border-radius: var(--radius-lg);
  background: var(--surface); color: var(--ink-2);
  font-size: var(--fs-16, 16px); font-weight: 500;
  transition: border-color .14s var(--ease), color .14s var(--ease), background .14s var(--ease);
}
.appr-tabs button:hover { border-color: var(--primary); color: var(--primary); }
.appr-tabs button.active {
  border-color: var(--primary); background: var(--primary-tint);
  color: var(--primary); font-weight: 700;
}
.appr-tabs button .n {
  font-family: var(--mono); font-size: var(--fs-13, 13px); font-weight: 700;
  min-width: 20px; padding: 0 7px; border-radius: var(--radius-full);
  background: var(--bg-alt); color: var(--muted);
  display: inline-flex; align-items: center; justify-content: center;
}
.appr-tabs button.active .n { background: var(--primary); color: #fff; }
/* 【B线优化⑤·②】每 tab 待处理数红点：红底白字胶囊，紧跟标签（按钮本就 flex+gap，无需绝对定位） */
.appr-tabs button .appr-dot {
  font-family: var(--mono); font-size: var(--fs-12, 12px); font-weight: 700; line-height: 1;
  min-width: 18px; padding: 3px 6px; border-radius: var(--radius-full);
  background: #E11D48; color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
}
#apprHost { min-height: 120px; }

/* ========================= UI v6 v3.0.1：概览版式补齐 ========================= */
/* 导航 SVG 线性图标（v6 定稿；替换原 <i>字</i> 色块，.nav a i 规则保留兼容不引用） */
.nav a .ico {
  width: 20px; height: 20px; flex: 0 0 20px;
  stroke: currentColor; stroke-width: 1.8; fill: none;
  stroke-linecap: round; stroke-linejoin: round;
  opacity: .8;
}
.nav a:hover .ico, .nav a.active .ico { opacity: 1; }
/* 右栏「审批待办」聚合卡内衬（行复用 .follow-item 现成样式） */
.appr-mini { padding: 8px 18px 12px; }
/* 【经纪人外置大脑·web-v4.6.0】原 .spov-*（首页特价房只读速览摘要行）整组已删——
   首页右栏那一格改成对话卡，样式见文件尾【经纪人外置大脑】段；独立特价房页用的 .sp-* 一个没动。 */
/* 排名合一卡：主 tab 靠右嵌 panel-head（复用 .rank-tabs 视觉，去掉其自身的下边框/内衬） */
.panel-head .rank-main-tabs { margin-left: auto; padding: 0; border-bottom: none; }

/* ========================= web-v3.0.9：导航滚动 + 分组手风琴折叠 =========================
   （v3.0.8 的整条 64px 图标轨折叠钮已撤——王要的是按组收展，不是整条收）
   ① 滚动（保留 v3.0.8 做法）：.nav overflow-y:auto（flex:1 + min-height:0 标准 flex 列内滚），
      小屏底部类目滚得到；细滚条不抢视觉。
   ② 手风琴：每个 .nav-group-label（客户/待办/业绩激励/数据洞察/线索管理/资源/系统）可点击，
      独立收起/展开本组条目（各组独立、非单开互斥）；概览组无标题恒展开。
      .nav-group.folded a 用 !important——applyRoleUI 给 <a> 写的是行内 display，必须压得住；
      组标题自身不藏（applyRoleUI 的「组内全隐→整组隐藏」在 group 层，互不打架）。
      折叠态记 localStorage(lq_nav_folded)，刷新保持；逻辑见 app.js setupNavAccordion。 */
.nav { overflow-y: auto; min-height: 0; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.18) transparent; }
.nav::-webkit-scrollbar { width: 6px; }
.nav::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); border-radius: 3px; }
.nav::-webkit-scrollbar-track { background: transparent; }
.nav-group-label { cursor: pointer; -webkit-user-select: none; user-select: none; }
.nav-group-label::after { content: '▾'; float: right; font-size: var(--fs-11, 11px); opacity: .55; transition: opacity .14s var(--ease); }
.nav-group-label:hover { color: #F1F5F9; }
.nav-group-label:hover::after { opacity: .9; }
.nav-group.folded .nav-group-label::after { content: '▸'; }
.nav-group.folded a { display: none !important; }

/* 【P6c】亿销云客户 AI 评级卡（客户详情抽屉，loadYxyAi 异步填充）*/
.ai-score-row { display: flex; align-items: baseline; gap: 8px; margin: 4px 0 10px; }
.ai-score { font-size: var(--fs-30, 30px); font-weight: 700; color: #c08a2e; line-height: 1; }
.ai-pills { display: flex; flex-wrap: wrap; gap: 8px; }
.ai-pill { display: inline-flex; align-items: center; padding: 2px 12px; border-radius: 999px; font-size: var(--fs-12, 12px); font-weight: 600; color: #7a5510; background: rgba(192, 138, 46, 0.14); }
.ai-content { margin-top: 10px; font-size: var(--fs-13, 13px); line-height: 1.6; white-space: pre-wrap; color: #33404f; }
/* 【Task2】AI 建议分级行 + 采纳钮 */
.ai-suggest-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(0,0,0,.08); font-size: var(--fs-13, 13px); }

/* ============ 【P6d 批2】亿销云 三框（评级卡底部）+ 三弹窗（套 web v6 变量）============ */
.yxy-tri-row { margin-top: 10px; }
.yxy-tri-sep { display: flex; align-items: center; gap: 10px; margin: 14px 0 8px; color: var(--muted); font-size: var(--fs-11, 11px); }
.yxy-tri-sep::before, .yxy-tri-sep::after { content: ""; height: 1px; background: var(--line); flex: 1; }
.yxy-tri { display: flex; gap: 8px; }
.yxy-tri-box { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 12px 6px; cursor: pointer; font-size: var(--fs-20, 20px); color: var(--primary); transition: border-color .12s, transform .12s; }
.yxy-tri-box:hover { border-color: var(--primary); transform: translateY(-2px); }
.yxy-tri-box b { font-size: var(--fs-12_5, 12.5px); font-weight: 600; color: var(--ink); }
.yxy-tri-box span { font-size: var(--fs-11, 11px); color: var(--muted); }
.yxy-modal-mask { position: fixed; inset: 0; background: rgba(23, 32, 58, .5); z-index: 3000; display: flex; align-items: center; justify-content: center; padding: 20px; }
.yxy-modal { width: 100%; max-width: 460px; max-height: 86vh; background: var(--bg); border-radius: 16px; display: flex; flex-direction: column; box-shadow: 0 20px 60px rgba(23, 32, 58, .35); }
.yxy-modal-h { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--line); }
.yxy-modal-h .tt { font-size: var(--fs-15, 15px); font-weight: 700; flex: 1; color: var(--ink); }
.yxy-modal-h .cl { font-size: var(--fs-22, 22px); color: var(--muted); cursor: pointer; line-height: 1; }
.yxy-toggle-all { font-size: var(--fs-11_5, 11.5px); font-weight: 600; color: var(--primary); background: var(--primary-tint); border: 1px solid var(--line); border-radius: 8px; padding: 4px 10px; cursor: pointer; }
.yxy-modal-b { overflow-y: auto; padding: 14px 16px 20px; }
.yxy-grp { border: 1px solid var(--line); border-radius: 12px; margin-bottom: 10px; overflow: hidden; background: var(--surface); }
.yxy-grp-h, .yxy-grp-h2 { display: flex; align-items: center; justify-content: space-between; padding: 12px 13px; font-size: var(--fs-13_5, 13.5px); font-weight: 600; color: var(--ink); }
.yxy-grp-h { cursor: pointer; user-select: none; }
.yxy-grp-h b::before, .yxy-grp-h2 b::before { content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--primary); margin-right: 8px; vertical-align: 1px; }
.yxy-grp-h .chev { color: var(--muted); font-size: var(--fs-13, 13px); transition: transform .2s; }
.yxy-grp.open .yxy-grp-h .chev { transform: rotate(90deg); }
.yxy-grp-b { display: none; padding: 2px 13px 14px; }
.yxy-grp.open .yxy-grp-b { display: block; }
.yxy-tiles { display: flex; gap: 8px; margin: 4px 0 14px; }
.yxy-tile { flex: 1; text-align: center; background: var(--bg); border: 1px solid var(--line); border-radius: 11px; padding: 11px 6px; }
.yxy-tile i { display: block; font-size: var(--fs-24, 24px); font-weight: 800; color: #c08a2e; font-style: normal; line-height: 1; }
.yxy-tile span { font-size: var(--fs-11, 11px); color: var(--muted); margin-top: 5px; display: block; }
.yxy-radar-t { font-size: var(--fs-12, 12px); font-weight: 600; color: var(--muted); margin: 6px 0 9px; }
.yxy-bar { display: flex; align-items: center; gap: 9px; margin-bottom: 8px; }
.yxy-bar .l { width: 60px; font-size: var(--fs-12, 12px); color: var(--muted); flex-shrink: 0; }
.yxy-bar .track { flex: 1; height: 8px; background: var(--bg); border: 1px solid var(--line); border-radius: 5px; overflow: hidden; }
.yxy-bar .fill { display: block; height: 100%; background: linear-gradient(90deg, var(--primary), #5b82f0); border-radius: 5px 0 0 5px; }
.yxy-bar .v { width: 26px; text-align: right; font-size: var(--fs-12, 12px); font-weight: 700; color: var(--ink); flex-shrink: 0; }
.yxy-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.yxy-chip { font-size: var(--fs-11_5, 11.5px); font-weight: 600; border-radius: 999px; padding: 3px 11px; }
.yxy-chip.g { color: var(--success); background: var(--success-tint); }
.yxy-chip.w { color: #7a5510; background: rgba(192, 138, 46, .14); }
.yxy-chip.b { color: var(--primary); background: var(--primary-tint); }
.yxy-subhd { font-size: var(--fs-12, 12px); font-weight: 700; color: var(--primary); margin: 14px 0 8px; padding-bottom: 5px; border-bottom: 1px dashed var(--line); }
.yxy-fld { margin-bottom: 10px; }
.yxy-fld .k { display: block; font-size: var(--fs-11, 11px); color: var(--muted); margin-bottom: 3px; }
.yxy-fld .v { display: block; font-size: var(--fs-13, 13px); color: var(--ink); line-height: 1.55; }
.yxy-foot { font-size: var(--fs-11, 11px); color: var(--muted); text-align: center; padding: 14px 8px 4px; line-height: 1.5; }
.yxy-call { display: flex; align-items: center; gap: 11px; padding: 12px 4px; border-bottom: 1px solid var(--line); }
.yxy-call .m { flex: 1; min-width: 0; }
.yxy-call .m b { display: block; font-size: var(--fs-13, 13px); font-weight: 600; color: var(--ink); }
.yxy-call .m span { display: block; font-size: var(--fs-11_5, 11.5px); color: var(--muted); margin-top: 2px; }
.yxy-play { width: 34px; height: 34px; border-radius: 50%; background: var(--primary-tint); border: 1px solid var(--line); color: var(--primary); display: flex; align-items: center; justify-content: center; font-size: var(--fs-13, 13px); cursor: pointer; flex-shrink: 0; }
.yxy-trans-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 4px; border-bottom: 1px solid var(--line); cursor: pointer; }
.yxy-trans-row .m b { display: block; font-size: var(--fs-13, 13px); font-weight: 600; color: var(--ink); }
.yxy-trans-row .m span { display: block; font-size: var(--fs-11_5, 11.5px); color: var(--muted); margin-top: 2px; }
.yxy-trans-row .cta { font-size: var(--fs-12, 12px); color: var(--primary); font-weight: 600; white-space: nowrap; }
.yxy-trans-box { background: var(--surface); border: 1px solid var(--line); border-radius: 11px; padding: 12px; font-size: var(--fs-12_5, 12.5px); color: var(--ink); line-height: 1.7; margin: 8px 0; white-space: pre-wrap; }
.yxy-empty { text-align: center; color: var(--muted); font-size: var(--fs-13, 13px); line-height: 1.9; padding: 60px 20px; }

/* ===== 双向可调报警 · 超管阈值（wg-）===== */
.wg-wrap { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 14px 18px; margin-bottom: 6px; }
.wg-row { display: flex; align-items: center; gap: 14px; padding: 11px 0; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.wg-row:last-of-type { border-bottom: 0; }
.wg-lab { width: 210px; font-weight: 600; font-size: var(--fs-13_5, 13.5px); color: var(--ink); }
.wg-lab small { display: block; font-weight: 400; color: var(--muted); font-size: var(--fs-11_5, 11.5px); margin-top: 1px; }
.wg-wrap input[type=number] { width: 110px; padding: 7px 9px; border: 1px solid var(--line-2); border-radius: 6px; font: inherit; color: var(--ink); background: var(--surface); }
.wg-wrap input[type=number]:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.wg-cur { margin-left: auto; font-size: var(--fs-12, 12px); color: var(--muted); }
.wg-cur b { color: var(--ink); }
.wg-note { background: var(--warning-tint); border: 1px solid var(--warning); color: var(--warning); border-radius: 8px; padding: 9px 12px; font-size: var(--fs-12_5, 12.5px); margin-top: 10px; line-height: 1.7; }
.wg-bar { display: flex; align-items: center; gap: 12px; margin-top: 12px; }
.wg-msg { font-size: var(--fs-12_5, 12.5px); color: var(--muted); margin-right: auto; }
/* ===== 【需求1-B】绑亿销云微信好友 picker（yxy-pick-）===== */
.yxy-pick-search { margin: 4px 0 10px; }
.yxy-pick-search input { width: 100%; }
.yxy-pick-list { max-height: 50vh; overflow-y: auto; }
.yxy-pick-item { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; margin-bottom: 8px; cursor: pointer; transition: border-color .12s, background .12s; }
.yxy-pick-item:hover { border-color: var(--primary); background: var(--primary-tint); }
.yxy-pick-item.hit { border-color: var(--primary); background: var(--primary-tint); }
.yxy-pick-name { font-size: var(--fs-14, 14px); color: var(--ink); font-weight: 600; }
.yxy-pick-sug { font-size: var(--fs-11, 11px); color: var(--primary-deep); border: 1px solid var(--primary); border-radius: 5px; padding: 0 6px; background: var(--surface); }
.yxy-pick-ph { margin-left: auto; font-size: var(--fs-12_5, 12.5px); color: var(--muted); }
/* ===== 【需求3】超管随机批量分配（rand-）===== */
.rand-wrap { background: var(--surface-alt); border: 1px solid var(--line); border-radius: 12px; padding: 12px 16px; margin: 10px 0 4px; }
.rand-agents { display: flex; flex-wrap: wrap; gap: 8px 16px; max-height: 160px; overflow-y: auto; padding: 6px 2px; }
.rand-agent { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-13_5, 13.5px); color: var(--ink); cursor: pointer; }
.rand-agent input { margin: 0; }
.rand-bar { display: flex; align-items: center; gap: 10px; margin-top: 10px; flex-wrap: wrap; }
.rand-bar input[type=number] { width: 90px; padding: 7px 9px; border: 1px solid var(--line-2); border-radius: 6px; font: inherit; color: var(--ink); background: var(--surface); }
.rand-bar input[type=number]:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.rand-bar .btn-primary { width: auto; margin: 0 0 0 auto; padding: 9px 22px; letter-spacing: 0; }
.rand-need { font-size: var(--fs-13, 13px); color: var(--primary-deep); font-weight: 600; }
.rand-note { font-size: var(--fs-12_5, 12.5px); color: var(--muted); margin-top: 8px; line-height: 1.6; }
/* ===== 【B线优化⑤·④】客户列表：特征多选下拉 + 「应用」挪末尾醒目 ===== */
.filter-multi { position: relative; }
.filter-multi > summary { list-style: none; cursor: pointer; padding: 7px 12px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); font-size: var(--fs-14, 14px); color: var(--ink); user-select: none; white-space: nowrap; }
.filter-multi > summary::-webkit-details-marker { display: none; }
.filter-multi[open] > summary { border-color: var(--primary); color: var(--primary); box-shadow: var(--ring); }
.filter-multi-body { position: absolute; z-index: 40; top: calc(100% + 6px); left: 0; background: var(--surface); border: 1px solid var(--line-2); border-radius: var(--radius); box-shadow: var(--shadow-sm); padding: 9px 11px; min-width: 130px; display: flex; flex-direction: column; gap: 7px; }
.filter-multi-body label { display: flex; align-items: center; gap: 7px; font-size: var(--fs-14, 14px); color: var(--ink); cursor: pointer; white-space: nowrap; }
.filter-multi-body input { margin: 0; }
.filter-bar .filter-apply { margin-left: auto; background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 700; }
.filter-bar .filter-apply:hover { background: var(--primary-deep); border-color: var(--primary-deep); color: #fff; }
.filter-sort { display: inline-flex; align-items: center; gap: 6px; color: var(--ink-2); }
/* ===== 需求2：按等级群发（bc-）===== */
.bc-wrap { display: grid; grid-template-columns: 1.15fr 1fr; gap: 14px; align-items: start; }
@media (max-width: 980px) { .bc-wrap { grid-template-columns: 1fr; } }
.bc-card { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; }
.bc-h { font-size: var(--fs-14, 14px); font-weight: 700; color: var(--ink); margin-bottom: 10px; display: flex; align-items: center; gap: 8px; }
.bc-h i { width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 50%; background: var(--primary); color: var(--primary-on); font-size: var(--fs-12, 12px); font-style: normal; flex: none; }
.bc-levels { display: flex; gap: 10px; }
.bc-lv { flex: 1; text-align: center; padding: 12px 0; border: 1px solid var(--line-2); border-radius: 9px; cursor: pointer; background: var(--surface); }
.bc-lv b { display: block; font-size: var(--fs-17, 17px); color: var(--ink); }
.bc-lv span { font-size: var(--fs-11_5, 11.5px); color: var(--muted); }
.bc-lv.on { background: var(--primary-tint); border-color: var(--primary); }
.bc-lv.on b, .bc-lv.on span { color: var(--primary); }
.bc-ta { width: 100%; height: 128px; border: 1px solid var(--line-2); border-radius: 9px; padding: 11px; font: inherit; color: var(--ink); resize: vertical; background: var(--surface); }
.bc-ta:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.bc-cnt { text-align: right; font-size: var(--fs-12, 12px); color: var(--muted); margin-top: 4px; }
.bc-imgs { display: flex; gap: 9px; flex-wrap: wrap; margin-top: 10px; }
.bc-img { position: relative; width: 76px; height: 76px; border-radius: 8px; overflow: hidden; border: 1px solid var(--line); background: var(--surface-alt); }
.bc-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bc-img .x { position: absolute; top: 2px; right: 2px; width: 18px; height: 18px; border-radius: 50%; background: rgba(0,0,0,.55); color: #fff; font-size: var(--fs-12, 12px); line-height: 18px; text-align: center; cursor: pointer; }
/* 【件6二批】群发图片拖拽/点选上传框（.on=拖拽悬停高亮） */
.bc-drop { margin-top: 10px; padding: 16px 12px; border: 1.5px dashed var(--line-2); border-radius: 8px; text-align: center; font-size: var(--fs-13, 13px); color: var(--muted); background: var(--surface-alt); cursor: pointer; user-select: none; transition: border-color .15s, background .15s, color .15s; }
.bc-drop b { color: var(--primary); font-weight: 600; }
.bc-drop small { display: block; margin-top: 4px; font-size: var(--fs-12, 12px); color: var(--muted); }
.bc-drop:hover, .bc-drop.on { border-color: var(--primary); background: var(--primary-tint); color: var(--ink-2); }
.bc-hint { font-size: var(--fs-12, 12px); color: var(--muted); margin-top: 8px; line-height: 1.7; }
.bc-sum { display: flex; align-items: baseline; gap: 10px; padding: 13px 14px; background: var(--success-tint); border: 1px solid var(--success); border-radius: 9px; }
.bc-sum b { font-size: var(--fs-29, 29px); font-weight: 800; color: var(--success); line-height: 1; }
.bc-sum span { font-size: var(--fs-13, 13px); color: var(--success); }
.bc-note { border-radius: 9px; padding: 10px 12px; font-size: var(--fs-12_5, 12.5px); margin-top: 10px; line-height: 1.7; }
.bc-note.warn { background: var(--warning-tint); border: 1px solid var(--warning); color: var(--warning); }
.bc-note.err { background: var(--danger-tint); border: 1px solid var(--danger); color: var(--danger); }
.bc-note.ok { background: var(--success-tint); border: 1px solid var(--success); color: var(--success); }
.bc-list { max-height: 280px; overflow: auto; border: 1px solid var(--line); border-radius: 9px; margin-top: 10px; }
.bc-row { display: flex; justify-content: space-between; align-items: center; padding: 9px 11px; border-bottom: 1px solid var(--line); font-size: var(--fs-13, 13px); color: var(--ink); }
.bc-row:last-child { border-bottom: 0; }
.bc-row .lv { display: inline-block; padding: 1px 7px; border-radius: 4px; font-size: var(--fs-11, 11px); background: var(--primary-tint); color: var(--primary); margin-right: 7px; }
.bc-row .st { font-size: var(--fs-12, 12px); color: var(--muted); }
.bc-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin: 4px 0 12px; }
.bc-st { background: var(--surface-alt); border: 1px solid var(--line); border-radius: 9px; padding: 12px 6px; text-align: center; }
.bc-st b { display: block; font-size: var(--fs-23, 23px); font-weight: 800; color: var(--ink); }
.bc-st span { font-size: var(--fs-11_5, 11.5px); color: var(--muted); }
.bc-st.ok b { color: var(--success); }
.bc-st.warn b { color: var(--warning); }
.bc-st.err b { color: var(--danger); }
.bc-bar { display: flex; gap: 10px; align-items: center; margin-top: 12px; flex-wrap: wrap; }
.bc-meta { font-size: var(--fs-12, 12px); color: var(--muted); text-align: center; margin-top: 8px; }
.bc-files { margin-top: 10px; }
.bc-file { display: flex; align-items: center; gap: 9px; padding: 8px 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-alt); margin-bottom: 8px; }
.bc-file .ic { flex: none; font-size: var(--fs-10_5, 10.5px); font-weight: 700; color: var(--danger); background: var(--danger-tint); border-radius: 4px; padding: 2px 6px; }
.bc-file .nm { flex: 1; font-size: var(--fs-13, 13px); color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bc-file .x { flex: none; cursor: pointer; color: var(--muted); font-size: var(--fs-15, 15px); padding: 0 4px; }
.bc-file .x:hover { color: var(--danger); }

/* 统一群发定稿：沿用现有主题变量，不改变全站视觉。 */
.bc-page-head { display:flex; align-items:flex-end; justify-content:space-between; gap:16px; margin-bottom:18px; }
.bc-page-head .section-title { font-size:var(--fs-23,23px); }
.bc-page-head p { margin:5px 0 0; color:var(--muted); }
.bc-audience { padding:18px 20px; }
.bc-line { display:flex; align-items:center; gap:12px; margin-top:15px; }
.bc-line>span { width:78px; flex:none; color:var(--muted); }
.bc-levels { gap:8px; }
.bc-lv { min-width:58px; min-height:36px; padding:7px 14px; font:inherit; font-weight:700; }
.bc-lv.on { color:var(--primary-on); background:var(--primary); box-shadow:0 4px 10px rgba(43,92,230,.2); }
.bc-groups { display:grid; grid-template-columns:repeat(4,minmax(135px,1fr)); gap:10px; flex:1; }
.bc-group { min-height:58px; padding:10px 12px; text-align:left; border:1px solid var(--line-2); border-radius:10px; background:var(--surface-alt); cursor:pointer; }
.bc-group b,.bc-group span { display:block; }
.bc-group span { margin-top:4px; color:var(--muted); font-size:var(--fs-12,12px); }
.bc-group.on { border-color:var(--primary); background:var(--primary-tint); box-shadow:inset 0 0 0 1px var(--primary); }
.bc-manage { border:0; background:none; color:var(--primary); cursor:pointer; white-space:nowrap; min-height:44px; }
.bc-unified { display:grid; grid-template-columns:minmax(560px,1.2fr) minmax(400px,.8fr); gap:16px; align-items:start; }
.bc-unified>.bc-card { padding:0; overflow:hidden; min-height:568px; }
.bc-panel-head { min-height:58px; padding:0 18px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; }
.bc-panel-head span { color:var(--primary); font-size:var(--fs-13,13px); }
.bc-toolbar { padding:13px 18px; border-bottom:1px solid var(--line); }
.bc-search { min-height:40px; display:flex; align-items:center; gap:8px; padding:0 11px; border:1px solid var(--line-2); border-radius:8px; color:var(--muted); }
.bc-search input { width:100%; border:0; outline:0; background:transparent; color:var(--ink); font:inherit; }
.bc-table-head,.bc-friend { display:grid; grid-template-columns:42px minmax(150px,1.25fr) minmax(110px,.8fr) minmax(90px,.8fr) 72px; align-items:center; padding:0 18px; }
.bc-table-head { min-height:38px; background:var(--surface-alt); color:var(--muted); font-size:var(--fs-12,12px); }
.bc-friend { min-height:64px; border-top:1px solid var(--line); }
.bc-friend:hover { background:var(--primary-tint); }
.bc-check { width:20px; height:20px; padding:0; display:grid; place-items:center; border:1px solid var(--line-2); border-radius:4px; background:var(--surface); color:#fff; cursor:pointer; }
.bc-check.on { border-color:var(--primary); background:var(--primary); }
.bc-check:disabled { opacity:.45; cursor:not-allowed; }
.bc-person { min-width:0; display:flex; align-items:center; gap:10px; }
.bc-person b,.bc-person small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bc-person small { margin-top:3px; color:var(--muted); font-size:var(--fs-11_5,11.5px); }
.bc-avatar { width:34px; height:34px; flex:none; display:grid; place-items:center; border-radius:50%; background:var(--primary-tint); color:var(--primary); font-weight:700; }
.bc-group-select { max-width:120px; min-height:34px; border:1px solid var(--line-2); border-radius:7px; background:var(--surface); color:var(--ink); }
.bc-last { color:var(--muted); font-size:var(--fs-12,12px); }
.bc-status { font-size:var(--fs-12,12px); }.bc-status.ok{color:var(--success)}.bc-status.off{color:var(--muted)}
.bc-friend-list { max-height:410px; overflow:auto; }.bc-empty{padding:34px 18px;text-align:center;color:var(--muted)}
.bc-pager,.bc-page-jump{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:14px}.bc-pager button,.bc-page-jump button{min-width:88px;min-height:44px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--primary);cursor:pointer}.bc-pager button:disabled{opacity:.42;cursor:not-allowed}.bc-pager span,.bc-page-jump label,.bc-page-jump span{font-size:13px;color:var(--muted)}.bc-page-jump input{width:76px;min-height:44px;border:1px solid var(--line);border-radius:10px;padding:0 10px;text-align:center;background:var(--surface);color:var(--ink)}.bc-pager button:focus-visible,.bc-page-jump button:focus-visible,.bc-page-jump input:focus-visible{outline:none;border-color:var(--primary);box-shadow:var(--ring)}
.bc-select-foot { min-height:52px; padding:0 18px; border-top:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; color:var(--muted); }
.bc-select-foot button { min-height:44px; border:0; background:none; color:var(--primary); cursor:pointer; }
.bc-saved-actions { min-height:60px; padding:8px 18px; border-top:1px solid var(--line); display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.bc-saved-actions span { margin-right:auto; color:var(--muted); }
.bc-saved-actions button { min-height:44px; padding:0 14px; border:1px solid var(--line-2); border-radius:9px; background:var(--surface); color:var(--primary); cursor:pointer; }
.bc-saved-actions button:hover { border-color:var(--primary); background:var(--primary-tint); }
.bc-saved-actions button:focus-visible { outline:none; border-color:var(--primary); box-shadow:var(--ring); }
.bc-saved-actions button:disabled { opacity:.48; cursor:not-allowed; background:var(--surface-alt); }
.bc-saved-hint { padding:0 18px 12px; color:var(--success); font-size:var(--fs-12,12px); line-height:1.6; }
.bc-compose-body { padding:18px; }.bc-field{display:block;font-weight:700;margin-bottom:9px}.bc-field em{color:var(--danger)}
.bc-attach { display:flex; gap:9px; flex-wrap:wrap; margin:10px 0 16px; }
.bc-summary { background:var(--surface-alt); border:1px solid var(--line); border-radius:10px; padding:8px 14px; }
.bc-summary>div { display:flex; justify-content:space-between; margin:8px 0; color:var(--muted); }.bc-summary b{color:var(--ink)}.bc-summary .blue{color:var(--primary)}
.bc-safety { margin-top:14px; padding-top:8px; border-top:1px solid var(--line); }.bc-safety span{display:block;margin:8px 0;color:var(--ink-2);font-size:var(--fs-13,13px)}
.bc-primary { width:100%; min-height:44px; margin-top:14px; }
@media(max-width:1100px){.bc-unified{grid-template-columns:1fr}.bc-groups{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.bc-line{align-items:flex-start;flex-wrap:wrap}.bc-line>span{width:100%}.bc-levels{flex-wrap:wrap}.bc-unified{display:block}.bc-table-head{display:none}.bc-friend{grid-template-columns:36px 1fr 100px;gap:8px;padding:10px 14px}.bc-friend .bc-last,.bc-friend .bc-status{grid-column:2}.bc-groups{grid-template-columns:1fr 1fr}}

/* ===== 【PDF资料库】附PDF三来源弹层 + 资料库管理页（doc-）===== */
.doc-src-list { display: flex; flex-direction: column; gap: 10px; margin: 12px 0 4px; }
.doc-src { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; padding: 12px 14px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); cursor: pointer; text-align: left; transition: border-color .12s, background .12s; }
.doc-src:hover { border-color: var(--primary); background: var(--primary-tint); }
.doc-src b { font-size: var(--fs-14_5, 14.5px); color: var(--ink); }
.doc-src small { font-size: var(--fs-12, 12px); color: var(--muted); }
.doc-lib-list { max-height: 46vh; overflow-y: auto; margin: 10px 0 4px; display: flex; flex-direction: column; gap: 8px; }
.doc-lib-item { display: flex; align-items: center; gap: 9px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; cursor: pointer; }
.doc-lib-item:hover { border-color: var(--primary); }
.doc-lib-item.off { opacity: .5; cursor: not-allowed; }
.doc-lib-item input { margin: 0; }
.doc-lib-nm { font-size: var(--fs-14, 14px); color: var(--ink); font-weight: 600; }
.doc-lib-mt { margin-left: auto; font-size: var(--fs-12, 12px); color: var(--muted); white-space: nowrap; }
.doc-peek { color: var(--primary); font-size: var(--fs-13, 13px); text-decoration: none; border-bottom: 1px dashed var(--primary); }

/* ===== 【王反馈·改3】说明收纳：一行摘要常驻 + 点开看详情（数字全保留） ===== */
.fold-note { margin: 10px 0; }
.fold-note > summary { cursor: pointer; font-size: var(--fs-13, 13px); color: var(--muted); user-select: none; list-style-position: inside; }
.fold-note > summary:hover { color: var(--ink); }
.fold-note > summary b { color: var(--ink); }
.fold-note .fold-body { margin-top: 6px; }

/* ===== 【置业报告 PPT·2026-07-26】设置页（proprpt）+ 客户详情生成入口 =====
   延续现有浅色企业后台：复用 .section-title/.note/.toolbar/.pill/表格皮，不加动效不堆卡片。 */
/* 宽表横滚容器（模板历史表等；375px 下表不撑破版心） */
.tbl-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tbl-scroll table { min-width: 680px; }
/* 设置页分块（fieldset 复位成普通块） */
.pr-block { min-width: 0; box-sizing: border-box; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface); padding: 14px 18px; margin: 0 0 6px; }
.pr-switch { display: flex; align-items: center; gap: 8px; font-size: var(--fs-15, 15px); color: var(--ink); cursor: pointer; }
.pr-switch input { width: 16px; height: 16px; accent-color: var(--primary); cursor: pointer; }
.pr-switch-gap { margin-top: 14px; }
/* 运行状态胶囊：已配置=绿、未配置=灰 */
.pr-status { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 4px; }
.pr-st { padding: 4px 12px; border-radius: var(--radius-full); font-size: var(--fs-13, 13px); border: 1px solid var(--line); background: var(--surface-alt); color: var(--muted); }
.pr-st.ok { color: var(--success); border-color: var(--success); background: var(--success-tint); }
/* 数值/文本表单：桌面双列、窄屏单列（见文件尾响应式段） */
.pr-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 28px; max-width: 900px; margin-top: 10px; }
.pr-field { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; }
.pr-field label { font-size: var(--fs-14, 14px); font-weight: 600; color: var(--ink); }
.pr-field input[type="number"], .pr-field input[type="text"] {
  padding: 9px 11px; border: 1px solid var(--line-2); border-radius: var(--radius);
  font-size: var(--fs-14, 14px); color: var(--ink); background: var(--surface); max-width: 320px;
}
.pr-field input:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.pr-help { font-size: var(--fs-12, 12px); color: var(--muted); line-height: 1.7; }
/* 灰度人员勾选区 */
.pr-members { max-height: 200px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px; margin-top: 10px; }
.pr-mem { display: inline-block; min-width: 12em; margin: 2px 8px 2px 0; font-size: var(--fs-14, 14px); cursor: pointer; }
.pr-mem input { accent-color: var(--primary); cursor: pointer; }
.pr-prem-note { margin-top: 16px; }
.pr-member-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 10px; font-size: var(--fs-13, 13px); color: var(--ink-2); }
.pr-member-tools button, .pr-block .toolbar button, .pr-block [data-pract] { min-height: 44px; }
.pr-template-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.pr-template-tabs button { min-height: 44px; }
.pr-template-tabs button.active { color: var(--primary); border-color: var(--primary); background: var(--primary-tint); }
/* 客户详情：生成入口（状态大白话、按钮态可见） */
.pr-gen-hint { font-size: var(--fs-13, 13px); color: var(--muted); line-height: 1.7; margin-bottom: 10px; }
.pr-gen-btn { min-height: 44px; cursor: pointer; }
.pr-gen-btn:focus-visible, .pr-block button:focus-visible, .btn-jade:focus-visible, .btn-primary:focus-visible, .btn-amber:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.pr-job-line { margin-top: 10px; font-size: var(--fs-13_5, 13.5px); color: var(--ink-2); line-height: 1.7; }
.pr-job-line.pr-err { color: var(--danger); }
.pr-msg { margin-top: 8px; font-size: var(--fs-13, 13px); color: var(--danger); line-height: 1.7; }
.pr-mode-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.pr-mode-card { min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface); }
.pr-mode-card.preliminary { border-color: rgba(217, 146, 27, .42); background: #fffbf2; }
.pr-mode-head { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.pr-mode-head b { color: var(--ink); }
.pr-mode-card.preliminary .tag { color: #80500c; background: #fff2d2; border-color: #efd18f; }
.pr-preliminary-btn { min-height: 44px; border-color: #d79a2e; color: #80500c; background: #fff9eb; }
.pr-disabled-reason { overflow-wrap: anywhere; }

/* ===== 【正式版 UI·web-v4.2.0】①侧栏两行条目（新名+大白话副标）②找功能③报告与SOP设置④手动需求弹窗 =====
   延续现有深色侧栏与浅色后台皮：零新配色/零新字体，全部复用既有 token；报告与SOP设置整页复用 .pr-* 皮。 */
/* 侧栏「找功能」过滤框 */
.nav-find { padding: 10px 12px 0; }
.nav-find input {
  width: 100%; box-sizing: border-box; padding: 8px 11px;
  border: 1px solid var(--side-line); border-radius: var(--radius);
  background: rgba(255,255,255,.06); color: #F1F5F9; font-size: var(--fs-13_5, 13.5px);
}
.nav-find input::placeholder { color: var(--muted); }
.nav-find input:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
/* 过滤态（navFindApply 维护）：!important 压过 applyRoleUI 行内 display；折叠组展开由 JS 摘 folded 处理，不走 CSS 覆盖 */
.nav a.find-hide { display: none !important; }
.nav .nav-group.find-empty { display: none !important; }
/* 用户定稿：侧栏只显示功能名；副标保留在 DOM 供旧关键词搜索，不参与视觉呈现 */
.nav a { align-items: center; }
.nav a .ico { margin-top: 0; }
.nav-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.nav-name { font-size: var(--fs-15, 15px); line-height: 1.35; }
.nav-sub { display: none; }
.nav .badge { align-self: center; }
/* 报告与SOP设置（复用 .pr-block/.pr-switch/.pr-help/.pr-members/.pr-form 皮，只补两种排布） */
.rpc-modes { display: flex; flex-direction: column; gap: 10px; }
.rpc-mode { display: grid; grid-template-columns: auto auto 1fr; align-items: baseline; gap: 8px; font-size: var(--fs-15, 15px); color: var(--ink); cursor: pointer; }
.rpc-mode input { accent-color: var(--primary); cursor: pointer; }
.rpc-mode input:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.rpc-bool { padding: 8px 0; border-bottom: 1px solid var(--line); }
.rpc-bool:last-child { border-bottom: none; }
.rpc-bool .pr-help { margin: 4px 0 0 24px; }
.rpc-audiences { display: flex; flex-wrap: wrap; gap: 10px 18px; margin-bottom: 10px; }
.rpc-audience { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); cursor: pointer; }
.rpc-audience input { accent-color: var(--primary); }
.rpc-audience input:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
/* 手动需求弹窗：盖抽屉(120)之上；卡片内滚，375–1440 不破版 */
.pm-mask { z-index: 150; }
.pp-mask { z-index: 160; }
.manual-card { width: 660px; max-width: 94vw; max-height: 86vh; overflow-y: auto; }
.preliminary-card { width: 720px; max-width: 94vw; max-height: 88vh; overflow-y: auto; overscroll-behavior: contain; }
.pp-notice { margin: 8px 0 16px; padding: 11px 13px; border: 1px solid #efd18f; border-radius: var(--radius); background: #fff8e7; color: #67430d; font-size: var(--fs-14, 14px); line-height: 1.75; overflow-wrap: anywhere; }
.pp-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 18px; }
.pp-field { min-width: 0; }
.pp-field.pp-wide { grid-column: 1 / -1; }
.pp-field label { display: block; margin-bottom: 5px; font-size: var(--fs-14, 14px); font-weight: 600; color: var(--ink); }
.pp-field input, .pp-field textarea { width: 100%; min-height: 44px; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); color: var(--ink); font: inherit; }
.pp-field textarea { min-height: 82px; resize: vertical; }
.pp-field input:focus-visible, .pp-field textarea:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.pp-field input[aria-invalid="true"], .pp-field textarea[aria-invalid="true"] { border-color: var(--danger); }
.pp-field-error { min-height: 20px; padding-top: 3px; color: var(--danger); font-size: var(--fs-12_5, 12.5px); line-height: 1.45; overflow-wrap: anywhere; }
.pp-msg { min-height: 22px; margin-top: 6px; overflow-wrap: anywhere; }
.preliminary-card .modal-actions button { min-height: 44px; }
.pm-meta { margin: 8px 0 2px; padding: 8px 12px; background: var(--surface-alt); border: 1px solid var(--line); border-radius: var(--radius); font-size: var(--fs-13, 13px); color: var(--ink-2); line-height: 1.7; }
.pm-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 18px; }
.pm-pair-hint { grid-column: 1 / -1; margin: 10px 0 0; font-size: var(--fs-12_5, 12.5px); color: var(--warning); line-height: 1.6; }
.manual-card select, .manual-card textarea {
  width: 100%; padding: 10px 12px; box-sizing: border-box;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); font-size: var(--fs-14_5, 14.5px); color: var(--ink);
  transition: border-color .15s var(--ease);
}
.manual-card textarea { resize: vertical; font-family: inherit; }
.manual-card input:focus-visible, .manual-card select:focus-visible, .manual-card textarea:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }

@media (max-width: 860px) {
  .pr-form { grid-template-columns: 1fr; }
  .pr-field input[type="number"], .pr-field input[type="text"] { max-width: 100%; }
  .pr-mem { min-width: 0; display: block; }
  .pr-mode-grid { grid-template-columns: 1fr; }
  /* 正式版 UI：≤860 侧栏塌成 64px 图标轨——藏找功能与两行文字（沿用 .nav a font-size:0 的图标轨态） */
  .nav-find { display: none; }
  .nav a { align-items: center; }
  .nav a .ico { margin-top: 0; }
  .nav a .nav-txt { display: none; }
  /* 手动需求弹窗转单列 */
  .pm-grid { grid-template-columns: 1fr; }
  .pp-grid { grid-template-columns: 1fr; }
  .pp-field.pp-wide { grid-column: auto; }
}

@media (max-width: 480px), (max-height: 480px) and (orientation: landscape) {
  .preliminary-card { max-width: calc(100vw - 16px); max-height: calc(100vh - 16px); padding: 16px; }
  .pp-field input, .pp-field textarea { font-size: var(--fs-16, 16px); }
  .preliminary-card .modal-actions { position: sticky; bottom: -16px; margin: 10px -16px -16px; padding: 10px 16px 16px; background: var(--surface); border-top: 1px solid var(--line); }
  .preliminary-card .modal-actions button { flex: 1 1 0; }
}

/* ========================= 【统一待办·web-v4.4.0】今日待办 =========================
   延续正式 UI 令牌（panel/tabs/pill/btn 全复用），只补表单网格与触控密度；触控目标 ≥44px。 */
.todo-panel { margin-bottom: 16px; }
/* 列宽用 auto-fit 而非写死 4 列：写死 repeat(4, minmax(150px,1fr)) auto 时，五条轨道的最小宽（约 760px）
   在 861–1111px 版心（1024 投屏/未最大化窗口）以及顶栏「大 / 特大」字号档（#appView zoom 1.15/1.3 后的等效窄版心）
   下撑破 .todo-panel，而 .panel 是 overflow:hidden——「添加待办」主按钮会被裁掉、点不到。
   改 auto-fit 后按容器宽度自动减列换行，任何宽度都不溢出；≥5 轨时仍是与原设计一致的单行五列。 */
.todo-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px 14px; align-items: end; padding: 14px 22px 4px; }
.todo-form .tf-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.todo-form label { font-size: var(--fs-13, 13px); font-weight: 500; color: var(--ink-2); }
.todo-form input, .todo-form select { min-height: 44px; padding: 8px 12px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); color: var(--ink); min-width: 0; }
.todo-form input:focus-visible, .todo-form select:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
/* justify-self:start —— 换行后按钮所在轨道会被拉宽，靠它把按钮钉回内容宽度，观感与原单行版一致 */
.todo-form .btn-primary { min-height: 44px; width: auto; justify-self: start; margin: 0; padding: 8px 22px; letter-spacing: 0; }
.todo-msg { min-height: 22px; padding: 4px 22px 14px; font-size: var(--fs-14, 14px); }
.todo-msg.bad { color: var(--danger); }
.todo-msg.good { color: var(--success); }
.todo-tabs button { min-height: 44px; }
.todo-done-btn { min-height: 44px; padding: 8px 16px; }
@media (max-width: 860px) {
  /* 窄屏：表单转单列不横向溢出；列表沿用 .tbl-scroll 容器内横滚 */
  .todo-form { grid-template-columns: 1fr; }
  .todo-form .btn-primary { width: 100%; }
}

/* ========================= 【AI 学习闭环·web-v4.5.0】改进反馈审核台内的学习/放量控制区 =========================
   零新配色、零新字体：状态卡复用 .pr-block、表单复用 .pr-form/.pr-field/.pr-help、
   明细行复用 .od-list/.od-prow、状态用 .pill（每个 pill 都带文字，不靠颜色单独表意）。
   触控目标 ≥44px；焦点环沿用 --ring；360px 起长 id / 指纹靠 .lrn-kv 的 break-all 不撑破版心。 */
.lrn-panel { display: block; margin: 0 0 18px; }
.lrn-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; line-height: 1.7; }
.lrn-acts { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 12px; }
.lrn-acts .btn-amber, .lrn-acts .btn-ghost { min-height: 44px; }
.lrn-acts .btn-amber:disabled, .lrn-acts .btn-ghost:disabled { cursor: not-allowed; }
.lrn-panel .btn-ghost.sm { min-height: 36px; }
/* 考试指标：宽屏两列、窄屏单列；每行仍是 .od-prow（名称左、数值右） */
.lrn-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 0 24px; }
/* 长文本（runId / candidateId / 版本号 / 指纹）允许断行，360px 下不横向溢出 */
.lrn-kv { font-size: var(--fs-13_5, 13.5px); color: var(--ink-2); line-height: 1.8; word-break: break-all; }
.lrn-msg { min-height: 20px; margin-top: 10px; font-size: var(--fs-13_5, 13.5px); line-height: 1.7; color: var(--ink-2); }
.lrn-msg.bad { color: var(--danger); }
.lrn-msg.good { color: var(--success); }
.lrn-panel .pr-field input:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
@media (max-width: 860px) {
  /* 窄屏：按钮整行铺满（44px 触控 + 8px 间距不变），指标转单列 */
  .lrn-acts .btn-amber, .lrn-acts .btn-ghost { width: 100%; }
  .lrn-metrics { grid-template-columns: 1fr; }
}

/* ========================= 【经纪人外置大脑·web-v4.6.0】首页右栏对话卡 =========================
   零新配色、零新字体、零外部资源、零 emoji：卡壳复用 .panel，气泡/输入框/按钮全用既有蓝灰 token
   （--primary / --surface-alt / --line / --radius-lg / --ring / --sans）。
   高度：.board .stack-col 已转 flex 列，这里让对话卡 flex:1 吃掉右栏剩余高度、消息区卡内独立滚动；
   .brain-msgs 只留一个温和的 min-height（比原特价房摘要卡的 max-height:300px 还矮），
   所以它不会反向把左侧待跟进看板撑高。输入框定高不自动长高，打字时首页主布局一点不跳。 */
.board .brain-card { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.brain-card { display: flex; flex-direction: column; }
.brain-ai-note {
  flex: 0 0 auto; display: flex; flex-direction: column; gap: 2px;
  margin: 14px 20px 0; padding: 10px 12px; border: 1px solid var(--amber);
  border-radius: var(--radius); background: var(--amber-tint); color: var(--ink);
  font-size: var(--fs-12_5, 12.5px); line-height: 1.55;
}
.brain-ai-note b { font-size: var(--fs-13, 13px); }
.brain-ai-badge {
  margin-bottom: 4px; color: var(--ink); font-size: var(--fs-11, 11px);
  font-weight: 700; line-height: 1.4;
}
.brain-msgs {
  flex: 1 1 auto; min-height: 200px; overflow-y: auto; overflow-x: hidden;
  padding: 16px 20px; display: flex; flex-direction: column; gap: 10px;
  scrollbar-width: thin; scrollbar-color: var(--line) transparent;
}
.brain-msgs::-webkit-scrollbar { width: 8px; }
.brain-msgs::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }
.brain-msgs::-webkit-scrollbar-track { background: transparent; }
/* flex:0 0 auto 是必须的：.brain-msgs 是 flex 列 + overflow:auto，子项默认会被压扁而不是撑出滚动条 */
.brain-empty { flex: 0 0 auto; color: var(--muted); font-size: var(--fs-14, 14px); line-height: 1.7; padding: 8px 2px; }
.brain-row { flex: 0 0 auto; display: flex; }
.brain-row.me { justify-content: flex-end; }
.brain-row.ai { justify-content: flex-start; }
/* 气泡：pre-wrap 保住换行，overflow-wrap:anywhere 让长链接/长数字在窄右栏也不横向溢出 */
.brain-bubble {
  max-width: 84%; padding: 9px 12px; border-radius: var(--radius-lg);
  border: 1px solid var(--line); background: var(--surface-alt); color: var(--ink);
  font-size: var(--fs-14_5, 14.5px); line-height: 1.7; white-space: pre-wrap; overflow-wrap: anywhere;
}
.brain-row.me .brain-bubble { background: var(--primary); border-color: var(--primary); color: var(--primary-on); }
.brain-bubble.brain-pending { color: var(--muted); }
.brain-bubble-fail { background: var(--danger-tint); border-color: #FCA5A5; color: #B91C1C; }
.brain-fail-text { margin-bottom: 8px; }
.brain-retry { min-height: 44px; min-width: 44px; }
/* 底部一行三件套：清除 / 输入框 / 发送（没有第四个控件，也没有标题栏） */
.brain-foot {
  flex: 0 0 auto; display: flex; align-items: flex-end; gap: 10px;
  padding: 12px 20px 14px; border-top: 1px solid var(--line); background: var(--surface);
}
.brain-foot .brain-clear { flex: 0 0 auto; min-height: 44px; min-width: 44px; }
.brain-input {
  flex: 1 1 auto; min-width: 0; height: 68px; min-height: 44px; max-height: 68px; resize: none;
  padding: 10px 12px; border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); color: var(--ink);
  font-family: var(--sans); font-size: var(--fs-14_5, 14.5px); line-height: 1.6; overflow-y: auto;
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease);
}
.brain-input:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
/* .btn-primary 基线是登录页大按钮（width:100% / margin-top:22px / letter-spacing:4px），这里收回常规尺寸 */
.brain-foot .brain-send { flex: 0 0 auto; width: auto; margin-top: 0; min-height: 44px; padding: 10px 20px; letter-spacing: 0; }
/* 只给读屏的状态位：宣布「正在提问 / 已回答 / 提问失败」，视觉上不占位、不算底部第四个控件 */
.brain-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
@media (max-width: 860px) {
  /* 窄屏：输入框独占一行（不再被两个按钮挤扁），气泡放宽、消息区矮一点，横向永不溢出 */
  .brain-foot { flex-wrap: wrap; }
  .brain-input { flex: 1 1 100%; order: -1; }
  .brain-msgs { min-height: 160px; }
  .brain-bubble { max-width: 92%; }
}
@media (prefers-reduced-motion: reduce) {
  /* 全局那条已把 transition 压到 .01ms，这里再显式关掉本段的过渡（没有动画、没有平滑滚动） */
  .brain-bubble, .brain-input, .brain-foot .btn-primary, .brain-foot .btn-ghost, .brain-retry { transition: none; }
}

/* ========================= 【日度 SOP 详情·web-v4.7.1】高辨识多色评分卡弹窗 =========================
   壳复用既有 .od-mask/.od-panel（定位与卡皮不另起炉灶），内部换成「摘要 + 评分卡 + 三段语义卡」。
   零新字体、零外部资源、零 emoji（图标全是内联 SVG，描边取 currentColor，同 .nav .ico 线性风格）。
   配色沿用设计令牌（--primary/--surface/--line/--radius-lg/--ring）；三档语义色单独收在 .sop-panel 上，
   全部是在白/浅底上 ≥4.5:1 的深色（绿 #15803D / 琥珀 #B45309 / 红 #B91C1C），
   且每处颜色旁边都有中文文字（达标 / 有待提升 / 需要改进、问题 / 优点 / 行动建议），绝不只靠颜色表意。
   ★分数横排是硬约束：.sop-card-score / .sop-total-v 恒 white-space:nowrap 且 flex 不收缩，
   窄栏里被挤到的是标题（会换行），分数永远是「20 / 25」一行。 */
.sop-mask { padding: 16px; z-index: 1300; }
.sop-panel {
  width: min(760px, 100%); max-width: 760px; min-width: 0; max-height: 88vh;
  padding: 0; overflow: hidden;
  display: flex; flex-direction: column; /* .od-panel 已有，这里显式写死：头固定、身滚动不依赖别处规则 */
  --sop-good: #15803D; --sop-mid: #B45309; --sop-low: #B91C1C;
  --sop-good-bg: #F0FDF4; --sop-mid-bg: #FFFBEB; --sop-low-bg: #FEF2F2; --sop-none-bg: #F8FAFC;
  animation: sopPanelIn .2s var(--ease) both;
}
@keyframes sopPanelIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
/* ---- 头部：标题 + 经纪人·日期·状态 + 44×44 关闭按钮 ---- */
.sop-head {
  flex: 0 0 auto; display: flex; align-items: flex-start; gap: 12px;
  padding: 16px 20px; border-bottom: 1px solid var(--line); background: var(--surface-alt);
}
.sop-head-txt { flex: 1 1 auto; min-width: 0; }
.sop-head-t { margin: 0; font-size: var(--fs-17, 17px); font-weight: 700; line-height: 1.5; color: var(--ink); overflow-wrap: anywhere; }
.sop-head-sub { margin: 4px 0 0; font-size: var(--fs-13_5, 13.5px); line-height: 1.8; color: var(--muted); overflow-wrap: anywhere; }
.sop-close {
  flex: 0 0 auto; width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--line-2); border-radius: var(--radius);
  background: var(--surface); color: var(--ink-2); cursor: pointer;
  transition: background .18s var(--ease), border-color .18s var(--ease), color .18s var(--ease);
}
.sop-close:hover { background: var(--primary-tint); border-color: var(--primary); color: var(--primary); }
.sop-close:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.sop-close svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.sop-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 16px 20px 20px; }
.sop-loading-panel { width: min(360px, 100%); min-height: 120px; align-items: center; justify-content: center; gap: 4px; }
.sop-loading-panel .btn-ghost { min-height: 44px; }
/* ---- 顶部摘要：左总分卡 + 右事实格 ---- */
.sop-summary { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 18px; }
.sop-total {
  flex: 1 1 220px; min-width: 0; padding: 14px 16px;
  border: 1px solid var(--line); border-left: 4px solid var(--primary);
  border-radius: var(--radius-lg); background: var(--surface-alt); box-shadow: var(--shadow-xs);
}
.sop-total-k { margin: 0; font-size: var(--fs-13, 13px); font-weight: 600; letter-spacing: .3px; color: var(--muted); }
/* 总分同样恒横排：大号数字与「/ 100」永远同一行 */
.sop-total-v { margin: 2px 0 0; display: flex; align-items: baseline; gap: 6px; white-space: nowrap; font-family: var(--mono); }
.sop-total-v b { font-size: var(--fs-34, 34px); font-weight: 700; line-height: 1.2; color: var(--ink); }
.sop-total-v i { font-style: normal; font-size: var(--fs-15, 15px); color: var(--muted); }
.sop-total-lv { display: flex; align-items: center; gap: 6px; margin: 10px 0 0; font-size: var(--fs-13_5, 13.5px); font-weight: 600; }
.sop-facts {
  flex: 2 1 320px; min-width: 0; margin: 0; padding: 14px 16px;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px 14px;
  border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface);
}
.sop-fact { min-width: 0; }
.sop-fact dt { font-size: var(--fs-12_5, 12.5px); line-height: 1.6; color: var(--muted); }
.sop-fact dd { margin: 2px 0 0; font-size: var(--fs-14_5, 14.5px); font-weight: 600; line-height: 1.6; color: var(--ink); overflow-wrap: anywhere; }
/* ---- 分段标题（图标 + 中文名 + 条数）---- */
.sop-sec { margin-top: 18px; }
.sop-sec-h { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: var(--fs-15, 15px); font-weight: 700; color: var(--ink); }
.sop-sec-h svg { flex: none; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.sop-sec-n { margin-left: auto; font-size: var(--fs-12_5, 12.5px); font-weight: 600; color: var(--muted); white-space: nowrap; }
/* ---- 逐项评分卡 ---- */
.sop-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
.sop-card {
  min-width: 0; padding: 12px 14px;
  border: 1px solid var(--line); border-left: 3px solid var(--line-2);
  border-radius: var(--radius-lg); background: var(--surface); box-shadow: var(--shadow-xs);
}
.sop-card-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.sop-card-t { flex: 1 1 auto; min-width: 0; margin: 0; font-size: var(--fs-15, 15px); font-weight: 600; line-height: 1.5; color: var(--ink); overflow-wrap: anywhere; }
.sop-card-score { flex: 0 0 auto; margin: 0; white-space: nowrap; font-family: var(--mono); }
.sop-card-score b { font-size: var(--fs-20, 20px); font-weight: 700; color: var(--ink); }
.sop-card-score i { font-style: normal; margin-left: 3px; font-size: var(--fs-13, 13px); color: var(--muted); }
.sop-card-lv { display: flex; align-items: center; gap: 6px; margin: 8px 0 0; font-size: var(--fs-13, 13px); font-weight: 600; }
.sop-card-note { margin: 8px 0 0; font-size: var(--fs-13_5, 13.5px); line-height: 1.75; color: var(--ink-2); overflow-wrap: anywhere; }
.sop-card-tip {
  margin: 8px 0 0; padding: 8px 10px; border-radius: var(--radius);
  background: var(--primary-tint); font-size: var(--fs-13_5, 13.5px); line-height: 1.75; color: var(--ink); overflow-wrap: anywhere;
}
.sop-chip {
  display: inline-block; margin-right: 6px; padding: 0 8px; border-radius: var(--radius-full);
  background: var(--primary); color: var(--primary-on); font-size: var(--fs-12, 12px); font-weight: 600; line-height: 1.8; white-space: nowrap;
}
/* ---- 进度条（纯装饰、aria-hidden；分数与百分比都有文字，不靠条子表意）---- */
.sop-bar { margin-top: 10px; height: 8px; border-radius: var(--radius-full); background: var(--off-tint); overflow: hidden; }
.sop-bar > i { display: block; height: 100%; border-radius: inherit; background: var(--off); transition: width .28s var(--ease); }
.sop-bar-lg { height: 10px; }
/* ---- 三档语义：条子颜色 + 文字颜色 + 卡片左边框，三处同调 ---- */
.sop-good .sop-bar > i { background: var(--sop-good); }
.sop-mid .sop-bar > i { background: var(--sop-mid); }
.sop-low .sop-bar > i { background: var(--sop-low); }
.sop-good .sop-card-lv, .sop-good .sop-total-lv { color: var(--sop-good); }
.sop-mid .sop-card-lv, .sop-mid .sop-total-lv { color: var(--sop-mid); }
.sop-low .sop-card-lv, .sop-low .sop-total-lv { color: var(--sop-low); }
.sop-none .sop-card-lv, .sop-none .sop-total-lv { color: var(--muted); }
.sop-card.sop-good { border-left-color: var(--sop-good); }
.sop-card.sop-mid { border-left-color: var(--sop-mid); }
.sop-card.sop-low { border-left-color: var(--sop-low); }
.sop-card.sop-good { background: var(--sop-good-bg); border-color: #BBF7D0; border-left-color: var(--sop-good); }
.sop-card.sop-mid { background: var(--sop-mid-bg); border-color: #FDE68A; border-left-color: var(--sop-mid); }
.sop-card.sop-low { background: var(--sop-low-bg); border-color: #FECACA; border-left-color: var(--sop-low); }
.sop-card.sop-none { background: var(--sop-none-bg); }
.sop-total.sop-good { border-left-color: var(--sop-good); }
.sop-total.sop-mid { border-left-color: var(--sop-mid); }
.sop-total.sop-low { border-left-color: var(--sop-low); }
.sop-total.sop-good { background: var(--sop-good-bg); border-color: #BBF7D0; border-left-color: var(--sop-good); }
.sop-total.sop-mid { background: var(--sop-mid-bg); border-color: #FDE68A; border-left-color: var(--sop-mid); }
.sop-total.sop-low { background: var(--sop-low-bg); border-color: #FECACA; border-left-color: var(--sop-low); }
.sop-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
/* ---- 问题 / 优点 / 行动建议 ---- */
.sop-notes { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
.sop-note {
  display: flex; flex-direction: column; gap: 4px;
  padding: 10px 12px; border-radius: var(--radius); border-left: 3px solid var(--line-2);
  background: var(--surface-alt); font-size: var(--fs-14, 14px); line-height: 1.75; color: var(--ink); overflow-wrap: anywhere;
}
.sop-note-tip { font-size: var(--fs-13, 13px); color: var(--ink-2); }
.sop-sec-issue .sop-sec-h { color: var(--sop-low); }
.sop-sec-issue .sop-note { border-left-color: var(--sop-low); background: var(--danger-tint); }
.sop-sec-good .sop-sec-h { color: var(--sop-good); }
.sop-sec-good .sop-note { border-left-color: var(--sop-good); background: var(--success-tint); }
.sop-sec-plan .sop-sec-h { color: var(--primary-deep); }
.sop-sec-plan .sop-note { border-left-color: var(--primary); background: var(--primary-tint); }
.sop-empty { margin: 0; padding: 14px 4px; font-size: var(--fs-14, 14px); color: var(--muted); }
@media (max-width: 860px) {
  /* 375px：弹窗吃满可用宽（遮罩留 16px 呼吸），摘要与评分卡全转单列，长文本靠 overflow-wrap 断行，绝不横向溢出 */
  .sop-mask { padding: 12px; }
  .sop-panel { max-height: 92vh; }
  .sop-head { padding: 14px; }
  .sop-body { padding: 14px 14px 18px; }
  .sop-summary { flex-direction: column; gap: 12px; }
  /* flex-direction 转为 column 后，桌面端的 220/320px flex-basis 会变成高度；窄屏必须恢复内容自适应。 */
  .sop-total, .sop-facts { flex-basis: auto; }
  .sop-cards { grid-template-columns: 1fr; }
  .sop-facts { grid-template-columns: repeat(auto-fit, minmax(104px, 1fr)); }
  .sop-total-v b { font-size: var(--fs-30, 30px); }
}
@media (prefers-reduced-motion: reduce) {
  /* 全局那条已把动画压到 .01ms，这里再显式关死：弹窗不飞入、进度条不生长 */
  .sop-panel { animation: none; }
  .sop-bar > i, .sop-close { transition: none; }
}
.cp-panel{margin-top:12px}
.cp-panel:empty{display:none}
.cp-panel:not(:empty){border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:16px;box-shadow:0 8px 28px rgba(15,23,42,.08)}
.cp-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:var(--fs-16, 16px)}
.cp-head .btn-ghost,.frProfile{min-height:44px}
.cp-meta,.cp-foot{color:var(--muted);font-size:var(--fs-13, 13px);line-height:1.6;margin-top:8px}
.cp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}
.cp-signal{border:1px solid var(--line);border-radius:9px;padding:9px 11px;display:flex;gap:10px;align-items:flex-start}
.cp-signal span{color:var(--muted);min-width:46px}.cp-signal b{font-weight:600;overflow-wrap:anywhere}
.cp-subtitle{font-weight:700;margin-top:12px}.cp-conv{list-style:none;padding:0;margin:8px 0;display:grid;gap:7px}
.cp-conv li{background:var(--surface-alt);border-radius:8px;padding:8px 10px;line-height:1.55;overflow-wrap:anywhere}
@media(max-width:700px){.cp-grid{grid-template-columns:1fr}.cp-head{align-items:flex-start}.cp-panel:not(:empty){padding:12px}}
.lrn-wiring{border:1px solid var(--line);border-radius:10px;padding:12px;margin:10px 0;background:var(--surface-alt)}
.lrn-wiring-head{display:flex;justify-content:space-between;align-items:center;gap:10px}.lrn-wire-grid{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
.lrn-wire{border:1px solid var(--line);border-radius:999px;padding:5px 9px;font-size:var(--fs-12, 12px);font-weight:600}.lrn-wire.ok{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.lrn-wire.miss{color:#b45309;background:#fffbeb;border-color:#fde68a}

/* AI 视频中心：顶部控制区与左侧导航共用同一组深藏蓝，左右不再出现色差。 */
.aiv-shell{--aiv-night:var(--side-bg);--aiv-night-2:var(--side-bg-2)}
.aiv-hero{border-color:var(--side-line);background:linear-gradient(180deg,var(--aiv-night),var(--aiv-night-2));box-shadow:0 16px 34px rgba(15,23,42,.16)}
.aiv-hero:after{border-color:rgba(255,255,255,.09);box-shadow:0 0 0 42px rgba(255,255,255,.018),0 0 0 82px rgba(255,255,255,.018)}
.aiv-control-card{border-color:var(--side-line);background:color-mix(in srgb,var(--side-bg) 68%,transparent);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.aiv-secondary{border-color:rgba(255,255,255,.18);background:rgba(255,255,255,.06)}
.aiv-ready-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.aiv-ready-row>button{min-height:64px;padding:10px 12px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:rgba(255,255,255,.05);color:#fff;text-align:left;cursor:pointer;display:grid;grid-template-columns:1fr auto;gap:2px 10px;transition:background .18s var(--ease),border-color .18s var(--ease)}
.aiv-ready-row>button:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.28)}
.aiv-ready-row>button:focus-visible{outline:2px solid #fff;outline-offset:2px}.aiv-ready-row b{font-size:var(--fs-13, 13px)}.aiv-ready-row span{grid-column:1;font-size:var(--fs-14, 14px);font-weight:700}.aiv-ready-row small{grid-column:2;grid-row:1/3;align-self:center;color:rgba(255,255,255,.7)}
.aiv-tasks{margin-top:18px}.aiv-task-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:14px;padding:12px 0;border-top:1px solid var(--line)}
.aiv-task-row>span{display:flex;flex-direction:column;min-width:0}.aiv-task-row small{color:var(--muted);line-height:1.6}.aiv-task-row b{overflow-wrap:anywhere}.aiv-cancel{min-height:44px;color:var(--danger);border-color:color-mix(in srgb,var(--danger) 35%,var(--line))}
.aiv-modal-mask{position:fixed;inset:0;z-index:1450;padding:24px;display:flex;align-items:center;justify-content:center;background:rgba(5,10,22,.58)}
.aiv-modal{width:min(680px,100%);max-height:min(88vh,820px);display:flex;flex-direction:column;overflow:hidden;border-radius:18px;background:var(--surface);box-shadow:0 28px 80px rgba(2,6,23,.34)}
.aiv-modal>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line);background:var(--surface-alt)}
.aiv-modal>header span{font-size:var(--fs-11, 11px);font-weight:700;letter-spacing:.1em;color:var(--primary)}.aiv-modal>header h3{margin:4px 0 0;font-size:var(--fs-20, 20px)}.aiv-modal-close{width:44px;height:44px;display:grid;place-items:center;border:1px solid var(--line);border-radius:12px;background:var(--surface);cursor:pointer}.aiv-modal-close svg{width:20px;fill:none;stroke:currentColor;stroke-width:2}.aiv-modal-close:focus-visible{outline:none;box-shadow:var(--ring)}
.aiv-modal-body{padding:18px 20px 22px;overflow:auto}.aiv-help{margin:0 0 16px;color:var(--ink-2);line-height:1.75}.aiv-modal-status{min-height:24px;margin-top:12px;color:var(--primary-deep);font-weight:600}
.aiv-form{display:grid;gap:12px;margin-top:16px}.aiv-form label{display:grid;gap:6px;font-size:var(--fs-13, 13px);font-weight:600;color:var(--ink-2)}.aiv-form input,.aiv-form select{min-height:44px;padding:9px 11px;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--ink);font:inherit}.aiv-form input:focus-visible,.aiv-form select:focus-visible{outline:none;border-color:var(--primary);box-shadow:var(--ring)}
.aiv-record-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.aiv-record-row small{color:var(--muted)}
.aiv-account-list{display:grid;gap:8px}.aiv-account{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-alt)}.aiv-account>span{display:flex;flex-direction:column}.aiv-account small{color:var(--muted);margin-top:3px}.aiv-consent{display:flex;align-items:flex-start;gap:10px;line-height:1.7}.aiv-consent input{width:20px;height:20px;margin-top:3px}.aiv-steps{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:18px}.aiv-steps span,.aiv-steps b{padding:8px 6px;border-radius:9px;background:var(--surface-alt);color:var(--muted);text-align:center;font-size:var(--fs-12, 12px)}.aiv-steps .done,.aiv-steps b{background:var(--primary-tint);color:var(--primary-deep)}
@media(max-width:700px){.aiv-ready-row{grid-template-columns:1fr}.aiv-task-row{grid-template-columns:minmax(0,1fr) auto}.aiv-task-row .aiv-cancel{grid-column:1/-1}.aiv-modal-mask{padding:10px;align-items:flex-end}.aiv-modal{max-height:94vh;border-radius:16px 16px 0 0}.aiv-steps{grid-template-columns:1fr}.aiv-account{align-items:flex-start;flex-direction:column}}
@media(prefers-reduced-motion:reduce){.aiv-ready-row>button{transition:none}}
.aiv-admin-strip{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--primary) 24%,var(--line));border-radius:14px;background:var(--primary-tint)}.aiv-admin-strip>span{display:flex;flex-direction:column;min-width:0}.aiv-admin-strip small{margin-top:2px;color:var(--muted)}.aiv-admin-strip>a{min-height:44px;display:inline-flex;align-items:center;gap:9px;padding:8px 13px;border:1px solid var(--primary);border-radius:10px;background:var(--surface);font-weight:700}.aiv-admin-strip>a b{min-width:24px;padding:2px 7px;border-radius:999px;background:var(--primary);color:var(--primary-on);text-align:center}
.aiv-approval-page{max-width:980px;margin:22px auto 0;padding:20px;scroll-margin-top:18px}.aiv-approval-page .aiv-panel-title:not(:first-of-type){margin-top:22px}.aiv-approval{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:16px;align-items:center;padding:14px 0;border-top:1px solid var(--line)}.aiv-approval>span{display:flex;flex-direction:column}.aiv-approval small{color:var(--muted)}.aiv-approval .btn-primary{width:auto;margin:0;min-height:44px;letter-spacing:0}
@media(max-width:700px){.aiv-admin-strip{align-items:stretch;flex-direction:column}.aiv-admin-strip>a{justify-content:space-between}.aiv-approval-page{padding:16px}}
@media(max-width:700px){.aiv-approval{grid-template-columns:1fr}.aiv-approval .btn-primary{width:100%}}
.aiv-cover video{display:block;width:100%;height:100%;object-fit:cover;background:#0B1220}
.aiv-preview-error{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid #F5C47A;border-radius:10px;background:#FFF7E8;color:#8A4B08;font-size:var(--fs-12, 12px)}.aiv-cover>.aiv-preview-error{position:absolute;inset:auto 7px 7px 7px;z-index:2;background:rgba(255,247,232,.96)}.aiv-preview-error[hidden]{display:none}.aiv-preview-error .btn-ghost{flex:0 0 auto;min-height:40px}

/* ====== 【今日优先跟进 · web-v4.12.3】首页右栏事实卡 + 全量弹层 ======
   只用既有 panel/btn-ghost/tag 体系与设计令牌，不引新字体/图标库；交互反馈 150–250ms，
   动效一律包在 prefers-reduced-motion: no-preference 里。按钮最小点击高 44px。 */
.fu-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 10px 2px; border-top: 1px solid var(--line); }
.fu-row:first-child { border-top: none; }
.fu-main { min-width: 0; flex: 1; }
.fu-line1 { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.fu-line1 .cust { font-weight: 600; cursor: pointer; border-radius: var(--radius-sm); }
.fu-line1 .cust:hover { color: var(--primary); }
.fu-line1 .cust:focus-visible { outline: none; box-shadow: var(--ring); }
.fu-owner { color: var(--muted); font-size: var(--fs-13, 13px); }
.fu-owner::before { content: "归属："; }
.fu-time { margin-left: auto; color: var(--muted); font-size: var(--fs-12, 12px); white-space: nowrap; }
.fu-facts { margin-top: 5px; display: flex; flex-wrap: wrap; gap: 4px 12px; }
.fu-fact { color: var(--ink-2); font-size: var(--fs-13, 13px); line-height: 1.6; }
.fu-side { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.fu-src { color: var(--muted); font-size: var(--fs-12, 12px); }
.fu-src::before { content: "来源："; }
.fu-todo { min-height: 44px; }
.fu-all { width: 100%; min-height: 44px; margin-top: 8px; }
.fu-empty { padding: 12px 2px; font-size: var(--fs-14, 14px); }
.fu-err { padding: 12px 2px; font-size: var(--fs-14, 14px); color: var(--ink-2); }
.fu-err .btn-ghost { min-height: 44px; margin-left: 6px; }
.fu-loading { padding: 4px 2px 10px; font-size: var(--fs-13, 13px); }
.fu-skel { display: grid; gap: 10px; padding: 10px 2px 6px; }
.fu-skel span { display: block; height: 14px; border-radius: var(--radius-sm); background: var(--bg-alt); }
.fu-skel span:nth-child(2) { width: 82%; }
.fu-skel span:nth-child(3) { width: 64%; }
.fu-mask { z-index: 1200; } /* 盖在抽屉（120）之上；点客户名先关本层再走全局委托开抽屉 */
.fu-card { width: min(860px, 94vw); max-height: 86vh; display: flex; flex-direction: column; }
#fuModalBody { overflow-y: auto; min-height: 120px; padding: 4px 0; }
.fu-filters { margin: 2px 0 8px; }
.fu-filters:empty { display: none; }
.fu-scope-btns { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.fu-scope-btns .chip { min-height: 44px; padding: 8px 16px; border: 1px solid var(--line-2); border-radius: var(--radius-full); background: var(--surface); color: var(--ink-2); font-size: var(--fs-14, 14px); cursor: pointer; transition: border-color .18s ease, color .18s ease, background .18s ease; }
.fu-scope-btns .chip.on { border-color: var(--primary); color: var(--primary); background: var(--primary-tint, #EEF3FE); font-weight: 600; }
.fu-scope-btns .chip:hover { border-color: var(--primary); color: var(--primary); }
.fu-scope-btns .chip:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.fu-scope-btns label { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: var(--fs-13, 13px); }
.fu-scope-btns select { min-height: 44px; padding: 7px 10px; border: 1px solid var(--line-2); border-radius: var(--radius); background: var(--surface); color: var(--ink); font: inherit; }
.fu-scope-btns select:focus-visible { outline: none; border-color: var(--primary); box-shadow: var(--ring); }

/* 员工数据盘点 V2：沿用管理台令牌，蓝=所选员工、紫=部门平均；橙色只提示风险文字。 */
.emp-page{max-width:1600px;margin:0 auto;padding:4px 0 36px}.emp-head h2{margin:0;font-size:var(--fs-24,24px)}.emp-head p,.emp-note{margin:6px 0 0;color:var(--muted);font-size:var(--fs-14,14px);line-height:1.7}.emp-filters{display:flex;flex-wrap:wrap;align-items:end;gap:10px;margin:16px 0;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.emp-filters #empSelects{display:contents}.emp-filters label{display:inline-flex;align-items:center;gap:7px;color:var(--ink-2);font-size:var(--fs-14,14px);font-weight:600}.emp-range em{font-style:normal}.emp-filters input,.emp-filters select{min-height:42px;max-width:170px;padding:7px 9px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit}.emp-filters input:focus-visible,.emp-filters select:focus-visible,.emp-card:focus-visible{outline:none;box-shadow:var(--ring);border-color:var(--primary)}.emp-scope{margin:12px 0;color:var(--ink-2)}.emp-alert{margin:12px 0;padding:11px 13px;border:1px solid #f3c87a;border-radius:10px;background:#fff7e8;color:#8a4b08;font-size:var(--fs-14,14px)}.emp-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.emp-card{min-height:128px;padding:15px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink);text-align:left;cursor:pointer;transition:transform .16s var(--ease),border-color .16s var(--ease),box-shadow .16s var(--ease)}.emp-card:hover{transform:translateY(-2px);border-color:var(--primary);box-shadow:0 8px 20px rgba(15,23,42,.08)}.emp-card span{display:block;color:var(--muted);font-size:var(--fs-14,14px);font-weight:650}.emp-card b{display:block;margin:8px 0 5px;font-family:var(--mono);font-size:var(--fs-26,26px);line-height:1.15}.emp-card small{color:var(--ink-2);font-size:var(--fs-13,13px)}.emp-panel{margin-top:18px;padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--surface);box-shadow:0 1px 2px rgba(15,23,42,.03)}.emp-panel h3{margin:0;font-size:var(--fs-18,18px)}.emp-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.emp-panel-head span{color:var(--muted);font-size:var(--fs-13,13px)}.emp-dot-me,.emp-dot-dept{display:inline-block;width:10px;height:10px;margin:0 5px 0 9px;border-radius:3px;background:var(--primary)}.emp-dot-dept{background:#7c66cc}.emp-bars{display:grid;grid-template-columns:repeat(5,minmax(110px,1fr));gap:14px;align-items:end;min-height:250px;margin-top:18px}.emp-bar-group{min-width:0;text-align:center}.emp-bar-stage{height:184px;display:flex;align-items:flex-end;justify-content:center;gap:8px;padding-top:28px;border-bottom:1px solid var(--line)}.emp-bar-stage i{position:relative;display:block;width:32%;min-height:4px;border-radius:8px 8px 0 0;background:var(--primary)}.emp-bar-stage .emp-dept{background:#7c66cc}.emp-bar-stage b{position:absolute;bottom:calc(100% + 5px);left:50%;transform:translateX(-50%);white-space:nowrap;font:700 var(--fs-12,12px)/1.2 var(--mono);color:var(--ink)}.emp-bar-group>span{display:block;margin-top:8px;color:var(--ink-2);font-size:var(--fs-12,12px);line-height:1.45}.emp-table-wrap{overflow:hidden}.emp-table-wrap table{min-width:1250px}.emp-table-wrap th{white-space:nowrap}.emp-drill-list{display:grid;gap:7px;margin-top:12px}.emp-drill-list .link{min-height:42px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface-alt);text-align:left}.emp-drill-list .link:hover{border-color:var(--primary)}
.emp-workload-summary{margin:12px 0 18px;padding:16px;border:1px solid #cbdcf8;border-radius:12px;background:#f7faff;box-shadow:0 1px 2px rgba(15,23,42,.03)}.emp-workload-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.emp-workload-head h3{margin:0;font-size:var(--fs-18,18px)}.emp-workload-head p{margin:5px 0 0;color:var(--muted);font-size:var(--fs-13,13px)}.emp-workload-head>span{flex:0 0 auto;padding:5px 9px;border:1px solid #b9cdf8;border-radius:999px;background:#edf4ff;color:#1748b8;font-size:var(--fs-12,12px);font-weight:750}.emp-workload-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:14px}.emp-workload-card{min-width:0;padding:13px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.emp-workload-card span,.emp-workload-card small{display:block;color:var(--muted);font-size:var(--fs-13,13px)}.emp-workload-card b{display:block;margin:7px 0 4px;color:var(--ink);font:800 var(--fs-26,26px)/1.1 var(--mono)}.emp-workload-note{margin:11px 0 0;color:var(--muted);font-size:var(--fs-13,13px);line-height:1.65}
@media(max-width:1120px){.emp-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.emp-bars{grid-template-columns:repeat(3,minmax(110px,1fr))}}@media(max-width:700px){.emp-page{padding-bottom:20px}.emp-filters{align-items:stretch}.emp-filters label{width:100%;justify-content:space-between}.emp-filters .emp-range{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center}.emp-filters .emp-range span{grid-column:1/-1}.emp-filters .emp-range input{width:100%;max-width:none;min-width:0}.emp-filters input,.emp-filters select{max-width:48%}.emp-filters .btn-jade{width:100%}.emp-workload-summary{padding:13px}.emp-workload-head{flex-direction:column}.emp-workload-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.emp-workload-card{padding:11px 12px}.emp-workload-card b{font-size:var(--fs-22,22px)}.emp-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.emp-card{min-height:116px;padding:12px}.emp-card b{font-size:var(--fs-22,22px)}.emp-bars{grid-template-columns:repeat(2,minmax(120px,1fr));min-height:0}.emp-bar-stage{height:150px}.emp-panel{padding:13px}.emp-panel-head{align-items:flex-start;flex-direction:column}.emp-table-wrap{padding:0;border:0;background:transparent;box-shadow:none}.emp-table-wrap>h3,.emp-table-wrap>.emp-note{padding:0 13px}.emp-table-wrap .tbl-scroll{padding:0 13px 13px;margin-top:10px}}

/* web-v4.13.4：WiFi 购买门禁白话提示；缓存号 153；本轮无样式变化。 */
/* web-v4.13.3：一人一行顺序表；四项工作量数字恢复原有客户清单下钻。 */
.emp-team-title{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:12px}
.emp-team-title>span{flex:0 0 auto;color:var(--muted);font-size:var(--fs-13,13px)}
.emp-metric-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex:0 0 auto}.emp-metric-actions>span{color:var(--muted);font-size:var(--fs-13,13px);white-space:nowrap}.emp-collapse-btn{min-width:88px;min-height:44px;padding:0 16px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:700 var(--fs-14,14px)/1 var(--sans);cursor:pointer;touch-action:manipulation;transition:border-color .18s ease,background .18s ease,color .18s ease}.emp-collapse-btn:hover{border-color:var(--primary);background:#f7faff;color:var(--primary)}.emp-collapse-btn:active{background:#eef4ff}.emp-collapse-btn:focus-visible{outline:3px solid rgba(42,100,224,.28);outline-offset:2px;border-color:var(--primary)}
.emp-team-table-scroll{width:100%;overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface);overscroll-behavior-inline:contain}
.emp-team-table{width:100%;min-width:620px;border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--fs-13,13px)}
.emp-team-table th,.emp-team-table td{height:48px;padding:7px 8px;border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;vertical-align:middle}
.emp-team-table thead th{height:38px;background:#edf2f9;color:var(--ink-2);font-weight:750;line-height:1.25;white-space:normal}
.emp-team-table thead tr:first-child th{background:#e5ecf6;color:var(--ink);font-size:var(--fs-13,13px)}
.emp-team-table tbody tr:last-child>*{border-bottom:0}.emp-team-table tr>*:last-child{border-right:0}
.emp-team-table tbody tr:nth-child(even)>*{background:#f8fafc}.emp-team-table tbody tr:hover>*{background:#f1f6ff}
.emp-team-table tbody tr.is-active>*{background:#edf4ff}.emp-team-table tbody tr.is-active th{box-shadow:inset 3px 0 0 var(--primary)}
.emp-team-table thead th:first-child,.emp-team-table tbody th{position:sticky;left:0;z-index:2;width:160px;min-width:160px;text-align:left;background:var(--surface);box-shadow:1px 0 0 var(--line)}
.emp-team-table thead th:first-child{z-index:3;background:#e5ecf6;text-align:center}.emp-team-table tbody tr:nth-child(even)>th{background:#f8fafc}.emp-team-table tbody tr:hover>th{background:#f1f6ff}.emp-team-table tbody tr.is-active>th{background:#edf4ff}
.emp-team-person{appearance:none;width:100%;min-height:44px;margin:0;padding:3px 5px;border:0;background:transparent;color:var(--ink);display:flex;align-items:center;gap:9px;text-align:left;cursor:pointer}
.emp-team-person:hover b{color:var(--primary);text-decoration:underline}.emp-team-person>span:last-child{min-width:0;display:flex;flex-direction:column}.emp-team-person b{font-size:var(--fs-15,15px);line-height:1.3}.emp-team-person small{color:var(--muted);font-size:var(--fs-12,12px);font-weight:500}
.emp-team-order{flex:0 0 24px;color:#94a3b8;font:700 var(--fs-12,12px)/1 var(--mono)}
.emp-team-work-btn{appearance:none;min-width:44px;min-height:36px;padding:6px 10px;border:0;border-radius:7px;background:transparent;color:var(--primary);font:800 var(--fs-16,16px)/1 var(--mono);cursor:pointer;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:background .16s var(--ease),color .16s var(--ease)}
.emp-team-work-btn:hover{background:#edf4ff;color:#1748b8}.emp-team-work-btn:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--primary),0 0 0 2px rgba(42,100,224,.16)}
.emp-team-work-btn.is-zero{color:var(--muted);text-decoration-style:dashed}.emp-team-work-btn.is-zero:hover{color:var(--primary)}
.emp-team-person:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--primary),0 0 0 2px rgba(42,100,224,.16)}
.emp-team-table .stat-drill-row>td{height:auto;padding:10px;border-right:0;background:#f7faff;text-align:left}.emp-team-table .stat-drill-card{margin:0}.emp-team-table .stat-drill-scroll{max-width:100%;overflow:auto}.emp-team-table .stat-drill-scroll table{min-width:920px;table-layout:auto}.emp-team-table .stat-drill-scroll th,.emp-team-table .stat-drill-scroll td{position:static;width:auto;min-width:0;height:auto;padding:9px 10px;background:var(--surface);box-shadow:none;text-align:left;white-space:nowrap}
@media(max-width:700px){.emp-team-wrap{padding:13px}.emp-team-title{align-items:flex-start;flex-direction:column;gap:5px}.emp-team-title>span{white-space:normal}.emp-team-table{min-width:560px}}
@media(max-width:700px){.emp-metric-actions{width:100%;justify-content:space-between;gap:8px}.emp-metric-actions>span{white-space:normal}.emp-collapse-btn{flex:0 0 auto}}

/* web-v4.13.17：员工姓名下原位展开当前私客；沿用现有管理台颜色、筛选、按钮和横滚，不重做页面。 */
.emp-team-table .emp-private-row>td{height:auto;padding:0;border-right:0;background:#f7faff;text-align:left;white-space:normal}
.emp-private-card{padding:14px;border-top:1px solid #cbdcf8;border-bottom:1px solid #cbdcf8;background:#f7faff}
.emp-private-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:10px}
.emp-private-head h4{margin:0;color:var(--ink);font-size:var(--fs-16,16px)}.emp-private-head p{margin:5px 0 0;color:var(--muted);font-size:var(--fs-13,13px);line-height:1.6}
.emp-private-head .btn-ghost,.emp-private-filters .btn-ghost,.emp-private-pager button{min-height:44px}
.emp-private-filters{margin:0 0 10px}.emp-private-filters>label{display:inline-flex;align-items:center;gap:7px}.emp-private-filters select{min-height:42px}
.emp-private-scroll{width:100%;overflow-x:auto;border:1px solid var(--line);border-radius:9px;background:var(--surface);overscroll-behavior-inline:contain}
.emp-private-columns,.emp-private-customer{display:grid;grid-template-columns:90px 260px 120px 70px minmax(150px,1fr) 130px;min-width:820px;align-items:stretch}
.emp-private-columns{background:#e5ecf6;color:var(--ink-2)}.emp-private-columns>b{display:flex;align-items:center;min-height:40px;padding:8px 9px;border-right:1px solid var(--line);font-size:var(--fs-13,13px)}
.emp-private-customer>span{min-width:0;padding:10px 9px;border-top:1px solid var(--line);border-right:1px solid var(--line);font-size:var(--fs-13,13px);line-height:1.6}.emp-private-columns>*:last-child,.emp-private-customer>span:last-child{border-right:0}
.emp-private-customer:nth-child(odd)>span{background:#fbfcfe}.emp-private-customer:focus-within>span{background:#f1f6ff}
.emp-private-customer .pin-btn{min-height:36px;margin-top:4px}.emp-private-head .btn-ghost:focus-visible,.emp-private-filters button:focus-visible,.emp-private-pager button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.emp-private-empty,.emp-private-error{padding:18px;color:var(--muted);font-size:var(--fs-14,14px)}.emp-private-error{border:1px solid #f3c87a;border-radius:9px;background:#fff7e8;color:#8a4b08}.emp-private-pager{margin-top:10px}
@media(max-width:700px){.emp-private-card{padding:11px}.emp-private-head{align-items:stretch;flex-direction:column}.emp-private-head .btn-ghost{align-self:flex-start}.emp-private-filters{align-items:stretch}.emp-private-filters>label{width:100%;justify-content:space-between}.emp-private-filters select{max-width:68%}.emp-private-filters .filter-multi{width:100%}.emp-private-filters .filter-apply{margin-left:0}.emp-private-columns,.emp-private-customer{min-width:820px}}
@media(prefers-reduced-motion:reduce){.emp-private-customer{transition:none}}

/* 地图留痕只属于单个客户详情：复用抽屉分区，不占员工进度盘点清单列。 */
.customer-map-sec{padding:14px;border:1px solid #cbdcf8;border-radius:10px;background:#f7faff}
.customer-map-loading,.customer-map-empty,.customer-map-error{padding:4px 0;color:var(--muted);font-size:var(--fs-14,14px);line-height:1.6}.customer-map-error{color:#8a4b08}
.customer-map-overview{display:flex;flex-wrap:wrap;align-items:center;gap:7px 10px;color:var(--ink-2);font-size:var(--fs-14,14px)}.customer-map-overview b{color:var(--ink);font-size:var(--fs-15,15px)}.customer-map-overview span{padding:4px 8px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
.customer-map-more{margin-top:10px;border-top:1px solid var(--line)}.customer-map-more>summary{display:flex;align-items:center;min-height:44px;color:var(--primary);font-size:var(--fs-14,14px);font-weight:700;cursor:pointer}.customer-map-more>summary:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:6px}
.customer-map-detail{padding:2px 0 4px;color:var(--ink-2);font-size:var(--fs-14,14px)}.customer-map-detail ul{display:grid;gap:7px;margin:0 0 10px;padding:0;list-style:none}.customer-map-detail li{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.customer-map-detail li span{text-align:right}.customer-map-detail p{margin:6px 0;line-height:1.65}
@media(max-width:700px){.customer-map-sec{padding:12px}.customer-map-detail li{flex-direction:column;gap:3px}.customer-map-detail li span{text-align:left}}

/* web-v4.13.15：客户可见性与动态人员名单；沿用原界面，不做重设计。 */
.emp-export-btn{min-height:42px;padding:10px 18px;border:0;border-radius:var(--radius);background:#c45f0a;color:#fff;font-family:inherit;font-size:var(--fs-14,14px);font-weight:700;line-height:1.2;letter-spacing:.2px;cursor:pointer;box-shadow:0 4px 12px rgba(180,83,9,.28);transition:background .16s var(--ease),box-shadow .16s var(--ease),transform .12s var(--ease)}
.emp-export-btn:hover{background:#9a4a08;box-shadow:0 6px 16px rgba(180,83,9,.34);transform:translateY(-1px)}.emp-export-btn:active{transform:translateY(0)}.emp-export-btn:disabled{opacity:.55;cursor:wait;transform:none;box-shadow:none}.emp-export-btn:focus-visible{outline:2px solid #c45f0a;outline-offset:2px}
.emp-card.is-department{cursor:pointer}.emp-card.is-department::after{content:"查看全员明细";display:block;margin-top:9px;color:var(--primary);font-size:var(--fs-12,12px);font-weight:700}.emp-card.is-department.is-active{border-color:var(--primary);background:#f7faff;box-shadow:inset 0 0 0 1px var(--primary),0 6px 16px rgba(42,100,224,.10)}.emp-card.is-department.is-active::after{content:"已展开全员明细"}.emp-metric-breakdown{scroll-margin-top:88px}.emp-metric-table{min-width:420px}.emp-metric-table thead th:first-child,.emp-metric-table tbody th{width:55%;min-width:220px}.emp-metric-breakdown .emp-team-work-btn{min-height:44px}.emp-metric-person{display:flex;align-items:center;gap:9px;min-height:44px;padding:3px 5px}.emp-metric-person>span:last-child{min-width:0;display:flex;flex-direction:column}.emp-metric-person b{font-size:var(--fs-15,15px);line-height:1.3}.emp-metric-person small{color:var(--muted);font-size:var(--fs-12,12px);font-weight:500}.emp-metric-empty{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;color:var(--muted);font:700 var(--fs-16,16px)/1 var(--mono)}
@media(max-width:700px){.emp-metric-table{min-width:0}.emp-metric-table thead th:first-child,.emp-metric-table tbody th{width:62%;min-width:0}}
.emp-trend{scroll-margin-top:88px}.emp-trend-head{align-items:flex-start}.emp-trend-actions{display:flex;align-items:center;justify-content:flex-end;gap:14px;flex-wrap:wrap}.emp-trend-switch{display:flex;align-items:center;gap:4px;padding:3px;border:1px solid var(--line-2);border-radius:9px;background:var(--surface-alt)}.emp-trend-switch-btn{appearance:none;min-width:58px;min-height:36px;padding:7px 12px;border:0;border-radius:7px;background:transparent;color:var(--ink-2);font:650 var(--fs-13,13px)/1.2 var(--sans);cursor:pointer;transition:background .16s var(--ease),color .16s var(--ease),box-shadow .16s var(--ease)}.emp-trend-switch-btn:hover{background:#eaf1ff;color:var(--primary)}.emp-trend-switch-btn.is-active{background:var(--primary);color:#fff;box-shadow:0 2px 7px rgba(42,100,224,.24)}.emp-trend-switch-btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.emp-trend-legend{display:flex;align-items:center;gap:7px;color:var(--ink-2)!important;white-space:nowrap}.emp-line-me,.emp-line-dept{display:inline-block;width:28px;height:0;margin-left:8px;border-top:3px solid var(--primary)}.emp-line-dept{border-top-color:#7964c9;border-top-style:dashed}.emp-trend-scroll{position:relative;width:100%;overflow-x:auto;overscroll-behavior-inline:contain;margin-top:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-alt)}.emp-trend-svg{display:block;width:100%;min-width:680px;height:auto;aspect-ratio:1080/330}.emp-trend-grid line{stroke:var(--line);stroke-width:1}.emp-trend-grid text{fill:var(--muted);font:12px var(--mono)}.emp-trend-me,.emp-trend-dept{fill:none;stroke:var(--primary);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.emp-trend-dept{stroke:#7964c9;stroke-width:3;stroke-dasharray:10 8}.emp-trend-dot-me{fill:var(--surface);stroke:var(--primary);stroke-width:3}.emp-trend-dot-dept{fill:var(--surface);stroke:#7964c9;stroke-width:3}.emp-trend-guide{stroke:#ef4444;stroke-width:1.5;stroke-dasharray:6 5;pointer-events:none}.emp-trend-hit{fill:transparent;cursor:crosshair}.emp-trend-hit:focus{outline:none;fill:rgba(42,100,224,.06)}.emp-trend-tooltip{position:absolute;z-index:5;min-width:158px;padding:10px 12px;border:1px solid #cbd5e1;border-radius:8px;background:rgba(255,255,255,.97);box-shadow:0 8px 24px rgba(15,23,42,.16);color:var(--ink);font-size:var(--fs-13,13px);line-height:1.55;pointer-events:none}.emp-trend-tooltip[hidden]{display:none!important}.emp-trend-tooltip b,.emp-trend-tooltip span{display:block}.emp-trend-tooltip b{margin-bottom:3px}.emp-tip-me{color:var(--primary);font-weight:700}.emp-tip-dept{color:#6d55bd;font-weight:700}.emp-trend-empty{padding:30px 12px;color:var(--muted);text-align:center}
@media(max-width:700px){.emp-filters .emp-export-btn{width:100%}.emp-trend-actions{width:100%;align-items:flex-start;justify-content:flex-start}.emp-trend-switch{width:100%;display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}.emp-trend-switch-btn{min-width:0;min-height:44px;padding-inline:8px}.emp-trend-legend{white-space:normal}.emp-trend-actions .btn-ghost{min-height:44px}.emp-trend-svg{min-width:620px}}
@media(prefers-reduced-motion:reduce){.emp-export-btn{transition:none}.emp-card{transition:none}.emp-card:hover,.emp-export-btn:hover{transform:none}}
.emp-page #empHolder.is-refreshing{pointer-events:none}.emp-page #empHolder.is-refreshing::after{content:"正在切换员工数据…";position:fixed;z-index:30;top:82px;right:24px;padding:9px 13px;border:1px solid #b9cdf8;border-radius:9px;background:#edf4ff;color:#1748b8;box-shadow:0 8px 22px rgba(15,23,42,.14);font-size:var(--fs-13,13px);font-weight:700}.emp-refresh-error{margin:10px 0;padding:9px 12px;border:1px solid #f3c87a;border-radius:9px;background:#fff7e8;color:#8a4b08;font-size:var(--fs-13,13px)}
.fu-pager { display: flex; align-items: center; justify-content: center; gap: 14px; padding: 10px 0 2px; border-top: 1px solid var(--line); margin-top: 6px; }
.fu-pager:empty { display: none; border-top: none; }
.fu-pager .btn-ghost { min-height: 44px; }
.fu-row, .fu-all, .fu-todo { transition: background .18s ease, border-color .18s ease, color .18s ease; }
@media (prefers-reduced-motion: no-preference) {
  .fu-skel span { animation: fuPulse 1.6s ease-in-out infinite; }
  @keyframes fuPulse { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }
}
@media (max-width: 700px) {
  .fu-row { flex-direction: column; }
  .fu-side { flex-direction: row; align-items: center; width: 100%; justify-content: space-between; }
  .fu-time { margin-left: 0; }
  .fu-card { width: 100%; max-height: 92vh; }
}
