/* ============================================================================
   «Сборник» – экраны администратора о людях:
   views/admin/users.php, user_form.php, users_import.php, supervisions.php.
   Подключается layout.php сам (все css/area-*.css), после theme.css.
   Общие компоненты (.sb-table-stack, .sb-u-*, .sb-filters, .sb-set, .sb-rows,
   .sb-form-actions…) – в theme.css; здесь только своё, с приставкой sb-ap-.
   ========================================================================== */

/* ---------------------------------------------- Пользователи: список -- */
/* ФИО – ссылка без подчёркивания (п. 42, 53 владельца): цвет и жирность и так выделяют её */
.sb-users-table .sb-u-name a { text-decoration: none; }
.sb-users-table .sb-u-name a:hover { color: var(--sb-brand-800); text-decoration: none; }
/* «Научное руководство» в шапке – переход на другой экран, а не действие: без подчёркивания */
.sb-adm .sb-page-actions > a.btn-sb-quiet { text-decoration: none; }
.sb-ap-me { color: var(--sb-muted); font-size: .875rem; white-space: nowrap; }
/* пустой список – одна строка серым по центру */
.sb-ap-empty { margin: 0; padding: 1rem 0; text-align: center; color: var(--sb-muted); }
.sb-ap-none { color: var(--sb-muted); }
/* вторая строка отбора: галочка слева, «Сбросить отбор» справа */
.sb-ap-filter-extra { flex: 1 1 100%; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .25rem 1rem; }
.sb-ap-filter-extra .form-check { padding-top: .5rem; padding-bottom: .5rem; }
.sb-filters .sb-ap-filter-extra .btn { min-height: 44px; width: auto; margin-right: -.75rem; }
.sb-users-table .sb-u-act { margin-bottom: 0; }
/* ширины столбцов: «Статьи» – узкий, длинным названиям кафедр – место */
/* роль – не уже слова «Администратор» на самом узком компьютере (1200 px) */
.sb-users-table > thead > tr > th:nth-child(1) { width: 32%; }
.sb-users-table > thead > tr > th:nth-child(2) { width: 18%; }
.sb-users-table > thead > tr > th:nth-child(3) { width: 25%; }
.sb-users-table > thead > tr > th:nth-child(4) { width: 16%; }
.sb-users-table > thead > tr > th:nth-child(5) { width: 9%; }
/* отбор: свой класс, чтобы правила других экранов про .sb-filters сюда не доставали */
.sb-ap-filters.sb-filters .sb-f-grow { flex: 1 1 12rem; }
/* «Найти» – той же высоты, что поля рядом (34 px; на планшете и телефоне 44) */
.sb-ap-filters.sb-filters .btn { min-height: 34px; }
@media (max-width: 991.98px) { .sb-ap-filters.sb-filters .btn { min-height: 44px; } }
.sb-ap-filters.sb-filters .sb-f-role { flex: 0 1 15rem; min-width: 12rem; }

/* ------------------------------------------- Карточка пользователя -- */
/* ширина – общая колонка администратора (.sb-adm, area-admin-core.css) */
.sb-ap-meta { margin-top: .25rem; row-gap: .25rem; }
.sb-ap-sub { font-size: .9375rem; font-weight: 600; letter-spacing: 0; color: var(--sb-ink); margin: 0 0 1rem; }
/* блок роли (Учёба / Работа) и телефон отделены тонкой линией */
.sb-ap-role, .sb-ap-phone { margin-top: 1.75rem; padding-top: 1.5rem; border-top: 1px solid var(--sb-line); }
.sb-ap-check { margin-top: .25rem; }
.sb-ap-check .form-check-label, .sb-ap-switch .form-check-label { font-weight: 500; }
.sb-ap-check .form-text, .sb-ap-switch .form-text { margin-top: .25rem; }

