@charset "utf-8";
/* ⛔ КОМПОНЕНТЫ ПРОДУКТА — КНОПКИ, ПОЛЯ, СЕГМЕНТ, КАРТОЧКА, ФОКУС (веб-пакет «один продукт», волна 2),
   ПЛИТКИ СТОЛОВ (волна 3).
   ОДИН ФАЙЛ НА ВСЕ ЧЕТЫРЕ КОНТУРА: раскладывается из src/Shared.Ui в каждый wwwroot тем же
   механизмом, что ui-tokens.css и оболочка.css (Оформление.props, свойство UiComponentsCssFile),
   копии сверяет tools/contrast/check.py. Подключается ПОСЛЕ таблица.css и ДО правил контура
   (app.css, style.css, screens.css).

   ⛔ ВСЁ ПОД ФЛАГОМ ОБОЛОЧКИ, И ПОД НИМ ЖЕ ОТКАТ. КАЖДЫЙ селектор верхнего уровня (и каждый
   в списке через запятую) начинается с :where(:root[data-оболочка="2"]). Флаг снимает СЛУЖБА
   настройкой WebShell до отдачи страницы (Shared.WebAuth/ОткатОболочки.cs): без флага ни одно
   правило отсюда не действует, и кнопки контура выглядят как до пакета. Держит сторож
   КомпонентыТолькоПодФлагомTests (по каждому селектору списка, а не по первому).

   ⛔ СПЕЦИФИЧНОСТЬ — ЭТО КОНТРАКТ, А НЕ ВКУС. Вес КАЖДОГО селектора сверяет сторож
   КомпонентыТолькоПодФлагомTests (вес считается с :where = 0; `:is(…)` вместо `:where(…)` или тег
   перед классом уровня — нарушение).
     · Флаг обёрнут в :where и веса не даёт. База кнопки и поля, состояния базы, кнопка и поле
       в клетке, summary, моно-кегль, h5/h6/small — (0,0,0): любое правило контура, хоть голое
       `button{…}`, перекрывает базу без !important. База видна только там, где у контура
       правила НЕТ.
     · Уровни .сис-главная / .сис-тихая / .сис-опасная и модификатор .сис-в-строке — (0,1,0),
       и их состояния тоже (0,1,0): наведение записано через :where, иначе `.сис-главная:hover`
       весило бы (0,2,0) и перебивало бы контур только в наведении — вид «наполовину».
       .сис-сегмент и .сис-карточка — (0,1,0), их пары [hidden] — (0,2,0); .chart text — (0,1,1).
       Полоса и плитка столов (.сис-плитки, .сис-плитка, волна 3) — (0,1,0), пары [hidden] — (0,2,0);
       их части — в :where за классом полосы или плитки, того же веса.
     · ⛔ УРОВНИ НЕ ЗАДАЮТ РАЗМЕР (высоту, ширину, отступы, кегль, интерлиньяж) — только цвет, фон,
       рамку, начертание и подчёркивание. Размер решают база (44 px), кнопка в клетке (24 px)
       и .сис-в-строке. Уровень весит (0,1,0) и перебил бы кнопку в клетке (0,0,0): «тихая»
       с высотой 44 в клетке — 44 px вместо 24, строка пробы 33 → 52,5 px (ревью этапа 1,
       браузер, 26.09.2026). Сторож.
     · Порядок в файле решает там, где вес равен: база → состояния базы («выбрано» — после
       наведения и нажатия) → кнопка в клетке → база поля → поле в клетке и состояния поля →
       уровни (каждый со своим наведением) → .сис-в-строке ПОСЛЕ уровней. Каждую пару держит
       сторож порядка.
     · Фокус — (0,1,0): кольцо не должно проигрывать правилам вида органа того же веса.

   ⛔ ЧЕГО ЗДЕСЬ НЕТ И ПОЧЕМУ.
     · `display` у базы кнопки и поля: контуры прячут кнопки и атрибутом hidden, и style.display,
       и правилами по id; авторское display перекрыло бы браузерное [hidden]. У сегмента,
       карточки, полосы и плитки display есть — и у каждого пара [hidden].
     · !important — ни одного (сторож). Печать контуров его держит сама.
     · appearance:none. Родная стрелка select остаётся: база задаёт рамку, и поле перестаёт быть
       «браузерным» по признаку оснастки снимков (снять.js, «органы в оформлении браузера»:
       рамка outset/inset или рамка select цвета умолчания). Своя стрелка стала бы картинкой
       на три темы.
     · Литералы цвета и кегля — только роли ui-tokens.css (сторожа ЦветИКегльВнеТокеновTests
       и НеобъявленныеТокеныTests); движения и шрифтов — нет (БезДвиженияИШрифтовTests); :has,
       popover, inert, container — нет (НеизмеренныеВозможностиБраузераTests: браузер VDI
       Заказчика не замерен; :where — Chrome 88+, вопрос Максу в плане волны 2).
     · Базовые правила таблиц (.tbl) остаются в таблица.css: два источника одного правила
       недопустимы. .acts и .row-controls остаются у контуров (план волны 2, §1.2).

   ⛔ ВЫСОТА. Обычная кнопка — роль --высота-кнопки = max(--высота-органа, 44 px): пол 44 px
   (WCAG 2.2 SC 2.5.5) держат все четыре контура, и компонент его не роняет. 24 px — пол цели
   нажатия (SC 2.5.8) — только у кнопки в клетке таблицы и у .сис-в-строке: кнопки строк
   не раздувают строки до 44. Поле — --высота-органа (32), в клетке — те же 24. */

