Wonder Wagon
CatalogWW-047
Accessibility

Measured, and honest about the rest

Every colour pairing the system declares is measured on every build with the WCAG 2.x formula, and a failing pair fails the build. That proves the declared pairs clear their bars. It doesn't prove a product is accessible.

146pairings measured on every build
0failing
66family token pairings, both environments
80theme slot pairings, five themes
Automated

What the gate checks

Contrast

  • Text pairs at 4.5:1, non-text at 3:1. 40 text · 22 non-text · 4 decorative · 0 seam among the family pairings.
  • Decorative pairs (a card against its page) are measured and reported, never used as the only signal.
  • Each product theme's slots are measured on the family grounds in both environments.

In a real browser

  • Every Storybook story renders in Chromium with axe in error mode; a violation fails CI.
  • Keyboard walkthroughs as play functions: Tab, Space and Enter, asserting state, names and focus.
  • Every catalog page is checked with axe in both environments at desktop and phone widths, and fails CI on a violation.
  • Focus rings follow the ground: ink on paper, pale in the dark. Controls are 44px tall by token. Reduced motion collapses durations.
By hand

What no gate covers

  • A screen-reader pass, 200% zoom at 320px, and forced-colors, where the depth stacks vanish and borders must carry the shape. Per release, by a person.
  • Colours a product uses outside the contract. Lorekeeper's and Forge's own site palettes are measured in their own repositories, not here.
  • Terminals on a light background: the grammar can't detect one, so accent contrast there isn't guaranteed. NO_COLOR=1 is the escape.
  • Whether any of it reads well. That's a judgement, not a number.
The records

Every theme pairing, measured

