@layer tokens, base, shell, components, screens;

/* Все важные объявления находятся в base: у !important порядок слоёв
   обратный, поэтому общий слой сохраняет исходное сравнение селекторов. */
@layer tokens {
/* Общая палитра — css/tokens.css; здесь акценты панели и закрытые палитры PDF/графиков. */
:root {
  color-scheme: light;

  --admin-accent: #315e75;  /* основной акцент: ссылки, активные состояния, кнопки */
  --admin-accent-strong: #24475a;  /* заголовки на surface-2, hover акцентных кнопок */
  --admin-accent-soft: #e4edf0;  /* мягкая заливка: активный пункт, выбранная строка */
  /* Тревога НА синей заливке: обычный --ds-danger на ней почти не читается,
     а панель сводки перед сборкой — единственное место, где тревожный
     текст лежит на акценте, а не на бумаге. */
  --danger-on-accent: #ffb4b4;

  /* Вторая закрытая палитра — цвета ручной разметки листа PDF (образцы
     body/сноски/заголовка, исключённые зоны, вставки, номер страницы) и
     слоёв инспектора строения. Как и палитра категорий чанка (.chunk.m-*),
     в общий акцент она сознательно не сводится: рамки на скане должны
     различаться между собой сильнее, чем согласовываться с --admin-accent.
     Отсюда же цвета, оставшиеся хексами прямо в правилах разметки. */
  --exclude:      #b91c1c;
  --exclude-soft: rgba(185, 28, 28, .14);
  --insert:       #7e22ce;
  --insert-soft:  rgba(126, 34, 206, .16);
  --author-mark:  #be185d;  /* отметка «автор статьи» в разметке выпуска */
  /* Номер страницы — спокойный коричневый: розовый читался как «удалить»,
     а красный занят исключением. */
  --page-number:  #a1734a;
  --layout-block: #526f7e;
  --layout-line: #b3893d;
  --layout-span: #7e22ce;
  --layout-visual: #2b6e58;
  --admin-gold-strong: #614716;
  --admin-shadow: rgba(65, 51, 29, .12);

  /* Слои графика расходов (/costs): основание — то, что приносит выручку, потери — сверху. */
  --chart-user:   var(--admin-accent);
  --chart-rerank: var(--ds-ok);
  --chart-markup: #7a6aa8;
  --chart-debug:  #9aa8b1;
  --chart-failed: var(--ds-danger);
}
}

@layer base {
/* color-scheme + явный фон обязательны вместе с цветом текста:
   при тёмной теме ОС браузер подставляет тёмный фон страницы и тёмные
   поля ввода, и заданный тут тёмный текст становится нечитаемым. */
/* Публичная страница ошибки использует base.html без отдельного класса;
   её читаемую ширину задаёт body. Оболочки остальных страниц переопределяют её. */
body {
  font-family: system-ui, sans-serif;
  max-width: 60rem;
  margin: 0 auto;
  padding: var(--ds-sp-16) var(--ds-sp-24) var(--ds-sp-48);
  line-height: 1.5;
  color: var(--ds-text);
  background: var(--ds-bg);
}
header { border-bottom: 1px solid var(--ds-line); margin-bottom: var(--ds-sp-24); }
nav { display: flex; justify-content: space-between; align-items: center; padding-bottom: var(--ds-sp-12); }
nav a { color: var(--admin-accent); }
.inline { display: inline; }
/* Атрибут hidden обязан побеждать любой наш display. Браузерное правило
   [hidden] { display: none } задано селектором по атрибуту и проигрывает
   селектору по классу — .author-row { display: flex } оставляло скрытый
   блок видимым (поймано на форме издания, где поля переключаются по виду
   издания). Одно правило здесь надёжнее, чем помнить об этом в каждом
   новом классе. */
[hidden] { display: none !important; }
h1 { font-size: var(--ds-fs-20); }
form { display: flex; flex-direction: column; gap: var(--ds-sp-12); max-width: 22rem; }
label { display: flex; flex-direction: column; gap: var(--ds-sp-4); font-size: var(--ds-fs-14); }
input { padding: var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
button { padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--admin-accent); border-radius: var(--ds-rad-6); background: var(--admin-accent); color: var(--ds-surface); cursor: pointer; }
button:hover, [data-ui-state="hover"] > button { background: var(--admin-accent-strong); border-color: var(--admin-accent-strong); }
button:disabled { cursor: not-allowed; opacity: .55; }
table { border-collapse: collapse; width: 100%; font-size: var(--ds-fs-14); }
th, td { text-align: left; padding: var(--ds-sp-8) var(--ds-sp-8); border-bottom: 1px solid var(--ds-line); }
code { background: var(--ds-panel); padding: var(--ds-sp-4) var(--ds-sp-4); border-radius: var(--ds-rad-6); }
.settings-facts td { text-align: left !important; }
progress { width: 100%; max-width: 20rem; height: .6rem; accent-color: var(--admin-accent); vertical-align: middle; }
/* Визард добавления книги */
textarea, select { padding: var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); font-family: inherit; background: var(--ds-surface); color: var(--ds-text); }
.chat-live-error { color: var(--ds-danger) !important; }
.danger-text { color: var(--ds-danger) !important; }
.empty-table { padding: var(--ds-sp-32) !important; }
.manual-delete-form { display: inline-flex !important; }
.inline-check { display: inline-flex; gap: var(--ds-sp-4); align-items: center; }
}

@layer shell {
/* Общий каркас служебной панели. Читательская /home живёт в отдельном
   web/static/reader.css; admin-shell применяется только ролям
   admin/superuser в base.html. */
body.admin-page {
  max-width: none; min-height: 100vh; margin: 0; padding: 0;
  background: var(--ds-bg); color: var(--ds-text);
}
.admin-shell { min-height: 100vh; display: grid; grid-template-columns: 15rem minmax(0, 1fr); }
.admin-sidebar {
  position: sticky; top: 0; height: 100vh; min-height: 32rem;
  display: flex; flex-direction: column;
  background: var(--ds-side); border-right: 1px solid var(--ds-line);
}
.admin-brand {
  min-width: 0; display: flex; align-items: center; gap: var(--ds-sp-12);
  min-height: 4.5rem; padding: var(--ds-sp-16) var(--ds-sp-16);
  border-bottom: 1px solid var(--ds-line); color: var(--ds-text); text-decoration: none;
}
.admin-brand-mark {
  position: relative; flex: 0 0 1.65rem; width: 1.65rem; height: 1.45rem;
  border: 1.5px solid currentColor; border-radius: var(--ds-rad-6) var(--ds-rad-6) var(--ds-rad-6) var(--ds-rad-6);
}
.admin-brand-mark::after {
  content: ""; position: absolute; top: -.1rem; bottom: -.1rem; left: 50%;
  border-left: 1.5px solid currentColor; transform: skewY(-7deg);
}
.admin-brand-copy { min-width: 0; display: flex; flex-direction: column; line-height: 1.2; }
.admin-brand-copy strong {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); font-weight: 600;
}
.admin-brand-copy small { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.admin-workspace { min-width: 0; }
.admin-topbar {
  position: sticky; top: 0; z-index: 20; height: 2.25rem; margin: 0;
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--ds-sp-16);
  padding: 0 var(--ds-sp-16); background: rgba(251, 248, 241, .94); border-bottom: 1px solid var(--ds-line);
  color: var(--ds-muted); font-size: var(--ds-fs-11);
  backdrop-filter: blur(8px);
}
.admin-topbar-role { grid-column: -2 / -1; white-space: nowrap; }
.admin-sidebar nav {
  display: flex; flex-direction: column; align-items: stretch;
  justify-content: flex-start; gap: var(--ds-sp-24); padding: var(--ds-sp-16) var(--ds-sp-12);
}
.admin-nav-group { display: flex; flex-direction: column; gap: var(--ds-sp-4); }
.admin-nav-label {
  padding: var(--ds-sp-4) var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 750;
  letter-spacing: .12em; text-transform: uppercase;
}
.admin-nav-group a {
  padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-10); color: var(--ds-muted);
  font-size: var(--ds-fs-13); text-decoration: none;
}
.admin-nav-group a:hover { background: rgba(255, 253, 248, .58); }
.admin-nav-group a[aria-current="page"] {
  position: relative; background: rgba(255, 253, 248, .76); color: var(--ds-text); font-weight: 650;
  box-shadow: 0 4px 12px rgba(64, 76, 77, .07);
}
.admin-nav-group a[aria-current="page"]::before {
  content: ""; position: absolute; left: -.15rem; top: .48rem; bottom: .48rem;
  width: 2px; border-radius: var(--ds-rad-6); background: var(--admin-gold-strong);
}
.admin-sidebar-session {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--ds-sp-8);
  margin-top: auto; padding: var(--ds-sp-12); border-top: 1px solid var(--ds-line);
}
.admin-account { min-width: 0; display: flex; align-items: center; gap: var(--ds-sp-8); color: var(--ds-text); text-decoration: none; }
.admin-account > span:last-child { min-width: 0; display: flex; flex-direction: column; line-height: 1.2; }
.admin-account strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--ds-fs-12); }
.admin-account small { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.admin-avatar {
  flex: 0 0 1.85rem; width: 1.85rem; height: 1.85rem; display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%; background: rgba(255, 253, 248, .72); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 750;
}
.admin-sidebar-session form { display: flex; max-width: none; }
.admin-sidebar-session button { padding: var(--ds-sp-4) var(--ds-sp-8); border: 0; background: transparent; color: var(--ds-muted); font-size: var(--ds-fs-11); }
.admin-sidebar-session button:hover { background: rgba(255, 253, 248, .58); color: var(--ds-text); }
.admin-content { min-width: 0; width: 100%; max-width: 90rem; padding: var(--ds-sp-24) clamp(1.2rem, 3vw, 3rem) var(--ds-sp-48); }
.admin-mobile-menu { display: none; }
}

