Оба предыдущих раунда (#2327, #2427) опирались на frontend/public/tradein.html +
trade-in.css — старый демо-мокап «PRINZIP», стилизованный под Брусника-конкурента
(footer файла: `data: brusnika-obmen-style`). Реальный бренд «МЕРА» — это
/trade-in/v2, HUD/blueprint-дэшборд с другой палитрой (v2/tokens.ts),
другими шрифтами (Manrope + IBM Plex Mono вместо PT Sans/Serif) и другим
словарём компонентов (glass-карточки с угловыми HUD-скобками, нумерованные
секции, donut-гейдж качества данных, пунктирные разделители, source-pill).
- Шрифты: Manrope (инстансирован из variable-файла через fonttools
varLib.instancer, т.к. WeasyPrint не поддерживает variable-font @font-face)
+ IBM Plex Mono 400/500, embedded тем же _font_data_url()-паттерном, что
PT Sans/Serif в #2427.
- Палитра/chrome: _ACCENT*/_BORDER* заменены на полный набор токенов 1:1 из
v2/tokens.ts; _page_header/_page_footer переписаны по мотивам HeroBar.tsx/
Footer.tsx (мono meta-ячейки, пунктирная градиентная линия с акцентной
серединой, wordmark на brand.name — white-label не сломан).
- Контент: status-pill (свежесть данных), source-pill, donut-гейдж качества
(inline SVG, техника из ObjectSummary.tsx), угловые HUD-скобки на
карточках, нумерованные заголовки секций (01-04), пунктирные разделители
строк — метрики качества данных (источники/CV/разброс) считаются из
реальных полей AggregatedEstimate, не выдуманы.
- Overflow-hardening (главная жалоба к прошлому прототипу — «текст
залезает друг на друга»): overflow-wrap:anywhere на всех
data-производных строках (адрес, brand.name, названия аналогов, диск-
лаймер с UUID), никакого nowrap кроме заведомо ограниченных полей
(даты/номер отчёта/короткие лейблы), table-layout:fixed на таблице
примеров, break-inside:avoid на карточках преимуществ.
- Верификация: реальный рендер в Docker (WeasyPrint) на normal + stress
фикстурах (длинный адрес, длинный white-label бренд, экстремальные
цены) + объективный PyMuPDF bbox-overlap детектор поверх текста —
2 итерации fix (переполнение страницы на cover, перенос wordmark
посреди слова в футере), 3-я verify — ALL_CLEAR. Полный pytest (2265
passed) + ruff чисты; 1 непроходящий тест и 3 ruff-находки подтверждены
pre-existing на main (git diff main пуст на этих файлах).