/* ── БАЗА КНОПКИ (0,0,0). Шрифт — ДЛИННЫМИ свойствами, без `font:`: сокращение сбросило бы
   line-height и начертание, которые контур или уровень задают отдельно.
   Черту снимает база: .сис-кнопка висит и на ссылке-выгрузке (<a class="… сис-кнопка">), и кнопка
   не должна быть подчёркнута ни в одном контуре (у <button> черты нет — для него это пусто).
   Тихая подчёркнута всё равно: .сис-тихая весит (0,1,0) и черту возвращает. */
:where(:root[data-оболочка="2"]) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка) {
  text-decoration: none;
  min-height: var(--высота-кнопки);
  min-width: var(--цель-нажатия);
  padding: 0 var(--отступ-средний);
  font-family: var(--шрифт);
  font-size: var(--кегль-таблица);
  font-weight: var(--начертание-выделенное);
  line-height: var(--интерлиньяж-плотный);
  color: var(--цвет-текст);
  background-color: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
  cursor: pointer;
}
/* Состояния базы — фоном (восемь состояний ui-tokens.css): наведение, нажатие, выбрано,
   отключено. «Выбрано» стоит после наведения и нажатия и потому держится в них. */
:where(:root[data-оболочка="2"]) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка):where(:hover:not(:disabled)) {
  background-color: var(--цвет-фон-наведение);
}
:where(:root[data-оболочка="2"]) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка):where(:active:not(:disabled)) {
  background-color: var(--цвет-фон-нажатие);
}
:where(:root[data-оболочка="2"]) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка):where(.сис-выбрано, [aria-pressed="true"]) {
  color: var(--цвет-текст-выбрано);
  background-color: var(--цвет-фон-выбрано);
  border-color: var(--цвет-фон-выбрано);
}
:where(:root[data-оболочка="2"]) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка):where(:disabled, [aria-disabled="true"]) {
  opacity: var(--непрозрачность-отключено);
  cursor: var(--курсор-отключено);
}

/* ── КНОПКА В КЛЕТКЕ ТАБЛИЦЫ (0,0,0), после базы: пол цели нажатия 24 px, служебный кегль,
   малый отступ. «Отнести» финконтура, `.tt`, `.wbtn` — кнопки строк не раздувают строки. */
