Setyenv · Docs
  • English
  • Spanish
  • Chinese
  • Japanese
  • Arabic
  • German
  • French
  • Hindi
  • Indonesian
  • Italian
  • Dutch
  • Portuguese
  • Russian
  • Turkish

Accessibility floor

The front-end mount components ship the following a11y primitives:

  • All form controls have a <label for="…"> linked to their input id; required fields get a CSS-marked star via .pfm-field-required.
  • Form root carries aria-busy during submission.
  • Success banner uses role="status" + aria-live="polite" and focuses itself on appearance so screen readers announce it.
  • Error banners use role="alert" + aria-live="assertive".
  • Honeypot wrapper is aria-hidden="true" + tabindex="-1" so it is invisible to assistive tech and unreachable by keyboard.
  • Action button surfaces aria-busy during invocation.
  • Logical CSS properties throughout (margin-inline-start, inset-inline-start, border-inline-start) make RTL mirroring automatic; the frontend-rtl.css companion is enqueued automatically when is_rtl() is true.

Known gaps to add later: dialog-style confirmation modal for requires_confirmation actions (currently uses window.confirm which screen readers handle inconsistently); keyboard re-ordering on Kanban (not yet implemented in the front-end bundle).