Overview & Background
To ensure FlowFi is inclusive and compliant with WCAG 2.1 AA standards, an accessibility audit and remediation is required across interactive modals, forms, dropdowns, and dynamic stream balance tickers.
Detailed Problem Statement
- Dynamic ticking numbers cause frequent unannounced screen reader changes or excessive noise without ARIA live regions.
- Modal dialogs (
StreamDetailsModal, WalletModal, TopUpModal) lack keyboard focus traps, allowing Tab navigation to bleed into background elements.
- Certain dark mode low-contrast colors fail WCAG AA 4.5:1 ratio requirements.
Technical Specification & Remediation Plan
-
Modal Focus Trapping:
- Implement focus trapping and ESC key dismissal in all modals using
useModalDialog and aria-modal="true".
- Restore focus to trigger element upon modal closure.
-
Live Region Announcements:
- Add
aria-live="polite" and aria-atomic="true" to live ticking balance counters so screen readers announce balance on user query rather than every millisecond.
-
Color Contrast & Keyboard Navigation:
- Audit and adjust Tailwind theme contrast ratios in
frontend/src/app/globals.css to achieve $> 4.5:1$ contrast for standard text and $> 3:1$ for interactive icons.
- Ensure visible
focus-visible:ring-2 outlines on all buttons and form inputs.
-
Automated Testing:
- Add
axe-core automated accessibility test suite in frontend/src/__tests__/a11y.test.tsx.
Target Files
frontend/src/components/dashboard/StreamDetailsModal.tsx
frontend/src/components/wallet/WalletModal.tsx
frontend/src/components/stream-creation/TopUpModal.tsx
frontend/src/app/globals.css
Acceptance Criteria
Overview & Background
To ensure FlowFi is inclusive and compliant with WCAG 2.1 AA standards, an accessibility audit and remediation is required across interactive modals, forms, dropdowns, and dynamic stream balance tickers.
Detailed Problem Statement
StreamDetailsModal,WalletModal,TopUpModal) lack keyboard focus traps, allowing Tab navigation to bleed into background elements.Technical Specification & Remediation Plan
Modal Focus Trapping:
useModalDialogandaria-modal="true".Live Region Announcements:
aria-live="polite"andaria-atomic="true"to live ticking balance counters so screen readers announce balance on user query rather than every millisecond.Color Contrast & Keyboard Navigation:
frontend/src/app/globals.cssto achievefocus-visible:ring-2outlines on all buttons and form inputs.Automated Testing:
axe-coreautomated accessibility test suite infrontend/src/__tests__/a11y.test.tsx.Target Files
frontend/src/components/dashboard/StreamDetailsModal.tsxfrontend/src/components/wallet/WalletModal.tsxfrontend/src/components/stream-creation/TopUpModal.tsxfrontend/src/app/globals.cssAcceptance Criteria
axe-coreaudit.