/*
 * Оформление.
 *
 * Без внешних шрифтов и без библиотек: заголовок Content-Security-Policy
 * запрещает подгружать что-либо со стороны, и это не ограничение, а замысел.
 * Расчет пожарного риска делается в том числе на объектах, где выход в сеть
 * закрыт, и приложение обязано выглядеть одинаково с сетью и без нее.
 *
 * Величины и находки различаются ЦВЕТОМ И СЛОВОМ одновременно: цвет один не
 * годится, среди расчетчиков встречается нарушение цветовосприятия, а
 * пропущенное препятствие означает отчет с неверным выводом.
 */

:root {
  --фон: #fbfbfa;
  --поле: #ffffff;
  --текст: #1b1b1a;
  --приглушенный: #5f5f5b;
  --рамка: #dcdcd6;
  --основной: #1f5d8b;
  --основной-темный: #17466a;
  --внимание: #8a4b0a;
  --внимание-фон: #fdf3e6;
  --отказ: #8c2b22;
  --отказ-фон: #fbeceb;
  --ровно: #2c6b41;
  --ровно-фон: #eef6f0;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--фон);
  color: var(--текст);
  font: 15px/1.5 system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}

a { color: var(--основной); text-decoration: none; }
a:hover { text-decoration: underline; }

.без-сценариев {
  padding: 2rem;
  font-size: 1rem;
}

/* ------------------------------- шапка -------------------------------- */

.шапка {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  padding: 0.75rem 1.5rem;
  background: var(--поле);
  border-bottom: 1px solid var(--рамка);
}
.шапка .марка { font-weight: 700; font-size: 1.1rem; color: var(--текст); }
.шапка nav { display: flex; gap: 1rem; }
.шапка .учетная-запись { margin-left: auto; display: flex; align-items: center; gap: 1rem; }
.шапка .почта { color: var(--приглушенный); }
.шапка .лицензия { font-size: 0.85rem; }

/* ------------------------------ страница ------------------------------ */

.страница { max-width: 60rem; margin: 0 auto; padding: 1.5rem; }
.вход-страница { max-width: 24rem; padding-top: 4rem; }

h1 { font-size: 1.5rem; margin: 0 0 0.25rem; }
h2 { font-size: 1.1rem; margin: 1.75rem 0 0.5rem; }
.подзаголовок { color: var(--приглушенный); margin: 0 0 1rem; }
.пояснение { color: var(--приглушенный); font-size: 0.9rem; }
.мелко { color: var(--приглушенный); font-size: 0.85rem; }
/* Выпуск Ш-1: подпись «изображение условное» - курсивом, чтобы не терялась среди пояснений. */
.мелко.условное { font-style: italic; }
.пусто { color: var(--приглушенный); padding: 1.5rem 0; }
.ждем { color: var(--приглушенный); }

.внимание { color: var(--внимание); }
.ровно { color: var(--ровно); }

/* ------------------------------ таблица ------------------------------- */

.таблица { width: 100%; border-collapse: collapse; margin: 0.5rem 0; background: var(--поле); }
.таблица th, .таблица td {
  text-align: left;
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--рамка);
  vertical-align: top;
}
.таблица th { font-weight: 600; font-size: 0.85rem; color: var(--приглушенный); }
/* Сортируемый заголовок (выпуск А2-1): кнопка во всю ячейку, стрелка направления. */
.таблица th.сортируемый { padding: 0; }
.заголовок-сортировки { display: block; width: 100%; text-align: left; background: none; border: 0; padding: 0.5rem 0.75rem;
  font: inherit; color: inherit; cursor: pointer; }
