testilo 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +33 -3
  2. package/compare.js +8 -8
  3. package/package.json +1 -1
  4. package/procs/compare/cp0/index.html +10 -5
  5. package/procs/compare/cp0/index.js +2 -4
  6. package/procs/compare/cp1/index.html +46 -0
  7. package/procs/compare/cp1/index.js +71 -0
  8. package/procs/digest/dp10a/index.html +3 -3
  9. package/procs/digest/dp10b/index.html +74 -0
  10. package/procs/digest/dp10b/index.js +130 -0
  11. package/procs/digest/dp10c/index.html +55 -0
  12. package/procs/digest/dp10c/index.js +129 -0
  13. package/procs/score/sp10b.js +507 -0
  14. package/procs/score/sp10c.js +465 -0
  15. package/reports/comparative/railsites.html +47 -0
  16. package/reports/comparative/style.css +4 -0
  17. package/reports/digested/35k1r-railpass.html +1130 -844
  18. package/reports/digested/3aee6-eurail.html +36233 -0
  19. package/reports/digested/dp10a/35k1r-railpass.html +9302 -0
  20. package/reports/digested/dp10a/3aee6-eurail.html +35782 -0
  21. package/reports/digested/style.css +2 -2
  22. package/reports/raw/3aee6-eurail.json +35250 -0
  23. package/reports/scored/35k1r-railpass.json +559 -175
  24. package/reports/scored/3aee6-eurail.json +35957 -0
  25. package/score.js +1 -1
  26. package/scoring/data/duplications.json +22 -22
  27. package/scoring/data/groups.json +335 -0
  28. package/scoring/data/packageRules/alfa.tsv +82 -0
  29. package/scoring/data/packageRules/axe.js +390 -0
  30. package/scoring/data/packageRules/ibm.tsv +159 -0
  31. package/scoring/data/packageRules/tenon.tsv +14 -0
  32. package/scoring/data/packageRules/wave.json +1617 -0
  33. package/scoring/data/packageRules/wave.tsv +55 -0
  34. package/scoring/data/testGroups.json +1067 -0
  35. package/scoring/{data → procs}/correlation.js +0 -0
  36. package/scoring/{data → procs}/dupCounts.js +0 -0
  37. package/scoring/procs/groups.js +61 -0
  38. package/scoring/{data → procs}/packageData.js +0 -0
  39. package/scoring/{data → procs}/packageIssues.js +0 -0
  40. package/scoring/procs/regroup.js +39 -0
  41. package/reports/comparative/35k1r-.html +0 -41
