design(a11y): Penpot mockup — keyboard nav, focus rings, ARIA patterns for the dashboard #236

Closed
opened 2026-04-21 12:49:58 +00:00 by claude-desktop · 1 comment
Collaborator

User story

As a designer, I want a Penpot mockup that establishes the a11y spec for the dashboard — focus ring style, tab order conventions, ARIA live-region placement, keyboard shortcuts map — so that the implementer has an agreed-upon visual + behavioural standard rather than ad-hoc WCAG fixes sprinkled per component.

Acceptance criteria

Frames

  • Focus ring — a single consistent ring (color + offset + thickness) applied to every interactive element. Visible on keyboard focus, hidden on mouse (:focus-visible). Source colour from design/tokens.json.
  • Tab order diagram — per major page (Monitor, Pipeline, Planner, Board, Agents), an overlay showing the expected tab sequence. Skip-links for nav.
  • Keyboard shortcut map — table of global shortcuts (e.g., g m → Monitor, / → filter, ? → help, esc → close modal). Platform-aware (cmd vs ctrl).
  • ARIA live regions — where "running" / "completed" / toast notifications announce. Verbosity setting: polite vs assertive per event type.
  • Drag-and-drop a11y (Board) — keyboard alternative for drag (space to pick up, arrows to move, enter to drop). Visible grab handle.
  • Modal focus trap — Dialog.Root (Base UI) already does most of this; mockup confirms the visual + documents the expectation.

Tokens + copy

  • All focus ring + emphasis colors from design/tokens.json.
  • Copy uses the labor-hierarchy vocabulary (boss/dev/reviewer/designer/foreman) — no "bot" / "agent".

Handoff

  • Standard designer-handoff comment.
  • Add area:design-review on handoff.

Out of scope

  • Screen-reader narration rewrites on individual components — that's implementation.
  • Color-contrast audit of the Tokyo Night palette — separate pass if WCAG-AA isn't met (flag in handoff if it isn't).

References

  • @base-ui-components/react — Dialog / Popover already have a11y baked in, use as baseline.
  • apps/web/src/styles/tokens.css — source tokens.
  • Sibling impl ticket — blocks on this mockup.
## User story As a designer, I want a Penpot mockup that establishes the **a11y spec** for the dashboard — focus ring style, tab order conventions, ARIA live-region placement, keyboard shortcuts map — so that the implementer has an agreed-upon visual + behavioural standard rather than ad-hoc WCAG fixes sprinkled per component. ## Acceptance criteria ### Frames - [ ] **Focus ring** — a single consistent ring (color + offset + thickness) applied to every interactive element. Visible on keyboard focus, hidden on mouse (`:focus-visible`). Source colour from `design/tokens.json`. - [ ] **Tab order diagram** — per major page (Monitor, Pipeline, Planner, Board, Agents), an overlay showing the expected tab sequence. Skip-links for nav. - [ ] **Keyboard shortcut map** — table of global shortcuts (e.g., `g m` → Monitor, `/` → filter, `?` → help, `esc` → close modal). Platform-aware (cmd vs ctrl). - [ ] **ARIA live regions** — where "running" / "completed" / toast notifications announce. Verbosity setting: polite vs assertive per event type. - [ ] **Drag-and-drop a11y** (Board) — keyboard alternative for drag (space to pick up, arrows to move, enter to drop). Visible grab handle. - [ ] **Modal focus trap** — Dialog.Root (Base UI) already does most of this; mockup confirms the visual + documents the expectation. ### Tokens + copy - [ ] All focus ring + emphasis colors from `design/tokens.json`. - [ ] Copy uses the labor-hierarchy vocabulary (boss/dev/reviewer/designer/foreman) — no "bot" / "agent". ### Handoff - [ ] Standard designer-handoff comment. - [ ] Add `area:design-review` on handoff. ## Out of scope - Screen-reader narration rewrites on individual components — that's implementation. - Color-contrast audit of the Tokyo Night palette — separate pass if WCAG-AA isn't met (flag in handoff if it isn't). ## References - `@base-ui-components/react` — Dialog / Popover already have a11y baked in, use as baseline. - `apps/web/src/styles/tokens.css` — source tokens. - Sibling impl ticket — blocks on this mockup.
Collaborator

Penpot file from yesterday's session (URL was missed in the prior handoff):

https://design.jacquin.app/#/workspace?team-id=689d7fa4-f94b-81d4-8007-e39c2a70e029&project-id=689d7fa4-f94b-81d4-8007-e39c2a7171bf&file-id=b6ad92e1-d51e-804e-8007-e7c58718fd93

File: #236 — a11y: keyboard nav, focus rings, ARIA patterns (revn 143 at start of this run, modified 2026-04-26 19:09 UTC). Stopping here per operator instruction — no new frames added beyond what was already in the file. A follow-up dispatch can resume the handoff (full per-page table + token CSS + deviations) once the existing content is reviewed.

Penpot file from yesterday's session (URL was missed in the prior handoff): https://design.jacquin.app/#/workspace?team-id=689d7fa4-f94b-81d4-8007-e39c2a70e029&project-id=689d7fa4-f94b-81d4-8007-e39c2a7171bf&file-id=b6ad92e1-d51e-804e-8007-e7c58718fd93 File: `#236 — a11y: keyboard nav, focus rings, ARIA patterns` (revn 143 at start of this run, modified 2026-04-26 19:09 UTC). Stopping here per operator instruction — no new frames added beyond what was already in the file. A follow-up dispatch can resume the handoff (full per-page table + token CSS + deviations) once the existing content is reviewed.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
charles/claude-hooks#236
No description provided.