Stack Specification
Section 12

Accessibility

A colouring app must be usable by people who can’t reliably distinguish colours. The number labels are the accessibility fallback, and they must remain legible at every zoom level.

12.1 — Colour‑blindness

  • Palette validation in the bundler runs every artwork through deuteranopia, protanopia, and tritanopia simulations.
  • An “always show numbers” setting is enabled by default and cannot be hidden by the canvas at any zoom level.
  • Numbers render with a high‑contrast halo against the underlying region fill.
  • An optional “pattern fills” mode applies subtle hatching distinct per colour for accessibility users who prefer it.

12.2 — Screen readers

  • Every palette swatch announces its name and number (“Colour 7, Saffron, 42 cells remaining”).
  • The canvas exposes a region count and completion percentage via semantics.
  • Library cards announce title, category, premium status, and progress.

12.3 — Motion & dynamic type

  • Respect the system “reduce motion” setting — disable fill animation, replace with an instant transition.
  • Dynamic Type / Android font scaling supported on every screen except the canvas itself.
  • Number labels on the canvas scale with the artwork zoom, not with system font scale.

12.4 — Tap targets

Regions smaller than 24 px at the artwork’s natural zoom level are flagged by the validator. The canvas implements a “snap to nearest small region” within a 16 px radius of the tap point to avoid frustrating misses.