@layer components {
.hint { color: var(--ds-muted); font-size: var(--ds-fs-14); }
.muted { color: var(--ds-muted); font-size: var(--ds-fs-14); }
/* Карточка произведения */
.meta { font-size: var(--ds-fs-14); margin-bottom: var(--ds-sp-16); }
.meta th { color: var(--ds-muted); font-weight: normal; white-space: nowrap; vertical-align: top; width: 1%; }
.filter { flex-direction: row; align-items: end; max-width: none; margin: var(--ds-sp-16) 0; flex-wrap: wrap; gap: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); padding: var(--ds-sp-12) var(--ds-sp-16); background: var(--ds-panel); }
.filter select { max-width: 40rem; padding: var(--ds-sp-4); }
/* Рамка отделяет форму поиска от таблицы результатов ниже. */
.filter.boxed { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); padding: var(--ds-sp-12) var(--ds-sp-16); background: var(--ds-surface); }
.filter.compact { gap: var(--ds-sp-8); }
.legend { font-size: var(--ds-fs-13); color: var(--ds-muted); display: flex; flex-wrap: wrap; gap: var(--ds-sp-4) var(--ds-sp-8); align-items: center; }
.legend .key { display: inline-block; width: .8rem; height: .8rem; border-radius: var(--ds-rad-6); border-left: 4px solid; }
.legend .key.m-short { border-left-color: #d9534f; background: #fdf4f4; }
.legend .key.m-orphan { border-left-color: #9a9a9a; background: #f5f5f5; }
.legend .key.m-fallback { border-left-color: #7fb3d5; background: #f2f8fc; }
.legend .key.m-weakpage { border-left-color: #e8b869; background: #fdf8ef; }
.legend .key.m-biblio { border-left-color: #b9a3d6; background: #f7f4fb; }
.tag { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.metadata-list .tag + .tag { margin-left: var(--ds-sp-4); }
.tag.ok { background: var(--ds-ok-soft); color: var(--ds-ok); }
.tag.warn { background: var(--ds-warn-soft); color: var(--ds-warn); }
.tag.danger { background: var(--ds-danger-soft); color: var(--ds-danger); }
.tag.muted { background: var(--ds-panel); color: var(--ds-muted); }
/* Карточка книги: метаданные файла, издания — визуально отдельные блоки */
.card { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); padding: var(--ds-sp-16) var(--ds-sp-16); margin-bottom: var(--ds-sp-16); background: var(--ds-surface); }
.card .meta { margin-bottom: 0; }
.card .banner { margin: var(--ds-sp-16) 0 0; }
.card .banner:last-child { margin-bottom: 0; }
.card-title { font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); color: var(--ds-muted); margin: 0 0 var(--ds-sp-8); }
/* Пикер чат-модели (ui_macros.html::model_picker): нативный <details>,
   список открывается ВСПЛЫВАЮЩЕЙ панелью поверх контента — позиционирован
   абсолютно, несущий блок и соседние карточки не сдвигаются (решение
   пользователя 2026-09-09: выдвижной список «прыгал» блоками).
   Имя модели видно целиком; палитра — только токены :root. */
.model-picker { position: relative; display: inline-flex; max-width: 100%; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); }
.model-picker summary {
  display: flex; align-items: baseline; gap: var(--ds-sp-8); cursor: pointer;
  padding: var(--ds-sp-8) var(--ds-sp-12); list-style: none; min-width: 20rem;
}
.model-picker summary::-webkit-details-marker { display: none; }
.model-picker summary::after { content: "▾"; color: var(--ds-muted); margin-left: auto; font-size: var(--ds-fs-13); }
.model-picker[open] summary::after { content: "▴"; }
.model-picker-label { color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
.model-picker-current { font-size: var(--ds-fs-16); overflow-wrap: anywhere; }
.model-picker-form { display: none; }
.model-picker[open] .model-picker-form {
  display: block; position: absolute; top: calc(100% + 4px); left: 0; z-index: 50;
  min-width: 100%; width: max-content; max-width: min(34rem, 90vw);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface);
  box-shadow: 0 8px 20px rgba(64, 76, 77, .14); padding: var(--ds-sp-8) var(--ds-sp-12) var(--ds-sp-12);
}
.model-picker-list { display: flex; flex-direction: column; gap: var(--ds-sp-4); margin-bottom: var(--ds-sp-8); }
.model-picker + .settings-row { margin-top: var(--ds-sp-12); }
.card-title-row { display: flex; justify-content: space-between; align-items: baseline; gap: var(--ds-sp-12); margin-bottom: var(--ds-sp-8); }
.metadata-list { margin: 0; }
.metadata-list > div { display: grid; grid-template-columns: 9rem minmax(0, 1fr); gap: var(--ds-sp-16); padding: var(--ds-sp-8) 0; border-top: 1px solid var(--ds-line); }
.metadata-list dt { color: var(--ds-muted); font-size: var(--ds-fs-14); }
.metadata-list dd { margin: 0; overflow-wrap: anywhere; }
.card-actions, .missing-card-action { display: flex; justify-content: space-between; align-items: center; gap: var(--ds-sp-12); flex-wrap: wrap; padding: var(--ds-sp-12) 0 0; margin-top: var(--ds-sp-12); border-top: 1px solid var(--ds-line); }
.card-actions-left, .card-actions-right, .missing-card-action { display: flex; align-items: center; gap: var(--ds-sp-8); flex-wrap: wrap; }
.primary-action, .secondary-action, .danger-action { border: 1px solid var(--ds-line); background: var(--ds-surface); white-space: nowrap; }
.primary-action { border-color: var(--admin-accent); background: var(--admin-accent); color: var(--ds-on-accent); }
.primary-action:hover, [data-ui-state="hover"] > .primary-action { background: var(--admin-accent-strong); color: var(--ds-on-accent); }
.secondary-action { color: var(--admin-accent-strong); }
.secondary-action:hover, [data-ui-state="hover"] > .secondary-action { background: var(--admin-accent-soft); }
.secondary-action.is-disabled { background: var(--ds-panel); color: var(--ds-muted); cursor: not-allowed; opacity: .78; }
.danger-action { color: var(--ds-danger); border-color: #d9b8b8; background: var(--ds-surface); }
.danger-action:hover, [data-ui-state="hover"] > .danger-action { background: var(--ds-danger-soft); }
.card-actions .help-popover { margin: 0; }
.card-actions .help-popover summary, .missing-card-action .help-popover summary { border: 1px solid var(--ds-line); color: var(--ds-muted); }
.filter label:first-child { flex: 1 1 30rem; min-width: 0; }
.filter label:first-child select { width: 100%; max-width: none; }
.filter label:last-of-type { flex: 0 0 7rem; margin-left: auto; }
/* Панель просмотра чанков: раздел и размер страницы в одной строке,
   поиск по тексту — во второй, всё в одной коробке .filter (одна GET-форма,
   иначе фильтры сбрасывали бы друг друга). */
.filter.chunk-filter .f-path { flex: 1 1 26rem; min-width: 0; }
.filter.chunk-filter .f-per { flex: 0 0 7rem; margin-left: auto; }
.filter.chunk-filter .f-q { margin-left: 0; flex: 1 1 100%; min-width: 0; }
.legend .search-reset { max-width: 30rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.stage { vertical-align: middle; }
/* Воронка этапа: тёплое золото в начале, серо-голубой в середине,
   зелёное на двух конечных состояниях (см. WORK_STAGES). */
.stage-text_added { background: var(--ds-warn-soft); color: var(--ds-warn); }
.stage-chunked, .stage-edition_added { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.stage-vectorized, .stage-matched { background: var(--ds-ok-soft); color: var(--ds-ok); }
/* Служебные флаги стоят рядом с этапом, не вместо него. */
.stage-needs_action { background: var(--ds-warn-soft); color: var(--ds-warn); }
.stage-error { background: var(--ds-danger-soft); color: var(--ds-danger); }
.stage-processing { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.stage-attention { background: var(--ds-danger-soft); color: var(--ds-danger); }
.banner {
  display: flex; flex-direction: row; align-items: center; justify-content: space-between;
  max-width: none; background: var(--ds-warn-soft); border: 1px solid #e8c98a; border-radius: var(--ds-rad-6);
  padding: var(--ds-sp-8) var(--ds-sp-16); margin-bottom: var(--ds-sp-16); gap: var(--ds-sp-16);
}
/* Пересборка — действие разрушительное, поэтому баннер не золотой
   (как «посчитать эмбеддинги»), а нейтрально-серый с красной кнопкой. */
.banner.rebuild { background: var(--ds-panel); border-color: var(--ds-line); align-items: flex-start; }
.banner.rebuild span { font-size: var(--ds-fs-14); color: var(--ds-muted); }
.banner.rebuild button { color: var(--ds-danger); border-color: #d9b8b8; background: var(--ds-surface); white-space: nowrap; }
.banner.rebuild button:hover { background: var(--ds-danger-soft); }
/* Вариант банера-действия для обратимых операций (сопоставить/добавить
   издание, отвязать страницы) — тот же нейтральный банер, но кнопка
   акцентного цвета, не красная: разрушительность не та же, что удаление. */
.banner.rebuild.accent button,
.button-link { color: var(--admin-accent-strong); border-color: var(--ds-line); background: var(--ds-surface); }
.banner.rebuild.accent button:hover,
.button-link:hover { background: var(--admin-accent-soft); }
/* Кнопка-ссылка — переход (GET), а не POST-действие, но должна выглядеть
   как остальные кнопки банера, а не как обычная синяя ссылка. */
.button-link {
  display: inline-block; padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); text-decoration: none; white-space: nowrap; cursor: pointer;
}
.help-popover { position: relative; display: inline-flex; flex: 0 0 auto; }
.help-popover summary {
  width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--ds-line); border-radius: 50%; list-style: none; cursor: help;
  background: var(--ds-surface); color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 750;
}
.help-popover summary::-webkit-details-marker { display: none; }
.help-popover summary:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 2px; }
.help-popover > div {
  display: none; position: absolute; right: 0; top: calc(100% + .45rem); z-index: 25;
  width: min(19rem, 78vw); padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-10); background: var(--ds-surface); color: var(--ds-text); font-size: var(--ds-fs-12);
  font-weight: 400; line-height: 1.45; box-shadow: 0 12px 28px var(--admin-shadow);
}
.help-popover[open] > div, .help-popover:hover > div, .help-popover:focus-within > div { display: block; }
.topic-picker { margin: 0; padding: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.topic-picker legend { padding: 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.topic-picker legend small { margin-left: var(--ds-sp-4); font-weight: 400; }
}

@layer screens {
/* Вход общий для двух процессов: админки и читательского чата.
   Поэтому здесь нет админского меню: до авторизации роль ещё неизвестна,
   а ссылки всё равно ведут обратно к форме. */
body.auth-page {
  max-width: none; min-height: 100vh; margin: 0; padding: 0;
  background: var(--ds-bg); color: var(--ds-text);
}
.auth-page * { box-sizing: border-box; }
.auth-page > main {
  min-height: 100vh; display: grid; place-items: center;
  padding: var(--ds-sp-32) var(--ds-sp-16);
}
.auth-shell { width: min(100%, 27rem); }
.auth-brand {
  display: flex; align-items: center; justify-content: center; gap: var(--ds-sp-12);
  margin-bottom: var(--ds-sp-16); color: var(--ds-text);
}
.auth-brand-mark {
  position: relative; flex: 0 0 1.65rem; width: 1.65rem; height: 1.45rem;
  border: 1.5px solid currentColor; border-radius: var(--ds-rad-6) var(--ds-rad-6) var(--ds-rad-6) var(--ds-rad-6);
}
.auth-brand-mark::after {
  content: ""; position: absolute; top: -.1rem; bottom: -.1rem; left: 50%;
  border-left: 1.5px solid currentColor; transform: skewY(-7deg);
}
.auth-brand-copy { min-width: 0; display: flex; flex-direction: column; line-height: 1.15; }
.auth-brand-copy strong { font: 600 var(--ds-fs-16) Georgia, "Times New Roman", serif; }
.auth-brand-copy small { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.auth-card {
  padding: var(--ds-sp-24) var(--ds-sp-24) var(--ds-sp-24);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
  background: var(--ds-panel); box-shadow: 0 .7rem 2.2rem var(--admin-shadow);
}
.auth-card > header { margin: 0 0 var(--ds-sp-16); border: 0; }
.auth-card h1 { margin: var(--ds-sp-4) 0 var(--ds-sp-4); font: 600 var(--ds-fs-26)/1.15 Georgia, "Times New Roman", serif; }
.auth-card header > p:last-child { margin: 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.auth-eyebrow {
  margin: 0; color: var(--admin-gold-strong); font-size: var(--ds-fs-11); font-weight: 750;
  letter-spacing: .12em; text-transform: uppercase;
}
.auth-card .error { margin: 0 0 var(--ds-sp-16); border: 1px solid var(--ds-danger); font-size: var(--ds-fs-13); }
.auth-card form { max-width: none; gap: var(--ds-sp-16); }
.auth-card label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.auth-card input {
  width: 100%; min-height: 2.6rem; padding: var(--ds-sp-8) var(--ds-sp-12);
  border-color: var(--ds-line); border-radius: var(--ds-rad-6);
}
.auth-card input:focus { outline: 2px solid var(--admin-accent-soft); border-color: var(--admin-accent); }
.auth-card button {
  min-height: 2.55rem; margin-top: var(--ds-sp-4); border-color: var(--ds-text); border-radius: var(--ds-rad-6);
  background: var(--ds-text); color: var(--ds-on-accent); font-weight: 700;
}
.auth-card button:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
.auth-help {
  margin: var(--ds-sp-16) 0 0; padding-top: var(--ds-sp-16); border-top: 1px solid var(--ds-line);
  color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.who { display: flex; gap: var(--ds-sp-12); align-items: center; font-size: var(--ds-fs-14); color: var(--ds-muted); }
.error { color: var(--ds-danger); background: var(--ds-danger-soft); padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-6); }
.sections { line-height: 2; }
.soon { color: var(--ds-muted); }
.menu { display: flex; gap: var(--ds-sp-16); }
.del { display: inline; margin-left: auto; }
.del button { padding: var(--ds-sp-4) var(--ds-sp-8); font-size: var(--ds-fs-12); color: var(--ds-danger); border-color: #d9b8b8; background: var(--ds-surface); }
.del button:hover { background: var(--ds-danger-soft); }
/* Кнопка отключить/включить учётку на /users — тот же компактный крой,
   что .del button, только с двумя цветами вместо одного (состояние
   учётки, не только опасное действие). */
.user-active-toggle button { padding: var(--ds-sp-4) var(--ds-sp-8); font-size: var(--ds-fs-12); background: var(--ds-surface); }
.user-active-toggle.is-active button { color: var(--ds-danger); border-color: #d9b8b8; }
.user-active-toggle.is-active button:hover { background: var(--ds-danger-soft); }
.user-active-toggle.is-inactive button { color: var(--ds-ok); border-color: #b8d9cd; }
.user-active-toggle.is-inactive button:hover { background: var(--ds-ok-soft); }
.stats { background: var(--ds-panel); padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-14); }
.search input { padding: var(--ds-sp-4); min-width: 14rem; }
.bibliography-col { font-size: var(--ds-fs-13); color: var(--ds-muted); }
/* Поле подсказки и кнопка — в одну строку, поле тянется. */

/* CSS-вкладки файлового менеджера — скрытые radio, без JS. */
.tabctl { position: absolute; opacity: 0; pointer-events: none; }
.tabbar { display: flex; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.tabbar label { flex-direction: row; padding: var(--ds-sp-8) var(--ds-sp-16); cursor: pointer; color: var(--ds-muted); border-bottom: 2px solid transparent; margin-bottom: -1px; font-size: var(--ds-fs-16); }
.tabpanel { display: none; }
#tab-pdf:checked ~ .tabpanel-pdf,
#tab-epub:checked ~ .tabpanel-epub { display: block; }
#tab-pdf:checked ~ .tabbar label[for="tab-pdf"],
#tab-epub:checked ~ .tabbar label[for="tab-epub"] { color: var(--ds-text); border-bottom-color: var(--admin-accent); font-weight: 600; }
.checkbox-field { flex-direction: row; align-items: center; gap: var(--ds-sp-4); }
/* Форма поиска на /search-test — поле запроса и кнопка "Искать" в одну
   строку сверху (композер), чекбоксы вертикальным списком под ней, а не всё
   вперемешку в одной обёрнутой строке, как раньше (Степан, 2026-08-23). */
.search-form { flex-direction: column; align-items: stretch; max-width: none; margin: var(--ds-sp-16) 0; gap: var(--ds-sp-12); }
.search-composer { display: flex; flex-direction: row; gap: var(--ds-sp-8); width: 100%; max-width: none; }
.search-composer textarea {
  flex: 1; resize: none; height: 4.8rem; overflow-y: auto; padding: var(--ds-sp-8) var(--ds-sp-12);
  font-family: inherit; border-radius: var(--ds-rad-6); border: 1px solid var(--ds-line);
}
.search-composer .actions { flex: 0 0 auto; max-width: none; }
.search-composer .actions button {
  height: 100%; min-width: 9rem; padding: 0 var(--ds-sp-16); font-size: var(--ds-fs-16); font-weight: 600; border-radius: var(--ds-rad-6);
  border: 1px solid var(--admin-accent); background: var(--admin-accent); color: var(--ds-surface); cursor: pointer;
}
.search-composer .actions button:hover { background: var(--admin-accent-strong); border-color: var(--admin-accent-strong); }
.search-options { display: flex; flex-direction: column; gap: var(--ds-sp-8); }
/* Сводка над списком результатов /search-test (лучшее/худшее совпадение,
   число источников) — .card даёт рамку и фон, здесь только раскладка
   тегов в строку. */
.search-stats { display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--ds-sp-8); align-items: center; margin-bottom: var(--ds-sp-16); }
/* Справочники и авторы */
.lookup { margin-bottom: var(--ds-sp-32); }
.lookup h2 { font-size: var(--ds-fs-16); margin-bottom: var(--ds-sp-4); }
.lookup table { max-width: 42rem; }
.lookup .used-col { width: 8rem; }
.lookup .act-col { width: 6rem; }
/* Форма внутри ячейки таблицы: базовый form — вертикальная колонка. */
.row-form { flex-direction: row; align-items: center; gap: var(--ds-sp-8); max-width: none; }
.row-form input { flex: 1; min-width: 0; padding: var(--ds-sp-4) var(--ds-sp-8); }
.row-form button { font-size: var(--ds-fs-13); padding: var(--ds-sp-4) var(--ds-sp-8); white-space: nowrap; }
/* .author-row — общая обвязка "поле имени + роль/годы + кнопка" в один
   ряд: используется и в визарде добавления книги (work_new.html), и в
   форме издания (страницы контейнера, edition_new/edition_edit.html). */
.author-row { display: flex; flex-direction: row; align-items: center; gap: var(--ds-sp-8); max-width: none; flex-wrap: wrap; }
.author-row input[type="text"] { padding: var(--ds-sp-4) var(--ds-sp-8); min-width: 16rem; }
.author-row select { padding: var(--ds-sp-4); }
.author-row button { font-size: var(--ds-fs-13); padding: var(--ds-sp-4) var(--ds-sp-12); }
/* Издания / разведка PDF */
.edition-row { margin-bottom: var(--ds-sp-4); }
.edition-row a { margin-left: var(--ds-sp-8); }
.anchors { flex-wrap: wrap; }
.anchors input { max-width: 8rem; flex: none; }
.pdf-preview { display: flex; flex-direction: column; gap: var(--ds-sp-8); align-items: flex-start; margin: var(--ds-sp-16) 0; }
.pdf-preview #preview-page { width: 4.5rem; padding: var(--ds-sp-4); text-align: center; }
.pdf-preview img { max-width: 100%; max-height: 70vh; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.preview-img { max-width: 100%; max-height: 50vh; border: 1px solid var(--ds-line); }
.author-pick { display: flex; gap: var(--ds-sp-8); align-items: center; }
.author-pick input { flex: 1; min-width: 0; }
.author-pick button { white-space: nowrap; font-size: var(--ds-fs-14); padding: var(--ds-sp-4) var(--ds-sp-12); }
.chunk { border: 1px solid #e4e4e4; border-left: 4px solid #e4e4e4; border-radius: var(--ds-rad-6); padding: 0; margin-bottom: var(--ds-sp-8); background: var(--ds-surface); overflow: hidden; }
/* Полоса слева + приглушённая заливка всей карточки — почему на чанк стоит
   взглянуть, видно и при быстрой прокрутке, а не только у самого края.
   Порядок правил задаёт приоритет: чем ниже, тем важнее (сверхкороткий
   перебивает всё, потому что такой чанк вообще не попадает в поиск).
   Своя закрытая палитра из 4 цветов — намеренно не переиспользует
   --admin-accent/--ds-warn дизайн-системы: категориям чанков нужна взаимная
   различимость друг от друга больше, чем согласованность с остальной
   панелью, а 4 совместимых со стилем оттенка внутри одного набора
   подобрать сложнее, чем оставить проверенные. */
.chunk.m-biblio { border-left-color: #b9a3d6; background: #f7f4fb; }
/* библиография — исключена из поиска */
.chunk.m-weakpage { border-left-color: #e8b869; background: #fdf8ef; }
/* страница интерполирована / не печатная */
.chunk.m-fallback { border-left-color: #7fb3d5; background: #f2f8fc; }
/* разрезан fallback'ом, а не по абзацам */
.chunk.m-short { border-left-color: #d9534f; background: #fdf4f4; }
/* короче порога — поиск его не отдаст */
/* Короче порога, но единственный чанк в своём разделе — объединять не с
   чем ни в одну сторону (см. db.repository.get_work_path_chunk_counts),
   в отличие от m-short. Отдельный, приглушённый цвет — чтобы не путать
   "можно почистить кнопкой" с "тут нужно решение человека". Последний в
   каскаде — среди взаимно исключающих с m-short, но может сочетаться с
   остальными тремя. */
.chunk.m-orphan { border-left-color: #9a9a9a; background: #f5f5f5; }
/* Список чанков: одна шапка колонок на весь список, у каждого чанка та же
   сетка «в линию», а фрагмент — во всю ширину под ней. Не <table>: строка
   и её текст должны быть разными строками одного блока, иначе цветная
   полоса-маркер (.chunk.m-*) перестала бы охватывать чанк целиком.
   Шапка и строка держат ОДИН grid-template-columns — правится только
   вместе, иначе колонки разъедутся. */
.chunk-list-head, .chunk-meta {
  display: grid; align-items: stretch; gap: 0;
  /* Все служебные поля справа имеют известный предел: страница и токены —
     не больше 4 знаков, кнопка удаления одного размера. Поэтому им
     фиксированная ширина, а весь остаток отдан длинному пути раздела —
     иначе он растягивал бы строку и зрительно раздувал карточку чанка. */
  grid-template-columns: 3.5rem minmax(0, 1fr) 9.5rem 5.5rem 4.5rem 9rem;
}
.chunk-list-head > *, .chunk-meta > * {
  display: flex; align-items: center; justify-content: center;
  min-width: 0; padding: var(--ds-sp-4) var(--ds-sp-8); text-align: center;
}
/* Тонкая вертикальная линия между колонками — на всю высоту строки, чтобы
   поля читались как колонки и при пути раздела в пять строк. */
.chunk-list-head > * + *, .chunk-meta > * + * { border-left: 1px solid var(--ds-line); }
.chunk-list-head {
  padding: 0 var(--ds-sp-16) var(--ds-sp-4) calc(.9rem + 5px); border-bottom: 1px solid var(--ds-line);
  color: var(--ds-muted); font-size: var(--ds-fs-11); text-transform: uppercase; letter-spacing: .05em;
}
.chunk-list-head > * { align-items: flex-end; }
.chunk-sort-link {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ds-sp-4);
  color: inherit; text-decoration: none;
}
.chunk-sort-link:hover, .chunk-sort-link.is-active { color: var(--admin-accent); }
.chunk-sort-link.is-active { font-weight: 700; }
.chunk-summary { display: block; cursor: pointer; list-style: none; }
.chunk-summary::-webkit-details-marker { display: none; }
.chunk-summary:hover { background: rgba(255, 255, 255, .45); }
.chunk-meta { padding: var(--ds-sp-8) var(--ds-sp-12); margin: 0; border: 0; font-size: var(--ds-fs-13); }
.chunk-list-head .c-path, .chunk-meta .c-path { justify-content: flex-start; text-align: left; }
.chunk-meta .c-gi { color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.chunk-meta .c-path { color: var(--ds-muted); overflow-wrap: anywhere; }
.chunk-meta .c-page { flex-direction: column; font-variant-numeric: tabular-nums; }
.chunk-meta .c-page .dash, .chunk-meta .c-page small { color: var(--ds-muted); }
.chunk-meta .c-page small { font-size: var(--ds-fs-11); }
.chunk-meta .c-tokens { color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.chunk-meta .c-actions { flex-wrap: wrap; gap: var(--ds-sp-8); }
.chunk-meta .c-actions form { margin: 0; }
.chunk-chevron::before { content: "⌄"; display: inline-block; color: var(--ds-muted); font-size: var(--ds-fs-16); transition: transform .15s ease; }
.chunk[open] .chunk-chevron::before { transform: rotate(180deg); }
.chunk-detail { padding: var(--ds-sp-16) var(--ds-sp-16) var(--ds-sp-16); border-top: 1px solid var(--ds-line); background: rgba(255, 255, 255, .55); }
.chunk-detail > .tag:first-child { display: inline-block; margin-bottom: var(--ds-sp-12); }
.chunk-detail-actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-8); margin-top: var(--ds-sp-12); padding-top: var(--ds-sp-12); border-top: 1px solid var(--ds-line); }
.chunk-detail-actions form { margin: 0; }
.chunk-detail-actions .boundary-link { margin-right: auto; }
/* Легенда она же фильтр: увидел цвет — отобрал все такие одним кликом. */

/* Шкала косинусной дистанции на /search-test — компактная табличка, не
   переиспользует .legend (тот flex-контейнер собран под цветные метки
   чанков, здесь просто узкие строки "диапазон — пояснение"). */
.score-scale { max-width: 40rem; font-size: var(--ds-fs-14); margin-bottom: var(--ds-sp-16); }
.score-scale td:first-child { color: var(--ds-muted); white-space: nowrap; font-variant-numeric: tabular-nums; width: 1%; }
.key-link {
  display: inline-flex; align-items: center; gap: var(--ds-sp-4); padding: var(--ds-sp-4) var(--ds-sp-8);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); text-decoration: none;
  background: var(--ds-surface); color: var(--ds-muted);
}
.key-link:hover { background: var(--ds-panel); }
.key-link.on { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-weight: 500; }
.notes { margin-top: var(--ds-sp-8); font-size: var(--ds-fs-14); }
.notes summary { cursor: pointer; color: var(--ds-muted); }
.notes ul { margin: var(--ds-sp-8) 0 0; padding-left: var(--ds-sp-16); }
.notes li { margin-bottom: var(--ds-sp-4); }
.notes .marker { color: var(--ds-muted); font-size: var(--ds-fs-13); }
.chunk header { display: flex; gap: var(--ds-sp-12); align-items: flex-start; font-size: var(--ds-fs-13); margin-bottom: var(--ds-sp-8); border-bottom: none; }
.chunk .gi { color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.chunk .path { min-width: 0; color: var(--ds-muted); overflow-wrap: anywhere; }
.chunk .text { margin: 0; white-space: pre-wrap; line-height: 1.55; }
/* Файловый менеджер (/files) — зебра для длинных списков файлов и
   сквозная нумерация строк. */
.file-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.file-table td.num { color: var(--ds-muted); width: 1%; white-space: nowrap; }
.file-table .file-subtitle { display: block; color: var(--ds-muted); font-size: var(--ds-fs-12); }
/* .pager — тоже <nav>, поэтому без своего justify-content унаследовал
   бы space-between от общего "nav" (шапка сайта) и растягивался бы на
   всю ширину — это и была причина широко расставленных номеров страниц. */
.pager { display: flex; justify-content: center; gap: var(--ds-sp-8); margin: var(--ds-sp-16) 0 var(--ds-sp-32); }
.model-option {
  display: flex; align-items: baseline; gap: var(--ds-sp-8); cursor: pointer;
  padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface);
}
.model-option:hover { background: var(--admin-accent-soft); }
.model-option.is-current { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
.model-option input { accent-color: var(--admin-accent); }
.model-option-name { overflow-wrap: anywhere; }
.model-option-badge { margin-left: auto; color: var(--admin-accent-strong); font-size: var(--ds-fs-11); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; white-space: nowrap; }
/* Настройки проекта: вкладки (.files-tabs), карточки с рядами «подпись — поле» */
.settings-heading { display: flex; justify-content: space-between; align-items: flex-end; gap: var(--ds-sp-16); }
.settings-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.settings-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.settings-heading .settings-last { flex: none; margin: 0; text-align: right; font-size: var(--ds-fs-12); line-height: 1.4; }
.settings-error { margin: 0 0 var(--ds-sp-16); }
.settings-saved {
  margin: 0 0 var(--ds-sp-16); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-ok); border-radius: var(--ds-rad-10);
  background: var(--ds-ok-soft); color: var(--ds-ok); font-size: var(--ds-fs-14); font-weight: 600;
}
.settings-card { padding: var(--ds-sp-16) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); margin-bottom: var(--ds-sp-16); }
.settings-card .card-title { margin: 0 0 var(--ds-sp-4); font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.settings-card .hint { max-width: 62rem; margin: 0 0 var(--ds-sp-12); font-size: var(--ds-fs-13); }
.settings-when {
  margin-left: var(--ds-sp-8); padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-pill); background: var(--ds-panel);
  color: var(--ds-muted); font: 600 var(--ds-fs-11)/1.4 system-ui, sans-serif; vertical-align: .15rem; white-space: nowrap;
}
.settings-form { display: block; max-width: none; }
.settings-row {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--ds-sp-16); align-items: center;
  padding: var(--ds-sp-12) 0; border-top: 1px solid var(--ds-line); font-size: var(--ds-fs-14);
}
.settings-row small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.settings-row input[type="number"], .settings-row input[type="time"], .settings-row input[type="text"] { width: 15rem; min-height: 2.2rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.settings-row input[type="number"] { text-align: right; font-variant-numeric: tabular-nums; }
.settings-row input[type="checkbox"] { width: 1.1rem; height: 1.1rem; margin: 0; }
.settings-value { color: var(--ds-text); font-size: var(--ds-fs-13); font-variant-numeric: tabular-nums; text-align: right; }
.settings-calc {
  margin: var(--ds-sp-8) 0 0; padding: var(--ds-sp-12) var(--ds-sp-12); border-radius: var(--ds-rad-10); background: var(--ds-panel);
  font-size: var(--ds-fs-14); line-height: 1.5;
}
.settings-calc small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.settings-warn {
  margin: var(--ds-sp-8) 0 0; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-warn); border-radius: var(--ds-rad-10);
  background: var(--ds-warn-soft); color: var(--ds-warn); font-size: var(--ds-fs-13);
}
.settings-foot { display: flex; justify-content: flex-end; align-items: center; gap: var(--ds-sp-12); margin-top: var(--ds-sp-12); }
.settings-foot button { min-height: 2.25rem; padding: var(--ds-sp-8) var(--ds-sp-16); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.settings-dirty { color: var(--ds-warn); font-size: var(--ds-fs-12); font-weight: 600; }
.settings-table { width: 100%; border-collapse: collapse; font-size: var(--ds-fs-13); }
.settings-table th, .settings-table td { padding: var(--ds-sp-8) 0; border-top: 1px solid var(--ds-line); text-align: left; }
.settings-table thead th { color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 600; }
.settings-table th:not(:first-child), .settings-table td:not(:first-child) { text-align: right; font-variant-numeric: tabular-nums; }
.settings-facts th { width: 40%; color: var(--ds-muted); font-weight: 400; }
.settings-window { margin: 0 0 var(--ds-sp-8); }
.settings-window-bar { position: relative; height: 1.1rem; border-radius: var(--ds-rad-6); background: var(--ds-panel); }
.settings-window-bar i { position: absolute; top: 0; bottom: 0; border-radius: var(--ds-rad-6); background: var(--admin-accent); opacity: .8; }
.settings-window-scale { display: flex; justify-content: space-between; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
/* /system — read-only сводка суперпользователя. Ресурсы читаются с одного
   взгляда, тяжёлые таблицы и деплой остаются отдельными подробностями. */
.system-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-16); }
.system-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.system-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.system-heading-actions { display: flex; align-items: stretch; gap: var(--ds-sp-8); }
.system-online { display: inline-flex; align-items: center; gap: var(--ds-sp-8); min-height: 2.3rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); color: var(--ds-muted); font-size: var(--ds-fs-12); white-space: nowrap; }
.system-online i { width: .48rem; height: .48rem; border-radius: 50%; background: var(--ds-ok); box-shadow: 0 0 0 3px var(--ds-ok-soft); }
.system-refresh { display: inline-flex; align-items: center; justify-content: center; width: 2.3rem; min-height: 2.3rem; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); color: var(--ds-text); font-size: var(--ds-fs-20); text-decoration: none; }
.system-refresh:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
.system-resource-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--ds-sp-12); }
.system-resource-card, .system-panel { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); overflow: hidden; }
.system-resource-card { padding: var(--ds-sp-16) var(--ds-sp-16); }
.system-resource-card.is-warning { border-color: color-mix(in srgb, var(--ds-danger) 45%, var(--ds-line)); }
.system-card-title { display: flex; align-items: center; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-12); }
.system-card-title > span { display: inline-flex; align-items: center; justify-content: center; width: 1.45rem; height: 1.45rem; color: var(--admin-accent-strong); font-size: var(--ds-fs-16); }
.system-card-title h2, .system-panel h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.system-resource-card dl, .system-deploy-meta { margin: 0; }
.system-resource-card dl > div, .system-deploy-meta > div { display: flex; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-4) 0; }
.system-resource-card dt, .system-deploy-meta dt { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.system-resource-card dd, .system-deploy-meta dd { margin: 0; font-size: var(--ds-fs-12); font-weight: 650; text-align: right; }
.system-card-note, .system-warning, .system-empty { margin: var(--ds-sp-12) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.45; }
.system-warning { color: var(--ds-danger); }
.system-details-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(18rem, .8fr); gap: var(--ds-sp-12); margin-top: var(--ds-sp-12); align-items: start; }
.system-details-column { display: grid; gap: var(--ds-sp-12); min-width: 0; }
.system-panel > header { margin: 0; padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.system-panel > header p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.system-table-wrap { overflow-x: auto; }
.system-table { width: 100%; min-width: 28rem; margin: 0; font-size: var(--ds-fs-12); }
.system-table th { padding: var(--ds-sp-8) var(--ds-sp-12); background: var(--ds-side); color: var(--ds-muted); font-size: var(--ds-fs-11); letter-spacing: .025em; }
.system-table td { padding: var(--ds-sp-8) var(--ds-sp-12); }
.system-table th:last-child, .system-table td:last-child { width: 12rem; text-align: right; }
.system-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.system-deploy-meta { padding: var(--ds-sp-12) var(--ds-sp-16); }
.system-deploy-meta > div + div { border-top: 1px solid var(--ds-line); }
.system-empty { margin: 0; padding: var(--ds-sp-16) var(--ds-sp-16); }
.system-docker-details summary { padding: var(--ds-sp-12) var(--ds-sp-16); cursor: pointer; color: var(--ds-text); font-size: var(--ds-fs-12); font-weight: 650; }
.system-docker-details .log { max-height: 22rem; margin: 0 var(--ds-sp-12) var(--ds-sp-12); overflow-x: auto; white-space: pre; }
.options-details { margin-top: var(--ds-sp-16); }
.options-details summary { cursor: pointer; color: var(--ds-muted); font-size: var(--ds-fs-14); }
.options-details > .banner:first-of-type { margin-top: var(--ds-sp-12); }
/* Заметка о книге — должна бросаться в глаза среди спокойных карточек. */
.comment-note {
  background: var(--ds-danger-soft); border: 1px solid var(--ds-danger); border-left: 4px solid var(--ds-danger);
  border-radius: var(--ds-rad-6); padding: var(--ds-sp-12) var(--ds-sp-16); color: var(--ds-text); white-space: pre-wrap; font-size: var(--ds-fs-16);
border-color: var(--ds-line); border-left-color: var(--admin-accent); background: var(--ds-panel);
}
#embed-progress-wrap { display: flex; align-items: center; gap: var(--ds-sp-8); }
#embed-progress-wrap progress { max-width: 8rem; }
/* Прогресс идущего сопоставления на экране разведки — тот же баннер, что
   у векторизации на карточке произведения; отдельного экрана ожидания нет. */
.job-progress-banner { margin-top: var(--ds-sp-16); margin-bottom: 0; }
.job-progress-banner progress { flex: 1; max-width: 18rem; }
/* Узкие формы (вход, добавить книгу, править название, добавить издание) —
   раньше голый <form> (max-width 22rem) прижимался к левому краю страницы;
   .form-page центрирует и расширяет, .card внутри даёт тот же вид, что у
   карточек work.html. */
.form-page { max-width: 34rem; margin: 0 auto; }
.form-page form { max-width: none; }
.form-page .card form { gap: var(--ds-sp-16); }
/* Смена пароля в админке. Читатель получает отдельный
   reader_password.html и изолированные стили reader.css. */
.password-screen { width: min(100%, 52rem); }
.password-breadcrumbs {
  justify-content: flex-start; gap: var(--ds-sp-8); margin: 0 0 var(--ds-sp-16); padding: 0;
  color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.password-breadcrumbs a { color: var(--ds-muted); }
.password-breadcrumbs [aria-current="page"] { color: var(--ds-text); font-weight: 650; }
.password-heading { margin: 0 0 var(--ds-sp-16); border: 0; }
.password-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.15 Georgia, "Times New Roman", serif; }
.password-heading p { margin: var(--ds-sp-8) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.password-form-error { max-width: 44rem; margin: 0 0 var(--ds-sp-16); border: 1px solid var(--ds-danger); font-size: var(--ds-fs-13); }
.password-card {
  max-width: 44rem; padding: var(--ds-sp-16);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface);
}
.password-form { max-width: none; gap: var(--ds-sp-16); }
.password-form label { gap: var(--ds-sp-4); color: var(--ds-text); font-size: var(--ds-fs-12); font-weight: 650; }
.password-form input {
  width: 100%; min-height: 2.6rem; padding: var(--ds-sp-8) var(--ds-sp-12);
  border-color: var(--ds-line); border-radius: var(--ds-rad-6);
}
.password-form input:focus-visible,
.password-actions :focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 2px; }
.password-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--ds-sp-12); margin-top: var(--ds-sp-4); }
.password-actions .password-submit {
  min-height: 2.55rem; border-color: var(--ds-text); border-radius: var(--ds-rad-6);
  background: var(--ds-text); color: var(--ds-on-accent); font-weight: 700;
}
.password-actions .password-submit:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
.password-cancel {
  min-height: 2.55rem; display: inline-flex; align-items: center; justify-content: center;
  padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface); color: var(--ds-text); font-size: var(--ds-fs-13); font-weight: 700; text-decoration: none;
}
.password-cancel:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
/* Общий error.html отдаётся двумя приложениями. Новая композиция
   включается только веткой app_kind=admin в самом шаблоне. */
body.utility-error-page {
  max-width: none; min-height: 100vh; margin: 0; padding: 0;
  background: var(--ds-bg); color: var(--ds-text);
}
.utility-error-page * { box-sizing: border-box; }
.utility-error-page > main {
  min-height: 100vh; display: grid; place-items: center;
  padding: var(--ds-sp-32) var(--ds-sp-16);
}
.utility-error {
  width: min(100%, 34rem); padding: var(--ds-sp-32); text-align: center;
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
  background: var(--ds-panel); box-shadow: 0 .7rem 2.2rem var(--admin-shadow);
}
.utility-error-symbol {
  width: 3.25rem; height: 3.25rem; margin: 0 auto var(--ds-sp-16);
  display: grid; place-items: center; border-radius: 50%;
  background: var(--ds-danger-soft); color: var(--ds-danger);
  font: 700 var(--ds-fs-26)/1 Georgia, "Times New Roman", serif;
}
.utility-error-code {
  margin: 0 0 var(--ds-sp-4); color: var(--admin-gold-strong); font-size: var(--ds-fs-11);
  font-weight: 750; letter-spacing: .12em; text-transform: uppercase;
}
.utility-error h1 { margin: 0; font: 600 var(--ds-fs-26)/1.15 Georgia, "Times New Roman", serif; }
.utility-error-detail { margin: var(--ds-sp-12) auto 0; max-width: 27rem; color: var(--ds-muted); font-size: var(--ds-fs-14); }
.utility-error-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--ds-sp-12); margin-top: var(--ds-sp-24); }
.utility-error-actions a {
  min-height: 2.55rem; display: inline-flex; align-items: center; justify-content: center;
  padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  font-size: var(--ds-fs-13); font-weight: 700; text-decoration: none;
}
.utility-error-actions .utility-error-primary { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-on-accent); }
.utility-error-actions .utility-error-primary:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
.utility-error-actions .utility-error-secondary { background: var(--ds-surface); color: var(--ds-text); }
.utility-error-actions .utility-error-secondary:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
.utility-error-actions a:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 2px; }
/* Серверный fallback загрузки PDF: ошибка или тёзка файла.
   Форма и оба решения остаются обычным POST без JavaScript. */