package/score.js CHANGED
@@ -30,7 +30,7 @@ const score = async () => {
30
30
  const reportJSON = await fs
31
31
  .readFile(`${reportDirRawAbs}/${fileName}`, 'utf8');
32
32
  const report = JSON.parse(reportJSON);
33
- scorer(report);
33
+ await scorer(report);
34
34
  report.score.scoreProcID = scoreProcID;
35
35
  const scoredReportJSON = JSON.stringify(report, null, 2);
36
36
  await fs.writeFile(`${__dirname}/${reportDirScored}/${fileName}`, `${scoredReportJSON}\n`);
@@ -1,75 +1,75 @@
1
1
  {
2
2
  "aatt_alfa": {
3
- "e:F77": {
3
+ "e:F77 Duplicate id attribute value": {
4
4
  "r3": "0.89 (253)"
5
5
  },
6
- "e:H36": {
6
+ "e:H36 Image submit button missing an alt attribute": {
7
7
  "r28": "0.98 (6)"
8
8
  },
9
- "e:H37": {
9
+ "e:H37 Img element missing an alt attribute": {
10
10
  "r2": "0.72 (221)"
11
11
  },
12
- "e:H57": {
12
+ "e:H57 lang attribute of the document element": {
13
13
  "r4": "0.81 (66)"
14
14
  },
15
- "e:H58": {
15
+ "e:H58 change in language is marked": {
16
16
  "r7": "0.82 (5)"
17
17
  },
18
- "w:G141": {
18
+ "w:G141 heading structure is not logically nested": {
19
19
  "r53": "0.89 (427)"
20
20
  },
21
- "w:H98": {
21
+ "w:H98 autocomplete attribute": {
22
22
  "r10": "0.95 (3)"
23
23
  }
24
24
  },
25
25
  "aatt_axe": {
26
- "e:H36": {
26
+ "e:H36 Image submit button missing an alt attribute": {
27
27
  "input-image-alt": "0.98 (6)"
28
28
  },
29
- "e:H57": {
29
+ "e:H57 lang attribute of the document element": {
30
30
  "html-has-lang": "0.73 (75)"
31
31
  },
32
- "e:H58": {
32
+ "e:H58 change in language is marked": {
33
33
  "valid-lang": "0.82 (5)"
34
34
  },
35
- "w:G141": {
35
+ "w:G141 heading structure is not logically nested": {
36
36
  "heading-order": "0.79 (515)"
37
37
  }
38
38
  },
39
39
  "aatt_ibm": {
40
- "e:ARIA6+H53": {
40
+ "e:ARIA6+H53 Object elements must contain a text alternative": {
41
41
  "v:WCAG20_Object_HasText": "1.00 (6)"
42
42
  },
43
- "e:H24": {
43
+ "e:H24 Area element in an image map missing an alt attribute": {
44
44
  "v:WCAG20_Area_HasAlt": "0.79 (4)"
45
45
  },
46
- "e:H36": {
46
+ "e:H36 Image submit button missing an alt attribute": {
47
47
  "v:WCAG20_Input_ExplicitLabelImage": "0.98 (6)"
48
48
  }
49
49
  },
50
50
  "aatt_wave": {
51
- "e:G1+G123+G124": {
51
+ "e:G1+G123+G124 common navigation elements can be bypassed": {
52
52
  "a:link_internal_broken": "0.94 (109)"
53
53
  },
54
- "e:H24": {
54
+ "e:H24 Area element in an image map missing an alt attribute": {
55
55
  "e:alt_area_missing": "0.73 (5)"
56
56
  },
57
- "e:H36": {
57
+ "e:H36 Image submit button missing an alt attribute": {
58
58
  "e:alt_input_missing": "0.91 (7)"
59
59
  },
60
- "e:H37": {
60
+ "e:H37 Img element missing an alt attribute": {
61
61
  "e:alt_missing": "0.75 (274)"
62
62
  },
63
- "e:H57": {
63
+ "e:H57 lang attribute of the document element": {
64
64
  "e:language_missing": "0.72 (85)"
65
65
  },
66
- "w:G141": {
66
+ "w:G141 heading structure is not logically nested": {
67
67
  "a:heading_skipped": "0.85 (535)"
68
68
  },
69
- "w:G90": {
69
+ "w:G90 event handler functionality is available through the keyboard": {
70
70
  "a:event_handler": "0.76 (109)"
71
71
  },
72
- "w:H44": {
72
+ "w:H44 label for attribute bad ID": {
73
73
  "a:label_orphaned": "0.71 (67)"
74
74
  }
75
75
  },
@@ -0,0 +1,335 @@
1
+ {
2
+ "duplicateID": {
3
+ "aatt": ["e:F77 Duplicate id attribute value"],
4
+ "alfa": ["r3 Element ID is not unique"],
5
+ "axe": ["duplicate-id ID attribute value must be unique"],
6
+ "ibm": [
7
+ "RPT_Elem_UniqueId Element id attribute values must be unique within a document"
8
+ ]
9
+ },
10
+ "imageInputNoText": {
11
+ "aatt": ["e:H36 Image submit button missing an alt attribute"],
12
+ "alfa": ["r28 Image input element has no accessible name"],
13
+ "axe": ["input-image-alt Image buttons must have alternate text"],
14
+ "ibm": [
15
+ "v:WCAG20_Input_ExplicitLabelImage Input element of type image should have a text alternative"
16
+ ],
17
+ "wave": ["e:alt_input_missing Image button missing alternative text"]
18
+ },
19
+ "imageNoText": {
20
+ "aatt": ["e:H37 Img element missing an alt attribute"],
21
+ "alfa": ["r2 Image has no accessible name"],
22
+ "axe": ["image-alt Images must have alternate text"],
23
+ "ibm": [
24
+ "v:WCAG20_Img_HasAlt Images must have an alt attribute if they convey meaning, or alt=\"\" if decorative"
25
+ ],
26
+ "wave": ["e:alt_missing Missing alternative text"]
27
+ },
28
+ "pageLanguage": {
29
+ "aatt": ["e:H57 Lang attribute of the document element"],
30
+ "alfa": ["r4 Lang attribute missing, empty, or only whitespace"],
31
+ "axe": ["html-has-lang Html element must have a lang attribute"],
32
+ "ibm": [
33
+ "WCAG20_Html_HasLang Page detected as HTML, but has no lang attribute"
34
+ ],
35
+ "wave": ["e:language_missing Language missing or invalid"]
36
+ },
37
+ "pageLanguageBad": {
38
+ "alfa": ["r5 Lang attribute has no valid primary language tag"],
39
+ "axe": [
40
+ "html-lang-valid Html element must have a valid value for the lang attribute"
41
+ ],
42
+ "ibm": [
43
+ "v:WCAG20_Elem_Lang_Valid Lang attribute does not include a valid primary language"
44
+ ]
45
+ },
46
+ "languageChange": {
47
+ "aatt": ["e:H58 Change in language is not marked"],
48
+ "alfa": ["r7 Lang attribute has no valid primary language subtag"],
49
+ "axe": ["valid-lang Lang attribute must have a valid value"]
50
+ },
51
+ "headingStructure": {
52
+ "aatt": ["w:G141 Heading structure is not logically nested"],
53
+ "alfa": ["r53 Heading skips one or more levels"],
54
+ "axe": ["heading-order Heading levels should only increase by one"],
55
+ "tenon": ["155 These headings are not structured in a hierarchical manner"],
56
+ "wave": ["a:heading_skipped Skipped heading level"]
57
+ },
58
+ "objectNoText": {
59
+ "aatt": ["e:ARIA6+H53 Object elements must contain a text alternative"],
60
+ "axe": ["object-alt Object elements must have alternate text"],
61
+ "ibm": [
62
+ "v:WCAG20_Object_HasText Object elements must have a text alternative"
63
+ ],
64
+ "wave": ["a:plugin An unidentified plugin is present"]
65
+ },
66
+ "imageMapAreaNoText": {
67
+ "aatt": ["e:H24 Area element in an image map missing an alt attribute"],
68
+ "axe": ["area-alt Active area elements must have alternate text"],
69
+ "ibm": [
70
+ "v:HAAC_Img_UsemapAlt Image map or child area has no text alternative",
71
+ "v:WCAG20_Area_HasAlt Area element in an image map has no text alternative"
72
+ ],
73
+ "wave": ["e:alt_area_missing Image map area missing alternative text"]
74
+ },
75
+ "eventKeyboard": {
76
+ "aatt": ["w:G90 Event handler functionality not available by keyboard"],
77
+ "wave": ["a:event_handler Device-dependent event handler"]
78
+ },
79
+ "labelForBadID": {
80
+ "aatt": ["w:H44 Label for attribute is bad ID"],
81
+ "wave": ["a:label_orphaned Orphaned form label"]
82
+ },
83
+ "linkNoText": {
84
+ "alfa": ["r11 Link has no accessible name"],
85
+ "axe": ["link-name Links must have discernible text"],
86
+ "ibm": ["v:WCAG20_A_HasText Hyperlinks must have a text description"],
87
+ "tenon": ["57 Link has no text inside it"],
88
+ "wave": ["e:link_empty Link contains no text"]
89
+ },
90
+ "linkTextsSame": {
91
+ "tenon": ["98 These links have the same text but different destinations"]
92
+ },
93
+ "linkPair": {
94
+ "wave": ["a:link_redundant Adjacent links go to same URL"]
95
+ },
96
+ "linkForcesNewWindow": {
97
+ "tenon": ["218 Link opens in a new window without user control"]
98
+ },
99
+ "buttonNoText": {
100
+ "alfa": ["r12 Button has no accessible name"],
101
+ "axe": ["aria-command-name ARIA commands must have an accessible name"],
102
+ "wave": ["e:button_empty Button is empty or has no value text"]
103
+ },
104
+ "parentMissing": {
105
+ "alfa": [
106
+ "r42 Element is not owned by an element of its required context role"
107
+ ],
108
+ "axe": [
109
+ "aria-required-parent Certain ARIA roles must be contained by particular parents"
110
+ ]
111
+ },
112
+ "svgImageNoText": {
113
+ "alfa": ["r43 SVG image element has no accessible name"],
114
+ "axe": [
115
+ "svg-img-alt SVG elements with an img role must have an alternative text"
116
+ ]
117
+ },
118
+ "metaBansZoom": {
119
+ "alfa": ["r47 Meta element restricts zooming"],
120
+ "axe": ["meta-viewport Zooming and scaling should not be disabled"]
121
+ },
122
+ "childMissing": {
123
+ "alfa": ["r68 Element owns no elements as required by its semantic role"],
124
+ "axe": [
125
+ "aria-required-children Certain ARIA roles must contain particular children"
126
+ ]
127
+ },
128
+ "leadingFrozen": {
129
+ "alfa": [
130
+ "r93 Style attribute with !important prevents adjusting line height"
131
+ ],
132
+ "axe": [
133
+ "avoid-inline-spacing Inline text spacing must be adjustable with custom stylesheets"
134
+ ]
135
+ },
136
+ "noLeading": {
137
+ "alfa": ["r73 Paragraphs of text have insufficient line height"]
138
+ },
139
+ "leadingClipsText": {
140
+ "tenon": [
141
+ "144 Line height insufficent to properly display computed font size"
142
+ ]
143
+ },
144
+ "iframeNoText": {
145
+ "alfa": ["r13 Iframe has no accessible name"],
146
+ "axe": ["frame-title Frames must have an accessible name"],
147
+ "ibm": [
148
+ "v:WCAG20_Frame_HasTitle Inline frames must have a unique, non-empty title attribute"
149
+ ]
150
+ },
151
+ "roleBad": {
152
+ "axe": [
153
+ "aria-allowed-role ARIA role should be appropriate for the element"
154
+ ],
155
+ "ibm": [
156
+ "v:aria_semantics_role ARIA roles must be valid for the element to which they are assigned"
157
+ ],
158
+ "testaro": ["role Nonexistent or implicit-overriding role"]
159
+ },
160
+ "roleMissingAttribute": {
161
+ "axe": ["aria-required-attr Required ARIA attributes must be provided"],
162
+ "ibm": [
163
+ "v:Rpt_Aria_RequiredProperties ARIA role on an element must have required attributes"
164
+ ]
165
+ },
166
+ "roleBadAttribute": {
167
+ "alfa": ["r20 Aria- attribute is not defined"],
168
+ "axe": ["aria-valid-attr ARIA attributes must conform to valid names"],
169
+ "ibm": [
170
+ "v:Rpt_Aria_ValidProperty ARIA attributes must be valid for the role"
171
+ ]
172
+ },
173
+ "autocompleteBad": {
174
+ "aatt": ["w:H98 Autocomplete attribute wrong"],
175
+ "alfa": ["r10 Autocomplete attribute has no valid value"],
176
+ "axe": ["autocomplete-valid Autocomplete attribute must be used correctly"],
177
+ "ibm": [
178
+ "v:WCAG21_Input_Autocomplete Autocomplete attribute token(s) must be appropriate for the input form field"
179
+ ]
180
+ },
181
+ "contrastAA": {
182
+ "alfa": ["r69 Text outside widget has subminimum contrast"],
183
+ "axe": ["color-contrast Elements must have sufficient color contrast"],
184
+ "ibm": [
185
+ "v:IBMA_Color_Contrast_WCAG2AA Contrast ratio of text with background must meet WCAG 2.1 AA"
186
+ ],
187
+ "wave": ["c:contrast Very low contrast"]
188
+ },
189
+ "contrastAAA": {
190
+ "alfa": ["r66 Text contrast less than AAA requires"],
191
+ "tenon": ["95 Element has insufficient color contrast (Level AAA)"]
192
+ },
193
+ "contrastRisk": {
194
+ "aatt": [
195
+ "w:F24 Inline background color needs complementary foreground color",
196
+ "w:G18 Contrast adequacy not determinable"
197
+ ]
198
+ },
199
+ "headingEmpty": {
200
+ "axe": ["empty-heading Headings should not be empty"],
201
+ "ibm": [
202
+ "v:RPT_Header_HasContent Heading elements must provide descriptive text"
203
+ ],
204
+ "wave": ["e:heading_empty Empty heading"]
205
+ },
206
+ "imageTextRedundant": {
207
+ "axe": [
208
+ "image-redundant-alt Text of buttons and links should not be repeated in the image alternative"
209
+ ],
210
+ "ibm": [
211
+ "v:WCAG20_Img_LinkTextNotRedundant Text alternative for image within link should not repeat link text or adjacent link text"
212
+ ]
213
+ },
214
+ "linkTitleRedundant": {
215
+ "tenon": [
216
+ "79 Link has a title attribute that is the same as the text inside the link"
217
+ ]
218
+ },
219
+ "pageTitle": {
220
+ "axe": ["document-title Documents must contain a title element"],
221
+ "wave": ["e:title_invalid Missing or uninformative page title"]
222
+ },
223
+ "h1Missing": {
224
+ "axe": ["page-has-heading-one Page should contain a level-one heading"],
225
+ "wave": ["a:h1_missing Missing first level heading"]
226
+ },
227
+ "pseudoHeadingRisk": {
228
+ "aatt": ["w:H42 Heading coding should be used if intended as a heading"]
229
+ },
230
+ "pseudoLinkRisk": {
231
+ "tenon": ["129 CSS underline on text that is not a link"]
232
+ },
233
+ "pseudoListRisk": {
234
+ "aatt": ["w:H48 Navigation links should be coded as list"]
235
+ },
236
+ "selectNoText": {
237
+ "aatt": [
238
+ "w:H91 Select element has no value available to an accessibility API"
239
+ ],
240
+ "axe": ["select-name Select element must have an accessible name"],
241
+ "wave": ["a:select_missing_label Select missing label"]
242
+ },
243
+ "selectFlatRisk": {
244
+ "aatt": [
245
+ "w:H85 If selection list contains groups of related options, they should be grouped with optgroup"
246
+ ]
247
+ },
248
+ "ariaReferenceBad": {
249
+ "ibm": [
250
+ "v:Rpt_Aria_ValidIdRef ARIA property must reference non-empty unique id of visible element"
251
+ ],
252
+ "wave": ["e:aria_reference_broken Broken ARIA reference"]
253
+ },
254
+ "accessKeyDuplicate": {
255
+ "ibm": [
256
+ "v:WCAG20_Elem_UniqueAccessKey Accesskey attribute values on each element must be unique for the page"
257
+ ],
258
+ "wave": ["a:accesskey Accesskey"]
259
+ },
260
+ "fieldSetMissing": {
261
+ "ibm": [
262
+ "v:WCAG20_Input_RadioChkInFieldSet Input is in a different group than another with the name"
263
+ ],
264
+ "testaro": [
265
+ "radioSet No or invalid grouping of radio buttons in fieldsets"
266
+ ],
267
+ "wave": ["a:fieldset_missing Missing fieldset"]
268
+ },
269
+ "nameValue": {
270
+ "aatt": [
271
+ "e:F68 Form control wrongly labeled or unlabeled",
272
+ "e:H91 Missing name or value of form control or link"
273
+ ],
274
+ "wave": ["e:label_missing Missing form label"]
275
+ },
276
+ "targetSize": {
277
+ "tenon": [
278
+ "152 Actionable element is smaller than the minimum required size"
279
+ ]
280
+ },
281
+ "visibleBulk": {
282
+ "testaro": ["bulk Count of visible elements as a multiple of 300"]
283
+ },
284
+ "activeEmbedding": {
285
+ "testaro": ["embAc Active elements embedded in links or buttons"]
286
+ },
287
+ "tabFocusability": {
288
+ "testaro": [
289
+ "focAll Discrepancy between elements that should be and that are Tab-focusable"
290
+ ]
291
+ },
292
+ "focusIndication": {
293
+ "alfa": ["r65 Element in sequential focus order has no visible focus"],
294
+ "testaro": [
295
+ "focInd Focused element displaying no or nostandard focus indicator"
296
+ ]
297
+ },
298
+ "allCaps": {
299
+ "tenon": ["153 Long string of text is in all caps"]
300
+ },
301
+ "textBeyondLandmarks": {
302
+ "alfa": ["r57 Perceivable text content not included in any landmark"]
303
+ },
304
+ "focusableOperable": {
305
+ "testaro": [
306
+ "focOp Operable elements that cannot be Tab-focused and vice versa"
307
+ ]
308
+ },
309
+ "hoverSurprise": {
310
+ "testaro": ["hover Content changes caused by hovering"]
311
+ },
312
+ "labelClash": {
313
+ "testaro": ["labClash Incompatible label types"]
314
+ },
315
+ "linkUnderlines": {
316
+ "testaro": ["linkUl Non-underlined inline links"]
317
+ },
318
+ "menuNavigation": {
319
+ "testaro": [
320
+ "menuNav Nonstandard keyboard navigation among focusable menu items"
321
+ ]
322
+ },
323
+ "tabNavigation": {
324
+ "testaro": ["tabNav Nonstandard keyboard navigation among tabs"]
325
+ },
326
+ "spontaneousMotion": {
327
+ "testaro": ["motion Change of visible content not requested by user"]
328
+ },
329
+ "inconsistentStyles": {
330
+ "testaro": ["styleDiff Heading, link, and button style inconsistencies"]
331
+ },
332
+ "zIndexNotZero": {
333
+ "testaro": ["zIndex Layering with nondefault z-index values"]
334
+ }
335
+ }
@@ -0,0 +1,82 @@
1
+ er62 The link is not distinguishable from the surrounding text
2
+ er65 The element does not have a visible focus indicator
3
+ er87 The document has no valid tabbable descendants or its first one is invalid
4
+ r1 The document has no valid title element
5
+ r10 The autocomplete attribute does not have a valid value
6
+ r109 The lang attribute does not match the document language
7
+ r11 The link does not have an accessible name
8
+ r12 The button does not have an accessible name
9
+ r13 The iframe does not have an accessible name
10
+ r14 The visible text content of the element is not included within its accessible name
11
+ r15 The iframe elements do not embed the same or equivalent resources
12
+ r16 The element does not have all required states and properties
13
+ r17 The element is either tabbable or has tabbable descendants
14
+ r18 The attribute is not allowed for the element on which it is specified
15
+ r19 The attribute does not have a valid value
16
+ r2 The image does not have an accessible name
17
+ r20 The attribute is not defined
18
+ r21 The element does not have a valid role
19
+ r22 The video element does not have captions
20
+ r25 The visual information of the video element is not available through audio
21
+ r27 The video element has no text alternative for its audio content
22
+ r28 The input type=image element does not have an accessible name
23
+ r3 The element does not have a unique ID
24
+ r30 The audio element does not have a text alternative
25
+ r32 The video element does not have an audio track that describes its
26
+ r35 The video element does not have an alternative
27
+ r37 The video element does not have an audio description
28
+ r38 The video element does not have an audio or text alternative
29
+ r39 The accessible name of the ${name} element does not describe its purpose
30
+ r4 The lang attribute is either missing, empty, or only whitespace
31
+ r40 The region does not have an accessible name
32
+ r41 The links do not resolve to the same or equivalent resources
33
+ r42 The element is not owned by an element of its required context role
34
+ r43 The ${target} element does not have an accessible name
35
+ r44 The element is locked in orientation
36
+ r45 The headers attribute has an invalid reference
37
+ r46 The header cell is not assigned to any cell
38
+ r47 The meta element restricts the ability to zoom
39
+ r48 The total duration of audio output of the ${name} element exceeds
40
+ r49 An audio element has no valid mechanism to pause or stop
41
+ r5 The lang attribute does not have a valid primary language tag
42
+ r50 The total duration of the autoplaying audio output of the element lasts
43
+ r53 The heading skips one or more levels
44
+ r54 The assertive region is not atomic
45
+ r55 Some role has the same name and different content
46
+ r56 Some ${role} have the same name.`, role, errors));
47
+ r57 The text is not included in a landmark region
48
+ r59 The document does not have a heading element
49
+ r6 The lang and xml:lang attributes do not have matching primary language subtags
50
+ r60 The grouping elements have an accessible name
51
+ r61 The document does not start with a level 1 heading
52
+ r62 The link is not distinguishable from the surrounding text
53
+ r63 The object element does not have an accessible name
54
+ r64 The heading does not have an accessible name
55
+ r65 The element does not have a visible focus indicator
56
+ r66 Text outside widget has enhanced contrast
57
+ r67 The element is marked as decorative but is exposed
58
+ r68 The element owns no elements as required by its semantic role
59
+ r69 Text outside widget has minimum contrast
60
+ r7 The lang attribute does not have a valid primary language subtag
61
+ r70 The document contains deprecated elements
62
+ r71 The text of the paragraph is justified
63
+ r72 The text of the paragraph is uppercased
64
+ r73 The line height of the paragraph is less than 1.5 or invalid
65
+ r74 The font size is specified using an absolute unit
66
+ r75 The font size is smaller than 9 pixels
67
+ r76 The header element is not a semantic header
68
+ r77 The cell is not assigned to any header cell
69
+ r78 There is no content between this heading and the next
70
+ r79 The element has no required hidden, figure, code, kbd, or samp ancestor
71
+ r8 The form field does not have an accessible name
72
+ r80 The line height is specified using an absolute unit
73
+ r81 The links do not resolve to the same or equivalent resources
74
+ r82 An error indicator fails to identify the form field or cause of error
75
+ r83 The text is clipped
76
+ r84 The scrollable element is not reachable through keyboard navigation
77
+ r85 The text of the paragraph is all italic
78
+ r86 The element is marked as decorative but is exposed
79
+ r87 The first tabbable element in the document is invalid on nonexistent
80
+ r90 The element has tabbable descendants
81
+ r94 The menuitem does not have an accessible name
82
+ r95 The iframe contains some interactive element