:where(:root[data-оболочка="2"]) :where(td, th) :where(button, input[type="button"], input[type="submit"], input[type="reset"], .сис-кнопка) {
  min-height: var(--цель-нажатия);
  padding: 0 var(--отступ-малый);
  font-size: var(--кегль-служебный);
}

/* ── БАЗА ПОЛЯ (0,0,0). Флажки, переключатели, ползунок, цвет, файл и кнопочные input — не поля.
   Имени базы поля для не-поля (прежде `.сис-поле`) нет: такого органа в контурах не нашлось ни одного
   (гейт ревью волны 2, мёртвое снято); понадобится — заводится вместе с органом. */
:where(:root[data-оболочка="2"]) :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]), select, textarea) {
  min-height: var(--высота-органа);
  padding: 0 var(--отступ-малый);
  font-family: var(--шрифт);
  font-size: var(--кегль-таблица);
  line-height: var(--интерлиньяж-плотный);
  color: var(--цвет-текст);
  background-color: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
}
:where(:root[data-оболочка="2"]) :where(textarea) {
  padding: var(--отступ-микро) var(--отступ-малый);
}
/* ПОЛЕ В КЛЕТКЕ ТАБЛИЦЫ (0,0,0), после базы поля — по той же причине, что кнопка в клетке: выбор
   вида в строке реестра финконтура (select.дсВид, 19 px без правил) под базой вырос бы до 32 px
   и раздул бы каждую строку (замер оснасткой, registers). Пол цели нажатия — 24 px. */
:where(:root[data-оболочка="2"]) :where(td, th) :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]), select, textarea) {
  min-height: var(--цель-нажатия);
}
:where(:root[data-оболочка="2"]) :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]), select, textarea):where(:hover:not(:disabled)) {
  border-color: var(--цвет-акцент-2);
}
:where(:root[data-оболочка="2"]) :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]), select, textarea):where(:disabled, [aria-disabled="true"]) {
  opacity: var(--непрозрачность-отключено);
  cursor: var(--курсор-отключено);
}
/* 8 состояние — ОТКАЗ: цвет ОДИН из двух признаков, второй — текст рядом. */
:where(:root[data-оболочка="2"]) :where(input, select, textarea):where([aria-invalid="true"]) {
  color: var(--цвет-отказ);
  border-color: var(--цвет-граница-отказа);
}

/* ── УРОВНИ КНОПКИ (0,1,0) — ставятся ПОИМЁННО в разметке контура; у каждого своё наведение.
   ГЛАВНАЯ — основное действие; она ОДНА на экран или форму (docs/Система-оформления.md).
   Отключённая главная берёт прозрачность базы: уровень opacity не задаёт. */
:where(:root[data-оболочка="2"]) .сис-главная {
  /* Роль высоты главной — 44 px всегда (дизайн-направление §2.5: «главная — 44 px, одна на экран»), даже когда
     контур опускает обычные кнопки (флаг вида «тихие-кнопки»: --высота-кнопки = --высота-органа). Это роль,
     а не размер: её читает только база кнопки, поэтому кнопка в клетке и .сис-в-строке (свой min-height)
     её не наследуют; без флага значение то же, что у :root. */
  --высота-кнопки: max(var(--высота-органа), 44px);
  color: var(--цвет-текст-на-акценте);
  background-color: var(--цвет-акцент);
  border-color: var(--цвет-акцент);
}
:where(:root[data-оболочка="2"]) .сис-главная:where(:hover:not(:disabled)) {
  background-color: var(--цвет-акцент-2);
  border-color: var(--цвет-акцент-2);
}
/* ТИХАЯ — действие-ссылка. ⛔ ПОДЧЁРКИВАНИЕ ВСЕГДА: акцент к тексту 2,00:1 в светлой теме
   и 1,90:1 в sith (< 3:1) — одним цветом ссылка от текста не отличается. Рамка прозрачная,
   а не снятая: бокс тихой кнопки равен боксу соседних. Высоты у неё нет: 44 даёт база,
   в клетке таблицы — 24 (кнопка в клетке), «сохранить / удалить» в строке реестра строку не раздувают. */
