testaro 78.0.8 → 78.6.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 (357) hide show
  1. package/.gitattributes +94 -0
  2. package/.github/workflows/ci.yml +58 -0
  3. package/.github/workflows/publish.yml +50 -0
  4. package/.github/workflows/typescript.yml +35 -0
  5. package/AGENTS.md +2 -2
  6. package/CLAUDE.md +24 -18
  7. package/CONTAINERS.md +9 -6
  8. package/CONTRIBUTING.md +29 -3
  9. package/Dockerfile +1 -1
  10. package/README.md +143 -19
  11. package/UPGRADES.md +4 -0
  12. package/actSpecs-doc.md +13 -1
  13. package/actSpecs.js +29 -5
  14. package/call.js +6 -5
  15. package/dist/nameComputation.js +1 -0
  16. package/docker-compose.yml +8 -2
  17. package/docs/checkpoint-scanning.md +199 -0
  18. package/docs/standard-result-outcome.md +165 -0
  19. package/env.example +49 -10
  20. package/eslint.config.mjs +101 -0
  21. package/netWatch.js +372 -222
  22. package/package.json +46 -31
  23. package/pour/README.md +47 -0
  24. package/pour/pour.min.js +8 -0
  25. package/procs/actDo.js +808 -0
  26. package/procs/catalog.d.ts +17 -0
  27. package/procs/catalog.js +312 -221
  28. package/procs/catalog.ts +398 -0
  29. package/procs/checkpoint.js +110 -0
  30. package/procs/config.d.ts +41 -0
  31. package/procs/config.js +98 -0
  32. package/procs/dateTime.js +2 -1
  33. package/procs/doActs.js +442 -849
  34. package/procs/doTestAct.js +27 -121
  35. package/procs/flow.js +221 -0
  36. package/procs/generateRuleRegistry.js +94 -0
  37. package/procs/getSource.d.ts +26 -0
  38. package/procs/job.js +115 -1
  39. package/procs/launch.d.ts +40 -0
  40. package/procs/launch.js +243 -108
  41. package/procs/nu.d.ts +48 -0
  42. package/procs/scope.js +196 -0
  43. package/procs/shoot.d.ts +33 -0
  44. package/procs/standard.d.ts +18 -0
  45. package/procs/standard.js +83 -0
  46. package/procs/standard.ts +126 -0
  47. package/procs/testAct.js +145 -0
  48. package/procs/testaro.d.ts +20 -0
  49. package/procs/testaro.js +236 -189
  50. package/procs/testaro.ts +321 -0
  51. package/procs/userPath.js +126 -0
  52. package/procs/xPath.d.ts +4 -0
  53. package/procs/xPath.js +81 -69
  54. package/procs/xPath.ts +106 -0
  55. package/procs/xPathScript.d.ts +6 -0
  56. package/procs/xPathScript.js +70 -0
  57. package/run.js +3 -2
  58. package/surea11y/README.md +44 -0
  59. package/surea11y/surea11y.browser.js +14 -0
  60. package/testaro/adbID.d.ts +3 -0
  61. package/testaro/adbID.js +38 -41
  62. package/testaro/adbID.ts +66 -0
  63. package/testaro/allCapStyle.d.ts +3 -0
  64. package/testaro/allCapStyle.js +31 -34
  65. package/testaro/allCapStyle.ts +55 -0
  66. package/testaro/allCaps.d.ts +16 -0
  67. package/testaro/allCaps.js +179 -151
  68. package/testaro/allCaps.ts +228 -0
  69. package/testaro/allHidden.d.ts +13 -0
  70. package/testaro/allHidden.js +29 -30
  71. package/testaro/allHidden.ts +50 -0
  72. package/testaro/allSlanted.d.ts +3 -0
  73. package/testaro/allSlanted.js +30 -33
  74. package/testaro/allSlanted.ts +54 -0
  75. package/testaro/altScheme.d.ts +3 -0
  76. package/testaro/altScheme.js +27 -30
  77. package/testaro/altScheme.ts +50 -0
  78. package/testaro/attVal.d.ts +3 -0
  79. package/testaro/attVal.js +20 -21
  80. package/testaro/attVal.ts +52 -0
  81. package/testaro/autocomplete.d.ts +3 -0
  82. package/testaro/autocomplete.js +59 -75
  83. package/testaro/autocomplete.ts +101 -0
  84. package/testaro/bulk.d.ts +13 -0
  85. package/testaro/bulk.js +32 -33
  86. package/testaro/bulk.ts +55 -0
  87. package/testaro/buttonMenu.d.ts +9 -0
  88. package/testaro/buttonMenu.js +317 -319
  89. package/testaro/buttonMenu.ts +391 -0
  90. package/testaro/captionLoc.d.ts +3 -0
  91. package/testaro/captionLoc.js +17 -20
  92. package/testaro/captionLoc.ts +40 -0
  93. package/testaro/datalistRef.d.ts +3 -0
  94. package/testaro/datalistRef.js +33 -36
  95. package/testaro/datalistRef.ts +55 -0
  96. package/testaro/distortion.d.ts +3 -0
  97. package/testaro/distortion.js +57 -26
  98. package/testaro/distortion.ts +81 -0
  99. package/testaro/docType.d.ts +15 -0
  100. package/testaro/docType.js +25 -25
  101. package/testaro/docType.ts +45 -0
  102. package/testaro/dupAtt.d.ts +16 -0
  103. package/testaro/dupAtt.js +113 -104
  104. package/testaro/dupAtt.ts +144 -0
  105. package/testaro/elements.d.ts +6 -0
  106. package/testaro/elements.js +153 -153
  107. package/testaro/elements.ts +215 -0
  108. package/testaro/embAc.d.ts +3 -0
  109. package/testaro/embAc.js +19 -20
  110. package/testaro/embAc.ts +40 -0
  111. package/testaro/focAll.d.ts +13 -0
  112. package/testaro/focAll.js +185 -191
  113. package/testaro/focAll.ts +217 -0
  114. package/testaro/focAndOp.d.ts +3 -0
  115. package/testaro/focAndOp.js +100 -104
  116. package/testaro/focAndOp.ts +128 -0
  117. package/testaro/focInd.d.ts +3 -0
  118. package/testaro/focInd.js +64 -66
  119. package/testaro/focInd.ts +96 -0
  120. package/testaro/focVis.d.ts +3 -0
  121. package/testaro/focVis.js +28 -30
  122. package/testaro/focVis.ts +52 -0
  123. package/testaro/headEl.d.ts +10 -0
  124. package/testaro/headEl.js +61 -62
  125. package/testaro/headEl.ts +82 -0
  126. package/testaro/headingAmb.d.ts +3 -0
  127. package/testaro/headingAmb.js +54 -63
  128. package/testaro/headingAmb.ts +72 -0
  129. package/testaro/hovInd.d.ts +12 -0
  130. package/testaro/hovInd.js +163 -130
  131. package/testaro/hovInd.ts +199 -0
  132. package/testaro/hover.d.ts +3 -0
  133. package/testaro/hover.js +155 -126
  134. package/testaro/hover.ts +154 -0
  135. package/testaro/hr.d.ts +3 -0
  136. package/testaro/hr.js +14 -17
  137. package/testaro/hr.ts +36 -0
  138. package/testaro/imageLink.d.ts +3 -0
  139. package/testaro/imageLink.js +17 -20
  140. package/testaro/imageLink.ts +42 -0
  141. package/testaro/labClash.d.ts +3 -0
  142. package/testaro/labClash.js +31 -33
  143. package/testaro/labClash.ts +54 -0
  144. package/testaro/legendLoc.d.ts +3 -0
  145. package/testaro/legendLoc.js +17 -20
  146. package/testaro/legendLoc.ts +42 -0
  147. package/testaro/lineHeight.d.ts +3 -0
  148. package/testaro/lineHeight.js +43 -48
  149. package/testaro/lineHeight.ts +70 -0
  150. package/testaro/linkAmb.d.ts +7 -0
  151. package/testaro/linkAmb.js +79 -80
  152. package/testaro/linkAmb.ts +105 -0
  153. package/testaro/linkExt.d.ts +3 -0
  154. package/testaro/linkExt.js +13 -16
  155. package/testaro/linkExt.ts +35 -0
  156. package/testaro/linkOldAtt.d.ts +3 -0
  157. package/testaro/linkOldAtt.js +25 -28
  158. package/testaro/linkOldAtt.ts +48 -0
  159. package/testaro/linkTo.d.ts +3 -0
  160. package/testaro/linkTo.js +22 -22
  161. package/testaro/linkTo.ts +43 -0
  162. package/testaro/linkUl.d.ts +3 -0
  163. package/testaro/linkUl.js +30 -34
  164. package/testaro/linkUl.ts +54 -0
  165. package/testaro/miniText.d.ts +3 -0
  166. package/testaro/miniText.js +41 -44
  167. package/testaro/miniText.ts +68 -0
  168. package/testaro/motion.d.ts +10 -0
  169. package/testaro/motion.js +92 -96
  170. package/testaro/motion.ts +125 -0
  171. package/testaro/nonTable.d.ts +3 -0
  172. package/testaro/nonTable.js +39 -45
  173. package/testaro/nonTable.ts +66 -0
  174. package/testaro/optRoleSel.d.ts +3 -0
  175. package/testaro/optRoleSel.js +16 -19
  176. package/testaro/optRoleSel.ts +41 -0
  177. package/testaro/phOnly.d.ts +3 -0
  178. package/testaro/phOnly.js +18 -21
  179. package/testaro/phOnly.ts +43 -0
  180. package/testaro/pseudoP.d.ts +3 -0
  181. package/testaro/pseudoP.js +36 -38
  182. package/testaro/pseudoP.ts +59 -0
  183. package/testaro/radioSet.d.ts +3 -0
  184. package/testaro/radioSet.js +57 -59
  185. package/testaro/radioSet.ts +79 -0
  186. package/testaro/registry.d.ts +63 -0
  187. package/testaro/registry.js +67 -0
  188. package/testaro/registry.ts +141 -0
  189. package/testaro/role.d.ts +3 -0
  190. package/testaro/role.js +27 -29
  191. package/testaro/role.ts +53 -0
  192. package/testaro/secHeading.d.ts +3 -0
  193. package/testaro/secHeading.js +30 -33
  194. package/testaro/secHeading.ts +53 -0
  195. package/testaro/styleDiff.d.ts +25 -0
  196. package/testaro/styleDiff.js +248 -252
  197. package/testaro/styleDiff.ts +303 -0
  198. package/testaro/tabNav.d.ts +33 -0
  199. package/testaro/tabNav.js +272 -342
  200. package/testaro/tabNav.ts +454 -0
  201. package/testaro/targetsNear.d.ts +9 -0
  202. package/testaro/targetsNear.js +130 -132
  203. package/testaro/targetsNear.ts +160 -0
  204. package/testaro/textNodes.d.ts +6 -0
  205. package/testaro/textNodes.js +139 -135
  206. package/testaro/textNodes.ts +185 -0
  207. package/testaro/textSem.d.ts +3 -0
  208. package/testaro/textSem.js +25 -28
  209. package/testaro/textSem.ts +47 -0
  210. package/testaro/title.d.ts +9 -0
  211. package/testaro/title.js +16 -13
  212. package/testaro/title.ts +31 -0
  213. package/testaro/titledEl.d.ts +3 -0
  214. package/testaro/titledEl.js +15 -18
  215. package/testaro/titledEl.ts +38 -0
  216. package/testaro/zIndex.d.ts +3 -0
  217. package/testaro/zIndex.js +19 -22
  218. package/testaro/zIndex.ts +42 -0
  219. package/tests/alfa.d.ts +45 -0
  220. package/tests/alfa.js +138 -141
  221. package/tests/alfa.ts +214 -0
  222. package/tests/aslint.d.ts +33 -0
  223. package/tests/aslint.js +272 -249
  224. package/tests/aslint.ts +301 -0
  225. package/tests/axe.d.ts +27 -0
  226. package/tests/axe.js +199 -200
  227. package/tests/axe.ts +277 -0
  228. package/tests/ed11y.d.ts +28 -0
  229. package/tests/ed11y.js +141 -99
  230. package/tests/ed11y.ts +178 -0
  231. package/tests/htmlcs.d.ts +21 -0
  232. package/tests/htmlcs.js +174 -140
  233. package/tests/htmlcs.ts +181 -0
  234. package/tests/ibm.d.ts +57 -0
  235. package/tests/ibm.js +182 -175
  236. package/tests/ibm.ts +287 -0
  237. package/tests/nuVal.d.ts +13 -0
  238. package/tests/nuVal.js +107 -112
  239. package/tests/nuVal.ts +145 -0
  240. package/tests/nuVnu.d.ts +15 -0
  241. package/tests/nuVnu.js +141 -111
  242. package/tests/nuVnu.ts +144 -0
  243. package/tests/pour.d.ts +31 -0
  244. package/tests/pour.js +242 -0
  245. package/tests/pour.ts +273 -0
  246. package/tests/qualWeb.d.ts +39 -0
  247. package/tests/qualWeb.js +262 -273
  248. package/tests/qualWeb.ts +344 -0
  249. package/tests/surea11y.d.ts +33 -0
  250. package/tests/surea11y.js +288 -0
  251. package/tests/surea11y.ts +334 -0
  252. package/tests/testaro.d.ts +25 -0
  253. package/tests/testaro.js +745 -652
  254. package/tests/testaro.ts +862 -0
  255. package/tests/wave.d.ts +46 -0
  256. package/tests/wave.js +166 -177
  257. package/tests/wave.ts +252 -0
  258. package/tsconfig.json +17 -0
  259. package/types.d.ts +243 -0
  260. package/types.js +10 -0
  261. package/types.ts +376 -0
  262. package/validation/act/README.md +46 -0
  263. package/validation/act/capture.js +877 -0
  264. package/validation/act/chromium-issue-draft.md +66 -0
  265. package/validation/act/fp-triage-2026-08-22.md +86 -0
  266. package/validation/act/isolation-notes.md +159 -0
  267. package/validation/act/playwright-issue-draft.md +73 -0
  268. package/validation/act/propose-mappings.js +0 -0
  269. package/validation/act/repro-cdp-raw.js +105 -0
  270. package/validation/act/repro-metarefresh.js +65 -0
  271. package/validation/act/score.js +184 -0
  272. package/validation/act/stage3a-stress-report.md +69 -0
  273. package/validation/act/stage3b-mapping-proposals.md +94 -0
  274. package/validation/act/stage3b-triage-draft.md +138 -0
  275. package/validation/act/surea11y-track-a-2026-09-01.md +50 -0
  276. package/validation/executors/netWatch.js +180 -90
  277. package/validation/executors/test.js +17 -2
  278. package/validation/executors/tests.js +118 -10
  279. package/validation/jobs/reports/raw/260901T1000-surea11y-validation.json +964 -0
  280. package/validation/jobs/todo/240101T1200-simple-example.json +14 -6
  281. package/validation/jobs/todo/240101T1300-shoot-example.json +2 -1
  282. package/validation/jobs/todo/260821T1900-pour-validation.json +45 -0
  283. package/validation/jobs/todo/260901T1000-surea11y-validation.json +45 -0
  284. package/validation/knownFailures.json +1 -0
  285. package/validation/tests/jobProperties/adbID.json +27 -2
  286. package/validation/tests/jobProperties/{focOp.json → allCapStyle.json} +56 -53
  287. package/validation/tests/jobProperties/allCaps.json +25 -0
  288. package/validation/tests/jobProperties/allHidden.json +133 -13
  289. package/validation/tests/jobProperties/allSlanted.json +3 -3
  290. package/validation/tests/jobProperties/altScheme.json +23 -8
  291. package/validation/tests/jobProperties/attVal.json +57 -57
  292. package/validation/tests/jobProperties/autocomplete.json +11 -1
  293. package/validation/tests/jobProperties/bulk.json +6 -1
  294. package/validation/tests/jobProperties/buttonMenu.json +63 -42
  295. package/validation/tests/jobProperties/captionLoc.json +1 -6
  296. package/validation/tests/jobProperties/checkpoint-browser.json +401 -0
  297. package/validation/tests/jobProperties/checkpoint-page.json +397 -0
  298. package/validation/tests/jobProperties/checkpoint.json +395 -0
  299. package/validation/tests/jobProperties/datalistRef.json +20 -5
  300. package/validation/tests/jobProperties/distortion.json +28 -3
  301. package/validation/tests/jobProperties/docType.json +2 -2
  302. package/validation/tests/jobProperties/dupAtt.json +48 -33
  303. package/validation/tests/jobProperties/elements.json +28 -28
  304. package/validation/tests/jobProperties/embAc.json +36 -31
  305. package/validation/tests/jobProperties/focAndOp.json +284 -0
  306. package/validation/tests/jobProperties/focInd.json +34 -34
  307. package/validation/tests/jobProperties/focVis.json +1 -1
  308. package/validation/tests/jobProperties/hover.json +39 -37
  309. package/validation/tests/jobProperties/hr.json +13 -3
  310. package/validation/tests/jobProperties/imageLink.json +0 -5
  311. package/validation/tests/jobProperties/labClash.json +68 -33
  312. package/validation/tests/jobProperties/legendLoc.json +1 -6
  313. package/validation/tests/jobProperties/lineHeight.json +2 -2
  314. package/validation/tests/jobProperties/linkAmb.json +13 -18
  315. package/validation/tests/jobProperties/linkExt.json +1 -1
  316. package/validation/tests/jobProperties/linkOldAtt.json +12 -2
  317. package/validation/tests/jobProperties/linkTo.json +1 -1
  318. package/validation/tests/jobProperties/linkUl.json +65 -65
  319. package/validation/tests/jobProperties/miniText.json +7 -2
  320. package/validation/tests/jobProperties/motion.json +4 -50
  321. package/validation/tests/jobProperties/nonTable.json +48 -3
  322. package/validation/tests/jobProperties/optRoleSel.json +12 -2
  323. package/validation/tests/jobProperties/phOnly.json +6 -16
  324. package/validation/tests/jobProperties/pseudoP.json +17 -2
  325. package/validation/tests/jobProperties/radioSet.json +30 -30
  326. package/validation/tests/jobProperties/role.json +25 -5
  327. package/validation/tests/jobProperties/secHeading.json +26 -21
  328. package/validation/tests/jobProperties/styleDiff.json +35 -5
  329. package/validation/tests/jobProperties/tabNav.json +3 -1
  330. package/validation/tests/jobProperties/targetsNear.json +237 -0
  331. package/validation/tests/jobProperties/textNodes.json +29 -29
  332. package/validation/tests/jobProperties/textSem.json +26 -1
  333. package/validation/tests/jobProperties/title.json +12 -2
  334. package/validation/tests/jobProperties/titledEl.json +39 -9
  335. package/validation/tests/jobProperties/userPath.json +317 -0
  336. package/validation/tests/jobProperties/zIndex.json +40 -35
  337. package/validation/tests/targets/allCapStyle/index.html +26 -0
  338. package/validation/tests/targets/checkpoint/index.html +38 -0
  339. package/validation/tests/targets/datalistRef/index.html +1 -1
  340. package/validation/tests/targets/focAndOp/bad.html +29 -0
  341. package/validation/tests/targets/{focOp → focAndOp}/good.html +3 -1
  342. package/validation/tests/targets/focInd/bad.html +2 -1
  343. package/validation/tests/targets/headEl/index.html +10 -1
  344. package/validation/tests/targets/{targetSmall → targetsNear}/index.html +15 -1
  345. package/validation/tests/targets/userPath/index.html +42 -0
  346. package/validation/validateTest.js +61 -9
  347. package/.claude/settings.local.json +0 -11
  348. package/.eslintrc.json +0 -41
  349. package/htmlcs/.eslintrc.json +0 -67
  350. package/validation/tests/jobProperties/linkTitle.json +0 -127
  351. package/validation/tests/jobProperties/opFoc.json +0 -164
  352. package/validation/tests/jobProperties/targetSmall.json +0 -152
  353. package/validation/tests/jobProperties/targetTiny.json +0 -142
  354. package/validation/tests/targets/focOp/bad.html +0 -25
  355. package/validation/tests/targets/linkTitle/index.html +0 -24
  356. package/validation/tests/targets/opFoc/bad.html +0 -26
  357. package/validation/tests/targets/opFoc/good.html +0 -23
