FloorValueWhere
Body text4.5:1Everything a person reads
Large text3.0:1Headline sizes
Painted UI shape3.0:1A drawn subject on its strip
Critical7.0:1Emergency and the address card β€” read under stress
Tap target44pt56pt on Emergency rows
🚨 Open β€” three pairs measure under AA
Computed from the tokens by test/theme/contrast_test.dart, not estimated. All three are light mode; dark mode clears 4.5:1 on all of them.
PairRatioWhere it shows
text_3 on bg β€” #8593A3 on #F7F8FA2.95:1Eyebrows, section labels, counts
verified on verified_soft β€” #12855A on #DFF5EB4.06:1The done / verified tag
red on red_soft β€” #CD2E3A on #FDE7E94.39:1The urgent tag and the urgent row's deadline line
This is open, and it is Ted's call. Two of the three cannot be fixed from the code side: flag red is the exact νƒœκ·ΉκΈ° value and Β§2.1 forbids moving it, so only the container could change β€” and the container is what was approved by eye on 2026-08-05. What was done instead of quietly changing either the tokens or the test: the tokens stay exactly as chosen, the test asserts the 3:1 UI floor so none of the three may drift further down, and the numbers are written here. Tightening the test to 4.5 is not a code change; it is a palette change and it needs Ted. Three ways out if he wants one β€” darken the soft containers slightly, reserve these pairs for β‰₯16px/700 text where 3:1 is the correct floor, or accept them as recorded deviations.

Colour is never the only signal. Urgent rows carry a red border and a deadline in words and a red action tag. Danger red is the strictest case of this and not an exception to it: every reddened subject is the same silhouette it was drawn as flat, named in real text beside it. The tightest pair in the app is danger red on dark surface_2 at 3.01:1 β€” over the 3:1 painted-shape floor by 0.01, asserted in both modes so darkening surface_2 fails the build. Text over a photograph always sits on a gradient veil, never directly on the image; contrast against an arbitrary photograph is unprovable otherwise. All user-visible text is selectable. Β§9, Β§9.1.