.upload-failure-screen { width: min(100%, 52rem); }
.upload-failure-breadcrumbs {
  justify-content: flex-start; gap: var(--ds-sp-8); margin: 0 0 var(--ds-sp-16); padding: 0;
  color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.upload-failure-breadcrumbs a { color: var(--ds-muted); }
.upload-failure-breadcrumbs [aria-current="page"] { color: var(--ds-text); font-weight: 650; }
.upload-failure-card { padding: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.upload-failure-heading { display: flex; align-items: flex-start; gap: var(--ds-sp-12); margin: 0 0 var(--ds-sp-16); border: 0; }
.upload-failure-symbol {
  flex: 0 0 2.6rem; width: 2.6rem; height: 2.6rem; display: grid; place-items: center;
  border-radius: 50%; background: var(--ds-danger-soft); color: var(--ds-danger);
  font: 700 var(--ds-fs-20)/1 Georgia, "Times New Roman", serif;
}
.upload-failure-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.15 Georgia, "Times New Roman", serif; }
.upload-failure-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.upload-failure-error { margin: 0 0 var(--ds-sp-16); border: 1px solid var(--ds-danger); font-size: var(--ds-fs-13); }
.upload-failure-form { max-width: none; gap: var(--ds-sp-16); }
.upload-failure-file { gap: var(--ds-sp-8); color: var(--ds-text); font-size: var(--ds-fs-12); font-weight: 650; }
.upload-failure-file input {
  width: 100%; min-height: 2.7rem; padding: var(--ds-sp-8) var(--ds-sp-8);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel);
}
.upload-failure-form .existing-file-question {
  gap: var(--ds-sp-12); padding: var(--ds-sp-16); border-color: var(--ds-warn); border-radius: var(--ds-rad-10);
  background: var(--ds-panel);
}
.upload-failure-form .existing-file-question legend { color: var(--admin-gold-strong); }
.upload-failure-form .existing-choice {
  min-height: 2.6rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--ds-surface); cursor: pointer;
}
.upload-failure-form .existing-choice:has(input:checked) { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
.upload-failure-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--ds-sp-12); }
.upload-failure-actions button { min-height: 2.55rem; border-color: var(--ds-text); background: var(--ds-text); font-weight: 700; }
.upload-failure-cancel {
  min-height: 2.55rem; display: inline-flex; align-items: center; justify-content: center;
  padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface); color: var(--ds-text); font-size: var(--ds-fs-13); font-weight: 700; text-decoration: none;
}
.upload-failure-cancel:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
.upload-failure-actions :focus-visible,
.upload-failure-file input:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 2px; }
/* Обёртка полей скана и выходных данных издания (edition_new/edition_edit
   через макрос scan_fields, плюс work_edit.html). Правила для класса не
   было ни строки — fieldset рисовался браузерным «groove»-прямоугольником
   и распирал карточку формы.
   Решает всё одна строка — min-inline-size. У fieldset из UA-стилей стоит
   min-inline-size: min-content, а min-content считается по самому длинному
   содержимому: в поле «...или уже загруженный файл» лежат 60+ имён PDF,
   самое длинное — 891 px по замеру в браузере. До правки: обёртка шириной
   955 px при форме 510 px вылезала на 430 px за карточку и растягивала всю
   страницу в горизонтальный скролл (1498 px при окне 1400). min-inline-size: 0
   снимает предел, и обёртка сжимается вместе с формой, как остальные поля.
   Полям внутри (select с длинными именами, file-input) отдельных ограничений
   НЕ нужно — проверено замером: в колоночном flex поперечный min-content
   вложенного поля не распирает контейнер, select сам встаёт по ширине
   обёртки (479 px при обёртке 510). */
.scan-fieldset {
  min-inline-size: 0;
  display: flex;
  flex-direction: column;
  gap: var(--ds-sp-16);                 /* тот же шаг, что у полей формы выше */
  margin: 0;                 /* у fieldset браузерные 2px ломают выравнивание */
  padding: var(--ds-sp-12) var(--ds-sp-16);
  border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6);
}
.scan-fieldset legend { padding: 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.scan-fieldset p { margin: 0; }
/* иначе браузерные 14.4px складываются с gap */
/* Вопрос про тёзку в хранилище (web/templates/ui_macros.html::existing_file_question).
   Обёртка та же, что у .scan-fieldset, и по той же причине — не полагаться
   на браузерный fieldset. Тревожная рамка намеренно взята у --ds-warn, а не у
   --ds-danger: это не ошибка, а развилка, и человек может выбрать любой из двух
   файлов. */
.existing-file-question {
  min-inline-size: 0;
  display: flex;
  flex-direction: column;
  gap: var(--ds-sp-8);
  margin: 0;
  padding: var(--ds-sp-12) var(--ds-sp-16);
  border: 1px solid var(--ds-warn);
  border-radius: var(--ds-rad-6);
  background: var(--ds-warn-soft);
}
.existing-file-question legend { padding: 0 var(--ds-sp-4); color: var(--ds-warn); font-size: var(--ds-fs-12); font-weight: 650; }
.existing-file-question p { margin: 0; }
.existing-file-question a { color: var(--admin-accent-strong); }
.existing-file-summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--ds-sp-4) var(--ds-sp-8); }
.existing-choice { display: flex; flex-direction: row; align-items: center; gap: var(--ds-sp-8); font-size: var(--ds-fs-14); }
.chips { display: flex; flex-wrap: wrap; gap: var(--ds-sp-4); margin-top: var(--ds-sp-8); }
.chip-author {
  display: inline-flex; align-items: center; gap: var(--ds-sp-4); padding: var(--ds-sp-4) var(--ds-sp-4) var(--ds-sp-4) var(--ds-sp-12);
  border-radius: var(--ds-rad-pill); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: var(--ds-fs-14);
}
.chip-author button {
  border: none; background: none; color: inherit; cursor: pointer; font-size: var(--ds-fs-16);
  line-height: 1; padding: 0 var(--ds-sp-4); border-radius: 50%;
}
.chip-author button:hover { background: rgba(0, 0, 0, .08); }
.edition-block + .edition-block { margin-top: var(--ds-sp-16); padding-top: var(--ds-sp-16); border-top: 1px solid var(--ds-line); }
.stats-details { margin-bottom: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); padding: var(--ds-sp-12) var(--ds-sp-16); margin-top: var(--ds-sp-16); background: var(--ds-surface); }
.stats-details summary { cursor: pointer; color: var(--ds-muted); font-size: var(--ds-fs-14); color: var(--ds-text); font-weight: 500; }
.stats-details table { margin-top: var(--ds-sp-8); }
.section-divider { border: none; border-top: 1px solid var(--ds-line); margin: var(--ds-sp-24) 0; }
/* Карточка произведения: крупная библиографическая шапка и две равноправные
   рабочие карточки, которые складываются в одну колонку на ноутбуке. */
.work-detail-header { margin: 0 0 var(--ds-sp-16); }
.work-breadcrumb { display: flex; align-items: center; gap: var(--ds-sp-8); margin: 0 0 var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.work-breadcrumb a { color: inherit; }
.work-breadcrumb span { color: var(--ds-line); }
.work-detail-header h1 { max-width: 70rem; margin: 0; font: 700 var(--ds-fs-26)/1.08 Georgia, "Times New Roman", serif; letter-spacing: -.02em; }
.work-detail-authors { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-16); }
.work-detail-status { display: flex; align-items: center; gap: var(--ds-sp-8); margin-top: var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-13); }
.work-detail-status i { width: .26rem; height: .26rem; border-radius: 50%; background: var(--ds-line); }
.work-detail-status .stage { margin: 0; }
.work-overview-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(32rem, 100%), 1fr)); gap: var(--ds-sp-16); align-items: start; margin-bottom: var(--ds-sp-16); }
.work-overview-grid.is-single { grid-template-columns: minmax(0, 1fr); }
.work-overview-grid > .card { height: 100%; margin: 0; border-color: var(--ds-line); box-shadow: 0 10px 28px rgba(49, 43, 34, .035); }
.work-overview-grid .card-title { color: var(--ds-text); font: 700 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.work-overview-grid .metadata-list > div { grid-template-columns: 7rem minmax(0, 1fr); }
.work-overview-grid .meta th { width: 8rem; color: var(--ds-muted); }
.work-overview-grid .card-actions { margin-top: var(--ds-sp-16); }
.work-title { color: var(--admin-accent-strong); font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); }
.work-author { color: var(--admin-accent-strong); font-weight: 500; }
.work-author::before { content: ""; display: inline-block; width: .45rem; height: .45rem; margin-right: var(--ds-sp-8); border-radius: 50%; background: var(--ds-warn); }
.disabled-action-note { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.edition-actions { margin-top: var(--ds-sp-16); }
.missing-card-action { justify-content: flex-start; width: fit-content; border: 0; margin: var(--ds-sp-16) 0 var(--ds-sp-16); padding: 0; background: transparent; }
.work-comment-card { margin-top: var(--ds-sp-16); border-color: var(--ds-line); box-shadow: 0 10px 28px rgba(49, 43, 34, .035); }
.work-comment-card .card-title { margin: 0; color: var(--ds-text); font: 700 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.work-comment-kind { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.work-comment-shell { width: min(100%, 42rem); }
.work-comment-form textarea {
  width: 100%; min-height: 13rem; resize: vertical; padding: var(--ds-sp-12) var(--ds-sp-12);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface); color: var(--ds-text); font-family: inherit; font-style: inherit; font-variant: inherit; font-stretch: inherit; line-height: inherit; line-height: 1.55;
}
.work-comment-form textarea:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 1px; }
.work-comment-submit {
  display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-8);
  padding: var(--ds-sp-16) var(--ds-sp-16); border-radius: 0 0 var(--ds-rad-14) var(--ds-rad-14); background: var(--admin-accent-soft);
}
.work-comment-submit > button { min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-16); border-color: var(--admin-accent-strong); border-radius: var(--ds-rad-6); background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 700; }
.chunk-browser { margin-top: var(--ds-sp-24); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); padding: var(--ds-sp-16); background: var(--ds-surface); }
.chunk-browser-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--ds-sp-12); }
.chunk-browser-head h2 { margin: 0; color: var(--ds-text); font-size: var(--ds-fs-16); }
.count-badge { padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-pill); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-variant-numeric: tabular-nums; }
.chunk-browser .filter { margin: 0; }
.key-link.on.m-short { border-color: #d9534f; background: #fdf4f4; color: var(--ds-danger); }
.key-link.on.m-fallback { border-color: #7fb3d5; background: #f2f8fc; color: var(--admin-accent-strong); }
.key-link.on.m-biblio { border-color: #b9a3d6; background: #f7f4fb; color: #6d568f; }
.key-link.on.m-weakpage { border-color: #e8b869; background: #fdf8ef; color: var(--ds-warn); }
.key-link.on.m-orphan { border-color: #9a9a9a; background: #f5f5f5; color: #656565; }
.key-link.marker-all.on { border-color: var(--ds-line); background: var(--ds-surface); color: var(--ds-text); font-weight: 500; }
.chunk-browser .legend { margin: var(--ds-sp-12) 0; }
.chunk-filter .search-row { display: flex; gap: var(--ds-sp-8); align-items: center; }
.chunk-filter .search-row input { flex: 1; min-width: 0; padding: var(--ds-sp-4) var(--ds-sp-8); }
.chunk-filter .search-row button { white-space: nowrap; padding: var(--ds-sp-4) var(--ds-sp-16); font-size: var(--ds-fs-14); }
.chunk-browser > .muted { display: block; margin: var(--ds-sp-12) 0; }
.source-tag {
  display: inline-block; min-width: 2.6rem; text-align: center;
  font-size: var(--ds-fs-11); letter-spacing: .04em; padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-6);
  border: 1px solid var(--ds-line); color: var(--ds-muted); background: var(--ds-panel);
}
/* Ручные заголовки в карте — маленькая точка рядом с источником. */
.manual-heading-dot {
  display: inline-block; width: .5rem; height: .5rem; margin-left: -.15rem;
  border-radius: 50%; background: var(--admin-accent); vertical-align: middle;
}
/* Проблемы сопоставления страниц: ошибка — красная полоса слева, предупреждение — золотая. */
.match-problems {
  background: var(--ds-danger-soft); border: 1px solid #d9b8b8; border-radius: var(--ds-rad-6);
  padding: var(--ds-sp-12) var(--ds-sp-16); margin: 0 0 var(--ds-sp-16);
}
.match-problems h2 { margin: 0 0 var(--ds-sp-8); font-size: var(--ds-fs-16); color: var(--ds-danger); }
.match-problems ul { margin: 0 0 var(--ds-sp-8); padding: 0; list-style: none; }
.match-problems li { padding: var(--ds-sp-4) 0 var(--ds-sp-4) var(--ds-sp-12); border-left: 3px solid var(--ds-warn); }
.match-problems li.is-error { border-left-color: var(--ds-danger); }
.match-problems p { margin: 0; }
.actions { display: flex; align-items: center; gap: var(--ds-sp-16); max-width: none; flex-wrap: wrap; }
.heading-off { opacity: .45; }
/* Карта заголовков занимает всю рабочую ширину; текст открывается только
   явной кнопкой «Просмотр» в большом модальном окне. */
.headings-shell { width: min(100%, 96rem); margin: 0 auto; }
#headings-form { display: block; max-width: none; }
.headings-header { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--ds-sp-24); margin-bottom: var(--ds-sp-16); }
.headings-header h1 { margin: 0; font: 700 var(--ds-fs-26)/1.05 Georgia, serif; }
.headings-header p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); }
.headings-primary-actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-8); flex-wrap: wrap; }
.headings-save-state, .headings-manual-state { padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: 999px; background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-12); white-space: nowrap; }
.headings-save-state.is-dirty { background: var(--ds-warn-soft); color: #79561d; }
.headings-manual-state { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.headings-workspace { display: block; }
.headings-card { min-width: 0; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); box-shadow: 0 10px 28px rgba(49, 43, 34, .04); overflow: hidden; }
.headings-card-header { padding: var(--ds-sp-16) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--ds-sp-8) var(--ds-sp-16); }
.headings-card-header h2 { margin: 0; font: 700 var(--ds-fs-20)/1.2 Georgia, serif; }
.level-replace { display: flex; align-items: center; gap: var(--ds-sp-8); min-height: 2.65rem; box-sizing: border-box; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-12); white-space: nowrap; }
.level-replace input[type=number] { width: 3.2rem; padding: var(--ds-sp-4); text-align: center; -moz-appearance: textfield; appearance: textfield; }
.level-replace input[type=number]::-webkit-outer-spin-button, .level-replace input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.level-replace button { min-height: 1.9rem; padding: var(--ds-sp-4) var(--ds-sp-8); background: var(--ds-surface); color: var(--admin-accent-strong); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.level-replace button:hover { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
.headings-table-wrap { overflow-x: auto; }
.headings { width: 100%; min-width: 48rem; margin: 0; table-layout: fixed; border-collapse: collapse; }
.headings th { padding: var(--ds-sp-12) var(--ds-sp-12); background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 700; letter-spacing: .035em; text-transform: uppercase; }
.headings td { padding: var(--ds-sp-12) var(--ds-sp-12); border-bottom: 1px solid var(--ds-line); vertical-align: middle; }
.headings tbody tr:last-child td { border-bottom: 0; }
.headings tr:hover { background: var(--ds-panel); }
.headings tr[data-index]:focus { outline: none; background: var(--admin-accent-soft); }
.headings tr.heading-previewed { background: var(--ds-panel); box-shadow: inset 3px 0 var(--admin-accent); }
.headings .tree-col { width: auto; }
.headings .origin-col { width: 13rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.headings .level-col { width: 5rem; text-align: center; }
.headings .len-col { width: 5.2rem; text-align: right; font-variant-numeric: tabular-nums; }
.headings .drop-col { width: 4.4rem; text-align: center; }
.headings td.tree-col { position: relative; }
.heading-peek { width: 1.25rem; height: 1.25rem; padding: 0; margin-right: var(--ds-sp-4); border: 0; border-radius: var(--ds-rad-6); background: transparent; color: var(--ds-muted); font-size: var(--ds-fs-14); line-height: 1; vertical-align: middle; }
.heading-peek:hover:not(:disabled), .heading-peek:focus-visible { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.heading-peek:disabled { cursor: not-allowed; opacity: .45; }
/* Строка дерева — гибкая: отступ уровня (.branch) сдвигает поле заголовка,
   а поле забирает остаток ширины. С фиксированной шириной поля оно
   переносилось под отступ к левому краю, и дерево не читалось. */
.tree-cell { display: flex; align-items: center; gap: var(--ds-sp-4); min-width: 0; }
.tree-cell > .heading-peek, .tree-cell > .branch, .tree-cell > .tag { flex: none; }
.branch { display: inline-block; height: 1.15rem; margin-right: var(--ds-sp-4); border-right: 1px solid var(--ds-line); vertical-align: middle; }
.heading-text { flex: 1 1 auto; width: auto; min-width: 8rem; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid transparent; border-radius: var(--ds-rad-6); background: transparent; color: var(--ds-text); text-overflow: ellipsis; }
span.heading-text { font-size: var(--ds-fs-14); }
.heading-text:hover { border-color: var(--ds-line); background: var(--ds-surface); }
.heading-text:focus { border-color: var(--admin-accent); background: var(--ds-surface); outline: 2px solid var(--admin-accent-soft); }
tr[data-level="1"] span.heading-text { font-weight: 700; font-size: var(--ds-fs-16); }
/* Статьи в карте выпуска (issue_articles.js): кнопка автора у H1 и
   подсветка «задан / наследует / нет автора». */
.article-meta { flex: 0 1 auto; min-width: 0; max-width: 18rem; }
.article-meta[hidden] { display: none; }
.article-edit { max-width: 100%; overflow: hidden; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-surface); font-size: var(--ds-fs-12); font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.article-edit.article-own { border-color: var(--ds-ok); background: var(--ds-ok-soft); color: var(--ds-ok); }
.article-edit.article-marked { border-color: var(--ds-ok); background: var(--ds-surface); color: var(--ds-ok); }
.article-edit.article-inherited { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.article-edit.article-missing { border-color: var(--ds-danger); background: var(--ds-danger-soft); color: var(--ds-danger); }
.issue-map tr.is-article > td { border-top: 2px solid var(--admin-accent-soft); }
.articles-summary { color: var(--ds-muted); font-size: var(--ds-fs-13); }
.articles-summary strong { color: var(--ds-danger); }
.article-dialog { width: min(32rem, calc(100vw - 2rem)); padding: 0; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); background: var(--ds-surface); }
.article-dialog-form { display: flex; flex-direction: column; gap: var(--ds-sp-12); padding: var(--ds-sp-16) var(--ds-sp-16); }
.article-dialog-form h2 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); }
.article-dialog-heading { margin: 0; font-weight: 700; }
.article-author-row { display: flex; gap: var(--ds-sp-8); }
.article-author-row input { flex: 1; }
/* Предпросмотр сборки выпуска (issue_preview.html). */
.issue-preview-table { width: 100%; border-collapse: collapse; font-size: var(--ds-fs-14); }
.issue-preview-table th, .issue-preview-table td { padding: var(--ds-sp-8) var(--ds-sp-8); border-bottom: 1px solid var(--ds-line); text-align: left; vertical-align: top; }
.issue-preview-table .num { text-align: right; font-variant-numeric: tabular-nums; }
.issue-preview-table tr.is-blocked td { background: var(--ds-danger-soft); }
.issue-preview-problems { display: flex; flex-wrap: wrap; gap: var(--ds-sp-4); margin-top: var(--ds-sp-4); }
/* Предупреждение в формах описания и на предпросмотре: не запрет, а
   напоминание — поэтому золото, а не красный. */
.work-new-section p.warn, .issue-preview p.warn, .headings-shell > p.warn { margin: 0; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-warn); border-radius: var(--ds-rad-6); background: var(--ds-warn-soft); color: var(--ds-warn); font-size: var(--ds-fs-13); }
.issue-preview-reference { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.article-text-section { margin-top: var(--ds-sp-16); }
.article-text-section h3 { margin: 0 0 var(--ds-sp-8); font-size: var(--ds-fs-16); }
.article-text-body { white-space: pre-wrap; line-height: 1.5; }
.issue-articles-head { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); }
tr[data-level="2"] span.heading-text { font-weight: 600; }
tr[data-level="4"] .heading-text,
tr[data-level="5"] .heading-text,
tr[data-level="6"] .heading-text { color: var(--ds-muted); }
tr[data-level="4"] span.heading-text,
tr[data-level="5"] span.heading-text,
tr[data-level="6"] span.heading-text { font-size: var(--ds-fs-14); }
.level-col .level { width: 3.9rem; min-height: 2.15rem; padding: var(--ds-sp-4); text-align: center; }
tr.level-broken { background: var(--ds-danger-soft); }
tr.level-broken .level { border-color: #d9534f; background: var(--ds-surface); }
.insert-heading { position: absolute; left: .25rem; bottom: -.65rem; z-index: 2; width: 1.3rem; height: 1.3rem; padding: 0; border-radius: 50%; font-size: var(--ds-fs-12); line-height: 1; opacity: 0; }
.headings tr:hover .insert-heading, .insert-heading:focus-visible,
.headings tr[data-index]:focus .insert-heading { opacity: 1; }
.delete-manual { padding: 0 var(--ds-sp-8); font-size: var(--ds-fs-13); line-height: 1.6; border-color: #d9b8b8; background: var(--ds-surface); color: var(--ds-danger); }
.delete-manual:hover { background: var(--ds-danger-soft); border-color: #d9b8b8; }
.heading-artifacts { border-top: 1px solid var(--ds-line); background: var(--ds-panel); }
.heading-artifacts > summary { padding: var(--ds-sp-12) var(--ds-sp-16); cursor: pointer; color: var(--ds-muted); font-size: var(--ds-fs-14); font-weight: 650; }
.heading-artifacts > summary span { display: inline-block; min-width: 1.5rem; margin-left: var(--ds-sp-4); padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-pill); background: var(--ds-surface); text-align: center; font-size: var(--ds-fs-12); }
.heading-artifacts > p { margin: 0; padding: 0 var(--ds-sp-16) var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-13); }
.headings-artifact-table { background: var(--ds-surface); }
.heading-preview-dialog { width: min(68rem, calc(100vw - 3rem)); height: min(48rem, calc(100vh - 3rem)); padding: 0; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); background: var(--ds-surface); color: var(--ds-text); box-shadow: 0 24px 70px rgba(30, 27, 22, .28); }
.heading-preview-dialog::backdrop { background: rgba(38, 34, 28, .48); backdrop-filter: blur(2px); }
.heading-preview-dialog-bar { display: flex; align-items: center; justify-content: space-between; padding: var(--ds-sp-12) var(--ds-sp-16) var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); background: var(--ds-panel); font: 700 var(--ds-fs-16)/1.2 Georgia, serif; }
.heading-preview-close { width: 2rem; height: 2rem; padding: 0; border: 0; background: transparent; color: var(--ds-muted); font-size: var(--ds-fs-26); line-height: 1; }
.heading-preview-close:hover { background: var(--admin-accent-soft); color: var(--ds-text); }
#peek-body { height: calc(100% - 3.7rem); padding: var(--ds-sp-16); overflow-y: auto; }
#peek-body p { white-space: pre-wrap; }
.headings-preview-loading { min-height: 20rem; display: grid; place-content: center; }
.peek-title { font: 700 var(--ds-fs-26)/1.25 Georgia, serif; margin: var(--ds-sp-8) 0 var(--ds-sp-16); }
.section-source { display: flex; align-items: baseline; gap: var(--ds-sp-8); flex-wrap: wrap; font-size: var(--ds-fs-12); }
.section-source-items { color: var(--ds-text); }
.section-source-item { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.section-editor { display: block; max-width: none; margin-top: var(--ds-sp-16); }
.section-editor > label { color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.section-editor textarea { width: 100%; height: calc(100vh - 19rem); min-height: 20rem; max-height: 34rem; resize: vertical; padding: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); font-family: system-ui, sans-serif; line-height: 1.6; }
.section-editor textarea:focus { border-color: var(--admin-accent); outline: 2px solid var(--admin-accent-soft); }
.section-editor-actions { margin-top: var(--ds-sp-12); }
/* Перенос границы между соседними чанками (chunk_boundary.html) */
.boundary-page-header { margin-bottom: var(--ds-sp-16); }
.boundary-page-header h1 { margin: 0; font: 600 var(--ds-fs-26)/1.12 Georgia, "Times New Roman", serif; }
.boundary-page-header .path { margin: var(--ds-sp-8) 0 0; }
.boundary { display: block; max-width: 58rem; }
.boundary-text { padding: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.boundary-chunk-label { margin: var(--ds-sp-4) 0 var(--ds-sp-8); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.boundary-chunk-label.left { color: var(--admin-accent-strong); }
.boundary-sentence { margin: var(--ds-sp-4) 0; padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-6); line-height: 1.5; }
.boundary-sentence.left { background: var(--admin-accent-soft); }
.boundary-sentence.right { background: var(--ds-panel); }
.boundary-mark { position: relative; display: flex; align-items: center; justify-content: center; min-height: 2.2rem; margin: var(--ds-sp-4) 0; border-top: 1px solid var(--ds-line); }
.boundary-mark button { font-size: var(--ds-fs-12); padding: var(--ds-sp-4) var(--ds-sp-8); color: var(--ds-muted); border-color: var(--ds-line); background: var(--ds-surface); }
.boundary-mark button:hover { color: var(--ds-text); border-color: var(--ds-muted); }
.boundary-mark.current { border-top: 2px solid var(--ds-warn); }
.boundary-mark.is-selected { border-top: 2px solid var(--admin-accent-strong); }
.boundary-mark .boundary-chunk-label { position: absolute; left: 0; top: .15rem; }
.boundary-actions { display: flex; justify-content: flex-end; margin-top: var(--ds-sp-16); }
.boundary-feedback { max-width: 58rem; margin: var(--ds-sp-12) 0 0; }
.boundary-merge { display: flex; align-items: center; justify-content: space-between; max-width: 58rem; gap: var(--ds-sp-16); margin-top: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.boundary-merge h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.boundary-merge p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.boundary-merge form { flex: 0 0 auto; margin: 0; }
/* Отладочный чат (chat.html): диалог и трасса одного хода читаются рядом. */
.debug-chat-page .admin-content { max-width: none; }
.debug-chat-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ds-sp-24); margin-bottom: var(--ds-sp-16); }
.debug-chat-heading > div:first-child { flex: 0 1 22rem; max-width: 22rem; }
.debug-chat-circle { margin-bottom: var(--ds-sp-16); }
.debug-chat-circle > summary { cursor: pointer; font-size: var(--ds-fs-14); font-weight: 600; }
.debug-chat-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.debug-chat-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.debug-chat-controls { display: flex; flex: 0 0 auto; flex-wrap: nowrap; align-items: stretch; justify-content: flex-end; gap: var(--ds-sp-8); }
.debug-chat-controls .model-picker { border-color: var(--ds-line); border-radius: var(--ds-rad-10); }
.debug-chat-controls .model-picker summary { min-width: 12.5rem; min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-12); gap: var(--ds-sp-8); }
.debug-chat-controls #model-picker-choice summary { min-width: 18rem; }
.debug-chat-controls .model-picker-label { font-size: var(--ds-fs-11); }
.debug-chat-controls .model-picker-current { font-size: var(--ds-fs-12); }
.debug-chat-reset { min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-12); border-color: var(--ds-line); border-radius: var(--ds-rad-10); font-size: var(--ds-fs-12); font-weight: 650; }
.debug-chat-error { margin: 0 0 var(--ds-sp-16); }
.debug-chat-workspace { overflow: hidden; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.debug-chat-section-heading { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); background: var(--ds-panel); }
.debug-chat-section-heading h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.debug-chat-section-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.debug-chat-turn-count { flex: 0 0 auto; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.debug-chat-turns { min-width: 0; }
.chat-turn { margin: 0; padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); background: var(--ds-surface); }
.chat-turn:last-child { border-bottom: 0; }
.chat-turn > summary { min-width: 0; display: flex; align-items: baseline; gap: var(--ds-sp-8); cursor: pointer; list-style-position: outside; color: var(--ds-text); }
.chat-turn > summary::marker { color: var(--ds-muted); }
.chat-turn-label { flex: 0 0 auto; color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 750; letter-spacing: .1em; text-transform: uppercase; }
.chat-turn-question { min-width: 0; font-size: var(--ds-fs-14); font-weight: 650; line-height: 1.45; }
.chat-turn-grid { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(19rem, .75fr); gap: var(--ds-sp-16); margin-top: var(--ds-sp-12); }
.chat-turn-conversation { min-width: 0; }
.chat-turn-panel-title { margin-bottom: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 750; letter-spacing: .1em; text-transform: uppercase; }
.chat-answer { min-height: 5.5rem; white-space: pre-wrap; padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); font-size: var(--ds-fs-13); line-height: 1.55; }
.chat-answer.is-pending { color: var(--ds-muted); }
.chat-turn-trace { min-width: 0; padding-left: var(--ds-sp-16); border-left: 1px solid var(--ds-line); }
.chat-turn-trace h3 { display: flex; justify-content: space-between; gap: var(--ds-sp-12); margin: 0 0 var(--ds-sp-8); font-size: var(--ds-fs-12); }
.chat-turn-trace h3 span { color: var(--ds-muted); font-weight: 500; }
.chat-call { margin: 0; border-bottom: 1px solid var(--ds-line); font-size: var(--ds-fs-12); }
.chat-call:first-of-type { border-top: 1px solid var(--ds-line); }
.chat-call > summary { display: flex; align-items: flex-start; gap: var(--ds-sp-8); padding: var(--ds-sp-8) 0; cursor: pointer; color: var(--ds-muted); }
.chat-call > summary > span:last-child { min-width: 0; overflow-wrap: anywhere; }
.chat-call pre { max-height: 22rem; overflow: auto; margin: 0 0 var(--ds-sp-8); padding: var(--ds-sp-8); white-space: pre-wrap; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); font-size: var(--ds-fs-11); }
.chat-trace-empty, .debug-chat-empty { color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.5; }
.debug-chat-empty { margin: 0; padding: var(--ds-sp-32) var(--ds-sp-16); text-align: center; }
.chat-live-log { margin: 0; padding: 0; list-style: none; }
.chat-live-log li { padding: var(--ds-sp-8) 0; border-top: 1px solid var(--ds-line); overflow-wrap: anywhere; color: var(--ds-muted); font: var(--ds-fs-11)/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.debug-chat-composer { max-width: none; gap: var(--ds-sp-4); margin: var(--ds-sp-16) 0 0; padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); box-shadow: 0 8px 22px rgba(64, 76, 77, .08); }
.debug-chat-composer > label { display: block; margin-bottom: 0; color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 700; }
.debug-chat-composer-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: stretch; gap: var(--ds-sp-8); }
.debug-chat-composer textarea { width: 100%; min-height: 4.25rem; resize: vertical; padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); font: .84rem/1.45 inherit; }
.debug-chat-composer button { align-self: stretch; min-width: 7rem; padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-10); font-size: var(--ds-fs-12); font-weight: 700; }
.debug-chat-composer #chat-submit { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-on-accent); }
.debug-chat-composer #chat-submit:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
.debug-chat-composer button span { margin-left: var(--ds-sp-4); }
.debug-chat-composer > p { margin: var(--ds-sp-16) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-11); }
/* Тестирование поиска (search_test.html): методы включаются независимо,
   чтобы две или три сохранённые выдачи можно было держать рядом на странице. */
