﻿@charset "utf-8";
/* ═══════════════════════════════════════════════════════════════════════════════
   СИСТЕМА ОФОРМЛЕНИЯ ПРОДУКТА — ЕДИНСТВЕННЫЙ ЭКЗЕМПЛЯР. ВОЛНА 0.
   ═══════════════════════════════════════════════════════════════════════════════

   ⛔ ИСТОЧНИК ОДИН: src/Shared.Ui/ui-tokens.css.
   Файлы `ui-tokens.css` в четырёх `wwwroot` — РАЗЛОЖЕННЫЕ КОПИИ (звёздочка с косой
   чертой в этом описании не пишется: она закрывает комментарий CSS, и первая
   редакция файла именно так молча потеряла ВЕСЬ блок светлой темы — поймано
   браузером, а не чтением). Их правка теряется при
   первой же сборке: цель `UiTokensToWwwroot` (src/Shared.Ui/Оформление.props)
   перезаписывает их из этого файла. Паритет держится ПОСТРОЕНИЕМ, а не
   договорённостью и не сторожем, который можно закомментировать.

   ЗАЧЕМ ФАЙЛ СУЩЕСТВУЕТ (замер 21.08.2026, четыре веб-контура):
     планировщик 91 цвет · институт 41 · письма 32 · финконтур 25;
     10 ступеней кегля вместо 6, 14 значений скругления вместо 2,
     200 инлайновых `style=` в одном только планировщике.
   Ни один из этих дефектов не лечится вкусом: их порождает МЕСТО ХРАНЕНИЯ.
   Поэтому и лечение — про место хранения, а не про «сделать красиво».

   ЧТО ЭТОТ ФАЙЛ ДЕЛАЕТ И ЧЕГО НЕ ДЕЛАЕТ.
     ДЕЛАЕТ: объявляет роли (переменные), три ступени плотности одной ручкой,
             вторую тему клиента Pilot, восемь состояний органа управления
             и режим печати — всё как ЗАЯВКУ, доступную по имени.
     НЕ ДЕЛАЕТ: не переопределяет НИ ОДНОГО элемента (`body`, `table`, `th`,
             `button` здесь не встречаются) и не трогает существующие классы
             (`.num`, `.rep`, `.tsheet`, `.tile`). Подключение файла к экрану
             не меняет ни одного пикселя — это волна 0, объявление, а не редизайн.
             Всё прикладное лежит в классах `.сис-*` и включается поимённо.

   ⛔ ИМЕНА — ПО РОЛИ, А НЕ ПО ВНЕШНОСТИ. `--цвет-тревога`, а не `--красный`:
   в тёмной теме «тревога» становится светлее фона, и имя `--красный` пришлось бы
   либо врать, либо заводить второе. Роль переживает смену темы, оттенок — нет.

   ОТКУДА ЧИСЛА. Цвета не подобраны, а ПОСЧИТАНЫ и проверены по критериям,
   заданным до подбора:
     светлая тема (Jedi) — docs/Замер-палитры-2-21.08.2026.py, 12 проверок из 12;
     тёмная тема (Sith) и добавки (границы, подсветка, цвет-текст срочности) —
     docs/Замер-тёмной-темы-21.08.2026.py, 0 провалов; замер умеет краснеть
     (контрольная мутация одного цвета даёт 3 провала и код возврата 1).
   Критерии: К1 текст ≥ 4,5:1 · К2 текст на заливке ≥ 4,5:1 · К3 дихромазия
   ΔE ≥ 20 · К4 ч/б печать Δсерого ≥ 40 · К5 граница органа ≥ 3:1.

   ⛔ ДВА ЗАКОНА ЦВЕТА, ДОКАЗАННЫЕ ЗАМЕРОМ (находки, а не мнение):
     1. Пастельный фон НЕ МОЖЕТ нести значение. Любой тинт лежит в сером 230–240,
        диапазона на 40 градаций там физически нет; на бумаге он вовсе исчезает.
        Тинт — подсветка строки. Значение несут знак и текст.
     2. В плотной таблице остаётся ОДИН цвет. Пара «янтарный/красный» проваливает
        дихромазию при любых разумных оттенках (дейт ΔE 15,9). Цветом помечается
        только «горит», остальное — нейтральный текст и знак.

   Дальше по файлу: 1) светлая тема · 2) тёмная тема · 3) плотность ·
   4) прикладной слой `.сис-*` · 5) печать.
   Как подключить в новом экране и чего делать нельзя — docs/Система-оформления.md.
   ═══════════════════════════════════════════════════════════════════════════════ */

