---
name: kodoceh-family-four-worlds
description: "У четырёх сайтов КодоЦеха четыре разных мира и четыре тройки шрифтов при одной системе правил — «общая ДНК, разные лица»; копировать мир витрины на продукты запрещено"
metadata: 
  node_type: memory
  type: project
  originSessionId: b11e39bd-4f6f-47c9-ba7b-680ccf041a5b
  modified: 2026-08-06T11:35:07.214Z
---

2026-08-06 три продуктовых сайта переведены на ДНК витрины. Ключевое: **мир витрины не копировался** — у каждого свой бросок `concept-seed.mjs` и свой каркас первого экрана (решение владельца «общая ДНК, разные лица», [[kodoceh_web_line_world]]).

| Сайт | Мир | seed | Предмет первого экрана |
|---|---|---|---|
| codoceh.ru | Линия без пересадок | `4a9d5d19` | схема линии из шести узлов |
| mexunt.codoceh.ru | Сервисная книжка | `a168f571` | заполненный талон со штампом |
| vakhunter.codoceh.ru | Шкала приёмника | `8cf07ca7` | шкала на 20 станций со стрелкой |
| avtero.codoceh.ru | Картотека артикулов | `15f4cbc3` | карточка детали с перекрёстными ссылками |

**Шрифты у каждого свои** (все через `@fontsource`, кириллица проверена образцом ДО сборки): витрина Unbounded/Onest/JetBrains Mono · Механт Podkova/Golos Text/PT Mono · ВакХантер Alumni Sans/Commissioner/Martian Mono · Автеро Wix Madefor Display/Wix Madefor Text/IBM Plex Mono. Inter, Manrope, Space Grotesk и Geologica сознательно не используются.

**Наследуется система, а не картинка:** плита как область темы; `header:not(.header-bg)` + `--hdr-h` + `.under-header`; кикер над заголовком запрещён; одна нумерация на страницу; теней нет; тема-независимое в `tokens.cjs`, тема-зависимое в `globals.css`; ровно две авторские анимации, обе под `prefers-reduced-motion`; framer-motion на лендингах нет, поэтому страницы читаются без JS.

**Числа на страницах берутся из движка, а не из головы.** Тарифы и состав 20 источников ВакХантера — из `~/Services/VakHunter/database/db.py` (Trial 5/6 ч, Standard 12/3 ч, Pro 20/1 ч). У Автеро на страницу вынесен канонический гейт («неподтверждённое отбрасывается, пустая графа честнее выдуманной»).

Контракт направления у каждого вшит HTML-комментарием первым узлом `<body>` в `layout.tsx` — проверяется грепом `seed <ключ>` в отданном проде. Правда о продукте — `apps/<app>/PRODUCT.md`, мир — `apps/<app>/DESIGN.md`.

**Ревью свежим контекстом (06.08.2026) нашло то, чего автор не видел.** Половина находок оказалась
**семейной**, а не по одному сайту: контракт направления врал «framer-motion нет» (общий `Header` его тянет);
`prefers-reduced-motion` гасил только авторские анимации, а не переходы `@cbr/ui` (плюс FAQ крутился на 45°,
CTA прыгала); `scroll-padding-top` не было нигде, и якорные переходы заезжали под липкую шапку; `DemoVideo`
был окном браузера со «светофором» и `rounded-xl` в четырёх мирах с нулевым радиусом; модалки несли `shadow-xl`.
Правило: **одинаковая находка на всех объектах сразу — это дефект общего слоя**, и искать его надо в
`packages/ui`, а не на странице. Всё перечисленное исправлено.

Отдельно: запрещённая владельцем фраза «в один тап» жила ещё и в `manifest.ts` ВакХантера — грепу по `page.tsx`
она не попадалась. Запрет проверять по всему приложению, а не по разметке страницы.

Проверено в проде, обе темы: контраст AA — 0, тап-цели 24×24 — 0, чтение без JS — 0 скрытого,
детектор Impeccable по файлам лендинга — 0 (остаток находок живёт только в Operate-поверхностях
`/app`, `/cabinet`, `/admin` — семантические цвета статусов, не описанные в DESIGN.md). См. [[design_contract_is_a_checklist]], [[wcag_contrast_over_video]], [[impeccable_design_skill]].
