Skip to content

Commit bd8ca6f

Browse files
committed
test(a11y): enforce contrast checks
1 parent 7349789 commit bd8ca6f

5 files changed

Lines changed: 14 additions & 10 deletions

File tree

system/preview/_components.css

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,20 @@ button i { font-size: 14px; line-height: 1; display: inline-flex; }
6262
--*-foreground tokens in tokens.css; kept inline for performance. */
6363
.btn-primary { background: var(--yellow-solid); border-color: var(--yellow-solid); color: #000; }
6464
.btn-primary:hover { background: var(--yellow-solid-hover); border-color: var(--yellow-solid-hover); }
65-
.btn-success { background: var(--green-solid); border-color: var(--green-solid); color: #fff; }
66-
.btn-success:hover { background: var(--green-solid-hover); border-color: var(--green-solid-hover); }
67-
.btn-danger { background: var(--red-solid); border-color: var(--red-solid); color: #fff; }
68-
.btn-danger:hover { background: var(--red-solid-hover); border-color: var(--red-solid-hover); }
65+
.btn-success { background: var(--green-text-secondary); border-color: var(--green-text-secondary); color: #fff; }
66+
.btn-success:hover { background: var(--green-text-secondary); border-color: var(--green-text-secondary); }
67+
.btn-danger { background: var(--red-text-secondary); border-color: var(--red-text-secondary); color: #fff; }
68+
.btn-danger:hover { background: var(--red-text-secondary); border-color: var(--red-text-secondary); }
6969
.btn-info { background: var(--solid); border-color: var(--solid); color: #fff; }
7070
.btn-info:hover { background: var(--solid-hover); border-color: var(--solid-hover); }
7171
.btn-invert { background: var(--text); border-color: var(--border); color: var(--app-bg); }
7272
.btn-invert:hover { border-color: var(--border-hover); }
7373
.btn-default { background: var(--component-bg); border-color: var(--border); color: var(--text); }
7474
.btn-default:hover { background: var(--component-bg-hover); border-color: var(--border-hover); }
75+
html.dark .btn-success { background: var(--green-border-hover); border-color: var(--green-border-hover); }
76+
html.dark .btn-success:hover { background: var(--green-border-hover); border-color: var(--green-border-hover); }
77+
html.dark .btn-danger { background: var(--red-border-hover); border-color: var(--red-border-hover); }
78+
html.dark .btn-danger:hover { background: var(--red-border-hover); border-color: var(--red-border-hover); }
7579

7680
/* States */
7781
button:disabled { opacity: 0.3; cursor: not-allowed; }

system/preview/components-buttons.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
.preview-shell { padding: 24px; display:flex; flex-direction:column; gap: 18px; }
4141
.btn-row { display:flex; gap: 10px; align-items:center; flex-wrap: wrap; }
4242
.label { font-size: 12.5px; font-weight: 500; color: var(--text); }
43-
.label small { font-family: var(--font-mono); text-transform: none; letter-spacing: 0; color: var(--text-secondary); opacity: 0.7; }
43+
.label small { font-family: var(--font-mono); text-transform: none; letter-spacing: 0; color: var(--text-secondary); }
4444
.note { font-size: 12.5px; color: var(--text-secondary); line-height: 1.55; max-width: 760px; }
4545
.note code { font-family: var(--font-mono); color: var(--yellow-solid); font-size: 11.5px; }
4646
.note b { color: var(--text); font-weight: 500; }
@@ -164,12 +164,12 @@
164164
<button class="btn-primary" disabled>Disabled</button>
165165
<button class="btn-primary is-loading">Saving…</button>
166166
<button class="btn-danger" disabled>Delete forever</button>
167-
<button class="btn-danger is-loading">Deleting</button>
167+
<button class="btn-danger is-loading" aria-label="Deleting"></button>
168168
<button class="btn-default">Tab to focus me</button>
169169
</div>
170170

171171
<div class="tip">
172-
<b>Accessibility floor.</b> White-on-green and white-on-red sit at 3.2–3.9 contrast — they only pass WCAG as <em>large text</em> (≥14px medium uppercase). <b>Never use <code>btn-sm</code> or <code>btn-xs</code> for <code>btn-success</code>, <code>btn-danger</code>, or <code>btn-info</code>.</b> For tight rows use <code>btn-primary</code> (yellow on black = 14:1 AAA at any size) or <code>btn-default</code>. See the <em>Accessibility audit</em> preview.
172+
<b>Accessibility floor.</b> Filled status buttons use darker status roles than badges so white text passes WCAG AA at normal button sizes. <b>Never reuse badge fills for button backgrounds.</b> For tight rows use <code>btn-primary</code> (yellow on black = 14:1 AAA at any size) or <code>btn-default</code>. See the <em>Accessibility audit</em> preview.
173173
</div>
174174
</div>
175175

system/preview/components-form-fields.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@
198198
cursor: pointer;
199199
}
200200
.date-pop .day:hover { background: var(--component-bg-hover); }
201-
.date-pop .day.muted { color: var(--text-secondary); opacity: 0.4; }
201+
.date-pop .day.muted { color: var(--text-secondary); }
202202
.date-pop .day.in-range { background: var(--yellow-component-bg); border-radius: 0; }
203203
.date-pop .day.start { background: var(--yellow-solid); color: #000; font-weight: 500; border-top-right-radius: 0; border-bottom-right-radius: 0; }
204204
.date-pop .day.end { background: var(--yellow-solid); color: #000; font-weight: 500; border-top-left-radius: 0; border-bottom-left-radius: 0; }

system/preview/mobile-shell.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@
478478
color: #fff; cursor: pointer;
479479
}
480480
.swipe-row .actions .share { background: var(--solid); }
481-
.swipe-row .actions .del { background: var(--red-solid); }
481+
.swipe-row .actions .del { background: var(--red-border-hover); }
482482

483483
/* Toast */
484484
.m-toast {

tests/e2e/design-system.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ test.describe("design.put.io static guide", () => {
5050
test(`${pagePath} has no serious automated accessibility violations`, async ({ page }, testInfo) => {
5151
test.skip(testInfo.project.name !== "chromium-desktop", "Axe coverage runs once; render smoke covers TV framing.");
5252
await page.goto(pagePath, { waitUntil: "domcontentloaded" });
53-
const builder = new AxeBuilder({ page }).disableRules(["color-contrast", "scrollable-region-focusable"]);
53+
const builder = new AxeBuilder({ page });
5454
if (pagePath.startsWith("/design-system")) {
5555
builder.exclude("iframe");
5656
}

0 commit comments

Comments
 (0)