/* Кабинет ОптМастер — ТОКЕНЫ: палитра, гарнитуры, радиусы, тени.

   Первый слой каскада (порядок — `lib/layout.mjs::STYLESHEETS`), и единственный, у которого
   нет ни одного правила разметки: только `:root`. Отделён от оболочки, когда та подошла к
   жёсткому порогу 500 строк, — и отделён по этой границе, а не «пополам»: у слоя значений и
   слоя правил разные причины меняться.

   Файлов стилей пять: этот → `cabinet.css` (оболочка) → `components.css` (формы и общие
   примитивы) → `screens.css` (экраны клиента) → `admin.css` (острова админки).
   Порядок слоёв — работающая часть каскада, а не оформление: значения обязаны быть
   объявлены раньше всех, кто их читает, а `admin.css` перекрывает оболочку и идёт последним. */

/* Палитра и шрифты — сайта, а не свои. Клиент приходит сюда кнопкой с живой /posylky/,
   и до 18.08 попадал будто в другой сервис: сайт синий #2f46ff с оранжевым #ec6118 на
   Oswald/Inter, кабинет — красный на системном шрифте операционной системы.

   Три токена вместо одного `--brand`. Прежний красный тянул на себе две разные роли:
   «наш цвет» (ссылки, кнопка, активный пункт меню) и «тревога» (ошибка поля, долг,
   неоплаченный счёт). Красный вывозил обе, синий вывозит только первую — поэтому роли
   разведены явно, иначе невалидное поле получило бы спокойную синюю рамку.

   `--accent-ink` — не второй оранжевый «на всякий случай»: фирменный #ec6118 даёт на белом
   контраст 3.34 и по WCAG AA годится только для крупного текста. Текст обычного кегля
   набирается затемнённым тоном; границы и крупные акценты остаются фирменным.

   Значения — сайта, до последнего: `--ink`, `--muted` (там он зовётся `--ink-soft`), `--bg`
   и затемнённый оранжевый взяты из его `:root`, а не подобраны на глаз. Свой я сначала
   и подобрал — вышел #c74f10, и на белом он проходил (4.61). Не прошёл бы на фоне
   страницы: 4.03 против нужных 4.5, а фон у сайта темнее белого. Сайтовый #b34a1b даёт
   5.37 и 4.70 — то есть у клиента был готовый ответ, пока я считал свой.

   Исключение одно — `--ok`. Зелёный сайта #10a97b на белом даёт 3.01 и AA не проходит;
   в кабинете зелёным набран текст («оплачено», суммы в балансе), поэтому здесь остаётся
   свой #0f7b4f с 5.29. Единственное место, где расходимся с сайтом намеренно. */
