:root {
  color-scheme: light dark;
  --bg: #f6f7f9;
  --card-bg: #ffffff;
  --text: #1c1e21;
  --muted: #6b7280;
  --border: #e3e5e8;
  --primary: #2563eb;
  --primary-text: #ffffff;
  --warn-bg: #fff7e6;
  --warn-border: #f5c542;
  --danger: #dc2626;
  --vendor-accent: #7c3aed;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #14161a;
    --card-bg: #1f2227;
    --text: #e6e8eb;
    --muted: #9aa0a6;
    --border: #33363b;
    --primary: #3b82f6;
    --primary-text: #ffffff;
    --warn-bg: #3a2f10;
    --warn-border: #a67c00;
    --danger: #f87171;
    --vendor-accent: #a78bfa;
  }
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
  background: var(--bg);
  color: var(--text);
}

.topnav {
  display: flex;
  align-items: center;
  gap: 1.25rem;
  padding: 0.85rem 1.5rem;
  background: var(--card-bg);
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  z-index: 40;
}

.topnav .brand {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-weight: 700;
  margin-right: 1rem;
}

.topnav .brand-logo {
  width: 28px;
  height: 28px;
  border-radius: 6px;
}

.topnav a {
  color: var(--text);
  text-decoration: none;
  opacity: 0.8;
  padding: 0.35rem 0.6rem;
  border-radius: 6px;
}

.topnav a:hover { opacity: 1; text-decoration: underline; }

/* 当前所在的tab用色块标记——折叠菜单（招聘管理/面试和入职管理）里的某一项如果是当前页面，
   只标记外层的折叠按钮本身，不标记菜单里的具体某一项、也不会因此自动展开菜单
   （2026-09-05根据反馈）。 */
.topnav a.active {
  background: var(--primary);
  color: var(--primary-text);
  opacity: 1;
  text-decoration: none;
}

.nav-dropdown { position: relative; }

.nav-dropdown-toggle {
  background: none;
  border: none;
  color: var(--text);
  opacity: 0.8;
  font: inherit;
  cursor: pointer;
  padding: 0.35rem 0.6rem;
  border-radius: 6px;
}
.nav-dropdown-toggle:hover, .nav-dropdown.open .nav-dropdown-toggle { opacity: 1; }
.nav-dropdown-toggle.active {
  background: var(--primary);
  color: var(--primary-text);
  opacity: 1;
}

.nav-dropdown-menu {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  margin-top: 0.6rem;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  min-width: 140px;
  padding: 0.3rem;
  flex-direction: column;
  z-index: 100;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
}
.nav-dropdown.open .nav-dropdown-menu { display: flex; }

.nav-dropdown-menu a {
  padding: 0.45rem 0.7rem;
  border-radius: 5px;
  white-space: nowrap;
  opacity: 1;
}
.nav-dropdown-menu a:hover { background: var(--bg); text-decoration: none; }

.container {
  max-width: 1440px;
  margin: 0 auto;
  padding: 1.5rem 2rem;
}

.table-wrap {
  overflow-x: auto;
}

h1 { font-size: 1.5rem; margin: 0.5rem 0 1rem; }
h3 { margin-top: 0; }

.card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
}

/* 候选人卡片列表用：每张卡片固定一个舒适宽度，横向平铺、自动换行，
   不再像单列卡片那样在宽屏下被拉伸得又宽又空（2026-09-05根据反馈：
   待入职/已入职页面在电脑端一个卡片占满整行，里面的输入框被拉得很宽很别扭）。 */
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
  gap: 1rem;
  align-items: start;
}
.card-grid .card { margin-bottom: 0; }

.banner-warn {
  background: var(--warn-bg);
  border-color: var(--warn-border);
}

.banner-muted { opacity: 0.75; }

.banner-danger {
  border-color: var(--danger);
}
.banner-danger h3 { color: var(--danger); }

.vendor-choice {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.6rem 0.75rem;
  margin: 0.5rem 0;
  display: inline-block;
}
.vendor-choice label { display: block; font-size: 0.9rem; margin: 0.2rem 0; font-weight: normal; }

.grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}

@media (max-width: 700px) {
  .grid-2 { grid-template-columns: 1fr; }
}

.form label { display: block; margin: 0.6rem 0 0.25rem; font-size: 0.9rem; color: var(--muted); }
.form input[type=text], .form input[type=file], .form input[type=date], .form input[type=datetime-local],
.form select, .form textarea {
  width: 100%;
  padding: 0.5rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: transparent;
  color: var(--text);
  font-size: 0.95rem;
}
.form textarea { resize: vertical; }
.form hr { border: none; border-top: 1px solid var(--border); margin: 1.25rem 0; }

.vendor-row { display: flex; gap: 0.5rem; align-items: center; }
.vendor-row select { flex: 1; }

.dropzone {
  border: 2px dashed var(--border);
  border-radius: 10px;
  padding: 2rem 1rem;
  text-align: center;
  cursor: pointer;
  color: var(--muted);
  transition: border-color 0.15s ease, background 0.15s ease;
}
.dropzone:hover { border-color: var(--primary); }
.dropzone.dragover {
  border-color: var(--primary);
  background: rgba(37, 99, 235, 0.06);
  color: var(--text);
}
.file-list {
  margin-top: 0.75rem;
  text-align: left;
  max-height: 160px;
  overflow-y: auto;
}
.file-list div { padding: 0.15rem 0; font-size: 0.88rem; color: var(--text); }

