For a pure restyle there are no packages to vet. Research here validated the two things that could actually go wrong: the palette's contrast on white, and the offline font strategy.
A contrast script (tests/contrast.js) checked every
text/surface pair and every cell-state pair.
Text/UI — all pass AA:
#1d1d1f on page #f5f5f7 → 15.46:1; on
white → 16.83:1#6e6e73 on white → 5.07:1 (≥ 4.5 AA
body)#0071e3 → 4.70:1 (button labels, ≥
4.5)Cell states vs white field — all perceptible (start 2.22, goal 3.55, wall 16.83, open 1.90, closed 1.28, path 1.51).
Issue found & resolved (the payoff of checking):
the original gold path #ffc400 and the cyan frontier
#5ac8fa were nearly iso-luminant (1.19:1)
— a problem for reduced-colour vision even though the hues differ.
Iterating:
#f5a623 made it worse
(1.07) — crossed below cyan's luminance;#ffd60a (Apple systemYellow): open-vs-path
1.34, visible on white 1.41.#ffd60a sits close to the light-gray closed
state in luminance (1.11), but path and closed are resolved by a
non-colour cue: the final path is drawn last with a
subtle inset ring/weight, so it never depends on fill luminance alone
(WCAG 1.4.1 — don't use colour as the only channel). This also matches
the intended "payoff" emphasis for the path.
| Token | Value |
|---|---|
| page background | #f5f5f7 |
| card surface | #ffffff |
| ink (primary text) | #1d1d1f |
| secondary text | #6e6e73 |
| hairline/separator | #d2d2d7 |
| accent (interactive) | #0071e3 |
| start | #34c759 |
| goal | #ff3b30 |
| wall | #1d1d1f |
| mud (weight dot) | #ff9500 |
| frontier / open | #5ac8fa |
| visited / closed | #dfe4ee |
| final path | #ffd60a + inset ring |
| algorithm dots | bfs #0a84ff · dijkstra #ff9f0a · greedy
#ff375f · astar #30d158 |
-apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif
→ renders SF Pro on Apple devices, system-ui elsewhere.
No download, fully offline.ui-monospace, "SF Mono", Menlo, Consolas, monospace → SF
Mono on Apple. The existing artifact already uses these stacks; no
change needed for the font goal.:root tokens; most rules inherit. This keeps the diff
concentrated and preserves all class names the test suite asserts
on.0 1px 3px rgba(0,0,0,.04), 0 8px 24px -12px rgba(0,0,0,.12));
large radii (~18px cards, ~10px controls). Remove the graph-paper
repeating-linear-gradient body background and all
glow/gradient effects.setTool and tests are unaffected).Unchanged. No new external resources (no web fonts, no CDNs), no new
input, no innerHTML/eval. The static security
scan (8 checks) remains part of Verify and must stay clean.