trade-in/v2: UI/UX-полировка по аудиту (доступность, доверие к числам, иерархия, копирайт) #2062

Closed
opened 2026-06-28 15:44:07 +00:00 by lekss361 · 3 comments
Owner

Детальный UI/UX-аудит живого /trade-in/v2 (4 экспертных линзы: визуал / UX / контент / IA-состояния-a11y, под pilottest на реальной оценке). Дочерняя к #2036. Скрины аудита — audit-*.png / ui-*.png / verify-*.png в рабочем дереве.

Вердикт: крепкий, честный по замыслу data-продукт в самобытной HUD-системе; до «платного продукта» не хватает a11y-прохода, фикса противоречий в числах, усиления иерархии (CTA/цены) и нормализации чисел/копирайта. Happy-path не сломан.

Уже починено в #2051/#2057/#2060 (ревьюеры видели старые скрины): 0 ЛОТА→pluralRu; БольшаковаГеологическая→deglue; «Андрей Петров» в оверлеях→общий TopNav pilottest; знак торга на дашборде→−%; building.png→грузится; РАДИУС/+−→рабочие.


🔴 CRITICAL — доступность (отдельный заход)

  • Вся интерактивность — click-only <div>. КОМНАТ/ТИП/РЕМОНТ/РАДИУС/БАЛКОН (ParamsPanel Dd + balcony pills), +/−/locate, «Подробнее →», стрелки СВОДКИ, nav-табы, «← К ОЦЕНКЕ» — без tabindex/role/клавиш. С клавиатуры/скринридера оценку нельзя завершить (только адрес+площадь — нативные input). axe даёт 1 violation, т.к. не видит div как контрол.
    → нативные <button>/<select> или role=listbox/option + aria-haspopup/expanded; balcony→radio-group; Enter/Space/стрелки/Esc.