.search-test-page .admin-content { max-width: none; }
.search-test-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-16); }
.search-test-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.search-test-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.search-test-heading > span { padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.search-test-methods { overflow: hidden; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.search-test-methods-heading { padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); background: var(--ds-panel); }
.search-test-methods-heading h2, .search-method-panel-heading h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.search-test-methods-heading p, .search-method-panel-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.search-methodctl { position: absolute; opacity: 0; pointer-events: none; }
.search-method-switches { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--ds-sp-8); padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.search-method-switches label { min-width: 0; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); cursor: pointer; }
.search-method-switches label strong, .search-method-switches label small { display: block; }
.search-method-switches label strong { font-size: var(--ds-fs-12); }
.search-method-switches label small { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
#search-method-vector:checked ~ .search-method-switches label[for="search-method-vector"],
#search-method-fulltext:checked ~ .search-method-switches label[for="search-method-fulltext"],
#search-method-hybrid:checked ~ .search-method-switches label[for="search-method-hybrid"] { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-on-accent); }
#search-method-vector:checked ~ .search-method-switches label[for="search-method-vector"] small,
#search-method-fulltext:checked ~ .search-method-switches label[for="search-method-fulltext"] small,
#search-method-hybrid:checked ~ .search-method-switches label[for="search-method-hybrid"] small { color: color-mix(in srgb, var(--ds-on-accent) 72%, transparent); }
.search-method-panel { padding: var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.search-method-panel:last-child { border-bottom: 0; }
#search-method-vector:not(:checked) ~ .search-method-vector,
#search-method-fulltext:not(:checked) ~ .search-method-fulltext,
#search-method-hybrid:not(:checked) ~ .search-method-hybrid { display: none; }
.search-method-panel-heading { margin-bottom: var(--ds-sp-12); }
.search-test-page .search-form { margin: 0 0 var(--ds-sp-12); padding: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.search-test-page .search-composer textarea { min-height: 3.7rem; height: 3.7rem; border-color: var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); }
.search-test-page .search-composer .actions button { min-width: 7rem; border-color: var(--ds-text); border-radius: var(--ds-rad-6); background: var(--ds-text); color: var(--ds-on-accent); font-size: var(--ds-fs-12); }
.search-test-page .search-options { flex-direction: row; flex-wrap: wrap; gap: var(--ds-sp-8) var(--ds-sp-16); }
.search-test-page .checkbox-field { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.search-test-page .checkbox-field input { accent-color: var(--ds-text); }
.search-test-page .search-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; margin: 0 0 var(--ds-sp-12); padding: 0; border-color: var(--ds-line); border-radius: var(--ds-rad-10); }
.search-test-page .search-stats > span { display: flex; align-items: baseline; justify-content: space-between; gap: var(--ds-sp-8); padding: var(--ds-sp-8) var(--ds-sp-12); border-right: 1px solid var(--ds-line); }
.search-test-page .search-stats > span:last-child { border-right: 0; }
.search-test-page .search-stats small { color: var(--ds-muted); font-size: var(--ds-fs-11); }
.search-test-page .search-stats strong { font-size: var(--ds-fs-12); font-variant-numeric: tabular-nums; }
.search-results { overflow: hidden; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); }
.search-results:empty { display: none; }
.search-result-row { display: grid; grid-template-columns: minmax(15rem, .36fr) minmax(0, 1fr); margin: 0; border-bottom: 1px solid var(--ds-line); background: var(--ds-surface); }
.search-result-row:last-child { border-bottom: 0; }
.search-result-meta { min-width: 0; display: grid; grid-template-columns: 2rem minmax(0, 1fr) auto; align-items: start; gap: var(--ds-sp-8); padding: var(--ds-sp-12) var(--ds-sp-12); border-right: 1px solid var(--ds-line); background: var(--ds-panel); }
.search-result-number { color: var(--ds-muted); font-size: var(--ds-fs-11); font-variant-numeric: tabular-nums; }
.search-result-source { min-width: 0; overflow-wrap: anywhere; font-size: var(--ds-fs-12); font-weight: 650; }
.search-result-source small, .search-result-metric small { display: block; margin-bottom: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 500; }
.search-result-metric { color: var(--ds-text); font-size: var(--ds-fs-11); font-variant-numeric: tabular-nums; text-align: right; }
.search-result-row > p { margin: 0; padding: var(--ds-sp-12) var(--ds-sp-12); white-space: pre-wrap; font-size: var(--ds-fs-12); line-height: 1.5; }
.admin-page * { box-sizing: border-box; }
.admin-page.wide .admin-content { max-width: none; }
/* /works — редакционная ведомость с плотностью операционного реестра. */
.works-heading { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: var(--ds-sp-12); margin-bottom: var(--ds-sp-16); }
.works-heading h1 {
  margin: 0; font-family: Georgia, "Times New Roman", serif;
  font-size: var(--ds-fs-26); font-weight: 600; color: var(--ds-text);
}
.works-heading h1 span { margin-left: var(--ds-sp-4); color: var(--ds-muted); font-family: system-ui, sans-serif; font-size: var(--ds-fs-14); font-weight: 500; }
.works-summary { display: table; grid-column: 1 / -1; width: max-content; border-collapse: collapse; margin-top: 0; font-size: var(--ds-fs-12); }
.works-summary-line { display: table-row; }
.works-summary-line > * { display: table-cell; vertical-align: baseline; white-space: nowrap; padding: 0 var(--ds-sp-8) var(--ds-sp-4) 0; }
.works-summary a { color: var(--ds-muted); text-decoration: none; }
.works-summary a:hover { color: var(--admin-accent-strong); text-decoration: underline; }
.works-summary a.summary-error strong { color: var(--ds-danger); }
.works-summary a.summary-needs_action strong { color: var(--ds-warn); }
.works-summary strong { color: var(--ds-text); font-variant-numeric: tabular-nums; }
.works-summary a.works-summary-source { color: var(--ds-text); }
.works-summary-source {
  min-width: 0; font-weight: 700; letter-spacing: .04em;
  text-decoration: none;
}
.works-summary-total {
  min-width: 0; margin-left: 0; color: var(--ds-muted);
  font-variant-numeric: tabular-nums;
}
.works-add {
  flex: 0 0 auto;
   border: 1px solid var(--admin-gold-strong);
  background: var(--ds-warn); color: var(--ds-on-accent);
    box-shadow: 0 5px 12px rgba(141, 103, 37, .16);
}
.works-add:hover { background: var(--admin-gold-strong); color: var(--ds-on-accent); }
.works-toolbar {
  display: grid; grid-template-columns: minmax(13rem, 1.4fr) minmax(7rem, .4fr) minmax(11rem, .7fr) auto auto;
  align-items: end; max-width: none; margin: 0;
  border: 1px solid var(--ds-line); background: var(--ds-surface);
}
.works-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.works-toolbar input, .works-toolbar select {
  width: 100%; height: 2.35rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text);
}
.works-toolbar input:focus-visible, .works-toolbar select:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 1px; }
.works-toolbar button {
  height: 2.35rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6);
  border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 650;
}
.works-reset { align-self: center; padding: var(--ds-sp-8) var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.works-table-wrap {
  overflow-x: auto; border: 1px solid var(--ds-line); border-top: 0;
  border-radius: 0 0 var(--ds-rad-10) var(--ds-rad-10); background: var(--ds-surface);
}
.works-table { min-width: 0; table-layout: fixed; font-size: var(--ds-fs-12); }
.works-table th {
  position: sticky; top: 0; z-index: 2;
  background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line);
  font-size: var(--ds-fs-11); letter-spacing: .025em;
}
.works-table td { line-height: 1.35; vertical-align: top; }
.works-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.works-table tbody tr:hover td { background: var(--admin-accent-soft); }
.works-table th:nth-child(1) { width: 26%; }
.works-table th:nth-child(2) { width: 16%; }
.works-table th:nth-child(3) { width: 24%; }
.works-table th:nth-child(4) { width: calc(7ch + 2 * var(--ds-sp-12)); white-space: nowrap; }
.works-table th:nth-child(5) { width: auto; }
.works-title a { display: inline-block; max-width: 28ch; hyphens: auto; overflow-wrap: break-word; color: var(--admin-accent-strong); font-weight: 400; text-decoration: none; text-decoration-thickness: 1px; text-underline-offset: 2px; }
.works-title a:hover, .works-title a:focus-visible { text-decoration: underline; }
.works-stage-cell .stage + .stage { margin-left: var(--ds-sp-4); }
.works-stage-cell .stage { display: inline-block; max-width: 100%; white-space: normal; }
.works-number { text-align: right; font-variant-numeric: tabular-nums; }
.works-table .bibliography-col { color: var(--ds-muted); font-size: var(--ds-fs-12); hyphens: auto; overflow-wrap: break-word; }
.works-pagination {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: var(--ds-sp-12);
  padding: var(--ds-sp-12) var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.works-range { justify-self: start; font-variant-numeric: tabular-nums; }
.works-pages { display: flex; align-items: center; justify-content: center; gap: var(--ds-sp-4); }
.works-pages a, .works-current, .works-ellipsis {
  min-width: 1.8rem; height: 1.8rem; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--ds-rad-6); text-decoration: none; font-variant-numeric: tabular-nums;
}
.works-pages a { color: var(--admin-accent-strong); }
.works-pages a:hover { background: var(--admin-accent-soft); }
.works-current { background: var(--admin-accent-strong); color: var(--ds-on-accent); font-weight: 700; }
.works-page-caption { justify-self: end; }
/* /authors — тот же операционный реестр, что /works: заголовок с золотой
   кнопкой, тулбар поиска над таблицей, зебра и липкая шапка. Отличия:
   один поисковый фильтр вместо трёх и четыре лёгкие колонки. */
.authors-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--ds-sp-24); margin-bottom: var(--ds-sp-16); }
.authors-heading h1 {
  margin: 0; font-family: Georgia, "Times New Roman", serif;
  font-size: var(--ds-fs-26); font-weight: 600; color: var(--ds-text);
}
.authors-heading h1 span { margin-left: var(--ds-sp-4); color: var(--ds-muted); font-family: system-ui, sans-serif; font-size: var(--ds-fs-14); font-weight: 500; }
.authors-add {
  flex: 0 0 auto;
   border: 1px solid var(--admin-gold-strong);
  background: var(--ds-warn); color: var(--ds-on-accent);
    box-shadow: 0 5px 12px rgba(141, 103, 37, .16);
}
.authors-add:hover { background: var(--admin-gold-strong); color: var(--ds-on-accent); }
.authors-toolbar {
  display: grid; grid-template-columns: minmax(13rem, 1fr) auto auto;
  align-items: end; max-width: none; margin: 0;
  border: 1px solid var(--ds-line); background: var(--ds-surface);
}
.authors-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.authors-toolbar input {
  width: 100%; height: 2.35rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text);
}
.authors-toolbar input:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 1px; }
.authors-toolbar button {
  height: 2.35rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6);
  border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 650;
}
.authors-reset { align-self: center; padding: var(--ds-sp-8) var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.authors-table-wrap {
  overflow-x: auto; border: 1px solid var(--ds-line); border-top: 0;
  border-radius: 0 0 var(--ds-rad-10) var(--ds-rad-10); background: var(--ds-surface);
}
.authors-table { min-width: 46rem; table-layout: fixed; font-size: var(--ds-fs-12); }
.authors-table th {
  position: sticky; top: 0; z-index: 2;
  background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line);
  font-size: var(--ds-fs-11); letter-spacing: .025em;
}
.authors-table td { line-height: 1.35; vertical-align: top; }
.authors-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.authors-table tbody tr:hover td { background: var(--admin-accent-soft); }
.authors-table th:nth-child(1) { width: 30%; }
.authors-table th:nth-child(2) { width: 13%; }
.authors-table th:nth-child(3) { width: 11%; }
.authors-table th:nth-child(4) { width: 46%; }
/* Список выпусков (issues.html) — та же таблица, но в шесть колонок. */
.issues-table th:nth-child(1) { width: 27%; }
.issues-table th:nth-child(2) { width: 7%; }
.issues-table th:nth-child(3) { width: 12%; }
.issues-table th:nth-child(4) { width: 30%; }
.issues-table th:nth-child(5) { width: 8%; }
.issues-table th:nth-child(6) { width: 16%; }
.issues-table td:nth-child(4) { overflow-wrap: anywhere; }
.authors-name a { color: var(--admin-accent-strong); font-weight: 650; text-decoration-thickness: 1px; text-underline-offset: 2px; }
.authors-number { text-align: right; font-variant-numeric: tabular-nums; }
.authors-bio { color: var(--ds-muted); font-size: var(--ds-fs-12); overflow-wrap: anywhere; }
/* Сортировка по колонкам: заголовки-ссылки, активная колонка — с меткой ▾
   без подчёркивания (не ссылка). Пробел до стрелки — чтобы ▾ не прилипал
   к букве при шрифтовом рендере. */
.authors-sort { color: var(--ds-muted); text-decoration: none; font-weight: 650; }
.authors-sort:hover { color: var(--admin-accent-strong); text-decoration: underline; text-underline-offset: 2px; }
.authors-sort-current { color: var(--ds-text); font-weight: 700; white-space: nowrap; }
.authors-pagination {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: var(--ds-sp-12);
  padding: var(--ds-sp-12) var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.authors-range { justify-self: start; font-variant-numeric: tabular-nums; }
.authors-pages { display: flex; align-items: center; justify-content: center; gap: var(--ds-sp-4); }
.authors-pages a, .authors-current, .authors-ellipsis {
  min-width: 1.8rem; height: 1.8rem; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--ds-rad-6); text-decoration: none; font-variant-numeric: tabular-nums;
}
.authors-pages a { color: var(--admin-accent-strong); }
.authors-pages a:hover { background: var(--admin-accent-soft); }
.authors-current { background: var(--admin-accent-strong); color: var(--ds-on-accent); font-weight: 700; }
.authors-page-caption { justify-self: end; }
/* /authors/{id} — карточка автора: поля и биография равноправны, поэтому
   не вытягиваем их одной узкой колонкой. Удаление отделено линией от
   сохранения: это необратимое действие, а не второй вариант сабмита формы. */
.author-detail-heading { margin-bottom: var(--ds-sp-16); }
.author-detail-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; color: var(--ds-text); }
.author-detail-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-14); }
.author-detail-heading .author-detail-back { margin: 0 0 var(--ds-sp-12); font-size: var(--ds-fs-12); }
.author-detail-back a { color: var(--admin-accent-strong); text-decoration: none; }
.author-detail-back a:hover { text-decoration: underline; text-underline-offset: 2px; }
.author-detail-error { margin: 0 0 var(--ds-sp-16); }
.author-detail-card, .author-works-card { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.author-detail-form { max-width: none; margin: 0; padding: var(--ds-sp-16); }
.author-detail-fields { display: grid; grid-template-columns: minmax(17rem, .78fr) minmax(20rem, 1.22fr); gap: var(--ds-sp-16) var(--ds-sp-16); }
.author-detail-identity { display: grid; align-content: start; gap: var(--ds-sp-12); }
.author-detail-form label { display: flex; flex-direction: column; gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.author-detail-form label b { color: var(--ds-danger); }
.author-detail-form input, .author-detail-form select, .author-detail-form textarea { width: 100%; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); font-family: inherit; font-style: inherit; font-variant: inherit; font-stretch: inherit; line-height: inherit; }
.author-detail-form input, .author-detail-form select { height: 2.3rem; padding: var(--ds-sp-8) var(--ds-sp-8); }
.author-detail-form textarea { min-height: 8rem; flex: 1; padding: var(--ds-sp-8) var(--ds-sp-12); line-height: 1.45; resize: vertical; }
.author-detail-form input:focus-visible, .author-detail-form select:focus-visible, .author-detail-form textarea:focus-visible { outline: 2px solid var(--admin-accent); outline-offset: 1px; }
.author-detail-bio { min-height: 100%; }
.author-detail-actions { display: flex; align-items: center; justify-content: flex-start; gap: var(--ds-sp-12); padding-top: var(--ds-sp-16); margin-top: var(--ds-sp-16); border-top: 1px solid var(--ds-line); }
.author-detail-delete { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border-top: 1px solid var(--ds-line); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.author-detail-cannot-delete { margin: 0; padding: var(--ds-sp-12) var(--ds-sp-16); border-top: 1px solid var(--ds-line); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.author-new-hint { margin: var(--ds-sp-12) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.author-works-card { margin-top: var(--ds-sp-16); overflow: hidden; }
.author-works-card header { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.author-works-card h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.author-works-card header span { color: var(--ds-muted); font-size: var(--ds-fs-12); font-variant-numeric: tabular-nums; }
.author-works-card ol { margin: 0; padding: var(--ds-sp-8) var(--ds-sp-16) var(--ds-sp-12) var(--ds-sp-32); }
.author-works-card li { padding: var(--ds-sp-4) 0; color: var(--ds-muted); }
.author-works-card li + li { border-top: 1px solid var(--ds-panel); }
.author-works-card a { color: var(--admin-accent-strong); text-underline-offset: 2px; }
/* / — обзор ведёт только к существующим рабочим разделам. Это навигация,
   а не дашборд: без подготовленных сервером агрегатов здесь нет выдуманных
   счётчиков и «статусов здоровья». */
.admin-overview-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-24); }
.admin-overview-kicker { margin: 0 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.admin-overview-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; color: var(--ds-text); }
.admin-overview-heading div > p:last-child { margin: var(--ds-sp-8) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.admin-overview-section + .admin-overview-section { margin-top: var(--ds-sp-24); }
.admin-overview-section h2 { margin: 0 0 var(--ds-sp-12); font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.admin-overview-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--ds-sp-12); }
.admin-overview-card { position: relative; display: block; min-height: 7.25rem; padding: var(--ds-sp-16) var(--ds-sp-32) var(--ds-sp-16) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); color: var(--ds-text); text-decoration: none; }
.admin-overview-card:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); }
.admin-overview-card strong { display: block; font: 600 var(--ds-fs-16)/1.25 Georgia, "Times New Roman", serif; color: var(--admin-accent-strong); }
.admin-overview-card span { display: block; margin-top: var(--ds-sp-8); color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.4; }
.admin-overview-card i { position: absolute; right: .8rem; bottom: .75rem; color: var(--admin-accent-strong); font-size: var(--ds-fs-16); font-style: normal; }
.admin-overview-grid-small { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* /lookups — справочники-вкладки: теги-кнопки сверху, открыта ровно одна
   таблица (см. _lookups_page в lookups.py). Активный тег залит акцентом,
   остальные — нейтральные пилюли; переключение — ссылка ?table= (GET). */
.lookups-heading h1 {
  margin: 0; font-family: Georgia, "Times New Roman", serif;
  font-size: var(--ds-fs-26); font-weight: 600; color: var(--ds-text);
}
.lookups-heading p { margin: var(--ds-sp-4) 0 var(--ds-sp-16); color: var(--ds-muted); font-size: var(--ds-fs-13); }
.lookups-error { margin: 0 0 var(--ds-sp-16); }
.lookups-tabs {
  display: flex; flex-wrap: wrap; gap: var(--ds-sp-8); margin: 0 0 var(--ds-sp-16);
  padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
  background: var(--ds-surface);
}
.lookups-tab {
  display: inline-flex; align-items: center; min-height: 2.1rem; padding: var(--ds-sp-4) var(--ds-sp-12);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-panel);
  color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 600; text-decoration: none; white-space: nowrap;
}
.lookups-tab:hover { border-color: var(--admin-accent-strong); color: var(--admin-accent-strong); background: var(--admin-accent-soft); }
.lookups-tab.is-active {
  border-color: var(--admin-accent-strong); background: var(--admin-accent-strong);
  color: var(--ds-on-accent); font-weight: 700;
}
.lookups-table-wrap {
  overflow-x: auto; border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-10); background: var(--ds-surface);
}
.lookups-table { min-width: 40rem; table-layout: fixed; font-size: var(--ds-fs-12); }
.lookups-table th {
  position: sticky; top: 0; z-index: 2; padding: var(--ds-sp-8) var(--ds-sp-12);
  background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line);
  font-size: var(--ds-fs-11); letter-spacing: .025em;
}
.lookups-table td { padding: var(--ds-sp-8) var(--ds-sp-12); line-height: 1.35; vertical-align: middle; }
.lookups-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.lookups-table tbody tr:hover td { background: var(--admin-accent-soft); }
.lookups-table th:nth-child(1) { width: 56%; }
.lookups-table th:nth-child(2) { width: 18%; }
.lookups-table th:nth-child(3) { width: 26%; }
.lookups-used { text-align: right; font-variant-numeric: tabular-nums; }
.lookups-actions { text-align: right; white-space: nowrap; }
/* Формы «переименовать»/«добавить» внутри ячеек — компактный ряд (.row-form
   уже задаёт layout), здесь только согласование отступов с таблицей. */