/* «Логин и пароль» – раскрывается по нажатию, рамка видна при слабом зрении */
.sb-ap-fold { margin-top: 1.5rem; border: 1px solid var(--sb-line-2); border-radius: var(--sb-radius-lg); background: #fff; }
.sb-ap-fold > summary { display: flex; align-items: center; gap: .75rem; min-height: 64px; padding: .75rem 1.25rem; border-radius: var(--sb-radius-lg); }
.sb-ap-fold > summary:hover { background: var(--sb-surface-2); }
.sb-ap-fold > summary:focus-visible { outline-offset: -3px; }
.sb-ap-fold[open] > summary { border-bottom: 1px solid var(--sb-line); border-radius: var(--sb-radius-lg) var(--sb-radius-lg) 0 0; }
.sb-ap-fold-title { display: flex; flex-direction: column; flex: 1; min-width: 0; line-height: 1.35; }
.sb-ap-fold-title b { font-weight: 600; color: var(--sb-brand-700); }
.sb-ap-fold-title small { font-size: .875rem; color: var(--sb-muted); margin-top: .125rem; }
.sb-ap-fold > summary .sb-chev { color: var(--sb-muted); width: 1.25rem; height: 1.25rem; }
.sb-ap-fold-body { padding: 1.25rem; }
.sb-ap-selfpw { color: var(--sb-ink-2); min-height: 52px; display: flex; align-items: center; margin: 0; }

/* «Ваш пароль – для подтверждения»: спокойная серая подложка, не ошибка */
.sb-ap-confirm { display: flex; gap: .875rem; margin-top: 1.5rem; padding: 1.25rem; border-radius: var(--sb-radius-lg); background: var(--sb-surface-2); border: 1px solid var(--sb-line); }
.sb-ap-confirm > .sb-ic { color: var(--sb-brand-600); margin-top: .125rem; }
.sb-ap-confirm-body { flex: 1; min-width: 0; }
.sb-ap-confirm .input-group { max-width: 26rem; }

/* форма из двух карточек: последняя внутри формы теряет отступ (.card:last-child),
   поэтому шаг до «Других действий» даёт сама форма */
.sb-ap-form { margin-bottom: var(--sb-gap); }
/* «Другие действия»: строка = что это, пояснение, кнопка под ним */
.sb-ap-act { padding: 1.25rem 0; border-top: 1px solid var(--sb-line); }
.sb-ap-act:last-child { padding-bottom: 0; }
.sb-card-title + .sb-ap-act { border-top: 0; padding-top: 1rem; }
.sb-ap-act > b { display: block; font-weight: 600; }
.sb-ap-act > p { color: var(--sb-ink-2); margin: .125rem 0 .875rem; max-width: 40rem; }
.sb-ap-act > p:last-child { margin-bottom: 0; }
.sb-ap-del { display: grid; gap: 1rem; max-width: 26rem; }

/* -------------------------------------------- Загрузить список -- */
.sb-ap-errlist { margin: .5rem 0 .25rem; padding-left: 1.25rem; }
.sb-ap-errlist li + li { margin-top: .25rem; }
.sb-ap-hint { color: var(--sb-ink-2); font-size: .875rem; }
.sb-ap-created > thead > tr > th:nth-child(1) { width: 52%; }
.sb-ap-created > thead > tr > th:nth-child(2) { width: 24%; }
.sb-ap-created > thead > tr > th:nth-child(3) { width: 24%; }
.sb-ap-pw {
  display: inline-block; padding: .125rem .5rem; border-radius: var(--sb-radius-lg); background: var(--sb-surface-2); border: 1px solid var(--sb-line);
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: .875rem; color: var(--sb-ink); letter-spacing: .04em; white-space: nowrap;
}
.sb-ap-howcols { margin-bottom: 1.25rem; }
.sb-ap-imprl { max-width: 24rem; }
/* столбцы так, как их подписывает Excel: A, B, C… */
.sb-ap-cols { list-style: none; margin: 0; padding: 0; columns: 2; column-gap: 1.5rem; }
.sb-ap-cols li { display: flex; align-items: center; gap: .625rem; padding: .25rem 0; break-inside: avoid; }
.sb-ap-col {
  flex: none; width: 1.75rem; height: 1.75rem; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--sb-line-2); border-radius: var(--sb-radius-lg); background: var(--sb-surface-2);
  color: var(--sb-ink-2); font-size: .8125rem; font-weight: 600;
}
.sb-ap-notes { margin: 0; padding-left: 1.25rem; color: var(--sb-ink-2); }
.sb-ap-notes li + li { margin-top: .375rem; }
.sb-ap-paste { min-height: 12rem; }

