Problem
The drawer (<aside class="drawer">, a complementary region) opens without moving focus into it, doesn't trap Tab focus (you can tab onto hidden background content), can't be closed with Escape, and has no accessible name. The scrim is a plain <div>.
Suggested fix
On open: set an aria-label, move focus into the drawer, trap focus while open, close on Escape, and restore focus to the trigger on close.
Where
mobile/src/components/SessionDrawer.tsx.
Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.
Problem
The drawer (
<aside class="drawer">, acomplementaryregion) opens without moving focus into it, doesn't trap Tab focus (you can tab onto hidden background content), can't be closed with Escape, and has no accessible name. The scrim is a plain<div>.Suggested fix
On open: set an
aria-label, move focus into the drawer, trap focus while open, close on Escape, and restore focus to the trigger on close.Where
mobile/src/components/SessionDrawer.tsx.Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.