-
Notifications
You must be signed in to change notification settings - Fork 0
Accessibility ru
🌎 Язык: Русский — посмотреть все 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Не обязательно решать заранее. Внутри интерактивной сессии slash-команда
/a11y — это настоящая, работающая панель управления (доступность — не
сатира):
| Введите | Результат |
|---|---|
/a11y |
Показать текущее состояние (вкл/выкл) всех четырёх режимов |
/a11y <mode> |
Переключить один: screen-reader, high-contrast, low-distraction, plain (алиасы вроде sr / hc / calm / mono тоже работают) |
/a11y reset |
Выключить все режимы |
Состояние всегда показывается как явное слово вкл/выкл, никогда только цветом — те самые пользователи, которым это служит, могут не воспринимать цвет. Панель полностью локализована.
Это принципы, которые мы применили — те же применимы к любому терминальному инструменту.
- Семантика важнее декорации. Экранный диктор читает символы. Рамки из псевдографики превращаются в «горизонтальная линия, горизонтальная линия…»; логотип из ASCII-арта — это шум. Режим доступности заменяет визуальную структуру словами: заставка объявляет «LockedIn CLI» как текст, а карточки получают ориентиры («Пост:», «(конец поста)»), чтобы пользователи знали, где начинается и заканчивается блок.
- Никогда не полагайтесь только на цвет или иконки. Смысл, который несёт только цвет или эмодзи, невидим для некоторых пользователей. Держите текст осмысленным с выключенным цветом — например, «Установлена связь с Ava» читается нормально после того, как ✔ исчезла.
- Предоставляйте текстовые альтернативы / убирайте шум. Декоративные эмодзи зачитываются вслух многословно («📥» → «лоток входящих»). Режим доступности убирает чисто декоративные глифы и оставляет слова; низкая отвлекаемость убирает громкие эмодзи, но сохраняет раскладку для зрячих пользователей, которым нужен просто покой.
-
Уважайте сниженное движение. Анимация (брайлевский спиннер) — это отвлечение
и может быть вестибулярным триггером. Режимы доступности и низкой отвлекаемости
не анимируют — они печатают статус один раз, статически. Это отражает
prefers-reduced-motionиз веба. - Предлагайте высокую контрастность. Низкоконтрастный «приглушённо-серый» вторичный текст проваливает контраст WCAG для многих пользователей. Режим высокой контрастности меняет его на чисто-белый и делает акценты ярче.
- Снижайте когнитивную нагрузку. Помимо зрения, некоторым пользователям нужно меньше: меньше украшений, без движения, без эмодзи. Это первоклассный режим здесь, а не запоздалая мысль.
-
Соблюдайте соглашения платформы. CLI уже уважает
NO_COLOR; он также трактуетTERM=dumb(что экспортируют многие оболочки экранных дикторов и Emacs) как «переходи в режим доступности» и читаетLOCKEDIN_REDUCE_MOTION. Обнаружение уже существующих сигналов пользователя лучше, чем заставлять его настраивать ещё одну вещь. - Сделайте это тестируемым и держите протестированным. Доступность, которой нет в тестовом барьере, гниёт. Набор утверждает, что доступный вывод не содержит декоративных глифов, что ориентиры присутствуют, что высокая контрастность меняет палитру, а низкая отвлекаемость остаётся выровненной по рамкам — на каждом языке.
Направленное форматирование тоже 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.
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.