:root {
  --bg: #edf0f4;
  --card: #fff;
  --ink: #141d28;
  --muted: #4a5765;
  --line: #e2e6ea;

  /* наш цвет: ссылки, главная кнопка, активный пункт меню, кольцо фокуса */
  --brand: #2f46ff;
  --brand-ink: #fff;
  --brand-soft: #e9ecff;

  /* «требует вашего действия»: счёт к оплате, долг — не ошибка, а деньги */
  --accent: #ec6118;
  --accent-ink: #b34a1b;

  /* настоящая ошибка: невалидное поле, сорванный шаг доставки.
     Прежний красный кабинета, затемнённый на 4%: на белом он проходил и так (4.83), но фон
     страницы у сайта темнее белого, и там выходило 4.23. Оттенок (4.2°) сохранён. */
  --danger: #d02b1f;

  --ok: #0f7b4f;

  /* Граница ЭЛЕМЕНТА УПРАВЛЕНИЯ — отдельно от `--line`.

     `--line` (#e2e6ea) — волосок между строками списка и край карточки: декор, и 1.25 к
     белому ему хватает. Полем ввода и тихой кнопкой та же линия работает иначе: на белой
     карточке у поля НЕТ ни своей заливки, ни подписи внутри — граница остаётся единственным,
     что говорит «сюда можно печатать». WCAG 1.4.11 просит для такой линии 3.0, и 1.25 её не
     даёт. #7b8693 даёт 3.70 на карточке и 3.24 на фоне страницы — то есть проходит там, где
     форма может оказаться и без карточки под собой. */
  --line-control: #7b8693;

  /* ── тёмная оболочка (UI-1, концепт A «Маршрут», утверждён владельцем 21.08) ──
     Шапка кабинета тёмная, как у сайта: `--surface-dark` — это тот же #141d28, что и
     `--ink`, а `--surface-dark-2` — сайтовый `--dark` #1b2531 для второго уровня (полоса
     меню сейчас, лента маршрута в UI-2). Токены заведены отдельно от `--ink` намеренно:
     «цвет текста» и «цвет поверхности» — разные роли, и однажды разъедутся.

     ⚠️ Контраст на тёмном считается ПРОТИВ ТЁМНОГО, а не против белой карточки. Синий
     `--brand` на #141d28 даёт 2.84 — на тёмной шапке он не годится ни тексту (нужно 4.5),
     ни границе активного пункта (нужно 3.0). Поэтому активный пункт меню помечен
     оранжевым (5.15) и белой подписью, а не фирменным синим, как на светлых экранах.
     Тест `brand.test.mjs` считает эти пары сам. */
  --surface-dark: #141d28;
  --surface-dark-2: #1b2531;
  --on-dark: #fff;
  /* приглушённая подпись на тёмном: 8.13 к #141d28 — значение из макета концепта A */
  --on-dark-muted: #a9b4c2;
  /* «ещё не пройдено» и разделители на тёмном: 3.6 к #141d28. Декор, но работающий —
     ниже этого порога (пробовали #3a4756, 1.79) элемента на экране просто нет. Отдельный
     токен от `--on-dark-muted`, потому что роль другая: не «тише текст», а «пока пусто». */
  --on-dark-dim: #6b7887;

  /* ── служебная поверхность админки (UI-4) ──
     Оболочка менеджера ОБЯЗАНА отличаться от клиентской: скриншот служебного экрана в
     переписке не должен читаться как клиентский (C-4). Это роль, а не вкус, — поэтому у
     неё свои токены, а не литералы в последнем слое каскада, куда не заглядывает ни один
     гейт палитры. Значения — те же, что стояли в `admin.css` с C-4: серо-синий на два шага
     светлее клиентской шапки (#26313d против #141d28), полоса меню — ещё на шаг (#33414f).

     ⚠️ Контраст здесь считается против СЛУЖЕБНОЙ поверхности, а не против клиентской тёмной
     и не против белой карточки: 11.56 между служебной шапкой и фоном страницы — это про то,
     что шапку видно, а не про то, что на ней читается. */
  --surface-staff: #26313d;
  --surface-staff-2: #33414f;
  --on-staff-muted: #dfe6ee;
  /* Граница контрола на служебной шапке: 4.35 к #26313d и 3.44 к #33414f. Прежние #55636f
     давали 2.14 — и это НЕ было видно, пока `button.btn { border: 0 }` съедал границу
     целиком: правило существовало, экран его не показывал (аудит UI-4). */
  --line-staff: #8b95a1;
  /* Волосок над нижним меню менеджера на телефоне: декор, как и `rgba(255,255,255,.07)`
     у клиентской полосы, — порог контрола к нему не применяется. */
  --line-staff-soft: #46525f;

  /* «Требует внимания менеджера»: клиент заявил об оплате, бонус перенесён на новую редакцию
     счёта. Янтарная пара, 5.82 подписи к фону плашки. Не `--accent`: тот зовёт нажать, а
     это состояние, о котором сообщают. */
  --notice-bg: #fff4e5;
  --notice-ink: #8a5300;
  --notice-line: #f0c992;

  /* «С данными что-то не так»: телефон клиента не подтверждён. Розовая пара, 8.14. Не
     `--danger`: красная заливка на служебной карточке читается как сорванный заказ. */
  --caution-bg: #fdecea;
  --caution-ink: #8a1c13;
  --caution-line: #f2c3bd;

  /* Радиусы по ролям. Контролы (поля ввода, мелкие плашки) остаются на 10px: пилюля
     из строки ввода читается как кнопка. Карточки — 14px по макету концепта A.
     Кнопка — пилюля: у сайта их 62 штуки, и `border-radius: 10px` был единственным
     местом, по которому кабинет опознавался как чужой продукт даже в правильном цвете. */
  --radius: 10px;
  --radius-card: 14px;
  --radius-pill: 999px;

  /* Тени — идиома сайта `rgba(20, 29, 40, α)`, то есть тень цвета `--ink`, а не чёрная.
     В кабинете до 18.08 не было ни одной, и объём строился только рамками. */
  --shadow-card: 0 3px 12px rgba(20, 29, 40, .06);
  --shadow-bar: 0 -4px 18px rgba(20, 29, 40, .10);

  --wrap: 1080px;

  --font-text: Inter, system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --font-head: Oswald, Arial, sans-serif;
}
