---
title: "Sonaura Design Guide"
type: reference
status: living
version: v0.13
created: 2026-06-12
updated: 2026-07-13
plan: .plans/archive/2026-05-new-version-tz-plan
---

# Sonaura Design Guide

Да/нет-гейт идеологии экрана. Прикладывать ПЕРЕД сборкой и ПЕРЕД ревью каждого экрана: проходишь пункты A1–A4 / B1–B10 / C1–C7 / D1–D6, на каждый отвечаешь однозначно. Любой «нет» — фикс до показа DK.

**Финальный фильтр перед «да».** Делает ли это пользователя спокойнее? Спокойствие важнее вовлечённости, метрик и красоты.

**Контракт владения.** Гайд владеет ДА/НЕТ-СЛОЕМ. Числа ниже (44×44, 4.5:1 / 3:1 / 7:1, ≤0.3 с, #7C6CD6 и т. п.) — это границы ответа, а не определения токенов; при расхождении правит система.

**Делегации.**
- Значения-канон (токены, hex, числа) → `tokens.css` + `components.css`, живая галерея [`design-system/components-gallery.html`](design-system/components-gallery.html).
- Полная идеология V3 → [`v3-minimalism-guide.md`](v3-minimalism-guide.md) (управляющий канон).
- Алгоритм роёв-проверок прототипов → [`VALIDATION-ALGORITHM.md`](VALIDATION-ALGORITHM.md).
- Прозаический справочник системы (решения, карта экранов, описания компонентов) → [`DESIGN.md`](DESIGN.md).

---

## Область применения по поверхностям

Правила — для дневной петли и хаба. Специфические поверхности следуют своим паттернам, не всё применяется механически.

| Поверхность | Что применяется |
|---|---|
| Дневная петля · хаб | Все правила. |
| Чат | Своя шапка-контакт: фото Анны (`img.gav`, C6b) + честный срок «обычно отвечает в течение суток», БЕЗ точки «онлайн» и без «прочитано»/«печатает» — асинхронность не маскируется под живое присутствие (реш. DK R31 2026-07-10); после отправки — тихая статус-строка у последнего исходящего; вход по непрочитанному — статичная линия «Новое» (B7). Блок-зачин Sona не дублируется (C2). |
| Медиа-плеер | Тёмная иммерсивная поверхность, без хрома/футера, единственный выход ✕. |
| Онбординг (День 0) | Исключение анти-геймификации: сегментный прогресс допустим (B4c). |
| Десктоп-кабинет | Те же бренд-токены; фиолетовая система Куратора; не отдельная ДС. |

---

## A. Минимализм и подача (как показываем)

- **A1. Минимум текста — смысл через элементы и взаимодействие.**
  - **A1a.** Режем только надписи, дублирующие то, что уже выражено формой, цветом или состоянием соседнего элемента — да/нет.
  - **A1b. Список соответствий «надпись → элемент».** Тип шага → мотив-миниатюра; самочувствие → раскрас точки; «сделано» → галочка; позиция → полоска недели; эффект ответа → подстройка карточки. Если надпись заменяема элементом — текст убран — да/нет.
  - **A1c.** Короткие полезные подписи (описание инструмента) НЕ режутся — несут смысл, которого нет в иконке/форме. Это не дубль — да/нет.
  - **A1d. Где живут подписи.** Подписи — у пунктов ОСНОВНОГО блока инструментов; второстепенные списки (помощь/настройки) — только заголовки (реш. DK) (блок «Прогресс и история» из хаба снят — реш. DK 2026-07-09) — да/нет.
  - **A1e. Без пояснительного зачина, если экран самоочевиден.** Заголовок-ориентир (имя экрана) остаётся; подзаголовок-зачин убирается, когда назначение экрана очевидно из элементов. Зачин сохраняется ТОЛЬКО если несёт ориентир, не выводимый из элементов (текущая неделя/состояние — см. A2). Подзаголовок-строка допустима лишь как **функциональный ориентир** — данные, которых иначе нет (`Неделя N · день M · фокус`; `роль · срок ответа`; `неделя N из M`); эмоционально-настроенческие строки — шум (D1). Тест: «убери строку — понятность падает?» Нет → убрать, функциональный ориентир оставить — да/нет.
  - **A1f. Один заголовок-H1 = имя экрана, без eyebrow-бара.** Экран открывается одним контентным H1 (имя экрана) первым видимым элементом после статусбара. НЕТ верхнего бара-шапки с eyebrow (дублирует подсвеченный таб) и НЕТ второго заголовочного слоя. Ровно один H1 на экран (a11y) — да/нет.

- **A2. Глубина по запросу.** Длинные пояснения и психообразование («Зачем шаг», наука) раскрываются ровно одним явным жестом (тап по «Подробнее»/иконке-раскрытию); на основном пути — только голос Sona и один шаг. **Исключение:** ключевой ориентир (краткое описание текущей/выбранной недели) показывается СРАЗУ, не прячется под раскрытие — да/нет.
  - **A2a. Video-first.** Видео — основной носитель обучающего контента; длинные тексты/расшифровка — по запросу. Текст — запасной вариант для доступности, не первичная форма — да/нет.

- **A3. Один экран — один вопрос / одно действие.** Ровно одно главное действие; конкурирующих CTA нет (второй тише или спрятан) — да/нет.

- **A4. Каждый текст — голосом интерфейса.** Одна мысль, ≤12 слов на строку, без вводных и канцелярита — да/нет. (Сборка текста — см. «Процессные проверки».)
  - **A4a. Регистр — «ты», единый на весь онбординг и голос Sona** (реш. DK 2026-06-22). «Ты»/«вы» между экранами не смешивать; новый/правленый экран проверять на «вы»-формы — да/нет.
  - **A4b. Терминология: слово «звон» НЕ использовать** (реш. DK 2026-06-25). Для обозначения тиннитуса — «шум» или «тиннитус» (по контексту, естественнее). На видимом тексте экрана «звон»-форм нет — да/нет.

---

## B. Структура, прогресс и спокойствие (как устроен экран)

- **B1. Экран — связанный вертикальный поток, не стопка карточек.** На макете называются три части: (1) зачин — кто ведёт; (2) тело — шаги на одной вертикальной нити; (3) тихое закрытие. Если хоть одна не указана — поток не собран — да/нет.

- **B2. Ровно один яркий шаг среди тихих.** В зоне ≤1 яркий/градиентный/активный блок; остальные шаги — тихие slate-плашки одной высоты (пройденные с галочкой, будущие без замков). Каждый шаг — ровно два состояния: пассивная строка ↔ активная карточка — да/нет.
  - *Сноска (прототип, не ТЗ):* переключатель `⤢` (`.vtoggle`) на блоках-шагах — приём для ревью (отсмотреть оба вида шага). В продукте активен ровно один шаг автоматически, переключателя нет. См. также DESIGN.md «Два представления каждого шага».

- **B3. Тихое завершение и нейтральный прогресс.**
  - **B3a.** Финал — спокойная точка: галочка, терминальный язык привязан к практике/модулю, не ко «дню»; развилки «продолжаю» нет — да/нет.
    - **B3a-искл.** Терминальный слот ДНЕВНОЙ петли называется «Оглянуться на день» — day-language здесь санкционирован (реш. DK 2026-07-05, см. Decisions Log DESIGN.md); терминальный язык модулей и практик по-прежнему привязан к практике/модулю — да/нет.
  - **B3b.** Прогресс показан ТОЛЬКО как статичная позиция в фиксированной структуре (неделя N · день M, полоска недели), один индикатор без дублей — да/нет.
  - **B3c. Тест на счётчик.** Убери пользователя на 3 дня — если меняется что-то кроме позиции, это счётчик (значит «нет»).
  - **B3d. Пропуск нейтрален.** Без последствий, язык приглашающий («вернись и продолжи», «по желанию сегодня») — да/нет.

- **B4. Ноль игровых механик (единый стоп-лист).**
  - **B4a. Стоп-лист.** На экране нет ничего из: streak/серия, баллы, значки, leaderboard, конфетти, награда, проценты, «осталось N», штраф или «сломанная серия» — пройди глазами, подтверди отсутствие каждого — да/нет.
  - **B4b.** Оформление завершения и пропуска шага не вводит ничего из B4a — да/нет.
  - **B4c. Исключение — онбординг (День 0), реш. DK 2026-06-13.** Допустимы тонкая процентная заливка полосы прогресса и «осталось N вопросов» как ориентир завершимого процесса. НЕ распространяется на дневную петлю и повторяющиеся поверхности. Прочие механики (streak, баллы, конфетти, награды) запрещены и в онбординге — да/нет.

- **B5. Calm tech: служебное на периферии, без прерываний.** Служебные индикаторы (прогресс/статус/напоминание) — вне основной зоны (таб-бар или край), не перекрывают главный шаг. Хром — один слой: нижняя навигация. **Шапки/хедера нет — инвариант хрома** (на него ссылаются C2, C6, C6c). Ноль модальных поп-апов, громких алертов, пульсирующих бейджей; напоминаний ≤3 в день по согласию — да/нет.
  - **B5a. Служебного крестика-возврата в рамке телефона нет (реш. DK 2026-07-04).** Никаких лесов витрины внутри рамки: полоска `wtop` с ✕ упразднена на всех шаблонах; возврат из превью в навигатор — средствами браузера. Кикер-подпись экрана (`.wlbl`) и SOS-якорь — не леса, остаются. Продуктовые ✕ (закрытие шторки-оверлея, выход из иммерсивного плеера — см. C6f) — не крестик-леса, разрешены — да/нет.

- **B6. Нижняя навигация: активная иконка — тот же глиф, что и неактивная, отличие только в цвете.** Активное и неактивное состояние таба используют ОДИН контурный глиф; меняется лишь **цвет** обводки — активная `url(#navgrad)`, неактивная `currentColor`. **Глиф, сетка и вес — одинаковы; вес состояния не кодирует.** Вес не задаётся в разметке вовсе: он выводится из размера и сетки (`.nav .ic svg`, токены `--icon-eff`/`--icon-vb`/`--icon-px`), поэтому развести состояния по толщине технически больше нельзя. (До 2026-07-14 активный таб приезжал на `stroke-width` 1.9 против 1.75 у соседей — то есть кодировал состояние ещё и весом, вопреки этому правилу; исправлено вместе с перецеливанием `navgrad` на `--teal-ink`→`--teal`, который даёт активному глифу 4.9:1 против 2.56:1 у неактивного — различимость держит цвет, как и задумано.) Активную иконку не рисовать залитой, в другой форме или с лишними деталями. Проверяется сравнением активного и неактивного состояний одного таба. **«Сегодня» = кружок** (`<circle r=4.6>`, единый контур, активный отличается только цветом) — да/нет.

- **B7. Анимация только одноразовая, не циклическая.** Бесконечных/циклических анимаций нет; все переходы одноразовые и ≤~0.2–0.3 с. Ничего вечно мигающего/пульсирующего; бейдж непрочитанного — статичная точка (не пульс, не красный, не счётчик) — да/нет.

- **B7a. Мобильные поверхности: продуктового `:hover` НЕТ вовсе.** Прототипы — мобильные (реш. DK 2026-07-12); hover на реальном телефоне не срабатывает, а в десктопном ревью создаёт ложную картинку (состояние, которого у пользователя нет) — поэтому продуктовые `:hover`-правила на мобильных экранах и в каноне сняты полностью. Аффорданс несут: покой (форма/цвет), tap-отклик `:active` (фон `--bg2` либо `transform: scale(.96–.97)` по типу) и `:focus-visible` (кольцо `--focus-ring`/`--focus-ring-dark`); курсор-«рука» над ссылками/кнопками остаётся браузерным. Ревью = ровно как на телефоне. Десктоп-поверхности (кабинет Куратора, навигатор-карта, витрина ДС, гайды, спец-панели ревью) — исключение, hover там легитимен. Прим.: production-сборка при желании вернёт hover для устройств с указателем через `@media(hover:hover)` — решение разработчика, не прототипа — да/нет.

- **B8. Плотность просторно, с воздухом.** Поля и отступы зоны ~20px одинаково во всех зонах (скруглённые карточки; проверяемо линейкой по макету). В одной зоне ≤1 яркий акцент (см. B2/C1) — да/нет.

- **B9. Обязательные поля → гейт через контракт `data-gate`, кнопка всегда живая.** Кнопка продолжения на экране с обязательными полями НЕ блокируется `pointer-events:none`/`disabled` («мёртвый тап» запрещён): она всегда тапабельна и фокусируема. Пока есть пропуски — приглушённый вид (`data-gate-state="pending"`), а тап/Enter/Space ведут к первому незаполненному полю (прокрутка + спотлайт-кольцо + фокус); всё заполнено → `ready` (градиент) ведёт дальше. Состояние кнопки пишет только контроллер (`data-gate-state`), не разметка. Жёсткий стоп (продолжать нельзя даже при заполненной форме) — ТОЛЬКО через `data-hard-gate` (состояние `blocked`), не через мёртвую кнопку. Канон — [`design-system/gate-contract.md`](design-system/gate-contract.md) + `gate.js`. Проверяется тапом по кнопке на незаполненной форме: если ничего не происходит — нет — да/нет.

- **B10. Реактивные сообщения зон не конфликтуют.** Итог зоны (строка-успокоение / плашка) не спорит с состоянием кнопки (калм-строка — без глагола движения при запертой «Дальше»); при активной safety-плашке прочие реактивные ноты гаснут. Две одинаковые метки секций (section-label) подряд не могут маркировать РАЗНЫЕ жанры — да/нет.

---

## C. Цвет и три контакта (кто говорит и чем выделено)

Развёрнутые таблицы семантики цвета и копи-стоп-листов — канон в DESIGN.md; здесь только да/нет-срез. Hex даны как «граница ответа», значение — канон в системе (`tokens.css`/`components.css`).

- **C1. Назначение каждого яркого цвета фиксировано.**
  - **C1a. «1 цвет = 1 смысл».** Красный → только Tier 1 safety; бирюза-градиент → главное действие/активный шаг; teal-tint галочка → «сделано»; статичная точка-бейдж → сигнал — да/нет.
  - **C1b. Один градиент-якорь на зону.** На ленте ровно один бирюза-градиент (главное действие/активный шаг); второго градиента на ленте нет — да/нет.
  - **C1c.** Правило «teal зарезервирован» относится к ГРАДИЕНТУ-якорю и главному действию; оно НЕ запрещает спокойный цвет у второстепенных иконок — да/нет.
  - **C1d. Цветные иконки допустимы.** Единая приглушённая заливка (напр. teal-tint) — ок; без цветовой какофонии, тинт единый и приглушённый — да/нет.
  - **C1e. Прохладная брендовая палитра.** Бирюза + slate; ни бежевого фона, ни серифа (отвергнуто DK) — да/нет.
  - **C1f. Двухтировая safety — красный не дублируется (реш. DK).** На экране безопасности два визуальных тира НЕ конкурируют красным: верхний (острые нейросимптомы) — НЕЙТРАЛЬНЫЙ slate-инфоблок `.emergency` (вес держит ФОРМОЙ — тёмный ink-рейл + слот-иконка, фон `--bg2`, без красного); красный зарезервирован за РЕАКТИВНОЙ плашкой флагов `.safety`/`.safety-wrap` (единственное место красного). Два красных рядом конкурируют — реактивную можно не заметить. Канон: `.emergency` — группа safety §3a; `.safety`/`.safety-wrap` — §3b (`components.css`) — да/нет.
  - **C1g. Реактивные ноты появляются СРАЗУ при триггере; нейтральные ноты — slate, не красные.** Обратная связь по ответам (`.calmline` — успокоение/совпадение; `.softnote` — несовпадение, не блокирует; красная `.safety` — медфлаг) проявляется немедленно при срабатывании условия, не после заполнения всей формы. Нейтральные ноты `.calmline`/`.softnote` — slate с глифом `--muted` (бирюза не сюда — зарезервирована за CTA и активным сегментом, C1/D5); красная только у Tier-1 `.safety`. Канон: группа notes (`.calmline`/`.softnote`), единая конвенция тоггла `.show` (`components.css`) — да/нет.
  - **C1h. Плейсхолдер-герой активной карточки = бирюзовый саундвейв, не плоская заливка** (реш. DK 2026-07-06). Пока у медиа-шага нет реального постера, поле-превью героя (`.maincard .hero`) несёт брендовый **саундвейв** (`design-system/hero-soundwave.svg`: люминесцентное ядро + концентрические звуковые волны на светлом бирюзовом градиенте) — «намёк на будущее наполнение». Не плоская заливка, не тёмный слейт. Реальный постер (`.hero.hasposter`) его перекрывает. CTA `.start` остаётся единственным градиент-якорем (C1b); саундвейв светлый и не перевешивает CTA. Play-диск и чип — на белом, читаются на светлом фоне — да/нет.

- **C2. Блок-зачин Sona — ТОЛЬКО на «Сегодня».** Блок-зачин (аватар-«S» + строка «Sona · твой AI-проводник» + пузырь-приветствие) — первый видимый элемент сверху **исключительно** на «Сегодня»; на других экранах его нет (контекст даёт подсвеченный таб). Это не системная шапка (шапки нет — B5). Аватар Sona = буква «S» в градиент-кружке с мягкой тенью, не фото; полный сонар-логотип — бренд-марка приложения (иконка приложения, онбординг-герой), не аватар голоса (определение — C6a). Строка дословно **«Sona · твой AI-проводник»** (teal-ink; реш. DK 2026-07-05, НЕ откатывать к голому «проводник»). Пульс-чек-ин «Как ты сейчас?» слит в этот же блок присутствия (реш. DK 2026-07-08, chromeless-merge): пузырь-приветствие и точки-шкала пульса делят ОДНУ плоскую teal-tint поверхность `.presence` — без шва между «сообщением» и «контролом»; пузырь внутри поверхности — симметричный радиус `--r-nested-lg`, без «хвостика»; отдельного жирного h3-вопроса нет (вопрос звучит из реплики Sona); якоря шкалы — «Тяжело · Ровно · Отлично». История подач и трейд-оффы — Decisions Log DESIGN.md (записи 2026-07-05…08). (Закрывающие реплики, контекстные пузыри, шапка-контакт на Чате — не блок-зачин, не трогаются.) — да/нет.

- **C3. Два разнесённых регистра голоса Sona.** T1 — приветствие в зачине; T2 — отклик на пульс после действия. Разные места, каждый — одна короткая фраза в пузыре, регистр мягче при тяжёлом дне — да/нет.

- **C4. Замер — живой диалог, не журнал.** Состояния точки: кружок → превью-подсказка «нажми меня» без подписи (для ревью) → расцвет градиентом при выборе → гашение соседних → свёртка в тихую строку-отметку. Ноль графиков/чисел/истории динамики звона/измерителя громкости. Эффект ответа виден одновременно в ≥2 местах (реплика Sona + доза практики + тон ленты), а не «записано в журнал» — да/нет.

- **C5. Фокус на совладании, не на шуме.** Контент и метрики только про сон/активность/дистресс/навыки; стоп-лист формулировок на экране: «убрать звук», «вылечить», «громкость/частота тиннитуса». Спец-термины (TFI, хабитуация) раскрываются при первом появлении — да/нет.

- **C6. Три контакта разведены инвариантно.**
  - **C6a. Sona.** Аватар-«S» в градиент-кружке — единый канон-компонент, одинаковый на всех экранах; проводник, отклик секунды. Полный сонар-логотип — только бренд-марка, не аватар реплик (на это определение ссылается C2) — да/нет.
  - **C6b. Куратор.** Фиолетовая система `#7C6CD6` (токен `--curator`, значение — канон в системе); аватар — фото Куратора в фиолетовой оправе-кольце, фолбэк без фото — фиолетовый диск с инициалом (реш. DK R30 2026-07-10); асинхронно ~24 ч — да/нет.
  - **C6c. SOS.** Канон-кнопка `qranchor`: глиф **сердце-в-ладошках** (stroke teal `#2BB4C6`; вес — общий канон `--icon-eff`, с 2026-07-14 это **2**, реш. DK; до этого здесь стояло 1.75 инлайном в 27 файлах, из-за чего SOS выпадал бы из набора при смене канон-веса — теперь вес выводится, как у всех иконок) на белом диске (border `--line`), плавающая внизу-справа в зоне большого пальца; не красный, не градиент-заливка; единый вход, отклик секунды; в шапке быть не может (шапки нет — B5). **Тап — ПЕРЕХОД на полноэкранный экран «Сейчас тяжело» (`program/templates/crisis`), НЕ выезжающая шторка** (шторка `qr-sheet`/`qr-backdrop` упразднена, реш. DK 2026-07-10/11; «Быстрая помощь» и SOS-якорь — один функционал, один экран). Один компонент на всех экранах — не переизобретать (ни символ `♥`, ни teal-tint-диск, ни шторка) — да/нет.
  - **C6d.** Контакты разведены по четырём осям: разные аватар / цвет / место / срочность — все четыре различия присутствуют — да/нет.
  - **C6e. Плита-присутствие Куратора — только на «Сегодня».** Куратор подан той же грамматикой, что блок Sona: плоская плита `--curator-tint` без рамки/тени/белой карточки (C6g: подложка = цвет говорящего), фото Анны в фиолетовой оправе (фолбэк — инициал «А»), роль-строка «Анна · твой куратор», одна реплика живым голосом — «Я рядом. Пиши — отвечу в чате.», тихий текст-аффорданс «Написать ›» (`--curator-ink`) в углу плиты — страховка аффорданса, не вторая кнопка; вся плита — ОДНА тап-мишень в чат. Плита живая: при непрочитанном сообщении Куратора реплика-заглушка заменяется началом его последнего сообщения + тихий СТАТИЧНЫЙ фиолетовый маркер-точка у роль-строки (не пульс, не красный, не бейдж-счётчик — B7). ТОЛЬКО на «Сегодня»; на других экранах Куратор появляется лишь в своём контексте (Чат). Смысл плиты — живой союзник рядом, к которому можно обратиться, а не «готовит отзыв» (реш. DK R30 2026-07-10, сменяет R23) — да/нет.
  - **C6f. SOS — на всех экранах с хромом.** Помощь за 1 тап с любого НЕ-иммерсивного экрана; якорь ведёт ПЕРЕХОДОМ на полноэкранный «Сейчас тяжело» (не шторкой — C6c). Исключение (реш. DK): иммерсивные поверхности — плееры (практики, звукотерапии) И сам экран «Сейчас тяжело» — идут без хрома и SOS-якоря не показывают; всегда видимый ✕ возвращает туда, откуда пришли (на «Сегодня», откуда SOS — в 1 тап) — да/нет.
  - **C6g. Подложка реплики = цвет говорящего; текст всегда тёмный.** Фон пузыря кодирует, ЧЕЙ голос, а не «входящее/исходящее»:

    | Говорящий | Токен подложки |
    |---|---|
    | Sona | `--sona-tint` (серо-бирюза) |
    | Куратор | `--curator-tint` |
    | Пользователь | `--bg2` |

    Текст всех пузырей — всегда тёмный `--ink` (не teal-ink, не белый). Бирюза закреплена за Sona, не отдаётся пользователю. Яркий акцент (градиент) — у кнопки отправки/промо-карточки, не у пузырей — да/нет.

  - **C6h. Экран «Сейчас тяжело» — композиция (реш. DK 2026-07-12/13).** Полноэкранный SOS `program/templates/crisis` собран как action-only поверхность: (1) 3 заложенных инструмента вверху → (2) «Твои опоры» (собранные пользователем навыки/знания, авто-рост из освоенного) → (3) сид основателя тёплым аккордом → (4) кризис-ресурс внизу. **Кризис-ресурс** — НЕЙТРАЛЬНЫЙ (не красный, C1f), ВТОРИЧНЫЙ, вес держит ФОРМОЙ (ink-рейл + слот, грамматика `.emergency`; канон-компонент `.crisis-help` — тёмный вариант, `components.css` safety §3c), каналы звонок/текст ко-равные (≥44px, приложение про слух), глифы телефон/письмо (не сердце), формулировки без ideation-careline (role-med); кнопка-плейсхолдер НЕактивна, пока реальный контакт не подключён (US 988 live — жёсткий гейт Лёвы). **«Твои опоры»** в кризисном ЧТЕНИИ легче редактора-набора и НЕ показывают мета-происхождение (неделя·день — только в редакторе); одно поведение на поверхность (тап = раскрытие, запуск — чипом внутри). **Редактор «Мои опоры»** (`?edit=1`) живёт на СПОКОЙНОЙ поверхности без кризисного обрамления; модель — авто-рост («убери лишнее», не «отметь»). Куратор в SOS не показывается (C6e — только «Сегодня») — да/нет.

- **C7. A11y-минимумы как пол.** Тап-цель ≥44×44px (хитбокс псевдоэлементами при мелкой графике); контраст текст 4.5:1 / крупный 3:1 / критичное 7:1; смысловые метки `--muted`, декор `--muted2`; `aria-label` на интерактиве, `aria-hidden` на декоре; к аудио — обязательная текстовая альтернатива/субтитры — да/нет.
  - **C7a. Реактивные сообщения озвучены для скринридера.** Красная safety-плашка — `role="alert"`; прочие реактивные ноты (успокоение, серая нота) — `aria-live="polite"` — да/нет.

- **C8. Родство иконок: родство кодирует СЛОТ, правду кодирует ГЛИФ. Один слот = одно обещание.** Требовать родства по КЛАССУ ПРЕДМЕТА (чтобы все глифы экрана были «одной природы») **запрещено**: предмет тогда выбирается ради гармонии, а не ради смысла, и набор получает дубли геометрии — главную болезнь, которую лечила пересборка (галочку рисовали 10 раз, якорь — дважды). Родство даёт паритет ПОДАЧИ (слот, кегль, яркость, вес), а не единый предмет. Реестр `icons.js` группирует иконки **по назначению в продукте, а не по рисунку** — это то же правило. Заведено рой-валидацией кризисного экрана 2026-07-15 (претензия DK «иконки вразнобой» — наблюдение верное, диагноз ложный; блок опор оставлен без единого изменения, 6/6 критиков).
  - **C8a. Т1 — происхождение.** Глиф взят из реестра (`<use href="#i-…">`), и правило держится в обе стороны: один смысл = один глиф И один глиф = один смысл. Проверка грепом, не на глаз. Инлайн-глиф мимо реестра — дефект: на кризисном экране один файл рисовал «дыхание» двумя геометриями сразу.
  - **C8b. Т2 — регистр и тон.** Предмет — то, что покажешь рукой или увидишь в комнате, а не то, что называет врач. Про то, КУДА идёшь, а не ОТ ЧЕГО уходишь. Орган допустим, только когда орган и ЕСТЬ утверждение (мозг у «Природы тиннитуса» — звук рождается в мозге; но не лёгкие у «Подышать»).
  - **C8c. Т3 — обещание слота.** Разное обещание — разный слот. Различие блоков несёт слот (кегль, диск, яркость), а не грамматика внутри глифа: конвенцию «действие против состояния» пользователь в остром пике не выучит.
  - **C8d. Глиф не зеркалит соматическую тревогу.** На острых поверхностях глиф не изображает то, ОТ чего человек уходит. Прецедент DK: кардиограмма у «Дыхания» забракована — на кризисном экране ЭКГ зеркалит соматическую тревогу, ровно то, что практика снимает. Правило жило примечанием к одному глифу в `icons.js` и было невидимо: за одну сессию на него наступили дважды (кардиограмма, лёгкие).
  - **C8e. Проверять пару, а не глиф.** Два глифа одного класса предмета на ОДНОМ экране — дефект, даже если каждый по отдельности верен (пузырь «Оспаривания» против таба «Чат»; два якоря; две волны). Судить набор — контактным листом на боевом кегле; тест силуэта в диске не дискриминирует и глиф им не судят.


---

## D. Минимализм V3 (да/нет-срез канона)

D1–D5 — приёмочный да/нет-срез канона V3; полный канон → [`v3-minimalism-guide.md`](v3-minimalism-guide.md). Связки с A/B/C зашиты внутри пунктов (D5 уточняет C1; C1b, C2 держатся).

- **D1. Минимизируй подачу, не смысл.** Убран только ШУМ подачи (рамки, тени, разделители, плашки, дубль-подзаголовки, декор-иконки), не информация. Каждый факт/опция/ориентир на месте. Фильтр: «стало понятнее/лучше — или просто меньше?» — да/нет.

- **D2. Иерархия размером и воздухом, не рамками.** Главный элемент крупнее и держит внимание; группировка — направленным воздухом, не линиями/плашками. Имя-якорь обычного экрана — `--fs-h2` (line-height 1.25); `--fs-display` зарезервирован за единственной «главной мыслью» экрана (вопрос онбординга / результат-итог), не за рядовым именем — да/нет.

- **D3. Антипаттерн криптоплиток — стоп.** Нет однословных ярлыков-ребусов вместо фактов («навык/регулярность/путь/норма»), иконок без подписи, пустых экранов ради пустоты. Живой факт — фразой, не ярлыком — да/нет.

- **D4. Тест понятности каждого элемента.** «Поймёт ли пользователь смысл КАЖДОГО без объяснения, и стало ли понятнее, чем было?» Любой элемент-загадка — «нет». Настоящий минимализм — меньше элементов, столько же или больше понятности — да/нет.

- **D5. Бирюза — точечный акцент (уточняет C1).** Нейтральная база; бирюза несёт смысл точечно (один акцент-фокус). «Акцентно всё» = «не акцентно ничто». Тогглы-гейты V3 — плоская бирюза; единственный градиент-якорь зоны (C1b) остаётся за главной кнопкой — да/нет.
  - **D5a. Вторичные текстовые строки карточек — нейтральный `--muted`.** Бирюза не для строк-критериев («Стоит включить, если…»). Потолок карточек-модулей **с тумблерами** на экране выбора — 4; больше — пересматривать подачу. Всегда-включённые блоки комплектации (бейдж «В программе», без тумблера) — отдельный класс карточек, в потолок не входят — да/нет.

- **D6. Канон компонента не отгружает декор, который V3-экран снимает оверрайдом.** Если экран ставит `border:none`/`box-shadow:none` поверх канон-класса — впеки это прямо в канон, не оставляй латентный долг. Функциональные границы (рамка инпута, фокус-кольцо, safety-красный, тёмный плеер) при этом не трогаются — да/нет.

---

## Процессные проверки (не по макету, а по сборке)

- Любой текст экрана прогнан через `skills/write-content/SKILL.md` (написание) и финально через `skills/ru-text-editor/SKILL.md` (перед сохранением).
- Цикл правки: утвердил → обновил гайд → разлил на все подходящие прототипы → пересверил (не чинить один экран многократно).
- Валидация прототипов — по [`VALIDATION-ALGORITHM.md`](VALIDATION-ALGORITHM.md) (полный алгоритм роёв-проверок).
- Программа-навигатор — один источник: недели/дни авторствуются ТОЛЬКО в `program/program.js` (`window.PROGRAM`). Проекция «По программе» (арка) именует диапазоны недель и ссылается («по дням →»), но НЕ перечисляет их содержимое. Правишь состав недели — правь `program.js`, не дублируй в `MODEL.arc`/`index.html`.
