/* ===== 企业辅助招聘平台 · 全局样式（简洁大气 · 互联网企业风格） ===== */
/* 设计 token：品牌 #2B6DE8 · 语义绿/琥珀/红 · 中文系统字体栈（内网不引远程字体） */
:root {
  --primary: #2B6DE8;
  --primary-dark: #1f56c4;
  --primary-light: #e8f0fe;
  --bg: #f5f7fa;
  --card: #ffffff;
  --text: #1f2d3d;
  --text-secondary: #5e6d82;
  --text-tertiary: #8a94a6;
  --border: #e4e9f0;
  --green: #0f9d58;
  --green-bg: #e6f4ea;
  --green-deep: #1a7f4b;
  --red: #e5484d;
  --red-bg: #fdecec;
  --red-deep: #b32d33;
  --amber: #f5a623;
  --amber-bg: #fef6e7;
  --amber-deep: #9a6a12;
  --gray-bg: #f1f3f6;
  --danger-solid: #d9484f;
  --radius: 10px;
  --radius-sm: 6px;
  --radius-lg: 12px;
  --shadow: 0 2px 12px rgba(31, 45, 61, 0.08);
  --shadow-sm: 0 1px 4px rgba(31, 45, 61, 0.06);
  --focus-ring: 0 0 0 3px rgba(43, 109, 232, 0.22);
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "HarmonyOS Sans SC", sans-serif;
  --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
}

* { margin: 0; padding: 0; box-sizing: border-box; }
body {
  font-family: var(--font-sans);
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
}
/* 无障碍：键盘可达焦点环（WCAG 2.4.7） */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
  border-radius: var(--radius-sm);
}


/* ===== 布局（仅 index.html 壳页使用，子页面无 .layout/.content） ===== */
/* 高度用 dvh 优先、vh 兜底：Edge/Chrome 出现横向滚动条时 100vh 仍按完整视口计算，
   总高会超出视口一截 —— 那就是「底部多出一条白带」的成因之一。overflow:hidden 兜住。 */
.layout { display: flex; height: 100vh; height: 100dvh; overflow: hidden; }
.sidebar {
  width: 220px;
  background: #1c2b3a;
  color: #fff;
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  /* 关键：侧栏自己绝不撑破 .layout。菜单项 + 分组头的高度是动态的，
     视口矮（或浏览器缩放放大）时会超过视口高度 —— 没有这条，
     溢出内容会把整页的可滚动区域顶大，表现为「页面能一直往下滚、滚到底也看不到底」。
     2026-09-21 测试环境运维反馈的现象就来自这里（本地屏高够，看不到）。 */
  overflow: hidden;
}
.logo {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 20px 18px;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.logo-icon {
  width: 34px; height: 34px;
  background: var(--primary);
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: 17px;
}
.logo-text { font-size: 15px; font-weight: 600; letter-spacing: 0.5px; }

/* min-height:0 是 flex 子项的必要修正：默认 min-height:auto 时，导航内容会把 .nav 撑高，
   进而把 .sidebar（乃至整个 .layout）撑破。加 overflow-y:auto 后菜单在侧栏内部滚动。
   深色底配一条细滚动条，避免系统默认滚动条突兀。 */
.nav { flex: 1; min-height: 0; overflow-y: auto; padding: 12px 0; }
.nav::-webkit-scrollbar { width: 6px; }
.nav::-webkit-scrollbar-track { background: transparent; }
.nav::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); border-radius: 3px; }
.nav::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.3); }
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 20px;
  color: rgba(255,255,255,0.72);
  text-decoration: none;
  font-size: 14px;
  border-left: 3px solid transparent;
  transition: all .2s;
}
.nav-item:hover { background: rgba(255,255,255,0.06); color: #fff; }
.nav-item.active {
  background: rgba(43,109,232,0.18);
  color: #fff;
  border-left-color: var(--primary);
  font-weight: 500;
}
.nav-icon { width: 20px; text-align: center; font-size: 15px; }

.sidebar-footer { padding: 16px 20px; border-top: 1px solid rgba(255,255,255,0.08); }
.sys-status { display: flex; align-items: center; gap: 8px; color: rgba(255,255,255,0.5); font-size: 12px; }
.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--green); display: inline-block; }

.main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.header {
  height: 56px;
  background: var(--card);
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 24px;
}
.page-title { font-size: 16px; font-weight: 600; }
.header-right { color: var(--text-secondary); font-size: 13px; }

/* min-height:0 是 flex 子项的必要修正：默认 min-height:auto 会让子项被内容撑开，
   高度就会超过 .layout 的可视区。外层不再滚动（交给 iframe 内部），避免双滚动条。 */
.content { flex: 1; min-height: 0; padding: 20px 24px; overflow: hidden; }
/* display:block 是「底部白条」的正解：iframe 默认 inline，
   行盒会保留 baseline 下方的 descender 空隙（约 4~6px），把 iframe 挤出容器底边。 */
.content iframe { display: block; width: 100%; height: 100%; border: none; background: transparent; }

/* ===== 卡片 ===== */
.card {
  background: var(--card);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 20px;
  margin-bottom: 16px;
}
.card-title {
  font-size: 15px; font-weight: 600;
  margin-bottom: 16px;
  display: flex; align-items: center; gap: 8px;
}
.card-title::before {
  content: ''; width: 4px; height: 16px;
  background: var(--primary); border-radius: 2px;
}

/* 统计卡片（默认桌面 4 列；面试页 .page-interview 内改为 auto-fit 响应式，见面试页移动优先段） */
.stat-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 16px; }
.stat-card {
  background: var(--card);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 18px 20px;
  display: flex; align-items: center; gap: 14px;
}
.stat-icon {
  width: 46px; height: 46px;
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px;
}
.stat-icon.blue { background: var(--primary-light); }
.stat-icon.green { background: var(--green-bg); }
.stat-icon.amber { background: var(--amber-bg); }
.stat-icon.red { background: var(--red-bg); }
.stat-num { font-size: 24px; font-weight: 700; line-height: 1.2; }
.stat-label { color: var(--text-secondary); font-size: 12px; margin-top: 2px; }

/* 工具栏 */
.toolbar {
  display: flex; align-items: center; gap: 12px;
  margin-bottom: 16px; flex-wrap: wrap;
}
.toolbar .spacer { flex: 1; }

