Skip to content

Accessibility ru

James Morris edited this page Jul 29, 2026 · 1 revision

Доступность

🌎 Язык: Русскийпосмотреть все 33 языка

LockedIn CLI — это шутка, но его доступность — нет. Настолько визуально насыщенный терминальный интерфейс — градиентный логотип, карточки из псевдографики, брайлевские спиннеры, эмодзи — по-настоящему трудно использовать со вспомогательными технологиями, если не проектировать под них. Эта страница объясняет что делает CLI, как это включить и общие лучшие практики за этим (полезные далеко за пределами этого проекта).

Четыре режима

Режим Флаг Env Что делает
Экранный диктор --accessible (--a11y, --screen-reader) LOCKEDIN_ACCESSIBLE=1, или TERM=dumb Чистый линейный простой текст: без рамок, без ASCII-арта, без движения спиннера, без декоративных глифов; цвет выключен; короткая подсказка; семантические ориентиры («Пост:» … «(конец поста)»).
Высокая контрастность --high-contrast (--hc) LOCKEDIN_HIGH_CONTRAST=1 Высококонтрастная палитра для слабовидящих: чисто-белый вторичный текст, ярче акценты, без приглушения, сплошной акцент вместо низкоконтрастного градиента.
Низкая отвлекаемость --low-distraction (--calm, --reduce-motion) LOCKEDIN_LOW_DISTRACTION=1, LOCKEDIN_REDUCE_MOTION=1 Сниженное движение (без анимации спиннера), без декоративных эмодзи, спокойный сплошной цвет — сохраняет визуальную раскладку. Для сниженной когнитивной/сенсорной нагрузки.
Простой / монохромный --plain (--mono, --monochrome) LOCKEDIN_PLAIN=1, или NO_COLOR=1 Отключает весь цвет, сохраняя полную раскладку, рамки и эмодзи. Для терминалов со слабой поддержкой цвета, логирования или по предпочтению. Переопределяет FORCE_COLOR.

Они комбинируются: --high-contrast --low-distraction даёт яркий, спокойный интерфейс без эмодзи; пользователь экранного диктора на терминале TERM=dumb получает режим доступности автоматически. Когда режимы конфликтуют, побеждает более ограничивающий — монохром бьёт цветовую палитру, а режим экранного диктора вытесняет простой.

lockedin --accessible post
lockedin --high-contrast
lockedin --plain post
LOCKEDIN_LOW_DISTRACTION=1 lockedin aura

Переключение режимов внутри сессии: /a11y

Не обязательно решать заранее. Внутри интерактивной сессии slash-команда /a11y — это настоящая, работающая панель управления (доступность — не сатира):

Введите Результат
/a11y Показать текущее состояние (вкл/выкл) всех четырёх режимов
/a11y <mode> Переключить один: screen-reader, high-contrast, low-distraction, plain (алиасы вроде sr / hc / calm / mono тоже работают)
/a11y reset Выключить все режимы

Состояние всегда показывается как явное слово вкл/выкл, никогда только цветом — те самые пользователи, которым это служит, могут не воспринимать цвет. Панель полностью локализована.

Лучшие практики за этим

