Skip to main content
North DakotaState Board of Optometry

COMPLIANCE AUDIT LEDGER · TITLE II / 28 CFR Part 35, Subpart H

Compliance Audit Ledger

A live, machine-verified record of how this website conforms to the federal accessibility standard adopted under Title II of the Americans with Disabilities Act, organized by the six subsections of the rule that established the obligation.

Conformant

Conformant with WCAG 2.1 Level AA

Every interactive page on this website is currently passing all four automated test suites. The metadata below records when, against what standard, and with what scope.

187 / 187 automated checks passing · snapshot April 8, 2026

Snapshot
2026-04-08 · April 8, 2026
Next review
2026-07-08
Standard
WCAG 2.1 Level AA — incorporated at 28 CFR §35.200(b)
Statute
28 CFR Part 35 — Subpart H (Web and Mobile Accessibility)
Deadline
2026-04-24 · April 24, 2026
Result
187 / 187 automated checks passing

§ 35.200 — General Requirement

Conformance to WCAG 2.1 Level AA

Subpart H requires public entities to make web content readily accessible to and usable by people with disabilities. The technical standard is WCAG 2.1 Level AA, incorporated by reference. Below: every Level A and AA success criterion that applies to the public site, with the verification mode for each. WCAG conformance is cumulative — Level AA conformance requires satisfying every Level A criterion as well as every Level AA criterion, so the A and AA rows in the table below are not separate categories but a single set of obligations the site must meet in full.

§ 35.200 — General Requirement: Conformance to WCAG 2.1 Level AA

Every Level A and AA criterion that applies to the public site is satisfied by one of three verification modes. The Status column on each row tells the reader which:

  • AUTOAutomated — at least one of the four automated test suites verifies the criterion on every code change. The axe, LH, KB, and SR columns show which suites contribute (31 criteria).
  • MANUALManual — verified by human review or by the structure of the codebase itself (e.g. shared <Header /> and <Footer /> components guarantee consistent navigation; manual zoom test verifies reflow at 200%). The MAN column carries a green dot for these rows (7 criteria).
  • N/AN/A — the criterion governs a feature that does not exist on the public site (no flashing content, no character-key shortcuts, no payment forms), so the obligation is satisfied vacuously. Manual review confirmed the non-applicability, so these rows also carry a green dot in the MAN column (12 criteria).