🟠 HIGH — доверие к числам, иерархия, аффордансы

  1. Противоречия в провенансе (главный удар по доверию): футер «ПОСТРОЕНО ПО 6 АНАЛОГАМ И 10 СДЕЛКАМ» — захардкожен ResultPanel.tsx:~888, реально 41/42; «ИСТОЧНИКОВ 5/7» vs 4 залитых плитки vs «2/7» в оверлее аналогов. → футер из data.meta; один канонический счётчик источников везде (или явно «источники сделок» vs «аналогов»).
  2. CTA «ОЦЕНИТЬ КВАРТИРУ» без веса (outline, светлее тоггла «ДА»). → залить brand-blue + белый текст; outline оставить вторичным («КАК РАССЧИТАНО»).
  3. Фикс-артборд 1536×1024 + overflow:hidden режет на 1366×768 / 1440×900 (layout.tsx) — правый столбец уходит за край. → wrapper transform: scale(min(1, 100vw/1536, 100vh/1024)), origin top-center (без правки вёрстки).
  4. Оверлеи не настоящие модалки (SectionOverlay): нет role=dialog/focus-trap/Esc/inert-фона; нет aria-live «результат готов».
  5. Фокус-кольцо убрано (outline:none) + инпуты без <label htmlFor> (WCAG 2.4.7). → HUD-:focus-visible (accent-glow) + label/aria + aria-invalid/describedby на валидации.
  6. Нет лендмарков (page.tsx): обернуть TopNav→<nav>, контент→<main>, низ→<footer> (0 визуальных изменений, снимает axe).
  7. Мёртвые контролы-двойники: CRM-дропдаун (▼ «Не заполнять», onSelect=noop, TODO #395) и crosshair на карте (идентичен рабочим +/−) — клик ничего. → задизейблить/«скоро» или убрать.
  8. Цветное фото здания крадёт первый взгляд у трёх цен (единственный насыщенный элемент). → blue-tint фото + поднять вес цифр 8,26/6,76/7,67.
  9. Опц. дропдауны шлют непроверенные дефолты как ввод (ТИП «Панельный»/РЕМОНТ «Хороший»/БАЛКОН «ДА»→в ценовую модель, даже если не трогали). → нейтральный «Не указано»→null или muted-untouched.
  10. «ОЖИДАЕМАЯ СДЕЛКА (ПОЛУЧИТЕ)» переобещает + 6,76 < ДКП-медианы 7,67 без объяснения. → «ОЖИДАЕМАЯ ЦЕНА СДЕЛКИ · с учётом торга» + строка-примирение.
  11. «КОЭФ. ЛОКАЦИИ —» в HERO читается как «не посчитали» (а это «в разработке»). → muted-пилюля «скоро», не accent-«—».
  12. Метки цен на мини-карте налезают (21,50/16,50/13,99 млн — побочка mapMarkers). → схлопывать пересекающиеся в счётчик / hover / кап 1-2 не-коллизийных.

🟡 MEDIUM — контент/состояния

  • Разделитель/округление вразнобой: деньги «8,26 млн» (запятая) vs «CV 33.6%», «≤0.5 км», «56.2 м²» (точка); один range округлён по-разному на экранах (6,12–10,64 vs 6,1–10,6). → единый ru-форматтер (запятая везде) + одна точность денег + один стиль range.
  • «ты»/«вы» вперемешку («заполни если знаешь» vs «Укажите адрес»). → один регистр («вы»).
  • Жаргон: CV / P25–P75 / «эталон» / «(asking)»/«POI» (drawer) / «КЭШ ПО АДРЕСУ ● ГОТОВ». → «разброс цен» / «срединный диапазон» / «опорная цена» / «данные актуальны».
  • Статичные медиана-маркеры на range-барах как draggable-ручки — будут тянуть. → тонкий тик/ромб, или подключить WhatIfPanel.
  • Валидация далеко от поля (под кнопкой; адрес вверху), без подсветки поля.
  • «В РАСЧЁТЕ» (пульс) на готовом результате + «ШАГ 1/1» → ложный «ещё считается». → «АКТУАЛЬНО» + убрать «ШАГ 1/1».
  • Фейк-точность дат ДКП — всё «01.01.2026» (Росреестр = месяц). → «янв 2026» / «месяц сделки».
  • Имена источников не нормализованы (Avito/Авито/«АВИТО ОЦЕНКА»). → один словарь брендов (кириллица, без method-суффиксов).
  • Таблица аналогов прячет площадь/комнаты/этаж в адресную ячейку — нельзя сортировать. → отдельные колонки.
  • СВОДКА: безымянные числа + неоднозначная ↗ («Аналоги 41 · 13,90 млн» ≠ медиана 8,26). → подписать значения; ↗→«›/открыть».
  • Графики «сломаны»: плоская линия истории цен (зум оси Y / «недостаточно данных») + легенда «Яндекс» без линии; тиры срока non-monotonic. → монотонные тиры / убрать пустую серию.
  • Целые колонки прочерков (ИСТОЧНИКОВ; ОБЪЯВЛЕНИЕ ДО СДЕЛКИ «– –») = «сбой». → скрывать пустые колонки.
  • Accent-синий размазан по всем ролям + микро-лейблы 9-10px < 4.5:1. → accent только на CTA+ключевую цифру; лейблы темнее.

🟢 LOW

  • СВОДКА ~наполовину дублирует 02 (КАЧЕСТВО ДАННЫХ байт-в-байт; 3 пути в каждый оверлей).
  • «—» как плейсхолдер ЭТАЖ/ГОД читается как заполненное (ПЛОЩАДЬ хорошо — «напр. 54»). → «напр. 5/1975».
  • Табы 04-07 кликабельны до оценки → пустые шеллы. → disable + tooltip «доступно после оценки».
  • Hero-финиш: артефакт линейки «0/25», шов фото/брекеты, мотив брекетов непоследователен, пустые панели — большие пустоты (→ ghost-skeleton превью).
  • Пустая house-history без empty-copy («Нет продаж по этому дому за 24 мес»).

Quick-wins (P1, FE-only, сделать первыми)

Залить CTA · landmarks (<nav>/<main>/<footer>) · :focus-visible · футер из data.meta + один счётчик источников · КОЭФ.ЛОКАЦИИ→«скоро» · «(ПОЛУЧИТЕ)»→«с учётом торга» · единый ru-форматтер · «В РАСЧЁТЕ»→«ГОТОВО» + убрать «ШАГ 1/1» · скрыть all-dash колонки · scale-fit wrapper · убрать/disable мёртвые CRM+crosshair · расклеить метки мини-карты.

Сильные стороны (НЕ ломать): HUD-система, mono-цифры, модель 3 оценок, покрытие состояний (skeleton/empty/404), честное сигналирование пробелов, автокомплит, радиус «Авто».

Детальный UI/UX-аудит живого `/trade-in/v2` (4 экспертных линзы: визуал / UX / контент / IA-состояния-a11y, под `pilottest` на реальной оценке). Дочерняя к #2036. Скрины аудита — `audit-*.png` / `ui-*.png` / `verify-*.png` в рабочем дереве. **Вердикт:** крепкий, честный по замыслу data-продукт в самобытной HUD-системе; до «платного продукта» не хватает a11y-прохода, фикса противоречий в числах, усиления иерархии (CTA/цены) и нормализации чисел/копирайта. Happy-path не сломан. > ✅ Уже починено в #2051/#2057/#2060 (ревьюеры видели старые скрины): `0 ЛОТА`→pluralRu; `БольшаковаГеологическая`→deglue; «Андрей Петров» в оверлеях→общий TopNav `pilottest`; знак торга на дашборде→`−%`; building.png→грузится; РАДИУС/`+−`→рабочие. --- ## 🔴 CRITICAL — доступность (отдельный заход) - **Вся интерактивность — click-only `<div>`.** КОМНАТ/ТИП/РЕМОНТ/РАДИУС/БАЛКОН (`ParamsPanel` Dd + balcony pills), `+/−`/locate, «Подробнее →», стрелки СВОДКИ, nav-табы, «← К ОЦЕНКЕ» — без `tabindex`/`role`/клавиш. С клавиатуры/скринридера оценку **нельзя завершить** (только адрес+площадь — нативные input). axe даёт 1 violation, т.к. не видит div как контрол. → нативные `<button>`/`<select>` или `role=listbox/option` + `aria-haspopup/expanded`; balcony→radio-group; Enter/Space/стрелки/Esc. ## 🟠 HIGH — доверие к числам, иерархия, аффордансы 1. **Противоречия в провенансе** (главный удар по доверию): футер «ПОСТРОЕНО ПО **6** АНАЛОГАМ И **10** СДЕЛКАМ» — **захардкожен** `ResultPanel.tsx:~888`, реально 41/42; «ИСТОЧНИКОВ **5/7**» vs **4** залитых плитки vs «**2/7**» в оверлее аналогов. → футер из `data.meta`; один канонический счётчик источников везде (или явно «источники сделок» vs «аналогов»). 2. **CTA «ОЦЕНИТЬ КВАРТИРУ» без веса** (outline, светлее тоггла «ДА»). → залить brand-blue + белый текст; outline оставить вторичным («КАК РАССЧИТАНО»). 3. **Фикс-артборд 1536×1024 + `overflow:hidden` режет** на 1366×768 / 1440×900 (`layout.tsx`) — правый столбец уходит за край. → wrapper `transform: scale(min(1, 100vw/1536, 100vh/1024))`, origin top-center (без правки вёрстки). 4. **Оверлеи не настоящие модалки** (`SectionOverlay`): нет `role=dialog`/focus-trap/Esc/inert-фона; нет `aria-live` «результат готов». 5. **Фокус-кольцо убрано (`outline:none`) + инпуты без `<label htmlFor>`** (WCAG 2.4.7). → HUD-`:focus-visible` (accent-glow) + label/aria + `aria-invalid/describedby` на валидации. 6. **Нет лендмарков** (`page.tsx`): обернуть TopNav→`<nav>`, контент→`<main>`, низ→`<footer>` (0 визуальных изменений, снимает axe). 7. **Мёртвые контролы-двойники**: CRM-дропдаун (▼ «Не заполнять», `onSelect=noop`, TODO #395) и crosshair на карте (идентичен рабочим `+/−`) — клик ничего. → задизейблить/«скоро» или убрать. 8. **Цветное фото здания крадёт первый взгляд** у трёх цен (единственный насыщенный элемент). → blue-tint фото + поднять вес цифр 8,26/6,76/7,67. 9. **Опц. дропдауны шлют непроверенные дефолты как ввод** (ТИП «Панельный»/РЕМОНТ «Хороший»/БАЛКОН «ДА»→в ценовую модель, даже если не трогали). → нейтральный «Не указано»→null или muted-untouched. 10. **«ОЖИДАЕМАЯ СДЕЛКА (ПОЛУЧИТЕ)» переобещает** + 6,76 < ДКП-медианы 7,67 без объяснения. → «ОЖИДАЕМАЯ ЦЕНА СДЕЛКИ · с учётом торга» + строка-примирение. 11. **«КОЭФ. ЛОКАЦИИ —» в HERO** читается как «не посчитали» (а это «в разработке»). → muted-пилюля «скоро», не accent-«—». 12. **Метки цен на мини-карте налезают** (21,50/16,50/13,99 млн — побочка `mapMarkers`). → схлопывать пересекающиеся в счётчик / hover / кап 1-2 не-коллизийных. ## 🟡 MEDIUM — контент/состояния - **Разделитель/округление вразнобой**: деньги «8,26 млн» (запятая) vs «CV 33.6%», «≤0.5 км», «56.2 м²» (точка); один range округлён по-разному на экранах (6,12–10,64 vs 6,1–10,6). → единый ru-форматтер (запятая везде) + одна точность денег + один стиль range. - **«ты»/«вы» вперемешку** («заполни если знаешь» vs «Укажите адрес»). → один регистр («вы»). - **Жаргон**: `CV` / `P25–P75` / «эталон» / «(asking)»/«POI» (drawer) / «КЭШ ПО АДРЕСУ ● ГОТОВ». → «разброс цен» / «срединный диапазон» / «опорная цена» / «данные актуальны». - **Статичные медиана-маркеры на range-барах как draggable-ручки** — будут тянуть. → тонкий тик/ромб, или подключить WhatIfPanel. - **Валидация далеко от поля** (под кнопкой; адрес вверху), без подсветки поля. - **«В РАСЧЁТЕ» (пульс) на готовом результате + «ШАГ 1/1»** → ложный «ещё считается». → «АКТУАЛЬНО» + убрать «ШАГ 1/1». - **Фейк-точность дат ДКП** — всё «01.01.2026» (Росреестр = месяц). → «янв 2026» / «месяц сделки». - **Имена источников не нормализованы** (Avito/Авито/«АВИТО ОЦЕНКА»). → один словарь брендов (кириллица, без method-суффиксов). - **Таблица аналогов прячет площадь/комнаты/этаж в адресную ячейку** — нельзя сортировать. → отдельные колонки. - **СВОДКА: безымянные числа + неоднозначная ↗** («Аналоги 41 · 13,90 млн» ≠ медиана 8,26). → подписать значения; ↗→«›/открыть». - **Графики «сломаны»**: плоская линия истории цен (зум оси Y / «недостаточно данных») + легенда «Яндекс» без линии; тиры срока non-monotonic. → монотонные тиры / убрать пустую серию. - **Целые колонки прочерков** (ИСТОЧНИКОВ; ОБЪЯВЛЕНИЕ ДО СДЕЛКИ «– –») = «сбой». → скрывать пустые колонки. - **Accent-синий размазан по всем ролям** + микро-лейблы 9-10px < 4.5:1. → accent только на CTA+ключевую цифру; лейблы темнее. ## 🟢 LOW - СВОДКА ~наполовину дублирует 02 (КАЧЕСТВО ДАННЫХ байт-в-байт; 3 пути в каждый оверлей). - «—» как плейсхолдер ЭТАЖ/ГОД читается как заполненное (ПЛОЩАДЬ хорошо — «напр. 54»). → «напр. 5/1975». - Табы 04-07 кликабельны до оценки → пустые шеллы. → disable + tooltip «доступно после оценки». - Hero-финиш: артефакт линейки «0/25», шов фото/брекеты, мотив брекетов непоследователен, пустые панели — большие пустоты (→ ghost-skeleton превью). - Пустая house-history без empty-copy («Нет продаж по этому дому за 24 мес»). ## ⚡ Quick-wins (P1, FE-only, сделать первыми) Залить CTA · landmarks (`<nav>/<main>/<footer>`) · `:focus-visible` · футер из `data.meta` + один счётчик источников · КОЭФ.ЛОКАЦИИ→«скоро» · «(ПОЛУЧИТЕ)»→«с учётом торга» · единый ru-форматтер · «В РАСЧЁТЕ»→«ГОТОВО» + убрать «ШАГ 1/1» · скрыть all-dash колонки · scale-fit wrapper · убрать/disable мёртвые CRM+crosshair · расклеить метки мини-карты. **Сильные стороны (НЕ ломать):** HUD-система, mono-цифры, модель 3 оценок, покрытие состояний (skeleton/empty/404), честное сигналирование пробелов, автокомплит, радиус «Авто».
lekss361 added the
enhancement
scope/frontend
tradein
ux
labels 2026-06-28 15:44:18 +00:00
Author
Owner

P1 (quick-wins) — задеплоено на прод и проверено

Ветки: PR #2066 (основной P1) + PR #2069 (a11y-фоллоуап). Оба смержены, deploy-tradein.yml зелёный, контейнер tradein-frontend пересобран. Прод-QA под pilottest на реальной оценке (Екатеринбург, Белинского 86 → 41 аналог / 42 сделки).

Сделано:

  • CTA «ОЦЕНИТЬ КВАРТИРУ» → solid brand-blue + белый текст (доминирует над тоглом «ДА»).
  • Лендмарки <nav>/<main>/<footer> (display:contents, 0 визуальных изменений).
  • :focus-visible HUD-glow на инпутах + CTA (вместо outline:none).
  • Провенанс из data, единый счётчик: footer «ПОСТРОЕНО ПО 41 АНАЛОГУ И 42 СДЕЛКАМ» из meta.builtOn; ИСТОЧНИКОВ X/7 = число залитых плиток = оверлей (всё 4/7, через activeSourceCount); убраны хардкоды «6/10», «2/7», «Avito·10», «из 2 источников».
  • КОЭФ.ЛОКАЦИИ → muted-пилюля «скоро» (не accent-«—»); контраст AA-fixed (#2069).
  • Карточка 02 → «ОЖИДАЕМАЯ ЦЕНА СДЕЛКИ · с учётом торга» + строка-примирение с медианой ДКП.
  • Единый ru-форматтер: запятая везде (CV 33,6% / 56,2 м² / ≤ 0,5 км), NBSP, один en-dash и одна точность денег.
  • «В РАСЧЁТЕ» → «АКТУАЛЬНО»; убран «ШАГ 1/1».
  • Скрыты all-dash колонки: ИСТОЧНИКОВ (07), ОБЪЯВЛЕНИЕ ДО СДЕЛКИ (04) — data-driven.
  • scale-fit артборда: на 1366×768 (scale 0.75) и 1440×900 (0.879) ужимается, СВОДКА не режется.
  • Мёртвые контролы: CRM-дропдаун задизейблен («скоро», без ▼); crosshair-двойник на карте убран.
  • Метки мини-карты расклеены (greedy non-overlap, ≤3 пина).
  • Зум мини-карты честный: min=1 — за блюпринтом нет реальной подложки, отдаление больше не открывает пустые края (по репорту юзера).
  • axe = 0 violations на экране результата (после лендмарков + фиксов контраста/drawer).

Осталось (отдельными заходами):

  • P2 (HIGH контент/иерархия): нейтральный дефолт опц.дропдаунов («Не указано»→null), blue-tint фото здания, тик/ромб вместо draggable-ручек на range-барах, валидация у поля, «ты»/«вы»→«вы», жаргон (CV/P25–P75/эталон/asking/POI), даты ДКП «01.01.2026»→«янв 2026», словарь брендов источников, колонки площадь/комнаты/этаж в таблице аналогов, зум оси Y графика истории, accent-синий только на CTA+ключевую цифру.
  • P3 (CRITICAL a11y): вся click-only <div>-интерактивность → нативные <button>/<select>/role+клавиши (дропд履ауны/балкон/карта/табы/«Подробнее»/стрелки), оверлеи → role=dialog+focus-trap+Esc+inert, <label htmlFor>/aria-invalid на инпутах. (P1 добавил лендмарки/focus-visible/disabled-состояния — это частичный a11y; полный keyboard-проход — тут.)
  • Backlog (LOW): дубль СВОДКА↔02, плейсхолдеры ЭТАЖ/ГОД, disable табов 04-07 до оценки, hero-финиш, пустая house-history empty-copy.
## ✅ P1 (quick-wins) — задеплоено на прод и проверено Ветки: **PR #2066** (основной P1) + **PR #2069** (a11y-фоллоуап). Оба смержены, `deploy-tradein.yml` зелёный, контейнер `tradein-frontend` пересобран. Прод-QA под `pilottest` на реальной оценке (Екатеринбург, Белинского 86 → 41 аналог / 42 сделки). **Сделано:** - [x] **CTA «ОЦЕНИТЬ КВАРТИРУ»** → solid brand-blue + белый текст (доминирует над тоглом «ДА»). - [x] **Лендмарки** `<nav>/<main>/<footer>` (display:contents, 0 визуальных изменений). - [x] **`:focus-visible`** HUD-glow на инпутах + CTA (вместо `outline:none`). - [x] **Провенанс из data, единый счётчик**: footer «ПОСТРОЕНО ПО 41 АНАЛОГУ И 42 СДЕЛКАМ» из `meta.builtOn`; `ИСТОЧНИКОВ X/7` = число залитых плиток = оверлей (всё `4/7`, через `activeSourceCount`); убраны хардкоды «6/10», «2/7», «Avito·10», «из 2 источников». - [x] **КОЭФ.ЛОКАЦИИ** → muted-пилюля «скоро» (не accent-«—»); контраст AA-fixed (#2069). - [x] **Карточка 02** → «ОЖИДАЕМАЯ ЦЕНА СДЕЛКИ · с учётом торга» + строка-примирение с медианой ДКП. - [x] **Единый ru-форматтер**: запятая везде (CV 33,6% / 56,2 м² / ≤ 0,5 км), NBSP, один en-dash и одна точность денег. - [x] **«В РАСЧЁТЕ» → «АКТУАЛЬНО»**; убран «ШАГ 1/1». - [x] **Скрыты all-dash колонки**: ИСТОЧНИКОВ (07), ОБЪЯВЛЕНИЕ ДО СДЕЛКИ (04) — data-driven. - [x] **scale-fit артборда**: на 1366×768 (scale 0.75) и 1440×900 (0.879) ужимается, СВОДКА не режется. - [x] **Мёртвые контролы**: CRM-дропдаун задизейблен («скоро», без ▼); crosshair-двойник на карте убран. - [x] **Метки мини-карты расклеены** (greedy non-overlap, ≤3 пина). - [x] **Зум мини-карты честный**: min=1 — за блюпринтом нет реальной подложки, отдаление больше не открывает пустые края (по репорту юзера). - [x] **axe = 0 violations** на экране результата (после лендмарков + фиксов контраста/drawer). **Осталось (отдельными заходами):** - **P2** (HIGH контент/иерархия): нейтральный дефолт опц.дропдаунов («Не указано»→null), blue-tint фото здания, тик/ромб вместо draggable-ручек на range-барах, валидация у поля, «ты»/«вы»→«вы», жаргон (CV/P25–P75/эталон/asking/POI), даты ДКП «01.01.2026»→«янв 2026», словарь брендов источников, колонки площадь/комнаты/этаж в таблице аналогов, зум оси Y графика истории, accent-синий только на CTA+ключевую цифру. - **P3** (CRITICAL a11y): вся click-only `<div>`-интерактивность → нативные `<button>/<select>`/role+клавиши (дропд履ауны/балкон/карта/табы/«Подробнее»/стрелки), оверлеи → `role=dialog`+focus-trap+Esc+inert, `<label htmlFor>`/`aria-invalid` на инпутах. (P1 добавил лендмарки/focus-visible/disabled-состояния — это частичный a11y; полный keyboard-проход — тут.) - **Backlog** (LOW): дубль СВОДКА↔02, плейсхолдеры ЭТАЖ/ГОД, disable табов 04-07 до оценки, hero-финиш, пустая house-history empty-copy.
Author
Owner

P2 + P3 — задеплоено и проверено на проде

Все PR смержены и задеплоены; прод-QA под pilottest (Екатеринбург, Белинского 86).

P2 — контент/честность/иерархия (PR #2072)

  • Опц. поля не шлют непроверенные дефолты: ТИП/РЕМОНТ → «Не указано»→undefined, БАЛКОН tri-state.
  • Валидация у поля (красная рамка + сообщение под адресом/площадью, все блокеры).
  • Копирайт «вы»; кэш-строка «ДАННЫЕ АКТУАЛЬНЫ»; drawer без жаргона (asking/POI).
  • Даты сделок Росреестра → «янв 2026»; бренды без суффиксов (РОСРЕЕСТР/АВИТО/ДОМКЛИК); «эталон»→«опорная цена».
  • График истории цен: зум оси Y к реальному диапазону + динамические подписи; легенда серии только при наличии линии.
  • 3 цены весомее; медиана-маркеры range-баров → тонкий тик (не draggable); фото здания → синий duotone.
  • Таблицы аналогов/сделок: колонка ПАРАМЕТРЫ (площадь/комнаты/этаж) отдельно от адреса; ↗→› в СВОДКЕ.

P3 — CRITICAL a11y (PR #2076 P3a + #2078 P3b + #2079 контраст)

  • С клавиатуры МОЖНО завершить оценку (headline аудита закрыт, проверено живьём): Dd-дропдауны (КОМНАТ/ТИП/РЕМОНТ/РАДИУС) → role=combobox+listbox (Enter/↑↓/Home/End/Esc/Tab, aria-activedescendant); БАЛКОН → role=radiogroup (стрелки, tri-state); инпуты <label htmlFor>/aria-invalid/aria-describedby; submit с клавиатуры → результат.
  • Оверлеи → role=dialog+aria-modal+focus-trap+Esc+возврат фокуса на триггер; фон inert.
  • Клик-only <div> → нативные <button>: nav-табы (aria-current), user-меню, «Подробнее», строки СВОДКИ, «← К ОЦЕНКЕ», зум карты. 0 визуальных изменений.
  • aria-live="polite" статус оценки (загрузка/готово/недостаточно/ошибка).
  • axe = 0 во ВСЕХ состояниях: главный экран · открытый дропдаун (listbox) · открытый оверлей (dialog). Контраст source-бейджей доведён до AA (#2079).

Остаётся (LOW / follow-up, не блокеры)

  • Автокомплит адреса — список подсказок пока click-only (<div>). Клавиатурное завершение оценки РАБОТАЕТ (адрес геокодится на submit), но сами подсказки стрелками не выбрать → отдельный тикет на combobox для AddressInput.
  • Накопительное перераспределение accent-синего (item 9 визуал) — НЕ делалось осознанно: axe уже 0, а широкое снятие акцента конфликтует с «не ломать HUD-палитру».
  • Backlog LOW из тела issue (дубль СВОДКА↔02, плейсхолдеры ЭТАЖ/ГОД, disable табов 04-07 до оценки, hero-финиш, пустая house-history empty-copy).

Итого CRITICAL + HIGH + основной MEDIUM закрыты и на проде. Сильные стороны (HUD, модель 3 оценок, покрытие состояний, автокомплит, радиус «Авто») не тронуты.

## ✅ P2 + P3 — задеплоено и проверено на проде Все PR смержены и задеплоены; прод-QA под `pilottest` (Екатеринбург, Белинского 86). ### P2 — контент/честность/иерархия (PR #2072) - [x] Опц. поля не шлют непроверенные дефолты: ТИП/РЕМОНТ → «Не указано»→undefined, БАЛКОН tri-state. - [x] Валидация у поля (красная рамка + сообщение под адресом/площадью, все блокеры). - [x] Копирайт «вы»; кэш-строка «ДАННЫЕ АКТУАЛЬНЫ»; drawer без жаргона (asking/POI). - [x] Даты сделок Росреестра → «янв 2026»; бренды без суффиксов (РОСРЕЕСТР/АВИТО/ДОМКЛИК); «эталон»→«опорная цена». - [x] График истории цен: зум оси Y к реальному диапазону + динамические подписи; легенда серии только при наличии линии. - [x] 3 цены весомее; медиана-маркеры range-баров → тонкий тик (не draggable); фото здания → синий duotone. - [x] Таблицы аналогов/сделок: колонка ПАРАМЕТРЫ (площадь/комнаты/этаж) отдельно от адреса; ↗→› в СВОДКЕ. ### P3 — CRITICAL a11y (PR #2076 P3a + #2078 P3b + #2079 контраст) - [x] **С клавиатуры МОЖНО завершить оценку** (headline аудита закрыт, проверено живьём): Dd-дропдауны (КОМНАТ/ТИП/РЕМОНТ/РАДИУС) → `role=combobox`+`listbox` (Enter/↑↓/Home/End/Esc/Tab, `aria-activedescendant`); БАЛКОН → `role=radiogroup` (стрелки, tri-state); инпуты `<label htmlFor>`/`aria-invalid`/`aria-describedby`; submit с клавиатуры → результат. - [x] Оверлеи → `role=dialog`+`aria-modal`+focus-trap+Esc+возврат фокуса на триггер; фон `inert`. - [x] Клик-only `<div>` → нативные `<button>`: nav-табы (`aria-current`), user-меню, «Подробнее», строки СВОДКИ, «← К ОЦЕНКЕ», зум карты. 0 визуальных изменений. - [x] `aria-live="polite"` статус оценки (загрузка/готово/недостаточно/ошибка). - [x] **axe = 0 во ВСЕХ состояниях**: главный экран · открытый дропдаун (listbox) · открытый оверлей (dialog). Контраст source-бейджей доведён до AA (#2079). ### Остаётся (LOW / follow-up, не блокеры) - Автокомплит адреса — список подсказок пока click-only (`<div>`). Клавиатурное завершение оценки РАБОТАЕТ (адрес геокодится на submit), но сами подсказки стрелками не выбрать → отдельный тикет на `combobox` для AddressInput. - Накопительное перераспределение accent-синего (item 9 визуал) — НЕ делалось осознанно: axe уже 0, а широкое снятие акцента конфликтует с «не ломать HUD-палитру». - Backlog LOW из тела issue (дубль СВОДКА↔02, плейсхолдеры ЭТАЖ/ГОД, disable табов 04-07 до оценки, hero-финиш, пустая house-history empty-copy). Итого CRITICAL + HIGH + основной MEDIUM закрыты и на проде. Сильные стороны (HUD, модель 3 оценок, покрытие состояний, автокомплит, радиус «Авто») не тронуты.
Author
Owner

Superseded раундом 2 — #2081

#2081 («UI/UX аудит round 2») — прямое продолжение этого issue, живьём подтверждает бо́льшую часть находок round 1 как ПОЧИНЕННЫЕ (a11y-форма combobox/radiogroup, CTA blue, scale-fit, dialog-оверлеи, КОЭФ.ЛОКАЦИИ→«скоро», footer-провенанс, contrast source-бейджей) и грундит остаток в свежий file:line-аудит текущего кода.

Оставшиеся из этого раунда пункты, не явно упомянутые в #2081 (CRM-дропдаун-заглушка, crosshair-двойник на карте, наложение меток на мини-карте) — переношу как явные follow-up в работу по #2081, чтобы не терять.

Закрываю как superseded — #2081 актуальный источник правды по v2 UX.

## Superseded раундом 2 — #2081 #2081 («UI/UX аудит round 2») — прямое продолжение этого issue, живьём подтверждает бо́льшую часть находок round 1 как ПОЧИНЕННЫЕ (a11y-форма combobox/radiogroup, CTA blue, scale-fit, dialog-оверлеи, КОЭФ.ЛОКАЦИИ→«скоро», footer-провенанс, contrast source-бейджей) и грундит остаток в свежий file:line-аудит текущего кода. Оставшиеся из этого раунда пункты, не явно упомянутые в #2081 (CRM-дропдаун-заглушка, crosshair-двойник на карте, наложение меток на мини-карте) — переношу как явные follow-up в работу по #2081, чтобы не терять. **Закрываю как superseded — #2081 актуальный источник правды по v2 UX.**
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2062
No description provided.