Reading ticket status without colour
Status is carried by shape and hatching as well as colour. The shape draws whether colourblind mode is on or off, and screen readers are told either way.
Settings group: Appearance. Updated 2026-08-20.
Nothing on a ticket shows this yet. The badge is built and can be tested, but no card feeds it a status, because deciding when a ticket becomes 'caution' is a product rule that has not been made. This describes the encoding, not something anyone has seen on a rail.
Four statuses, more than one channel each
On time is green and a solid dot. Caution is amber, a half-filled circle and a single exclamation mark. Late is red, a triangle and a double one. Priority is violet, a star and the word itself.
Caution and late also hatch the ticket header — diagonally at caution and more densely at late — so the state can be read across a kitchen in monochrome or through steam, which is a distance and a medium no colour survives.
The shape is not optional
An earlier version drew the shape only when colourblind mode was switched on. With the mode off, the badge was a coloured rectangle and nothing else, which is status conveyed by hue and nothing else.
An accessibility review overruled that, and the reasoning is worth repeating: a setting only helps the people who find it, and there is no settings screen in this app to find it in. So the shape draws in both modes and only the louder marker is what the mode turns on.
Hearing it is a separate requirement
A triangle fixes nothing for somebody listening to the screen rather than looking at it. The spoken description is therefore present in both modes rather than arriving with the shape.
It is tagged with the language the screen is running in. Writing a word in Spanish is not the same as having it pronounced in Spanish, and a screen reader given the wrong language reads the right word wrongly.
Two statuses have no shape yet
Held and void have a colour and no shape, marker or hatch. That is a real gap rather than an oversight in this article.
Nothing was invented to fill it. A glyph no designer chose, appearing on a kitchen screen, would be a decision made in a source file and recorded nowhere anybody would look for it.
Where this came from
Every statement above was read out of the source code named below, and the build re-reads those files and fails if a statement stops matching them. This article carries no claim that was not measured from one of these files.
android/app/src/main/kotlin/online/minirestaurants/kds/ui/theme/MrColorblindEncoding.ktandroid/app/src/main/kotlin/online/minirestaurants/kds/ui/StatusBadge.kt