From e548ff83ece0d1bbf832108d33f87458842634f1 Mon Sep 17 00:00:00 2001
From: Claude
Date: Thu, 16 Jul 2026 17:53:28 +0000
Subject: [PATCH 1/2] fix(a11y): resolve Lighthouse accessibility failures on
/pricing
Three of four axe findings weren't addressed by the earlier color-
contrast fix (PR #23): the skip link's target (#main-content) didn't
exist on this page, and the tier cards' h3 titles followed the page h1
directly with no h2 in between. Add the missing id and an accessible
(visually-hidden) h2 so heading order stays sequential without a
redundant on-page label.
Verified with the same tool CI uses (lhci autorun against
.lighthouserc.json, 3 runs x 4 URLs): all assertions pass, including
a perfect 1.0 accessibility score on /pricing (up from 0.92).
Co-Authored-By: Claude Sonnet 5
Claude-Session: https://claude.ai/code/session_013kiWYYyCeGgYrKhD8prjqa
---
src/app/(public)/pricing/page.tsx | 4 +++-
src/styles/globals.css | 14 ++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/app/(public)/pricing/page.tsx b/src/app/(public)/pricing/page.tsx
index e90f835..b23e20b 100644
--- a/src/app/(public)/pricing/page.tsx
+++ b/src/app/(public)/pricing/page.tsx
@@ -25,7 +25,7 @@ export default async function PricingPage() {
const [tiers, session] = await Promise.all([getTierDisplay(), getSession()]);
return (
-
+
PRICING
Pick the tier that matches where you are.
@@ -36,6 +36,8 @@ export default async function PricingPage() {
+ Compare tiers
+
{tiers.map((tier: TierDisplay) => (
diff --git a/src/styles/globals.css b/src/styles/globals.css
index 7a78294..8c6f7cd 100644
--- a/src/styles/globals.css
+++ b/src/styles/globals.css
@@ -283,6 +283,20 @@ pre {
padding-right: clamp(var(--space-4), 4vw, var(--space-12));
}
+/* Visually hidden, still reachable by screen readers — for headings
+ needed to keep heading order sequential without a redundant on-page label. */
+.visually-hidden {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
+}
+
/* ── Responsive helpers ────────────────────────────────────────── */
/* .stack-mobile — vertical by default, horizontal at ≥1024px */
From 7da9ad0d88e94d389c63534172468a312e860160 Mon Sep 17 00:00:00 2001
From: Claude
Date: Thu, 16 Jul 2026 21:37:44 +0000
Subject: [PATCH 2/2] fix(a11y): use clip-path instead of deprecated clip in
.visually-hidden
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Stylelint flags clip: rect() as deprecated (property-no-deprecated).
clip-path: inset(50%) is the modern equivalent — same visual/screen-
reader behavior, no lint warning.
Co-Authored-By: Claude Sonnet 5
Claude-Session: https://claude.ai/code/session_013kiWYYyCeGgYrKhD8prjqa
---
src/styles/globals.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/styles/globals.css b/src/styles/globals.css
index 8c6f7cd..c0e769e 100644
--- a/src/styles/globals.css
+++ b/src/styles/globals.css
@@ -292,7 +292,7 @@ pre {
padding: 0;
margin: -1px;
overflow: hidden;
- clip: rect(0, 0, 0, 0);
+ clip-path: inset(50%);
white-space: nowrap;
border: 0;
}