Wonder Wagon UI16 pairings · 0 failing
EnvRuleColourOnRatioBar
dayaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #285A1C7.194.5
daylink is body-legal on the pagelink #285A1Cground #FBF3DE7.394.5
daylink is body-legal on a side panellink #285A1Cground-side #F9EFD67.144.5
daylink is body-legal on a cardlink #285A1Csurface #FFFBF07.904.5
dayenamel reads as an object boundary against the pageenamel #285A1Cground #FBF3DE7.393.0
dayenamel reads as an object boundary against the stageenamel #285A1Cground-stage #F5DCA66.103.0
dayink is legible on the low accent tintink #2A160Daccent-low #DCE8C413.444.5
daythe signal's edge clears the non-text bar against the pagesignal-edge #553316ground #FBF3DE10.143.0
nightaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #347A324.654.5
nightlink is body-legal on the pagelink #8CBF63ground #17191C8.184.5
nightlink is body-legal on a side panellink #8CBF63ground-side #1F22267.414.5
nightlink is body-legal on a cardlink #8CBF63surface #1F22267.414.5
nightenamel reads as an object boundary against the pageenamel #347A32ground #17191C3.333.0
nightenamel reads as an object boundary against the stageenamel #347A32ground-stage #17191C3.333.0
nightink is legible on the low accent tintink #F7F0DFaccent-low #1E3A1611.064.5
nighta bare signal clears the non-text bar against the pagesignal #E2B26Aground #17191C9.073.0
Pathfinder16 pairings · 0 failing
EnvRuleColourOnRatioBar
dayaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #B34A134.734.5
daylink is body-legal on the pagelink #9E3F0Fground #FBF3DE5.984.5
daylink is body-legal on a side panellink #9E3F0Fground-side #F9EFD65.784.5
daylink is body-legal on a cardlink #9E3F0Fsurface #FFFBF06.404.5
dayenamel reads as an object boundary against the pageenamel #12496Bground #FBF3DE8.663.0
dayenamel reads as an object boundary against the stageenamel #12496Bground-stage #F5DCA67.153.0
dayink is legible on the low accent tintink #2A160Daccent-low #FBDCC913.274.5
daythe signal's edge clears the non-text bar against the pagesignal-edge #553316ground #FBF3DE10.143.0
nightaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #B34A134.734.5
nightlink is body-legal on the pagelink #F0A97Eground #17191C8.964.5
nightlink is body-legal on a side panellink #F0A97Eground-side #1F22268.124.5
nightlink is body-legal on a cardlink #F0A97Esurface #1F22268.124.5
nightenamel reads as an object boundary against the pageenamel #1C73A8ground #17191C3.413.0
nightenamel reads as an object boundary against the stageenamel #1C73A8ground-stage #17191C3.413.0
nightink is legible on the low accent tintink #F7F0DFaccent-low #3A160714.244.5
nighta bare signal clears the non-text bar against the pagesignal #E0611Fground #17191C4.953.0
Lorekeeper16 pairings · 0 failing
EnvRuleColourOnRatioBar
dayaccent-ink is legible on a filled accentaccent-ink #FAF7F1accent #343A8C9.224.5
daylink is body-legal on the pagelink #343A8Cground #FBF3DE8.914.5
daylink is body-legal on a side panellink #343A8Cground-side #F9EFD68.614.5
daylink is body-legal on a cardlink #343A8Csurface #FFFBF09.544.5
dayenamel reads as an object boundary against the pageenamel #343A8Cground #FBF3DE8.913.0
dayenamel reads as an object boundary against the stageenamel #343A8Cground-stage #F5DCA67.363.0
dayink is legible on the low accent tintink #2A160Daccent-low #E1E3F513.544.5
daya bare signal clears the non-text bar against the pagesignal #8A6212ground #FBF3DE4.953.0
nightaccent-ink is legible on a filled accentaccent-ink #141521accent #99A2F07.584.5
nightlink is body-legal on the pagelink #99A2F0ground #17191C7.364.5
nightlink is body-legal on a side panellink #99A2F0ground-side #1F22266.684.5
nightlink is body-legal on a cardlink #99A2F0surface #1F22266.684.5
nightenamel reads as an object boundary against the pageenamel #5D64C3ground #17191C3.423.0
nightenamel reads as an object boundary against the stageenamel #5D64C3ground-stage #17191C3.423.0
nightink is legible on the low accent tintink #F7F0DFaccent-low #1E214013.724.5
nighta bare signal clears the non-text bar against the pagesignal #E2B45Cground #17191C9.163.0
Forge16 pairings · 0 failing
EnvRuleColourOnRatioBar
dayaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #B03A265.314.5
daylink is body-legal on the pagelink #B03A26ground #FBF3DE5.454.5
daylink is body-legal on a side panellink #B03A26ground-side #F9EFD65.274.5
daylink is body-legal on a cardlink #B03A26surface #FFFBF05.844.5
dayenamel reads as an object boundary against the pageenamel #B03A26ground #FBF3DE5.453.0
dayenamel reads as an object boundary against the stageenamel #B03A26ground-stage #F5DCA64.503.0
dayink is legible on the low accent tintink #2A160Daccent-low #F6D9D312.954.5
daya bare signal clears the non-text bar against the pagesignal #85601Aground #FBF3DE5.153.0
nightaccent-ink is legible on a filled accentaccent-ink #F7F0DFaccent #C2402A4.554.5
nightlink is body-legal on the pagelink #E0B166ground #17191C8.934.5
nightlink is body-legal on a side panellink #E0B166ground-side #1F22268.104.5
nightlink is body-legal on a cardlink #E0B166surface #1F22268.104.5
nightenamel reads as an object boundary against the pageenamel #C2402Aground #17191C3.413.0
nightenamel reads as an object boundary against the stageenamel #C2402Aground-stage #17191C3.413.0
nightink is legible on the low accent tintink #F7F0DFaccent-low #3A141014.364.5
nighta bare signal clears the non-text bar against the pagesignal #C8973Fground #17191C6.673.0
Family tokens66 pairings · 0 failing
EnvColourOnKindRatioBar
daysurface #FFFBF0ground #FBF3DEdecorative1.07measured
dayink #2A160Dground #FBF3DEtext15.574.5
dayink #2A160Dground-side #F9EFD6text15.054.5
dayink #2A160Dsurface #FFFBF0text16.664.5
dayink #2A160Dsurface-2 #F6EDD2text14.744.5
dayink #2A160Dground-code #F1E3BFtext13.524.5
dayink #2A160Dwell #FFFAEBtext16.514.5
dayink-muted #6E5740ground #FBF3DEtext6.124.5
dayink-muted #6E5740ground-side #F9EFD6text5.924.5
dayink-muted #6E5740surface #FFFBF0text6.554.5
dayink-muted #6E5740surface-2 #F6EDD2text5.794.5
dayhairline #D9C79Csurface #FFFBF0decorative1.61measured
dayhairline-strong #8C7454surface #FFFBF0non-text4.283.0
dayhairline-strong #8C7454ground #FBF3DEnon-text4.003.0
daymetal #A96E2Dground #FBF3DEnon-text3.833.0
daymetal #A96E2Dground-stage #F5DCA6non-text3.163.0
dayfocus #2A160Dground #FBF3DEnon-text15.573.0
dayfocus #2A160Dsurface #FFFBF0non-text16.663.0
dayfocus #2A160Dsurface-2 #F6EDD2non-text14.743.0
dayfocus #2A160Dground-side #F9EFD6non-text15.053.0
daystatus-ok #1F6F43surface #FFFBF0text5.954.5
daystatus-ok #1F6F43ground #FBF3DEtext5.564.5
daystatus-warn #7A5A0Esurface #FFFBF0text6.164.5
daystatus-warn #7A5A0Eground #FBF3DEtext5.764.5
daystatus-no #A62B1Esurface #FFFBF0text6.804.5
daystatus-no #A62B1Eground #FBF3DEtext6.364.5
dayaccent #285A1Cground #FBF3DEnon-text7.393.0
dayaccent #285A1Csurface #FFFBF0non-text7.903.0
dayaccent-ink #F7F0DFaccent #285A1Ctext7.194.5
daylink #285A1Cground #FBF3DEtext7.394.5
daylink #285A1Cground-side #F9EFD6text7.144.5
daylink #285A1Csurface #FFFBF0text7.904.5
daysignal-edge #553316ground #FBF3DEnon-text10.143.0
nightsurface #1F2226ground #17191Cdecorative1.10measured
nightink #F7F0DFground #17191Ctext15.504.5
nightink #F7F0DFground-side #1F2226text14.064.5
nightink #F7F0DFsurface #1F2226text14.064.5
nightink #F7F0DFsurface-2 #23272Ctext13.224.5
nightink #F7F0DFground-code #23272Ctext13.224.5
nightink #F7F0DFwell #23272Ctext13.224.5
nightink-muted #CDC2AAground #17191Ctext9.984.5
nightink-muted #CDC2AAground-side #1F2226text9.044.5
nightink-muted #CDC2AAsurface #1F2226text9.044.5
nightink-muted #CDC2AAsurface-2 #23272Ctext8.514.5
nighthairline #33383Fsurface #1F2226decorative1.35measured
nighthairline-strong #8A7E68surface #1F2226non-text4.003.0
nighthairline-strong #8A7E68ground #17191Cnon-text4.423.0
nightmetal #A96E2Dground #17191Cnon-text4.163.0
nightmetal #A96E2Dground-stage #17191Cnon-text4.163.0
nightfocus #FFF2A8ground #17191Cnon-text15.533.0
nightfocus #FFF2A8surface #1F2226non-text14.083.0
nightfocus #FFF2A8surface-2 #23272Cnon-text13.253.0
nightfocus #FFF2A8ground-side #1F2226non-text14.083.0
nightstatus-ok #6FD39Bsurface #1F2226text8.724.5
nightstatus-ok #6FD39Bground #17191Ctext9.624.5
nightstatus-warn #E2B26Asurface #1F2226text8.224.5
nightstatus-warn #E2B26Aground #17191Ctext9.074.5
nightstatus-no #F09085surface #1F2226text6.874.5
nightstatus-no #F09085ground #17191Ctext7.584.5
nightaccent #347A32ground #17191Cnon-text3.333.0
nightaccent #347A32surface #1F2226non-text3.023.0
nightaccent-ink #F7F0DFaccent #347A32text4.654.5
nightlink #8CBF63ground #17191Ctext8.184.5
nightlink #8CBF63ground-side #1F2226text7.414.5
nightlink #8CBF63surface #1F2226text7.414.5
nightsignal #E2B26Aground #17191Cnon-text9.073.0

The gate as the laboratory describes it