PolicyEngine / PolicyEngine/policyengine-app-v2
Website header leaves hidden mobile menu items in keyboard tab order
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 1
- Forks
- 3
- Avg merge
- 1d 50m
- Merged PRs (30d)
- 39
Description
Summary
Keyboard focus can move into the closed mobile navigation on desktop website pages, which exposes off-screen controls to keyboard and assistive-tech users.
Reproduction
- Run the website locally with
WEBSITE_PORT=3000 CALCULATOR_PORT=3001 bun run devfrom the repo root. - Open
http://localhost:3000/us/researchon a desktop-width viewport. - Press
Tabrepeatedly from the page start. - After the visible header items, focus moves to the hidden mobile menu's
Close menubutton and hidden mobile nav links.
Expected
When the mobile drawer is closed, its controls should not be reachable by keyboard or screen readers.
Actual
The drawer stays mounted and focusable while visually off-screen.
Notes
The menu appears to stay mounted and only changes pointerEvents / transform when open is false.
Relevant code:
website/src/components/Header.tsx
Impact
- keyboard users can tab into invisible UI
- focus appears to disappear
- duplicate navigation structures may be exposed to assistive tech
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with website/src/components/Header.tsx and reproduce the issue using WEBSITE_PORT=3000 CALCULATOR_PORT=3001 bun run dev, then open /us/research at desktop width and tab from the page start. Update the closed mobile drawer behavior so its controls and links are not reachable by keyboard or assistive technology, and verify the hidden menu is absent from the tab order while closed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- bun, typescript
- Domain
- accessibility, frontend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 84/100