Экспертиза · UI/UX дизайн
Система дизайна, в которой контраст рассчитан, движение имеет кнопку остановки, а то, что не проходит проверку, написано прямо.
Мы работаем с цветовыми токенами с рассчитанным коэффициентом контраста, шаблонами клавиатуры, проверенными элемент за элементом, и анимациями, которые останавливаются по системной настройке. Мы проверяем инструментом, на реальных страницах, и публикуем даже то, что не прошло проверку.
Уже построеноСистема работает на этом сайте и её можно проверить. Токен `--muted: #666b65` даёт от 4,72:1 до 5,45:1 на семи фонах сайта — мы пересчитали это по формуле яркости из WCAG, а не взяли из инструмента. Восемь цветов, записанных прямо в таблице стилей, давали 2,88–4,49:1; мы нашли их с помощью axe-core 4.10.2, запущенного на десяти живых страницах, и заменили токеном, а исправление уже находится в таблице, отдаваемой в production. Вторая проверяемая реализация: механизм остановки анимаций — 38 элементов, бесконечно анимированных на главной странице, все прикрыты кнопкой паузы, плюс глобальное правило, которое отменяет анимации при `prefers-reduced-motion: reduce`.
Большинство «систем дизайна» — это палитра и список компонентов. Наша начинается с более скучной и полезной вещи: у каждого цвета текста рассчитано отношение контраста к каждому фону, на котором он реально появляется. Не «выглядит хорошо», а число. Токен вторичного текста на этом сайте, `--muted: #666b65`, даёт от 4,72:1 до 5,45:1 на семи используемых фонах. Требуемый порог для мелкого текста — 4,5:1.
Это число не появилось из здравого смысла. Мы запустили axe-core 4.10.2 на десяти страницах собственного сайта, и единственным систематически нарушаемым правилом WCAG был контраст: от 31 до 43 узлов на страницу, из которых 31 приходился на шапку и подвал, то есть множились на все 147 адресов. Восемь цветов, заданных прямо в таблице стилей, давали от 2,88:1 до 4,49:1. Самый тяжёлый, при 10 px и 3,72:1, был именно строкой с юридическими ссылками — путём, по которому человек попадает, когда хочет воспользоваться своим правом.
Вторая часть системы — движение, рассматриваемое как функция, а не как декор. На главной странице 38 бесконечно анимированных элементов. Все они покрыты кнопкой паузы: при нажатии переходят в остановленное состояние, метка меняется, и состояние объявляется для экранных дикторов. Отдельно глобальное правило отменяет любую анимацию и переход, когда система запрашивает уменьшенное движение, останавливает плавную прокрутку и скрывает саму кнопку паузы, которая становится ненужной. Мы проверили и классическую ловушку — анимацию, которая начинается с почти нулевой непрозрачности и оставляет контент невидимым при отмене: здесь ее нет.
Остальное — дисциплина: видимый индикатор фокуса, 2 px, только при навигации с клавиатуры; перемещение стрелками в группах вкладок по рекомендованной модели; формы с ошибками, объявляемыми как alert, и подтверждениями, объявляемыми как состояние. И правило, которого мы держимся жёстко: то, что мы не смогли проверить, пишется как непроверенное. В собственном аудите есть раздел ограничений инструмента, и два найденных там дефекта всё ещё открыты — они ниже, с названиями.