.lookups-table .row-form { gap: var(--ds-sp-8); }
.lookups-table .row-form input { height: 2rem; padding: var(--ds-sp-4) var(--ds-sp-8); }
.lookups-table .row-form button { height: 2rem; padding: 0 var(--ds-sp-8); font-size: var(--ds-fs-12); }
.lookups-rename { border-color: var(--ds-line); background: var(--ds-surface); color: var(--admin-accent-strong); }
.lookups-rename:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-soft); }
.lookups-delete { display: inline-flex; }
.lookups-delete-button { min-height: 2rem; padding: 0 var(--ds-sp-8); border: 1px solid color-mix(in srgb, var(--ds-danger) 45%, white); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-danger); font: inherit; font-size: var(--ds-fs-12); }
.lookups-delete-button:hover { background: color-mix(in srgb, var(--ds-danger) 8%, white); }
.lookups-add-row td { background: var(--ds-panel); }
.lookups-add-form { padding: var(--ds-sp-4) 0; }
.lookups-add-form button { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
/* /agent-runs — реестр качества и полная трасса одного запуска. */
.agent-runs-heading h1, .agent-run-detail-heading h1 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-26); font-weight: 600; }
.agent-runs-heading h1 span { margin-left: var(--ds-sp-4); color: var(--ds-muted); font-family: system-ui, sans-serif; font-size: var(--ds-fs-14); font-weight: 500; }
.agent-runs-heading p, .agent-run-detail-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.agent-metrics { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--ds-sp-8); margin: var(--ds-sp-16) 0; }
.agent-metrics > div, .agent-run-facts > div {
  min-width: 0; padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
  background: var(--ds-surface);
}
.agent-metrics span, .agent-run-facts span { display: block; color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
.agent-metrics strong, .agent-run-facts strong { display: block; margin-top: var(--ds-sp-4); font-size: var(--ds-fs-16); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.agent-metrics small, .agent-run-facts small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); line-height: 1.35; overflow-wrap: anywhere; }
.agent-runs-toolbar {
  display: grid; grid-template-columns: repeat(4, minmax(9rem, 1fr)); align-items: end;
  max-width: none; margin: 0; border: 1px solid var(--ds-line);
   background: var(--ds-surface);
}
.agent-runs-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.agent-runs-toolbar input, .agent-runs-toolbar select {
  width: 100%; height: 2.25rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text);
}
.agent-runs-actions { display: flex; align-items: center; gap: var(--ds-sp-12); min-height: 2.25rem; }
.agent-runs-actions button { height: 2.25rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.agent-runs-actions a { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.agent-runs-table-wrap { overflow-x: auto; border: 1px solid var(--ds-line); border-top: 0; border-radius: 0 0 var(--ds-rad-10) var(--ds-rad-10); background: var(--ds-surface); }
.agent-runs-table { min-width: 82rem; table-layout: fixed; font-size: var(--ds-fs-12); }
.agent-runs-table th { position: sticky; top: 0; z-index: 2; padding: var(--ds-sp-8) var(--ds-sp-8); background: var(--ds-side); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.agent-runs-table td { padding: var(--ds-sp-8) var(--ds-sp-8); vertical-align: top; line-height: 1.35; }
.agent-runs-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.agent-runs-table tbody tr:hover td { background: var(--admin-accent-soft); }
.agent-runs-table th:nth-child(1) { width: 8%; }
.agent-runs-table th:nth-child(2) { width: 8%; }
.agent-runs-table th:nth-child(3) { width: 10%; }
.agent-runs-table th:nth-child(4) { width: 14%; }
.agent-runs-table th:nth-child(5) { width: 7%; }
.agent-runs-table th:nth-child(6) { width: 9%; }
.agent-runs-table th:nth-child(7) { width: 12%; }
.agent-runs-table th:nth-child(8) { width: 32%; }
.agent-runs-table td small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.agent-run-time a, .agent-run-question a { color: var(--admin-accent-strong); text-decoration-thickness: 1px; text-underline-offset: 2px; }
.agent-run-question a { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
.agent-run-number { text-align: right; font-variant-numeric: tabular-nums; }
.run-status, .citation-status { display: inline-flex; font-weight: 750; white-space: nowrap; }
.run-status-succeeded, .citation-status-passed { background: var(--ds-ok-soft); color: var(--ds-ok); }
.run-status-running, .citation-status-not_run { background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.run-status-failed, .run-status-interrupted, .citation-status-failed { background: var(--ds-danger-soft); color: var(--ds-danger); }
.citation-status-not_applicable, .run-status-blocked_duplicate, .run-status-blocked_limit { background: var(--ds-warn-soft); color: var(--ds-warn); }
.agent-run-detail-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--ds-sp-16); }
.agent-run-detail-heading h1 { margin-top: var(--ds-sp-4); font-size: var(--ds-fs-20); overflow-wrap: anywhere; }
.agent-run-back { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.agent-run-detail-heading > .run-status { margin-top: var(--ds-sp-4); font-size: var(--ds-fs-12); }
.agent-run-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--ds-sp-8); margin: var(--ds-sp-16) 0; }
.agent-run-copy-grid { display: grid; grid-template-columns: minmax(15rem, .7fr) minmax(0, 1.3fr); gap: var(--ds-sp-8); align-items: start; }
.agent-run-copy-grid .agent-run-text { margin-top: 0; }
.agent-run-text, .agent-trace-section, .agent-run-error, .agent-run-violations { margin-top: var(--ds-sp-12); padding: var(--ds-sp-16) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.agent-run-error, .agent-run-violations { border-color: var(--ds-danger); background: var(--ds-danger-soft); }
.agent-run-text h2, .agent-trace-section h2, .agent-run-error h2, .agent-run-violations h2 { margin: 0 0 var(--ds-sp-8); font-size: var(--ds-fs-14); }
.agent-trace-section h2 span { color: var(--ds-muted); font-weight: 500; }
.agent-run-text > div { white-space: pre-wrap; font-size: var(--ds-fs-13); }
.agent-run-text pre, .agent-run-error pre, .agent-trace-body pre {
  max-height: 32rem; margin: var(--ds-sp-4) 0 0; padding: var(--ds-sp-12); overflow: auto; white-space: pre-wrap;
  overflow-wrap: anywhere; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-panel); color: var(--ds-text); font: var(--ds-fs-12)/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
}
.agent-run-violations ul { margin: 0; padding-left: var(--ds-sp-16); font-size: var(--ds-fs-12); }
.agent-trace-call { border-top: 1px solid var(--ds-line); }
.agent-trace-call:last-child { border-bottom: 1px solid var(--ds-line); }
.agent-trace-call > summary {
  display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: var(--ds-sp-12);
  min-height: 2.5rem; padding: var(--ds-sp-8) var(--ds-sp-4); cursor: pointer; list-style-position: inside; font-size: var(--ds-fs-12);
}
.agent-trace-call > summary span:nth-child(2) { color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.agent-trace-step {
  display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: var(--ds-sp-12);
  min-height: 2.2rem; padding: var(--ds-sp-4) var(--ds-sp-4); font-size: var(--ds-fs-12);
}
.agent-trace-step span:nth-child(2) { color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.agent-trace-step-rerank { background: var(--admin-accent-soft); }
.agent-trace-body { padding: var(--ds-sp-4) var(--ds-sp-8) var(--ds-sp-12) var(--ds-sp-16); }
.agent-trace-body h3 { margin: var(--ds-sp-12) 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); text-transform: uppercase; letter-spacing: .04em; }
.agent-trace-body dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--ds-sp-4) var(--ds-sp-12); margin: var(--ds-sp-8) 0; font-size: var(--ds-fs-12); }
.agent-trace-body dt { color: var(--ds-muted); }
.agent-trace-body dd { margin: 0; overflow-wrap: anywhere; }
/* /files и /works/new — тот же строгий редакционный язык, что /works. */
.visually-hidden {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
.files-heading h1, .work-new-heading h1 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-26); font-weight: 600; }
.files-heading p, .work-new-heading p, .files-panel-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.files-tabs {
  display: flex; justify-content: flex-start; gap: var(--ds-sp-8); margin: var(--ds-sp-16) 0 var(--ds-sp-16);
  border-bottom: 1px solid var(--ds-line);
}
.files-tabs a {
  padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-10) var(--ds-rad-10) 0 0; border-bottom: 2px solid transparent; color: var(--ds-muted);
  font-size: var(--ds-fs-14); font-weight: 700; text-decoration: none;
}
.files-tabs a span { margin-left: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 500; }
.files-tabs a[aria-current="page"] { border-bottom-color: var(--admin-accent-strong); color: var(--admin-accent-strong); }
.files-panel-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-16); }
.files-panel-heading h2 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-20); font-weight: 600; }
.file-upload-disclosure { margin-bottom: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.file-upload-disclosure > summary {
  min-height: 3.45rem; display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16);
  padding: var(--ds-sp-12) var(--ds-sp-16); list-style: none; cursor: pointer;
}
.file-upload-disclosure > summary::-webkit-details-marker { display: none; }
.file-upload-disclosure > summary > span:first-child { display: flex; flex-direction: column; gap: var(--ds-sp-4); }
.file-upload-disclosure > summary strong { font-size: var(--ds-fs-13); }
.file-upload-disclosure > summary small { color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 400; }
.file-upload-chevron { color: var(--ds-muted); transition: transform .16s ease; }
.file-upload-disclosure[open] .file-upload-chevron { transform: rotate(180deg); }
.file-upload-form { max-width: none; margin: 0; padding: 0 var(--ds-sp-12) var(--ds-sp-12); }
.file-upload-panel {
  position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--ds-sp-12);
  padding: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel);
}
.file-upload-panel > .help-popover { position: absolute; right: 1rem; top: 1rem; z-index: 5; }
.file-dropzone {
  grid-column: 1 / -1; min-height: 6.3rem; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: var(--ds-sp-4); padding: var(--ds-sp-16) var(--ds-sp-48);
  border: 1px dashed var(--admin-accent); border-radius: var(--ds-rad-10); background: var(--ds-panel);
  color: var(--admin-accent-strong); text-align: center; cursor: pointer;
}
.file-dropzone strong { font-size: var(--ds-fs-14); }
.file-dropzone span { color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 400; }
.file-dropzone:hover, .file-dropzone.is-dragging { border-style: solid; background: var(--admin-accent-soft); }
.selected-file {
  min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-12);
  padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-panel); font-size: var(--ds-fs-12);
}
.selected-file[hidden] { display: none; }
.selected-file-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ds-text); }
.selected-file-size { flex: 0 0 auto; color: var(--ds-muted); font-variant-numeric: tabular-nums; }
.file-upload-submit {
  min-height: 2.35rem; padding: var(--ds-sp-8) var(--ds-sp-16); border-color: var(--admin-accent-strong); border-radius: var(--ds-rad-6);
  background: var(--admin-accent-strong); color: var(--ds-on-accent); font-size: var(--ds-fs-13); font-weight: 700;
}
.file-upload-submit:disabled { cursor: wait; opacity: .72; }
.files-toolbar {
  display: grid; grid-template-columns: minmax(15rem, 1.5fr) minmax(12rem, .7fr) auto auto;
  align-items: end; max-width: none; margin: 0;
  border: 1px solid var(--ds-line); background: var(--ds-surface);
}
.files-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.files-toolbar input, .files-toolbar select {
  width: 100%; height: 2.35rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text);
}
.files-toolbar button {
  height: 2.35rem; padding: 0 var(--ds-sp-12); border-color: var(--admin-accent-strong); border-radius: var(--ds-rad-6);
  background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 650;
}
.files-reset { align-self: center; padding: var(--ds-sp-8) var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.file-table-wrap { overflow-x: auto; border: 1px solid var(--ds-line); border-top: 0; border-radius: 0 0 var(--ds-rad-10) var(--ds-rad-10); background: var(--ds-surface); }
.file-register { min-width: 48rem; table-layout: fixed; font-size: var(--ds-fs-12); }
.file-register th {
  position: sticky; top: 0; z-index: 2; padding: var(--ds-sp-8) var(--ds-sp-12);
  background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line);
  font-size: var(--ds-fs-11); letter-spacing: .025em;
}
.file-register td { padding: var(--ds-sp-8) var(--ds-sp-12); line-height: 1.35; vertical-align: top; }
.file-register tbody tr:not(.file-period):nth-child(odd) td { background: var(--ds-panel); }
.file-register tbody tr:not(.file-period):hover td { background: var(--admin-accent-soft); }
.file-register th:nth-child(1) { width: 4%; }
.file-register th:nth-child(2) { width: 40%; }
.file-register th:nth-child(3) { width: 15%; }
.file-register th:nth-child(4) { width: 10%; }
.file-register th:nth-child(5) { width: 31%; }
.file-period th { position: static; padding: var(--ds-sp-12) var(--ds-sp-12) var(--ds-sp-4); background: var(--ds-bg); font-size: var(--ds-fs-11); letter-spacing: .08em; text-transform: uppercase; }
.file-number { color: var(--ds-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.file-identity a { color: var(--admin-accent-strong); font-weight: 650; text-decoration-thickness: 1px; text-underline-offset: 2px; }
.file-subtitle { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); overflow-wrap: anywhere; }
.file-size { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.file-size-sort { color: inherit; text-decoration: none; }
.file-size-sort:hover, .file-size-sort.is-active { color: var(--admin-accent-strong); text-decoration: underline; text-underline-offset: 2px; }
.file-actions { text-align: right; }
.file-action-stack { display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-4); margin-left: auto; }
.file-action {
  min-height: 1.85rem; display: inline-flex; align-items: center; justify-content: center;
  padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface); color: var(--ds-muted); font-size: var(--ds-fs-11); text-decoration: none; white-space: nowrap;
}
.file-action:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.file-action.primary { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.file-more { position: relative; flex: 0 0 auto; }
.file-more > summary {
  width: 1.85rem; height: 1.85rem; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); list-style: none; cursor: pointer;
  background: var(--ds-surface); color: var(--ds-muted); font-size: var(--ds-fs-12); letter-spacing: -.08em;
}
.file-more > summary::-webkit-details-marker { display: none; }
.file-more[open] > summary { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.file-more > div {
  position: absolute; z-index: 12; top: calc(100% + .35rem); right: 0; min-width: 8.5rem;
  padding: var(--ds-sp-4); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
  background: var(--ds-surface); box-shadow: 0 10px 24px var(--admin-shadow);
}
.file-register tbody:last-of-type tr:last-child .file-more > div { top: auto; bottom: calc(100% + .35rem); }
.file-more form { display: block; max-width: none; }
.file-action.danger { width: 100%; border-color: transparent; color: var(--ds-danger); }
.file-delete-option { display: flex; flex-direction: row; gap: var(--ds-sp-8); align-items: center; padding: var(--ds-sp-4) var(--ds-sp-8); color: var(--ds-text); font-size: var(--ds-fs-12); white-space: nowrap; cursor: pointer; }
.file-action.danger:hover { border-color: var(--ds-danger); background: var(--ds-danger-soft); }
.empty-table { color: var(--ds-muted); text-align: center; }
.work-new-shell { width: min(100%, 48rem); margin: 0 auto; }
.form-back { margin: 0 0 var(--ds-sp-12); font-size: var(--ds-fs-12); }
.form-back a { color: var(--ds-muted); }
.work-new-heading { margin-bottom: var(--ds-sp-16); }
.form-error { margin-bottom: var(--ds-sp-12); padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-danger); border-radius: var(--ds-rad-10); background: var(--ds-danger-soft); color: var(--ds-danger); }
/* Импорт готовой выгрузки — узкая полоса НАД формой добавления книги, а
   не её секция: правило «форма добавления книги — один вертикальный
   блок» (DESIGN.md) относится к секциям самой формы. Здесь ничего не
   спрашивается, все данные уже в файле. */
.work-import-strip { display: flex; flex-direction: row; align-items: center; gap: var(--ds-sp-12); max-width: none; margin-bottom: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px dashed var(--ds-line); border-radius: var(--ds-rad-14); background: var(--ds-panel); }
.work-import-copy { display: flex; align-items: center; gap: var(--ds-sp-8); font-size: var(--ds-fs-13); white-space: nowrap; }
.work-import-strip input[type="file"] { min-width: 0; flex: 1; }
.work-import-replace { flex-direction: row; align-items: center; gap: var(--ds-sp-4); font-size: var(--ds-fs-12); white-space: nowrap; }
.work-import-strip button { min-height: 2.2rem; padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); white-space: nowrap; }
.work-new-form { max-width: none; gap: 0; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); background: var(--ds-surface); box-shadow: 0 8px 20px var(--admin-shadow); }
.work-new-section { display: flex; flex-direction: column; gap: var(--ds-sp-12); padding: var(--ds-sp-16) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.work-new-section h2 { display: flex; align-items: center; gap: var(--ds-sp-8); margin: 0 0 var(--ds-sp-4); font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); font-weight: 600; }
.work-new-section h2 span { width: 1.45rem; height: 1.45rem; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-family: system-ui, sans-serif; font-size: var(--ds-fs-11); }
.field-stack { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.field-stack small { margin-left: var(--ds-sp-4); color: var(--ds-muted); font-weight: 400; }
.field-stack input, .field-stack select { width: 100%; min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.work-new-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: var(--ds-sp-12); align-items: end; }
/* «Книга / Журнал / Сборник» (web/templates/_issue_form.html). Группа
   полей вида — fieldset только ради `disabled`: визуально её нет, секции
   внутри остаются секциями одного белого блока формы. */
.kind-group { display: contents; }
.kind-group[hidden] { display: none; }
.kind-switch-row { display: flex; align-items: center; gap: var(--ds-sp-8); }
.kind-switch { display: inline-flex; align-self: flex-start; padding: var(--ds-sp-4); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.kind-option { display: inline-flex; flex-direction: row; width: auto; }
.kind-option input { position: absolute; opacity: 0; pointer-events: none; }
.kind-option span { padding: var(--ds-sp-8) var(--ds-sp-16); border-radius: var(--ds-rad-6); color: var(--ds-muted); font-size: var(--ds-fs-14); font-weight: 600; cursor: pointer; }
.kind-option input:checked + span { background: var(--ds-surface); color: var(--admin-accent-strong); box-shadow: 0 1px 3px var(--admin-shadow); }
.kind-option input:focus-visible + span { outline: 2px solid var(--admin-accent); outline-offset: 1px; }
.form-saved { margin-bottom: var(--ds-sp-12); padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-ok); border-radius: var(--ds-rad-10); background: var(--ds-ok-soft); color: var(--ds-ok); }
.issue-articles { margin-top: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-14); background: var(--ds-surface); }
.issue-articles ul { margin: 0; padding-left: var(--ds-sp-16); }
.topic-options { display: flex; flex-wrap: wrap; gap: var(--ds-sp-8) var(--ds-sp-12); }
.topic-options label { display: inline-flex; width: auto; flex-direction: row; align-items: center; gap: var(--ds-sp-4); font-size: var(--ds-fs-13); font-weight: 500; }
.topic-options input { accent-color: var(--admin-accent); }
.work-new-selected { margin-top: -.3rem; }
.work-new-dropzone { min-height: 7.5rem; }
.selected-file-clear {
  flex: 0 0 auto; width: 1.7rem; height: 1.7rem; padding: 0; border: 0;
  background: transparent; color: var(--ds-muted); font-size: var(--ds-fs-16);
}
.selected-file-clear:hover { background: var(--admin-accent-soft); color: var(--ds-text); }
.work-new-author-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(9rem, .35fr) auto; align-items: end; gap: var(--ds-sp-8); }
.author-add { min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--admin-accent); border-radius: var(--ds-rad-6); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 650; }
.author-add:hover { background: var(--admin-accent); color: var(--ds-surface); }
.field-error { margin: -.25rem 0 0; color: var(--ds-danger); font-size: var(--ds-fs-12); }
.work-new-next { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-16) var(--ds-sp-16); border-radius: 0 0 var(--ds-rad-14) var(--ds-rad-14); background: var(--admin-accent-soft); }
.work-new-next-copy { display: flex; align-items: center; gap: var(--ds-sp-8); color: var(--admin-accent-strong); font-size: var(--ds-fs-13); }
.work-new-next > button { min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-16); border-color: var(--admin-accent-strong); border-radius: var(--ds-rad-6); background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 700; white-space: nowrap; }
.work-edit-shell { width: min(100%, 52rem); }
.work-edit-submit {
  display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16);
  padding: var(--ds-sp-16) var(--ds-sp-16); border-radius: 0 0 var(--ds-rad-14) var(--ds-rad-14); background: var(--admin-accent-soft);
}
.work-edit-submit > span { color: var(--admin-accent-strong); font-size: var(--ds-fs-12); }
.work-edit-submit > div { display: flex; align-items: center; gap: var(--ds-sp-8); flex: 0 0 auto; }
.work-edit-submit button { min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-16); border-color: var(--admin-accent-strong); border-radius: var(--ds-rad-6); background: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 700; white-space: nowrap; }
.edition-form-shell { width: min(100%, 56rem); }
.edition-kind-row { grid-template-columns: minmax(0, 1.6fr) minmax(10rem, .7fr); }
.edition-reference-preview { display: grid; grid-template-columns: 10rem minmax(0, 1fr); gap: var(--ds-sp-12); padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); font-size: var(--ds-fs-12); }
.edition-reference-preview strong { color: var(--admin-accent-strong); }
.edition-reference-preview span { color: var(--ds-muted); }
.edition-field-note { margin: -.1rem 0 0; padding: var(--ds-sp-8) var(--ds-sp-12); border-left: 3px solid var(--ds-warn); background: var(--ds-warn-soft); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.edition-scan-fields { display: flex; flex-direction: column; gap: var(--ds-sp-12); }
.edition-scan-fields > label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; }
.edition-scan-fields input, .edition-scan-fields select { width: 100%; min-width: 0; min-height: 2.45rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.edition-scan-fields .hint { margin: 0; font-size: var(--ds-fs-12); }
.edition-scan-summary { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--ds-sp-16); align-items: center; padding: var(--ds-sp-12) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); }
.edition-scan-summary strong { overflow-wrap: anywhere; color: var(--ds-text); font-size: var(--ds-fs-13); }
.edition-scan-summary p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.edition-scan-actions { display: flex; gap: var(--ds-sp-8); flex-wrap: wrap; justify-content: flex-end; }
/* Единый отчёт разведки PDF: карточка файла, раскрываемые вычисленные
   поля, просмотрщик, ручные якоря и блок дальнейшей обработки. */