:where(:root[data-оболочка="2"]) .сис-тихая {
  font-weight: inherit;
  color: var(--цвет-акцент);
  background-color: transparent;
  border-color: transparent;
  text-decoration: underline;
}
:where(:root[data-оболочка="2"]) .сис-тихая:where(:hover:not(:disabled)) {
  background-color: var(--цвет-фон-наведение);
}
/* ОПАСНАЯ — удаление и снятие: текст и рамка цветом «горит», наведение — его подсветкой. */
:where(:root[data-оболочка="2"]) .сис-опасная {
  color: var(--цвет-тревога-текст);
  border-color: var(--цвет-тревога-текст);
}
:where(:root[data-оболочка="2"]) .сис-опасная:where(:hover:not(:disabled)) {
  background-color: var(--подсветка-тревога);
}

/* ── МОДИФИКАТОР РАЗМЕРА «В СТРОКЕ» (0,1,0) — ⛔ ПОСЛЕ УРОВНЕЙ: кнопка в строке текста или
   вне таблицы (`.more-btn`, строки состава работ) получает пол цели нажатия и служебный кегль,
   какого бы уровня она ни была. */
:where(:root[data-оболочка="2"]) .сис-в-строке {
  min-height: var(--цель-нажатия);
  padding: 0 var(--отступ-малый);
  font-size: var(--кегль-служебный);
}

/* ── ФОКУС (0,1,0) — органам без своего кольца. 3 px под флагом (--обводка-фокуса) против
   подчёркивания выбранной вкладки 2 px (--толщина-подчёркивания): отличие ФОРМОЙ (рамка
   с четырёх сторон против черты снизу) и толщиной; цветом нельзя — фокус к акценту 1,38:1. */
:where(:root[data-оболочка="2"]) :where(button, a[href], input, select, textarea, summary, [tabindex], [role="button"]):focus-visible {
  outline: var(--обводка-фокуса) solid var(--цвет-фокус);
  outline-offset: var(--отступ-обводки-фокуса);
}

/* ── СЕГМЕНТ (`.zoom`, `.density`, `#exDayBar`): ряд кнопок в общей рамке, выбранная — заливкой.
   ⛔ БЕЗ overflow:hidden — оно срезало бы кольцо фокуса; скругление ставится крайним детям.
   Рамка — граница-сильная (контур органа, ≥ 3:1), а не разделитель. */
:where(:root[data-оболочка="2"]) .сис-сегмент {
  display: inline-flex;
  align-items: stretch;
  vertical-align: middle;
  background-color: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
}
:where(:root[data-оболочка="2"]) .сис-сегмент[hidden] {
  display: none;
}
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(*) {
  margin: 0;
  background-color: transparent;
  border: 0;
  border-radius: 0;
}
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(* + *) {
  border-left: 1px solid var(--цвет-граница-сильная);
}
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(:first-child) {
  border-top-left-radius: calc(var(--скругление) - 1px);
  border-bottom-left-radius: calc(var(--скругление) - 1px);
}
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(:last-child) {
  border-top-right-radius: calc(var(--скругление) - 1px);
  border-bottom-right-radius: calc(var(--скругление) - 1px);
}
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(:hover:not(:disabled)) {
  background-color: var(--цвет-фон-наведение);
}
/* Выбранный — после наведения: держится и под указателем. Признак у контуров разный: `.on`, `.active`,
   `aria-pressed` (сегменты есть только у планировщика; `.сис-выбрано` здесь снят — его не носил ни один
   ребёнок сегмента; выбранный пункт меню института берёт «выбрано» базы кнопки выше). */
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(.on, .active, [aria-pressed="true"]) {
  color: var(--цвет-текст-на-акценте);
  background-color: var(--цвет-акцент);
}
/* Кольцо — СНАРУЖИ и поверх соседей: снаружи оно ложится на поверхность (6,44:1), внутри
   на выбранном было бы 1,38:1. */
