В солнечный полдень дизайнер влюбляется в неоновые градиенты, а вечером на production-сборке баг-репорты: «Кнопку невозможно прочитать в режиме тёмной темы!». Слишком знакомо? За пять минут мы соберём правила, которые уберегут ваш яркий интерфейс от жалоб на контраст и приведут его к строгим числам WCAG — без выцветания ощущения «вау».

  • Контраст ≠ унылый серый: управляем палитрой математикой, а не запретами.
  • WCAG 2.2 допускает цветовые ходы, если учитывать состояние, толщину и размер шрифта.
  • Токенизация и CSS custom properties — быстрый лифт для построения адаптивной темы.
  • Автотесты в CI ловят ошибки доступности раньше, чем дизайнер скажет «Done».

Зачем WCAG не враг цвету?

Яркий интерфейс быстро создаёт эмоциональную связь с продуктом, но эйфория заканчивается, когда первые пользователи с дальтонизмом включают режим «высокой контрастности». Вместо того чтобы обесцвечивать бренд-цвета, мы введём цифры: контраст 4,5:1 для текста, 3:1 для крупных заголовков и 1,5:1 для декоративных элементов. Числа — рамки, внутри которых можно рисовать хоть кислотными оттенками, если правильно подбирать фон и размер.

Шаги:

  1. Замерьте контраст пары «цвет — фон» с помощью `@storybook/addon-a11y`.
  2. Если ниже порога, увеличьте размер шрифта или толщину символа.
  3. Используйте слой белого/чёрного с альфой 0.1–0.2 для выравнивания контраста.
  4. Зафиксируйте цифры в дизайн-токенах.

css
/* цвета объявлены как CSS custom properties, легко проверять и менять */
:root {
 --brand-pink: #FF277E;      /* яркий фирменный */
 --surface-dark: #141414;    /* фон в dark-теме */
 --on-pink: #FFFFFF;         /* текст на розовом */
}
.button-primary {
 background: var(--brand-pink);
 color: var(--on-pink);
 font-weight: 600;           /* добавляем толщину — контраст растёт */
}

Мини-вывод: строгие числа WCAG задают безопасный периметр, а не ограничивают креатив — считайте их ремнём безопасности для цвета.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Как выстроить контраст и не ослепить?

Глаз воспринимает относительную яркость: при тёмной теме даже умеренный контраст воспринимается слишком резким. Поэтому вместо фиксированного коэффициента используйте логарифмическую формулу APCA (Advanced Perceptual Contrast Algorithm). Она точнее отражает реальное восприятие и входит в черновик WCAG 3.0.

Алгоритм внедрения:

  1. Включите библиотеку `@wcag-tools/apca` во фронтенд-репозиторий.
  2. Создайте JS-утилиту `checkContrast(foreground, background)`.
  3. Поднимите порог до Lc 60 (APCA) для интерактивных элементов.
  4. Подсветите ошибки в Storybook с помощью badge-компонента.
  5. Сообщите дизайнеру прямо в Figma через плагин «A11y — Color».
Элемент Цвет текста Фон APCA Lc Статус
Primary Button `#FFFFFF` `#FF277E` 62
Tag Label `#FF277E` `#FFFFFF` −64
Caption Small `#A8A8A8` `#141414` 41 ⚠ Повысить

Мини-вывод: APCA убирает «слепые зоны» классического контраста и даёт вам научную оптику вместо гадания на глаз.

> Попробуйте проверить свой самый яркий компонент через APCA-калькулятор прямо сейчас — результат удивит.

Проверяем доступность на лету — автоматизация или хаос?

Вручную просматривать контраст каждой кнопки скучно, а пропущенный дефект становится дорогим. CI-проверка с `axe-core` или `pa11y` выполняется за секунды и генерирует отчёт в формате JUnit — его же читает ваша Jira. Вставьте шаг в GitHub Actions, и PR не сольётся, пока не отрегулирован контраст.

CI-чек-лист:

  1. Установите `npm i —save-dev axe-playwright`.
  2. Добавьте спец-тест `axe.checkPage()` к smoke-suite.
  3. Сохраните отчёт XML как build-артефакт.
  4. Настройте «must-pass» правило по числу violations = 0.
  5. Уведомляйте в Slack канал #a11y-alerts.

# .github/workflows/a11y.yml
name: a11y-guard
on: pull_request
jobs:
 axe:
   runs-on: ubuntu-latest
   steps:
     — uses: actions/checkout@v4
     — name: Install deps
       run: npm ci
     — name: Playwright + Axe
       run: npx playwright test —config=axe.conf.ts

Мини-вывод: автоматический «красный свет» в CI дешевле оправданий на ретроспективе.

Финальный чек-лист «яркий интерфейс без нарушений WCAG»

Шаг Инструмент Результат
Замер контраста Storybook A11y 4,5:1 (или Lc 60)
Токенизация цветов CSS custom properties Единое источник правды
APCA-валидация `@wcag-tools/apca` Реалистичное восприятие
CI-тесты `axe-playwright` 0 violations в PR
Документация Figma plugin + Notion Быстрый onboarding
РОССИЙСКИЕ НЕЙРОСЕТИ ДЛЯ ЖИЗНИ И КАРЬЕРЫ В 2025
Присоединяйся к онлайн-вебинару.
В прямом эфире разберем и потестируем лучшие на сегодняшний день отечественные ИИ!
Вы узнаете о том:
  • Выполним базовые задачи на российских нейросетях и посмотрим на результаты!
  • PDF-инструкцию «Как сделать нейрофотосессию из своего фото бесплатно, без иностранных карт и прочих сложностей»
  • Покажем 10+ способов улучшить свою жизнь с ИИ каждому — от ребенка и пенсионера до управленца и предпринимателя
Участвовать бесплатно
ОБЗОРНЫЙ ПРАКТИКУМ ПО НАШУМЕВШИМ НЕЙРОСЕТЯМ
DEEPSEEK И QWEN
За 2 часа сделаем полный обзор новых мощных AI-моделей, которые бросают вызов ChatGPT
Вы узнаете:
  • Возможность получить Доступ в Нейроклуб на целый месяц
  • Как AI ускоряет работу и приносит деньги
  • За 2 часа вы получите четкий план, как начать работать с AI прямо сейчас!
Участвовать бесплатно