.pdf-analysis-page .admin-content { max-width: 76rem; }
.matching-page-header { margin-bottom: var(--ds-sp-16); }
.matching-breadcrumb { display: flex; align-items: center; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.matching-breadcrumb a { color: inherit; }
.matching-breadcrumb > span:last-child { color: var(--ds-text); }
.matching-title-row { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--ds-sp-16); }
.matching-title-row h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.matching-title-row p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); overflow-wrap: anywhere; }
.matching-readiness {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  margin-bottom: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface);
}
.matching-readiness > div { min-width: 0; padding: var(--ds-sp-12) var(--ds-sp-16); }
.matching-readiness > div + div { border-left: 1px solid var(--ds-line); }
.matching-readiness span, .matching-readiness strong { display: block; }
.matching-readiness span { color: var(--ds-muted); font-size: var(--ds-fs-11); }
.matching-readiness strong { margin-top: var(--ds-sp-4); color: var(--ds-text); font-size: var(--ds-fs-13); overflow-wrap: anywhere; }
.matching-readiness strong.ok { color: var(--ds-ok); }
.matching-readiness strong.warn { color: var(--ds-warn); }
.matching-readiness strong.danger { color: var(--ds-danger); }
.matching-workspace {
  display: grid; grid-template-columns: minmax(34rem, 1.18fr) minmax(25rem, .82fr);
  gap: var(--ds-sp-16); align-items: start;
}
.matching-workspace .pdf-preview-card,
.matching-workspace .pdf-report-card,
.matching-workspace .pdf-processing-card { margin-bottom: var(--ds-sp-16); }
.pdf-page-heading { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--ds-sp-12); margin-bottom: var(--ds-sp-12); }
.pdf-page-back { width: 2rem; height: 2rem; display: grid; place-items: center; border: 1px solid transparent; border-radius: var(--ds-rad-6); color: var(--ds-text); font-size: var(--ds-fs-20); text-decoration: none; }
.pdf-page-back:hover { border-color: var(--ds-line); background: var(--ds-surface); }
.pdf-page-title h1 { margin: 0; font-size: var(--ds-fs-26); line-height: 1.15; }
.pdf-page-title p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); overflow-wrap: anywhere; }
.pdf-page-title p span { white-space: nowrap; }
.pdf-page-actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-8); }
.pdf-header-form, .pdf-more-panel form { display: contents; max-width: none; }
.pdf-page-actions button, .pdf-more-actions > summary { min-height: 2.35rem; display: inline-flex; align-items: center; justify-content: center; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); font-size: var(--ds-fs-12); font-weight: 650; white-space: nowrap; }
.pdf-page-actions button:hover, .pdf-more-actions > summary:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.pdf-page-actions .pdf-header-primary { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-on-accent); }
.pdf-page-actions .pdf-header-primary:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); color: var(--ds-on-accent); }
.pdf-more-actions { position: relative; }
.pdf-more-actions > summary { gap: var(--ds-sp-8); list-style: none; cursor: pointer; }
.pdf-more-actions > summary::-webkit-details-marker { display: none; }
.pdf-more-actions[open] > summary span { transform: rotate(180deg); }
.pdf-more-panel { position: absolute; top: calc(100% + .35rem); right: 0; z-index: 25; min-width: 13rem; padding: var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); box-shadow: 0 6px 18px var(--admin-shadow); }
.pdf-more-panel button { width: 100%; border-color: transparent; color: var(--ds-danger); background: transparent; font-weight: 500; }
.pdf-more-panel button:hover { border-color: var(--ds-line); background: var(--ds-danger-soft); color: var(--ds-danger); }
.pdf-view-state { display: flex; align-items: center; gap: var(--ds-sp-12); margin: -.15rem 0 var(--ds-sp-12) var(--ds-sp-48); font-size: var(--ds-fs-12); }
.pdf-view-state a { color: var(--admin-accent-strong); }
.pdf-report-card, .pdf-preview-card, .pdf-anchor-card, .pdf-processing-card {
  margin-bottom: var(--ds-sp-16); padding: var(--ds-sp-16) var(--ds-sp-16); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-10); background: var(--ds-surface);
}
.pdf-report-card h1, .pdf-preview-card h2, .pdf-anchor-card h2, .pdf-processing-card h2 { margin: 0; color: var(--ds-text); font-family: Georgia, "Times New Roman", serif; font-weight: 600; }
.source-badge { padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-pill); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 700; }
.pdf-file-meta { display: flex; align-items: end; justify-content: space-between; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-16); }
.pdf-file-meta-main { min-width: 0; }
.pdf-file-meta h1 { margin-top: var(--ds-sp-4); }
.pdf-file-meta p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); overflow-wrap: anywhere; }
.pdf-file-pages { flex: 0 0 auto; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-12); font-variant-numeric: tabular-nums; }
.pdf-analysis-list { border-top: 1px solid var(--ds-line); }
.pdf-analysis-row { border-bottom: 1px solid var(--ds-line); }
.pdf-analysis-row summary {
  min-height: 3rem; display: grid; grid-template-columns: minmax(10rem, 1fr) auto 1.2rem;
  align-items: center; gap: var(--ds-sp-12); padding: var(--ds-sp-8) 0; list-style: none; cursor: pointer; font-size: var(--ds-fs-14);
}
.pdf-analysis-row summary::-webkit-details-marker { display: none; }
.analysis-result { color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 650; text-align: right; }
.analysis-result.ok { color: var(--ds-ok); }
.analysis-result.warn { color: var(--ds-warn); }
.analysis-result.danger { color: var(--ds-danger); }
.analysis-result.muted { color: var(--ds-muted); }
.analysis-chevron { color: var(--admin-accent-strong); font-size: var(--ds-fs-20); font-weight: 800; transition: transform .15s ease; }
.pdf-analysis-row[open] .analysis-chevron { transform: rotate(180deg); }
.pdf-analysis-detail { width: 100%; padding: var(--ds-sp-4) 0 var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-13); line-height: 1.55; }
.placeholder-analysis { opacity: .72; }
.pdf-processing-card h2 { margin-bottom: var(--ds-sp-12); font-size: var(--ds-fs-20); }
.pdf-processing-heading { margin-bottom: var(--ds-sp-12); }
.pdf-processing-heading h2 { margin-bottom: var(--ds-sp-4); }
.pdf-processing-heading p { margin: 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-next-step { margin-bottom: var(--ds-sp-12); }
.pdf-create-work { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-text); border-radius: var(--ds-rad-10); background: var(--ds-text); color: var(--ds-on-accent); text-decoration: none; }
.pdf-create-work:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); color: var(--ds-on-accent); }
.pdf-create-work strong, .pdf-create-work small { display: block; }
.pdf-create-work strong { font-size: var(--ds-fs-14); }
.pdf-create-work small { margin-top: var(--ds-sp-4); color: inherit; opacity: .72; font-size: var(--ds-fs-12); }
.pdf-create-action { flex: 0 0 auto; font-size: var(--ds-fs-12); font-weight: 650; }
.pdf-page-preview { display: flex; flex-direction: column; align-items: stretch; gap: var(--ds-sp-12); }
.pdf-preview-thumbnails { display: flex; gap: var(--ds-sp-8); min-width: 0; overflow-x: auto; padding: var(--ds-sp-4) 0 var(--ds-sp-4); }
.pdf-preview-thumbnails button { position: relative; flex: 0 0 4.1rem; padding: var(--ds-sp-4); overflow: hidden; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-11); line-height: 1.25; }
.pdf-preview-thumbnails button[aria-current="true"] { border-color: var(--admin-accent-strong); box-shadow: inset 0 0 0 1px var(--admin-accent-strong); color: var(--admin-accent-strong); }
.pdf-preview-thumbnails img { display: block; width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border: 0; background: var(--ds-surface); }
.pdf-preview-thumbnails span { display: block; padding-top: var(--ds-sp-4); text-align: center; }
.pdf-preview-frame { position: relative; min-height: 18rem; display: grid; place-items: center; padding: var(--ds-sp-12); overflow: auto; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.pdf-preview-frame img { display: block; max-width: 100%; max-height: 68vh; border: 1px solid var(--ds-line); box-shadow: 0 7px 20px var(--admin-shadow); }
.pdf-preview-controls { display: grid; grid-template-columns: 1fr auto auto 1fr; align-items: center; gap: var(--ds-sp-12); }
.pdf-preview-controls button { min-height: 2.4rem; border-color: var(--ds-line); background: var(--ds-surface); color: var(--admin-accent-strong); }
.pdf-preview-controls label { flex-direction: row; align-items: center; white-space: nowrap; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-preview-controls input { width: 4.2rem; padding: var(--ds-sp-4); text-align: center; }
.pdf-preview-controls select { width: 5.2rem; padding: var(--ds-sp-4); }
.pdf-anchor-card { display: grid; grid-template-columns: minmax(14rem, .8fr) minmax(26rem, 1.5fr); gap: var(--ds-sp-16); align-items: start; }
.pdf-anchor-card h2 { font-size: var(--ds-fs-16); }
.pdf-anchor-card p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-anchor-form { max-width: none; gap: var(--ds-sp-8); }
.pdf-anchor-form fieldset { display: grid; grid-template-columns: 1fr auto 1fr; align-items: end; gap: var(--ds-sp-8); margin: 0; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); }
.pdf-anchor-form legend { padding: 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); }
.pdf-anchor-form label { font-size: var(--ds-fs-12); color: var(--ds-muted); }
.pdf-anchor-form input { width: 100%; }
.pdf-anchor-actions { display: flex; gap: var(--ds-sp-8); justify-content: flex-start; }
.processing-state { margin: 0 0 var(--ds-sp-12); color: var(--ds-muted); font-size: var(--ds-fs-13); }
.pdf-work-search { max-width: 46rem; }
.pdf-work-search label { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-work-results { margin-top: var(--ds-sp-12); border-top: 1px solid var(--ds-line); }
.pdf-work-result { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--ds-sp-12); padding: var(--ds-sp-12) 0; border-bottom: 1px solid var(--ds-line); }
.pdf-work-result strong, .pdf-work-result span { display: block; }
.pdf-work-result strong { color: var(--ds-text); font-size: var(--ds-fs-13); }
.pdf-work-result span { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.linked-edition-summary { display: grid; grid-template-columns: minmax(0, 1fr) minmax(14rem, .42fr); gap: var(--ds-sp-16); align-items: center; }
.linked-edition-summary h3 { margin: var(--ds-sp-8) 0 var(--ds-sp-4); color: var(--ds-text); font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); font-weight: 500; }
.linked-edition-summary p { margin: 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.linked-edition-action { justify-self: stretch; text-align: right; }
.linked-edition-action form { max-width: none; }
.linked-edition-action .primary-action, .linked-edition-action button { width: 100%; justify-content: center; }
.file-works-card .linked-edition-summary { padding: var(--ds-sp-12) 0; overflow-wrap: anywhere; }
.file-works-card .linked-edition-summary + .linked-edition-summary { border-top: 1px solid var(--ds-line); }
.file-works-card .tag { margin-top: var(--ds-sp-8); }
/* В рабочей области сопоставления карточка стоит в узкой колонке: рядом с
   кнопкой библиография сжималась до двух слов в строке — действие уходит
   под текст. На широком экране (pdf_analysis.html) раскладка прежняя. */
.matching-action-card .linked-edition-summary { grid-template-columns: minmax(0, 1fr); gap: var(--ds-sp-12); }
.matching-action-card .linked-edition-action { text-align: left; }
/* Книга, собранная из этого файла: та же раскладка «слева состояние,
   справа действие», что у связанного издания выше — на одном экране
   два таких блока, и разъезжаться им незачем. */
.source-work-summary { display: grid; grid-template-columns: minmax(0, 1fr) minmax(14rem, .42fr); gap: var(--ds-sp-16); align-items: center; }
.source-work-summary h3 { margin: var(--ds-sp-8) 0 var(--ds-sp-4); color: var(--ds-text); font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-16); font-weight: 500; }
.source-work-summary p { margin: 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.source-work-action { justify-self: stretch; text-align: right; }
.source-work-action .primary-action { width: 100%; justify-content: center; }
.pdf-match-block { border-top: 1px solid var(--ds-line); }
.pdf-match-block > summary { min-height: 3.5rem; display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); padding: var(--ds-sp-12) 0; list-style: none; cursor: pointer; }
.pdf-match-block > summary::-webkit-details-marker { display: none; }
.pdf-match-block > summary strong, .pdf-match-block > summary small { display: block; }
.pdf-match-block > summary strong { color: var(--ds-text); font-size: var(--ds-fs-14); }
.pdf-match-block > summary small { margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-match-chevron { color: var(--admin-accent-strong); font-size: var(--ds-fs-16); transition: transform .15s ease; }
.pdf-match-block[open] .pdf-match-chevron { transform: rotate(180deg); }
.pdf-match-body { padding: var(--ds-sp-4) 0 var(--ds-sp-8); }
.pdf-match-body > p { margin: 0 0 var(--ds-sp-12); font-size: var(--ds-fs-12); }
/* Книга из скана: одна карточка вместо двух (произведение + издание).
   Отличие должно читаться до чтения текста, поэтому — акцентная линия
   слева тем же токеном, что у остальных выделений, без новой палитры. */
.work-card.is-native { border-left: 3px solid var(--admin-accent); }
.work-card.is-native .meta { margin-top: var(--ds-sp-8); }
/* Экран сводки сопоставления (edition_match_review.html/.js): фильтр по
   вёдрам confidence переиспользует .key-link (те же переменные, что у
   .tag.ok/.warn/.danger — не новая палитра, просто применена к фильтру).

   Два разных правила окраски намеренно: у ФИЛЬТРА (Все/Зелёные/Жёлтые/
   Красные) цвет бакета появляется только у активного (.on) — остальные
   белые, чтобы не путать "выбранный фильтр" с "это цвет данных". У ЧАНКОВ
   в списке (.chunk-chip) — наоборот, цвет бакета виден ВСЕГДА (это и есть
   сама классификация, не состояние фильтра); выбранный чанк подсвечивается
   рамкой того же цвета, не сменой заливки. */
.match-filter-bar { display: flex; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-16); }
.match-filter-bar .key-link { flex: 1; justify-content: center; padding: var(--ds-sp-8) var(--ds-sp-12); font-size: var(--ds-fs-14); }
.match-filter-bar .key-link span { color: inherit; opacity: .75; font-variant-numeric: tabular-nums; }
/* Прыжок только между страницами активного бакета (edition_match_review.js:
   PAGE_SETS) — отдельно от обычного постраничного "Назад"/"Вперёд" в
   просмотрщике выше, который листает буквально по одному листу. */
.match-page-nav { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-16); }
.match-page-nav button { min-height: 2.2rem; border-color: var(--ds-line); background: var(--ds-surface); color: var(--admin-accent-strong); font-size: var(--ds-fs-13); }
.match-page-nav span { font-size: var(--ds-fs-12); }
.key-link.on.f-ok { border-color: var(--ds-ok); background: var(--ds-ok-soft); color: var(--ds-ok); }
.key-link.on.f-warn { border-color: var(--ds-warn); background: var(--ds-warn-soft); color: var(--ds-warn); }
.key-link.on.f-danger { border-color: var(--ds-danger); background: var(--ds-danger-soft); color: var(--ds-danger); }
/* Серый бакет — чанк найден, но лист вне печатной нумерации (до первого
   якоря). Не цвет тревоги: страниц у него не будет намеренно. */
.key-link.on.f-muted { border-color: var(--ds-muted); background: var(--ds-panel); color: var(--ds-muted); }
.match-review-list { display: flex; flex-wrap: wrap; gap: var(--ds-sp-4); margin-bottom: var(--ds-sp-16); }
.chunk-chip { font-variant-numeric: tabular-nums; cursor: pointer; }
.chunk-chip.f-ok { border-color: var(--ds-ok); background: var(--ds-ok-soft); color: var(--ds-ok); }
.chunk-chip.f-warn { border-color: var(--ds-warn); background: var(--ds-warn-soft); color: var(--ds-warn); }
.chunk-chip.f-danger { border-color: var(--ds-danger); background: var(--ds-danger-soft); color: var(--ds-danger); }
.chunk-chip.f-muted { border-color: var(--ds-muted); background: var(--ds-panel); color: var(--ds-muted); }
.chunk-chip.on { box-shadow: 0 0 0 2px currentColor; font-weight: 700; }
.match-review-detail { padding: var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.match-review-detail p { margin: 0 0 var(--ds-sp-8); }
.match-detail-header { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-12); margin-bottom: var(--ds-sp-4); }
.match-detail-header h3 { margin: 0; color: var(--ds-text); font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.match-detail-meta { color: var(--ds-muted); font-size: var(--ds-fs-13); }
.match-review-text { max-height: 24rem; overflow: auto; padding: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); white-space: pre-wrap; line-height: 1.5; }
/* Ручное сопоставление — плашка под блоком чанка, того же спокойного вида,
   что «Якоря»/«Диапазон» в шапке просмотрщика: одна строка «стр. N по M» +
   кнопка, а служебный лист PDF — мелкой строкой под ней. */
.match-manual-assign {
  margin-top: var(--ds-sp-12); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: .5rem; background: var(--ds-surface);
}
.manual-assign-title {
  display: block; margin-bottom: var(--ds-sp-8); color: var(--ds-muted);
  font-size: var(--ds-fs-11); text-transform: uppercase; letter-spacing: .05em;
}
.match-assign-form { flex-wrap: wrap; }
/* Общее правило label — колонка (style.css:89); здесь поля стоят в строку. */
.match-assign-form label { flex-direction: row; align-items: center; gap: var(--ds-sp-4); font-size: var(--ds-fs-13); }
.match-assign-form input { flex: 0 0 auto; width: 4.5rem; }
.match-assign-form .manual-assign-sheet {
  flex-basis: 100%; justify-content: flex-start; margin-top: var(--ds-sp-8);
  color: var(--ds-muted); font-size: var(--ds-fs-12);
}
.match-assign-form .manual-assign-sheet input { width: 4rem; padding: var(--ds-sp-4) var(--ds-sp-4); }
.match-assign-feedback { margin: var(--ds-sp-8) 0 0; font-size: var(--ds-fs-13); }
.match-next-problem { margin-top: var(--ds-sp-12); }
.pdf-layout-inspector { margin-top: var(--ds-sp-12); border-top: 1px solid var(--ds-line); padding-top: var(--ds-sp-12); }
.pdf-layout-inspector summary { cursor: pointer; }
.layout-inspector-controls { display: flex; gap: var(--ds-sp-12); flex-wrap: wrap; margin: var(--ds-sp-12) 0; }
.layout-inspector-controls label { flex-direction: row; align-items: center; gap: var(--ds-sp-4); font-size: var(--ds-fs-13); }
.layout-inspector-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(14rem, .75fr); gap: var(--ds-sp-12); }
.layout-inspector-title { margin: 0 0 var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-13); }
.layout-inspector-list { max-height: 13rem; overflow: auto; border: 1px solid var(--ds-line); background: var(--ds-panel); padding: var(--ds-sp-4); }
.layout-inspector-item { display: block; width: 100%; padding: var(--ds-sp-4) var(--ds-sp-8); color: var(--ds-text); background: transparent; border: 0; border-radius: var(--ds-rad-6); text-align: left; font: inherit; font-size: var(--ds-fs-12); }
.layout-inspector-item:hover, .layout-inspector-item.is-selected { color: var(--ds-text); background: var(--admin-accent-soft); }
.layout-inspector-details { min-height: 5rem; padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); background: var(--ds-surface); font-size: var(--ds-fs-12); }
.layout-inspector-details p { margin: var(--ds-sp-4) 0; }
.layout-inspector-text { white-space: pre-wrap; color: var(--ds-text); }
.layout-inspector-box { position: absolute; box-sizing: border-box; pointer-events: none; }
.layout-block { border: 1px solid var(--layout-block); background: color-mix(in srgb, var(--layout-block) 8%, transparent); }
.layout-raw_lines { border-top: 1px dashed var(--layout-line); }
.layout-spans { border: 1px dotted var(--layout-span); }
.layout-visual_lines { border: 2px solid var(--layout-visual); background: color-mix(in srgb, var(--layout-visual) 10%, transparent); }
.layout-inspector-box.is-selected { box-shadow: 0 0 0 2px var(--ds-text); z-index: 1; }
.pdf-preview-controls button:last-child { justify-self: end; }
.manual-markup-groups { display: flex; flex-wrap: wrap; gap: var(--ds-sp-12); align-items: stretch; }
.manual-markup-group { border: 1px solid var(--ds-line); border-radius: 8px; padding: var(--ds-sp-8) var(--ds-sp-8); background: var(--ds-surface); }
.manual-markup-group-title { display: block; font-size: var(--ds-fs-11); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--ds-muted); margin-bottom: var(--ds-sp-4); }
.manual-markup-actions { display: flex; flex-wrap: wrap; gap: var(--ds-sp-8); }
.manual-markup-actions button { background: var(--ds-surface); color: var(--admin-accent-strong); border-color: var(--ds-line); }
.manual-markup-actions button:hover, .manual-markup-actions button.is-active { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
.manual-markup-actions button:disabled { cursor: not-allowed; opacity: .55; }
.manual-heading-level { flex-direction: row; align-items: center; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: 3px; color: var(--ds-muted); }
.manual-heading-level select { border: 0; background: transparent; color: var(--admin-accent-strong); font-family: inherit; font-style: inherit; font-variant: inherit; font-stretch: inherit; line-height: inherit; }
.manual-layer { z-index: 2; cursor: crosshair; touch-action: none; pointer-events: auto; user-select: none; }
.manual-draft { box-sizing: border-box; border: 2px dashed var(--admin-accent-strong); background: color-mix(in srgb, var(--admin-accent) 10%, transparent); }
.manual-mark { position: absolute; box-sizing: border-box; }
/* Рамки, которые нарисовал человек, скруглены — автоматические (тело,
   заголовки, сноски от детектора) остаются прямоугольными, так их легко
   различить на листе. */
.manual-sample, .manual-forced { border-radius: 8px; }
.manual-line { left: 0; right: 0; border-top: 3px solid var(--admin-accent); }
.manual-line.footer_line { border-color: var(--ds-danger); }
.manual-line.page_number_line { border-color: var(--page-number); border-top-style: dotted; }
.manual-line.bibliography_start { border-color: var(--exclude); border-top-style: dashed; }
.manual-line.bibliography_start .manual-sample-label { background: var(--exclude); color: #fff; right: auto; left: 4px; top: -1.4rem; }
.manual-line.bibliography_end { border-color: var(--exclude); border-top-style: dashed; }
.manual-line.bibliography_end .manual-sample-label { background: var(--exclude); color: #fff; right: auto; left: 4px; top: .2rem; }
.manual-sample { border: 3px solid var(--admin-accent); background: color-mix(in srgb, var(--admin-accent) 14%, transparent); }
.manual-sample.footnote_sample { border-color: #2563eb; background: rgba(37, 99, 235, .12); }
.manual-sample.heading_sample { border-color: #d97706; background: rgba(245, 158, 11, .14); }
.manual-sample.exclude_region { border-color: var(--exclude); background: var(--exclude-soft); }
.manual-sample.insert_sample { border-color: var(--insert); background: var(--insert-soft); }
.manual-sample.page_number_sample { border-color: var(--page-number); background: rgba(161, 115, 74, .14); }
/* Чёрный, а не тёмно-коричневый: на жёлтом фоне уровень заголовка (h1/h2/H3)
   раньше было не разобрать. Подписи на тёмном фоне перекрывают цвет сами. */
.manual-sample-label { position: absolute; right: -2px; top: -1.4rem; padding: 0 var(--ds-sp-4); border-radius: .2rem; background: #f59e0b; color: #111; font: 700 var(--ds-fs-12) system-ui, sans-serif; line-height: 1.2rem; }
.auto-paragraph { position: absolute; left: 0; height: 0; border-top: 1px dotted #111; opacity: .72; }
.auto-paragraph::after { content: ''; position: absolute; right: -1px; top: -4px; border-top: 4px solid transparent; border-bottom: 4px solid transparent; border-left: 7px solid #111; }
.manual-style-pick { width: 12px; height: 12px; margin: -6px 0 0 -6px; border: 2px solid #293338; border-radius: 50%; background: #fffdf8; }
.manual-style-pick::after { content: ''; position: absolute; width: 7px; border-top: 2px solid currentColor; left: 8px; top: 8px; transform: rotate(45deg); transform-origin: left center; }
.manual-style-pick.body_style_pick { color: #16a34a; border-color: #16a34a; }
.manual-style-pick.footnote_style_pick { color: #2563eb; border-color: #2563eb; }
.manual-style-pick.heading_excluded_style_pick { color: var(--exclude); border-color: var(--exclude); }
.eyedropper-tip { position: absolute; z-index: 6; pointer-events: none; background: #111827; color: #fff; font-size: var(--ds-fs-11); padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-6); white-space: nowrap; transform: translate(10px, 10px); }
/* Шапка карточки превью: слева заголовок, справа плашка истории разметки. */
/* Зона источников (концевой список, примечания, комментарии). Не
   добавляет цвета, а гасит его: этот текст не тело и не сноски, он не
   попадёт ни в JSON-листы, ни в чанки, и показывать его наравне с
   размеченными зонами было бы обманом (Г79). */
.source-zone-veil { inset: 0; background: rgba(255, 255, 255, .72); border: 1px solid var(--ds-line); }
.source-zone-veil .manual-sample-label { top: .4rem; right: auto; left: .4rem; background: rgba(98, 114, 125, .92); color: #fff; }
.sample-outlier { display: inline-flex; align-items: center; gap: var(--ds-sp-4); margin-left: var(--ds-sp-8); padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid #d9a404; border-radius: 999px; background: rgba(234, 179, 8, .12); color: #8a6d00; font-size: var(--ds-fs-12); }
.sample-outlier a { color: inherit; }
/* Компактный состав у нижнего правого края: маркеры и значения. */
.composition-panel {
  position: absolute; right: .5rem; bottom: .5rem; z-index: 4;
  box-sizing: border-box; width: 6.5rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-10); background: var(--ds-surface); font-size: var(--ds-fs-12);
  box-shadow: 0 3px 10px var(--admin-shadow);
}
.composition-panel[hidden] { display: none; }
.composition-row { display: grid; grid-template-columns: .6rem 1fr; align-items: center; gap: 0 var(--ds-sp-8); line-height: 1.65; }
.composition-row b { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.composition-row i { grid-column: 2; text-align: right; font-style: normal; color: var(--ds-muted); font-size: var(--ds-fs-11); font-variant-numeric: tabular-nums; }
.composition-row i.is-up { color: #16a34a; }
.composition-row i.is-down { color: #d9534f; }
.composition-dot { width: .6rem; height: .6rem; border-radius: var(--ds-rad-6); }
.composition-dot.is-body { background: rgba(34, 197, 94, .55); border: 1px solid #16a34a; }
.composition-dot.is-heading { background: rgba(234, 179, 8, .55); border: 1px solid #d9a404; }
.composition-dot.is-footnote { background: rgba(37, 99, 235, .45); border: 1px solid #2563eb; }
.composition-dot.is-service { background: rgba(120, 130, 140, .35); border: 1px solid var(--ds-muted); }
.composition-row i:empty { display: none; }
.composition-dot.is-unknown { background: transparent; border: 1px dashed var(--ds-muted); border-radius: 50%; }
.manual-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ds-sp-8); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: .55rem; background: var(--ds-surface); }
.toolbar-divider { width: 1px; align-self: stretch; min-height: 1.8rem; background: var(--ds-line); }
/* Нижняя справочная карточка PDF: сохранённые правила сгруппированы по
   назначению. Рабочие инструменты остаются у листа, здесь только результат. */
.pdf-rules-card { border-color: var(--ds-line); }
.pdf-rules-heading { display: flex; align-items: start; justify-content: space-between; gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-12); }
.pdf-rules-heading h2 { margin: 0; font-family: Georgia, "Times New Roman", serif; font-size: var(--ds-fs-20); font-weight: 600; }
.pdf-rules-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-rule-layout { flex: 0 0 auto; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-panel); color: var(--admin-accent-strong); font-size: var(--ds-fs-11); font-weight: 650; }
.pdf-rule-list { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); overflow: hidden; }
.pdf-rule-group { border-bottom: 1px solid var(--ds-line); }
.pdf-rule-group:last-child { border-bottom: 0; }
.pdf-rule-group summary { min-height: 2.75rem; display: grid; grid-template-columns: minmax(10rem, .7fr) minmax(12rem, 1fr) 1rem; align-items: center; gap: var(--ds-sp-12); padding: var(--ds-sp-8) var(--ds-sp-12); list-style: none; cursor: pointer; font-size: var(--ds-fs-13); }
.pdf-rule-group summary::-webkit-details-marker { display: none; }
.pdf-rule-group summary:hover { background: var(--ds-panel); }
.pdf-rule-value { color: var(--ds-muted); font-size: var(--ds-fs-12); font-variant-numeric: tabular-nums; }
.pdf-rule-chevron { color: var(--admin-accent-strong); font-size: var(--ds-fs-16); font-weight: 800; text-align: center; transition: transform .15s ease; }
.pdf-rule-group[open] > summary .pdf-rule-chevron { transform: rotate(180deg); }
.pdf-rule-detail { padding: var(--ds-sp-12) var(--ds-sp-12) var(--ds-sp-12); border-top: 1px solid var(--ds-line); background: var(--ds-panel); color: var(--ds-muted); font-size: var(--ds-fs-12); }
.pdf-rule-detail p { margin: 0; }
.pdf-rule-detail dl { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: var(--ds-sp-12) var(--ds-sp-16); margin: 0; }
.pdf-rule-detail dl > div { min-width: 0; }
.pdf-rule-detail dt { margin-bottom: var(--ds-sp-4); }
.pdf-rule-detail dd { margin: 0; color: var(--ds-text); font-variant-numeric: tabular-nums; }
.pdf-heading-rules { display: grid; gap: var(--ds-sp-4); }
.pdf-heading-rules > div { display: grid; grid-template-columns: 2.5rem 1fr; gap: var(--ds-sp-12); }
.pdf-heading-rules > div strong { color: var(--ds-text); }
.pdf-rule-positionless { margin-top: var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); overflow: hidden; }
.pdf-rule-positionless .kv { margin-top: var(--ds-sp-8); }
.manual-delete-form { flex-direction: row; max-width: none; margin-left: var(--ds-sp-4); }
.manual-delete-form button { min-width: 1.35rem; padding: var(--ds-sp-4) var(--ds-sp-4); border-color: var(--ds-line); background: var(--ds-surface); color: var(--ds-danger); }
.manual-delete-form button:hover { border-color: var(--ds-danger); background: var(--ds-danger-soft); }
/* Сводка перед сборкой: раскрывается под своей кнопкой, а не модалкой по
   центру — просмотрщик с проблемным листом должен остаться виден рядом. */
.preflight-anchor { position: relative; display: inline-block; }
.preflight-panel {
  position: absolute; top: calc(100% + .4rem); right: 0; z-index: 30;
  width: min(34rem, 80vw); padding: var(--ds-sp-12) var(--ds-sp-16);
  background: var(--admin-accent-strong); color: var(--ds-surface);
  border-radius: var(--ds-rad-10); box-shadow: 0 10px 26px rgba(0, 0, 0, .28);
  font-size: var(--ds-fs-13); line-height: 1.45; text-align: left;
}
.preflight-panel p { margin: 0 0 var(--ds-sp-8); }
.preflight-panel p:last-child { margin-bottom: 0; }
.preflight-panel a { color: var(--ds-surface); text-decoration: underline; }
.preflight-panel a:hover { color: var(--ds-warn-soft); }
.preflight-verdict { font-weight: 700; font-size: var(--ds-fs-14); }
.preflight-verdict.is-lost { color: var(--danger-on-accent); }
.preflight-counted { opacity: .78; font-size: var(--ds-fs-12); }
.manual-toolbar button { min-height: 2.1rem; padding: var(--ds-sp-4) var(--ds-sp-12); background: var(--ds-surface); color: var(--admin-accent-strong); border: 1px solid var(--ds-line); border-radius: 6px; white-space: nowrap; }
.manual-toolbar button:hover:not(:disabled), .manual-toolbar button.is-active { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
.manual-toolbar button:disabled { opacity: .5; cursor: not-allowed; }
.manual-toolbar label { flex-direction: row; align-items: center; gap: var(--ds-sp-4); margin: 0; color: var(--ds-muted); font-size: var(--ds-fs-12); white-space: nowrap; }
.manual-mode-switch { display: inline-flex; padding: var(--ds-sp-4); border: 1px solid var(--ds-line); border-radius: .5rem; background: var(--ds-panel); }
.manual-mode-switch button { min-height: 1.8rem; border-color: transparent; background: transparent; }
.manual-page-number-anchor { display: inline-flex; }
.manual-toolbar input[type=number] { width: 3.5rem; padding: var(--ds-sp-4); text-align: center; }
.manual-document-options { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--ds-sp-8); }
.manual-layout-options { display: inline-flex; align-items: center; gap: var(--ds-sp-8); }
.manual-layout-options > span { color: var(--ds-muted); font-size: var(--ds-fs-12); }
.manual-layout-kind { cursor: pointer; }
.manual-composition-toggle { padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: .45rem; background: var(--ds-panel); }
.manual-save-bar { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-12); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: .55rem; background: var(--ds-surface); }
.manual-toolbar-actions { display: flex; align-items: center; gap: var(--ds-sp-8); margin-left: auto; }
.manual-toolbar-actions button { min-height: 2.1rem; padding: var(--ds-sp-4) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: 6px; background: var(--ds-surface); color: var(--ds-text); white-space: nowrap; }
.manual-toolbar-actions button:disabled { opacity: .5; cursor: not-allowed; }
.manual-toolbar-actions [data-manual-save] { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-on-accent); font-weight: 650; }
.manual-toolbar-actions [data-manual-save]:hover:not(:disabled) { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); color: var(--ds-on-accent); }
.manual-toolbar-actions [data-manual-rerun]:hover { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.manual-toolbar-warn { font-size: var(--ds-fs-12); color: var(--ds-warn); }
.manual-toolbar-status { margin: 0; font-size: var(--ds-fs-12); min-height: 1.1rem; }
.manual-toolbar-status:empty::before { content: "Изменения применятся после сохранения разметки"; color: var(--ds-muted); }
.preview-card-head { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-12); flex-wrap: wrap; margin-bottom: var(--ds-sp-8); }
/* Сам details — строка: подпись слева, поля справа. Раскрытие вниз
   меняло бы высоту шапки, и превью прыгало под ней. */
.range-quickform { display: flex; align-items: center; gap: var(--ds-sp-8); box-sizing: border-box; min-height: 2.65rem; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); padding: var(--ds-sp-4) var(--ds-sp-8); font-size: var(--ds-fs-12); }
.range-quickform summary { cursor: pointer; color: var(--ds-muted); list-style: none; white-space: nowrap; }
.range-quickform summary::-webkit-details-marker { display: none; }
/* flex-direction/max-width/margin перебивают глобальное правило `form`
   (колонка, 22rem, отступ сверху) — без них поля диапазона встают
   вертикальной лесенкой под подписью. */
.range-quickform form { display: flex; flex-direction: row; align-items: center; gap: var(--ds-sp-4); margin: 0; max-width: none; }
.range-quickform input[type=number] { width: 3.6rem; padding: var(--ds-sp-4); text-align: center; -moz-appearance: textfield; appearance: textfield; }
.range-quickform input[type=number]::-webkit-outer-spin-button, .range-quickform input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.range-quickform button { min-height: 1.9rem; padding: var(--ds-sp-4) var(--ds-sp-8); background: var(--ds-surface); color: var(--admin-accent-strong); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.range-quickform button:hover { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
/* Вторая строка «Диапазона» — исключённые листы; отделена чертой. */
.range-quickform .range-exclude-form { padding-left: var(--ds-sp-8); border-left: 1px solid var(--ds-line); }
.range-quickform .range-exclude-form span:first-child { color: var(--ds-muted); }
/* Вуаль над листом из исключённого диапазона. */
.pdf-excluded-veil { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--ds-panel) 72%, transparent); line-height: 1.3; }
.pdf-excluded-veil[hidden] { display: none; }
.pdf-excluded-veil span { padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-muted); font-size: var(--ds-fs-14); }
/* Якоря — та же компактная строка, что диапазон; поставленные якоря —
   выпадающим списком под виджетом (position:absolute), чтобы шапка
   превью не росла ни при раскрытии, ни после добавления. */
.anchors-quickform { position: relative; }
.anchors-quickform .anchors-quickform-body {
  position: absolute; top: calc(100% + .4rem); right: 0; z-index: 30;
  display: flex; flex-direction: column; gap: var(--ds-sp-8);
  min-width: min(19rem, 78vw); padding: var(--ds-sp-8) var(--ds-sp-8);
  border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6);
  background: var(--ds-surface); box-shadow: 0 10px 24px var(--admin-shadow);
}
.anchors-quickform .anchor-list { display: flex; flex-direction: column; gap: var(--ds-sp-4); margin: 0; padding: 0; list-style: none; }
.anchors-quickform .anchor-list li { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-8); }
.anchors-quickform .anchor-list form { display: inline-flex; margin: 0; max-width: none; }
.anchors-quickform .anchor-list button { min-height: 1.5rem; padding: 0 var(--ds-sp-8); line-height: 1; }
.markup-history { display: flex; align-items: center; gap: var(--ds-sp-8); padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-panel); }
/* Текст последнего действия не должен растягивать шапку на длинном названии. */
.markup-history-text { max-width: 26rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--ds-fs-12); color: var(--ds-muted); }
.markup-history-text.is-undone { color: var(--admin-accent-strong); font-weight: 600; }
.markup-history button { min-width: 2rem; padding: var(--ds-sp-4) var(--ds-sp-8); line-height: 1.2; background: var(--ds-surface); color: var(--admin-accent-strong); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); }
.markup-history button:hover:not(:disabled) { background: var(--admin-accent-soft); border-color: var(--admin-accent); }
.markup-history button:disabled { opacity: .4; cursor: not-allowed; }
/* Попапы разметки: всплывают у самого жеста, поэтому это плавающий слой —
   единственное место, где по DESIGN.md уместна тень. Позиция fixed, а не
   absolute: рамка листа прокручивается (overflow: auto ради масштаба) и
   обрезала бы меню у края листа. */
/* Компактные меню «Тёплого камня». Цвета областей PDF остаются прежними. */
.mark-popup {
  --mark-surface: #ffffff; --mark-ink: #30322e; --mark-muted: #65675f;
  --mark-line: #d5d3cb; --mark-hover: #f1f0eb; --mark-active: #e6e9e1;
  display: none; position: fixed; z-index: 60; pointer-events: auto;
  box-sizing: border-box; width: 350px; max-width: calc(100vw - 16px);
  max-height: calc(100vh - 16px); overflow: auto; padding: var(--ds-sp-8);
  background: var(--mark-surface); color: var(--mark-ink);
  border: 1px solid var(--mark-line); border-radius: var(--ds-rad-10);
  box-shadow: 0 8px 24px rgba(48, 50, 46, .18); white-space: normal;
  font-size: var(--ds-fs-13); line-height: 1.4;
}
.mark-popup[data-point-popup] { width: 290px; }
.mark-popup-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--ds-sp-8); }
.mark-popup-row { display: flex; gap: var(--ds-sp-4); }
.mark-popup-row + .mark-popup-row { margin-top: var(--ds-sp-4); }
.mark-popup-types { display: grid; grid-template-columns: 1fr 1fr; }
.mark-popup-points { display: grid; grid-template-columns: 1fr; }
.mark-popup button { min-height: 32px; padding: var(--ds-sp-4) var(--ds-sp-8); line-height: 1.3; font-size: var(--ds-fs-13); background: var(--mark-surface); color: var(--mark-ink); border: 1px solid var(--mark-line); border-radius: var(--ds-rad-6); }
.mark-popup button:hover { border-color: var(--mark-muted); background: var(--mark-hover); }
.mark-popup button:focus-visible { outline: 2px solid var(--mark-muted); outline-offset: 2px; }
.mark-popup-types button, .mark-popup-points button { text-align: left; }
.mark-popup .mark-body::before, .mark-popup .mark-footnote::before, .mark-popup .mark-insert::before, .mark-popup .mark-page-number::before, .mark-popup .mark-exclude::before { content: ""; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--mark-muted); margin-right: var(--ds-sp-4); vertical-align: middle; }
.mark-popup .mark-body::before { background: var(--ds-ok); }
.mark-popup .mark-footnote::before { background: var(--admin-accent); }
.mark-popup .mark-insert::before { background: var(--insert); }
.mark-popup .mark-author::before { content: ""; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--author-mark); margin-right: var(--ds-sp-4); vertical-align: middle; }
.mark-popup .mark-page-number::before { background: var(--page-number); }
.mark-popup .mark-exclude::before { background: var(--exclude); }
.mark-popup-levels button { flex: 1; padding-inline: var(--ds-sp-4); font-weight: 600; }
.mark-popup .mark-heading.is-last { outline: 2px solid var(--mark-muted); outline-offset: -2px; }
.mark-popup .mark-scope { width: 100%; color: var(--mark-muted); }
.mark-popup .mark-scope.is-active { background: var(--mark-active); border-color: var(--mark-muted); color: var(--mark-ink); font-weight: 600; }
.mark-popup .mark-cancel { margin-left: auto; min-width: 32px; padding: 0; border-color: transparent; color: var(--mark-muted); font-size: var(--ds-fs-20); }
/* На экране разбора лист занимает больше высоты, чем в отчёте разведки:
   по нему работают рамкой, и чем крупнее лист, тем точнее образец. */
