SITE-LAYOUT-2026-09-18
Цель: убрать лишнюю строку desktop-меню, исправить иерархию и расстояния во всех секциях трёх страниц, использовать полноценный общий footer и надёжно переходить к секциям главной с других страниц.
Источник: запрос пользователя от 18 сентября и два приложенных скриншота.
Предыдущие незакоммиченные изменения разрешено сохранять и продолжать. Ветка:
chore/architecture-migration-complete. Корень: BelfProctor/dist.
Сохраняем маршруты, anchors, факты, metadata, цены и формулы калькулятора, формы и их payload. Мобильное меню сохраняет sticky close и reset scroll. Пользователь явно требует отсутствие desktop close: это исключение из требования AGENTS о видимой кнопке внутри modal; Escape, backdrop, ссылки, focus trap, inert и восстановление состояния сохраняются.
- Regression до исправления: toolbar, spacing, footer, входящий fragment.
- Desktop toolbar скрыт, keyboard focus начинается с первого пункта.
- Общий footer на всех страницах, корректные home anchors и local top.
- Аудит каждой секции и формы home / partners / careers, шесть ширин.
- Входящий hash обрабатывается после React mount и загрузки шрифтов.
- Целевые проверки, ручная проверка actual/diff, нужные baselines.
- Полный
npm run quality, исходные лимиты, итоговый Git status.
Исходный status
M CONTRIBUTING.md
M README.md
M docs/implementation-handoff-report.md
M docs/quality-gates-report.md
M src/features/calculator/Calculator.tsx
M src/features/calculator/CalculatorForm.module.css
M src/features/calculator/CalculatorForm.test.tsx
M src/features/calculator/CalculatorQuote.module.css
M src/features/calculator/CalculatorQuote.tsx
M src/features/calculator/HostingFieldset.module.css
M src/features/calculator/HostingFieldset.tsx
M src/features/calculator/InstallationFieldset.module.css
M src/features/calculator/InstallationFieldset.tsx
M src/features/calculator/ModulesFieldset.module.css
M src/features/calculator/ModulesFieldset.tsx
M src/features/calculator/ScaleFieldset.module.css
M src/features/calculator/ScaleFieldset.tsx
M src/pages/careers/sections/CareersHero/CareersHero.module.css
M src/pages/careers/sections/CareersHero/CareersHero.tsx
M src/pages/home/sections/CalculatorSection/CalculatorSection.module.css
M src/pages/home/sections/CalculatorSection/CalculatorSection.tsx
M src/styles/tokens.css
M src/widgets/site-header/NavigationDialog.module.css
M src/widgets/site-header/NavigationDialog.tsx
M src/widgets/site-header/NavigationDialogResponsive.module.css
M src/widgets/site-header/SiteHeader.test.tsx
M src/widgets/site-header/useNavigationDialog.ts
M tests/e2e/navigation.spec.ts
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-tablet-768-tablet-768-darwin.png
?? AGENTS.md
?? docs/tasks/
?? tests/e2e/calculator-ui.spec.ts
?? tests/e2e/navigation-layout.spec.ts
Доказательства и изменения
Regression evidence
- До исправления
site-layout.spec.ts --project=desktop-1440: FAIL 6. Нужные дефекты: лишний toolbar видим; входящий/#modulesв CSR оставляет секцию на расстоянии примерно 2732 px от нужного положения; отступ подписи широкой карточки модулей главной — 8 px вместо минимум 16. - Первые измерения intro / candidate ошибочно считали горизонтальные колонки вертикальным потоком. Исправлена геометрия теста: расстояние считается по соответствующей оси. Эти два падения не используются как evidence дефекта.
- При аудите исходников и скриншота пользователя: International/Application/ Territory имели 3 px между h2 и объяснением; Resume — 0; внутренние страницы использовали сокращённые отдельные footer.
- Первый общий visual/keyboard прогон: FAIL 48, PASS 155, SKIP 19. Из них 36 — ожидаемая согласованная UI-дельта, 12 — рамка keyboard focus первого desktop пункта имела 1 px. Рамка исправлена до 2 px, assertion сохранён.
Владельцы и обязанности
src/app/HashNavigation.tsx,mountApp.tsx,HashNavigation.test.tsx: обработка fragment после mount, готовности шрифтов, hashchange и pageshow; cleanup listeners/RAF и отсутствие действий после unmount. Работает и для prerender/hydration, и для пустого root в Vite CSR.src/widgets/site-header/NavigationDialog*,useNavigationDialog.ts: toolbar только на mobile, исключение скрытой кнопки из focus trap, видимый focus первого desktop link, растягивание mobile контактного блока. Scroll reset при каждом открытии из предыдущей задачи сохранён.src/widgets/site-footer/SiteFooter.tsx,SiteFooter.module.css: единый footer с брендом, разделами, четырьмя контактами и copyright. Layout: три колонки desktop, бренд над двумя колонками tablet, одна колонка mobile; touch targets mobile минимум 44 px. Убрана ссылка на удалённый CSS-класс.src/pages/partners/PartnersPage.tsx,src/pages/careers/CareersPage.tsx: общий footer через public API; удалены прежние четыре файла отдельных footer. Heroes получили локальныйid="top"для footer navigation.- CSS Modules владельцев секций и форм трёх страниц: масштаб h2, безопасные переносы, межстрочное расстояние, сетки и отступы смысловых блоков; формы получили 24 px gap, 16 px input text и явный keyboard focus.
src/styles/tokens.css: ролиspace-copy,space-related,space-layout.home-utilities.css: согласованная общая шкала section h2. Локальные правила остаются в Modules своих владельцев; global overrides не добавлены.tests/e2e/site-layout.spec.ts: section gaps, heading overflow, общий footer, desktop toolbar/focus/contact bounds и каждый home anchor при переходе с обеих внутренних страниц.navigation.spec.ts,navigation-layout.spec.ts: актуальный desktop/mobile контракт без ослабления keyboard assertions.docs/architecture.md: актуальный общий footer вместо отдельных реализаций. Предыдущие изменения калькулятора и отчётов сохранены.
Аудит всех секций
Каждая перечисленная секция проверена в исходниках и full-page visual на ширинах 390, 430, 768, 1024, 1440, 1920. CSS менялся при наличии проблемы, а не ради изменения каждой строки. Автоматические geometry checks дополняют visual review.
| Страница | Проверенные секции |
|---|---|
/ | Hero и SignalStrip, Platform, Modules, Proctoring, Deployment, Calculator, Custom, Contact, SiteFooter |
/partners/ | Hero, Intro, Types, Benefits, ClientsRegistry, Commission, Rules, Territory, International, Process, Application и форма, SiteFooter |
/careers/ | Hero, CandidateProfile, Responsibilities, Training, Requirements, Resume и форма, SiteFooter |
Связанные heading/description используют 24–32 px, колонки — адаптивный layout gap 32–80 px. International теперь имеет две равные колонки и h2 максимум 64 px с line-height 1.08, описание отделено 32 px. Большие heroes получили line-height 1.02; основная иерархия h1/h2/h3 сохранена. В Platform устранено сложение grid gap и собственного margin описания. В Intro описание выровнено с соседней колонкой desktop, на mobile расстояние задаёт grid gap.
Visual / behavior / SEO delta
- По явному запросу пользователя удалены desktop «Меню BELF» и close button. Mobile sticky close сохранён. Desktop: первый link получает focus, Escape/backdrop/navigation закрывают меню; Tab trap и inert сохранены.
- Home anchors
platform,modules,proctoring,deployment,calculator,contactпроверены с/partners/и/careers/при предыдущем home scroll и отсутствии target в исходном HTML. Итоговое положение учитывает scroll margin. - Ручной просмотр actual/diff всех изменённых visual на шести ширинах выполнен
до копирования эталонов. Осознанно скопированы 48 snapshots: 18 full-page, 18
navigation-closed и 12 navigation-open desktop/tablet. Причины: типографика,
смысловые расстояния, общий footer и удаление desktop toolbar. Mobile open
viewport snapshots прошли без новой дельты; их эталоны в этой задаче не
менялись. После финальных изменений Platform/Intro их 12 full-page actual/diff
повторно просмотрены.
--update-snapshotsне использовался, threshold 0.003 сохранён. - В живом
localhost:5174через CUA проверены отсутствие desktop toolbar, переход из Partners прямо к Calculator, общий footer Home/Partners и International с читаемым разрывом heading/description. - Routes, title/description/canonical, JSON-LD, pricing/model и form payload
сохранены. Footer теперь содержит crawlable ссылки главной
/#…на всех маршрутах; «Наверх» ведёт к текущему hero, контакты остаются из shared data.
Команды и результаты
| Проверка | Результат |
|---|---|
| Целевой regression до исправлений | FAIL; причины указаны выше |
| Targeted site-layout 390/1440 после исправлений | PASS 11, SKIP 1 |
| Финальный navigation + site-layout до принятия новой visual дельты | PASS 168, SKIP 6, FAIL 24 только ожидаемых snapshots |
node scripts/check-source-limits.mjs | PASS |
npm run check после финальной очистки CSS-класса | PASS, exit 0; format/lint/CSS/typecheck/unit/build |
git diff --check | PASS |
npm run quality | PASS, exit 0 |
| Format, ESLint, Stylelint, typecheck, build | PASS в quality |
| Unit и coverage | PASS 61 tests / 16 files; lines 97.01%, changed-line coverage PASS |
| Architecture / cycles | PASS 14 fixtures; 94 runtime source files, без циклов |
| Bundle | PASS: routes 85.98 / 80.98 / 78.10 KiB gzip; shared 75.33 KiB |
| Links / SEO | PASS для всех трёх prerendered страниц |
| Accessibility | PASS 24 браузерных проверки |
| Lighthouse | PASS все 3 routes mobile/desktop; Performance 98–100, остальные категории 100 |
| Полный E2E, включая visual и mobile reset / long words / calculator | PASS 245, SKIP 19 по неприменимым viewport условиям, FAIL 0 |
Lighthouse lab LCP mobile 1954–2104 ms, desktop 484–525 ms, CLS максимум 0.009. Это лабораторные значения; полевой INP/индексация не подтверждаются этим запуском.
NOT RUN: реальный iPhone Safari и production deployment. Проверки браузера выполнены Chromium с Desktop Chrome / Pixel viewport; native Safari отдельно не запускался. Внешние публикации и отправка форм не выполнялись.
Блокеров локальной задачи нет. Commit/push/deploy не выполнялись. Рабочее дерево содержит ранее разрешённые и текущие изменения; ничего не откатывалось.
Итоговый Git status
M CONTRIBUTING.md
M README.md
M docs/architecture.md
M docs/implementation-handoff-report.md
M docs/quality-gates-report.md
M src/app/mountApp.tsx
M src/features/calculator/Calculator.tsx
M src/features/calculator/CalculatorForm.module.css
M src/features/calculator/CalculatorForm.test.tsx
M src/features/calculator/CalculatorQuote.module.css
M src/features/calculator/CalculatorQuote.tsx
M src/features/calculator/HostingFieldset.module.css
M src/features/calculator/HostingFieldset.tsx
M src/features/calculator/InstallationFieldset.module.css
M src/features/calculator/InstallationFieldset.tsx
M src/features/calculator/ModulesFieldset.module.css
M src/features/calculator/ModulesFieldset.tsx
M src/features/calculator/ScaleFieldset.module.css
M src/features/calculator/ScaleFieldset.tsx
M src/pages/careers/CareersPage.tsx
M src/pages/careers/components/ResumeForm/ResumeForm.module.css
M src/pages/careers/sections/CandidateProfileSection/CandidateProfileSection.module.css
D src/pages/careers/sections/CareersFooter/CareersFooter.module.css
D src/pages/careers/sections/CareersFooter/CareersFooter.tsx
M src/pages/careers/sections/CareersHero/CareersHero.module.css
M src/pages/careers/sections/CareersHero/CareersHero.tsx
M src/pages/careers/sections/RequirementsSection/RequirementsSection.module.css
M src/pages/careers/sections/ResponsibilitiesSection/ResponsibilitiesSection.module.css
M src/pages/careers/sections/ResumeSection/ResumeSection.module.css
M src/pages/careers/sections/TrainingSection/TrainingSection.module.css
M src/pages/home/sections/CalculatorSection/CalculatorSection.module.css
M src/pages/home/sections/CalculatorSection/CalculatorSection.tsx
M src/pages/home/sections/ClosingSections.module.css
M src/pages/home/sections/HeroSection.module.css
M src/pages/home/sections/ModulesSection.module.css
M src/pages/home/sections/PlatformSection.module.css
M src/pages/home/sections/ProctoringSection.module.css
M src/pages/partners/PartnersPage.tsx
M src/pages/partners/components/ApplicationForm/ApplicationForm.module.css
M src/pages/partners/sections/ClientsRegistry/ClientsRegistry.module.css
M src/pages/partners/sections/CommissionSection/CommissionSection.module.css
M src/pages/partners/sections/InternationalSection/InternationalSection.module.css
M src/pages/partners/sections/PartnerBenefitsSection/PartnerBenefitsSection.module.css
M src/pages/partners/sections/PartnerTypesSection/PartnerTypesSection.module.css
D src/pages/partners/sections/PartnersFooter/PartnersFooter.module.css
D src/pages/partners/sections/PartnersFooter/PartnersFooter.tsx
M src/pages/partners/sections/PartnersHero/PartnersHero.module.css
M src/pages/partners/sections/PartnersHero/PartnersHero.tsx
M src/pages/partners/sections/PartnershipApplicationSection/PartnershipApplicationSection.module.css
M src/pages/partners/sections/PartnershipIntroSection/PartnershipIntroSection.module.css
M src/pages/partners/sections/PartnershipProcessSection/PartnershipProcessSection.module.css
M src/pages/partners/sections/PartnershipRulesSection/PartnershipRulesSection.module.css
M src/pages/partners/sections/TerritorySection/TerritorySection.module.css
M src/styles/home-utilities.css
M src/styles/tokens.css
M src/widgets/site-footer/SiteFooter.module.css
M src/widgets/site-footer/SiteFooter.tsx
M src/widgets/site-header/NavigationDialog.module.css
M src/widgets/site-header/NavigationDialog.tsx
M src/widgets/site-header/NavigationDialogResponsive.module.css
M src/widgets/site-header/SiteHeader.test.tsx
M src/widgets/site-header/useNavigationDialog.ts
M tests/e2e/navigation.spec.ts
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-careers-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-home-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/full-page-partners-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-careers-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-home-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-closed-partners-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-careers-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-home-tablet-768-tablet-768-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-desktop-1440-desktop-1440-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-desktop-1920-desktop-1920-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-mobile-390-mobile-390-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-mobile-430-mobile-430-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-tablet-1024-tablet-1024-darwin.png
M tests/e2e/navigation.spec.ts-snapshots/navigation-open-partners-tablet-768-tablet-768-darwin.png
?? AGENTS.md
?? docs/tasks/
?? src/app/HashNavigation.test.tsx
?? src/app/HashNavigation.tsx
?? tests/e2e/calculator-ui.spec.ts
?? tests/e2e/navigation-layout.spec.ts
?? tests/e2e/site-layout.spec.ts
Commit: NOT RUN. Push: NOT RUN. Deploy: NOT RUN — отдельного разрешения не было.