/*
 * Алиасы токенов (126-я, находка живого прогона): 30 правил стола ссылались
 * на несуществующие `--pf-color-accent` и `--pf-color-border-accent` —
 * золотые ФОНЫ (точки, полоса хода распаковки) были прозрачными, а рамки
 * держались лишь на currentColor. Единая точка истины — tokens.css
 * (`--pf-color-surface-accent` темы); страж — apps/cloud/test/css-tokens.test.ts.
 */
:root {
  --pf-color-accent: var(--pf-color-surface-accent);
  --pf-color-border-accent: var(--pf-color-surface-accent);
  --pf-color-text: var(--pf-color-text-primary);
}

/* Оформление кабинета: язык «Тёплый графит» (референс —
 * docs/product/sketches/theme-warm-graphite-workbench.html и
 * canon-codex-warm-graphite-*.html; переработка по решению владельца
 * 2026-08-06). Плоские заливки, без градиентов и теней; колонки-панели
 * на холсте, полосы шапки и состояния ступенью выше, золотая подложка
 * выбора.
 *
 * Базовые компоненты (pf-btn, pf-card, pf-notice, типографика) приходят
 * из /portal.css; здесь — только то, чего порталу не требовалось.
 * Все значения — переменные `--pf-*` из /portal/tokens.css; произвольные
 * цветовые литералы запрещены стандартом UI.
 */

/* Страница-каркас: шапка сверху, стол занимает остальное. */

.wb-page {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.wb-boot {
  padding: var(--pf-space-xl);
}

/* Кнопки и карточки из app.css, которых нет в portal.css. */

.pf-btn--primary {
  background: var(--pf-color-surface-accent);
  border-color: var(--pf-color-surface-accent);
  color: var(--pf-color-text-inverse);
}

.pf-btn--primary:hover:not(:disabled) {
  background: var(--pf-color-surface-accent);
  filter: brightness(1.08);
}

.pf-stack {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-lg);
}

.pf-stack--sm {
  gap: var(--pf-space-sm);
}

.pf-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-xs);
  padding: 2px var(--pf-space-sm);
  border-radius: var(--pf-radius-pill);
  border: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-secondary);
  font-size: var(--pf-typography-caption-size);
  font-weight: var(--pf-typography-caption-weight);
  white-space: nowrap;
}

.pf-badge__dot {
  width: 8px;
  height: 8px;
  border-radius: var(--pf-radius-pill);
  background: currentColor;
  flex: none;
}

.pf-badge--ok {
  color: var(--pf-color-text-success);
  border-color: var(--pf-color-surface-success);
}

.pf-badge--danger {
  color: var(--pf-color-text-danger);
  border-color: var(--pf-color-border-danger);
}

/* Обновление программы (BETA-D-012): заметно, но не тревожно — это не сбой,
   а хорошая новость; красный цвет отказа здесь был бы ложной тревогой. */
.pf-badge--warn {
  color: var(--pf-color-text-warning);
  border-color: var(--pf-color-surface-warning);
}

/* Тумблер сна ПК (перенос v2 SleepToggle): кликабельная пилюля статус-бара.
   «Не спит» — зелёная (pf-badge--ok), «Сон» — приглушённая базовая. */
/* Версия моста у готовности (замечание владельца 2026-08-23): тихо, не пилюлей. */
.wb-status__version { color: var(--pf-color-text-muted); white-space: nowrap; }
button.wb-status__sleep {
  cursor: pointer;
  font: inherit;
  font-size: var(--pf-typography-caption-size);
  font-weight: var(--pf-typography-caption-weight);
}

button.wb-status__sleep:hover {
  background: var(--pf-color-surface-selected);
}

.pf-skeleton {
  display: block;
  height: 1em;
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-sunken);
  position: relative;
  overflow: hidden;
}

.pf-skeleton--title {
  height: 1.6em;
  max-width: 18ch;
}

.pf-skeleton--line {
  max-width: 44ch;
}

.pf-skeleton--short {
  max-width: 22ch;
}

.pf-skeleton::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--pf-overlay-highlight);
  transform: translateX(-100%);
  animation: pf-shimmer 1.4s infinite;
}

@keyframes pf-shimmer {
  to { transform: translateX(100%); }
}

.pf-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--pf-space-md);
  text-align: center;
  padding: var(--pf-space-3xl) var(--pf-space-xl);
  border: 1px dashed var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-lg);
  background: var(--pf-color-surface-raised);
}

.pf-empty__icon {
  width: 40px;
  height: 40px;
  color: var(--pf-color-text-muted);
}

.pf-list {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  overflow: hidden;
}

.pf-list__item {
  display: flex;
  align-items: center;
  gap: var(--pf-space-lg);
  padding: var(--pf-space-md) var(--pf-space-lg);
  background: var(--pf-color-surface-raised);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.pf-list__item:last-child {
  border-bottom: none;
}

.pf-list__main {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

.pf-list__title {
  font-weight: 600;
  overflow-wrap: anywhere;
}

.pf-list__actions {
  display: flex;
  gap: var(--pf-space-sm);
  flex: none;
}

.pf-brand {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  font-weight: 600;
}

.pf-header__spacer {
  flex: 1 1 auto;
}

.pf-page__head {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  margin-bottom: var(--pf-space-xl);
}

.pf-nav__icon {
  width: 18px;
  height: 18px;
  flex: none;
}

/* Шапка стола (X-01, structure.html зона 1). */

.wb-top {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border-bottom: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-bar);
  flex: none;
  flex-wrap: wrap;
}

.wb-top__spacer {
  flex: 1 1 auto;
}

/* Название открытого романа в шапке: сериф и цвет акцента — как заголовок
 * книги (референс); длинное имя усекается многоточием (полное — в title). */
.wb-top__novel {
  font-family: var(--pf-typography-heading2-family);
  font-size: var(--pf-typography-heading3-size);
  color: var(--pf-color-text-accent);
  padding-left: var(--pf-space-md);
  border-left: 1px solid var(--pf-color-border-medium);
  max-width: 28ch;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.wb-top .pf-btn {
  min-height: var(--pf-size-control-sm);
  padding: 0 var(--pf-space-md);
  border-radius: var(--pf-radius-sm);
}

/* Сегмент «Кратко | Развёрнуто» в шапке — пилюля с золотой подложкой
 * активного положения (референс, seg). */

.wb-seg {
  display: inline-flex;
  gap: 2px;
  padding: 2px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-canvas);
}

.wb-seg .pf-btn {
  border: none;
  background: transparent;
  color: var(--pf-color-text-secondary);
  border-radius: var(--pf-radius-pill);
  min-height: calc(var(--pf-size-control-sm) - 4px);
}

.wb-seg .pf-btn--primary {
  background: var(--pf-color-surface-selected);
  color: var(--pf-color-text-accent);
  font-weight: 600;
}

/* Тумблер вида кабинета «Кратко ↔ Развёрнуто» в шапке (замечание владельца
   2026-08-15): один переключатель вместо пары кнопок-сегментов. Подпись
   текущего положения светится, бегунок показывает сторону. */
.wb-viewtoggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: var(--pf-size-control-sm);
  padding: 0 10px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-canvas);
  color: var(--pf-color-text-secondary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  cursor: pointer;
}

.wb-viewtoggle:hover { background: var(--pf-color-surface-selected); }

.wb-viewtoggle__label { white-space: nowrap; }

.wb-viewtoggle__label--on {
  color: var(--pf-color-text-accent);
  font-weight: 600;
}

.wb-viewtoggle__track {
  position: relative;
  flex: none;
  width: 30px;
  height: 16px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-sunken);
  transition: border-color var(--pf-motion-fast) var(--pf-motion-easing-standard);
}

.wb-viewtoggle__knob {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--pf-color-text-secondary);
  transition:
    transform var(--pf-motion-fast) var(--pf-motion-easing-standard),
    background var(--pf-motion-fast) var(--pf-motion-easing-standard);
}

.wb-viewtoggle[aria-checked='true'] .wb-viewtoggle__track {
  border-color: var(--pf-color-border-focus);
}

.wb-viewtoggle[aria-checked='true'] .wb-viewtoggle__knob {
  transform: translateX(14px);
  background: var(--pf-color-surface-accent);
}

/* Вкладки «Замысел | Текст» в шапке колонки правки — та же пилюля. */
.wb-col__head .pf-btn--primary {
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-border-focus);
  color: var(--pf-color-text-accent);
  font-weight: 600;
}

/* Наведение НЕ меняет подложку тихого активного элемента: у него текст
 * золотой, и золотая hover-заливка primary делала его нечитаемым
 * (замечание владельца к BETA-D-020). Подложка выбора остаётся. */
.wb-seg .pf-btn--primary:hover:not(:disabled),
.wb-col__head .pf-btn--primary:hover:not(:disabled) {
  background: var(--pf-color-surface-selected);
  color: var(--pf-color-text-accent);
  filter: none;
}

/* Неактивному положению сегмента hover-заливка выбора тоже не положена:
 * золотая подложка обозначает выбор, а не наведение — кандидату довольно
 * ступени кнопки. */
.wb-seg .pf-btn:hover:not(:disabled) {
  background: var(--pf-color-surface-control);
  color: var(--pf-color-text-primary);
}

.wb-seg .pf-btn--primary:hover:not(:disabled) {
  background: var(--pf-color-surface-selected);
  color: var(--pf-color-text-accent);
}

/* «Всё сохранено» — состояние сохранности без места (§1). */

.pf-where {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  padding: var(--pf-space-xs) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  font-size: var(--pf-typography-body-small-size);
  color: var(--pf-color-text-secondary);
}

/* Центр стола: одна колонка содержимого. */

.wb-main {
  flex: 1 1 auto;
  min-width: 0;
  padding: var(--pf-space-xl);
  max-width: 880px;
  width: 100%;
  margin: 0 auto;
}

/* «Библиотека промптов»: две панели занимают всю ширину окна
   (замечание владельца 2026-08-17). */
.wb-main--wide {
  max-width: none;
}

/* Поля формы W-02. */

.wb-field {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

.wb-input {
  width: 100%;
  min-height: var(--pf-size-control-md);
  padding: 0 var(--pf-space-md);
  border: 1px solid var(--pf-color-border-strong);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
  color: var(--pf-color-text-primary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
}

.wb-count {
  font-variant-numeric: tabular-nums;
}

.pf-row--end {
  justify-content: flex-end;
  align-items: center;
}

/* Метка зрелости романа: цвет — усиление, рядом всегда слово (§11). */

.wb-mark {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-sm);
  color: var(--pf-color-text-muted);
}

.wb-mark__dot {
  width: 8px;
  height: 8px;
  flex: none;
  border-radius: 50%;
  background: currentColor;
}

.wb-mark--work { color: var(--pf-color-text-accent); }
.wb-mark--done { color: var(--pf-color-text-success); }
.wb-mark--busy { color: var(--pf-color-text-warning); }

/* --- Срез 4: накладное окно «Подключение ИИ» (форма W-09/W-10). --- */

.wb-overlay-backdrop {
  position: fixed;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--pf-space-xl);
  background: var(--pf-overlay-scrim);
  z-index: 20;
}

/* Накладное окно — плоская панель на затемнении, без тени (референс). */
.wb-overlay {
  width: 100%;
  max-width: 720px;
  max-height: 84vh;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-lg);
  background: var(--pf-color-surface-raised);
}

/* Широкая форма окна «Подключение ИИ» — замечание владельца к BETA-D-017:
   95% ширины экрана, стабильная высота, тело растягивается. */
.wb-overlay--wide {
  width: 95vw;
  max-width: 95vw;
  height: 92vh;
  max-height: calc(100vh - 2 * var(--pf-space-xl));
}

.wb-overlay--wide .wb-overlay__body {
  flex: 1 1 auto;
}

.wb-overlay__head {
  display: flex;
  align-items: center;
  gap: var(--pf-space-md);
  padding: var(--pf-space-lg) var(--pf-space-xl);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.wb-overlay__body {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-lg);
  padding: var(--pf-space-xl);
  overflow: auto;
}

.wb-ai-layout {
  display: flex;
  gap: var(--pf-space-xl);
  align-items: flex-start;
  min-height: 0;
}

.wb-ai-providers {
  flex: 0 0 280px;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

.wb-ai-group {
  margin-top: var(--pf-space-sm);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--pf-color-text-secondary);
}

.wb-ai-provider {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: transparent;
  color: var(--pf-color-text-primary);
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.wb-ai-provider--active {
  border-color: var(--pf-color-border-focus);
  background: var(--pf-color-surface-selected);
}

.wb-ai-provider__name {
  font-size: var(--pf-typography-body-small-size);
}

.wb-ai-detail {
  flex: 1 1 auto;
  min-width: 0;
}

/* Встроенный терминал (замечание владельца 5 к BETA-D-017): контейнер
   xterm фиксированной высоты; фон консоли одинаков в обеих темах. */
.wb-term {
  height: 46vh;
  padding: var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  /* Совпадает с theme.background xterm — без «рамки» другого цвета
     (графит «Тёплого графита», страница тёмной темы). */
  background: #101216;
  overflow: hidden;
}

.wb-term-host {
  width: 100%;
  height: 100%;
}

/* Помощник установки CLI (замечание владельца 4 к BETA-D-017). */
.wb-ai-helper {
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
}

.wb-ai-command {
  display: block;
  padding: var(--pf-space-sm) var(--pf-space-md);
  border-radius: var(--pf-radius-sm, 4px);
  background: color-mix(in srgb, var(--pf-color-surface-raised) 70%, transparent);
  border: 1px dashed var(--pf-color-border-subtle);
  font-family: var(--pf-typography-mono-family, ui-monospace, monospace);
  font-size: var(--pf-typography-body-small-size);
  user-select: all;
}

.wb-key-set {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-sm);
  color: var(--pf-color-text-success);
}

.wb-test-ok { color: var(--pf-color-text-success); }
.wb-test-fail { color: var(--pf-color-text-danger); }
/* Предупреждение лестницы установки: «найдена, но не отвечает», старый Bridge. */
.wb-test-warn { color: var(--pf-color-text-warning); }

.wb-model-list {
  margin: 0;
  padding-left: var(--pf-space-lg);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  font-size: var(--pf-typography-body-small-size);
}

.wb-model-list--catalog {
  list-style: none;
  padding-left: 0;
  max-height: 48vh;
  overflow: auto;
}

.wb-model-list__name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- BETA-D-017: вкладки окна ИИ и таблица библиотеки моделей. --- */

.wb-ai-tabs {
  display: flex;
  gap: var(--pf-space-sm);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.wb-ai-tab {
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: none;
  border-bottom: 2px solid transparent;
  background: transparent;
  color: var(--pf-color-text-secondary);
  font: inherit;
  cursor: pointer;
}

.wb-ai-tab--active {
  color: var(--pf-color-text-accent);
  border-bottom-color: var(--pf-color-border-focus);
  font-weight: 600;
}

.wb-lib-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--pf-typography-body-small-size);
}

.wb-lib-table th {
  text-align: left;
  font-weight: 600;
  color: var(--pf-color-text-secondary);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.wb-lib-table td {
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border-bottom: 1px solid var(--pf-color-border-subtle);
  vertical-align: middle;
}

.wb-lib-radio {
  text-align: center;
}

/* Заголовок группы поставщика в таблице библиотеки. */
.wb-lib-group {
  font-weight: 600;
  color: var(--pf-color-text-secondary);
  padding-top: var(--pf-space-md);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: var(--pf-typography-caption-size, 12px);
}

.wb-lib-effort {
  max-width: 180px;
}

.wb-lib-free {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-xs);
  white-space: nowrap;
}

/* --- Срез 4: проба модели и строка состояния (X-01, §8). --- */

.wb-select {
  appearance: auto;
  padding: 0 var(--pf-space-md);
}

.wb-textarea {
  min-height: 120px;
  padding: var(--pf-space-md);
  resize: vertical;
}

.wb-answer {
  margin: 0;
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  max-height: 50vh;
  overflow: auto;
}

/* Строка состояния — полоса, тихие подписи (референс, status). */
.wb-status {
  position: sticky;
  bottom: 0;
  display: flex;
  align-items: center;
  gap: var(--pf-space-md);
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border-top: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-bar);
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
}

.wb-status__state--running { color: var(--pf-color-text-accent); }
.wb-status__state--done { color: var(--pf-color-text-success); }
.wb-status__state--cancelled { color: var(--pf-color-text-warning); }
.wb-status__state--failed { color: var(--pf-color-text-danger); }

/* Операция со своим разделом («Быстрый» иллюстраций): подпись — ссылка туда, вид прежний. */
.wb-status__open {
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  cursor: pointer;
}

.wb-status__open:hover,
.wb-status__open:focus-visible {
  text-decoration: underline;
}

/* Секундомер операции (BETA-D-023, два уточнения владельца): кегль
 * стандартный, как у соседних подписей, — выделяют только цвет, жирность
 * и рамка-пилюля. Цифры табличные, чтобы счёт не «дышал» по ширине. */
.wb-elapsed {
  color: var(--pf-color-text-accent);
  font-size: var(--pf-typography-caption-size);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  white-space: nowrap;
  padding: 2px var(--pf-space-sm);
  border: 1px solid currentColor;
  border-radius: var(--pf-radius-sm);
}

/* --- Срез 5: каталог промптов (опись группами и чтение записи). --- */

.wb-catalog-group {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  margin-bottom: var(--pf-space-xl);
}

.wb-catalog-item {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  width: 100%;
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border: none;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-primary);
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.wb-catalog-item:last-child {
  border-bottom: none;
}

.wb-catalog-item:hover {
  background: var(--pf-color-surface-bar);
}

.wb-catalog-item__head {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
  width: 100%;
}

.wb-catalog-item__version {
  color: var(--pf-color-text-muted);
  white-space: nowrap;
}

.wb-catalog-meta {
  flex-wrap: wrap;
}

.wb-tag {
  padding: 1px var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  color: var(--pf-color-text-secondary);
  font-size: var(--pf-typography-caption-size);
  white-space: nowrap;
}

/* Текст промпта: моноширинно, с переносами, дословно — без разметки. */
.wb-prompt {
  margin: 0;
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-family: var(--pf-typography-code-family);
  font-size: var(--pf-typography-code-size);
  line-height: var(--pf-typography-code-line-height);
  max-height: 62vh;
  overflow: auto;
}

/* Марка в шапке — кнопка «домой» (BETA-D-023): выглядит маркой, ведёт к
 * списку романов. */
.wb-top__brand {
  border: none;
  background: transparent;
  color: inherit;
  font: inherit;
  font-weight: 600;
  padding: 0;
  cursor: pointer;
}

/* Меню-шестерёнка «Настройки» (BETA-D-023): редкие действия шапки. Без
 * теней — тема «Тёплый графит» держит глубину рамками и поверхностями. */
.wb-menu-wrap {
  position: relative;
  flex: none;
}

.wb-menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 200px;
  padding: var(--pf-space-xs);
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-raised);
}

.wb-menu__item {
  justify-content: flex-start;
  text-align: left;
  width: 100%;
  border: none;
  background: transparent;
}

/* Правка промпта (срез 10): та же типографика кода, отличимый фон — видно,
 * что перед автором промпт, а не текст романа (рисунок MVP-D-012). */
.wb-prompt-edit {
  width: 100%;
  min-height: 40vh;
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-strong);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-primary);
  font-family: var(--pf-typography-code-family);
  font-size: var(--pf-typography-code-size);
  line-height: var(--pf-typography-code-line-height);
  resize: vertical;
}

.wb-status__job {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-sm);
  min-width: 0;
}

.wb-status .pf-btn {
  min-height: var(--pf-size-control-sm);
  padding: 0 var(--pf-space-md);
  border-radius: var(--pf-radius-sm);
}

/* ─── Лента шагов сцены (срез 7, W-04…W-08 по схеме стола) ─────────────── */

/* Шаг сцены — тихая карточка; идущий шаг выделен рамкой и подложкой,
 * не цветной полосой (референс, step). */
.wb-scene-step {
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-md) var(--pf-space-lg);
}

.wb-scene-step--active {
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-border-focus);
}

.wb-scene-step--locked {
  opacity: 0.5;
}

.wb-scene-step__head {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  margin-bottom: var(--pf-space-sm);
}

/* Метка шага — просто знак, без кружка-обводки (референс, step__mark). */
.wb-scene-step__mark {
  flex: none;
  width: 18px;
  text-align: center;
  font-size: var(--pf-typography-body-small-size);
  color: var(--pf-color-text-accent);
}

.wb-scene-step--locked .wb-scene-step__mark {
  color: var(--pf-color-text-muted);
}

.wb-scene-run-row {
  align-items: center;
  gap: var(--pf-space-md);
  flex-wrap: wrap;
}

.wb-scene-run-row .wb-select {
  max-width: 320px;
}

.wb-scene-parts {
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}

/* Части запуска: тихая точка и подпись, без рамок (референс, parts);
 * различаются цвет и подпись (§11). */
.wb-part {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-xs);
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
  white-space: nowrap;
}

.wb-part__dot {
  width: 6px;
  height: 6px;
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-border-medium);
}

.wb-part--done {
  color: var(--pf-color-text-secondary);
}

.wb-part--done .wb-part__dot {
  background: var(--pf-color-surface-accent);
}

.wb-part--run {
  color: var(--pf-color-text-accent);
  font-weight: 600;
}

.wb-part--run .wb-part__dot {
  background: var(--pf-color-surface-accent);
}

/* Текст сцены: проза серифом, как страница книги (референс, prose). */
.wb-scene-text {
  font-family: var(--pf-typography-manuscript-family);
  font-size: var(--pf-typography-manuscript-size);
  line-height: var(--pf-typography-manuscript-line-height);
  max-height: 56vh;
}

/* ─── Срез 9: стол с колонками (structure.html, волна 3 — принят) ─────────
 * Перенос prototypes/ui-lab/prototype/assets/workbench.css: колонки
 * «Путь романа» (навигация по сценам) | центр | «Чтение и правка».
 * На экране сцены страница держит высоту окна, прокрутка — внутри колонок. */

/* Якорение прокрутки выключено на время перерисовки стола (scroll-paths.js,
   26.09): позицию чтения возвращает сам стол, а браузерная «поправка»
   сдвигала список канона на карточку за каждый такт опроса. */
.pf-anchor-hold,
.pf-anchor-hold * {
  overflow-anchor: none;
}

.wb-page--desk {
  height: 100vh;
  overflow: hidden;
}

.wb-desk {
  flex: 1 1 auto;
  display: flex;
  align-items: stretch;
  min-height: 0;
  background: var(--pf-color-surface-canvas);
}

.wb-col {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}

.wb-col--nav {
  background: var(--pf-color-surface-raised);
  border-right: 1px solid var(--pf-color-border-subtle);
}

/* Центр забирает остаток ширины, а панель правки держит СВОЮ ширину и
 * тянется ручкой (замечание владельца 2026-08-11: на 4K панель занимала
 * всё свободное место, и сузить её было нечем). Точное значение ставит
 * render из state.cols.detail — панель строится шестью экранами. */
.wb-col--center { flex: 1 1 360px; min-width: 300px; }

.wb-col--detail {
  flex: 0 1 560px;
  min-width: 280px;
  border-left: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-raised);
}

/* Режим шлифовки (З-17′ ред. 3, замечание владельца 7): текст сцены живёт
 * в панели правки, и она — самая широкая колонка (остаток экрана, точное
 * значение ставит render); центр с управлением шлифовкой — узкий. */
.wb-desk--polish .wb-col--center {
  flex: 0 1 420px;
  min-width: 320px;
}

/* Колонка помощника: справа от панели правки, только разговор. Одна и та
   же колонка служит обычным местам стола, шлифовке и финализации. */
.wb-col--assist {
  flex: 0 1 520px;
  min-width: 340px;
  border-left: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-raised);
}

.wb-col__head {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border-bottom: 1px solid var(--pf-color-border-subtle);
  flex: none;
  min-height: var(--pf-size-control-lg);
}

/* Заголовок колонки — тихая капитель (референс, col__head). */
.wb-col__title {
  font-size: 11.5px;
  font-weight: var(--pf-typography-caption-weight);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.wb-col__spacer { flex: 1 1 auto; }

.wb-col__body {
  flex: 1 1 auto;
  overflow: auto;
  padding: var(--pf-space-md);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md);
}

/* Верх колонки: главное действие прижато под шапкой, вне прокрутки списка
 * («Новый роман» панели романов, замечание владельца 2026-09-20). */
.wb-col__top {
  flex: none;
  padding: var(--pf-space-xs) var(--pf-space-md);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

/* Подвал колонки: служебный пункт прижат к нижнему краю, вне прокрутки
 * списка (пункт «Настройки романа» пути романа, 2026-08-08). */
.wb-col__foot {
  flex: none;
  padding: var(--pf-space-xs) var(--pf-space-md) var(--pf-space-sm);
  border-top: 1px solid var(--pf-color-border-subtle);
}

.wb-col--rail .wb-col__foot {
  padding: var(--pf-space-xs);
  display: flex;
  justify-content: center;
}

.wb-col__body--center {
  padding: var(--pf-space-xl);
  gap: var(--pf-space-lg);
}

/* Рукопись читается в комфортной ширине, а не во всю колонку. */
.wb-col__body--center > * {
  max-width: var(--pf-size-content-manuscript);
  width: 100%;
  margin-left: auto;
  margin-right: auto;
  flex: none;
}

/* Аналитика — таблица, не рукопись: во всю ширину экрана (замечание
 * владельца 2026-08-14, проверять на 4K). */
.wb-col__body--wide > * { max-width: none; }

/* Свёрнутая колонка навигации — полоска с кружками. */
.wb-col--rail .wb-col__body {
  align-items: center;
  padding: var(--pf-space-sm) var(--pf-space-xs);
}

.wb-col--rail .wb-col__head {
  justify-content: center;
  padding: var(--pf-space-sm) var(--pf-space-xs);
}

.wb-col--rail .wb-col__title { display: none; }

/* Навигация «Путь романа»: сцены кружочками с номером и состоянием. */

.wb-nav {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  width: 100%;
}

/* Пункт «Пути романа»: золотая подложка и черта акцента слева у
 * открытой сцены (референс, nav__item). */
.wb-nav__item {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  width: 100%;
  min-height: var(--pf-size-control-md);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border: 0;
  border-left: 2px solid transparent;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-secondary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  text-align: left;
  cursor: pointer;
}

.wb-nav__item:hover { background: var(--pf-color-surface-canvas); }

.wb-nav__item[aria-current='true'] {
  background: var(--pf-color-surface-selected);
  border-left-color: var(--pf-color-border-focus);
  color: var(--pf-color-text-primary);
  font-weight: 600;
}

.wb-nav__item:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.wb-nav__main {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 0;
}

.wb-nav__title {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.wb-nav__meta {
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Вторая строка романа (BETA-D-068 п. 2): счётчик и пилюля стадии в одну
 * строку. Пилюля больше не сосед названия, поэтому название занимает
 * первую строку целиком и обрезается, только если длиннее панели. */
.wb-col--nav .wb-nav__meta {
  display: flex;
  align-items: center;
  gap: var(--pf-space-xs);
}

.wb-nav__count {
  font-variant-numeric: tabular-nums;
  flex: none;
}

/* Роман с иллюстрациями (замечание владельца 04.09): маленький значок
 * картинки и число рядом — тихим тоном, без подложки; вариант «значок +
 * число» из эскиза sketches/nav-images-r1.html. */
.wb-nav__pics {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  flex: none;
  color: var(--pf-color-text-secondary);
  font-variant-numeric: tabular-nums;
  cursor: help;
}

.wb-nav__pics-icon {
  width: 13px;
  height: 13px;
  flex: none;
  color: var(--pf-color-text-accent);
}

.wb-nav__item[aria-current='true'] .wb-nav__pics {
  color: var(--pf-color-text-primary);
}

/* ---------------------------------------------------------------------- *
 * Панель «Мои романы»: режим «Обложки» и шкала места (BETA-D-193 п. 2,
 * эскиз sketches/novels-nav-covers-r1.html ред. 2).
 * ---------------------------------------------------------------------- */

/* Переключатель «≡ / ▦» в шапке панели. «Выбрано» — подложка выделения и
 * черта акцента снизу, НЕ золотая заливка (правило золота, ui.md). */
.wb-viewseg {
  display: inline-flex;
  flex: none;
  overflow: hidden;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-pill);
}

.wb-viewseg__btn {
  padding: 1px 9px;
  border: 0;
  background: transparent;
  color: var(--pf-color-text-secondary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  line-height: 1.4;
  cursor: pointer;
}

.wb-viewseg__btn:hover { color: var(--pf-color-text-primary); }

.wb-viewseg__btn--on {
  background: var(--pf-color-surface-selected);
  box-shadow: inset 0 -2px 0 var(--pf-color-border-focus);
  color: var(--pf-color-text-primary);
}

/* Строка романа с обложкой: обложка во всю высоту строки слева, справа —
 * название до двух строк и четыре коротких строки (решение владельца п. 6). */
.wb-nav__item--cover { align-items: center; }
.wb-nav__item--cover .wb-nav__main { flex: 1 1 auto; gap: 1px; }

.wb-nav__line {
  display: flex;
  align-items: center;
  gap: var(--pf-space-xs);
  overflow: hidden;
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  line-height: 1.35;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Текст строки режется многоточием (Д1 прохода новичка 27.09: «Szenen: (»,
 * «geändert heute, 12:4»): у flex-строки text-overflow действует только на
 * детей — сжимается текстовая часть, пилюля и значки остаются целыми. */
.wb-nav__line > .wb-nav__text,
.wb-nav__line > .wb-nav__count {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.wb-nav__item[aria-current='true'] .wb-nav__line {
  color: var(--pf-color-text-secondary);
}

/* Обложка: 68×102 в панели, 34×51 в свёрнутой колонке, 96×144 в настройках.
 * Картинка любых пропорций кадрируется по центру. */
.wb-cover {
  position: relative;
  flex: none;
  overflow: hidden;
  border-radius: 3px 5px 5px 3px;
  background: var(--pf-color-surface-control);
  box-shadow: inset 0 0 0 1px var(--pf-color-border-subtle);
}

.wb-cover--row { width: 68px; height: 102px; }

.wb-cover--rail {
  width: 34px;
  height: 51px;
  border-radius: 2px 3px 3px 2px;
}

.wb-cover--big {
  width: 96px;
  height: 144px;
  border-radius: 4px 8px 8px 4px;
}

.wb-cover__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Фрагмент обложки (BETA-D-205): картинка позиционируется стилем из
   novels-nav.js (доли фрагмента), переплёт обрезает лишнее. */
.wb-cover__img--crop {
  position: absolute;
  max-width: none;
  object-fit: fill;
}

/* Уголок «своя» — единственная золотая заливка строки, текст на ней
 * инверсный (правило золота). */
.wb-cover__badge {
  position: absolute;
  right: 2px;
  bottom: 2px;
  padding: 1px 4px;
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-accent);
  color: var(--pf-color-text-inverse);
  font-size: 9px;
  font-weight: 600;
  line-height: 1.2;
}

/* Без картинок — «старая бумажная книга»: корешок слева, тканевый переплёт
 * и название с засечками. Оттенок переплёта свой у каждого романа (решение
 * владельца п. 5) и приходит числом в --wb-cover-hue, поэтому считается
 * hsl() от одного тона, а не токеном темы: токен у всех романов один. */
.wb-cover--paper {
  --wb-cover-hue: 40;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 6px 4px 6px 8px;
  background: linear-gradient(
    90deg,
    hsl(var(--wb-cover-hue) 24% 40%) 0 7%,
    hsl(var(--wb-cover-hue) 26% 56%) 7% 9%,
    hsl(var(--wb-cover-hue) 28% 66%) 9%
  );
}

.wb-cover__t {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 4;
  overflow: hidden;
  padding: 3px 0;
  border-top: 1px solid hsl(var(--wb-cover-hue) 30% 20% / 0.4);
  border-bottom: 1px solid hsl(var(--wb-cover-hue) 30% 20% / 0.4);
  color: hsl(var(--wb-cover-hue) 34% 16%);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.02em;
  line-height: 1.15;
  text-align: center;
  text-transform: uppercase;
}

.wb-cover--big.wb-cover--paper { padding: 14px 10px 14px 16px; }
.wb-cover--big .wb-cover__t { padding: 6px 0; font-size: 13px; -webkit-line-clamp: 5; }

.wb-cover--rail.wb-cover--paper { padding: 3px 2px 3px 4px; }
.wb-cover--rail .wb-cover__t { padding: 1px 0; font-size: 6.5px; -webkit-line-clamp: 3; }

/* Свёрнутая колонка: мини-обложка вместо значка книги, название — в title
 * строки (эскиз §1В). Разметка та же, меняется только размер. */
.wb-col--rail .wb-cover {
  width: 34px;
  height: 51px;
  border-radius: 2px 3px 3px 2px;
}

.wb-col--rail .wb-cover--paper { padding: 3px 2px 3px 4px; }
.wb-col--rail .wb-cover__t { padding: 1px 0; font-size: 6.5px; -webkit-line-clamp: 3; }
.wb-col--rail .wb-cover__badge { display: none; }

/* Шкала места аккаунта внизу панели (эскиз §4): та же цифра, что в паспорте
 * «Место…» и на портале. Три ступени — как у плашки места. */
.wb-nav-storage {
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: 100%;
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border: 0;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-muted);
  font: inherit;
  font-size: var(--pf-typography-caption-size);
  text-align: left;
  cursor: pointer;
}

.wb-nav-storage:hover { background: var(--pf-color-surface-canvas); }

.wb-nav-storage__t {
  display: flex;
  justify-content: space-between;
  gap: var(--pf-space-xs);
}

.wb-nav-storage__t b {
  color: var(--pf-color-text-secondary);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.wb-nav-storage__bar {
  display: block;
  height: 6px;
  overflow: hidden;
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-sunken);
}

.wb-nav-storage__bar i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--pf-color-surface-accent);
}

.wb-nav-storage--warn .wb-nav-storage__bar i { background: var(--pf-color-surface-warning); }
.wb-nav-storage--full .wb-nav-storage__bar i { background: var(--pf-color-surface-danger); }
.wb-nav-storage--full .wb-nav-storage__t { color: var(--pf-color-text-danger); }
.wb-nav-storage--full .wb-nav-storage__t b { color: var(--pf-color-text-danger); }

/* В свёрнутой колонке остаётся только полоса — число читается подсказкой. */
.wb-col--rail .wb-nav-storage__t { display: none; }
.wb-col--rail .wb-nav-storage { padding: var(--pf-space-xs) 0; }

/* Раздел «Обложка» в настройках романа (эскиз §3). */
.wb-cover-set {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--pf-space-md);
}

.wb-cover-set__opts {
  display: flex;
  flex: 1 1 260px;
  flex-direction: column;
  gap: var(--pf-space-sm);
  min-width: 220px;
}

.wb-cover-opt {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pf-space-sm);
  font-size: var(--pf-typography-body-small-size);
}

.wb-cover-opt--off { color: var(--pf-color-text-muted); }

