/* ============================================================
   销售团队营销 AI 系统 · 补充样式
   （沿用 app.css 的设计语言，只补本系统独有的组件）
   ============================================================ */

/* ---------- 显示 / 隐藏 ---------- */
.only-mobile { display: none; }
@media (max-width: 820px) {
  .only-desktop { display: none !important; }
  .only-mobile { display: block; }
}

/* ---------- 必填星号与图例 ---------- */
.field label .req { color: var(--red); margin-left: 1px; }

/* ---------- 是 / 否 圆形单选项（对照需求截图：两个圆框 + 文字） ---------- */
.yn-group { display: flex; align-items: center; gap: 20px; min-height: 33px; flex-wrap: wrap; }
.yn {
  display: inline-flex; align-items: center; gap: 8px; cursor: pointer;
  font-size: 12.5px; color: var(--ink-2); user-select: none; -webkit-tap-highlight-color: transparent;
}
.yn input {
  appearance: none; -webkit-appearance: none; margin: 0;
  width: 17px; height: 17px; border-radius: 50%; border: 1.5px solid #b0bccf;
  background: #fff; position: relative; cursor: pointer; transition: border-color .14s, background .14s, box-shadow .14s;
  flex: 0 0 17px;
}
.yn input:hover { border-color: var(--brand); }
.yn input:checked { border-color: var(--brand); background: var(--brand); }
.yn input:checked::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: 5px; height: 5px;
  border-radius: 50%; background: #fff; transform: translate(-50%, -50%);
}
.yn input:focus-visible { outline: 0; box-shadow: 0 0 0 3px rgba(47, 107, 255, .18); }
.yn:has(input:checked) { color: var(--ink); font-weight: 600; }
@media (max-width: 820px) {
  .yn input { width: 19px; height: 19px; flex-basis: 19px; }
  .yn { gap: 9px; font-size: 14px; }
  .yn-group { gap: 26px; }
}

