Правила
- Не убивайте фокус: видимый
:focus-visible outline/кольцо.
- Связка
<label for> — кликабельная зона и имя для AT.
- Контраст текста, границ, placeholder ≠ единственная подсказка.
- Состояния
:invalid/ошибки — текстом рядом, не только цветом.
- Кастомный checkbox/radio — сохраняйте нативный input (visually-hidden) +
label, или ARIA-паттерн целиком.
input:focus-visible {
outline: 2px solid var(--focus);
outline-offset: 2px;
}
input:disabled { opacity: 0.6; cursor: not-allowed; }
accent-color помогает нативным контролам без полного restyle. appearance: none — только если вы реально рисуете UI и не ломаете клавиатуру.
Итог
Доступная стилизация форм = нативная семантика + видимый фокус + понятные ошибки, а не «красивый div вместо input».