---
name: kodoceh-semantic-state-palette
description: "В kodoceh-web семантика состояния (danger/warn/ok/info) живёт переменными --*-ink/--*-line/--*-bg, чужие бренды — отдельной группой; светлая шапка включается классом .plate-top, иначе на /app она невидима"
metadata: 
  node_type: memory
  type: project
  originSessionId: b11e39bd-4f6f-47c9-ba7b-680ccf041a5b
  modified: 2026-08-06T12:56:48.645Z
---

06.08.2026, проход по Operate-поверхностям (кабинеты и админки) дал три системных вывода.

**1. Один токен носил два смысла.** `colors.danger` был вермильоном пересадки на схеме витрины
(«вермильоновая точка — пересадка» из её DESIGN.md) **и** цветом ошибки в кабинете. При этом сами
ошибки красились не им, а литеральным `#D8483F` — 31 раз. Итог: на один смысл два красных, на один
токен два смысла. Разведено: `transferVermillion` — цвет мира, `danger` — статус.

**Как теперь:** оттенок один раз в `packages/tokens/tokens.cjs` (`ok/warn/danger/info`), читаемость под
тему — переменными `--ok-ink/--warn-ink/--danger-ink/--info-ink` плюс `--*-line` и `--*-bg` в `globals.css`
каждого приложения. В Tailwind `text-danger` резолвится в `var(--danger-ink)`, `.solid` — чистый оттенок
для заливок. Литеральный хекс статуса в разметке запрещён.

**2. Светлая шапка была безусловной — и на `/app` становилась невидимой.** Правило
`header:not(.header-bg)` красило текст шапки в светлый «потому что под ней плита», но плита есть только
на лендинге. На `/app` получался светлый текст по светлому фону: «Автеро» и «На главную» давали контраст
**1.07** и были не видны, пока страницу не прокрутят. Лечится классом `.plate-top` на корне лендинга,
которым правило и ограничено. Проверять такие вещи надо на **каждом** маршруте, а не только на главной.

**3. Чужие бренды — не палитра.** `brandTelegram/brandYandex/brandMailru` вынесены отдельной группой,
подгонять их под тему нельзя. Фирменный знак Яндекса (белая «Я» на `#FC3F1D`, 3.58:1) — **осознанное
исключение по контрасту**: он `aria-hidden` и всегда идёт с текстовой подписью, а перекрашенный знак —
это уже не Яндекс. Такие вещи документируются в DESIGN.md, а не «чинятся».

**Результат замера:** `/app` Автеро было 19 провалов контраста в светлой теме, стало 1 (тот самый знак
Яндекса). Детектор: Автеро 20 → 0, ВакХантер 37 → 3 (цвета печатной HTML-выгрузки, она печатается на
белой бумаге и темы не знает — тоже описанное исключение). Витрина 22 → 19: там остаток не про кабинеты,
а незеркаленные во фронтматере цвета собственного мира и концы `clamp()` мимо шкалы кеглей.

Побочно свелись к токенам: `inkOnAccent` (`#08130D`, был литералом в 9 местах `packages/ui`),
`inkOnVakhunter`, `inkOnAvtero`, дубли `accentVakhunter`/`accentAvtero` в кабинетах и второй
Mail.ru-синий (`#0077FF` против `#005FF9` — снова два источника на один смысл).

См. [[kodoceh_family_four_worlds]], [[design_contract_is_a_checklist]], [[wcag_contrast_over_video]],
[[kodoceh_web_dead_tokens_json]].