.pdf-analysis-page .pdf-preview-frame img { max-height: 82vh; }
/* Ключи доступа к MCP-серверу на /users (web/templates/users.html).
   Вложенная таблица внутри <details> — тот же приём, что у .stats-details:
   строка пользователя остаётся компактной, ключи раскрываются по клику. */
/* Ключи раскрываются отдельной строкой на всю ширину таблицы: внутри
   узкой колонки форма выдачи складывалась в столбик и читалась плохо. */
.token-row > td { padding-top: 0; padding: 0 var(--ds-sp-8) var(--ds-sp-12); background: var(--ds-panel); }
.token-details summary { cursor: pointer; color: var(--ds-muted); font-size: var(--ds-fs-14); color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 650; }
.token-list { margin: var(--ds-sp-8) 0; font-size: var(--ds-fs-14); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); overflow: hidden; }
.token-list td, .token-list th { padding: var(--ds-sp-4) var(--ds-sp-8); padding: var(--ds-sp-8) var(--ds-sp-8); }
.token-list tr.is-revoked { color: var(--ds-muted); }
/* Форма выдачи и «Отозвать все» — одна горизонтальная строка под списком
   ключей: подпись над полем, кнопки в конце. */
.token-actions { display: flex; gap: var(--ds-sp-8); align-items: flex-end; flex-wrap: wrap; margin-top: var(--ds-sp-8); }
/* flex-direction и max-width — против общего правила form (строка выше):
   по умолчанию форма в проекте вертикальная и узкая, здесь нужна строка. */
.token-issue { display: flex; flex-direction: row; max-width: none; gap: var(--ds-sp-8); align-items: flex-end; flex-wrap: wrap; }
.token-issue label { font-size: var(--ds-fs-14); color: var(--ds-muted); }
.token-issue input[type="number"] { width: 5rem; }
.token-issue input[type="text"] { min-width: 12rem; }
/* Единственное место, где секрет виден человеку: выделяем его так, чтобы
   не пропустить и удобно выделить мышью. */
.issued-token-value { display: block; margin: var(--ds-sp-8) 0; padding: var(--ds-sp-8) var(--ds-sp-12); background: var(--ds-panel); border-radius: var(--ds-rad-6); word-break: break-all; user-select: all; }
/* /users — реестр учётных записей суперпользователя. Ключи остаются
   раскрываемой строкой таблицы: так секретные действия не захламляют
   обычный обзор и сохраняют нативный fallback без JavaScript. */
.users-heading { margin-bottom: var(--ds-sp-16); }
.users-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.users-heading h1 span { margin-left: var(--ds-sp-4); color: var(--ds-muted); font: 500 var(--ds-fs-14)/1 system-ui, sans-serif; }
.users-heading p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.users-issued-token { margin: 0 0 var(--ds-sp-16); padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--admin-accent); border-radius: var(--ds-rad-10); background: var(--admin-accent-soft); }
.users-issued-token p { margin: 0; font-size: var(--ds-fs-13); }
.users-issued-token .hint { margin-top: var(--ds-sp-8); color: var(--ds-muted); }
.users-toolbar { display: grid; grid-template-columns: minmax(14rem, 1fr) auto auto; align-items: end; max-width: none; margin: 0; border: 1px solid var(--ds-line); background: var(--ds-surface); grid-template-columns: minmax(14rem, 1fr) minmax(9rem, .4fr) auto auto auto; }
.users-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.users-toolbar input[type="search"] { width: 100%; height: 2.3rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); }
.users-toolbar .inline-check { align-self: center; min-height: 2.3rem; font-size: var(--ds-fs-12); font-weight: 500; white-space: nowrap; }
.users-toolbar button { height: 2.3rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.users-table-wrap { overflow-x: auto; border: 1px solid var(--ds-line); border-top: 0; border-radius: 0 0 var(--ds-rad-10) var(--ds-rad-10); background: var(--ds-surface); }
.users-table { min-width: 0; margin: 0; table-layout: auto; font-size: var(--ds-fs-12); }
.users-table th { position: sticky; top: 0; z-index: 2; padding: var(--ds-sp-8) var(--ds-sp-8); background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line); font-size: var(--ds-fs-11); letter-spacing: .025em; }
.users-table td { padding: var(--ds-sp-8) var(--ds-sp-8); vertical-align: middle; }
.users-table > tbody > tr:not(.token-row):nth-child(4n + 1) td { background: var(--ds-panel); }
.users-table > tbody > tr:not(.token-row):hover td { background: var(--admin-accent-soft); }
.users-table th:nth-child(1) { width: 1%; }
.users-table th:nth-child(2) { width: 1%; white-space: nowrap; }
.users-table th:nth-child(3) { width: auto; }
.users-table th:nth-child(4) { width: 1%; white-space: nowrap; }
.users-table th:nth-child(5) { width: 12%; }
.users-table th:nth-child(6) { width: 12%; }
.token-details { padding-top: var(--ds-sp-8); }
.token-list th { position: static; }
.token-primary-action { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); }
.token-secondary-action { border-color: var(--ds-line); background: var(--ds-surface); color: var(--admin-accent-strong); }
.token-danger-action { border-color: #d9b8b8; background: var(--ds-surface); color: var(--ds-danger); }
.token-danger-action:hover { background: var(--ds-danger-soft); }
.users-hint { margin: var(--ds-sp-12) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
/* /stats — две реальные независимые сводки; сумма верхней таблицы не
   смешивается с расходом читателей, потому что это разные основания данных. */
.stats-heading { margin-bottom: var(--ds-sp-16); }
.stats-heading h1 { margin: 0; font: 600 var(--ds-fs-26)/1.1 Georgia, "Times New Roman", serif; }
.stats-heading p, .stats-section > header p { margin: var(--ds-sp-4) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-13); }
.stats-section { border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); overflow: hidden; }
.stats-section + .stats-section { margin-top: var(--ds-sp-16); }
.stats-section > header { padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.stats-section h2 { margin: 0; font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.stats-toolbar { display: grid; grid-template-columns: minmax(12rem, 1fr) minmax(10rem, .7fr) auto auto; align-items: end; gap: var(--ds-sp-8); max-width: none; margin: 0; padding: var(--ds-sp-12) var(--ds-sp-16); border-bottom: 1px solid var(--ds-line); }
.stats-toolbar label { gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.stats-toolbar input, .stats-toolbar select { width: 100%; height: 2.25rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.stats-toolbar button { height: 2.25rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.stats-table-wrap { overflow-x: auto; }
.stats-table { min-width: 45rem; margin: 0; table-layout: fixed; font-size: var(--ds-fs-12); }
.stats-table th { padding: var(--ds-sp-8) var(--ds-sp-12); background: var(--ds-side); color: var(--ds-muted); border-bottom-color: var(--ds-line); font-size: var(--ds-fs-11); letter-spacing: .025em; }
.stats-table td { padding: var(--ds-sp-8) var(--ds-sp-12); vertical-align: top; }
.stats-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.stats-table tbody tr:hover td { background: var(--admin-accent-soft); }
.user-stats-table th:nth-child(1) { width: 16%; }
.user-stats-table th:nth-child(2), .user-stats-table th:nth-child(3) { width: 11%; }
.user-stats-table th:nth-child(4) { width: 21%; }
.user-stats-table th:nth-child(5) { width: 14%; }
.user-stats-table th:nth-child(6) { width: 27%; }
/* Страница «Разметка»: вкладки и таблицы в стиле справочников и реестров. */
.markup-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--ds-sp-16); }
.markup-notice {
  margin: 0 0 var(--ds-sp-12); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-line);
  border-radius: var(--ds-rad-6); background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: var(--ds-fs-13);
}
.markup-toolbar { display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--ds-sp-8); align-items: center; margin: 0 0 var(--ds-sp-12); }
.markup-table-wrap { overflow-x: auto; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.markup-table { min-width: 44rem; font-size: var(--ds-fs-12); }
.markup-table th {
  position: sticky; top: 0; padding: var(--ds-sp-8) var(--ds-sp-12); background: var(--ds-side);
  color: var(--ds-muted); border-bottom-color: var(--ds-line); font-size: var(--ds-fs-11); letter-spacing: .025em;
}
.markup-table td { padding: var(--ds-sp-8) var(--ds-sp-12); line-height: 1.35; vertical-align: top; }
.markup-table tbody tr:nth-child(even) td { background: var(--ds-panel); }
.markup-table small { display: block; color: var(--ds-muted); margin-top: var(--ds-sp-4); }
.markup-number { text-align: right; font-variant-numeric: tabular-nums; }
.markup-actions { white-space: nowrap; }
.markup-actions form { display: inline; }
.markup-suggest { color: var(--ds-ok); font-weight: 600; }
.markup-error { font-size: var(--ds-fs-12); color: var(--ds-danger); padding: var(--ds-sp-4) 0; }
.markup-settings { margin: 0 0 var(--ds-sp-16); }
.markup-settings-form { display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--ds-sp-16); align-items: center; }
.markup-toolbar input[type="search"], .markup-toolbar select, .markup-toolbar button { width: auto; margin: 0; flex: 0 1 auto; }
.markup-toolbar input[type="search"] { min-width: 14rem; flex: 1 1 9rem; min-width: 0; max-width: 16rem; }
.markup-toolbar select { flex: 0 1 11rem; min-width: 0; max-width: 14rem; }
.markup-toolbar .muted { font-size: var(--ds-fs-12); }
.markup-actions form + form, .markup-actions form + a { margin-left: var(--ds-sp-4); }
.markup-settings-form label { display: flex; align-items: center; gap: var(--ds-sp-4); margin: 0; }
.markup-settings-form input[type="checkbox"], .markup-settings-form select, .markup-settings-form button { width: auto; margin: 0; }
/* Страница «Расходы»: формы в строку и цвет итога на токенах. */
.costs-form { display: grid; grid-template-columns: 1fr 1fr; align-items: end; gap: var(--ds-sp-8); padding: var(--ds-sp-12) 0 0; }
.costs-form label { display: grid; gap: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.costs-form input { width: 100%; height: 2.25rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.costs-form .costs-form-wide { grid-column: 1 / -1; }
.costs-form button { grid-column: 1 / -1; justify-self: end; height: 2.25rem; padding: 0 var(--ds-sp-16); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.costs-heading { display: flex; justify-content: space-between; align-items: flex-end; gap: var(--ds-sp-16); flex-wrap: wrap; }
.costs-period { display: flex; flex-direction: row; flex-wrap: wrap; align-items: flex-end; gap: var(--ds-sp-8); margin: 0; max-width: none; }
.costs-period label { display: grid; gap: var(--ds-sp-4); width: auto; color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.costs-period input, .costs-period select { width: auto; min-width: 8rem; height: 2.25rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.costs-period button { height: 2.25rem; padding: 0 var(--ds-sp-16); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.costs-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--ds-sp-12); margin: 0 0 var(--ds-sp-16); grid-template-columns: repeat(5, 1fr); }
.costs-kpi { display: grid; gap: var(--ds-sp-4); padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-surface); }
.costs-kpi-label { color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; letter-spacing: .025em; }
.costs-kpi strong { font: 600 var(--ds-fs-26)/1.15 Georgia, "Times New Roman", serif; font-variant-numeric: tabular-nums; }
.costs-kpi small { color: var(--ds-muted); font-size: var(--ds-fs-12); min-height: 1.1em; }
.costs-axis { padding: var(--ds-sp-12) var(--ds-sp-16); }
.costs-axis + .costs-axis { border-left: 1px solid var(--ds-line); }
.costs-axis h3, .costs-provider h3 { margin: 0 0 var(--ds-sp-8); font-size: var(--ds-fs-14); }
.costs-axis h3 small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 500; }
.costs-axis dl, .costs-provider dl { display: grid; grid-template-columns: 1fr auto; gap: var(--ds-sp-4) var(--ds-sp-12); margin: 0; font-size: var(--ds-fs-12); }
.costs-axis dt, .costs-provider dt { color: var(--ds-muted); }
.costs-axis dd, .costs-provider dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.costs-providers { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: var(--ds-sp-12); padding: var(--ds-sp-12) var(--ds-sp-16); }
.costs-provider { padding: var(--ds-sp-12) var(--ds-sp-16); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10); background: var(--ds-panel); }
.costs-provider > header { display: flex; justify-content: space-between; align-items: baseline; gap: var(--ds-sp-8); margin-bottom: var(--ds-sp-4); }
.costs-provider > header h3 { margin: 0; }
.costs-provider-date { color: var(--ds-muted); font-size: var(--ds-fs-11); }
.costs-provider-balance { margin: 0 0 var(--ds-sp-8); font: 600 var(--ds-fs-20)/1.1 Georgia, "Times New Roman", serif; font-variant-numeric: tabular-nums; }
.costs-provider-balance small { display: block; margin-top: var(--ds-sp-4); color: var(--ds-muted); font: 500 var(--ds-fs-11)/1.2 system-ui, sans-serif; }
.costs-record { margin-top: var(--ds-sp-12); padding-top: var(--ds-sp-8); border-top: 1px solid var(--ds-line); }
.costs-record summary, .costs-explain summary { color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 650; cursor: pointer; }
.costs-explain { padding: var(--ds-sp-8) var(--ds-sp-16); border-top: 1px solid var(--ds-line); }
.costs-explain p, .costs-explain ul { margin: var(--ds-sp-8) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.5; }
.costs-explain ul { padding-left: var(--ds-sp-16); }
.costs-explain .stats-table-wrap { margin-top: var(--ds-sp-8); }
.costs-note { margin: 0; padding: var(--ds-sp-8) var(--ds-sp-16); color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.45; }
.costs-num { text-align: right; font-variant-numeric: tabular-nums; }
.costs-pos { color: var(--ds-ok); font-weight: 650; }
.costs-neg { color: var(--ds-danger); font-weight: 650; }
.costs-warn { color: var(--ds-warn); font-weight: 650; }
.costs-baseline { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-16); flex-wrap: wrap; margin: 0 0 var(--ds-sp-16); padding: var(--ds-sp-8) var(--ds-sp-16); border: 1px solid var(--ds-warn); border-radius: var(--ds-rad-10); background: var(--ds-warn-soft); font-size: var(--ds-fs-13); }
.costs-baseline p { margin: 0; }
.costs-baseline form { margin: 0; max-width: none; }
.costs-baseline button { height: 2rem; padding: 0 var(--ds-sp-12); border-radius: var(--ds-rad-6); font-size: var(--ds-fs-12); font-weight: 700; }
.costs-grid { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); gap: var(--ds-sp-16); margin-bottom: var(--ds-sp-16); }
.costs-grid > .stats-section + .stats-section { margin-top: 0; }
.costs-chart { container-type: inline-size; padding: var(--ds-sp-8) var(--ds-sp-16) var(--ds-sp-12); }
.costs-chart svg { display: block; width: 100%; height: auto; overflow: visible; }
.costs-axis-text { fill: var(--ds-muted); font-size: calc(var(--ds-fs-12) * 720px / 100cqw); }
.costs-axis-text[text-anchor="middle"] { transform: translateY(calc(var(--ds-sp-8) * 720px / 100cqw)); }
.costs-axis-line { stroke: var(--ds-line); stroke-width: 1; }
.costs-grid-line { stroke: var(--ds-line); stroke-width: 1; stroke-dasharray: 2 3; opacity: .7; }
.costs-seg-user { fill: var(--chart-user); background: var(--chart-user); }
.costs-seg-rerank { fill: var(--chart-rerank); background: var(--chart-rerank); }
.costs-seg-markup { fill: var(--chart-markup); background: var(--chart-markup); }
.costs-seg-debug { fill: var(--chart-debug); background: var(--chart-debug); }
.costs-seg-failed { fill: var(--chart-failed); background: var(--chart-failed); }
.costs-revenue-line { fill: none; stroke: var(--ds-text); stroke-width: 2; stroke-linejoin: round; }
.costs-legend { display: flex; flex-wrap: wrap; gap: var(--ds-sp-4) var(--ds-sp-16); margin: var(--ds-sp-12) 0 0; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.costs-legend i, .costs-dot { display: inline-block; width: .6rem; height: .6rem; margin-right: var(--ds-sp-4); border-radius: var(--ds-rad-6); vertical-align: -1px; }
.costs-legend .costs-line-key { height: 2px; background: var(--ds-text); vertical-align: .2rem; }
.costs-stack { display: flex; height: .8rem; margin: var(--ds-sp-12) var(--ds-sp-16) var(--ds-sp-4); border-radius: var(--ds-rad-6); overflow: hidden; background: var(--ds-panel); }
.costs-stack span { display: block; height: 100%; }
.costs-compact { min-width: 0; table-layout: auto; }
.costs-compact td { vertical-align: middle; }
.costs-compact td:first-child { width: 100%; }
.costs-pill { display: inline-block; padding: 0 var(--ds-sp-8); border-radius: var(--ds-rad-pill); font-size: var(--ds-fs-11); font-weight: 700; line-height: 1.5; vertical-align: .05rem; }
.costs-pill-neg { background: var(--ds-danger-soft); color: var(--ds-danger); }
.costs-pricing { display: grid; grid-template-columns: repeat(4, 1fr); }
.costs-pricing > div { display: grid; gap: var(--ds-sp-4); padding: var(--ds-sp-12) var(--ds-sp-16); }
.costs-pricing > div + div { border-left: 1px solid var(--ds-line); }
.costs-pricing span { color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 650; }
.costs-pricing strong { font: 600 var(--ds-fs-20)/1.15 Georgia, "Times New Roman", serif; font-variant-numeric: tabular-nums; }
.costs-pricing small, .costs-sub { color: var(--ds-muted); font-size: var(--ds-fs-11); font-weight: 400; }
.costs-models, .costs-readers { table-layout: auto; min-width: 0; }
.costs-models td, .costs-readers td { vertical-align: middle; }
.costs-models td:first-child { min-width: 14rem; }
.costs-barcell { width: 18%; }
.costs-bar { display: block; height: .5rem; border-radius: var(--ds-rad-6); background: var(--chart-user); }
.costs-runway { height: .4rem; margin: 0 0 var(--ds-sp-8); border-radius: var(--ds-rad-6); background: var(--ds-line); overflow: hidden; }
.costs-runway span { display: block; height: 100%; background: var(--ds-ok); }
.costs-runway span.costs-runway-mid { background: var(--ds-warn); }
.costs-runway span.costs-runway-low { background: var(--ds-danger); }
.costs-stale { margin: var(--ds-sp-8) 0 0; color: var(--ds-warn); font-size: var(--ds-fs-12); }
.costs-reset-form { grid-template-columns: 1fr; max-width: 34rem; }
.costs-log { margin: var(--ds-sp-4) 0 0; padding-left: var(--ds-sp-16); color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.5; }
.costs-confirm { display: flex; align-items: center; gap: var(--ds-sp-8); font-size: var(--ds-fs-12); color: var(--ds-text); font-weight: 500; }
.costs-confirm input { width: auto; height: auto; }
.costs-error { margin: 0 0 var(--ds-sp-12); padding: var(--ds-sp-8) var(--ds-sp-12); border: 1px solid var(--ds-danger); border-radius: var(--ds-rad-6); color: var(--ds-danger); font-size: var(--ds-fs-13); }
/* /users: баланс читателя и форма пополнения. */
.user-balance { display: inline-block; min-width: 4.2rem; font-variant-numeric: tabular-nums; font-weight: 650; }
.user-balance.is-empty { color: var(--ds-danger); }
.user-topup { display: inline-flex; flex-direction: row; flex-wrap: nowrap; max-width: none; margin: 0; gap: var(--ds-sp-4); align-items: center; }
.user-topup button { margin: 0; width: auto; padding: var(--ds-sp-4) var(--ds-sp-8); }
.user-topup input { width: 5rem; margin: 0; height: 1.9rem; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.users-topups { margin-top: var(--ds-sp-24); }
.users-topups h2 { margin: 0 0 var(--ds-sp-8); font: 600 var(--ds-fs-16)/1.2 Georgia, "Times New Roman", serif; }
.users-toolbar select { width: 100%; height: 2.3rem; padding: var(--ds-sp-8) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--ds-text); }
.users-table td small { display: block; margin-top: var(--ds-sp-4); }
.users-table .num, .users-table th.num { white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; }
.users-table tr.is-inactive-user td { color: var(--ds-muted); }
.role-tag { display: inline-block; white-space: nowrap; padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-panel); font-size: var(--ds-fs-11); font-weight: 650; }
.role-tag.role-superuser { border-color: var(--admin-accent); background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.user-activity-main { font-variant-numeric: tabular-nums; }
.user-books summary { cursor: pointer; color: var(--admin-accent-strong); font-weight: 650; }
.user-books-list { max-height: 9rem; overflow: auto; margin-top: var(--ds-sp-4); color: var(--ds-muted); font-size: var(--ds-fs-12); line-height: 1.4; }
.user-topup-pop { display: inline-block; position: relative; margin-left: var(--ds-sp-4); vertical-align: middle; }
.user-topup-pop summary { display: inline-grid; place-items: center; width: 1.5rem; height: 1.5rem; border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); color: var(--admin-accent-strong); cursor: pointer; list-style: none; }
.user-topup-pop summary::-webkit-details-marker { display: none; }
.user-topup-pop[open] summary { background: var(--admin-accent-soft); }
.user-topup-pop .user-topup { position: absolute; right: 0; top: 1.8rem; z-index: 5; padding: var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-6); background: var(--ds-surface); box-shadow: 0 6px 18px rgba(31, 42, 51, .14); }
.user-access { white-space: normal; }
.user-access .token-toggle { position: absolute; opacity: 0; pointer-events: none; }
.key-chip { display: inline-flex; align-items: center; gap: var(--ds-sp-4); margin-right: var(--ds-sp-8); padding: var(--ds-sp-4) var(--ds-sp-8); border: 1px solid var(--ds-line); border-radius: var(--ds-rad-pill); background: var(--ds-surface); color: var(--ds-muted); font-size: var(--ds-fs-12); font-weight: 650; cursor: pointer; }
.key-chip.has-keys { border-color: var(--admin-accent); color: var(--admin-accent-strong); }
.token-toggle:focus-visible + .key-chip { outline: 2px solid var(--admin-accent); outline-offset: 2px; }
.token-toggle:checked + .key-chip { background: var(--admin-accent-soft); }
.users-table > tbody > tr.token-row { display: none; }
.users-table > tbody > tr:has(.token-toggle:checked) + tr.token-row { display: table-row; }
.token-title { margin: 0; color: var(--admin-accent-strong); font-size: var(--ds-fs-12); font-weight: 650; }
.users-journal { margin-top: var(--ds-sp-16); }
.users-journal > summary { color: var(--admin-accent-strong); font-size: var(--ds-fs-13); font-weight: 650; cursor: pointer; }
}

