/* B2B — HR cabinet (Vacancies + Applications tabs, employer org signup).
   Reuses biz-btn / biz-badge / biz-data-table / biz-filter-chip / biz-create-form
   from business.css + business-common.css; only cabinet-specific bits live here. */

/* ── Tab header ─────────────────────────────── */
.biz-emp-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}

.biz-emp-head__title {
  font-size: 17px;
  font-weight: 700;
  color: var(--text);
  margin: 0;
}

/* ── Vacancy status chips ───────────────────── */
.biz-badge--vac-draft { background: var(--surface-2); color: var(--text-secondary); }
.biz-badge--vac-published { background: rgba(22, 163, 74, 0.1); color: var(--green, #16a34a); }
.biz-badge--vac-closed { background: rgba(138, 138, 148, 0.12); color: var(--text-muted); }

[data-theme="dark"] .biz-badge--vac-published { background: rgba(34, 197, 94, 0.15); }

.biz-emp-actions { white-space: nowrap; }
.biz-emp-actions .biz-btn { margin-bottom: 4px; }

/* ── Vacancy form ───────────────────────────── */
.biz-emp-form {
  max-width: 680px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 24px;
}

.biz-emp-form__textarea {
  resize: vertical;
  min-height: 180px;
  font-family: inherit;
  line-height: 1.55;
}

.biz-emp-form__row {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.biz-emp-form__row .biz-create-form__group { flex: 1 1 120px; }

.biz-emp-form__check { display: flex; align-items: flex-end; }

.biz-emp-form__checklabel {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  padding-bottom: 10px;
}

.biz-emp-form__actions {
  display: flex;
  gap: 8px;
  margin-top: 8px;
}

.biz-emp-form__hint {
  font-size: 12.5px;
  color: var(--text-muted);
  margin-top: 8px;
  line-height: 1.5;
}

/* ── Reveals counter + limit banner ─────────── */
.biz-emp-reveals {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-secondary);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 6px 14px;
}

.biz-emp-reveals--out {
  color: var(--orange, #ea580c);
  background: rgba(234, 88, 12, 0.08);
  border-color: rgba(234, 88, 12, 0.25);
}

.biz-emp-limit {
  display: flex;
  flex-direction: column;
  gap: 4px;
  background: rgba(234, 88, 12, 0.07);
  border: 1px solid rgba(234, 88, 12, 0.25);
  border-radius: var(--radius-sm, 10px);
  padding: 14px 16px;
  margin-bottom: 16px;
  font-size: 13.5px;
  color: var(--text-secondary);
  line-height: 1.5;
}

.biz-emp-limit b { color: var(--text); }

/* ── Application cards ──────────────────────── */
.biz-emp-app {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px;
  margin-bottom: 12px;
}

.biz-emp-app__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.biz-emp-app__vac {
  font-size: 14.5px;
  font-weight: 700;
  color: var(--text);
}

.biz-emp-app__date {
  font-size: 12.5px;
  font-weight: 500;
  color: var(--text-muted);
  margin-left: 10px;
}

.biz-emp-app__controls {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.biz-emp-app__anon {
  display: inline-block;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-muted);
  background: var(--surface-2);
  border: 1px dashed var(--border);
  border-radius: 8px;
  padding: 6px 12px;
  margin-bottom: 10px;
}

.biz-emp-app__contact {
  display: inline-flex;
  flex-direction: column;
  gap: 2px;
  font-size: 13.5px;
  background: rgba(22, 163, 74, 0.07);
  border: 1px solid rgba(22, 163, 74, 0.22);
  border-radius: 8px;
  padding: 8px 12px;
  margin-bottom: 10px;
}

.biz-emp-app__contact b { color: var(--text); }
.biz-emp-app__contact a { color: var(--accent); text-decoration: none; }
.biz-emp-app__contact a:hover { text-decoration: underline; }

.biz-emp-app__role {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-secondary);
  margin-bottom: 6px;
}

.biz-emp-app__summary {
  font-size: 13.5px;
  color: var(--text-secondary);
  line-height: 1.55;
  margin-bottom: 8px;
}

.biz-emp-app__noprofile {
  font-size: 13px;
  color: var(--text-muted);
  margin-bottom: 8px;
}

.biz-emp-app__cover {
  font-size: 13.5px;
  color: var(--text-secondary);
  line-height: 1.55;
  background: var(--bg-subtle, var(--surface-2));
  border-left: 3px solid var(--accent);
  border-radius: 0 8px 8px 0;
  padding: 10px 12px;
  margin-top: 8px;
  white-space: pre-wrap;
}

.biz-emp-app__cover span {
  display: block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  margin-bottom: 4px;
}

/* ── Org signup text ────────────────────────── */
.biz-emp-org__text {
  font-size: 14px;
  color: var(--text-secondary);
  line-height: 1.6;
  margin: -8px 0 20px;
  text-align: center;
}

/* ── Candidates: provenance, fit score, upload zone ───────── */

/* The consent badge is deliberately loud and the own-data badge deliberately
   plain: an employer must never mistake a CV they uploaded for a candidate who
   agreed to be contacted. */
.biz-emp-src {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 3px 9px;
  border-radius: 999px;
  cursor: default;
}

.biz-emp-src--applied {
  background: rgba(34, 197, 94, 0.12);
  color: var(--green, #22c55e);
  border: 1px solid rgba(34, 197, 94, 0.32);
}

.biz-emp-src--own {
  background: var(--surface-2);
  color: var(--text-muted);
  border: 1px dashed var(--border);
}

.biz-emp-app__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: -2px 0 10px;
}

.biz-emp-app__novac {
  color: var(--text-muted);
  font-weight: 500;
}

.biz-emp-app__file {
  font-size: 12px;
  color: var(--text-muted);
  margin-top: 8px;
}

.biz-emp-fit-pending {
  font-size: 12px;
  color: var(--text-muted);
  white-space: nowrap;
}

.biz-emp-sorted {
  font-size: 12px;
  color: var(--text-muted);
  margin: 12px 0 8px;
}

.biz-emp-upload {
  border: 1px dashed var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  padding: 16px 18px;
  margin-bottom: 16px;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.biz-emp-upload.is-over {
  border-color: var(--accent);
  background: var(--bg-subtle, var(--surface-2));
}

.biz-emp-upload__title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
}

.biz-emp-upload__hint {
  font-size: 13px;
  color: var(--text-secondary);
  line-height: 1.55;
  margin-top: 4px;
}

.biz-emp-upload__row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-top: 12px;
}

.biz-emp-upload__label {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-muted);
}