/* ─── 1. СВЕТЛАЯ ТЕМА (Pilot Jedi) — значения по умолчанию ─────────────────── */
:root {
  /* Какая тема сейчас. Читается извне: getComputedStyle(document.documentElement)
     .getPropertyValue('--тема') — чтобы вкладка и снимки могли ЗАМЕРИТЬ тему,
     а не предполагать её. */
  --тема: "jedi";

  /* ── ТИПОГРАФИКА. Шесть ступеней, и больше ни одной. Имя ступени — её роль,
     потому что «13px» ничего не говорит о том, где её ставить. Начертаний два;
     700 разрешено ровно одному месту — счётчику «горит». */
  --шрифт: "Segoe UI", system-ui, -apple-system, sans-serif;
  --шрифт-моно: Consolas, "Cascadia Mono", ui-monospace, monospace;

  --кегль-подпись: 11px;         /* сноска, единица измерения, отметка времени */
  --кегль-служебный: 12px;       /* подпись поля, пояснение под органом       */
  --кегль-таблица: 13px;         /* клетка таблицы и шапка — основная масса   */
  --кегль-основной: 15px;        /* текст экрана вне таблиц                   */
  --кегль-заголовок: 19px;       /* заголовок экрана                          */
  --кегль-крупное-число: 24px;   /* единственное число сводки на плитке       */

  --начертание-обычное: 400;
  --начертание-выделенное: 600;
  --начертание-горит: 700;       /* ⛔ только счётчик «горит», больше нигде */

  --интерлиньяж-плотный: 1.25;   /* таблицы */
  --интерлиньяж-обычный: 1.45;   /* текст   */

  /* ── ПЛОТНОСТЬ — ОДНА РУЧКА. Ступени задаются атрибутом `data-плотность`
     на <html> (см. раздел 3). Ручка меняет ГЕОМЕТРИЮ, а не кегль: лестница
     из шести ступеней не масштабируется, иначе ступеней снова станет
     восемнадцать. Второй ручки не заводим. */
  --плотность: 1;
  --шаг: 4px;
  --ритм: calc(var(--шаг) * var(--плотность));

  --отступ-микро: calc(var(--ритм) * 1);     /* 4px  при обычной плотности */
  --отступ-малый: calc(var(--ритм) * 2);     /* 8px  */
  --отступ-средний: calc(var(--ритм) * 3);   /* 12px */
  --отступ-крупный: calc(var(--ритм) * 4);   /* 16px */
  --отступ-раздел: calc(var(--ритм) * 6);    /* 24px */
  --отступ-экран: calc(var(--ритм) * 8);     /* 32px */

  /* ⛔ ПОЛ ЦЕЛИ НАЖАТИЯ — НЕ ВКУС, А WCAG 2.2 SC 2.5.8. Он записан через max(),
     поэтому ручка плотности НЕ МОЖЕТ его пробить: при «тесно» орган остаётся
     ≥ 24px. Сегодня замер даёт 46×19 у клетки факта и 16px у ссылок-кнопок
     института — то есть ниже пола. */
  --цель-нажатия: 24px;
  --высота-органа: max(var(--цель-нажатия), calc(32px * var(--плотность)));
  --высота-строки: max(var(--цель-нажатия), calc(28px * var(--плотность)));
  --поле-клетки-по-вертикали: calc(var(--ритм) * 1.5);
  --поле-клетки-по-горизонтали: calc(var(--ритм) * 2);

  /* ── ЦВЕТ · ПОВЕРХНОСТИ */
  --цвет-фон-страницы: #F4F6F8;
  --цвет-поверхность: #FFFFFF;            /* карточка, таблица              */
  --цвет-поверхность-утопленная: #E6EEF6; /* шапка таблицы, панель, полоса  */

  /* ── ЦВЕТ · ТЕКСТ (К1 пройден на белом и на фоне страницы) */
  --цвет-текст: #111827;            /* 17,74:1 на белом */
  --цвет-текст-2: #3F4A5A;          /*  8,98:1 */
  --цвет-текст-3: #5C6979;          /*  5,60:1 — приглушённое, но всё ещё текст */
  --цвет-текст-на-заливке: #FFFFFF;
  --цвет-текст-отключено: #5C6979;

  /* ── ЦВЕТ · ГРАНИЦЫ. Их две, и они не взаимозаменяемы:
     «граница» — разделитель (линия таблицы, край карточки), 1,44:1 — этого
     достаточно глазу и НЕ достаточно органу управления;
     «граница-сильная» — контур ОРГАНА (поле, кнопка) и линия на бумаге, 5,60:1. */
  --цвет-граница: #CCD9E4;
  --цвет-граница-сильная: #5C6979;

  /* ── ЦВЕТ · АКЦЕНТ (орган управления, ссылка, выбранная строка) */
  --цвет-акцент: #0F4C81;           /* 8,86:1 на белом */
  --цвет-акцент-2: #1761A1;         /* 6,44:1 — наведение, вторая ступень */
  --цвет-текст-на-акценте: #FFFFFF;

  /* ── ЦВЕТ · ЛЕСТНИЦА СРОЧНОСТИ — ЕДИНСТВЕННАЯ ЦВЕТОВАЯ ШКАЛА ПРОДУКТА.
     Строится ПО ЯРКОСТИ (серый 154 → 100 → 50), оттенок вторичен — поэтому
     переживает ч/б печать и все три дихромазии. Чинит главный дефект:
     «в норме»/«горит» при дейтеранопии ΔE 2,8 → 41,8, на бумаге Δсерого 12 → 104. */
  --цвет-успех: #46AC79;            /* «в норме» */
  --цвет-текст-на-успехе: #111827;
  --цвет-внимание: #94540C;         /* «риск»    */
  --цвет-текст-на-внимании: #FFFFFF;
  --цвет-тревога: #64120C;          /* «горит»   */
  --цвет-текст-на-тревоге: #FFFFFF;

  /* Те же роли КАК ЦВЕТ ТЕКСТА (заливки нет). ⛔ В плотную таблицу идёт только
     «тревога-текст» — закон 2. «успех-текст» — для плашек и подписей. */
  --цвет-тревога-текст: #8A1F16;    /* 9,18:1 на белом */
  --цвет-успех-текст: #2F7548;      /* 5,59:1 */

  /* ── ЦВЕТ · ПОДСВЕТКА СТРОКИ. ⛔ ЗНАЧЕНИЯ НЕ НЕСЁТ (закон 1) — это только
     «глаз, найди эту строку». Всё, что подсветка «сообщает», обязано быть
     продублировано знаком и текстом в самой строке. */
  --подсветка-успех: #E6F3EC;
  --подсветка-внимание: #F5EAD6;
  --подсветка-тревога: #F6E2DF;
  --подсветка-акцент: #E6EEF6;

  /* ── ЦВЕТ · ВИД ЗАПИСИ НА ДИАГРАММЕ. Кодируется ФОРМОЙ, цвет вспомогательный:
     план — контур и светлая заливка, факт — сплошная, «нет данных» — та же
     светлая заливка со штриховкой 135°. Различие держит форма, а не оттенок,
     поэтому оно живо и в ч/б, и при дихромазии. */
  --цвет-запись-план: #CCD9E4;
  --цвет-запись-факт: #1761A1;
  --цвет-текст-на-записи-факт: #FFFFFF;
  --штриховка-нет-данных: repeating-linear-gradient(135deg,
      transparent 0 3px, var(--цвет-граница-сильная) 3px 4px);

  /* ── ВОСЕМЬ СОСТОЯНИЙ ОРГАНА УПРАВЛЕНИЯ (сегодня живут три с половиной:
     :focus-visible не встречается в четырёх контурах НИ РАЗУ).
     1 обычное — базовые роли выше.  */
  --цвет-фон-наведение: #E6EEF6;              /* 2 наведение */
  --цвет-фон-нажатие: #CCD9E4;                /* 3 нажатие   */
  --цвет-фокус: #1761A1;                      /* 4 фокус     */
  --обводка-фокуса: 2px;
  --отступ-обводки-фокуса: 2px;
  --цвет-фон-выбрано: #0F4C81;                /* 5 выбрано   */
  --цвет-текст-выбрано: #FFFFFF;
  --непрозрачность-отключено: 0.55;           /* 6 отключено */
  --курсор-отключено: not-allowed;
  --непрозрачность-загрузки: 0.6;             /* 7 загрузка  */
  --курсор-загрузки: progress;
  --цвет-отказ: #8A1F16;                      /* 8 отказ     */
  --цвет-граница-отказа: #8A1F16;

  /* ── СКРУГЛЕНИЯ. Их ДВА. Было четырнадцать. */
  --скругление: 6px;                /* орган, клетка, плашка */
  --скругление-крупное: 10px;       /* карточка, модальное окно */

  /* ── ТЕНИ. Их две, и обе снимаются в печати. Тень — не украшение, а признак
     «этот слой лежит ВЫШЕ»: карточка над страницей, окно над карточкой. */
  --тень-карточки: 0 1px 2px rgba(17, 24, 39, 0.08);
  --тень-парения: 0 8px 24px rgba(17, 24, 39, 0.18);
}