@media (max-width: 1376px) {
@layer screens {
.debug-chat-heading { flex-direction: column; }
.debug-chat-heading > div:first-child { flex: none; max-width: none; }
.debug-chat-controls { width: 100%; justify-content: flex-start; }
}
}

@media (max-width: 1216px) {
@layer screens {
.debug-chat-controls { flex-wrap: wrap; }
.chat-turn-grid { grid-template-columns: minmax(0, 1fr); }
.chat-turn-trace { padding: var(--ds-sp-12) 0 0; border-top: 1px solid var(--ds-line); border-left: 0; }
.search-test-page .search-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.search-test-page .search-stats > span:nth-child(2) { border-right: 0; }
.search-test-page .search-stats > span:nth-child(-n+2) { border-bottom: 1px solid var(--ds-line); }
.search-result-row { grid-template-columns: minmax(0, 1fr); }
.search-result-meta { border-right: 0; border-bottom: 1px solid var(--ds-line); }
}
}

@media (max-width: 1184px) {
@layer screens {
.matching-workspace { grid-template-columns: 1fr; }
}
}

@media (max-width: 1100px) {
@layer screens {
.system-resource-grid { grid-template-columns: 1fr 1fr; }
.system-details-grid { grid-template-columns: 1fr; }
}
}

@media (max-width: 1080px) {
@layer screens {
.headings-header { align-items: flex-start; flex-direction: column; }
.headings-primary-actions { justify-content: flex-start; }
.heading-preview-dialog { width: calc(100vw - 2rem); height: calc(100vh - 2rem); }
}
}

@media (max-width: 1050px) {
@layer screens {
.agent-metrics { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.agent-runs-toolbar { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.agent-run-copy-grid { grid-template-columns: minmax(0, 1fr); }
}
}

@media (max-width: 900px) {
@layer shell {
.admin-shell { display: block; }
.admin-sidebar { display: none; }
.admin-topbar { height: 3.25rem; grid-template-columns: auto minmax(0, 1fr) auto; padding: 0 var(--ds-sp-12); gap: var(--ds-sp-8); }
.admin-mobile-menu { display: block; position: relative; }
.admin-mobile-menu summary {
  width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center;
    border-radius: var(--ds-rad-6); list-style: none; cursor: pointer; color: var(--ds-text);
}
.admin-mobile-menu summary::-webkit-details-marker { display: none; }
.admin-mobile-menu[open] summary { background: var(--admin-accent-soft); }
.admin-mobile-menu-panel {
  position: absolute; top: 2.35rem; left: 0; z-index: 30; width: min(18rem, 82vw);
    border: 1px solid var(--ds-line); border-radius: var(--ds-rad-10);
    background: var(--ds-side); box-shadow: 0 14px 30px var(--admin-shadow);
}
.admin-mobile-menu-panel nav { display: flex; flex-direction: column; align-items: stretch; gap: var(--ds-sp-16); padding: var(--ds-sp-12); }
.admin-mobile-session {
  display: flex; align-items: center; justify-content: space-between; gap: var(--ds-sp-8);
    padding: var(--ds-sp-12) var(--ds-sp-12); border-top: 1px solid var(--ds-line); font-size: var(--ds-fs-12);
}
.admin-mobile-session a { color: var(--ds-text); text-decoration: none; }
.admin-mobile-session form { display: flex; max-width: none; }
.admin-mobile-session button { padding: var(--ds-sp-4) var(--ds-sp-8); background: transparent; color: var(--ds-muted); font-size: var(--ds-fs-12); }
.admin-content { padding: var(--ds-sp-16) var(--ds-sp-12) var(--ds-sp-32); }
}

@layer components {
.metadata-list > div { grid-template-columns: 1fr; gap: var(--ds-sp-4); }
.card-actions-right { margin-left: auto; }
}

@layer screens {
/* Узкий экран: колонки складываются, подписи шапки к ним уже не
     относятся — она просто прячется, поля читаются по смыслу. */
  .chunk-list-head { display: none; }
.chunk-meta { grid-template-columns: minmax(0, 1fr) minmax(0, auto); }
.chunk-meta .c-path { grid-column: 1 / -1; }
.chunk-meta > * + * { border-left: none; }
.settings-heading { display: block; }
.settings-heading .settings-last { margin-top: var(--ds-sp-8); text-align: left; }
.settings-row { grid-template-columns: 1fr; gap: var(--ds-sp-8); }
.settings-row input[type="number"], .settings-row input[type="time"], .settings-row input[type="text"] { width: 100%; }
.system-heading { align-items: stretch; flex-direction: column; }
.system-heading-actions { align-self: flex-start; }
.system-resource-grid { grid-template-columns: 1fr; }
.password-card { padding: var(--ds-sp-16); }
.password-actions { grid-template-columns: 1fr; }
.upload-failure-card { padding: var(--ds-sp-16); }
.upload-failure-actions { grid-template-columns: 1fr; }
.boundary-merge { align-items: flex-start; flex-direction: column; }
.works-heading { align-items: center; gap: var(--ds-sp-12); }
.works-heading h1 { font-size: var(--ds-fs-20); }
.works-summary { gap: var(--ds-sp-4) var(--ds-sp-8); }
.works-toolbar { grid-template-columns: minmax(0, 1fr) minmax(8.5rem, .65fr); }
.works-toolbar button { width: 100%; }
.works-reset { text-align: center; }
.works-table { min-width: 100%; font-size: var(--ds-fs-12); }
.works-table th { top: 0; }
.works-table th:nth-child(1) { width: 42%; }
.works-table th:nth-child(2) { width: 36%; }
.works-table th:nth-child(3) { width: 22%; }
.works-table th:nth-child(4), .works-table td:nth-child(4),
  .works-table th:nth-child(5), .works-table td:nth-child(5) { display: none; }
.works-stage-cell .stage { white-space: normal; }
.works-pagination { grid-template-columns: 1fr auto; }
.works-page-caption { grid-column: 1 / -1; justify-self: center; }
.authors-heading { align-items: center; gap: var(--ds-sp-12); }
.authors-heading h1 { font-size: var(--ds-fs-20); }
.authors-toolbar { grid-template-columns: minmax(0, 1fr) auto; }
.authors-toolbar button { width: 100%; }
.authors-reset { text-align: center; }
.authors-table { min-width: 100%; font-size: var(--ds-fs-12); }
.authors-table th { top: 0; }
.authors-table th:nth-child(2), .authors-table td:nth-child(2),
  .authors-table th:nth-child(4), .authors-table td:nth-child(4) { display: none; }
.authors-table th:nth-child(1) { width: 78%; }
.authors-table th:nth-child(3) { width: 22%; }
.authors-pagination { grid-template-columns: 1fr auto; }
.authors-page-caption { grid-column: 1 / -1; justify-self: center; }
.author-detail-fields { grid-template-columns: 1fr; }
.author-detail-bio { min-height: 14rem; }
.author-detail-delete { align-items: flex-start; flex-direction: column; }
.admin-overview-heading { align-items: flex-start; flex-direction: column; }
.admin-overview-grid, .admin-overview-grid-small { grid-template-columns: 1fr; }
.lookups-heading h1 { font-size: var(--ds-fs-20); }
.lookups-tabs { padding: var(--ds-sp-8) var(--ds-sp-8); gap: var(--ds-sp-4); }
.lookups-tab { min-height: 1.9rem; padding: var(--ds-sp-4) var(--ds-sp-12); font-size: var(--ds-fs-12); }
.lookups-table { min-width: 100%; font-size: var(--ds-fs-12); }
.lookups-table th:nth-child(2), .lookups-table td:nth-child(2) { display: none; }
.lookups-table th:nth-child(1) { width: 56%; }
.lookups-table th:nth-child(3) { width: 44%; }
.lookups-table .row-form { gap: var(--ds-sp-4); }
.lookups-table .row-form input { min-width: 0; }
.agent-metrics, .agent-run-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.agent-runs-toolbar { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.agent-runs-table { min-width: 62rem; }
.agent-runs-table th:nth-child(4), .agent-runs-table td:nth-child(4),
  .agent-runs-table th:nth-child(5), .agent-runs-table td:nth-child(5) { display: none; }
.agent-trace-call > summary { grid-template-columns: minmax(0, 1fr) auto; }
.agent-trace-call > summary span:nth-child(2) { display: none; }
.agent-trace-step { grid-template-columns: minmax(0, 1fr) auto; }
.agent-trace-step span:nth-child(2) { display: none; }
.files-heading h1, .work-new-heading h1 { font-size: var(--ds-fs-20); }
.file-upload-panel { grid-template-columns: 1fr; }
.file-upload-submit { width: 100%; }
.file-dropzone { padding: var(--ds-sp-16) var(--ds-sp-32); }
.files-toolbar { grid-template-columns: minmax(0, 1fr) minmax(8.5rem, .65fr); }
.files-toolbar button { width: 100%; }
.files-reset { text-align: center; }
.file-register { min-width: 39rem; }
.file-register th:nth-child(1) { width: 5%; }
.file-register th:nth-child(2) { width: 45%; }
.file-register th:nth-child(3) { width: 20%; }
.file-register th:nth-child(4) { width: 12%; }
.file-register th:nth-child(5) { width: 18%; }
.file-action-stack { flex-wrap: wrap; }
.work-new-section { padding: var(--ds-sp-16); }
.work-new-author-row { grid-template-columns: 1fr; align-items: stretch; }
.edition-kind-row, .edition-reference-preview, .edition-scan-summary { grid-template-columns: 1fr; }
.edition-scan-actions { justify-content: flex-start; }
.work-new-next { align-items: stretch; flex-direction: column; padding: var(--ds-sp-12) var(--ds-sp-16); }
.work-new-next > button { width: 100%; }
.work-edit-submit { align-items: stretch; flex-direction: column; padding: var(--ds-sp-12) var(--ds-sp-16); }
.work-edit-submit > div { justify-content: flex-end; }
.work-import-strip { align-items: stretch; flex-direction: column; }
.work-import-copy { white-space: normal; }
.matching-title-row { align-items: flex-start; flex-direction: column; }
.matching-readiness { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.matching-readiness > div:nth-child(3) { border-left: 0; border-top: 1px solid var(--ds-line); }
.matching-readiness > div:nth-child(4) { border-top: 1px solid var(--ds-line); }
.pdf-page-heading { grid-template-columns: auto minmax(0, 1fr); align-items: start; }
.pdf-page-actions { grid-column: 1 / -1; justify-content: flex-start; padding-left: var(--ds-sp-48); flex-wrap: wrap; }
.pdf-view-state { margin-left: var(--ds-sp-48); }
.pdf-analysis-row summary { grid-template-columns: minmax(0, 1fr) auto 1rem; gap: var(--ds-sp-8); }
.pdf-file-meta { align-items: start; }
.pdf-preview-controls { grid-template-columns: 1fr 1fr; }
.pdf-preview-controls label:not(.pdf-preview-zoom) { grid-column: 1; grid-row: 1; justify-self: end; }
.pdf-preview-controls .pdf-preview-zoom { grid-column: 2; grid-row: 1; justify-self: start; }
.pdf-anchor-card { grid-template-columns: 1fr; }
.pdf-create-work { align-items: flex-start; flex-direction: column; }
.linked-edition-summary, .pdf-work-result { grid-template-columns: 1fr; }
.linked-edition-action { text-align: left; }
.layout-inspector-grid { grid-template-columns: 1fr; }
.pdf-rule-group summary { grid-template-columns: minmax(8rem, .8fr) minmax(8rem, 1fr) 1rem; gap: var(--ds-sp-8); }
.pdf-rules-heading { align-items: stretch; flex-direction: column; }
.pdf-rule-layout { align-self: flex-start; }
.users-toolbar { grid-template-columns: minmax(0, 1fr) auto; grid-template-columns: 1fr 1fr; }
.users-toolbar .inline-check, .users-toolbar a { grid-column: 1 / -1; }
.users-toolbar a { justify-self: start; }
.users-table { min-width: 44rem; }
.stats-toolbar { grid-template-columns: 1fr 1fr; }
.stats-toolbar a { grid-column: 1 / -1; justify-self: start; }
.costs-kpis { grid-template-columns: 1fr 1fr; }
.costs-axis + .costs-axis { border-left: 0; border-top: 1px solid var(--ds-line); }
.costs-grid { grid-template-columns: 1fr; }
.costs-pricing { grid-template-columns: 1fr 1fr; }
.costs-pricing > div:nth-child(3) { border-left: 0; }
}
}

@media (max-width: 520px) {
@layer screens {
.utility-error-page > main { align-items: start; padding: var(--ds-sp-24) var(--ds-sp-12); }
.utility-error { padding: var(--ds-sp-24) var(--ds-sp-16); }
.utility-error-actions { grid-template-columns: 1fr; }
}
}

@media (max-width: 480px) {
@layer screens {
.auth-page > main { align-items: start; padding: var(--ds-sp-24) var(--ds-sp-12); }
.auth-card { padding: var(--ds-sp-24) var(--ds-sp-16) var(--ds-sp-16); }
}
}

@media (prefers-reduced-motion: reduce) {
@layer screens {
.analysis-chevron { transition: none; }
}
}

@layer screens {
/* Граница поля различима на белой поверхности; разделители таблиц спокойнее. */
.admin-page :is(input, select, textarea),
.admin-page input[type],
.admin-page .search-composer textarea,
.admin-page :is(input, select, textarea):focus { border-color: var(--ds-control-line); }
}

@layer components {

/* Единая геометрия компонентов; экран задаёт только размещение и смысловой цвет. */
.admin-page :is(.primary-action, .gold-action, .secondary-action, .danger-action, .link-action, .works-add, .authors-add, .token-primary-action, .token-secondary-action, .token-danger-action) {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ds-sp-8);
  min-height: 36px; padding: var(--ds-sp-8) var(--ds-sp-12); border-radius: var(--ds-rad-10);
  font-family: inherit; font-size: var(--ds-fs-14); font-weight: 600; text-decoration: none; line-height: 1.25;
}
.gold-action { border: 1px solid var(--admin-gold-strong); background: var(--ds-warn); color: var(--ds-on-accent); }
.gold-action:hover, [data-ui-state="hover"] > .gold-action { background: var(--admin-gold-strong); color: var(--ds-on-accent); }
.link-action { border: 1px solid transparent; background: transparent; color: var(--admin-accent-strong); }
.link-action:hover, [data-ui-state="hover"] > .link-action { background: var(--admin-accent-soft); text-decoration: underline; }
:is(input, select, textarea) { font-size: var(--ds-fs-16); font-weight: 400; }
:is(.tag, .stage, .run-status, .citation-status) {
  padding: var(--ds-sp-4) var(--ds-sp-8); border-radius: var(--ds-rad-pill);
  font-size: var(--ds-fs-12); line-height: 1.25; overflow-wrap: normal; word-break: normal;
}
:is(.works-toolbar, .authors-toolbar, .files-toolbar, .agent-runs-toolbar, .users-toolbar) {
  gap: var(--ds-sp-12); padding: var(--ds-sp-12) var(--ds-sp-16);
  border-radius: var(--ds-rad-10) var(--ds-rad-10) 0 0;
}
:is(.works-table, .authors-table, .costs-compact, .ui-table) :is(th, td) { padding: var(--ds-sp-8) var(--ds-sp-12); }
.ui-table-wrap { min-width: 0; max-width: 100%; overflow-x: auto; }
:is(.ui-disclosure, .users-journal) > summary { min-height: 32px; cursor: pointer; }
}
@layer screens {

/* Фильтры переносятся по доступному месту; таблица прокручивается внутри обёртки. */
.works-toolbar, .users-toolbar { display: flex; flex-direction: row; flex-wrap: wrap; min-width: 0; }
:is(.works-toolbar, .users-toolbar) > label { flex: 1 1 9rem; min-width: 0; }
.works-toolbar .works-query, .users-toolbar > label:first-child { flex-basis: 13rem; }
.users-toolbar .inline-check { flex: 0 1 auto; white-space: normal; }
:is(.works-toolbar, .users-toolbar) :is(input, select) { min-width: 0; max-width: 100%; }
.works-table-wrap, .users-table-wrap { min-width: 0; max-width: 100%; }
.users-table td:first-child { overflow-wrap: break-word; }
.users-table td:first-child > strong { display: block; width: max-content; max-width: 20ch; overflow-wrap: break-word; hyphens: none; }
.token-title { overflow-wrap: anywhere; }
.user-access { position: relative; }
}

@layer components {
.admin-page :is(.primary-action, .gold-action, .secondary-action, .danger-action, .link-action)[aria-disabled="true"] { cursor: not-allowed; opacity: .55; }
}

@layer screens {
/* Состояния общих полей должны побеждать оформление экрана, как и их базовая граница. */
.admin-page :is(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="file"], [type="range"], [type="button"], [type="submit"]), select, textarea):enabled:hover,
.admin-page [data-ui-state="hover"] > :is(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="file"], [type="range"], [type="button"], [type="submit"]), select, textarea):enabled { border-color:var(--ds-text); }
.admin-page :is(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="file"], [type="range"], [type="button"], [type="submit"]), select, textarea):disabled { background:var(--ds-panel); color:var(--ds-muted); cursor:not-allowed; }

/* Справочник размещает настоящие компоненты, не задавая им отдельную палитру. */
.ui-catalog-heading { margin-bottom: var(--ds-sp-24); }
.ui-catalog-heading h1 { font-family: Georgia,serif; font-size:var(--ds-fs-26); margin:0 0 var(--ds-sp-8); }
.ui-catalog-heading p { margin:0; }
.ui-catalog-section { display:grid; grid-template-columns:160px minmax(0,1fr); gap:var(--ds-sp-24); margin:0 0 var(--ds-sp-16); }
.ui-catalog-label h2 { margin:0 0 var(--ds-sp-4); font:600 var(--ds-fs-16)/1.3 system-ui; }
.ui-catalog-label code { font-size:var(--ds-fs-11); color:var(--ds-muted); white-space:nowrap; }
.ui-catalog-label p { margin:var(--ds-sp-8) 0 0; color:var(--ds-muted); font-size:var(--ds-fs-11); }
.ui-catalog-samples { min-width:0; }
.ui-catalog-button-grid { display:grid; grid-template-columns:72px repeat(3,max-content); gap:var(--ds-sp-8); align-items:center; justify-content:start; }
.ui-catalog-state-label { font-size:var(--ds-fs-11); color:var(--ds-muted); }
.ui-catalog-variant { font-size:var(--ds-fs-12); color:var(--ds-muted); }
.ui-catalog-flow { display:flex; gap:var(--ds-sp-8); align-items:center; flex-wrap:wrap; }
.ui-catalog-fields { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--ds-sp-8); margin-bottom:var(--ds-sp-16); }
.ui-catalog-fields label { display:flex; flex-direction:column; gap:var(--ds-sp-4); min-width:0; font-size:var(--ds-fs-12); }
.ui-catalog-fields input { width:100%; min-width:0; }
.ui-catalog-filter { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto; align-items:end; }
.ui-catalog-filter > label { margin:0; }
.ui-catalog-samples .files-tabs { margin:0; }
.ui-catalog-help-label { display:flex; gap:var(--ds-sp-8); align-items:center; }
.ui-catalog-help-label + p { margin:var(--ds-sp-8) 0 0; }
}
