diff --git a/canvas/src/components/PricingTable.tsx b/canvas/src/components/PricingTable.tsx
index 5f3bc210..1e400a47 100644
--- a/canvas/src/components/PricingTable.tsx
+++ b/canvas/src/components/PricingTable.tsx
@@ -117,7 +117,7 @@ function PlanCard({
{plan.features.map((f) => (
-
-
+
✓
{f}
diff --git a/canvas/src/components/__tests__/PricingTable.test.tsx b/canvas/src/components/__tests__/PricingTable.test.tsx
index 535daeb7..1d4c0914 100644
--- a/canvas/src/components/__tests__/PricingTable.test.tsx
+++ b/canvas/src/components/__tests__/PricingTable.test.tsx
@@ -145,6 +145,17 @@ describe("PricingTable", () => {
expect(mockedStartCheckout).not.toHaveBeenCalled();
});
+ it("marks feature checkmarks as aria-hidden (decorative, not exposed to screen readers)", () => {
+ render();
+ const checks = document.body.querySelectorAll('[aria-hidden="true"]');
+ // Every feature list has a ✓ glyph; all should be aria-hidden.
+ expect(checks.length).toBeGreaterThan(0);
+ // The checkmark spans use text-accent (decorative SVG-like glyphs).
+ checks.forEach((el) => {
+ expect(el.textContent?.trim()).toBe("✓");
+ });
+ });
+
it("disables the button while a checkout call is in flight", async () => {
mockedFetchSession.mockResolvedValue({
user_id: "u1",