/* ─── 2. ТЁМНАЯ ТЕМА (Pilot Sith) ──────────────────────────────────────────────
   ⛔ ПОЧЕМУ ВООБЩЕ. У клиента Pilot ДВЕ темы (`Ascon.Pilot.Themes.ThemeNames`:
   Jedi и Sith), переключает их ПОЛЬЗОВАТЕЛЬ — в русском сателлите клиента есть
   строка «Тема». Наши цвета были литералами светлой: в Sith вкладка остаётся
   светлым островом рядом с тёмным клиентом.

   ⛔ ПОЧЕМУ НЕ `prefers-color-scheme`. Источник истины — ТЕМА PILOT, а не тема
   операционной системы: человек с тёмной Windows и светлым Pilot должен видеть
   светлый экран, иначе мы разойдёмся с соседней вкладкой того же окна.
   Поэтому переключение только явное:
       document.documentElement.setAttribute('data-тема', 'sith');
   Во вкладке источник — `IPilotDialogService.Theme` (уже инжектится
   в PlannerTabExtension.cs:133 и не читается ни разу).

   ⛔ СВОЕЙ ТРЕТЬЕЙ ТЕМЫ НЕ ЗАВОДИМ. У Pilot их две, и он ими управляет.
   Здесь переопределяются ТОЛЬКО роли цвета: ни одна ступень кегля, ни один
   отступ, ни одно скругление в тёмной теме не меняются. */
