Перейти к основному содержимому

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.mjsPASS
npm run check после финальной очистки CSS-классаPASS, exit 0; format/lint/CSS/typecheck/unit/build
git diff --checkPASS
npm run qualityPASS, exit 0
Format, ESLint, Stylelint, typecheck, buildPASS в quality
Unit и coveragePASS 61 tests / 16 files; lines 97.01%, changed-line coverage PASS
Architecture / cyclesPASS 14 fixtures; 94 runtime source files, без циклов
BundlePASS: routes 85.98 / 80.98 / 78.10 KiB gzip; shared 75.33 KiB
Links / SEOPASS для всех трёх prerendered страниц
AccessibilityPASS 24 браузерных проверки
LighthousePASS все 3 routes mobile/desktop; Performance 98–100, остальные категории 100
Полный E2E, включая visual и mobile reset / long words / calculatorPASS 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 — отдельного разрешения не было.