.biz-emp-upload__row select {
  max-width: 320px;
  flex: 1 1 200px;
}

.biz-emp-upload__status {
  font-size: 12px;
  color: var(--text-muted);
  margin-top: 8px;
  min-height: 16px;
}

/* Expanded candidate: the whole document, for rows the employer is entitled to
   see in full - their own uploads, and applications after the reveal. */
.biz-emp-app__detail {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--border);
}
.biz-emp-detail__rows {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 4px 14px;
  margin: 0 0 10px;
  font-size: 13px;
}
.biz-emp-detail__rows dt { color: var(--text-muted); }
.biz-emp-detail__rows dd { margin: 0; color: var(--text-primary); }
.biz-emp-detail__summary {
  margin: 0 0 10px;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--text-secondary);
}
.biz-emp-detail__skills {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 10px;
}
.biz-emp-detail__block { margin-bottom: 10px; font-size: 13px; }
.biz-emp-detail__block b { display: block; margin-bottom: 4px; color: var(--text-primary); }
.biz-emp-detail__pre {
  margin: 0;
  padding: 10px 12px;
  max-height: 320px;
  overflow: auto;
  background: var(--bg-subtle);
  border-radius: var(--radius-sm);
  font-size: 12.5px;
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
  color: var(--text-secondary);
}
.biz-emp-detail__resume summary {
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--accent);
  margin-bottom: 8px;
}
.biz-emp-detail__job { margin-bottom: 12px; }
.biz-emp-detail__job-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 10px;
  font-size: 13.5px;
  margin-bottom: 4px;
}
.biz-emp-detail__job-head b { color: var(--text-primary); }
.biz-emp-detail__job-head span { color: var(--text-secondary); }
.biz-emp-detail__period { color: var(--text-muted); font-size: 12.5px; }
.biz-emp-detail__bullets {
  margin: 4px 0 0;
  padding-left: 18px;
  font-size: 13px;
  line-height: 1.6;
  color: var(--text-secondary);
}
.biz-emp-detail__link { display: block; font-size: 13px; color: var(--accent); }


/* ═══ Карточка кандидата: кто - насколько подходит - что делать ═══════════
   Раньше сверху шло название вакансии, одинаковое у всех откликов на неё, а
   имя приезжало только после раскрытия. */