:root[data-тема="sith"] {
  --тема: "sith";

  --цвет-фон-страницы: #16191D;
  --цвет-поверхность: #1E232A;
  --цвет-поверхность-утопленная: #262C34;

  --цвет-текст: #E9EDF2;            /* 13,44:1 на поверхности */
  --цвет-текст-2: #C0C9D4;          /*  9,44:1 */
  --цвет-текст-3: #96A1AE;          /*  6,02:1 */
  --цвет-текст-на-заливке: #16191D; /* заливки в тёмной теме СВЕТЛЕЕ фона */
  --цвет-текст-отключено: #96A1AE;

  --цвет-граница: #39424D;
  --цвет-граница-сильная: #6D7885;  /* 3,52:1 — К5 для органа пройден */

  --цвет-акцент: #7FB2E3;           /* 7,06:1 */
  --цвет-акцент-2: #A8CCF0;         /* 9,45:1 */
  --цвет-текст-на-акценте: #16191D;

  /* Лестница инвертирована ПО ЯРКОСТИ: на тёмном внимание притягивает светлое.
     Порядок ролей сохранён, пары проверены — К3 и К4 пройдены полностью
     (серый 224 / 178 / 114; дейт ΔE 52,1 · 47,1 · 30,9; трит ≥ 24,3). */
  --цвет-успех: #BCEBD1;
  --цвет-текст-на-успехе: #16191D;
  --цвет-внимание: #DFA84F;
  --цвет-текст-на-внимании: #16191D;
  --цвет-тревога: #BE4E44;
  --цвет-текст-на-тревоге: #FFFFFF;

  --цвет-тревога-текст: #F08A7E;    /* 6,50:1 на поверхности */
  --цвет-успех-текст: #8FD6AE;      /* 9,33:1 */

  --подсветка-успех: #1E2E27;
  --подсветка-внимание: #302A1E;
  --подсветка-тревога: #2E2222;
  --подсветка-акцент: #1E2733;

  --цвет-запись-план: #2E3742;
  --цвет-запись-факт: #7FB2E3;
  --цвет-текст-на-записи-факт: #16191D;

  --цвет-фон-наведение: #262C34;
  --цвет-фон-нажатие: #313944;
  --цвет-фокус: #A8CCF0;
  --цвет-фон-выбрано: #7FB2E3;
  --цвет-текст-выбрано: #16191D;
  --цвет-отказ: #F08A7E;
  --цвет-граница-отказа: #F08A7E;

  /* На тёмном подъём слоя читается тенью только если тень чернее фона. */
  --тень-карточки: 0 1px 2px rgba(0, 0, 0, 0.55);
  --тень-парения: 0 8px 24px rgba(0, 0, 0, 0.65);
}

