/* ============================================================
   顾问工作台 · 双端响应式样式（style.css）
   设计基调：克制、精准的商务简约（refined minimalism）
   主色：深靛蓝/墨蓝 + 琥珀警示  ·  双端：PC 侧边栏 / H5 底栏+抽屉
   ============================================================ */

/* ---------- 设计变量 ---------- */
:root{
  --bg: #eef1f6;
  --bg-deep: #0f2740;
  --bg-card: #ffffff;
  --ink: #17233b;
  --ink-2: #44536b;
  --ink-3: #667085;
  --line: #e3e8f0;
  --accent: #1f4e8c;          /* 深靛蓝 */
  --accent-2: #2f6bb8;
  --accent-muted: #e6eefa;
  --amber: #d97706;           /* 琥珀警示 */
  --amber-muted: #fef3c7;
  --danger: #dc2626;
  --danger-muted: #fee2e2;
  --module-1: #16a34a;
  --module-3: #d97706;
  --module-5: #7c3aed;
  --radius: 14px;
  --radius-sm: 9px;
  --shadow: 0 1px 2px rgba(20,35,60,.06), 0 8px 24px rgba(20,35,60,.06);
  --shadow-lg: 0 12px 40px rgba(10,25,50,.18);
  --sidebar-w: 252px;
  --topbar-h: 56px;
  --nav-h: 60px;
  --font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  --serif: Georgia, "Times New Roman", serif;
}

*{ box-sizing:border-box; margin:0; padding:0; }
html,body{ height:100%; }
body{
  font-family:var(--font);
  background:var(--bg);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
  font-size:15px;
  line-height:1.5;
}
button{ font-family:inherit; cursor:pointer; border:none; background:none; color:inherit; }
input,select,textarea{ font-family:inherit; font-size:15px; color:var(--ink); }
.hidden{ display:none !important; }
a{ color:var(--accent); text-decoration:none; }