:where(:root[data-оболочка="2"]) .сис-сегмент > :where(:focus-visible) {
  position: relative;
  z-index: 1;
  outline: var(--обводка-фокуса) solid var(--цвет-фокус);
  outline-offset: var(--отступ-обводки-фокуса);
}

/* ── КАРТОЧКА — раздел на поверхности (разделы колонки «Моей недели»). */
:where(:root[data-оболочка="2"]) .сис-карточка {
  display: block;
  padding: var(--отступ-средний) var(--отступ-крупный);
  background-color: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница);
  border-radius: var(--скругление-крупное);
  box-shadow: var(--тень-карточки);
}
:where(:root[data-оболочка="2"]) .сис-карточка[hidden] {
  display: none;
}

/* ── ПЛИТКИ СТОЛОВ (волна 3, плитки.js): полоса «Мой день» / «Стол руководителя».
   ВЕС (0,1,0): класс полосы или плитки вне :where, всё прочее — в :where за ним (сторож веса); пары
   [hidden] — (0,2,0). Плитка весит больше базы кнопки (0,0,0) и снимает её 44 px: высоту дают две строки
   (подпись и число), пол — цель нажатия 24 px. Правило контура по классу и тегу (`.toolbar button`,
   0,1,1) плитку перебило бы: под флагом у планировщика таких нет (они только откатные), у контуров
   волны 5 — сверить при подключении.
   ПЛИТКА-КНОПКА (есть переход) — рамка органа, наведение и нажатие фоном; ПЛИТКА-СВЕДЕНИЯ (перехода
   нет, div) — без рамки, фоном утопленной поверхности: не выглядит нажимаемой. Рамка прозрачная, а
   не снятая: боксы плиток ряда равны. Тон — словом; цветом только «горит» (закон 2
   docs/Система-оформления.md), признак data-тон — на слове. Пауза «, » видна только читалке.
   Движения нет. Печать прячет полосу вместе с пояснениями. */