@@ -0,0 +1,964 @@
1
+ {
2
+ "id": "260901T1000-surea11y-validation",
3
+ "what": "Validate surea11y tool on webaim.org",
4
+ "strict": true,
5
+ "timeLimit": 60,
6
+ "acts": [
7
+ {
8
+ "type": "launch",
9
+ "which": "chromium",
10
+ "url": "https://webaim.org/",
11
+ "what": "Chromium browser",
12
+ "actualURL": "https://webaim.org/",
13
+ "endTime": 1788270100183
14
+ },
15
+ {
16
+ "type": "test",
17
+ "which": "surea11y",
18
+ "what": "SureA11y",
19
+ "startTime": 1788270100183,
20
+ "actualURL": "https://webaim.org/",
21
+ "data": {
22
+ "passRuleCount": 18,
23
+ "inapplicableRuleCount": 57,
24
+ "manualRuleCount": 54,
25
+ "manualOccurrenceCount": 8
26
+ },
27
+ "result": {
28
+ "nativeResult": {
29
+ "engine": {
30
+ "tag": "a11ycore",
31
+ "schemaVersion": "1.0.0",
32
+ "locale": {
33
+ "requested": "en",
34
+ "resolved": "en",
35
+ "reason": "ok"
36
+ },
37
+ "wcagVersion": "2.2"
38
+ },
39
+ "violations": [
40
+ {
41
+ "ruleID": "contrast-enhanced",
42
+ "what": "Element has insufficient color contrast (AAA) of 6.25:1 (foreground: #ffffff, background: #bf1722, font size: 16px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
43
+ "wcag": "1.4.6",
44
+ "severity": "serious",
45
+ "html": "<a href=\"#maincontent\">skip to main content</a>",
46
+ "cssPath": "#skiptocontent > a",
47
+ "xPath": "/html/body/div[1]/header[1]/div[1]/a[1]"
48
+ },
49
+ {
50
+ "ruleID": "contrast-enhanced",
51
+ "what": "Element has insufficient color contrast (AAA) of 5.74:1 (foreground: #666666, background: #ffffff, font size: 19.8px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
52
+ "wcag": "1.4.6",
53
+ "severity": "serious",
54
+ "html": "<p id=\"mission\">Expanding the potential of the web for people with disabilities by empowering individuals and organizations to create accessible content.</p>",
55
+ "cssPath": "#mission",
56
+ "xPath": "/html/body/main[1]/article[1]/p[1]"
57
+ },
58
+ {
59
+ "ruleID": "contrast-enhanced",
60
+ "what": "Element has insufficient color contrast (AAA) of 5.74:1 (foreground: #666666, background: #ffffff, font size: 13.3333px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
61
+ "wcag": "1.4.6",
62
+ "severity": "serious",
63
+ "html": "<input type=\"submit\" value=\"WAVE\">",
64
+ "cssPath": "#checkpage > form > input:nth-of-type(2)",
65
+ "xPath": "/html/body/footer[1]/div[1]/div[1]/div[1]/form[1]/input[2]"
66
+ }
67
+ ],
68
+ "incomplete": [
69
+ {
70
+ "ruleID": "contrast-computable",
71
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_logo.png\")).",
72
+ "wcag": "1.4.3",
73
+ "severity": "serious",
74
+ "html": "<h2 class=\"hidden\">Main Navigation</h2>",
75
+ "cssPath": "#headcontainer > header > nav > h2",
76
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/h2[1]"
77
+ },
78
+ {
79
+ "ruleID": "contrast-computable",
80
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
81
+ "wcag": "1.4.3",
82
+ "severity": "serious",
83
+ "html": "<a href=\"/services/\">Services</a>",
84
+ "cssPath": "#headcontainer > header > nav > ul > li:nth-of-type(1) > a",
85
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[1]/a[1]"
86
+ },
87
+ {
88
+ "ruleID": "contrast-computable",
89
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
90
+ "wcag": "1.4.3",
91
+ "severity": "serious",
92
+ "html": "<a href=\"/articles/\">Articles</a>",
93
+ "cssPath": "#headcontainer > header > nav > ul > li:nth-of-type(2) > a",
94
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[2]/a[1]"
95
+ },
96
+ {
97
+ "ruleID": "contrast-computable",
98
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
99
+ "wcag": "1.4.3",
100
+ "severity": "serious",
101
+ "html": "<a href=\"/resources/\">Resources</a>",
102
+ "cssPath": "#headcontainer > header > nav > ul > li:nth-of-type(3) > a",
103
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[3]/a[1]"
104
+ },
105
+ {
106
+ "ruleID": "contrast-computable",
107
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
108
+ "wcag": "1.4.3",
109
+ "severity": "serious",
110
+ "html": "<a href=\"/projects/\">Projects</a>",
111
+ "cssPath": "#headcontainer > header > nav > ul > li:nth-of-type(4) > a",
112
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[4]/a[1]"
113
+ },
114
+ {
115
+ "ruleID": "contrast-computable",
116
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
117
+ "wcag": "1.4.3",
118
+ "severity": "serious",
119
+ "html": "<a href=\"/community/\">Community</a>",
120
+ "cssPath": "#headcontainer > header > nav > ul > li:nth-of-type(5) > a",
121
+ "xPath": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[5]/a[1]"
122
+ },
123
+ {
124
+ "ruleID": "contrast-computable",
125
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://conference.webaim.org/media/banner.jpg\")).",
126
+ "wcag": "1.4.3",
127
+ "severity": "serious",
128
+ "html": "<div id=\"bannerheader\">Web Accessibility in Mind Conference</div>",
129
+ "cssPath": "#bannerheader",
130
+ "xPath": "/html/body/main[1]/article[1]/div[1]/div[1]/div[1]/div[1]"
131
+ },
132
+ {
133
+ "ruleID": "contrast-computable",
134
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://conference.webaim.org/media/banner.jpg\")).",
135
+ "wcag": "1.4.3",
136
+ "severity": "serious",
137
+ "html": "<div id=\"subbanner\">September 15-16<br>In partnership with <img src=\"https://conference.webaim.org/media/popetechSmall.svg\" width=\"160\" alt=\"PopeTech\"></div>",
138
+ "cssPath": "#subbanner",
139
+ "xPath": "/html/body/main[1]/article[1]/div[1]/div[1]/div[1]/div[2]"
140
+ },
141
+ {
142
+ "ruleID": "contrast-computable",
143
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_training.svg\")).",
144
+ "wcag": "1.4.3",
145
+ "severity": "serious",
146
+ "html": "<a href=\"/services/training/\">Accessibility Training</a>",
147
+ "cssPath": "#training > h2 > a",
148
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[1]/h2[1]/a[1]"
149
+ },
150
+ {
151
+ "ruleID": "contrast-computable",
152
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_training.svg\")).",
153
+ "wcag": "1.4.3",
154
+ "severity": "serious",
155
+ "html": "<p>WebAIM can provide web, document, Zoom, and strategic accessibility training to fit your needs.</p>",
156
+ "cssPath": "#training > p",
157
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[1]/p[1]"
158
+ },
159
+ {
160
+ "ruleID": "contrast-computable",
161
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/consultingicon.svg\")).",
162
+ "wcag": "1.4.3",
163
+ "severity": "serious",
164
+ "html": "<a href=\"/services/consulting/\">Technical Assistance</a>",
165
+ "cssPath": "#consulting > h2 > a",
166
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[2]/h2[1]/a[1]"
167
+ },
168
+ {
169
+ "ruleID": "contrast-computable",
170
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/consultingicon.svg\")).",
171
+ "wcag": "1.4.3",
172
+ "severity": "serious",
173
+ "html": "<p>Need assistance implementing accessibility? WebAIM's expert staff can provide the assistance you need.</p>",
174
+ "cssPath": "#consulting > p",
175
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[2]/p[1]"
176
+ },
177
+ {
178
+ "ruleID": "contrast-computable",
179
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/strategica11yicon.svg\")).",
180
+ "wcag": "1.4.3",
181
+ "severity": "serious",
182
+ "html": "<a href=\"/training/procurement/\">Accessibility in Procurement</a>",
183
+ "cssPath": "#strategica11y > h2 > a",
184
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[3]/h2[1]/a[1]"
185
+ },
186
+ {
187
+ "ruleID": "contrast-computable",
188
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/strategica11yicon.svg\")).",
189
+ "wcag": "1.4.3",
190
+ "severity": "serious",
191
+ "html": "<p>Tools and processes to help organizations account for accessibility in purchasing or using technology.</p>",
192
+ "cssPath": "#strategica11y > p",
193
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[3]/p[1]"
194
+ },
195
+ {
196
+ "ruleID": "contrast-computable",
197
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/evalicon.svg\")).",
198
+ "wcag": "1.4.3",
199
+ "severity": "serious",
200
+ "html": "<a href=\"/services/monitoring/\">Evaluation and Reporting</a>",
201
+ "cssPath": "#monitoring > h2 > a",
202
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[4]/h2[1]/a[1]"
203
+ },
204
+ {
205
+ "ruleID": "contrast-computable",
206
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/evalicon.svg\")).",
207
+ "wcag": "1.4.3",
208
+ "severity": "serious",
209
+ "html": "<p>We can provide reports to help you know how accessible your site is and how to make it better.</p>",
210
+ "cssPath": "#monitoring > p",
211
+ "xPath": "/html/body/main[1]/article[1]/div[2]/div[4]/p[1]"
212
+ },
213
+ {
214
+ "ruleID": "contrast-computable",
215
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_copyright.svg\")).",
216
+ "wcag": "1.4.3",
217
+ "severity": "serious",
218
+ "html": "<h2 id=\"copyright\">©2026 WebAIM</h2>",
219
+ "cssPath": "#copyright",
220
+ "xPath": "/html/body/footer[1]/div[1]/div[1]/h2[1]"
221
+ },
222
+ {
223
+ "ruleID": "contrast-computable",
224
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_phone.svg\")).",
225
+ "wcag": "1.4.3",
226
+ "severity": "serious",
227
+ "html": "<a class=\"phone\" href=\"tel:4357977024\">435.797.7024</a>",
228
+ "cssPath": "#contact > a",
229
+ "xPath": "/html/body/footer[1]/div[1]/div[1]/p[1]/a[1]"
230
+ },
231
+ {
232
+ "ruleID": "contrast-computable",
233
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_wave.svg\")).",
234
+ "wcag": "1.4.3",
235
+ "severity": "serious",
236
+ "html": "<h2>Check Your Accessibility</h2>",
237
+ "cssPath": "#checkpage > h2",
238
+ "xPath": "/html/body/footer[1]/div[1]/div[1]/div[1]/h2[1]"
239
+ },
240
+ {
241
+ "ruleID": "contrast-computable",
242
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_blog.svg\")).",
243
+ "wcag": "1.4.3",
244
+ "severity": "serious",
245
+ "html": "<h2 id=\"blog\">From the Blog</h2>",
246
+ "cssPath": "#blog",
247
+ "xPath": "/html/body/footer[1]/div[1]/div[2]/h2[1]"
248
+ },
249
+ {
250
+ "ruleID": "contrast-computable",
251
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_popular.svg\")).",
252
+ "wcag": "1.4.3",
253
+ "severity": "serious",
254
+ "html": "<h2 id=\"popular\">Popular Resources</h2>",
255
+ "cssPath": "#popular",
256
+ "xPath": "/html/body/footer[1]/div[1]/div[3]/h2[1]"
257
+ },
258
+ {
259
+ "ruleID": "contrast-computable",
260
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_contact.svg\")).",
261
+ "wcag": "1.4.3",
262
+ "severity": "serious",
263
+ "html": "<a id=\"footercontact\" href=\"/contact\">Contact</a>",
264
+ "cssPath": "#footercontact",
265
+ "xPath": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[1]/a[1]"
266
+ },
267
+ {
268
+ "ruleID": "contrast-computable",
269
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_about.svg\")).",
270
+ "wcag": "1.4.3",
271
+ "severity": "serious",
272
+ "html": "<a id=\"footerabout\" href=\"/about\">About</a>",
273
+ "cssPath": "#footerabout",
274
+ "xPath": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[2]/a[1]"
275
+ },
276
+ {
277
+ "ruleID": "contrast-computable",
278
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_rss.svg\")).",
279
+ "wcag": "1.4.3",
280
+ "severity": "serious",
281
+ "html": "<a id=\"footerrss\" href=\"/community/rss\">RSS Feeds</a>",
282
+ "cssPath": "#footerrss",
283
+ "xPath": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[3]/a[1]"
284
+ },
285
+ {
286
+ "ruleID": "contrast-computable",
287
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_li.svg\")).",
288
+ "wcag": "1.4.3",
289
+ "severity": "serious",
290
+ "html": "<a id=\"footerli\" href=\"https://www.linkedin.com/company/webaim/\">LinkedIn</a>",
291
+ "cssPath": "#footerli",
292
+ "xPath": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[4]/a[1]"
293
+ },
294
+ {
295
+ "ruleID": "contrast-computable",
296
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_terms.svg\")).",
297
+ "wcag": "1.4.3",
298
+ "severity": "serious",
299
+ "html": "<a id=\"footercopyright\" href=\"/copyright\">Copyright &amp; Terms of Use</a>",
300
+ "cssPath": "#footercopyright",
301
+ "xPath": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[5]/a[1]"
302
+ },
303
+ {
304
+ "ruleID": "css-orientation-lock",
305
+ "what": "3 stylesheet(s) could not be read, so whether this page locks its orientation could not be determined.",
306
+ "wcag": "1.3.4",
307
+ "severity": "serious",
308
+ "html": "<html lang=\"en\"><head>\n\t<meta charset=\"utf-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t<title>WebAIM: Web Accessibility In Mind</title>\n\t<link rel=\"shortcut icon\" href=\"/media/favicon.ico\">\n\t<link rel=\"home\" href=\"/\">\n\t<link rel=\"search\" href=\"/search/\">\n\t<link rel=\"alternate\" href=\"https://webaim.org/blog/feed\" type=\"application/rss+xml\" title=\"WebAIM Blog\">\n\n\t<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=G-Y41PF8WV9X\"></script>\n\t<script>\n \tw",
309
+ "cssPath": "html",
310
+ "xPath": "/html"
311
+ },
312
+ {
313
+ "ruleID": "link-in-text-block",
314
+ "what": "Whether this link is distinguishable from the surrounding text by non-color means could not be determined.",
315
+ "wcag": "1.4.1",
316
+ "severity": "serious",
317
+ "html": "<a class=\"phone\" href=\"tel:4357977024\">435.797.7024</a>",
318
+ "cssPath": "#contact > a",
319
+ "xPath": "/html/body/footer[1]/div[1]/div[1]/p[1]/a[1]"
320
+ }
321
+ ],
322
+ "passRuleCount": 18,
323
+ "inapplicableRuleCount": 57,
324
+ "manualRuleCount": 54,
325
+ "manualOccurrenceCount": 8
326
+ },
327
+ "standardResult": {
328
+ "prevented": false,
329
+ "totals": [
330
+ 0,
331
+ 28,
332
+ 0,
333
+ 3
334
+ ],
335
+ "instances": [
336
+ {
337
+ "ruleID": "contrast-computable",
338
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_logo.png\")).",
339
+ "ordinalSeverity": 1,
340
+ "count": 1,
341
+ "catalogIndex": "30"
342
+ },
343
+ {
344
+ "ruleID": "contrast-computable",
345
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
346
+ "ordinalSeverity": 1,
347
+ "count": 1,
348
+ "catalogIndex": "33"
349
+ },
350
+ {
351
+ "ruleID": "contrast-computable",
352
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
353
+ "ordinalSeverity": 1,
354
+ "count": 1,
355
+ "catalogIndex": "35"
356
+ },
357
+ {
358
+ "ruleID": "contrast-computable",
359
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
360
+ "ordinalSeverity": 1,
361
+ "count": 1,
362
+ "catalogIndex": "37"
363
+ },
364
+ {
365
+ "ruleID": "contrast-computable",
366
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
367
+ "ordinalSeverity": 1,
368
+ "count": 1,
369
+ "catalogIndex": "39"
370
+ },
371
+ {
372
+ "ruleID": "contrast-computable",
373
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/banners/home.jpg\")).",
374
+ "ordinalSeverity": 1,
375
+ "count": 1,
376
+ "catalogIndex": "41"
377
+ },
378
+ {
379
+ "ruleID": "contrast-computable",
380
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://conference.webaim.org/media/banner.jpg\")).",
381
+ "ordinalSeverity": 1,
382
+ "count": 1,
383
+ "catalogIndex": "60"
384
+ },
385
+ {
386
+ "ruleID": "contrast-computable",
387
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://conference.webaim.org/media/banner.jpg\")).",
388
+ "ordinalSeverity": 1,
389
+ "count": 1,
390
+ "catalogIndex": "61"
391
+ },
392
+ {
393
+ "ruleID": "contrast-computable",
394
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_training.svg\")).",
395
+ "ordinalSeverity": 1,
396
+ "count": 1,
397
+ "catalogIndex": "69"
398
+ },
399
+ {
400
+ "ruleID": "contrast-computable",
401
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_training.svg\")).",
402
+ "ordinalSeverity": 1,
403
+ "count": 1,
404
+ "catalogIndex": "70"
405
+ },
406
+ {
407
+ "ruleID": "contrast-computable",
408
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/consultingicon.svg\")).",
409
+ "ordinalSeverity": 1,
410
+ "count": 1,
411
+ "catalogIndex": "73"
412
+ },
413
+ {
414
+ "ruleID": "contrast-computable",
415
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/consultingicon.svg\")).",
416
+ "ordinalSeverity": 1,
417
+ "count": 1,
418
+ "catalogIndex": "74"
419
+ },
420
+ {
421
+ "ruleID": "contrast-computable",
422
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/strategica11yicon.svg\")).",
423
+ "ordinalSeverity": 1,
424
+ "count": 1,
425
+ "catalogIndex": "77"
426
+ },
427
+ {
428
+ "ruleID": "contrast-computable",
429
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/strategica11yicon.svg\")).",
430
+ "ordinalSeverity": 1,
431
+ "count": 1,
432
+ "catalogIndex": "78"
433
+ },
434
+ {
435
+ "ruleID": "contrast-computable",
436
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/evalicon.svg\")).",
437
+ "ordinalSeverity": 1,
438
+ "count": 1,
439
+ "catalogIndex": "81"
440
+ },
441
+ {
442
+ "ruleID": "contrast-computable",
443
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/home/evalicon.svg\")).",
444
+ "ordinalSeverity": 1,
445
+ "count": 1,
446
+ "catalogIndex": "82"
447
+ },
448
+ {
449
+ "ruleID": "contrast-computable",
450
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_copyright.svg\")).",
451
+ "ordinalSeverity": 1,
452
+ "count": 1,
453
+ "catalogIndex": "148"
454
+ },
455
+ {
456
+ "ruleID": "contrast-computable",
457
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_phone.svg\")).",
458
+ "ordinalSeverity": 1,
459
+ "count": 1,
460
+ "catalogIndex": "153"
461
+ },
462
+ {
463
+ "ruleID": "contrast-computable",
464
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_wave.svg\")).",
465
+ "ordinalSeverity": 1,
466
+ "count": 1,
467
+ "catalogIndex": "155"
468
+ },
469
+ {
470
+ "ruleID": "contrast-computable",
471
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_blog.svg\")).",
472
+ "ordinalSeverity": 1,
473
+ "count": 1,
474
+ "catalogIndex": "161"
475
+ },
476
+ {
477
+ "ruleID": "contrast-computable",
478
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_popular.svg\")).",
479
+ "ordinalSeverity": 1,
480
+ "count": 1,
481
+ "catalogIndex": "172"
482
+ },
483
+ {
484
+ "ruleID": "contrast-computable",
485
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_contact.svg\")).",
486
+ "ordinalSeverity": 1,
487
+ "count": 1,
488
+ "catalogIndex": "189"
489
+ },
490
+ {
491
+ "ruleID": "contrast-computable",
492
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_about.svg\")).",
493
+ "ordinalSeverity": 1,
494
+ "count": 1,
495
+ "catalogIndex": "191"
496
+ },
497
+ {
498
+ "ruleID": "contrast-computable",
499
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_rss.svg\")).",
500
+ "ordinalSeverity": 1,
501
+ "count": 1,
502
+ "catalogIndex": "193"
503
+ },
504
+ {
505
+ "ruleID": "contrast-computable",
506
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_li.svg\")).",
507
+ "ordinalSeverity": 1,
508
+ "count": 1,
509
+ "catalogIndex": "195"
510
+ },
511
+ {
512
+ "ruleID": "contrast-computable",
513
+ "what": "Contrast is not computable because the background uses an image (background-image=url(\"https://webaim.org/media/template/bg_terms.svg\")).",
514
+ "ordinalSeverity": 1,
515
+ "count": 1,
516
+ "catalogIndex": "197"
517
+ },
518
+ {
519
+ "ruleID": "css-orientation-lock",
520
+ "what": "3 stylesheet(s) could not be read, so whether this page locks its orientation could not be determined.",
521
+ "ordinalSeverity": 1,
522
+ "count": 1,
523
+ "catalogIndex": "0"
524
+ },
525
+ {
526
+ "ruleID": "link-in-text-block",
527
+ "what": "Whether this link is distinguishable from the surrounding text by non-color means could not be determined.",
528
+ "ordinalSeverity": 1,
529
+ "count": 1,
530
+ "catalogIndex": "153"
531
+ },
532
+ {
533
+ "ruleID": "contrast-enhanced",
534
+ "what": "Element has insufficient color contrast (AAA) of 6.25:1 (foreground: #ffffff, background: #bf1722, font size: 16px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
535
+ "ordinalSeverity": 3,
536
+ "count": 1,
537
+ "catalogIndex": "25"
538
+ },
539
+ {
540
+ "ruleID": "contrast-enhanced",
541
+ "what": "Element has insufficient color contrast (AAA) of 5.74:1 (foreground: #666666, background: #ffffff, font size: 19.8px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
542
+ "ordinalSeverity": 3,
543
+ "count": 1,
544
+ "catalogIndex": "56"
545
+ },
546
+ {
547
+ "ruleID": "contrast-enhanced",
548
+ "what": "Element has insufficient color contrast (AAA) of 5.74:1 (foreground: #666666, background: #ffffff, font size: 13.3333px, font weight: normal). Expected contrast ratio of 7:1 (normal text).",
549
+ "ordinalSeverity": 3,
550
+ "count": 1,
551
+ "catalogIndex": "159"
552
+ }
553
+ ]
554
+ }
555
+ },
556
+ "endTime": 1788270102388
557
+ }
558
+ ],
559
+ "sources": {},
560
+ "standard": "also",
561
+ "target": {
562
+ "url": "https://webaim.org/",
563
+ "what": "WebAIM home page"
564
+ },
565
+ "device": {
566
+ "id": "default",
567
+ "windowOptions": {}
568
+ },
569
+ "browserID": "chromium",
570
+ "timeStamp": "260901T1000",
571
+ "creationTimeStamp": "260901T1000",
572
+ "jobData": {
573
+ "tmpDir": "/home/witt/code/testaro/tmp/260901T1000-surea11y-validation",
574
+ "startTime": "26-09-01T13:41",
575
+ "endTime": "26-09-01T13:41",
576
+ "elapsedSeconds": 4,
577
+ "visitLatency": 2,
578
+ "logCount": 24,
579
+ "logSize": 4040,
580
+ "errorLogCount": 34,
581
+ "errorLogSize": 480,
582
+ "prohibitedCount": 0,
583
+ "visitRejectionCount": 0,
584
+ "aborted": false,
585
+ "abortedAct": null,
586
+ "abortTime": "",
587
+ "abortMessage": "",
588
+ "presses": 0,
589
+ "amountRead": 0,
590
+ "toolTimes": {
591
+ "surea11y": 2
592
+ },
593
+ "preventions": {},
594
+ "catalogData": {
595
+ "elementCount": 200,
596
+ "entryCount": 35,
597
+ "text": {
598
+ "count": 34,
599
+ "countPercent": 97,
600
+ "linkableCount": 30,
601
+ "linkablePercent": 88
602
+ },
603
+ "tools": {
604
+ "surea11y": {
605
+ "instanceCount": 31,
606
+ "catalogCount": 31,
607
+ "catalogPercent": 100
608
+ }
609
+ }
610
+ }
611
+ },
612
+ "catalog": {
613
+ "0": {
614
+ "tagName": "HTML",
615
+ "id": "",
616
+ "startTag": "<html lang=\"en\">",
617
+ "text": "",
618
+ "textLinkable": false,
619
+ "boxID": "0:0:1920:1971",
620
+ "pathID": "/html",
621
+ "headingIndex": ""
622
+ },
623
+ "25": {
624
+ "tagName": "A",
625
+ "id": "",
626
+ "startTag": "<a href=\"#maincontent\">",
627
+ "text": "skip to main content",
628
+ "textLinkable": true,
629
+ "boxID": "0:-40:155:31",
630
+ "pathID": "/html/body/div[1]/header[1]/div[1]/a[1]",
631
+ "headingIndex": ""
632
+ },
633
+ "30": {
634
+ "tagName": "H2",
635
+ "id": "",
636
+ "startTag": "<h2 class=\"hidden\">",
637
+ "text": "Main Navigation",
638
+ "textLinkable": true,
639
+ "boxID": "922:-450:1:1",
640
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/h2[1]",
641
+ "headingIndex": ""
642
+ },
643
+ "33": {
644
+ "tagName": "A",
645
+ "id": "",
646
+ "startTag": "<a href=\"/services/\">",
647
+ "text": "services",
648
+ "textLinkable": true,
649
+ "boxID": "925:40:96:27",
650
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[1]/a[1]",
651
+ "headingIndex": "30"
652
+ },
653
+ "35": {
654
+ "tagName": "A",
655
+ "id": "",
656
+ "startTag": "<a href=\"/articles/\">",
657
+ "text": "articles",
658
+ "textLinkable": true,
659
+ "boxID": "1021:40:87:27",
660
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[2]/a[1]",
661
+ "headingIndex": "30"
662
+ },
663
+ "37": {
664
+ "tagName": "A",
665
+ "id": "",
666
+ "startTag": "<a href=\"/resources/\">",
667
+ "text": "resources",
668
+ "textLinkable": true,
669
+ "boxID": "1108:40:110:27",
670
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[3]/a[1]",
671
+ "headingIndex": "30"
672
+ },
673
+ "39": {
674
+ "tagName": "A",
675
+ "id": "",
676
+ "startTag": "<a href=\"/projects/\">",
677
+ "text": "projects",
678
+ "textLinkable": true,
679
+ "boxID": "1218:40:93:27",
680
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[4]/a[1]",
681
+ "headingIndex": "30"
682
+ },
683
+ "41": {
684
+ "tagName": "A",
685
+ "id": "",
686
+ "startTag": "<a href=\"/community/\">",
687
+ "text": "community",
688
+ "textLinkable": true,
689
+ "boxID": "1311:40:119:27",
690
+ "pathID": "/html/body/div[1]/header[1]/nav[1]/ul[1]/li[5]/a[1]",
691
+ "headingIndex": "30"
692
+ },
693
+ "55": {
694
+ "tagName": "H1",
695
+ "id": "",
696
+ "startTag": "<h1>",
697
+ "text": "We have web accessibility in mind",
698
+ "textLinkable": true,
699
+ "boxID": "490:363:920:38",
700
+ "pathID": "/html/body/main[1]/article[1]/h1[1]",
701
+ "headingIndex": ""
702
+ },
703
+ "56": {
704
+ "tagName": "P",
705
+ "id": "mission",
706
+ "startTag": "<p id=\"mission\">",
707
+ "text": "Expanding the potential of the web for people with disabilities by empowering individuals and organizations to create accessible content.",
708
+ "textLinkable": true,
709
+ "boxID": "490:408:920:46",
710
+ "pathID": "/html/body/main[1]/article[1]/p[1]",
711
+ "headingIndex": "55"
712
+ },
713
+ "60": {
714
+ "tagName": "DIV",
715
+ "id": "bannerheader",
716
+ "startTag": "<div id=\"bannerheader\">",
717
+ "text": "Web Accessibility in Mind Conference",
718
+ "textLinkable": false,
719
+ "boxID": "510:489:600:104",
720
+ "pathID": "/html/body/main[1]/article[1]/div[1]/div[1]/div[1]/div[1]",
721
+ "headingIndex": "55"
722
+ },
723
+ "61": {
724
+ "tagName": "DIV",
725
+ "id": "subbanner",
726
+ "startTag": "<div id=\"subbanner\">",
727
+ "text": "September 15-16\nIn partnership with",
728
+ "textLinkable": false,
729
+ "boxID": "510:593:600:82",
730
+ "pathID": "/html/body/main[1]/article[1]/div[1]/div[1]/div[1]/div[2]",
731
+ "headingIndex": "55"
732
+ },
733
+ "68": {
734
+ "tagName": "H2",
735
+ "id": "",
736
+ "startTag": "<h2>",
737
+ "text": "Accessibility Training",
738
+ "textLinkable": true,
739
+ "boxID": "500:797:328:30",
740
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[1]/h2[1]",
741
+ "headingIndex": "55"
742
+ },
743
+ "69": {
744
+ "tagName": "A",
745
+ "id": "",
746
+ "startTag": "<a href=\"/services/training/\">",
747
+ "text": "Accessibility Training",
748
+ "textLinkable": true,
749
+ "boxID": "502:799:199:25",
750
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[1]/h2[1]/a[1]",
751
+ "headingIndex": "68"
752
+ },
753
+ "70": {
754
+ "tagName": "P",
755
+ "id": "",
756
+ "startTag": "<p>",
757
+ "text": "WebAIM can provide web, document, Zoom, and strategic accessibility training to fit your needs.",
758
+ "textLinkable": true,
759
+ "boxID": "500:837:328:63",
760
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[1]/p[1]",
761
+ "headingIndex": "68"
762
+ },
763
+ "72": {
764
+ "tagName": "H2",
765
+ "id": "",
766
+ "startTag": "<h2>",
767
+ "text": "Technical Assistance",
768
+ "textLinkable": true,
769
+ "boxID": "858:797:328:30",
770
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[2]/h2[1]",
771
+ "headingIndex": ""
772
+ },
773
+ "73": {
774
+ "tagName": "A",
775
+ "id": "",
776
+ "startTag": "<a href=\"/services/consulting/\">",
777
+ "text": "Technical Assistance",
778
+ "textLinkable": true,
779
+ "boxID": "860:799:188:25",
780
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[2]/h2[1]/a[1]",
781
+ "headingIndex": "72"
782
+ },
783
+ "74": {
784
+ "tagName": "P",
785
+ "id": "",
786
+ "startTag": "<p>",
787
+ "text": "Need assistance implementing accessibility? WebAIM's expert staff can provide the assistance you need.",
788
+ "textLinkable": true,
789
+ "boxID": "858:837:328:63",
790
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[2]/p[1]",
791
+ "headingIndex": "72"
792
+ },
793
+ "76": {
794
+ "tagName": "H2",
795
+ "id": "",
796
+ "startTag": "<h2>",
797
+ "text": "Accessibility in Procurement",
798
+ "textLinkable": true,
799
+ "boxID": "500:937:328:30",
800
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[3]/h2[1]",
801
+ "headingIndex": ""
802
+ },
803
+ "77": {
804
+ "tagName": "A",
805
+ "id": "",
806
+ "startTag": "<a href=\"/training/procurement/\">",
807
+ "text": "Accessibility in Procurement",
808
+ "textLinkable": true,
809
+ "boxID": "502:939:261:25",
810
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[3]/h2[1]/a[1]",
811
+ "headingIndex": "76"
812
+ },
813
+ "78": {
814
+ "tagName": "P",
815
+ "id": "",
816
+ "startTag": "<p>",
817
+ "text": "Tools and processes to help organizations account for accessibility in purchasing or using technology.",
818
+ "textLinkable": true,
819
+ "boxID": "500:977:328:63",
820
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[3]/p[1]",
821
+ "headingIndex": "76"
822
+ },
823
+ "80": {
824
+ "tagName": "H2",
825
+ "id": "",
826
+ "startTag": "<h2>",
827
+ "text": "Evaluation and Reporting",
828
+ "textLinkable": true,
829
+ "boxID": "858:937:328:30",
830
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[4]/h2[1]",
831
+ "headingIndex": ""
832
+ },
833
+ "81": {
834
+ "tagName": "A",
835
+ "id": "",
836
+ "startTag": "<a href=\"/services/monitoring/\">",
837
+ "text": "Evaluation and Reporting",
838
+ "textLinkable": true,
839
+ "boxID": "860:939:231:25",
840
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[4]/h2[1]/a[1]",
841
+ "headingIndex": "80"
842
+ },
843
+ "82": {
844
+ "tagName": "P",
845
+ "id": "",
846
+ "startTag": "<p>",
847
+ "text": "We can provide reports to help you know how accessible your site is and how to make it better.",
848
+ "textLinkable": true,
849
+ "boxID": "858:977:328:63",
850
+ "pathID": "/html/body/main[1]/article[1]/div[2]/div[4]/p[1]",
851
+ "headingIndex": "80"
852
+ },
853
+ "148": {
854
+ "tagName": "H2",
855
+ "id": "copyright",
856
+ "startTag": "<h2 id=\"copyright\">",
857
+ "text": "©2026 WebAIM",
858
+ "textLinkable": true,
859
+ "boxID": "480:1692:310:42",
860
+ "pathID": "/html/body/footer[1]/div[1]/div[1]/h2[1]",
861
+ "headingIndex": ""
862
+ },
863
+ "153": {
864
+ "tagName": "A",
865
+ "id": "",
866
+ "startTag": "<a class=\"phone\" href=\"tel:4357977024\">",
867
+ "text": "435.797.7024",
868
+ "textLinkable": true,
869
+ "boxID": "480:1782:108:16",
870
+ "pathID": "/html/body/footer[1]/div[1]/div[1]/p[1]/a[1]",
871
+ "headingIndex": "148"
872
+ },
873
+ "155": {
874
+ "tagName": "H2",
875
+ "id": "",
876
+ "startTag": "<h2>",
877
+ "text": "Check Your Accessibility",
878
+ "textLinkable": true,
879
+ "boxID": "480:1828:310:42",
880
+ "pathID": "/html/body/footer[1]/div[1]/div[1]/div[1]/h2[1]",
881
+ "headingIndex": ""
882
+ },
883
+ "159": {
884
+ "tagName": "INPUT",
885
+ "id": "",
886
+ "startTag": "<input type=\"submit\" value=\"WAVE\">",
887
+ "text": "Web site address:",
888
+ "textLinkable": false,
889
+ "boxID": "691:1886:48:25",
890
+ "pathID": "/html/body/footer[1]/div[1]/div[1]/div[1]/form[1]/input[2]",
891
+ "headingIndex": "155"
892
+ },
893
+ "161": {
894
+ "tagName": "H2",
895
+ "id": "blog",
896
+ "startTag": "<h2 id=\"blog\">",
897
+ "text": "From the Blog",
898
+ "textLinkable": true,
899
+ "boxID": "790:1692:310:42",
900
+ "pathID": "/html/body/footer[1]/div[1]/div[2]/h2[1]",
901
+ "headingIndex": ""
902
+ },
903
+ "172": {
904
+ "tagName": "H2",
905
+ "id": "popular",
906
+ "startTag": "<h2 id=\"popular\">",
907
+ "text": "Popular Resources",
908
+ "textLinkable": true,
909
+ "boxID": "1100:1692:310:42",
910
+ "pathID": "/html/body/footer[1]/div[1]/div[3]/h2[1]",
911
+ "headingIndex": ""
912
+ },
913
+ "189": {
914
+ "tagName": "A",
915
+ "id": "footercontact",
916
+ "startTag": "<a id=\"footercontact\" href=\"/contact\">",
917
+ "text": "Contact",
918
+ "textLinkable": true,
919
+ "boxID": "807:1940:72:18",
920
+ "pathID": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[1]/a[1]",
921
+ "headingIndex": "172"
922
+ },
923
+ "191": {
924
+ "tagName": "A",
925
+ "id": "footerabout",
926
+ "startTag": "<a id=\"footerabout\" href=\"/about\">",
927
+ "text": "About",
928
+ "textLinkable": true,
929
+ "boxID": "897:1940:60:18",
930
+ "pathID": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[2]/a[1]",
931
+ "headingIndex": "172"
932
+ },
933
+ "193": {
934
+ "tagName": "A",
935
+ "id": "footerrss",
936
+ "startTag": "<a id=\"footerrss\" href=\"/community/rss\">",
937
+ "text": "RSS Feeds",
938
+ "textLinkable": true,
939
+ "boxID": "974:1940:96:18",
940
+ "pathID": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[3]/a[1]",
941
+ "headingIndex": "172"
942
+ },
943
+ "195": {
944
+ "tagName": "A",
945
+ "id": "footerli",
946
+ "startTag": "<a id=\"footerli\" href=\"https://www.linkedin.com/company/webaim/\">",
947
+ "text": "LinkedIn",
948
+ "textLinkable": false,
949
+ "boxID": "1088:1940:76:18",
950
+ "pathID": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[4]/a[1]",
951
+ "headingIndex": "172"
952
+ },
953
+ "197": {
954
+ "tagName": "A",
955
+ "id": "footercopyright",
956
+ "startTag": "<a id=\"footercopyright\" href=\"/copyright\">",
957
+ "text": "Copyright & Terms of Use",
958
+ "textLinkable": true,
959
+ "boxID": "1182:1940:186:18",
960
+ "pathID": "/html/body/footer[1]/div[1]/div[4]/ul[1]/li[5]/a[1]",
961
+ "headingIndex": "172"
962
+ }
963
+ }
964
+ }