/* ---- 通用容器 ---- */
.card{
  background:var(--bg-card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:16px;
}
.list-empty{
  text-align:center; color:var(--ink-3); font-size:13px;
  padding:38px 16px; line-height:1.9;
}
.list-empty .e{ display:flex; justify-content:center; margin-bottom:10px; color:var(--ink-3); opacity:.55; }
.list-empty .empty-sub{ font-size:12.5px; color:var(--ink-3); }
.list-empty .empty-act{ margin-top:12px; display:inline-flex; }
.loading{ text-align:center; color:var(--ink-3); font-size:13px; padding:30px; display:flex; align-items:center; justify-content:center; gap:8px; }
.spin{
  width:16px; height:16px; border-radius:50%;
  border:2px solid var(--line); border-top-color:var(--accent);
  animation:spin .8s linear infinite; display:inline-block;
}
@keyframes spin{ to{ transform:rotate(360deg); } }
.sec-title{
  font-size:13px; font-weight:600; color:var(--ink-3);
  letter-spacing:.5px; margin:18px 0 10px;
}
.serif{ font-family:var(--serif); }

/* 阶段徽标 */
.st-badge{ display:inline-flex; align-items:center; gap:4px; font-size:11px; font-weight:600; padding:2px 8px; border-radius:20px; white-space:nowrap; }
.m-tag{ display:inline-flex; align-items:center; gap:4px; font-size:11px; color:var(--ink-2); background:#f1f4f9; padding:2px 9px; border-radius:999px; white-space:nowrap; }
.m-tag.danger{ color:var(--danger); background:var(--danger-muted); }
.m-tag.accent{ color:var(--accent); background:var(--accent-muted); }

/* 进度条 */
.progress-track{ height:6px; border-radius:6px; background:#eef1f6; overflow:hidden; }
.progress-fill{ height:100%; border-radius:6px; background:linear-gradient(90deg,var(--accent),var(--accent-2)); transition:width .4s ease; }

/* 按钮 */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  padding:9px 16px; border-radius:10px; font-weight:600; font-size:14px;
  background:var(--accent); color:#fff; transition:filter .15s, background .15s;
}
.btn:hover{ filter:brightness(1.05); }
.btn:disabled{ opacity:.6; cursor:not-allowed; }
.btn.primary{ background:var(--accent); color:#fff; }
.btn.ghost{ background:#fff; color:var(--ink); border:1px solid var(--line); }
.btn.ghost:hover{ border-color:var(--accent); color:var(--accent); }
.btn.danger{ background:var(--danger); color:#fff; }
.btn.danger-ghost{ background:#fff; color:var(--danger); border:1px solid var(--danger-muted); }
.btn.ghost.danger-ghost:hover{ border-color:var(--danger); }

/* 通用列表项 */
.list-item{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); padding:13px 14px; margin-bottom:10px; box-shadow:var(--shadow); cursor:pointer; transition:border-color .15s; }
.list-item:hover{ border-color:var(--accent); }
.list-item .li-t{ font-weight:600; font-size:15px; margin-bottom:4px; }
.list-item .li-m{ display:flex; flex-wrap:wrap; gap:6px; }
.load-more{ width:100%; padding:10px; border:1px dashed var(--line); border-radius:var(--radius-sm); color:var(--accent); font-weight:600; font-size:13px; margin-top:4px; }
.load-more:hover{ border-color:var(--accent); }

/* 选择器与搜索 */
.selector{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.selector label{ font-size:12px; color:var(--ink-3); }
.selector select{ flex:1; }
.search-row{ display:flex; align-items:center; gap:8px; background:#fff; border:1px solid var(--line); border-radius:var(--radius-sm); padding:9px 12px; margin-bottom:12px; }
.search-row .s-ic{ color:var(--ink-3); display:flex; }
.search-row input{ flex:1; border:none; outline:none; background:transparent; font-size:14px; }
select, input[type="text"], input[type="tel"], input[type="password"], input[type="date"], input[type="number"], textarea{
  border:1px solid var(--line); border-radius:var(--radius-sm); padding:9px 11px; outline:none; background:#fff; width:100%; box-sizing:border-box;
}
/* type-less 表单输入（无 type 属性不命中上面全局规则）：仅作用于 .field 内，避免给搜索框等 flex 项加边框 */
.field input:not([type]){ border:1px solid var(--line); border-radius:var(--radius-sm); padding:9px 11px; outline:none; background:#fff; width:100%; box-sizing:border-box; }
input:focus, select:focus, textarea:focus{ border-color:var(--accent); }
textarea{ min-height:64px; resize:vertical; }

/* 信息行 */
.info-row{ display:flex; justify-content:space-between; gap:12px; padding:9px 0; border-bottom:1px solid #f1f4f9; }
.info-row:last-child{ border-bottom:none; }
.info-row .k{ color:var(--ink-3); font-size:13px; flex:none; }
.info-row .v{ font-weight:600; font-size:13px; text-align:right; word-break:break-all; }

/* 状态点 */
.status-dot{ display:inline-block; width:8px; height:8px; border-radius:50%; }
.status-dot.online{ background:var(--module-1); }
.status-dot.offline{ background:var(--ink-3); }
.status-dot.frozen{ background:var(--danger); }
.badge{ display:inline-flex; align-items:center; gap:4px; font-size:10px; font-weight:700; padding:1px 6px; border-radius:10px; }
.badge .dot{ width:5px; height:5px; border-radius:50%; }
.badge.freeze{ background:var(--danger-muted); color:var(--danger); }
.badge.expire{ background:var(--amber-muted); color:var(--amber); }

/* ============================================================
   登录页
   ============================================================ */
.login-page{
  position:fixed; inset:0; z-index:100;
  background:linear-gradient(160deg,#0a1c33 0%,#0f2740 45%,#163a5f 100%);
  display:flex; align-items:center; justify-content:center;
  overflow:hidden;
}
.login-stars{ position:absolute; inset:0; pointer-events:none; }
.login-stars span{
  position:absolute; width:2px; height:2px; border-radius:50%;
  background:rgba(255,255,255,.7); animation:twinkle 3.5s ease-in-out infinite;
}
@keyframes twinkle{ 0%,100%{opacity:.15} 50%{opacity:.9} }
.login-content{ position:relative; z-index:2; width:100%; max-width:400px; padding:24px; text-align:center; }
.login-logo{
  width:62px; height:62px; margin:0 auto 16px; border-radius:18px;
  background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.16);
  display:flex; align-items:center; justify-content:center; color:#fff;
  box-shadow:0 8px 30px rgba(0,0,0,.25);
}
.login-title{ color:#fff; font-size:24px; font-weight:700; letter-spacing:1px; }
.login-desc{ color:rgba(255,255,255,.55); font-size:13px; font-family:var(--serif); letter-spacing:2px; margin-top:4px; }
.login-card{
  margin-top:26px; background:rgba(255,255,255,.98); border-radius:20px;
  padding:22px 20px; text-align:left; box-shadow:var(--shadow-lg);
}
.login-modes{ display:flex; gap:6px; background:#eef1f6; border-radius:10px; padding:4px; margin-bottom:18px; }
.login-mode-btn{ flex:1; height:34px; border-radius:8px; font-size:13px; font-weight:600; color:var(--ink-3); transition:all .2s; }
.login-mode-btn.active{ background:#fff; color:var(--accent); box-shadow:var(--shadow); }
.login-view label{ display:block; font-size:12px; color:var(--ink-2); font-weight:600; margin-bottom:6px; }
.login-view input{ background:#f7f9fc; }
.pwd-wrap{ position:relative; }
.pwd-wrap input{ padding-right:40px; }
.pwd-toggle{ position:absolute; right:10px; top:50%; transform:translateY(-50%); color:var(--ink-3); display:flex; cursor:pointer; }
.pwd-toggle svg{ width:18px; height:18px; fill:currentColor; }
.login-btn{
  width:100%; margin-top:18px; height:44px; border-radius:12px;
  background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#fff;
  font-size:15px; font-weight:700; letter-spacing:4px; transition:filter .15s;
}
.login-btn:hover{ filter:brightness(1.06); }
.login-btn:disabled{ opacity:.6; }
.login-error{ color:var(--danger); font-size:12px; margin-top:10px; min-height:16px; }
.login-link{ color:var(--accent); font-size:12px; margin-top:8px; display:block; width:100%; text-align:center; }
.code-row{ display:flex; gap:8px; }
.code-row input{ flex:1; }
.code-btn{ flex:none; height:40px; padding:0 12px; border-radius:var(--radius-sm); background:var(--accent-muted); color:var(--accent); font-size:12px; font-weight:600; }
.code-btn:disabled{ opacity:.5; }
.bind-tip{ background:var(--accent-muted); color:var(--accent); font-size:12px; text-align:center; padding:8px 10px; border-radius:8px; margin-bottom:16px; line-height:1.5; }
.login-foot{ color:rgba(255,255,255,.45); font-size:12px; margin-top:18px; }

/* ============================================================
   工作台外壳（双端）
   ============================================================ */
#appShell{ position:fixed; inset:0; background:var(--bg); }
.app-layout{ height:100%; display:flex; }

/* ---- PC 侧边栏 ---- */
.sidebar{
  width:var(--sidebar-w); flex:none; background:var(--bg-deep); color:#eaf0f8;
  display:none; flex-direction:column; padding:20px 14px;
}
.sb-brand{ display:flex; align-items:center; gap:10px; padding:2px 6px 16px; }
.sb-logo{
  width:40px; height:40px; border-radius:13px; flex:none;
  background:linear-gradient(135deg,#4f8fd0,var(--accent) 55%,#2a5a9e);
  box-shadow:0 5px 14px rgba(31,78,140,.35), inset 0 0 0 1px rgba(255,255,255,.18);
  display:flex; align-items:center; justify-content:center; font-weight:800; color:#fff; font-size:17px;
  letter-spacing:.5px;
}
.sb-brand h1{ font-size:15px; font-weight:700; }
.sb-brand p{ font-size:10px; color:rgba(255,255,255,.6); font-family:var(--serif); letter-spacing:1px; }
.sb-user{ display:flex; align-items:center; gap:10px; padding:14px 6px; border-top:1px solid rgba(255,255,255,.08); }
.sb-avatar{ width:40px; height:40px; border-radius:50%; flex:none; background:linear-gradient(135deg,#2f6bb8,#1f4e8c); display:flex; align-items:center; justify-content:center; font-weight:700; color:#fff; }
.sb-user h2{ font-size:14px; font-weight:600; }
.sb-user p{ font-size:11px; color:rgba(255,255,255,.5); }
.sb-title{ font-size:11px; color:rgba(255,255,255,.4); letter-spacing:1px; padding:16px 6px 8px; }
.sb-list{ flex:1; overflow-y:auto; }
.sitem{
  display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:9px;
  color:rgba(255,255,255,.72); font-size:13.5px; cursor:pointer; transition:background .15s,color .15s;
}
.sitem:hover{ background:rgba(255,255,255,.06); color:#fff; }
.sitem.active{ background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#fff; font-weight:600; }
.sb-foot{ display:flex; align-items:center; gap:8px; padding-top:12px; border-top:1px solid rgba(255,255,255,.08); }
.sb-bell{ position:relative; width:40px; height:40px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:rgba(255,255,255,.7); background:rgba(255,255,255,.06); }
.sb-bell:hover{ color:#fff; }
.sb-bell-badge{
  position:absolute; top:-4px; right:-4px; min-width:16px; height:16px; padding:0 4px;
  background:var(--amber); color:#fff; font-size:10px; font-weight:700; border-radius:8px;
  display:none; align-items:center; justify-content:center;
}
.sb-bell-badge.show{ display:flex; }
.sb-unread{ flex:1; }
.sb-logout{ flex:1; height:40px; border-radius:10px; background:rgba(255,255,255,.06); color:rgba(255,255,255,.7); font-size:13px; font-weight:600; }
.sb-logout:hover{ background:var(--danger); color:#fff; }

/* ---- 统一「个人中心」入口（PC 侧边栏底部） ---- */
.sb-hub{
  display:flex; align-items:center; gap:10px; padding:12px 10px; margin-top:6px;
  border-radius:14px; cursor:pointer; position:relative;
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.09);
  transition:background .18s, border-color .18s, transform .18s;
}
.sb-hub:hover{ background:rgba(255,255,255,.1); border-color:rgba(255,255,255,.2); transform:translateY(-1px); }
.sb-hub .sb-avatar{
  box-shadow:0 0 0 2px rgba(47,107,184,.35), 0 4px 12px rgba(0,0,0,.25);
}
.sb-hub-meta{ flex:1; min-width:0; }
.sb-hub-meta h2{ font-size:14px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sb-hub-meta p{ font-size:11px; color:rgba(255,255,255,.5); }
.sb-hub-badge{
  position:absolute; top:-4px; right:24px; min-width:17px; height:17px; padding:0 4px;
  background:var(--amber); color:#fff; font-size:10px; font-weight:700; border-radius:9px;
  display:none; align-items:center; justify-content:center;
  box-shadow:0 0 0 2px var(--bg-deep);
}
.sb-hub-badge.show{ display:flex; }
.sb-hub-che{ font-size:18px; color:rgba(255,255,255,.45); line-height:1; }

/* ---- 主内容区 ---- */
.main{ flex:1; min-width:0; display:flex; flex-direction:column; height:100%; }
.topbar{
  height:var(--topbar-h); flex:none; display:flex; align-items:center; gap:8px;
  padding:0 14px; background:var(--bg-card); border-bottom:1px solid var(--line);
  position:relative; z-index:5;
}
.menu-btn, .back-btn{ width:38px; height:38px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:var(--ink); }
.menu-btn:hover, .back-btn:hover{ background:var(--bg); }
.title{ flex:1; font-size:17px; font-weight:700; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.title small{ font-size:11px; font-weight:400; color:var(--ink-3); margin-left:8px; font-family:var(--serif); letter-spacing:1px; }
.bell-btn{ position:relative; width:38px; height:38px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:var(--ink-2); }
.bell-btn:hover{ background:var(--bg); }
.bell-badge{
  position:absolute; top:2px; right:2px; min-width:17px; height:17px; padding:0 4px;
  background:var(--amber); color:#fff; font-size:10px; font-weight:700; border-radius:9px;
  display:none; align-items:center; justify-content:center;
}
.bell-badge.show{ display:flex; }
.date-chip{ font-size:12px; color:var(--ink-3); display:flex; align-items:center; gap:4px; white-space:nowrap; }

/* ---- 支柱内顶部选项卡（业务/日常 二级入口）：分段胶囊控件 ---- */
.group-tabs{
  flex:none; align-self:flex-start; display:inline-flex; align-items:center; gap:4px;
  margin:10px 14px 0; padding:4px;
  background:var(--bg); border:1px solid var(--line); border-radius:12px;
  overflow-x:auto; scrollbar-width:none;
}
.group-tabs::-webkit-scrollbar{ display:none; }
.group-tabs .gt{
  flex:none; display:flex; align-items:center; gap:6px;
  padding:7px 16px; border-radius:8px;
  font-size:13px; font-weight:600; color:var(--ink-2);
  cursor:pointer; user-select:none; white-space:nowrap;
  transition:color .2s, background .2s, box-shadow .2s;
}
.group-tabs .gt svg{ flex:none; }
.group-tabs .gt:hover{ color:var(--accent); background:rgba(31,78,140,.06); }
.group-tabs .gt.on{
  color:var(--accent); font-weight:700; background:var(--bg-card);
  box-shadow:0 1px 4px rgba(20,35,60,.10);
}
/* 主次标签：主标签大字加粗、次级标签小字弱化（工作台栏目用） */
.group-tabs .gt.primary{ font-size:14px; font-weight:800; color:var(--ink); background:rgba(31,78,140,.07); }
.group-tabs .gt.primary.on{ color:#fff; background:linear-gradient(135deg,var(--accent-2),var(--accent)); box-shadow:0 2px 8px rgba(31,78,140,.35); }
.group-tabs .gt.parent-on{ color:var(--accent); background:rgba(31,78,140,.10); box-shadow:inset 0 -2px 0 var(--accent); }
.group-tabs .gt.sub{ font-size:12px; font-weight:500; color:var(--ink-3); padding:6px 12px; }
.group-tabs .gt.sub.on{ color:var(--accent); font-weight:700; background:var(--bg-card); box-shadow:0 1px 4px rgba(20,35,60,.10); }

#screen{ flex:1; overflow-y:auto; padding:14px 14px 90px; }

/* ---- 底部 Tab（H5） ---- */
.nav{
  position:fixed; left:0; right:0; bottom:0; z-index:20;
  height:var(--nav-h); display:flex; background:var(--bg-card);
  border-top:1px solid var(--line); box-shadow:0 -2px 12px rgba(20,35,60,.05);
}
.nav .n{ flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px; color:var(--ink-3); font-size:11px; }
.nav .n.active{ color:var(--accent); font-weight:600; }
.n-avatar{
  width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:700; color:#fff;
  background:linear-gradient(135deg,var(--accent-2),var(--accent));
  box-shadow:0 2px 6px rgba(31,78,140,.35);
}
/* 「通话」底部圆形电话钮（移动端专属，突出醒目；点击进通话助手，无长按） */
.nav .n.n-call-tab{ position:relative; justify-content:flex-end; padding-bottom:3px; }
.nav .n.n-call-tab .n-call{
  position:absolute; top:-22px; left:50%; transform:translateX(-50%);
  width:58px; height:58px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; color:#fff;
  background:linear-gradient(145deg,var(--accent-2),var(--accent));
  box-shadow:0 6px 16px rgba(31,78,140,.45), inset 0 2px 4px rgba(255,255,255,.35);
  border:3px solid var(--bg-card); z-index:2;
  transition:transform .15s ease, box-shadow .15s ease;
}
.nav .n.n-call-tab .n-call svg{ filter:drop-shadow(0 1px 1px rgba(0,0,0,.25)); }
.nav .n.n-call-tab.active .n-call{
  background:linear-gradient(145deg,var(--accent),var(--accent-2));
  box-shadow:0 6px 18px rgba(31,78,140,.6), 0 0 0 4px rgba(31,78,140,.18);
  transform:translateX(-50%) scale(1.05);
}
.nav .n.n-call-tab:active .n-call{ transform:translateX(-50%) scale(.94); }


/* ---- 抽屉 ---- */
.scrim{ position:fixed; inset:0; z-index:30; background:rgba(10,20,35,.45); opacity:0; pointer-events:none; transition:opacity .25s; }
.scrim.show{ opacity:1; pointer-events:auto; }
.drawer{
  position:fixed; top:0; bottom:0; left:0; z-index:31; width:290px; max-width:84vw;
  background:var(--bg-card); transform:translateX(-100%); transition:transform .28s ease;
  display:flex; flex-direction:column; box-shadow:var(--shadow-lg);
}
.drawer.show{ transform:translateX(0); }
.dh{ display:flex; align-items:center; gap:12px; padding:18px 16px; background:var(--bg-deep); color:#fff; }
.dclose{ width:34px; height:34px; border-radius:9px; color:rgba(255,255,255,.8); display:flex; align-items:center; justify-content:center; }
.brand{ width:42px; height:42px; border-radius:12px; background:linear-gradient(135deg,var(--accent),var(--accent-2)); display:flex; align-items:center; justify-content:center; font-weight:800; }
.dh h2{ font-size:16px; }
.dh p{ font-size:11px; color:rgba(255,255,255,.5); font-family:var(--serif); letter-spacing:1px; }
.dsep{ height:8px; background:var(--bg); }
#drawerList{ flex:1; overflow-y:auto; padding:8px 10px; }
.ditem{ display:flex; align-items:center; gap:12px; padding:12px 12px; border-radius:10px; font-size:14px; color:var(--ink); cursor:pointer; }
.ditem:hover{ background:var(--bg); }
.ditem.active{ background:var(--accent-muted); color:var(--accent); font-weight:600; }
.ditem.danger{ color:var(--danger); }
.dfoot{ padding:12px 16px; font-size:11px; color:var(--ink-3); }

/* ---- 统一「个人中心」弹层（左下角头像向上抽拉） ---- */
.hub-scrim{
  position:fixed; inset:0; z-index:40; background:rgba(10,20,35,.5);
  backdrop-filter:blur(2px); opacity:0; pointer-events:none; transition:opacity .25s;
}
.hub-scrim.show{ opacity:1; pointer-events:auto; }
/* 移动端默认：底部抽屉 */
.hub-panel{
  position:fixed; left:0; right:0; bottom:0; z-index:41;
  max-height:88vh; display:flex; flex-direction:column;
  background:var(--bg-card); border-radius:20px 20px 0 0;
  box-shadow:var(--shadow-lg);
  transform:translateY(100%); transition:transform .32s cubic-bezier(.22,1,.36,1);
}
.hub-panel.show{ transform:translateY(0); }
.hub-head{ display:flex; align-items:center; gap:10px; padding:12px 14px 8px; flex:none; }
.hub-back, .hub-close{
  width:32px; height:32px; border-radius:50%; flex:none;
  display:flex; align-items:center; justify-content:center;
  color:var(--ink-2); background:var(--bg); transition:background .15s;
}
.hub-back:hover, .hub-close:hover{ background:#e3e8f0; }
.hub-title{ flex:1; min-width:0; font-size:15px; font-weight:700; color:var(--ink); text-align:center; }
.hub-view{ flex:1; min-height:0; overflow-y:auto; padding:4px 14px 18px; -webkit-overflow-scrolling:touch; }

/* 提醒中心组 */
.hub-toolbar{ display:flex; flex-direction:column; gap:10px; margin-bottom:8px; }
.hub-toolbar-r{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.hub-chips{ flex-wrap:wrap; }
.hub-scan{ padding:6px 12px; font-size:12.5px; white-space:nowrap; }

/* 我的（主菜单）组 */
.hub-profile{
  display:flex; align-items:center; gap:14px; padding:16px; margin-bottom:12px;
  background:linear-gradient(135deg,var(--bg-deep),#16385c); border-radius:var(--radius); color:#eaf0f8;
}
.hub-pavatar{
  width:54px; height:54px; border-radius:50%; flex:none; display:flex; align-items:center; justify-content:center;
  font-size:20px; font-weight:800; background:linear-gradient(135deg,#2f6bb8,#1f4e8c); color:#fff;
  box-shadow:0 0 0 3px rgba(255,255,255,.18);
}
.hub-pname{ font-size:17px; font-weight:700; }
.hub-psub{ font-size:12px; color:rgba(255,255,255,.6); margin-top:2px; }
.hub-grp{
  background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; margin-bottom:12px;
}
.hub-grp-title{ padding:8px 14px 4px; font-size:11.5px; color:var(--ink-3); }
.hub-row{
  display:flex; align-items:center; gap:12px; padding:13px 14px; color:var(--ink); cursor:pointer;
  border-bottom:1px solid var(--line); transition:background .15s;
}
.hub-row:last-child{ border-bottom:none; }
.hub-row:hover{ background:var(--bg); }
.hub-row svg:first-child{ color:var(--accent); flex:none; }
.hub-row span{ flex:1; font-size:14.5px; }
.hub-row svg:last-child{ color:var(--ink-3); flex:none; }
.hub-row.danger svg:first-child{ color:var(--danger); }
.hub-row.danger span{ color:var(--danger); }
.hub-row-badge{
  min-width:18px; height:18px; padding:0 5px; border-radius:9px; flex:none;
  display:none; align-items:center; justify-content:center;
  background:var(--danger); color:#fff; font-size:11px; font-weight:700;
}
.hub-row-badge.show{ display:flex; }
.hub-tip{ padding:2px 4px 0; font-size:11px; line-height:1.6; color:var(--ink-3); }

/* ---- FAB ---- */
.fab{
  position:fixed; right:18px; bottom:calc(var(--nav-h) + 18px); z-index:25;
  width:54px; height:54px; border-radius:50%; color:#fff;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 8px 24px rgba(31,78,140,.4); transition:transform .15s;
}
.fab:active{ transform:scale(.94); }
.fab-menu{
  position:fixed; right:18px; bottom:calc(var(--nav-h) + 84px); z-index:26;
  background:var(--bg-card); border:1px solid var(--line); border-radius:14px;
  box-shadow:var(--shadow-lg); padding:6px; min-width:150px;
}
.fm-item{ display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:9px; font-size:13px; cursor:pointer; }
.fm-item:hover{ background:var(--bg); }
.fm-ic{ width:28px; height:28px; border-radius:8px; display:flex; align-items:center; justify-content:center; }
.fab-scrim{ position:fixed; inset:0; z-index:24; background:rgba(10,20,35,.2); opacity:0; pointer-events:none; transition:opacity .2s; }
.fab-scrim.show{ opacity:1; pointer-events:auto; }

/* ---- Toast ---- */
.toast{
  position:fixed; left:50%; bottom:calc(var(--nav-h) + 20px); transform:translateX(-50%) translateY(20px);
  z-index:60; background:rgba(15,40,64,.94); color:#fff; font-size:13px; padding:10px 18px;
  border-radius:10px; opacity:0; pointer-events:none; transition:opacity .3s, transform .3s; max-width:86vw; text-align:center;
}
.toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }
.toast.err{ background:rgba(220,38,38,.94); }

/* ============================================================
   页面组件
   ============================================================ */
/* 页头 */
.page-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:14px; }
.ph-title{ font-size:20px; font-weight:800; }
.ph-sub{ font-size:12px; color:var(--ink-3); margin-top:3px; }
.ph-acts{ display:flex; gap:8px; flex:none; }

/* 过滤条 */
.filter-bar{ display:flex; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.chips{ display:flex; gap:6px; flex-wrap:wrap; }
.chip{ padding:6px 13px; border-radius:20px; font-size:12px; font-weight:600; background:#fff; border:1px solid var(--line); color:var(--ink-2); cursor:pointer; transition:border-color .16s, color .16s, background .16s; }
.chip:hover:not(.on){ border-color:var(--accent); color:var(--accent); background:var(--accent-muted); }
.chip.on{ background:var(--accent); border-color:var(--accent); color:#fff; }
.search-box{ flex:1; min-width:160px; display:flex; align-items:center; gap:6px; background:#fff; border:1px solid var(--line); border-radius:20px; padding:7px 12px; color:var(--ink-3); }
.search-box input{ flex:1; border:none; outline:none; font-size:13px; background:transparent; }

.page-head{ align-items:center; }

#dashAdd{ display:none; }
@media (min-width:1024px){ #dashAdd{ display:inline-flex; } }
/* 统一两列卡片网格（PC 两列，H5 单列） */
.list-grid{ display:grid; grid-template-columns:1fr; gap:12px; }
.list-grid .app-card, .list-grid .tpl-card, .list-grid .bot-card, .list-grid .rem-item{ margin-bottom:0; }
.list-grid .list-item{ margin-bottom:0; }

/* 页面切换淡入 */
#screen > *{ animation:pageIn .32s ease both; }
@keyframes pageIn{ from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:translateY(0); } }

/* 卡片悬停微动效 */
.app-card, .tpl-card, .bot-card, .rem-item, .list-item, .qitem{ transition:border-color .18s, transform .18s, box-shadow .18s; }
.app-card:hover, .tpl-card:hover, .bot-card:hover, .rem-item:hover, .list-item:hover{ transform:translateY(-1px); box-shadow:0 4px 14px rgba(20,35,60,.08); }

/* 概览卡 */
.ov-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:14px; }
.ov-card{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:12px; box-shadow:var(--shadow); }
.ov-ic{ width:34px; height:34px; border-radius:9px; display:flex; align-items:center; justify-content:center; background:var(--tint); color:var(--color); margin-bottom:8px; }
.ov-v{ font-size:22px; font-weight:800; font-family:var(--serif); }
.ov-l{ font-size:11px; color:var(--ink-3); margin-top:2px; }

/* 申请卡片 */
.app-card{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:14px; margin-bottom:10px; box-shadow:var(--shadow); cursor:pointer; transition:border-color .15s; }
.app-card:hover{ border-color:var(--accent); }
.ac-top{ display:flex; justify-content:space-between; align-items:center; gap:8px; }
.ac-name{ font-size:15px; font-weight:700; }
.ac-cur{ font-size:12px; color:var(--accent); font-weight:600; }
.ac-meta{ display:flex; gap:6px; flex-wrap:wrap; margin:8px 0 10px; }
.ac-prog{ display:flex; align-items:center; gap:8px; }
.ac-pv{ font-size:12px; font-weight:700; color:var(--accent); font-family:var(--serif); }
.ac-foot{ display:flex; justify-content:space-between; align-items:center; margin-top:10px; font-size:11px; color:var(--ink-3); }

/* 申请详情 */
.app-detail{}
.ad-head{}
.ad-name{ font-size:19px; font-weight:800; }
.ad-meta{ display:flex; gap:6px; flex-wrap:wrap; margin:8px 0; }
.ad-schools{ font-size:12px; color:var(--ink-2); display:flex; align-items:center; gap:5px; margin-bottom:8px; }
.ad-prog{ display:flex; align-items:center; gap:8px; }
.ad-pv{ font-size:14px; font-weight:800; color:var(--accent); font-family:var(--serif); }
.ad-pc{ font-size:11px; color:var(--ink-3); }
.ad-actions{ display:flex; gap:8px; margin-top:12px; }
.ad-notes{ margin-top:12px; font-size:12.5px; color:var(--ink-2); background:var(--bg); border-radius:9px; padding:10px; }

/* 阶段列表（时间轴） */
.stage-list{ position:relative; }
.stage-item{ display:flex; gap:12px; padding:12px 0; border-bottom:1px solid var(--line); }
.stage-item:last-child{ border-bottom:none; }
.si-left{ width:14px; flex:none; display:flex; flex-direction:column; align-items:center; }
.si-dot{ width:10px; height:10px; border-radius:50%; background:var(--ink-3); margin-top:5px; }
.stage-item.current .si-dot{ background:var(--accent); box-shadow:0 0 0 4px var(--accent-muted); }
.stage-item.overdue .si-dot{ background:var(--danger); box-shadow:0 0 0 4px var(--danger-muted); }
.si-body{ flex:1; min-width:0; }
.si-top{ display:flex; justify-content:space-between; align-items:center; gap:8px; }
.si-name{ font-weight:600; font-size:14px; }
.si-meta{ display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.si-notes{ margin-top:6px; font-size:12px; color:var(--ink-2); }
.si-btn{ flex:none; align-self:center; padding:6px 12px; border-radius:8px; background:var(--accent-muted); color:var(--accent); font-size:12px; font-weight:600; }

/* 提醒 */
.rem-item{ display:flex; gap:12px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:13px; margin-bottom:10px; box-shadow:var(--shadow); cursor:pointer; align-items:flex-start; }
.rem-item.read{ opacity:.6; }
.rem-item:hover{ border-color:var(--accent); }
.rem-ic{ width:34px; height:34px; border-radius:9px; flex:none; display:flex; align-items:center; justify-content:center; background:var(--accent-muted); color:var(--accent); }
.rem-body{ flex:1; min-width:0; }
.rem-top{ display:flex; justify-content:space-between; align-items:center; gap:8px; }
.rem-name{ font-weight:700; font-size:14px; }
.rem-content{ font-size:13px; color:var(--ink-2); margin-top:4px; }
.rem-meta{ font-size:11px; color:var(--ink-3); margin-top:5px; }
.rem-dot{ flex:none; width:8px; height:8px; border-radius:50%; background:var(--amber); margin-top:6px; }
.pcheck{ display:flex; align-items:center; gap:5px; font-size:12px; color:var(--ink-2); }
.pcheck input{ width:15px; height:15px; }

/* ============ 模板 ============ */
.tpl-card{
  background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius);
  padding:0; overflow:hidden; box-shadow:var(--shadow);
  transition:transform .18s, box-shadow .18s, border-color .18s;
}
.tpl-card:hover{ transform:translateY(-2px); box-shadow:var(--shadow); border-color:#cdd8ea; }

/* 模板分组标题（横跨网格整行） */
.tpl-group-title{
  grid-column:1 / -1;
  display:flex; align-items:center; gap:8px;
  font-size:13px; font-weight:700; color:var(--ink-2);
  margin:6px 0 2px;
}
.tpl-group-title::before{ content:""; width:4px; height:14px; border-radius:2px; background:var(--accent); }

/* 卡片头部 */
.tpl-top{ display:flex; align-items:center; gap:12px; padding:14px 14px 10px; }
.tpl-ico{
  width:44px; height:44px; border-radius:12px; flex:none;
  display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:#fff; box-shadow:0 6px 14px rgba(31,78,140,.28);
}
.tpl-info{ flex:1; min-width:0; }
.tpl-name-row{ display:flex; align-items:center; gap:8px; min-width:0; }
.tpl-name{ font-weight:800; font-size:15.5px; letter-spacing:.2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tpl-meta{ display:flex; align-items:center; gap:8px; font-size:12px; color:var(--ink-3); margin-top:5px; }
.tpl-meta > span{ display:inline-flex; align-items:center; gap:4px; }
.tpl-meta-sep{ width:3px; height:3px; border-radius:50%; background:var(--line); flex:none; }

/* 流程时间轴 */
.tpl-timeline{ position:relative; margin:4px 14px 4px 22px; padding:2px 0 6px; }
.tpl-timeline::before{
  content:""; position:absolute; left:10px; top:20px; bottom:20px; width:2px;
  background:linear-gradient(180deg,var(--accent-muted),var(--line));
}
.tpl-step{ position:relative; display:flex; align-items:center; gap:10px; padding:7px 0 2px; }
.tpl-seq{
  position:relative; z-index:1; width:22px; height:22px; border-radius:50%; flex:none;
  display:flex; align-items:center; justify-content:center;
  background:var(--bg-card); border:2px solid var(--accent); color:var(--accent);
  font-size:11px; font-weight:800;
}
.tpl-step-body{ flex:1; min-width:0; }
.tpl-step-name{ font-size:13px; color:var(--ink-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tpl-step-due{
  flex:none; font-size:11px; font-weight:600; color:var(--ink-3);
  background:#f1f4f9; padding:2px 9px; border-radius:20px;
}

/* 卡片操作 */
.tpl-actions{ display:flex; gap:10px; padding:10px 14px 14px; border-top:1px dashed var(--line); }
.tpl-actions .btn{ flex:1; padding:8px 10px; font-size:13px; border-radius:9px; }

/* 编辑弹框 */
.modal-head{ display:flex; align-items:center; gap:10px; margin-bottom:4px; }
.modal-head h2{ font-size:17px; font-weight:800; }
.modal-head .sub{ margin:0; }

.te-row{
  border:1px solid var(--line); border-radius:12px; padding:10px 12px; margin-bottom:10px;
  background:#fbfcfe; transition:border-color .15s, box-shadow .15s;
}
.te-row:hover{ border-color:#cdd8ea; box-shadow:0 2px 8px rgba(20,35,60,.05); }
.te-row-head{ display:flex; align-items:center; gap:10px; }
.te-row-head .tpl-seq{ width:24px; height:24px; flex:none; border-radius:8px; background:var(--accent-muted); border:none; color:var(--accent); }
.te-name{
  flex:1; min-width:0; padding:8px 10px; font-size:13.5px;
  border:1px solid var(--line); border-radius:8px; background:#fff;
}
.te-name:focus, .te-sub input:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(31,78,140,.12); }
.te-row-acts{ display:flex; gap:4px; flex:none; }
.te-move{
  width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center;
  color:var(--ink-2); background:#eef1f6; transition:background .15s, color .15s;
}
.te-move:hover{ background:var(--accent-muted); color:var(--accent); }
.te-del{
  flex:none; width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center;
  color:var(--danger); background:var(--danger-muted); transition:filter .15s;
}
.te-del:hover{ filter:brightness(.96); }
.te-sub{ display:flex; gap:10px; margin-top:10px; }
.te-sub label{ flex:1; display:flex; align-items:center; gap:8px; font-size:12px; color:var(--ink-2); }
.te-sub label em{ font-style:normal; font-size:12px; color:var(--ink-3); }
.te-sub input{
  flex:1; min-width:0; padding:7px 10px; font-size:13px;
  border:1px solid var(--line); border-radius:8px; background:#fff; -moz-appearance:textfield;
}
.te-sub input::-webkit-outer-spin-button, .te-sub input::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
.te-add{ width:100%; justify-content:center; border-style:dashed !important; color:var(--accent); background:var(--accent-muted); }
.te-add:hover{ border-color:var(--accent); }

/* Bot 卡片 */
.bot-card{ display:flex; align-items:center; gap:12px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:13px; margin-bottom:10px; box-shadow:var(--shadow); cursor:pointer; }
.bot-card:hover{ border-color:var(--accent); }
.bot-ic{ width:40px; height:40px; border-radius:11px; flex:none; display:flex; align-items:center; justify-content:center; background:var(--accent-muted); color:var(--accent); }
.bot-body{ flex:1; min-width:0; }
.bot-name{ display:flex; align-items:center; gap:6px; font-weight:700; font-size:14px; }
.bot-sub{ display:flex; align-items:center; gap:8px; font-size:12px; color:var(--ink-3); margin-top:3px; }
.bot-arrow{ color:var(--ink-3); }

/* 会话消息 */
.msg-flow{ display:flex; flex-direction:column; gap:8px; }
.msg{ max-width:82%; padding:10px 13px; border-radius:12px; font-size:13.5px; white-space:pre-wrap; word-break:break-word; }
.msg.bot{ background:var(--bg); align-self:flex-start; border-top-left-radius:4px; }
.msg.user{ background:var(--accent-muted); color:var(--ink); align-self:flex-end; border-top-right-radius:4px; }
.msg-time{ font-size:10px; color:var(--ink-3); align-self:center; }

/* 工作台首页 */
.greet h1{ font-size:22px; font-weight:800; }
.greet p{ font-size:13px; color:var(--ink-3); margin-top:3px; }
.quote{ background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#fff; border-radius:var(--radius); padding:14px 16px; margin-top:14px; box-shadow:var(--shadow); }
.quote .tag{ font-size:11px; opacity:.85; display:flex; align-items:center; gap:5px; }
.quote .txt{ font-size:14px; margin-top:6px; line-height:1.6; }
.ca-hero{
  display:flex; align-items:center; gap:14px;
  background:linear-gradient(135deg,var(--accent-2),var(--accent) 60%,#2a5a9e);
  color:#fff; border-radius:var(--radius); padding:16px 18px;
  box-shadow:var(--shadow); cursor:pointer; margin-top:14px; position:relative; overflow:hidden;
  transition:transform .15s, box-shadow .15s;
}
.ca-hero:hover{ transform:translateY(-1px); box-shadow:var(--shadow-lg); }
.ca-hero-ic{ width:58px; height:58px; border-radius:14px; flex:none; display:flex; align-items:center; justify-content:center; background:rgba(255,255,255,.16); }
.ca-hero-t{ flex:1; min-width:0; }
.ca-hero-t h3{ font-size:17px; font-weight:800; }
.ca-hero-t p{ font-size:12px; opacity:.85; margin-top:3px; line-height:1.5; }
.ca-hero-btn{ flex:none; display:inline-flex; align-items:center; gap:6px; background:#fff; color:var(--accent); font-weight:700; font-size:13px; padding:9px 16px; border-radius:999px; white-space:nowrap; }
.appline{ display:grid; grid-template-columns:repeat(4,1fr); gap:8px; cursor:pointer; }
.aline-stat{ text-align:center; padding:10px 4px; border-radius:10px; background:var(--accent-muted); }
.aline-stat b{ display:block; font-size:20px; font-weight:800; color:var(--accent); font-family:var(--serif); }
.aline-stat i{ font-style:normal; font-size:11px; color:var(--ink-2); }
.aline-stat.warn{ background:var(--amber-muted); } .aline-stat.warn b{ color:var(--amber); }
.aline-stat.danger{ background:var(--danger-muted); } .aline-stat.danger b{ color:var(--danger); }
.dbot{ display:flex; align-items:center; gap:10px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); padding:12px; margin-bottom:9px; cursor:pointer; }
.dbot-avatar{ width:36px; height:36px; border-radius:10px; display:flex; align-items:center; justify-content:center; }
.dbot-info{ flex:1; }
.dbot-name{ font-weight:600; font-size:14px; }
.dbot-status{ font-size:11px; color:var(--ink-3); margin-top:2px; }
.dbot-status.on{ color:var(--module-1); }

/* ---- 我的 Bot 表格 ---- */
.dbot-table-wrap{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); box-shadow:var(--shadow); }
.dbot-table{ width:100%; table-layout:fixed; border-collapse:collapse; font-size:13px; }
.dbot-table th{ text-align:left; padding:10px 12px; font-size:11px; font-weight:700; color:var(--ink-3); letter-spacing:.5px; background:var(--accent-muted); }
.dbot-table td{ padding:10px 12px; border-top:1px solid var(--line); vertical-align:middle; overflow:hidden; text-overflow:ellipsis; }
.dbot-table tbody tr{ cursor:pointer; transition:background .15s; }
.dbot-table tbody tr:hover{ background:var(--accent-muted); }
.dbot-table .dbot-name{ font-weight:600; }
.dbot-table .dbot-name small{ display:block; font-weight:400; font-size:11px; color:var(--ink-3); margin-top:2px; }
.dbot-due.warn{ color:var(--amber); font-weight:600; }
.dbot-due.danger{ color:var(--danger); font-weight:600; }
@media (max-width:1023px){ .dbot-table .hide-sm{ display:none; } }
.dsess{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); padding:12px; margin-bottom:9px; cursor:pointer; }
.dsess-t{ font-weight:600; font-size:14px; }
.dsess-m{ font-size:11px; color:var(--ink-3); margin-top:3px; }
.quick-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:9px; }
.qitem{ display:flex; flex-direction:column; align-items:center; gap:7px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:13px 6px; font-size:11px; color:var(--ink-2); cursor:pointer; }
.qitem span{ width:34px; height:34px; border-radius:10px; display:flex; align-items:center; justify-content:center; }
.eff-summary{ display:flex; align-items:center; gap:8px; margin-bottom:12px; }
.s-label{ font-size:11px; color:var(--ink-3); }
.s-value{ font-size:14px; font-weight:800; }
.s-sep{ width:1px; height:16px; background:var(--line); }
.rings{ display:grid; grid-template-columns:repeat(4,1fr); gap:9px; }
.ring{ aspect-ratio:1; border-radius:50%; background:var(--tint); display:flex; align-items:center; justify-content:center; cursor:pointer; border:1px solid var(--line); }
.ring-in{ width:74%; height:74%; border-radius:50%; background:var(--bg-card); display:flex; flex-direction:column; align-items:center; justify-content:center; }
.ring-in b{ font-size:16px; font-weight:800; }
.ring-in i{ font-style:normal; font-size:9px; color:var(--ink-3); }

/* ---- 工作台两列驾驶舱布局 ---- */
.dash-cols{ display:grid; grid-template-columns:1fr; gap:0; align-items:start; }
.dash-col{ min-width:0; }
.dash-col .quick-grid{ grid-template-columns:repeat(4,1fr); }

/* ============================================================
   弹层 / 表单
   ============================================================ */
.overlay{ position:fixed; inset:0; z-index:50; background:rgba(10,20,35,.45); display:flex; align-items:flex-end; justify-content:center; }
.modal{ width:100%; max-width:520px; max-height:88vh; overflow-y:auto; background:var(--bg-card); border-radius:20px 20px 0 0; padding:10px 18px 22px; animation:slideUp .25s ease; }
.modal-lg{ max-width:560px; }
@keyframes slideUp{ from{ transform:translateY(40px); opacity:0; } to{ transform:translateY(0); opacity:1; } }
.modal .grab{ width:42px; height:4px; border-radius:3px; background:var(--line); margin:6px auto 12px; }
.modal h2{ font-size:17px; font-weight:800; }
.modal .sub{ font-size:12px; color:var(--ink-3); margin:4px 0 14px; }
.field{ margin-bottom:12px; }
.field label{ display:block; font-size:12px; font-weight:600; color:var(--ink-2); margin-bottom:6px; }
.field-row{ display:flex; gap:10px; }
.field-row .field{ flex:1; }
.modal-actions{ display:flex; gap:10px; margin-top:18px; }
.modal-actions .btn{ flex:1; }
.seg{ display:flex; gap:6px; background:var(--bg); border-radius:10px; padding:4px; }
.seg .opt{ flex:1; text-align:center; padding:8px 4px; border-radius:8px; font-size:13px; font-weight:600; color:var(--ink-3); }
.seg .opt.on{ background:#fff; color:var(--accent); box-shadow:var(--shadow); }

/* ============================================================
   效率工具（todo / checkin / note / progress）
   ============================================================ */
.hero{ display:flex; align-items:center; gap:12px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:14px; box-shadow:var(--shadow); }
.hero-ic{ width:42px; height:42px; border-radius:12px; flex:none; display:flex; align-items:center; justify-content:center; }
.hero-tx{ display:flex; align-items:baseline; gap:8px; }
.hero-v{ font-size:22px; font-weight:800; font-family:var(--serif); }
.hero-l{ font-size:12px; color:var(--ink-3); }
.hero-bar{ height:5px; border-radius:3px; background:var(--bg); margin-top:8px; overflow:hidden; }
.hero-bar i{ display:block; height:100%; border-radius:3px; }
.rec{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); padding:12px 13px; margin-bottom:9px; box-shadow:var(--shadow); position:relative; }
.rec .top{ display:flex; align-items:flex-start; gap:11px; }
.rec .acts{ position:absolute; top:10px; right:10px; display:flex; gap:4px; }
.rec .del{ width:28px; height:28px; border-radius:8px; display:flex; align-items:center; justify-content:center; color:var(--ink-3); background:#f4f6fa; }
.rec .del:hover{ color:var(--danger); background:var(--danger-muted); }
.chk{ width:24px; height:24px; border-radius:7px; border:2px solid var(--line); flex:none; display:flex; align-items:center; justify-content:center; color:#fff; cursor:pointer; transition:.15s; margin-top:1px; }
.chk.on{ background:var(--module-1); border-color:var(--module-1); }
.rec .body{ flex:1; min-width:0; cursor:pointer; padding-right:26px; }
.rname{ font-weight:600; font-size:14px; }
.rname.done{ color:var(--ink-3); text-decoration:line-through; }
.rmeta{ display:flex; align-items:center; flex-wrap:wrap; gap:6px; margin-top:5px; }
.rnote{ font-size:12.5px; color:var(--ink-2); margin-top:6px; white-space:pre-wrap; word-break:break-word; }
.streak{ display:inline-flex; align-items:center; gap:3px; font-size:12px; color:var(--amber); font-weight:600; }
.badge.ok{ background:#dcfce7; color:var(--module-1); }
.progress-top{ display:flex; align-items:center; gap:10px; margin-top:6px; }
.pbar{ flex:1; height:6px; border-radius:3px; background:var(--bg); overflow:hidden; }
.pbar i{ display:block; height:100%; border-radius:3px; }
.pval{ flex:none; font-size:12px; color:var(--ink-2); font-weight:600; white-space:nowrap; }
.field-sub{ font-size:12px; color:var(--ink-3); margin:-4px 0 12px; }
.frow{ display:flex; gap:10px; }
.frow .field{ flex:1; }
.link-danger{ background:none; border:none; color:var(--danger); font-size:13px; font-weight:600; padding:0; }

/* ---- 通知设置弹框：渠道开关列表 ---- */
.np-chan{ display:flex; align-items:center; gap:12px; padding:12px 2px; border-bottom:1px solid var(--line); }
.np-ic{
  width:38px; height:38px; border-radius:11px; flex:none;
  display:flex; align-items:center; justify-content:center;
  background:var(--accent-muted); color:var(--accent);
}
.np-ic.sms{ background:var(--amber-muted); color:var(--amber); }
.np-meta{ flex:1; min-width:0; }
.np-t{ font-size:14px; font-weight:700; display:flex; align-items:center; gap:6px; }
.np-tag{ font-size:10px; font-weight:600; color:var(--module-1); background:#e7f6ec; padding:1px 8px; border-radius:20px; }
.np-d{ font-size:11.5px; color:var(--ink-3); margin-top:1px; }
.np-switch{
  width:44px; height:26px; border-radius:13px; background:var(--line);
  position:relative; flex:none; cursor:pointer; transition:background .2s;
}
.np-switch .np-knob{
  position:absolute; top:3px; left:3px; width:20px; height:20px; border-radius:50%;
  background:#fff; box-shadow:0 1px 3px rgba(20,35,60,.25); transition:left .2s;
}
.np-switch.on{ background:var(--accent); }
.np-switch.on .np-knob{ left:21px; }
.np-switch.disabled{ opacity:.55; cursor:default; }
/* 子输入行：平滑展开/收起 */
.np-subrow{
  max-height:0; opacity:0; overflow:hidden; padding:0 2px;
  transition:max-height .25s ease, opacity .2s ease, padding .25s ease;
}
.np-subrow.open{ max-height:80px; opacity:1; padding:8px 2px 14px; }
.np-sub-label{ font-size:11px; font-weight:700; color:var(--ink-2); margin-bottom:6px; display:block; }
.np-sub-field{ display:flex; align-items:center; gap:8px; background:#fff; border:1px solid var(--line); border-radius:var(--radius-sm); padding:0 11px; transition:border-color .15s; }
.np-sub-field:focus-within{ border-color:var(--accent); }
.np-sub-field .np-sub-ic{ color:var(--accent); flex:none; display:flex; }
.np-sub-field.sms .np-sub-ic{ color:var(--amber); }
.np-sub-field input{
  width:100%; border:none; outline:none; background:transparent; padding:9px 0; font-size:13px;
}
.np-sub-field input::placeholder{ color:var(--ink-3); }
/* 操作区分隔线 */
.np-actions-divider{ border:none; border-top:1px dashed var(--line); margin:16px 0 0; }

/* 通知设置：绑定状态展示（接收地址取自信息绑定） */
.np-bound{ color:var(--accent); font-weight:600; }
.np-unbound{ color:var(--danger); }
.np-bound-hint{ display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--ink-3); padding:12px 2px 0; }
.np-bound-hint svg{ flex:none; color:var(--accent); }

/* 打卡日历 */
.cal-panel{ margin-bottom:14px; }
.cal-hd{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.cal-nav{ width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center; color:var(--ink-2); background:var(--bg); }
.cal-title{ font-size:14px; font-weight:700; }
.cal-chips{ display:flex; gap:6px; overflow-x:auto; padding-bottom:8px; margin-bottom:8px; }
.cal-chip{ flex:none; padding:5px 11px; border-radius:999px; background:var(--bg); color:var(--ink-2); font-size:12px; }
.cal-chip.on{ background:var(--accent); color:#fff; }
.cal-dow{ display:grid; grid-template-columns:repeat(7,1fr); text-align:center; font-size:11px; color:var(--ink-3); margin-bottom:4px; }
.cal-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:4px; }
.cal-cell{ aspect-ratio:1; border-radius:8px; border:1px solid var(--line); background:var(--bg-card); font-size:12px; display:flex; align-items:center; justify-content:center; color:var(--ink-2); }
.cal-cell.on{ background:var(--module-1); border-color:var(--module-1); color:#fff; }
.cal-cell.today{ box-shadow:0 0 0 2px var(--accent); }
.cal-cell.blank{ background:transparent; border-color:transparent; }
.cal-foot{ display:flex; align-items:center; gap:5px; font-size:12px; color:var(--ink-3); margin-top:10px; }

/* ============================================================
   我的 profile
   ============================================================ */
.profile-head{ text-align:center; padding:8px 0 18px; }
.profile-avatar{ width:66px; height:66px; border-radius:50%; background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#fff; font-size:28px; font-weight:800; display:flex; align-items:center; justify-content:center; margin:0 auto 10px; font-family:var(--serif); }
.profile-name{ font-size:19px; font-weight:800; }
.profile-role{ font-size:12px; color:var(--ink-3); margin-top:3px; }

/* ============================================================
   分成与结算 income
   ============================================================ */
.inc-tabs{ display:flex; gap:6px; background:var(--bg); border-radius:12px; padding:4px; margin-bottom:14px; }
.inc-tab{ flex:1; text-align:center; padding:9px 4px; border-radius:9px; font-size:13px; font-weight:600; color:var(--ink-3); cursor:pointer; }
.inc-tab.on{ background:#fff; color:var(--accent); box-shadow:var(--shadow); }
.inc-cards{ display:grid; grid-template-columns:repeat(3,1fr); gap:9px; margin-bottom:6px; }
.inc-card{ background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:13px; box-shadow:var(--shadow); }
.inc-card .v{ font-size:18px; font-weight:800; font-family:var(--serif); color:var(--amber); }
.inc-card.ok .v{ color:var(--module-1); }
.inc-card.blue .v{ color:var(--accent); }
.inc-card .l{ font-size:11px; color:var(--ink-3); margin-top:3px; }
.li-amt{ color:var(--accent); font-weight:800; }
.r-preview{ font-size:12px; color:var(--amber); font-weight:600; margin-top:6px; min-height:16px; }

/* ============================================================
   响应式：PC ≥1024px
   ============================================================ */
@media (min-width: 1024px){
  .sidebar{ display:flex; }
  .nav{ display:none; }
  .main{ border-left:1px solid var(--line); }
  #screen{ padding:20px 26px 40px; max-width:1100px; width:100%; margin:0 auto; }
  .fab{ bottom:26px; }
  .fab-menu{ bottom:92px; }
  .toast{ bottom:30px; }
  .menu-btn, .back-btn{ display:none; }
  /* PC 端有侧边栏，隐藏浮动 + 按钮（冗余） */
  .fab, .fab-menu, .fab-scrim{ display:none !important; }
  /* PC 两端点阵：申请看板两列 */
  .ov-grid{ grid-template-columns:repeat(4,1fr); }
  .modal{ border-radius:20px; align-items:center; margin-bottom:0; }
  .overlay{ align-items:center; }
  .rings{ grid-template-columns:repeat(4,1fr); }
  .quick-grid{ grid-template-columns:repeat(4,1fr); }
  /* 统一两列卡片网格（申请/模板/Bot/提醒） */
  .list-grid{ grid-template-columns:repeat(2,1fr); }
  .list-grid.grid-3{ grid-template-columns:repeat(3,1fr); }
  /* 工作台驾驶舱两列 */
  .dash-cols{ grid-template-columns:1fr 1fr; gap:0 22px; }
  /* 统一「个人中心」弹层：PC 左下角头像处向上抽拉 */
  .hub-panel{
    left:18px; right:auto; bottom:18px; width:340px; max-width:92vw; max-height:86vh;
    border-radius:18px; border:1px solid var(--line);
    transform:translateY(130%) scale(.94); transform-origin:bottom left;
    opacity:0; pointer-events:none;
    transition:transform .34s cubic-bezier(.22,1,.36,1), opacity .28s;
  }
  .hub-panel.show{ transform:translateY(0) scale(1); opacity:1; pointer-events:auto; }
}

/* ============================================================
   响应式：中屏 480-1023（H5 横屏/iPad）
   ============================================================ */
@media (min-width:480px) and (max-width:1023px){
  .ov-grid{ grid-template-columns:repeat(4,1fr); }
  .rings{ grid-template-columns:repeat(4,1fr); }
  .quick-grid{ grid-template-columns:repeat(4,1fr); }
}

/* ============================================================
   响应式：小屏 H5 <480px
   ============================================================ */
@media (max-width:479px){
  .ov-grid{ grid-template-columns:repeat(4,1fr); gap:6px; }
  .ov-v{ font-size:18px; }
  .rings{ grid-template-columns:repeat(4,1fr); gap:6px; }
  .quick-grid{ grid-template-columns:repeat(4,1fr); gap:6px; }
  .appline{ grid-template-columns:repeat(4,1fr); gap:6px; }
  .aline-stat b{ font-size:17px; }
  .field-row{ flex-direction:column; gap:0; }
  .date-chip{ display:none; }
  .modal{ max-width:100%; }
  .ca-hero{ padding:13px 14px; gap:11px; }
  .ca-hero-ic{ width:44px; height:44px; border-radius:12px; }
  .ca-hero-t h3{ font-size:16px; }
  .ca-hero-t p{ font-size:11px; }
  .ca-hero-btn{ padding:8px 12px; font-size:12px; }
}

/* ============================================================
   审计改造新增：分析图表 / 折叠区 / 筛选标签 / PC 分栏 / 行内操作
   ============================================================ */
/* 横向分布条（阶段分布 / 来源占比） */
.hchart{ display:flex; flex-direction:column; gap:8px; }
.hb-row{ display:flex; align-items:center; gap:8px; font-size:12px; }
.hb-label{ flex:0 0 76px; color:var(--ink-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.hb-track{ flex:1; height:8px; border-radius:6px; background:#eef1f6; overflow:hidden; }
.hb-track i{ display:block; height:100%; border-radius:6px; transition:width .5s ease; }
.hb-val{ flex:0 0 30px; text-align:right; font-weight:700; color:var(--ink); font-family:var(--serif); }
.hchart-empty, .mb-empty{ font-size:12px; color:var(--ink-3); padding:16px 0; text-align:center; }

/* 迷你柱状图（到期趋势 / 分成趋势） */
.mb-chart{ display:flex; align-items:flex-end; gap:6px; height:120px; padding-top:8px; }
.mb-col{ flex:1; min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; gap:5px; height:100%; }
.mb-bar{ width:100%; max-width:26px; border-radius:5px 5px 2px 2px; min-height:6px; }
.mb-label{ font-size:10px; color:var(--ink-3); white-space:nowrap; }

/* 分析区块容器 */
.an-grid{ display:grid; grid-template-columns:1fr; gap:10px; margin-bottom:14px; }
.an-card{ padding:14px; }
.an-card.an-wide{ grid-column:1 / -1; }
.an-title{ display:flex; align-items:center; gap:6px; font-size:13px; font-weight:700; color:var(--ink-2); margin-bottom:12px; }
.an-title svg{ color:var(--accent); }
.risk-item{ display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:9px; background:var(--bg); margin-bottom:6px; cursor:pointer; }
.risk-item:hover{ background:var(--accent-muted); }
.risk-ic{ display:inline-flex; color:var(--accent); flex:none; }
.risk-ic.danger{ color:var(--danger); }
.risk-name{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; font-weight:600; }

/* 首页「展开更多」折叠区（P3-09） */
.fold{ margin-top:4px; }
.fold-head{ display:flex; align-items:center; justify-content:center; gap:6px; width:100%; padding:11px 14px; background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm); color:var(--ink-2); font-size:13px; font-weight:600; box-shadow:var(--shadow); }
.fold-head svg{ transition:transform .25s; }
.fold.open .fold-head svg{ transform:rotate(90deg); }
.fold-body{ display:none; margin-top:10px; }
.fold.open .fold-body{ display:block; }

/* 首页「今日必办」 */
.today-list{ display:flex; flex-direction:column; gap:8px; }
.today-item{ display:flex; align-items:center; gap:8px; padding:9px 11px; border-radius:9px; background:var(--bg); cursor:pointer; }
.today-item:hover{ background:var(--accent-muted); }
.td-p{ flex:none; font-size:11px; font-weight:700; padding:1px 7px; border-radius:999px; }
.td-txt{ flex:1; min-width:0; font-size:14px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.today-empty{ font-size:12.5px; color:var(--ink-3); text-align:center; padding:14px 0; }

/* 筛选状态标签（P2-05）：可见痕迹 + 一键清除 */
.filter-tags{ display:flex; flex-wrap:wrap; gap:6px; margin-bottom:12px; }
.filter-tag{ display:inline-flex; align-items:center; gap:5px; font-size:12px; color:var(--accent); background:var(--accent-muted); border:1px solid rgba(31,78,140,.15); padding:4px 8px 4px 11px; border-radius:999px; font-weight:600; }
.filter-tag .ft-x{ display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border-radius:50%; color:var(--accent); }
.filter-tag .ft-x:hover{ background:rgba(31,78,140,.12); }

/* Toast 带操作按钮（删除 + 撤销等） */

/* 申请卡片行内快捷「登记」（P2-04） */
.ac-acts{ display:inline-flex; align-items:center; gap:8px; }
.ac-stage{ display:inline-flex; align-items:center; gap:4px; padding:5px 11px; border-radius:999px; background:var(--accent-muted); color:var(--accent); font-size:12px; font-weight:700; }
.ac-stage:hover{ background:var(--accent); color:#fff; }

/* PC 列表选中态 */
.app-card.sel, .list-item.sel{ border-color:var(--accent); box-shadow:0 0 0 2px rgba(31,78,140,.18); }

/* 空态引导辅助说明 */
.empty-tip{ max-width:300px; margin:10px auto 0; font-size:12px; color:var(--ink-3); line-height:1.8; }

/* PC 分栏（左列表 + 右详情，P1-03） */
@media (min-width:1024px){
  .split-view{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:18px; align-items:start; }
  .split-list{ min-width:0; }
  .split-detail{ position:sticky; top:14px; min-width:0; }
  .split-detail .app-detail, .split-detail #custDetail{ max-height:calc(100vh - 96px); overflow-y:auto; padding-right:4px; }
  /* PC 分析区块两列 */
  .an-grid{ grid-template-columns:1fr 1fr; }
}
/* ============================================================
   Bot 详情页（重构）：状态英雄卡 + 关键指标 + 信息卡片
   ============================================================ */
.bd-detail{ display:flex; flex-direction:column; gap:12px; padding-bottom:6px; }

/* ---- ① 状态英雄卡 ---- */
.bd-hero{
  position:relative; overflow:hidden;
  margin-top:14px; padding:20px 18px; border-radius:var(--radius);
  background:linear-gradient(135deg,#0b2239 0%,#1b4380 58%,#2f6bb8 100%);
  color:#fff; box-shadow:var(--shadow-lg);
}
.bd-glow{ position:absolute; border-radius:50%; pointer-events:none; }
.bd-glow-1{ right:-60px; top:-60px; width:210px; height:210px; background:radial-gradient(circle,rgba(255,255,255,.14),transparent 70%); }
.bd-glow-2{ left:-40px; bottom:-70px; width:180px; height:180px; background:radial-gradient(circle,rgba(255,255,255,.07),transparent 70%); }
.bd-hero-top{ position:relative; display:flex; align-items:center; gap:14px; }
.bd-hero-ic{
  flex:none; width:56px; height:56px; border-radius:16px;
  background:rgba(255,255,255,.16); color:#fff;
  display:flex; align-items:center; justify-content:center;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);
}
.bd-hero-info{ flex:1; min-width:0; }
.bd-hero-name{ font-size:20px; font-weight:800; letter-spacing:.3px; word-break:break-all; line-height:1.3; }
.bd-hero-sub{ font-size:12.5px; color:rgba(255,255,255,.82); margin-top:4px; }
.bd-hero-status{
  flex:none; display:inline-flex; align-items:center; gap:6px;
  font-size:12px; font-weight:700; padding:5px 11px; border-radius:999px; color:#fff; white-space:nowrap;
}
.bd-hero-status .bhs-dot{ width:7px; height:7px; border-radius:50%; background:currentColor; }
.bd-hero-status.online{ background:rgba(34,197,94,.92); }
.bd-hero-status.offline{ background:rgba(108,120,138,.88); }
.bd-hero-status.frozen{ background:rgba(239,68,68,.92); }
.bd-hero.has-warn{ padding-bottom:44px; }
.bd-hero-warn{
  position:absolute; left:0; right:0; bottom:0; display:flex; align-items:center; justify-content:center; gap:7px;
  font-size:12.5px; font-weight:600; padding:8px 12px; background:var(--amber); color:#fff;
}
.bd-hero-warn svg{ flex:none; }
.bd-hero-warn b{ font-weight:800; margin:0 2px; }

/* ---- ② 关键指标条 ---- */
.bd-stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.bd-stat{
  background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:12px 10px; text-align:center; box-shadow:var(--shadow);
  display:flex; flex-direction:column; gap:4px; min-width:0;
}
.bd-stat-num{ font-size:20px; font-weight:800; color:var(--ink); line-height:1.2; font-family:var(--serif); word-break:break-all; }
.bd-stat-num.danger{ color:var(--danger); }
.bd-stat-num.warn{ color:var(--amber); }
.bd-stat-num.bd-stat-st{ font-size:14px; font-weight:700; font-family:inherit; display:inline-flex; align-items:center; justify-content:center; gap:6px; }
.bd-stat-label{ font-size:11px; color:var(--ink-3); }

/* ---- ③ 信息卡片 ---- */
.bd-card{
  background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius);
  padding:15px 16px; box-shadow:var(--shadow);
}
.bd-card-title{ display:flex; align-items:center; gap:7px; font-size:13px; font-weight:700; color:var(--ink-2); margin-bottom:4px; }
.bd-card-title svg{ color:var(--accent); flex:none; }
.bd-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 18px; }
.bd-cell{ display:flex; flex-direction:column; gap:2px; padding:9px 0; border-bottom:1px solid #f1f4f9; min-width:0; }
.bd-cell:nth-last-child(-n+2){ border-bottom:none; }
.bd-k{ font-size:11.5px; color:var(--ink-3); }
.bd-v{ font-size:13.5px; font-weight:600; color:var(--ink); word-break:break-all; display:flex; align-items:center; }
.bd-v .status-dot{ flex:none; }

/* ---- ④ 操作 ---- */
.bd-actions{ display:flex; flex-direction:column; gap:10px; }
.bd-actions .btn{ width:100%; }
.bd-actions-tip{ display:flex; align-items:center; justify-content:center; gap:6px; font-size:12px; color:var(--ink-3); padding-top:2px; }
.bd-actions-tip svg{ color:var(--ink-3); }

@media (max-width:479px){
  .bd-grid{ grid-template-columns:1fr; }
  .bd-cell{ border-bottom:1px solid #f1f4f9; }
  .bd-cell:last-child{ border-bottom:none; }
}

/* ============================================================
   获客引擎（acquisition）· 我的钩子 / 获客漏斗 / 线索跟进
   ============================================================ */

/* ---- 未开通渠道空态 ---- */
.acq-empty{ text-align:center; padding:40px 20px; }
.acq-empty-ic{ width:76px; height:76px; margin:0 auto 14px; border-radius:22px;
  display:flex; align-items:center; justify-content:center;
  background:var(--accent-muted); color:var(--accent); }
.acq-empty-t{ font-size:16px; font-weight:800; color:var(--ink); }
.acq-empty-s{ font-size:12.5px; color:var(--ink-3); line-height:1.8; margin-top:8px; max-width:420px; margin-left:auto; margin-right:auto; }

/* ---- 渠道名片 ---- */
.acq-hero{ display:flex; gap:13px; align-items:flex-start;
  background:linear-gradient(135deg, var(--bg-deep), #1d4a7c);
  border-radius:var(--radius); padding:18px; color:#fff; margin-bottom:6px; box-shadow:var(--shadow); }
.acq-hero-ic{ width:48px; height:48px; border-radius:14px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center; background:rgba(255,255,255,.14); }
.acq-hero-name{ font-size:17px; font-weight:800; }
.acq-hero-code{ display:flex; align-items:center; gap:8px; margin-top:6px;
  font-size:13px; font-weight:700; letter-spacing:1px; color:#ffe6a7; }
.acq-mini-btn{ border:1px solid rgba(255,255,255,.4); background:rgba(255,255,255,.12); color:#fff;
  font-size:11px; padding:2px 9px; border-radius:999px; cursor:pointer; }
.acq-mini-btn:hover{ background:rgba(255,255,255,.24); }
.acq-hero-sub{ font-size:12px; line-height:1.7; opacity:.82; margin-top:9px; }

/* ---- 专属落地链接 ---- */
.acq-link-txt{ font-size:13px; color:var(--ink-2); background:#f4f7fb; border:1px dashed var(--line);
  border-radius:var(--radius-sm); padding:11px 12px; word-break:break-all; line-height:1.6; }
.acq-link-acts{ display:flex; gap:10px; margin-top:12px; }
.acq-link-acts .btn{ flex:1; }

/* ---- 推广二维码 ---- */
.acq-qr-card{ text-align:center; }
.acq-qr-img{ width:180px; height:180px; border-radius:12px; border:1px solid var(--line);
  padding:8px; background:#fff; }
.acq-qr-fallback{ width:180px; height:180px; margin:0 auto; border-radius:12px; border:1px dashed var(--line);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
  color:var(--ink-3); font-size:12px; }
.acq-qr-tip{ font-size:12px; color:var(--ink-3); margin-top:10px; }
.acq-qr-acts{ display:flex; gap:10px; margin-top:12px; justify-content:center; }
.acq-qr-acts .btn{ flex:0 1 200px; }

/* ---- 推荐话术 ---- */
.acq-speech{ font-size:13.5px; color:var(--ink-2); background:#f4f7fb; border:1px solid var(--line);
  border-radius:var(--radius-sm); padding:12px 14px; line-height:1.8; margin-bottom:12px; }
.acq-speech-card .btn{ width:100%; }

/* ---- 底部提示条 ---- */
.acq-foot-tip{ display:flex; align-items:flex-start; gap:6px; margin:18px 2px 8px;
  font-size:12px; color:var(--ink-3); line-height:1.7; }

/* ---- 获客漏斗：四环统计卡 ---- */
.acq-funnel-cards{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:14px; }
.acq-fcard{ padding:14px; position:relative; overflow:hidden; }
.acq-fcard::after{ content:""; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--fc); }
.acq-fcard-ic{ width:34px; height:34px; border-radius:9px; display:flex; align-items:center; justify-content:center;
  background:var(--ft); color:var(--fc); margin-bottom:9px; }
.acq-fcard-v{ font-size:22px; font-weight:800; font-family:var(--serif); color:var(--ink); }
.acq-fcard-l{ font-size:11px; color:var(--ink-3); margin-top:2px; }

/* ---- 本周 / 本月小卡 ---- */
.acq-week-row{ display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:4px; }
.acq-week-item{ display:flex; align-items:center; gap:12px; padding:14px; }
.acq-week-item .ov-ic{ margin-bottom:0; }
.acq-week-item:nth-child(1) .ov-ic{ background:var(--accent-muted); color:var(--accent); }
.acq-week-item:nth-child(2) .ov-ic{ background:#ede9fe; color:var(--module-5); }
.acq-week-v{ font-size:20px; font-weight:800; font-family:var(--serif); }
.acq-week-l{ font-size:11px; color:var(--ink-3); }

/* ---- 线索跟进：筛选胶囊 ---- */
.acq-tab{ display:inline-flex; align-items:center; gap:5px; font-size:12px; color:var(--ink-2);
  background:var(--bg-card); border:1px solid var(--line); padding:5px 12px; border-radius:999px;
  font-weight:600; cursor:pointer; }
.acq-tab.on{ background:var(--accent); border-color:var(--accent); color:#fff; }

/* ---- 线索列表项 ---- */
.acq-lead{ cursor:default; }
.acq-lead .li-t{ display:flex; justify-content:space-between; align-items:baseline; gap:8px; }
.acq-phone{ font-family:var(--serif); font-size:14px; font-weight:800; color:var(--ink-2); }
.acq-lead-acts{ display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
.acq-act{ display:inline-flex; align-items:center; gap:4px; font-size:12px; font-weight:600;
  padding:5px 12px; border-radius:999px; border:1px solid var(--line);
  background:#fff; color:var(--ink-2); cursor:pointer; }
.acq-act:hover{ border-color:var(--accent); color:var(--accent); }
.acq-act.primary{ background:var(--accent); border-color:var(--accent); color:#fff; }
.acq-act.primary:hover{ filter:brightness(1.08); }
.acq-act.danger{ background:var(--danger-muted); border-color:var(--danger-muted); color:var(--danger); }
.acq-act.danger:hover{ filter:brightness(.97); }

/* ---- H5：四环卡改 2 列 ---- */
@media (max-width:1023px){
  .acq-funnel-cards{ grid-template-columns:repeat(2,1fr); gap:9px; }
}
@media (max-width:479px){
  .acq-qr-img{ width:150px; height:150px; }
  .acq-hero{ flex-direction:column; }
  .acq-link-acts{ flex-direction:column; }
}

/* ---- 工作台首页 · 获客概览 ---- */
.acq-dash-empty{ display:flex; align-items:center; gap:10px; color:var(--ink-2); font-size:13px; cursor:pointer;
  padding:6px 2px; }
.acq-dash-ic{ width:32px; height:32px; border-radius:9px; flex-shrink:0; display:flex; align-items:center; justify-content:center;
  background:var(--accent-muted); color:var(--accent); }
.acq-dash-t{ flex:1; line-height:1.5; }
.acq-dash-go{ color:var(--accent); font-weight:700; font-size:13px; }
.acq-dash-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; cursor:pointer; position:relative; }
.acq-dash-cell{ text-align:center; padding:8px 2px; }
.acq-dash-cell .ov-ic{ width:34px; height:34px; margin:0 auto 6px; background:var(--accent-muted); color:var(--accent); }
.acq-dash-cell:nth-child(2) .ov-ic{ background:#ede9fe; color:var(--module-5); }
.acq-dash-cell:nth-child(3) .ov-ic{ background:#dcfce7; color:var(--module-1); }
.acq-dash-v{ font-size:20px; font-weight:800; font-family:var(--serif); }
.acq-dash-l{ font-size:11px; color:var(--ink-3); margin-top:2px; }
.acq-dash-go2{ position:absolute; right:2px; top:-2px; font-size:12px; color:var(--accent); font-weight:700; }
@media (max-width:479px){
  .acq-dash-grid{ grid-template-columns:repeat(3,1fr); }
  .acq-dash-cell:nth-child(3){ display:none; }
}

/* ---------- 通话助手：学生可搜索下拉组件 ---------- */
.ca-cust{ position:relative; flex:1; min-width:0; z-index:60; }
.ca-cust-trigger{ display:flex; align-items:center; justify-content:space-between; gap:8px; width:100%;
  padding:9px 11px; border:1px solid var(--line); border-radius:var(--radius-sm);
  background:#fff; color:var(--ink-2); font-size:13px; cursor:pointer; text-align:left; min-width:0; }
.ca-cust-trigger span{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.ca-cust-trigger .ca-cust-arrow{ flex:none; color:var(--ink-3); transition:transform .15s; }
.ca-cust-trigger.open .ca-cust-arrow{ transform:rotate(180deg); }
.ca-cust-trigger.locked{ opacity:.55; cursor:not-allowed; background:var(--bg); }
.ca-cust-panel{ position:absolute; top:calc(100% + 6px); left:0; width:100%; min-width:240px; z-index:100;
  background:#fff; border:1px solid var(--line); border-radius:10px; box-shadow:0 8px 24px rgba(20,35,60,.14);
  overflow:hidden; display:flex; flex-direction:column; }
.ca-cust-panel.hidden{ display:none; }
.ca-cust-search{ width:100%; border:none; border-bottom:1px solid var(--line); padding:10px 12px;
  font-size:13px; outline:none; background:#fafbfc; border-radius:0; }
.ca-cust-list{ max-height:260px; overflow:auto; }
.ca-cust-item{ padding:9px 12px; cursor:pointer; border-bottom:1px solid var(--line); }
.ca-cust-item:hover{ background:var(--bg); }
.ca-cust-item-main{ display:flex; align-items:center; gap:6px; min-width:0; }
.ca-cust-item-name{ font-size:13px; color:var(--ink); font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ca-cust-item-sub{ font-size:11px; color:var(--ink-3); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ca-cust-empty{ padding:16px 12px; font-size:12px; color:var(--ink-3); text-align:center; }
.ca-cust-new{ padding:10px 12px; cursor:pointer; font-size:13px; color:var(--accent);
  border-top:1px solid var(--line); background:#fafbfc; text-align:center; font-weight:600; }
.ca-cust-new:hover{ background:var(--bg); }
.ca-badge{ font-size:10px; line-height:1; padding:3px 6px; border-radius:20px; flex:none; font-weight:600; }
.ca-badge.ok{ background:rgba(22,163,74,.12); color:#16a34a; }
.ca-badge.warn{ background:rgba(217,119,6,.14); color:#b45309; }
.ca-badge.gray{ background:var(--bg); color:var(--ink-3); }

/* ============================================================
   通话助手 v2：AI 建议上浮 · 控制条瘦身 · 双向锚定 · 卡片层级化
   ============================================================ */
.ca-sug{ border-left:3px solid var(--accent) !important; }
.ca-sug .ca-sug-q{ background:var(--accent-muted); color:var(--accent); border-radius:6px; padding:3px 8px; font-size:12px; display:inline-block; margin-bottom:6px; line-height:1.55; }
.ca-live{ border-left:3px solid var(--module-1) !important; }
.ca-fin{ background:var(--bg-card); }
.ca-red-dot{ width:9px; height:9px; border-radius:50%; background:#dc2626; flex:none; animation:caBlink 1.2s ease-in-out infinite; }
@keyframes caBlink{ 0%,100%{ opacity:1; } 50%{ opacity:.25; } }
.ca-sg-btn{ float:right; margin:2px 0 0 8px; background:none; border:none; cursor:pointer; font-size:14px; opacity:.65; line-height:1; padding:2px; }
.ca-sg-btn:hover{ opacity:1; transform:scale(1.15); }
@keyframes caPulse{ 0%{ box-shadow:0 0 0 0 rgba(31,78,140,.28); } 100%{ box-shadow:0 0 0 12px rgba(31,78,140,0); } }
.ca-sug-new{ animation:caPulse 1.6s ease-out 1; }
@keyframes caSugFlash{ 0%,55%{ box-shadow:0 0 0 3px var(--amber), 0 8px 24px rgba(20,35,60,.14); } 100%{ box-shadow:0 0 0 0 rgba(217,119,6,0); } }
.ca-sug-flash{ animation:caSugFlash 1.6s ease 1; }
/* 知识回应流式打字机：输出中的光标闪烁动画 */
.ca-sug-text.typing::after{ content:"▍"; color:var(--accent); margin-left:1px; animation:caBlink 0.9s step-end infinite; }
@keyframes caBlink{ 0%,100%{opacity:1} 50%{opacity:0} }
.ca-ask-sticky{ position:sticky; bottom:0; background:var(--bg-card); padding-top:10px; margin-top:10px; z-index:1; }
@media (max-width:479px){
  .ca-ask-sticky{ position:static; }
  #caSuggestions{ max-height:420px !important; }
}

/* ===== 通话助手：统一布局容器（PC 双列 / H5 竖屏 / H5 横屏全屏） ===== */
.ca-fs-grid{ display:grid; gap:12px; }
.ca-fs-grid .card-ctrl{ grid-area:ctrl; }
.ca-fs-grid .card-trx{ grid-area:trx; min-width:0; }
.ca-fs-grid .card-sug{ grid-area:sug; min-width:0; display:flex; flex-direction:column; }
/* 横屏全屏按钮：仅移动端（<1024px）显示 */
.ca-fs-enter{ display:none; }
@media (max-width:1023px){ .ca-fs-enter{ display:inline-flex; } }
@media (min-width:1024px){
  /* PC 双列：左右工作卡等高对齐（底边齐平）；字幕区弹性填充剩余高度，右侧建议区自然高度带动整行 */
  .ca-fs-grid{ grid-template-columns:1.15fr 1fr; grid-template-areas:"ctrl ctrl" "trx sug"; grid-template-rows:auto minmax(420px, auto); }
  .ca-fs-grid .card-trx{ min-height:0; }
  .ca-fs-grid .card-trx #caTranscript{ max-height:none !important; flex:1; min-height:0; }
}
@media (max-width:1023px){
  .ca-fs-grid{ grid-template-columns:1fr; grid-template-areas:"ctrl" "trx" "sug"; }
}
/* ===== 通话助手 v3：状态条对齐 + 卡片头部统一 + 需求画像折叠 ===== */
#caStateBar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ca-card-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.ca-card-title{ display:flex; align-items:center; gap:6px; font-size:13px; font-weight:600; color:var(--ink); }
.ca-card-title svg{ color:var(--accent); }
.ca-card-foot{ display:flex; align-items:center; justify-content:space-between; margin-top:8px; font-size:11px; color:var(--ink-3); }
.ca-needs-block{ border-top:1px solid var(--line); margin-top:12px; }
.ca-needs-head{ display:flex; align-items:center; gap:8px; width:100%; background:none; border:none; padding:10px 0 6px; cursor:pointer; text-align:left; }
.ca-needs-title{ display:flex; align-items:center; gap:6px; font-size:13px; font-weight:600; color:var(--ink); }
.ca-needs-title svg{ color:var(--accent); }
.ca-needs-count{ margin-left:auto; font-size:11px; color:var(--ink-3); background:var(--bg); border:1px solid var(--line); padding:1px 8px; border-radius:999px; white-space:nowrap; }
.ca-needs-count.hot{ color:var(--accent); background:var(--accent-muted); border-color:transparent; }
.ca-needs-chev{ font-size:11px; color:var(--ink-3); transition:transform .18s ease; }
.ca-needs-block.open .ca-needs-chev{ transform:rotate(180deg); }
.ca-needs-body{ overflow:hidden; }
.ca-needs-block:not(.open) .ca-needs-body{ display:none; }
/* 学生画像：展开后内容较多，限制高度可滚动（全屏模式沿用 34vh 专属规则） */
.ca-needs-block.open .ca-needs-body{ max-height:62vh; overflow:auto; }
/* 画像分组标题 */
.ca-prof-group{ margin-top:10px; font-size:11px; font-weight:700; color:var(--ink-3); letter-spacing:.3px; }
.ca-prof-group:first-child{ margin-top:0; }
/* H5 横屏全屏（html.ca-fs + 横屏）：隐藏外壳；控制卡折叠为顶部通栏，左=实时字幕、右=知识回应 */
@media (max-width:1023px) and (orientation:landscape){
  html.ca-fs .topbar,
  html.ca-fs .group-tabs,
  html.ca-fs #nav,
  html.ca-fs .page-head{ display:none !important; }
  html.ca-fs .app-layout,
  html.ca-fs .main,
  html.ca-fs #screen{ height:100vh; }
  /* 键盘弹出适配：支持动态视口单位的真机用 100dvh，老浏览器/测试环境回退 100vh */
  @supports (height:1dvh){
    html.ca-fs .app-layout,
    html.ca-fs .main,
    html.ca-fs #screen{ height:100dvh; }
  }
  html.ca-fs #screen{
    max-width:none; width:100%; margin:0;
    padding:10px 14px;
    overflow:hidden;
  }
  /* 控制条通栏 + 左右两栏内容占满剩余高度，保证字幕/建议有充足空间 */
  html.ca-fs .ca-fs-grid{
    grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);
    grid-template-rows:auto minmax(0,1fr);
    grid-template-areas:"ctrl ctrl" "trx sug";
    height:100%;
    align-items:stretch;
  }
  /* 控制卡 → 顶部单行精简条：隐藏选择区/状态说明，操作按钮与状态条并排 */
  html.ca-fs .card-ctrl{
    align-self:start;
    display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px;
    padding:6px 10px !important;
  }
  /* 全屏下按钮紧凑化，保证一行放得下不换行；指示灯（开始前才需要）通话中隐藏 */
  html.ca-fs .card-ctrl .btn{ padding:5px 10px; font-size:12.5px; line-height:1.5; }
  html.ca-fs .card-ctrl .ca-lamps{ display:none !important; }
  html.ca-fs .card-ctrl #caSelBox{ display:none !important; }
  html.ca-fs .card-ctrl #caStatusMsg{ display:none !important; }
  html.ca-fs .card-ctrl .ca-ctrl-row{ margin-top:0 !important; }
  html.ca-fs .card-ctrl #caStartBtn{ display:none !important; }
  html.ca-fs .ca-fs-enter{ display:none !important; }
  html.ca-fs #caStateBar{ flex:1; min-width:0; }
  html.ca-fs .card-trx{ display:flex; flex-direction:column; min-height:0; }
  html.ca-fs .card-trx #caTranscript{ max-height:none !important; flex:1; min-height:0; }
  html.ca-fs .card-sug{ min-height:0; }
  html.ca-fs .card-sug #caSuggestions{ max-height:none !important; flex:1; min-height:0; }
  /* 需求画像展开时在建议区下方作为可滚动抽屉，不挤压字幕 */
  html.ca-fs .ca-needs-block.open .ca-needs-body{ max-height:34vh; overflow:auto; }
}

/* H5 竖屏全屏（html.ca-fs + 竖屏）：隐藏外壳；控制条顶部单行，实时字幕/知识回应上下占满 */
@media (max-width:1023px) and (orientation:portrait){
  html.ca-fs .topbar,
  html.ca-fs .group-tabs,
  html.ca-fs #nav,
  html.ca-fs .page-head{ display:none !important; }
  html.ca-fs .app-layout,
  html.ca-fs .main,
  html.ca-fs #screen{ height:100vh; }
  /* 键盘弹出适配：支持动态视口单位的真机用 100dvh，老浏览器/测试环境回退 100vh */
  @supports (height:1dvh){
    html.ca-fs .app-layout,
    html.ca-fs .main,
    html.ca-fs #screen{ height:100dvh; }
  }
  html.ca-fs #screen{
    max-width:none; width:100%; margin:0;
    padding:10px 12px;
    overflow:hidden;
  }
  /* 控制条通栏 + 上下两栏内容占满剩余高度，字幕/建议各占一半左右 */
  html.ca-fs .ca-fs-grid{
    grid-template-columns:1fr;
    grid-template-rows:auto minmax(0,1fr) minmax(0,1fr);
    grid-template-areas:"ctrl" "trx" "sug";
    height:100%;
    align-items:stretch;
  }
  /* 控制卡 → 顶部单行精简条：仅显示 暂停/停止 + 状态条，隐藏无关元素 */
  html.ca-fs .card-ctrl{
    align-self:start;
    display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px;
    padding:6px 10px !important;
  }
  /* 全屏下按钮紧凑化，保证一行放得下不换行；指示灯（开始前才需要）通话中隐藏 */
  html.ca-fs .card-ctrl .btn{ padding:5px 10px; font-size:12.5px; line-height:1.5; }
  html.ca-fs .card-ctrl .ca-lamps{ display:none !important; }
  html.ca-fs .card-ctrl #caSelBox{ display:none !important; }
  html.ca-fs .card-ctrl #caStatusMsg{ display:none !important; }
  html.ca-fs .card-ctrl #caStartBtn{ display:none !important; }
  html.ca-fs .card-ctrl .ca-ctrl-row{ margin-top:0 !important; }
  html.ca-fs .ca-fs-enter{ display:none !important; }
  html.ca-fs #caStateBar{ flex:1; min-width:0; }
  html.ca-fs .card-trx{ display:flex; flex-direction:column; min-height:0; }
  html.ca-fs .card-trx #caTranscript{ max-height:none !important; flex:1; min-height:0; }
  html.ca-fs .card-sug{ min-height:0; }
  html.ca-fs .card-sug #caSuggestions{ max-height:none !important; flex:1; min-height:0; }
  /* 板块隐藏后：建议行仅剩头部栏（auto 高度），字幕区占满剩余空间 */
  html.ca-fs.ca-sug-off .ca-fs-grid{ grid-template-rows:auto minmax(0,1fr) auto; }
  /* 竖屏全屏：学生画像默认隐藏（保障实时字幕 + 知识回应充分显示），点头部「学生画像」按钮以浮层展开 */
  html.ca-fs .card-sug{ position:relative; min-height:0; }
  html.ca-fs .card-sug .ca-card-head{ position:relative; z-index:7; background:var(--bg-card); border-radius:10px; }
  html.ca-fs .ca-needs-block{ display:none !important; }
  /* 浮层展开：盖住建议列表区域（不挤压字幕区），头部栏保持可见可点；画像内容可滚动 */
  html.ca-fs .ca-needs-block.needs-open{
    display:flex !important; flex-direction:column;
    position:absolute; top:0; left:0; right:0; bottom:0; z-index:5;
    margin:0; padding:12px;
    background:var(--bg-card);
    border:1px solid var(--line); border-radius:10px;
    overflow:hidden;
  }
  html.ca-fs .ca-needs-block.needs-open .ca-needs-body{ flex:1; min-height:0; max-height:none; overflow:auto; padding-right:2px; }
  /* 学生画像浮层切换按钮：仅竖屏全屏时显示（横屏全屏仍用原抽屉逻辑，不显示） */
  html.ca-fs .ca-needs-toggle{ display:inline-flex; align-items:center; padding:3px 8px; font-size:12px; }
  html.ca-fs .ca-needs-toggle.active{ color:var(--accent); border-color:var(--accent); }
}

/* ===== 全屏通话：新建议计数角标（仅全屏且有新增时显示，点击定位到建议列表） ===== */
.ca-sug-badge{ display:none; align-items:center; gap:4px; padding:2px 8px; border-radius:999px; font-size:12px; border:1px solid var(--line); color:var(--ink-3); background:var(--bg); cursor:pointer; flex:none; }
.ca-sug-badge.show{ display:inline-flex; }
.ca-sug-badge.on{ background:var(--accent); color:#fff; border-color:transparent; }

/* ===== 全屏通话：隐藏「知识回应 · 建议话术」板块（默认显示；隐藏后字幕区自动占满剩余空间） ===== */
/* 切换按钮：平时（非全屏）不显示，仅全屏通话时显示 */
/* 全屏控制条：暂停/停止等按钮只显示图标，文字折叠（降低空间占用） */
html.ca-fs .card-ctrl .ca-btn-txt{ display:none; }
/* 知识回应卡头部右侧：计数 + 隐藏/显示切换按钮 */
.ca-sug-head-right{ display:flex; align-items:center; gap:8px; }
/* 切换按钮：平时（非全屏）不显示，仅全屏通话时显示 */
.ca-sug-toggle{ display:none; }
html.ca-fs .ca-sug-toggle{ display:inline-flex; align-items:center; padding:3px 8px; font-size:12px; }
html.ca-fs .ca-sug-toggle.active{ color:var(--accent); border-color:var(--accent); }
/* 学生画像浮层切换按钮：平时（非全屏）不显示；竖屏全屏时的显示规则在竖屏 media 块内 */
.ca-needs-toggle{ display:none; }
/* 隐藏板块：仅折叠内容区，保留卡片头部栏（标题 + 切换按钮）作为恢复入口 */
html.ca-fs.ca-sug-off .card-sug #caSuggestions,
html.ca-fs.ca-sug-off .card-sug .ca-needs-block{ display:none !important; }


/* ============================================================
   学生统一档案（students.js）· 档案详情聚合页样式
   ============================================================ */
/* 待确认横幅 */
.st-pending-banner{ display:flex; align-items:center; gap:10px; background:#fef3c7; color:#b45309;
  border:1px solid #fde68a; border-radius:var(--radius); padding:12px 14px; margin-bottom:12px;
  font-size:13px; font-weight:600; flex-wrap:wrap; }
.st-pending-banner .btn{ margin-left:auto; background:#b45309; color:#fff; }
/* 档案头 */
.st-head{ padding:16px; }
.st-row1{ display:flex; align-items:center; gap:12px; }
.st-ava-box{ display:flex; align-items:center; gap:8px; flex:none; }
.st-ava-rel{ position:relative; }
.st-avatar{ width:58px; height:58px; border-radius:50%; background:var(--accent-muted); color:var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:800; flex:none; }
.st-ava-img{ width:58px; height:58px; border-radius:50%; object-fit:cover; display:block; flex:none; background:var(--accent-muted); }
.st-ava-cam{ position:absolute; right:-3px; bottom:-3px; width:21px; height:21px; border-radius:50%;
  background:var(--accent); color:#fff; display:flex; align-items:center; justify-content:center;
  box-shadow:0 1px 4px rgba(20,35,60,.3); transition:background .16s, transform .16s; }
.st-ava-cam:hover{ background:var(--accent-2); transform:scale(1.08); }
.st-edit-icon{ width:30px; height:30px; border-radius:50%; border:1px solid var(--line); background:#fff;
  color:var(--ink-2); display:flex; align-items:center; justify-content:center; cursor:pointer;
  transition:color .16s, border-color .16s, background .16s; }
.st-edit-icon:hover{ color:var(--accent); border-color:var(--accent); background:var(--accent-muted); }
.st-id{ min-width:0; }
.st-name{ font-size:17px; font-weight:800; }
.st-badges{ display:flex; gap:6px; margin-top:6px; flex-wrap:wrap; }
/* 可编辑标签悬停反馈（漏斗状态 / 意向） */
.st-badges .st-tag-edit{ cursor:pointer; transition:box-shadow .16s, filter .16s; }
.st-badges .st-tag-edit:hover{ box-shadow:0 0 0 1.5px currentColor; }
.st-meta{ display:flex; flex-wrap:wrap; gap:8px; margin-top:12px; }
.st-meta-item{ display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--ink-2);
  background:var(--bg); padding:5px 10px; border-radius:8px; }
.st-meta-item span{ color:var(--ink-3); }
.st-tags{ display:flex; gap:6px; flex-wrap:wrap; margin-top:12px; }
.st-actions{ display:flex; gap:8px; margin-top:14px; flex-wrap:wrap; }
.st-actions .btn{ flex:1; min-width:104px; padding:8px 10px; font-size:13px; }

/* 跟进记录 */
.fu-head{ display:flex; justify-content:flex-end; margin-bottom:10px; }
.fu-item{ display:flex; gap:12px; padding:11px 0; border-bottom:1px solid var(--line); }
.fu-item:last-child{ border-bottom:none; }
.fu-dot{ width:9px; height:9px; border-radius:50%; background:var(--accent); margin-top:5px; flex:none; box-shadow:0 0 0 3px var(--accent-muted); }
.fu-body{ flex:1; min-width:0; }
.fu-content{ font-size:13.5px; line-height:1.6; color:var(--ink); }
.fu-meta{ display:flex; align-items:center; gap:8px; margin-top:6px; font-size:11px; color:var(--ink-3); flex-wrap:wrap; }

/* 档案内申请列表 */
.st-app-list{ padding:0 14px; }
.app-row{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:13px 0; border-bottom:1px solid var(--line); }
.app-row:last-child{ border-bottom:none; }
.ar-main{ min-width:0; }
.ar-name{ font-size:14px; font-weight:700; }
.ar-meta{ display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.ar-acts{ display:flex; gap:8px; flex:none; }
.ar-acts .btn{ padding:6px 10px; font-size:12px; }

/* 来源列表 / 官网账号 */
.src-item{ display:flex; align-items:center; gap:8px; padding:10px 0; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.src-item:last-child{ border-bottom:none; }
.src-id{ font-size:12px; color:var(--ink-3); font-family:ui-monospace, SFMono-Regular, Menlo, monospace; }

/* 会话记录 */
.ses-item{ padding:11px 0; border-bottom:1px solid var(--line); }
.ses-item:last-child{ border-bottom:none; }
.ses-t{ font-size:13.5px; font-weight:600; display:flex; align-items:center; gap:6px; }
.ses-m{ font-size:11.5px; color:var(--ink-3); margin-top:4px; }

/* 学生记忆 */
.mem-item{ padding:11px 0; border-bottom:1px solid var(--line); }
.mem-item:last-child{ border-bottom:none; }
.mem-t{ font-size:13.5px; font-weight:700; display:flex; align-items:center; gap:6px; }
.mem-m{ display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.mem-note{ font-size:12px; color:var(--ink-2); margin-top:6px; line-height:1.6; }
.mem-p{ font-size:11px; color:var(--ink-3); margin-top:4px; }

/* 漏斗状态流转 */
.st-flow{ display:flex; flex-direction:column; gap:8px; margin:14px 0 4px; }
.flow-opt{ display:flex; align-items:center; gap:10px; padding:11px 13px; border:1px solid var(--line);
  border-radius:10px; cursor:pointer; font-size:13.5px; font-weight:600; color:var(--ink-2); }
.flow-opt.on{ border-color:var(--accent); background:var(--accent-muted); color:var(--accent); }
.flow-dot{ width:10px; height:10px; border-radius:50%; flex:none; }

/* 手动合并 */
.merge-list{ margin:12px 0 4px; display:flex; flex-direction:column; gap:8px; }
.merge-item{ display:flex; align-items:center; gap:10px; padding:11px 13px; border:1px solid var(--line);
  border-radius:10px; cursor:pointer; flex-wrap:wrap; }
.merge-item:hover{ border-color:var(--accent); }
.mrg-cb{ flex:none; }
.mrg-name{ font-size:13.5px; font-weight:700; }
.mrg-meta{ font-size:12px; color:var(--ink-3); }
.mrg-src{ display:flex; gap:5px; flex-wrap:wrap; margin-left:auto; }

/* 弹层内申请详情（从档案进入） */
.modal-body{ max-height:60vh; overflow-y:auto; padding-top:2px; }

/* ============================================================
   首页「我的学生」（dashboard.js）· 统一学生列表
   ============================================================ */
/* 统计卡（复用 ov-grid / ov-card） */
.dash-stats{ margin-bottom:14px; }
.dash-stats .ov-card{ cursor:pointer; }
.dash-stats .ov-card.pending{ border-color:#fde68a; background:#fffbeb; }
.dash-stats .ov-card.pending .ov-ic{ background:#fef3c7; color:#b45309; }
.dash-stats .ov-card:hover{ border-color:var(--accent); }

/* 学生筛选条：漏斗 Tab + 关键词 */
.stu-filter{ display:flex; align-items:center; gap:10px; margin-bottom:10px; flex-wrap:wrap; }
.stu-filter .chips{ flex:1; min-width:0; }
.stu-filter .search-box{ flex:1 1 100%; min-width:0; max-width:none; } /* 移动端独占一行，避免挤压漏斗 Tab 筛选项 */

/* 来源标签筛选 */
.src-filter{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }
.src-filter .sf{ padding:5px 12px; border-radius:999px; font-size:11px; font-weight:600; background:#fff;
  border:1px solid var(--line); color:var(--ink-2); cursor:pointer; transition:border-color .16s, color .16s, background .16s; }
.src-filter .sf:hover:not(.on){ border-color:var(--accent); color:var(--accent); background:var(--accent-muted); }
.src-filter .sf.on{ background:var(--accent); border-color:var(--accent); color:#fff; }

/* 学生列表行 */
.stu-row{ display:flex; align-items:center; gap:12px; background:var(--bg-card); border:1px solid var(--line);
  border-radius:var(--radius); padding:13px 14px; margin-bottom:10px; box-shadow:var(--shadow); cursor:pointer;
  transition:border-color .18s, transform .18s, box-shadow .18s; }
.stu-row:hover{ transform:translateY(-1px); border-color:var(--accent); }
.stu-row.pending{ background:#fef3c7; border-color:#fde68a; }
.stu-row.pending:hover{ border-color:#f59e0b; }
.stu-row.pending .stu-ava{ background:#fff7e6; color:#b45309; }
.stu-ava{ width:42px; height:42px; border-radius:50%; background:var(--accent-muted); color:var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:17px; font-weight:800; flex:none; }
.stu-main{ flex:1; min-width:0; }
.stu-name{ font-size:15px; font-weight:700; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.stu-meta{ display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.stu-follow{ font-size:11px; color:#b45309; display:flex; align-items:center; gap:4px; margin-top:6px; }
.stu-follow.overdue{ color:var(--danger); font-weight:700; }
.stu-right{ flex:none; display:flex; flex-direction:column; align-items:flex-end; gap:6px; }
.stu-empty{ text-align:center; color:var(--ink-3); font-size:13px; padding:44px 16px; line-height:1.9; }
.stu-empty .e{ display:flex; justify-content:center; margin-bottom:10px; color:var(--ink-3); opacity:.55; }
.stu-loadmore{ text-align:center; padding:6px 0 16px; }
.stu-loadmore .btn{ padding:8px 26px; }

/* 学生列表卡片在 PC 端保持单列更利于阅读 */
@media (min-width:1024px){
  .stu-list{ display:block; }
}


/* ============================================================
   顾问工作台 · 工作台首页（dashboard.js）配套样式
   问候横幅 / 统计卡 / 漏斗筛选 / 学生列表卡片化 / 待确认高亮
   ============================================================ */

/* ---------- 问候横幅 ---------- */
.dash-hero{
  position:relative;
  border-radius:18px;
  padding:22px 20px;
  margin-bottom:16px;
  color:#fff;
  background:linear-gradient(135deg, #0f2740 0%, #1f4e8c 62%, #2f6bb8 100%);
  box-shadow:0 10px 28px rgba(15,39,64,.28);
  overflow:hidden;
  isolation:isolate;
}
.dash-hero::before,
.dash-hero::after{
  content:"";
  position:absolute;
  border-radius:50%;
  z-index:-1;
}
.dash-hero::before{ right:-48px; top:-58px; width:200px; height:200px; background:radial-gradient(circle, rgba(255,255,255,.16), transparent 68%); }
.dash-hero::after{ left:-42px; bottom:-72px; width:160px; height:160px; background:radial-gradient(circle, rgba(47,107,184,.55), transparent 70%); }
.dash-hero-date{ font-size:12px; letter-spacing:.6px; opacity:.85; }
.dash-hero-greet{ font-size:22px; font-weight:800; margin-top:8px; line-height:1.3; }
.dash-hero-quote{ font-size:12.5px; margin-top:10px; opacity:.92; line-height:1.65; }

/* 移动端隐藏工作台标题头，避免与问候横幅视觉重复 */
@media (max-width:1023px){
  .dash-head{ display:none; }
}

/* ---------- 统计卡（dash-stats）卡片式重构 ---------- */
.dash-stats{ margin-bottom:16px; }
.dash-stats .ov-card{
  display:flex;
  align-items:center;
  gap:10px;
  padding:12px 14px;
  cursor:pointer;
  position:relative;
  transition:border-color .18s, transform .18s, box-shadow .18s;
}
.dash-stats .ov-card:active{ transform:scale(.98); }
.dash-stats .ov-card-ic{
  width:36px; height:36px; border-radius:10px;
  display:flex; align-items:center; justify-content:center;
  background:var(--tint); color:var(--color);
  flex:none;
}
.dash-stats .ov-card-body{ flex:1; min-width:0; }
.dash-stats .ov-v{ font-size:20px; font-weight:800; font-family:var(--serif); line-height:1.1; }
.dash-stats .ov-l{ font-size:11px; color:var(--ink-3); margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash-stats .ov-card-go{
  color:var(--ink-3); opacity:.45;
  display:flex; flex:none;
  transition:opacity .18s, transform .18s;
}
/* 移动端统计卡 2 列布局 */
@media (max-width:1023px){
  .dash-stats.ov-grid{ grid-template-columns:repeat(2,1fr); gap:10px; }
}
/* PC 端统计卡 4 列 + 悬停动效 */
@media (min-width:1024px){
  .dash-stats.ov-grid{ grid-template-columns:repeat(4,1fr); gap:10px; }
  .dash-stats .ov-card-go{ opacity:0; }
  .dash-stats .ov-card:hover{ border-color:var(--accent); box-shadow:0 6px 18px rgba(20,35,60,.1); transform:translateY(-1px); }
  .dash-stats .ov-card:hover .ov-card-go{ opacity:.7; transform:translateX(2px); }
}

/* ---------- 漏斗 Tab 横向滚动 ---------- */
.chips-scroll{
  display:flex;
  flex-wrap:nowrap;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  -ms-overflow-style:none;
  padding-bottom:2px;
}
.chips-scroll::-webkit-scrollbar{ display:none; }
.chips-scroll .chip{ flex:none; white-space:nowrap; }
.stu-filter{ margin-bottom:12px; }

/* ---------- 关键词搜索框 ---------- */
.search-block{
  width:100%;
  display:flex;
  align-items:center;
  gap:6px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:20px;
  padding:9px 14px;
  color:var(--ink-3);
  margin-bottom:12px;
  box-shadow:0 1px 2px rgba(20,35,60,.04);
}
.search-block input{ flex:1; border:none; outline:none; font-size:13px; background:transparent; }
@media (min-width:1024px){
  .search-block{ width:320px; margin-left:auto; }
  .stu-filter .search-box{ flex:1 1 0; min-width:150px; max-width:240px; } /* 桌面端与漏斗 Tab 同行 */
}

/* ---------- 来源筛选横向滚动 ---------- */
.src-scroll{
  flex-wrap:nowrap;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  -ms-overflow-style:none;
  padding-bottom:2px;
}
.src-scroll::-webkit-scrollbar{ display:none; }
.src-scroll .sf{ flex:none; white-space:nowrap; }

/* ---------- 学生行卡片 + 状态色条 + 右箭头 ---------- */
.stu-row{ position:relative; overflow:hidden; }
.stu-row::before{
  content:"";
  position:absolute;
  left:0; top:0; bottom:0;
  width:4px;
  background:var(--stu-color, #64748b);
}
.stu-row-pending::before{ --stu-color:#f59e0b; }
.stu-row-lead::before{ --stu-color:#3b82f6; }
.stu-row-contacted::before{ --stu-color:#8b5cf6; }
.stu-row-signed::before{ --stu-color:#10b981; }
.stu-row-applying::before{ --stu-color:#06b6d4; }
.stu-row-closed::before{ --stu-color:#64748b; }
.stu-row-lost::before{ --stu-color:#e11d48; }
/* 待确认学生行高亮（浅黄底 + 琥珀边框 + 头像配色） */
.stu-row.pending{ background:#fffdf5; border-color:#f7e6bd; }
.stu-row.pending:hover{ border-color:#f59e0b; }
.stu-row.pending .stu-ava{ background:#fff3d6; color:#b45309; }
.stu-chev{
  color:var(--ink-3); opacity:.4;
  display:flex; flex:none;
  transition:opacity .18s, transform .18s;
}
.stu-row:hover .stu-chev{ opacity:.85; transform:translateX(2px); }
/* 逾期/待跟进红色角标 */
.stu-follow em{
  font-style:normal;
  font-size:10px; font-weight:700;
  color:#fff; background:var(--danger);
  padding:1px 6px; border-radius:999px;
  margin-left:3px;
}

/* 移动端学生行卡片化（圆角 + 大头像 + 大字号） */
@media (max-width:1023px){
  .stu-row{ border-radius:16px; padding:14px 12px; margin-bottom:10px; }
  .stu-ava{ width:44px; height:44px; font-size:18px; }
  .stu-name{ font-size:15px; }
  .stu-follow{ margin-top:6px; }
}
.ca-sug-time{ font-size:11px; color:var(--ink-3); white-space:nowrap; flex-shrink:0; line-height:1.6; }

/* ============================================================
   2026-08-11 UI 交互重构 v4：工作台首页 + 通话助手
   三档卡片 / 品牌渐变 / 今日必办 / 行内快捷 / 搜索高亮 / 筛选痕迹
   REC 呼吸 / 建议强调 / 状态灯 / 学生详情折叠 / 收尾闭环 / 导览 / 空态插画
   ============================================================ */

/* ---------- 设计变量补充 ---------- */
:root{
  --grad-brand: linear-gradient(135deg, #0f2740 0%, #1f4e8c 62%, #2f6bb8 100%);
  --grad-brand-soft: linear-gradient(135deg, #eaf1fb 0%, #f5f9ff 100%);
  --card-main-bg: #f5f9ff;
  --card-sub-bg: #f8fafc;
}

/* ---------- 三档卡片：主卡 / 标准卡 / 副卡 ---------- */
.card-main{
  background:var(--card-main-bg);
  border:1px solid #cfe0f5;
  border-left:4px solid var(--accent);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:16px;
}
.card-sub{
  background:var(--card-sub-bg);
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  padding:12px 14px;
}
.grad-text{
  background:var(--grad-brand);
  -webkit-background-clip:text;
  background-clip:text;
  color:transparent;
}

/* ---------- 今日必办（首页行动型主页核心） ---------- */
.dash-todo{ padding:14px 16px; margin-bottom:14px; }
.dash-todo-head{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.dash-todo-title{ display:flex; align-items:center; gap:7px; font-size:13.5px; font-weight:800; color:var(--ink); }
.dash-todo-title svg{ color:var(--accent); }
.dash-todo-count{ margin-left:auto; font-size:11px; font-weight:700; color:var(--accent); background:var(--accent-muted);
  padding:2px 9px; border-radius:999px; }
.todo-list{ display:flex; flex-direction:column; gap:8px; }
.todo-item{ display:flex; align-items:center; gap:10px; background:#fff; border:1px solid var(--line);
  border-radius:10px; padding:9px 12px; transition:border-color .16s, transform .16s; }
.todo-item:hover{ border-color:var(--accent); }
.todo-item.overdue{ border-color:#fcd9a8; background:#fffdf7; }
.todo-ic{ width:30px; height:30px; border-radius:8px; flex:none; display:flex; align-items:center; justify-content:center;
  background:var(--accent-muted); color:var(--accent); }
.todo-ic.hot{ background:#fff1d6; color:#d97706; }
.todo-main{ flex:1; min-width:0; }
.todo-name{ font-size:13.5px; font-weight:700; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.todo-name .m-tag{ margin-left:4px; }
.todo-sub{ font-size:11.5px; color:var(--ink-3); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.todo-act{ flex:none; }
.todo-act .btn{ padding:6px 12px; font-size:12px; }
.todo-empty{ display:flex; align-items:center; gap:10px; color:#16a34a; font-size:13px; font-weight:600;
  background:#f0fdf4; border:1px dashed #bbe7c9; border-radius:10px; padding:12px 14px; }

  /* ---------- 今日必办 · 确认建档弹层 ---------- */
  .df-cfm-stu{ background:var(--bg); border:1px solid var(--line); border-radius:10px; padding:10px 12px; margin:12px 0; }
  .df-cfm-name{ font-size:14px; font-weight:800; color:var(--ink); }
  .df-cfm-src{ margin-top:6px; display:flex; flex-wrap:wrap; gap:6px; }
  .df-cfm-tip{ display:flex; align-items:flex-start; gap:6px; font-size:11.5px; line-height:1.6; color:var(--ink-3);
    background:#f8fafc; border:1px dashed var(--line); border-radius:8px; padding:8px 10px; }
  .df-cfm-tip svg{ flex:none; margin-top:1px; color:var(--accent); }

/* ---------- 统计卡 count-up + 角标 ---------- */
.dash-stats .ov-v{ transition:color .2s; }
.ov-card .ov-tag{ position:absolute; top:8px; right:8px; font-size:10px; font-weight:700; color:var(--color);
  background:var(--tint); padding:1px 7px; border-radius:999px; }
.dash-stats .ov-card.ov-card-follow{ border-color:#fed7aa; background:#fffdf9; }
.dash-stats .ov-card.ov-card-follow .ov-card-ic{ background:#ffedd5; color:#d97706; }

/* ---------- 列表行内快捷（☎ 打电话 / ✎ 快速记跟进） ---------- */
.stu-quick{ display:flex; align-items:center; gap:6px; flex:none; }
.stu-quick-btn{ width:30px; height:30px; border-radius:9px; display:flex; align-items:center; justify-content:center;
  background:#fff; border:1px solid var(--line); color:var(--ink-2); cursor:pointer;
  transition:border-color .15s, color .15s, background .15s, transform .15s; }
.stu-quick-btn:hover{ border-color:var(--accent); color:var(--accent); background:var(--accent-muted); }
.stu-quick-btn.call:hover{ border-color:#16a34a; color:#16a34a; background:#f0fdf4; }
.stu-quick-btn.note:hover{ border-color:#d97706; color:#d97706; background:#fffbeb; }
.stu-quick-btn:active{ transform:scale(.92); }
.stu-row:hover .stu-quick-btn{ border-color:#cfe0f5; }
.stu-quick-btn.pend-edit:hover{ border-color:#2563eb; color:#2563eb; background:#eff6ff; }
.stu-quick-btn.pend-confirm:hover{ border-color:#16a34a; color:#16a34a; background:#f0fdf4; }
.stu-quick-btn.pend-del:hover{ border-color:#dc2626; color:#dc2626; background:#fef2f2; }
@media (max-width:479px){
  .stu-quick{ gap:4px; }
  .stu-quick-btn{ width:26px; height:26px; border-radius:8px; }
}

/* ---------- 搜索高亮 + 搜索清除 ---------- */
.hl{ background:#fde68a; color:#92400e; border-radius:3px; padding:0 1px; }
.search-clear{ width:22px; height:22px; border-radius:50%; flex:none; display:flex; align-items:center; justify-content:center;
  color:var(--ink-3); background:var(--bg); border:none; cursor:pointer; opacity:.8; }
.search-clear:hover{ background:var(--danger-muted); color:var(--danger); opacity:1; }

/* ---------- 筛选条件条（筛选痕迹，一键清除） ---------- */
.dash-filterbar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; background:#fff;
  border:1px solid var(--line); border-radius:12px; padding:8px 12px; margin-bottom:12px; }
.dash-filterbar .fb-t{ font-size:11.5px; color:var(--ink-3); display:flex; align-items:center; gap:5px; }
.dash-filterbar .fb-t svg{ color:var(--accent); }
.fb-chip{ display:inline-flex; align-items:center; gap:5px; background:var(--accent-muted); color:var(--accent);
  font-size:11.5px; font-weight:600; border-radius:999px; padding:3px 10px; }
.fb-chip button{ background:none; border:none; color:var(--accent); font-size:13px; line-height:1; cursor:pointer; padding:0; margin-left:2px; }
.fb-chip button:hover{ color:var(--danger); }
.fb-clear{ margin-left:auto; background:none; border:none; color:var(--ink-3); font-size:11.5px; cursor:pointer;
  display:flex; align-items:center; gap:4px; padding:3px 6px; border-radius:6px; }
.fb-clear:hover{ color:var(--danger); background:var(--danger-muted); }

/* ---------- 漏斗 Tab 数量角标 ---------- */
.chip .tab-badge{ display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px;
  font-size:10px; font-weight:700; color:var(--ink-3); background:var(--bg); border-radius:999px; margin-left:4px; padding:0 4px; }
.chip.on .tab-badge{ color:#fff; background:rgba(255,255,255,.28); }

/* ---------- 申请阶段漏斗小图（工作台首页，纯前端聚合） ---------- */
.dash-funnel-card{ padding:12px 14px; margin-bottom:14px; }
.dash-funnel-head{ display:flex; align-items:center; gap:7px; font-size:13px; font-weight:800; color:var(--ink); margin-bottom:8px; }
.dash-funnel-head svg{ color:var(--accent); }
.dash-funnel-head .df-note{ margin-left:auto; font-size:11px; font-weight:500; color:var(--ink-3); }
.dash-funnel{ display:flex; align-items:stretch; height:38px; border-radius:9px; overflow:hidden; background:var(--bg);
  border:1px solid var(--line); }
.df-seg{ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; color:#fff;
  font-size:10.5px; font-weight:700; min-width:40px; transition:filter .15s; cursor:pointer; position:relative; }
.df-seg:hover{ filter:brightness(1.08); }
.df-seg .df-v{ font-size:12px; font-weight:800; line-height:1.1; }
.df-seg .df-l{ font-size:9px; opacity:.9; line-height:1; white-space:nowrap; }
.df-seg.empty{ background:var(--bg) !important; color:var(--ink-3); border-left:1px dashed var(--line); font-size:10px; font-weight:500; }
.df-legend{ display:flex; flex-wrap:wrap; gap:10px; margin-top:8px; }
.df-legend span{ display:inline-flex; align-items:center; gap:5px; font-size:11px; color:var(--ink-3); }
.df-legend i{ width:9px; height:9px; border-radius:3px; display:inline-block; }

/* ---------- 通话助手：REC 呼吸 + 状态灯 + 建议强调 ---------- */
.ca-rec-wrap{ display:inline-flex; align-items:center; gap:7px; background:rgba(220,38,38,.1);
  border:1px solid rgba(220,38,38,.25); border-radius:999px; padding:3px 11px 3px 9px; }
.ca-rec-dot{ width:9px; height:9px; border-radius:50%; background:#dc2626; animation:caBreath 1.1s ease-in-out infinite;
  box-shadow:0 0 0 0 rgba(220,38,38,.5); }
@keyframes caBreath{
  0%{ box-shadow:0 0 0 0 rgba(220,38,38,.5); }
  70%{ box-shadow:0 0 0 7px rgba(220,38,38,0); }
  100%{ box-shadow:0 0 0 0 rgba(220,38,38,0); }
}
.ca-rec-text{ font-size:11px; font-weight:800; color:#dc2626; letter-spacing:.4px; }
#caStateBar .ca-red-dot{ display:none; }   /* 升级为 ca-rec-wrap（保留旧点隐藏，避免重复） */

/* 状态灯（语音识别 / AI 解析 人话化） */
.ca-lamps{ display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
.ca-lamp{ display:inline-flex; align-items:center; gap:6px; background:#fff; border:1px solid var(--line);
  border-radius:999px; padding:4px 11px; font-size:11.5px; color:var(--ink-2); }
.ca-lamp .ca-lamp-dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.ca-lamp.on .ca-lamp-dot{ background:#16a34a; box-shadow:0 0 0 3px rgba(22,163,74,.15); }
.ca-lamp.on{ border-color:#bbe7c9; color:#15803d; }
.ca-lamp.off .ca-lamp-dot{ background:#94a3b8; }
.ca-lamp.off{ color:var(--ink-3); }
.ca-lamp .ca-lamp-q{ border:none; background:none; color:var(--ink-3); font-size:11px; cursor:pointer; padding:0; line-height:1; }
.ca-lamp .ca-lamp-q:hover{ color:var(--accent); }
.ca-lamp-tip{ font-size:11.5px; color:var(--ink-3); margin-top:6px; line-height:1.6; }

/* 建议卡强调（最重要的内容长得最重要） */
.card-sug .card-main{ background:var(--card-main-bg); }
.ca-sug.ca-sug-main{ background:var(--card-main-bg); border:1px solid #cfe0f5; border-left:4px solid var(--accent); }
.ca-sug.ca-sug-main .ca-sug-q{ background:#fff; border:1px solid #cfe0f5; }
/* 建议"有用/不准"沉淀 */
.ca-sug-fb{ display:inline-flex; align-items:center; gap:4px; opacity:.55; transition:opacity .15s; }
.ca-sug-fb:hover{ opacity:1; }
.ca-sug-fb button{ background:none; border:1px solid var(--line); border-radius:999px; font-size:11px; color:var(--ink-3);
  padding:2px 8px; cursor:pointer; line-height:1.5; }
.ca-sug-fb button:hover{ border-color:var(--accent); color:var(--accent); }
.ca-sug-fb button.voted{ border-color:var(--accent); color:var(--accent); background:var(--accent-muted); font-weight:700; }
.ca-sug-fb button.voted.bad{ border-color:var(--danger); color:var(--danger); background:var(--danger-muted); }

/* 字幕"正在识别"呼吸光标 */
.ca-partial{ padding:5px 0; color:var(--accent); word-break:break-all; font-size:13px; display:flex; gap:3px; align-items:center; }
.ca-caret{ width:2px; height:14px; background:var(--accent); display:inline-block; animation:caCaret 0.9s steps(2) infinite; flex:none; }
@keyframes caCaret{ 0%,100%{ opacity:1; } 50%{ opacity:0; } }

/* ---------- 通话助手：收尾闭环 ---------- */
.ca-confirm-cta{ display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); }
.ca-confirm-cta .btn{ flex:1; min-width:120px; }
.ca-summary-card{ background:#f0fdf4; border:1px solid #bbe7c9; border-radius:10px; padding:11px 13px; margin-top:8px;
  font-size:12.5px; color:#14532d; line-height:1.7; white-space:pre-wrap; word-break:break-all; }
.ca-summary-card .sec-title{ margin:0 0 6px; color:#15803d; }
/* 结束通话轻确认条 */
.ca-light-confirm{ display:flex; align-items:center; gap:8px; background:#fff7ed; border:1px solid #fdba74;
  border-radius:10px; padding:9px 12px; margin-top:8px; font-size:12.5px; color:#9a3412; flex-wrap:wrap; }
.ca-light-confirm b{ font-weight:700; }
.ca-light-confirm .ca-lc-acts{ margin-left:auto; display:flex; gap:6px; }
.ca-light-confirm .btn{ padding:5px 12px; font-size:12px; }

/* ---------- 通话助手：学生下拉"最近使用"分组 ---------- */
.ca-cust-group{ padding:7px 12px 3px; font-size:11px; font-weight:700; color:var(--ink-3);
  background:#fafbfc; letter-spacing:.4px; border-bottom:1px solid var(--line); }
.ca-cust-item.recent{ background:#f8fbff; }

/* ---------- 通话记录：参谋时间轴 ---------- */
.ca-timeline{ position:relative; margin-top:6px; }
.tl-row{ position:relative; padding:0 0 12px 18px; }
.tl-row::before{ content:""; position:absolute; left:5px; top:6px; bottom:-2px; width:2px; background:var(--line); }
.tl-row:last-child::before{ display:none; }
.tl-dot{ position:absolute; left:0; top:4px; width:12px; height:12px; border-radius:50%; background:var(--accent);
  border:2px solid #fff; box-shadow:0 0 0 2px var(--accent-muted); }
.tl-row.tl-sug .tl-dot{ background:var(--module-5); box-shadow:0 0 0 2px #ede9fe; }
.tl-row.tl-sug{ background:#faf8ff; border:1px solid #ede9fe; border-radius:9px; padding:8px 10px 8px 18px; margin-bottom:8px; }
.tl-row.tl-sug::before{ display:none; }
.tl-time{ font-size:10.5px; color:var(--ink-3); }
.tl-text{ font-size:12.5px; color:var(--ink); line-height:1.6; margin-top:2px; word-break:break-all; }
.tl-sug .tl-text{ color:#5b21b6; font-weight:500; }
.tl-sug .tl-tag{ display:inline-flex; align-items:center; gap:4px; font-size:10px; font-weight:700; color:#7c3aed;
  background:#ede9fe; border-radius:999px; padding:1px 7px; margin-bottom:4px; }

/* ---------- 学生详情：主次按钮 + 折叠只读 + 申请阶段进度 ---------- */
.st-actions .btn.primary{ background:var(--accent); color:#fff; }
.st-actions .btn:first-child{ background:var(--accent); color:#fff; }
.st-actions .btn:first-child:hover{ filter:brightness(1.08); }
.st-actions .btn.danger-ghost{ order:10; }
.st-more-btn{ background:none; border:1px dashed var(--line); border-radius:10px; width:100%; padding:10px;
  color:var(--ink-2); font-size:13px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center;
  gap:6px; margin-top:12px; transition:border-color .16s, color .16s, background .16s; }
.st-more-btn:hover{ border-color:var(--accent); color:var(--accent); background:var(--accent-muted); }
.st-more-btn svg{ transition:transform .2s; }
.st-more-btn.open svg{ transform:rotate(180deg); }
.st-more-body{ margin-top:12px; }
.st-more-body .sec-title{ margin-top:0; }
.st-info-fold{ background:var(--card-sub-bg); border:1px solid var(--line); border-radius:12px; padding:12px 14px; margin-bottom:10px; }
.st-info-fold .fu-fold-t{ font-size:12px; font-weight:700; color:var(--ink-2); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.st-info-fold .fu-fold-t svg{ color:var(--accent); }

/* 申请档案阶段进度条 */
.app-stage{ display:flex; align-items:center; gap:8px; margin-top:8px; }
.app-stage .stg-track{ flex:1; max-width:200px; height:6px; border-radius:6px; background:#eef1f6; overflow:hidden; }
.app-stage .stg-fill{ height:100%; border-radius:6px; background:linear-gradient(90deg, var(--accent), var(--accent-2));
  transition:width .4s ease; }
.app-stage .stg-label{ font-size:11px; color:var(--accent); font-weight:700; white-space:nowrap; }
.app-stage .stg-name{ font-size:12px; color:var(--ink-2); font-weight:600; margin-left:auto; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* ---------- 首次 3 步导览 ---------- */
.tour-layer{ position:fixed; inset:0; z-index:200; pointer-events:none; }
.tour-mask{ position:fixed; inset:0; z-index:201; background:rgba(10,24,44,.5); transition:opacity .25s; }
.tour-bubble{ position:fixed; z-index:202; background:#fff; border-radius:14px; box-shadow:0 16px 48px rgba(10,25,50,.28);
  padding:16px 18px; max-width:300px; animation:tourIn .28s ease; }
@keyframes tourIn{ from{ opacity:0; transform:translateY(10px) scale(.97); } to{ opacity:1; transform:none; } }
.tour-bubble .tb-title{ display:flex; align-items:center; gap:8px; font-size:14px; font-weight:800; color:var(--ink); }
.tour-bubble .tb-title .tb-n{ width:20px; height:20px; border-radius:50%; background:var(--accent); color:#fff; font-size:11px;
  display:flex; align-items:center; justify-content:center; flex:none; }
.tour-bubble .tb-body{ font-size:12.5px; color:var(--ink-2); line-height:1.7; margin-top:8px; }
.tour-bubble .tb-acts{ display:flex; align-items:center; gap:8px; margin-top:12px; }
.tour-bubble .tb-skip{ background:none; border:none; color:var(--ink-3); font-size:12px; cursor:pointer; margin-right:auto; padding:4px; }
.tour-bubble .tb-skip:hover{ color:var(--ink); }
.tour-bubble .tb-next{ background:var(--accent); color:#fff; border:none; border-radius:9px; padding:7px 16px;
  font-size:12.5px; font-weight:700; cursor:pointer; }
.tour-bubble .tb-next:hover{ filter:brightness(1.08); }
.tour-bubble .tb-next.done{ background:var(--module-1); }
.tour-bubble .tb-arrow{ position:absolute; width:0; height:0; border:8px solid transparent; }
.tour-bubble.tb-top .tb-arrow{ border-top-color:#fff; bottom:-14px; left:50%; margin-left:-8px; }
.tour-bubble.tb-bottom .tb-arrow{ border-bottom-color:#fff; top:-14px; left:50%; margin-left:-8px; }
.tour-bubble.tb-left .tb-arrow{ border-left-color:#fff; right:-14px; top:18px; }
.tour-bubble.tb-right .tb-arrow{ border-right-color:#fff; left:-14px; top:18px; }

/* ---------- 空态插画化（纯 CSS 简易插画） ---------- */
.stu-empty-art{ width:76px; height:76px; margin:0 auto 12px; border-radius:22px; display:flex; align-items:center; justify-content:center;
  background:var(--grad-brand-soft); color:var(--accent); box-shadow:inset 0 0 0 1px #cfe0f5; position:relative; }
.stu-empty-art::after{ content:""; position:absolute; right:-6px; bottom:-6px; width:22px; height:22px; border-radius:8px;
  background:#fff; border:1px solid var(--line); box-shadow:var(--shadow); }
.stu-empty-steps{ display:flex; flex-direction:column; gap:6px; max-width:340px; margin:14px auto 0; text-align:left; }
.stu-empty-steps .es-row{ display:flex; align-items:center; gap:8px; background:#fff; border:1px solid var(--line);
  border-radius:10px; padding:9px 12px; font-size:12.5px; color:var(--ink-2); }
.stu-empty-steps .es-row b{ color:var(--accent); font-size:12px; }
.stu-empty-steps .es-row .es-act{ margin-left:auto; flex:none; }
.stu-empty-steps .es-row .es-act .btn{ padding:5px 12px; font-size:12px; }

/* ---------- 通话助手：准备态主卡（专业录音间视觉） ---------- */
.ca-hero-main{ position:relative; overflow:hidden; padding:16px 18px; }
.ca-hero-main .ca-hero-title{ display:flex; align-items:center; gap:8px; font-size:15px; font-weight:800; color:var(--ink); }
.ca-hero-main .ca-hero-title svg{ color:var(--accent); }
.ca-hero-main .ca-hero-sub{ font-size:12.5px; color:var(--ink-2); line-height:1.7; margin-top:6px; max-width:560px; }
.ca-hero-main .ca-hero-steps{ display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
.ca-hero-step{ display:inline-flex; align-items:center; gap:6px; background:#fff; border:1px solid var(--line);
  border-radius:999px; padding:4px 11px; font-size:11.5px; color:var(--ink-2); }
.ca-hero-step b{ color:var(--accent); font-size:12px; }
.ca-hero-step.on{ border-color:#bbe7c9; background:#f0fdf4; color:#15803d; }
.ca-hero-step.on b{ color:#16a34a; }

/* 结束通话确认弹窗中的撤销 toast（危险操作统一） */
.undo-toast-act{ display:inline-flex; align-items:center; gap:6px; background:rgba(255,255,255,.18); color:#fff;
  border:1px solid rgba(255,255,255,.4); border-radius:999px; padding:3px 12px; font-size:12px; font-weight:700; cursor:pointer; }
.undo-toast-act:hover{ background:rgba(255,255,255,.3); }

/* ---------- 移动端适配 ---------- */
@media (max-width:479px){
  .tour-bubble{ max-width:calc(100vw - 40px); }
  .todo-item{ padding:8px 10px; }
  .todo-act .btn{ padding:5px 10px; }
  .ca-confirm-cta .btn{ min-width:0; }
  .df-legend{ gap:6px; }
  .df-seg .df-l{ font-size:8px; }
  .df-seg{ min-width:36px; }
}
@media (max-width:1023px){
  .st-more-body .card{ padding:10px; }
}

/* ========== 微信登录（登录页，仅微信浏览器显示） ========== */
.wx-login-box{ margin-top:14px; text-align:center; }
.login-divider{ display:flex; align-items:center; gap:10px; color:var(--ink-3); font-size:12px; margin-bottom:12px; }
.login-divider::before,.login-divider::after{ content:""; flex:1; height:1px; background:var(--line); }
.wx-login-btn{
  width:44px; height:44px; border-radius:50%;
  background:#07c160; color:#fff;
  display:inline-flex; align-items:center; justify-content:center;
  padding:0; line-height:1;
  box-shadow:0 2px 10px rgba(7,193,96,.35);
  transition:filter .2s, transform .1s;
}
.wx-login-btn:hover{ filter:brightness(1.08); }
.wx-login-btn:active{ transform:scale(.94); }
.wx-login-btn:disabled{ opacity:.6; }

/* ========== 个人中心：绑定状态徽标（已绑绿 / 未绑灰） ========== */
.bind-status-badge{
  display:inline-flex; align-items:center; gap:4px;
  font-size:11px; font-weight:600; line-height:1;
  padding:3px 8px; border-radius:20px;
  color:var(--ink-3); background:var(--bg);
  flex:none; white-space:nowrap;
}
.bind-status-badge::before{ content:""; width:6px; height:6px; border-radius:50%; background:#c0c8d6; }
.bind-status-badge.on{ color:#15803d; background:#dcfce7; }
.bind-status-badge.on::before{ background:#16a34a; }
/* 个人中心菜单行内徽标：覆盖 .hub-row span 的 flex:1，靠右对齐 */
.hub-row .bind-status-badge{ margin-left:auto; }

/* ========== 信息绑定弹窗：联系方式 Tab ========== */
.contact-tabs{ display:flex; gap:8px; margin-bottom:14px; }
.ct-tab{
  flex:1; height:38px; border-radius:10px;
  border:1px solid var(--line); background:var(--bg);
  color:var(--ink-2); font-size:13px; font-weight:600;
  display:flex; align-items:center; justify-content:center; gap:6px;
  transition:all .2s;
}
.ct-tab.active{ background:var(--accent-muted); border-color:var(--accent); color:var(--accent); }
.ct-tab em{ font-style:normal; font-size:10px; color:#15803d; background:#dcfce7; padding:1px 6px; border-radius:10px; }
.ct-tab:disabled{ opacity:.55; cursor:not-allowed; }

/* ========== 绑定状态展示 / 未绑定提示 ========== */
.bound-show{
  display:flex; align-items:center; justify-content:space-between;
  border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:10px 12px; font-size:14px; color:var(--ink); background:#fafbfd;
}
.bind-tip-line{
  border:1px solid var(--amber-muted); background:var(--amber-muted);
  color:var(--amber); border-radius:var(--radius-sm);
  padding:9px 11px; font-size:13px;
}

/* 信息绑定弹窗：当前绑定值展示条（已绑=绿，未绑=灰） */
.bind-cur{
  border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:9px 11px; font-size:13px; margin-bottom:12px;
  color:var(--ink-2); background:#fafbfd;
}
.bind-cur.bound{ color:#15803d; border-color:#a7f3d0; background:#ecfdf5; }

/* 头像图通用：圆形填充（侧栏/移动端Tab/个人中心共用） */
.avatar-img{ width:100%; height:100%; border-radius:50%; object-fit:cover; display:block; }
/* 个人中心头像：可点击更换 + 右下角相机角标 */
.hub-pavatar{ position:relative; cursor:pointer; }
.hub-pavatar.has-avatar .avatar-img{ box-shadow:0 0 0 3px rgba(255,255,255,.18); }
.hub-pavatar::after{
  content:""; position:absolute; right:-3px; bottom:-3px; width:20px; height:20px; border-radius:50%;
  background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232f6bb8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8h3l2-3h6l2 3h3a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z'/%3E%3Ccircle cx='12' cy='13' r='3.5'/%3E%3C/svg%3E") center/12px 12px no-repeat;
  border:2px solid #fff; box-shadow:0 1px 4px rgba(0,0,0,.3);
}
/* 头像编辑弹层：预览 / 提示 / 按钮 */
.ava-preview{ width:88px; height:88px; border-radius:50%; margin:14px auto 10px; overflow:hidden; display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#2f6bb8,#1f4e8c); color:#fff; }
.ava-preview-img{ width:100%; height:100%; object-fit:cover; }
.ava-preview-letter{ font-size:34px; font-weight:800; }
.ava-tip{ font-size:12px; color:var(--ink-2); text-align:center; margin-bottom:16px; }
.ava-actions{ display:flex; gap:10px; margin-bottom:10px; }
.ava-actions .btn{ flex:1; justify-content:center; }



/* ========== 微信绑定弹窗 ========== */
.wx-status{ margin:6px 0 16px; }
.wx-bound,.wx-unbound{
  display:flex; align-items:center; gap:12px;
  border:1px solid var(--line); border-radius:var(--radius);
  padding:14px; background:#fafbfd;
}
.wx-bound-ic{
  width:44px; height:44px; flex:none; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
}
.wx-bound .wx-bound-ic{ background:#dcfce7; color:#16a34a; }
.wx-unbound .wx-bound-ic{ background:var(--accent-muted); color:var(--accent); }
.wx-bound b,.wx-unbound b{ display:block; font-size:14px; }
.wx-bound p,.wx-unbound p{ font-size:12px; color:var(--ink-3); margin-top:2px; }
.btn.wx-btn{ background:#07c160; color:#fff; display:inline-flex; align-items:center; justify-content:center; gap:6px; }
.btn.wx-btn:hover{ filter:brightness(1.06); }
