UX-DSL
XS0px

Contrast

The WCAG gate, run on the theme you are looking at.
Switch the theme in the header and the report is recomputed.

What runs here

checkThemeContrast(resolveTheme(theme), { exceptions }) from postcss-uxdsl/ds-runtime, with the exceptions shipped next to the base theme (postcss-uxdsl/theme/base.contrast-exceptions.json) — the same call uxdsl theme --contrast makes in a terminal (its real output is on the CLI page). It checks every text, placeholder and border pair the Surface, Button and Input engines define, in light and dark mode, at every configured breakpoint width, against 4.5:1 for text and 3:1 for borders.

It checks the colors a theme resolves to, not a rendered page: it is not an accessibility certification. And today it fails, for this site's themes and for the packaged base: the failures are real, disclosed and tracked (MIG-B6-29, MIG-B7-01), not hidden behind exceptions. That is what the verdict below says.

Themedefault
Verdictfails
Pairs checked824
Failing pairs123
Exceptions (matched)1 (1)
Exception issues0
Failing pairs by mode, family and kind
GroupFailing
dark · button · text19
light · input · text18
dark · input · text18
light · button · text15
dark · input · placeholder9
dark · input · border9
dark · button · border8
light · input · border6
dark · surface · text6
light · surface · text5
light · button · border5
dark · surface · border3
light · surface · border2
Show
123 failing pair(s)
ModeComponentToneStatePairWidth ≥RatioNeeds
lightsurface.outlinedsurfacebasetext0px1.004.5
lightsurface.outlinedsurfacebaseborder0px1.003
lightsurface.outlinedwarningbasetext0px3.194.5
lightsurface.outlinedlightbaseborder0px1.103
lightsurface.flatsurfacebasetext0px1.004.5
lightsurface.flatwarningbasetext0px3.194.5
lightsurface.flatlightbasetext0px1.104.5
lightbutton.outlinedsurfacebasetext0px1.004.5
lightbutton.outlinedsurfacebaseborder0px1.003
lightbutton.outlinedsurfacehovertext0px3.134.5
lightbutton.outlinedsurfaceselectedborder0px1.003
lightbutton.outlinedwarningbasetext0px3.194.5
lightbutton.outlinedwarninghovertext0px4.294.5
lightbutton.outlinedlightbasetext0px1.104.5
lightbutton.outlinedlightbaseborder0px1.103
lightbutton.outlinedlighthovertext0px1.234.5
lightbutton.outlinedlighthoverborder0px1.233
lightbutton.outlinedlightselectedborder0px1.103
lightbutton.flatsurfacebasetext0px1.004.5
lightbutton.flatsurfacehovertext0px3.134.5
lightbutton.flatsurfaceselectedtext0px3.134.5
lightbutton.flatwarningbasetext0px3.194.5
lightbutton.flatwarninghovertext0px4.294.5
lightbutton.flatwarningselectedtext0px4.294.5
lightbutton.flatlightbasetext0px1.104.5
lightbutton.flatlighthovertext0px1.234.5
lightbutton.flatlightselectedtext0px1.234.5
lightinput.containedsurfacefocusborder0px1.003
lightinput.containedlightfocusborder0px1.103
lightinput.outlinedsurfacebasetext0px1.004.5
lightinput.outlinedsurfacebaseborder0px1.003
lightinput.outlinedsurfacefocustext0px1.004.5
lightinput.outlinedsurfacefocusborder0px1.003
lightinput.outlinedsurfaceinvalidtext0px1.004.5
lightinput.outlinedwarningbasetext0px3.194.5
lightinput.outlinedwarningfocustext0px3.194.5
lightinput.outlinedwarninginvalidtext0px3.194.5
lightinput.outlinedlightbasetext0px1.104.5
lightinput.outlinedlightbaseborder0px1.103
lightinput.outlinedlightfocustext0px1.104.5
lightinput.outlinedlightfocusborder0px1.103
lightinput.outlinedlightinvalidtext0px1.104.5
lightinput.underlinesurfacebasetext0px1.004.5
lightinput.underlinesurfacefocustext0px1.004.5
lightinput.underlinesurfaceinvalidtext0px1.004.5
lightinput.underlinewarningbasetext0px3.194.5
lightinput.underlinewarningfocustext0px3.194.5
lightinput.underlinewarninginvalidtext0px3.194.5
lightinput.underlinelightbasetext0px1.104.5
lightinput.underlinelightfocustext0px1.104.5
lightinput.underlinelightinvalidtext0px1.104.5
darksurface.outlinedsurfacebasetext0px1.004.5
darksurface.outlinedsurfacebaseborder0px1.003
darksurface.outlineddarkbasetext0px1.044.5
darksurface.outlineddarkbaseborder0px1.043
darksurface.outlinedlightbasetext0px1.384.5
darksurface.outlinedlightbaseborder0px1.383
darksurface.flatsurfacebasetext0px1.004.5
darksurface.flatdarkbasetext0px1.044.5
darksurface.flatlightbasetext0px1.384.5
darkbutton.containedneutralhovertext0px2.774.5
darkbutton.containedneutralselectedtext0px2.774.5
darkbutton.containedlighthovertext0px1.184.5
darkbutton.containedlightselectedtext0px1.184.5
darkbutton.outlinedsurfacebasetext0px1.004.5
darkbutton.outlinedsurfacebaseborder0px1.003
darkbutton.outlinedsurfacehovertext0px3.214.5
darkbutton.outlinedsurfaceselectedborder0px1.003
darkbutton.outlineddarkbasetext0px1.044.5
darkbutton.outlineddarkbaseborder0px1.043
darkbutton.outlineddarkhovertext0px1.004.5
darkbutton.outlineddarkhoverborder0px1.003
darkbutton.outlineddarkselectedborder0px1.043
darkbutton.outlinedneutralhovertext0px2.664.5
darkbutton.outlinedneutralhoverborder0px2.663
darkbutton.outlinedlightbasetext0px1.384.5
darkbutton.outlinedlightbaseborder0px1.383
darkbutton.outlinedlightselectedborder0px1.383
darkbutton.flatsurfacebasetext0px1.004.5
darkbutton.flatsurfacehovertext0px3.214.5
darkbutton.flatsurfaceselectedtext0px3.214.5
darkbutton.flatdarkbasetext0px1.044.5
darkbutton.flatdarkhovertext0px1.004.5
darkbutton.flatdarkselectedtext0px1.004.5
darkbutton.flatneutralhovertext0px2.664.5
darkbutton.flatneutralselectedtext0px2.664.5
darkbutton.flatlightbasetext0px1.384.5
darkinput.contained—baseplaceholder0px2.664.5
darkinput.contained—focusplaceholder0px2.664.5
darkinput.contained—invalidplaceholder0px2.664.5
darkinput.containedsurfacefocusborder0px1.003
darkinput.containeddarkfocusborder0px1.043
darkinput.containedlightfocusborder0px1.383
darkinput.outlined—baseplaceholder0px2.664.5
darkinput.outlined—focusplaceholder0px2.664.5
darkinput.outlined—invalidplaceholder0px2.664.5
darkinput.outlinedsurfacebasetext0px1.004.5
darkinput.outlinedsurfacebaseborder0px1.003
darkinput.outlinedsurfacefocustext0px1.004.5
darkinput.outlinedsurfacefocusborder0px1.003
darkinput.outlinedsurfaceinvalidtext0px1.004.5
darkinput.outlineddarkbasetext0px1.044.5
darkinput.outlineddarkbaseborder0px1.043
darkinput.outlineddarkfocustext0px1.044.5
darkinput.outlineddarkfocusborder0px1.043
darkinput.outlineddarkinvalidtext0px1.044.5
darkinput.outlinedlightbasetext0px1.384.5
darkinput.outlinedlightbaseborder0px1.383
darkinput.outlinedlightfocustext0px1.384.5
darkinput.outlinedlightfocusborder0px1.383
darkinput.outlinedlightinvalidtext0px1.384.5
darkinput.underline—baseplaceholder0px2.664.5
darkinput.underline—focusplaceholder0px2.664.5
darkinput.underline—invalidplaceholder0px2.664.5
darkinput.underlinesurfacebasetext0px1.004.5
darkinput.underlinesurfacefocustext0px1.004.5
darkinput.underlinesurfaceinvalidtext0px1.004.5
darkinput.underlinedarkbasetext0px1.044.5
darkinput.underlinedarkfocustext0px1.044.5
darkinput.underlinedarkinvalidtext0px1.044.5
darkinput.underlinelightbasetext0px1.384.5
darkinput.underlinelightfocustext0px1.384.5
darkinput.underlinelightinvalidtext0px1.384.5