:where(:root[data-оболочка="2"]) .сис-плитки {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: var(--отступ-микро) var(--отступ-малый);
  min-width: 0;
  margin: 0;
}
:where(:root[data-оболочка="2"]) .сис-плитки[hidden] {
  display: none;
}
:where(:root[data-оболочка="2"]) .сис-плитки > :where(h2) {
  align-self: center;
  margin: 0 var(--отступ-малый) 0 0;
  font-size: var(--кегль-основной);
  font-weight: var(--начертание-выделенное);
  line-height: var(--интерлиньяж-плотный);
  color: var(--цвет-текст);
}
:where(:root[data-оболочка="2"]) .сис-плитки > :where(.сис-плитки-пояснение) {
  flex: 0 0 100%;
  margin: 0;
  font-size: var(--кегль-служебный);
  line-height: var(--интерлиньяж-плотный);
  color: var(--цвет-текст-2);
}
:where(:root[data-оболочка="2"]) .сис-плитка {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  align-content: flex-start;
  column-gap: var(--отступ-малый);
  box-sizing: border-box;
  min-height: var(--цель-нажатия);
  min-width: var(--цель-нажатия);
  max-width: 100%;
  margin: 0;
  padding: var(--отступ-микро) var(--отступ-средний);
  font-family: var(--шрифт);
  font-size: var(--кегль-таблица);
  font-weight: var(--начертание-обычное);
  line-height: var(--интерлиньяж-плотный);
  text-align: left;
  color: var(--цвет-текст);
  background-color: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
}
:where(:root[data-оболочка="2"]) .сис-плитка[hidden] {
  display: none;
}
:where(:root[data-оболочка="2"]) .сис-плитка:where(button:hover:not(:disabled)) {
  background-color: var(--цвет-фон-наведение);
}
:where(:root[data-оболочка="2"]) .сис-плитка:where(button:active:not(:disabled)) {
  background-color: var(--цвет-фон-нажатие);
}
:where(:root[data-оболочка="2"]) .сис-плитка:where(.сис-плитка-сведения) {
  background-color: var(--цвет-поверхность-утопленная);
  border-color: transparent;
}
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-подпись) {
  flex: 0 0 100%;
  font-size: var(--кегль-служебный);
  color: var(--цвет-текст-2);
  overflow-wrap: anywhere;
}
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-число) {
  font-size: var(--кегль-крупное-число);
  font-weight: var(--начертание-выделенное);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--цвет-текст);
}
/* «нет данных» — словами в месте числа: кеглем текста, не крупного числа (после правила числа). */
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-нет-данных) {
  font-size: var(--кегль-таблица);
  font-weight: var(--начертание-обычное);
  color: var(--цвет-текст-2);
}
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-тон) {
  font-size: var(--кегль-служебный);
  font-weight: var(--начертание-выделенное);
  color: var(--цвет-текст-2);
}
/* РЕЗЕРВ ВОЛНЫ 5: служба волны 3 тон «горит» не шлёт (план волны 3 §2.2 — красного нет), и data-тон вида пока не
   меняет; правило держит цвет тревоги до волны, где тон появится (плитки.js, ТОНЫ). */
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-тон[data-тон="горит"]) {
  color: var(--цвет-тревога-текст);
}
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-дата) {
  font-size: var(--кегль-служебный);
  font-variant-numeric: tabular-nums;
  color: var(--цвет-текст-2);
}
:where(:root[data-оболочка="2"]) .сис-плитка > :where(.сис-плитка-пауза) {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
@media print {
  :where(:root[data-оболочка="2"]) .сис-плитки {
    display: none;
  }
}

/* ── РАСКРЫВАЮЩАЯ СТРОКА `summary` (планировщик, «Числа графика» chart.js) — цель нажатия. */
:where(:root[data-оболочка="2"]) :where(summary) {
  min-height: var(--цель-нажатия);
}

/* ── МОНОШИРИННЫЙ ТЕКСТ. Голое `monospace` браузер уменьшает до 13/16 кегля родителя (причуда
   умолчания); семейство ролью --шрифт-моно начинается с названного шрифта, и причуда
   не включается — кегль наследуется. */
:where(:root[data-оболочка="2"]) :where(code, kbd, pre, samp) {
  font-family: var(--шрифт-моно);
}

/* ── ЗАГОЛОВКИ 5–6 И МЕЛКИЙ ТЕКСТ — ступенью шкалы, а не умолчанием браузера
   (h5 — 0,83em, h6 — 0,67em, small — «smaller»: восьмая и девятая ступени, которых в системе нет). */
:where(:root[data-оболочка="2"]) :where(h5, h6) {
  font-size: var(--кегль-таблица);
  font-weight: var(--начертание-выделенное);
}
:where(:root[data-оболочка="2"]) :where(small) {
  font-size: var(--кегль-служебный);
}

/* ── ПОДПИСИ ГРАФИКОВ. chart.js пишет в SVG атрибуты font-size 11 и 10; атрибут оформления
   проигрывает любому правилу CSS, поэтому chart.js не правится. ⚠ Это не последний шаг:
   действующий кегль текста в SVG — кегль × масштаб viewBox, и его мерит оснастка снимков
   (ворота 1 волны 2), а не это правило. ⛔ ОДНО ЭТО ПРАВИЛО ВОРОТА 1 НЕ ПРОХОДИТ: график стола
   планировщика (viewBox 640) при окне 1366 сжат до 627 px — масштаб 0,98, подписи «1» и «02-25»
   12 × 0,98 = 11,76 px (браузер, стенд, 26.09.2026); при 1600 — 13,95. Досчёт до 12 — обёртка
   `.chart-scroll` у исполнителя планировщика (план волны 2, §3.1 Д): рисунок в своём размере,
   масштаб 1. Служебный кегль вместо подписи дал бы после обёртки подписи графика 13 px —
   не ту ступень шкалы (план §2.2: подписи графиков — подписью). */
:where(:root[data-оболочка="2"]) .chart text {
  font-size: var(--кегль-подпись);
}