.wb-stage-pill {
  flex: none;
  font-size: var(--pf-typography-caption-size);
  line-height: 1.35;
  border: 1px solid currentColor;
  border-radius: 999px;
  padding: 0 7px;
  white-space: nowrap;
  user-select: none;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Четыре стадии пути: черновик → план → пишется → готов. Различает
 * ПОДЛОЖКА, а не оттенок текста (замечание владельца 2026-08-17: в
 * светлой теме пилюли не отличались). Причина: `text.muted` и
 * `text.secondary` там соседние серые (#6f695b и #635d53), а подложки
 * расходятся ясно — пусто → тёплый серый → золото → зелень. Пары
 * «текст на подложке» стоят в CONTRAST_REQUIREMENTS пакета токенов. */
.wb-stage-pill--draft {
  color: var(--pf-color-text-muted);
  border-color: var(--pf-color-border-subtle);
}

.wb-stage-pill--planned {
  color: var(--pf-color-text-secondary);
  background: var(--pf-color-surface-control);
  border-color: var(--pf-color-border-medium);
}

.wb-stage-pill--writing {
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-border-focus);
}

.wb-stage-pill--finished {
  color: var(--pf-color-text-success);
  background: var(--pf-color-surface-success-soft);
}

/* Строка сцены (2026-08-08): название переносится на две строки и видно
 * целиком, состояние — значком справа (✓ принята, ⟳ пишется), слово —
 * в title кнопки. Кружок и значок держатся верха при переносе. */
.wb-nav__item--scene { align-items: flex-start; }
.wb-nav__item--scene .wb-dot { margin-top: 1px; }
.wb-nav__item--scene .wb-nav__main { flex: 1 1 auto; }

.wb-nav__title--wrap {
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  line-height: 1.3;
}

.wb-nav__mark {
  flex: none;
  margin-top: 3px;
  color: var(--pf-color-text-accent);
  font-weight: 700;
  font-size: var(--pf-typography-caption-size);
}

.wb-col--rail .wb-nav__mark { display: none; }

.wb-col--rail .wb-nav__main { display: none; }
.wb-col--rail .wb-nav__item { justify-content: center; padding: var(--pf-space-xs); }

/* Золотая точка «назрела ревизия картотеки» на иконке «Канона»
 * (BETA-D-034, замечание владельца 2026-08-08): якорь — обёртка иконки,
 * поэтому значок виден и в свёрнутой полоске без текста. */
.wb-nav__iconwrap {
  position: relative;
  display: inline-flex;
  flex: none;
}

.wb-nav__due {
  position: absolute;
  top: -3px;
  right: -4px;
  width: 9px;
  height: 9px;
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-accent);
  border: 2px solid var(--pf-color-surface-raised);
}

/* Снимок канона на начало сцены (BETA-D-024): карточка-фолд под лентой
 * шагов; элементы списка открывают просмотр в правой панели. */
.wb-snap-fold__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  width: 100%;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.wb-snap-fold__head:disabled { opacity: 0.55; cursor: not-allowed; }
.wb-snap-fold__caret { color: var(--pf-color-text-accent); }
.wb-snap-fold__item {
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--pf-color-text-secondary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.wb-snap-fold__item:hover { color: var(--pf-color-text-primary); }
.wb-snap-fold__item--open { color: var(--pf-color-text-accent); font-weight: 600; }
.wb-snap-fold__item:disabled { opacity: 0.55; cursor: not-allowed; }

/* Откат хвоста сцен (BETA-D-022): строка сцены с тихим действием справа.
 * Действие не спорит с пунктом: без фона, приглушено до наведения (L-79 —
 * hover не заливает подложкой, меняется только сила знака). */
.wb-nav__row {
  display: flex;
  align-items: stretch;
  gap: 2px;
  width: 100%;
}

.wb-nav__row .wb-nav__item {
  flex: 1 1 auto;
  min-width: 0;
}

.wb-nav__action {
  flex: none;
  display: flex;
  align-items: center;
  padding: 0 var(--pf-space-xs);
  border: 0;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-muted);
  opacity: 0.45;
  cursor: pointer;
}

.wb-nav__action:hover { opacity: 1; color: var(--pf-color-text-danger); }

.wb-nav__action:disabled {
  opacity: 0.25;
  cursor: not-allowed;
}

/* Панель «Мои романы» — дом кабинета (BETA-D-067): меню «⋯» строки,
 * переименование в строке, корзина внизу колонки. */
.wb-nav__row { position: relative; }

.wb-nav__dots {
  flex: none;
  /* В режиме обложек строка высокая (BETA-D-193): кнопка не растягивается на всю высоту, а стоит вверху. */
  align-self: flex-start;
  padding: 0 var(--pf-space-sm);
}

.wb-nav__menu {
  top: calc(100% - 2px);
  right: 4px;
  min-width: 170px;
}

.wb-menu__item--danger { color: var(--pf-color-text-danger); }

.wb-nav__row--rename {
  flex-direction: column;
  align-items: stretch;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-xs);
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
}

.wb-col--nav .wb-trash {
  margin-top: auto;
  padding-top: var(--pf-space-sm);
  border-top: 1px solid var(--pf-color-border-medium);
}

.wb-trash__item { flex-wrap: wrap; }

.wb-trash__acts { width: 100%; }

.wb-trash__purge {
  display: flex;
  justify-content: center;
  margin-top: var(--pf-space-xs);
}

.wb-nav__action-icon {
  width: 14px;
  height: 14px;
}

.wb-col--rail .wb-nav__action { display: none; }

/* Перечень исчезающих сцен в подтверждении отката. */
.wb-rollback-list {
  margin: var(--pf-space-sm) 0;
  padding-left: var(--pf-space-lg);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

/* Кружок сцены: номер + состояние цветом и подписью рядом (§11).
 * Язык референса: принятая — залитое золото, написанная — золотой контур,
 * замысел — серый контур. */
.wb-dot {
  flex: none;
  width: var(--pf-size-control-sm);
  height: var(--pf-size-control-sm);
  border-radius: var(--pf-radius-pill);
  border: 1.5px solid var(--pf-color-border-medium);
  background: transparent;
  color: var(--pf-color-text-muted);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--pf-typography-caption-size);
  font-weight: 600;
}

.wb-dot--accepted {
  border-color: var(--pf-color-surface-accent);
  background: var(--pf-color-surface-accent);
  color: var(--pf-color-text-inverse);
}

.wb-dot--running {
  border-color: var(--pf-color-border-focus);
  background: var(--pf-color-surface-selected);
  color: var(--pf-color-text-accent);
}

.wb-dot--written {
  border-color: var(--pf-color-surface-accent);
  color: var(--pf-color-text-accent);
}

/* «Есть иллюстрация» (BETA-D-143, выбор владельца — вариант Д эскиза 154-й):
 * золотое кольцо вокруг кружка номера с просветом; строка названия не
 * трогается. Outline с отступом — просвет показывает любой фон под
 * кружком, гадать цвет подложки не нужно. Слово — в title узла (§11). */
.wb-dot--images {
  outline: 2px solid var(--pf-color-text-accent);
  outline-offset: 2px;
}

/* Кружок номера в списке сцен канона — чуть меньше навигационного. */
.wb-dot--sm {
  width: 20px;
  height: 20px;
  font-size: 11px;
}

/* Разделитель колонок: тянется мышью, доступен с клавиатуры (MVP-D-009). */

.wb-split {
  flex: 0 0 6px;
  border: none;
  padding: 0;
  background: var(--pf-color-surface-sunken);
  cursor: col-resize;
  touch-action: none;
}

.wb-split:hover {
  background: var(--pf-color-surface-selected);
}

.wb-split:focus-visible {
  outline: 2px solid var(--pf-color-border-focus);
  outline-offset: -2px;
}

/* Кликабельный шаг пути: открывает свой текст в панели правки. */

.wb-scene-step--openable {
  cursor: pointer;
}

.wb-scene-step--openable:hover {
  border-color: var(--pf-color-border-medium);
}

.wb-scene-step--selected {
  border-color: var(--pf-color-border-focus);
}

/* Происхождение текста: когда и каким ИИ сгенерирован (MVP-D-009). */

.wb-origin {
  color: var(--pf-color-text-muted);
}

/* Компактный блок запуска (MVP-D-012): модель и кнопка во всю ширину
 * узкого центра — ничего не «втыкается» переносом строк. */

.wb-run {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
}

.wb-run .wb-select {
  width: 100%;
  max-width: none;
}

.wb-run__go {
  width: 100%;
  justify-content: center;
}

/* Унифицированная кнопка «Промпт» в шапке ИИ-шага — маленькая и тихая. */

.wb-step-prompt {
  min-height: var(--pf-size-control-sm);
  padding: 0 var(--pf-space-sm);
  border-radius: var(--pf-radius-sm);
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-secondary);
}

/* Служебные тексты шагов в панели правки (MVP-D-010): только чтение;
 * промпт отличим фоном — видно, что это промпт сборки, а не рукопись. */

.wb-detail-pre {
  flex: 1 1 auto;
  min-height: 12em;
  margin: 0;
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  overflow: auto;
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
}

.wb-detail-pre--prompt {
  background: var(--pf-color-surface-sunken);
  border-color: var(--pf-color-surface-accent);
  font-family: var(--pf-typography-code-family);
  font-size: var(--pf-typography-code-size);
  line-height: var(--pf-typography-code-line-height);
}

/* Колонка «Чтение и правка»: редактор рукописи с живым счётчиком. */

.wb-editor {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  flex: 1 1 auto;
  min-height: 0;
}

.wb-editor .wb-textarea {
  flex: 1 1 auto;
  min-height: 12em;
  font-family: var(--pf-typography-manuscript-family);
  font-size: var(--pf-typography-manuscript-size);
  line-height: var(--pf-typography-manuscript-line-height);
}

/* Пошаговый режим (BETA-D-024 п.2): кнопка шага + компактный селект «Кем»
 * в блоке ИИ-шага — модель видна там, где работает. */

.wb-step-actions {
  align-items: center;
  flex-wrap: wrap;
}

.wb-step-model {
  align-items: center;
  gap: var(--pf-space-xs);
  min-width: 0;
  flex: 1 1 12em;
}

.wb-step-model__select {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 24em;
}

/* Замысел с ИИ (BETA-D-024 п.1): ряд кнопки, подсказка и фолд состава. */

.wb-seed-actions {
  align-items: center;
  flex-wrap: wrap;
}

.wb-seed-hint {
  min-height: 3.2em;
  font-size: var(--pf-typography-body-small-size);
}

.wb-seed-fold {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
}

.wb-seed-fold .wb-snap-fold__head { width: auto; }
.wb-seed-fold__total { white-space: nowrap; }

/* Форма замечания: закрытие — крестиком, компактно. */

.wb-note__close {
  min-height: var(--pf-size-control-sm);
  min-width: var(--pf-size-control-sm);
  padding: 0 var(--pf-space-xs);
  border-radius: var(--pf-radius-sm);
  color: var(--pf-color-text-muted);
}

/* Канон романа (срез 9а, W-11): разделы и карточки записей в узком центре. */

.wb-nav__divider {
  height: 1px;
  background: var(--pf-color-border-subtle);
  margin: var(--pf-space-xs) var(--pf-space-sm);
  flex: none;
}

.wb-canon-group {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
}

.wb-canon-sub {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

.wb-canon-card {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 2px;
  width: 100%;
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-primary);
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.wb-canon-card:hover { border-color: var(--pf-color-border-medium); }

.wb-canon-card[aria-pressed='true'] {
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-border-focus);
}

.wb-canon-card:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.wb-canon-card__name { font-weight: 600; }

.wb-canon-card__preview {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.wb-canon-card--index { border-style: dashed; }

/* Карточка героя со звездой яруса (замечание владельца 2026-08-17).
 * Звезда — отдельная кнопка (кнопка в кнопке невалидна), но лежит НАД
 * карточкой, а не рядом: соседний элемент в потоке прибавлял свою ширину
 * к карточке, и строки героев выпирали из колонки (правка 2026-08-17).
 * Карточка сохраняет общую ширину раздела, место под звезду отводится
 * отступом — текст под неё не заезжает. */

.wb-canon-row {
  position: relative;
  width: 100%;
}

.wb-canon-row .wb-canon-card {
  padding-right: calc(var(--pf-space-md) + 1.75rem);
}

.wb-canon-tier {
  position: absolute;
  top: var(--pf-space-xs);
  right: var(--pf-space-xs);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  border: 1px solid transparent;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-secondary);
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
}

.wb-canon-tier:hover {
  border-color: var(--pf-color-border-medium);
  background: var(--pf-color-surface-raised);
}

.wb-canon-tier--on { color: var(--pf-color-text-accent); }

.wb-canon-tier:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.wb-canon-form {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}

.wb-canon-form .wb-input { flex: 1 1 auto; }

/* Канон романа (гейт MVP-D-024): карточка состояния и действий; сам
 * отчёт ревизора читается в панели правки (ui.md), не здесь. */

.wb-canon-gate {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-sm);
}

/* Черновик романа (срез 9а): карточки наработок с действиями. */

/* Подпись о форматах (замечание владельца 2026-08-23): коротко, подробности
 * плашкой при наведении; «Подробнее ⓘ» — видимый намёк на плашку. */
.wb-draft-formats { cursor: help; }
.wb-draft-formats__more {
  color: var(--pf-color-text-accent);
  text-decoration: underline dotted;
  text-underline-offset: 3px;
  white-space: nowrap;
}
.wb-draft-card {
  display: flex;
  align-items: stretch;
  gap: var(--pf-space-xs);
}

.wb-draft-card__open { flex: 1 1 auto; min-width: 0; }

.wb-draft-card__actions {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  justify-content: flex-start;
  flex: none;
}

.wb-draft-state--waiting { color: var(--pf-color-text-warning, var(--pf-color-text-muted)); }
.wb-draft-state--done { color: var(--pf-color-text-success, var(--pf-color-text-muted)); }

/* Кнопка-подтверждение корзины: слово опасности вместо иконки. Рисунок —
   общий `.pf-btn--danger` из portal.css (красная заливка + инверсный текст).
   Здесь его не переопределять: прежняя строка меняла только цвет текста на
   красный поверх красной же заливки — кнопка оставалась без надписи. */

/* Скрытое поле выбора файлов: диалог открывает кнопка «Загрузить файлы». */
.wb-draft-file { display: none; }

/* Карточка канона (MVP-D-025): разделитель дороги и строка дрейфа черновика. */
.wb-canon-sep {
  border: 0;
  border-top: 1px solid var(--pf-color-border-subtle);
  margin: var(--pf-space-xs) 0;
  width: 100%;
}
.wb-canon-drift {
  background: var(--pf-color-surface-warning-soft);
  border: 1px solid var(--pf-color-surface-warning);
  border-radius: var(--pf-radius-sm);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-warning);
}

/* Состав контекста сцены (З-24, BETA-D-014 п.1): таблица «что вошло». */
.wb-ctx-list {
  list-style: none;
  margin: 0 0 var(--pf-space-sm);
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-2xs, 4px);
}
.wb-ctx-row {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-xs);
}
.wb-ctx-row--off .wb-ctx-name { color: var(--pf-color-text-muted); text-decoration: line-through; }
.wb-ctx-check { flex: 0 0 auto; align-self: center; }
.wb-ctx-name { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.wb-ctx-chars { flex: 0 0 auto; white-space: nowrap; }
.wb-ctx-warn { color: var(--pf-color-text-warning, var(--pf-color-text-secondary)); }
/* Полоса «Память романа» (BETA-D-027): блоки-сцены и две золотые отсечки. */
.wb-mem {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-2xs, 4px);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-raised);
  margin: var(--pf-space-xs) 0 var(--pf-space-sm);
}
.wb-mem-striprow {
  display: flex;
  align-items: center;
  gap: var(--pf-space-xs);
}
.wb-mem-older { color: var(--pf-color-text-muted); letter-spacing: 2px; }
.wb-mem-strip { position: relative; flex: 1 1 auto; touch-action: none; }
.wb-mem-cells { display: flex; gap: 2px; }
.wb-mem-cell {
  flex: 1 1 0;
  min-width: 0;
  height: 26px;
  border-radius: 4px;
  border: 1px solid var(--pf-color-border-subtle);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  font-size: 10px;
  color: var(--pf-color-text-muted);
  user-select: none;
}
.wb-mem-cell--recap { border-style: dashed; background: transparent; }
.wb-mem-cell--summ {
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-border-medium);
  color: var(--pf-color-text-secondary);
}
.wb-mem-cell--full {
  background: var(--pf-color-surface-accent);
  border-color: var(--pf-color-border-focus);
  color: var(--pf-color-text-inverse);
}
.wb-mem-handle {
  position: absolute;
  top: -4px;
  width: 14px;
  height: 34px;
  transform: translateX(-50%);
  cursor: ew-resize;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2;
}
.wb-mem-handle::before {
  content: '';
  width: 6px;
  height: 100%;
  border-radius: 3px;
  background: var(--pf-color-text-accent);
  border: 1px solid var(--pf-color-border-focus);
}
.wb-mem-handle--locked { cursor: default; opacity: 0.45; }
.wb-mem-now { color: var(--pf-color-text-accent); }
.wb-mem-zones { display: flex; gap: 2px; font-size: 10.5px; }
.wb-mem-zone {
  flex-basis: 0;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  text-align: center;
}
.wb-mem-zone--recap { color: var(--pf-color-text-muted); }
.wb-mem-zone--summ { color: var(--pf-color-text-secondary); }
.wb-mem-zone--full { color: var(--pf-color-text-accent); }
/* Подзаголовок группы материалов (BETA-D-026): капителью, как группы окна ИИ. */
.wb-ctx-group {
  margin: var(--pf-space-sm) 0 var(--pf-space-2xs, 4px);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--pf-color-text-secondary);
}

/* ─── Одежда текста (эскиз text-locked-states, BETA-D-020) ──────────────
 * Разницу состояний показывает не серость букв, а «во что текст одет»:
 * поле ввода — правится; страница — читается, правка за кнопкой;
 * пунктирное погашенное поле с полосой хода — занято и вернётся. */

/* «Страница»: тёплый лист с золотой гранью, проза серифом, буквы яркие. */
.wb-page-text {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  background: var(--pf-color-surface-page);
  border-left: 2px solid var(--pf-color-surface-accent);
  border-radius: 0 var(--pf-radius-sm) var(--pf-radius-sm) 0;
  padding: var(--pf-space-md) var(--pf-space-lg);
  font-family: var(--pf-typography-manuscript-family);
  font-size: var(--pf-typography-manuscript-size);
  line-height: var(--pf-typography-manuscript-line-height);
  color: var(--pf-color-text-primary);
  overflow-wrap: anywhere;
}

/* Просмотр разметки: книжный вид без исполнения HTML (BETA-D-020). */
.wb-md p { margin: 0 0 0.9em; }
.wb-md p:last-child { margin-bottom: 0; }

.wb-md__h1,
.wb-md__h2,
.wb-md__h3 {
  font-family: var(--pf-typography-body-family);
  font-weight: 600;
  margin: 0.9em 0 0.4em;
}

.wb-md__h1:first-child,
.wb-md__h2:first-child,
.wb-md__h3:first-child { margin-top: 0; }

.wb-md__h1 { font-size: 1.15em; }
.wb-md__h2 { font-size: 1.05em; }
.wb-md__h3 { font-size: 1em; color: var(--pf-color-text-secondary); }

.wb-md ul,
.wb-md ol { margin: 0 0 0.9em; padding-left: 1.4em; }
.wb-md li { margin-bottom: 0.25em; }

.wb-md__quote {
  margin: 0 0 0.9em;
  padding: 2px var(--pf-space-md);
  border-left: 2px solid var(--pf-color-border-medium);
  color: var(--pf-color-text-secondary);
}

.wb-md__hr {
  border: 0;
  border-top: 1px solid var(--pf-color-border-subtle);
  margin: var(--pf-space-md) 0;
}

.wb-md__code {
  font-family: var(--pf-typography-code-family);
  font-size: 0.85em;
  background: var(--pf-color-surface-sunken);
  border-radius: var(--pf-radius-sm);
  padding: 0 4px;
}

/* Знак состояния текста: пилюля с замком; цвет дублируется словом (§8). */
.wb-lock {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
  border: 1px solid var(--pf-color-border-focus);
  border-radius: var(--pf-radius-pill);
  padding: 1px var(--pf-space-sm);
  white-space: nowrap;
}

.wb-lock--quiet {
  color: var(--pf-color-text-muted);
  background: transparent;
  border-color: var(--pf-color-border-medium);
}

.wb-lock__icon {
  width: 11px;
  height: 11px;
  flex: none;
}

/* Занятое поле: осталось полем, но погашено и обведено пунктиром. */
.wb-textarea--busy {
  border-style: dashed;
  opacity: 0.72;
}

/* Тонкая полоса хода занятого поля: бежит, пока идёт запись. */
.wb-busy-bar {
  height: 3px;
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-border-subtle);
  overflow: hidden;
}

.wb-busy-bar i {
  display: block;
  width: 40%;
  height: 100%;
  background: var(--pf-color-surface-accent);
  animation: wb-busy-slide 1.6s var(--pf-motion-easing-standard) infinite;
}

@keyframes wb-busy-slide {
  from { transform: translateX(-100%); }
  to { transform: translateX(250%); }
}

/* Группа «Сцены» канона (BETA-D-016 п.3б, макет W-02): сцена и её части. */
/* Строка сцены — карточка с рамкой, как карточки героев и мест (эскиз
 * canon-scene-refs-r2, замечание владельца 2026-08-28 «неаккуратно»):
 * имя, подпись состава, ряд компактных кнопок частей. */
.wb-canon-scene {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-2xs, 4px);
  padding: var(--pf-space-xs) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
}
.wb-canon-scene__name { font-weight: 600; }
.wb-canon-scene__parts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pf-space-xs);
  margin-top: var(--pf-space-2xs, 4px);
}
/* Части сцены — компактные кнопки в ряд, не карточки столбиком (замечание
 * владельца 2026-08-28: «как дырки, а не кнопки»). Поверхность и рамка —
 * как у стандартной кнопки pf-btn; имя и объём в одну строку. Выделение
 * открытой части — правилом карточки [aria-pressed='true'] (оно точнее). */
.wb-canon-part {
  width: auto;
  min-width: 0;
  flex-direction: row;
  align-items: baseline;
  gap: var(--pf-space-xs);
  padding: 2px var(--pf-space-sm);
  border-color: var(--pf-color-border-medium);
  background: var(--pf-color-surface-control);
  font-size: var(--pf-typography-body-small-size);
}
.wb-canon-part .wb-canon-card__name { font-weight: 500; }
.wb-canon-part .pf-caption { font-size: 0.72rem; }

/* Карточка ↔ сцены (BETA-D-133, эскиз canon-scene-refs-r2): полоска «В
 * сценах» над открытой карточкой и «Герои · Место · Лор · Время» над частью
 * сцены — чипы-переходы; подпись состава в строке сцены. */
.wb-canon-scene__cap {
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.wb-canon-scene__cap--none { font-style: italic; }
.wb-refs {
  margin: var(--pf-space-xs) 0 var(--pf-space-sm);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  font-size: var(--pf-typography-caption-size);
}
.wb-refs__row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pf-space-2xs, 4px) var(--pf-space-xs);
}
.wb-refs__row + .wb-refs__row { margin-top: var(--pf-space-2xs, 4px); }
.wb-refs__lbl { color: var(--pf-color-text-muted); }
.wb-refs__sep { color: var(--pf-color-text-muted); }
.wb-refs__empty { color: var(--pf-color-text-muted); font-style: italic; }
.wb-refs__note { color: var(--pf-color-text-muted); }
.wb-refs__cliff { color: var(--pf-color-text-accent); }
.wb-refs__fail { color: var(--pf-color-text-warning); }
.wb-refs__hint {
  margin: var(--pf-space-2xs, 4px) 0 0;
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
}
.wb-refs__chip {
  display: inline-flex;
  align-items: baseline;
  gap: var(--pf-space-2xs, 4px);
  padding: 0 var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-control);
  color: var(--pf-color-text-primary);
  font: inherit;
  font-size: var(--pf-typography-caption-size);
  line-height: 1.6;
  cursor: pointer;
  font-variant-numeric: tabular-nums;
}
.wb-refs__chip small { font-size: 0.75em; letter-spacing: 0.06em; color: var(--pf-color-text-accent); }
.wb-refs__chip:hover { border-color: var(--pf-color-border-focus); }
.wb-refs__chip:disabled { opacity: 0.55; cursor: not-allowed; }
.wb-refs__chip--pov { border-color: var(--pf-color-border-focus); background: var(--pf-color-surface-selected); }
.wb-refs__chip--dim { color: var(--pf-color-text-muted); border-style: dashed; }
.wb-refs__chip--plain { cursor: default; }
/* Чип-номер сцены с принятой иллюстрацией (BETA-D-143): то же золотое
 * кольцо с просветом, что у кружка навигации. */
.wb-refs__chip--images { outline: 2px solid var(--pf-color-text-accent); outline-offset: 2px; }

/* Поиск и сортировка романов (B4, BETA-D-029): страница W-01 и левая
 * панель кабинета — одна пара контролов, панель складывает её в столбик. */
.wb-novel-filter {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  margin-bottom: var(--pf-space-md);
}
.wb-novel-filter .wb-input { max-width: 280px; }
.wb-novel-filter .wb-select { width: auto; max-width: 200px; }
.wb-novel-filter--col {
  flex-direction: column;
  align-items: stretch;
  margin: 0 0 var(--pf-space-xs);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}
.wb-novel-filter--col .wb-input,
.wb-novel-filter--col .wb-select {
  max-width: none;
  width: 100%;
}

/* Пустой итог поиска романов: тихая строка, не состояние-блокер. */
.wb-filter-empty {
  padding: var(--pf-space-md);
  color: var(--pf-color-text-muted);
}

/* Ошибка переименования в строке романа — коротко, на месте (B4). */
.wb-rename-error { color: var(--pf-color-text-danger); }

/* «Корзина» внизу списка романов (B4, BETA-D-030): тихий фолд. */
.wb-trash { margin-top: var(--pf-space-lg); }
.wb-trash__head {
  display: flex;
  align-items: center;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-xs) 0;
  border: none;
  background: none;
  color: var(--pf-color-text-muted);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  cursor: pointer;
}
.wb-trash__head:hover:not(:disabled) { color: var(--pf-color-text-primary); }
.wb-trash__head:disabled { opacity: 0.5; cursor: default; }
.wb-trash__chevron { font-size: 11px; }

/* Форма копии романа (B4): виды — радио со своими подписями. */
.wb-copy-kind {
  display: flex;
  align-items: flex-start;
  gap: var(--pf-space-sm);
  font-size: var(--pf-typography-body-small-size);
  cursor: pointer;
}
.wb-copy-kind input { margin-top: 3px; }

/* Размер варианта копии справа от описания (BETA-D-068 п. 5): описание
 * забирает ширину, число стоит столбиком и не переносится. */
.wb-copy-kind__text { flex: 1; min-width: 0; }

.wb-copy-kind__size {
  flex: none;
  color: var(--pf-color-text-accent);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.wb-copy-kind__size--wait { color: var(--pf-color-text-muted); }

/* ── Модуль «Сюжет» (BETA-D-033, эскиз z9a ред. 2) ─────────────────────── */

/* Бейдж короткого ключа уровня (d0/d1/d2/d3) рядом с названием. */
.wb-kbadge {
  display: inline-block;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 5px;
  padding: 0 5px;
  font-size: 11px;
  line-height: 17px;
  font-weight: 600;
  letter-spacing: 0.03em;
  color: var(--pf-color-text-muted);
  background: var(--pf-color-surface-sunken);
  vertical-align: 2px;
  margin-left: var(--pf-space-sm);
}

/* Подпункты уровней в колонке «Путь романа». */
.wb-nav__item--sub { padding-left: 22px; }
.wb-nav__item--sub .wb-kbadge { margin-left: 0; }
.wb-plot-nav-ok { color: var(--pf-color-text-success); }

/* Карточка блока уровня (формальные блоки d0; документ d1/d2). */
.wb-plot-block {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md, 10px);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-md) var(--pf-space-lg);
  margin-top: var(--pf-space-md);
}
.wb-plot-block__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-plot-block__title {
  margin: 0;
  font-size: var(--pf-typography-body-size);
  font-weight: 600;
}
.wb-plot-block__hint { flex: 1 1 auto; min-width: 0; }
/* Кнопки шапки блока переносятся, а не лезут за границы (2026-08-08 п.13). */
.wb-plot-block__actions {
  margin-left: auto;
  display: inline-flex;
  flex-wrap: wrap;
  gap: var(--pf-space-sm);
  min-width: 0;
}
.wb-plot-block .wb-plot-edit { margin-top: var(--pf-space-sm); width: 100%; }

/* Строка одобрения уровня и приглашение начать. */
.wb-plot-approve {
  display: flex;
  align-items: center;
  gap: var(--pf-space-md);
  margin-top: var(--pf-space-sm);
  flex-wrap: wrap;
  row-gap: var(--pf-space-sm);
}
.wb-plot-approved { color: var(--pf-color-text-success); }
.wb-plot-start { margin-top: var(--pf-space-lg); }

/* ── Экран «План сцен» (этап 3, эскиз z9a §3–4) ── */

.wb-plan-toolbar {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
  margin-top: var(--pf-space-md);
}
.wb-plan-toolbar__spacer { flex: 1 1 auto; }
.wb-plan-counts {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 3px 11px;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
  background: var(--pf-color-surface-sunken);
  white-space: nowrap;
}

/* Карточка сцены плана: тихая строка; открытая — рамкой и подложкой. */
.wb-plan-scene {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-sunken);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
  cursor: pointer;
}
.wb-plan-scene--open {
  border-color: var(--pf-color-border-accent, var(--pf-color-accent));
  background: var(--pf-color-surface-raised);
  cursor: default;
}
.wb-plan-scene--open .wb-plan-head { cursor: pointer; }
.wb-plan-scene--written { color: var(--pf-color-text-muted); background: transparent; }
.wb-plan-scene--draft { border-style: dashed; }
.wb-plan-head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-plan-body {
  margin: var(--pf-space-xs, 4px) 0 0;
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  line-height: 1.55;
  white-space: pre-line;
}
.wb-plan-scene--written .wb-plan-body { color: var(--pf-color-text-muted); }
.wb-plan-pt {
  color: var(--pf-color-text-accent, inherit);
  font-size: var(--pf-typography-caption-size);
  white-space: nowrap;
}
/* Вопрос пересборки шага у своей кнопки (замечание владельца 2026-08-23):
 * тихая рамка внутри карточки шага, не баннер наверху экрана. */
.wb-step-ask {
  margin-top: 6px;
  padding: 8px 10px;
  border: 1px solid var(--pf-color-border-medium);
  border-left: 3px solid var(--pf-color-accent);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
}
.wb-step-ask__text { margin: 0 0 6px; }
/* Подсказки-плашки (BETA-D-111 Р-4): одна на весь продукт, ui-hints.js. */
.wb-hint {
  position: fixed;
  z-index: 60;
  max-width: 380px;
  display: none;
  padding: 6px 10px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  line-height: 1.4;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
  pointer-events: none;
}
.wb-hint--on { display: block; }

/* Панель рук: перенос строки между рядами и галочка «и подробный план». */
.wb-plan-toolbar__break { flex-basis: 100%; height: 0; }
.wb-plan-toolbar__check { display: inline-flex; align-items: center; gap: 4px; }

/* Панель «↻ Переписать…» у сцены (BETA-D-111 Р-2): что × как. */
.wb-plan-rewrite {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-accent);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-selected);
}
.wb-plan-chips { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.wb-plan-chips__label { min-width: 3em; }
.wb-plan-chip {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: transparent;
  color: var(--pf-color-text-muted);
  padding: 2px 11px;
  font: inherit;
  font-size: var(--pf-typography-caption-size);
  cursor: pointer;
}
.wb-plan-chip--on {
  color: var(--pf-color-text-primary);
  border-color: var(--pf-color-accent);
  background: var(--pf-color-surface-raised);
}
.wb-plan-detail-empty { display: flex; align-items: center; gap: var(--pf-space-sm); flex-wrap: wrap; }
.wb-plan-regen__from { display: inline-flex; align-items: center; gap: 6px; }
.wb-plan-regen-from { max-width: 100%; }

/* Размеры текстов сцены в чтении (BETA-D-111): строка, подробный план, материалы. */
.wb-plan-meta {
  margin: 2px 0 0;
  color: var(--pf-color-text-muted);
}
.wb-plan-size {
  white-space: nowrap;
}
.wb-plan-request-size {
  white-space: nowrap;
}
.wb-plan-d3mark {
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  white-space: nowrap;
}
.wb-plan-state {
  font-size: var(--pf-typography-caption-size);
  white-space: nowrap;
}
/* «✓ написана» — зелёным (замечание владельца 2026-08-08 п.2). */
.wb-plan-state--written { color: var(--pf-color-text-success); }
.wb-plan-state--ready { color: var(--pf-color-text-accent, inherit); }
.wb-plan-state--draft { color: var(--pf-color-text-muted); }
.wb-plan-actions {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
  margin-top: var(--pf-space-sm);
}

/* Ступень d3 + материалы внутри открытой карточки. */
.wb-plan-fold {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-sunken);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
}
.wb-plan-fold__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-plan-materials {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--pf-space-sm);
  margin-top: var(--pf-space-sm);
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
}
.wb-plan-materials__head { margin-top: var(--pf-space-md); }
.wb-plan-material {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  padding: var(--pf-space-xs, 4px) var(--pf-space-sm);
}
.wb-plan-material__head { display: flex; align-items: baseline; gap: 4px; }
.wb-plan-material__text {
  margin: var(--pf-space-xs, 4px) 0 0;
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-size: var(--pf-typography-body-size, 15px);
  line-height: 1.55;
  color: var(--pf-color-text);
  white-space: pre-line;
  border-left: 2px solid var(--pf-color-border-medium, var(--pf-color-border-subtle));
  padding-left: var(--pf-space-sm);
}
.wb-plan-material__remove { padding: 0 6px; }

/* Двухпанельный сюжет (эскиз ред. 3): строки блоков d0 в центре,
   перегенерация блока и тетрадь сцены — в правой панели. */
.wb-plot-row {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  width: 100%;
  text-align: left;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-sunken);
  color: var(--pf-color-text);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
  cursor: pointer;
  font: inherit;
}
.wb-plot-row--sel {
  border-color: var(--pf-color-border-accent, var(--pf-color-accent));
  background: var(--pf-color-surface-raised);
}
.wb-plot-row__status { font-size: var(--pf-typography-caption-size); color: var(--pf-color-text-accent, inherit); }
.wb-plot-row__status--empty { color: var(--pf-color-text-muted); font-style: italic; }
.wb-plot-regen {
  border-top: 1px solid var(--pf-color-border-subtle);
  margin-top: var(--pf-space-md);
  padding-top: var(--pf-space-sm);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
}
.wb-plot-regen__actions { flex-wrap: wrap; gap: var(--pf-space-sm); }
.wb-plot-dest {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
}
.wb-plan-line-head { margin-top: var(--pf-space-md); }
.wb-plan-ripen-panel { display: flex; flex-direction: column; gap: var(--pf-space-sm); }
.wb-plan-material-drafts {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--pf-space-sm);
  margin-top: var(--pf-space-sm);
}

/* Форма строки сцены и материала. */
.wb-plan-form {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  margin-top: var(--pf-space-sm);
}
.wb-plan-form__actions {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-plan-form__draft { display: inline-flex; align-items: center; gap: 6px; }

/* Хвост плана. */
.wb-plan-tail {
  margin-top: var(--pf-space-md);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px dashed var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm, 7px);
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
}

/* Правка «Ключевых точек» отдельными полями (2026-08-08 п.11). */
.wb-plot-points {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  margin-top: var(--pf-space-sm);
}
.wb-plot-point-row {
  display: flex;
  align-items: flex-start;
  gap: var(--pf-space-sm);
}
.wb-plot-point-no { padding-top: 8px; min-width: 1.6em; text-align: right; }
.wb-plot-point-row .wb-textarea {
  flex: 1 1 auto;
  min-height: 3.2em;
  min-width: 0;
}