/* Явно объявленная светлая тема. Нужна не для красоты: она даёт способ
   ЗАФИКСИРОВАТЬ Jedi (снимки, печатные стенды) независимо от чего бы то ни было. */
:root[data-тема="jedi"] { --тема: "jedi"; }

/* ─── 3. ПЛОТНОСТЬ — ТРИ СТУПЕНИ ОДНОЙ РУЧКОЙ ─────────────────────────────────
   Ставится на <html>:  document.documentElement.setAttribute('data-плотность','тесно')
   ⚠ ЦЕНА КОМПАКТА НАЗВАНА ЗАРАНЕЕ, а не обнаружится на приёмке: при «тесно»
   строка садится с 28 до 24 px, и подпись второй строкой (должность рядом с ФИО)
   из строки уезжает. Это проектное решение, а не бесплатная экономия. */
:root[data-плотность="тесно"]    { --плотность: 0.85; }
:root[data-плотность="обычно"]   { --плотность: 1; }
:root[data-плотность="свободно"] { --плотность: 1.15; }

/* ─── 4. ПРИКЛАДНОЙ СЛОЙ. Включается ПОИМЁННО, ни на что не действует сам ──────
   ⛔ Ни одного селектора по элементу и ни одного чужого класса: подключение
   файла к существующему экрану не меняет ни одного пикселя. */

/* ── ЧИСЛА. Правило одно и оно короткое: ВПРАВО И ТАБЛИЧНЫМИ ЦИФРАМИ.
   ⛔ НИКОГДА НЕ ЦЕНТРИРОВАТЬ: у планировщика сегодня 65 числовых столбцов по
   центру против 23 вправо, и табличные цифры на центрированной клетке
   бесполезны — разряды всё равно не выстраиваются.
   Класс ставится И на `th`, И на `td`: шапка выравнивается вместе с числом
   (сегодня во всех четырёх контурах шапка слева, а число справа).
   Остальное — не про CSS, но про то же правило, поэтому записано здесь:
     · разрядность единая: часы — 1 знак, проценты — 0;
     · ru-RU: запятая как разделитель дробной части;
     · тысячи — тонкий пробел U+2009 (не U+00A0: неразрывный превращает сумму
       в Excel в текст, проект этим уже платил — см. Finance.Core/Сумма.cs);
     · минус — настоящий U+2212, а не дефис U+002D;
     · единица измерения — в шапке столбца, а не в каждой клетке;
     · «—» (U+2014) ≠ «0,0»: прочерк означает «нет отметки», ноль означает ноль.
       Прочерк ОДИН на весь продукт — U+2014. */
