From 933ef4e6ef09510fb7e3554bf279175611305106 Mon Sep 17 00:00:00 2001 From: Kpa-clawbot Date: Mon, 25 May 2026 11:38:50 -0700 Subject: [PATCH] =?UTF-8?q?fix(#1356):=20WCAG=202.2=20AA=20map=20a11y=20?= =?UTF-8?q?=E2=80=94=20cluster=20bubbles,=20role=20pills,=20multi-byte=20l?= =?UTF-8?q?abels=20(#1357)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Red commit: d48c1add88dfab0102e42796ad88f937ab33768f (CI: https://github.com/Kpa-clawbot/CoreScope/actions/runs/26411462973) Green commit CI: https://github.com/Kpa-clawbot/CoreScope/actions/runs/26411699037 ## What Brings the map's three visual surfaces — cluster bubbles, role pills inside cluster bubbles, and multi-byte hash labels on repeater markers — up to WCAG 2.2 AA. Replaces the prior color-only signaling with structural carriers (size, border-style, glyph, letter prefix) so color is no longer the only channel. ## How Locked design = Tufte's structural framing ([issue comment](https://github.com/Kpa-clawbot/CoreScope/issues/1356#issuecomment-4535244400)) WITH the WCAG audit's "Minimal patch to reach AA" applied as overrides ([issue comment](https://github.com/Kpa-clawbot/CoreScope/issues/1356#issuecomment-4535849354)). Where the audit and the original proposal disagreed (border color, pill text color, V3 accent palette, font sizes), the audit's values won. ## V1 cluster bubbles - Neutral fill `rgba(33,41,54,0.92)` via new `--mc-cluster-fill` (was per-bucket `--info / --warning / --accent`). - Border-style ramp as the redundant non-color carrier of the count bucket: `mc-sm` `1.5px solid`, `mc-md` `2.5px solid`, `mc-lg` `2px double`. - Border color `#666` + dark halo `box-shadow: 0 0 0 1px rgba(0,0,0,0.5), 0 1px 2px rgba(0,0,0,0.35)` so the border edge is visible against both Carto Positron (`#f8f9fa`) and Carto Dark Matter (`#262626`). - `
` with the count + pills wrapped `aria-hidden="true"` so the AT announcement is the summary, not the literal glyphs. ## V2 role pills - `ROLE_LETTERS` map (`R` / `C` / `M` / `S` / `O`) is the primary carrier — visible inside every pill, so protanopes/deuteranopes can read the role without depending on hue. - Wong (2011) palette as the secondary carrier, declared as `--mc-role-repeater/companion/room/sensor/observer` — does NOT touch the reserved `--info / --warning / --accent` system vars. - `color: #1a1a1a` on **all five** pills (CSS rule + inline defense-in-depth). Passes SC 1.4.3 small-text (≥4.5:1) against every Wong hue. - Font now `0.625rem/1.1 ui-monospace` (was `9px`, audit bumped to `10px`, this PR converts to `rem` so user font-size preferences scale the pill). - Per-pill `aria-label=" s"`, `overflow: visible` so a user `letter-spacing` override doesn't clip (SC 1.4.12). ## V3 multi-byte hash labels - `MB_GLYPHS` prefix (`✓` / `?` / `✗`) is the primary non-color status carrier; the hash text is the data. - Neutral dark fill `--mc-mb-fill` + colored 3px left border via per-status `--mc-mb-confirmed/suspected/unknown` (high-luminance set `#56F0A0` / `#FFD966` / `#FF8888` — audit override of original Tol "vibrant" set, which failed border-stripe SC 1.4.11). - Font now `0.75rem/1.2 ui-monospace` (was `11px`, audit bumped to `12px`, this PR converts to `rem` for SC 1.4.4 robustness). - `