/* Открытый редактор сюжета растягивается на всю видимую высоту панели
   (замечание владельца 2026-08-08 п.3: поле занимало полэкрана). Карточка
   с редактором становится flex-колонкой и забирает остаток панели; сам
   textarea тянется внутри неё. Без :has (старый браузер) остаётся прежняя
   высота — мягкая деградация. */
.wb-col--detail .wb-col__body > .wb-plot-block:has(.wb-plot-edit),
.wb-col--detail .wb-col__body > .wb-plan-form:has(.wb-textarea),
.wb-col--detail .wb-col__body > .wb-plan-fold:has(> .wb-textarea) {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.wb-col--detail .wb-plot-edit,
.wb-col--detail .wb-plan-form .wb-textarea,
.wb-col--detail .wb-plan-fold > .wb-textarea {
  flex: 1 1 auto;
  min-height: 34vh;
}
.wb-col--detail .wb-plot-block:has(.wb-plot-edit) .wb-plot-block__head { flex: none; }

/* Оверлей «Варианты хода» (эскиз §4). */
.wb-plan-ripen-overlay { max-width: 640px; }
.wb-plan-opt {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-sunken);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
}
.wb-plan-opt--rec { border-color: var(--pf-color-border-accent, var(--pf-color-accent)); }
.wb-plan-opt__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-plan-opt .pf-btn { margin-top: var(--pf-space-sm); }

/* Экран «⚙ Настройки романа» (BETA-D-034): одна компактная карточка в
 * центре, все поля правятся на месте (замечание владельца 2026-08-08). */
.wb-set-card {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-lg);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md, 10px);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-md) var(--pf-space-lg);
  margin-top: var(--pf-space-md);
}
.wb-set-sec {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}
.wb-set-sec + .wb-set-sec,
.wb-set-actions + .wb-set-sec {
  border-top: 1px solid var(--pf-color-border-subtle);
  padding-top: var(--pf-space-md);
}
.wb-set-sec__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
}
.wb-set-sec__title {
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-secondary);
}
.wb-set-inline {
  display: flex;
  align-items: flex-end;
  gap: var(--pf-space-md);
  flex-wrap: wrap;
}
.wb-set-num {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.wb-set-num__input { width: 168px; }
.wb-set-actions { align-items: center; gap: var(--pf-space-md); }
.wb-set-saved { color: var(--pf-color-text-accent); }
.wb-set-model {
  display: grid;
  grid-template-columns: minmax(120px, 160px) minmax(0, 1fr);
  align-items: center;
  column-gap: var(--pf-space-md);
  row-gap: 2px;
}
.wb-set-model > .pf-caption { grid-column: 2; }

/* Фолд «Настройки романа» формы создания (W-02). */
.wb-fold-toggle {
  display: inline-flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--pf-color-text-accent);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.wb-fold-toggle:disabled { opacity: 0.55; cursor: not-allowed; }
.wb-field--compact { flex: 1; min-width: 140px; }

/* Ревизия картотеки (BETA-D-034): строка назревания в карточке канона. */
.wb-rev-row {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  flex-wrap: wrap;
  border-top: 1px solid var(--pf-color-border-subtle);
  padding-top: var(--pf-space-sm);
  margin-top: var(--pf-space-sm);
}
.wb-rev-row--due {
  border: 1px solid var(--pf-color-border-accent, var(--pf-color-accent));
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-selected, var(--pf-color-surface-raised));
  padding: var(--pf-space-sm) var(--pf-space-md);
}
.wb-rev-row__label { color: var(--pf-color-text-accent); font-weight: 600; }
.wb-rev-last {
  display: block;
  border: 0;
  background: transparent;
  padding: 2px 0 0;
  text-align: left;
  cursor: pointer;
  color: inherit;
  font: inherit;
}
.wb-rev-last:hover .pf-caption { color: var(--pf-color-text-accent); }

/* ── Бар-навигатор пути романа (З-19, BETA-D-035, ред. 2026-08-09) ──
 * Полоса-ступень как у шапки: без эмодзи и рамочных коробок, однострочные
 * тихие пилюли, статус — точкой и цветом текста; сворачивается в строку. */
/* Полоска «программа обновилась — обновите страницу» (F5): одна строка,
 * работу не заслоняет; подробности — в title при наведении. */
.wb-reload-strip {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 26px;
  padding: 2px 14px;
  border-bottom: 1px solid var(--pf-color-surface-warning);
  background: var(--pf-color-surface-warning-soft);
  color: var(--pf-color-text-warning);
  font-size: 12.5px;
}
.wb-reload-strip__icon {
  flex: none;
  width: 14px;
  height: 14px;
}
.wb-reload-strip__text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wb-reload-strip__action {
  flex: none;
  border: 0;
  background: transparent;
  padding: 2px 4px;
  color: inherit;
  font: inherit;
  font-weight: 600;
  text-decoration: underline;
  cursor: pointer;
  white-space: nowrap;
}
.wb-reload-strip__action:hover { text-decoration: none; }

.wb-stagebar {
  flex: none;
  padding: 4px 14px;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-bar);
}
.wb-stagebar__row {
  display: flex;
  /* Узкий экран (замечание владельца 2026-08-23): сегменты и плашка режима
   * переносятся на следующую строку, а не уезжают за правый край. */
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 6px;
  min-height: 26px;
}
/* Плашка режима держится у правого края и на своей строке после переноса. */
.wb-stagebar__row > .wb-menu-wrap { margin-left: auto; }
.wb-stagebar__fold {
  flex: none;
  border: 0;
  background: transparent;
  padding: 2px 6px 2px 0;
  color: var(--pf-color-text-muted);
  font: inherit;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  cursor: pointer;
  white-space: nowrap;
}
.wb-stagebar__fold:hover { color: var(--pf-color-text-accent); }
.wb-stagebar__gap { flex: 1; }
.wb-stagebar__mode-mini {
  color: var(--pf-color-text-secondary);
  font-size: 12.5px;
  white-space: nowrap;
}
.wb-seg {
  flex: 0 1 auto;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  padding: 3px 10px;
  color: inherit;
  font: inherit;
  font-size: 12.5px;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
}
div.wb-seg { cursor: default; }
button.wb-seg:hover { background: var(--pf-color-surface-control); }
.wb-seg__dot {
  flex: none;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--pf-color-border-strong);
}
.wb-seg--ok .wb-seg__dot { background: var(--pf-color-text-success); }
.wb-seg--warn .wb-seg__dot { background: var(--pf-color-text-warning); }
.wb-seg--run .wb-seg__dot { background: var(--pf-color-accent); }
.wb-seg--err .wb-seg__dot { background: var(--pf-color-text-danger); }
.wb-seg__t { font-weight: 600; }
.wb-seg--warn .wb-seg__t { color: var(--pf-color-text-warning); }
.wb-seg--err .wb-seg__t { color: var(--pf-color-text-danger); }
.wb-seg--idle { opacity: 0.6; }
.wb-seg--run { background: var(--pf-color-surface-selected); }
.wb-seg--run .wb-seg__t { color: var(--pf-color-text-accent); }
.wb-seg__s { color: var(--pf-color-text-muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.wb-modechip {
  flex: none;
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: var(--pf-color-surface-control);
  padding: 3px 11px;
  color: var(--pf-color-text-accent);
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}
.wb-modechip:hover { border-color: var(--pf-color-accent); }
/* Меню режимов — родное меню приложения (wb-menu) с описаниями пунктов. */
.wb-modemenu { min-width: 300px; }
.wb-modemenu__row {
  border: 0;
  border-radius: var(--pf-radius-sm, 7px);
  background: transparent;
  padding: 7px 10px;
  text-align: left;
  color: inherit;
  font: inherit;
  cursor: pointer;
}
.wb-modemenu__row:hover { background: var(--pf-color-surface-control); }
.wb-modemenu__row--sel {
  background: var(--pf-color-surface-selected);
  border-left: 2px solid var(--pf-color-accent);
}
.wb-modemenu__row b { display: block; font-size: 13.5px; }
.wb-modemenu__desc { display: block; font-size: 12.5px; color: var(--pf-color-text-muted); }
.wb-modemenu__blk { display: block; font-size: 12.5px; color: var(--pf-color-text-warning); margin-top: 2px; }
.wb-modemenu__hint { font-size: 12px; color: var(--pf-color-text-muted); padding: 6px 10px 2px; }
.wb-stagebar__next {
  padding: 2px 2px 1px 18px;
  font-size: 12.5px;
}
/* Подсказка «Дальше» — тихая кнопка-текст: ведёт на экран своего шага. */
.wb-stagebar__next-text {
  color: var(--pf-color-text-accent);
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  text-align: left;
}
button.wb-stagebar__next-text { cursor: pointer; }
button.wb-stagebar__next-text:hover { text-decoration: underline; }

/* ── Панель-журнал автомата (З-19): колонка и полоска ── */
.wb-autolog {
  flex: 0 0 330px;
  display: flex;
  flex-direction: column;
  min-height: 0;
  border-left: 1px solid var(--pf-color-border-subtle);
}
.wb-autolog__head {
  flex: none;
  padding: 8px 12px;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-selected);
}
.wb-autolog__t1 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--pf-color-text-accent);
}
.wb-autolog__total {
  font-variant-numeric: tabular-nums;
  border: 1px solid var(--pf-color-accent);
  border-radius: 999px;
  padding: 0 9px;
  background: var(--pf-color-surface-sunken);
}
.wb-autolog__t2 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 12.5px;
  color: var(--pf-color-text-secondary);
  margin-top: 3px;
}
.wb-autolog__fold {
  border: 0;
  background: transparent;
  color: var(--pf-color-text-muted);
  font: inherit;
  font-size: 12px;
  cursor: pointer;
}
.wb-autolog__list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 6px 8px 10px;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.wb-autolog__split {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--pf-color-text-muted);
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 7px 4px 1px;
}
.wb-autolog__split::after {
  content: '';
  flex: 1;
  border-top: 1px solid var(--pf-color-border-subtle);
}
.wb-autolog__step {
  display: flex;
  align-items: baseline;
  gap: 8px;
  border: 1px solid transparent;
  border-radius: var(--pf-radius-sm, 7px);
  padding: 4px 8px;
  text-align: left;
  color: inherit;
  font: inherit;
  font-size: 13px;
  cursor: default;
  background: transparent;
}
button.wb-autolog__step { cursor: pointer; }
button.wb-autolog__step:hover {
  border-color: var(--pf-color-border-medium);
  background: var(--pf-color-surface-control);
}
.wb-autolog__step b { font-weight: 500; }
button.wb-autolog__step b { color: var(--pf-color-text-accent); }
.wb-autolog__step--warn {
  background: var(--pf-color-surface-warning-soft);
  border-color: var(--pf-color-border-medium);
}
.wb-autolog__step--warn b { color: var(--pf-color-text-warning); }
.wb-autolog__step--now {
  background: var(--pf-color-surface-selected);
  border-color: var(--pf-color-accent);
}
/* «Пауза» — тихая служебная отметка между прогонами. */
.wb-autolog__step--pause,
.wb-autolog__step--pause b {
  color: var(--pf-color-text-muted);
}
.wb-autolog__step--now b { color: var(--pf-color-text-accent); }
.wb-autolog__ico { flex: none; width: 15px; text-align: center; }
.wb-autolog__lbl { flex: 1; min-width: 0; }
.wb-autolog__sub { display: block; color: var(--pf-color-text-muted); font-size: 12px; }
.wb-autolog__sub--warn { color: var(--pf-color-text-warning); }
.wb-autolog__dur {
  flex: none;
  color: var(--pf-color-text-muted);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}
.wb-autolog__stop {
  margin-top: 6px;
  border: 1px solid var(--pf-color-border-strong);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
  padding: 8px 11px;
  font-size: 13px;
}
.wb-autolog__stop b { display: block; margin-bottom: 2px; }
.wb-autolog__stop--done { border-color: var(--pf-color-border-medium); }
.wb-autolog__stop--done b { color: var(--pf-color-text-success); }
.wb-autolog__stop--limit { border-color: var(--pf-color-accent); background: var(--pf-color-surface-selected); }
.wb-autolog__stop--limit b { color: var(--pf-color-text-accent); }
.wb-autolog__stop--gap { background: var(--pf-color-surface-warning-soft); }
.wb-autolog__stop--gap b { color: var(--pf-color-text-warning); }
.wb-autolog__stop--error b { color: var(--pf-color-text-danger); }
.wb-autolog__foot {
  flex: none;
  border-top: 1px solid var(--pf-color-border-subtle);
  padding: 8px 12px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.wb-autorail {
  flex: 0 0 34px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 10px 0;
  border: 0;
  border-left: 1px solid var(--pf-color-border-subtle);
  background: var(--pf-color-surface-sunken);
  color: inherit;
  font: inherit;
  cursor: pointer;
}
.wb-autorail__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--pf-color-accent);
}
.wb-autorail__dot--warn { background: var(--pf-color-text-warning); }
.wb-autorail__label {
  writing-mode: vertical-rl;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pf-color-text-secondary);
}
.wb-autorail__cnt {
  font-size: 11px;
  color: var(--pf-color-text-accent);
  border: 1px solid var(--pf-color-accent);
  border-radius: 999px;
  padding: 0 5px;
  background: var(--pf-color-surface-selected);
}
.wb-autorail__time {
  writing-mode: vertical-rl;
  font-size: 11px;
  color: var(--pf-color-text-muted);
  font-variant-numeric: tabular-nums;
}

/* ── Карта запуска автомата (З-19, макет Д) ── */
.wb-launch__gates { display: flex; flex-direction: column; gap: 5px; margin: var(--pf-space-sm) 0; }
.wb-launch__gate {
  display: flex;
  align-items: baseline;
  gap: 8px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
  padding: 6px 10px;
  font-size: 13.5px;
}
.wb-launch__gate--err { border-color: var(--pf-color-border-danger); }
.wb-launch__gate--info { background: var(--pf-color-surface-warning-soft); }
.wb-launch__gate-lbl { flex: 1; min-width: 0; }
.wb-launch__fix {
  border: 0;
  background: transparent;
  color: var(--pf-color-text-accent);
  font: inherit;
  font-size: 12.5px;
  cursor: pointer;
  white-space: nowrap;
}
.wb-launch__limit {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin: var(--pf-space-sm) 0;
  font-size: 13.5px;
}
.wb-launch__opt { display: inline-flex; align-items: center; gap: 6px; }
.wb-launch__n { width: 58px; }
.wb-launch__blocked { color: var(--pf-color-text-danger); }

/* ── Раздел «Стиль» (З-8, BETA-D-036) ── */
.wb-style__h {
  margin: 18px 0 6px;
}
.wb-style__guide {
  align-items: center;
}
.wb-style__runs {
  display: grid;
  gap: 8px;
  margin: 8px 0;
}
.wb-style__diff {
  overflow-x: auto;
  white-space: pre;
  font-size: 12.5px;
  line-height: 1.5;
  background: var(--pf-color-surface-sunken, var(--pf-color-surface, rgba(0, 0, 0, 0.12)));
  border: 1px solid var(--pf-color-border, #2e323c);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 10px 12px;
}
.wb-style__edit {
  min-height: 320px;
  width: 100%;
}

/* ── Глобальный экран «Библиотека стилей» (З-8, BETA-D-036) ── */
.wb-stylelib {
  display: flex;
  gap: 16px;
  align-items: flex-start;
}
.wb-stylelib__list {
  flex: 0 0 380px;
  min-width: 280px;
}
.wb-stylelib__tags {
  margin-top: 8px;
  flex-wrap: wrap;
}
.wb-stylelib__view {
  flex: 1;
  min-width: 0;
}
.wb-stylelib__tag {
  height: 26px;
  padding: 0 10px;
  font-size: 12.5px;
}

/* ── «Симуляция сюжета» (З-9г, BETA-D-040): доска в центре, игра справа ── */

/* Пометка необязательности пункта навигации («опция» — слово владельца). */
.wb-sim-opt {
  font-size: 10.5px;
  color: var(--pf-color-text-muted);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: 999px;
  padding: 0 6px;
  white-space: nowrap;
}

/* Объяснение шага в шапке доски — тихая полоса с золотой кромкой (эскиз
 * .explain: прозрачная золотая размывка, приглушённый текст — НЕ сплошная
 * заливка surface-accent, на ней caption нечитаем). */
.wb-sim-note {
  border: 1px solid var(--pf-color-border-subtle);
  border-left: 3px solid var(--pf-color-accent);
  background: var(--pf-color-surface-selected);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 7px 11px;
}

/* Пустое состояние (эскиз, карточка 2): центрированная колонка. */
.wb-sim-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 10px;
  max-width: 620px;
  margin: 18px auto 0;
}
.wb-sim-empty__text { max-width: 560px; }
.wb-sim-empty .wb-sim-start { text-align: left; width: 100%; }
.wb-sim-empty__actions { justify-content: center; margin-top: 4px; }
.wb-sim-empty__model { justify-content: center; align-items: baseline; }
.wb-sim-empty__hint { color: var(--pf-color-text-muted); }

/* Переключатели формы — золотом темы, не синим нативным. */
.wb-sim-mode input[type='radio'],
.wb-sim-tail input[type='checkbox'] {
  accent-color: var(--pf-color-accent);
}

/* Стартовая форма: выбор режима (BETA-D-040 п. 5). */
.wb-sim-start { display: flex; flex-direction: column; gap: 8px; max-width: 560px; }
.wb-sim-mode {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
  padding: 10px 12px;
  cursor: pointer;
}
.wb-sim-mode--sel {
  border-color: var(--pf-color-border-focus);
  background: var(--pf-color-surface-selected);
}
.wb-sim-mode__main { display: flex; flex-direction: column; gap: 2px; }
.wb-sim-warn { color: var(--pf-color-text-warning); }
.wb-sim-tail { display: flex; gap: 8px; align-items: baseline; padding: 0 4px; cursor: pointer; }

/* Карточка сцены доски; строки из плана романа — пунктиром. */
.wb-sim-scene {
  border: 1px solid var(--pf-color-border-medium);
  background: var(--pf-color-surface-raised);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 7px 10px;
  margin: 4px 0;
  font-size: 13px;
}
.wb-sim-scene--plan {
  border-style: dashed;
  background: transparent;
  color: var(--pf-color-text-secondary);
}
.wb-sim-scene__head { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; flex-wrap: wrap; }
/* Описание сцены — серифом основным цветом, как строка в «Плане сцен». */
.wb-sim-scene__gist {
  margin-top: 5px;
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-size: 13.5px;
  line-height: 1.55;
  white-space: pre-wrap;
}
.wb-sim-scene--plan .wb-sim-scene__gist { color: var(--pf-color-text-secondary); }
/* Мета ведущего — за чертой, подписанными полями (замечание владельца). */
.wb-sim-scene__meta {
  margin-top: 7px;
  padding-top: 6px;
  border-top: 1px dashed var(--pf-color-border-medium);
  display: flex;
  flex-wrap: wrap;
  gap: 3px 14px;
}
.wb-sim-scene__metaitem { white-space: normal; }
.wb-sim-scene__metaval { color: var(--pf-color-text-secondary); }
.wb-sim-scene__pt {
  color: var(--pf-color-text-accent, inherit);
  font-size: var(--pf-typography-caption-size);
  white-space: nowrap;
  border: 1px solid var(--pf-color-accent);
  border-radius: 999px;
  padding: 0 7px;
  background: var(--pf-color-surface-selected);
}
/* Виды клеток объединённой доски: сыграна — зелёная кромка, в плане — золотая. */
.wb-sim-scene--played { border-left: 3px solid var(--pf-color-text-success); }
.wb-sim-scene--inplan { border-left: 3px solid var(--pf-color-accent); }
.wb-sim-scene__badge { white-space: nowrap; }
.wb-sim-scene--played > .wb-sim-scene__head > .wb-sim-scene__badge {
  color: var(--pf-color-text-success);
}
.wb-sim-scene--inplan > .wb-sim-scene__head > .wb-sim-scene__badge {
  color: var(--pf-color-text-accent);
}
/* Роль симуляции в шапке доски. */
.wb-sim-role {
  font-size: var(--pf-typography-caption-size);
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 0 9px;
  white-space: nowrap;
  color: var(--pf-color-text-secondary);
}
.wb-sim-role--main {
  color: var(--pf-color-text-accent);
  border-color: var(--pf-color-accent);
  background: var(--pf-color-surface-selected);
}
/* Поле «Играть с другой сцены…». */
.wb-sim-from { width: 90px; }
.wb-sim-board-head { align-items: baseline; gap: 10px; margin: 6px 0 2px; }

/* Состав запроса симуляции. */
.wb-sim-manifest { margin-top: 10px; }
.wb-sim-manifest__list { display: flex; flex-direction: column; gap: 2px; margin-top: 4px; }
.wb-sim-manifest__row {
  display: flex;
  gap: 7px;
  align-items: baseline;
  font-size: 12.5px;
  cursor: pointer;
}
.wb-sim-manifest__path { flex: 1 1 auto; word-break: break-all; }

/* Лента игры: мир — золотая кромка, решения автора — зелёная. */
.wb-sim-feed { display: flex; flex-direction: column; gap: 8px; }
.wb-sim-divider { text-align: center; letter-spacing: 0.06em; margin: 2px 0; }
.wb-sim-turn {
  border: 1px solid var(--pf-color-border-subtle);
  border-left: 3px solid var(--pf-color-accent);
  background: var(--pf-color-surface-selected);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 8px 12px;
  font-size: 13.5px;
  line-height: 1.55;
}
.wb-sim-turn--decision {
  border-left-color: var(--pf-color-text-success);
  background: var(--pf-color-surface-success-soft);
}
.wb-sim-turn--pending { opacity: 0.7; }
.wb-sim-turn__who { margin-bottom: 3px; }
.wb-sim-turn__text { white-space: pre-wrap; }
.wb-sim-turn__extra {
  margin-top: 6px;
  padding-top: 5px;
  border-top: 1px dashed var(--pf-color-border-medium);
  white-space: pre-wrap;
}
/* Блок «На доску» в ленте: подпись сверху, тело — серифом (как на доске). */
.wb-sim-turn__extra-title {
  display: block;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-size: 11px;
  margin-bottom: 2px;
}
.wb-sim-turn__extra-body {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-size: 13px;
  color: var(--pf-color-text-secondary);
  white-space: pre-wrap;
}

/* Панель хода — под лентой, как ввод в переписке. */
.wb-sim-move {
  border-top: 2px solid var(--pf-color-border-medium);
  margin-top: 8px;
  padding-top: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.wb-sim-move__head { align-items: baseline; gap: 10px; flex-wrap: wrap; }
.wb-sim-option {
  display: block;
  width: 100%;
  text-align: left;
  border: 1px solid var(--pf-color-border-medium);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-primary);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 8px 11px;
  font: inherit;
  font-size: 13.5px;
  line-height: 1.5;
  cursor: pointer;
  white-space: normal;
}
.wb-sim-option:hover:not(:disabled) { border-color: var(--pf-color-border-focus); }
.wb-sim-option:disabled { opacity: 0.55; cursor: default; }
.wb-sim-option__body { margin-top: 4px; white-space: pre-wrap; }
.wb-sim-own { min-height: 64px; resize: vertical; }

/* Лестница исправлений симуляции (этап 3). */
.wb-sim-editbox { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.wb-sim-scene__acts { display: inline-flex; gap: 4px; margin-left: auto; }
.wb-sim-confirm {
  border-top: 1px dashed var(--pf-color-border-medium);
  margin-top: 6px;
  padding-top: 6px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.wb-sim-cal__section { margin-top: 4px; letter-spacing: 0.05em; text-transform: uppercase; font-size: 10.5px; }
.wb-sim-cal__row { display: flex; gap: 6px; align-items: baseline; font-size: 12.5px; }
.wb-sim-cal__text { flex: 1 1 auto; }
.wb-sim-cal__context {
  border-left: 2px solid var(--pf-color-border-medium);
  margin: 2px 0 4px 6px;
  padding-left: 9px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.wb-sim-optwrap { position: relative; }
.wb-sim-optwrap__edit { position: absolute; top: 6px; right: 8px; }
.wb-sim-option--editing { cursor: default; }
.wb-sim-turn__who { display: flex; gap: 6px; align-items: baseline; }

/* --- З-10 (BETA-D-042): чат-помощник сцены — вкладка «Помощник». --- */

.wb-assist {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md);
  min-height: 0;
  height: 100%;
}
.wb-assist-feed {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  overflow-y: auto;
  min-height: 120px;
  flex: 1 1 auto;
}
.wb-assist-empty { color: var(--pf-color-text-muted); }
.wb-assist-turn {
  border: 1px solid var(--pf-color-border-subtle);
  border-left: 3px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-selected);
  padding: var(--pf-space-sm) var(--pf-space-md);
}
/* Реплики автора — тихая подложка успеха, как решения игрока в симуляции. */
.wb-assist-turn--author {
  background: var(--pf-color-surface-success-soft);
  border-left-color: var(--pf-color-surface-success);
}
.wb-assist-turn__who { display: flex; gap: var(--pf-space-sm); align-items: baseline; }
.wb-assist-turn__meta { margin-left: auto; white-space: nowrap; }
.wb-assist-turn__text { margin: 4px 0 0; white-space: pre-wrap; }
/* Подпись вместо пустой реплики: говорит программа, поэтому тихо и курсивом. */
.wb-assist-turn__text--silent { color: var(--pf-color-text-muted); font-style: italic; }
.wb-assist-turn__notice {
  margin-top: var(--pf-space-xs);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  border: 1px solid var(--pf-color-surface-warning);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-warning-soft);
  color: var(--pf-color-text-warning);
}
.wb-assist-thinking { display: flex; gap: var(--pf-space-sm); align-items: center; }
.wb-assist-compose {
  border-top: 1px solid var(--pf-color-border-medium);
  padding-top: var(--pf-space-sm);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
}
.wb-assist-compose__input { resize: vertical; min-height: 64px; }
.wb-assist-compose__row { flex-wrap: wrap; }

/* Карточки-предложения помощника (этап 2). */
.wb-assist-card {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-top: var(--pf-space-sm);
}
.wb-assist-card--dismissed { opacity: 0.6; }
.wb-assist-card__head { display: flex; gap: var(--pf-space-sm); align-items: baseline; flex-wrap: wrap; }
.wb-assist-card__title {
  color: var(--pf-color-text-primary);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-size: var(--pf-typography-caption-size);
}
.wb-assist-card__state { color: var(--pf-color-text-success); }
.wb-assist-card__state--quiet { color: var(--pf-color-text-muted); }
.wb-assist-card__why { margin: 4px 0 0; }
.wb-assist-card__body { margin: 6px 0 0; white-space: pre-wrap; }
.wb-assist-card__stale { color: var(--pf-color-text-warning); margin: 6px 0 0; }
/* Цена применения (снятие одобрения стадии) — предупреждением до кнопки. */
.wb-assist-card__warn { color: var(--pf-color-text-warning); margin: 6px 0 0; }
.wb-assist-card__row { margin-top: var(--pf-space-sm); flex-wrap: wrap; }
.wb-assist-diff {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  overflow: hidden;
  margin-top: 6px;
  font-family: var(--pf-typography-serif-family, Georgia, serif);
}
.wb-assist-diff__del {
  background: var(--pf-color-surface-danger-soft);
  color: var(--pf-color-text-muted);
  text-decoration: line-through;
  padding: 5px 9px;
  white-space: pre-wrap;
}
.wb-assist-diff__add {
  background: var(--pf-color-surface-success-soft);
  border-top: 1px dashed var(--pf-color-border-medium);
  padding: 5px 9px;
  white-space: pre-wrap;
}

/* Этап 3: значки диалога, фолд состава, галочка «весь сюжет». */
.wb-assist-mark { color: var(--pf-color-text-muted); font-size: 12px; }
.wb-assist-mark--running { color: var(--pf-color-text-accent); }
.wb-assist-fold {
  background: transparent;
  border: none;
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  cursor: pointer;
  padding: 0;
}
.wb-assist-fold:hover { color: var(--pf-color-text-primary); }
.wb-assist-fullplot { display: inline-flex; gap: 6px; align-items: center; }
.wb-assist-comp {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-sunken);
  padding: var(--pf-space-sm) var(--pf-space-md);
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.wb-assist-comp__row { display: flex; gap: var(--pf-space-sm); justify-content: space-between; }
.wb-assist-comp__size { font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ---------------------------------------------------------------------------
   Колонка помощника (замечание владельца 2026-08-15): разговор живёт своей
   колонкой стола и НЕ занимает панель «Чтение и правка» — та работает при
   нём в точности как без него. Своей половины чтения у помощника больше
   нет: материал и так стоит слева.
   --------------------------------------------------------------------------- */
.wb-col__body--assist { overflow: hidden; padding-bottom: var(--pf-space-sm); }

.wb-assist-talk {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md);
  min-width: 180px;
  min-height: 0;
}
/* Терминал в колонке помощника: высота — по месту, а не по экрану. */
.wb-term--assist { height: auto; flex: 1 1 auto; min-height: 220px; }

.wb-read {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md);
  min-height: 0;
}
.wb-read__head { flex-wrap: wrap; align-items: center; }
.wb-read__title { font-weight: 600; }
.wb-read__anchor {
  align-items: center;
  gap: var(--pf-space-sm);
  border-left: 2px solid var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
  border-radius: var(--pf-radius-sm);
  padding: 4px var(--pf-space-md);
}
.wb-read__p { margin: 0 0 0.9em; white-space: pre-wrap; }
.wb-read__p:last-child { margin-bottom: 0; }
/* Номера абзацев на полях страницы сцены (154-я): по ним привязываются
   кадры («после абзаца N»). Поле слева под номер; сам номер — мелко и
   приглушённо, чтобы не мешать чтению. */
.wb-page-text--numbered { padding-left: calc(var(--pf-space-lg) + 2.4em); }
.wb-page-text--numbered .wb-para { position: relative; }
.wb-para-no {
  position: absolute;
  right: 100%;
  top: 0.25em;
  margin-right: 0.7em;
  min-width: 1.6em;
  text-align: right;
  font-family: var(--pf-typography-body-family);
  font-size: var(--pf-typography-caption-size);
  font-weight: 400;
  font-style: normal;
  line-height: 1.4;
  color: var(--pf-color-text-muted);
  opacity: 0.75;
  user-select: none;
  white-space: nowrap;
}
/* Подсветка якоря-цитаты: размывка акцента с чертой снизу — как в эскизе. */
.wb-read__hl {
  background: var(--pf-color-surface-selected);
  color: inherit;
  border-bottom: 1px solid var(--pf-color-text-accent);
  border-radius: 2px;
  padding: 0 1px;
}

/* ===== Шлифовка сцены (З-17′, BETA-D-047) ===== */
/* Проза с пометками: текст живёт в pre-wrap, карточки — блоками. Ред. 4:
   проза редактируется на месте (contenteditable), позиции выделения и
   каретки считаются обходом текстовых узлов. */
.wb-polish-wrap { position: relative; }
.wb-polish-prose {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-size: 15px;
  line-height: 1.75;
  white-space: pre-wrap;
  user-select: text;
  padding: var(--pf-space-md);
  background: var(--pf-color-surface-raised);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
}
.wb-polish-prose:focus { outline: none; caret-color: var(--pf-color-text-accent); }
.wb-polish-frag {
  background: var(--pf-color-surface-selected);
  border-bottom: 2px solid var(--pf-color-text-accent);
}
.wb-polish-frag--pending { border-bottom-style: dashed; }
/* Выделение-кандидат (ред. 4, замечание 2.3): своя устойчивая подсветка —
   границы выбора видны до запуска, перерисовка её не гасит. */
.wb-polish-frag--sel {
  background: var(--pf-color-surface-selected);
  border-bottom: none;
  outline: 1px solid var(--pf-color-text-accent);
  border-radius: 2px;
}
.wb-polish-tag {
  display: inline-block;
  vertical-align: super;
  font-family: var(--pf-typography-sans-family, system-ui, sans-serif);
  font-size: 10px;
  font-weight: 600;
  color: var(--pf-color-text-accent);
  border: 1px solid var(--pf-color-text-accent);
  border-radius: 999px;
  padding: 0 6px;
  margin-left: 3px;
  white-space: nowrap;
  user-select: none;
}
.wb-polish-card {
  display: block;
  white-space: normal;
  font-family: var(--pf-typography-sans-family, system-ui, sans-serif);
  font-size: var(--pf-typography-body-size);
  margin: var(--pf-space-sm) 0;
  user-select: none;
}
.wb-polish-accepted { color: var(--pf-color-text-success); font-size: var(--pf-typography-caption-size); }
/* Чип пометки — кнопка: открыть варианты (З-028, после «Отклонить» к пометке можно вернуться). */
.wb-polish-tag--btn { cursor: pointer; }
.wb-polish-tag--btn:hover { background: var(--pf-color-surface-selected); }
.wb-polish-tag--btn:focus-visible { outline: 2px solid var(--pf-color-text-accent); outline-offset: 1px; }
.wb-polish-rejected { color: var(--pf-color-text-secondary); }

/* Маркер пометки — открывается сразу у выделения (ред. 4). Не шире
   обёртки прозы: у правого края его дожимает кламп в render
   (замечание владельца 2026-08-14). */
.wb-polish-marker {
  position: absolute;
  z-index: 31;
  max-width: min(720px, calc(100% - 12px));
  min-width: min(520px, 90%);
  background: var(--pf-color-surface-raised);
  border: 1px solid var(--pf-color-text-accent);
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-md);
  box-shadow: 0 8px 28px rgb(0 0 0 / 45%);
  font-family: var(--pf-typography-sans-family, system-ui, sans-serif);
  white-space: normal;
  user-select: none;
}
.wb-polish-marker__title {
  font-size: var(--pf-typography-caption-size);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-color-text-muted);
  margin-bottom: 6px;
}
.wb-polish-marker__quote {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-style: italic;
  color: var(--pf-color-text-muted);
  margin: 0 0 8px;
}
.wb-polish-marker__hint {
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
  margin-bottom: 6px;
}
/* Редактируемое «стало» карточки (ред. 4): правится до принятия. */
.wb-polish-add { cursor: text; user-select: text; }
.wb-polish-add:focus {
  outline: 1px dashed var(--pf-color-text-accent);
  outline-offset: -1px;
  caret-color: var(--pf-color-text-accent);
}
.wb-polish-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: var(--pf-space-sm); }
.wb-polish-chip {
  display: inline-flex;
  gap: 5px;
  align-items: baseline;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: var(--pf-color-surface-control);
  color: var(--pf-color-text-secondary);
  font-size: 12.5px;
  padding: 3px 11px;
  cursor: pointer;
}
.wb-polish-chip:hover {
  border-color: var(--pf-color-text-accent);
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
}
.wb-polish-chip__hint { color: var(--pf-color-text-muted); font-size: 11px; }
/* Просторное поле замечания — уточнение владельца BETA-D-047. */
.wb-polish-note { min-height: 84px; width: 100%; }

/* Строка поиска с заменой в режиме шлифовки (BETA-D-050 В-2а): одна
   строка по высоте, липнет к верху прокрутки колонки текста — переход
   по совпадениям не увозит её из вида (замечание владельца 2026-08-14). */
