41 rules of 94
A coverage percentage with no denominator is the claim this whole project exists to argue with. So 94 sits next to every fraction here, including in the page title.
Who reports it, and how Marlo's own version measured
"Reported by" is the router's pick from the calibration table. Where that is not Marlo, Marlo's rule measured worse and a better engine took it.
| Rule | Name | Reported by | Marlo P | Marlo R | Cases |
|---|---|---|---|---|---|
047fe0 |
Document has heading for non-repeated content | Marlo | 1.000 | 0.750 | 14 |
09o5cg |
Text has enhanced contrast | axe-core | not measured | not measured | 29 |
23a2a8 |
Image has non-empty accessible name | axe-core | 1.000 | 0.800 | 18 |
24afc2 |
Important letter spacing in style attributes is wide enough | Marlo | 1.000 | 0.750 | 16 |
2779a5 |
HTML page has non-empty title | axe-core | 0.625 | 1.000 | 11 |
2ee8b8 |
Visible label is part of accessible name | Marlo | 1.000 | 1.000 | 13 |
36b590 |
Error message describes invalid form field value | Marlo | not measured | 0.000 | 9 |
3ea0c8 |
Id attribute value is unique | Marlo | 1.000 | 1.000 | 10 |
46ca7f |
Element marked as decorative is not exposed | Marlo | 1.000 | 1.000 | 10 |
4e8ab6 |
Element with role attribute has required states and properties | Marlo | 1.000 | 1.000 | 8 |
59796f |
Image button has non-empty accessible name | Marlo | 1.000 | 1.000 | 12 |
5b7ae0 |
HTML page lang and xml:lang attributes have matching values | Marlo | 1.000 | 1.000 | 12 |
5c01ea |
ARIA state or property is permitted | Alfa | not measured | 0.000 | 15 |
5f99a7 |
ARIA attribute is defined in WAI-ARIA | Marlo | 1.000 | 1.000 | 7 |
674b10 |
Role attribute has valid value | Marlo | 1.000 | 1.000 | 10 |
6a7281 |
ARIA state or property has valid value | Alfa | 0.909 | 1.000 | 24 |
6cfa84 |
Element with aria-hidden has no content in sequential focus navigation | axe-core | 0.750 | 1.000 | 14 |
78fd32 |
Important line height in style attributes is wide enough | Marlo | 1.000 | 0.833 | 21 |
7d6734 |
SVG element with explicit role has non-empty accessible name | axe-core | 1.000 | 0.750 | 10 |
8fc3b6 |
Object element rendering non-text content has non-empty accessible name | axe-core | 0.800 | 1.000 | 14 |
97a4e1 |
Button has non-empty accessible name | axe-core | 0.833 | 1.000 | 17 |
9e45ec |
Important word spacing in style attributes is wide enough | Marlo | 1.000 | 0.750 | 16 |
9eb3f6 |
Image filename is accessible name for image | Marlo | not measured | 0.000 | 15 |
afw4f7 |
Text has minimum contrast | axe-core | not measured | not measured | 28 |
b40fd1 |
Document has a landmark with non-repeated content | Marlo | 1.000 | 1.000 | 8 |
b4f0c3 |
Meta viewport allows for zoom | axe-core | 0.750 | 0.750 | 11 |
b5c3f8 |
HTML page has lang attribute | Marlo | 1.000 | 1.000 | 7 |
bc4a75 |
ARIA required owned elements | Alfa | 0.600 | 0.429 | 19 |
bc659a |
Meta element has no refresh delay | Alfa | 1.000 | 0.500 | 15 |
bf051a |
HTML page lang attribute has valid language tag | axe-core | 0.500 | 0.250 | 7 |
bisz58 |
Meta element has no refresh delay (no exception) | Alfa | 1.000 | 0.500 | 14 |
c487ae |
Link has non-empty accessible name | axe-core | 1.000 | 0.273 | 28 |
cae760 |
Iframe element has non-empty accessible name | axe-core | 0.800 | 1.000 | 10 |
cf77f2 |
Bypass Blocks of Repeated Content | Marlo | not measured | 0.000 | 14 |
de46e4 |
Element with lang attribute has valid language tag | axe-core | 0.600 | 0.667 | 19 |
e086e5 |
Form field has non-empty accessible name | axe-core | 0.750 | 0.429 | 17 |
e6952f |
Attribute is not duplicated | Marlo | not measured | 0.000 | 10 |
e88epe |
Image not in the accessibility tree is decorative | Marlo | not measured | 0.000 | 20 |
ff89c9 |
ARIA required context role | Alfa | 0.500 | 0.250 | 15 |
ffd0e9 |
Heading has non-empty accessible name | axe-core | 1.000 | 0.500 | 15 |
ye5d6e |
Document has an instrument to move focus to non-repeated content | Marlo | 1.000 | 0.333 | 12 |
That filter is radio inputs and a CSS :has() selector. There is no
JavaScript on this site, so where :has() is unsupported every row
stays visible, which is the right way round to fail.
Want a rule that is not on the list?
One file, one registry line, one fixture set. A rule that measures badly still gets merged, published with its real numbers, and routed to a better engine. The only kind that cannot be merged is one with no measurement at all.