Композитный скилл для качественной мобильной вёрстки и фронтенда: от правил
(отступы, шрифты, якоря, токены) через сборку к многоуровневой проверке с
отладкой каждого элемента — включая меню и навигацию — и финальному аудиту перед
сдачей. Это «дирижёр»: он держит единый воркфлоу и перенаправляет узкие задачи
соседним скиллам (frontend-design-taste, frontend-perfection, /visual-qa,
/frontend), а сам владеет мобильными правилами и чек-листом отладки навигации.
frontend-design-tastefrontend-a11yfrontend-performancefrontend-testingfrontend-perfectionreferences/debug-menu-nav.md, но воркфлоу
всё равно прогоняйте по уровням.Все числа — в references/tokens.md. Кратко:
overflow-x на <html>/<body> недопустим как
постоянное состояние; ловите элемент-нарушитель через scrollWidth > clientWidth).:target и scroll-margin-top равны
высоте sticky-хедера + отступ (обычно scroll-margin-top: calc(var(--header-h) + 16px)).viewport-fit=cover + env(safe-area-inset-*) для нижней панели
(home indicator) и чёлки. Меню/CTA не должны упираться в индикатор.font-display: swap, мобильная тип-шкала на clamp(),
базовый размер ≥ 16px для body (чтобы не зумíло при фокусе поля в iOS).transparent/currentColor.@media (prefers-reduced-motion: reduce).Каждый уровень — отдельная фаза со своим критерием прохода. Не переходите дальше, пока уровень не «зелёный».
:root с токенами из references/tokens.md (spacing 4/8-сетка,
type-scale, breakpoints, --header-h, safe-area).viewport мета: width=device-width, initial-scale=1, viewport-fit=cover.id и scroll-margin-top.min-width.width:100%, height:auto, loading="lazy", decoding="async",
желательно srcset/sizes.px у блоков контента; контейнер — max-width + padding.Прогоняйте реальные вьюпорты: 320, 360, 390, 414, 768. Для каждого:
document.documentElement.scrollWidth <= window.innerWidth
(нет горизонтального скролла);<a>/<button> ≥ 44px (скрипт в references/mobile-checklist.md);document.fonts.ready);env(safe-area-inset-bottom));#id → getBoundingClientRect().top >= headerBottom - 1.Эстетику и «не шаблонный вид» сверяйте через
frontend-design-tasteи/visual-qa. Контраст/порядок заголовков — черезfrontend-perfection.
Самый частый источник багов. Полный проигрыш — в references/debug-menu-nav.md.
Минимум:
aria-expanded синхронен с видимостью; открытие/закрытие по тапу;Esc закрывает;:focus-visible, логичный Tab-порядок;Через frontend-perfection (skills/frontend-perfection/scripts/audit.js, режим mobile):
| Подзадача | Скилл/команда |
|---|---|
| Палитра, шрифты, «вкус», анти-шаблон | frontend-design-taste |
| Lighthouse, контраст, токены, OG, Security/Privacy/i18n | frontend-perfection |
| Глубокий a11y (ARIA, фокус, скринридер, axe) | frontend-a11y |
| Глубокий perf (заголовки, бандл, CWV, hints) | frontend-performance |
| E2E / визуальная регрессия / контракт API | frontend-testing |
| Скриншот-сверка UI после сборки | /visual-qa |
| Общая оркестрация фронт-задачи | /frontend |
| Баг меню/навигации в одном месте | references/debug-menu-nav.md |
aria-expanded, фокус-ловушка, Esc, закрытие по пункту.frontend-design-taste).Если хотя бы один пункт красный — уровень не пройден, возвращаемся к правкам.
Before editing, record the target routes, supported viewport matrix, browser/device assumptions, and any existing test command. After editing, run the narrowest available browser checks at 320, 360, 390, 414, and 768 pixels, then repeat the affected checks after each fix. A screenshot alone does not prove keyboard, focus, safe-area, or tap-target behavior.
Report blocked checks separately from failed checks: missing browser tooling, unavailable pages, and pre-existing application errors must not become a false PASS. Include viewport, selector, measured dimensions, command, exit status, and artifact path for every failure.