.wb-polish-find {
  position: sticky;
  top: 0;
  z-index: 6;
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  align-items: center;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-xs) var(--pf-space-sm);
  box-shadow: 0 4px 14px rgb(0 0 0 / 25%);
}
.wb-polish-find__field {
  padding: 4px 8px;
  font-size: var(--pf-typography-body-small-size);
}
.wb-polish-find__query { flex: 3 1 150px; min-width: 0; }
.wb-polish-find__replace { flex: 2 1 120px; min-width: 0; }
.wb-polish-find__count { flex: none; white-space: nowrap; }
.wb-polish-find__nav,
.wb-polish-find__case {
  flex: none;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-control);
  color: var(--pf-color-text-secondary);
  font-size: 12.5px;
  line-height: 1;
  padding: 5px 8px;
  cursor: pointer;
}
.wb-polish-find__nav:hover,
.wb-polish-find__case:hover {
  border-color: var(--pf-color-text-accent);
  color: var(--pf-color-text-accent);
}
.wb-polish-find__case--on {
  border-color: var(--pf-color-text-accent);
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
}
/* Бейдж принятой сцены: вместо полноширинной плашки (замечание владельца
   2026-08-14) — компактная метка в ряду над прозой; полный текст в title. */
.wb-polish-accepted-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  flex: none;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-muted);
  border: 1px solid var(--pf-color-border-medium);
  border-left: 3px solid var(--pf-color-surface-warning);
  border-radius: 999px;
  padding: 1px 9px;
  white-space: nowrap;
  cursor: help;
  user-select: none;
}
/* Подсветка совпадений — CSS Custom Highlight API: дерево прозы цело,
   contenteditable и смещения пометок не тревожатся. ::highlight принимает
   только цветовые свойства. */
::highlight(pf-polish-find) {
  background-color: color-mix(in srgb, var(--pf-color-text-accent) 22%, transparent);
}
::highlight(pf-polish-find-active) {
  background-color: color-mix(in srgb, var(--pf-color-text-accent) 55%, transparent);
  color: var(--pf-color-text-primary);
}

/* Плашка принятой сцены: цвет усиливает, слово несёт смысл (§8/§11). */
.wb-polish-banner {
  display: flex;
  gap: var(--pf-space-sm);
  align-items: baseline;
  border: 1px solid var(--pf-color-border-medium);
  border-left: 3px solid var(--pf-color-surface-warning);
  background: var(--pf-color-surface-warning-soft);
  border-radius: var(--pf-radius-sm);
  padding: var(--pf-space-sm) var(--pf-space-md);
  margin-bottom: var(--pf-space-sm);
}
.wb-polish-banner__ico { flex: none; }

/* Просмотр внешней правки (BETA-D-048, утверждение): добавленное
   подсвечено, убранное зачёркнуто; решение — кнопками под текстом. */
.wb-external-diff {
  border: 1px solid var(--pf-color-border-strong);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
  color: var(--pf-color-text-primary);
  font: inherit;
  font-size: var(--pf-typography-body-small-size);
  padding: var(--pf-space-md);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  overflow-y: auto;
  max-height: 60vh;
}
.wb-external-diff ins {
  text-decoration: none;
  background: var(--pf-color-surface-success-soft);
  color: var(--pf-color-text-success);
}
.wb-external-diff del {
  text-decoration: line-through;
  background: var(--pf-color-surface-danger-soft);
  color: var(--pf-color-text-danger);
}
.wb-external-error {
  margin: 0 0 var(--pf-space-sm);
  color: var(--pf-color-text-danger);
  font-size: var(--pf-typography-body-small-size);
}

/* Панель шлифовки в правой колонке. */
.wb-polish-panel { display: flex; flex-direction: column; gap: var(--pf-space-sm); }
.wb-polish-panel__foot { margin-top: auto; padding-top: var(--pf-space-sm); }
.wb-polish-markrow {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: 6px 9px;
}
.wb-polish-markrow__label {
  background: transparent;
  border: 1px solid var(--pf-color-text-accent);
  border-radius: 999px;
  color: var(--pf-color-text-accent);
  font-size: 12px;
  padding: 1px 9px;
  cursor: pointer;
}
.wb-polish-markrow__quote {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-style: italic;
  color: var(--pf-color-text-muted);
  font-size: 12.5px;
  margin: 3px 0 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.wb-polish-markrow__note { color: var(--pf-color-text-secondary); font-size: 12px; margin: 2px 0 0; }
.wb-polish-markrow__remove {
  background: transparent;
  border: none;
  color: var(--pf-color-text-muted);
  cursor: pointer;
  font-size: 12px;
  padding: 0 4px;
}
.wb-polish-markrow__remove:hover { color: var(--pf-color-text-danger); }

/* ===== Финализация романа (+C2, BETA-D-051) ===== */
/* Пункт навигации: золотая звезда + бейдж ожидающих предложений. */
.wb-dot--finalize { color: var(--pf-color-text-accent); border-color: var(--pf-color-text-accent); }
.wb-fin-navbadge {
  color: var(--pf-color-text-accent);
  border: 1px solid var(--pf-color-text-accent);
  border-radius: 999px;
  padding: 0 7px;
  font-variant-numeric: tabular-nums;
}
/* Знак «завершён» — шапка, список романов, панель романов. */
.wb-fin-pill {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  flex: none;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-success);
  border: 1px solid var(--pf-color-text-success);
  border-radius: 999px;
  padding: 1px 9px;
  white-space: nowrap;
  user-select: none;
}
/* Центр режима: заголовки-гармошки зон «Роман» и «Вычитка». */
.wb-fin-zone__head {
  display: flex;
  align-items: baseline;
  gap: var(--pf-space-sm);
  width: 100%;
  background: transparent;
  border: none;
  border-top: 1px solid var(--pf-color-border-subtle);
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: var(--pf-space-sm) 0 2px;
  cursor: pointer;
  text-align: left;
}
.wb-fin-zone__head:first-child { border-top: none; padding-top: 0; }
/* Ред. 2: заголовки зон больше не гармошка — обычные подписи. */
.wb-fin-zone__head--plain { cursor: default; flex: none; }
.wb-fin-zone__meta { margin-left: auto; text-transform: none; letter-spacing: normal; }
/* Оглавление романа. */
.wb-fin-toc { display: flex; flex-direction: column; gap: 4px; }
.wb-fin-row {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
}
.wb-fin-row--here { border-color: var(--pf-color-text-accent); background: var(--pf-color-surface-selected); }
.wb-fin-row__top { display: flex; align-items: stretch; width: 100%; }
/* Треугольник раскрытия карточки сцены (замечание владельца 4): своя
 * кнопка — прыжок к сцене и раскрытие больше не путаются в одном клике. */
.wb-fin-row__tw {
  flex: none;
  background: transparent;
  border: none;
  color: var(--pf-color-text-muted);
  font-size: 10px;
  line-height: 1;
  padding: 5px 2px 5px 6px;
  cursor: pointer;
}
.wb-fin-row__tw:hover { color: var(--pf-color-text-accent); }
.wb-fin-row__jump {
  display: flex;
  align-items: baseline;
  gap: 6px;
  flex: 1 1 auto;
  min-width: 0;
  background: transparent;
  border: none;
  color: var(--pf-color-text-primary);
  font-size: var(--pf-typography-body-small-size);
  padding: 5px 9px 5px 3px;
  cursor: pointer;
  text-align: left;
}
.wb-fin-row__no {
  color: var(--pf-color-text-muted);
  font-family: var(--pf-typography-mono-family, Consolas, monospace);
  font-size: 11px;
  font-weight: 600;
  flex: none;
}
.wb-fin-row__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-fin-row__suspect { flex: none; color: var(--pf-color-text-warning); }
.wb-fin-row__dots { flex: none; color: var(--pf-color-text-accent); font-size: 11px; white-space: nowrap; }
.wb-fin-row__size {
  margin-left: auto;
  flex: none;
  color: var(--pf-color-text-muted);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.wb-fin-row__beat { flex: none; color: var(--pf-color-text-accent); font-size: 11px; white-space: nowrap; }
/* Карточка сцены: план (д2), состав написания, формулировки точек. */
.wb-fin-row__card {
  border-top: 1px dashed var(--pf-color-border-subtle);
  padding: 4px 9px 6px;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.wb-fin-row__plan {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-style: italic;
  color: var(--pf-color-text-secondary);
  font-size: 12.5px;
  line-height: 1.45;
  margin: 0;
}
.wb-fin-row__meta {
  margin: 0;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--pf-color-text-muted);
}
.wb-fin-row__meta b { color: var(--pf-color-text-secondary); font-weight: 600; }
/* Тумблер «Роман завершён» и подвал центра. */
.wb-fin-toggle { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.wb-fin-finished { border-top: 1px solid var(--pf-color-border-subtle); padding-top: var(--pf-space-sm); }
.wb-fin-foot { margin-top: auto; padding-top: var(--pf-space-sm); }
/* Полотно: служебные разделители сцен и посценная проза. */
.wb-fin-banner { border-left-color: var(--pf-color-text-accent); background: var(--pf-color-surface-selected); }
/* Ред. 2: объяснение режима — одной строкой (замечание владельца 3). */
.wb-fin-strip {
  display: flex;
  align-items: center;
  gap: var(--pf-space-sm);
  border: 1px solid var(--pf-color-border-subtle);
  border-left: 3px solid var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
  border-radius: var(--pf-radius-sm);
  padding: 3px 10px;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-secondary);
}
.wb-fin-strip__ico { flex: none; color: var(--pf-color-text-accent); }
.wb-fin-strip__q {
  flex: none;
  width: 17px;
  height: 17px;
  border: 1px solid var(--pf-color-border-strong, var(--pf-color-border-subtle));
  border-radius: 50%;
  text-align: center;
  line-height: 15px;
  font-size: 11px;
  color: var(--pf-color-text-muted);
  cursor: help;
}
/* Подпись сцены в полотне: объём, состав, ключевые точки. */
.wb-fin-scene__sub {
  margin: 0 0 10px;
  text-align: center;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--pf-color-text-muted);
}
/* Правая колонка режима (ред. 2): вычитка сверху, помощник под ней. */
.wb-col--fin-side .wb-col__body { display: flex; flex-direction: column; gap: var(--pf-space-sm); }
.wb-fin-review {
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex: none;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  padding-bottom: var(--pf-space-sm);
}
.wb-fin-side__talk { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; }
.wb-fin-side__talk .wb-assist { min-height: 0; flex: 1 1 auto; }
.wb-fin-canvas { display: flex; flex-direction: column; }
.wb-fin-break {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: var(--pf-space-md) 0 var(--pf-space-sm);
  color: var(--pf-color-text-muted);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.wb-fin-break::before,
.wb-fin-break::after {
  content: '';
  flex: 1;
  border-top: 1px solid var(--pf-color-border-subtle);
}
.wb-fin-break__pin {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: var(--pf-color-surface-canvas);
  padding: 2px 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 70%;
}
.wb-fin-prose {
  font-family: var(--pf-typography-serif-family, Georgia, serif);
  font-size: 15px;
  line-height: 1.75;
  white-space: pre-wrap;
  user-select: text;
  padding: var(--pf-space-md);
  background: var(--pf-color-surface-raised);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
}
/* Перевод строки внутри абзаца вёрстки Gutenberg — пробелом (письмо Studio 12.10 п. 2). */
.wb-fin-soft-nl {
  white-space: normal;
}
.wb-fin-placeholder {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-top: var(--pf-space-lg);
  color: var(--pf-color-text-muted);
  font-size: var(--pf-typography-caption-size);
  background: var(--pf-color-surface-raised);
  border: 1px dashed var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
}

/* Окно «Массовое согласование» (+C2 этап 3, эскиз карточка 3). */
.wb-mass-overlay { max-width: 880px; }
.wb-mass-task { width: 100%; resize: vertical; }
.wb-mass-ready { font-weight: 600; }
.wb-mass-scenes { display: flex; flex-direction: column; gap: 4px; }
.wb-mass-scene {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
}
.wb-mass-scene__head {
  display: flex;
  align-items: baseline;
  gap: 7px;
  width: 100%;
  background: transparent;
  border: none;
  color: var(--pf-color-text-primary);
  font-size: var(--pf-typography-body-small-size);
  padding: 5px 9px;
  cursor: pointer;
  text-align: left;
}
.wb-mass-scene__no {
  color: var(--pf-color-text-muted);
  font-family: var(--pf-typography-mono-family, Consolas, monospace);
  font-size: 11px;
  font-weight: 600;
  flex: none;
}
.wb-mass-scene__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-mass-scene__caret { margin-left: auto; flex: none; color: var(--pf-color-text-muted); }
.wb-mass-scene__body {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md);
  border-top: 1px dashed var(--pf-color-border-subtle);
  padding: var(--pf-space-sm) 9px var(--pf-space-md);
}
.wb-mass-edit { display: flex; flex-direction: column; gap: 6px; }
.wb-mass-edit--stale { opacity: 0.6; }
.wb-mass-applied { color: var(--pf-color-text-success); }
.wb-mass-canon__title { margin: var(--pf-space-sm) 0 0; }
.wb-mass-canon__card {
  display: flex;
  flex-direction: column;
  gap: 6px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-sm) 9px var(--pf-space-md);
}
.wb-mass-canon__name { font-weight: 600; margin: 0; }
.wb-mass-report {
  white-space: pre-wrap;
  color: var(--pf-color-text-secondary);
  font-size: var(--pf-typography-body-small-size);
  border-left: 2px solid var(--pf-color-border-subtle);
  padding-left: var(--pf-space-md);
  margin: 0;
}
.wb-mass-report__title { margin-bottom: 0; }
.wb-mass-foot { margin-top: var(--pf-space-sm); }

/* Сплошная вычитка (+C2 этап 4): чипы фокусов и замечание прогону. */
.wb-fin-proof-focuses { flex-wrap: wrap; gap: 6px; }
.wb-fin-focus {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: transparent;
  color: var(--pf-color-text-secondary);
  font-size: var(--pf-typography-caption-size);
  padding: 3px 10px;
  cursor: pointer;
}
.wb-fin-focus--on {
  border-color: var(--pf-color-text-accent);
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
}
.wb-fin-proof-note { width: 100%; resize: vertical; }

/* ===== Аналитика романа («Рентген романа», BETA-D-054, этап 1) ===== */
/* Палитра героев: 8 постоянных цветов (категориальной палитры в токенах
   пока нет); тёмные темы — умолчание, светлая переопределяет. Идентичность
   не только цветом: у строк полотна есть имена (§11). */
:root,
:root[data-theme='graphite'] {
  --wb-anx-h0: #c98212;
  --wb-anx-h1: #6b8cd9;
  --wb-anx-h2: #3e9e77;
  --wb-anx-h3: #c06bb0;
  --wb-anx-h4: #4fa3b8;
  --wb-anx-h5: #c4635a;
  --wb-anx-h6: #8a7bd8;
  --wb-anx-h7: #9a9e4e;
}
:root[data-theme='light'] {
  --wb-anx-h0: #b07207;
  --wb-anx-h1: #5b7fd4;
  --wb-anx-h2: #2e8c68;
  --wb-anx-h3: #b75fa6;
  --wb-anx-h4: #2e7f94;
  --wb-anx-h5: #b04a42;
  --wb-anx-h6: #6f5fc4;
  --wb-anx-h7: #7a7e33;
}
.wb-anx-note { margin: 4px 0 10px; }
.wb-anx-tablewrap {
  /* Прокрутка обеих осей внутри контейнера — иначе закреплённые подписи
     (BETA-D-065 п. 4) не липнут при прокрутке страницы. */
  overflow: auto;
  max-height: max(320px, calc(100vh - 340px));
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
}
/* separate вместо collapse: у collapsed-таблиц границы «уезжают» от
   закреплённых ячеек при прокрутке. */
.wb-anx-table { border-collapse: separate; border-spacing: 0; width: 100%; font-size: 13px; }
.wb-anx-table th {
  text-align: left;
  padding: 8px 10px;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  color: var(--pf-color-text-secondary);
  font-weight: 600;
  white-space: nowrap;
  /* Шапка закреплена (BETA-D-065 п. 4). */
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--pf-color-surface-raised);
}
.wb-anx-table td {
  padding: 7px 10px;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  vertical-align: top;
}
.wb-anx-table tr:last-child td { border-bottom: none; }
/* Подписи строк — № и название сцены — закреплены слева (BETA-D-065 п. 4).
   Ширина первой колонки фиксирована: от неё считается left второй. */
.wb-anx-table th:first-child,
.wb-anx-table td:first-child {
  position: sticky;
  left: 0;
  width: 56px;
  min-width: 56px;
  max-width: 56px;
  box-sizing: border-box;
  background: var(--pf-color-surface-raised);
}
.wb-anx-table th:nth-child(2),
.wb-anx-table td:nth-child(2) {
  position: sticky;
  left: 56px;
  background: var(--pf-color-surface-raised);
  border-right: 1px solid var(--pf-color-border-subtle);
}
.wb-anx-table th:first-child,
.wb-anx-table th:nth-child(2) { z-index: 4; }
.wb-anx-table td:first-child,
.wb-anx-table td:nth-child(2) { z-index: 2; }
.wb-anx-num { color: var(--pf-color-text-secondary); font-variant-numeric: tabular-nums; }
.wb-anx-title { min-width: 160px; }
/* Свод нитей: первая колонка — НАЗВАНИЕ нити, не «№». Общая ширина 56px ей
   не подходит (название ужималось уже колонки «Тип» — замечание владельца
   2026-08-16): колонке своя ширина, закрепление слева остаётся только у неё;
   «Тип» едет вместе с таблицей. */
.wb-anx-table--threads th:first-child,
.wb-anx-table--threads td:first-child {
  width: auto;
  min-width: 220px;
  max-width: 340px;
  border-right: 1px solid var(--pf-color-border-subtle);
}
.wb-anx-table--threads th:nth-child(2) {
  left: auto;
  border-right: none;
}
.wb-anx-table--threads td:nth-child(2) {
  position: static;
  border-right: none;
  background: transparent;
}
/* Колонка «Упомянутые» — приглушена: справка, не состав сцены. */
.wb-anx-people--mention .wb-anx-person { color: var(--pf-color-text-muted); }
.wb-anx-nofacts {
  margin-left: 8px;
  font-size: 11px;
  color: var(--pf-color-text-secondary);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  padding: 0 6px;
  white-space: nowrap;
}
.wb-anx-chars { min-width: 96px; }
.wb-anx-charsnum { font-variant-numeric: tabular-nums; }
.wb-anx-bar {
  height: 4px;
  border-radius: 2px;
  background: var(--pf-color-border-subtle);
  margin-top: 4px;
  min-width: 72px;
}
.wb-anx-bar__fill { height: 100%; border-radius: 2px; background: var(--pf-color-surface-accent); }
/* Герои и места — столбиком: имена через точку читались кашей
 * (замечание владельца 2026-08-14). */
.wb-anx-person { display: block; white-space: nowrap; }
.wb-anx-person--pov { font-weight: 600; }
/* «Время» из хроники — фраза; без запаса ширины ломалась на 5 строк. */
.wb-anx-time { min-width: 240px; color: var(--pf-color-text-secondary); }
.wb-anx-shift { text-align: center; font-variant-numeric: tabular-nums; }
.wb-anx-shift--up { color: var(--pf-color-text-success); }
.wb-anx-shift--down { color: var(--pf-color-text-danger); }
.wb-anx-signals { text-align: center; font-variant-numeric: tabular-nums; white-space: nowrap; }
/* Балл — главный показатель (замечание владельца 2026-08-14): последняя
 * колонка, золотая пилюля, заголовок в цвет акцента. */
.wb-anx-score { text-align: center; }
.wb-anx-score-h { color: var(--pf-color-text-accent); }
.wb-anx-score__pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 30px;
  height: 24px;
  padding: 0 8px;
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-accent);
  color: var(--pf-color-text-inverse);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
/* Номер сцены — пилюля с курсором подсказки (номера сливались в одно
 * число, и не было видно, что на них можно навести). */
.wb-anx-no {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 26px;
  height: 22px;
  padding: 0 6px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-canvas);
  font-variant-numeric: tabular-nums;
  cursor: help;
}
.wb-anx-num, .wb-anx-title { cursor: help; }
/* Кривая напряжения (BETA-D-055): золотая линия с областью под ней. */
.wb-anx-curve-grid { stroke: var(--pf-color-border-subtle); stroke-width: 1; }
.wb-anx-curve-line {
  stroke: var(--pf-color-surface-accent);
  stroke-width: 2.5;
  fill: none;
  stroke-linecap: round;
}
.wb-anx-curve-dot {
  fill: var(--pf-color-surface-accent);
  stroke: var(--pf-color-surface-canvas);
  stroke-width: 1.5;
}
/* Точка отсчёта у левого края — полая: это начало романа, а не сцена. */
.wb-anx-curve-dot--start {
  fill: var(--pf-color-surface-canvas);
  stroke: var(--pf-color-surface-accent);
  cursor: help;
}
.wb-anx-curve-flash { font-size: 12px; cursor: help; }
/* Ключевая точка замысла: ★ у названия сцены, крупная полая точка на кривой (эскиз ред. 1). */
.wb-anx-key { color: var(--pf-color-text-accent); margin-left: 6px; cursor: help; }
.wb-anx-curve-dot--key {
  fill: var(--pf-color-surface-canvas);
  stroke: var(--pf-color-text-accent);
  stroke-width: 2.5;
  cursor: help;
}
/* Кружки номеров сцен в SVG (полотно и кривая). */
.wb-anx-nobadge { cursor: help; }
.wb-anx-nocirc { fill: var(--pf-color-surface-canvas); stroke: var(--pf-color-border-medium); }
.wb-anx-nonum { font-size: 10px; }
/* Напряжение по плану (BETA-D-063): пунктирная линия-проект, точки плана
 * (цель автора крупнее), граница «дальше — план», бледные кружки будущих
 * сцен. Пунктир лежит ПОД сплошной линией факта. */
.wb-anx-curve-planline {
  stroke: var(--pf-color-text-accent);
  stroke-width: 2;
  fill: none;
  stroke-linecap: round;
  stroke-dasharray: 7 6;
  opacity: 0.85;
}
.wb-anx-curve-plandot {
  fill: var(--pf-color-surface-canvas);
  stroke: var(--pf-color-text-accent);
  stroke-width: 1.5;
  cursor: help;
}
.wb-anx-curve-plandot--manual { fill: var(--pf-color-text-accent); }
.wb-anx-curve-border { stroke: var(--pf-color-border-medium); stroke-dasharray: 3 5; }
.wb-anx-curve-bordertext { fill: var(--pf-color-text-secondary); }
.wb-anx-nobadge--future { opacity: 0.55; }
/* Колонка «План»: компактный выбор сдвига + происхождение значения. */
.wb-anx-plan { text-align: center; white-space: nowrap; }
.wb-anx-plansel {
  min-width: 58px;
  height: 24px;
  padding: 0 4px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-canvas);
  color: var(--pf-color-text-primary);
  font: inherit;
  font-variant-numeric: tabular-nums;
}
.wb-anx-plan--diverge { background: var(--pf-color-surface-warning-soft); }
.wb-anx-planorigin { margin-left: 5px; font-size: 11px; color: var(--pf-color-text-muted); cursor: help; }
.wb-anx-planorigin--manual { color: var(--pf-color-text-accent); }
/* Будущие сцены плана — бледные строки с пометкой у названия. */
.wb-anx-row--plan td { color: var(--pf-color-text-secondary); }
.wb-anx-plandash { text-align: center; color: var(--pf-color-text-muted); }
.wb-anx-planmark { margin-left: 6px; font-size: 11px; color: var(--pf-color-text-muted); }
/* Кнопки прогноза и принятия целей над таблицей. */
.wb-anx-planbar { align-items: center; gap: 10px; margin: 2px 0 8px; flex-wrap: wrap; }
.wb-anx-planerr { color: var(--pf-color-text-danger); margin: 0 0 6px; }
/* Тумблер «План» в шапке кривой — правым краем. */
.wb-anx-plantoggle { margin-left: auto; }
/* Вкладки видов аналитики (замечание владельца 2026-08-14): пилюля
 * держит свою ширину, не растягиваясь правилом центральной колонки. */
.wb-seg.wb-anx-tabs { width: fit-content; margin-bottom: 4px; }
/* Общая капсула сегмента-переключателя, как в эскизе карты (замечание
 * владельца 2026-08-15): имя .wb-seg носит и сегмент строки состояния
 * (border 0, прозрачный фон) — его правила объявлены позже пилюли шапки
 * и съедали обводку. Модификатор возвращает капсулу по каскаду. */
.wb-seg--pill {
  display: inline-flex;
  gap: 2px;
  padding: 2px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-canvas);
  cursor: default;
}
/* Дозаполнение фактов (этап 1б): кнопка с подсказкой одной строкой. */
.wb-anx-backfill { align-items: center; gap: 10px; margin: 2px 0 8px; }
.wb-anx-presencehead { margin-top: 4px; }
.wb-anx-presence {
  overflow-x: auto;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: 10px 8px;
}
.wb-anx-presence svg { display: block; }
/* Полотно присутствия — сетка из четырёх SVG с закреплёнными подписями
   (BETA-D-065 п. 4): имена липнут слева, номера сцен — сверху; прокрутка
   обеих осей — внутри контейнера. */
.wb-anx-presence--grid {
  overflow: auto;
  max-height: max(320px, calc(100vh - 320px));
  padding: 0;
}
.wb-anx-presencegrid {
  display: inline-grid;
  grid-template-columns: auto auto;
  padding: 6px 8px 8px 0;
}
.wb-anx-pgcorner {
  position: sticky;
  top: 0;
  left: 0;
  z-index: 3;
  background: var(--pf-color-surface-raised);
}
.wb-anx-pgtop {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--pf-color-surface-raised);
}
.wb-anx-pgnames {
  position: sticky;
  left: 0;
  z-index: 1;
  background: var(--pf-color-surface-raised);
}
/* Упомянутый герой в режиме «все упоминания» — полый кружок цвета героя. */
.wb-anx-dot--mention { fill: none; stroke-width: 1.5; }
.wb-anx-dot--mention.wb-anx-h0 { fill: none; stroke: var(--wb-anx-h0); }
.wb-anx-dot--mention.wb-anx-h1 { fill: none; stroke: var(--wb-anx-h1); }
.wb-anx-dot--mention.wb-anx-h2 { fill: none; stroke: var(--wb-anx-h2); }
.wb-anx-dot--mention.wb-anx-h3 { fill: none; stroke: var(--wb-anx-h3); }
.wb-anx-dot--mention.wb-anx-h4 { fill: none; stroke: var(--wb-anx-h4); }
.wb-anx-dot--mention.wb-anx-h5 { fill: none; stroke: var(--wb-anx-h5); }
.wb-anx-dot--mention.wb-anx-h6 { fill: none; stroke: var(--wb-anx-h6); }
.wb-anx-dot--mention.wb-anx-h7 { fill: none; stroke: var(--wb-anx-h7); }
.wb-anx-axis { font-size: 10px; fill: var(--pf-color-text-secondary); }
.wb-anx-name { font-size: 12px; fill: var(--pf-color-text-primary); }
.wb-anx-name--main { font-weight: 600; }
.wb-anx-ring { fill: none; stroke-width: 1.5; }
.wb-anx-dot.wb-anx-h0 { fill: var(--wb-anx-h0); }
.wb-anx-dot.wb-anx-h1 { fill: var(--wb-anx-h1); }
.wb-anx-dot.wb-anx-h2 { fill: var(--wb-anx-h2); }
.wb-anx-dot.wb-anx-h3 { fill: var(--wb-anx-h3); }
.wb-anx-dot.wb-anx-h4 { fill: var(--wb-anx-h4); }
.wb-anx-dot.wb-anx-h5 { fill: var(--wb-anx-h5); }
.wb-anx-dot.wb-anx-h6 { fill: var(--wb-anx-h6); }
.wb-anx-dot.wb-anx-h7 { fill: var(--wb-anx-h7); }
.wb-anx-ring.wb-anx-h0 { stroke: var(--wb-anx-h0); }
.wb-anx-ring.wb-anx-h1 { stroke: var(--wb-anx-h1); }
.wb-anx-ring.wb-anx-h2 { stroke: var(--wb-anx-h2); }
.wb-anx-ring.wb-anx-h3 { stroke: var(--wb-anx-h3); }
.wb-anx-ring.wb-anx-h4 { stroke: var(--wb-anx-h4); }
.wb-anx-ring.wb-anx-h5 { stroke: var(--wb-anx-h5); }
.wb-anx-ring.wb-anx-h6 { stroke: var(--wb-anx-h6); }
.wb-anx-ring.wb-anx-h7 { stroke: var(--wb-anx-h7); }
/* «Ружья на стене» (BETA-D-054 этап 2): полотно нитей и свод. Закрытая
 * нить — спокойная линия с золотой ✦ развязки; висящая — тревожный пунктир
 * с «?» за краем сцен. */
.wb-anx-thread { cursor: help; }
.wb-anx-thread-line {
  stroke: var(--pf-color-text-secondary);
  stroke-width: 2;
  stroke-linecap: round;
}
.wb-anx-thread-line--hang { stroke: var(--pf-color-text-danger); stroke-dasharray: 5 4; }
.wb-anx-thread-setup {
  fill: var(--pf-color-surface-raised);
  stroke: var(--pf-color-text-primary);
  stroke-width: 1.8;
}
.wb-anx-thread-payoff { font-size: 16px; fill: var(--pf-color-surface-accent); }
.wb-anx-thread-q { fill: none; stroke: var(--pf-color-text-danger); stroke-width: 1.5; }
.wb-anx-thread-qmark { font-size: 12px; font-weight: 700; fill: var(--pf-color-text-danger); }
.wb-anx-thread-name--hang { fill: var(--pf-color-text-danger); }
/* Кружок номера сцены — кнопка перехода к сцене (обещание эскиза). */
.wb-anx-no--btn { cursor: pointer; background: transparent; color: inherit; font: inherit; }
.wb-anx-no--btn:hover:not(:disabled) {
  border-color: var(--pf-color-border-focus);
  color: var(--pf-color-text-accent);
}
.wb-anx-no--btn:disabled { cursor: default; }
/* «Висит к финалу»: незакрытые обещания читателю. */
.wb-anx-hang {
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: 4px 14px;
  margin: 4px 0 8px;
}
.wb-anx-hang__row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 7px 0;
  border-bottom: 1px dashed var(--pf-color-border-subtle);
  font-size: 13px;
}
.wb-anx-hang__row:last-child { border-bottom: none; }
.wb-anx-hang__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--pf-color-text-danger);
  flex: none;
}
.wb-anx-hang__title { font-weight: 600; cursor: help; }
.wb-anx-hangpill {
  display: inline-flex;
  align-items: center;
  height: 22px;
  padding: 0 9px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  color: var(--pf-color-text-danger);
  font-size: 12px;
  white-space: nowrap;
}
/* Свод отстал от романа: новые сцены ещё не учтены. */
.wb-anx-threads-stale {
  border: 1px solid var(--pf-color-surface-warning);
  background: var(--pf-color-surface-warning-soft);
  color: var(--pf-color-text-warning);
  border-radius: var(--pf-radius-sm);
  padding: 6px 12px;
  font-size: 13px;
  margin: 2px 0 8px;
  max-width: 640px;
}
.wb-anx-threads-res { min-width: 240px; color: var(--pf-color-text-secondary); }
/* «Карта метро героев» (BETA-D-054 этап 3): полосы — локации, линии —
 * герои в палитре полотна, капсула — совместная сцена. */
.wb-anx-metrorow { align-items: center; gap: 10px; flex-wrap: wrap; margin: 2px 0 8px; }
.wb-anx-mloc--unknown { fill: var(--pf-color-text-secondary); }
.wb-anx-mgrip { font-size: 11px; fill: var(--pf-color-text-secondary); cursor: grab; }
.wb-anx-mline { fill: none; stroke-linecap: round; stroke-width: 2.4; }
.wb-anx-mline--main { stroke-width: 3.5; }
.wb-anx-mline.wb-anx-h0 { stroke: var(--wb-anx-h0); }
.wb-anx-mline.wb-anx-h1 { stroke: var(--wb-anx-h1); }
.wb-anx-mline.wb-anx-h2 { stroke: var(--wb-anx-h2); }
.wb-anx-mline.wb-anx-h3 { stroke: var(--wb-anx-h3); }
.wb-anx-mline.wb-anx-h4 { stroke: var(--wb-anx-h4); }
.wb-anx-mline.wb-anx-h5 { stroke: var(--wb-anx-h5); }
.wb-anx-mline.wb-anx-h6 { stroke: var(--wb-anx-h6); }
.wb-anx-mline.wb-anx-h7 { stroke: var(--wb-anx-h7); }
.wb-anx-mst { stroke: var(--pf-color-surface-raised); stroke-width: 1.5; cursor: help; }
/* Кружок сцены на карте — переход к сцене. */
.wb-anx-nobadge--btn { cursor: pointer; }
/* «Присутствие» компактно (BETA-D-173 Э3): полоса мест над полотном,
 * портрет 36 px в строке, счётчик сцен, свёрнутая группа остальных,
 * форма точки — роль (◉ его глазами · ● в сцене · • второй план · ○ упомянут). */
.wb-anx-pbandrect { opacity: 0.55; }
.wb-anx-pband.wb-anx-h0 .wb-anx-pbandrect { fill: var(--wb-anx-h0); }
.wb-anx-pband.wb-anx-h1 .wb-anx-pbandrect { fill: var(--wb-anx-h1); }
.wb-anx-pband.wb-anx-h2 .wb-anx-pbandrect { fill: var(--wb-anx-h2); }
.wb-anx-pband.wb-anx-h3 .wb-anx-pbandrect { fill: var(--wb-anx-h3); }
.wb-anx-pband.wb-anx-h4 .wb-anx-pbandrect { fill: var(--wb-anx-h4); }
.wb-anx-pband.wb-anx-h5 .wb-anx-pbandrect { fill: var(--wb-anx-h5); }
.wb-anx-pband.wb-anx-h6 .wb-anx-pbandrect { fill: var(--wb-anx-h6); }
.wb-anx-pband.wb-anx-h7 .wb-anx-pbandrect { fill: var(--wb-anx-h7); }
.wb-anx-pbandlabel { font-size: 10px; font-weight: 600; fill: var(--pf-color-text-primary); pointer-events: none; }
.wb-anx-pcount { font-size: 10px; fill: var(--pf-color-text-secondary); }
.wb-anx-dot--bg { opacity: 0.85; }
.wb-anx-presinit { stroke: var(--pf-color-surface-canvas); stroke-width: 2; }
.wb-anx-presinit.wb-anx-h0 { fill: var(--wb-anx-h0); }
.wb-anx-presinit.wb-anx-h1 { fill: var(--wb-anx-h1); }
.wb-anx-presinit.wb-anx-h2 { fill: var(--wb-anx-h2); }
.wb-anx-presinit.wb-anx-h3 { fill: var(--wb-anx-h3); }
.wb-anx-presinit.wb-anx-h4 { fill: var(--wb-anx-h4); }
.wb-anx-presinit.wb-anx-h5 { fill: var(--wb-anx-h5); }
.wb-anx-presinit.wb-anx-h6 { fill: var(--wb-anx-h6); }
.wb-anx-presinit.wb-anx-h7 { fill: var(--wb-anx-h7); }
.wb-anx-presinittext { font-size: 15px; font-weight: 700; fill: var(--pf-color-surface-canvas); pointer-events: none; }
.wb-anx-pgroup { cursor: pointer; }
.wb-anx-pgrouprect { fill: var(--pf-color-surface-control); opacity: 0.6; }
.wb-anx-pgroup:hover .wb-anx-pgrouprect { opacity: 1; }
.wb-anx-pgrouptext { font-size: 12px; fill: var(--pf-color-text-secondary); }
.wb-anx-pgroupnum { font-size: 11px; fill: var(--pf-color-text-secondary); cursor: help; }
/* «Метро» одной осью (Э3): полоса места — тон места, «вагончик» — портрет на
 * входе героя в место, пунктир — за кадром, тонкая нить — не главный герой. */