.сис-число {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.сис-нет-данных {           /* тот самый прочерк: не ноль и не пустая клетка */
  color: var(--цвет-текст-3);
  font-variant-numeric: tabular-nums;
}

/* ── ВОСЕМЬ СОСТОЯНИЙ, выраженные один раз. Кнопка и поле берут их отсюда,
   а не переизобретают: сегодня в четырёх контурах живут обычное, наведение
   и отключённое, а видимого фокуса нет нигде, кроме `.tscell:focus`. */
.сис-кнопка {
  font-family: var(--шрифт);
  font-size: var(--кегль-таблица);
  font-weight: var(--начертание-выделенное);
  line-height: var(--интерлиньяж-плотный);
  min-height: var(--высота-органа);
  min-width: var(--цель-нажатия);
  padding: 0 var(--отступ-средний);
  color: var(--цвет-текст);
  background: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
  cursor: pointer;
}
.сис-кнопка:hover { background: var(--цвет-фон-наведение); }
.сис-кнопка:active { background: var(--цвет-фон-нажатие); }
.сис-кнопка:focus-visible {
  outline: var(--обводка-фокуса) solid var(--цвет-фокус);
  outline-offset: var(--отступ-обводки-фокуса);
}
.сис-кнопка.сис-выбрано,
.сис-кнопка[aria-pressed="true"] {
  background: var(--цвет-фон-выбрано);
  color: var(--цвет-текст-выбрано);
  border-color: var(--цвет-фон-выбрано);
}
.сис-кнопка:disabled,
.сис-кнопка[aria-disabled="true"] {
  opacity: var(--непрозрачность-отключено);
  cursor: var(--курсор-отключено);
}
.сис-кнопка.сис-главная {   /* основное действие экрана — оно ОДНО на экран */
  background: var(--цвет-акцент);
  color: var(--цвет-текст-на-акценте);
  border-color: var(--цвет-акцент);
}
.сис-кнопка.сис-главная:hover { background: var(--цвет-акцент-2); border-color: var(--цвет-акцент-2); }

.сис-поле {
  font-family: var(--шрифт);
  font-size: var(--кегль-таблица);
  line-height: var(--интерлиньяж-плотный);
  min-height: var(--высота-органа);
  padding: 0 var(--отступ-малый);
  color: var(--цвет-текст);
  background: var(--цвет-поверхность);
  border: 1px solid var(--цвет-граница-сильная);
  border-radius: var(--скругление);
}
.сис-поле:hover { border-color: var(--цвет-акцент-2); }
.сис-поле:focus-visible {
  outline: var(--обводка-фокуса) solid var(--цвет-фокус);
  outline-offset: var(--отступ-обводки-фокуса);
}
.сис-поле:disabled,
.сис-поле[aria-disabled="true"] {
  opacity: var(--непрозрачность-отключено);
  cursor: var(--курсор-отключено);
}

/* 7 состояние — ЗАГРУЗКА. Отдельным классом, потому что «занято» это не
   «отключено»: орган вернётся, и человеку об этом надо сказать курсором. */
.сис-занято {
  opacity: var(--непрозрачность-загрузки);
  cursor: var(--курсор-загрузки);
  pointer-events: none;
}
/* 8 состояние — ОТКАЗ. Цвет ОДИН из двух признаков; второй — текст рядом. */
.сис-отказ,
.сис-поле[aria-invalid="true"] {
  border-color: var(--цвет-граница-отказа);
  color: var(--цвет-отказ);
}

/* ── ПОДСВЕТКА СТРОКИ. ⛔ Значения не несёт (закон 1) — только «найди глазом». */
.сис-подсветка-успех    { background: var(--подсветка-успех); }
.сис-подсветка-внимание { background: var(--подсветка-внимание); }
.сис-подсветка-тревога  { background: var(--подсветка-тревога); }
.сис-подсветка-акцент   { background: var(--подсветка-акцент); }

/* ─── 5. ПЕЧАТЬ — ПОЛНОПРАВНЫЙ РЕЖИМ, А НЕ ПОБОЧНЫЙ ЭФФЕКТ ЭКРАНА ──────────────
   Здесь перекладываются РОЛИ, а не правила экрана: ни один элемент отсюда
   не прячется и не переставляется. Поэтому блок безопасен для экранов,
   которые ещё не перешли на токены, — им он не адресован вовсе.

   ⛔ ТЁМНАЯ ТЕМА НА БУМАГУ НЕ ПОПАДАЕТ. Селектор перечисляет и `[data-тема="sith"]`,
   иначе человек, печатающий из тёмной темы, получит белый текст на белом листе:
   специфичность `:root[data-тема="sith"]` выше, чем у голого `:root`.

   ⛔ ЧЕГО ЗДЕСЬ НАМЕРЕННО НЕТ — `@page`. У «Писем» уже объявлен свой
   (`A4 landscape, margin 10mm`), а смена полей у трёх остальных контуров —
   это изменение печатного поля, то есть редизайн (П-5), а не объявление системы.
   Волна 0 объявляет; поля листа меняет тот, кто будет чинить печать. */
@media print {
  :root,
  :root[data-тема="sith"] {
    --цвет-фон-страницы: #FFFFFF;
    --цвет-поверхность: #FFFFFF;
    --цвет-поверхность-утопленная: #FFFFFF;

    --цвет-текст: #111827;
    --цвет-текст-2: #3F4A5A;
    --цвет-текст-3: #5C6979;
    --цвет-текст-на-заливке: #FFFFFF;
    --цвет-текст-отключено: #5C6979;

    /* Тонкая светлая линия на бумаге исчезает — печать берёт сильную границу. */
    --цвет-граница: #5C6979;
    --цвет-граница-сильная: #5C6979;

    /* ⛔ ПЕЧАТНЫЙ КЕГЛЬ ЗАДАЁТСЯ В ПУНКТАХ, А НЕ В ПИКСЕЛЯХ, и это не прихоть:
       пиксель на бумаге не определён — его размер зависит от разрешения принтера,
       а пункт равен 1/72 дюйма всегда. Экранная шкала кеглей здесь не годится
       по единице измерения, поэтому у печати свой токен, а не «тот же, но меньше».
       8 pt — плотная печать делового письма: на A4 в альбомной ориентации помещается
       таблица, ради которой лист и печатают. */
    --кегль-печати: 8pt;

    --цвет-акцент: #0F4C81;
    --цвет-акцент-2: #1761A1;
    --цвет-текст-на-акценте: #FFFFFF;

    /* Лестница остаётся: она различима в сером (Δсерого 54 и 50 между ступенями). */
    --цвет-успех: #46AC79;
    --цвет-текст-на-успехе: #111827;
    --цвет-внимание: #94540C;
    --цвет-текст-на-внимании: #FFFFFF;
    --цвет-тревога: #64120C;
    --цвет-текст-на-тревоге: #FFFFFF;
    --цвет-тревога-текст: #8A1F16;
    --цвет-успех-текст: #2F7548;

    /* ⛔ Подсветка на бумаге НЕ СУЩЕСТВУЕТ и по закону 1 ничего не значила.
       Если строка что-то сообщала подсветкой — на листе это обязано быть словом. */
    --подсветка-успех: #FFFFFF;
    --подсветка-внимание: #FFFFFF;
    --подсветка-тревога: #FFFFFF;
    --подсветка-акцент: #FFFFFF;

    --цвет-запись-план: #FFFFFF;
    --цвет-запись-факт: #5C6979;
    --цвет-текст-на-записи-факт: #FFFFFF;

    --тень-карточки: none;
    --тень-парения: none;
  }

  /* Прикладные помощники печати — тоже поимённо, ничего не трогают сами. */
  .сис-не-печатать { display: none !important; }
  .сис-не-рвать { break-inside: avoid; }
  .сис-повтор-шапки { display: table-header-group; }  /* ставится на <thead> */
}