/* 按钮 */
.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 16px;
  border-radius: 8px;
  border: 1px solid transparent;
  font-size: 13px;
  cursor: pointer;
  transition: all .2s;
  background: var(--card);
  color: var(--text);
  border-color: var(--border);
  white-space: nowrap;
}
.btn:hover { border-color: var(--primary); color: var(--primary); }
.btn.primary { background: var(--primary); color: #fff; border-color: var(--primary); }
.btn.primary:hover { background: var(--primary-dark); color: #fff; }
.btn.sm { padding: 5px 10px; font-size: 12px; border-radius: 6px; }
/* 图标型小按钮：横向空间紧张的操作列里替代文字按钮，含义靠 title / aria-label 兜底。
   align-self:stretch 让它自动与同行按钮等高（字号不同也不会错位），无需硬编码高度。 */
.btn.sm.icon {
  width: 28px; padding: 5px 0;
  display: inline-flex; align-items: center; justify-content: center;
  align-self: stretch;
  font-size: 13px; line-height: 1;
}
.btn.danger { color: var(--red); border-color: var(--red); background: #fff; }
.btn.danger:hover { background: var(--red); color: #fff; }
.btn.ghost { border-color: transparent; background: transparent; color: var(--primary); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }

/* 输入控件 */
.input, .select, .textarea {
  padding: 8px 12px;
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 13px;
  outline: none;
  transition: border-color .2s;
  background: #fff;
  color: var(--text);
}
.input:focus, .select:focus, .textarea:focus { border-color: var(--primary); }
.textarea { width: 100%; resize: vertical; line-height: 1.6; }
.input { width: 200px; }
.select { width: 150px; }

/* 表格 */
.table-wrap { overflow: auto; }
table.data-table { width: 100%; border-collapse: collapse; }
.data-table th {
  background: var(--gray-bg);
  color: var(--text-secondary);
  font-weight: 500;
  text-align: left;
  padding: 10px 12px;
  font-size: 12px;
  white-space: nowrap;
}
.data-table td {
  padding: 11px 12px;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
  vertical-align: middle;
}
.data-table tr:hover td { background: #f8fafd; }
.data-table .link { color: var(--primary); cursor: pointer; }
.data-table .link:hover { text-decoration: underline; }
.empty { text-align: center; color: var(--text-secondary); padding: 40px 0; }

/* 标签 */
.tag {
  display: inline-flex; align-items: center;
  padding: 3px 10px;
  border-radius: 20px;
  font-size: 12px;
  white-space: nowrap;
}

/* 岗位编号：等宽字体 + 方角，和圆角状态 tag 拉开区分，一眼能认出「这是编号不是状态」 */
.pos-no {
  display: inline-flex; align-items: center;
  font-family: var(--font-mono);
  font-size: 11px; font-weight: 600; letter-spacing: .4px;
  color: var(--primary-dark);
  background: var(--primary-light);
  border: 1px solid #c8dcf7;
  border-radius: var(--radius-sm);
  padding: 1px 6px;
  white-space: nowrap;
  flex-shrink: 0;
}
.pos-no.inline { vertical-align: middle; }

/* 胶囊内部的行内编号：不额外加边框，避免「框中框」发闷 */
.pos-no-inline {
  font-family: var(--font-mono);
  font-size: 11px; font-weight: 700; letter-spacing: .4px;
  margin-right: 5px;
}

/* 岗位编号输入行（分类联动取号） */
.pos-no-row { display: flex; align-items: center; gap: 8px; }
.pos-no-row .input { flex: 1; font-family: var(--font-mono); letter-spacing: .5px; }
.pos-no-tip-warn { color: var(--amber-deep); }
.tag.green { background: var(--green-bg); color: var(--green); }
.tag.red { background: var(--red-bg); color: var(--red); }
.tag.amber { background: var(--amber-bg); color: var(--amber); }
.tag.gray { background: var(--gray-bg); color: var(--text-secondary); }
.tag.blue { background: var(--primary-light); color: var(--primary); }
/* 通用面试轮次徽章（报告页"面试得分"列/其它列表展示；comment-card-v2 内已有专属渐变样式不受影响） */
.round-badge {
  display: inline-block; vertical-align: middle;
  font-size: 11px; font-weight: 600;
  padding: 2px 9px; border-radius: 12px;
  margin: 2px 4px 2px 0; letter-spacing: .3px;
  white-space: nowrap;
}

/* 评分条 */
.score-wrap { display: flex; align-items: center; gap: 8px; min-width: 130px; }
.score-bar {
  flex: 1; height: 8px;
  background: var(--gray-bg);
  border-radius: 4px;
  overflow: hidden;
}
.score-bar > i {
  display: block; height: 100%;
  border-radius: 4px;
  background: var(--primary);
  transition: width .4s;
}
.score-bar.green > i { background: var(--green); }
.score-bar.red > i { background: var(--red); }
.score-bar.amber > i { background: var(--amber); }
.score-num { font-size: 12px; font-weight: 600; min-width: 30px; text-align: right; }

/* 弹窗 */
.modal-mask {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.45);
  display: none; align-items: center; justify-content: center;
  z-index: 100;
}
.modal-mask.show { display: flex; }
.modal {
  background: #fff;
  border-radius: 12px;
  width: 620px;
  max-width: 92vw;
  max-height: 88vh;
  display: flex; flex-direction: column;
  box-shadow: 0 12px 40px rgba(0,0,0,0.2);
}
.modal.lg { width: 860px; }
.modal-header {
  padding: 16px 20px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.modal-header h3 { font-size: 15px; font-weight: 600; }
.modal-close { cursor: pointer; color: var(--text-secondary); font-size: 20px; line-height: 1; }
.modal-close:hover { color: var(--text); }
.modal-body { padding: 20px; overflow: auto; }
.modal-footer {
  padding: 14px 20px;
  border-top: 1px solid var(--border);
  display: flex; justify-content: flex-end; gap: 10px;
}

.form-row { display: flex; align-items: flex-start; margin-bottom: 14px; }
.form-label { width: 90px; flex-shrink: 0; padding-top: 8px; color: var(--text-secondary); font-size: 13px; }
.form-label .req { color: var(--red); margin-left: 2px; }
.form-value { flex: 1; }
.form-tip { font-size: 12px; color: var(--text-secondary); margin-top: 4px; }

/* 评估结果 */
.eval-score-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
.eval-score-box {
  background: var(--gray-bg);
  border-radius: 10px;
  padding: 16px;
  text-align: center;
}
.eval-score-box .num { font-size: 32px; font-weight: 700; color: var(--primary); }
.eval-score-box .label { color: var(--text-secondary); font-size: 13px; margin-top: 4px; }
.point-list { list-style: none; }
.point-list li {
  display: flex; gap: 8px; align-items: flex-start;
  padding: 9px 12px;
  border-radius: 8px;
  margin-bottom: 8px;
  font-size: 13px;
  line-height: 1.5;
}
.point-list li.good { background: var(--green-bg); color: #1a7f4b; }
.point-list li.bad { background: var(--red-bg); color: #c0353a; }
.point-list .category {
  flex-shrink: 0;
  padding: 1px 8px;
  border-radius: 4px;
  font-size: 11px;
  background: rgba(255,255,255,0.7);
  align-self: center;
}

/* 时间线 */
.timeline { position: relative; padding-left: 24px; }
.timeline::before {
  content: ''; position: absolute; left: 7px; top: 8px; bottom: 8px;
  width: 2px; background: var(--border);
}
.timeline-item {
  position: relative;
  margin-bottom: 20px;
  background: var(--card);
  border-radius: 10px;
  box-shadow: 0 2px 8px rgba(31, 45, 61, 0.05);
  overflow: hidden;
}
.timeline-item::before {
  content: '';
  position: absolute;
  left: -21px;
  top: 18px;
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--primary);
  border: 2px solid #fff;
  box-shadow: 0 0 0 2px var(--primary);
  z-index: 2;
}
.timeline-item.good::before { background: var(--green); box-shadow: 0 0 0 2px var(--green); }
.timeline-item.mid::before { background: var(--amber); box-shadow: 0 0 0 2px var(--amber); }
.timeline-item.bad::before { background: var(--red); box-shadow: 0 0 0 2px var(--red); }

/* ===== 面试时间线轮次卡（三区语义结构 · 结论前置 · 移动优先） ===== */
/* 区1：头部 —— 标题/类型/评级 + meta + 操作组 */
.iv-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 14px;
  padding: 12px 14px;
  background: linear-gradient(180deg, #f8fafd 0%, #fefeff 100%);
  border: 1px solid var(--border);
  border-bottom: none;
  border-radius: 10px 10px 0 0;
}
.iv-head-main {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  flex: 1 1 auto;
  min-width: 0;
}
.iv-head-title { font-weight: 700; font-size: 15px; color: var(--text); }
.iv-head-type {
  font-size: 11px; font-weight: 600; color: var(--primary-dark);
  background: var(--primary-light); padding: 2px 8px; border-radius: 6px;
}
.iv-head-meta { color: var(--text-secondary); font-size: 12px; }
/* 面试时间：面试官工作台排定的时间，与「创建时间」区分开（否则两个时间挤一起看不出哪个是约的时间） */
.iv-sched-time {
  color: var(--primary-dark); background: var(--primary-light);
  border-radius: 5px; padding: 1px 6px; font-variant-numeric: tabular-nums; white-space: nowrap;
}
.iv-head-ops {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
  margin-left: auto;
}
.iv-head-ops .btn { white-space: nowrap; }

/* 内容入口（区1内文字链，降级不占通栏） */
.iv-content-link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  border: none;
  background: none;
  color: var(--primary);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 6px;
  transition: background-color .15s;
}
.iv-content-link:hover { background: var(--primary-light); }
.iv-content-link .arrow { font-size: 10px; transition: transform .15s; }
.iv-content-link:hover .arrow { transform: translateX(2px); }

/* 区3：评估区（结论前置） */
.iv-eval-card {
  padding: 12px 14px;
  background: #fbfcfe;
  border: 1px solid var(--border);
  border-radius: 0 0 10px 10px;
  font-size: 13px;
  line-height: 1.7;
}
.iv-eval-block { margin-bottom: 10px; }
.iv-eval-block:last-child { margin-bottom: 0; }
.iv-eval-label {
  display: inline-block;
  font-size: 11px;
  font-weight: 600;
  color: var(--primary-dark);
  background: var(--primary-light);
  padding: 2px 10px;
  border-radius: 12px;
  margin-bottom: 6px;
  letter-spacing: 0.5px;
}
.iv-conclusion {
  border-left: 3px solid var(--primary);
  background: #fff;
  padding: 8px 12px;
  border-radius: 0 8px 8px 0;
  margin: 8px 0;
}
.iv-conclusion .overall-line { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.iv-eval-row { padding-left: 4px; }
.iv-eval-row.dim { color: var(--text-secondary); font-size: 12px; }
.iv-dim-chip {
  display: inline-block;
  font-size: 11px;
  padding: 2px 9px;
  border-radius: 10px;
  margin: 2px 6px 2px 0;
}
.iv-dim-chip.hi { background: var(--green-bg); color: var(--green-deep); }
.iv-dim-chip.mid { background: var(--amber-bg); color: var(--amber-deep); }
.iv-dim-chip.lo { background: var(--red-bg); color: var(--red-deep); }
.iv-next-focus {
  display: inline-block;
  font-size: 11px; color: var(--green-deep);
  background: var(--green-bg);
  padding: 2px 10px; border-radius: 10px;
  margin: 4px 0;
}
.iv-advice { color: var(--text-tertiary); font-size: 12px; }
.iv-comment-block {
  margin-top: 6px;
  border-top: 1px dashed var(--border);
  padding-top: 8px;
}
.iv-comment-author { font-size: 11px; color: var(--text-tertiary); }

/* 面试原文（弹窗文本视图保留） */
.iv-content-title {
  font-size: 11px;
  color: var(--text-secondary);
  margin-bottom: 8px;
  font-weight: 600;
  letter-spacing: 0.5px;
}
@keyframes iv-fade-in {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ===== 面试页 · 候选人列表（表格升级：姓名锚点 + 轮次摘要直读） ===== */
.page-interview .iv-cand-table td { vertical-align: middle; }
/* 候选人格：状态色首字母头像 + 姓名/评估中 + 岗位·电话 meta */
.iv-cand-id { display: flex; align-items: center; gap: 12px; min-width: 0; }
.iv-cand-ava {
  width: 38px; height: 38px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 15px; font-weight: 600;
}
.iv-cand-idm { min-width: 0; }
.iv-cand-nm {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-weight: 600; font-size: 14px;
}
.iv-cand-meta { font-size: 12px; color: var(--text-tertiary); margin-top: 3px; line-height: 1.5; }
/* 面试轮次列：每轮一行（评级徽章 + 摘要两行截断直读） */
.iv-cand-rounds { display: flex; flex-direction: column; gap: 6px; }
.iv-cand-round { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }
.iv-cand-round-rating { flex-shrink: 0; padding-top: 1px; }
.iv-cand-round-sum {
  font-size: 12px; color: var(--text-secondary); line-height: 1.6; min-width: 0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  word-break: break-all;
}
.iv-cand-round-sum.dim { color: var(--text-tertiary); }
/* 面试官列（四个列表页共用）：**仅表格单元格内**做单行 + 超长省略 —— 列表列宽紧张，
   不换行才能保证行高一致；卡片里保持行内（与「面试官：」标签同一行，不拆行）。
   完整姓名与「等 N 人」的明细都在 title 里（鼠标悬停可见）。 */
td .iv-name {
  display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* 面试时间（第 N 轮对应的面试时间，随轮次展示：时间本就属于某一轮，不适合独立成列） */
.iv-cand-round-time {
  flex-shrink: 0; font-size: 11px; color: var(--text-secondary);
  font-variant-numeric: tabular-nums; white-space: nowrap; padding-top: 2px;
}
.iv-cand-empty { font-size: 12px; color: var(--text-tertiary); }
/* 岗位独立列：chip 标签高亮（第七轮） */
.iv-pos-chip {
  display: inline-block; max-width: 100%;
  padding: 3px 10px;
  border-radius: 6px;
  font-size: 12px;
  background: var(--primary-light);
  color: var(--primary-dark);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  vertical-align: middle;
}
.iv-cand-table .iv-col-pos { padding-top: 6px; padding-bottom: 6px; }
/* 操作列：行内直出流转按钮组（第七轮） */
.iv-cand-ops { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.iv-cand-ops .btn { white-space: nowrap; }

/* ===== 面试页 · 移动优先响应式（仅 .page-interview 作用域） ===== */
.page-interview .stat-row { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
/* 面试轮次注脚（首轮/后续轮说明） */
.iv-round-note { font-size: 11px; color: var(--text-tertiary); }
/* 录音转写时间轴（默认三列：说话人 / 时间 / 文本） */
.ts-grid {
  display: grid;
  grid-template-columns: 78px 130px 1fr;
  gap: 8px 12px;
  margin-bottom: 8px;
  line-height: 1.6;
  align-items: start;
}
.ts-spk {
  display: block;
  padding: 2px 0;
  border-radius: 4px;
  font-weight: 600;
  font-size: 12px;
  text-align: center;
}
.ts-time {
  color: var(--text-tertiary);
  font-size: 11px;
  font-family: var(--font-mono);
  padding-top: 2px;
}
.ts-text { word-break: break-word; }
@media (max-width: 640px) {
  .page-interview .stat-card { padding: 14px 16px; gap: 10px; }
  .page-interview .stat-icon { width: 38px; height: 38px; font-size: 18px; }
  .page-interview .stat-num { font-size: 20px; }
  .page-interview .iv-head { flex-direction: column; align-items: stretch; gap: 8px; }
  .page-interview .iv-head-ops { margin-left: 0; justify-content: flex-start; }
  .page-interview .iv-content-link { align-self: flex-start; }
  .page-interview .iv-eval-card { padding: 10px 12px; }
  .page-interview .toolbar .input { width: 100%; }
  .page-interview .toolbar .select { width: 100%; }
  .page-interview .modal { margin: 0; max-width: none; width: 100%; max-height: 100vh; border-radius: 0; }
  .page-interview .form-row { flex-direction: column; }
  .page-interview .form-label { width: auto; padding-top: 0; margin-bottom: 4px; }
  /* 录音转写时间轴：折叠为两行（说话人+时间 同排，文本整行） */
  .page-interview .ts-grid { grid-template-columns: 84px 1fr; }
  .page-interview .ts-text { grid-column: 1 / -1; }
  /* 候选人列表：表格 → 迷你卡（隐藏表头，行转卡片；仅保留核心可见信息） */
  .page-interview .iv-cand-table thead { display: none; }
  .page-interview .iv-cand-table,
  .page-interview .iv-cand-table tbody,
  .page-interview .iv-cand-table tr,
  .page-interview .iv-cand-table td { display: block; width: 100%; box-sizing: border-box; }
  .page-interview .iv-cand-table tr {
    border: 1px solid var(--border); border-radius: var(--radius);
    margin-bottom: 10px; padding: 6px 12px;
  }
  .page-interview .iv-cand-table tr:last-child { margin-bottom: 0; }
  .page-interview .iv-cand-table td { border-bottom: none; padding: 6px 0; }
  .page-interview .iv-cand-table td[data-label]::before {
    content: attr(data-label); display: block;
    font-size: 11px; color: var(--text-tertiary); margin-bottom: 2px;
  }
  .page-interview .iv-cand-id { gap: 10px; }
  .page-interview .iv-cand-ava { width: 34px; height: 34px; font-size: 14px; }
  .page-interview .iv-cand-table .iv-col-ops { padding-top: 8px; }
  .page-interview .iv-cand-table .iv-cand-ops { display: flex; gap: 8px; flex-wrap: wrap; width: 100%; }
  .page-interview .iv-cand-table .iv-cand-ops .btn { flex: 1; justify-content: center; }
}

/* 双栏详情 */
.detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.resume-text {
  background: #fbfcfe;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 14px;
  font-size: 13px;
  line-height: 1.8;
  white-space: pre-wrap;
  max-height: 60vh;
  overflow: auto;
  word-break: break-all;
}

/* 报告 */
.report-score {
  display: flex; align-items: center; gap: 24px;
  padding: 20px;
  background: var(--primary-light);
  border-radius: 12px;
  margin-bottom: 16px;
}
.report-score .big { font-size: 48px; font-weight: 700; color: var(--primary); }
.report-score .sub { color: var(--text-secondary); font-size: 13px; }
.report-section { margin-bottom: 16px; }
.report-section h4 {
  font-size: 14px; font-weight: 600;
  margin-bottom: 8px;
  display: flex; align-items: center; gap: 6px;
}
.report-section h4::before {
  content: ''; width: 4px; height: 14px;
  border-radius: 2px; background: var(--primary);
}
.report-section p { line-height: 1.8; color: var(--text); }

/* 抽屉 */
.drawer-mask {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.45);
  display: none; z-index: 90;
}
.drawer-mask.show { display: block; }
.drawer {
  position: fixed; top: 0; right: -720px;
  width: 720px; max-width: 94vw; height: 100vh;
  background: #fff;
  box-shadow: -8px 0 30px rgba(0,0,0,0.15);
  transition: right .3s;
  z-index: 91;
  display: flex; flex-direction: column;
}
.drawer.show { right: 0; }
.drawer-header {
  padding: 16px 20px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.drawer-body { flex: 1; padding: 20px; overflow: auto; }

/* 打印 */
@media print {
  .sidebar, .header, .toolbar, .btn, .modal-close { display: none !important; }
  .layout { display: block; }
  .content { padding: 0; }
  body { background: #fff; }
}

/* 提示 */
.toast-wrap { position: fixed; top: 20px; left: 50%; transform: translateX(-50%); z-index: 999; }
.toast {
  background: rgba(31,45,61,0.92);
  color: #fff;
  padding: 10px 20px;
  border-radius: 8px;
  font-size: 13px;
  margin-bottom: 8px;
  animation: toast-in .25s;
  box-shadow: 0 4px 16px rgba(0,0,0,0.2);
}
.toast.success { background: rgba(15,157,88,0.95); }
.toast.error { background: rgba(229,72,77,0.95); }
@keyframes toast-in {
  from { opacity: 0; transform: translateY(-8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* 加载 */
.loading { text-align: center; padding: 40px; color: var(--text-secondary); }

/* ===== 全局 Loading 遮罩 ===== */
#globalLoading {
  position: fixed; inset: 0;
  background: rgba(255,255,255,0.6);
  display: none;
  align-items: center; justify-content: center;
  z-index: 999;
}
#globalLoading.show { display: flex; }
.loading-box {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  background: #fff;
  padding: 22px 34px;
  border-radius: 12px;
  box-shadow: 0 8px 30px rgba(31,45,61,0.15);
}
.loading-spinner {
  width: 34px; height: 34px;
  border: 3px solid var(--primary-light);
  border-top-color: var(--primary);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}
.loading-text { font-size: 13px; color: var(--text-secondary); }
@keyframes spin { to { transform: rotate(360deg); } }

/* ===== 候选人对比 ===== */
.compare-grid {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 14px;
  margin-bottom: 16px;
  align-items: start;
}
.compare-col {
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px 16px;
  background: #fff;
}
.compare-head { text-align: center; padding-bottom: 12px; border-bottom: 2px solid var(--primary-light); margin-bottom: 10px; }
.compare-name { font-weight: 700; font-size: 17px; }
.compare-score { font-size: 40px; font-weight: 800; margin: 4px 0; }
.compare-sub { color: var(--text-secondary); font-size: 12px; }
.compare-vs {
  align-self: center;
  background: var(--primary);
  color: #fff;
  width: 44px; height: 44px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 14px;
  box-shadow: 0 4px 12px rgba(43,109,232,0.35);
}
.compare-section-title {
  font-size: 12px;
  font-weight: 600;
  margin: 10px 0 6px;
  padding-left: 8px;
  border-left: 3px solid var(--text-secondary);
  color: var(--text-secondary);
}
.compare-section-title.good { border-color: var(--green); color: var(--green); }
.compare-section-title.bad { border-color: var(--red); color: var(--red); }
.compare-item {
  font-size: 13px;
  padding: 6px 10px;
  border-radius: 6px;
  margin-bottom: 4px;
  line-height: 1.5;
}
.compare-item.good { background: var(--green-bg); color: #1a7f4b; }
.compare-item.bad { background: var(--red-bg); color: #c0353a; }
.compare-empty { color: #c0c6cf; font-size: 12px; padding: 4px 0; }
.compare-conclusion {
  font-size: 12px; color: var(--text-secondary);
  line-height: 1.7;
  background: var(--gray-bg);
  border-radius: 8px;
  padding: 8px 10px;
  max-height: 120px; overflow: auto;
}
.compare-summary, .compare-recommend {
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px 16px;
  margin-bottom: 12px;
  background: #fff;
}
.compare-summary-title {
  font-size: 13px;
  font-weight: 600;
  margin-bottom: 8px;
  color: var(--text);
}
@media (max-width: 900px) {
  .compare-grid { grid-template-columns: 1fr; }
  .compare-vs { margin: 0 auto; }
}

/* ===== 候选人对比 · 6 维对比表 ===== */
.dim-table-wrap {
  border: 1px solid var(--border);
  border-radius: 12px;
  overflow: auto;
  margin-bottom: 16px;
  background: #fff;
}
.dim-table { width: 100%; border-collapse: collapse; }
.dim-table th {
  background: var(--gray-bg);
  color: var(--text-secondary);
  font-weight: 600;
  font-size: 13px;
  padding: 10px 12px;
  text-align: left;
  border-bottom: 1px solid var(--border);
}
.dim-table td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  vertical-align: top;
  font-size: 13px;
}
.dim-table tr:last-child td { border-bottom: none; }
.dim-label { white-space: nowrap; }
.dim-label b { display: block; font-size: 13px; }
.dim-weight {
  font-size: 11px;
  color: var(--text-secondary);
  background: var(--gray-bg);
  border-radius: 10px;
  padding: 1px 8px;
  margin-top: 4px;
  display: inline-block;
}
.dim-cell { width: 38%; }
.dim-cell.dim-win { background: rgba(43,109,232,0.04); }
.dim-cell.dim-win::after {
  content: '✓ 胜出';
  display: inline-block;
  font-size: 11px;
  color: var(--primary);
  background: var(--primary-light);
  border-radius: 10px;
  padding: 1px 8px;
  margin-left: 6px;
  vertical-align: middle;
}
.dim-evidence {
  margin-top: 6px;
  font-size: 12px;
  color: var(--text-secondary);
  line-height: 1.6;
  background: var(--gray-bg);
  border-radius: 6px;
  padding: 6px 8px;
}

/* ===== 文件预览（docx-preview / 简历详情） ===== */
.docx-preview-box {
  max-height: 560px; overflow: auto;
  border: 1px solid var(--border); border-radius: 8px;
  background: #fff; padding: 8px;
}
.docx-preview-box .docx-wrapper { background: #fff; }
.docx-preview-box .docx {
  margin: 0 auto; box-shadow: 0 2px 10px rgba(31,45,61,0.08);
  background: #fff;
}
.empty-tip {
  text-align: center; padding: 40px 0;
  color: var(--text-secondary); font-size: 13px; line-height: 1.8;
}
.empty-tip .btn { margin-top: 8px; }

/* ===== 简历筛选状态（通过/不通过） ===== */
tr.rejected { background: #fef2f2; }
tr.rejected:hover { background: #fdecec; }
tr.rejected td:first-child b { color: #e5484d; }
.reject-btn { color: #e5484d; border-color: #f3b8bd; }
.reject-btn:hover { background: #fdecec; color: #e5484d; }
.pass-btn { color: #0f9d58; border-color: #a8e6c1; }
.pass-btn:hover { background: #e8f7ef; color: #0f9d58; }

/* 详情抽屉底部固定操作区 - 工具栏风格 */
.drawer-footer {
  flex-shrink: 0;
  padding: 14px 20px;
  border-top: 1px solid var(--border);
  background: #fafbfc;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.footer-row { display: flex; align-items: center; min-height: 36px; }

/* 状态摘要行 */
.footer-state { gap: 10px; }
.state-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; box-shadow: 0 0 0 3px rgba(0,0,0,0.04); }
.state-dot.pass { background: #0f9d58; }
.state-dot.reject { background: #e5484d; }
.state-dot.none { background: #c0c6cf; }
.state-label { font-size: 13px; font-weight: 500; color: #2c2c2a; }
.state-hint { font-size: 12px; color: #8a94a6; }

/* 操作行 */
.footer-actions { gap: 12px; }
.footer-actions .spacer { flex: 1; }

/* 分段控件 */
.seg-control {
  display: inline-flex;
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
  background: #fff;
  flex-shrink: 0;
}
.seg-control .seg-btn {
  border: none;
  border-radius: 0;
  padding: 7px 16px;
  font-size: 13px;
  font-weight: 500;
  background: transparent;
  color: #5f5e5a;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: background 0.15s;
}
.seg-control .seg-btn + .seg-btn { border-left: 1px solid var(--border); }
.seg-control .seg-btn:hover:not(:disabled) { background: #f5f6f8; }
.seg-control .seg-btn:disabled { cursor: default; }
.seg-control .seg-btn.pass-active { background: #e8f7ef; color: #0f9d58; }
.seg-control .seg-btn.reject-active { background: #fdecec; color: #e5484d; }
/* 通用选中态（用于「全部/启用/停用」这类中性筛选，区别于上面的语义色） */
.seg-control .seg-btn.active { background: var(--primary-light); color: var(--primary); }
.seg-control .seg-btn.active:hover { background: var(--primary-light); }
/* 分段项上的计数徽标（如「停用 3」） */
.seg-control .seg-num { font-size: 11px; opacity: 0.75; }

/* 危险删除按钮 */
.btn-del {
  color: #e5484d;
  border: 1px solid #e5484d;
  background: #fff;
  padding: 7px 14px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}
.btn-del:hover { background: #fdecec; }

/* ===== AI 评估中菊花 ===== */
.spinner {
  display: inline-block;
  width: 14px; height: 14px;
  border: 2px solid rgba(43,109,232,0.25);
  border-top-color: #2B6DE8;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
  vertical-align: -2px;
}
.spinner.sm { width: 11px; height: 11px; border-width: 2px; }
.spinner.lg { width: 28px; height: 28px; border-width: 3px; }
@keyframes spin { to { transform: rotate(360deg); } }
.pending-chip {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; color: #2B6DE8; font-weight: 500;
}

/* ===== 历史意见列表（时间倒序卡片） ===== */
.comment-card {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 10px;
  transition: box-shadow .15s;
}
.comment-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.04); }
.comment-card .head {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 8px;
  font-size: 12px; color: var(--text-secondary);
}
.comment-card .head .round-tag {
  background: #f0f3ff; color: #2B6DE8;
  font-weight: 600; padding: 2px 10px; border-radius: 10px;
  font-size: 11px;
}
.comment-card .head .time { color: #8a94a6; }
.comment-card .body {
  font-size: 13px; color: #2c2c2a; line-height: 1.7;
  white-space: pre-wrap; word-break: break-word;
}
.comment-card .empty-state {
  text-align: center; padding: 40px 0; color: #8a94a6;
  font-size: 13px;
}

/* ===== 历史面试官意见弹窗（精致版） ===== */
.history-comments-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 16px; border-bottom: 1px solid var(--border);
  background: linear-gradient(180deg, #fafbff 0%, #fff 100%);
  border-radius: 10px 10px 0 0;
}
.history-comments-head .title { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 15px; }
.history-comments-head .count {
  font-size: 12px; color: var(--text-secondary);
  background: #f0f3ff; padding: 3px 10px; border-radius: 10px;
}
.comment-card-v2 {
  position: relative;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px;
  margin-bottom: 12px;
  transition: all .15s;
}
.comment-card-v2:hover { border-color: #d6dceb; box-shadow: 0 4px 12px rgba(43,109,232,0.06); }
.comment-card-v2 .meta-row {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 8px;
}
.comment-card-v2 .round-badge {
  background: linear-gradient(135deg, #5a8cff 0%, #7a5af8 100%);
  color: #fff; font-weight: 600; font-size: 11px;
  padding: 3px 10px; border-radius: 12px;
  flex-shrink: 0;
  letter-spacing: 0.5px;
}
.comment-card-v2 .author { font-size: 13px; font-weight: 500; color: #2c2c2a; }
.comment-card-v2 .time { font-size: 11px; color: #8a94a6; }
.comment-card-v2 .delete-btn {
  margin-left: auto;
  padding: 4px 10px;
  font-size: 12px;
  color: #e5484d;
  background: #fff;
  border: 1px solid #f0c4c6;
  border-radius: 6px;
  cursor: pointer;
  transition: all .15s;
}
.comment-card-v2 .delete-btn:hover { background: #e5484d; color: #fff; border-color: #e5484d; }
.comment-card-v2 .quote-body {
  position: relative;
  padding: 10px 12px 10px 16px;
  background: #fafbff;
  border-radius: 6px;
  font-size: 13px;
  color: #2c2c2a;
  line-height: 1.7;
  white-space: pre-wrap;
  word-break: break-word;
}
.comment-card-v2 .quote-body::before {
  content: '';
  position: absolute;
  left: 0; top: 8px; bottom: 8px;
  width: 3px;
  background: linear-gradient(180deg, #5a8cff 0%, #7a5af8 100%);
  border-radius: 0 2px 2px 0;
}
.history-comments-body { padding: 14px 18px; max-height: 60vh; overflow: auto; }
.history-comments-empty {
  text-align: center; padding: 56px 0 40px;
  color: #8a94a6;
}
.history-comments-empty .icon { font-size: 40px; margin-bottom: 12px; opacity: 0.5; }
.history-comments-empty .tip { font-size: 12px; margin-top: 6px; opacity: 0.8; }

/* ===== 批量上传结果弹窗 ===== */
.ur-chip {
  font-size: 13px; font-weight: 600;
  padding: 5px 12px; border-radius: 8px;
}
.ur-chip.ur-success { background: var(--green-bg); color: #0f9d58; }
.ur-chip.ur-dup { background: var(--amber-bg); color: #b26a00; }
.ur-chip.ur-fail { background: var(--red-bg); color: #e5484d; }
.ur-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 12px; border-radius: 8px;
  margin-bottom: 8px; font-size: 13px;
  border: 1px solid var(--border);
}
.ur-item-ok { background: #f6fdf9; border-color: #cdeeda; }
.ur-item-dup { background: #fffaf0; border-color: #f5e0b3; }
.ur-item-fail { background: #fdf5f5; border-color: #f0cdcd; }
.ur-file { font-weight: 500; color: #2c2c2a; flex-shrink: 0; max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ur-tag { font-size: 11px; font-weight: 600; flex-shrink: 0; padding: 2px 8px; border-radius: 8px; }
.ur-item-ok .ur-tag { background: #e4f6ec; color: #0f9d58; }
.ur-item-dup .ur-tag { background: #fcefd5; color: #b26a00; }
.ur-item-fail .ur-tag { background: #fadfdf; color: #e5484d; }
.ur-msg { color: #8a94a6; font-size: 12px; }

/* ===== 评估报告 · 面试得分列（评级徽章 + 每轮整体评价，两行截断） ===== */
.ir-row { display: flex; gap: 6px; align-items: flex-start; margin: 2px 0; }
.ir-row + .ir-row { margin-top: 5px; padding-top: 5px; border-top: 1px dashed #edf0f6; }
.ir-row .tag, .ir-row > span { flex-shrink: 0; }
.ir-text {
  flex: 1; min-width: 0; font-size: 12px; line-height: 1.6; color: var(--text-primary);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  word-break: break-all; cursor: pointer; padding: 1px 4px; border-radius: 4px; transition: all .15s;
}
.ir-text:hover { background: var(--primary-light); color: var(--primary-dark); }

/* ===== 候选人库 · 横向总览卡片（一行一位候选人） ===== */
.cb-list { display: flex; flex-direction: column; gap: 12px; }
.cb-card {
  background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow);
  display: grid; grid-template-columns: 236px minmax(0, 1fr) 272px; gap: 18px;
  padding: 14px 16px; align-items: stretch; transition: box-shadow .2s, transform .15s;
}
.cb-card:hover { box-shadow: 0 4px 18px rgba(31,45,61,0.13); }
.cb-id { display: flex; gap: 10px; min-width: 0; align-items: stretch; }
.cb-avatar {
  width: 44px; height: 44px; border-radius: 50%; flex-shrink: 0;
  background: var(--primary-light); color: var(--primary-dark);
  font-weight: 600; font-size: 17px; display: flex; align-items: center; justify-content: center;
}
.cb-avatar.st-interviewing { background: var(--primary-light); color: var(--primary-dark); }
.cb-id-main { min-width: 0; display: flex; flex-direction: column; }
.cb-name-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cb-name { font-size: 14px; font-weight: 600; }
.cb-poschip { font-size: 11px; padding: 1px 8px; border-radius: 999px; background: #eef1f6; color: #5e6d82; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cb-contact { font-size: 12px; color: #8a94a6; line-height: 1.7; margin-top: auto; padding-top: 8px; word-break: break-all; }
.cb-sep { border-left: 1px solid var(--border); padding-left: 16px; min-width: 0; }
.cb-nodes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; min-width: 0; height: 100%; }
.cb-node { min-width: 0; display: flex; flex-direction: column; }
.cb-node-head { font-size: 11px; color: #8a94a6; margin-bottom: 5px; display: flex; align-items: center; gap: 4px; }
.cb-node-head b { color: var(--text-secondary); font-weight: 500; }
.cb-node-box {
  background: #f7f9fc; border: 1px solid #eef1f6; border-radius: 9px;
  padding: 8px 10px; flex: 1; min-height: 58px; font-size: 12px; line-height: 1.6; color: var(--text-primary);
}
.cb-node-box .cb-empty { color: #b9c2cf; font-size: 12px; }
.cb-scoreline { line-height: 1.7; }
.cb-scoreline b { font-size: 13px; }
.cb-sum {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  color: var(--text-secondary); line-height: 1.55; margin-top: 2px; word-break: break-all;
}
.cb-round { display: flex; gap: 6px; align-items: flex-start; line-height: 1.55; }
.cb-round + .cb-round { margin-top: 5px; }
.cb-round .cb-sum { -webkit-line-clamp: 2; margin-top: 0; }
.cb-flow-wrap { display: flex; flex-direction: column; }
.cb-flow { display: flex; align-items: center; gap: 1px; flex-wrap: wrap; line-height: 2; }
.cb-chip { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; padding: 2px 9px; border-radius: 999px; white-space: nowrap; }
.cb-chip.done { background: #e6f4ea; color: #1a7f4b; }
.cb-chip.cur { background: var(--primary-light); color: var(--primary-dark); font-weight: 600; border: 1px solid rgba(43,109,232,0.4); }
.cb-chip.todo { background: #f1f3f6; color: #a3adb9; }
.cb-chip.danger { background: var(--red-bg); color: #c0353a; }
.cb-arrow { color: #ccd3de; font-size: 11px; }
.cb-ops { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.cb-ops .btn { margin: 0; }
.cb-foot { margin-top: auto; padding-top: 8px; font-size: 11px; color: #a3adb9; display: flex; align-items: center; gap: 12px; }
.cb-reason { color: #b26a00; background: var(--amber-bg); border-radius: 999px; padding: 1px 8px; font-size: 11px; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 1060px) {
  .cb-card { grid-template-columns: 1fr; gap: 12px; }
  .cb-sep { border-left: none; border-top: 1px solid var(--border); padding-left: 0; padding-top: 12px; }
}

/* ===== 候选人库 · 详情抽屉补充 ===== */
.cd-header { display: flex; gap: 14px; align-items: center; padding-bottom: 14px; border-bottom: 1px solid var(--border); }
.cd-avatar { width: 56px; height: 56px; border-radius: 50%; background: var(--primary-light); color: var(--primary-dark); font-weight: 600; font-size: 22px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.cd-title { font-size: 18px; font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cd-sub { font-size: 12px; color: #8a94a6; margin-top: 4px; line-height: 1.7; }
.cd-section { margin-top: 16px; }
.cd-section h4 { font-size: 13px; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; color: var(--text); }
.cd-section h4::before { content: ''; width: 3px; height: 13px; background: var(--primary); border-radius: 2px; }
.cd-flow { position: relative; padding-left: 4px; }
.cd-flow-item { display: flex; gap: 12px; position: relative; padding-bottom: 16px; }
.cd-flow-item:last-child { padding-bottom: 0; }
.cd-flow-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--primary); margin-top: 4px; flex-shrink: 0; position: relative; z-index: 1; }
.cd-flow-item:not(:last-child)::before { content: ''; position: absolute; left: 4px; top: 14px; bottom: 0; width: 1px; background: var(--border); }
.cd-flow-dot.terminal { background: #e5484d; }
.cd-flow-main { flex: 1; font-size: 13px; line-height: 1.7; }
.cd-flow-time { font-size: 11px; color: #8a94a6; }
.cd-tl { font-size: 12px; color: var(--text-secondary); margin-top: 2px; }
.cd-report-item { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px dashed #edf0f6; font-size: 13px; }
.cd-report-item:last-child { border-bottom: none; }
.cd-num-badge { font-weight: 600; font-size: 20px; }

/* 节点块内评级徽章与摘要的收缩安全 */
.cb-round > span:first-child { flex-shrink: 0; }
.cb-round .cb-sum { flex: 1; min-width: 0; }

/* ===== 操作列：流转 / 报告 两组 ===== */
.ops-group { margin-bottom: 6px; }
.ops-group:last-child { margin-bottom: 0; }
.ops-group-label {
  display: inline-block;
  font-size: 10px;
  font-weight: 500;
  color: #6b7384;
  background: var(--gray-bg);
  padding: 1px 7px;
  border-radius: 8px;
  margin-bottom: 4px;
  letter-spacing: .3px;
}
.ops-row { display: flex; gap: 4px; flex-wrap: wrap; }

/* ===== 面试得分 chips（行内点击展开） ===== */
.ir-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.round-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 9px;
  border: 1px solid var(--border);
  border-radius: 14px;
  background: #fff;
  font-size: 12px;
  color: var(--text-primary);
  cursor: pointer;
  transition: all .15s;
  user-select: none;
}
.round-chip:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-light); }
.round-chip.active { border-color: var(--primary); background: var(--primary-light); color: var(--primary-dark); font-weight: 500; }
.round-chip > span:first-child { flex-shrink: 0; }
.ir-detail {
  margin-top: 6px;
  padding: 8px 12px;
  background: #f7f9fc;
  border: 1px solid #eef1f6;
  border-radius: 8px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--text-primary);
}
.ir-detail-head {
  font-size: 11px;
  color: #6b7384;
  margin-bottom: 4px;
  display: flex; align-items: center; gap: 6px;
}
.ir-detail-body { white-space: pre-wrap; word-break: break-word; }

/* ===== 评估报告页：横卡 + 弹窗查看报告（第八轮：修复失效旧 token + 层级/可读性升级） ===== */
.rep-list { display: flex; flex-direction: column; gap: 10px; }
.rep-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: border-color .15s, box-shadow .15s;
}
.rep-card:hover { border-color: #a9c1e6; box-shadow: var(--shadow-sm); }
.rep-head {
  display: grid;
  grid-template-columns: 216px minmax(0, 1fr) 92px 264px;
  gap: 16px;
  align-items: center;
  padding: 14px 16px;
  cursor: pointer;
  user-select: none;
}
/* 身份：状态色头像 + 姓名/状态同行 + 岗位省略 */
.rep-id { min-width: 0; display: flex; align-items: center; gap: 10px; }
.rep-ava {
  width: 38px; height: 38px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 15px; font-weight: 600; flex-shrink: 0;
}
.rep-id-main { min-width: 0; flex: 1; }
.rep-name-row { display: flex; align-items: center; gap: 6px; min-width: 0; }
.rep-name {
  font-size: 15px; font-weight: 600; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rep-name-row .tag { flex-shrink: 0; }
.rep-pos {
  font-size: 12px; color: var(--text-tertiary); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* 中部：简历得分 + 面试轮次（accent 竖条分区） */
.rep-mid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; min-width: 0; }
.rep-section { min-width: 0; padding-left: 9px; border-left: 2px solid var(--primary-light); }
.rep-section:last-child { border-left-color: var(--gray-bg); }
.rep-section-head { font-size: 12px; font-weight: 500; color: var(--text-tertiary); margin-bottom: 6px; }
.rep-bars { display: flex; flex-direction: column; gap: 6px; }
.rep-empty { font-size: 12px; color: var(--text-tertiary); padding: 4px 0; }

/* 综合得分 */
.rep-score { text-align: center; }
.rep-score-num {
  font-size: 30px; font-weight: 700; line-height: 1;
  font-variant-numeric: tabular-nums;
}
.rep-score-label { font-size: 11px; color: var(--text-tertiary); margin-top: 5px; }

/* 操作：报告/流转 分组（轻量标签 + 理由琥珀 chip） */
.rep-ops { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ops-group { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ops-group + .ops-group { border-top: 1px solid var(--border); padding-top: 6px; }
.ops-group-label { color: var(--text-tertiary); font-size: 11px; flex-shrink: 0; }
.ops-row { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; min-width: 0; }
.rep-flow-reason {
  display: inline-block; max-width: 100%; font-size: 11px;
  color: var(--amber-deep); background: var(--amber-bg);
  border-radius: 999px; padding: 2px 9px; cursor: default;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

@media (max-width: 1180px) {
  .rep-head { grid-template-columns: 190px minmax(0, 1fr) 80px 246px; gap: 12px; padding: 12px 14px; }
}
@media (max-width: 980px) {
  .rep-head { grid-template-columns: 1fr; gap: 10px; }
  .rep-score { text-align: left; display: flex; align-items: baseline; gap: 8px; }
  .rep-score-num { font-size: 24px; }
  .rep-score-label { margin-top: 0; }
}
@media (max-width: 640px) {
  .rep-mid { grid-template-columns: 1fr; }
  .rep-name-row { flex-wrap: wrap; }
}

/* ===== 候选人库 · 评估节点可点击 ===== */
.cb-eval-link {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: 8px;
  cursor: pointer;
  background: #fafbfc;
  border: 0.5px solid #eef1f6;
  transition: background-color .15s, border-color .15s;
}
.cb-eval-link:hover { background: #f0f5fb; border-color: #b5d4f4; }
.cb-eval-score {
  width: 46px; height: 46px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: 17px; flex-shrink: 0;
}
.cb-eval-open {
  font-size: 11px; color: #185FA5; margin-top: 4px; font-weight: 500;
  opacity: 0; transition: opacity .15s;
}
.cb-eval-link:hover .cb-eval-open { opacity: 1; }

/* ===== 综合评估报告弹窗（report.html 与 candidate.html 共用，一处升级两页受益） ===== */
.rv-head {
  display: flex; gap: 18px; align-items: flex-start;
  padding: 22px 22px 20px; background: var(--gray-bg);
  border-bottom: 1px solid var(--border);
}
.rv-score-wrap { text-align: center; flex-shrink: 0; }
.rv-score {
  width: 84px; height: 84px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 32px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.rv-score-label { font-size: 12px; color: var(--text-tertiary); margin-top: 8px; letter-spacing: .5px; }
/* 头部 banner：身份行 + meta + 结论 + 建议胶囊，垂直分组 */
.rv-idarea { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.rv-idline { display: flex; align-items: center; gap: 10px; min-width: 0; flex-wrap: wrap; }
.rv-name { font-size: 22px; font-weight: 700; color: var(--text); line-height: 1.25; letter-spacing: .2px; }
.rv-idline .tag { flex-shrink: 0; }
.rv-pos-chip {
  display: inline-flex; align-items: center; max-width: 100%;
  padding: 4px 10px; border-radius: 999px;
  background: var(--primary-light); color: var(--primary-dark);
  font-size: 12px; font-weight: 500; line-height: 1.4;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rv-meta { font-size: 12px; color: var(--text-tertiary); }
.rv-conclusion {
  font-size: 14px; font-weight: 500; color: var(--text); line-height: 1.75;
  border-left: 3px solid var(--primary); padding: 2px 0 2px 12px;
}
.rv-suggestion-wrap { display: flex; }
.rv-suggestion {
  display: inline-block; padding: 4px 12px; border-radius: 999px;
  font-size: 13px; font-weight: 600; line-height: 1.55;
}
.rv-file { flex-shrink: 0; align-self: flex-start; }

.rv-section { padding: 16px 22px; border-bottom: 1px solid var(--border); }
.rv-section-title {
  display: flex; align-items: center; gap: 7px;
  font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 12px;
}
.rv-section-title::before { content: ''; width: 4px; height: 14px; background: var(--primary); border-radius: 2px; }
/* 5 维能力区：雷达居中 + 下方 5 列 1 行明细卡 */
.rv-dim-area { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.rv-radar { flex: 0 0 auto; width: 300px; max-width: 100%; display: flex; justify-content: center; }
.rv-radar svg { max-width: 300px; width: 100%; height: auto; }
.rv-dim-grid { width: 100%; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
@media (max-width: 720px) {
  .rv-dim-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-radar { width: 240px; }
}
.rv-dim-card { border: 1px solid transparent; border-radius: var(--radius); padding: 12px; }
.rv-dim-label {
  font-size: 12px; font-weight: 500; color: var(--text-secondary);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rv-dim-weight { font-size: 12px; font-weight: 500; color: var(--text-tertiary); margin-top: 3px; }
.rv-dim-score { font-size: 22px; font-weight: 700; margin-top: 4px; line-height: 1.15; font-variant-numeric: tabular-nums; }
.rv-dim-bar { background: #eef1f5; border-radius: 999px; height: 6px; margin-top: 9px; overflow: hidden; }
.rv-dim-bar > div { height: 100%; border-radius: 999px; }

.rv-points { border-radius: var(--radius); padding: 12px 14px; margin-bottom: 10px; border: 1px solid; }
.rv-points.good { background: var(--green-bg); border-color: #c9e0b3; }
.rv-points.bad { background: var(--red-bg); border-color: #f3c6c6; }
.rv-points-head { font-size: 12px; font-weight: 600; margin-bottom: 8px; }
.rv-points.good .rv-points-head { color: var(--green-deep); }
.rv-points.bad .rv-points-head { color: var(--red-deep); }
.rv-point { font-size: 13px; color: var(--text); line-height: 1.75; }

.rv-summary-line { font-size: 13px; color: var(--text); line-height: 1.85; padding: 3px 0; }

/* ===== 侧栏分组（深色底，配色走白色系）：分组头 + 竖向导引线 ===== */
.nav-group { margin-bottom: 2px; }
.nav-group-head {
  display: flex; align-items: center; gap: 9px;
  padding: 12px 18px 6px; cursor: pointer; user-select: none;
  font-size: 12px; font-weight: 600; letter-spacing: .4px;
  color: rgba(255, 255, 255, 0.48);
  transition: color .2s;
}
.nav-group-head:hover { color: #fff; }
.nav-group-head.has-active { color: rgba(255, 255, 255, 0.92); }
.nav-group-head .nav-icon { width: 18px; font-size: 13px; }
.nav-group.static .nav-group-head { cursor: default; }
.nav-group-count {
  margin-left: auto; font-size: 10px; font-weight: 500; font-family: var(--font-mono);
  color: rgba(255, 255, 255, 0.34); background: rgba(255, 255, 255, 0.08);
  border-radius: 8px; padding: 1px 6px; line-height: 1.5;
}
.nav-caret { font-size: 9px; color: rgba(255, 255, 255, 0.35); transition: transform .18s; }
.nav-group.collapsed .nav-caret { transform: rotate(-90deg); }
.nav-group.collapsed .nav-group-body { display: none; }

/* 子菜单：左缩进 + 竖向导引线，层级一眼可见 */
.nav-group-body {
  position: relative;
  margin: 0 10px 6px 26px;
  padding-left: 9px;
  border-left: 1px solid rgba(255, 255, 255, 0.13);
}
.nav-group-body .nav-item {
  position: relative;
  padding: 9px 10px; border-left: none; border-radius: 6px;
  font-size: 13.5px; gap: 8px; margin-bottom: 1px;
}
.nav-group-body .nav-item .nav-icon { width: 18px; font-size: 14px; }
.nav-group-body .nav-item.active { background: rgba(43, 109, 232, 0.26); font-weight: 500; }
/* 激活项在导引线上打一个短标记 */
.nav-group-body .nav-item.active::before {
  content: ''; position: absolute; left: -10.5px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 15px; border-radius: 2px; background: var(--primary);
}

/* ===== 字典管理页 ===== */
.page-dict .dict-layout { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 14px; align-items: start; }
.page-dict .dict-types { padding: 0; overflow: hidden; }
.page-dict .dict-type-search { padding: 12px; border-bottom: 1px solid var(--border); }
.page-dict .dict-type-list { max-height: 620px; overflow-y: auto; padding: 6px; }
.page-dict .dict-type-item {
  padding: 9px 12px; border-radius: var(--radius-sm); cursor: pointer; transition: background .12s;
}
.page-dict .dict-type-item:hover { background: var(--gray-bg); }
.page-dict .dict-type-item.active { background: var(--primary-light); }
.page-dict .dict-type-name { font-size: 13px; font-weight: 500; color: var(--text); }
.page-dict .dict-type-item.active .dict-type-name { color: var(--primary-dark); font-weight: 600; }
.page-dict .dict-type-code { font-size: 11px; color: var(--text-tertiary); font-family: var(--font-mono); margin-top: 2px; }
.page-dict .dict-items { padding: 0; overflow: hidden; }
.page-dict .dict-items-head { padding: 14px 16px; border-bottom: 1px solid var(--border); }
.page-dict .dict-items-title { font-size: 15px; font-weight: 600; color: var(--text); }
.page-dict .dict-items-sub { font-size: 12px; color: var(--text-tertiary); margin-top: 4px; line-height: 1.6; }
.page-dict .dict-code {
  font-family: var(--font-mono); font-size: 12px; background: var(--gray-bg);
  padding: 2px 7px; border-radius: 4px; color: var(--text-secondary);
}
@media (max-width: 900px) {
  .page-dict .dict-layout { grid-template-columns: 1fr; }
  .page-dict .dict-type-list { max-height: 240px; }
}

/* ===== RBAC：角色管理 / 菜单管理 / 用户多角色 ===== */
.muted { color: var(--text-tertiary); }
.input.sm, .select.sm { padding: 4px 8px; font-size: 12px; height: 28px; }

/* 角色管理页 */
.page-role .role-layout { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 14px; align-items: start; }
.page-role .role-list-card { padding: 0; overflow: hidden; }
.page-role .role-search { padding: 12px; border-bottom: 1px solid var(--border); }
.page-role .role-list { max-height: 640px; overflow-y: auto; padding: 6px; }
.page-role .role-item { padding: 10px 12px; border-radius: var(--radius-sm); cursor: pointer; transition: background .12s; }
.page-role .role-item:hover { background: var(--gray-bg); }
.page-role .role-item.active { background: var(--primary-light); }
.page-role .role-item-name { font-size: 13px; font-weight: 500; color: var(--text); display: flex; align-items: center; gap: 6px; }
.page-role .role-item.active .role-item-name { color: var(--primary-dark); }
.page-role .role-item-meta { font-size: 12px; color: var(--text-tertiary); margin-top: 4px; }
.page-role .role-item-code { font-size: 11px; color: var(--text-tertiary); font-family: var(--font-mono); margin-top: 2px; }

.page-role .role-detail { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.page-role .role-detail-head {
  padding: 16px; border-bottom: 1px solid var(--border);
  display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;
}
.page-role .role-detail-title { font-size: 15px; font-weight: 600; color: var(--text); display: flex; align-items: center; gap: 6px; }
.page-role .role-detail-sub { font-size: 12px; color: var(--text-tertiary); margin-top: 4px; line-height: 1.6; }
.page-role .role-detail-actions { display: flex; gap: 6px; flex-shrink: 0; }
.page-role .perm-hint { padding: 10px 16px; font-size: 12px; color: var(--text-secondary); background: var(--gray-bg); border-bottom: 1px solid var(--border); }
.page-role .perm-hint-lock { color: var(--amber-deep); }

.page-role .perm-grid { padding: 14px 16px; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.page-role .perm-card { border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden; }
.page-role .perm-card-head {
  padding: 9px 12px; background: var(--gray-bg); border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
}
.page-role .perm-module-label { display: flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 500; color: var(--text); cursor: pointer; }
.page-role .perm-count { font-size: 11px; color: var(--text-tertiary); font-family: var(--font-mono); }
.page-role .perm-card-body { padding: 8px 12px 10px; display: flex; flex-direction: column; gap: 2px; }
.page-role .perm-item { display: flex; align-items: center; gap: 8px; padding: 5px 0; font-size: 13px; color: var(--text); cursor: pointer; }
.page-role .perm-item.locked { opacity: .55; cursor: not-allowed; }
.page-role .perm-name { flex: 1; min-width: 0; }
.page-role .perm-code { font-family: var(--font-mono); font-size: 11px; color: var(--text-tertiary); }

.page-role .role-save-bar {
  padding: 12px 16px; border-top: 1px solid var(--border); background: var(--gray-bg);
  display: flex; align-items: center; gap: 10px;
}
.page-role .role-save-hint { font-size: 12px; color: var(--text-secondary); }
.page-role .role-save-hint.dirty { color: var(--amber-deep); font-weight: 500; }

/* ===== 菜单管理页：可折叠树表 ===== */
.page-menu .mt-card { padding: 0; overflow: hidden; }
.page-menu .mt-table td { vertical-align: middle; }

/* 分组行 —— 独立区块头 */
.page-menu .mt-group-row td {
  background: var(--gray-bg);
  border-bottom: 1px solid var(--border);
  padding: 11px 12px;
}
.page-menu .mt-group-row:hover td { background: #e9edf4; }
.page-menu .mt-node { display: flex; align-items: center; gap: 8px; min-width: 0; }
.page-menu .mt-node .mt-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.page-menu .mt-node-group .mt-name { font-weight: 600; font-size: 14px; color: var(--text); }
.page-menu .mt-icon { width: 18px; text-align: center; font-size: 15px; flex-shrink: 0; }
.page-menu .mt-caret {
  width: 16px; text-align: center; cursor: pointer; user-select: none; flex-shrink: 0;
  color: var(--text-tertiary); font-size: 11px; transition: transform .18s;
}
.page-menu .mt-caret:hover { color: var(--primary); }
.page-menu .mt-caret.collapsed { transform: rotate(-90deg); }
.page-menu .mt-count {
  font-size: 11px; color: var(--text-tertiary); font-family: var(--font-mono);
  background: var(--card); border: 1px solid var(--border); border-radius: 8px;
  padding: 1px 7px; flex-shrink: 0;
}
.page-menu .mt-warn {
  font-size: 11px; color: var(--amber-deep); background: var(--amber-bg);
  border-radius: 8px; padding: 2px 8px; flex-shrink: 0;
}

/* 菜单项行 —— 竖向导引线 + 缩进，层级一眼可见 */
.page-menu .mt-item-row td { padding: 9px 12px; }
.page-menu .mt-item-row.hidden { display: none; }
.page-menu .mt-item-row .mt-name-td { position: relative; padding: 0; }
.page-menu .mt-item-row .mt-name-td::before {
  content: ''; position: absolute; left: 19px; top: 0; bottom: 0;
  width: 1px; background: var(--border);
}
.page-menu .mt-item-row.last .mt-name-td::before { bottom: 50%; }
.page-menu .mt-item-row .mt-name-td::after {
  content: ''; position: absolute; left: 19px; top: 50%;
  width: 15px; height: 1px; background: var(--border);
}
.page-menu .mt-node-item { padding: 9px 12px 9px 42px; }
.page-menu .mt-node-item .mt-name { font-size: 13px; color: var(--text); }

.page-menu .mt-page {
  font-family: var(--font-mono); font-size: 11px; background: var(--gray-bg);
  padding: 2px 6px; border-radius: 4px; color: var(--text-secondary);
}
.page-menu .mt-perm {
  display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; vertical-align: middle; font-size: 12px;
  color: var(--primary-dark); background: var(--primary-light);
  border-radius: var(--radius-sm); padding: 2px 8px;
}
.page-menu .mt-perm.none { color: var(--text-tertiary); background: var(--gray-bg); }
.page-menu .mt-ops { white-space: nowrap; }
.page-menu .mt-ops .btn + .btn { margin-left: 6px; }

/* --- 图标库选择器 --- */
.page-menu .icon-field { display: flex; align-items: center; gap: 8px; }
.page-menu .icon-preview {
  width: 34px; height: 34px; flex-shrink: 0; border: 1px solid var(--border);
  border-radius: var(--radius-sm); background: var(--gray-bg);
  display: flex; align-items: center; justify-content: center; font-size: 17px;
}
.page-menu .icon-picker {
  margin-top: 8px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--card); overflow: hidden;
}
.page-menu .icon-cats {
  display: flex; flex-wrap: wrap; gap: 4px; padding: 8px;
  background: var(--gray-bg); border-bottom: 1px solid var(--border);
}
.page-menu .icon-cat {
  border: 1px solid transparent; background: transparent; cursor: pointer;
  font-size: 12px; color: var(--text-secondary); padding: 3px 9px; border-radius: 999px;
  font-family: inherit; transition: all .12s;
}
.page-menu .icon-cat:hover { color: var(--primary); }
.page-menu .icon-cat.active { background: var(--card); border-color: var(--border); color: var(--primary-dark); font-weight: 500; }
.page-menu .icon-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(38px, 1fr));
  gap: 4px; padding: 10px; max-height: 176px; overflow-y: auto;
}
.page-menu .icon-cell {
  height: 34px; border: 1px solid transparent; border-radius: var(--radius-sm);
  background: transparent; cursor: pointer; font-size: 17px; line-height: 1;
  transition: all .12s;
}
.page-menu .icon-cell:hover { background: var(--primary-light); border-color: var(--primary); }

/* --- 权限选择器（分组 + 搜索） --- */
.page-menu .perm-pick { border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden; }
.page-menu .perm-pick-head {
  display: flex; align-items: center; gap: 8px; padding: 8px 10px;
  background: var(--gray-bg); border-bottom: 1px solid var(--border);
}
.page-menu .perm-pick-head .input { flex: 1; min-width: 0; background: var(--card); }
.page-menu .perm-pick-cur {
  font-size: 12px; color: var(--text-tertiary); white-space: nowrap; flex-shrink: 0;
  max-width: 200px; overflow: hidden; text-overflow: ellipsis;
}
.page-menu .perm-pick-cur.on { color: var(--primary-dark); font-weight: 500; }
.page-menu .perm-pick-list { max-height: 210px; overflow-y: auto; padding: 4px; }
.page-menu .perm-group-label {
  font-size: 11px; font-weight: 600; color: var(--text-tertiary);
  padding: 8px 10px 4px; letter-spacing: .3px;
}
.page-menu .perm-opt {
  display: flex; align-items: center; gap: 8px; padding: 7px 10px;
  border-radius: var(--radius-sm); cursor: pointer; font-size: 13px; color: var(--text);
  transition: background .12s;
}
.page-menu .perm-opt:hover { background: var(--gray-bg); }
.page-menu .perm-opt.on { background: var(--primary-light); color: var(--primary-dark); font-weight: 500; }
.page-menu .perm-opt-check {
  width: 15px; height: 15px; flex-shrink: 0; border-radius: 50%;
  border: 1px solid var(--border); display: flex; align-items: center;
  justify-content: center; font-size: 10px; color: #fff; background: var(--card);
}
.page-menu .perm-opt.on .perm-opt-check { background: var(--primary); border-color: var(--primary); }
.page-menu .perm-opt-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.page-menu .perm-opt-code { font-family: var(--font-mono); font-size: 11px; color: var(--text-tertiary); flex-shrink: 0; }
.page-menu .perm-empty { text-align: center; color: var(--text-tertiary); font-size: 13px; padding: 24px 0; }
.page-menu .perm-item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text); cursor: pointer; }

/* 用户管理：多角色 chips + 权限预览 */
.role-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.role-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px; border: 1px solid var(--border); border-radius: 999px;
  font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: border-color .12s, background .12s;
}
.role-chip:hover { border-color: var(--primary); }
.role-chip.active { background: var(--primary-light); border-color: var(--primary); color: var(--primary-dark); font-weight: 500; }
.perm-preview { background: var(--gray-bg); border-radius: var(--radius-sm); padding: 10px 12px; font-size: 12px; min-height: 44px; }
.preview-group + .preview-group { margin-top: 8px; }
.preview-group-name { color: var(--text-secondary); font-weight: 500; margin-bottom: 5px; }
.preview-menus { display: flex; flex-wrap: wrap; gap: 6px; }
.preview-menu { background: #fff; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 3px 9px; color: var(--text); }

/* ===== 组织架构页 ===== */
.page-org .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.page-org .modal-footer .spacer { flex: 1; }

/* 外部来源卡片 */
.org-sources { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 14px; margin-bottom: 16px; }
.org-source-card { padding: 16px; display: flex; flex-direction: column; gap: 10px; }
.org-source-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.org-source-icon { font-size: 18px; }
.org-source-name { font-weight: 600; font-size: 14px; margin-right: 4px; }
.org-source-body { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--text-secondary); }
.org-source-msg {
  background: var(--gray-bg); border-radius: var(--radius-sm); padding: 6px 8px;
  font-size: 12px; color: var(--text-secondary); word-break: break-all;
}
.org-source-actions { display: flex; gap: 8px; }

/* 左右两栏 */
.org-layout { display: grid; grid-template-columns: 320px 1fr; gap: 16px; align-items: start; }

/* 部门树 */
.org-tree-card { padding: 0; display: flex; flex-direction: column; max-height: calc(100vh - 320px); }
.org-tree-head { padding: 12px; border-bottom: 1px solid var(--border); display: flex; flex-direction: column; gap: 8px; }
.org-tree-actions { display: flex; gap: 8px; }
.org-tree-body { overflow: auto; padding: 6px 0; }
.org-node {
  display: flex; align-items: center; gap: 6px; padding: 7px 10px;
  font-size: 13px; cursor: pointer; border-left: 3px solid transparent;
}
.org-node:hover { background: var(--gray-bg); }
.org-node.active { background: var(--primary-light); border-left-color: var(--primary); color: var(--primary-dark); font-weight: 500; }
.org-node-toggle { width: 14px; flex-shrink: 0; color: var(--text-tertiary); font-size: 11px; }
.org-node-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.org-node-badge { font-size: 11px; color: var(--text-tertiary); flex-shrink: 0; }

/* 右侧详情 */
.org-detail-card { padding: 0; min-height: 420px; display: flex; flex-direction: column; }
.org-detail-head {
  padding: 16px; border-bottom: 1px solid var(--border);
  display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap;
}
.org-head-title { display: flex; align-items: center; gap: 8px; font-size: 16px; font-weight: 600; flex-wrap: wrap; }
.org-head-icon { font-size: 18px; }
.org-head-sub { font-size: 12px; color: var(--text-tertiary); margin-top: 6px; }
.org-head-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.org-block-tip {
  font-size: 12px; color: var(--amber-deep); background: var(--amber-bg);
  padding: 4px 8px; border-radius: var(--radius-sm);
}
.org-empty-hint { padding: 40px; text-align: center; color: var(--text-tertiary); font-size: 13px; }
.org-tabs { display: flex; gap: 4px; padding: 0 16px; border-bottom: 1px solid var(--border); }
.org-tab {
  padding: 10px 14px; font-size: 13px; color: var(--text-secondary);
  cursor: pointer; border-bottom: 2px solid transparent;
}
.org-tab.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 500; }
.org-tab-body { padding: 16px; flex: 1; overflow: auto; }
.org-info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.org-info-label { font-size: 12px; color: var(--text-tertiary); margin-bottom: 4px; }
.org-info-value { font-size: 13px; color: var(--text); word-break: break-all; }
.org-remark {
  margin-top: 14px; padding: 10px 12px; background: var(--gray-bg);
  border-radius: var(--radius-sm); font-size: 13px;
}

/* 连通性测试结果 */
.test-result { margin-top: 12px; padding: 10px 12px; border-radius: var(--radius-sm); font-size: 13px; }
.test-result.ok { background: var(--green-bg); color: var(--green-deep); }
.test-result.bad { background: var(--red-bg); color: var(--red-deep); }

/* 同步差异预演 */
.diff-summary { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.diff-pill { padding: 4px 12px; border-radius: 999px; font-size: 12px; font-weight: 500; }
.diff-pill.add { background: var(--green-bg); color: var(--green-deep); }
.diff-pill.upd { background: var(--primary-light); color: var(--primary-dark); }
.diff-pill.dis { background: var(--red-bg); color: var(--red-deep); }
.diff-pill.same, .diff-pill.info { background: var(--gray-bg); color: var(--text-secondary); }
.diff-block { border: 1px solid var(--border); border-radius: var(--radius-sm); margin-bottom: 10px; overflow: hidden; }
.diff-title { padding: 8px 12px; font-size: 13px; font-weight: 600; background: var(--gray-bg); }
.diff-block.add .diff-title { background: var(--green-bg); color: var(--green-deep); }
.diff-block.upd .diff-title { background: var(--primary-light); color: var(--primary-dark); }
.diff-block.dis .diff-title { background: var(--red-bg); color: var(--red-deep); }
.diff-items { max-height: 200px; overflow: auto; }
.diff-item { display: flex; gap: 10px; padding: 6px 12px; font-size: 12px; border-top: 1px solid var(--border); }
.diff-item span { color: var(--text-secondary); }

/* 历史版本 */
.hist-layout { display: grid; grid-template-columns: 260px 1fr; gap: 14px; min-height: 400px; }
.hist-list { max-height: 460px; overflow: auto; border-right: 1px solid var(--border); padding-right: 10px; }
.hist-item { padding: 10px; border-radius: var(--radius-sm); cursor: pointer; margin-bottom: 6px; border: 1px solid transparent; }
.hist-item:hover { background: var(--gray-bg); }
.hist-item-top { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.hist-ver { font-weight: 600; font-size: 13px; font-family: var(--font-mono); }
.hist-remark { font-size: 12px; color: var(--text); margin-bottom: 4px; word-break: break-all; }
.hist-meta { font-size: 11px; color: var(--text-tertiary); }
.hist-detail { max-height: 460px; overflow: auto; }
.hist-detail-head {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 12px;
  padding-bottom: 12px; border-bottom: 1px solid var(--border); font-size: 13px;
}
.hist-section-title { font-size: 12px; font-weight: 600; color: var(--text-secondary); margin: 14px 0 8px; }
.hist-changes { display: flex; flex-direction: column; gap: 6px; }
.hist-change {
  display: flex; align-items: center; gap: 8px; font-size: 12px;
  padding: 6px 8px; background: var(--gray-bg); border-radius: var(--radius-sm);
}
.hist-change-detail { color: var(--text-secondary); }
.hist-tree { font-size: 12px; font-family: var(--font-mono); }
.hist-tree-node { padding: 3px 0; color: var(--text-secondary); }

/* 用户 / 岗位：部门多选（含主部门单选） */
.dept-picker {
  max-height: 240px; overflow: auto;
  border: 1px solid var(--border); border-radius: var(--radius-sm); background: #fff;
}
.dept-pick {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 6px 10px; font-size: 13px; border-bottom: 1px solid var(--border);
}
.dept-pick:last-child { border-bottom: none; }
.dept-pick.active { background: var(--primary-light); }
.dept-pick-main { display: flex; align-items: center; gap: 6px; flex: 1; cursor: pointer; min-width: 0; }
.dept-pick-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dept-pick-primary { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text-secondary); cursor: pointer; flex-shrink: 0; }
.dept-pick-primary input:disabled + span { color: var(--text-tertiary); opacity: .5; }

