Цвета — это токены, а контраст — рассчитанное число
Палитра находится в блоке из 14 переменных, а вторичный текст использует один токен: `--muted: #666b65`. Отношения, пересчитанные по формуле относительной яркости из WCAG на семи фонах сайта: 5,45:1 на белом, 5,15, 5,11, 5,03, 5,02, 4,79 и 4,72. Основной текст, `--ink: #181a19`, даёт 17,49:1 на белом; зелёный акцент `#355c46` — 7,58:1. Когда цвет не дотягивает до порога, меняется токен, а не ведутся споры на совещании.
Компоненты имеют клавиатурный паттерн, а не только вид
Группа вкладок на главной странице использует индекс табуляции с перемещением: только активная вкладка доступна через Tab, остальные выведены из порядка, а стрелки влево/вправо, Home и End перемещают фокус, при этом стандартное поведение клавиши отменено. Это модель из рекомендуемых практик для доступных компонентов, реализованная, а не процитированная. В базовых компонентах сайта есть 21 доступная метка, 7 состояний нажато/не нажато, 3 связи между заголовком и регионом, 2 состояния выбора, 2 региона, которые объявляют изменения, и 2 связи между командой и панелью, которую она контролирует.
Движение имеет кнопку остановки и гаснет по предпочтению системы
На главной странице 38 бесконечно анимированных элементов, запускающихся автоматически, длительностью более пяти секунд — ровно та ситуация, которая регламентируется критерием «Пауза, остановка, скрытие». Все 38 покрыты кнопками паузы: при нажатии анимации переходят в остановленное состояние, а состояние кнопки меняется. Отдельно, при `prefers-reduced-motion: reduce` глобальное правило отменяет любую анимацию и переход, останавливает плавную прокрутку, убирает смещение при наведении мышью и скрывает кнопку паузы. На основной странице стилей семь таких блоков, плюс один в базовой странице.
Видимый индикатор фокуса, только где нужно
Контур 2 px solid, в акцентном зелёном, с отступом 5 px, применён через `:focus-visible` — значит, появляется при навигации с клавиатуры и не при клике мышью. Проверено в браузере, элемент за элементом, в шапке и на первых командах в контенте: четыре разных элемента, один и тот же контур. Нигде в таблице стилей нет удалённого контура без замены.
Формы, которые сообщают свои состояния
В форме контактов сайта метки заданы по умолчанию на полях, ошибка помечена как alert, а подтверждение — как состояние, поэтому экранные читалки озвучивают их без того, чтобы пользователю искать. Ловушка для ботов скрыта правильно: родитель без отображения, помечен как скрытый для вспомогательных технологий и исключён из порядка табуляции. Собственный аудит подтверждает, что правила для подписей, для имён селекторов и для автозаполнения все проходят.
Проверка выполняется инструментом, на реальных страницах
Мы запускаем axe-core 4.10.2 на живой странице, не в тестовой среде, на выборке из десяти страниц, которые покрывают разные шаблоны: главную страницу, каталог, страницу товара, индекс услуг, страницу услуги, матрицу решений, комбинацию из матрицы, контакты, тарифы, статью и юридический документ. Сырой результат выводится на страницу, с числом узлов, а не в виде резюме «соответствует».
Что не прошло, публикуется, а не округляется
Из того же аудита: при ширине 320 px команда в шапке и кнопка меню выходят за экран на 22 px, и страница прокручивается по горизонтали — арифметика даёт 362 px содержимого в контейнере 280 px. В юридических документах ссылки в тексте не отличаются от окружающего текста ничем, кроме цвета, а отношение акцента к основному тексту составляет 1,01:1, значит подчёркивание обязательно. Оба пункта открыты, с описанным исправлением. Мы публикуем их, потому что покупатель, который требует доступность, должен видеть, как выглядит реальный список дефектов.
Без тёмной темы — сказано, а не сымитировано
У сайта нет тёмной темы. Блок токенов объявлен для трёх селекторов, которые получают идентичные значения, а в коде нет ни одного правила для предпочтения схемы системы. Проверено в браузере с эмулированной тёмной схемой: страница остаётся белой. Практическое следствие: все измеренные отчёты по контрасту действительны в обеих схемах. Неприятное следствие: переключатель темы — мёртвый код с точки зрения цвета. Реальная тёмная тема означает полное повторное измерение контраста, а не копирование значений.
Типографика по правилам, а не по предпочтениям
Одна семья для заголовков и текста, с межбуквенным интервалом, настроенным по уровням — более плотным у крупных заголовков, `-0,055em` на уровнях один и два, `-0,035em` на уровне три — и насыщенностью 500 у заголовков. Абзацы используют балансировку строк, чтобы одно слово не оставалось отдельно на последней строке. Контейнер имеет максимальную ширину 1240 px с отступами 48 px, а кнопки имеют одинаковую высоту строки везде. Это правила, записанные в таблице стилей, поэтому они применяются и после того, как мы уйдем.