WCAG 2.1 Level A and AA success criteria mapped to verification mode and to the four automated test suites that verify each one. ● = full coverage by that suite, ◐ = partial, — = not covered by that suite.
SCSuccess CriterionStatusLvlaxeLHKBSRMAN
Principle 1Perceivable
1.1.1Non-text ContentAUTOA
1.2.1Audio-only and Video-only (Prerecorded)Not applicable — the public site contains no prerecorded audio-only or video-only content.N/AA
1.2.2Captions (Prerecorded)Not applicable — the public site contains no prerecorded video with audio. Board meetings are held on Zoom (an external service) and are not embedded.N/AA
1.2.3Audio Description or Media Alternative (Prerecorded)Not applicable — the public site contains no prerecorded video.N/AA
1.2.4Captions (Live)Not applicable — the public site does not stream live audio or video.N/AAA
1.2.5Audio Description (Prerecorded)Not applicable — the public site contains no prerecorded video.N/AAA
1.3.1Info and RelationshipsAUTOA
1.3.2Meaningful SequenceAUTOA
1.3.3Sensory CharacteristicsVerified by manual content review — the public site has no instructions that rely on shape, size, sound, or visual location alone (e.g. "click the round button on the right").MANUALA
1.3.4OrientationAUTOAA
1.3.5Identify Input PurposeAUTOAA
1.4.1Use of ColorColor-only state information is also covered by manual review.AUTOA
1.4.2Audio ControlNot applicable — the public site has no audio that plays automatically.N/AA
1.4.3Contrast (Minimum)AUTOAA
1.4.4Resize TextAUTOAA
1.4.5Images of TextVerified by manual review of the public-site image inventory; all text is rendered as HTML, not images.MANUALAA
1.4.10ReflowVerified by responsive viewport testing in Playwright at 320px and a manual 200% browser zoom check.MANUALAA
1.4.11Non-text ContrastAUTOAA
1.4.12Text SpacingVerified by manual stylesheet-override test (line-height 1.5×, paragraph spacing 2×, letter spacing 0.12×, word spacing 0.16×).MANUALAA
1.4.13Content on Hover or FocusAUTOAA
Principle 2Operable
2.1.1KeyboardAUTOA
2.1.2No Keyboard TrapAUTOA
2.1.4Character Key ShortcutsNot applicable — the site implements no single-character key shortcuts. (Cmd+K for site search uses a modifier key and is exempt from this criterion.)N/AA
2.2.1Timing AdjustableNot applicable — the public site enforces no time limits on user actions.N/AA
2.2.2Pause, Stop, HideDecorative animations honor prefers-reduced-motion via the global @media rule in globals.css.AUTOA
2.3.1Three Flashes or BelowNot applicable — the public site has no flashing content. Verified by manual review of every animation.N/AA
2.4.1Bypass BlocksAUTOA
2.4.2Page TitledAUTOA
2.4.3Focus OrderAUTOA
2.4.4Link Purpose (In Context)AUTOA
2.4.5Multiple WaysVerified architecturally — the site provides three independent ways to find content: site-wide command palette (Cmd+K), the /site-map index page, and linear top-navigation menus.MANUALAA
2.4.6Headings and LabelsAUTOAA
2.4.7Focus VisibleAUTOAA
2.5.1Pointer GesturesNot applicable — no path-based or multipoint pointer gestures are used on the public site.N/AA
2.5.2Pointer CancellationVerified architecturally — all interactive elements use standard browser click semantics, which fire on pointer-up and are cancelable by dragging away before release.MANUALA
2.5.3Label in NameAUTOA
2.5.4Motion ActuationNot applicable — the public site has no motion-actuated functionality (no shake-to-undo, no tilt controls).N/AA
Principle 3Understandable
3.1.1Language of PageAUTOA
3.1.2Language of PartsAUTOAA
3.2.1On FocusAUTOA
3.2.2On InputAUTOA
3.2.3Consistent NavigationVerified architecturally — every public page renders the same shared <Header /> and <Footer /> components from src/app/(logged-out)/_components2, so navigation order is necessarily consistent.MANUALAA
3.2.4Consistent IdentificationAUTOAA
3.3.1Error IdentificationAUTOA
3.3.2Labels or InstructionsAUTOA
3.3.3Error SuggestionAUTOAA
3.3.4Error Prevention (Legal / Financial / Data)Not applicable — the public site contains no legal, financial, or data-modification submission forms. (Renewals and applications live behind authentication and are scoped separately.)N/AAA
Principle 4Robust
4.1.1ParsingAUTOA
4.1.2Name, Role, ValueAUTOA
4.1.3Status MessagesAUTOAA
full coverage partial not covered by that suite· LH = Lighthouse, KB = Keyboard, SR = Screen Reader, MAN = Manual / Architectural · LVL = the WCAG tier each criterion belongs to (A or AA); AA conformance requires passing all of both

§ 35.201 — Exceptions

Exceptions Invoked, and Those Not

Subpart H lists five categories of content that are exempted from the WCAG conformance requirement. NDSBO invokes two of them, and explicitly does not rely on the other three.

§ 35.201 — Exceptions

§35.201(b)

Invoked

Pre-existing conventional electronic documents

PDF, Word, PowerPoint, and Excel documents posted before the compliance date, unless currently used to apply for, access, or participate in a public entity’s services, programs, or activities.

NDSBO ScopeBoard meeting minutes, statute reprints, and application form PDFs posted before April 24, 2026. Each is being remediated or replaced with HTML alternatives on a rolling basis.

Tracked at docs/pdf-accessibility-backlog.md

§35.201(c)

Invoked

Third-party content

Content posted by a third party where the third party is not posting due to a contractual, licensing, or other arrangement with the public entity.

NDSBO ScopeExternal Zoom meeting links, the ARBO OE Tracker continuing-education portal, and outbound links to the National Board of Examiners in Optometry. NDSBO has no contractual control over the accessibility of these third-party destinations.

