Superseded. This is the report as issued on October 8, 2026. The report that replaced it is the October 10, 2026 re-evaluation, and the current report is newer still. Since issue, this page has moved to its own address and gained a distinct title and this notice. The evaluation is unchanged.
Product and vendor information
Changes since the prior report
This report is a re-evaluation. The prior report is dated August 30, 2026, published at https://brianbeals.com/conformance-report-2026-08-30.html. Every page and document below was evaluated again against the site as it stood on October 8, 2026.
What changed on the site
- 20 pages were evaluated in the prior report and 30 in this one.
- Pages added since the prior report: /capability-statement-accessibility-federal.html, /capability-statement-accessibility-healthcare.html, /capability-statement-accessibility-maryland.html, /capability-statement-accessibility.html, /capability-statement-state-local.html, /capability-statement.html, /conformance-report-2026-08-30.html, /writing/everybody-got-a-license, /writing/sixty-cents-a-year, /writing/who-could-afford-to-find-out.
- 6 of the 6 published documents were revised after the prior scan and were validated again: Accessibility practice, ADA Title II; Accessibility practice, federal Section 508; Federal, SDVOSB; Florida state and local, VBE; Accessibility practice, Section 504 healthcare; Accessibility practice, Maryland CATS+.
- Evaluated set widened from 20 pages to 30: three essays published since August 30, the six HTML capability statements, which the crawl had never reached because they were listed in no sitemap, and the archived August report described below.
- Screen reader testing added: a full VoiceOver pass in Safari on 12 pages, which decided 1.3.1, 2.4.1, 2.4.6, and 4.1.2.
- Capability statements fixed before this report: dark-mode heading and banner contrast (1.4.3), reflow at 320 pixels (1.4.10), and a malformed definition list (1.3.1). Each was rescanned clean.
- Essay byline: the brand mark is now hidden from assistive technology, as it is everywhere else on the site, so the author's name is no longer announced twice.
- Voice critique tool: the copy confirmation is now announced through a status message (4.1.3).
- Site map: the three new essays, this report, and the six capability statements were added to the site map or the XML sitemap, and every page now links the site map, this report included (2.4.5).
- The August 30 report moved to its own address, /conformance-report-2026-08-30.html, so this report's citation resolves. It was added to the evaluated set after the 23 checklist answers were signed, which is why their notes count 29 pages: it was scanned with the other 29, and the same scripted keyboard pass (Tab to the end and back, then a hover on every link) found nothing.
- The six capability statement PDFs were re-rendered as letter-size documents from the corrected HTML, so they carry the contrast fixes above. All six pass veraPDF, and the statements show no contrast failure under print styles.
What changed in the verdicts
- 2.4.5 Multiple Ways: Partially Supports in the prior report, Supports in this one.
- 4.1.3 Status Messages: Not Applicable in the prior report, Supports in this one.
What the screen reader pass added
A screen reader pass across 12 page(s), new in this evaluation. The criteria it decided:
- 1.3.1 Info and Relationships: previously decided by the scan and the keyboard checklist; the screen reader pass confirms the prior Supports.
- 2.4.1 Bypass Blocks: previously decided by the scan and the keyboard checklist; the screen reader pass confirms the prior Supports.
- 2.4.6 Headings and Labels: previously decided by the scan and the keyboard checklist; the screen reader pass confirms the prior Supports.
- 4.1.2 Name, Role, Value: previously inferred from the accessibility tree; the screen reader pass confirms the prior Supports.
Applicable standards
WCAG 2.1 Level A and AA, all 50 criteria. Section 508 incorporates WCAG 2.0 Level AA, a strict subset, so conformance below satisfies it. ADA Title II adopts WCAG 2.1 Level AA directly. Level AAA was not evaluated.
Evaluation methods used
- Automated rule checking with axe-core 4.10.2, plus checks it does not carry: contrast under both color schemes, reflow measured by geometry at a real 320 pixel viewport, and focus visibility under a real keyboard press.
- 6 document(s) validated against ISO 14289-1 (PDF/UA-1) with veraPDF, the reference validator. Only validator rules that map to a WCAG success criterion are reported here; PDF/UA is a wider standard than the one this report applies.
- 23 criteria that cannot be settled by the automated rules were answered by scripted keyboard pass and page inspection, reviewed and signed by Brian Beals 2026-10-08. Recorded in verify-2026-10-08.yml, retained with the scan findings so this report can be reproduced.
- Screen reader testing with VoiceOver on macOS 27.0 in Safari 27.0.1, by Brian Beals on October 8, 2026, across 12 page(s). Each page was checked for reading from the top, the skip link, landmark navigation, heading navigation, the links list, and how the brand mark is announced. This was a full pass: every check in the protocol was run on every one of those pages, none skipped or sampled. This pass decided 1.3.1, 2.4.1, 2.4.6, 4.1.2; results by page are tabled below. The skip link was also exercised by keystroke (Tab, Return, Tab) on all 12 pages with VoiceOver running in Safari, on October 8, 2026, by script (vo_capture.py, sending the keystrokes through System Events). On every page Tab announced the skip link, Return announced main, and the next Tab moved forward from the start of main rather than back into the navigation. Recorded in vo-capture-2026-10-08.yml.
Screen reader testing
| Page | What was tested | Result | Notes |
|---|---|---|---|
| / | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. Read from top: "VoiceOver on Safari Personal — Brian Beals | AI, Analytics & Automation window Brian Beals | AI, Analytics & Automation web content has keyboard focus You are currently on a link, inside of web content. To click this link, press Caps Lock-Space. To exit this web area, press Caps Lock-Shift-Up Arrow." |
| /about | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /accessibility | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /accessibility/healthcare | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /contact | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /documents | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /writing | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /writing/who-could-afford-to-find-out | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. The mark check crossed the header lockup, where no mark is announced. The essay byline's mark further down was exposed as an image named "Brian Beals" at the time of the pass and was hidden after it; that change is verified in the accessibility tree, not by ear. |
| /sitemap-page | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. |
| /conformance-report.html | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. Tested as published on the morning of October 8, 2026, which was the August 30 report. This re-evaluation is generated from the same template with three additions: the changes section, the screen reader table, and a site map link in the footer. |
| /capability-statement-accessibility.html | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. A standalone document: banner, main and contentinfo landmarks, no navigation landmark. |
| /capability-statement-state-local.html | reading from the top, the skip link, landmark navigation, heading navigation, the links list, how the brand mark is announced | Pass | Every check passed or did not apply. A standalone document: banner, main and contentinfo landmarks, no navigation landmark. |
Not covered by the screen reader pass. Mobile screen readers (VoiceOver on iOS, TalkBack on Android) and Windows screen readers (JAWS, NVDA) were not used. The 12 pages cover every page template on the site except /tools/voice-critique, the one page with a button and a status message, which was not in the screen reader sample; the other 16 pages share a template with a page that was tested.
Limitation on assistive technology testing. The screen reader pass did not decide 4.1.3. It was assessed by inspecting the browser accessibility tree and observing the DOM conditions that determine whether a change is announced. Those conditions were satisfied, which is a strong indicator and not the same as hearing the announcement.
WCAG 2.1 Level A
| Criterion | Lvl | Conformance | Remarks and explanations |
|---|---|---|---|
| 1.1.1 Non-text Content | A | Supports | Every content image carries descriptive alt text: the principal's photograph on the home and about pages, and five wildlife and travel photographs on /elsewhere. The BB brand mark is hidden from assistive technology wherever it appears, because it sits beside text that already names the company. The essay byline was the exception: its mark was exposed as an image named "Brian Beals" directly before a byline beginning with the same name, so the name was announced twice. Hidden on October 8, 2026 and re-checked in the accessibility tree. https://brianbeals.com/accessibility: svg%3E marked decorative https://brianbeals.com/accessibility/healthcare: svg%3E marked decorative https://brianbeals.com/accessibility/maryland: svg%3E marked decorative |
| 1.2.1 Audio-only and Video-only (Prerecorded) | A | Not Applicable | No audio or video elements across 30 pages. |
| 1.2.2 Captions (Prerecorded) | A | Not Applicable | No audio or video elements across 30 pages. |
| 1.2.3 Audio Description or Media Alternative | A | Not Applicable | No audio or video elements across 30 pages. |
| 1.3.1 Info and Relationships | A | Supports | Landmarks on every page, one h1 per page, and no heading level skips across all 29 pages. Lists, definition lists, tables, the quotation on /accessibility/healthcare and the preformatted blocks on /writing/sixty-cents-a-year and /tools/voice-critique all use the matching element. No bold or oversized text stands in for a heading and no typed bullet stands in for a list, including in the three essays published since the prior report. One capability statement had a span inside a definition list; fixed October 8, 2026 and rescanned. All six published documents are tagged, declare a language, carry a usable title, and label their figures. Screen reader: Landmarks and headings walked with the rotor on all 12 pages: each landmark announced once, exactly one level 1 heading per page, no skipped levels. Landmarks present, one h1 per page, no heading level skips. All 6 document(s) evaluated are tagged, declare a language, carry a usable title, and label their figures. All 6 were also validated against ISO 14289-1 with veraPDF and raised nothing that maps to a success criterion. |
| 1.3.2 Meaningful Sequence | A | Supports | Settled by listening. On October 8, 2026 Brian Beals read the newest essay, /writing/who-could-afford-to-find-out, and /capability-statement-accessibility-healthcare.html straight through with VoiceOver on macOS 27 in Safari; the spoken order carries the same meaning as the visual layout, including the statement's main column then sidebar. The August 29, 2026 pass read the prior page set the same way. The remaining pages were re-checked on October 8 by comparing source order with visual order: no CSS reordering anywhere, and the keyboard pass moved strictly down every page. The listen also found that a sentence period inside bold text made VoiceOver spell the following word; that is not a sequence failure, and the pattern was removed from the site the same day. Not determinable by scanning. |
| 1.3.3 Sensory Characteristics | A | Supports | No instruction depends on shape, size, position, or sound. Every positional word on the 29 pages either describes prose rather than instructing, or points to content that follows in reading order, as in "copy the prompt below" on /tools/voice-critique, where the prompt is the next item and the button is named Copy prompt. Not determinable by scanning. |
| 1.4.1 Use of Color | A | Supports | Color is never the sole carrier of meaning. Links inside running text are underlined. The links on /writing are whole cards (title, date, summary) in a list rather than links inside a sentence, so there is no surrounding text that color would have to distinguish them from. No status or category is shown by color without a text label. Not determinable by scanning. |
| 1.4.2 Audio Control | A | Not Applicable | No audio or video elements across 30 pages. |
| 2.1.1 Keyboard | A | Supports | Every interactive element is a native link or button, and each was reached by Tab on all 29 pages. The one button, Copy prompt on /tools/voice-critique, is native, and the scrollable prompt beside it takes focus so it can be scrolled from the keyboard. No click handlers sit on non-interactive elements. All interactive elements are native and focusable. |
| 2.1.2 No Keyboard Trap | A | Supports | On each of the 29 pages, Tab was pressed from the top through every focusable element until focus left the page, then Shift+Tab walked back the same way. Focus never stuck. No page carries a modal, an iframe, or a third-party embed. Not determinable by scanning. |
| 2.1.4 Character Key Shortcuts | A | Not Applicable | No single-character key shortcuts. The site's source registers no keyboard handler of its own on any page. Not determinable by scanning. |
| 2.2.1 Timing Adjustable | A | Not Applicable | No time limits. No session timeout, auto-advancing content, meta refresh, or media anywhere. The Copy prompt button's label reverts two seconds after a copy, which confirms an action and does not limit the user. Not determinable by scanning. |
| 2.2.2 Pause, Stop, Hide | A | Not Applicable | No animated, moving, or auto-updating content. |
| 2.3.1 Three Flashes or Below Threshold | A | Supports | No animation anywhere, so nothing can flash. |
| 2.4.1 Bypass Blocks | A | Supports | Screen reader: On all 12 pages the skip link was the first Tab stop, Return moved to the main landmark, and the next Tab landed inside main rather than back in the header. Skip link present, first in tab order, target exists and is focusable. |
| 2.4.2 Page Titled | A | Supports | All 30 pages carry a unique, non-empty title. All 6 document(s) evaluated are tagged, declare a language, carry a usable title, and label their figures. All 6 were also validated against ISO 14289-1 with veraPDF and raised nothing that maps to a success criterion. |
| 2.4.3 Focus Order | A | Supports | No positive tabindex anywhere. On all 29 pages the keyboard pass moved forward through source order and down the page, never jumping back up. No positive tabindex anywhere; DOM order governs. |
| 2.4.4 Link Purpose (In Context) | A | Supports | Every repeated link name resolves to one destination, so each has a single unambiguous purpose. Consistent naming across routes is required by 3.2.4. https://brianbeals.com/sitemap-page: 'About' repeats, all to https://brianbeals.com/about https://brianbeals.com/sitemap-page: 'Accessibility' repeats, all to https://brianbeals.com/accessibility |
| 2.5.1 Pointer Gestures | A | Not Applicable | No path-based or multipoint gesture detected: no touch or motion handlers, draggable elements, slider roles, or map containers. |
| 2.5.2 Pointer Cancellation | A | Supports | All pointer interaction is standard activation on native links and one native button. The site's source registers no mouse-down, pointer-down, or touch handler. Not determinable by scanning. |
| 2.5.3 Label in Name | A | Supports | Every aria-label contains its element's visible text, so speech input users can target controls by what they see. |
| 2.5.4 Motion Actuation | A | Not Applicable | No device motion handler detected: no touch or motion handlers, draggable elements, slider roles, or map containers. |
| 3.1.1 Language of Page | A | Supports | lang set on all 30 pages. All 6 document(s) evaluated are tagged, declare a language, carry a usable title, and label their figures. All 6 were also validated against ISO 14289-1 with veraPDF and raised nothing that maps to a success criterion. |
| 3.2.1 On Focus | A | Supports | Confirmed during the keyboard pass on all 29 pages: the address never changed and no content appeared while focus moved. Nothing navigates, opens, or submits on focus. Not determinable by scanning. |
| 3.2.2 On Input | A | Not Applicable | No form controls exist on any of the 29 pages, so no change of context on input is possible. Scope note: the evaluated set is the 29 public pages reachable from the site's sitemap and navigation. The site also carries two unlinked pages with form controls, /login and /tools/account-intel, which no public page links to and which were not in this evaluation. They are named here rather than omitted. Not determinable by scanning. |
| 3.3.1 Error Identification | A | Not Applicable | No form controls and therefore no error states on any of the 29 pages. Scope note: the evaluated set is the 29 public pages reachable from the site's sitemap and navigation. The site also carries two unlinked pages with form controls, /login and /tools/account-intel, which no public page links to and which were not in this evaluation. They are named here rather than omitted. Not determinable by scanning. |
| 3.3.2 Labels or Instructions | A | Supports | Every form control carries a label or an explicit accessible name. |
| 4.1.1 Parsing | A | Supports | No duplicate id values. Obsolete and removed in WCAG 2.2. Reported for 2.1 completeness only. |
| 4.1.2 Name, Role, Value | A | Supports | Screen reader: Every link in the rotor's link list announced a name and the link role on all 12 pages. No page in the sample has a form control or a control with state, so name, role, and value were heard for links only. Every control has a non-empty accessible name in the browser accessibility tree. Custom widget state needs AT confirmation. Scan reads the real accessibility tree. Custom widgets still need AT confirmation of state changes. |
WCAG 2.1 Level AA
| Criterion | Lvl | Conformance | Remarks and explanations |
|---|---|---|---|
| 1.2.4 Captions (Live) | AA | Not Applicable | No audio or video elements across 30 pages. |
| 1.2.5 Audio Description (Prerecorded) | AA | Not Applicable | No audio or video elements across 30 pages. |
| 1.3.4 Orientation | AA | Supports | No CSS locks or rotates content by orientation. |
| 1.3.5 Identify Input Purpose | AA | Not Applicable | No form controls exist on any of the 29 pages, so there is no input purpose to identify. Scope note: the evaluated set is the 29 public pages reachable from the site's sitemap and navigation. The site also carries two unlinked pages with form controls, /login and /tools/account-intel, which no public page links to and which were not in this evaluation. They are named here rather than omitted. Not determinable by scanning. |
| 1.4.3 Contrast (Minimum) | AA | Supports | Zero failures across 30 pages in both color schemes. |
| 1.4.4 Resize Text | AA | Supports | No viewport restriction on zoom, and no fixed-height text containers (confirmed by the 1.4.12 spacing override producing no clipping). |
| 1.4.5 Images of Text | AA | Supports | The images in the evaluated set are photographs (the principal on two pages, five wildlife and travel photographs on /elsewhere) and the BB brand mark, which is a logo and exempt. No text is presented as an image anywhere in the evaluated set. Not determinable by scanning. |
| 1.4.10 Reflow | AA | Supports | No horizontal scrolling at a 320px viewport on any of 30 pages. |
| 1.4.11 Non-text Contrast | AA | Supports | Control borders and the focus indicator clear 3:1 in both color schemes, measured by the scan. No icon or state indicator carries meaning on its own. Control borders and focus indicator all clear 3:1. |
| 1.4.12 Text Spacing | AA | Supports | No clipping or scrolling with the 1.4.12 override values applied. |
| 1.4.13 Content on Hover or Focus | AA | Not Applicable | No content appears on hover or focus. Every link and button on the 29 pages was hovered and focused in turn and nothing new appeared. There are no title tooltips, popovers, or dialogs. Not determinable by scanning. |
| 2.4.5 Multiple Ways | AA | Supports | A human-readable site map at /sitemap-page is linked from every one of the 30 pages evaluated, giving a second route to any page alongside the global navigation. |
| 2.4.6 Headings and Labels | AA | Supports | Headings were read as an outline on all 29 pages, and each names the section beneath it: essay headings are full phrases, capability statement headings name their block (Company Snapshot, NAICS, Services). The VoiceOver pass heard the heading lists out of context on 12 pages. No page has a form field, so there are no field labels to judge. Screen reader: Heading lists heard out of context through the rotor on all 12 pages; each heading made sense read alone. No page in the sample has a form field. Not determinable by scanning. |
| 2.4.7 Focus Visible | AA | Supports | Visible focus indicator confirmed under a real keyboard press. |
| 3.1.2 Language of Parts | AA | Supports | No passage declares a language other than the page language. A passage in another language with no lang attribute cannot be detected by scanning; none was observed in review. |
| 3.2.3 Consistent Navigation | AA | Supports | The 22 site pages share one header with the same six navigation links in the same order, from one layout component. The six capability statements and this report are standalone documents with no navigation menu; each ends with a footer linking the site map. Not determinable by scanning. |
| 3.2.4 Consistent Identification | AA | Supports | Components with the same function carry the same name throughout: the skip link reads "Skip to main content" on all 29 pages, the site map link reads "Site map" on every page that carries one, and the six navigation links are named identically on all 22 site pages. Not determinable by scanning. |
| 3.3.3 Error Suggestion | AA | Not Applicable | No form controls and therefore no errors to suggest corrections for. Scope note: the evaluated set is the 29 public pages reachable from the site's sitemap and navigation. The site also carries two unlinked pages with form controls, /login and /tools/account-intel, which no public page links to and which were not in this evaluation. They are named here rather than omitted. Not determinable by scanning. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | AA | Not Applicable | The site takes no legal, financial, or data-modifying commitment. Nothing is submitted, purchased, or deleted. Not determinable by scanning. |
| 4.1.3 Status Messages | AA | Supports | 1 live region(s). All exist before their content, stay visible, and keep node identity when text changes. Announcement itself requires a screen reader. Assessed without assistive technology; see the limitation above. Scan verifies the DOM conditions that make an announcement possible. Hearing it requires a screen reader; the ACR states which was done. |
This is a self-assessment unless stated otherwise. It was not produced by an independent third-party auditor. A contracting officer requiring independent verification should request a third-party audit.