button, .button {
  cursor: pointer;
  border: 1px solid var(--border);
  background: var(--card-bg);
  color: var(--text);
  padding: 0.5rem 0.9rem;
  border-radius: 6px;
  font-size: 0.9rem;
  text-decoration: none;
  display: inline-block;
}
button:disabled { cursor: not-allowed; opacity: 0.45; }

button.primary, .primary {
  background: var(--primary);
  color: var(--primary-text);
  border-color: var(--primary);
}

button.secondary { color: var(--danger); border-color: var(--danger); }

button.danger, .danger {
  background: var(--danger);
  color: #ffffff;
  border-color: var(--danger);
}

button.success, .success {
  background: #22c55e;
  color: #ffffff;
  border-color: #22c55e;
}

button.pending, .pending {
  background: #f5c542;
  color: #1a1a1a;
  border-color: #f5c542;
}
.danger.small { padding: 0.25rem 0.6rem; font-size: 0.8rem; }
.small { padding: 0.25rem 0.6rem; font-size: 0.8rem; }

.offer-dropzone, .payment-dropzone, .onboard-attachment-dropzone {
  display: block;
  border: 2px dashed var(--border);
  border-radius: 8px;
  padding: 0.9rem;
  text-align: center;
  cursor: pointer;
  color: var(--muted);
  font-size: 0.85rem;
  margin: 0.4rem 0;
}
.offer-dropzone.dragover, .payment-dropzone.dragover, .onboard-attachment-dropzone.dragover { border-color: var(--primary); color: var(--primary); background: rgba(37, 99, 235, 0.06); }

.email-input.input-invalid { border-color: var(--danger); }

.undo-toast {
  position: fixed;
  left: 50%;
  bottom: 1.5rem;
  transform: translateX(-50%);
  background: var(--card-bg);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.7rem 1rem;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
  display: flex;
  align-items: center;
  gap: 0.75rem;
  font-size: 0.9rem;
  z-index: 1000;
}
.undo-toast .undo-countdown { color: var(--muted); font-variant-numeric: tabular-nums; }
.undo-toast button { white-space: nowrap; }

.vendor-list { list-style: none; padding: 0; margin: 0; }
.vendor-list li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.5rem 0;
  border-bottom: 1px solid var(--border);
}
.vendor-list li:last-child { border-bottom: none; }
.vendor-list form { margin: 0; }

.filters { display: flex; gap: 0.5rem; margin-bottom: 1rem; flex-wrap: wrap; }
.filters input, .filters select {
  padding: 0.45rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--card-bg);
  color: var(--text);
}

.pagination { display: flex; align-items: center; gap: 0.75rem; margin: 0.6rem 0; }

