From c4fa8f1ae8d6233dfaa51da432a1e6b8a28a78ff Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Mon, 3 Aug 2026 09:33:29 -0700 Subject: [PATCH] a11y: add main landmarks, drop bogus listbox roles, size footer targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three failures from a Lighthouse accessibility audit of the landing page. landmark-one-main: there was no
anywhere in src/, so this failed on every route, not just the landing page. Added to the (app) layout via asChild (no extra DOM node) and to the marketing page. On the marketing page main starts after because Landing.module.css pins the nav background with `.landingInner > nav`, so the nav has to stay a direct child of that box — the sections below the fold stay outside the landmark as a result. aria-input-field-name: the product list declared role="listbox" with role="option" children, but the j/k shortcuts are a document-level keydown handler with no focus management and no aria-activedescendant. The roles promised a widget that was never implemented, the listbox had no accessible name, and role="option" may not contain the link each item renders. Dropped both roles — the
@@ -311,9 +318,9 @@ export default async function Landing() { - Source Cooperative supports your data lifecycle, from prototyping - to public release, without navigating corporate cloud - policies. + Source Cooperative supports your data lifecycle, from + prototyping to public release, without navigating corporate + cloud policies.