.заголовок-сортировки:hover, .заголовок-сортировки:focus-visible { color: var(--текст); text-decoration: underline; }
.заголовок-сортировки .стрелка { margin-left: 0.3em; font-size: 0.75em; opacity: 0.45; }
.заголовок-сортировки.выбран { color: var(--текст); }
.заголовок-сортировки.выбран .стрелка { opacity: 1; }
.дата-строки { white-space: nowrap; }
.таблица tbody tr:hover { background: #f4f6f8; }

/* ------------------------------- формы -------------------------------- */

label { display: block; margin: 0.75rem 0; font-size: 0.9rem; color: var(--приглушенный); }
input[type=text], input[type=email], input[type=password], input[type=search] {
  display: block;
  width: 100%;
  margin-top: 0.25rem;
  padding: 0.5rem 0.6rem;
  font: inherit;
  color: var(--текст);
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
}
input:focus { outline: 2px solid var(--основной); outline-offset: 0; }

button {
  font: inherit;
  padding: 0.45rem 1rem;
  border: 1px solid var(--рамка);
  border-radius: 3px;
  background: var(--поле);
  color: var(--текст);
  cursor: pointer;
}
button:hover:not(:disabled) { border-color: var(--основной); }
button:disabled { opacity: 0.5; cursor: not-allowed; }
button.основная, a.кнопка.основная {
  background: var(--основной);
  border-color: var(--основной);
  color: #fff;
}
button.основная:hover:not(:disabled) { background: var(--основной-темный); }
button.ссылка {
  border: none; background: none; color: var(--основной); padding: 0; text-decoration: underline;
}
a.кнопка { display: inline-block; padding: 0.45rem 1rem; border-radius: 3px; }
/* Выбор файла в виде кнопки («Создать из файла», выпуск Е): само поле скрыто. */
label.файл.кнопка {
  display: inline-block; margin: 0; padding: 0.45rem 1rem; border: 1px solid var(--рамка); border-radius: 3px;
  background: var(--поле); cursor: pointer; font: inherit;
}
label.файл.кнопка:hover { border-color: var(--основной); }
label.файл.кнопка input { display: none; }

.панель { display: flex; align-items: center; gap: 1rem; margin: 1rem 0; }
.панель input { max-width: 24rem; }
.панель .счет { color: var(--приглушенный); font-size: 0.9rem; white-space: nowrap; }
.действия { display: flex; align-items: center; gap: 1rem; margin: 1.25rem 0; }

/* ---------------------------- уведомления ----------------------------- */

.уведомление {
  display: flex;
  gap: 1rem;
  align-items: flex-start;
  max-width: 60rem;
  margin: 1rem auto 0;
  padding: 0.75rem 1rem;
  border-radius: 3px;
  border: 1px solid;
}
.уведомление.ошибка { background: var(--отказ-фон); border-color: var(--отказ); color: var(--отказ); }
.уведомление.сообщение { background: var(--ровно-фон); border-color: var(--ровно); color: var(--ровно); }
/* Сообщения и ошибки ПЛАВАЮТ поверх страницы, не сдвигая разметку (поз. 32
   перечня от 17.09.2026): появившееся уведомление уводило холст генплана за
   верх экрана. Постоянные полосы (режим чтения, нет связи) остаются в потоке. */
.уведомление.ошибка, .уведомление.сообщение {
  position: fixed; top: 0.75rem; right: 0.75rem; z-index: 30;
  margin: 0; max-width: min(36rem, calc(100vw - 1.5rem)); max-height: 60vh; overflow: auto;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
}
.уведомление.режим-чтения {
  background: var(--внимание-фон); border-color: var(--внимание); color: var(--внимание);
}
.уведомление.полоса-обслуживания {
  background: var(--внимание-фон); border-color: var(--внимание); color: var(--внимание);
}
.уведомление.полоса-обслуживания.идут { background: var(--отказ-фон); border-color: var(--отказ); color: var(--отказ); }
.уведомление .текст { flex: 1; }
.уведомление .подсказка { margin-top: 0.25rem; font-weight: 400; }
.уведомление .закрыть { border: none; background: none; font-size: 1.2rem; line-height: 1; color: inherit; }

/* ------------------------------ находки ------------------------------- */

.находки { list-style: none; padding: 0; margin: 0.5rem 0; }
.находки li {
  display: grid;
  grid-template-columns: 8rem 10rem 1fr;
  gap: 0.75rem;
  padding: 0.4rem 0.6rem;
  border-left: 3px solid var(--рамка);
  margin-bottom: 0.25rem;
  background: var(--поле);
}
.находки li.препятствие { border-left-color: var(--отказ); }
.находки li.предупреждение { border-left-color: var(--внимание); }
.находки .метка { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.02em; }
.находки li.препятствие .метка { color: var(--отказ); }
.находки li.предупреждение .метка { color: var(--внимание); }
.находки .где { color: var(--приглушенный); }
/* Переход к месту правки (замечание 14 от 16.09.2026). */
.находки li.переход { cursor: pointer; }
.находки li.переход:hover { background: var(--внимание-фон); }
.находки .перейти { color: var(--основной); font-size: 0.85rem; margin-left: auto; white-space: nowrap; }
/* Светло-желтая маркировка места правки после перехода. */
.подсвечено { background: #fff5b8 !important; outline: 2px solid #e8cf5a; transition: background 0.6s; }
details.сводка-готовности { margin: 0.5rem 0; }
/* Выход величины за разумный диапазон виден по полю (замечание 8). */
input.вне-диапазона { border-color: var(--внимание); background: var(--внимание-фон); }
details.сводка-готовности > summary { cursor: pointer; color: var(--внимание); }
/* Копирование и корзина в перечне проектов, корзина (выпуск Р-2, С-12). */
.действия-строки { display: inline-flex; gap: 0.6rem; white-space: nowrap; }
.действия-строки button.ссылка.опасно, button.ссылка.опасно { color: var(--внимание); }
.корзина-ссылка { margin: 0.75rem 0 0; }
.подтверждение-удаления { display: inline-flex; gap: 0.4rem; align-items: center; margin-left: 0.6rem; }
.подтверждение-удаления input { width: 14rem; }
.подтверждение-удаления button.опасно { background: var(--внимание); border-color: var(--внимание); color: #fff; }
.страница-корзины table td:last-child { white-space: nowrap; }

/* ------------------------------ прогресс ------------------------------ */

.состояние { font-size: 1.1rem; margin: 0.5rem 0; }
.прогресс { margin: 1rem 0; }
.полоса { height: 8px; background: var(--рамка); border-radius: 4px; overflow: hidden; }
.заполнено { height: 100%; background: var(--основной); transition: width 0.3s; }

/* ---------------------------- трассировка ----------------------------- */

.трассировка { padding-left: 1.5rem; }
.трассировка li { margin-bottom: 0.9rem; background: var(--поле); padding: 0.6rem 0.8rem; }
.трассировка .формула { font-family: ui-monospace, 'Cascadia Code', Consolas, monospace; }
.трассировка .подстановка {
  font-family: ui-monospace, 'Cascadia Code', Consolas, monospace;
  color: var(--приглушенный);
}
.трассировка .значение { font-weight: 600; margin-top: 0.25rem; }
.трассировка .ссылка-норма { font-size: 0.85rem; color: var(--приглушенный); margin-top: 0.25rem; }

@media (max-width: 40rem) {
  .находки li { grid-template-columns: 1fr; gap: 0.15rem; }
  .шапка { flex-wrap: wrap; gap: 0.75rem; }
  .шапка .учетная-запись { margin-left: 0; width: 100%; }
}

/* ------------------------------- план объекта ------------------------------- */

/* Раскладка от 18.09.2026: панель пиктограмм сверху, холст во всю высоту
   экрана, слева перечни таблицей с подвкладками и свойства (решение
   заказчика от 18.09.2026: как в старом Фогарде). Страница не ограничена
   60rem: план тем полезнее, чем шире холст. Высота страницы - экран без
   шапки приложения; холст и боковая панель делят остаток гибко, поэтому
   панель с подписями либо в две строки не выталкивает низ холста за экран. */
.генплан-страница {
  max-width: none;
  padding: 0.75rem 1rem 0.5rem;
  box-sizing: border-box;
  height: calc(100vh - var(--план-шапка-приложения));
  min-height: 34rem;
  display: flex;
  flex-direction: column;
}

.генплан-шапка { display: flex; align-items: baseline; gap: 1.5rem; margin-bottom: 0.4rem; }
.генплан-шапка h1 { margin: 0; font-size: 1.2rem; }

/* Высота, которую занимают над холстом шапка приложения, заголовок экрана и
   панель пиктограмм; из нее считается высота холста и правой панели. */
:root { --план-шапка-приложения: 3.2rem; }

.панель-инструментов {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.4rem 0.9rem;
  margin-bottom: 0.5rem;
  padding: 0.3rem 0.5rem;
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
}
.группа-значков { display: flex; align-items: center; gap: 0.2rem; }
.группа-значков + .группа-значков { border-left: 1px solid var(--рамка); padding-left: 0.9rem; }
.что-добавить { display: flex; align-items: center; gap: 0.5rem; }
.что-добавить select { width: auto; }
/* Селектор отметки плана (выпуск К5): в ряду панели, ширина по содержимому. */
.отметка-плана { display: flex; align-items: center; }
.отметка-плана select { width: auto; font-size: 0.9rem; }

/* Кнопка-пиктограмма: рисунок - маска из SVG в data-URI, залитая текущим
   цветом текста, поэтому на выбранной кнопке он становится белым. Текст
   внутри кнопки скрыт зрительно и остается для чтения с экрана. */
button.значок {
  width: 2.1rem;
  height: 2.1rem;
  padding: 0;
  border: 1px solid var(--рамка);
  border-radius: 3px;
  background: var(--поле);
  color: var(--текст);
  position: relative;
  cursor: pointer;
}
button.значок::before {
  content: '';
  position: absolute;
  inset: 0.3rem;
  background-color: currentColor;
  -webkit-mask: var(--рисунок) center / contain no-repeat;
  mask: var(--рисунок) center / contain no-repeat;
}
button.значок:hover { border-color: var(--основной); }
button.значок.выбран { background: var(--основной); border-color: var(--основной); color: #fff; }
/* Подписи под пиктограммами (кнопка «Подписи», запоминается в браузере):
   скрытый текст кнопки становится видимой подписью, значок уезжает вверх. */
.с-подписями button.значок {
  width: auto;
  min-width: 3.2rem;
  height: auto;
  padding: 1.85rem 0.25rem 0.1rem;
}
.с-подписями button.значок::before { inset: 0.3rem auto auto 50%; width: 1.5rem; height: 1.5rem; transform: translateX(-50%); }
.с-подписями button.значок .скрыто {
  position: static;
  width: auto; height: auto;
  margin: 0;
  clip: auto;
  overflow: visible;
  white-space: nowrap;
  font-size: 0.65rem;
  line-height: 1.1;
  display: block;
}
/* Переключатели слоев: включенный - светлой заливкой, чтобы пять включенных
   слоев не спорили с выбранным инструментом за внимание. */
button.значок.переключатель.выбран { background: #e4edf5; border-color: var(--основной); color: var(--основной); }
button.значок:disabled { opacity: 0.4; cursor: not-allowed; }
.скрыто {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}
.значок-выбор { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 3l14 9-7 1-3 7z' fill='%23000'/%3E%3C/svg%3E"); }
.значок-добавить { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 5v14M5 12h14' stroke='%23000' stroke-width='2.4' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-круг { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='7.5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3C/svg%3E"); }
.значок-прямоугольник { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3.5' y='6.5' width='17' height='11' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3C/svg%3E"); }
.значок-полилиния { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 18l6-10 6 6 6-9' stroke='%23000' stroke-width='2.2' fill='none' stroke-linejoin='round'/%3E%3Ccircle cx='9' cy='8' r='1.8' fill='%23000'/%3E%3Ccircle cx='15' cy='14' r='1.8' fill='%23000'/%3E%3C/svg%3E"); }
.значок-ограждение { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 7l16-2v13l-16 2z' stroke='%23000' stroke-width='2.2' fill='none' stroke-dasharray='3 2' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.значок-контур { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 11l8-7 8 7v9H4z' stroke='%23000' stroke-width='2.2' fill='none' stroke-linejoin='round'/%3E%3Cpath d='M10 20v-5h4v5' stroke='%23000' stroke-width='2' fill='none'/%3E%3C/svg%3E"); }
.значок-преграда { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 12h18' stroke='%23000' stroke-width='3' fill='none'/%3E%3Cpath d='M7 8v8M12 8v8M17 8v8' stroke='%23000' stroke-width='2' fill='none'/%3E%3C/svg%3E"); }
.значок-точка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M12 2v5M12 17v5M2 12h5M17 12h5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Ccircle cx='12' cy='12' r='1.5' fill='%23000'/%3E%3C/svg%3E"); }
.значок-линейка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 15l12-12 6 6-12 12z' stroke='%23000' stroke-width='2.2' fill='none' stroke-linejoin='round'/%3E%3Cpath d='M7 11l2 2M10 8l2 2M13 5l2 2' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-площадь { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 6l9-3 7 6-3 11-12-2z' stroke='%23000' stroke-width='2.2' fill='none' stroke-linejoin='round' stroke-dasharray='3 2'/%3E%3Cpath d='M9 10h6M12 7v6' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-рамка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='6' width='18' height='12' stroke='%23000' stroke-width='2' fill='none' stroke-dasharray='3 2'/%3E%3Cpath d='M3 3v3M21 3v3M3 21v-3M21 21v-3' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-масштаб { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 16h18M3 16v-6M21 16v-6M7.5 16v-3M12 16v-4M16.5 16v-3' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-совместить { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='3' width='11' height='11' stroke='%23000' stroke-width='2' fill='none' stroke-dasharray='3 2'/%3E%3Crect x='10' y='10' width='11' height='11' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M7 7l6 6' stroke='%23000' stroke-width='2' fill='none'/%3E%3Cpath d='M10 13h3v-3' stroke='%23000' stroke-width='2' fill='none'/%3E%3C/svg%3E"); }
.значок-начало { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 19h15M5 19V4' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M17 16l3 3-3 3M2 7l3-3 3 3' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Ccircle cx='5' cy='19' r='2.2' fill='%23000'/%3E%3C/svg%3E"); }
.значок-поворот { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 12a7 7 0 1 1-2.05-4.95' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M17 3v4.5h-4.5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Ccircle cx='12' cy='12' r='1.8' fill='%23000'/%3E%3C/svg%3E"); }
.значок-3d { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3l8 4.5v9L12 21l-8-4.5v-9z' stroke='%23000' stroke-width='2' fill='none' stroke-linejoin='round'/%3E%3Cpath d='M4 7.5l8 4.5 8-4.5M12 12v9' stroke='%23000' stroke-width='2' fill='none' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.значок-отменить { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 14L4 9l5-5' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4 9h10a6 6 0 0 1 0 12h-3' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-вернуть { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15 14l5-5-5-5' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M20 9H10a6 6 0 0 0 0 12h3' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-выровнять { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 17l18-6' stroke='%23000' stroke-width='2' fill='none' stroke-dasharray='3 2'/%3E%3Cpath d='M3 17h18' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Ccircle cx='5' cy='16.3' r='2' fill='%23000'/%3E%3Ccircle cx='19' cy='11.7' r='2' fill='%23000'/%3E%3C/svg%3E"); }
.значок-загрузка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='18' height='16' rx='1.5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M12 16V8M8.5 11.5L12 8l3.5 3.5' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.значок-подложка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='18' height='16' rx='1.5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Cpath d='M3 17l5-6 4 4 3-3 6 5' stroke='%23000' stroke-width='2' fill='none' stroke-linejoin='round'/%3E%3Ccircle cx='8.5' cy='9' r='1.6' fill='%23000'/%3E%3C/svg%3E"); }
.значок-сетка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 9h18M3 15h18M9 3v18M15 3v18' stroke='%23000' stroke-width='2' fill='none'/%3E%3Crect x='3' y='3' width='18' height='18' stroke='%23000' stroke-width='2' fill='none'/%3E%3C/svg%3E"); }
.значок-изолинии { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 19c4-7 14-7 18 0M5 13c3-5 11-5 14 0M8 8c2-2 6-2 8 0' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-зоны { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23000' stroke-width='2.2' fill='none'/%3E%3Ccircle cx='12' cy='12' r='8.5' stroke='%23000' stroke-width='2' fill='none' stroke-dasharray='3 2.5'/%3E%3C/svg%3E"); }
.значок-привязка { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 3v9a6 6 0 0 0 12 0V3' stroke='%23000' stroke-width='2.6' fill='none'/%3E%3Cpath d='M4 7h4M16 7h4' stroke='%23000' stroke-width='2.6' fill='none'/%3E%3C/svg%3E"); }
.значок-вид { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 7h16M4 12h16M4 17h16' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3Ccircle cx='9' cy='7' r='2.2' fill='%23fff' stroke='%23000' stroke-width='2'/%3E%3Ccircle cx='15' cy='12' r='2.2' fill='%23fff' stroke='%23000' stroke-width='2'/%3E%3Ccircle cx='7' cy='17' r='2.2' fill='%23fff' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E"); }
.значок-подписи { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 18L9 5l5 13M6 14h6' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 11.5c1.5-1 4-1 4 1v5.5M20 15c-1.5-.5-4 0-4 1.5s2.5 2 4 .5' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); }
.значок-легенда { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='5' height='4' fill='%23000'/%3E%3Cpath d='M10 6h11' stroke='%23000' stroke-width='2'/%3E%3Ccircle cx='5.5' cy='13' r='2.2' fill='none' stroke='%23000' stroke-width='2'/%3E%3Cpath d='M10 13h11' stroke='%23000' stroke-width='2'/%3E%3Cpath d='M3 20h5M10 20h11' stroke='%23000' stroke-width='2' stroke-dasharray='2 2'/%3E%3C/svg%3E"); }
.значок-целиком { --рисунок: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 9V3h6M21 9V3h-6M3 15v6h6M21 15v6h-6' stroke='%23000' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }

/* Колонки экранов с разделителями (выпуск О-1а): дорожки задает
   переменная --колонки (panels.ts), на узком экране колонки в столбик. */
.раскладка-колонок { display: grid; grid-template-columns: var(--колонки); gap: 0; align-items: stretch; flex: 1; min-height: 0; }
.раскладка-колонок > .колонка { min-width: 0; min-height: 0; display: flex; flex-direction: column; }
.раскладка-колонок > .колонка > * { flex: 1 1 auto; min-height: 0; }
.раскладка-колонок > .разделитель { position: relative; cursor: col-resize; background: transparent; border-left: 1px solid var(--рамка); margin: 0.2rem 3px; border-radius: 2px; }
.раскладка-колонок > .разделитель:hover { background: var(--основной); opacity: 0.35; }
.раскладка-колонок > .разделитель.неактивен { cursor: default; }
.раскладка-колонок > .разделитель.неактивен:hover { background: transparent; }
.раскладка-колонок > .разделитель > button.свернуть { position: absolute; top: 0.2rem; left: -0.6rem; width: 1.3rem; height: 1.3rem; padding: 0; line-height: 1;
  font-size: 0.9rem; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); color: var(--текст); cursor: pointer; z-index: 2; }
.раскладка-колонок > .разделитель > button.свернуть + button.свернуть { top: 1.8rem; }
.раскладка-колонок > .колонка-свернута { display: flex; flex-direction: column; align-items: center; gap: 0.4rem; padding: 0.2rem 0;
  background: var(--поле); border: 1px solid var(--рамка); border-radius: 3px; min-height: 0; overflow: hidden; }
.раскладка-колонок > .колонка-свернута > button.развернуть { width: 1.3rem; height: 1.3rem; padding: 0; line-height: 1; font-size: 0.9rem; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); cursor: pointer; }
.раскладка-колонок > .колонка-свернута > .подпись-колонки { writing-mode: vertical-rl; font-size: 0.85rem; color: var(--текст); opacity: 0.8; white-space: nowrap; }

.генплан-раскладка aside {
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
  padding: 0.6rem 0.75rem;
  /* Высота - от строки сетки, то есть от холста; своя прокрутка внутри. */
  min-height: 0;
  overflow-y: auto;
  box-sizing: border-box;
}

button.инструмент { text-align: left; }
button.инструмент.выбран { background: var(--основной); border-color: var(--основной); color: #fff; }
/* Галки-слои формы исходных данных (та же разметка, что была у слоев плана). */
.слой { display: flex; align-items: center; gap: 0.5rem; margin: 0.25rem 0; color: var(--текст); }
.слой input { width: auto; margin: 0; }
/* Выпуск П-6: режим без выданной возможности - серый, галка недоступна. */
.слой.недоступно { color: var(--приглушенный); }
.возможности-участника { margin-top: 0.35rem; }
.возможности-участника .строка-формы { margin: 0.2rem 0; flex-wrap: wrap; }
.возможности-участника select, .возможности-участника input { max-width: 13rem; }

.холст-обертка { position: relative; display: flex; flex-direction: column; min-height: 0; }
/* Легенда (выпуск И): в углу холста, мышь проходит сквозь нее на холст. */
.легенда {
  position: absolute; right: 0.75rem; bottom: 2.5rem; z-index: 2;
  background: rgba(255, 255, 255, 0.92); border: 1px solid var(--рамка); border-radius: 3px;
  padding: 0.4rem 0.6rem; font-size: 0.75rem; pointer-events: none;
}
.заголовок-легенды { font-weight: 600; margin-bottom: 0.25rem; }
.строка-легенды { display: flex; align-items: center; gap: 0.5rem; line-height: 1.5; }
.знак-легенды { display: inline-block; width: 1.4rem; height: 0.8rem; box-sizing: border-box; }
.знак-легенды.линия { height: 0; border-top: 3px solid var(--цвет); }
.знак-легенды.круг { width: 0.8rem; border-radius: 50%; border: 2px solid var(--цвет); background: color-mix(in srgb, var(--цвет) 25%, white); }
.знак-легенды.контур { border: 2px solid var(--цвет); background: color-mix(in srgb, var(--цвет) 15%, white); }
.знак-легенды.пунктир { border: 2px dashed var(--цвет); }
.знак-легенды.крест { width: 0.8rem; position: relative; }
.знак-легенды.крест::before, .знак-легенды.крест::after { content: ''; position: absolute; left: 50%; top: 50%; width: 0.8rem; height: 2px; background: var(--цвет); transform: translate(-50%, -50%) rotate(45deg); }
.знак-легенды.крест::after { transform: translate(-50%, -50%) rotate(-45deg); }

/*
 * Холст занимает остаток высоты колонки (строка измерения сверху и панель
 * черновика снизу - в потоке), но не меньше 22rem: ниже холст бесполезен,
 * и пусть тогда прокручивается страница. Размеры в точках растра
 * проставляет код при отрисовке: заданные стилем, они растягивали бы
 * картинку, и координаты мыши перестали бы совпадать с нарисованным.
 */
.холст {
  display: block;
  width: 100%;
  flex: 1;
  min-height: 22rem;
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
  cursor: crosshair;
  touch-action: none;
  /* Выпуск К2: протяжка от холста не выделяет текст страницы (запрет на время жеста - dom.ts). */
  user-select: none; -webkit-user-select: none;
}
.холст.без-привязки { cursor: not-allowed; }

/* Панель черновика тоже в потоке, под холстом (поз. 17): наложенная на
   холст, она принимала щелчок у верхнего левого угла плана за «Отмена», и
   недорисованный контур пропадал. */
.черновик-панель {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.4rem;
  background: var(--поле);
  border: 1px solid var(--внимание);
  border-radius: 3px;
  padding: 0.4rem 0.6rem;
}
/* Перечень объектов под указателем (выпуск Ш-1): Alt+щелчок, в потоке под холстом, как панель черновика. */
.перечень-под-указателем {
  margin-top: 0.4rem;
  background: var(--поле);
  border: 1px solid var(--основной);
  border-radius: 3px;
  padding: 0.4rem 0.6rem;
}
.перечень-под-указателем .заголовок-перечня { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.перечень-под-указателем ol { margin: 0.3rem 0; padding-left: 1.4rem; }
.перечень-под-указателем li button { background: none; border: none; padding: 0.1rem 0.2rem; text-align: left; cursor: pointer; color: inherit; }
.перечень-под-указателем li button:hover { text-decoration: underline; }
.перечень-под-указателем li button.выбран { font-weight: 600; }
.подсказка-перебора { margin: 0.3rem 0 0; }
/* Панель измерения (выпуск Р-2, С-10): итог линейки либо площади под холстом. */
.измерение-панель { border-color: var(--основной); flex-direction: column; align-items: stretch; gap: 0.25rem; }
.измерение-панель .строка-измерения { display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem; }
.измерение-панель .черновик-измерения { padding-bottom: 0.25rem; border-bottom: 1px dashed var(--рамка); }
.измерение-панель .итог-измерения { flex: 1 1 auto; }
.измерение-панель span > button { margin-right: 0.4rem; }

.свойства h3 { font-size: 1rem; margin: 0.75rem 0 0.25rem; }
.свойства h4 { font-size: 0.9rem; margin: 1rem 0 0.25rem; }
.число { display: block; margin: 0.5rem 0; }
.число input { width: 100%; }

.привязка { margin-top: 0.25rem; }
.привязка h4, .перечень h4 { font-size: 0.9rem; margin: 0 0 0.4rem; }
.файл { display: block; margin: 0.5rem 0; }
/* Выпуск Ч-6в: вложения отчета по ролям - блок на роль с линией слева. */
.вложение-роли { border-left: 2px solid var(--рамка); padding: 0.1rem 0 0.1rem 0.6rem; margin: 0.6rem 0; }
.вложение-роли h5 { margin: 0 0 0.2rem; font-size: 0.85rem; }

/* Поиск по перечню: подстрока шифра либо наименования. */
.поиск-перечня { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 0.4rem; }
.поиск-перечня input { flex: 1; min-width: 0; font-size: 0.85rem; padding: 0.25rem 0.4rem; }
.поиск-перечня button.ссылка { font-size: 0.8rem; }

/* Подвкладка «Вид»: ползунки и цвета оформления плана. */
.оформление label.ползунок { display: block; margin: 0.35rem 0; font-size: 0.85rem; }
.оформление label.ползунок .подпись { display: block; color: var(--приглушенный); }
.оформление label.ползунок input[type=range] { width: 100%; margin: 0; }
.оформление label.цвет { display: flex; align-items: center; gap: 0.5rem; margin: 0.25rem 0; font-size: 0.85rem; }
.оформление label.цвет input[type=color] { width: 2.2rem; height: 1.5rem; padding: 0; border: 1px solid var(--рамка); border-radius: 3px; background: none; }
.оформление .действия { margin-top: 0.6rem; }
.оформление h4 { margin-top: 0.8rem; }

/* Кнопки видов оборудования под поиском: те же подвкладки, мельче. */
.кнопки-видов { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0 0 0.4rem; }
.кнопки-видов button.подвкладка { font-size: 0.75rem; padding: 0.1rem 0.45rem; }

/* Подвкладки перечня и таблица: одна строка на объект, своя прокрутка. */
.подвкладки { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-bottom: 0.4rem; }
button.подвкладка {
  padding: 0.15rem 0.5rem;
  font-size: 0.8rem;
  border: 1px solid var(--рамка);
  border-radius: 3px;
  background: var(--поле);
  color: var(--текст);
  cursor: pointer;
}
button.подвкладка.выбрана { background: var(--основной); border-color: var(--основной); color: #fff; }
.прокрутка-перечня { max-height: 18rem; overflow-y: auto; border: 1px solid var(--рамка); border-radius: 3px; }
table.перечень-плана { width: 100%; border-collapse: collapse; font-size: 0.8rem; table-layout: fixed; }
table.перечень-плана col.шифр { width: 22%; }
table.перечень-плана col.имя { width: 38%; }
table.перечень-плана col.вид { width: 25%; }
table.перечень-плана col.план { width: 15%; }
/* Выпуск Х-4: перечень преград - шесть колонок. */
table.перечень-преград col.имя { width: 27%; }
table.перечень-преград col.вид { width: 25%; }
table.перечень-преград col.высота { width: 11%; }
table.перечень-преград col.длина { width: 12%; }
table.перечень-преград col.облако { width: 14%; }
table.перечень-преград col.план { width: 11%; }
/* Выпуск Х-8а: подвкладка «Анимация» - отмеченные сценарии и журнал событий шкалы. */
table.перечень-анимации { table-layout: auto; }
table.перечень-анимации tr { cursor: pointer; }
table.перечень-анимации td.без-переноса, table.перечень-анимации th { white-space: nowrap; }
table.перечень-анимации td .ветвь { margin-top: 0.15rem; }
table.перечень-анимации td.снять button { font-size: 1rem; padding: 0 0.2rem; }
.журнал-анимации { margin-top: 0.6rem; }
table.журнал-событий { width: 100%; border-collapse: collapse; font-size: 0.78rem; table-layout: fixed; }
table.журнал-событий col.момент { width: 20%; } table.журнал-событий col.событие { width: 34%; }
table.журнал-событий col.длительность { width: 24%; } table.журнал-событий col.основание { width: 22%; }
table.журнал-событий td { overflow-wrap: break-word; }
table.журнал-событий th, table.журнал-событий td { padding: 0.2rem 0.3rem; text-align: left; vertical-align: top; }
table.журнал-событий th { color: var(--приглушенный); font-weight: 600; border-bottom: 1px solid var(--рамка); }

table.журнал-событий tr.пояснение-журнала td { border-bottom: 1px solid var(--рамка); padding-top: 0; color: var(--приглушенный); }
table.журнал-событий tr.основание-условно td.основание { color: var(--внимание); }
table.журнал-событий tr.основание-оценка td.основание { font-style: italic; }
/* Выпуск Х-8б: проигрыватель анимации и наступившие события журнала. */
.проигрыватель { margin: 0.4rem 0 0.6rem; padding: 0.4rem; border: 1px solid var(--рамка); border-radius: 3px; background: #f7f9fb; }
.кнопки-проигрывателя { display: flex; flex-wrap: wrap; gap: 0.25rem; align-items: center; }
button.кнопка-проигрывателя { min-width: 2rem; padding: 0.15rem 0.4rem; font-size: 0.95rem; border: 1px solid var(--рамка); border-radius: 3px; background: #fff; cursor: pointer; }
button.кнопка-проигрывателя.выбрана { background: var(--основной); border-color: var(--основной); color: #fff; }
.кнопки-проигрывателя select { margin-left: auto; font-size: 0.85rem; }
input.ползунок-анимации { width: 100%; margin: 0.4rem 0 0.2rem; }
.часы-анимации { font-variant-numeric: tabular-nums; font-weight: 600; font-size: 0.85rem; }
table.журнал-событий tr.событие-журнала.наступило td { background: #eef6ee; }
ul.вторичные-события { margin: 0.3rem 0; padding-left: 1.1rem; }
ul.вторичные-события li.наступило { font-weight: 600; }
/* Выпуск Щ-2: запись анимации в видео. */
.запись-анимации { margin-top: 0.35rem; }
button.кнопка-записи { padding: 0.15rem 0.5rem; font-size: 0.85rem; border: 1px solid var(--рамка); border-radius: 3px; background: #fff; cursor: pointer; }
button.кнопка-записи.выбрана { background: #c0392b; border-color: #c0392b; color: #fff; }
button.кнопка-записи:disabled, button.кнопка-проигрывателя:disabled { opacity: 0.5; cursor: default; }
.правка-узлов { margin: 0.4rem 0; }
table.перечень-плана th {
  position: sticky; top: 0;
  background: #f4f6f8;
  text-align: left;
  font-weight: 600;
  padding: 0.2rem 0.4rem;
  border-bottom: 1px solid var(--рамка);
  overflow-wrap: anywhere;
}
table.перечень-плана td { padding: 0.2rem 0.4rem; border-bottom: 1px solid #eeeeea; vertical-align: top; overflow-wrap: break-word; hyphens: auto; }
table.перечень-плана td.шифр { font-weight: 600; }
table.перечень-плана tbody tr { cursor: pointer; }
table.перечень-плана tbody tr:hover { background: #f4f6f8; }
table.перечень-плана tbody tr.выбран { background: var(--внимание-фон); }
.перечень button.инструмент { margin-top: 0.4rem; }

.блок-панели { margin-top: 0.75rem; border-top: 1px solid var(--рамка); padding-top: 0.4rem; }
.блок-панели summary { cursor: pointer; font-weight: 600; font-size: 0.9rem; }

.расхождения { margin-top: 0.25rem; }

@media (max-width: 75rem) {
  .генплан-страница { height: auto; }
  .генплан-раскладка { grid-template-columns: 1fr; flex: none; }
  /* В столбик - холст первым, панель под ним: порядок разметки обратный. */
  .генплан-раскладка > .колонка:first-child { order: 2; }
  .генплан-раскладка aside { max-height: 40rem; }
  .холст { flex: none; height: 28rem; }
}

/* ------------------------------ вид 3D (Х-7) ---------------------------- */

/* Узел холста WebGL тянется на высоту колонки, как холст плана; холст
   переносится в него после каждой отрисовки (app.ts). */
.сцена-обертка { gap: 0.4rem; }
.панель-3d { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25rem 0.6rem; padding-left: 1.1rem; }
.панель-3d .сценарий-3d { display: flex; align-items: center; gap: 0.4rem; margin: 0; flex: 1 1 18rem; min-width: 0; }
.панель-3d .сценарий-3d select { flex: 1; min-width: 0; max-width: 100%; }
.сцена-3d {
  position: relative; flex: 1; min-height: 22rem;
  background: #f3f5f7; border: 1px solid var(--рамка); border-radius: 3px; overflow: hidden;
}
.холст-3d { display: block; width: 100%; height: 100%; position: absolute; inset: 0; cursor: grab; touch-action: none; user-select: none; -webkit-user-select: none; }
.холст-3d:active { cursor: grabbing; }
/* Легенда и примечания - поверх сцены в левом нижнем углу, сворачиваются:
   под сценой они отнимали бы высоту холста. */
.легенда-3d {
  position: absolute; left: 0.5rem; bottom: 0.5rem; z-index: 2; max-width: min(40rem, calc(100% - 1rem)); max-height: 45%;
  overflow: auto; font-size: 0.75rem; background: rgba(255, 255, 255, 0.92); border: 1px solid var(--рамка); border-radius: 3px;
  padding: 0.3rem 0.6rem;
}
.легенда-3d summary { cursor: pointer; font-weight: 600; }
.легенда-3d p { margin: 0.25rem 0; }
.легенда-3d .шкала-риска { display: flex; flex-wrap: wrap; gap: 0 0.8rem; font-size: 0.75rem; margin: 0.15rem 0; }
.легенда-3d .шкала-риска .образец { width: 1.1rem; height: 0.7rem; }
.примечания-3d { margin: 0.2rem 0 0; padding-left: 1.1rem; font-size: 0.75rem; color: var(--приглушенный); }
@media (max-width: 75rem) { .сцена-3d { flex: none; height: 28rem; } }
/* Выпуск Щ-1: часы анимации поверх сцены 3D. */
.часы-3d { position: absolute; left: 0.5rem; top: 0.5rem; z-index: 2; padding: 0.2rem 0.5rem; font-size: 0.85rem; font-weight: 600;
  font-variant-numeric: tabular-nums; background: rgba(255, 255, 255, 0.88); border: 1px solid var(--рамка); border-radius: 3px; pointer-events: none; }

/* ---------------------- измерение и уровни на генплане ------------------ */

/* Строка измерения лежит НАД холстом в потоке, а не поверх него (поз. 16
   перечня от 17.09.2026): наложенная подсказка перехватывала щелчки при
   рисовании контуров. */
.измерение {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.75rem;
  min-height: 1.6rem;
  margin-bottom: 0.4rem;
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
  padding: 0.35rem 0.6rem;
  font-size: 0.85rem;
  pointer-events: none;
}
/* Панель расхождений: перенос строк, чтобы таблица не уезжала за край (поз. 14). */
.расхождения .находки li { grid-template-columns: 1fr; gap: 0.15rem; }
.расхождения .находки .что, .расхождения .находки .где { overflow-wrap: anywhere; }
.измерение .координаты { font-family: ui-monospace, Consolas, monospace; }
.измерение .значение { font-weight: 600; color: var(--отказ); }

.происхождение { display: block; color: var(--приглушенный); font-size: 0.85rem; }
.строка-ввода { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: flex-end; margin: 0.4rem 0; }
.строка-ввода .поле { margin: 0; }
.строка-ввода input { width: 7rem; }
.строка-ввода .пояснение { flex-basis: 100%; margin: 0; }

.уровни { margin-top: 1rem; }
.уровни h4 { font-size: 0.9rem; margin: 0 0 0.4rem; }
.перечень-уровней {
  list-style: none;
  padding: 0;
  margin: 0.25rem 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.перечень-уровней li {
  border: 1px solid var(--отказ);
  color: var(--отказ);
  border-radius: 3px;
  padding: 0.1rem 0.4rem;
  font-size: 0.8rem;
}

/* --------------------------- исходные данные --------------------------- */

/* Выпуск И (запрос заказчика от 18.09.2026): экран на высоту окна, как план
   объекта; колонки разделов, перечня и формы прокручиваются сами, панель
   готовности внизу со счетчиком. Страница целиком не прокручивается. */
.данные-страница {
  max-width: none;
  padding: 0.75rem 1rem 0.5rem;
  box-sizing: border-box;
  height: calc(100vh - var(--план-шапка-приложения));
  min-height: 34rem;
  display: flex;
  flex-direction: column;
}

.данные-раскладка > .колонка > * { min-height: 0; overflow-y: auto; }

/* Панель готовности внизу (как «Ошибки (N)» старого Фогарда). */
details.сводка-готовности { flex: none; margin: 0.4rem 0 0; }
details.сводка-готовности > summary { cursor: pointer; font-size: 0.9rem; }
.сводка-готовности.ровно { flex: none; margin: 0.4rem 0 0; font-size: 0.9rem; }
.прокрутка-находок { max-height: 14rem; overflow-y: auto; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); }
.таблица-находок { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.таблица-находок th, .таблица-находок td { padding: 0.25rem 0.5rem; border-bottom: 1px solid var(--рамка); text-align: left; vertical-align: top; }
.таблица-находок th { font-weight: 600; color: var(--приглушенный); position: sticky; top: 0; background: var(--поле); }
.таблица-находок td.метка { white-space: nowrap; text-transform: uppercase; font-size: 0.75rem; letter-spacing: 0.02em; }
.таблица-находок tr.препятствие td.метка { color: var(--отказ); }
.таблица-находок tr.предупреждение td.метка { color: var(--внимание); }
.таблица-находок td.где { color: var(--приглушенный); white-space: nowrap; max-width: 14rem; overflow: hidden; text-overflow: ellipsis; }
.таблица-находок tr.переход { cursor: pointer; }
.таблица-находок tr.переход:hover { background: var(--внимание-фон); }
.таблица-находок .перейти { color: var(--основной); white-space: nowrap; }

/* Страница проекта (замечание заказчика от 19.09.2026): шапка с
   действиями закреплена, готовность прокручивается таблицей, история
   ревизий справа. Ширина страницы больше обычной ради двух колонок. */
.страница.страница-проекта { max-width: 80rem; }
/* Единая шапка проекта на экранах сводки, данных и плана (выпуск С-1):
   закреплена под главным меню, вкладки слева, действия справа. */
.шапка-проекта {
  position: sticky; top: 0; z-index: 5;
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem 1rem;
  flex: none;
  background: var(--фон);
  padding: 0.45rem 0 0.4rem;
  border-bottom: 1px solid var(--рамка);
  margin-bottom: 0.6rem;
}
.вкладки-проекта { display: flex; align-items: center; gap: 0.25rem; min-width: 0; }
.имя-проекта { font-weight: 600; max-width: 18rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-right: 0.75rem; }
a.вкладка-проекта { padding: 0.3rem 0.8rem; border: 1px solid transparent; border-radius: 4px; text-decoration: none; color: var(--основной); white-space: nowrap; }
a.вкладка-проекта:hover { border-color: var(--рамка); background: var(--поле); }
a.вкладка-проекта.выбрана { background: var(--основной); border-color: var(--основной); color: #fff; font-weight: 600; }
/* Группа действий стоит сразу справа от вкладок, а не у правого края (выпуск
   У-3, замечание 3 заказчика от 22.09.2026): правый верхний угол занят
   плавающими уведомлениями (.уведомление.сообщение, .ошибка - position: fixed,
   top/right 0.75rem, висят до закрытия), и «Сохранить изменения», «Отбросить
   и перечитать», «Пояснения» уходили под них. При нехватке ширины группа
   переносится под вкладки (flex-wrap у шапки). */
.шапка-проекта .действия { margin: 0 0 0 1rem; padding-left: 1rem; border-left: 1px solid var(--рамка); display: flex; align-items: center; flex-wrap: wrap; gap: 0.6rem; }
/* Выпуск Ф-4: автосохранение в шапке - кнопка настройки и всплывающая панель. */
.автосохранение { position: relative; display: inline-flex; align-items: center; gap: 0.6rem; }
.панель-автосохранения { position: absolute; top: 100%; left: 0; z-index: 20; width: 26rem; margin-top: 0.3rem; padding: 0.6rem 0.8rem;
  background: var(--поле); border: 1px solid var(--рамка); border-radius: 6px; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.15); }
.поле-автосохранения { display: block; margin: 0.3rem 0; }
.поле-автосохранения input[type=number] { width: 5rem; margin-left: 0.3rem; }
.поле-автосохранения select { max-width: 100%; }
.панель-автосохранения .пояснение { font-size: 0.85rem; margin: 0.4rem 0; }
/* Выпуск Ф-4: незаполненные объекты в перечнях данных. */
.метка-незаполнено { color: var(--внимание); font-weight: 700; margin-left: 0.3rem; }
/* Выпуск Ф-3: значок последнего расчета проекта в шапке и перечне проектов. */
a.значок-расчета { margin-left: 0.6rem; padding: 0.15rem 0.55rem; border-radius: 999px; font-size: 0.85rem; white-space: nowrap;
  text-decoration: none; border: 1px solid var(--рамка); color: var(--приглушенный); }
td > a.значок-расчета { margin-left: 0; }
a.значок-расчета.идет { border-color: var(--основной); color: var(--основной); }
a.значок-расчета.готов { border-color: var(--ровно); color: var(--ровно); background: var(--ровно-фон); }
a.значок-расчета.ошибка { border-color: var(--внимание); color: var(--внимание); background: var(--внимание-фон); }
/* Выпуск Ф-1: полоса рассчитанного проекта во всю ширину шапки. */
.полоса-заморозки { flex-basis: 100%; margin: 0.2rem 0 0; padding: 0.3rem 0.6rem; border-left: 3px solid var(--внимание);
  background: var(--внимание-фон); color: var(--внимание); font-size: 0.9rem; }
.заголовок-проекта { margin-bottom: 0.5rem; }
.заголовок-проекта h1 { margin: 0 0 0.2rem; font-size: 1.35rem; }
.заголовок-проекта .подзаголовок { margin: 0 0 0.3rem; }
.заголовок-проекта .внимание { margin: 0.3rem 0 0; }
/* Выпуск Э-2б (замечание 1 заказчика от 25.09.2026): на «Сводке» - кнопки
   «Сводка проекта» и «Отчет»; раздел «Отчет» открывается здесь же. */
.подвкладки-сводки { margin: 0.5rem 0 0; }
.форма-отчета-сводки { max-width: 64rem; }
.проект-раскладка { align-items: start; flex: none; }
.проект-раскладка > .колонка > * { min-height: 0; }
.проект-раскладка > .колонка-свернута { min-height: 12rem; }
.проект-раскладка .проект-справа { padding-left: 0.75rem; }
.проект-слева .таблица, .проект-слева h2 { margin-top: 0; }
.проект-слева h2 { margin-top: 1rem; }
.прокрутка-готовности { max-height: calc(100vh - 22rem); min-height: 6rem; overflow-y: auto; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); }
.проект-справа h2 { margin-top: 0; }
.проект-справа .история-ревизий .таблица td, .проект-справа .история-ревизий .таблица th { font-size: 0.9rem; }
.история-ревизий .таблица td:last-child { white-space: nowrap; overflow-wrap: normal; }
.история-ревизий .таблица td:last-child button { display: inline-block; margin-right: 0.5rem; }
@media (max-width: 64rem) {
  .проект-раскладка { grid-template-columns: minmax(0, 1fr); }
  .проект-раскладка > .разделитель, .проект-раскладка > .колонка-свернута { display: none; }
  .проект-раскладка .проект-справа { padding-left: 0; }
  .прокрутка-готовности { max-height: 24rem; }
}

/* Шифр перед наименованием в перечнях областей и точек (19.09.2026). */
.источники .шифр { color: var(--приглушенный); font-variant-numeric: tabular-nums; }
#перечень-зданий { margin: 0.4rem 0 0.6rem; }
#перечень-зданий table { width: 100%; }
.перечень-зданий td.шифр, table.перечень-оборудования td:first-child { white-space: nowrap; }
.перечень-зданий td.вид { overflow-wrap: normal; }
.перечень-зданий tr { cursor: pointer; }
.перечень-зданий tbody tr.выбран { background: var(--внимание-фон); font-weight: 600; }
/* Работники (выпуск О-2): перечень таблицей в средней колонке, места
   пребывания таблицей в карточке с узкими полями минут и доли. */
#перечень-работников { margin: 0.4rem 0 0.6rem; }
#перечень-работников table { width: 100%; }
.перечень-работников tr { cursor: pointer; }
.перечень-работников tbody tr.выбран { background: var(--внимание-фон); font-weight: 600; }
.перечень-работников td:first-child, .места-работника td:first-child { white-space: nowrap; color: var(--приглушенный); }
.места-работника { width: 100%; }
.места-работника td.шифр { white-space: nowrap; }
.форма .места-работника input.узкое, .форма input.узкое { min-width: 4.5rem; width: 6rem; }
/* Доля года у мест работника - справочная и расчетная величина (выпуск Р-1, замечание С-9). */
.места-работника th.справочно, .места-работника td.справочно { color: var(--приглушенный); }
.места-работника input.справочно { color: var(--приглушенный); background: var(--ровно-фон); }

/* Карточка оборудования (выпуск О-3, этап О2): таблица расчетных величин
   сценариев с кнопками «уточнить», свернутый блок переопределений, схема
   стадий «Поведение в каскаде» - воздействие → критерий → исход. */
.расчетные-величины { margin-top: 1rem; }
.величины-сценариев { width: 100%; }
.величины-сценариев td.величины .величина { display: block; padding: 0.1rem 0; }
.величины-сценариев td.величины .величина button.ссылка { margin-left: 0.4rem; }
/* Выпуск Х-8а: отметка «Анимировать» в таблице величин сценариев. */
.величины-сценариев td.анимировать { white-space: nowrap; font-size: 0.8rem; color: var(--приглушенный); }
details.переопределения { border-color: var(--основной); }
details.переопределения[open] > summary { color: var(--основной); font-weight: 600; }
.схема-каскада { display: flex; flex-direction: column; gap: 0.4rem; margin: 0.6rem 0 1rem; padding: 0.6rem; border: 1px solid var(--рамка); border-radius: 3px; background: var(--фон); }
.корень-каскада { font-weight: 600; padding: 0.3rem 0.5rem; border: 2px solid var(--основной); border-radius: 3px; background: var(--поле); align-self: flex-start; max-width: 100%; }
.ветвь-каскада { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 0.3rem; margin-left: 1.5rem; }
.стадия-каскада { padding: 0.25rem 0.5rem; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); font-size: 0.9rem; min-height: 100%; box-sizing: border-box; }
@media (max-width: 64rem) { .ветвь-каскада { grid-template-columns: minmax(0, 1fr); } .ветвь-каскада .стрелка { transform: rotate(90deg); justify-self: start; } }
.стадия-каскада.критерий { border-style: dashed; }
.стадия-каскада.исход.вовлечен { border-color: var(--внимание); background: var(--внимание-фон); }
.стадия-каскада.исход.устойчив { border-color: var(--ровно); }
.ветвь-каскада .стрелка { color: var(--приглушенный); }

/* Границы столбцов перечней (19.09.2026): узкая полоса у правого края
   заголовка, тянется мышью; ширины держат элементы <col>. Полоса видна
   всегда (выпуск О-1а): границу иначе не найти. */
.граница-столбца {
  position: absolute; top: 0; right: -3px; width: 7px; height: 100%;
  cursor: col-resize; user-select: none; touch-action: none; z-index: 1;
  background: linear-gradient(to right, transparent 2px, var(--рамка) 2px, var(--рамка) 4px, transparent 4px);
}
.граница-столбца:hover { background: rgba(0, 0, 0, 0.18); }
table[data-столбцы] th { position: relative; }
table[data-столбцы] td { overflow-wrap: anywhere; }
/* Сворачиваемые блоки: заголовок - summary с треугольником. */
details.сворачиваемый > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 0.4rem; }
details.сворачиваемый > summary::-webkit-details-marker { display: none; }
details.сворачиваемый > summary::before { content: '▾'; color: var(--приглушенный); font-size: 0.8rem; }
details.сворачиваемый:not([open]) > summary::before { content: '▸'; }
details.сворачиваемый > summary h5, details.сворачиваемый > summary h4 { margin: 0; }

/* Подвкладки формы оборудования: панели невыбранных остаются в разметке скрытыми.
   Строка подвкладок закреплена в прокручиваемой карточке (выпуск С-1, позиция 2
   заказчика от 21.09.2026): при прокрутке длинной подвкладки не уезжает. */
.подвкладки-формы { position: sticky; top: 0; z-index: 3; background: var(--поле); margin: 0 0 0.5rem; padding: 0.3rem 0; }
.панель-формы[hidden] { display: none; }
.кнопка-пояснений { margin-left: auto; }
/* Заполненное переопределение расчетной величины (выпуск С-1): откуда число и «очистить». */
.переопределение-заполнено { border-left: 3px solid var(--внимание); padding-left: 0.5rem; margin: 0.3rem 0; }
.откуда-переопределение { margin: 0 0 0.3rem; }
.откуда-переопределение button.ссылка { margin-left: 0.5rem; }
/* Выпуск У-4: пометка о величине, взятой из обвалования либо переопределяющей его. */
.из-обвалования { margin: 0 0 0.3rem; color: var(--приглушенный); }

/* Строка поля (выпуск И, как в старом Фогарде): подпись слева, ввод справа,
   метка происхождения в конце строки; пояснение скрыто и показывается у
   поля в фокусе, подсказкой на подписи либо у всех полей кнопкой «Пояснения». */
.данные-страница .форма .поле {
  display: grid;
  grid-template-columns: minmax(9rem, 15rem) minmax(0, 1fr) auto;
  column-gap: 0.6rem;
  align-items: center;
  margin: 0.3rem 0;
}
.данные-страница .форма .поле .подпись { text-align: right; margin: 0; cursor: help; }
.данные-страница .форма .поле input, .данные-страница .форма .поле select,
.данные-страница .форма .поле textarea, .данные-страница .форма .поле .ввод-с-единицей { grid-column: 2; margin-top: 0; }
.данные-страница .форма .поле .происхождение {
  grid-column: 3;
  display: inline-block;
  font-size: 0.75rem;
  padding: 0.05rem 0.4rem;
  border: 1px solid var(--рамка);
  border-radius: 1rem;
  white-space: nowrap;
  cursor: help;
}
.данные-страница .форма .поле .пояснение, .данные-страница .форма .поле .внимание { grid-column: 2 / -1; margin-top: 0; }
.данные-страница .форма .поле .пояснение { display: none; }
.данные-страница .форма .поле:focus-within .пояснение { display: block; }
.данные-страница.с-пояснениями .форма .поле .пояснение { display: block; }
.данные-страница .группа-параметров > p.пояснение { display: none; }
.данные-страница.с-пояснениями .группа-параметров > p.пояснение { display: block; }
.данные-страница .группа-параметров h5 { cursor: help; }
.данные-страница .строка-формы .поле { flex: 1 1 18rem; }
.данные-страница button.кнопка-перечня { margin: 0.4rem 1rem 0 0; }
/* Поля ввода занимают ширину формы (поз. 27): «Наименование» и «Краткая
   характеристика» на 180 px не читались. */
.форма textarea { display: block; width: 100%; min-height: 6rem; font: inherit; padding: 0.4rem 0.5rem;
  border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); color: var(--текст); }
.строка-формы .поле { flex: 1 1 14rem; }
.форма input[type=text], .форма input[type=search] { min-width: 12rem; }

.разделы { display: flex; flex-direction: column; gap: 0.25rem; }
button.раздел {
  text-align: left;
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
}
button.раздел.выбран { background: var(--основной); border-color: var(--основной); color: #fff; }
button.раздел .счет { opacity: 0.75; }

.состав-обертка, .форма-обертка {
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
  padding: 0.75rem;
}

.состав .панель { margin: 0 0 0.5rem; }

.форма { display: flex; flex-direction: column; }
.форма h4 { font-size: 0.9rem; margin: 1.25rem 0 0.25rem; }

.поле { display: block; margin: 0.6rem 0; }
.поле .подпись { display: block; font-size: 0.85rem; color: var(--приглушенный); }
.поле .единица { color: var(--приглушенный); }
.поле .обязательно { color: var(--внимание); font-size: 0.75rem; }
.поле input, .поле select {
  display: block;
  width: 100%;
  margin-top: 0.2rem;
  padding: 0.4rem 0.5rem;
  font: inherit;
  color: var(--текст);
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
}
.поле .пояснение, .поле .внимание { display: block; margin-top: 0.2rem; font-size: 0.8rem; }

@media (max-width: 75rem) {
  .данные-страница { height: auto; }
  .данные-раскладка { grid-template-columns: 1fr; flex: none; }
  .данные-раскладка > .колонка > * { overflow-y: visible; }
  .раскладка-колонок > .разделитель, .раскладка-колонок > .колонка-свернута { display: none; }
  .данные-страница .форма .поле { grid-template-columns: 1fr; }
  .данные-страница .форма .поле .подпись { text-align: left; }
  .данные-страница .форма .поле input, .данные-страница .форма .поле select,
  .данные-страница .форма .поле textarea, .данные-страница .форма .поле .ввод-с-единицей,
  .данные-страница .форма .поле .происхождение, .данные-страница .форма .поле .пояснение,
  .данные-страница .форма .поле .внимание { grid-column: 1; }
}

/* ---------------------------- дерево событий --------------------------- */

/* Список правит: вложение показано отступом и линией слева. */
.дерево-редактор { margin: 0.6rem 0; }
.дерево-узел { border-left: 2px solid var(--рамка); padding-left: 0.8rem; margin: 0.4rem 0; }
.дерево-исходы { margin-left: 0.4rem; }
.дерево-исход { margin: 0.4rem 0; }
.дерево-исход-строка {
  display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;
}
.дерево-исход-строка input[type="text"] { flex: 1 1 12rem; min-width: 8rem; }
.дерево-вероятность { display: flex; align-items: center; gap: 0.3rem; }
.дерево-вероятность input { width: 6rem; }
.дерево-кнопки { display: flex; gap: 0.5rem; }
.нехватка { color: var(--внимание); font-size: 0.85rem; margin: 0.4rem 0 0.4rem 1.2rem; }

/* Схема показывает: вложение колонками, ветви линиями. Печатается как есть. */
.схема { overflow-x: auto; margin: 0.4rem 0; }
.схема-узел { display: flex; align-items: flex-start; gap: 0.6rem; margin: 0.2rem 0; }
.схема-узел-заголовок {
  flex: 0 0 auto;
  max-width: 14rem;
  padding: 0.3rem 0.5rem;
  border: 1px solid var(--рамка);
  border-radius: 3px;
  background: var(--поле);
  font-size: 0.85rem;
}
.схема-ветви { flex: 1 1 auto; border-left: 1px solid var(--рамка); padding-left: 0.6rem; }
.схема-ветвь { margin: 0.25rem 0; }
.схема-ветвь-подпись { font-size: 0.8rem; color: var(--приглушенный); }
.схема-лист {
  display: inline-block;
  padding: 0.2rem 0.5rem;
  border: 1px dashed var(--рамка);
  border-radius: 3px;
  font-size: 0.85rem;
}

/* ------------------------------------------ администрирование и регистрация */
/* Решение заказчика от 16.09.2026, по образцу админки Фогард-К. */

.администрирование { max-width: 96rem; }
.вкладки { display: flex; flex-wrap: wrap; gap: 0.25rem; border-bottom: 1px solid var(--рамка); margin: 0.5rem 0 1rem; }
.вкладки a { padding: 0.4rem 0.8rem; text-decoration: none; color: var(--текст); border: 1px solid transparent;
  border-bottom: none; border-radius: 4px 4px 0 0; }
.вкладки a.текущая { border-color: var(--рамка); background: var(--поле); font-weight: 600; }
.карточка { background: var(--поле); border: 1px solid var(--рамка); border-radius: 6px; padding: 0.75rem 1rem;
  margin: 0.5rem 0 1rem; }
.карточка h2 { margin-top: 0; font-size: 1rem; }
.строка-формы { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: flex-end; margin: 0.35rem 0; }
.строка-формы .поле { min-width: 10rem; }
.администрирование .действия { display: flex; flex-direction: column; gap: 0.2rem; min-width: 18rem; }
.администрирование .таблица td { vertical-align: top; }
.флажок { display: inline-flex; gap: 0.4rem; align-items: center; margin: 0.5rem 0; }
.присутствие { white-space: nowrap; font-size: 0.85rem; color: var(--приглушенный); }
.лампа { display: inline-block; width: 0.7rem; height: 0.7rem; border-radius: 50%; vertical-align: -1px;
  background: #c9d2da; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12); }
.лампа.в-сети { background: #2fbf5b; box-shadow: 0 0 6px rgba(47, 191, 91, 0.75); }
.лампа.вход { background: #e8b33a; }
.справочник-веществ { background: var(--ровно-фон); border: 1px solid var(--рамка); border-radius: 6px; padding: 0.5rem; }
/* Смесь по составу (поз. 8) и расчетные величины не по веществу (поз. 35). */
details.смесь { border: 1px solid var(--рамка); border-radius: 6px; padding: 0.4rem 0.6rem; margin: 0.5rem 0; }
details.смесь > summary { cursor: pointer; font-weight: 600; }
.строка-формы.компонент { display: flex; gap: 0.6rem; align-items: flex-end; flex-wrap: wrap; }
.строка-формы.компонент label.поле { flex: 1 1 10rem; }
.смесь-ответ { margin-top: 0.5rem; }
.смесь-ответ table { font-size: 0.9rem; }
.расчетные-справочника { padding: 0.5rem 0.7rem; border-radius: 6px; margin: 0.5rem 0; }
.расчетные-справочника p { margin: 0 0 0.4rem; }
/* Поз. 29: запись с порядком рядом с полем. */
.порядок { white-space: nowrap; align-self: center; }
/* Поз. 27 перечня от 17.09.2026: поле подбора вещества во всю ширину блока. */
.справочник-веществ label.поле { flex: 1 1 100%; }
.справочник-веществ input { width: 100%; box-sizing: border-box; }
button.предупреждение { color: var(--отказ); border-color: #d8a3a3; background: var(--отказ-фон); }

/* Перечень оборудования таблицей со строкой поиска (решение от 16.09.2026). */
table.перечень-оборудования tbody tr { cursor: pointer; }
table.перечень-оборудования tbody tr.выбран { background: var(--внимание-фон); font-weight: 600; }
table.перечень-оборудования td { padding: 0.2rem 0.4rem; font-size: 0.9rem; }
table.перечень-зданий td { padding: 0.2rem 0.4rem; font-size: 0.85rem; }
.состав input[type="search"] { width: 100%; margin: 0.3rem 0; }
.климатология table td { font-size: 0.85rem; }

/* Группы параметров оборудования и свернутые разделы формы (замечания 3, 12). */
.группа-параметров { margin: 0.6rem 0; padding: 0.4rem 0.6rem; border-left: 3px solid var(--рамка); }
.группа-параметров h5 { margin: 0 0 0.3rem; font-size: 0.95rem; }
details.тонкие-настройки, details.раздел-формы { margin: 0.6rem 0; border: 1px dashed var(--рамка); border-radius: 3px; padding: 0.3rem 0.6rem; }
details.тонкие-настройки > summary, details.раздел-формы > summary { cursor: pointer; font-weight: 600; }

/* Единица ввода рядом с числом (замечание 2). */
.ввод-с-единицей { display: flex; gap: 0.3rem; align-items: center; flex-wrap: wrap; }
/* Числовые поля узкие (19.09.2026): значение в них не бывает длиннее
   полутора десятков знаков, а поле во всю ширину читалось как пустое. */
.ввод-с-единицей input { flex: 0 1 16ch; min-width: 9ch; max-width: 100%; }
.ввод-с-единицей input::placeholder, .поле input::placeholder, .поле textarea::placeholder { color: var(--приглушенный); opacity: 0.8; font-style: italic; }
.ввод-с-единицей select.единица-ввода { flex: 0 0 auto; max-width: 9rem; }

/* Инструмент «Добавить» и окно ввода нового объекта (замечание 5). */
.что-добавить { display: flex; flex-direction: column; gap: 0.2rem; margin: 0.2rem 0 0.5rem; }
.что-добавить select { width: 100%; }
.окно-нового { border: 2px solid var(--основной); border-radius: 3px; padding: 0.6rem; background: var(--поле); }
.окно-нового h3 { margin-top: 0; }
/* Выпуск Х-5: окно у объекта поверх холста - новый объект и карточка по двойному щелчку. */
.плавающее-окно {
  position: absolute; left: 1rem; top: 1rem; z-index: 5;
  width: 27rem; max-width: calc(100% - 1rem); max-height: calc(100% - 1rem); overflow: auto;
  background: var(--поле, #fff); border: 2px solid var(--основной); border-radius: 4px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.25); font-size: 0.9rem;
}
.плавающее-окно .заголовок-окна {
  position: sticky; top: 0; z-index: 1; display: flex; align-items: center; gap: 0.5rem;
  padding: 0.25rem 0.5rem; background: var(--основной); color: #fff; cursor: move; user-select: none; touch-action: none;
}
.плавающее-окно .заголовок-окна strong { flex: 1; }
.плавающее-окно .закрыть-окно { background: transparent; color: #fff; border: none; font-size: 1.2rem; line-height: 1; cursor: pointer; padding: 0 0.3rem; }
.плавающее-окно .тело-окна { padding: 0.5rem; }
.плавающее-окно .окно-нового { border: none; padding: 0; }
/* Размеры, не относящиеся к форме, скрыты: правило .поле иначе перебивает атрибут hidden. */
.окно-нового label.поле[hidden] { display: none; }
.холст-изометрии.малая { height: 11rem; margin-top: 0.4rem; }
.уведомление button.ссылка { margin-top: 0.3rem; }

/* Карточка выбранного объекта в панели плана (19.09.2026): шапка с возвратом
   к свойствам, форма экрана данных в один столбец; пояснения полей - у поля
   в фокусе, как на экране данных. Кнопки выбранного - карточка и удаление. */
.карточка-панели { border: 2px solid var(--основной); border-radius: 3px; padding: 0.6rem; background: var(--поле); }
.карточка-панели > .панель { display: flex; flex-wrap: wrap; gap: 0.4rem 0.8rem; align-items: center; margin: 0 0 0.4rem; }
.карточка-панели > .панель h3 { flex: 1 1 100%; margin: 0; font-size: 1rem; }
.карточка-плана.форма-обертка { border: 0; padding: 0; background: transparent; }
.карточка-плана .форма .поле .пояснение { display: none; }
.карточка-плана .форма .поле:focus-within .пояснение { display: block; }
.карточка-плана.с-пояснениями .форма .поле .пояснение { display: block; }
.карточка-плана .форма input[type=text], .карточка-плана .форма input[type=search] { min-width: 8rem; max-width: 100%; }
.свойства .действия { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.75rem; }

/* Подложка из PDF: выбор страницы и разрешения (замечание 1). */
.pdf-подложка { border: 1px solid var(--рамка); border-radius: 3px; padding: 0.4rem 0.6rem; margin: 0.4rem 0; }

/* Подвкладка «Результат» плана (19.09.2026): что показать, тепловая карта
   риска с цветовой шкалой, уровни изолиний, сохранение плана в PDF. */
.результат-на-плане h4 { margin: 0.4rem 0 0.3rem; }
.результат-на-плане select { width: 100%; }
.шкала-риска { list-style: none; margin: 0.2rem 0 0.4rem; padding: 0; font-size: 0.85rem; }
.шкала-риска li { display: flex; align-items: center; gap: 0.4rem; line-height: 1.5; }
.шкала-риска .образец { display: inline-block; width: 1.6rem; height: 0.9rem; border: 1px solid var(--рамка); flex: none; }
.шкала-риска.градиент .полоса { height: 0.9rem; border: 1px solid var(--рамка); border-radius: 2px; }
.шкала-риска.градиент .деления { display: flex; justify-content: space-between; font-size: 0.8rem; margin-top: 0.15rem; }
.шкала-риска.градиент .мелко { margin: 0.1rem 0 0; }
.результат-на-плане input[type=range] { width: 100%; }
.выгрузка-плана { border-top: 1px solid var(--рамка); margin-top: 0.75rem; padding-top: 0.4rem; }
.выгрузка-плана .действия { margin: 0.4rem 0 0.2rem; }

/* Страница «Справочники»: общий и локальный справочники веществ (выпуск Р-1, замечание С-1). */
.записи-справочника { display: flex; flex-direction: column; gap: 0.3rem; }
.запись-справочника { border: 1px solid var(--рамка); border-radius: 6px; padding: 0.3rem 0.6rem; }
.запись-справочника summary { cursor: pointer; }
.запись-справочника .действия { display: flex; gap: 0.75rem; margin: 0.5rem 0 0.2rem; }
.запись-справочника table { margin: 0.5rem 0; font-size: 0.9rem; }

/* Экран «Методика» (замечание 7): текст приказа N 533 с оглавлением и подсветкой места перехода. */
.страница.методика { max-width: 80rem; }
/* Главное меню закреплено сверху на экране методики (выпуск Р-1, замечание С-3). */
#приложение[data-экран="методика"] .шапка { position: sticky; top: 0; z-index: 5; }
.возврат-из-методики { margin: 0 0 0.5rem; }
.возврат-из-методики button.ссылка { font-size: 0.95rem; }
/* Оглавление ниже закрепленного меню. */
#приложение[data-экран="методика"] .оглавление-методики { top: 3.5rem; max-height: calc(100vh - 4rem); }
.методика-разметка { display: grid; grid-template-columns: 18rem 1fr; gap: 1.5rem; align-items: start; }
.оглавление-методики { position: sticky; top: 0.5rem; max-height: calc(100vh - 1rem); overflow: auto; font-size: 0.9rem; }
.оглавление-методики ul { list-style: none; padding: 0; margin: 0; }
.оглавление-методики li { margin: 0.15rem 0; }
.оглавление-методики li.вложенный { padding-left: 1rem; font-size: 0.85rem; }
.оглавление-методики a.текущий { font-weight: 600; background: #fff5b8; }
.поиск-методики { display: flex; gap: 0.5rem; align-items: end; flex-wrap: wrap; }
.поиск-методики .поле { flex: 1 1 16rem; }
.текст-методики { line-height: 1.5; }
.текст-методики p { margin: 0.4rem 0; text-align: justify; }
.текст-методики .пункт-методики { margin-top: 0.8rem; }
.текст-методики .служебный-методики { text-align: right; color: var(--приглушенный); font-size: 0.9rem; margin: 0.1rem 0; }
.текст-методики .приложение-методики { margin-top: 2rem; border-top: 1px solid var(--рамка); padding-top: 1rem; }
.текст-методики .формула-методики { text-align: center; margin: 0.6rem 0; }
.текст-методики .рисунок-методики { text-align: center; margin: 0.6rem 0; }
.текст-методики .подпись-рисунка, .текст-методики .подпись-таблицы { text-align: center; color: var(--приглушенный); }
.текст-методики img.картинка-методики { vertical-align: middle; max-width: 100%; height: auto; }
.таблица-методики { margin: 0.8rem 0; overflow-x: auto; }
.таблица-методики h4 { text-align: center; margin: 0.2rem 0 0.5rem; }
.таблица-методики table { border-collapse: collapse; font-size: 0.9rem; }
.таблица-методики td { border: 1px solid var(--рамка); padding: 0.2rem 0.4rem; vertical-align: top; }
.таблица-методики td.центр { text-align: center; }
.таблица-методики td.без-верха { border-top: none; }
.таблица-методики td.без-низа { border-bottom: none; }
a.ссылка-методики { text-decoration: underline dotted; color: inherit; }
a.ссылка-методики:hover { background: #fff5b8; }
.текст-методики .подсвечено { outline-offset: 0.2rem; }
.текст-методики p.центр { text-align: center; }
@media (max-width: 60rem) { .методика-разметка { grid-template-columns: 1fr; } .оглавление-методики { position: static; max-height: 14rem; } }

/* Подвкладка «Ситуации» карточки оборудования (выпуск Л): строки набора
   галками слева, схема дерева на холсте справа; на узком экране - столбцом. */
/* Схема под строками, а не справа (отступление от плана Л2): колонка формы
   около 850 точек, и две колонки давали бы таблицу в три слова шириной и
   схему, где не читаются узлы. На экранах от 1900 точек - справа. */
.ситуации-раскладка { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0.8rem; align-items: start; }
@media (min-width: 1900px) { .ситуации-раскладка { grid-template-columns: minmax(0, 1fr) minmax(0, 36rem); } }
.строка-классификатора label.поле { margin-bottom: 0.4rem; }
.строка-классификатора .кнопки-ситуаций { display: flex; gap: 0.75rem; flex-wrap: wrap; margin: 0 0 0.6rem; }
.строка-классификатора button { white-space: nowrap; }
.ситуации-строки { min-width: 0; overflow-x: auto; }
/* Таблица ситуаций: строки - аварии (корень), ветви опасных факторов -
   галками в шапке (верхняя горизонталь, как в старом Фогарде). */
.таблица-ситуаций { width: 100%; min-width: 46rem; border-collapse: collapse; font-size: 0.82rem; }
.таблица-ситуаций td.таблично { color: var(--приглушенный); font-style: italic; }
.таблица-ситуаций th, .таблица-ситуаций td { padding: 0.25rem 0.35rem; border-bottom: 1px solid var(--рамка); text-align: left; vertical-align: top; }
.таблица-ситуаций th { font-weight: 600; color: var(--приглушенный); background: var(--поле); vertical-align: bottom; }
.таблица-ситуаций th.ветвь, .таблица-ситуаций td.ветвь { text-align: center; width: 3.5rem; padding-left: 0.1rem; padding-right: 0.1rem; }
.таблица-ситуаций th.ветвь .галка-ветви { display: block; margin: 0; font-size: 0.7rem; line-height: 1.1; color: var(--приглушенный); cursor: pointer; }
.таблица-ситуаций th.ветвь .галка-ветви input { display: block; margin: 0 auto 0.15rem; }
.таблица-ситуаций td.ветвь input { margin: 0; }
.таблица-ситуаций td.ветвь.исключен input { opacity: 0.35; }
.таблица-ситуаций th.ветвь.нет .галка-ветви { opacity: 0.55; }
.таблица-ситуаций td.ввод input.число-в-таблице { border-color: var(--основной); }
.таблица-ситуаций input.число-в-таблице, .форма .таблица-ситуаций input.число-в-таблице { width: 5.2rem; min-width: 0; max-width: 5.2rem; font-size: 0.82rem; padding: 0.1rem 0.25rem; }
.таблица-ситуаций input.число-в-таблице::placeholder { color: var(--приглушенный); font-style: italic; }
.таблица-ситуаций tbody tr { cursor: pointer; }
.таблица-ситуаций tbody tr.выбран { background: var(--внимание-фон); }
.таблица-ситуаций td:first-child { width: 2.2rem; }
.таблица-ситуаций td:nth-child(2) { width: 5.5rem; color: var(--приглушенный); white-space: nowrap; }
.таблица-ситуаций td:nth-child(3) { min-width: 7rem; }
.таблица-ситуаций td:nth-child(4), .таблица-ситуаций td:nth-child(5) { white-space: nowrap; }
.таблица-ситуаций button.ссылка { font-size: 0.8rem; white-space: nowrap; }
.холст-дерева {
  display: block;
  width: 100%;
  height: 24rem;
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
}
.признаки-дерева { margin: 0.3rem 0 0 1.2rem; padding: 0; font-size: 0.9rem; }
.признаки-дерева li { margin: 0.2rem 0; }

/* Выпуск Х-3: изометрия справа от полей карточки оборудования и преграды;
   в узкой карточке (три колонки экрана данных) - над полями. */
.с-изометрией { container-type: inline-size; }
.сетка-изометрии { display: grid; grid-template-columns: minmax(0, 1fr) minmax(16rem, 24rem); gap: 1rem; align-items: start; }
.сетка-изометрии > .поля-с-изометрией { min-width: 0; }
.блок-изометрии { position: sticky; top: 0.5rem; }
.холст-изометрии {
  display: block;
  width: 100%;
  height: 20rem;
  background: var(--поле);
  border: 1px solid var(--рамка);
  border-radius: 3px;
}
@container (max-width: 56rem) {
  .сетка-изометрии { grid-template-columns: minmax(0, 1fr); }
  .сетка-изометрии > .блок-изометрии { order: -1; position: static; max-width: 30rem; }
  .сетка-изометрии .холст-изометрии { height: 16rem; }
}

/* Список литературы отчета (выпуск М, как в Фогард-К). */
/* Выпуск Ф-2: таблица сформированных отчетов во вкладке «Отчет». */
.таблица-отчетов { width: 100%; font-size: 0.9rem; }
.таблица-отчетов td.размер-отчета { text-align: right; white-space: nowrap; }
/* Выпуск Я-7: протокол проверки отчета в строке перечня. */
.таблица-отчетов td.проверка-отчета { font-size: 0.85rem; }
.таблица-отчетов td.проверка-отчета .ок { color: #2c6b41; white-space: nowrap; }
.таблица-отчетов .протокол-проверки summary { cursor: pointer; color: #9a5b00; white-space: nowrap; }
.таблица-отчетов .протокол-проверки ul { margin: 0.3rem 0 0; padding-left: 1.1rem; max-width: 36rem; }
.таблица-литературы { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.таблица-литературы th, .таблица-литературы td { padding: 0.25rem 0.4rem; border-bottom: 1px solid var(--рамка); text-align: left; vertical-align: top; }
.таблица-литературы th { font-weight: 600; color: var(--приглушенный); }
.таблица-литературы td:first-child { width: 2rem; }
.таблица-литературы td:nth-child(3) { width: 12rem; color: var(--приглушенный); }
.таблица-литературы td:last-child { width: 2rem; }
.добавить-литературу { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.6rem; flex-wrap: wrap; }
.добавить-литературу input[type=text] { flex: 1 1 22rem; margin: 0; }
.добавить-литературу select { width: auto; }
.добавить-литературу button { white-space: nowrap; }

/* Папки проектов (выпуск О-2, этап О12): дерево слева с раскрытыми
   уровнями, выбранная папка выделена, путь над перечнем, выбор папки в
   строке проекта. */
.страница.страница-проектов { max-width: 80rem; }
.проекты-раскладка { margin-top: 0.6rem; }
table.проекты td:nth-child(4) { white-space: nowrap; }
.дерево-папок ul.папки { list-style: none; margin: 0; padding: 0; }
.дерево-папок .папка { display: flex; align-items: center; gap: 0.3rem; padding: 0.15rem 0.4rem; border-radius: 3px; min-height: 1.8rem; }
.дерево-папок .папка.выбрана { background: var(--внимание-фон); font-weight: 600; }
.дерево-папок .папка button.имя-папки { text-align: left; }
.дерево-папок .папка .счет { color: var(--приглушенный); font-weight: 400; }
.дерево-папок .папка input { width: 100%; min-width: 6rem; }
.дерево-папок .действия-папок { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.6rem; }
.дерево-папок .новая-папка { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; width: 100%; }
.дерево-папок .новая-папка input { flex: 1 1 8rem; }
.путь-папки { margin: 0 0 0.5rem; color: var(--приглушенный); }
table.проекты select.переместить { max-width: 12rem; font-size: 0.85rem; }
/* Выбор папки и действия строки одним столбцом (выпуск А2-1). */
.действия-проекта { display: flex; flex-direction: column; align-items: flex-start; gap: 0.3rem; }
.действия-проекта select.переместить { max-width: 12rem; font-size: 0.85rem; }
/* Перечень проектов: слова объекта и адреса не рвутся по буквам (overflow-wrap: anywhere общего правила сжимал столбцы). */
table[data-столбцы="проекты-2"] td { overflow-wrap: break-word; }
@media (max-width: 64rem) {
  .проекты-раскладка { grid-template-columns: minmax(0, 1fr); }
  .проекты-раскладка > .разделитель, .проекты-раскладка > .колонка-свернута { display: none; }
}

/* Множественный выбор, буфер и групповое редактирование (выпуск Т-2). */
.группа-выбранных .действия button, .форма-группы .действия button { margin-right: 0.5rem; }
.буфер-плана { margin: 0.5rem 0; padding: 0.3rem 0.5rem; border: 1px dashed var(--рамка); border-radius: 4px; }
.форма-группы .поле.тронуто input, .форма-группы .поле.тронуто select { border-color: var(--основной); background: var(--внимание-фон); }
.форма-группы .разные { color: var(--внимание); }
.форма-группы .поле button.ссылка { margin-left: 0.4rem; font-size: 0.8rem; }

/* ------------------------ состояние сервера (выпуск Ц-1) ------------------ */

/* Светофор различается цветом и словом: «норма», «требует внимания»,
   «нужны неотложные меры». */
.лампа-светофора { display: inline-block; width: 0.8rem; height: 0.8rem; border-radius: 50%; vertical-align: -1px; background: #9aa0a6; }
.зеленый > .лампа-светофора { background: #2fbf5b; }
.желтый > .лампа-светофора { background: #e8b33a; }
.красный > .лампа-светофора { background: #d13b2f; box-shadow: 0 0 6px rgba(209, 59, 47, 0.8); }
.светофор-шапки { font-weight: 600; white-space: nowrap; }
.светофор-шапки.желтый { color: var(--внимание); }
.светофор-шапки.красный { color: var(--отказ); }
.светофор-сервера { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.35rem 0.7rem; border: 1px solid var(--рамка); border-radius: 3px; background: var(--поле); }
.светофор-сервера.желтый { background: var(--внимание-фон); }
.светофор-сервера.красный { background: var(--отказ-фон); }
.светофор-сервера.зеленый { background: var(--ровно-фон); }
.метка-светофора { font-weight: 600; white-space: nowrap; }
.метка-светофора.желтый { color: var(--внимание); }
.метка-светофора.красный { color: var(--отказ); }
.карточки-сервера { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0.6rem; margin: 0.8rem 0; }
.карточки-сервера .карточка h4 { margin: 0 0 0.2rem; }
.графики-сервера { display: grid; grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); gap: 0.8rem; margin: 0.8rem 0; }
.график-суток .столбики { display: flex; align-items: flex-end; gap: 2px; height: 5rem; border-bottom: 1px solid var(--рамка); }
.график-суток .столбик { flex: 1; min-width: 3px; background: var(--основной); opacity: 0.75; }
.график-суток .подписи-оси { display: flex; justify-content: space-between; }
.таблица.профиль-нагрузки { width: auto; }
.профиль-нагрузки td { width: 1.2rem; height: 1rem; padding: 0; border: 1px solid var(--поле); }
.профиль-нагрузки tbody th { text-align: left; white-space: nowrap; padding: 0 0.4rem 0 0; }
.профиль-нагрузки th { font-size: 0.7rem; padding: 0 0.15rem; }
.ступень-нет { background: #f1f1ee; }
.ступень-0 { background: #e6f2e9; }
.ступень-1 { background: #bfe0c7; }
.ступень-2 { background: #f4df97; }
.ступень-3 { background: #f0b86a; }
.ступень-4 { background: #e4804e; }
.ступень-5 { background: #c9412f; }

/* Окно «Нужны неотложные меры» поверх любого экрана. */
.затемнение { position: fixed; inset: 0; z-index: 50; background: rgba(20, 20, 20, 0.45); display: flex; align-items: center; justify-content: center; padding: 1rem; }
.окно-мер { background: var(--поле); border: 2px solid var(--отказ); border-radius: 4px; max-width: 42rem; max-height: 90vh; overflow: auto; padding: 1rem 1.2rem; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.3); }
.окно-мер h2 { margin-top: 0; color: var(--отказ); }
.окно-мер li { margin-bottom: 0.5rem; }
.окно-мер .кнопки { display: flex; gap: 0.6rem; justify-content: flex-end; flex-wrap: wrap; }

/* Выпуск Ц-2: вкладка «Информация», окно «Обновления программы», раздел «Обновления». */
.окно-обновлений { background: var(--поле); border: 1px solid var(--рамка); border-radius: 4px; max-width: 46rem; max-height: 90vh; overflow: auto; padding: 1rem 1.2rem; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.3); }
.окно-обновлений h2 { margin-top: 0; }
.окно-обновлений h3 { margin: 0.8rem 0 0.2rem; font-size: 1rem; }
/* Выпуск Ц-2б: просмотр обновлений глазами участника (администратор платформы). */
.просмотр-обновлений { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: flex-end; margin: 0.4rem 0 1rem; }
.просмотр-обновлений p { flex-basis: 100%; margin: 0; }
.окно-обновлений .кнопки { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.окно-обновлений .кнопки { display: flex; gap: 0.6rem; justify-content: flex-end; }
.блоки-обновлений { padding-left: 1.2rem; }
.блоки-обновлений li { margin-bottom: 0.6rem; }
.блоки-обновлений li > div { margin-top: 0.15rem; }
.страница.информация section { margin-bottom: 1.2rem; max-width: 60rem; }
.сведения-поддержки label { display: block; margin-bottom: 0.5rem; }
.сведения-поддержки input, .сведения-поддержки textarea { display: block; width: 100%; max-width: 40rem; font: inherit; }
.раздел-обновления .выкладка { margin-top: 1rem; }
.правка-блока, .текст-блока { min-width: 22rem; max-width: 42rem; }
.раздел-обновления td { vertical-align: top; }
.раздел-обновления td:nth-child(2), .раздел-обновления td button { white-space: nowrap; }
.раздел-обновления td:nth-child(4) { min-width: 9rem; }
.раздел-обновления td:nth-child(5) { min-width: 13rem; }
.правка-блока input, .правка-блока textarea { width: 100%; font: inherit; }
.правка-блока textarea { margin-top: 0.3rem; }
.текст-блока > div { margin-top: 0.2rem; }

/* Выпуск Ц-3: таблица рисунков плана для отчета. */
.таблица-рисунков td { vertical-align: top; }
.таблица-рисунков input[type="text"] { width: 100%; min-width: 16rem; font: inherit; }
.миниатюра-рисунка { display: block; max-width: 160px; max-height: 120px; border: 1px solid var(--рамка); background: #fff; }
.действия-рисунка { white-space: nowrap; }
.действия-рисунка button { margin-right: 0.25rem; }
.таблица-рисунков td:nth-child(2) { white-space: nowrap; }
/* Выпуск Ц-4: очередь расчетов в разделе «Сервер». */
.очередь-расчетов { margin: 1rem 0; }
/* Раздел «Обслуживание» (выпуск Ц-5). */
.раздел-обслуживание .блок-панели { margin: 1rem 0; }
.раздел-обслуживание textarea { display: block; width: 100%; max-width: 48rem; margin-top: 0.25rem; }
#окно-пароля input[type="password"] { width: 100%; max-width: 24rem; }
.блок-команд { margin: 0.75rem 0; padding: 0.5rem 0.75rem; border-left: 3px solid var(--ровно); background: var(--фон-панели, transparent); }
.блок-команд.опасный { border-left-color: var(--отказ); }
.блок-команд h4 { margin: 0.25rem 0; }
.блок-команд pre.команды { white-space: pre-wrap; word-break: break-all; font-size: 0.85rem; padding: 0.5rem; margin: 0.25rem 0 0.5rem;
  background: #1e1e1e; color: #e8e8e8; border-radius: 4px; user-select: all; }

.действия-очереди { display: flex; flex-wrap: wrap; gap: 0.4rem; }

/* Выпуск Ш-3: флажки «Экранирует» и условная схема преграды. */
fieldset.экранирует { border: 1px solid var(--рамка); border-radius: 3px; padding: 0.4rem 0.6rem; margin: 0.6rem 0; }
fieldset.экранирует .слой { display: block; margin: 0.15rem 0; }
fieldset.экранирует .недоступно { color: var(--приглушенный); }
.схема-преграды { margin: 0.4rem 0 0; }
.схема-преграды img { max-width: 100%; height: auto; background: #fff; border: 1px solid var(--рамка); }

/* Папка проекта (выпуск А2-3): документы и папки «Отчет дата время». */
.папка-проекта h3 { margin: 1.2rem 0 0.4rem; }
.папка-проекта details.папка-отчета { border: 1px solid var(--рамка); border-radius: 4px; padding: 0.4rem 0.8rem; margin: 0.5rem 0; }
.папка-проекта details.папка-отчета > summary { cursor: pointer; padding: 0.2rem 0; }
.папка-проекта details.папка-отчета .панель { margin-top: 0.4rem; }

/* Справочник веществ таблицей (выпуск А2-5): таблица слева, карточка справа. */
.страница.страница-справочника { max-width: 100rem; }
.справочник-веществ .панель { flex-wrap: wrap; gap: 0.5rem 1rem; margin: 0.6rem 0; }
.справочник-веществ .панель input[type="search"] { flex: 1 1 16rem; }
.справочник-веществ .мелко { margin: 0.2rem 0 0.6rem; }
.справочник-раскладка { display: grid; grid-template-columns: minmax(0, 1fr) minmax(20rem, 30rem); gap: 1rem; align-items: start; }
.справочник-раскладка > .справочник-таблица:only-child { grid-column: 1 / -1; }
.справочник-раскладка.с-карточкой { grid-template-columns: minmax(0, 1fr) minmax(18rem, 27rem); }
.справочник-раскладка.с-карточкой table[data-столбцы="справочник-веществ"] :is(th, td):is(:nth-child(2), :nth-child(11)) { display: none; }
table[data-столбцы="справочник-веществ"] td:first-child { min-width: 9rem; overflow-wrap: normal; }
.справочник-таблица { overflow-x: auto; }
table[data-столбцы="справочник-веществ"] { font-size: 0.88rem; }
table[data-столбцы="справочник-веществ"] td { padding: 0.25rem 0.5rem; }
table[data-столбцы="справочник-веществ"] th .заголовок-сортировки { padding: 0.35rem 0.5rem; }
table[data-столбцы="справочник-веществ"] td:nth-child(n+4):nth-child(-n+10) { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
table[data-столбцы="справочник-веществ"] button.ссылка { text-align: left; }
table[data-столбцы="справочник-веществ"] button.ссылка.выбрана { font-weight: 700; }
table[data-столбцы="справочник-веществ"] td:nth-child(3), table[data-столбцы="справочник-веществ"] td:nth-child(n+11) { white-space: nowrap; }
table[data-столбцы="справочник-веществ"] .мелко { display: block; font-size: 0.75rem; color: var(--приглушенный); }
table[data-столбцы="справочник-веществ"] .мелко.сверено { color: var(--ровно); }
.справочник-веществ .панель label.слой { display: inline-flex; margin: 0; white-space: nowrap; }
.справочник-веществ .панель label.слой input { width: auto; }
.карточка-справочника .источник-величины { display: block; font-size: 0.78rem; color: var(--приглушенный); overflow-wrap: anywhere; }
.карточка-справочника td:nth-child(2) { white-space: nowrap; }
.хватает { display: inline-flex; gap: 0.15rem; }
.значок-хватает { display: inline-block; min-width: 1.35em; text-align: center; font-size: 0.75rem; font-weight: 700; border: 1px solid; border-radius: 3px; cursor: help; }
.значок-хватает.да { color: var(--ровно); background: var(--ровно-фон); border-color: var(--ровно); }
/* Нехватка - цветом и зачеркиванием одновременно (цвет один не годится). */
.значок-хватает.нет { color: var(--внимание); background: var(--внимание-фон); border-color: var(--внимание); text-decoration: line-through; }
.карточка-справочника { position: sticky; top: 0.5rem; max-height: calc(100vh - 1rem); overflow-y: auto; padding: 0.6rem 0.9rem;
  border: 1px solid var(--рамка); border-radius: 4px; background: var(--поле); }
.карточка-справочника .шапка-карточки { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; }
.карточка-справочника h3 { margin: 0.2rem 0; }
.карточка-справочника h4 { margin: 0.8rem 0 0.3rem; font-size: 0.95rem; }
.карточка-справочника table { font-size: 0.85rem; width: 100%; }
.карточка-справочника ul { margin: 0.2rem 0; padding-left: 1.2rem; font-size: 0.88rem; }
.карточка-справочника .панель { flex-wrap: wrap; gap: 0.4rem; }
.карточка-справочника.правка input[type="text"] { width: 100%; }
.карточка-справочника.правка label.поле { display: block; margin: 0.3rem 0; }
@media (max-width: 70rem) {
  .справочник-раскладка { grid-template-columns: minmax(0, 1fr); }
  .карточка-справочника { position: static; max-height: none; }
}
/* Выпуск А2-6: показ таблицы справочника частями, синонимы и примечания записи в карточке. */
.справочник-веществ .еще-строк { flex-wrap: wrap; gap: 0.5rem 1rem; margin: 0.6rem 0; }
.карточка-справочника .синонимы { margin: 0 0 0.3rem; }
.карточка-справочника .примечания-записи li { color: var(--внимание); }
