A11Y-01 | Invoice editor | 2.1.1 | Critical | Date picker opens on click only; field is read-only | DatePicker | Allow typing; ARIA date picker dialog pattern |
A11Y-02 | Invoice editor | 4.1.2 | Serious | Customer selector has no role, name or expanded state | Select | Native select or ARIA combobox |
A11Y-03 | Invoice editor | 4.1.2 | Serious | Currency and VAT selectors not reachable with arrow keys | Select | Same component fix as A11Y-02 |
A11Y-04 | Invoice list | 1.1.1 | Serious | Row action icons (download, duplicate, delete) have no name | IconButton | aria-label with invoice number |
A11Y-05 | Invoice editor | 3.3.1 | Serious | Errors shown only by a red border | FormField | Text error linked with aria-describedby; aria-invalid |
A11Y-06 | Customer page | 3.3.1 | Serious | Same form error pattern on customer form | FormField | Same component fix |
A11Y-07 | Invoice editor | 3.3.3 | Serious | No suggestion for invalid VAT number or IBAN | FormField | Explain the expected format |
A11Y-08 | All pages | 1.4.3 | Serious | Grey secondary text #9CA3AF on white (2.5:1) | Theme | Use #6B7280 (4.8:1) or darker |
A11Y-09 | Reports | 1.4.3 | Serious | Chart axis labels 2.8:1 | Chart | Darker label colour |
A11Y-10 | Invoice editor | 1.4.11 | Moderate | Input borders 1.9:1 against background | Theme | Border colour with ≥ 3:1 |
A11Y-11 | Invoice editor | 1.4.10 | Moderate | Line items need horizontal scrolling at 320 px | LineItems | Stack lines as cards below 600 px |
A11Y-12 | Reports | 1.4.10 | Moderate | Report table cut off at 400% zoom | DataTable | Scrollable region with caption, or reflow |
A11Y-13 | Portal invoice | 2.4.7 | Moderate | Focus outline removed on buttons | Portal theme | Visible :focus-visible style |
A11Y-14 | Portal payment | 2.4.7 | Moderate | Focus outline removed on payment form | Portal theme | Same fix |
A11Y-15 | Invoice editor | 2.4.11 | Moderate | Sticky footer covers the focused field | Layout | scroll-padding-bottom = footer height |
A11Y-16 | Invoice editor | 1.3.1 | Moderate | Line items are divs; no table semantics | LineItems | Table with header cells or grid roles |
A11Y-17 | Dashboard | 1.3.1 | Moderate | KPI tiles use visual headings without heading markup | StatTile | Proper heading levels |
A11Y-18 | Reports | 1.1.1 | Moderate | Revenue chart has no text alternative | Chart | Data table or summary text |
A11Y-19 | Invoice editor | 4.1.3 | Moderate | 'Saved' toast not announced to screen readers | Toast | role=status / aria-live polite |
A11Y-20 | Invoice list | 4.1.3 | Moderate | Bulk action result not announced | Toast | Same fix |
A11Y-21 | Invoice list | 2.5.8 | Minor | Row action icons 16 × 16 px | IconButton | 24 × 24 px target or spacing |
A11Y-22 | Dashboard | 2.5.8 | Minor | Chart legend toggles 14 × 14 px | Chart | Larger hit area |
A11Y-23 | Login | 1.4.3 | Minor | Placeholder text 2.6:1 | Theme | Same as A11Y-08 |
A11Y-24 | Customer page | 1.1.1 | Minor | Customer logo alt text is the file name | Avatar | Use the customer name |
A11Y-25 | Portal payment | 4.1.2 | Minor | Card field iframe has no accessible name | Payment form | title attribute on the provider iframe |
A11Y-26 | Reports | 1.3.1 | Minor | Table header cells are styled td elements | DataTable | Use th with scope |
A11Y-27 | Invoice list | 2.1.1 | Minor | Row click opens invoice; no keyboard equivalent besides the link | DataTable | Keep link as the target; remove row click or add Enter |
A11Y-28 | Dashboard | 1.4.11 | Minor | Chart series distinguished by colour only (also 1.4.1) | Chart | Patterns or direct labels |