Accessibility Audit: Executive Summary
| Site URL | https://apps.dcyf.wa.gov/MERIT/ |
| Audit Date | 2026-03-28 |
| Pages Audited | 9 |
| Standards Reference | WCAG 2.2 AA |
| Auditor | Claude Code (automated) |
Overall Compliance
| Metric | Value |
|---|---|
| Total Standards Evaluated | 2,484 (across 9 pages) |
| Total Pass | 974 (39%) |
| Total Fail | 185 (7%) |
| Total N/A | 1,325 (53%) |
| Critical Findings | 10 |
| High Findings | 28 |
| Medium Findings | 87 |
| Low Findings | 60 |
Critical and High Findings
Deduplicated across all pages. Site-wide issues appear once with all affected pages listed.
Critical
| # | Finding | WCAG | Pages Affected | Proposed Fix |
|---|---|---|---|---|
| 1 | CAPTCHA image has no alt text – completely invisible to screen readers, blocking password reset | 1.1.1 | ForgotPassword | Replace CAPTCHA with accessible alternative (reCAPTCHA v3, Cloudflare Turnstile) |
| 2 | CAPTCHA has no audio alternative – blind users entirely blocked from resetting passwords | 1.1.1 | ForgotPassword | Provide audio CAPTCHA or alternative verification method |
| 3 | CAPTCHA is a cognitive function test with no alternative | 3.3.8 | ForgotPassword | Remove CAPTCHA requirement or provide non-cognitive alternative |
| 4 | Form labels not programmatically associated – text nodes adjacent to inputs, not <label> elements | 1.3.1 | All 9 pages (forms on 7) | Use <label for="id"> on every form input |
| 5 | Combobox accessible name mismatch – “Training Delivery Method Training Topics” vs visible “Training Delivery Method” | 2.5.3 | FindTrainingSearch | Fix accessible name to match visible label |
| 6 | Password requirement icons have no alt text – 6 images convey pass/fail status with no accessible name | 1.1.1 | SignInRegister | Add alt="Met" / alt="Not met" to each icon |
| 7 | ForgotPassword page title is generic – “DCYF Managed Education and Registry Information Tool (MERIT)” doesn’t identify the page | 2.4.2 | ForgotPassword | Change to “Reset Password - MERIT” |
High
| # | Finding | WCAG | Pages Affected | Proposed Fix |
|---|---|---|---|---|
| 1 | No skip link on any page | 2.4.1 | All 9 pages | Add visually-hidden skip link as first focusable element |
| 2 | No <main> landmark on Welcome and ForgotPassword pages | 2.4.1 | Welcome, ForgotPassword | Wrap primary content in <main> |
| 3 | “MERIT Help” link with href="#" goes nowhere – non-functional help mechanism | 2.4.4 | All 9 pages | Point to valid help resource or remove |
| 4 | No <form> element wrapping search controls on form pages | 1.3.1 | 6 form pages | Wrap controls in <form> with role="search" where applicable |
| 5 | “click here” link text is non-descriptive | 2.4.4 | SignInRegister, RecoverUsername | Replace with descriptive text like “recover your username” |
| 6 | H1 “MERIT” text contrast over hero background not guaranteed – variable photographic background | 1.4.3 | Welcome | Add semi-transparent overlay behind heading |
| 7 | Color alone conveys password criteria status – green check/red X with no text alternative | 1.4.1 | SignInRegister | Add text labels (“Met”/”Not met”) alongside icons |
| 8 | Password fields render as textbox not password input type | 3.3.2 | SignInRegister | Use type="password" on password inputs |
| 9 | Missing autocomplete on personal data fields (email, name, DOB) | 1.3.5 | SignInRegister, RecoverUsername, FindStarsId | Add appropriate autocomplete values |
| 10 | Validation messages not linked to inputs via aria-describedby | 3.3.2 | SignInRegister | Associate error messages with inputs programmatically |
| 11 | ForgotPassword uses table-based layout – legacy .aspx page with no semantic HTML | 1.3.1 | ForgotPassword | Migrate to modern CSS layout |
| 12 | Date format instructions only in placeholder – disappears on input, not reliably announced | 3.3.2 | FindTrainingSearch | Add persistent visible format hint via aria-describedby |
Compliance by Standards Section
| Section | Items Evaluated | Pass | Fail | N/A | Pass Rate |
|---|---|---|---|---|---|
| 1. Structure & Semantics | 291 | 193 | 41 | 57 | 82% |
| 2. Links & Navigation | 301 | 170 | 58 | 73 | 75% |
| 3. Images & Visual Design | 361 | 253 | 34 | 74 | 88% |
| 4. User Input, Forms & Dynamic Content | 965 | 275 | 68 | 622 | 80% |
| 5. Multimedia, Animations & Motion | 434 | 18 | 0 | 416 | 100% |
| Total | 2,352 | 909 | 201 | 1,242 | 82% |
Page-by-Page Summary
| Page | Route | Critical | High | Medium | Low | Report |
|---|---|---|---|---|---|---|
| Welcome | /MERIT/Home/Welcome | 0 | 4 | 7 | 4 | View |
| Find Training (Hub) | /MERIT/Search | 0 | 0 | 6 | 5 | View |
| Find Training (Search) | /MERIT/Search/Trainings | 2 | 3 | 9 | 4 | View |
| Find Trainers | /MERIT/Search/Trainers | 1 | 2 | 10 | 3 | View |
| Find Organizations | /MERIT/Search/Organizations | 1 | 2 | 11 | 1 | View |
| Sign In / Register | /MERIT/Home/SignInRegister | 3 | 9 | 4 | 1 | View |
| Recover Username | /MERIT/Home/RecoverUsername | 0 | 2 | 6 | 3 | View |
| Forgot Password | /MERIT/Public/ForgotPassword.aspx | 4 | 6 | 5 | 3 | View |
| Find STARS ID | /MERIT/Home/FindStarsId | 0 | 2 | 7 | 3 | View |
Recommendations
Immediate Action (Critical / High)
-
Replace the CAPTCHA on the Forgot Password page – The image CAPTCHA with no alt text and no audio alternative completely blocks blind and deafblind users from resetting their passwords. This is the most severe accessibility barrier found. Replace with reCAPTCHA v3, Cloudflare Turnstile, or another accessible alternative. Affects 1 page. WCAG 1.1.1, 3.3.8.
-
Add
<label for="id">associations to ALL form inputs site-wide – Every form page uses plain text adjacent to inputs rather than programmatic<label>elements. This is the most pervasive issue, affecting 7 of 9 pages and impacting screen reader users on every form interaction. This single fix resolves WCAG 1.3.1, 2.5.3, and 3.3.2 across the entire site. -
Add a skip link as the first focusable element on every page – No page has a functional skip link. Add
<a href="#main-content" class="skip-link">Skip to main content</a>site-wide. Affects all 9 pages. WCAG 2.4.1. -
Fix the Sign In / Register page – 3 Critical + 9 High findings make this the most non-compliant page that users must interact with. Priority fixes: form label associations, password field types, password criteria icons (alt text + text alternatives),
autocompleteattributes, and validation message associations. -
Fix or remove “MERIT Help” dead link –
href="#"on every page represents a broken help mechanism. Either point it to a real help resource or remove it entirely. WCAG 2.4.4, 3.2.6.
Short-Term (Medium)
-
Wrap forms in
<form>elements withrole="search"where applicable – Enables assistive technology to identify and navigate to form regions. Affects 6 form pages. -
Add
<nav>landmarks to navigation lists (header sub-nav, footer links) and semantic breadcrumbs with<nav aria-label="Breadcrumb">. Affects all inner pages. -
Add
aria-expandedto collapsible controls – “Search Options” toggle and “Advanced Options” buttons need button role and expanded/collapsed state. Affects 4 search pages. -
Migrate the Forgot Password page from legacy .aspx/table-based layout to the modern MVC template used by the rest of the site. Addresses layout tables, missing
<main>, inconsistent navigation, and generic page title simultaneously. -
Add
autocompleteattributes to personal data fields (email, name, DOB) on SignInRegister, RecoverUsername, and FindStarsId pages. WCAG 1.3.5.
Improvement (Low)
-
Increase footer text size from 11px to at least 14px site-wide.
-
Improve Access Washington logo link – change alt text to describe destination, not image content.
-
Add “You Are Here” indicator on active navigation items with
aria-current="page". -
Hide decorative icon spans (
aria-hidden="true") in card buttons on the Find Training Hub.
Limitations
This automated audit evaluates WCAG 2.2 AA standards to the extent possible via DOM inspection, visual screenshot analysis, computed style extraction, and basic keyboard interaction. The following require manual verification:
- Exact color contrast ratios – Calculated from
getComputedStyle()values; may not account for gradients, background images, opacity layers, or text over images - Screen reader behavior – ARIA attributes are checked for correctness but actual screen reader output is not verified
- Touch/gesture interactions – Not testable via desktop Playwright browser session
- Cognitive load and readability – Subjective assessments requiring human judgment
- Audio/video content quality – Presence of captions and controls is verified but content accuracy is not
- Windows High Contrast Mode – Not tested in this automated audit
- Dynamic content timing – Page state at time of capture may not reflect all dynamic behaviors
- Keyboard interaction depth – Tab sequence covers ~15 elements; exhaustive testing of every interactive element was not performed
- Auth-gated pages – Only publicly accessible pages were audited; logged-in functionality was not evaluated
Severity Definitions
| Severity | Criteria |
|---|---|
| Critical | Required standard violated; completely blocks access for one or more disability groups (e.g., keyboard trap, no form labels, missing alt text on functional images) |
| High | Required standard violated; significant barrier that makes the feature very difficult to use (e.g., poor contrast on primary content, missing heading structure, focus indicator absent) |
| Medium | Required standard violated with moderate impact, OR Best practice violated with significant user impact (e.g., heading levels skipped, link purpose unclear from context, insufficient target size) |
| Low | Best practice not followed; minor impact on usability (e.g., title could be more concise, landmark count could be reduced, hover indicator could be enhanced) |