.biz-cand__top { display: flex; align-items: flex-start; gap: 12px; }
.biz-cand__glyph {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 999px; flex-shrink: 0;
  font-size: 18px; background: var(--accent-soft); color: var(--accent);
}
.biz-cand__glyph--own { background: var(--surface-2); color: var(--text-muted); }
.biz-cand__id { flex: 1 1 auto; min-width: 0; }
.biz-cand__name {
  margin: 0; font-size: 16px; font-weight: 700; line-height: 1.35;
  color: var(--text-primary); overflow: hidden; text-overflow: ellipsis;
}
.biz-cand__sub { margin: 2px 0 0; font-size: 13px; color: var(--text-secondary); }
.biz-cand__mail { display: inline-block; margin-top: 3px; font-size: 13px; color: var(--accent); }

.biz-cand__meta {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 12px; font-size: 12.5px; color: var(--text-muted);
}
.biz-cand__skills { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.biz-cand__skills-label {
  font-size: 10.5px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--text-muted); margin-right: 2px;
}
.biz-cand__verdict {
  margin: 10px 0 0; padding-left: 10px; font-size: 13px; line-height: 1.55;
  color: var(--text-secondary); border-left: 2px solid var(--accent-soft);
}
.biz-cand__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap;
  margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border);
}
.biz-cand__actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* ═══ Состояние: видно всегда, без открывания чего-либо ═══════════════════ */
.biz-state {
  display: inline-flex; align-items: center; padding: 4px 11px; border-radius: 999px;
  font-size: 11.5px; font-weight: 700; letter-spacing: 0.02em; white-space: nowrap;
}
.biz-state--new      { background: rgba(99,102,241,0.10); color: var(--accent); }
.biz-state--viewed   { background: rgba(168,85,247,0.10); color: #a855f7; }
.biz-state--revealed { background: rgba(22,163,74,0.10);  color: #16a34a; }
.biz-state--rejected { background: rgba(239,68,68,0.08);  color: #ef4444; }
.biz-state--hired    { background: rgba(22,163,74,0.14);  color: #16a34a; }
[data-theme="dark"] .biz-state--new      { background: rgba(99,102,241,0.20); }
[data-theme="dark"] .biz-state--viewed   { background: rgba(168,85,247,0.20); }
[data-theme="dark"] .biz-state--revealed,
[data-theme="dark"] .biz-state--hired    { background: rgba(34,197,94,0.18); color: #86efac; }
[data-theme="dark"] .biz-state--rejected { background: rgba(239,68,68,0.16); color: #fca5a5; }

/* ═══ Смена этапа ════════════════════════════════════════════════════════
   Сам переключатель - .q2o-segmented из тулкита проекта: он уже умеет ровно
   то, что здесь нужно (без popup, значит нечему раскрываться вверх у нижних
   карточек), и кабинет перестаёт выглядеть чужим продуктом. Своего здесь
   осталось только два: цвет выбранного этапа и запрет на время сохранения. */
.biz-stage .q2o-segmented__btn[disabled] { opacity: 0.45; cursor: not-allowed; }
.biz-stage__btn--viewed[aria-checked="true"]   { color: #a855f7; }
.biz-stage__btn--rejected[aria-checked="true"] { color: #ef4444; }
.biz-stage__btn--hired[aria-checked="true"]    { color: #16a34a; }

/* Главные действия перестают быть хлебной крошкой: тратящее квоту «Раскрыть
   контакт» было нарисовано тем же 12px-шрифтом, что и служебные ссылки. */
.biz-btn--lg {
  padding: 10px 18px; font-size: 13.5px; font-weight: 600;
  border-radius: 10px; min-height: 40px;
}

/* Мобильный: 35-пиксельные цели в живом кабинете не нажимаются пальцем. */
@media (max-width: 640px) {
  .biz-stage .q2o-segmented__btn { height: 40px; padding: 0 16px; font-size: 13px; }
  .biz-cand__foot { flex-direction: column; align-items: stretch; }
  .biz-cand__actions .biz-btn { width: 100%; justify-content: center; }
  .biz-stage { width: 100%; display: flex; }
  .biz-stage .q2o-segmented__btn { flex: 1 1 auto; }
}


/* ═══ Пустое состояние: всегда с действием ═══════════════════════════════
   Пунктирная рамка, а не сплошная: это место, где что-то появится, а не
   карточка с содержимым. */
.biz-blank {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: 10px; padding: 44px 24px;
  background: var(--surface); border: 1px dashed var(--border-hover);
  border-radius: 16px;
}
.biz-blank__icon { font-size: 32px; line-height: 1; }
.biz-blank__title { margin: 2px 0 0; font-size: 17px; font-weight: 700; color: var(--text-primary); }
.biz-blank__text {
  margin: 0; max-width: 46ch; font-size: 13.5px; line-height: 1.6; color: var(--text-secondary);
}
.biz-blank__hint { margin: 2px 0 0; font-size: 12px; color: var(--text-muted); }
.biz-blank .biz-btn { margin-top: 4px; }

/* Строка осталась ради кнопки: заголовок вкладки дублировал её же имя в
   навигации и «Наём» над ней. */
.biz-emp-head--bare { justify-content: flex-end; }

/* Скор - второе, что должно читаться после имени. В прежней вёрстке он стоял
   в общем ряду контролов и был набран кеглем подписи: главный товар продукта
   выглядел мельче названия вакансии. */
.biz-cand__top .biz-score-badge {
  flex: 0 0 92px;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 8px 6px; border-radius: 10px;
  font-size: 30px; font-weight: 800; line-height: 1;
  letter-spacing: -0.02em; font-variant-numeric: tabular-nums;
}
.biz-cand__top .biz-score-badge::after {
  content: attr(data-caption);
  margin-top: 4px;
  font-size: 10.5px; font-weight: 600; text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--text-muted);
}
.biz-cand__top .biz-emp-fit-pending {
  flex: 0 0 92px; text-align: center; align-self: flex-start;
  padding: 10px 6px; border-radius: 10px; background: var(--surface-2);
  font-size: 12px; line-height: 1.3; color: var(--text-muted);
}
@media (max-width: 640px) {
  .biz-cand__top .biz-score-badge { flex-basis: 74px; font-size: 26px; }
}

/* Пункты разбора резюме под именем: объясняют балл, иначе в списке стоит голое
   число - главная претензия к любому автоматическому скорингу. */
.biz-cand__points {
  margin: 10px 0 0;
  padding-left: 18px;
  font-size: 13px;
  line-height: 1.6;
  color: var(--text-secondary);
}
.biz-cand__points li { margin-bottom: 2px; }

/* Этапы воронки: у каждого свой цвет, чтобы состояние читалось без чтения. */
.biz-state--interview { background: rgba(56,189,248,0.12); color: #0284c7; }
.biz-state--offer     { background: rgba(34,197,94,0.12);  color: #16a34a; }
.biz-state--shortlisted { background: rgba(249,115,22,0.12); color: #ea580c; }
[data-theme="dark"] .biz-state--interview { background: rgba(56,189,248,0.20); color: #7dd3fc; }
[data-theme="dark"] .biz-state--offer     { background: rgba(34,197,94,0.18); color: #86efac; }
[data-theme="dark"] .biz-state--shortlisted { background: rgba(249,115,22,0.20); color: #fdba74; }
.biz-stage__btn--interview[aria-checked="true"]   { color: #0284c7; }
.biz-stage__btn--offer[aria-checked="true"]       { color: #16a34a; }
.biz-stage__btn--shortlisted[aria-checked="true"] { color: #ea580c; }

/* Порог соответствия в форме: подсказка объясняет цену высокой планки - меньше
   откликов, а при слишком высокой их не будет вовсе. */
.biz-emp-form__gate { grid-column: 1 / -1; }
.biz-emp-form__hint {
  margin: 6px 0 0;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--text-muted);
}

/* «Порог не работает»: планка задана, а требований в описании нет - без них
   навыки не сравниваются, и мы пропускаем всех. Работодатель должен это
   видеть, иначе он уверен, что фильтр стоит. */
.biz-gate-off {
  display: inline-block;
  margin-left: 6px;
  padding: 2px 8px;
  border-radius: 999px;
  background: rgba(249, 115, 22, 0.12);
  color: #ea580c;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
}
[data-theme="dark"] .biz-gate-off { background: rgba(249, 115, 22, 0.20); color: #fdba74; }

/* ── Холст кабинета ─────────────────────────────
   В светлой теме --bg и --surface оба #ffffff, и карточку от фона отделяет
   рамка в 8% чёрного - на глаз её нет, кабинет читается как сплошной белый
   лист. Уводим холст на --bg-subtle: карточки остаются белыми и наконец
   отделяются. В тёмной теме подложка и так темнее карточек, там не трогаем. */
body[data-page="business"].dashboard-page {
  /* Цветные пятна на подложке снимаем: они светлее самой подложки, и ровно
     там, где лежит первая карточка, фон снова становится белым - весь смысл
     ухода на --bg-subtle пропадал. */
  background: var(--bg-subtle);
}

/* Тень вместо расчёта на рамку. Рамка в 8% чёрного на светлом фоне держится
   на одном пикселе; мягкая тень отделяет карточку сразу, не утяжеляя её. */
body[data-page="business"] :is(.biz-emp-app, .biz-emp-upload, .biz-emp-form, .biz-data-table) {
  box-shadow: 0 1px 2px rgba(15, 15, 25, 0.04), 0 4px 12px rgba(15, 15, 25, 0.05);
}
[data-theme="dark"] body[data-page="business"] :is(.biz-emp-app, .biz-emp-upload, .biz-emp-form, .biz-data-table) {
  box-shadow: none;
}

/* ═══ Отбор в пуле ═══════════════════════════════════════════════════════
   Поиск сверху, полоски отбора под ним. Через полгода человека ищут по
   навыку, а не по имени, поэтому строка поиска - главный элемент панели. */
.biz-pool-filters {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 14px 0 10px;
}
.biz-pool-filters .q2o-search { max-width: 420px; }
.biz-pool-filters .biz-filter-bar { margin: 0; }

/* Список во время перезапроса гаснет, но остаётся на месте: пропадающие строки
   дёргают страницу под курсором на каждой букве. */
#emp-app-list.is-busy { opacity: 0.5; pointer-events: none; }

.biz-emp-nores {
  padding: 22px 18px;
  text-align: center;
  color: var(--text-secondary);
  font-size: 14px;
  background: var(--surface);
  border: 1px dashed var(--border);
  border-radius: var(--radius);
}

/* ═══ Меню кабинета найма ════════════════════════════════════════════════
   Разделы - настоящие ссылки в верхней панели. Показываем их только
   работодателю: ту же страницу открывают буткемпы и агентства, у которых
   свои разделы. Шаблон прячет ВСЕ пункты с data-i18n, чтобы до ответа
   /auth/me не мигнула соискательская навигация - поэтому показывать
   приходится явно. */
/* Разделы прижаты к логотипу, всё остальное - плотной группой справа. Общая
   панель центрирует пункты (margin: 0 auto): у соискателя их полтора десятка и
   центр выглядит уместно, а четыре пункта кабинета расползались по всей ширине,
   и переключатель темы оставался висеть один посреди пустоты между ними и
   названием компании. */
body.is-employer .nav__links {
  margin-left: 0;
  margin-right: auto;
}

/* [data-biz-nav] здесь не для выбора, а ради веса: шаблон прячет пункты меню с
   data-i18n правилом такого же веса и стоит ПОЗЖЕ в документе - без этого
   атрибута разделы кабинета проигрывали ему по порядку и не показывались. */
body.is-employer .nav__links > a.nav-emp[data-biz-nav] {
  display: inline-flex;
  align-items: center;
  color: var(--text-secondary);
  font-weight: 500;
  padding: 7px 12px;
  border-radius: 9px;
}
body.is-employer .nav__links > a.nav-emp[data-biz-nav]:hover {
  color: var(--text-primary);
  background: rgba(99, 102, 241, 0.07);
}

/* Активный раздел - чистым CSS по атрибуту страницы. Никакого JS: он бы
   расставлял подсветку уже после первой отрисовки, и меню моргало бы. */
body.is-employer[data-biz-page="today"] .nav__links > a.nav-emp[data-biz-nav="today"],
body.is-employer[data-biz-page="vacancies"] .nav__links > a.nav-emp[data-biz-nav="vacancies"],
body.is-employer[data-biz-page="job"] .nav__links > a.nav-emp[data-biz-nav="vacancies"],
body.is-employer[data-biz-page="candidates"] .nav__links > a.nav-emp[data-biz-nav="candidates"],
body.is-employer[data-biz-page="screen"] .nav__links > a.nav-emp[data-biz-nav="screen"] {
  color: var(--accent);
  background: rgba(99, 102, 241, 0.10);
  font-weight: 600;
}

/* Заголовок раздела с подзаголовком - как на макетах. */
.biz-sec-head { margin: 4px 0 18px; }
.biz-sec-head__title {
  font-size: 30px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--text);
  margin: 0 0 6px;
}
.biz-sec-head__sub {
  font-size: 14px;
  color: var(--text-secondary);
  margin: 0;
}
.biz-sec-head__row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

/* ═══ Сегодня ════════════════════════════════════════════════════════════ */
.biz-today-row { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 24px; }
.biz-today-stat {
  flex: 1 1 160px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px;
}
.biz-today-stat__v { font-size: 30px; font-weight: 800; line-height: 1.1; color: var(--text); }
.biz-today-stat__l { font-size: 13px; color: var(--text-secondary); margin-top: 4px; }
/* Требующие решения выделены: за этой цифрой в кабинет и возвращаются. */
.biz-today-stat--accent { border-color: rgba(99, 102, 241, 0.35); }
.biz-today-stat--accent .biz-today-stat__v { color: var(--accent); }

.biz-today-h { font-size: 15px; font-weight: 700; color: var(--text); margin: 26px 0 10px; }
.biz-today-vacs { display: flex; flex-direction: column; gap: 8px; }
.biz-today-vac {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 14px 16px; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); text-decoration: none; color: inherit;
  transition: border-color 0.15s ease;
}
.biz-today-vac:hover { border-color: var(--border-hover); }
.biz-today-vac__t { font-weight: 600; font-size: 14.5px; }
.biz-today-vac__n { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }
.biz-today-more { display: inline-block; margin-top: 10px; font-size: 13.5px; color: var(--accent); }

.biz-emp-note {
  margin: 14px 0;
  padding: 12px 14px;
  border-radius: var(--radius-sm, 10px);
  background: rgba(234, 88, 12, 0.08);
  color: #c2410c;
  font-size: 13.5px;
}
[data-theme="dark"] .biz-emp-note { color: #fdba74; background: rgba(234, 88, 12, 0.16); }

/* ═══ Воронка одной вакансии ═════════════════════════════════════════════
   Колонки по этапам. Не доска с перетаскиванием: этап меняют кнопкой на
   карточке, и таскать мышью то же самое - лишний способ ошибиться. */
.biz-funnel { display: flex; flex-direction: column; gap: 26px; }
.biz-funnel__h {
  display: flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 700; color: var(--text); margin: 0 0 10px;
}
.biz-funnel__n {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 22px; height: 22px; padding: 0 6px; border-radius: 999px;
  background: var(--bg-subtle); border: 1px solid var(--border);
  font-size: 12px; font-weight: 600; color: var(--text-secondary);
}
.biz-funnel__empty { font-size: 13px; color: var(--text-muted); padding: 4px 2px 0; }

/* На телефоне полоски отбора - основной способ сузить список, а по 29px
   пальцем не попасть. Ниже порога в 44px их держать нельзя. */
@media (max-width: 640px) {
  .biz-pool-filters .biz-filter-chip { min-height: 44px; padding: 10px 14px; }
  .biz-pool-filters .biz-filter-bar { gap: 8px; overflow-x: auto; flex-wrap: nowrap; }
  .biz-pool-filters .q2o-search { max-width: 100%; }
  .biz-pool-filters .q2o-search__input { height: 44px; }
}

/* ═══ Прогон скрининга ═══════════════════════════════════════════════════
   Полоса и три числа вместо крутилки: человек загрузил сорок файлов и должен
   видеть, сколько посчитано и сколько ждёт очереди. Крутилка на десять минут
   неотличима от зависшей страницы. */
.biz-run {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px;
  margin: 16px 0;
}
.biz-run__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.biz-run__t { font-size: 15px; font-weight: 700; color: var(--text); }
.biz-run__sub { font-size: 13px; color: var(--text-secondary); margin-top: 3px; }
.biz-run__badge {
  padding: 4px 11px; border-radius: 999px; font-size: 11.5px; font-weight: 700;
  background: var(--bg-subtle); color: var(--text-secondary); white-space: nowrap;
}
.biz-run__badge--live { background: rgba(99, 102, 241, 0.12); color: var(--accent); }
.biz-run__bar {
  height: 6px; border-radius: 999px; background: var(--bg-subtle);
  margin-top: 12px; overflow: hidden;
}
.biz-run__bar > span {
  display: block; height: 100%; border-radius: 999px;
  background: var(--accent); transition: width 0.4s ease;
}
.biz-run__queue { margin-top: 10px; font-size: 13px; color: var(--text-secondary); }

/* Результат таблицей: скрининг смотрят, чтобы сравнить сорок человек между
   собой, а карточки заставляют сравнивать по памяти. */
.biz-run-table { width: 100%; }
.biz-run-table__sub { font-size: 12.5px; color: var(--text-secondary); margin-top: 2px; }
.biz-run-table__miss { max-width: 380px; }
.biz-run-table__miss .q2o-chip { margin: 2px 4px 2px 0; }
.biz-run-table__dash { color: var(--text-muted); }

@media (max-width: 760px) {
  /* Таблица шире экрана прокручивается внутри себя, а не тащит страницу. */
  .biz-run-table { display: block; overflow-x: auto; white-space: nowrap; }
  .biz-run-table__miss { max-width: none; }
}

/* Диалог публикации: два адреса назначения, один из которых работодатель
   раньше не видел вовсе. Сайт отмечен и заблокирован - это и есть публикация,
   выключать его нечего. */
.biz-pub__row {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px solid var(--border);
  font-size: 14px;
  color: var(--text);
  cursor: pointer;
}
.biz-pub__row:last-of-type { border-bottom: none; }
.biz-pub__row input:disabled { cursor: default; }
.biz-pub__hint {
  display: block;
  margin-top: 3px;
  font-size: 13px;
  font-weight: 400;
  color: var(--text-secondary);
  line-height: 1.5;
}

/* ═══ Заметки о кандидате ════════════════════════════════════════════════
   «Просил удалёнку», «перезвонить после отпуска» - то, ради чего в пул
   возвращаются через полгода. Живут в раскрытой карточке и грузятся вместе
   с ней: отдельная кнопка «показать заметки» означала бы, что их не читают. */
.biz-notes {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
}
.biz-notes__title { display: block; font-size: 13px; color: var(--text); margin-bottom: 10px; }
.biz-notes__empty { font-size: 13px; color: var(--text-muted); padding: 2px 0 8px; }
.biz-note {
  background: var(--bg-subtle);
  border-radius: var(--radius-sm, 10px);
  padding: 10px 12px;
  margin-bottom: 8px;
}
.biz-note__body { font-size: 13.5px; color: var(--text); line-height: 1.55; white-space: pre-wrap; }
.biz-note__meta {
  display: flex; align-items: center; gap: 8px;
  margin-top: 6px; font-size: 12px; color: var(--text-muted);
}
.biz-note__del {
  margin-left: auto; border: none; background: none; cursor: pointer;
  color: var(--text-muted); font-size: 18px; line-height: 1; padding: 0 4px;
}
.biz-note__del:hover { color: #ef4444; }
.biz-notes__form { display: flex; gap: 8px; align-items: flex-start; margin-top: 4px; }
.biz-notes__input {
  flex: 1 1 auto;
  font: inherit; font-size: 13.5px;
  padding: 9px 11px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm, 10px);
  background: var(--surface);
  color: var(--text);
  resize: vertical;
}
.biz-notes__input:focus { outline: none; border-color: var(--accent); }

/* ═══ Витрина компании ═══════════════════════════════════════════════════
   Единственный артефакт кабинета, который работодатель утащит к себе. Ссылка
   должна быть видна и копироваться в одно движение - иначе её как будто нет. */
.biz-store {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px;
  margin-bottom: 20px;
}
.biz-store__t { font-size: 15px; font-weight: 700; color: var(--text); }
.biz-store__hint { font-size: 13.5px; color: var(--text-secondary); margin: 4px 0 12px; line-height: 1.55; }
.biz-store__row { display: flex; gap: 8px; flex-wrap: wrap; }
.biz-store__url {
  flex: 1 1 260px;
  font: inherit; font-size: 13.5px;
  padding: 9px 11px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm, 10px);
  background: var(--bg-subtle);
  color: var(--text);
}

/* Переключатель организаций в верхней панели - как на макетах: правый край
   отвечает на «какая компания» и «кто я», а не на «куда идти». Отдельной
   строкой над заголовком он выглядел таблеткой, повисшей на пустом холсте. */
/* Вправо всё уезжает одним отступом - у разделов. Второй auto здесь делил
   пустоту пополам, и переключатель темы оставался висеть ровно посередине,
   отдельно и от меню, и от названия компании. */
.biz-nav-org { display: flex; align-items: center; }
body.is-employer .nav__inner .biz-nav-org + .lang-switch { margin-left: 12px; }
.biz-nav-org .biz-org-switcher__trigger { height: 34px; font-size: 13.5px; }
@media (max-width: 900px) {
  /* На узком экране название компании съедает всю панель - там она и так
     видна в заголовке раздела. */
  .biz-nav-org { display: none; }
}

/* ═══ Человек без файла ══════════════════════════════════════════════════
   Пришёл по рекомендации или из чата - файла нет, есть имя и пара строк.
   Кнопка стоит над списком и в пустом состоянии: пустой список это и есть
   самый частый момент, когда кого-то добавляют руками. */
.biz-manual-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 4px 0 14px; }
.biz-manual-bar__hint { font-size: 13px; color: var(--text-secondary); }
.biz-modal--manual { max-width: 560px; }
.biz-manual__lede { font-size: 13.5px; color: var(--text-secondary); line-height: 1.55; margin: 0 0 14px; }
.biz-manual__row { display: flex; gap: 10px; flex-wrap: wrap; }
.biz-manual__row .biz-manual__f { flex: 1 1 200px; }
.biz-manual__f { display: block; margin-bottom: 12px; }
.biz-manual__f > span { display: block; font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 5px; }
.biz-manual__hint { font-size: 12.5px; color: var(--text-muted); margin: -8px 0 12px; line-height: 1.5; }

/* ═══ Отказ ══════════════════════════════════════════════════════════════
   Единственный этап, который человек снаружи почувствует. Поэтому он один и
   спрашивает: причину для команды и письмо для кандидата. */
.biz-modal--reject { max-width: 600px; }
.biz-rej__check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 0 14px;
  font-size: 14px;
  color: var(--text);
  cursor: pointer;
}
.biz-modal--reject textarea { min-height: 130px; resize: vertical; line-height: 1.55; }

/* На телефоне кнопки в диалогах выходили 24px высотой - пальцем по такой не
   попасть, а диалог это место, где решение подтверждают. Порог в 44px, и
   действия занимают всю ширину: тянуться к узкой кнопке в углу одной рукой
   неудобно. */
@media (max-width: 640px) {
  .biz-modal__actions { flex-direction: column-reverse; gap: 10px; }
  .biz-modal__actions .biz-btn {
    width: 100%;
    min-height: 44px;
    justify-content: center;
  }
  .biz-modal { max-height: 88vh; overflow-y: auto; }
  .biz-manual__row { flex-direction: column; gap: 0; }
}

/* Кнопки на карточках («Посчитать», «Подробно», «Раскрыть контакт») выходили на
   телефоне по 24-29px. По ним жмут постоянно и именно с телефона - отклики
   смотрят в дороге, а не за столом. */
@media (max-width: 640px) {
  body[data-page="business"] .biz-btn,
  body[data-page="business"] a.biz-btn {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
  .biz-cand__actions { display: flex; flex-wrap: wrap; gap: 8px; }
  .biz-cand__actions .biz-btn { flex: 1 1 auto; justify-content: center; }
}

/* Письмо кандидату - проза, а не код. Без явного шрифта textarea берёт
   моноширинный по умолчанию браузера, и отказ выглядит машинным. */
.biz-modal--reject textarea,
.biz-modal--manual textarea {
  font-family: inherit;
  font-size: 14px;
}

/* ═══ Фидбек по этапу ════════════════════════════════════════════════════
   Запрос HR: «фидбек после скрининга», позже «после техинтервью». Заметка без
   привязки к шагу для этого не годится - её потом не найти и не сложить в
   отчёт. Поэтому фидбек видно с первого взгляда, а не только по тексту. */
.biz-notes__stagerow { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
.biz-notes__lbl {
  display: flex; align-items: center; gap: 6px;
  font-size: 12.5px; color: var(--text-secondary);
}
.biz-notes__sel {
  font: inherit; font-size: 12.5px;
  padding: 5px 8px;
  border: 1px solid var(--border);
  border-radius: var(--radius-xs, 6px);
  background: var(--surface);
  color: var(--text);
}
.biz-note--fb { border-left: 3px solid var(--accent); }
.biz-note__stage {
  display: flex; align-items: center; gap: 8px;
  font-size: 12px; font-weight: 700; letter-spacing: 0.02em;
  color: var(--text-secondary); margin-bottom: 6px;
}
.biz-note__verdict {
  padding: 2px 8px; border-radius: 999px; font-size: 11.5px; font-weight: 700;
}
.biz-note__verdict--yes   { background: rgba(22,163,74,0.12);  color: #15803d; }
.biz-note__verdict--maybe { background: rgba(234,88,12,0.12);  color: #c2410c; }
.biz-note__verdict--no    { background: rgba(239,68,68,0.10);  color: #b91c1c; }
[data-theme="dark"] .biz-note__verdict--yes   { color: #4ade80; }
[data-theme="dark"] .biz-note__verdict--maybe { color: #fdba74; }
[data-theme="dark"] .biz-note__verdict--no    { color: #fca5a5; }

@media (max-width: 640px) {
  .biz-notes__stagerow { flex-direction: column; gap: 8px; }
  .biz-notes__sel { min-height: 40px; }
}
