What
components/dashboard/AccountPortfolioTable.tsx renders the account portfolio as a <table>, but the header cells carry no scope:
<thead>
<tr>
<th>Account</th>
<th>State</th>
<th>Limit utilization</th>
<th>Evidence</th>
<th>Owner</th>
<th aria-label="Open account" />
</tr>
</thead>
Without scope="col", a screen reader cannot reliably associate each cell with its column, so a row is announced as a run of unlabelled values — "AtlasPay Europe, Enterprise, United Kingdom, Expansion ready, 92%, 94%, Elena Rossi" — with no indication which number is the limit utilization and which is evidence coverage. On this screen those two numbers mean very different things.
There is also no <caption>, so the table has no accessible name.
Suggested change
- Add
scope="col" to each header cell.
- Add a
<caption> naming the table. The heading text above it ("Customer operating state") is a reasonable basis. Visually hide it if it would duplicate the visible heading — there is an existing pattern to follow, or add one.
- Consider
scope="row" on the account-name cell, since it identifies the row.
Good to know
- The existing test is
components/dashboard/AccountPortfolioTable.test.tsx — extend it rather than adding a new file.
pnpm dev runs the whole app on demo fixtures with no credentials. The table is on the home page, below the action queue.
pnpm verify is the gate.
Worth testing with a real screen reader (VoiceOver on macOS is Cmd+F5) rather than only asserting attributes — the point is the announcement, not the markup.
What
components/dashboard/AccountPortfolioTable.tsxrenders the account portfolio as a<table>, but the header cells carry noscope:Without
scope="col", a screen reader cannot reliably associate each cell with its column, so a row is announced as a run of unlabelled values — "AtlasPay Europe, Enterprise, United Kingdom, Expansion ready, 92%, 94%, Elena Rossi" — with no indication which number is the limit utilization and which is evidence coverage. On this screen those two numbers mean very different things.There is also no
<caption>, so the table has no accessible name.Suggested change
scope="col"to each header cell.<caption>naming the table. The heading text above it ("Customer operating state") is a reasonable basis. Visually hide it if it would duplicate the visible heading — there is an existing pattern to follow, or add one.scope="row"on the account-name cell, since it identifies the row.Good to know
components/dashboard/AccountPortfolioTable.test.tsx— extend it rather than adding a new file.pnpm devruns the whole app on demo fixtures with no credentials. The table is on the home page, below the action queue.pnpm verifyis the gate.Worth testing with a real screen reader (VoiceOver on macOS is
Cmd+F5) rather than only asserting attributes — the point is the announcement, not the markup.