Exceptions NOT invoked

  • §35.201(a)

    Archived web content

  • §35.201(d)

    Individualized password-protected documents

  • §35.201(e)

    Pre-existing social media posts

§ 35.202 — Conforming Alternate Versions

Where direct accessibility was technically infeasible

NDSBO does not generally rely on conforming alternate versions in lieu of direct accessibility. The one exception is the optometrist directory map: visual map interactions are supplemented with a fully accessible card-based list view of the same data, reachable from the same page without additional navigation.

§ 35.203 — Equivalent Facilitation

Alternate methods providing equal or greater access

Not currently invoked. NDSBO meets WCAG 2.1 AA directly on every public page; no substitute methods are claimed in place of the standard.

§ 35.204 — Duties Beyond Subpart H

Effective communication remains in force

Subpart H does not displace NDSBO's broader Title II obligations. The Board remains responsible for effective communication, reasonable modification of policies, and program access under the underlying ADA regulations. Requests for an alternative format, an interpreter, or any other accommodation may be directed to the Board's ADA Coordinator using the contact information in the Feedback section below.

§ 35.205 — Minimal-Impact Noncompliance

Safe harbor — not invoked

Subpart H provides a narrow safe harbor for noncompliance whose impact on access is so minimal that it would not affect a person with a disability's ability to use the content. NDSBO does not invoke this provision. Any barrier reported through the feedback channel below is treated as a remediation item, not a safe-harbor case.

Methodology

The Four Automated Test Suites

Each suite is reproducible from the source repository. The commands below run against either the dev server or a production build (Lighthouse). All four are executed on every code change as part of the normal development workflow.

Suite I

Static DOM and ARIA audit

axe-core

axe-core 4.11 via Playwright (Deque Systems)

Coverage
22 public routes
Result
22 / 22 passing

Walks every public route and asserts zero serious or critical violations against the WCAG 2.1 A and AA rule sets. Catches missing labels, contrast failures, malformed ARIA, parsing errors, broken landmark structure, and most static-DOM correctness issues.

$ pnpm test:e2e accessibility.spec.ts

Suite II

Composite accessibility score

Google Lighthouse

Lighthouse 12 via Lighthouse CI (@lhci/cli)

Coverage
22 public routes, threshold ≥ 95 / 100
Result
22 / 22 perfect 100s

Independent corroboration of axe-core's findings using Google's accessibility audit. Run against a production build (not the dev server) to catch issues that only manifest after Next.js optimization. CI fails any route below 95.

$ pnpm dlx @lhci/cli autorun

Suite III

Real Tab / Enter / Space / Escape interaction

Playwright Keyboard

Playwright keyboard spec (Chromium)

Coverage
70 tests — 22 public routes parametrized + 4 page-specific flows
Result
70 / 70 passing

Verifies what static-DOM tools cannot: that the skip link is the first tab stop on every page, that 20 sequential tab stops on every page show a visible focus indicator, that no element traps focus, and that page-specific flows (mobile drawer, command palette, directory filters, FAQ accordion) activate correctly via keyboard.

$ pnpm test:e2e keyboard.spec.ts

Suite IV

Spoken-output assertions for every interactive element

Virtual Screen Reader

@guidepup/virtual-screen-reader via Playwright (Chromium)

Coverage
73 tests — 22 public routes parametrized + 7 page-specific flows
Result
73 / 73 passing

Walks the same accessibility tree that VoiceOver, NVDA, and JAWS consume and asserts the actual phrases each interactive element produces — landmark announcements, heading hierarchy, label / role / state on form controls, live-region updates, dialog announcements, and external-link affordances.

$ pnpm test:e2e screen-reader.spec.ts

Audit Ledger

The Eleven Categories of Remediation