/* ---------------------------------------- Научное руководство -- */
.sb-ap-bind { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 1rem; }
.sb-ap-bind-f { flex: 1 1 16rem; min-width: 0; }
/* поиск студента и руководителя – высотой с обычное поле (34 px, на планшете и телефоне 44 px) */
.sb-ap-bind .ts-wrapper.form-select, .sb-ap-bind .ts-wrapper.form-control { min-height: 34px; }
.sb-ap-bind .ts-wrapper .ts-control { min-height: 32px; padding: .3125rem 2.25rem .3125rem .625rem; }
@media (max-width: 991.98px) {
  .sb-ap-bind .ts-wrapper.form-select, .sb-ap-bind .ts-wrapper.form-control { min-height: 44px; }
  .sb-ap-bind .ts-wrapper .ts-control { min-height: 42px; font-size: 1rem; }
  .sb-ap-bind .ts-wrapper .ts-control > input { font-size: 1rem; }
}
/* студенты без руководителя: столбцы фамилий-ссылок, без «таблеток» */
.sb-ap-free { list-style: none; margin: 0; padding: 0; columns: 3 15rem; column-gap: 2rem; }
.sb-ap-free li { break-inside: avoid; display: flex; flex-wrap: wrap; align-items: baseline; column-gap: .5rem; }
.sb-ap-free a { display: inline-flex; align-items: center; min-height: 44px; font-weight: 500; text-decoration: none; }
.sb-ap-free a:hover { color: var(--sb-brand-800); text-decoration: none; }
.sb-ap-free a[aria-current] { font-weight: 700; color: var(--sb-brand-800); }
.sb-ap-grp { color: var(--sb-muted); font-size: .875rem; white-space: nowrap; }
/* пары «студент – руководитель», собранные по руководителям */
.sb-ap-group { margin-top: 1.5rem; }
.sb-ap-group + .sb-ap-group { margin-top: 2rem; }
.sb-ap-group-title {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: .125rem .75rem; margin: 0 0 .25rem; padding-bottom: .625rem;
  font-size: .9375rem; font-weight: 600; letter-spacing: 0; border-bottom: 1px solid var(--sb-line-2);
}
.sb-ap-group-title span { font-size: .875rem; font-weight: 400; color: var(--sb-muted); white-space: nowrap; }
.sb-ap-group > .sb-ap-hint { margin: .5rem 0 0; }
.sb-ap-pairs > li { align-items: center; padding: .625rem 0; }
.sb-ap-pairs > li:first-child { padding-top: .625rem; }
.sb-ap-st { font-weight: 600; color: var(--sb-brand-700); }
/* части строки без «·»: при переносе точка не повисает в конце строки */
.sb-ap-sub2 { display: flex; flex-wrap: wrap; gap: .125rem 1rem; }
.sb-ap-sub2 > span { white-space: nowrap; }
.sb-ap-pairs .sb-row-side { gap: .5rem; }
@media (min-width: 768px) {
  /* текстовая кнопка «Открепить» – вровень с правым краем списка */
  .sb-ap-pairs .sb-row-side { margin-right: -.75rem; }
}

/* ------------------------------------------------ Планшет и телефон -- */
@media (max-width: 767.98px) {
  .sb-ap-role, .sb-ap-phone { margin-top: 1.5rem; padding-top: 1.25rem; }
  .sb-ap-fold > summary { padding: .75rem 1rem; }
  .sb-ap-fold-body { padding: 1rem; }
  .sb-ap-confirm { padding: 1rem; }
  .sb-ap-confirm > .sb-ic { display: none; }       /* ширина строки важнее значка */
  .sb-ap-confirm .input-group { max-width: none; }
  .sb-ap-act > .btn, .sb-ap-del .btn-outline-danger { width: 100%; }
  .sb-ap-del { max-width: none; }
  .sb-ap-act > .btn > .sb-ic { display: none; }    /* длинная подпись – в одну строку */
  .sb-ap-imprl { max-width: none; }
  .sb-ap-bind .btn { width: 100%; }
  .sb-ap-cols { column-gap: 1rem; }
  .sb-ap-pairs > li { align-items: stretch; }
  /* «Открепить» текстом – вровень с фамилией, а не с отступом кнопки */
  .sb-ap-pairs .sb-row-side > .btn-sb-quiet:first-of-type { margin-left: -.75rem; }
  .sb-ap-filter-extra .form-check { padding-top: .25rem; padding-bottom: .25rem; }
  .sb-ap-filters.sb-filters .sb-f-role { flex: 1 1 100%; min-width: 0; }
  .sb-filters .sb-ap-filter-extra .btn { margin: 0 0 0 -.75rem; }   /* «Сбросить отбор» вровень с галочкой */
}

/* пароль нового пользователя – крупно, моноширинно, с кнопкой «Скопировать» */
.sb-newpw { border-color: var(--sb-brand-200); }
.sb-newpw-list { display: grid; gap: .5rem; margin: 0 0 1rem; }
.sb-newpw-list > div { display: flex; gap: 1rem; align-items: baseline; flex-wrap: wrap; }
.sb-newpw-list dt { min-width: 5rem; font-weight: 400; color: var(--sb-muted); }
.sb-newpw-list dd { margin: 0; }
.sb-newpw-list code { font-size: .9375rem; color: var(--sb-ink); background: var(--sb-surface-2); padding: .25rem .625rem; border-radius: var(--sb-radius-lg); overflow-wrap: anywhere; }

/* последний столбец («Статьи») – с полем справа, как у остальных: число не прилипает к краю */
.sb-users-table > thead th:last-child, .sb-users-table > tbody td:last-child { padding-right: .75rem; }
