From 382a01b721e41fe92bf3577a594950d955df3a53 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 26 May 2026 20:01:03 -0400 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20accessibility=20pass=20=E2=80=94=20?= =?UTF-8?q?skip=20link,=20ARIA=20labels,=20scope,=20aria-sort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add skip-to-content link and sqw-skip-link / sqw-sr-only CSS utilities - Add aria-label to all nav elements (main nav and three section subnavs) - Add id="main-content" to
as skip-link target - Add scope="col" to every across all table views - Add sr-only "Actions" text to empty action column headers - Add aria-sort="ascending/descending" to active sort column in stats and cache entries - Pass aria_label: "Pagination" to all @pagy.series_nav calls Co-Authored-By: Claude Sonnet 4.6 --- .../stylesheets/solid_stack_web/_01_base.css | 12 ++++++++++++ .../layouts/solid_stack_web/application.html.erb | 11 ++++++----- app/views/solid_stack_web/cable/index.html.erb | 6 +++--- .../cable_messages/index.html.erb | 8 ++++---- app/views/solid_stack_web/cache/index.html.erb | 10 +++++----- .../solid_stack_web/cache_entries/index.html.erb | 6 +++--- .../solid_stack_web/failed_jobs/index.html.erb | 14 +++++++------- app/views/solid_stack_web/history/index.html.erb | 10 +++++----- app/views/solid_stack_web/jobs/index.html.erb | 16 ++++++++-------- .../solid_stack_web/processes/index.html.erb | 10 +++++----- app/views/solid_stack_web/queues/index.html.erb | 10 +++++----- app/views/solid_stack_web/queues/show.html.erb | 10 +++++----- .../recurring_tasks/index.html.erb | 16 ++++++++-------- app/views/solid_stack_web/stats/index.html.erb | 2 +- 14 files changed, 77 insertions(+), 64 deletions(-) diff --git a/app/assets/stylesheets/solid_stack_web/_01_base.css b/app/assets/stylesheets/solid_stack_web/_01_base.css index 2742876..15b93a6 100644 --- a/app/assets/stylesheets/solid_stack_web/_01_base.css +++ b/app/assets/stylesheets/solid_stack_web/_01_base.css @@ -31,3 +31,15 @@ a:hover { text-decoration: underline; } .sqw-monospace { font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 13px; } .sqw-muted { color: var(--muted); } .sqw-truncate { max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + +.sqw-sr-only { + position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; + overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; +} + +.sqw-skip-link { + position: absolute; top: -100%; left: 0; z-index: 9999; + padding: 0.5rem 1rem; background: var(--accent); color: #fff; + font-weight: 600; text-decoration: none; border-radius: 0 0 4px 0; +} +.sqw-skip-link:focus { top: 0; } diff --git a/app/views/layouts/solid_stack_web/application.html.erb b/app/views/layouts/solid_stack_web/application.html.erb index 49525ac..6b2a469 100644 --- a/app/views/layouts/solid_stack_web/application.html.erb +++ b/app/views/layouts/solid_stack_web/application.html.erb @@ -11,10 +11,11 @@ <%= javascript_importmap_tags "solid_stack_web" %> + Skip to main content
<%= link_to "Solid Stack", root_path, class: "sqw-header__logo" %> -
<% if current_section == :cache %> -