Issues identified during the initial WCAG audit and the work required to resolve each one. Every category is now fully remediated; the test suites above are the regression guards.

  1. Category

    A

    Forms & Inputs

    WCAG 1.3.1, 3.3.2, 4.1.2

    Every directory search input, sort dropdown, and license-status select was given a visible, programmatically-associated <Label>. Advanced filter toggles expose aria-expanded / aria-controls.

  2. Category

    B

    Interactive Element Semantics

    WCAG 2.1.1, 4.1.2

    Replaced non-semantic clickable elements with real <button>s. Added accessible names to the mobile drawer trigger and search-trigger button, and added required Radix DialogTitle / DialogDescription.

  3. Category

    C

    Status Announcements & Live Regions

    WCAG 1.3.1, 4.1.3

    Directory result-count badge wrapped in role="status" + aria-live="polite" so search counts are announced as the user types.

  4. Category

    D

    Decorative Icons

    WCAG 1.1.1

    All decorative Lucide icons across header, footer, meetings, directory, and site search marked aria-hidden so screen readers don’t read out icon names redundantly.

  5. Category

    E

    External Links

    WCAG 2.4.4, 3.2.4

    Every link that opens in a new tab announces "(opens in new tab)" via a screen-reader-only span and uses rel="noopener noreferrer". A reusable <ExternalLink> wrapper exists for new code.

  6. Category

    F

    Color Contrast

    WCAG 1.4.3

    Brand --primary, --primary-foreground, and --muted-foreground tuned in globals.css to clear 4.5:1 against their backgrounds. Status badges and the "Unlimited" badge bumped one shade darker. Hero accent retuned for navy backgrounds.

  7. Category

    G

    Motion Sensitivity

    WCAG 2.3.3

    Global @media (prefers-reduced-motion: reduce) rule neutralizes all CSS animations and transitions. Framer Motion page transitions wrapped with useReducedMotion().

  8. Category

    G2

    Heading Hierarchy

    WCAG 1.3.1

    FAQ section titles (previously rendered with shadcn <CardTitle> as <h3>) replaced with <h2> so the page reads h1 → h2 → h3 instead of skipping a level.

  9. Category

    G3

    Landmark Structure

    WCAG 1.3.1

    Home page restructured so <Header /> and <Footer /> are siblings of <main> rather than children. Nesting them inside <main> stripped their implicit banner / contentinfo ARIA roles. Caught by the screen reader spec, not by axe or Lighthouse.

  10. Category

    H

    Site Navigation & Multiple Ways

    WCAG 2.4.5

    Site-wide command palette (Cmd+K) enabled in production, satisfying the "Multiple Ways" criterion. /accessibility added to the unauthenticated routes allowlist.

  11. Category

    I

    Public Accessibility Statement

    WCAG 28 CFR §35.200

    Public accessibility statement added at /accessibility, plus this auditor compliance ledger at /accessibility/monitor, both linked from the footer of every public page.

Pre-existing Conformance

Criteria already met before the audit began

Items that required no remediation. Verified during the initial exploration and confirmed by the test suites.

SCCriterionWhat was already in place
3.1.1Language of Page<html lang="en"> set on the root layout
2.4.1Bypass Blocks"Skip to main content" link as the first focusable element on every public page
1.3.1Info and RelationshipsHeading hierarchy is sequential on every public page (post Category G2 fix)
2.4.4Link PurposeNo "click here" / "read more" anti-patterns anywhere in the public site
4.1.2Name, Role, ValueAll Radix UI primitives (Accordion, Dialog, Select, ToggleGroup, NavigationMenu) ship with correct ARIA out of the box

Feedback & Escalation

Report a Barrier, Request an Accommodation

If you encounter an accessibility barrier, need information in an alternative format, or have questions about anything on this page, contact the Board's ADA Coordinator. We aim to respond within five business days.

ADA Coordinator

North Dakota State Board of Optometry

2222 E. Broadway Ave, Bismarck, ND 58501

Phone(701) 471-0289

Emailndoptometryboard@gmail.com

Other paths

  • The public-facing version of this disclosure lives at /accessibility.
  • For general (non-accessibility) inquiries, see the contact page.
  • The full file-level changelog of every remediation is at ACCESSIBILITY_CHANGES.md in the source repository.

Colophon — this ledger was last reviewed April 8, 2026 and is regenerated from the source repository on every code change.