.table { width: 100%; border-collapse: collapse; background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.table th, .table td { padding: 0.6rem 0.8rem; border-bottom: 1px solid var(--border); text-align: left; font-size: 0.92rem; vertical-align: top; white-space: nowrap; }
.table thead th { color: var(--muted); font-weight: 600; }
.clickable-row { cursor: pointer; }
.clickable-row:hover { background: rgba(37, 99, 235, 0.06); }
.row-sent { background: rgba(34, 197, 94, 0.10); }
.row-sent:hover { background: rgba(34, 197, 94, 0.18); }
.row-pending { background: rgba(245, 197, 66, 0.18); }
.row-pending:hover { background: rgba(245, 197, 66, 0.28); }
.row-rejected { background: rgba(220, 38, 38, 0.10); }
.row-rejected:hover { background: rgba(220, 38, 38, 0.18); }
.row-open { background: rgba(34, 197, 94, 0.20); }
.row-open:hover { background: rgba(34, 197, 94, 0.32); }
.row-closed { background: rgba(148, 163, 184, 0.32); }
.row-closed:hover { background: rgba(148, 163, 184, 0.44); }
.table a[target="_blank"] { color: var(--primary); text-decoration: none; white-space: nowrap; }
.table a[target="_blank"]:hover { text-decoration: underline; }
.sort-link { color: inherit; text-decoration: none; white-space: nowrap; }
.sort-link:hover { color: var(--primary); text-decoration: underline; }

.row-actions {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  white-space: nowrap;
}
.row-actions a { color: var(--primary); text-decoration: none; }
.row-actions a:hover { text-decoration: underline; }
.row-actions form { margin: 0; }
/* 简历库表格"面试官"列专用（2026-09-16根据反馈）：这一列塞了"已发送标签+两个按钮"，横排
   会把这一列撑得比所有其他列加起来还宽，改成竖排，每项各占一行，列宽收回正常范围。
   只在library.html这一处用，不动.row-actions在job_detail/jobs/roster等其他表格里横排的默认样式。 */
.row-actions-stack { flex-direction: column; align-items: flex-start; }

.status-badge {
  display: inline-block;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  background: rgba(37, 99, 235, 0.12);
  color: var(--primary);
  font-size: 0.8rem;
  vertical-align: middle;
}
.status-badge-reject {
  background: rgba(236, 72, 153, 0.15);
  color: #ec4899;
}

.score-badge {
  display: inline-block;
  min-width: 2.2rem;
  text-align: center;
  padding: 0.15rem 0.5rem;
  border-radius: 999px;
  font-weight: 600;
  font-size: 0.85rem;
}
.inline-job-switch { display: flex; flex-direction: column; gap: 0.3rem; margin-top: 0.4rem; min-width: 9rem; }
.inline-job-switch select { font-size: 0.82rem; padding: 0.2rem; }
.score-high { background: rgba(34, 197, 94, 0.18); color: #16a34a; }
.score-mid { background: rgba(245, 158, 11, 0.18); color: #b45309; }
.score-low { background: rgba(220, 38, 38, 0.15); color: var(--danger); }

.tag {
  display: inline-block;
  padding: 0.1rem 0.5rem;
  border-radius: 4px;
  background: var(--border);
  font-size: 0.8rem;
}
.tag.warn { background: var(--warn-bg); border: 1px solid var(--warn-border); }
.tag.pending { background: rgba(245, 197, 66, 0.25); border: 1px solid rgba(245, 197, 66, 0.7); }
.tag.success { background: rgba(34, 197, 94, 0.22); border: 1px solid rgba(34, 197, 94, 0.85); color: #16a34a; font-weight: 600; }
.tag.danger { background: rgba(220, 38, 38, 0.15); border: 1px solid rgba(220, 38, 38, 0.5); color: var(--danger); }
.tag.muted { opacity: 0.6; }

.appointment-time-reserved { opacity: 0.4; text-decoration: line-through; cursor: not-allowed; }
.appointment-reserved-hint { color: var(--danger); }

.fee-hold-toggle-form, .blacklist-toggle-form { margin: 0.3rem 0; }
.fee-hold-toggle, .blacklist-toggle { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; cursor: pointer; user-select: none; }
.fee-hold-toggle input[type="checkbox"], .blacklist-toggle input[type="checkbox"] { width: 1.1rem; height: 1.1rem; cursor: pointer; accent-color: var(--danger); }

.muted { color: var(--muted); }

.actions-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1rem;
}
.action-form { border: 1px solid var(--border); border-radius: 8px; padding: 0.75rem; }
.action-form h4 { margin: 0 0 0.5rem; }
.action-form label { margin-right: 0.75rem; font-size: 0.9rem; }
.action-form input, .action-form textarea { width: 100%; margin: 0.4rem 0; padding: 0.4rem; border: 1px solid var(--border); border-radius: 5px; background: transparent; color: var(--text); }
.action-form button { margin-top: 0.4rem; }
.button-row { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.button-row button { margin-top: 0; }

.timeline { list-style: none; padding: 0; margin: 0; }
.timeline li { padding: 0.4rem 0; border-bottom: 1px solid var(--border); font-size: 0.92rem; }
.timeline li:last-child { border-bottom: none; }

.work-item { margin-bottom: 0.75rem; padding-bottom: 0.75rem; border-bottom: 1px dashed var(--border); }
.work-item:last-child { border-bottom: none; }

.wh-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.5rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.75rem;
  margin-bottom: 0.6rem;
}
.wh-row textarea { grid-column: 1 / -1; }
.wh-row button { grid-column: 1 / -1; justify-self: start; }
.wh-row input, .wh-row textarea {
  padding: 0.4rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: transparent;
  color: var(--text);
}
#add-work-row { margin-bottom: 1rem; }

.benefit-row { display: flex; gap: 0.5rem; align-items: center; margin-bottom: 0.5rem; }
.benefit-row input[type=text] { flex: 1; width: auto; margin: 0; }
.benefit-row button { flex-shrink: 0; white-space: nowrap; }
.toggle-default-btn.active-default {
  background: var(--primary);
  color: var(--primary-text);
  border-color: var(--primary);
}
#add-benefit-row { margin-bottom: 1rem; }

.translated-text {
  white-space: pre-wrap;
  word-break: break-word;
  font-family: inherit;
  font-size: 0.9rem;
  max-height: 400px;
  overflow-y: auto;
  margin: 0;
}

.flash-list { margin-bottom: 1rem; }
.flash { padding: 0.6rem 0.9rem; border-radius: 6px; margin-bottom: 0.4rem; font-size: 0.92rem; }
.flash-success { background: rgba(34, 197, 94, 0.15); border: 1px solid #22c55e; }
.flash-warning { background: var(--warn-bg); border: 1px solid var(--warn-border); }
.flash-error { background: rgba(220, 38, 38, 0.12); border: 1px solid var(--danger); }

.calendar-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
.calendar-title { font-weight: 600; }
.calendar-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.calendar-table th { padding: 0.4rem; color: var(--muted); font-weight: 600; text-align: center; }
.calendar-table td { border: 1px solid var(--border); vertical-align: top; height: 110px; padding: 0.3rem; font-size: 0.8rem; overflow-y: auto; }
.calendar-table td.other-month { opacity: 0.35; }
.calendar-table td.today { background: rgba(37, 99, 235, 0.08); }
.day-num { font-weight: 600; margin-bottom: 0.25rem; }
.event-chip {
  display: block;
  font-size: 0.72rem;
  padding: 0.15rem 0.3rem;
  margin-bottom: 0.25rem;
  border-radius: 4px;
  background: var(--border);
  color: var(--text);
  text-decoration: none;
}
.event-chip-line1, .event-chip-line2 {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.event-chip-line2 {
  opacity: 0.75;
  font-size: 0.68rem;
}
.event-chip.stage-面试 { background: rgba(37, 99, 235, 0.18); }
.event-chip.stage-入职 { background: rgba(34, 197, 94, 0.22); }
.event-chip.stage-筛选 { background: rgba(107, 114, 128, 0.2); }
.event-chip.stage-放弃 { background: rgba(220, 38, 38, 0.15); }

.upcoming ul { list-style: none; padding: 0; margin: 0; }
.upcoming li { padding: 0.3rem 0; }

@media (max-width: 700px) {
  .calendar-table td { height: 70px; font-size: 0.7rem; }
}

.quick-status-modal {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 1.25rem;
  background: var(--card-bg);
  color: var(--text);
  width: 360px;
  max-width: 90vw;
}
.quick-status-modal::backdrop {
  background: rgba(0, 0, 0, 0.4);
}
.quick-status-modal h4 { margin: 0 0 0.75rem; }
.quick-status-modal label { display: block; margin: 0.6rem 0 0.25rem; font-size: 0.9rem; color: var(--muted); }
.quick-status-modal select,
.quick-status-modal input,
.quick-status-modal textarea {
  width: 100%;
  padding: 0.45rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: transparent;
  color: var(--text);
  font-size: 0.9rem;
}
.quick-status-modal .modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 0.5rem;
  margin-top: 1rem;
}
.status-clickable { cursor: pointer; }
.status-clickable:hover { opacity: 0.8; }

.login-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 80vh;
}
.login-card { width: 320px; max-width: 90vw; }
.login-card h1 { font-size: 1.3rem; text-align: center; margin-bottom: 1.5rem; }
.login-card label { display: block; margin: 0.5rem 0 0.3rem; font-size: 0.9rem; color: var(--muted); }
.login-card input {
  width: 100%;
  padding: 0.55rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: transparent;
  color: var(--text);
  font-size: 0.95rem;
  margin-bottom: 1rem;
}
.login-card button { width: 100%; }

/* 疑似重复：详情比较页——顶部固定操作栏，下面两栏各自独立滚动，方便对照着看 */
.compare-toolbar {
  position: sticky;
  top: 58px; /* 紧贴在顶部固定导航栏下方，避免两个sticky元素叠在一起 */
  z-index: 20;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.6rem;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.75rem 1rem;
  margin-bottom: 1rem;
}
.compare-toolbar form { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.compare-columns {
  display: flex;
  gap: 1rem;
  height: calc(100vh - 190px);
  min-height: 320px;
}
.compare-column {
  flex: 1;
  min-width: 0;
  overflow-y: auto;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 1rem 1.25rem;
}
@media (max-width: 900px) {
  .compare-columns { flex-direction: column; height: auto; }
  .compare-column { height: 60vh; }
}

.payment-request-row { padding: 0.5rem 0; border-bottom: 1px dashed var(--border); }
.payment-request-row:last-child { border-bottom: none; }

/* 顶部导航"待处理队列"数字角标：红圈白字 */
.nav-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 1.15rem;
  height: 1.15rem;
  padding: 0 0.3rem;
  margin-left: 0.3rem;
  border-radius: 999px;
  background: var(--danger);
  color: #ffffff;
  font-size: 0.7rem;
  font-weight: 700;
  line-height: 1;
  vertical-align: middle;
}

/* 折叠的"待处理事项"下拉总标题：不显示具体数量，只用红点提示"里面有需要处理的" */
.nav-badge-dot {
  display: inline-block;
  width: 0.4rem;
  height: 0.4rem;
  margin: 0 0.2rem;
  border-radius: 50%;
  background: var(--danger);
  vertical-align: middle;
}

/* ---- 面试官看板（@bot菜单网页化，2026-09-14第一期）：候选人卡片组件 ----
   跟演示阶段(interviewer_dashboard_demo)用的是同一套视觉，直接落到共用样式表里，方便后续
   几期新增的tab（初筛待定/未确认面试时间等）复用，不用每个页面各自重写一遍。 */
.group-dash-head { padding: 0 0 0.9rem; }
.group-dash-eyebrow {
  display: flex; align-items: center; gap: 0.4rem;
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--muted); margin-bottom: 0.4rem;
}
.group-dash-eyebrow .dot { width: 5px; height: 5px; border-radius: 50%; background: var(--primary); }
.group-dash-title { font-size: 1.25rem; font-weight: 700; }
.group-dash-sub { font-size: 0.82rem; color: var(--muted); margin-top: 0.15rem; }
/* 供应商看板用跟面试官看板不一样的强调色（紫色系），一眼就能分清自己在哪一端
   （2026-09-16根据反馈新增），只换eyebrow圆点+大标题的颜色，其余布局不变。 */
.group-dash-head.vendor .group-dash-eyebrow .dot { background: var(--vendor-accent); }
.group-dash-head.vendor .group-dash-title { color: var(--vendor-accent); }

.row-card {
  position: relative; background: var(--card-bg); border: 1px solid var(--border); border-radius: 12px;
  padding: 0.9rem 1rem; box-shadow: 0 1px 2px rgba(20, 24, 32, 0.04), 0 8px 20px -14px rgba(20, 24, 32, 0.16);
}
/* 看板卡片"未读/已读"状态（2026-09-14新增）：左侧色条+右上角圆点双重提示，颜色一致
   （红=未读/绿=已读），色条给"扫一眼列表"用，圆点给已经聚焦到某张卡片时更明确的确认。
   看板没有登录/身份系统，这是群共享状态——谁点开过详情页，对所有人都算已读。 */
.card-unread { border-left: 3px solid var(--danger); }
.card-read { border-left: 3px solid #16a34a; }
.read-badge {
  position: absolute; top: 0.7rem; right: 0.7rem; width: 8px; height: 8px; border-radius: 50%;
}
.card-unread .read-badge { background: var(--danger); box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.18); }
.card-read .read-badge { background: #16a34a; box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.16); }
.clickable-card { cursor: pointer; }
.rc-top { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-bottom: 0.3rem; }
.rc-name { font-size: 1rem; font-weight: 700; }
.rc-meta { font-size: 0.8rem; color: var(--muted); margin-bottom: 0.55rem; }
.rc-meta .sep { margin: 0 0.35rem; opacity: 0.5; }
.rc-links { display: flex; align-items: center; gap: 0.9rem; margin-bottom: 0.7rem; flex-wrap: wrap; }
.resume-link { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.8rem; color: var(--primary); text-decoration: none; }
.resume-link:hover { text-decoration: underline; }

.note-wrap { position: relative; display: inline-block; }
.note-trigger {
  display: inline-flex; align-items: center; gap: 0.3rem;
  font: inherit; font-size: 0.8rem; color: var(--muted); background: none; border: none; padding: 0; cursor: pointer;
}
.note-wrap:hover .note-trigger { color: var(--text); }
.note-popover {
  display: none; position: absolute; top: 100%; left: 0; z-index: 30; padding-top: 14px;
  width: 380px; max-width: min(380px, 85vw);
}
.note-popover-card {
  position: relative; background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 12px 32px -8px rgba(20, 24, 32, 0.28);
  padding: 1rem 1.15rem; font-size: 0.85rem; line-height: 1.65; color: var(--text);
}
.note-popover-card::before {
  content: ""; position: absolute; top: -6px; left: 14px; width: 11px; height: 11px; background: var(--card-bg);
  border-left: 1px solid var(--border); border-top: 1px solid var(--border); transform: rotate(45deg);
}
.note-popover dt { color: var(--muted); font-size: 0.76rem; font-weight: 700; margin-top: 0.7rem; }
.note-popover dt:first-child { margin-top: 0; }
.note-popover dd { margin: 0.15rem 0 0; }
.note-wrap:hover .note-popover, .note-wrap:focus-within .note-popover { display: block; }

.rc-actions { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.45rem; }
.rc-actions form { margin: 0; }
/* .a-pass/.a-fail/.a-pending之前只在.rc-actions下面有hover态样式（且颜色属性写在
   ".rc-actions button"这条更高优先级的规则里，即使补hover也压不过），.three-way（候选人
   详情页的三键操作）复用同一套class却完全没有对应样式，两处按钮都渲染成没有颜色区分的
   默认灰色——2026-09-14根据反馈改成不绑定具体容器的通用规则：颜色/边框/背景全部收进
   .a-pass/.a-fail/.a-pending自己名下（不再留在".rc-actions button"里跟它们抢优先级），
   .rc-actions/.three-way及以后任何复用这三个class的地方都自动生效，且默认态就带颜色
   （不用等hover才看出区别）。 */
.rc-actions button {
  width: 100%; padding: 0.5rem 0.4rem; border-radius: 8px; font: inherit; font-size: 0.82rem; font-weight: 600; cursor: pointer;
}
.a-pass, .a-fail, .a-pending {
  display: inline-block; width: 100%; padding: 0.5rem 0.4rem; border-radius: 8px; border: 1.5px solid transparent;
  font: inherit; font-size: 0.82rem; font-weight: 600; cursor: pointer; text-align: center;
}
.a-pass { border-color: rgba(37, 99, 235, 0.35); background: rgba(37, 99, 235, 0.08); color: var(--primary); }
.a-fail { border-color: rgba(220, 38, 38, 0.3); background: rgba(220, 38, 38, 0.08); color: var(--danger); }
.a-pending { border-color: rgba(245, 197, 66, 0.5); background: rgba(245, 197, 66, 0.18); color: #b45309; }
.a-pass:hover { border-color: var(--primary); background: rgba(37, 99, 235, 0.15); }
.a-fail:hover { border-color: var(--danger); background: rgba(220, 38, 38, 0.15); }
.a-pending:hover { border-color: #b45309; background: rgba(245, 197, 66, 0.3); }

/* ---- 面试官候选人页（2026-09-14新增）：状态卡片、会议信息、Offer/请款确认、往轮记录、备注 ---- */
.cand-page { max-width: 560px; margin: 0 auto; }
.cand-back-link {
  display: inline-block; margin: 0.6rem 0 0.3rem; font-size: 0.82rem; color: var(--muted); text-decoration: none;
}
.cand-back-link:hover { color: var(--primary); }
.cand-head { padding: 0.5rem 0 0.9rem; }
.cand-head-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.8rem; }
.cand-name { font-size: 1.4rem; font-weight: 700; line-height: 1.2; }
.cand-meta { font-size: 0.85rem; color: var(--muted); margin-top: 0.25rem; }
.cand-stage-badge {
  flex-shrink: 0; display: inline-flex; align-items: center; gap: 0.35rem;
  padding: 0.3rem 0.65rem; border-radius: 999px; font-size: 0.78rem; font-weight: 700;
  background: var(--warn-bg); color: #b45309; white-space: nowrap;
}
.cand-card + .cand-card { margin-top: 0.8rem; }
.cand-card-label { font-size: 0.74rem; font-weight: 700; letter-spacing: 0.03em; color: var(--muted); margin-bottom: 0.6rem; }

.meeting-time { font-size: 1.05rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.meeting-details {
  margin-top: 0.6rem; padding: 0.7rem 0.8rem; border-radius: 9px; background: var(--bg);
  border: 1px solid var(--border); font-size: 0.84rem; line-height: 1.7;
}
.meeting-details a { color: var(--primary); word-break: break-all; }
.meeting-actions { display: flex; gap: 0.6rem; margin-top: 0.85rem; flex-wrap: wrap; }

.three-way { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; }
.three-way form { margin: 0; }
.three-way button { width: 100%; }

.slot-row { display: flex; flex-direction: column; gap: 0.5rem; }
.slot-row form { margin: 0; }
.slot-btn {
  width: 100%; padding: 0.65rem 0.8rem; border-radius: 9px; border: 1.5px solid var(--border); background: var(--bg);
  color: var(--text); font: inherit; font-size: 0.88rem; font-weight: 600; text-align: left; cursor: pointer;
  font-variant-numeric: tabular-nums;
}
.slot-btn:hover { border-color: var(--primary); background: rgba(37, 99, 235, 0.08); color: var(--primary); }

.reject-link {
  display: block; width: 100%; margin-top: 0.7rem; padding: 0.6rem; border-radius: 9px;
  border: 1.5px dashed var(--border); background: none; color: var(--muted); font: inherit;
  font-size: 0.85rem; font-weight: 600; cursor: pointer; text-align: center;
}
.reject-link:hover { border-color: var(--danger); color: var(--danger); }

.avail-panel { margin-top: 0.9rem; padding-top: 0.9rem; border-top: 1px dashed var(--border); }
.avail-date-row { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.85rem; }
.avail-date-row input[type="date"] { flex: 1; }
.avail-hour-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.4rem; margin: 0.5rem 0 1rem; }
.avail-hour-chip {
  padding: 0.45rem 0.2rem; border-radius: 7px; border: 1.5px solid var(--border); background: var(--bg);
  color: var(--text); font-size: 0.8rem; font-weight: 600; text-align: center; cursor: pointer; font-variant-numeric: tabular-nums;
}
.avail-hour-chip input { display: none; }
.avail-hour-chip:has(input:checked) { border-color: var(--primary); background: rgba(37, 99, 235, 0.08); color: var(--primary); }

.confirm-summary { padding: 0.7rem 0.8rem; border-radius: 9px; background: var(--bg); border: 1px solid var(--border); font-size: 0.86rem; line-height: 1.75; margin-bottom: 0.85rem; }
.btn-danger-ghost { background: rgba(220, 38, 38, 0.08); color: var(--danger); border: 1.5px solid transparent; }
.btn-danger-ghost:hover { border-color: var(--danger); }

.round-item { padding: 0.6rem 0; border-top: 1px solid var(--border-soft, var(--border)); }
.round-item:first-child { border-top: none; padding-top: 0; }
.round-top { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.25rem; }
.round-tag { font-size: 0.76rem; font-weight: 700; color: var(--muted); }
.round-note { font-size: 0.82rem; color: var(--text); opacity: 0.85; line-height: 1.55; white-space: pre-wrap; }

.payment-row { padding: 0.65rem 0; border-top: 1px solid var(--border-soft, var(--border)); }
.payment-row:first-child { border-top: none; padding-top: 0; }
.payment-top { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.4rem; flex-wrap: wrap; }
.payment-amount { font-size: 0.92rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.payment-actions { display: flex; gap: 0.5rem; }
.payment-actions form { margin: 0; }
.payment-actions button {
  padding: 0.4rem 0.7rem; border-radius: 7px; border: 1.5px solid var(--border); background: var(--bg);
  color: var(--text); font: inherit; font-size: 0.78rem; font-weight: 600; cursor: pointer;
}

.note-entry { padding: 0.6rem 0.7rem; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-soft, var(--border)); margin-bottom: 0.6rem; }
.note-meta { font-size: 0.74rem; color: var(--muted); margin-bottom: 0.25rem; }
.note-text { font-size: 0.85rem; line-height: 1.6; white-space: pre-wrap; }

.terminate-row { margin-top: 1rem; padding-top: 0.85rem; border-top: 1px dashed var(--border); text-align: center; }
.terminate-link { background: none; border: none; color: var(--muted); font: inherit; font-size: 0.78rem; cursor: pointer; padding: 0.2rem; }
.terminate-link:hover { color: var(--danger); text-decoration: underline; }

@media (max-width: 700px) {
  .note-popover { width: min(340px, 85vw); }
}

.simple-row-card { display: block; text-decoration: none; color: inherit; transition: border-color 0.15s ease; }
.simple-row-card:hover { border-color: var(--primary); }
.simple-row-lines { font-size: 0.82rem; color: var(--text); opacity: 0.85; line-height: 1.6; }
.rc-excerpt {
  font-size: 0.82rem; color: var(--text); opacity: 0.75; line-height: 1.55;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---- 简历库表格"备注"列：固定高度截断+悬停弹完整内容（2026-09-16根据反馈：上传备注是
   整段简历摘要原文，动辄几十行，直接铺在表格单元格里把整行撑得巨长，行与行之间高矮参差不齐）。
   表格外面套了.table-wrap（overflow-x:auto）做横向滚动，CSS :hover + position:absolute的浮窗
   会被这层overflow裁切掉，所以这个改用JS算坐标、position:fixed定位（见app.js），不是纯CSS。 */
.note-cell-trunc {
  max-width: 260px; max-height: 2.8em; overflow: hidden; line-height: 1.4; cursor: default;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; white-space: normal;
}
.hover-tip {
  position: fixed; z-index: 500; max-width: 420px; max-height: 60vh; overflow-y: auto;
  background: var(--card-bg); border: 1px solid var(--border); border-radius: 8px;
  padding: 0.7rem 0.9rem; font-size: 0.85rem; line-height: 1.6; color: var(--text);
  box-shadow: 0 12px 32px -8px rgba(20, 24, 32, 0.28); white-space: pre-line; pointer-events: none;
}
.hover-tip[hidden] { display: none; }

/* ---- 面试官看板统一tab导航（2026-09-14第三期：8个tab合并进一个页面） ---- */
.dash-tabs { margin: 0.9rem 0 1.1rem; }
.dash-tabs-desktop {
  display: flex; flex-wrap: wrap; gap: 0.4rem; border-bottom: 1px solid var(--border); padding-bottom: 0.6rem;
}
.dash-tab {
  padding: 0.4rem 0.75rem; border-radius: 999px; font-size: 0.82rem; font-weight: 600;
  color: var(--muted); text-decoration: none; border: 1.5px solid transparent; white-space: nowrap;
}
.dash-tab:hover { color: var(--text); background: var(--bg); }
.dash-tab.active { color: var(--primary); background: rgba(37, 99, 235, 0.1); border-color: rgba(37, 99, 235, 0.35); }
.dash-tabs-mobile { display: none; }
.dash-tab-current {
  display: flex; align-items: center; justify-content: space-between; cursor: pointer; list-style: none;
  padding: 0.6rem 0.85rem; border: 1.5px solid var(--border); border-radius: 10px; font-weight: 700; font-size: 0.92rem;
  background: var(--card-bg);
}
.dash-tab-current::-webkit-details-marker { display: none; }
.dash-tab-caret { color: var(--muted); font-size: 0.8rem; }
.dash-tab-sheet {
  margin-top: 0.4rem; border: 1px solid var(--border); border-radius: 10px; overflow: hidden;
  background: var(--card-bg); box-shadow: 0 12px 32px -8px rgba(20, 24, 32, 0.28);
}
.dash-tab-sheet-item {
  display: block; padding: 0.65rem 0.9rem; font-size: 0.88rem; color: var(--text); text-decoration: none;
  border-bottom: 1px solid var(--border);
}
.dash-tab-sheet-item:last-child { border-bottom: none; }
.dash-tab-sheet-item.active { color: var(--primary); font-weight: 700; background: rgba(37, 99, 235, 0.06); }
.dash-tab-unread {
  display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px;
  padding: 0 4px; margin-left: 0.3rem; border-radius: 999px; background: var(--danger); color: #fff;
  font-size: 0.68rem; font-weight: 700; vertical-align: 1px;
}

@media (max-width: 700px) {
  .dash-tabs-desktop { display: none; }
  .dash-tabs-mobile { display: block; }
}

/* ---- 供应商看板（2026-09-15新增）：跟面试官看板共用.row-card/.dash-tabs/.cand-*这些样式，
   这里只补供应商侧独有的几块：已提供简历列表行、查重结果提示条、分页、候选时间多日期选择器 ---- */
.submitted-row { padding: 0.8rem 0; border-bottom: 1px solid var(--border); }
.submitted-row:last-child { border-bottom: none; }
.sr-top { display: flex; align-items: baseline; justify-content: space-between; gap: 0.6rem; flex-wrap: wrap; }
.sr-name { font-weight: 700; font-size: 0.95rem; }
.sr-time { font-size: 0.76rem; color: var(--muted); font-variant-numeric: tabular-nums; }
.sr-meta { font-size: 0.8rem; color: var(--muted); margin-top: 0.1rem; }
.sr-status { font-size: 0.82rem; margin-top: 0.35rem; }
.sr-feedback { margin-top: 0.45rem; padding: 0.5rem 0.65rem; border-radius: 7px; background: var(--bg); border: 1px solid var(--border); font-size: 0.8rem; line-height: 1.6; color: var(--text); opacity: 0.9; }
.sr-feedback b { color: var(--muted); font-weight: 700; }
.dedup-note { margin-top: 0.45rem; padding: 0.5rem 0.65rem; border-radius: 7px; font-size: 0.78rem; line-height: 1.6; }
.dedup-note.dispute { background: rgba(220, 38, 38, 0.08); border: 1px solid rgba(220, 38, 38, 0.35); color: var(--text); }
.dedup-note.dispute b { color: var(--danger); }
.dedup-note.internal { background: var(--bg); border: 1px solid var(--border); color: var(--muted); }
.dedup-note.pending { background: var(--warn-bg); border: 1px solid var(--warn-border); color: var(--text); }
.dedup-note.unique { color: var(--muted); }

.pager { display: flex; align-items: center; justify-content: center; gap: 0.9rem; margin-top: 1.1rem; font-size: 0.85rem; color: var(--muted); }
.pager button, .pager a.button { padding: 0.35rem 0.8rem; }
.pager button:disabled { opacity: 0.4; cursor: not-allowed; }

.slot-date-row { border: 1px solid var(--border); border-radius: 9px; padding: 0.8rem 0.9rem; margin-bottom: 0.7rem; position: relative; }
.slot-date-select, .slot-date-row input[type="date"] { padding: 0.45rem 0.6rem; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text); font-size: 0.86rem; margin-bottom: 0.65rem; width: 100%; }
.slot-chip-row { display: flex; flex-wrap: wrap; gap: 0.35rem; }
.slot-chip-label { display: inline-block; cursor: pointer; }
.slot-chip { display: inline-block; padding: 0.35rem 0.6rem; border-radius: 7px; border: 1.5px solid var(--border); background: var(--bg); color: var(--text); font-size: 0.8rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.slot-chip-label.checked .slot-chip { border-color: var(--primary); background: rgba(37, 99, 235, 0.08); color: var(--primary); }
.slot-chip.reserved { opacity: 0.4; text-decoration: line-through; cursor: not-allowed; }
.slot-row-remove { position: absolute; top: 0.6rem; right: 0.7rem; background: none; border: none; color: var(--muted); font-size: 0.9rem; cursor: pointer; padding: 0.1rem 0.3rem; }
.slot-row-remove:hover { color: var(--danger); }
.slot-add-btn { background: none; border: 1.5px dashed var(--border); color: var(--muted); width: 100%; padding: 0.55rem; border-radius: 9px; font-size: 0.85rem; font-weight: 600; cursor: pointer; margin-top: 0.2rem; }
.slot-add-btn:hover { border-color: var(--primary); color: var(--primary); }

.email-body-preview { border: 1px solid var(--border); border-radius: 9px; padding: 1rem 1.1rem; background: var(--bg); margin-bottom: 0.7rem; font-size: 0.92rem; line-height: 1.6; }
.email-body-preview p:first-child { margin-top: 0; }
.email-body-preview p:last-child { margin-bottom: 0; }

/* 已入职/待入职：左侧简单列表 + 右侧完整卡片详情，取代原来平铺的card-grid
   （2026-09-15根据反馈：候选人一多，卡片平铺得找半天，改成左边列表点选、右边只看当前这一个）。
   右边的卡片内容跟以前完全一样，只是外面套了个按id切换显示/隐藏的容器，不改字段/表单/路由。 */
.split-layout { display: grid; grid-template-columns: 280px 1fr; gap: 1.1rem; align-items: start; }
@media (max-width: 900px) { .split-layout { grid-template-columns: 1fr; } }

.cand-list { background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; position: sticky; top: 1rem; max-height: calc(100vh - 2rem); overflow-y: auto; }
.cand-list-count { padding: 0.65rem 0.9rem 0.5rem; font-size: 0.78rem; color: var(--muted); border-bottom: 1px solid var(--border); }
.cand-row { padding: 0.7rem 0.9rem; border-bottom: 1px solid var(--border); cursor: pointer; }
.cand-row:last-child { border-bottom: none; }
.cand-row:hover { background: rgba(37, 99, 235, 0.06); }
.cand-row.selected { background: rgba(37, 99, 235, 0.1); box-shadow: inset 3px 0 0 var(--primary); }
.cand-row-name { font-weight: 600; font-size: 0.95rem; display: flex; align-items: center; justify-content: space-between; gap: 0.4rem; }
.cand-row-icons { font-size: 0.78rem; white-space: nowrap; flex-shrink: 0; letter-spacing: -0.05em; }
.cand-row-meta { margin-top: 0.2rem; font-size: 0.8rem; color: var(--muted); line-height: 1.4; }
.cand-detail-col .card { margin-bottom: 0; }
.slot-add-btn:disabled { opacity: 0.4; cursor: not-allowed; }
