testaro 78.0.8 → 78.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 (356) hide show
  1. package/.gitattributes +94 -0
  2. package/.github/workflows/ci.yml +58 -0
  3. package/.github/workflows/publish.yml +49 -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 +73 -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/docker-compose.yml +8 -2
  16. package/docs/checkpoint-scanning.md +199 -0
  17. package/docs/standard-result-outcome.md +165 -0
  18. package/env.example +44 -10
  19. package/eslint.config.mjs +101 -0
  20. package/netWatch.js +372 -222
  21. package/package.json +46 -31
  22. package/pour/README.md +47 -0
  23. package/pour/pour.min.js +8 -0
  24. package/procs/actDo.js +808 -0
  25. package/procs/catalog.d.ts +17 -0
  26. package/procs/catalog.js +312 -221
  27. package/procs/catalog.ts +398 -0
  28. package/procs/checkpoint.js +110 -0
  29. package/procs/config.d.ts +35 -0
  30. package/procs/config.js +62 -0
  31. package/procs/dateTime.js +2 -1
  32. package/procs/doActs.js +442 -849
  33. package/procs/doTestAct.js +27 -121
  34. package/procs/flow.js +221 -0
  35. package/procs/generateRuleRegistry.js +94 -0
  36. package/procs/getSource.d.ts +26 -0
  37. package/procs/job.js +115 -1
  38. package/procs/launch.d.ts +40 -0
  39. package/procs/launch.js +239 -108
  40. package/procs/nu.d.ts +48 -0
  41. package/procs/scope.js +196 -0
  42. package/procs/shoot.d.ts +33 -0
  43. package/procs/standard.d.ts +18 -0
  44. package/procs/standard.js +83 -0
  45. package/procs/standard.ts +126 -0
  46. package/procs/testAct.js +145 -0
  47. package/procs/testaro.d.ts +20 -0
  48. package/procs/testaro.js +236 -189
  49. package/procs/testaro.ts +321 -0
  50. package/procs/userPath.js +126 -0
  51. package/procs/xPath.d.ts +4 -0
  52. package/procs/xPath.js +81 -69
  53. package/procs/xPath.ts +106 -0
  54. package/procs/xPathScript.d.ts +6 -0
  55. package/procs/xPathScript.js +70 -0
  56. package/run.js +3 -2
  57. package/surea11y/README.md +44 -0
  58. package/surea11y/surea11y.browser.js +14 -0
  59. package/testaro/adbID.d.ts +3 -0
  60. package/testaro/adbID.js +38 -41
  61. package/testaro/adbID.ts +66 -0
  62. package/testaro/allCapStyle.d.ts +3 -0
  63. package/testaro/allCapStyle.js +31 -34
  64. package/testaro/allCapStyle.ts +55 -0
  65. package/testaro/allCaps.d.ts +16 -0
  66. package/testaro/allCaps.js +179 -151
  67. package/testaro/allCaps.ts +228 -0
  68. package/testaro/allHidden.d.ts +13 -0
  69. package/testaro/allHidden.js +29 -30
  70. package/testaro/allHidden.ts +50 -0
  71. package/testaro/allSlanted.d.ts +3 -0
  72. package/testaro/allSlanted.js +30 -33
  73. package/testaro/allSlanted.ts +54 -0
  74. package/testaro/altScheme.d.ts +3 -0
  75. package/testaro/altScheme.js +27 -30
  76. package/testaro/altScheme.ts +50 -0
  77. package/testaro/attVal.d.ts +3 -0
  78. package/testaro/attVal.js +20 -21
  79. package/testaro/attVal.ts +52 -0
  80. package/testaro/autocomplete.d.ts +3 -0
  81. package/testaro/autocomplete.js +59 -75
  82. package/testaro/autocomplete.ts +101 -0
  83. package/testaro/bulk.d.ts +13 -0
  84. package/testaro/bulk.js +32 -33
  85. package/testaro/bulk.ts +55 -0
  86. package/testaro/buttonMenu.d.ts +9 -0
  87. package/testaro/buttonMenu.js +317 -319
  88. package/testaro/buttonMenu.ts +391 -0
  89. package/testaro/captionLoc.d.ts +3 -0
  90. package/testaro/captionLoc.js +17 -20
  91. package/testaro/captionLoc.ts +40 -0
  92. package/testaro/datalistRef.d.ts +3 -0
  93. package/testaro/datalistRef.js +33 -36
  94. package/testaro/datalistRef.ts +55 -0
  95. package/testaro/distortion.d.ts +3 -0
  96. package/testaro/distortion.js +57 -26
  97. package/testaro/distortion.ts +81 -0
  98. package/testaro/docType.d.ts +15 -0
  99. package/testaro/docType.js +25 -25
  100. package/testaro/docType.ts +45 -0
  101. package/testaro/dupAtt.d.ts +16 -0
  102. package/testaro/dupAtt.js +113 -104
  103. package/testaro/dupAtt.ts +144 -0
  104. package/testaro/elements.d.ts +6 -0
  105. package/testaro/elements.js +153 -153
  106. package/testaro/elements.ts +215 -0
  107. package/testaro/embAc.d.ts +3 -0
  108. package/testaro/embAc.js +19 -20
  109. package/testaro/embAc.ts +40 -0
  110. package/testaro/focAll.d.ts +13 -0
  111. package/testaro/focAll.js +185 -191
  112. package/testaro/focAll.ts +217 -0
  113. package/testaro/focAndOp.d.ts +3 -0
  114. package/testaro/focAndOp.js +100 -104
  115. package/testaro/focAndOp.ts +128 -0
  116. package/testaro/focInd.d.ts +3 -0
  117. package/testaro/focInd.js +64 -66
  118. package/testaro/focInd.ts +96 -0
  119. package/testaro/focVis.d.ts +3 -0
  120. package/testaro/focVis.js +28 -30
  121. package/testaro/focVis.ts +52 -0
  122. package/testaro/headEl.d.ts +10 -0
  123. package/testaro/headEl.js +61 -62
  124. package/testaro/headEl.ts +82 -0
  125. package/testaro/headingAmb.d.ts +3 -0
  126. package/testaro/headingAmb.js +54 -63
  127. package/testaro/headingAmb.ts +72 -0
  128. package/testaro/hovInd.d.ts +12 -0
  129. package/testaro/hovInd.js +163 -130
  130. package/testaro/hovInd.ts +199 -0
  131. package/testaro/hover.d.ts +3 -0
  132. package/testaro/hover.js +155 -126
  133. package/testaro/hover.ts +154 -0
  134. package/testaro/hr.d.ts +3 -0
  135. package/testaro/hr.js +14 -17
  136. package/testaro/hr.ts +36 -0
  137. package/testaro/imageLink.d.ts +3 -0
  138. package/testaro/imageLink.js +17 -20
  139. package/testaro/imageLink.ts +42 -0
  140. package/testaro/labClash.d.ts +3 -0
  141. package/testaro/labClash.js +31 -33
  142. package/testaro/labClash.ts +54 -0
  143. package/testaro/legendLoc.d.ts +3 -0
  144. package/testaro/legendLoc.js +17 -20
  145. package/testaro/legendLoc.ts +42 -0
  146. package/testaro/lineHeight.d.ts +3 -0
  147. package/testaro/lineHeight.js +43 -48
  148. package/testaro/lineHeight.ts +70 -0
  149. package/testaro/linkAmb.d.ts +7 -0
  150. package/testaro/linkAmb.js +79 -80
  151. package/testaro/linkAmb.ts +105 -0
  152. package/testaro/linkExt.d.ts +3 -0
  153. package/testaro/linkExt.js +13 -16
  154. package/testaro/linkExt.ts +35 -0
  155. package/testaro/linkOldAtt.d.ts +3 -0
  156. package/testaro/linkOldAtt.js +25 -28
  157. package/testaro/linkOldAtt.ts +48 -0
  158. package/testaro/linkTo.d.ts +3 -0
  159. package/testaro/linkTo.js +22 -22
  160. package/testaro/linkTo.ts +43 -0
  161. package/testaro/linkUl.d.ts +3 -0
  162. package/testaro/linkUl.js +30 -34
  163. package/testaro/linkUl.ts +54 -0
  164. package/testaro/miniText.d.ts +3 -0
  165. package/testaro/miniText.js +41 -44
  166. package/testaro/miniText.ts +68 -0
  167. package/testaro/motion.d.ts +10 -0
  168. package/testaro/motion.js +92 -96
  169. package/testaro/motion.ts +125 -0
  170. package/testaro/nonTable.d.ts +3 -0
  171. package/testaro/nonTable.js +39 -45
  172. package/testaro/nonTable.ts +66 -0
  173. package/testaro/optRoleSel.d.ts +3 -0
  174. package/testaro/optRoleSel.js +16 -19
  175. package/testaro/optRoleSel.ts +41 -0
  176. package/testaro/phOnly.d.ts +3 -0
  177. package/testaro/phOnly.js +18 -21
  178. package/testaro/phOnly.ts +43 -0
  179. package/testaro/pseudoP.d.ts +3 -0
  180. package/testaro/pseudoP.js +36 -38
  181. package/testaro/pseudoP.ts +59 -0
  182. package/testaro/radioSet.d.ts +3 -0
  183. package/testaro/radioSet.js +57 -59
  184. package/testaro/radioSet.ts +79 -0
  185. package/testaro/registry.d.ts +63 -0
  186. package/testaro/registry.js +67 -0
  187. package/testaro/registry.ts +141 -0
  188. package/testaro/role.d.ts +3 -0
  189. package/testaro/role.js +27 -29
  190. package/testaro/role.ts +53 -0
  191. package/testaro/secHeading.d.ts +3 -0
  192. package/testaro/secHeading.js +30 -33
  193. package/testaro/secHeading.ts +53 -0
  194. package/testaro/styleDiff.d.ts +25 -0
  195. package/testaro/styleDiff.js +248 -252
  196. package/testaro/styleDiff.ts +303 -0
  197. package/testaro/tabNav.d.ts +33 -0
  198. package/testaro/tabNav.js +272 -342
  199. package/testaro/tabNav.ts +454 -0
  200. package/testaro/targetsNear.d.ts +9 -0
  201. package/testaro/targetsNear.js +130 -132
  202. package/testaro/targetsNear.ts +160 -0
  203. package/testaro/textNodes.d.ts +6 -0
  204. package/testaro/textNodes.js +139 -135
  205. package/testaro/textNodes.ts +185 -0
  206. package/testaro/textSem.d.ts +3 -0
  207. package/testaro/textSem.js +25 -28
  208. package/testaro/textSem.ts +47 -0
  209. package/testaro/title.d.ts +9 -0
  210. package/testaro/title.js +16 -13
  211. package/testaro/title.ts +31 -0
  212. package/testaro/titledEl.d.ts +3 -0
  213. package/testaro/titledEl.js +15 -18
  214. package/testaro/titledEl.ts +38 -0
  215. package/testaro/zIndex.d.ts +3 -0
  216. package/testaro/zIndex.js +19 -22
  217. package/testaro/zIndex.ts +42 -0
  218. package/tests/alfa.d.ts +45 -0
  219. package/tests/alfa.js +138 -141
  220. package/tests/alfa.ts +214 -0
  221. package/tests/aslint.d.ts +33 -0
  222. package/tests/aslint.js +272 -249
  223. package/tests/aslint.ts +301 -0
  224. package/tests/axe.d.ts +27 -0
  225. package/tests/axe.js +199 -200
  226. package/tests/axe.ts +277 -0
  227. package/tests/ed11y.d.ts +28 -0
  228. package/tests/ed11y.js +141 -99
  229. package/tests/ed11y.ts +178 -0
  230. package/tests/htmlcs.d.ts +21 -0
  231. package/tests/htmlcs.js +174 -140
  232. package/tests/htmlcs.ts +181 -0
  233. package/tests/ibm.d.ts +52 -0
  234. package/tests/ibm.js +164 -166
  235. package/tests/ibm.ts +251 -0
  236. package/tests/nuVal.d.ts +13 -0
  237. package/tests/nuVal.js +107 -112
  238. package/tests/nuVal.ts +145 -0
  239. package/tests/nuVnu.d.ts +15 -0
  240. package/tests/nuVnu.js +141 -111
  241. package/tests/nuVnu.ts +144 -0
  242. package/tests/pour.d.ts +31 -0
  243. package/tests/pour.js +242 -0
  244. package/tests/pour.ts +273 -0
  245. package/tests/qualWeb.d.ts +39 -0
  246. package/tests/qualWeb.js +302 -272
  247. package/tests/qualWeb.ts +415 -0
  248. package/tests/surea11y.d.ts +33 -0
  249. package/tests/surea11y.js +288 -0
  250. package/tests/surea11y.ts +334 -0
  251. package/tests/testaro.d.ts +25 -0
  252. package/tests/testaro.js +745 -652
  253. package/tests/testaro.ts +862 -0
  254. package/tests/wave.d.ts +46 -0
  255. package/tests/wave.js +166 -177
  256. package/tests/wave.ts +252 -0
  257. package/tsconfig.json +17 -0
  258. package/types.d.ts +243 -0
  259. package/types.js +10 -0
  260. package/types.ts +376 -0
  261. package/validation/act/README.md +46 -0
  262. package/validation/act/capture.js +424 -0
  263. package/validation/act/chromium-issue-draft.md +66 -0
  264. package/validation/act/fp-triage-2026-08-22.md +86 -0
  265. package/validation/act/isolation-notes.md +159 -0
  266. package/validation/act/playwright-issue-draft.md +73 -0
  267. package/validation/act/propose-mappings.js +0 -0
  268. package/validation/act/repro-cdp-raw.js +105 -0
  269. package/validation/act/repro-metarefresh.js +65 -0
  270. package/validation/act/score.js +184 -0
  271. package/validation/act/stage3a-stress-report.md +69 -0
  272. package/validation/act/stage3b-mapping-proposals.md +94 -0
  273. package/validation/act/stage3b-triage-draft.md +138 -0
  274. package/validation/act/surea11y-track-a-2026-09-01.md +50 -0
  275. package/validation/executors/netWatch.js +180 -90
  276. package/validation/executors/test.js +17 -2
  277. package/validation/executors/tests.js +118 -10
  278. package/validation/jobs/reports/raw/260901T1000-surea11y-validation.json +964 -0
  279. package/validation/jobs/todo/240101T1200-simple-example.json +14 -6
  280. package/validation/jobs/todo/240101T1300-shoot-example.json +2 -1
  281. package/validation/jobs/todo/260821T1900-pour-validation.json +45 -0
  282. package/validation/jobs/todo/260901T1000-surea11y-validation.json +45 -0
  283. package/validation/knownFailures.json +1 -0
  284. package/validation/tests/jobProperties/adbID.json +27 -2
  285. package/validation/tests/jobProperties/{focOp.json → allCapStyle.json} +56 -53
  286. package/validation/tests/jobProperties/allCaps.json +25 -0
  287. package/validation/tests/jobProperties/allHidden.json +133 -13
  288. package/validation/tests/jobProperties/allSlanted.json +3 -3
  289. package/validation/tests/jobProperties/altScheme.json +23 -8
  290. package/validation/tests/jobProperties/attVal.json +57 -57
  291. package/validation/tests/jobProperties/autocomplete.json +11 -1
  292. package/validation/tests/jobProperties/bulk.json +6 -1
  293. package/validation/tests/jobProperties/buttonMenu.json +63 -42
  294. package/validation/tests/jobProperties/captionLoc.json +1 -6
  295. package/validation/tests/jobProperties/checkpoint-browser.json +401 -0
  296. package/validation/tests/jobProperties/checkpoint-page.json +397 -0
  297. package/validation/tests/jobProperties/checkpoint.json +395 -0
  298. package/validation/tests/jobProperties/datalistRef.json +20 -5
  299. package/validation/tests/jobProperties/distortion.json +28 -3
  300. package/validation/tests/jobProperties/docType.json +2 -2
  301. package/validation/tests/jobProperties/dupAtt.json +48 -33
  302. package/validation/tests/jobProperties/elements.json +28 -28
  303. package/validation/tests/jobProperties/embAc.json +36 -31
  304. package/validation/tests/jobProperties/focAndOp.json +284 -0
  305. package/validation/tests/jobProperties/focInd.json +34 -34
  306. package/validation/tests/jobProperties/focVis.json +1 -1
  307. package/validation/tests/jobProperties/hover.json +39 -37
  308. package/validation/tests/jobProperties/hr.json +13 -3
  309. package/validation/tests/jobProperties/imageLink.json +0 -5
  310. package/validation/tests/jobProperties/labClash.json +68 -33
  311. package/validation/tests/jobProperties/legendLoc.json +1 -6
  312. package/validation/tests/jobProperties/lineHeight.json +2 -2
  313. package/validation/tests/jobProperties/linkAmb.json +13 -18
  314. package/validation/tests/jobProperties/linkExt.json +1 -1
  315. package/validation/tests/jobProperties/linkOldAtt.json +12 -2
  316. package/validation/tests/jobProperties/linkTo.json +1 -1
  317. package/validation/tests/jobProperties/linkUl.json +65 -65
  318. package/validation/tests/jobProperties/miniText.json +7 -2
  319. package/validation/tests/jobProperties/motion.json +4 -50
  320. package/validation/tests/jobProperties/nonTable.json +48 -3
  321. package/validation/tests/jobProperties/optRoleSel.json +12 -2
  322. package/validation/tests/jobProperties/phOnly.json +6 -16
  323. package/validation/tests/jobProperties/pseudoP.json +17 -2
  324. package/validation/tests/jobProperties/radioSet.json +30 -30
  325. package/validation/tests/jobProperties/role.json +25 -5
  326. package/validation/tests/jobProperties/secHeading.json +26 -21
  327. package/validation/tests/jobProperties/styleDiff.json +35 -5
  328. package/validation/tests/jobProperties/tabNav.json +3 -1
  329. package/validation/tests/jobProperties/targetsNear.json +237 -0
  330. package/validation/tests/jobProperties/textNodes.json +29 -29
  331. package/validation/tests/jobProperties/textSem.json +26 -1
  332. package/validation/tests/jobProperties/title.json +12 -2
  333. package/validation/tests/jobProperties/titledEl.json +39 -9
  334. package/validation/tests/jobProperties/userPath.json +317 -0
  335. package/validation/tests/jobProperties/zIndex.json +40 -35
  336. package/validation/tests/targets/allCapStyle/index.html +26 -0
  337. package/validation/tests/targets/checkpoint/index.html +38 -0
  338. package/validation/tests/targets/datalistRef/index.html +1 -1
  339. package/validation/tests/targets/focAndOp/bad.html +29 -0
  340. package/validation/tests/targets/{focOp → focAndOp}/good.html +3 -1
  341. package/validation/tests/targets/focInd/bad.html +2 -1
  342. package/validation/tests/targets/headEl/index.html +10 -1
  343. package/validation/tests/targets/{targetSmall → targetsNear}/index.html +15 -1
  344. package/validation/tests/targets/userPath/index.html +42 -0
  345. package/validation/validateTest.js +61 -9
  346. package/.claude/settings.local.json +0 -11
  347. package/.eslintrc.json +0 -41
  348. package/htmlcs/.eslintrc.json +0 -67
  349. package/validation/tests/jobProperties/linkTitle.json +0 -127
  350. package/validation/tests/jobProperties/opFoc.json +0 -164
  351. package/validation/tests/jobProperties/targetSmall.json +0 -152
  352. package/validation/tests/jobProperties/targetTiny.json +0 -142
  353. package/validation/tests/targets/focOp/bad.html +0 -25
  354. package/validation/tests/targets/linkTitle/index.html +0 -24
  355. package/validation/tests/targets/opFoc/bad.html +0 -26
  356. 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
+ }