.wb-anx-mbandbox { fill-opacity: 0.1; stroke-opacity: 0.35; stroke-width: 1; }
/* Картинка места в начале полосы метро (замечание владельца 04.09). */
.wb-anx-mbandimg { pointer-events: none; }
.wb-anx-mbandbox.wb-anx-h0 { fill: var(--wb-anx-h0); stroke: var(--wb-anx-h0); }
.wb-anx-mbandbox.wb-anx-h1 { fill: var(--wb-anx-h1); stroke: var(--wb-anx-h1); }
.wb-anx-mbandbox.wb-anx-h2 { fill: var(--wb-anx-h2); stroke: var(--wb-anx-h2); }
.wb-anx-mbandbox.wb-anx-h3 { fill: var(--wb-anx-h3); stroke: var(--wb-anx-h3); }
.wb-anx-mbandbox.wb-anx-h4 { fill: var(--wb-anx-h4); stroke: var(--wb-anx-h4); }
.wb-anx-mbandbox.wb-anx-h5 { fill: var(--wb-anx-h5); stroke: var(--wb-anx-h5); }
.wb-anx-mbandbox.wb-anx-h6 { fill: var(--wb-anx-h6); stroke: var(--wb-anx-h6); }
.wb-anx-mbandbox.wb-anx-h7 { fill: var(--wb-anx-h7); stroke: var(--wb-anx-h7); }
.wb-anx-mbandname { font-size: 11px; font-weight: 600; fill: var(--pf-color-text-primary); pointer-events: none; paint-order: stroke; stroke: var(--pf-color-surface-raised); stroke-width: 3px; stroke-linejoin: round; }
.wb-anx-moff { font-size: 10.5px; fill: var(--pf-color-text-secondary); }
.wb-anx-mgroupline { stroke: var(--pf-color-border-subtle); stroke-width: 1; opacity: 0.7; }
.wb-anx-mline--minor { stroke-width: 1.6; opacity: 0.6; }
.wb-anx-mline--off { stroke-width: 1.3; opacity: 0.4; stroke-dasharray: 4 5; }
.wb-anx-mtok { cursor: help; }
.wb-anx-mtokring { fill: none; stroke: transparent; stroke-width: 2.5; }
.wb-anx-mtok--pov .wb-anx-mtokring { stroke: var(--pf-color-surface-accent); }
.wb-anx-mtokbody { stroke: var(--pf-color-surface-canvas); stroke-width: 2; }
.wb-anx-mtok.wb-anx-h0 .wb-anx-mtokbody { fill: var(--wb-anx-h0); }
.wb-anx-mtok.wb-anx-h1 .wb-anx-mtokbody { fill: var(--wb-anx-h1); }
.wb-anx-mtok.wb-anx-h2 .wb-anx-mtokbody { fill: var(--wb-anx-h2); }
.wb-anx-mtok.wb-anx-h3 .wb-anx-mtokbody { fill: var(--wb-anx-h3); }
.wb-anx-mtok.wb-anx-h4 .wb-anx-mtokbody { fill: var(--wb-anx-h4); }
.wb-anx-mtok.wb-anx-h5 .wb-anx-mtokbody { fill: var(--wb-anx-h5); }
.wb-anx-mtok.wb-anx-h6 .wb-anx-mtokbody { fill: var(--wb-anx-h6); }
.wb-anx-mtok.wb-anx-h7 .wb-anx-mtokbody { fill: var(--wb-anx-h7); }
.wb-anx-mtoktext { font-size: 13px; font-weight: 700; fill: var(--pf-color-surface-canvas); pointer-events: none; }
/* Карта-диорама (BETA-D-173 Э4): картинка места по верхней грани плитки,
 * затемнение под подпись, «Нарисовать» у места без образа; картинка места в
 * карточке сцены «Напряжения». */
.wb-anx-dtile-img { pointer-events: none; opacity: 0.94; }
.wb-anx-dtile-shade { fill: var(--pf-color-surface-canvas); opacity: 0.34; pointer-events: none; }
.wb-anx-ptile--img .wb-anx-ptilename { fill: var(--pf-color-text-primary); }
.wb-anx-dtile-draw { font-size: 10.5px; fill: var(--pf-color-text-secondary); cursor: pointer; text-decoration: underline; }
.wb-anx-dtile-draw:hover { fill: var(--pf-color-text-primary); }
.wb-anx-tn-card__placebox { margin: 4px 0 6px; }
.wb-anx-tn-card__placeimg { display: block; width: 100%; max-height: 132px; object-fit: cover; border-radius: 8px; }
/* Состав героев (BETA-D-173 Э1): одна строка портретов главных на все
 * режимы анализа + свёрнутый бокс «ещё N» с поиском и чипами остальных. */
.wb-anx-cast {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 2px 0 8px;
  padding: 6px 10px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-lg, 10px);
  background: var(--pf-color-surface-canvas);
}
.wb-anx-cast__label {
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-color-text-muted);
  margin-right: 2px;
}
.wb-anx-cast__hero.wb-anx-mchip {
  height: auto;
  padding: 3px 10px 3px 4px;
  gap: 8px;
  font-size: 12.5px;
}
/* Портрет в составе — как аватарка списка канона, 48 px (замечание
 * владельца 03.09, L-352: 34 px «очень мелко»). */
.wb-anx-cast__hero .wb-avatar,
.wb-anx-cast__hero .wb-anx-cast__initial--cast {
  width: 48px;
  height: 48px;
  border-width: 2px;
}
.wb-anx-cast__initial {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  flex: none;
  font-weight: 600;
  color: var(--pf-color-surface-canvas);
}
.wb-anx-cast__initial--cast { width: 48px; height: 48px; font-size: 19px; }
.wb-anx-cast__initial--chip { width: 16px; height: 16px; font-size: 9px; }
.wb-anx-cast__initial.wb-anx-h0 { background: var(--wb-anx-h0); }
.wb-anx-cast__initial.wb-anx-h1 { background: var(--wb-anx-h1); }
.wb-anx-cast__initial.wb-anx-h2 { background: var(--wb-anx-h2); }
.wb-anx-cast__initial.wb-anx-h3 { background: var(--wb-anx-h3); }
.wb-anx-cast__initial.wb-anx-h4 { background: var(--wb-anx-h4); }
.wb-anx-cast__initial.wb-anx-h5 { background: var(--wb-anx-h5); }
.wb-anx-cast__initial.wb-anx-h6 { background: var(--wb-anx-h6); }
.wb-anx-cast__initial.wb-anx-h7 { background: var(--wb-anx-h7); }
.wb-anx-cast__chip.wb-anx-mchip { padding-left: 3px; }
.wb-anx-cast__more { margin-left: auto; }
.wb-anx-cast__box {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 8px;
  border-top: 1px dashed var(--pf-color-border-subtle);
}
.wb-anx-cast__tools { align-items: center; gap: 8px; flex-wrap: wrap; }
.wb-anx-cast__search { width: 180px; }
.wb-anx-cast__chips { display: flex; flex-wrap: wrap; gap: 6px; }
/* Портрет героя в подписи полотна присутствия и на фишке карты (Э1). */
.wb-anx-presface { pointer-events: none; }
.wb-anx-ptokface { pointer-events: none; }
/* «Напряжение» ред. 1 (BETA-D-173 Э2): панель над кривой, ряд «полотно +
 * карточка сцены», полосы мест под кривой, курсор сцены и фишки героев. */
.wb-anx-tn-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 2px 0 8px;
}
.wb-anx-tn-bar__player { display: inline-flex; align-items: center; gap: 4px; }
.wb-anx-tn-pos { margin-left: 6px; min-width: 9em; }
.wb-anx-tn-format .pf-btn { min-width: 0; }
.wb-anx-tn-row { display: flex; gap: 12px; align-items: flex-start; }
/* Полка сцены под полотном (BETA-D-178 п. 2, К1): полотно во всю ширину, под ним полка. */
.wb-anx-tn-row--stack { flex-direction: column; align-items: stretch; gap: 10px; }
.wb-anx-shelf {
  display: flex;
  gap: 14px;
  align-items: stretch;
  min-height: 120px;
  padding: 10px 12px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-lg, 10px);
  background: var(--pf-color-surface-canvas);
}
/* Кадр: высота задана, ширина — по пропорции файла; картинка целиком. */
.wb-anx-shelf__frame { position: relative; flex: none; height: 168px; border-radius: 8px; overflow: hidden; background: #0b0c10; border: 1px solid var(--pf-color-border-subtle); }
.wb-anx-shelf--max .wb-anx-shelf__frame { height: 260px; }
.wb-anx-shelf__frame--empty { display: none; }
.wb-anx-shelf__frame--slide { border-color: var(--pf-color-border-medium); }
.wb-anx-shelf__img { display: block; height: 100%; width: auto; max-width: min(48vw, 640px); object-fit: contain; }
.wb-anx-shelf__frame--motion .wb-anx-shelf__img { animation: wb-anx-slide-zoom var(--wb-slide-dwell, 2.5s) linear forwards; }
/* Карточка сцены на полке — та же, но без своей рамки; фиксированной ширины. */
.wb-anx-shelf .wb-anx-tn-card { flex: 0 0 260px; position: static; border: 0; padding: 0; background: transparent; }
.wb-anx-shelf--max .wb-anx-tn-card { flex-basis: 300px; }
.wb-anx-shelf__cap { display: flex; flex-direction: column; gap: 2px; font-size: 12.5px; color: var(--pf-color-text-secondary); }
.wb-anx-shelf__cap-title { color: var(--pf-color-text-primary); font-size: 13px; }
.wb-anx-shelf__cap-quote { font-family: Georgia, 'Times New Roman', serif; color: var(--pf-color-text-accent); }
.wb-anx-shelf__dots { justify-content: flex-start; margin-top: 2px; }
.wb-anx-shelf__thumb { display: inline-block; height: 44px; width: auto; border-radius: 5px; border: 1px solid var(--pf-color-border-subtle); vertical-align: middle; margin-right: 8px; }
/* События сцены — справа, отчёркнуты; без текста блока нет. */
.wb-anx-shelf__about { flex: 1 1 auto; min-width: 0; padding-left: 14px; border-left: 1px solid var(--pf-color-border-subtle); font-size: 12.5px; color: var(--pf-color-text-secondary); overflow: auto; }
.wb-anx-shelf__about--empty { display: none; }
.wb-anx-shelf__about-label { display: block; margin-bottom: 4px; font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--pf-color-text-muted); }
.wb-anx-shelf--noframe .wb-anx-tn-card { flex-basis: auto; }
.wb-anx-tn-canvas { flex: 1 1 auto; min-width: 0; overflow-x: auto; }
/* «Целиком»: полотно не шире своей колонки — карточка сцены не перекрывается
   даже при расхождении замера ширины (замечание владельца 04.09). */
.wb-anx-tn-canvas svg { max-width: 100%; height: auto; }
.wb-anx-tn-canvas--wide svg { max-width: none; }
.wb-anx-tn-card {
  flex: 0 0 260px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 10px 12px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-lg, 10px);
  background: var(--pf-color-surface-canvas);
  font-size: 12.5px;
  position: sticky;
  top: 0;
}
.wb-anx-tn-row--max .wb-anx-tn-card { flex-basis: 320px; }
.wb-anx-tn-card__head { display: flex; gap: 8px; align-items: baseline; }
.wb-anx-tn-card__no {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 24px;
  height: 24px;
  padding: 0 6px;
  border-radius: 12px;
  background: var(--pf-color-surface-accent);
  color: var(--pf-color-text-inverse);
  font-weight: 700;
  font-size: 12px;
}
.wb-anx-tn-card__title { font-weight: 600; font-size: 14px; }
.wb-anx-tn-card__label {
  color: var(--pf-color-text-muted);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-right: 4px;
}
.wb-anx-tn-card__placename { font-weight: 600; }
.wb-anx-tn-card__cast { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; }
.wb-anx-tn-card__face { display: inline-flex; align-items: center; gap: 4px; }
.wb-anx-tn-card__face .wb-avatar { width: 22px; height: 22px; }
.wb-anx-tn-card__face--pov .wb-avatar,
.wb-anx-tn-card__face--pov .wb-anx-cast__initial { box-shadow: 0 0 0 2px var(--pf-color-surface-accent); }
.wb-anx-tn-card__tension { display: flex; gap: 6px; align-items: center; font-weight: 600; margin: 0; }
.wb-anx-tn-card__delta { font-weight: 500; color: var(--pf-color-text-secondary); }
.wb-anx-tn-card__delta--up { color: var(--pf-color-text-accent); }
.wb-anx-tn-card__flag { font-size: 14px; }
.wb-anx-tn-card__about { margin: 0; color: var(--pf-color-text-secondary); line-height: 1.4; }
.wb-anx-tn-card__hint { margin: 0; }
/* Полосы мест: блоки во всю высоту площадки, тон — свой у каждого места
   (замечание владельца 04.09); активная — ярче рамкой и заливкой. */
.wb-anx-tn-bandrect { fill-opacity: 0.1; stroke-opacity: 0.28; stroke-width: 1; transition: fill-opacity 0.25s, stroke-opacity 0.25s; }
.wb-anx-tn-band--now .wb-anx-tn-bandrect { fill-opacity: 0.2; stroke-opacity: 0.9; stroke-width: 1.5; }
.wb-anx-tn-band.wb-anx-h0 .wb-anx-tn-bandrect { fill: var(--wb-anx-h0); stroke: var(--wb-anx-h0); }
.wb-anx-tn-band.wb-anx-h1 .wb-anx-tn-bandrect { fill: var(--wb-anx-h1); stroke: var(--wb-anx-h1); }
.wb-anx-tn-band.wb-anx-h2 .wb-anx-tn-bandrect { fill: var(--wb-anx-h2); stroke: var(--wb-anx-h2); }
.wb-anx-tn-band.wb-anx-h3 .wb-anx-tn-bandrect { fill: var(--wb-anx-h3); stroke: var(--wb-anx-h3); }
.wb-anx-tn-band.wb-anx-h4 .wb-anx-tn-bandrect { fill: var(--wb-anx-h4); stroke: var(--wb-anx-h4); }
.wb-anx-tn-band.wb-anx-h5 .wb-anx-tn-bandrect { fill: var(--wb-anx-h5); stroke: var(--wb-anx-h5); }
.wb-anx-tn-band.wb-anx-h6 .wb-anx-tn-bandrect { fill: var(--wb-anx-h6); stroke: var(--wb-anx-h6); }
.wb-anx-tn-band.wb-anx-h7 .wb-anx-tn-bandrect { fill: var(--wb-anx-h7); stroke: var(--wb-anx-h7); }
.wb-anx-tn-bandlabel { font-size: 10.5px; font-weight: 600; fill: var(--pf-color-text-primary); pointer-events: none; }
.wb-anx-tn-band.wb-anx-h0 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h0); }
.wb-anx-tn-band.wb-anx-h1 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h1); }
.wb-anx-tn-band.wb-anx-h2 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h2); }
.wb-anx-tn-band.wb-anx-h3 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h3); }
.wb-anx-tn-band.wb-anx-h4 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h4); }
.wb-anx-tn-band.wb-anx-h5 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h5); }
.wb-anx-tn-band.wb-anx-h6 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h6); }
.wb-anx-tn-band.wb-anx-h7 .wb-anx-tn-bandlabel { fill: var(--wb-anx-h7); }
/* Курсор текущей сцены и её точка. */
.wb-anx-tn-cursor { stroke: var(--pf-color-surface-accent); stroke-width: 1.5; stroke-dasharray: 3 3; pointer-events: none; }
.wb-anx-tn-here { fill: none; stroke: var(--pf-color-surface-accent); stroke-width: 2.5; pointer-events: none; }
.wb-anx-tn-cursor--off,
.wb-anx-tn-here--off { display: none; }
/* Постер романа (BETA-D-173 Э5): всегда «Ночь и золото» независимо от темы
   стола — токены переопределены на невидимом хосте, откуда снимаются
   вычисленные стили перед растеризацией. Кнопки — в панели разворота. */
.wb-anx-poster-host {
  position: fixed;
  left: -20000px;
  top: 0;
  width: 1920px;
  pointer-events: none;
  --pf-color-surface-accent: #d9b36b;
  --pf-color-text-accent: #e8c98d;
  --pf-color-text-primary: #e6e8ec;
  --pf-color-text-secondary: #9aa1ad;
  --pf-color-surface-canvas: #0f1014;
  --pf-color-border-subtle: #262931;
  --pf-color-border-medium: #3a3e47;
  --wb-anx-h0: #c98212;
  --wb-anx-h1: #6b8cd9;
  --wb-anx-h2: #3e9e77;
  --wb-anx-h3: #c06bb0;
  --wb-anx-h4: #4fa3b8;
  --wb-anx-h5: #c4635a;
  --wb-anx-h6: #8a7bd8;
  --wb-anx-h7: #9a9e4e;
}
.wb-anx-poster { font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; }
/* Подписи осей в постере не нужны; номер сцены в кружке тоже несёт класс
   оси — его не прятать (живой прогон 297-й: кружки были пустыми с 04.09,
   правка цвета в 203-й причину не задела). */
.wb-anx-poster .wb-anx-axis:not(.wb-anx-nonum) { display: none; }
/* Текст без своего правила (номера сцен в кружках) на столе красится
   цветом контейнера; в постере контейнера нет — задаём явно. */
