aria-describedby: связать поле с текстом ошибки
id подсказки и сообщения валидации.
`<input aria-describedby="email-hint email-error">` объединяет подсказку и ошибку: оба блока с уникальными `id` читаются после label.
Не заменяйте видимый текст ошибки только aria — пользователи без скринридера тоже должны видеть сообщение.
- aria-describedby — MDN — Связь с описанием.
- Form validation — WAI-ARIA APG — Паттерны форм.
Live region
Для динамической ошибки после submit добавьте `aria-live="polite"` на контейнер ошибки.