From a3f72f345af777992ecaaa752582664e40c51c47 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 18:24:06 +0000 Subject: [PATCH 1/8] feat(ui): add focus-visible styles for keyboard accessibility Added explicit focus indicators to interactive elements in DashboardCanvasView, panels, and EventList for improved a11y keyboard navigation. --- .jules/palette.md | 4 ++++ apps/web/src/components/EventList.tsx | 2 +- .../src/components/dashboard/DashboardCanvasView.tsx | 10 +++++----- apps/web/src/components/dashboard/panels.tsx | 10 +++++----- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.jules/palette.md b/.jules/palette.md index 512bd9eea..d95afb2a8 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -4,3 +4,7 @@ ## 2026-07-14 - Scrubber Keyboard Accessibility **Learning:** Adding keyboard event listeners (like `onKeyDown`) to custom interactive elements (like a `div` acting as a scrubber/slider) doesn't automatically expose those shortcuts to screen readers. **Action:** Always add `aria-keyshortcuts` to custom ARIA widgets (like `role="slider"`) to announce available keyboard commands (e.g., "ArrowLeft ArrowRight Home End") when the element receives focus. + +## 2026-07-27 - Focus States for Interactive Elements +**Learning:** Custom buttons and interactive UI elements missing explicit focus indicators (e.g., `focus-visible:ring`) can severely degrade keyboard navigation experiences for a11y users, as focus changes become invisible. +**Action:** Always add `focus:outline-none focus-visible:ring-2 focus-visible:ring-[#6af2de]/40` (or similar brand color) classes to all interactive elements (` diff --git a/apps/web/src/components/dashboard/DashboardCanvasView.tsx b/apps/web/src/components/dashboard/DashboardCanvasView.tsx index 2fa7a9ad4..18b4cbb72 100644 --- a/apps/web/src/components/dashboard/DashboardCanvasView.tsx +++ b/apps/web/src/components/dashboard/DashboardCanvasView.tsx @@ -159,7 +159,7 @@ export default function DashboardCanvasView({ video, onClose, onExtractEvents }: > @@ -318,7 +318,7 @@ function RailReopen({ label, onClick, side }: { label: string; onClick: () => vo