.wb-anx-poster text { fill: #e6e8ec; }
.wb-anx-poster .wb-anx-nonum { fill: #9aa1ad; }
.wb-anx-poster .wb-anx-nocirc { fill: #0f1014; stroke: #3a3e47; }
.wb-anx-poster .wb-anx-poster__bg { fill: #0f1014; }
.wb-anx-poster .wb-anx-poster__title { font-family: Georgia, 'Times New Roman', serif; fill: #e8c98d; }
.wb-anx-poster .wb-anx-poster__sub { fill: #9aa1ad; }
.wb-anx-poster .wb-anx-poster__name { fill: #e6e8ec; }
.wb-anx-poster .wb-anx-poster__count { fill: #6b7280; }
.wb-anx-poster .wb-anx-poster__initial { fill: #0f1014; font-weight: 700; }
.wb-anx-poster .wb-anx-poster__label { fill: #6b7280; letter-spacing: 1.5px; }
.wb-anx-poster .wb-anx-poster__peak { font-family: Georgia, 'Times New Roman', serif; fill: #e8c98d; }
.wb-anx-poster .wb-anx-poster__meta { fill: #9aa1ad; }
.wb-anx-poster .wb-anx-poster__site { fill: #6b7280; }
/* «Панорама» (BETA-D-177; до того «Карта») — диорама из картинок мест
   (эскиз ред. 1 §4, модуль analytics-map.js): наклонённое поле
   перспективой CSS, плитки-карточки в натуральную величину, портреты-фишки,
   маршруты в плоскости поля, карточка сцены в углу; высота сцены — из
   модуля (во всю высоту окна); камера — сдвиг поля в px сцены
   (--wb-dio-px/--wb-dio-py: в «Крупно» едет за сценой, рука сдвигает),
   масштаб режима × свободный (--wb-dio-sc), BETA-D-205. */
.wb-anx-dio {
  position: relative;
  height: 640px;
  user-select: none;
  overflow: hidden;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-lg, 10px);
  background: radial-gradient(ellipse at 50% 30%, #1b1e26 0%, #101218 70%);
  perspective: 1600px;
}
.wb-anx-dio__bar { margin-bottom: 8px; }
.wb-anx-dio__legend { margin-left: auto; }
.wb-anx-dio__floor {
  position: absolute;
  left: 50%;
  top: 56%;
  transform-style: preserve-3d;
  transform: translate(calc(-50% + var(--wb-dio-px, 0px)), calc(-50% + var(--wb-dio-py, 0px))) scale(calc(var(--wb-dio-sc, 1) * var(--wb-dio-flat, 0.8)));
  transition: transform 0.6s ease;
}
/* П-А (BETA-D-178 п. 3): поле наклонено по X (угол — TILT_X модуля), без
   поворота в плоскости; карточки и фишки стоят встречным поворотом —
   картинка не искажается, глубину даёт пол (решётка, маршруты, тени). */
/* Масштаб — объёмный (scale3d): плоский scale не трогает глубину, и встречный
   поворот карточек и фишек не гасил наклон — трапеции и овалы (снимок владельца 04.09). */
.wb-anx-dio__floor--tilt { transform: translate(calc(-50% + var(--wb-dio-px, 0px)), calc(-50% + var(--wb-dio-py, 0px))) rotateX(42deg) scale3d(var(--wb-dio-sc, 1), var(--wb-dio-sc, 1), var(--wb-dio-sc, 1)); }
.wb-anx-dio__floor--tilt .wb-anx-dio__tile { transform-origin: 50% 100%; transform: rotateX(-42deg); }
/* Решётка — в фоне сцены: размыта, гаснет к краям; в наклоне лежит на полу. */
.wb-anx-dio__backgrid {
  position: absolute;
  inset: -20%;
  pointer-events: none;
  background-image: linear-gradient(rgb(217 179 107 / 14%) 1px, transparent 1px), linear-gradient(90deg, rgb(217 179 107 / 14%) 1px, transparent 1px);
  background-size: 56px 56px;
  filter: blur(1.2px);
  -webkit-mask-image: radial-gradient(ellipse at 50% 58%, #000 30%, transparent 78%);
  mask-image: radial-gradient(ellipse at 50% 58%, #000 30%, transparent 78%);
}
.wb-anx-dio--tilt .wb-anx-dio__backgrid { transform: rotateX(42deg); }
/* Рука на поле (BETA-D-205): перетаскивание и колёсико в обоих режимах — без плавности, поле идёт за указателем. */
.wb-anx-dio { cursor: grab; touch-action: none; }
.wb-anx-dio--drag { cursor: grabbing; }
.wb-anx-dio--drag .wb-anx-dio__floor { transition: none; }
.wb-anx-dio__follow { margin-left: 10px; }
.wb-anx-dio__follow--off { display: none; }
.wb-anx-dio__routes { position: absolute; left: 0; top: 0; pointer-events: none; }
.wb-anx-dio__routes--off .wb-anx-dio__route { display: none; }
.wb-anx-dio__route { fill: none; stroke: currentColor; stroke-width: 3; opacity: 0.22; stroke-linejoin: round; stroke-linecap: round; }
.wb-anx-dio__move { stroke: currentColor; stroke-width: 5; opacity: 0.85; stroke-linecap: round; stroke-dasharray: 12 10; }
.wb-anx-dio__tile {
  position: absolute;
  width: 260px;
  height: 164px;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid rgb(217 179 107 / 35%);
  box-shadow: 0 18px 30px rgb(0 0 0 / 55%);
  background: linear-gradient(135deg, #2a2f3a, #1b1e26);
}
.wb-anx-dio__tile--here { border-color: var(--pf-color-surface-accent); box-shadow: 0 0 0 2px var(--pf-color-surface-accent), 0 18px 30px rgb(0 0 0 / 60%); }
/* Картинка целиком; поле карточки добирает её же размытая копия (BETA-D-178 п. 1). */
.wb-anx-dio__imgbg { position: absolute; inset: -14px; width: calc(100% + 28px); height: calc(100% + 28px); object-fit: cover; filter: blur(14px) brightness(0.5) saturate(0.8); }
.wb-anx-dio__img { position: relative; width: 100%; height: 100%; object-fit: contain; display: block; filter: saturate(0.85); }
.wb-anx-dio__name {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 6px 10px;
  font-size: 16px;
  font-weight: 600;
  color: #fff;
  background: linear-gradient(transparent, rgb(0 0 0 / 75%));
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wb-anx-dio__n {
  position: absolute;
  top: 8px;
  right: 10px;
  font-size: 12px;
  font-weight: 600;
  color: var(--pf-color-text-accent);
  background: rgb(0 0 0 / 55%);
  padding: 1px 6px;
  border-radius: 999px;
}
.wb-anx-dio__draw,
.wb-anx-dio__noimg {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font: inherit;
  font-size: 14px;
  color: var(--pf-color-text-secondary);
  background: transparent;
  border: 0;
  cursor: pointer;
}
.wb-anx-dio__noimg { cursor: default; }
.wb-anx-dio__token {
  position: absolute;
  width: 56px;
  height: 56px;
  /* Опора — нижний край: фишка встаёт на поле, а не уходит половиной под
     плоскость (замечание владельца 04.09: «диски режутся пополам»). */
  transform-origin: 50% 100%;
  transform: translate(-50%, -100%);
  transition: left var(--wb-dio-dur, 0.9s) ease-in-out, top var(--wb-dio-dur, 0.9s) ease-in-out, opacity 0.4s;
  z-index: 5;
  color: var(--wb-dio-c, var(--pf-color-surface-accent));
}
.wb-anx-dio__floor--tilt .wb-anx-dio__token { transform: translate(-50%, -100%) rotateX(-42deg) translateZ(2px); }
.wb-anx-dio__token img,
.wb-anx-dio__init {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  border: 3px solid var(--wb-dio-c, var(--pf-color-surface-accent));
  box-shadow: 0 6px 12px rgb(0 0 0 / 60%);
  object-fit: cover;
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
}
.wb-anx-dio__init { background: var(--wb-dio-c, var(--pf-color-surface-accent)); color: #1a1508; font-weight: 700; font-size: 22px; }
.wb-anx-dio__token::after {
  content: '';
  position: absolute;
  left: 50%;
  bottom: -10px;
  width: 24px;
  height: 8px;
  border-radius: 50%;
  background: rgb(0 0 0 / 60%);
  transform: translateX(-50%);
}
.wb-anx-dio__token--away { opacity: 0.38; }
.wb-anx-dio__token--gone { opacity: 0; }
.wb-anx-dio__token.wb-anx-h0 { --wb-dio-c: var(--wb-anx-h0); }
.wb-anx-dio__route.wb-anx-h0, .wb-anx-dio__move.wb-anx-h0 { color: var(--wb-anx-h0); }
.wb-anx-dio__token.wb-anx-h1 { --wb-dio-c: var(--wb-anx-h1); }
.wb-anx-dio__route.wb-anx-h1, .wb-anx-dio__move.wb-anx-h1 { color: var(--wb-anx-h1); }
.wb-anx-dio__token.wb-anx-h2 { --wb-dio-c: var(--wb-anx-h2); }
.wb-anx-dio__route.wb-anx-h2, .wb-anx-dio__move.wb-anx-h2 { color: var(--wb-anx-h2); }
.wb-anx-dio__token.wb-anx-h3 { --wb-dio-c: var(--wb-anx-h3); }
.wb-anx-dio__route.wb-anx-h3, .wb-anx-dio__move.wb-anx-h3 { color: var(--wb-anx-h3); }
.wb-anx-dio__token.wb-anx-h4 { --wb-dio-c: var(--wb-anx-h4); }
.wb-anx-dio__route.wb-anx-h4, .wb-anx-dio__move.wb-anx-h4 { color: var(--wb-anx-h4); }
.wb-anx-dio__token.wb-anx-h5 { --wb-dio-c: var(--wb-anx-h5); }
.wb-anx-dio__route.wb-anx-h5, .wb-anx-dio__move.wb-anx-h5 { color: var(--wb-anx-h5); }
.wb-anx-dio__token.wb-anx-h6 { --wb-dio-c: var(--wb-anx-h6); }
.wb-anx-dio__route.wb-anx-h6, .wb-anx-dio__move.wb-anx-h6 { color: var(--wb-anx-h6); }
.wb-anx-dio__token.wb-anx-h7 { --wb-dio-c: var(--wb-anx-h7); }
.wb-anx-dio__route.wb-anx-h7, .wb-anx-dio__move.wb-anx-h7 { color: var(--wb-anx-h7); }
.wb-anx-dio__card {
  position: absolute;
  right: 12px;
  top: 10px;
  flex: none;
  width: 260px;
  max-height: calc(100% - 20px);
  overflow: auto;
  z-index: 6;
  opacity: 0.96;
}
.wb-anx-dio__card .wb-anx-tn-card__about,
.wb-anx-dio__card .wb-anx-tn-card__tension,
.wb-anx-dio__card .wb-anx-tn-card__hint { display: none; }
.wb-anx-dio__hud { position: absolute; left: 12px; bottom: 10px; z-index: 6; display: flex; align-items: center; cursor: default; }
/* Кадр видео и постер «Панорамы» (BETA-D-177 В2, модуль analytics-map-draw.js):
   аффинная наклонная проекция в SVG; стили — атрибутами в кадр (inlineStyles). */
.wb-anx-poster .wb-anx-mf__ground { fill: #14161c; }
.wb-anx-poster .wb-anx-mf__floor { fill: #171a21; stroke: rgb(217 179 107 / 12%); stroke-width: 2; }
.wb-anx-poster .wb-anx-mf__tilebg { fill: #262b36; }
/* Затемнение размытой копии под целой картинкой (BETA-D-178 п. 1). */
.wb-anx-poster .wb-anx-mf__shade,
.wb-anx-poster .wb-anx-slides-svg__shade,
.wb-anx-poster .wb-anx-poster__shade { fill: rgb(0 0 0 / 45%); }
.wb-anx-poster .wb-anx-mf__strip { fill: rgb(0 0 0 / 62%); }
.wb-anx-poster .wb-anx-mf__name { fill: #fff; font-weight: 600; }
.wb-anx-poster .wb-anx-mf__noimg { fill: #9aa1ad; }
.wb-anx-poster .wb-anx-mf__tileframe { fill: none; stroke: rgb(217 179 107 / 40%); stroke-width: 1.5; }
.wb-anx-poster .wb-anx-mf__here { fill: none; stroke: #d9b36b; stroke-width: 5; }
.wb-anx-poster .wb-anx-mf__route { fill: none; stroke-width: 3; opacity: 0.3; stroke-linejoin: round; stroke-linecap: round; }
.wb-anx-poster .wb-anx-mf__move { fill: none; stroke-width: 5; opacity: 0.9; stroke-linecap: round; stroke-dasharray: 12 10; }
.wb-anx-poster .wb-anx-mf__shadow { fill: rgb(0 0 0 / 55%); }
.wb-anx-poster .wb-anx-mf__ring { fill: none; stroke: #0f1014; stroke-width: 3; }
.wb-anx-poster .wb-anx-mf__body { fill: #d9b36b; }
.wb-anx-poster .wb-anx-mf__tok--away { opacity: 0.45; }
.wb-anx-poster .wb-anx-mf__cardbg { fill: rgb(30 33 40 / 92%); stroke: #3d424e; stroke-width: 1; }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h0, .wb-anx-poster .wb-anx-mf__move.wb-anx-h0 { stroke: var(--wb-anx-h0); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h0 .wb-anx-mf__body { fill: var(--wb-anx-h0); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h1, .wb-anx-poster .wb-anx-mf__move.wb-anx-h1 { stroke: var(--wb-anx-h1); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h1 .wb-anx-mf__body { fill: var(--wb-anx-h1); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h2, .wb-anx-poster .wb-anx-mf__move.wb-anx-h2 { stroke: var(--wb-anx-h2); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h2 .wb-anx-mf__body { fill: var(--wb-anx-h2); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h3, .wb-anx-poster .wb-anx-mf__move.wb-anx-h3 { stroke: var(--wb-anx-h3); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h3 .wb-anx-mf__body { fill: var(--wb-anx-h3); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h4, .wb-anx-poster .wb-anx-mf__move.wb-anx-h4 { stroke: var(--wb-anx-h4); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h4 .wb-anx-mf__body { fill: var(--wb-anx-h4); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h5, .wb-anx-poster .wb-anx-mf__move.wb-anx-h5 { stroke: var(--wb-anx-h5); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h5 .wb-anx-mf__body { fill: var(--wb-anx-h5); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h6, .wb-anx-poster .wb-anx-mf__move.wb-anx-h6 { stroke: var(--wb-anx-h6); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h6 .wb-anx-mf__body { fill: var(--wb-anx-h6); }
.wb-anx-poster .wb-anx-mf__route.wb-anx-h7, .wb-anx-poster .wb-anx-mf__move.wb-anx-h7 { stroke: var(--wb-anx-h7); }
.wb-anx-poster .wb-anx-mf__tok.wb-anx-h7 .wb-anx-mf__body { fill: var(--wb-anx-h7); }
/* Слайды сцен при проигрыше (BETA-D-177 В3, analytics-slides.js): колонка
   справа от полотна кривой (карточка сцены — под слайдом) и в сцене
   панорамы; наезд — CSS-анимация за время показа кадра. */
.wb-anx-slides { flex: 0 0 320px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.wb-anx-tn-row--max .wb-anx-slides { flex-basis: 400px; }
.wb-anx-slides .wb-anx-tn-card { flex: none; width: 100%; }
/* Кадр целиком (BETA-D-178 п. 1): бокс 3:2 (пропорция кадров романа), картинка
   вписана, остаток добирает её же размытая копия. */
.wb-anx-slides__pic { position: relative; width: 100%; aspect-ratio: 3 / 2; border-radius: 10px; overflow: hidden; background: #0b0c10; border: 1px solid var(--pf-color-border-subtle); }
.wb-anx-slides__pic--empty { display: none; }
.wb-anx-slides__bg { position: absolute; inset: -20px; width: calc(100% + 40px); height: calc(100% + 40px); object-fit: cover; filter: blur(18px) brightness(0.5) saturate(0.8); }
.wb-anx-slides__img { position: relative; display: block; width: 100%; height: 100%; object-fit: contain; }
.wb-anx-slides__pic--motion .wb-anx-slides__img { animation: wb-anx-slide-zoom var(--wb-slide-dwell, 2.5s) linear forwards; }
@keyframes wb-anx-slide-zoom { from { transform: scale(1); } to { transform: scale(1.06); } }
.wb-anx-slides__cap { display: flex; flex-direction: column; gap: 2px; text-align: center; font-size: 12.5px; color: var(--pf-color-text-secondary); min-height: 34px; }
.wb-anx-slides__title { color: var(--pf-color-text-primary); font-size: 13px; }
.wb-anx-slides__quote { font-family: Georgia, 'Times New Roman', serif; color: var(--pf-color-text-accent); }
.wb-anx-slides__dots { display: flex; justify-content: center; gap: 5px; min-height: 6px; }
.wb-anx-slides__dot { width: 6px; height: 6px; border-radius: 50%; background: var(--pf-color-border-medium); }
.wb-anx-slides__dot--on { background: var(--pf-color-surface-accent); }
.wb-anx-slides__toggle { display: inline-flex; align-items: center; gap: 4px; padding-left: 8px; }
.wb-anx-slides__toggle-label { margin-right: 2px; }
/* Панорама со слайдами: колонка справа в сцене, поле — левее центра. */
.wb-anx-dio--slides .wb-anx-dio__floor { left: 31%; }
.wb-anx-dio--slides .wb-anx-slides { position: absolute; right: 0; top: 0; bottom: 0; width: 38%; padding: 12px; border-left: 1px solid var(--pf-color-border-subtle); background: rgb(11 12 16 / 92%); z-index: 6; overflow: auto; justify-content: center; }
.wb-anx-dio--slides .wb-anx-dio__card { position: static; width: auto; max-height: none; }
/* Колонка слайда в кадре видео (SVG). */
.wb-anx-poster .wb-anx-slides-svg__bg { fill: #0b0c10; }
.wb-anx-poster .wb-anx-slides-svg__quote { font-family: Georgia, 'Times New Roman', serif; fill: #e8c98d; font-style: italic; }
.wb-anx-poster .wb-anx-slides-svg__dot { fill: #3d424e; }
.wb-anx-poster .wb-anx-slides-svg__dot--on { fill: #d9b36b; }
/* Модалка «Видео» (BETA-D-177 В2, analytics-video-dialog.js): поля сеткой, итог и кнопки внизу. */
.wb-anx-vd { max-width: 760px; }
.wb-anx-vd__panel { gap: var(--pf-space-md); }
.wb-anx-vd__field { display: grid; grid-template-columns: 150px 1fr; gap: var(--pf-space-sm) var(--pf-space-md); align-items: start; }
.wb-anx-vd__label { padding-top: 6px; }
.wb-anx-vd__body { display: flex; flex-wrap: wrap; gap: var(--pf-space-sm); align-items: center; }
.wb-anx-vd__hint { flex-basis: 100%; }
.wb-anx-vd__name { flex: 1 1 24em; max-width: 40em; }
.wb-anx-vd__note { margin: 0; }
.wb-anx-vd__foot { display: flex; align-items: center; gap: var(--pf-space-md); padding: var(--pf-space-lg) var(--pf-space-xl); border-top: 1px solid var(--pf-color-border-subtle); }
/* Подвал не переносит кнопки: итог ужимается, «Собрать видео» — целиком (замечание владельца 04.09). */
.wb-anx-vd__foot .pf-btn { flex: none; white-space: nowrap; }
.wb-anx-vd__summary { flex: 0 1 auto; min-width: 0; color: var(--pf-color-text-accent); }
/* Блоки «самый напряжённый момент» и «сейчас» в кадре видео (Э6): виден один. */
.wb-anx-poster .wb-anx-poster__off { display: none; }
.wb-anx-poster-status { align-self: center; }
.wb-anx-poster-status--error { color: var(--pf-color-text-danger); }
/* Фишки героев на кривой — как аватарка (L-352), веером над точкой. */
.wb-anx-tn-tok { transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.35s; cursor: help; }
.wb-anx-tn-tok--hidden { display: none; }
/* На проигрыше фишки ведёт кадр — без перехода CSS, иначе движение рывками. */
.wb-anx-tn-tokens--live .wb-anx-tn-tok { transition: none; }
.wb-anx-tn-tok--gone { opacity: 0.38; }
.wb-anx-tn-tokring { fill: none; stroke: transparent; stroke-width: 2.5; }
.wb-anx-tn-tok--pov .wb-anx-tn-tokring { stroke: var(--pf-color-surface-accent); }
.wb-anx-tn-tokbody { stroke: var(--pf-color-surface-canvas); stroke-width: 2; }
.wb-anx-tn-tok.wb-anx-h0 .wb-anx-tn-tokbody { fill: var(--wb-anx-h0); }
.wb-anx-tn-tok.wb-anx-h1 .wb-anx-tn-tokbody { fill: var(--wb-anx-h1); }
.wb-anx-tn-tok.wb-anx-h2 .wb-anx-tn-tokbody { fill: var(--wb-anx-h2); }
.wb-anx-tn-tok.wb-anx-h3 .wb-anx-tn-tokbody { fill: var(--wb-anx-h3); }
.wb-anx-tn-tok.wb-anx-h4 .wb-anx-tn-tokbody { fill: var(--wb-anx-h4); }
.wb-anx-tn-tok.wb-anx-h5 .wb-anx-tn-tokbody { fill: var(--wb-anx-h5); }
.wb-anx-tn-tok.wb-anx-h6 .wb-anx-tn-tokbody { fill: var(--wb-anx-h6); }
.wb-anx-tn-tok.wb-anx-h7 .wb-anx-tn-tokbody { fill: var(--wb-anx-h7); }
.wb-anx-tn-toktext { font-size: 15px; font-weight: 700; fill: var(--pf-color-surface-canvas); pointer-events: none; }
.wb-anx-tn-tokface { pointer-events: none; }
/* Разворот «Напряжения» на весь стол (§4.5, по образцу «Иллюстраций»):
 * колонки романов и навигации с ручками скрыты, центр берёт остаток. */
.wb-desk--analytics-max .wb-col--nav,
.wb-desk--analytics-max .wb-split { display: none; }
.wb-desk--analytics-max .wb-col--center { max-width: none; }
/* Полный экран без всего (BETA-D-178 п. 5): верхняя панель, «Путь романа»
 * и строка состояния скрыты; на странице — панель модуля и полотно. */
.wb-page--analytics-max .wb-top,
.wb-page--analytics-max .wb-stagebar,
.wb-page--analytics-max .wb-status { display: none; }
/* Шапка анализа в одну строку: название · счёт · вкладки справа (BETA-D-178 п. 5). */
.wb-anx-headrow { align-items: center; flex-wrap: wrap; gap: var(--pf-space-sm) var(--pf-space-md); margin-bottom: 4px; }
.wb-anx-headrow__meta { margin-left: 0; }
.wb-anx-headrow .wb-anx-tabs { margin-left: auto; margin-bottom: 0; text-transform: none; letter-spacing: normal; }
/* Легенда — под полотном. */
.wb-anx-legend { margin: 6px 0 0; }
/* Начало панели в развороте: название романа и две вкладки с проигрышем. */
.wb-anx-maxlead {
  font-family: var(--pf-typography-heading2-family);
  font-size: var(--pf-typography-heading3-size);
  color: var(--pf-color-text-accent);
  max-width: 24ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-right: 4px;
}
/* Чипы героев — легенда линий; погашенный чип бледнеет. */
.wb-anx-mchip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 22px;
  padding: 0 10px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-pill);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-secondary);
  font: inherit;
  font-size: 12px;
  white-space: nowrap;
  cursor: pointer;
}
.wb-anx-mchip__dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.wb-anx-mchip__dot.wb-anx-h0 { background: var(--wb-anx-h0); }
.wb-anx-mchip__dot.wb-anx-h1 { background: var(--wb-anx-h1); }
.wb-anx-mchip__dot.wb-anx-h2 { background: var(--wb-anx-h2); }
.wb-anx-mchip__dot.wb-anx-h3 { background: var(--wb-anx-h3); }
.wb-anx-mchip__dot.wb-anx-h4 { background: var(--wb-anx-h4); }
.wb-anx-mchip__dot.wb-anx-h5 { background: var(--wb-anx-h5); }
.wb-anx-mchip__dot.wb-anx-h6 { background: var(--wb-anx-h6); }
.wb-anx-mchip__dot.wb-anx-h7 { background: var(--wb-anx-h7); }
.wb-anx-mchip__name--main { color: var(--pf-color-text-primary); font-weight: 600; }
.wb-anx-mchip--off { opacity: 0.45; }
.wb-anx-metro-error { color: var(--pf-color-text-danger); font-size: 13px; margin: 2px 0 8px; }
/* «Пути героев» (BETA-D-054 этап 4; гекс-диорама BETA-D-059): плиты зон
 * на сотовом поле, места-булавки, ленты маршрутов, мосты над пустотой,
 * фишки героев, лента напряжения. Цвета макета — из токенов темы;
 * оттенки плит зон — лёгкая примесь палитры героев. */
:root,
:root[data-theme='graphite'] {
  --wb-paths-plate: #2b303a;
  --wb-paths-plate-lit: #39404d;
  --wb-paths-plate-side: #1a1d24;
  --wb-paths-plate-edge: #454c5a;
  --wb-paths-table: #101319;
  /* Сила подмеса тона зоны в плитку и землю острова. В светлой теме подмес
     заметно выше: на бежевой базе 11% не читались — соседние зоны выглядели
     одинаково (замечание владельца 2026-08-16). */
  --wb-paths-tonemix-lit: 26%;
  --wb-paths-tonemix: 16%;
  --wb-paths-toneblend-lit: 14%;
  --wb-paths-toneblend: 9%;
  --wb-paths-landmix: 16%;
  --wb-paths-landblend: 9%;
}
:root[data-theme='light'] {
  --wb-paths-plate: #ece7dc;
  --wb-paths-plate-lit: #fbf7ef;
  --wb-paths-plate-side: #cfc7b7;
  --wb-paths-plate-edge: #b5ab99;
  --wb-paths-table: #e6e1d7;
  --wb-paths-tonemix-lit: 44%;
  --wb-paths-tonemix: 32%;
  --wb-paths-toneblend-lit: 25%;
  --wb-paths-toneblend: 18%;
  --wb-paths-landmix: 30%;
  --wb-paths-landblend: 17%;
}
.wb-anx-pcontrols { align-items: center; }
.wb-anx-pcanvas { background: var(--wb-paths-table); overflow: auto; padding: 0; }
/* Карта не растёт вместе с панелью (потолок — натуральный размер полотна,
   пишется инлайном по занятой области: 1 единица = 1 px) и не выше доли
   экрана — карта, строка кадра и лента помещаются в экран целиком
   (BETA-D-065 п. 5); в остатке рамки — поля. */
.wb-anx-pmap { display: block; width: 100%; height: auto; max-height: max(420px, calc(100vh - 430px)); margin: 0 auto; --wb-paths-dur: 0.7s; touch-action: none; }
/* Карта · строка кадра · лента — одним компактным блоком, без лишних полей. */
.wb-anx-pblock { display: flex; flex-direction: column; gap: 6px; }
/* Карточка сцены в углу карты (Э4): тот же вид, что справа от кривой, поверх
   правого верхнего угла полотна; не растёт выше карты — внутри прокрутка. */
.wb-anx-pmapwrap { position: relative; }
.wb-anx-pcard {
  position: absolute;
  top: 8px;
  right: 8px;
  flex: none;
  width: 236px;
  max-height: calc(100% - 16px);
  overflow: auto;
  opacity: 0.96;
  z-index: 1;
  box-shadow: 0 4px 14px rgb(0 0 0 / 25%);
}
.wb-anx-pstripbox { padding: 4px 10px; }
.wb-anx-pstrip { display: block; min-width: 900px; width: 100%; height: auto; --wb-paths-dur: 0.7s; }
/* Градиенты плиток: стопы задаются классами (CSP кабинета запрещает inline
   style). Тонов — 12 (BETA-D-065): 8 цветов палитры героев + 4 смеси. */
.wb-anx-pstop--lit { stop-color: var(--wb-paths-plate-lit); }
.wb-anx-pstop--plate { stop-color: var(--wb-paths-plate); }
.wb-anx-pstop--side { stop-color: var(--wb-paths-plate-side); }
.wb-anx-pstop--zlit0 { stop-color: color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone0 { stop-color: color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit1 { stop-color: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone1 { stop-color: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit2 { stop-color: color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone2 { stop-color: color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit3 { stop-color: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone3 { stop-color: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit4 { stop-color: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone4 { stop-color: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit5 { stop-color: color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone5 { stop-color: color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit6 { stop-color: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone6 { stop-color: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit7 { stop-color: color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-tonemix-lit), var(--wb-paths-plate-lit)); }
.wb-anx-pstop--zone7 { stop-color: color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-tonemix), var(--wb-paths-plate)); }
.wb-anx-pstop--zlit8 { stop-color: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-toneblend-lit), color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-toneblend-lit), var(--wb-paths-plate-lit))); }
.wb-anx-pstop--zone8 { stop-color: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-toneblend), color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-toneblend), var(--wb-paths-plate))); }
.wb-anx-pstop--zlit9 { stop-color: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-toneblend-lit), color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-toneblend-lit), var(--wb-paths-plate-lit))); }
.wb-anx-pstop--zone9 { stop-color: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-toneblend), color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-toneblend), var(--wb-paths-plate))); }
.wb-anx-pstop--zlit10 { stop-color: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-toneblend-lit), color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-toneblend-lit), var(--wb-paths-plate-lit))); }
.wb-anx-pstop--zone10 { stop-color: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-toneblend), color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-toneblend), var(--wb-paths-plate))); }
.wb-anx-pstop--zlit11 { stop-color: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-toneblend-lit), color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-toneblend-lit), var(--wb-paths-plate-lit))); }
.wb-anx-pstop--zone11 { stop-color: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-toneblend), color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-toneblend), var(--wb-paths-plate))); }
/* Земли островов (BETA-D-065): подложка из сот под кластером плиток;
   тон — по порядку островов; «море» между ними — чистый стол. */
.wb-anx-pland { opacity: 0.5; }
.wb-anx-pland polygon { stroke: none; }
.wb-anx-pland--0 polygon { fill: color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--1 polygon { fill: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--2 polygon { fill: color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--3 polygon { fill: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--4 polygon { fill: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--5 polygon { fill: color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--6 polygon { fill: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
.wb-anx-pland--7 polygon { fill: color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-landmix), var(--wb-paths-plate-side)); }
/* Земли 8–11 раньше были голой базой — острова этих индексов теряли тон;
   теперь парные смеси, как у плиток (замечание владельца 2026-08-16). */
.wb-anx-pland--8 polygon { fill: color-mix(in srgb, var(--wb-anx-h0) var(--wb-paths-landblend), color-mix(in srgb, var(--wb-anx-h2) var(--wb-paths-landblend), var(--wb-paths-plate-side))); }
.wb-anx-pland--9 polygon { fill: color-mix(in srgb, var(--wb-anx-h4) var(--wb-paths-landblend), color-mix(in srgb, var(--wb-anx-h6) var(--wb-paths-landblend), var(--wb-paths-plate-side))); }
.wb-anx-pland--10 polygon { fill: color-mix(in srgb, var(--wb-anx-h1) var(--wb-paths-landblend), color-mix(in srgb, var(--wb-anx-h5) var(--wb-paths-landblend), var(--wb-paths-plate-side))); }
.wb-anx-pland--11 polygon { fill: color-mix(in srgb, var(--wb-anx-h3) var(--wb-paths-landblend), color-mix(in srgb, var(--wb-anx-h7) var(--wb-paths-landblend), var(--wb-paths-plate-side))); }
/* Плитки. */
.wb-anx-pshadow { fill: #000; opacity: 0.4; }
.wb-anx-ptop { stroke: var(--wb-paths-plate-edge); stroke-width: 1; }
.wb-anx-ptop--shard { stroke-dasharray: 7 4; stroke-width: 1.1; }
.wb-anx-ptop--mobile { stroke: var(--pf-color-text-accent); stroke-width: 1.2; stroke-dasharray: 5 4; opacity: 0.95; }
/* Станция кадра — золотая обводка верхней грани плитки; в кадре будущего
   (сцена по плану) — приглушена. */
.wb-anx-ptop.wb-anx-phere { stroke: var(--pf-color-text-accent); stroke-width: 2.2; }
.wb-anx-ptop.wb-anx-phere.wb-anx-pplanhere { stroke-opacity: 0.6; }
.wb-anx-pside { fill: var(--wb-paths-plate-side); stroke: var(--wb-paths-plate-edge); stroke-width: 0.7; }
.wb-anx-pgrip { cursor: grab; }
.wb-anx-pgrip:active { cursor: grabbing; }
.wb-anx-ptile--move { transition: transform var(--wb-paths-dur) cubic-bezier(0.4, 0, 0.2, 1), opacity 0.4s; }
.wb-anx-ptile--ghost { opacity: 0.5; }
.wb-anx-ptile--ghost .wb-anx-ptop { stroke-dasharray: 5 4; }
/* Имя острова — тиснением на свободной ячейке земли; имя зоны — мельче. */
.wb-anx-pzonename { font-size: 16px; letter-spacing: 0.28em; text-transform: uppercase; fill: var(--pf-color-text-primary); opacity: 0.3; pointer-events: none; }
.wb-anx-pzonesmall { font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; fill: var(--pf-color-text-primary); opacity: 0.42; pointer-events: none; }
/* Имя плитки — крупно относительно плитки (BETA-D-065); сцены — подстрочником. */
.wb-anx-ptilename { font-size: 12.5px; letter-spacing: 0.01em; fill: var(--pf-color-text-primary); pointer-events: none; }
.wb-anx-ptilename--ghost { fill: var(--pf-color-text-secondary); font-style: italic; }
.wb-anx-ptilesub { font-size: 8.5px; fill: var(--pf-color-text-secondary); pointer-events: none; }
.wb-anx-phalo { paint-order: stroke; stroke: var(--wb-paths-table); stroke-width: 3px; stroke-linejoin: round; opacity: 0.96; }
/* Маршруты и связи (толщина — под мелкую плитку BETA-D-065). */
.wb-anx-proute { fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.6; opacity: 0.16; transition: opacity 0.45s; }
.wb-anx-proute.wb-anx-proute--lit { opacity: 1; }
.wb-anx-proute.wb-anx-proute--now { stroke-width: 3.8; }
.wb-anx-proute.wb-anx-h0 { stroke: var(--wb-anx-h0); }
.wb-anx-proute.wb-anx-h1 { stroke: var(--wb-anx-h1); }
.wb-anx-proute.wb-anx-h2 { stroke: var(--wb-anx-h2); }
.wb-anx-proute.wb-anx-h3 { stroke: var(--wb-anx-h3); }
.wb-anx-proute.wb-anx-h4 { stroke: var(--wb-anx-h4); }
.wb-anx-proute.wb-anx-h5 { stroke: var(--wb-anx-h5); }
.wb-anx-proute.wb-anx-h6 { stroke: var(--wb-anx-h6); }
.wb-anx-proute.wb-anx-h7 { stroke: var(--wb-anx-h7); }
.wb-anx-prouteshadow { fill: none; stroke: #000; stroke-width: 2.6; opacity: 0; transition: opacity 0.45s; }
.wb-anx-prouteshadow.wb-anx-proute--lit { opacity: 0.28; }
/* Лента, впервые пройденная в будущем кадре (план), — бледная и штриховая. */
.wb-anx-proute.wb-anx-proute--plan { stroke-dasharray: 7 6; }
.wb-anx-proute.wb-anx-proute--plan.wb-anx-proute--lit { opacity: 0.4; }
.wb-anx-plink { fill: none; stroke: var(--wb-paths-plate-edge); stroke-width: 1.3; stroke-dasharray: 3 5; opacity: 0.8; cursor: pointer; }
.wb-anx-plinklabel { font-size: 10px; fill: var(--pf-color-text-secondary); }
/* Тумблер подписей расстояний (замечание владельца 2026-08-16): выключены —
   подписи скрыты; клик по связи подсвечивает её и подпись поверх тумблера. */
.wb-anx-pmap--nodist .wb-anx-plinklabel { display: none; }
.wb-anx-plinkgrp--active .wb-anx-plink { stroke: var(--pf-color-text-accent); stroke-width: 2.2; opacity: 1; }
.wb-anx-plinkgrp--active .wb-anx-plinklabel { fill: var(--pf-color-text-accent); font-weight: 700; font-size: 11px; }
.wb-anx-pmap--nodist .wb-anx-plinkgrp--active .wb-anx-plinklabel { display: inline; }
/* Фишки героев. */
.wb-anx-ptok { transition: transform var(--wb-paths-dur) cubic-bezier(0.4, 0, 0.2, 1), opacity 0.5s; }
.wb-anx-ptokbody { stroke: var(--wb-paths-table); stroke-width: 1.8; }
.wb-anx-ptokbody.wb-anx-h0 { fill: var(--wb-anx-h0); }
.wb-anx-ptokbody.wb-anx-h1 { fill: var(--wb-anx-h1); }
.wb-anx-ptokbody.wb-anx-h2 { fill: var(--wb-anx-h2); }
.wb-anx-ptokbody.wb-anx-h3 { fill: var(--wb-anx-h3); }
.wb-anx-ptokbody.wb-anx-h4 { fill: var(--wb-anx-h4); }
.wb-anx-ptokbody.wb-anx-h5 { fill: var(--wb-anx-h5); }
.wb-anx-ptokbody.wb-anx-h6 { fill: var(--wb-anx-h6); }
.wb-anx-ptokbody.wb-anx-h7 { fill: var(--wb-anx-h7); }
.wb-anx-ptoktext { font-size: 11px; font-weight: 700; fill: #fff; }
.wb-anx-ptok--away { opacity: 0.38; }
/* Фишка в кадре будущего: сцена ещё не написана — присутствие по плану. */
.wb-anx-ptok--plan { opacity: 0.55; }
.wb-anx-ptok--gone { opacity: 0; }
.wb-anx-ptok--pov .wb-anx-ptokbody { stroke: var(--pf-color-text-accent); stroke-width: 2.2; }
.wb-anx-ptokshadow { fill: #000; opacity: 0.3; }
/* Строка кадра. */
.wb-anx-pframe {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 4px 14px;
  align-items: baseline;
  padding: 6px 12px;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-canvas);
  /* Компактно (BETA-D-065 п. 5): блок живёт внутри .wb-anx-pblock с gap. */
  margin: 0;
  min-height: 44px;
}
.wb-anx-pframe__no {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%;
  border: 1px solid var(--pf-color-border-medium);
  background: var(--pf-color-surface-raised);
  font-size: 12px; color: var(--pf-color-text-secondary); align-self: center;
}
.wb-anx-pframe__title { font-weight: 600; }
.wb-anx-pframe__meta { color: var(--pf-color-text-secondary); font-size: 12.5px; }
.wb-anx-pframe__about { grid-column: 2; color: var(--pf-color-text-secondary); font-size: 13px; }
/* Лента напряжения. */
.wb-anx-pcurve { fill: none; stroke: var(--pf-color-text-accent); stroke-width: 2; }
.wb-anx-pcurvefill { fill: var(--pf-color-text-accent); opacity: 0.12; }
.wb-anx-pcurvegrid { stroke: var(--pf-color-border-subtle); stroke-width: 1; }
.wb-anx-prunner { fill: var(--pf-color-text-accent); stroke: var(--pf-color-surface-raised); stroke-width: 2; transition: transform var(--wb-paths-dur) cubic-bezier(0.4, 0, 0.2, 1); }
.wb-anx-pcursor { stroke: var(--pf-color-text-accent); stroke-width: 1; stroke-dasharray: 3 3; opacity: 0.6; transition: transform var(--wb-paths-dur) cubic-bezier(0.4, 0, 0.2, 1); }
.wb-anx-pno { cursor: pointer; }
.wb-anx-pnocirc { fill: var(--pf-color-surface-raised); stroke: var(--pf-color-border-medium); }
.wb-anx-pnocirc--cur { stroke: var(--pf-color-text-accent); stroke-width: 2; }
/* Кадры будущего (режим «по плану», BETA-D-060 п. 3): бледные, за отметкой. */
.wb-anx-pnocirc--plan { opacity: 0.5; stroke-dasharray: 3 2; }
.wb-anx-nonum--plan { opacity: 0.6; }
.wb-anx-pplandiv { stroke: var(--pf-color-text-accent); stroke-width: 1; stroke-dasharray: 5 4; opacity: 0.55; }
.wb-anx-pplandivtext { font-size: 10px; fill: var(--pf-color-text-secondary); opacity: 0.8; }

/* ===== Экспорт романа (З-18, BETA-D-064): окно поверх стола ===== */
.wb-exp-overlay { max-width: 820px; }
.wb-exp-state { margin-bottom: 4px; }
.wb-exp-legend {
  margin: 12px 0 6px;
  font-size: 11.5px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--pf-color-text-secondary);
}
.wb-exp-legend:first-of-type { margin-top: 4px; }
/* Плитки выбора: что выгружаем — по четыре, форматы — по пять. */
.wb-exp-tiles {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
}
.wb-exp-tiles--fmt { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.wb-exp-tile {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 9px 11px;
  text-align: left;
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-primary);
  cursor: pointer;
  font: inherit;
}
.wb-exp-tile:hover { border-color: var(--pf-color-border-medium); }
.wb-exp-tile--on {
  border-color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
}
.wb-exp-tile--on .wb-exp-tile__title { color: var(--pf-color-text-accent); }
.wb-exp-tile--off { opacity: 0.5; }
.wb-exp-tile__title { font-weight: 600; font-size: 13.5px; }
.wb-exp-tile__hint {
  font-size: 12px;
  line-height: 1.4;
  color: var(--pf-color-text-secondary);
}
/* Настройки оформления: галочка и пояснение под ней. */
.wb-exp-opts { display: flex; flex-direction: column; gap: 8px; }
.wb-exp-opt { display: flex; gap: 8px; align-items: flex-start; cursor: pointer; }
.wb-exp-opt__body { display: flex; flex-direction: column; gap: 1px; }
/* Картинки внутри книги (11.09): сегментный переключатель режимов; на узком окне сегменты переносятся. */
.wb-exp-images-modes { flex-wrap: wrap; align-self: flex-start; margin: 2px 0 6px; }
/* Брак в книге (BETA-D-270): та же подложка тревоги, что у плашки «Брак: N» раздела «Иллюстрации». */
.wb-exp-flawed {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin: 6px 0 2px;
  padding: 6px 10px;
  border: 1px solid var(--pf-color-border-danger);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-danger-soft);
}
.wb-exp-flawed__line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
.wb-exp-flawed__count { color: var(--pf-color-text-danger); }
/* Имя файла: поле правится автором, расширение задаёт формат (Р-6). */
.wb-exp-file { margin-top: 12px; }
.wb-exp-file__row { align-items: center; gap: 6px; }
.wb-exp-name { flex: 1; min-width: 0; }
.wb-exp-ext {
  font-family: var(--pf-typography-mono-family, Consolas, monospace);
  font-size: 13px;
  color: var(--pf-color-text-secondary);
}
.wb-exp-foot { margin-top: 14px; }
@media (max-width: 720px) {
  .wb-exp-tiles,
  .wb-exp-tiles--fmt { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* Счётчик содержимого на плитке: «Сцен: 13 · знаков: 78 412». */
.wb-exp-tile__count {
  margin-top: auto;
  padding-top: 4px;
  font-size: 11.5px;
  color: var(--pf-color-text-secondary);
  font-variant-numeric: tabular-nums;
}
.wb-exp-tile__count--empty { color: var(--pf-color-text-warning, var(--pf-color-text-secondary)); }
.wb-exp-author { flex: 1; min-width: 0; }

/* --- «Библиотека промптов», волна А (BETA-D-071): две панели, вкладки. --- */

.wb-catlib {
  display: grid;
  grid-template-columns: minmax(300px, 380px) 1fr;
  gap: var(--pf-space-lg);
  align-items: start;
}

@media (max-width: 960px) {
  .wb-catlib {
    grid-template-columns: 1fr;
  }
}

.wb-catlib__list {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-sm);
  min-width: 0;
}

.wb-catlib__view {
  min-width: 0;
  position: sticky;
  top: var(--pf-space-lg);
}

.wb-catlib-search {
  width: 100%;
}

.wb-catalog-item--sel {
  background: var(--pf-color-surface-bar);
  border-left: 2px solid var(--pf-color-surface-accent);
}

.wb-tag--accent {
  color: var(--pf-color-text-accent, var(--pf-color-text-primary));
  border-color: var(--pf-color-surface-accent);
}

/* Функция в предпросмотре (BETA-D-168 п. 7): орган + метка вплотную. */
.wb-preview {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-xs);
}

.wb-tag--warn {
  color: var(--pf-color-text-warning);
  border-color: var(--pf-color-surface-warning);
}

.wb-cattabs {
  display: flex;
  gap: var(--pf-space-xs);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.wb-cattab {
  padding: var(--pf-space-xs) var(--pf-space-md);
  border: 1px solid transparent;
  border-bottom: none;
  border-radius: var(--pf-radius-sm) var(--pf-radius-sm) 0 0;
  background: none;
  color: var(--pf-color-text-secondary);
  font: inherit;
  cursor: pointer;
}

.wb-cattab--on {
  background: var(--pf-color-surface-canvas);
  border-color: var(--pf-color-border-subtle);
  color: var(--pf-color-text-primary);
}

.wb-catlib-note {
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-canvas);
}

/* Перечень «что нового» в баннере библиотеки (волна Б). */
.wb-catlib-news {
  margin: var(--pf-space-xs) 0 0;
  padding-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.wb-catlib-select {
  max-width: 320px;
}

.wb-catlib-divergence {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-surface-warning);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-warning-soft);
}

.wb-catlib-divergence__title {
  margin: 0;
  color: var(--pf-color-text-warning);
  font-weight: 600;
}

.wb-catlib-diff__line--del {
  color: var(--pf-color-text-warning);
}

.wb-catlib-diff__line--add {
  color: var(--pf-color-text-accent, var(--pf-color-text-primary));
}

/* Лестница установки CLI (+D1′а, BETA-D-102; модуль ai-install.js). */
.wb-ai-step {
  display: grid;
  grid-template-columns: 28px 1fr;
  gap: var(--pf-space-sm) var(--pf-space-md);
  padding: var(--pf-space-sm) 0;
  border-top: 1px solid var(--pf-color-border-subtle);
}

.wb-ai-step:first-of-type { border-top: 0; }

.wb-ai-step__num {
  width: 24px;
  height: 24px;
  border-radius: 999px;
  border: 1px solid var(--pf-color-border-medium);
  color: var(--pf-color-text-muted);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--pf-typography-caption-size);
}

.wb-ai-step__num.is-done {
  color: var(--pf-color-text-success);
  border-color: transparent;
  background: color-mix(in srgb, var(--pf-color-text-success) 18%, transparent);
}

.wb-ai-step__num.is-cur {
  color: var(--pf-color-surface-canvas);
  border-color: transparent;
  background: var(--pf-color-text-accent);
  font-weight: 600;
}

.wb-ai-step__body { display: flex; flex-direction: column; gap: var(--pf-space-xs); min-width: 0; }

.wb-ai-step__title { margin: 0; font-size: var(--pf-typography-body-size, 1rem); font-weight: 600; }

.wb-ai-install__muted { color: var(--pf-color-text-muted); }

.wb-ai-install__ready {
  align-self: flex-start;
  color: var(--pf-color-text-success);
  background: color-mix(in srgb, var(--pf-color-text-success) 18%, transparent);
  border-radius: 999px;
  padding: 0 var(--pf-space-sm);
  font-size: var(--pf-typography-caption-size);
}

.wb-ai-install__link { color: var(--pf-color-text-accent); }

.wb-ai-manual summary { cursor: pointer; }

.wb-ai-manual__steps { margin: var(--pf-space-xs) 0 0; padding-left: 20px; font-size: var(--pf-typography-body-small-size); }

.wb-ai-manual__steps li { margin-bottom: var(--pf-space-xs); }

.wb-ai-install__card {
  padding: var(--pf-space-md);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-canvas);
}

.wb-ai-install__list { margin: var(--pf-space-xs) 0 0; padding-left: 18px; font-size: var(--pf-typography-body-small-size); }

.wb-ai-sandbox { margin-top: var(--pf-space-sm); padding-top: var(--pf-space-sm); border-top: 1px solid var(--pf-color-border-subtle); }

/* Переименование карточки канона (BETA-D-103, модуль canon-rename.js):
   карандаш у имени открытой записи и форма нового имени над текстом. */
.wb-canon-rename {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  border: 1px solid transparent;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-secondary);
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
}

.wb-canon-rename:hover {
  border-color: var(--pf-color-border-medium);
  background: var(--pf-color-surface-raised);
}

.wb-canon-rename--on { color: var(--pf-color-text-accent); }

.wb-canon-rename:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.wb-canon-rename__form {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  margin-bottom: var(--pf-space-sm);
}

.wb-canon-rename__form .wb-input { flex: 1 1 auto; }

/* Сегмент пути, неиспользуемый в режиме (Р1: сюжет и автомат), — гаснет,
 * а не прячется (BETA-D-108 п. 4). */
.wb-seg--off {
  opacity: 0.45;
}

/* «По желанию» рядом с обязательным шагом и «Сейчас: …» (BETA-D-108). */
.wb-stagebar__opt {
  margin-left: 14px;
  color: var(--pf-color-text-secondary);
  font-size: var(--pf-typography-caption-size);
}

.wb-stagebar__opt-label {
  margin-right: 4px;
}

.wb-stagebar__opt-item {
  padding: 0;
  border: none;
  background: transparent;
  color: inherit;
  font: inherit;
  text-decoration: underline dotted;
  text-underline-offset: 3px;
  cursor: pointer;
}

.wb-stagebar__opt-item:hover {
  color: var(--pf-color-text-primary);
}

.wb-stagebar__now {
  color: var(--pf-color-text-info, var(--pf-color-text-secondary));
}

/* --- Линии симуляции сюжета (BETA-D-110): меню «Линии ▾», «Начать заново». --- */
.wb-sim-lines { position: relative; align-items: center; gap: 8px; margin: 2px 0 6px; }
.wb-sim-lines__dd { position: relative; }
.wb-sim-lines__btn {
  color: var(--pf-color-text-accent);
  border-color: var(--pf-color-accent);
  background: var(--pf-color-surface-selected);
}
.wb-sim-lines__menu {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  z-index: 30;
  min-width: 300px;
  max-width: 420px;
  display: flex;
  flex-direction: column;
  gap: 1px;
  padding: 5px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm, 7px);
  background: var(--pf-color-surface-raised);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
}
.wb-sim-lines__item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  text-align: left;
  border: 0;
  border-radius: 5px;
  padding: 6px 9px;
  background: transparent;
  color: var(--pf-color-text-primary);
  font: inherit;
  font-size: 13px;
  cursor: pointer;
}
.wb-sim-lines__item:hover:not(:disabled) { background: var(--pf-color-surface-hover, rgba(255, 255, 255, 0.05)); }
.wb-sim-lines__item:disabled { opacity: 0.55; cursor: default; }
.wb-sim-lines__item--active {
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
}
.wb-sim-lines__item--action { color: var(--pf-color-text-secondary); }
.wb-sim-lines__name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-sim-lines__count { white-space: nowrap; }
.wb-sim-lines__check { color: var(--pf-color-text-accent); }
.wb-sim-lines__dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--pf-color-warning, #d9a06b);
  flex: none;
}
.wb-sim-lines__sep { border-top: 1px solid var(--pf-color-border-medium); margin: 4px 0; }
.wb-sim-lines__trial { margin: 0 0 4px; }
.wb-sim-lines__name-input { max-width: 360px; }
.wb-sim-lines__scene { width: auto; max-width: 100%; padding: 2px 8px; font-size: 12.5px; }
.wb-sim-mode--off { opacity: 0.55; }

/* Импорт книги (BETA-D-116): развилка в окне «Новый роман», предпросмотр
   нарезки, экран хода распаковки. */
.wb-import-switch {
  display: flex;
  gap: var(--pf-space-xs, 6px);
  border-bottom: 1px solid var(--pf-color-border, #333);
  padding-bottom: var(--pf-space-sm, 8px);
}
.wb-import-switch__btn {
  background: none;
  border: 1px solid var(--pf-color-border, #333);
  border-radius: 8px;
  color: var(--pf-color-text-secondary, #aaa);
  cursor: pointer;
  font: inherit;
  padding: 6px 12px;
}
.wb-import-switch__btn--on {
  border-color: var(--pf-color-text-accent, #e3b25c);
  color: var(--pf-color-text, #eee);
}
.wb-import-switch__btn:disabled {
  cursor: default;
  opacity: 0.6;
}
.wb-import-chapters {
  border: 1px solid var(--pf-color-border, #333);
  border-radius: 8px;
  max-height: 260px;
  overflow: auto;
}
.wb-import-chapter {
  align-items: baseline;
  border-bottom: 1px solid var(--pf-color-border, #333);
  display: flex;
  gap: 10px;
  padding: 4px 10px;
}
.wb-import-chapter:last-child { border-bottom: none; }
.wb-import-chapter__no {
  color: var(--pf-color-text-secondary, #aaa);
  flex: none;
  min-width: 24px;
  text-align: right;
}
.wb-import-chapter__title {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.wb-import-chapter__chars { flex: none; }
.wb-import-warns {
  list-style: none;
  margin: 0;
  padding: 0;
}
.wb-import-warn { color: var(--pf-color-text-warning, #d7a65a); }
.wb-import-screen {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-md, 12px);
  max-width: 720px;
}
.wb-import-log {
  border-top: 1px solid var(--pf-color-border, #333);
  display: flex;
  flex-direction: column;
  max-height: 50vh;
  overflow: auto;
  padding-top: var(--pf-space-sm, 8px);
}
.wb-import-badge { color: var(--pf-color-text-accent, #e3b25c); }
/* Серия книг (IN-002): заголовок серии в панели и пометка книги. */
.wb-series-head { padding: var(--pf-space-2, 8px) var(--pf-space-3, 12px) 0; color: var(--pf-color-text-secondary); }
.wb-series-badge { color: var(--pf-color-text-secondary); white-space: nowrap; }
.wb-series-badge__prep { color: var(--pf-color-text-accent); }
.wb-sequel-draft-text { width: 100%; min-height: 8em; resize: vertical; }

/* ── Распаковка книги на столе (BETA-D-117, Э2): плашка замка, журнал
   справа (стили журнала автомата переиспользуются), карточка сбоя,
   просмотр ответа модели. ── */
/* Плашка — пульт распаковки (замечание владельца 26.08): своя, не как
   шапка журнала — золотая подложка с полосой слева; вторая строка — путь
   по этапам, секундомер шага и полоса хода с живым бликом. */
.wb-unpack-banner {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border-bottom: 1px solid var(--pf-color-accent);
  border-left: 4px solid var(--pf-color-accent);
  background: color-mix(in srgb, var(--pf-color-accent) 12%, var(--pf-color-surface-bar));
  font-size: 13.5px;
}
.wb-unpack-banner__row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--pf-space-md); }
.wb-unpack-banner__row--path { gap: var(--pf-space-sm); }
.wb-unpack-banner__text { flex: 1 1 320px; }
.wb-unpack-banner__text b { color: var(--pf-color-text-accent); }
.wb-unpack-banner__acts { display: flex; gap: var(--pf-space-sm); margin-left: auto; }
.wb-unpack-banner__bar {
  position: relative;
  flex: 1 1 140px;
  max-width: 260px;
  height: 8px;
  border-radius: 999px;
  background: var(--pf-color-border-medium);
  overflow: hidden;
}
.wb-unpack-banner__fill {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--pf-color-accent);
  transition: width 0.6s ease;
}
.wb-unpack-banner--live .wb-unpack-banner__bar::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent);
  transform: translateX(-100%);
  animation: wb-unpack-shimmer 1.8s linear infinite;
}
@keyframes wb-unpack-shimmer { to { transform: translateX(100%); } }
.wb-unpack-banner .wb-status__pill { font-size: 12px; padding: 1px 9px; }
.wb-unpack-banner__pct,
.wb-unpack-banner__step { font-variant-numeric: tabular-nums; white-space: nowrap; }
.wb-unpack-banner__hint { color: var(--pf-color-text-muted); flex: 1 1 260px; }
/* Фоновая распаковка другого романа: чип в шапке и секундомер в строке. */
.wb-unpack-chips { display: inline-flex; gap: 6px; }
.wb-unpack-chip-top {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 300px;
  font-size: 12.5px;
  border: 1px solid var(--pf-color-accent);
  border-radius: 999px;
  padding: 2px 10px;
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-selected);
  cursor: pointer;
}
.wb-unpack-chip-top__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 170px; }
.wb-unpack-chip-top__dot { display: inline-block; animation: wb-unpack-spin 2s linear infinite; }
@keyframes wb-unpack-spin { to { transform: rotate(360deg); } }
.wb-unpack-chip-top__time,
.wb-import-badge__time { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--pf-color-text-accent); }
.wb-import-badge--live::before { content: '⟳ '; }
/* Проба моделей перед стартом (126-я) и досбор пересказа в журнале. */
.wb-import-probe__row { display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; }
.wb-import-probe__row--fail { color: var(--pf-color-text-danger); }
.wb-unpack-recap { margin-top: 4px; align-self: flex-start; }
@media (prefers-reduced-motion: reduce) {
  .wb-unpack-banner--live .wb-unpack-banner__bar::after,
  .wb-unpack-chip-top__dot { animation: none; }
}
/* Панель заданий медиа (Ш5а, BETA-D-152): пакетный прогон картинок и
   образов — плашка-сестра топбара, как распаковка; по завершении та же
   плашка становится итогом-уведомлением и ждёт закрытия крестиком. */
.wb-media-banner {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border-bottom: 1px solid var(--pf-color-accent);
  border-left: 4px solid var(--pf-color-accent);
  background: color-mix(in srgb, var(--pf-color-accent) 12%, var(--pf-color-surface-bar));
  font-size: 13.5px;
}
.wb-media-banner--done {
  border-left-color: var(--pf-color-text-success);
  background: color-mix(in srgb, var(--pf-color-text-success) 10%, var(--pf-color-surface-bar));
}
.wb-media-banner--failed {
  border-left-color: var(--pf-color-text-danger);
  background: color-mix(in srgb, var(--pf-color-text-danger) 10%, var(--pf-color-surface-bar));
}
.wb-media-banner--cancelled { border-left-color: var(--pf-color-border-medium); }
/* «Готова с оговорками» (BETA-D-192): сделано, но есть что решить — тон предупреждения, не ошибки. */
.wb-media-banner--partial {
  border-left-color: var(--pf-color-text-warning);
  background: color-mix(in srgb, var(--pf-color-text-warning) 10%, var(--pf-color-surface-bar));
}
/* «Ждёт проверки» (Ш5б): якоря нарисованы, лестница ждёт слова автора. */
.wb-media-banner--review {
  border-left-color: var(--pf-color-accent);
  background: color-mix(in srgb, var(--pf-color-accent) 16%, var(--pf-color-surface-bar));
}
.wb-media-banner__row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--pf-space-md); }
/* Пилюли ступеней лестницы референсов («Образы ● Портреты ◐ Листы ○»). */
.wb-media-banner__pills { display: inline-flex; gap: 6px; white-space: nowrap; }
.wb-media-banner__pill {
  font-size: 12px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 1px 8px;
  color: var(--pf-color-text-muted);
}
.wb-media-banner__pill--running {
  border-color: var(--pf-color-accent);
  color: var(--pf-color-text-accent);
}
.wb-media-banner__pill--done { color: var(--pf-color-text-success); border-color: var(--pf-color-text-success); }
.wb-media-banner__pill--failed { color: var(--pf-color-text-danger); border-color: var(--pf-color-text-danger); }
.wb-media-banner__icon { color: var(--pf-color-text-accent); }
.wb-media-banner--done .wb-media-banner__icon { color: var(--pf-color-text-success); }
.wb-media-banner--failed .wb-media-banner__icon { color: var(--pf-color-text-danger); }
.wb-media-banner__text { flex: 0 1 auto; }
.wb-media-banner__spacer { flex: 1; }
.wb-media-banner__elapsed { font-variant-numeric: tabular-nums; white-space: nowrap; }
.wb-media-banner__bar {
  position: relative;
  flex: 1 1 120px;
  max-width: 240px;
  height: 8px;
  border-radius: 999px;
  background: var(--pf-color-border-medium);
  overflow: hidden;
}
.wb-media-banner__bar i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--pf-color-accent);
  transition: width 0.6s ease;
}
.wb-media-banner--live .wb-media-banner__bar::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent);
  transform: translateX(-100%);
  animation: wb-unpack-shimmer 1.8s linear infinite;
}
.wb-media-banner__journal {
  border: 1px solid var(--pf-color-border-medium);
  border-radius: var(--pf-radius-sm);
  background: var(--pf-color-surface-raised);
  padding: var(--pf-space-sm) var(--pf-space-md);
}
/* Короб прокрутки ленты (auto-journal.js, BETA-D-192): положение помнится между перерисовками. */
.wb-autolog__scroll {
  position: relative;
  max-height: 38vh;
  overflow-y: auto;
}
.wb-autolog__tail {
  position: sticky;
  bottom: 4px;
  float: right;
  margin-right: 4px;
  display: none;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 2px 10px;
  font: inherit;
  font-size: 12px;
  color: var(--pf-color-text-primary);
  background: var(--pf-color-surface-raised);
  cursor: pointer;
}
.wb-autolog__scroll[data-live='true'][data-follow='false'] .wb-autolog__tail { display: inline-block; }
@media (prefers-reduced-motion: reduce) {
  .wb-media-banner--live .wb-media-banner__bar::after { animation: none; }
}
.wb-autolog__step--err { background: var(--pf-color-surface-danger-soft, rgba(217, 128, 128, 0.1)); }
.wb-autolog__step--err .wb-autolog__ico,
.wb-autolog__step--err b { color: var(--pf-color-text-danger); }
.wb-autolog__sub--quote {
  font-family: var(--pf-font-serif, Georgia, serif);
  border-left: 2px solid var(--pf-color-border-medium);
  padding-left: 6px;
  margin-top: 2px;
}
.wb-autolog__sub--link { color: var(--pf-color-text-accent); text-decoration: underline dotted; cursor: pointer; background: none; border: none; padding: 0; font-size: 12px; text-align: left; }
.wb-autolog__split--phase { color: var(--pf-color-text-accent); }
.wb-unpack-fail {
  margin: var(--pf-space-sm) var(--pf-space-md) 0;
  padding: var(--pf-space-sm) var(--pf-space-md);
  border: 1px solid var(--pf-color-text-danger);
  border-radius: var(--pf-radius-md);
  background: var(--pf-color-surface-danger-soft, rgba(217, 128, 128, 0.1));
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 13px;
}
.wb-unpack-fail--paused { border-color: var(--pf-color-accent); background: var(--pf-color-surface-selected); }
.wb-unpack-fail--done { border-color: var(--pf-color-border-medium); background: transparent; }
.wb-unpack-fail b { color: var(--pf-color-text-danger); }
.wb-unpack-fail--paused b { color: var(--pf-color-text-accent); }
.wb-unpack-fail--done b { color: var(--pf-color-text-success); }
.wb-unpack-fail__acts { display: flex; flex-wrap: wrap; gap: var(--pf-space-xs); }
.wb-unpack-filters { display: flex; gap: var(--pf-space-xs); padding: var(--pf-space-xs) var(--pf-space-md); border-bottom: 1px solid var(--pf-color-border-subtle); }
.wb-unpack-chip {
  font-size: 12px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 1px 9px;
  color: var(--pf-color-text-muted);
  background: transparent;
  cursor: pointer;
}
.wb-unpack-chip--on { color: var(--pf-color-text-danger); border-color: var(--pf-color-text-danger); }
.wb-unpack-answer {
  white-space: pre-wrap;
  font-family: var(--pf-font-serif, Georgia, serif);
  font-size: 14px;
  line-height: 1.55;
  max-height: 60vh;
  overflow: auto;
  margin: 0;
}
.wb-status__pills { display: inline-flex; gap: 4px; }
.wb-status__pill {
  font-size: 11.5px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  padding: 0 8px;
  color: var(--pf-color-text-muted);
  white-space: nowrap;
}
.wb-status__pill--done { color: var(--pf-color-text-success); }
.wb-status__pill--run { color: var(--pf-color-text-accent); border-color: var(--pf-color-accent); background: var(--pf-color-surface-selected); }

/* Идущие вызовы модели при уровне параллельности выше 1 (замечание
 * владельца 15.09 п. 1, 263-я): пилюля на каждый вызов — пункт, назначение
 * и свой секундомер. «Сейчас здесь» — подложка выделения и черта акцента
 * с обычным текстом, не заливка акцента (правило золота). В строке
 * состояния пилюли в одну строку с обрезкой, на баре — переносом. */
.wb-status__calls { display: inline-flex; flex-wrap: nowrap; align-items: center; gap: 4px; min-width: 0; overflow: hidden; }
.wb-media-banner__row .wb-status__calls { flex-wrap: wrap; overflow: visible; }
.wb-status__call {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  max-width: 30ch;
  padding: 0 8px;
  border: 1px solid var(--pf-color-border-medium);
  border-left: 2px solid var(--pf-color-accent);
  border-radius: 999px;
  background: var(--pf-color-surface-selected);
  color: var(--pf-color-text-primary);
  font-size: 11.5px;
  line-height: 1.6;
  white-space: nowrap;
}
.wb-status__call--more { border-left-width: 1px; color: var(--pf-color-text-muted); }
.wb-status__call-what { overflow: hidden; text-overflow: ellipsis; }
.wb-status__call-time { color: var(--pf-color-text-accent); font-weight: 600; font-variant-numeric: tabular-nums; }

/* ── Мастер нарезки, редакция 2 (BETA-D-117, Э3): правило, отчёт о
   непопавшем тексте, строки глав с границей и началом текста, действия,
   просмотр главы для разреза. ── */
.wb-import-how { color: var(--pf-color-text-muted); font-size: 13px; max-width: 78ch; margin: 0; }
.wb-import-rule { display: flex; flex-direction: column; gap: 6px; font-size: 13.5px; }
.wb-import-rule__opt { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wb-import-rule__opt input[type='radio'] { margin: 0; }
.wb-import-rule__found { color: var(--pf-color-text-success); font-size: 12.5px; }
.wb-import-rule__found--none { color: var(--pf-color-text-muted); }
.wb-import-rule__marker { width: 180px; font-family: var(--pf-font-mono, monospace); font-size: 13px; }
.wb-import-report {
  border: 1px solid var(--pf-color-text-warning);
  background: var(--pf-color-surface-warning-soft);
  border-radius: var(--pf-radius-md);
  padding: 8px 12px;
  font-size: 13px;
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
}
.wb-import-report__q { font-family: var(--pf-font-serif, Georgia, serif); color: var(--pf-color-text-muted); }
.wb-import-colhint { display: flex; justify-content: space-between; color: var(--pf-color-text-muted); font-size: 12.5px; }
.wb-import-chapter { grid-template-columns: 36px 1fr 82px auto; }
.wb-import-chapter__bnd { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.wb-import-chapter__bnd b { font-weight: 600; }
.wb-import-chapter__ln { font-family: var(--pf-font-mono, monospace); font-size: 11.5px; color: var(--pf-color-text-muted); }
.wb-import-chapter__part {
  font-size: 11.5px;
  color: var(--pf-color-text-accent);
  border: 1px solid var(--pf-color-accent);
  border-radius: 999px;
  padding: 0 7px;
}
.wb-import-chapter__ex { font-family: var(--pf-font-serif, Georgia, serif); color: var(--pf-color-text-muted); font-size: 13px; }
.wb-import-chapter__ex i { font-family: var(--pf-font-sans, inherit); font-style: normal; font-size: 12px; color: var(--pf-color-text-warning); }
.wb-import-chapter__chars--warn { color: var(--pf-color-text-warning); }
.wb-import-chapter__acts { display: flex; gap: 4px; justify-content: flex-end; }
.wb-import-chapter__acts button {
  border: 1px solid var(--pf-color-border-medium);
  background: transparent;
  color: var(--pf-color-text-muted);
  border-radius: 5px;
  padding: 0 6px;
  font-size: 12px;
  cursor: pointer;
}
.wb-import-rename { display: flex; gap: 6px; align-items: center; margin-top: 4px; }
.wb-import-rename input { flex: 1 1 auto; }
.wb-import-lines { border: 1px solid var(--pf-color-border-subtle); border-radius: var(--pf-radius-md); max-height: 300px; overflow: auto; display: flex; flex-direction: column; }
.wb-import-line {
  text-align: left;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--pf-color-border-subtle);
  padding: 6px 10px;
  font-family: var(--pf-font-serif, Georgia, serif);
  font-size: 13.5px;
  color: var(--pf-color-text);
  cursor: pointer;
}
.wb-import-line:hover:not(:disabled) { background: var(--pf-color-surface-selected); }
.wb-import-line:disabled { color: var(--pf-color-text-muted); cursor: default; }
.wb-import-line__no { font-family: var(--pf-font-mono, monospace); font-size: 11px; color: var(--pf-color-text-muted); margin-right: 8px; }

/* ── Нарезка на главы, редакция 3 (BETA-D-118): окно 95 % экрана; слева
   правила и оглавление, справа весь текст с границами-пунктирами; «+ ✂»
   у абзаца по наведению; убранная граница остаётся зачёркнутой. ── */
.wb-overlay--cut { width: 95vw; max-width: 95vw; height: 95vh; max-height: 95vh; }
.wb-overlay--cut .wb-overlay__body {
  flex: 1 1 auto;
  min-height: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.wb-cut { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.wb-cut__body { flex: 1 1 auto; min-height: 0; display: flex; }
.wb-cut__left {
  flex: 0 0 33.333%;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--pf-color-border-subtle);
}
.wb-cut__methods {
  flex: none;
  max-height: 52%;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
  padding: var(--pf-space-md) var(--pf-space-lg);
  border-bottom: 1px solid var(--pf-color-border-subtle);
}
.wb-cut__methods .wb-import-how { font-size: 12.5px; }
.wb-cut__sec {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-color-text-muted);
}
.wb-cut__toc { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.wb-cut__toc-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--pf-space-sm);
  padding: var(--pf-space-sm) var(--pf-space-lg) 0;
}
.wb-cut-find { margin-left: auto; width: 190px; font-size: 12.5px; border-radius: 999px; padding: 3px 10px; }
.wb-cut__toc-hint { margin: 2px var(--pf-space-lg) 4px; }
.wb-cut-toc { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 0 var(--pf-space-sm) var(--pf-space-sm); }
.wb-cut-toc__row {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  gap: 2px 8px;
  align-items: baseline;
  width: 100%;
  text-align: left;
  padding: 5px 8px;
  border: 0;
  border-radius: var(--pf-radius-sm);
  background: transparent;
  color: var(--pf-color-text-primary);
  font: inherit;
  font-size: 13px;
  cursor: pointer;
}
.wb-cut-toc__row:hover { background: var(--pf-color-surface-control); }
.wb-cut-toc__row--on { background: var(--pf-color-surface-selected); outline: 1px solid var(--pf-color-surface-accent); }
.wb-cut-toc__no { color: var(--pf-color-text-muted); font-variant-numeric: tabular-nums; }
.wb-cut-toc__meta { color: var(--pf-color-text-muted); font-size: 12px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.wb-cut-toc__row--warn .wb-cut-toc__meta { color: var(--pf-color-text-warning); }
.wb-cut-toc__ex {
  grid-column: 2 / 4;
  color: var(--pf-color-text-muted);
  font-size: 12px;
  font-family: var(--pf-typography-manuscript-family, Georgia, serif);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.wb-cut__right { flex: 1 1 auto; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
.wb-cut__text-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--pf-space-md);
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border-bottom: 1px solid var(--pf-color-border-subtle);
  font-size: 12.5px;
  color: var(--pf-color-text-muted);
}
.wb-cut-text {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  padding: var(--pf-space-sm) 0 var(--pf-space-xl);
  font-family: var(--pf-typography-manuscript-family, Georgia, serif);
  font-size: 15px;
  line-height: 1.6;
}
.wb-cut-line__row {
  position: relative;
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 10px;
  padding: 2px var(--pf-space-lg) 2px 0;
}
.wb-cut-line--blank .wb-cut-line__row { padding: 0; min-height: 10px; }
.wb-cut-line--blank .wb-cut-line__no { display: none; }
.wb-cut-line__no {
  text-align: right;
  color: var(--pf-color-text-muted);
  font: 11.5px/1.6 var(--pf-typography-code-family, monospace);
  padding-top: 3px;
  user-select: none;
}
.wb-cut-line__txt { max-width: 78ch; white-space: pre-wrap; overflow-wrap: anywhere; }
.wb-cut-line--heading .wb-cut-line__txt { color: var(--pf-color-text-muted); font-style: italic; font-weight: 600; }
.wb-cut-line--hit .wb-cut-line__txt { background: var(--pf-color-surface-selected); }
/* «+ ✂» — по наведению на абзац (слово владельца по эскизу ред. 3). */
.wb-cut-add {
  position: absolute;
  left: 50%;
  top: -11px;
  transform: translateX(-50%);
  opacity: 0;
  z-index: 1;
  font: 500 12px var(--pf-typography-body-family, sans-serif);
  border: 1px solid var(--pf-color-surface-accent);
  border-radius: 999px;
  padding: 1px 10px;
  color: var(--pf-color-text-accent);
  background: var(--pf-color-surface-raised);
  cursor: pointer;
  transition: opacity 0.12s;
}
.wb-cut-line__row:hover .wb-cut-add,
.wb-cut-add:focus-visible { opacity: 1; }
.wb-cut-line__row:hover::before {
  content: '';
  position: absolute;
  left: 66px;
  right: var(--pf-space-lg);
  top: 0;
  border-top: 1px dashed var(--pf-color-border-medium);
}
.wb-cut-line--bnd .wb-cut-line__row:hover::before,
.wb-cut-line--blank .wb-cut-line__row:hover::before { display: none; }
/* Граница главы: пунктир с карточкой. */
.wb-cut-mark {
  position: relative;
  margin: 12px 0 6px;
  padding: 0 var(--pf-space-lg) 0 66px;
  font-family: var(--pf-typography-body-family, sans-serif);
  font-size: 13px;
}
.wb-cut-mark::before {
  content: '';
  position: absolute;
  left: 66px;
  right: var(--pf-space-lg);
  top: 50%;
  border-top: 2px dashed var(--pf-color-surface-accent);
}
.wb-cut-mark__tag {
  position: relative;
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 2px 10px 2px 6px;
  border: 1px solid var(--pf-color-surface-accent);
  border-radius: 999px;
  background: var(--pf-color-surface-raised);
  color: var(--pf-color-text-accent);
}
.wb-cut-mark__sc { color: var(--pf-color-surface-accent); }
.wb-cut-mark__meta { color: var(--pf-color-text-muted); font-size: 12px; }
.wb-cut-mark__warn { color: var(--pf-color-text-warning); font-size: 12px; }
.wb-cut-mark__btn {
  border: 0;
  border-left: 1px solid var(--pf-color-border-medium);
  background: transparent;
  color: var(--pf-color-text-muted);
  font: inherit;
  font-size: 12px;
  padding: 0 0 0 8px;
  cursor: pointer;
}
.wb-cut-mark__btn:hover { color: var(--pf-color-text-accent); }
.wb-cut-mark__btn--x:hover { color: var(--pf-color-text-danger); }
.wb-cut-mark--on .wb-cut-mark__tag,
.wb-cut-line--on .wb-cut-mark__tag { background: var(--pf-color-surface-selected); }
.wb-cut-mark--rm .wb-cut-mark__tag { border-color: var(--pf-color-border-medium); color: var(--pf-color-text-muted); }
.wb-cut-mark--rm::before { border-color: var(--pf-color-border-medium); }
.wb-cut-mark__note {
  position: relative;
  display: inline-block;
  margin-left: 8px;
  padding: 0 8px;
  border: 1px solid var(--pf-color-border-medium);
  border-radius: 999px;
  background: var(--pf-color-surface-raised);
  font-size: 11.5px;
  color: var(--pf-color-text-muted);
}
.wb-cut-rename { display: inline-flex; align-items: center; gap: 6px; }
.wb-cut-rename .wb-input { width: 260px; padding: 2px 8px; font-size: 13px; }
.wb-cut__foot {
  flex: none;
  display: flex;
  align-items: center;
  gap: var(--pf-space-md);
  padding: var(--pf-space-sm) var(--pf-space-lg);
  border-top: 1px solid var(--pf-color-border-subtle);
}
.wb-cut__hint { max-width: 62ch; }
.wb-cut__count { white-space: nowrap; font-variant-numeric: tabular-nums; }
@media (prefers-reduced-motion: reduce) { .wb-cut-add { transition: none; } }
/* Ред. 4 (BETA-D-127): не включённые куски — красный пунктир, зачёркнутые
   строки; выделение мышью — подсветка строк и пилюля с кнопкой в шапке. */
.wb-cut-line--ex .wb-cut-line__txt {
  text-decoration: line-through;
  text-decoration-color: var(--pf-color-text-danger);
  color: var(--pf-color-text-muted);
}
.wb-cut-line--ex .wb-cut-line__no { color: var(--pf-color-text-danger); opacity: 0.6; }
.wb-cut-line--ex .wb-cut-line__row:hover::before { display: none; }
/* Начало до первой главы — не войдёт (замечание владельца 06.10): как не включённое. */
.wb-cut-line--pre .wb-cut-line__txt {
  text-decoration: line-through;
  text-decoration-color: var(--pf-color-text-danger);
  color: var(--pf-color-text-muted);
}
.wb-cut-line--pre .wb-cut-line__no { color: var(--pf-color-text-danger); opacity: 0.6; }
.wb-cut-line--sel .wb-cut-line__txt { background: var(--pf-color-surface-selected); border-radius: 3px; }
.wb-cut-mark--ex .wb-cut-mark__tag { border-color: var(--pf-color-text-danger); color: var(--pf-color-text-danger); }
.wb-cut-mark--ex .wb-cut-mark__sc { color: var(--pf-color-text-danger); }
.wb-cut-mark--ex::before { border-color: var(--pf-color-text-danger); opacity: 0.7; }
.wb-cut-mark__btn--ex:hover:not(:disabled) { color: var(--pf-color-text-danger); }
.wb-cut-mark__btn:disabled { opacity: 0.45; cursor: default; }
/* Карточки и кнопки в выделение мышью не попадают — кусок считается по тексту. */
.wb-cut-mark, .wb-cut-add { user-select: none; }
.wb-cut-selbar {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 2px 4px 2px 10px;
  border: 1px solid var(--pf-color-surface-accent);
  border-radius: 999px;
  background: var(--pf-color-surface-selected);
  font-variant-numeric: tabular-nums;
}
.wb-cut-selbar--off { display: none; }
.wb-cut-selbar__btn { color: var(--pf-color-text-danger); }
.wb-cut__toc-note {
  flex: none;
  margin: 4px var(--pf-space-lg) 8px;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--pf-color-text-muted);
}
.wb-cut__toc-note--ex { color: var(--pf-color-text-danger); }
/* Узкая левая панель окна нарезки: правило в одну строку с переключателем,
   поле метки не выталкивает «Применить», принцип — мелким; кнопка
   «Включить как „Пролог“» видна без прокрутки. */
.wb-cut__methods { max-height: 60%; }
.wb-cut__methods .wb-import-how { font-size: 12px; line-height: 1.4; }
.wb-cut__methods .wb-import-rule__opt { display: flex; align-items: baseline; gap: 6px; flex-wrap: nowrap; }
.wb-cut__methods .wb-import-rule__opt > input { flex: none; }
.wb-cut__methods .wb-import-rule__opt > span { flex: 1 1 auto; min-width: 0; }
.wb-cut__methods .wb-import-rule__found { flex: none; }
.wb-cut__methods .wb-import-rule__opt > .pf-btn { flex: none; }
.wb-cut__methods .wb-import-rule__marker { flex: 1 1 120px; min-width: 0; width: auto; }
.wb-cut__methods .wb-import-report { flex-direction: column; align-items: flex-start; gap: 4px; }
.wb-cut__hint { font-size: 12px; line-height: 1.35; }

/* ── Полный автомат Р4 «из черновика» (BETA-D-128): карта запуска, плашка, пилюли ── */
.wb-full-tag {
  display: inline-block;
  margin-left: 8px;
  padding: 0 7px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 600;
  line-height: 17px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  background: var(--pf-color-surface-warning-soft);
  color: var(--pf-color-text-warning);
  vertical-align: 2px;
}
.wb-modemenu__row--r4 { border-top: 1px dashed var(--pf-color-border-subtle); margin-top: 4px; padding-top: 10px; }
.wb-full-warn {
  background: var(--pf-color-surface-warning-soft);
  border: 1px solid var(--pf-color-text-warning);
  border-radius: var(--pf-radius-sm, 7px);
  padding: 10px 12px;
  font-size: 13.5px;
  line-height: 1.5;
}
.wb-full-warn b { color: var(--pf-color-text-warning); }
.wb-full-launch__cols { display: grid; grid-template-columns: 1.25fr 1fr; gap: var(--pf-space-lg); }
.wb-full-launch__col { min-width: 0; }
.wb-full-launch__col--ladder {
  border-left: 1px solid var(--pf-color-border-subtle);
  padding-left: var(--pf-space-lg);
}
.wb-full-ladder__title {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-color-text-muted);
  margin-bottom: 8px;
}
.wb-full-ladder { margin: 0 0 var(--pf-space-sm); padding-left: 22px; font-size: 13.5px; }
.wb-full-ladder li { padding: 3px 0; border-bottom: 1px dashed var(--pf-color-border-subtle); }
.wb-full-ladder li:last-child { border-bottom: 0; }
.wb-full-launch__target { flex-wrap: wrap; }
.wb-full-probes { margin: var(--pf-space-sm) 0; padding-left: 20px; }
.wb-full-pills { display: inline-flex; gap: 4px; flex-wrap: wrap; }
.wb-full-pill {
  padding: 1px 9px;
  border-radius: 999px;
  background: var(--pf-color-surface-control);
  color: var(--pf-color-text-muted);
  font-size: 12.5px;
  white-space: nowrap;
}
.wb-full-pill--done { color: var(--pf-color-text-success); }
.wb-full-pill--now { background: var(--pf-color-accent); color: var(--pf-color-text-on-accent, #17130a); font-weight: 600; }
.wb-full-pill--stopped { border: 1px solid var(--pf-color-text-warning); color: var(--pf-color-text-warning); }
.wb-full-banner__clock { font-size: 14px; }
/* Галочка «подробный план каждой сцены» в карте Р4 (BETA-D-130). */
.wb-full-launch__detail { margin: 6px 0 2px; font-size: 13px; align-items: flex-start; }
.wb-full-launch__detail input { margin-top: 3px; }
/* Меню режимов при живой машине: строки погашены, смена — после «Паузы». */
.wb-modemenu__row:disabled { opacity: 0.55; cursor: not-allowed; }
.wb-modemenu__row:disabled:hover { background: transparent; }
.wb-modechip__err { display: block; margin-top: 4px; font-size: 12px; }
@media (max-width: 900px) {
  .wb-full-launch__cols { grid-template-columns: 1fr; }
  .wb-full-launch__col--ladder { border-left: 0; padding-left: 0; }
}

/* Карточка коллекции канона с аватаркой (Ш1б, BETA-D-140 п.3): круг во
 * всю высоту слева, имя и строка «кто это» (две строки) справа, объём в
 * правом нижнем углу; звезда яруса лежит над карточкой, как прежде. */
.wb-canon-card--list {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  grid-template-rows: auto auto;
  column-gap: var(--pf-space-sm);
  row-gap: 2px;
  align-items: start;
}

.wb-canon-card--list .wb-canon-card__ava {
  grid-row: 1 / span 2;
  align-self: center;
  display: inline-grid;
}

.wb-canon-card--list .wb-canon-card__name {
  grid-column: 2;
  grid-row: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.wb-canon-card--list .wb-canon-card__preview {
  grid-column: 2;
  grid-row: 2;
  min-height: 1em;
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.wb-canon-card--list .wb-canon-card__chars {
  grid-column: 3;
  grid-row: 2;
  align-self: end;
  white-space: nowrap;
}

.wb-canon-scene__name {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-xs);
}

/* Музыка к ролику (BETA-D-177 В4): раздел модалки «Видео», «♪» в панели плеера. */
.wb-anx-music__row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pf-space-sm); width: 100%; }
.wb-anx-music__select { max-width: 360px; min-width: 200px; }
/* Полка треков списком (BETA-D-178 п. 6): выбор, «прослушать», «сочинить заново»; родной плеер под полкой. */
.wb-anx-music__shelf { display: flex; flex-direction: column; gap: 2px; width: 100%; max-width: 640px; }
.wb-anx-music__track { display: flex; align-items: center; gap: var(--pf-space-sm); padding: 4px 6px; border-radius: 6px; }
.wb-anx-music__track--on { background: var(--pf-color-surface-selected); }
.wb-anx-music__radio { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; padding: 0; border: 0; background: transparent; cursor: pointer; }
.wb-anx-music__dot { width: 12px; height: 12px; border-radius: 50%; border: 1px solid var(--pf-color-border-medium); }
.wb-anx-music__radio[aria-checked='true'] .wb-anx-music__dot { background: var(--pf-color-surface-accent); border-color: var(--pf-color-surface-accent); }
.wb-anx-music__name { font-size: 12.5px; }
.wb-anx-music__made { color: var(--pf-color-text-muted); }
.wb-anx-music__listen,
.wb-anx-music__again { min-width: 34px; padding: 0 8px; }
.wb-anx-music__preview { display: block; width: 100%; max-width: 640px; height: 32px; }
.wb-anx-music__words { width: 100%; max-width: 640px; }
.wb-anx-music__nokey { display: inline-flex; align-items: center; gap: var(--pf-space-xs); }
.wb-anx-music__prompt { width: 100%; }
.wb-anx-music__prompt > summary { cursor: pointer; color: var(--pf-color-text-secondary); }
.wb-anx-music__prompt-text {
  margin: var(--pf-space-xs) 0 0;
  padding: var(--pf-space-xs) var(--pf-space-sm);
  max-height: 220px;
  overflow: auto;
  white-space: pre-wrap;
  font-size: var(--pf-typography-caption-size);
  color: var(--pf-color-text-secondary);
  background: var(--pf-color-surface-control);
  border: 1px solid var(--pf-color-border-subtle);
  border-radius: 6px;
}
.wb-anx-music__toggle { min-width: 34px; padding: 0 8px; }
/* Семь стилей не помещаются в строку окна — переносятся, не растягивают окно. */
.wb-anx-music__styles { flex-wrap: wrap; row-gap: 2px; border-radius: 14px; max-width: 100%; }

/* Глубина замысла (BETA-D-210, seed-depth.js): подпись + сегменты в строку,
   строка «Сейчас: …» под ними; на узком экране сегменты переносятся. */
.wb-seed-depth {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}
.wb-seed-depth__row {
  flex-wrap: wrap;
  gap: var(--pf-space-sm);
  align-items: center;
}
.wb-seed-depth__now { margin: 0; }
/* Строка настроек романа «Глубина замысла»: радио во всю ширину карточки,
   пояснение под ними (в сетке wb-set-model подпись «Авто» ломалась на
   восемь строк — снимок staging 13.09). */
.wb-seed-depth-set {
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-xs);
}
.wb-seed-depth-set .wb-prop-set__radios { gap: var(--pf-space-xs); }
.wb-seed-depth-set .wb-prop-set__radio { align-items: baseline; }
.wb-seed-depth-set > .pf-caption { margin: 0; }


/* Пометка «оригиналы в архиве» в панели романов (BETA-D-238): форма — пунктирная рамка, не цвет. */
.wb-nav__archived {
  margin-left: var(--pf-space-xs);
  padding: 0 var(--pf-space-xs);
  border: 1px dashed var(--pf-color-border-strong);
  border-radius: var(--pf-radius-sm);
  color: var(--pf-color-text-primary);
  font-size: 11px;
  white-space: nowrap;
}

/* Итог «Продолжения» (IN-002, шаг 7; sequel-review.js): шире обычного окна —
   имя героя и выбор группы в одну строку; длинные группы свёрнуты. */
.wb-overlay.wb-sequel-review {
  max-width: 960px;
}

.wb-sequel-review__row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 12rem;
  gap: var(--pf-space-md);
  align-items: center;
  padding: var(--pf-space-xs) 0;
  border-bottom: 1px solid var(--pf-color-border-subtle);
}

.wb-sequel-review__list {
  margin: 0;
  padding-left: var(--pf-space-lg);
}

/* Режим «Перевод» (IN-004, translation.js): поля мастера, раздел панели, экран проекта. */
.wb-tr-direction { display: flex; flex-direction: column; gap: var(--pf-space-xs, 6px); }
.wb-tr-direction .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-radio { gap: var(--pf-space-xs, 6px); align-items: center; cursor: pointer; }
.wb-tr-nav { margin-top: var(--pf-space-md, 12px); border-top: 1px solid var(--pf-color-border-subtle); padding-top: var(--pf-space-sm, 8px); }
.wb-tr-nav__title { display: block; padding: 0 var(--pf-space-sm, 8px) var(--pf-space-xs, 6px); color: var(--pf-color-text-secondary); }
.wb-tr-nav .wb-nav__item { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; }
.wb-tr .wb-overlay__head { gap: var(--pf-space-md, 12px); align-items: baseline; }
.wb-tr .wb-overlay__body { padding: var(--pf-space-md, 12px); gap: var(--pf-space-md, 12px); }
.wb-tr-split { display: flex; flex: 1 1 auto; min-height: 0; gap: var(--pf-space-md, 12px); }
.wb-tr-toc { flex: 0 0 320px; overflow-y: auto; border-right: 1px solid var(--pf-color-border-subtle); padding-right: var(--pf-space-sm, 8px); }
.wb-tr-toc__item { display: flex; gap: var(--pf-space-sm, 8px); width: 100%; text-align: left; border-left: 3px solid transparent; }
/* «Выбрано» — подложка выделения и черта акцента, не заливка акцента (ui.md §«Золото»). */
.wb-tr-toc__item--on { background: var(--pf-color-surface-selected); border-left-color: var(--pf-color-accent); color: var(--pf-color-text-primary); }
.wb-tr-toc__no { flex: 0 0 2.5em; color: var(--pf-color-text-muted); font-variant-numeric: tabular-nums; }
.wb-tr-toc__title { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; }
.wb-tr-source { flex: 1 1 auto; overflow-y: auto; padding: 0 var(--pf-space-md, 12px); }
.wb-tr-text { max-width: 46em; margin: 0 auto; font-family: Georgia, 'Times New Roman', serif; line-height: 1.6; color: var(--pf-color-text-primary); }
.wb-tr-para { margin: 0 0 0.9em; white-space: pre-wrap; }
.wb-tr-run { display: flex; flex-direction: column; gap: var(--pf-space-xs, 6px); }
.wb-tr-run .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; }
.wb-tr-summary { max-width: 46em; margin: 0 auto var(--pf-space-md, 12px); padding: var(--pf-space-sm, 8px) var(--pf-space-md, 12px); border-left: 3px solid var(--pf-color-border-medium); background: var(--pf-color-surface-raised); }
.wb-tr-glossary { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-gl-head { gap: var(--pf-space-sm, 8px); align-items: center; position: sticky; top: 0; background: var(--pf-color-surface-canvas); padding: var(--pf-space-xs, 6px) 0; z-index: 1; }
.wb-tr-gl { width: 100%; border-collapse: collapse; }
/* Размеры в знаках (слово владельца 07.10): пара абзацев, шапка проекта, строки моделей настроек. */
.wb-tr-bi__size { display: block; font-size: 10px; line-height: 1.2; color: var(--pf-color-text-tertiary, var(--pf-color-text-secondary)); white-space: nowrap; }
.wb-tr-page__sizes { margin: 0 0 var(--pf-space-sm, 8px); }
.wb-tr-chapter-meta { margin: 0 0 var(--pf-space-xs, 6px); }
.wb-tr-detail__size { margin-left: var(--pf-space-sm, 8px); white-space: nowrap; }
.wb-tr-proj__size { display: block; }.wb-tr-gl th { text-align: left; color: var(--pf-color-text-secondary); font-weight: normal; padding: var(--pf-space-xs, 6px); border-bottom: 1px solid var(--pf-color-border-medium); }
.wb-tr-gl td { vertical-align: top; padding: var(--pf-space-xs, 6px); border-bottom: 1px solid var(--pf-color-border-subtle); }
.wb-tr-gl td:first-child { width: 24%; }
.wb-tr-gl td:nth-child(2) { width: 30%; }
.wb-tr-gl .wb-input { width: 100%; }
.wb-tr-gl__aliases { margin-top: 4px; font-size: 0.9em; }
.wb-tr-gl__term { color: var(--pf-color-text-primary); }
/* Сомнение — отличие формой (черта слева и текст предупреждения), не заливкой акцента. */
.wb-tr-gl__row--doubt td:first-child { border-left: 3px solid var(--pf-color-text-warning); }
.wb-tr-gl__doubt { color: var(--pf-color-text-warning); margin-bottom: 4px; }
/* «Перевод», срез 2: пометки структуры, разрез по абзацу, страницы скана. */
.wb-tr-mark { flex: 0 0 auto; font-size: 0.8em; color: var(--pf-color-text-secondary); border: 1px dashed var(--pf-color-border-medium); border-radius: 999px; padding: 0 6px; white-space: nowrap; }
.wb-tr-para-row { position: relative; }
.wb-tr-cut { position: absolute; left: -2.2em; top: 0; opacity: 0.35; border: 1px solid var(--pf-color-border-subtle); background: var(--pf-color-surface-raised); color: var(--pf-color-text-secondary); border-radius: 4px; cursor: pointer; font-size: 0.85em; padding: 0 4px; }
.wb-tr-para-row:hover .wb-tr-cut, .wb-tr-cut:focus-visible { opacity: 1; }
.wb-tr-split-form { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; margin: 0 0 0.9em; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px); border-top: 2px dashed var(--pf-color-accent); font-family: inherit; }
.wb-tr-split-form .wb-input { flex: 1 1 18em; }
.wb-tr-chapter-pages { max-width: 46em; margin: 0 auto var(--pf-space-sm, 8px); gap: 4px; flex-wrap: wrap; align-items: center; }
.wb-tr-structure { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-st td:first-child { width: 3em; }
.wb-tr-st td:nth-child(2) { width: auto; }
.wb-tr-st__no, .wb-tr-st__chars { color: var(--pf-color-text-muted); font-variant-numeric: tabular-nums; }
/* Не переводится — отличие формой: пунктирная черта слева и приглушённый текст, не заливка. */
.wb-tr-st__row--skip td:first-child, .wb-tr-st__row--literature td:first-child { border-left: 3px dashed var(--pf-color-border-medium); }
.wb-tr-st__row--notes td:first-child { border-left: 3px dotted var(--pf-color-border-medium); }
.wb-tr-st__row--skip .wb-input, .wb-tr-st__row--literature .wb-input { color: var(--pf-color-text-secondary); }
.wb-tr-page--failed .wb-tr-toc__title { color: var(--pf-color-text-warning); }
.wb-tr-page--pending .wb-tr-toc__title { color: var(--pf-color-text-muted); }
.wb-tr-page { display: flex; gap: var(--pf-space-md, 12px); align-items: flex-start; }
.wb-tr-page__img { flex: 1 1 50%; margin: 0; }
.wb-tr-page__img img { max-width: 100%; height: auto; border: 1px solid var(--pf-color-border-subtle); }
.wb-tr-page__text { flex: 1 1 50%; margin: 0; }
/* Срез 4: паспорт и гид, пробная глава парами, образцы. */
.wb-tr-docs, .wb-tr-trial { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-docs__cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(28em, 1fr)); gap: var(--pf-space-md, 12px); }
.wb-tr-doc { display: flex; flex-direction: column; gap: 4px; }
.wb-tr-doc__head { gap: var(--pf-space-sm, 8px); align-items: center; }
.wb-tr-doc__text { width: 100%; resize: vertical; font-family: Georgia, 'Times New Roman', serif; line-height: 1.5; }
.wb-tr-bi th:first-child, .wb-tr-bi td:first-child { width: 3.5em; }
.wb-tr-bi th:nth-child(2), .wb-tr-bi th:nth-child(3), .wb-tr-bi td:nth-child(2), .wb-tr-bi td:nth-child(3) { width: calc(50% - 1.75em); }
.wb-tr-bi__src .wb-tr-para { font-family: Georgia, 'Times New Roman', serif; line-height: 1.5; margin: 0; }
.wb-tr-bi__text { width: 100%; resize: vertical; font-family: Georgia, 'Times New Roman', serif; line-height: 1.5; }
/* Правка автора — черта акцента слева (форма), не заливка. */
.wb-tr-bi__row--edited td:nth-child(3) { border-left: 3px solid var(--pf-color-accent); }
/* Эскиз v3 (07.10): колонки одной ширины, шрифта и шага — абзац против абзаца, как разворот книги. */
.wb-tr-bi { table-layout: fixed; width: 100%; }
.wb-tr-bi__src .wb-tr-para, .wb-tr-bi__text { font-family: Georgia, 'Times New Roman', serif; font-size: 15px; line-height: 1.6; margin: 0; padding: 2px 0; }
.wb-tr-bi .wb-tr-rich { min-height: 0; border: 0; background: transparent; }
.wb-tr-bi .wb-tr-rich:focus { outline: 1px solid var(--pf-color-border-focus); outline-offset: 2px; }
/* Предложение по клику — рамка акцента (черта, не заливка: золото только под инверсным текстом), абзац — пунктир. */
.wb-tr-s { border-radius: 2px; }
.wb-tr-bi__src .wb-tr-s { cursor: pointer; }
.wb-tr-s--hl { background: var(--pf-color-surface-selected); border-bottom: 2px solid var(--pf-color-accent); box-decoration-break: clone; -webkit-box-decoration-break: clone; }
.wb-tr-para--hl { outline: 1px dashed var(--pf-color-accent); outline-offset: -2px; }
/* Во всю ширину: две колонки во весь стол, строка не длиннее ~75 знаков на 4K. */
.wb-tr-desk--wide .wb-tr-detail--wide { flex: 1 1 auto; max-width: none; }
.wb-tr-desk--wide .wb-tr-bi { max-width: calc(2 * 75ch + 4em); margin: 0 auto; }
.wb-tr-bi__row--flag td:first-child { border-left: 3px solid var(--pf-color-text-warning); }
.wb-tr-bi__flag td { color: var(--pf-color-text-warning); font-size: 0.9em; }
.wb-tr-samples { display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); margin-top: var(--pf-space-md, 12px); border-top: 1px solid var(--pf-color-border-medium); padding-top: var(--pf-space-sm, 8px); }
.wb-tr-samples__cards { display: flex; flex-direction: column; gap: var(--pf-space-md, 12px); }
.wb-tr-sample { border: 1px solid var(--pf-color-border-subtle); border-left: 3px solid var(--pf-color-accent); padding: var(--pf-space-sm, 8px) var(--pf-space-md, 12px); background: var(--pf-color-surface-raised); }
.wb-tr-sample .pf-row { gap: var(--pf-space-sm, 8px); align-items: baseline; }
.wb-tr-sample__pair { display: grid; grid-template-columns: 1fr 1fr; gap: var(--pf-space-md, 12px); }
.wb-tr-sample__pair .wb-tr-text { max-width: none; margin: 0; }
/* Шапка пробной главы — в одну строку: выбор главы не на всю ширину. */
.wb-tr-trial .wb-tr-gl-head { flex-wrap: wrap; }
#wb-tr-trial-pick { width: auto; max-width: 28em; flex: 0 1 auto; }
.wb-tr-doc__text { min-height: 55vh; }
.wb-tr-samples__head { gap: var(--pf-space-sm, 8px); align-items: center; }
/* Срез 5: поток перевода — ход по главам, глава по блокам, флаги, принятие. */
.wb-tr-flow { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-flow__list { flex-basis: 360px; }
.wb-tr-flow__item { flex-wrap: wrap; align-items: baseline; }
.wb-tr-flow__state { flex: 1 0 100%; padding-left: 2.5em; }
/* Принятая глава — сплошная черта слева (форма), не заливка. */
.wb-tr-flow__item--accepted .wb-tr-toc__no { border-left: 3px solid var(--pf-color-border-medium); padding-left: 4px; }
.wb-tr-flow__chapter { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-flow__head { flex-wrap: wrap; }
.wb-tr-flow__title { gap: var(--pf-space-sm, 8px); margin: var(--pf-space-xs, 4px) 0; }
.wb-tr-flow__title .pf-input { flex: 1 1 320px; max-width: 640px; }
/* Выгрузка перевода файлом (срез 8). */
.wb-tr-export { display: flex; flex-direction: column; gap: var(--pf-space-md, 12px); max-width: 720px; }
.wb-tr-export__group { border: 1px solid var(--pf-color-border-subtle); border-radius: 8px; padding: var(--pf-space-sm, 8px) var(--pf-space-md, 12px); margin: 0; display: flex; flex-direction: column; gap: 4px; }
.wb-tr-export__formats { flex-wrap: wrap; gap: var(--pf-space-md, 12px); }
.wb-tr-export__line { margin: 0; }
.wb-tr-export__name { display: flex; flex-direction: column; gap: 4px; }
.wb-tr-export__name .pf-input { width: 100%; max-width: 480px; }
.wb-tr-flow__block td { padding-top: var(--pf-space-sm, 8px); border-bottom: 1px solid var(--pf-color-border-medium); }
.wb-tr-flow__block .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-flow__retry td { border-top: 2px dashed var(--pf-color-border-medium); }
.wb-tr-flow__retry .wb-input { width: 100%; }
.wb-tr-flow__retry .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; margin-top: 4px; }
.wb-tr-flow__terms { display: flex; flex-wrap: wrap; gap: 4px var(--pf-space-sm, 8px); align-items: center; }
/* Флаг — рамка и цвет текста; предупреждение — цвет предупреждения, не заливка акцента. */
.wb-tr-flag { flex: 0 0 auto; font-size: 0.8em; color: var(--pf-color-text-secondary); border: 1px solid var(--pf-color-border-medium); border-radius: 4px; padding: 0 6px; white-space: nowrap; }
.wb-tr-flag--warn { color: var(--pf-color-text-warning); border-color: var(--pf-color-text-warning); }
/* «Перевод», срез 7: поле правки абзаца с видимыми выделениями (contenteditable;
   pre-wrap — браузер не подменяет пробелы неразрывными). */
.wb-tr-rich { display: block; min-height: 3em; white-space: pre-wrap; overflow-wrap: anywhere; cursor: text; }
.wb-tr-rich[contenteditable="false"] { opacity: 0.7; cursor: default; }
.wb-tr-rich:empty::before { content: attr(data-placeholder); color: var(--pf-color-text-secondary); }
/* Абзац, к которому привела карточка помощника: подложка выбранного + черта (не заливка акцента). */
.wb-tr-bi__row--focus td { background: var(--pf-color-surface-selected); }
.wb-tr-bi__row--focus td:first-child { border-left: 3px solid var(--pf-color-accent); }
/* Колонка помощника справа от словаря и главы перевода. */
.wb-tr-with-assist { display: flex; flex: 1 1 auto; min-height: 0; gap: var(--pf-space-md, 12px); }
.wb-tr-with-assist__main { flex: 1 1 auto; min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow-y: auto; }
.wb-tr-assist-bar { gap: var(--pf-space-sm, 8px); align-items: center; margin-bottom: 4px; }
.wb-tr-assist { flex: 0 0 clamp(20rem, 28%, 34rem); min-height: 0; display: flex; flex-direction: column; overflow-y: auto; border-left: 1px solid var(--pf-color-border-medium); padding-left: var(--pf-space-md, 12px); }
.wb-tr-assist .wb-assist { flex: 1 1 auto; min-height: 0; }
/* «Перевод», срез 6: шлифовка с критиком — настройки прогона, замечания под абзацем.
   Цитата замечания — подложка выбранного (не заливка акцента), состояния — формой. */
.wb-tr-polish__settings { display: flex; flex-wrap: wrap; gap: var(--pf-space-md, 12px) var(--pf-space-xl, 24px); align-items: flex-start; margin: var(--pf-space-sm, 8px) 0; }
.wb-tr-polish__mode { gap: 6px; align-items: center; }
.wb-tr-polish__model { min-width: 16rem; }
.wb-tr-polish__item--idle { opacity: 0.6; }
.wb-tr-polish__bar { gap: var(--pf-space-sm, 8px); align-items: center; margin: var(--pf-space-sm, 8px) 0; }
.wb-tr-polish__warn { color: var(--pf-color-text-warning); }
.wb-tr-polish__notes { list-style: none; margin: var(--pf-space-sm, 8px) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-polish__note { border: 1px solid var(--pf-color-border-medium); border-radius: 6px; padding: 6px var(--pf-space-sm, 8px); }
.wb-tr-polish__note .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-polish__note--sent { border-style: dashed; }
.wb-tr-polish__note--fixed { border-left: 3px solid var(--pf-color-accent); }
.wb-tr-polish__note--dismissed { opacity: 0.55; }
.wb-tr-polish__quote { background: var(--pf-color-surface-selected); color: var(--pf-color-text-primary); border-radius: 3px; padding: 0 4px; }
.wb-tr-polish__issue { margin: 4px 0 0; }
/* Пространство «Мои переводы» (слово владельца 06.10): свой список слева, экран проекта — страницей. */
.wb-tr-space__nav { flex: 0 0 300px; }
.wb-tr-space__new { width: 100%; }
.wb-tr-space__main { flex: 1 1 auto; min-width: 0; }
.wb-tr-page { display: flex; flex-direction: column; min-height: 0; height: 100%; }
.wb-tr-page__head { gap: var(--pf-space-md, 12px); align-items: baseline; padding: var(--pf-space-sm, 8px) 0; border-bottom: 1px solid var(--pf-color-border-medium); }
.wb-tr-page__body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow-y: auto; padding-top: var(--pf-space-sm, 8px); }
.wb-tr-space__empty { max-width: 60ch; margin: 10vh auto 0; display: flex; flex-direction: column; gap: var(--pf-space-md, 12px); align-items: flex-start; }
/* Экран проекта перевода — во всю ширину пространства (полоса рукописи — только у приглашения). */
.wb-tr-space__main .wb-col__body--center > .wb-tr-page { max-width: none; }
.wb-tr-space__main .wb-col__body--center { padding: var(--pf-space-md, 12px) var(--pf-space-lg, 16px); }

/* Стол «Перевода» в трёх панелях (эскиз 457-й, одобрен владельцем 06.10):
 * те же колонки, ручки и полоски, что у стола романа. Состояния — формой
 * (кружок залит / контур / пунктир, ⚑), «выбрано» — surface-selected и
 * черта акцента; золотая заливка — только под инверсным текстом. */
.wb-tr-desk { min-height: 0; }
/* Центр занимает всё, что не отдано панелям (слово владельца 07.10, п. 6: без пустых
 * полей на большом экране); у разделов с карточкой справа правая панель — не шире
 * трети стола, у главы — текст в две колонки по памяти ручки. */
.wb-tr-center { flex: 1 1 360px; min-width: 300px; }
.wb-tr-desk--card .wb-tr-detail { max-width: min(36%, 720px); }
/* Словарь без выбранной записи: панель справа узкая, реестр в центре шире (464-я). */
.wb-tr-desk--card .wb-tr-detail--empty { flex: 0 0 18em; max-width: 18em; }
.wb-tr-desk--card .wb-tr-center { flex-basis: 0; }
.wb-tr-center .wb-col__body--center { padding: var(--pf-space-md, 12px) var(--pf-space-lg, 16px); }
.wb-tr-center .wb-col__body--center > .wb-tr-page { max-width: none; }
.wb-tr-count { color: var(--pf-color-text-muted); font-variant-numeric: tabular-nums; }
.wb-tr-proj { display: flex; gap: var(--pf-space-sm, 8px); align-items: flex-start; text-align: left; border-left: 3px solid transparent; }
.wb-tr-proj[aria-current='true'] { background: var(--pf-color-surface-selected); border-left-color: var(--pf-color-accent); }
.wb-tr-proj .wb-nav__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.wb-tr-proj__state { color: var(--pf-color-text-accent); }
.wb-tr-cover { flex: 0 0 auto; width: 34px; height: 46px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--pf-color-border-medium); border-radius: 3px; background: var(--pf-color-surface-canvas); color: var(--pf-color-text-secondary); font-family: Georgia, 'Times New Roman', serif; font-weight: 700; font-size: 12px; letter-spacing: 0.02em; }
.wb-col--rail .wb-tr-cover { width: 30px; height: 40px; }
.wb-tr-nav__group { display: block; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px) 2px; color: var(--pf-color-text-secondary); }
.wb-tr-ch { align-items: center; }
.wb-tr-ch__state { flex: 0 0 auto; font-size: 0.8em; color: var(--pf-color-text-muted); }
.wb-tr-ch__state--running { color: var(--pf-color-text-accent); }
.wb-tr-ch__flag { flex: 0 0 auto; }
.wb-col--rail .wb-tr-ch__flag, .wb-col--rail .wb-tr-ch__state { display: none; }
.wb-tr-path .wb-tr-path__title { cursor: default; }
.wb-tr-next { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-next .wb-stagebar__next-text { cursor: default; }
.wb-tr-lane { display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-step { border: 1px solid var(--pf-color-border-subtle); border-radius: 6px; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px); background: var(--pf-color-surface-raised); }
.wb-tr-step--now { border-color: var(--pf-color-border-focus); border-style: dashed; background: var(--pf-color-surface-selected); }
.wb-tr-step--next { opacity: 0.75; }
.wb-tr-step__head { gap: var(--pf-space-sm, 8px); align-items: center; }
.wb-tr-step .wb-tr-call { padding-left: calc(20px + var(--pf-space-sm, 8px)); }
.wb-tr-call--failed .wb-autolog__sub { color: var(--pf-color-text-danger); }
.wb-tr-call--retry .wb-autolog__ico { color: var(--pf-color-text-warning); }
.wb-tr-call--running .wb-autolog__ico { color: var(--pf-color-text-accent); }
.wb-tr-detail .wb-col__head { flex-wrap: wrap; gap: 4px; }
.wb-tr-detail .wb-tr-bi th:nth-child(2), .wb-tr-detail .wb-tr-bi th:nth-child(3), .wb-tr-detail .wb-tr-bi td:nth-child(2), .wb-tr-detail .wb-tr-bi td:nth-child(3) { width: calc(50% - 1.75em); }
.wb-tr-pane { max-width: none; }
.wb-tr-pane__row { display: flex; gap: var(--pf-space-sm, 8px); }
.wb-tr-pane__row .wb-tr-para { flex: 1 1 auto; }
.wb-tr-journal { flex: 0 0 320px; }
.wb-tr-jsum-list { flex: 0 0 auto; border-bottom: 1px solid var(--pf-color-border-subtle); }
.wb-tr-settings { max-width: none; display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-paste { min-height: 14em; max-height: 40vh; overflow-y: auto; white-space: pre-wrap; font-family: Georgia, 'Times New Roman', serif; line-height: 1.5; }
.wb-tr-paste:empty::before { content: attr(data-placeholder); color: var(--pf-color-text-muted); }
.wb-tr-modes { display: flex; flex-direction: column; gap: 4px; }
.wb-tr-modes .wb-tr-radio { align-items: flex-start; }
.wb-tr-journal .wb-autolog__time { flex: none; color: var(--pf-color-text-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.wb-tr-center .wb-tr-page__head { align-self: stretch; }
.wb-tr-modes .wb-tr-radio { flex-wrap: nowrap; }
.wb-tr-modes .wb-tr-radio > span { flex: 1 1 auto; min-width: 0; }
.wb-tr-paste p, .wb-tr-paste div { margin: 0 0 0.6em; }

/* Часть C BETA-D-304 (эскиз v2, 460-я): паспорт и гид блоками, словарь карточками,
 * выбранный блок пути главы. «Выбрано» — подложка выбранного и черта акцента,
 * не заливка акцента (ui.md §«Золото»); пометки — формой (рамка, пунктир). */
.wb-tr-docs--blocks { gap: var(--pf-space-xs, 6px); }
.wb-tr-docs__head { flex-wrap: wrap; }
.wb-tr-docsec { display: flex; gap: var(--pf-space-sm, 8px); align-items: baseline; margin: var(--pf-space-md, 12px) 0 4px; }
.wb-tr-docsec__title { font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--pf-color-text-secondary); }
.wb-tr-doccard, .wb-tr-gcard { display: flex; flex-direction: column; gap: 3px; width: 100%; min-width: 0; max-width: 100%; overflow: hidden; text-align: left; font: inherit; color: var(--pf-color-text-primary); background: var(--pf-color-surface-raised); border: 1px solid var(--pf-color-border-subtle); border-left: 3px solid transparent; border-radius: 6px; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px); cursor: pointer; }
.wb-tr-doccard > *, .wb-tr-gcard > * { min-width: 0; max-width: 100%; }
.wb-tr-doccard:hover, .wb-tr-gcard:hover { border-color: var(--pf-color-border-medium); }
.wb-tr-doccard--on, .wb-tr-gcard--on { background: var(--pf-color-surface-selected); border-left-color: var(--pf-color-accent); }
.wb-tr-doccard--empty { border-style: dashed; }
.wb-tr-doccard__head { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
/* Карточки в прокручиваемой flex-колонке не сжимаются (проверка владельца 07.10: строки словаря
 * наезжали друг на друга — overflow: hidden обнулял min-height, и колонка ужимала карточки). */
.wb-tr-doccard, .wb-tr-gcard, .wb-tr-docsec, .wb-tr-gsec, .wb-tr-gfilters, .wb-tr-glossary--cards > .pf-caption { flex: 0 0 auto; }
/* Строка без переноса не раздувает колонку: ширина 0 + min-width 100 % — внутренний размер нулевой. */
.wb-tr-doccard__line { margin: 0; width: 0; min-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-tr-page__body, .wb-tr-docs--blocks, .wb-tr-glossary--cards { min-width: 0; }
.wb-tr-doccard__acts { gap: var(--pf-space-sm, 8px); align-items: center; margin-top: 2px; }
.wb-tr-doccard__chars { white-space: nowrap; }
.wb-tr-mark--author { border-style: solid; border-color: var(--pf-color-accent); color: var(--pf-color-text-primary); }
.wb-tr-mark--warn { border-style: solid; border-color: var(--pf-color-text-warning); color: var(--pf-color-text-warning); }
.wb-tr-doc--view, .wb-tr-doc--edit { display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); min-height: 0; }
.wb-tr-doc__head { gap: var(--pf-space-sm, 8px); align-items: baseline; flex-wrap: wrap; }
.wb-tr-doc__view { max-width: none; margin: 0; }
.wb-tr-doc__text--full { min-height: 60vh; }
/* Блок с местами на проверку — ⚑ формой и цветом предупреждения, не ✓. */
.wb-dot--flag { color: var(--pf-color-text-warning); border-color: var(--pf-color-text-warning); }
/* «Показать запрос»: кнопка у строки вызова, панель с текстом как есть. */
.wb-tr-call__req { margin-left: var(--pf-space-xs, 6px); }
.wb-tr-request { display: flex; flex-direction: column; gap: var(--pf-space-xs, 6px); min-height: 0; }
.wb-tr-request__head { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-request__text { max-height: none; }
/* Выбранный блок пути главы: подложка выбранного и черта акцента, карточка кликабельна. */
.wb-tr-step--pick { cursor: pointer; border-left: 3px solid transparent; }
.wb-tr-step--pick:hover { border-color: var(--pf-color-border-medium); }
.wb-tr-step--on { background: var(--pf-color-surface-selected); border-left-color: var(--pf-color-accent); }
.wb-tr-step__acts { gap: var(--pf-space-sm, 8px); align-items: center; padding-left: calc(20px + var(--pf-space-sm, 8px)); margin-top: 4px; }
.wb-tr-step__retry { margin: var(--pf-space-xs, 6px) 0 0 calc(20px + var(--pf-space-sm, 8px)); padding-top: var(--pf-space-xs, 6px); border-top: 2px dashed var(--pf-color-border-medium); display: flex; flex-direction: column; gap: 4px; }
.wb-tr-step__retry .wb-input { width: 100%; }
.wb-tr-step__retry .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; }
.wb-tr-flow__block--focus td { background: var(--pf-color-surface-selected); border-left: 3px solid var(--pf-color-accent); }
.wb-tr-bi__row--block td:first-child { border-left: 3px solid var(--pf-color-accent); }
/* Словарь-реестр (эскиз v3, В6-1): строки одной высоты, липкая шапка с сортировкой, группы полосами. */
.wb-tr-glossary--registry { gap: var(--pf-space-xs, 6px); min-width: 0; }
.wb-tr-glossary--registry > * { flex: 0 0 auto; }
.wb-tr-greg { width: 100%; border-collapse: collapse; table-layout: auto; }
.wb-tr-greg thead th { position: sticky; top: 0; z-index: 1; background: var(--pf-color-surface-canvas); text-align: left; padding: 4px 6px; border-bottom: 1px solid var(--pf-color-border-medium); font-weight: normal; }
.wb-tr-gth { font: inherit; color: var(--pf-color-text-secondary); background: none; border: 0; padding: 0; cursor: pointer; text-align: left; letter-spacing: 0.02em; }
.wb-tr-gth--on .wb-tr-gth { color: var(--pf-color-text-primary); }
/* Столбцы по содержимому (вторая проверка владельца 07.10: «столбцы не отображаются,
 * ширина фиксированная, строка состояния обрезается»): слово и перевод делят
 * ширину, вид и счёт узкие, состояние — по пилюлям; пояснения переносятся. */
.wb-tr-greg th.wb-tr-grow__term, .wb-tr-greg td.wb-tr-grow__term, .wb-tr-greg th.wb-tr-grow__tr, .wb-tr-greg td.wb-tr-grow__tr { width: 32%; }
.wb-tr-greg th.wb-tr-grow__kind, .wb-tr-greg td.wb-tr-grow__kind { width: 5.5em; white-space: nowrap; }
.wb-tr-greg th.wb-tr-grow__num, .wb-tr-greg td.wb-tr-grow__num { width: 4.5em; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.wb-tr-greg th { white-space: nowrap; }
.wb-tr-gth { white-space: nowrap; text-transform: none; font-size: 0.8em; }
.wb-tr-grow { min-height: 2.6em; cursor: pointer; border-left: 3px solid transparent; }
.wb-tr-grow td { padding: 4px 6px; border-bottom: 1px solid var(--pf-color-border-subtle); vertical-align: top; overflow-wrap: anywhere; }
.wb-tr-grow:hover td { background: var(--pf-color-surface-raised); }
/* Выбрано — подложка выбранного и черта акцента (золото только под инверсным текстом). */
.wb-tr-grow--on td { background: var(--pf-color-surface-selected); }
.wb-tr-grow--on td:first-child { box-shadow: inset 3px 0 0 var(--pf-color-accent); }
.wb-tr-grow--doubt td:first-child { box-shadow: inset 3px 0 0 var(--pf-color-text-warning); }
.wb-tr-grow--on.wb-tr-grow--doubt td:first-child { box-shadow: inset 3px 0 0 var(--pf-color-accent); }
.wb-tr-grow__word { font-weight: 600; }
.wb-tr-grow__tr .wb-tr-grow__word { color: var(--pf-color-text-accent); }
.wb-tr-grow__word--empty { color: var(--pf-color-text-muted); font-weight: normal; font-style: italic; }
.wb-tr-grow__sub { display: block; font-size: 0.8em; line-height: 1.25; white-space: normal; }
.wb-tr-grow__state { white-space: normal; }
.wb-tr-grow__state .wb-tr-mark { display: inline-block; margin: 1px 3px 1px 0; white-space: nowrap; }
.wb-tr-gband td { padding: 10px 6px 3px; border-bottom: 1px solid var(--pf-color-border-medium); background: var(--pf-color-surface-canvas); }
.wb-tr-gband__title { font-size: 0.8em; letter-spacing: 0.06em; text-transform: uppercase; color: var(--pf-color-text-secondary); margin-right: var(--pf-space-sm, 8px); }
.wb-tr-ge__options { gap: 4px; flex-wrap: wrap; }
.wb-tr-ge__option--on { background: var(--pf-color-surface-selected); box-shadow: inset 0 -2px 0 var(--pf-color-accent); }
.wb-tr-ge__contexts { display: flex; flex-direction: column; gap: 4px; }
.wb-tr-gctx { border-left: 2px solid var(--pf-color-border-medium); padding: 2px 8px; cursor: pointer; }
.wb-tr-gctx:hover { border-left-color: var(--pf-color-accent); background: var(--pf-color-surface-raised); }
.wb-tr-gctx p { margin: 0; font-family: Georgia, 'Times New Roman', serif; font-size: 0.95em; line-height: 1.45; }
.wb-tr-gctx__dst { color: var(--pf-color-text-secondary); }
/* Словарь карточками: поиск и фильтры, карточка записи (термин · вхождения / перевод · пометки / кто это). */
.wb-tr-glossary--cards { gap: var(--pf-space-xs, 6px); }
.wb-tr-gfilters { gap: var(--pf-space-xs, 6px); align-items: center; flex-wrap: wrap; margin-bottom: var(--pf-space-xs, 6px); }
.wb-tr-gsearch { flex: 0 1 16em; min-width: 10em; }
.wb-tr-gcard--doubt { border-left-style: dashed; border-left-color: var(--pf-color-text-warning); }
.wb-tr-gcard--on.wb-tr-gcard--doubt { border-left-style: solid; border-left-color: var(--pf-color-accent); }
.wb-tr-gcard__row { display: flex; gap: var(--pf-space-sm, 8px); align-items: baseline; justify-content: space-between; flex-wrap: wrap; }
.wb-tr-gcard__term { font-weight: 600; }
.wb-tr-gcard__hits { white-space: nowrap; }
.wb-tr-gcard__tr { color: var(--pf-color-text-accent); font-weight: 600; }
.wb-tr-gcard__tr--empty { color: var(--pf-color-text-muted); font-weight: normal; font-style: italic; }
.wb-tr-gcard__pills { display: flex; gap: 4px; flex-wrap: wrap; }
.wb-tr-gcard__who { margin: 0; }
/* Карточка записи справа: поля с автосохранением, «где встречается», «переведено по-старому». */
.wb-tr-ge { display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-ge__head { gap: var(--pf-space-sm, 8px); align-items: baseline; flex-wrap: wrap; }
.wb-tr-ge__term { font-size: 1.15em; }
.wb-tr-ge__field { display: flex; flex-direction: column; gap: 3px; }
.wb-tr-ge__field .wb-input { width: 100%; }
.wb-tr-ge__big { font-size: 1.1em; font-family: Georgia, 'Times New Roman', serif; }
.wb-tr-ge__keep { gap: var(--pf-space-xs, 6px); align-items: center; cursor: pointer; }
.wb-tr-ge__doubt { border: 1px solid var(--pf-color-text-warning); border-radius: 6px; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px); display: flex; flex-direction: column; gap: 4px; }
.wb-tr-ge__doubt p { margin: 0; }
.wb-tr-ge__chapters { gap: 4px; flex-wrap: wrap; }
.wb-tr-stale { border: 1px solid var(--pf-color-text-warning); border-left-width: 3px; border-radius: 6px; padding: var(--pf-space-xs, 6px) var(--pf-space-sm, 8px); display: flex; flex-direction: column; gap: 4px; }
.wb-tr-stale .pf-row { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-stale p { margin: 0; }
/* Подсветка слов словаря в оригинале: подложка выбранного и точечная черта, не заливка акцента. */
.wb-tr-hl { background: var(--pf-color-surface-selected); color: inherit; border-bottom: 1px dotted var(--pf-color-accent); border-radius: 2px; cursor: pointer; }
.wb-tr-hl--current { border-bottom-style: solid; border-bottom-width: 2px; }
.wb-tr-addbar { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; position: sticky; top: 0; z-index: 1; background: var(--pf-color-surface-canvas); padding: var(--pf-space-xs, 6px) 0; }
.wb-tr-intext { display: flex; flex-direction: column; gap: var(--pf-space-sm, 8px); }
.wb-tr-intext__head { gap: var(--pf-space-sm, 8px); align-items: center; flex-wrap: wrap; }
.wb-tr-intext__head .wb-input { width: auto; max-width: 28em; }
.wb-tr-intext__text { max-width: none; margin: 0; }
.wb-tr-block-input { width: 8em; }