/* ---------- 推进要点小圆点（表格里的 5 项是否） ---------- */
.ync { display: inline-flex; align-items: center; gap: 5px; }
.ync i {
  width: 17px; height: 17px; border-radius: 50%; display: grid; place-items: center;
  font-size: 9.5px; font-style: normal; font-weight: 700; line-height: 1;
  background: #f1f3f8; color: #98a4b6; border: 1px solid #e6eaf2;
}
.ync i.yes { background: var(--teal-50); color: #0a8d81; border-color: #c7ece7; }
.ync i.no { background: var(--red-50); color: #bf2f34; border-color: #f6d7d7; }
.ync-legend { font-size: 11px; color: var(--muted); margin-left: 6px; }

/* ---------- 详情里的「是 / 否」值 ---------- */
.yn-val { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; }
.yn-val.yes { color: #0a8d81; }
.yn-val.no { color: #bf2f34; }
.yn-val.none { color: var(--muted); font-weight: 400; }

/* ---------- 语音录入 ---------- */
.voice-btn { border-color: #f3d0d0; background: linear-gradient(180deg, #fff7f7, #ffefef); color: #c23a3a; font-weight: 600; }
.voice-btn:hover { border-color: #e9b4b4; background: #ffe9e9; color: #a92c2c; }
.voice-btn.rec { animation: voicePulse 1.2s ease-in-out infinite; border-color: var(--red); color: #fff; background: var(--red); }
/* 「回到人工」：和「开始录音（红）」「解析文字（紫）」并排，用平台蓝补齐这一行的配色，
   纯白底的 .btn 夹在中间显得缺一块，所以用浅蓝底 + 蓝字 */
.manual-btn { border-color: #cbdcff; background: linear-gradient(180deg, #f5f8ff, #e9f0ff); color: #2f6bff; font-weight: 600; }
.manual-btn:hover { border-color: #a9c2ff; background: #e2ebff; color: #1f57e0; }
@keyframes voicePulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(217, 58, 63, .42); }
  50% { box-shadow: 0 0 0 7px rgba(217, 58, 63, 0); }
}
.rec-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; display: inline-block; }

.voice-panel {
  margin-bottom: 14px; border: 1px solid #f6d4d5; border-radius: 10px; background: #fffafa; padding: 12px 14px;
}
.voice-panel .vp-head { display: flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 600; color: #b03434; }
.voice-panel .vp-wave { display: inline-flex; align-items: flex-end; gap: 2px; height: 14px; }
.voice-panel .vp-wave i { width: 3px; border-radius: 2px; background: var(--red); animation: wave 1s ease-in-out infinite; }
.voice-panel .vp-wave i:nth-child(1) { height: 6px; animation-delay: 0s; }
.voice-panel .vp-wave i:nth-child(2) { height: 12px; animation-delay: .12s; }
.voice-panel .vp-wave i:nth-child(3) { height: 8px; animation-delay: .24s; }
.voice-panel .vp-wave i:nth-child(4) { height: 13px; animation-delay: .36s; }
@keyframes wave { 0%, 100% { transform: scaleY(.5); } 50% { transform: scaleY(1); } }
.voice-panel .vp-text {
  margin-top: 8px; font-size: 12.5px; line-height: 1.7; color: var(--ink-2); min-height: 22px;
  max-height: 120px; overflow: auto; white-space: pre-wrap; word-break: break-word;
}
.voice-panel .vp-text .interim { color: var(--muted); }
.voice-panel .vp-tip { font-size: 11px; color: var(--muted); margin-top: 6px; }
.voice-panel .vp-acts { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }

/* AI 解析结果提示条 */
.ai-result .ai-line b { max-width: none; }
.ai-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.ai-chip {
  display: inline-flex; align-items: center; gap: 4px; height: 20px; padding: 0 8px; border-radius: 11px;
  background: var(--violet-50); border: 1px solid #ddd4ff; color: #5b3fd6; font-size: 11px; font-weight: 600;
  max-width: 100%; min-width: 0;
}
/* 抽取出来的值可能很长（如完整项目名），必须截断，否则会顶出胶囊背景 */
.ai-chip small {
  font-weight: 400; color: #7b6fd0; max-width: 190px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; display: inline-block;
}

/* ---------- 工作台 ---------- */
/* 六张卡片要塞进一行，整体缩一档：内边距、字号、右上角装饰圆都收小，
   标签与脚注放不下就截断（悬停 title 看全），保证永远是一行 / 手机上三列两行 */
.kpi-row { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; margin-bottom: 12px; }
.kpi-row .kpi { padding: 11px 12px; }
.kpi-row .kpi::after { width: 46px; height: 46px; right: -14px; top: -14px; }
.kpi-row .k-label { display: block; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kpi-row .k-val { font-size: 19px; margin-top: 3px; letter-spacing: -.4px; }
.kpi-row .k-foot { display: block; font-size: 10.5px; margin-top: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 再宽也别硬挤：中屏起改三列两行 */
@media (max-width: 1240px) { .kpi-row { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
/* 手机：一行三个，两行放完六张 */
@media (max-width: 520px) {
  .kpi-row { gap: 8px; }
  .kpi-row .kpi { padding: 9px 10px; }
  .kpi-row .kpi::after { width: 38px; height: 38px; right: -12px; top: -12px; }
  .kpi-row .k-val { font-size: 17px; }
  .kpi-row .k-label, .kpi-row .k-foot { font-size: 10.5px; }
}

.stage-bars { display: flex; flex-direction: column; gap: 11px; }
.sb-row { display: grid; grid-template-columns: 80px minmax(0, 1fr) max-content; gap: 10px; align-items: center; font-size: 12px; }
.sb-row .sb-name { color: var(--ink-2); font-weight: 600; white-space: nowrap; }
.sb-row .sb-track { display: block; height: 9px; border-radius: 6px; background: #eef1f7; overflow: hidden; }
/* 进度条是 <i>，必须显式 block，否则 inline 元素上 width/height 不生效（会变成看不见） */
.sb-row .sb-fill { display: block; height: 100%; border-radius: 6px; background: linear-gradient(90deg, #5b9dff, #2f6bff); transition: width .6s cubic-bezier(.2,.8,.2,1); }
.sb-row .sb-val { text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.sb-row .sb-val b { color: var(--ink); font-weight: 650; }
@media (max-width: 520px) {
  .sb-row { grid-template-columns: 66px minmax(0, 1fr) max-content; gap: 8px; font-size: 11.5px; }
}

.rate-list { display: flex; flex-direction: column; gap: 12px; }
.rate-item .ri-top { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 12px; }
.rate-item .ri-top b { font-weight: 600; color: var(--ink-2); }
.rate-item .ri-top span { color: var(--muted); font-variant-numeric: tabular-nums; }
.rate-item .ri-top span b { color: var(--brand-600); }

/* 工作台「商机阶段分布 / 推进要点达成率」：左边 7 个阶段、右边 4 项，右边会矮一大截。
   两张卡片等高，右边把四项用均匀间隙撑开（相当于加大行间距），空白就不会堆在底部。
   只在双列布局下生效——窄屏堆叠成单列时再撑开只会留下莫名其妙的大空隙。 */
@media (min-width: 1281px) {
  .split-main.equal { align-items: stretch; }
  .split-main.equal > .card { display: flex; flex-direction: column; }
  .split-main.equal > .card > .card-body { flex: 1 1 auto; display: flex; flex-direction: column; }
  .split-main.equal .rate-list { flex: 1 1 auto; justify-content: space-between; }
}

/* ---------- 详情抽屉内的字段块 ---------- */
.detail-bools { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.dbool {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid var(--line); border-radius: 8px; padding: 8px 11px; background: var(--panel-2); font-size: 12px;
}
.dbool span { color: var(--muted); }
@media (max-width: 520px) { .detail-bools { grid-template-columns: minmax(0, 1fr); } }

/* 长文本块 */
.text-block {
  font-size: 12.5px; line-height: 1.75; color: var(--ink-2); white-space: pre-wrap; word-break: break-word;
  background: var(--panel-2); border: 1px solid var(--line-2); border-radius: 8px; padding: 10px 12px;
}

/* ---------- 登录页补充 ---------- */
.login-badge {
  display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 10px; border-radius: 20px;
  background: rgba(122, 166, 255, .14); border: 1px solid rgba(122, 166, 255, .3); color: #a9c6ff;
  font-size: 11px; font-weight: 600; margin-bottom: 18px;
}

/* ---------- 底部标签栏（手机） ---------- */
.tabbar {
  display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  background: rgba(255, 255, 255, .96); backdrop-filter: blur(12px);
  border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom);
}
.tab-item {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  height: 52px; border: 0; background: transparent; color: var(--muted); font-size: 10.5px; cursor: pointer;
  font-family: inherit;
}
.tab-item.on { color: var(--brand); font-weight: 600; }
.tab-item svg { width: 19px; height: 19px; }
@media (max-width: 820px) { .tabbar { display: flex; } }

/* ---------- 手机端卡片里的推进要点 ---------- */
.cc-yn { display: flex; flex-wrap: wrap; gap: 6px; }
.cc-yn span {
  display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--muted);
  background: #f6f8fc; border: 1px solid var(--line-2); border-radius: 6px; padding: 1px 6px;
}
.cc-yn span.yes { background: var(--teal-50); border-color: #cfeee9; color: #0a8d81; }
.cc-yn span.no { background: var(--red-50); border-color: #f6d7d7; color: #bf2f34; }
.cc-yn span b { font-weight: 600; }

/* 空状态里的图标统一用 SVG */
.empty svg { opacity: .3; margin-bottom: 6px; }

/* 表格里客户名过长时的两行截断 */
.cell-main b { max-width: 260px; }

/* ---------- 手机端弹窗底部操作区 ----------
   新建客户底部有「语音 / 智能 / 取消 / 保存」四个按钮，
   横排会把中文挤成两行甚至把说明文字竖排，这里改成两列网格 */
@media (max-width: 820px) {
  .modal-foot {
    display: grid; grid-template-columns: 1fr 1fr; gap: 8px; align-items: center;
  }
  .modal-foot .left { display: none; }
  .modal-foot .btn { width: 100%; height: 40px; font-size: 13.5px; }
  .modal-foot::after { content: none; }
}

/* ---------- 登录页：窄屏（手机 / 小窗）的紧凑品牌头 ----------
   桌面端品牌信息在左侧整幅面板，宽度不足 1080px 时那块会被隐藏，
   这里补一个 logo + 名称，避免手机登录页第一眼只有「登录」两个字 */
.login-mini { display: none; }
@media (max-width: 1080px) {
  .login-mini { display: flex; align-items: center; gap: 10px; margin-bottom: 20px; }
  .login-mini .mark {
    width: 36px; height: 36px; border-radius: 10px; flex: 0 0 36px;
    background: linear-gradient(135deg, #2f6bff, #5b9dff 55%, #22d3c5);
    display: grid; place-items: center; color: #fff; font-weight: 800; font-size: 15px;
    box-shadow: 0 6px 18px rgba(47, 107, 255, .38);
  }
  .login-mini b { display: block; font-size: 15px; color: var(--ink); letter-spacing: .2px; }
  .login-mini span { display: block; font-size: 10px; letter-spacing: 2px; color: var(--muted); text-transform: uppercase; }
}

/* ============================================================
   2026-10 改版新增组件
   ============================================================ */

/* ---------- 商机阶段：SS1..SS6 / SSC 的配色 ----------
   七档要有明显递进感，但 SSC 必须一眼看出是「成了」 */
.pill.ss1 { background: #f1f3f8; color: #6b7789; }
.pill.ss2 { background: #eef4ff; color: #3166d6; }
.pill.ss3 { background: #edf1ff; color: #4a4fd0; }
.pill.ss4 { background: #f3eeff; color: #5b3fd6; }
.pill.ss5 { background: #fff3e0; color: #b06f00; }
.pill.ss6 { background: #e6f6f3; color: #0a8d81; }

/* 用户管理：需改密徽标 + 强制改密复选框 */
.badge { display:inline-block; padding:1px 8px; border-radius:999px; font-size:11px; line-height:18px; font-weight:600; }
.badge.warn { background:#fff3e0; color:#b06f00; border:1px solid #f3d9a8; }
.field.check .cb-line { display:flex; align-items:center; gap:8px; font-weight:500; cursor:pointer; }
.field.check .cb-line input { width:16px; height:16px; accent-color:var(--blue,#3166d6); }

.sb-fill.stage-SS1 { background: linear-gradient(90deg, #ccd5e2, #9aa8bd); }
.sb-fill.stage-SS2 { background: linear-gradient(90deg, #93bcff, #5b8def); }
.sb-fill.stage-SS3 { background: linear-gradient(90deg, #97a4ff, #5b6bef); }
.sb-fill.stage-SS4 { background: linear-gradient(90deg, #bda9ff, #7c5cf0); }
.sb-fill.stage-SS5 { background: linear-gradient(90deg, #ffd08a, #f0a020); }
.sb-fill.stage-SS6 { background: linear-gradient(90deg, #8ce3da, #12b3a4); }
/* SSC 是项目取消：用灰色，别再沿用以前「已签单」的绿色，否则图表上看着像赢单 */
.sb-fill.stage-SSC { background: linear-gradient(90deg, #d8dde6, #a8b1c0); }

/* ---------- 客户名称组合下拉框 ----------
   原生 datalist 在 Safari 上几乎不可用，这里自己画一层浮层。
   浮层挂在 body 上，避免被 .modal-body 的 overflow 裁掉。 */
.combo-panel {
  position: fixed; z-index: 280; display: none; box-sizing: border-box;
  background: #fff; border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 14px 34px rgba(16, 30, 54, .16); padding: 4px; overflow: auto;
}
.combo-panel.show { display: block; }
.combo-item {
  padding: 8px 10px; border-radius: 7px; font-size: 13px; color: var(--ink);
  cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.combo-item.on, .combo-item:hover { background: var(--brand-50); color: var(--brand-600); }
.combo-empty { padding: 14px 12px; font-size: 12px; color: var(--muted); text-align: center; line-height: 1.9; }
.combo-empty span { font-size: 11px; color: #9aa8bd; }
.combo-more { padding: 6px 10px; font-size: 11px; color: var(--muted); }

/* ---------- 竞争对手多选胶囊 ---------- */
.chip-pick { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 0 2px; }
.pick-chip {
  height: 27px; padding: 0 11px; border-radius: 14px; cursor: pointer;
  border: 1px solid var(--line); background: #fff; color: var(--ink-2);
  font-size: 12px; font-family: inherit; transition: all .14s;
}
.pick-chip:hover { border-color: #b9c9e6; color: var(--brand-600); }
.pick-chip.on {
  background: var(--brand-50); border-color: #b9d0ff; color: var(--brand-600); font-weight: 600;
}
.pick-chip.on::before { content: "✓ "; font-size: 10px; }
/* 已选但不属于当前产品的常见对手：虚线框提示「它跟你换的产品不搭，但数据保留着」 */
.pick-chip.cross { border-style: dashed; border-color: #d6a04a; color: #a8701a; }
.pick-chip.cross.on { background: #fff8ec; border-color: #e0b25e; }
/* 竞对区的产品筛选说明，放在 chip 上方一行 */
.comp-hint { font-size: 11.5px; color: var(--ink-3, #8a94a6); margin: 2px 0 6px; line-height: 1.5; }

/* 详情里展示竞对 */
.tag-chip {
  display: inline-block; padding: 1px 8px; margin: 2px 4px 2px 0; border-radius: 10px;
  background: var(--panel-2); border: 1px solid var(--line-2); font-size: 11.5px; color: var(--ink-2);
}

/* ---------- 金额输入框的后缀 ---------- */
.input-unit { position: relative; display: flex; align-items: center; }
.input-unit input { padding-right: 46px; }
.input-unit span {
  position: absolute; right: 11px; font-size: 11.5px; color: var(--muted); pointer-events: none;
}
.unit-wan { font-size: 10.5px; color: var(--muted); margin-left: 2px; font-weight: 400; }

/* ---------- 表单里的小链接按钮 ---------- */
.mini-link {
  margin-left: auto; border: 0; background: transparent; color: var(--brand-600);
  font-size: 11.5px; font-family: inherit; cursor: pointer; padding: 0 2px; font-weight: 500;
}
.mini-link:hover { text-decoration: underline; }

/* ---------- 语音解析的客户匹配提示 ---------- */
.ai-match {
  margin-top: 8px; padding: 7px 10px; border-radius: 8px; font-size: 12px;
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.ai-match.ok { background: var(--teal-50); border: 1px solid #cfeee9; color: #0a8d81; }
.ai-match.warn { background: var(--amber-50); border: 1px solid #f6e3bd; color: #8a5c00; }
.ai-match b { font-weight: 700; }
.ai-match span { font-weight: 400; opacity: .85; font-size: 11.5px; }

/* 复选框行 */
.chk-line { display: flex; align-items: center; gap: 7px; font-weight: 500; cursor: pointer; }
.chk-line input { width: 15px; height: 15px; accent-color: var(--brand); }

@media (max-width: 820px) {
  .combo-panel { max-height: 46vh !important; }
  .combo-item { padding: 10px 12px; font-size: 14px; }
  .pick-chip { height: 30px; font-size: 12.5px; }
}

/* AI 角标在字段右上角，会压住标签行末尾的「+ 新增客户名称」，让出 22px */
.field.ai-filled .mini-link { margin-right: 22px; }

/* ---------- 手机端抽屉头部 ----------
   标题 + 编辑/删除 + 关闭按钮在 390px 下会挤在同一行，关闭按钮被顶出屏幕。
   这里让标题独占第一行，操作按钮换行靠右。 */
@media (max-width: 820px) {
  .drawer-head .top { flex-wrap: wrap; row-gap: 6px; }
  .drawer-head .top > div:first-child { flex: 1 1 auto; min-width: 0; }
  .drawer-head h3 { font-size: 15.5px; word-break: break-word; }
  .drawer-head .top > .row { flex: 0 0 100%; margin-left: 0 !important; justify-content: flex-end; padding-bottom: 4px; }
}

/* ============================ 数据权限相关 ============================ */

/* 表单里销售用户的「负责人」只读展示 */
.owner-self {
  display: flex;
  align-items: center;
  gap: 8px;
  height: 33px;
  padding: 0 12px;
  border: 1px dashed var(--line);
  border-radius: 8px;
  background: var(--bg-soft, #f7f9fc);
  font-weight: 600;
  font-size: 13px;
}
.owner-self span { font-weight: 400; color: var(--muted); font-size: 11.5px; }

/* 工作台「我的数据范围」 */
.scope-box { display: flex; flex-direction: column; gap: 9px; }
.scope-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: 8px;
  border-bottom: 1px dashed var(--line);
  font-size: 12.5px;
  color: var(--muted);
}
.scope-row:last-child { border-bottom: 0; padding-bottom: 0; }
.scope-row b { color: var(--ink); font-size: 14px; }

/* 开关（设置页「启用智能体 / 允许删除」）—— 类名用 .tgl，避开 app.css 里已有的 .switch */
.chk-line.chk-block { display: block; }
.tgl {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  width: 100%;
  min-width: 0;
  cursor: pointer;
  user-select: none;
}
.tgl input { position: absolute; opacity: 0; width: 0; height: 0; }
.tgl .tgl-track {
  position: relative;
  flex: 0 0 auto;
  width: 38px;
  height: 22px;
  margin-top: 1px;
  border-radius: 999px;
  background: #d5dcea;
  transition: background .16s;
}
.tgl .tgl-track::after {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .2);
  transition: transform .16s;
}
.tgl input:checked + .tgl-track { background: var(--brand); }
.tgl input:checked + .tgl-track::after { transform: translateX(16px); }
.tgl input:focus-visible + .tgl-track { outline: 2px solid rgba(45, 108, 223, .35); outline-offset: 2px; }
.tgl .tgl-txt {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
  padding-top: 1px;
}
.tgl .tgl-txt b { display: block; font-size: 13px; font-weight: 600; line-height: 1.4; }
.tgl .tgl-txt .hint {
  display: block;
  margin: 0;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--muted);
  white-space: normal;
}


/* ============================================================
 *  拜访札记 · 跟进待办
 *  与 app.css 同一套变量；这里只补新组件，不重定义基类。
 * ============================================================ */

/* ---------------- 分段控件 ---------------- */
.seg{
  display:flex;gap:3px;background:#f1f3f8;border-radius:10px;padding:3px;
  overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
}
.seg::-webkit-scrollbar{display:none}
.seg-item{
  border:0;background:transparent;border-radius:8px;padding:6px 11px;
  font-size:12.5px;color:var(--ink-2);cursor:pointer;white-space:nowrap;
  display:inline-flex;align-items:center;gap:5px;transition:.14s;
}
.seg-item:hover{color:var(--ink)}
.seg-item.on{background:#fff;color:var(--brand-600);font-weight:650;box-shadow:var(--shadow-1)}
.seg-item i{
  font-style:normal;background:var(--brand-50);color:var(--brand-600);
  border-radius:9px;padding:0 5px;font-size:10.5px;font-weight:700;line-height:15px;
}
.seg-item.on i{background:var(--brand);color:#fff}
.main-seg{margin:12px 0}

/* ---------------- 提醒条 ---------------- */
.remind-bar{
  display:flex;align-items:center;gap:9px;background:#fff8e8;border:1px solid #f3e0b5;
  border-radius:10px;padding:9px 12px;margin-bottom:10px;font-size:12.5px;color:#7a5300;
}
.rb-ico{
  width:18px;height:18px;flex:0 0 18px;border-radius:50%;background:var(--amber);color:#fff;
  display:grid;place-items:center;font-size:11px;font-weight:800;
}
.rb-text{flex:1;min-width:0}
.rb-text b{font-weight:800}
.txt-red{color:var(--red)}
.txt-amber{color:#b06f00}

/* ---------------- 待办卡片 ---------------- */
.todo-list{display:flex;flex-direction:column;gap:8px}
.todo-card{
  display:flex;gap:10px;align-items:flex-start;background:var(--panel);
  border:1px solid var(--line);border-radius:11px;padding:11px 12px;transition:.14s;
}
.todo-card:hover{border-color:#d6deeb;box-shadow:var(--shadow-1)}
/* 从消息里点进来定位到的那一条：蓝色描边 + 呼吸一下，找人不用在清单里翻 */
.todo-card.is-focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(47,107,255,.16);animation:todoFocus .9s ease-out 1}
@keyframes todoFocus{0%{background:#eef4ff}100%{background:var(--panel)}}
.todo-card.done{opacity:.58}
.todo-card.done .todo-title{text-decoration:line-through;color:var(--muted)}

.todo-check{
  width:21px;height:21px;flex:0 0 21px;border-radius:50%;border:1.6px solid #cfd8e5;
  background:#fff;color:#fff;cursor:pointer;font-size:12px;line-height:1;
  display:grid;place-items:center;transition:.14s;margin-top:1px;padding:0;
}
.todo-check:hover{border-color:var(--teal);background:var(--teal-50)}
.todo-card.done .todo-check{background:var(--teal);border-color:var(--teal)}
.todo-check.small{width:18px;height:18px;flex-basis:18px;font-size:11px;margin-top:2px}

.todo-main{flex:1;min-width:0}
.todo-title{font-size:13px;font-weight:600;color:var(--ink);line-height:1.5;word-break:break-word}
.todo-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:5px;font-size:11.5px;color:var(--muted)}
.todo-cust{color:var(--brand-600);font-weight:600}
.todo-kind{background:#f1f3f8;border-radius:5px;padding:0 5px}
.todo-flag{background:var(--red-50);color:#bf2f34;border-radius:5px;padding:0 5px;font-weight:650}
.todo-wait{background:var(--violet-50);color:#5b3fd6;border-radius:5px;padding:0 5px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.todo-detail{
  margin-top:5px;font-size:11.5px;color:var(--ink-2);line-height:1.6;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}

.todo-due{
  font-weight:650;border-radius:5px;padding:0 6px;font-size:11px;line-height:18px;
  display:inline-block;white-space:nowrap;
}
.due-overdue{background:var(--red-50);color:#bf2f34}
.due-today{background:var(--amber-50);color:#b06f00}
.due-soon{background:var(--brand-50);color:var(--brand-600)}
.due-later{background:#f1f3f8;color:#6b7789}
.due-none{background:transparent;color:var(--muted);font-weight:400}

.todo-acts{display:flex;gap:3px;flex:0 0 auto}
.mini-btn{
  border:1px solid var(--line);background:#fff;color:var(--ink-2);border-radius:7px;
  padding:0 8px;font-size:11.5px;cursor:pointer;white-space:nowrap;height:24px;line-height:22px;
  transition:.14s;font-family:inherit;
}
.mini-btn:hover{border-color:var(--brand);color:var(--brand-600);background:var(--brand-50)}
.mini-btn.dg:hover{border-color:var(--red);color:var(--red);background:var(--red-50)}
/* 「恢复待办」：已处理清单里点错已办的一键退回，青色描边让它比记录/删更醒目 */
.mini-btn.rp{border-color:#9ad9d2;background:var(--teal-50);color:#0a8d81;font-weight:600}
.mini-btn.rp:hover{border-color:var(--teal);background:var(--teal);color:#fff}

/* ---------------- 拜访时间线 ---------------- */
.visit-list{display:flex;flex-direction:column;gap:10px}
.visit-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.vc-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11.5px;color:var(--muted)}
.vc-date{font-family:var(--mono);font-weight:600;color:var(--ink-2);font-size:11.5px}
.vc-cust{font-weight:650;color:var(--ink);font-size:12.5px}
.vc-ch{background:#f1f3f8;border-radius:5px;padding:0 5px}
.vc-todo{margin-left:auto;color:var(--brand-600);font-weight:650}
.vc-summary{margin-top:8px;font-size:13px;color:var(--ink);line-height:1.7}
.vc-points{margin:8px 0 0;padding-left:16px;font-size:12px;color:var(--ink-2);line-height:1.75}
.vc-points li{margin:1px 0}
.vc-people{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}
.ppl-chip{
  display:inline-flex;align-items:center;gap:4px;background:#f6f8fc;border:1px solid var(--line);
  border-radius:999px;padding:1px 8px;font-size:11.5px;color:var(--ink-2);
}
.ppl-chip small{color:var(--muted);font-size:10.5px}

/* 职务层级徽记：灰=执行层(老师/科长) 蓝=部门层(副处/正处) 金=校领导(副校长/校长) */
.ppl-lv{
  font-style:normal;font-size:10px;line-height:1.5;padding:0 5px;border-radius:4px;
  border:1px solid transparent;white-space:nowrap;
}
.ppl-lv.base{background:#eef1f6;color:#5b6673;border-color:#dde3ec}
.ppl-lv.mid{background:#e8f1fe;color:#1d5bbf;border-color:#cfe0f8}
.ppl-lv.top{background:#fff4e0;color:#95590a;border-color:#f5dcb3;font-weight:600}

/* 客户详情里的决策链提示条 */
.cp-lv{
  display:block;
  margin-bottom:10px;padding:7px 10px;border-radius:9px;font-size:11.5px;
  border:1px solid var(--line);background:#fafbfe;color:var(--ink-2);
}
.cp-lv-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.cp-lv b{font-size:12px;font-weight:700}
.cp-lv em{margin-left:auto;font-style:normal;font-size:11px;color:var(--muted)}
/* 院校类型徽记：本科/高职的决策权不一样，鼠标停上去能看到差别 */
.cp-lv-org{
  font-style:normal;font-size:10.5px;line-height:1.5;color:var(--ink-2);
  padding:1px 7px;border-radius:20px;border:1px solid var(--line-2);background:#fff;cursor:help;
}
.cp-lv-can{margin-top:4px;font-size:11px;line-height:1.6;color:var(--ink-2)}
.cp-lv.plain{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;background:#fafbfe}
.cp-lv.base{border-color:#e2e7ef;background:#f7f9fc}
.cp-lv.base b{color:#5b6673}
.cp-lv.mid{border-color:#cfe0f8;background:#f2f7fe}
.cp-lv.mid b{color:#1d5bbf}
.cp-lv.top{border-color:#f5dcb3;background:#fffaf0}
.cp-lv.top b{color:#95590a}

/* 拆解预览顶部的判断口径提示 */
.an-org{
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
  margin:8px 0 2px;padding:6px 10px;border-radius:8px;
  background:#f4f7fd;border:1px dashed #cfdcef;font-size:11.5px;color:var(--ink-2);
}
.an-org b{font-size:12px;color:#1d5bbf}
.an-org i{font-style:normal;font-size:10.5px;padding:1px 6px;border-radius:20px;background:#fff;border:1px solid #cfdcef;color:#1d5bbf}
.an-org em{margin-left:auto;font-style:normal;font-size:11px;color:var(--muted)}

/* 层级说明弹窗：本科 / 高职两套口径并排 */
.lg-orgs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
.lg-org{padding:8px 10px;border-radius:9px;border:1px solid var(--line);background:#fafbfe}
.lg-org b{display:block;font-size:12px;margin-bottom:2px}
.lg-org i{font-style:normal;font-size:10.5px;color:var(--brand-600)}
.lg-org span{display:block;margin-top:4px;font-size:11px;line-height:1.6;color:var(--ink-2)}
.lg-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
.lg-table{border-collapse:collapse;width:100%;font-size:11.5px}
.lg-table th,.lg-table td{padding:7px 9px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line-2)}
.lg-table thead th{background:#f7f9fc;font-size:11px;color:var(--muted);font-weight:600;white-space:nowrap}
.lg-table tbody tr:last-child td{border-bottom:0}
.lg-table .lg-lv{width:32px;text-align:center;font-weight:700;color:var(--muted)}
.lg-table .lg-name{white-space:nowrap}
.lg-table .lg-name span{display:block;font-size:10.5px;color:var(--muted)}
.lg-table td.lg-hot{background:#fffdf6;color:#7a5300}
@media (max-width:720px){
  .lg-orgs{grid-template-columns:1fr}
  .lg-table{font-size:11px}
  .lg-table th,.lg-table td{padding:6px}
}

.vc-nodes{
  margin-top:9px;margin-left:3px;padding-left:10px;border-left:2px solid var(--line-2);
}
.tl-node{position:relative;padding:2px 0;font-size:11.5px;color:var(--ink-2);display:flex;gap:6px;flex-wrap:wrap;align-items:baseline}
.tl-dot{position:absolute;left:-15px;top:8px;width:6px;height:6px;border-radius:50%;background:var(--brand)}
.tl-what{flex:1;min-width:0;line-height:1.6}
.tl-node .mono{font-weight:600;color:var(--brand-600)}

.vc-leader{
  margin-top:9px;background:var(--amber-50);border-radius:8px;padding:7px 10px;
  font-size:12px;color:#7a5300;line-height:1.65;
}
.vc-leader b{display:block;font-size:11px;color:#8a6100;margin-bottom:2px;font-weight:700}
.vc-foot{display:flex;align-items:center;gap:6px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--line-2)}
.vc-by{margin-left:auto;font-size:11px;color:var(--muted)}

.pill.tiny{font-size:10px;padding:0 6px;line-height:16px}
.pill.tiny::before{display:none}

/* ---------------- AI 拆解结果 ---------------- */
.an-wrap{margin-top:16px;border:1px solid #dfe7f5;background:#fbfcff;border-radius:12px;padding:14px}
.an-head{display:flex;align-items:center;gap:7px;font-size:12.5px;margin-bottom:6px;flex-wrap:wrap}
.an-meta{margin-left:auto;font-size:11px;color:var(--muted)}
.an-block{margin-top:13px}
.an-label{font-size:11.5px;font-weight:700;color:var(--ink-2);margin-bottom:6px}
.an-label span{font-weight:400;color:var(--muted);margin-left:5px;font-size:11px}

.an-wrap input:not([type=checkbox]),
.an-wrap select,
.an-wrap textarea{
  width:100%;height:32px;border:1px solid var(--line);border-radius:8px;padding:0 9px;
  font-size:12.5px;background:#fff;color:var(--ink);font-family:inherit;transition:.14s;
}
.an-wrap textarea{height:auto;padding:7px 9px;line-height:1.6;resize:vertical}
.an-wrap input:not([type=checkbox]):focus,
.an-wrap select:focus,
.an-wrap textarea:focus{outline:0;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50)}

.an-chips{display:flex;flex-wrap:wrap;gap:6px}
.an-chip{
  display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--line);
  border-radius:7px;padding:3px 5px 3px 8px;font-size:11.5px;color:var(--ink-2);max-width:100%;
}
.an-chip .ct{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.an-chip .cx{
  border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;
  line-height:1;padding:0 1px;font-family:inherit;
}
.an-chip .cx:hover{color:var(--red)}

/* 姓名列不需要太宽，把空间让给职务（「信息中心主任」这种 6 字职务很常见） */
.an-person{display:grid;grid-template-columns:minmax(64px,.9fr) minmax(110px,1.3fr) 52px 70px;gap:6px;margin-bottom:6px;align-items:center}
.an-person .p-note{grid-column:1 / -1}
.an-person .ppl-lv{display:flex;align-items:center;justify-content:center;padding:0 4px}
.an-node{display:grid;grid-template-columns:1fr 92px 130px;gap:6px;margin-bottom:6px}

.an-todo{
  display:flex;gap:8px;padding:8px;background:#fff;border:1px solid var(--line);
  border-radius:9px;margin-bottom:6px;
}
.t-on{position:relative;flex:0 0 18px;margin-top:2px}
.t-on input{position:absolute;opacity:0;width:0;height:0}
.t-on span{display:block;width:18px;height:18px;border:1.6px solid #cfd8e5;border-radius:5px;cursor:pointer;background:#fff}
.t-on input:checked + span{background:var(--brand);border-color:var(--brand)}
.t-on input:checked + span::after{
  content:'✓';position:absolute;inset:0;color:#fff;font-size:11px;
  display:grid;place-items:center;line-height:1;
}
.t-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.t-row{display:grid;grid-template-columns:130px 82px 74px;gap:6px}
.an-todos-block .an-label{color:var(--brand-600)}

/* 保存按钮在拆解完成时轻提示一下 */
.pulse{animation:pulseOnce .8s ease 2}
@keyframes pulseOnce{
  0%,100%{box-shadow:0 0 0 0 rgba(47,107,255,.45)}
  50%{box-shadow:0 0 0 7px rgba(47,107,255,0)}
}

/* ---------------- AI 复盘 ---------------- */
.brief-wrap{display:flex;flex-direction:column;gap:10px}
.brief-meta{display:flex;gap:10px;align-items:center;font-size:11.5px;color:var(--muted);flex-wrap:wrap}
.brief-sec{border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:var(--panel)}
.brief-sec.warn{background:#fffbf3;border-color:#f3e3c2}
.brief-sec.info{background:#f7faff;border-color:#dce7fa}
.brief-title{font-size:12.5px;font-weight:750;color:var(--brand-600);margin-bottom:6px;letter-spacing:.3px}
.brief-sec.warn .brief-title{color:#a56900}
.brief-body{font-size:12.5px;line-height:1.85;color:var(--ink-2);word-break:break-word}

/* ---------------- 工作台「今天要办」 ---------------- */
.today-card{margin-bottom:12px}
.today-list{display:flex;flex-direction:column;gap:1px}
.today-row{display:flex;gap:9px;align-items:flex-start;padding:7px 2px;border-bottom:1px dashed var(--line-2)}
.today-row:last-child{border-bottom:0}
.tr-main{flex:1;min-width:0}
.tr-title{font-size:12.5px;font-weight:600;cursor:pointer;line-height:1.5;color:var(--ink)}
.tr-title:hover{color:var(--brand-600)}
.tr-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:3px;font-size:11px;color:var(--muted)}
.tr-cust{color:var(--brand-600)}
.today-empty{font-size:12px;color:var(--muted);line-height:1.75}

/* ---------------- 客户详情内嵌 ---------------- */
.cp-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.cp-count{font-size:11.5px;color:var(--muted)}
.cp-todos{display:flex;flex-direction:column;gap:5px;margin-bottom:12px;background:#fafbfe;border-radius:9px;padding:9px 10px}
.cp-todo{display:flex;align-items:center;gap:8px;font-size:12px}
.cp-more{font-size:11px;color:var(--muted);padding:3px 0 1px}
.ct-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-item{display:flex;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line-2)}
.cp-item:last-child{border-bottom:0}
.ci-date{flex:0 0 80px;font-family:var(--mono);font-size:11px;color:var(--muted);padding-top:2px}
.ci-body{flex:1;min-width:0}
.ci-sum{font-size:12.5px;line-height:1.65;color:var(--ink)}
.ci-meta{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px;align-items:center}
.empty.small{padding:18px 0}
.empty.small b{font-size:12.5px}
.empty.small span{font-size:11.5px}

/* ---------------- 记一笔：语音输入区 ---------------- */
.voice-field{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.voice-field textarea{
  width:100%;border:0;padding:11px 12px;font-size:13px;line-height:1.75;
  resize:vertical;font-family:inherit;color:var(--ink);background:transparent;
}
.voice-field textarea:focus{outline:0}
.vf-bar{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--panel-2);border-top:1px solid var(--line-2);flex-wrap:wrap}
.vf-status{font-size:11.5px;color:var(--muted);line-height:1.4;flex:1;min-width:120px}
/* 提示文案挪到「说点什么」标题行右侧：标题不收缩，提示靠右并允许换行 */
.sec-title>.st-text{flex:0 0 auto}
.sec-title>.vf-status{
  margin-left:auto;flex:0 1 auto;min-width:0;
  text-align:right;font-weight:400;line-height:1.35;
  white-space:normal;word-break:break-word;
}
@media (max-width:520px){
  .sec-title{align-items:baseline}
  .sec-title>.vf-status{font-size:11px;line-height:1.45}
}
.voice-btn.rec{background:var(--red);color:#fff;border-color:var(--red);animation:recPulse 1.3s infinite}
.voice-btn.disabled{opacity:.5}
@keyframes recPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(217,58,63,.5)}
  50%{box-shadow:0 0 0 8px rgba(217,58,63,0)}
}

.raw-box{
  max-height:52vh;overflow:auto;background:var(--panel-2);border-radius:9px;padding:12px;
  font-size:12.5px;line-height:1.9;white-space:pre-wrap;word-break:break-word;color:var(--ink-2);
}

/* ---------------- 窄屏 ---------------- */
@media (max-width:720px){
  .todo-card{flex-wrap:wrap}
  .todo-acts{width:100%;justify-content:flex-end;margin-top:2px}
  .todo-wait{max-width:150px}
  .an-person{grid-template-columns:1fr 1fr}
  .an-person .p-stance{grid-column:1 / -1}
  /* 窄屏上徽记会拆行，层级信息在时间线的 chip 上已经能看到，这里省掉 */
  .an-person .ppl-lv{display:none}
  .an-node{grid-template-columns:1fr 1fr}
  .an-node .n-what{grid-column:1 / -1}
  .t-row{grid-template-columns:1fr 1fr}
  .t-row .t-date{grid-column:1 / -1}
  .vc-todo{margin-left:0}
  .vc-foot{flex-wrap:wrap}
  .vc-by{width:100%;margin-left:0;text-align:right}
  .seg-item{padding:6px 9px;font-size:12px}
  .today-row .todo-check{margin-top:3px}
  .an-wrap{padding:11px}
  .bp-actions{width:100%}
}

/* ---------------- 客户名称简称（语音识别用） ----------------
   .cell-main 是 flex 列，标签不设 align-self 会被拉满整格；
   选择器写 .cell-main .dict-alias 才能压过 .cell-main span 的灰色小字规则 */
.dict-alias{
  display:inline-block;padding:0 7px;line-height:17px;
  font-size:10.5px;font-weight:500;color:#3f5f96;
  background:#eef3fc;border:1px solid #dbe6f8;border-radius:5px;
  vertical-align:1px;white-space:nowrap;
}
.cell-main .dict-alias,
.cc-alias .dict-alias{align-self:flex-start;max-width:100%;text-overflow:ellipsis}
.cc-alias{margin-top:3px}

/* ---------------- 客户名称：院校类型徽标 ---------------- */
.org-tag{
  display:inline-block;padding:0 7px;line-height:17px;border-radius:5px;
  font-size:10.5px;font-weight:600;font-style:normal;white-space:nowrap;
  vertical-align:1px;
}
.org-tag.org-bk{color:#1d5bbf;background:#eef3fc;border:1px solid #dbe6f8}
.org-tag.org-gz{color:#8a5a12;background:#fdf5e6;border:1px solid #f3e2c2}
.org-tag.org-ty{color:#5b6673;background:#f4f6f9;border:1px solid #e2e7ef}
.card-list .cc-alias{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.cell-main .org-tag{align-self:flex-start}

/* ---------------- 客户名称：负责人 + 客户分层 ----------------
   负责人用「姓氏圆点 + 姓名」，扫一眼就知道这所谁在跟；
   分层三档配色：A 红（重点）、B 蓝（常规）、C 灰（观察） */
.owner-cell{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:12.5px}
.owner-avatar{
  width:20px;height:20px;border-radius:50%;flex:0 0 20px;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:10.5px;font-weight:500;color:#1d5bbf;background:#eef3fc;border:1px solid #dbe6f8;
}
.owner-cell.is-off .owner-avatar{color:#8892a0;background:#f4f6f9;border-color:#e2e7ef}
.owner-none{color:#98a2b3;font-size:12px}
.tier-tag{
  display:inline-block;padding:0 7px;line-height:17px;border-radius:5px;
  font-size:10.5px;font-weight:500;font-style:normal;white-space:nowrap;vertical-align:1px;
}
.tier-tag.tier-a{color:#b3261e;background:#fdecea;border:1px solid #f7d2cd}
.tier-tag.tier-b{color:#1d5bbf;background:#eef3fc;border:1px solid #dbe6f8}
.tier-tag.tier-c{color:#5b6673;background:#f4f6f9;border:1px solid #e2e7ef}

/* ============================================================
   手机端触控友好（≤820px）

   起因：桌面为了信息密度把按钮做到 24px、勾选圈做到 18px，
   鼠标点没问题，手指点就得瞄准。Apple/Google 的建议是 44/48px，
   折中到 32-40px：视觉上不至于变笨重，误触率明显下降。
   勾选圈用 ::after 扩大命中区而不是改尺寸——改了会把整行撑高。
   ============================================================ */
@media (max-width: 820px) {
  /* 待办：完成勾选圈，视觉 21px，可点区域 41px */
  .todo-check { position: relative; }
  .todo-check::after {
    content: ""; position: absolute; inset: -10px; border-radius: 50%;
  }

  /* 卡片尾部的小按钮（改期/等回话/删/去看）—— 三四个并排，太矮会点串 */
  .mini-btn { height: 32px; line-height: 30px; padding: 0 10px; font-size: 12px; }
  .todo-acts { gap: 5px; }

  /* 分段控件（全部待办 / 今天 / 逾期 / 未来 7 天） */
  .seg { padding: 3px; }
  .seg-item { padding: 8px 12px; font-size: 12.5px; }

  /* 表单里的文字链接（+ 新增客户名称、去指派）—— 加内边距撑出点击区 */
  .mini-link { padding: 8px 2px; margin: -8px -2px -8px auto; }

  /* 弹窗右上角关闭：34px 够不到，放大到 40px */
  .modal-head .x, .drawer-head .x { width: 40px; height: 40px; font-size: 19px; padding: 0; }
  .modal-head .x { margin: -6px -6px -6px auto; }

  /* 勾选框 / 单选框：14px 在手机上几乎点不中，放到 18px（外层 label 也能点） */
  input[type=checkbox], input[type=radio] { width: 18px; height: 18px; }

  /* 详情页页签 */
  .tabs button { height: 34px; }

  /* 分页：手机上信息一行、按钮一行，两个按钮各占一半 */
  .pager { padding: 10px 12px; }
  .pager .pgs { margin-left: 0; width: 100%; gap: 8px; }
  .pager .pgs .btn { flex: 1; height: 36px; }

  /* 筛选栏：搜索独占一行，「筛选」「重置」并排，不再让重置孤零零占整行 */
  .filter-bar .kw { flex: 1 1 100%; }
  .filter-bar .f-more { flex: 1 1 auto; height: 38px; }
  .filter-bar .f-acts { width: auto; flex: 1 1 auto; margin-left: 0; }
  .filter-bar .f-acts .btn { height: 38px; }

  /* 注意栏的两个按钮（待办/消息面板） */
  .n-foot .pop-item { padding: 12px 6px; font-size: 12px; }
}

/* ============================================================
   客户认领申请（销售提交 → 管理员审批）
   ============================================================ */

/* 负责人下面那行「申请中：张三」 */
.claim-tag {
  margin-top: 4px;
  display: block;
  width: fit-content;
  max-width: 100%;
  font-size: 11px;
  line-height: 16px;
  padding: 1px 7px;
  border-radius: 5px;
  color: #a86400;
  background: var(--amber-50);
}

/* 汇总条里的待审提示，跟普通统计数字区分开 */
.claim-need { color: #a86400; }
.claim-need b { color: #a86400; }

/* 顶部「认领申请」按钮：有待审才亮起来 */
.btn.has-claim {
  border-color: #f0c67a;
  background: #fffaf0;
  color: #a86400;
}
.btn.has-claim:hover { background: #fff3dd; border-color: #e6b45c; color: #8a5200; }
.claim-count {
  display: inline-block;
  min-width: 16px;
  padding: 0 4px;
  margin-left: 1px;
  border-radius: 8px;
  background: #fff;
  font-size: 11px;
  line-height: 16px;
  text-align: center;
}

/* 审批弹窗里的申请条目 */
.claim-list { display: flex; flex-direction: column; gap: 8px; }
.claim-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 9px;
  background: #fff;
}
.claim-main { flex: 1; min-width: 0; }
.claim-name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.claim-sub {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-top: 3px;
  font-size: 11.5px;
  color: var(--muted);
}
.claim-sub b { color: var(--ink-2); font-weight: 600; }
.claim-acts { display: flex; gap: 6px; flex: 0 0 auto; }

@media (max-width: 820px) {
  /* 手机上按钮单独占一行，左右各一半，避免误点「驳回」 */
  .claim-item { flex-wrap: wrap; }
  .claim-acts { width: 100%; }
  .claim-acts .btn { flex: 1; height: 34px; }
}

/* 销售那列：审核中 + 撤销，中间留缝 */
.claim-wait { display: inline-flex; align-items: center; gap: 6px; }
.claim-wait button { height: 24px; padding: 0 8px; font-size: 12px; border: 1px solid var(--line); border-radius: 6px; background: #fff; color: var(--muted); cursor: pointer; }
.claim-wait button:hover { color: var(--ink); border-color: #cdd6e6; }

@media (max-width: 820px) {
  /* 手机上「撤销」按 24px 太矮，容易点空 */
  .claim-wait button { height: 32px; padding: 0 12px; font-size: 12.5px; }
}

/* ============================================================
 * v1.12.0 待办：负责人标识 / 操作留痕 / 全部人员视角
 * ============================================================ */

/* 负责人：只在「全部人员」视角出现，标在客户名前面，一眼分清是谁的事 */
.todo-owner {
  background: var(--brand-50); color: var(--brand-600);
  border-radius: 5px; padding: 0 6px; font-weight: 700;
  max-width: 96px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.vc-owner {
  background: var(--brand-50); color: var(--brand-600);
  border-radius: 5px; padding: 0 6px; font-weight: 650;
}

/* 操作留痕：别人动过我的待办时挂在标题下方 */
.todo-op {
  margin-top: 6px; font-size: 11.5px; line-height: 1.6;
  border-radius: 7px; padding: 3px 8px; width: fit-content; max-width: 100%;
}
.todo-op.other { background: #fff8e8; border: 1px solid #f3e0b5; color: #7a5300; }
.todo-op.doneop { background: #eef8f3; border: 1px solid #cbe8d9; color: #16704a; }
.todo-op i { font-style: normal; color: inherit; opacity: .78; }
.todo-op i::before { content: ' · '; }

/* 操作记录弹窗 */
.oplog { display: flex; flex-direction: column; gap: 2px; }
.oplog-row { display: flex; gap: 9px; padding: 7px 0 7px 2px; }
.oplog-dot {
  width: 7px; height: 7px; flex: 0 0 7px; border-radius: 50%;
  background: #c3cddd; margin-top: 6px; position: relative;
}
.oplog-dot.admin { background: var(--brand); }
.oplog-row:not(:last-child) .oplog-dot::after {
  content: ''; position: absolute; left: 3px; top: 9px; width: 1px; height: calc(100% + 16px);
  background: var(--line);
}
.oplog-body { flex: 1; min-width: 0; }
.oplog-top { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 12.5px; }
.oplog-top b { color: var(--ink); font-weight: 650; }
.oplog-top em {
  font-style: normal; font-size: 10.5px; background: var(--brand-50); color: var(--brand-600);
  border-radius: 4px; padding: 0 4px;
}
.oplog-top span { color: var(--ink-2); }
.oplog-top i { font-style: normal; margin-left: auto; color: var(--muted); font-size: 11px; }
.oplog-detail { margin-top: 2px; font-size: 11.5px; color: var(--muted); line-height: 1.6; word-break: break-word; }

/* 全部人员：顶部人员筛选条 */
.team-bar {
  background: var(--panel); border: 1px solid var(--line); border-radius: 12px;
  padding: 10px 12px; margin-bottom: 4px;
}
.team-head {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  font-size: 12px; color: var(--muted); padding-bottom: 9px;
  border-bottom: 1px dashed var(--line);
}
.team-head b { color: var(--ink); font-size: 15px; font-weight: 800; }
.team-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
.team-chip {
  display: inline-flex; flex-direction: column; align-items: flex-start; gap: 1px;
  border: 1px solid var(--line); background: #fff; border-radius: 9px;
  padding: 5px 10px; cursor: pointer; font-family: inherit; transition: .14s; text-align: left;
}
.team-chip b { font-size: 12.5px; color: var(--ink); font-weight: 650; }
.team-chip span { font-size: 11px; color: var(--muted); display: inline-flex; align-items: center; gap: 5px; }
.team-chip span i { font-style: normal; color: var(--red); background: var(--red-50); border-radius: 4px; padding: 0 4px; }
.team-chip:hover { border-color: var(--brand); }
.team-chip.on { background: var(--brand-50); border-color: var(--brand); }
.team-chip.on b { color: var(--brand-600); }

@media (max-width: 820px) {
  /* 六个人以上的名单在手机上横滑，别把页面撑高 */
  .team-chips { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; }
  .team-chips::-webkit-scrollbar { display: none; }
  .team-chip { flex: 0 0 auto; }
  .team-head { gap: 7px; font-size: 11.5px; }
  .team-head b { font-size: 14px; }
  .todo-op { font-size: 11px; }
}

/* 六页签在手机上横滑会把「已处理」藏到屏幕外，改成换行铺满两排，一个不少 */
@media (max-width: 820px) {
  .todo-tabs { flex-wrap: wrap; overflow: visible; }
  .todo-tabs .seg-item { flex: 1 1 auto; justify-content: center; padding: 7px 9px; }
}

/* ============================================================
 * v1.12.1 客户名称：按负责人 / 分层筛选
 * ============================================================ */

/* 两个下拉跟搜索框并排；选中后染成品牌色，一眼看出名单是筛过的 */
.filter-bar .dict-filter { min-width: 150px; max-width: 208px; }
.filter-bar .dict-filter.on {
  border-color: var(--brand); background: var(--brand-50);
  color: var(--brand-600); font-weight: 650;
}
.filter-bar .f-acts .mini-btn { height: 31px; }

@media (max-width: 820px) {
  /* 手机上搜索框独占一行，两个下拉各占一半，别把筛选条撑成三行 */
  .filter-bar .dict-filter {
    flex: 1 1 calc(50% - 4px); min-width: 0; max-width: none; height: 38px;
  }
  .filter-bar .f-acts { flex-wrap: wrap; row-gap: 8px; }
  .filter-bar .f-acts .mini-btn { height: 32px; }
}

/* ============================================================
 * v1.15.0 个人中心：账号设置 / 登录记录 / 可信设备 / 三方账号
 * 左侧导航 + 右侧卡片，跟截图里的「应用访问」是同一套排法
 * ============================================================ */

.me-wrap { display: grid; grid-template-columns: 176px minmax(0, 1fr); gap: 14px; align-items: start; }
.me-nav {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 6px; box-shadow: var(--shadow-1); position: sticky; top: 78px;
}
.me-nav-btn {
  display: block; width: 100%; text-align: left; border: 0; background: transparent;
  color: var(--ink-2); font-size: 12.5px; font-weight: 600; line-height: 1.5;
  padding: 9px 11px; border-radius: 8px; cursor: pointer; transition: background .14s, color .14s;
}
.me-nav-btn + .me-nav-btn { margin-top: 2px; }
.me-nav-btn:hover { background: var(--panel-2); color: var(--ink); }
.me-nav-btn.active { background: var(--brand-50); color: var(--brand-600); }

.me-body { min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.me-card { margin: 0; }
.me-card .card-body { padding: 14px 16px; }

/* ---------- 基本信息 ---------- */
.me-profile { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.me-avatar {
  width: 46px; height: 46px; flex: 0 0 46px; border-radius: 14px; display: grid; place-items: center;
  background: linear-gradient(135deg, #2f6bff, #5b9dff 60%, #22d3c5);
  color: #fff; font-weight: 800; font-size: 18px; box-shadow: 0 4px 14px rgba(47, 107, 255, .3);
}
.me-profile-main { min-width: 0; flex: 0 1 auto; }
.me-profile-main b { display: block; font-size: 15px; }
.me-profile-main span { color: var(--muted); font-size: 12px; }
.me-profile-meta { margin-left: auto; display: flex; gap: 22px; flex-wrap: wrap; }
.me-profile-meta div { display: flex; flex-direction: column; gap: 2px; }
.me-profile-meta span { color: var(--muted); font-size: 11px; }
.me-profile-meta b { font-size: 12px; font-variant-numeric: tabular-nums; }

/* ---------- 一行设置项 ---------- */
.me-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.me-row-main { min-width: 0; flex: 1 1 260px; }
.me-row-main b { display: block; font-size: 13px; }
.me-row-main span { color: var(--muted); font-size: 12px; line-height: 1.7; }
.me-row-act { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; }
.me-note {
  margin-top: 10px; padding: 8px 10px; border-radius: 8px;
  background: var(--panel-2); color: var(--muted); font-size: 11.5px; line-height: 1.7;
  border: 1px dashed var(--line);
}
.me-note.block { margin: 0; }
.me-actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }

/* ---------- 开关 ---------- */
.sw { position: relative; display: inline-flex; align-items: center; cursor: pointer; }
.sw input { position: absolute; opacity: 0; width: 0; height: 0; }
.sw i {
  width: 42px; height: 24px; border-radius: 999px; background: #d7ddea; position: relative;
  transition: background .16s; display: inline-block;
}
.sw i::after {
  content: ''; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 3px rgba(16, 24, 40, .28); transition: transform .16s;
}
.sw input:checked + i { background: var(--brand); }
.sw input:checked + i::after { transform: translateX(18px); }
.sw input:focus-visible + i { outline: 2px solid var(--brand); outline-offset: 2px; }

/* ---------- 标签 / 结果 ---------- */
.me-tag {
  display: inline-block; margin-left: 6px; padding: 0 6px; height: 17px; line-height: 17px;
  border-radius: 5px; font-size: 10.5px; font-weight: 700; background: var(--panel-2); color: var(--muted);
}
.me-tag.brand { background: var(--brand-50); color: var(--brand-600); }
.me-res { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 600; }
.me-res i { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); }
.me-res.ok { color: #12805c; }
.me-res.ok i { background: #12b76a; box-shadow: 0 0 0 3px rgba(18, 183, 106, .14); }
.me-res.bad { color: var(--red); }
.me-res.bad i { background: var(--red); box-shadow: 0 0 0 3px rgba(217, 58, 63, .14); }
.me-res.gray { color: var(--muted); }

/* ---------- 登录记录表 ---------- */
.me-filter { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.me-filter select {
  /* 全局 select 是 width:100%，这里必须收回来，否则筛选条会把「刷新」挤到下一行 */
  width: auto; min-width: 172px; flex: 0 0 auto;
  height: 31px; padding: 0 26px 0 9px; border-radius: 8px; border: 1px solid var(--line);
  background-color: var(--panel); color: var(--ink-2); font-size: 12px;
}
.me-filter-tip { color: var(--muted); font-size: 11.5px; margin-left: auto; }
.me-tbl td { font-size: 12px; }
.me-tbl th { white-space: nowrap; }
.me-tbl .right { text-align: right; }
.me-dev { font-size: 12px; color: var(--ink); }
.me-dev-sub { color: var(--muted); font-size: 11px; margin-top: 1px; }

.me-log-list, .me-card-list { padding: 0 12px 12px; }
.me-log-card, .me-card-item {
  border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; background: var(--panel);
}
.me-log-card + .me-log-card, .me-card-item + .me-card-item { margin-top: 8px; }
.ml-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.ml-top b { font-size: 12.5px; font-variant-numeric: tabular-nums; }
.ml-row { display: flex; justify-content: space-between; gap: 10px; font-size: 11.5px; padding: 2px 0; }
.ml-row span { color: var(--muted); }
.ml-row b { font-weight: 600; text-align: right; }

/* ---------- 当前设备提示 ---------- */
.me-tip {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 12px; border-radius: 9px; background: var(--brand-50); border: 1px solid #dbe6ff;
}
.me-tip b { font-size: 12.5px; color: var(--brand-600); }
.me-tip span { font-size: 11.5px; color: var(--ink-2); flex: 1 1 220px; }

/* ---------- 三方账号 ---------- */
.oauth-list { display: grid; gap: 10px; }
.oauth-card {
  display: flex; align-items: center; gap: 12px; padding: 12px;
  border: 1px solid var(--line); border-radius: 10px; background: var(--panel);
}
.oauth-logo {
  width: 38px; height: 38px; flex: 0 0 38px; border-radius: 11px; display: grid; place-items: center;
  color: #fff; font-weight: 800; font-size: 15px;
}
.oauth-main { min-width: 0; flex: 1 1 auto; }
.oauth-main b { display: block; font-size: 13px; }
.oauth-main span { color: var(--muted); font-size: 11.5px; line-height: 1.6; }
.oauth-act { flex: 0 0 auto; }
.oauth-act .btn[disabled] { opacity: .5; cursor: not-allowed; }

/* ---------- 登录页：陌生设备提示 ---------- */
.dev-prompt { font-size: 12.5px; color: var(--ink-2); line-height: 1.8; }
.dev-prompt .dp-box {
  margin-top: 10px; padding: 10px 12px; border-radius: 9px;
  background: var(--panel-2); border: 1px solid var(--line);
}
.dev-prompt .dp-box b { display: block; font-size: 12.5px; color: var(--ink); }
.dev-prompt .dp-box span { color: var(--muted); font-size: 11.5px; }

@media (max-width: 820px) {
  /* 手机上导航横过来，省掉左侧一整列 */
  .me-wrap { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .me-nav { position: static; display: flex; gap: 6px; overflow-x: auto; padding: 5px; }
  /* 桌面是竖排整列，宽度被 width:100% 撑着；横排时必须收回来，否则每个按钮都占满整屏 */
  .me-nav-btn { width: auto; flex: 1 1 0; white-space: nowrap; text-align: center; padding: 8px 10px; font-size: 12.5px; }
  .me-nav-btn + .me-nav-btn { margin-top: 0; }
  .me-wrap { padding-bottom: 56px; }
  .me-filter select { min-width: 0; flex: 1 1 auto; }
  .me-profile-meta { margin-left: 0; width: 100%; gap: 14px; }
  .me-filter-tip { margin-left: 0; width: 100%; }
  .me-row-act { width: 100%; justify-content: flex-end; }
}

/* ============ 手机软键盘：别让键盘盖住正在填的框 ============
   背景：--vv-height 由 core.js 的键盘守卫按 visualViewport 实时写入，
   键盘弹出后它等于「键盘上方还剩多少高度」。
   登录页和弹窗遮罩都是 position:fixed;inset:0，铺的是「布局视口」——
   华为/鸿蒙的安全键盘只缩可视视口、不改布局视口，
   于是密码框正好落在键盘底下，输了几位、对错全看不见。
   所以键盘可见时把这些满屏容器的高度压到可视高度，超出的部分靠滚动补。 */
.login-root { height: var(--vv-height, 100%); }
/* 内容压不下时还能上下滚：登录页表单在键盘弹出后基本都比剩下的空间高 */
.login-panel { overflow-y: auto; -webkit-overflow-scrolling: touch; }
body.kb-open .overlay { height: var(--vv-height, 100%); }
/* 手机上的底部弹窗要整体停在键盘上方，不然「保存」按钮也被盖住 */
body.kb-open .modal,
body.kb-open .modal.sm,
body.kb-open .modal.lg,
body.kb-open .modal.xl { max-height: calc(var(--vv-height, 100vh) - 8px); }
/* 右侧抽屉同理：写死 100vh 的话底部会被键盘吃掉 */
body.kb-open .drawer { height: var(--vv-height, 100vh); }
/* 键盘弹出后登录页收一收：logo 区不再占 11vh，密码框直接露在键盘上方 */
body.kb-open .login-mini { padding-top: 16px; margin-bottom: 14px; }
body.kb-open .login-card h1 { font-size: 19px; }
body.kb-open .login-card .sub { margin-bottom: 14px; }
body.kb-open .login-caps { margin-top: 12px; }
body.kb-open .beian-login { margin-top: 10px; }

/* ============ 批量导入商机（台账页 · 仅管理员） ============ */
.imp-step { margin-bottom: 15px; }
.imp-step > b { display: block; font-size: 12.5px; font-weight: 600; color: var(--muted); margin-bottom: 7px; }
.imp-step .hint { display: block; margin-top: 6px; }
.imp-drop {
  display: flex; flex-direction: column; gap: 4px; align-items: center;
  padding: 18px 14px; border: 1px dashed var(--line); border-radius: var(--radius);
  background: var(--panel-2); cursor: pointer; text-align: center; font-size: 13px;
}
.imp-drop:hover, .imp-drop.over { border-color: var(--brand); background: var(--brand-50); }
.imp-file { margin-top: 7px; font-size: 12.5px; color: var(--muted); }
.imp-summary {
  padding: 8px 11px; border-radius: 8px; background: var(--brand-50);
  font-size: 12.5px; color: var(--ink-2);
}
.imp-summary b { color: var(--ink); }
.imp-summary b.ok { color: #0a8d81; }
.imp-summary b.warn { color: #b8791b; }
.imp-list { margin-top: 8px; max-height: 260px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; }
.imp-list table { width: 100%; border-collapse: collapse; font-size: 12px; }
.imp-list th {
  position: sticky; top: 0; background: var(--panel-2); text-align: left;
  padding: 7px 9px; color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--line);
}
.imp-list td { padding: 7px 9px; border-bottom: 1px solid var(--line-2); vertical-align: top; }
.imp-list tr:last-child td { border-bottom: 0; }
.imp-row-no { color: var(--muted); font-variant-numeric: tabular-nums; }

/* ============================================================
 * 审核中心：入漏斗 / SS6 中标
 * ============================================================ */

/* 汇总条里的三色数字：和「待审核 / 已通过 / 已驳回」一一对应，扫一眼分清 */
.summary-strip .rv-warn { color: #b06f00; }
.summary-strip .rv-warn b { color: #b06f00; }
.summary-strip .rv-ok { color: #0a8d81; }
.summary-strip .rv-ok b { color: #0a8d81; }
.summary-strip .rv-err { color: #bf2f34; }
.summary-strip .rv-err b { color: #bf2f34; }

/* 表格里「通过 / 驳回」两个操作：品牌蓝太中性，这里直接上绿 / 红，
   跟徽标状态一个色系，点之前就知道点了是什么结果 */
.rv-acts button.approve { color: #0a8d81; }
.rv-acts button.approve:hover { background: var(--teal-50); }
.rv-acts button.reject { color: #bf2f34; }
.rv-acts button.reject:hover { background: var(--red-50); }

/* 手机卡片：状态徽标和桌面表格同一套，操作按钮两列铺满，避免误点驳回 */
.review-card .cc-acts { display: flex; gap: 8px; margin-top: 10px; }
.review-card .cc-acts .btn { flex: 1; height: 34px; }
@media (max-width: 820px) {
  /* 窄屏下两个分段控件各自占一行，别把筛选条挤成一团 */
  #rv-type, #rv-status { flex: 1 1 100%; }
}

/* ============================================================
 * SS6 中标材料：合同附件 / 招标文件附件
 * ============================================================ */

.att-area { display: flex; flex-direction: column; gap: 8px; }
/* 两份槽位并排，窄屏自动堆叠 */
@media (min-width: 821px) {
  .att-area { flex-direction: row; }
  .att-area .att-slot { flex: 1 1 0; }
}
.att-slot {
  display: flex; flex-direction: column; gap: 6px;
  border: 1px solid var(--line); border-radius: 9px; padding: 9px 11px;
  background: var(--panel-2);
}
.att-name { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: 12.5px; font-weight: 600; color: var(--ink); }
.att-name .att-file { font-weight: 600; word-break: break-all; }
.att-size { color: var(--muted); font-weight: 400; font-size: 11px; }
.att-sub { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; color: var(--ink-2); font-size: 12px; }
.att-sub.muted { color: var(--muted); }
.att-acts { display: flex; gap: 6px; flex-wrap: wrap; }
.att-acts .btn { display: inline-flex; align-items: center; gap: 5px; }
.att-empty { font-size: 12px; color: var(--muted); padding: 4px 2px; }

/* 详情里的中标材料列表：每个类型一行，左名右操作 */
.att-list { display: flex; flex-direction: column; gap: 8px; }
.att-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
  border: 1px solid var(--line-2); border-radius: 9px; padding: 9px 11px; background: var(--panel-2);
}
.att-row .att-name { font-weight: 600; }
.att-row > div:first-child { min-width: 0; }
.att-row .att-dl { display: inline-flex; align-items: center; gap: 5px; }


/* ==================== 客户看板（我负责 / 待认领 / 审核中） ==================== */
.cust-board {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;
  margin-bottom: 12px;
}
.cb-card {
  display: flex; flex-direction: column; gap: 2px; text-align: left;
  border: 1px solid var(--line); border-radius: 12px; background: var(--panel);
  padding: 12px 14px; cursor: pointer; transition: border-color .15s, box-shadow .15s;
  font: inherit; color: var(--ink);
}
.cb-card:hover { border-color: #b9c9e6; box-shadow: 0 2px 8px rgba(30,60,120,.06); }
.cb-card.on { border-color: var(--brand-600, #2f6fed); background: #f3f7ff; }
.cb-card.hot { border-color: #f0c36a; }
.cb-num { font-size: 26px; font-weight: 700; line-height: 1.15; color: var(--ink); }
.cb-card.hot .cb-num { color: var(--amber, #e08a00); }
.cb-label { font-size: 13px; font-weight: 600; color: var(--ink-2); }
.cb-sub { font-size: 11px; color: var(--muted); }
@media (max-width: 820px) {
  .cb-num { font-size: 22px; }
  .cb-card { padding: 10px 12px; }
}

/* ==================== 待办日历视图（仿手机系统日历） ==================== */
/* 日历上方那排快捷入口：日历画不出「没定日期 / 已办完」的事，得留个口子过去 */
.cal-quick { margin-bottom: 10px; }
.cal-quick-tip { margin-top: 6px; font-size: 12px; color: var(--muted); }
.cal-quick-tip b { color: var(--amber); }
.cal-wrap { border: 1px solid var(--line); border-radius: 12px; background: var(--panel); padding: 12px 14px 4px; }
.cal-head { display: flex; align-items: center; gap: 8px; padding-bottom: 8px; }
.cal-title { flex: 1; display: flex; align-items: center; gap: 8px; justify-content: center; }
.cal-title b { font-size: 15px; }
.cal-nav {
  width: 34px; height: 30px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--panel-2); color: var(--ink-2); font-size: 17px; line-height: 1; cursor: pointer;
}
.cal-nav:hover { border-color: #b9c9e6; color: var(--brand-600, #2f6fed); }
.cal-week { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; }
.cal-wk { font-size: 11px; color: var(--muted); padding: 4px 0; }
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.cal-cell {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 6px 0 5px; border: 0; border-radius: 9px; background: transparent;
  cursor: pointer; font: inherit; min-height: 40px;
}
.cal-cell.blank { pointer-events: none; }
.cal-cell:hover { background: var(--panel-2); }
.cal-d { font-size: 13px; color: var(--ink-2); line-height: 1.2; }
.cal-cell.today .cal-d { color: var(--brand-600, #2f6fed); font-weight: 700; }
.cal-cell.sel { background: #f3f7ff; box-shadow: inset 0 0 0 1.5px var(--brand-600, #2f6fed); }
.cal-cell.sel .cal-d { color: var(--ink); font-weight: 700; }
.cal-dots { display: flex; gap: 3px; height: 5px; }
.cal-dots i { width: 5px; height: 5px; border-radius: 50%; background: var(--teal, #0ea99b); }
.cal-dots.ov i { background: var(--red, #d33a2f); }
.cal-day-head {
  display: flex; align-items: center; gap: 10px; padding: 12px 2px 8px;
  border-top: 1px solid var(--line-2); margin-top: 8px;
}
.cal-day-head b { font-size: 14px; }
.cal-day-head span { font-size: 12px; color: var(--muted); }
/* 「＋ 加一条」：像手机日历那样点某天直接建，靠右放，别抢日期的位置 */
.cal-day-head .cal-add {
  margin-left: auto; color: var(--brand-600, #2f6fed);
  border-color: #cddbf3; background: #f5f8ff;
}
.cal-day-head .cal-add:hover { border-color: var(--brand-600, #2f6fed); background: #eaf1ff; }
.cal-wrap .todo-list { padding: 0 0 8px; }
@media (max-width: 820px) {
  .cal-wrap { padding: 10px 8px 4px; }
  .cal-cell { min-height: 38px; padding: 5px 0 4px; }
}

/* ==================== 客情信息（客户级，挂在「客户名称」上） ==================== */
/* 列表里给一行预览：太长由 .cell-main span 的 ellipsis 收住，点「客情」看全文 */
.cell-main .cell-note {
  color: #7a6a3a; background: #fdf8ec; border-radius: 4px;
  padding: 0 4px; max-width: 320px;
}
.c-card .cc-note {
  color: #7a6a3a; white-space: normal; display: -webkit-box;
  -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* 弹窗里的客情输入：和台账表单里的语音字段保持同一套观感 */
#dn-text { min-height: 150px; }

/* ==================== 拜访札记的类型筛选 / 售后其他（v1.22.7） ==================== */
/* 一排可横滑的小胶囊：拜访、意见、补充、售后其他各自一条线，混着看也能一眼分清 */
.visit-kinds {
  display: flex; gap: 8px; padding: 2px 0 10px; margin: -2px 0 0;
  overflow-x: auto; -webkit-overflow-scrolling: touch;
}
.visit-kinds::-webkit-scrollbar { display: none; }
.vk-chip {
  border: 1px solid var(--line); background: var(--panel); color: var(--ink-2);
  border-radius: 999px; padding: 6px 13px; font-size: 12.5px; line-height: 1.2;
  white-space: nowrap; cursor: pointer; transition: .15s;
}
.vk-chip:hover { border-color: var(--brand); color: var(--brand-600); }
.vk-chip.on {
  border-color: var(--brand); color: var(--brand-600);
  background: var(--brand-50); font-weight: 600;
}
/* 售后弹窗里「类型」是钉死的，用一个虚线的只读格展示，避免看起来能点 */
.as-locked {
  border: 1px dashed var(--line); background: var(--panel-2); border-radius: 8px;
  padding: 9px 12px; font-size: 13px; color: var(--ink-2);
}

/* 客户名称 → 售后其他 面板：一条客户线，按时间从新到旧 */
.as-list { display: flex; flex-direction: column; gap: 10px; }
.as-item { border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; background: var(--panel); }
.as-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.as-head b { font-size: 13px; color: var(--ink); font-family: var(--mono); }
.as-ch { font-size: 12px; color: var(--muted); }
.as-by { margin-left: auto; font-size: 12px; color: var(--muted); }
.as-sum { margin-top: 6px; font-size: 13.5px; color: var(--ink-2); line-height: 1.6; }
.as-points { margin: 6px 0 0; padding-left: 18px; font-size: 12.5px; color: var(--muted); }
.as-points li { margin: 2px 0; }
.as-todos { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; }
.as-todo {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%;
  border: 1px solid var(--line); background: var(--panel-2); border-radius: 6px;
  padding: 3px 8px; font-size: 12px; color: var(--ink-2);
}
.as-todo i { font-style: normal; color: var(--muted); font-family: var(--mono); font-size: 11px; }
.as-todo.done { opacity: .55; text-decoration: line-through; }

/* 「售后其他」入口：和蓝色「记一笔」并排，取色统一到首页「AI 建商机」的紫罗兰
   （#f7f4ff→#efe9ff 渐变 / 紫字 #5b3fd6），两处的「AI 语音入口」看起来是同一族 */
.btn.soft-as {
  background: linear-gradient(180deg, #f7f4ff, #efe9ff);
  border-color: #d9d2ff;
  color: #5b3fd6;
  box-shadow: 0 1px 4px rgba(91, 63, 214, .10);
}
.btn.soft-as:hover {
  background: linear-gradient(180deg, #f2edff, #e6ddff);
  border-color: #c3b6ff;
  color: #5038c4;
  box-shadow: 0 2px 9px rgba(91, 63, 214, .16);
}
.btn.soft-as:active { transform: translateY(.5px); }
.btn.soft-as:focus-visible { outline: 2px solid #c3b6ff; outline-offset: 2px; }
.btn.soft-as svg { flex-shrink: 0; }

/* 客户名称表格里的「售后」小按钮，跟上面同一个色系，一眼认得出是同一个入口 */
.row-acts button[data-act="after"] { color: #5b3fd6; background: #f4f0ff; }
.row-acts button[data-act="after"]:hover { background: #e9e2ff; color: #5038c4; }

/* ============ 微信服务号：微信内一键登录 / 首次绑定页 ============ */

/* 微信绿，压在账号密码表单上方。只在「配了服务号 + 确实在微信里」时出现 */
.btn.wx-login {
  width: 100%; margin-top: 14px; height: 40px;
  background: #07c160; border-color: #07c160; color: #fff;
  font-weight: 600; box-shadow: 0 2px 8px rgba(7, 193, 96, .22);
}
.btn.wx-login:hover { background: #06ad56; border-color: #06ad56; color: #fff; }
.btn.wx-login[disabled] { opacity: .72; }

.login-or {
  display: flex; align-items: center; gap: 10px;
  margin: 14px 0 4px; color: var(--muted); font-size: 12px;
}
.login-or::before, .login-or::after { content: ''; flex: 1; height: 1px; background: var(--line); }

/* 微信里首次进入的绑定页：没有左侧品牌栏，整页居中一张卡 */
.login-solo {
  grid-column: 1 / -1;
  min-height: 100dvh; display: flex; align-items: center; justify-content: center;
  padding: 24px 16px; background: #fff;
}
.login-solo .login-card { margin: 0 auto; }
.wx-bind-alt { margin-top: 10px; }
.wx-bind-alt .btn { width: 100%; }

/* ---------- 微信里「怎么说话」的说明卡 ---------- */
.wxhelp { display: flex; flex-direction: column; gap: 14px; }
.wxhelp-lead {
  font-size: 12.5px; line-height: 1.75; color: var(--ink-2);
  background: var(--panel-2); border: 1px solid var(--line-2);
  border-radius: 10px; padding: 10px 12px;
}
.wxhelp-row { display: flex; gap: 10px; align-items: flex-start; }
.wxhelp-row > b {
  flex: 0 0 20px; width: 20px; height: 20px; margin-top: 1px; border-radius: 50%;
  background: var(--brand-50); color: var(--brand);
  font-size: 11.5px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.wxhelp-row strong { display: block; font-size: 13px; color: var(--ink); margin-bottom: 3px; }
.wxhelp-row span { display: block; font-size: 12.5px; line-height: 1.7; color: var(--muted); }
@media (max-width: 820px) {
  .wxhelp-lead { font-size: 13px; }
  .wxhelp-row strong { font-size: 14px; }
  .wxhelp-row span { font-size: 13px; }
}