Это принципы, которые мы применили — те же применимы к любому терминальному инструменту.

  1. Семантика важнее декорации. Экранный диктор читает символы. Рамки из псевдографики превращаются в «горизонтальная линия, горизонтальная линия…»; логотип из ASCII-арта — это шум. Режим доступности заменяет визуальную структуру словами: заставка объявляет «LockedIn CLI» как текст, а карточки получают ориентиры («Пост:», «(конец поста)»), чтобы пользователи знали, где начинается и заканчивается блок.
  2. Никогда не полагайтесь только на цвет или иконки. Смысл, который несёт только цвет или эмодзи, невидим для некоторых пользователей. Держите текст осмысленным с выключенным цветом — например, «Установлена связь с Ava» читается нормально после того, как ✔ исчезла.
  3. Предоставляйте текстовые альтернативы / убирайте шум. Декоративные эмодзи зачитываются вслух многословно («📥» → «лоток входящих»). Режим доступности убирает чисто декоративные глифы и оставляет слова; низкая отвлекаемость убирает громкие эмодзи, но сохраняет раскладку для зрячих пользователей, которым нужен просто покой.
  4. Уважайте сниженное движение. Анимация (брайлевский спиннер) — это отвлечение и может быть вестибулярным триггером. Режимы доступности и низкой отвлекаемости не анимируют — они печатают статус один раз, статически. Это отражает prefers-reduced-motion из веба.
  5. Предлагайте высокую контрастность. Низкоконтрастный «приглушённо-серый» вторичный текст проваливает контраст WCAG для многих пользователей. Режим высокой контрастности меняет его на чисто-белый и делает акценты ярче.
  6. Снижайте когнитивную нагрузку. Помимо зрения, некоторым пользователям нужно меньше: меньше украшений, без движения, без эмодзи. Это первоклассный режим здесь, а не запоздалая мысль.
  7. Соблюдайте соглашения платформы. CLI уже уважает NO_COLOR; он также трактует TERM=dumb (что экспортируют многие оболочки экранных дикторов и Emacs) как «переходи в режим доступности» и читает LOCKEDIN_REDUCE_MOTION. Обнаружение уже существующих сигналов пользователя лучше, чем заставлять его настраивать ещё одну вещь.
  8. Сделайте это тестируемым и держите протестированным. Доступность, которой нет в тестовом барьере, гниёт. Набор утверждает, что доступный вывод не содержит декоративных глифов, что ориентиры присутствуют, что высокая контрастность меняет палитру, а низкая отвлекаемость остаётся выровненной по рамкам — на каждом языке.

Направленное форматирование тоже fail-closed. Арабский, персидский, иврит и урду не выдают никаких bidi-управляющих символов, пока пользователь явно не задаст LOCKEDIN_BIDI=on для терминала, о котором известно, что он поддерживает isolates; режим экранного диктора убирает их даже тогда. Никакое зондирование TTY или allowlist терминалов не может переопределить эту безопасную настройку по умолчанию.

Как это устроено (для любопытных)

  • a11yFilter(s) убирает декоративный Unicode (псевдографика, блоки, геометрические, технические, dingbats, брайль, эмодзи) и прижимает текст влево — применяется ко всему выводу в режиме доступности.
  • emojiFilter(s) — более лёгкий фильтр низкой отвлекаемости: он убирает только громкие эмодзи/символы и сохраняет псевдографику, маркеры, стрелки и ANSI-цвет, так что визуальная раскладка выживает.
  • Объект цвета C заменяется на высококонтрастную палитру на месте; градиенты откатываются к сплошному акценту, когда включена высокая контрастность или низкая отвлекаемость. Простой режим принудительно делает каждую запись C пустой (цвет полностью выключен, даже под FORCE_COLOR), оставляя раскладку нетронутой.
  • renderSplash, спиннер, renderPrompt и card имеют семантические ветки для режима доступности (простой текст, без движения, ориентиры).
  • Обнаружение живёт в detectAccessible / detectHighContrast / detectLowDistraction / detectPlain; точка входа применяет их перед рендерингом. Внутрисессионная команда /a11y (handleA11y + renderA11yStatus) переключает то же состояние уровня модуля в реальном времени.

Как сохранить это работающим при добавлении функции

Чек-лист ревью из учебника включает шаг доступности, и это хорошая привычка где угодно:

Запустите lockedin --accessible <ваша команда> и убедитесь, что это читается как чистый простой текст — никакие новые декоративные глифы не проскальзывают мимо фильтра — и что любой новый структурированный блок имеет ориентир. Затем попробуйте --high-contrast, --low-distraction и --plain (который должен выдавать никаких кодов цвета, но сохранять раскладку). Новому видимому пользователю тексту нужен ключ в каждом языковом бандле, чтобы панель /a11y и справка оставались переведёнными.


Сатира. Не связано с LinkedIn. GPL-3.0-or-later.

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally