Skip to main content
Steve McGarvey

Accessibility Conformance Report

Based on VPATĀ® (Voluntary Product Accessibility Template) Version 2.5Rev, Web Content Accessibility Guidelines (WCAG) edition, covering WCAG 2.2 Level A and AA. The plain-language version is the accessibility statement.

Product information

Name of product
stevemcgarvey.me (personal website)
Version
Live site as of
Report date
(revised; first published )
Product description
Personal site of Steve McGarvey: essays and notes, a reading list, work history, public portfolio case studies, and site search. Built with Astro, hosted on Cloudflare Workers.
Contact
steve@upstreamxd.com

Notes

Evaluation methods used

Applicable standards

Terms

Supports:
the functionality meets the criterion without known defects, or meets it with equivalent facilitation.
Partially Supports:
some functionality doesn't meet the criterion.
Does Not Support:
the majority of functionality doesn't meet the criterion.
Not Applicable:
the criterion isn't relevant to the product.
Not Evaluated:
the product hasn't been evaluated against the criterion. Only used for AAA.

WCAG 2.2 report

Table 1: Success Criteria, Level A

CriteriaConformance levelRemarks and explanations
1.1.1 Non-text ContentSupportsContent images have descriptive alt text. Decorative images (book covers next to visible titles) have empty alt. Figures read alt, then a new-tab hint, then a caption that adds to the alt rather than repeating it. The caption also says, visibly, that the full-size image opens in a new tab.
1.2.1 Audio-only and Video-only (Prerecorded)Not ApplicableNo audio or video content.
1.2.2 Captions (Prerecorded)Not ApplicableNo video content.
1.2.3 Audio Description or Media Alternative (Prerecorded)Not ApplicableNo video content.
1.3.1 Info and RelationshipsSupportsHeadings, lists, landmarks, description lists, tables, and form labels are coded in markup. Lists styled without bullets carry role="list" so Safari keeps list semantics. Case-study tables mark each row label as a row header, and none has an empty header row.
1.3.2 Meaningful SequenceSupportsReading order matches visual order, including margin notes, which read beside the paragraph they annotate.
1.3.3 Sensory CharacteristicsSupportsInstructions don't rely on shape, size, position, or sound alone. Image descriptions that mention left and right also name what's there.
1.4.1 Use of ColorSupportsLinks in body text are underlined. The password error is shown as text, not only as a red border.
1.4.2 Audio ControlNot ApplicableNo audio plays automatically.
2.1.1 KeyboardSupportsAll links, buttons, search, comments, and the password form work from the keyboard. In Safari, Tab reaches links only when "Press Tab to highlight each item" is on (Option + Tab otherwise), which is a browser setting.
2.1.2 No Keyboard TrapSupportsTab order cycles through each page and back out without traps.
2.1.4 Character Key ShortcutsNot ApplicableThe site defines no keyboard shortcuts.
2.2.1 Timing AdjustableNot ApplicableNo time limits.
2.2.2 Pause, Stop, HideNot ApplicableNo moving, blinking, scrolling, or auto-updating content.
2.3.1 Three Flashes or Below ThresholdSupportsNo flashing content.
2.4.1 Bypass BlocksSupportsA skip link is the first focusable item and moves focus to the main content. Landmarks and headings also allow navigation.
2.4.2 Page TitledSupportsEvery page has a unique, descriptive title, including the 404 page. After a failed password attempt, the title starts with "Error:".
2.4.3 Focus OrderSupportsFocus follows reading order. "Show comments" moves focus to the Comments heading. A failed password attempt moves focus to the error message.
2.4.4 Link Purpose (In Context)SupportsLink names describe their destination. Repeated links such as "View case study" and "Read the series" include the item's name.
2.5.1 Pointer GesturesNot ApplicableNo multipoint or path-based gestures.
2.5.2 Pointer CancellationSupportsControls are native links and buttons that activate on release.
2.5.3 Label in NameSupportsAccessible names begin with the visible label, e.g. writing cards read the visible type label and then the title.
2.5.4 Motion ActuationNot ApplicableNo motion-triggered functions.
3.1.1 Language of PageSupportslang="en" on every page.
3.2.1 On FocusSupportsFocus doesn't trigger a change of context.
3.2.2 On InputSupportsTyping in search updates the results on the same page, with no change of context.
3.2.6 Consistent HelpSupportsThe contact email and Accessibility link are in the same footer position on every page.
3.3.1 Error IdentificationSupportsA wrong password returns a text error ("That password didn't work. Check it and try again."), marks the field invalid, and links the error as the field's description. VoiceOver announces it on load.
3.3.2 Labels or InstructionsSupportsEvery field has a visible label. Remark: on the portfolio overview, VoiceOver announced only "Password" for the password field, without its type or required state. The markup has the label, type="password", and required.
3.3.7 Redundant EntryNot ApplicableNo multi-step processes.
4.1.1 ParsingSupportsObsolete in WCAG 2.2 and treated as always satisfied. Listed for VPAT 2.5 compatibility.
4.1.2 Name, Role, ValuePartially SupportsSite controls expose name, role, and state. Exception: when a reader loads comments, the third-party giscus frame adds a second main landmark to the page. Comments stay readable and operable. Reported upstream as giscus/giscus#1734. Remark: see 3.3.2 on the portfolio overview password field.

Table 2: Success Criteria, Level AA

CriteriaConformance levelRemarks and explanations
1.2.4 Captions (Live)Not ApplicableNo live media.
1.2.5 Audio Description (Prerecorded)Not ApplicableNo video content.
1.3.4 OrientationSupportsNo orientation lock.
1.3.5 Identify Input PurposeSupportsThe password field uses autocomplete="current-password". No other fields collect personal data.
1.4.3 Contrast (Minimum)SupportsBody text 11.2:1 or higher. Muted text 4.51:1 or higher in light theme and 7.83:1 or higher in dark. Checked in both themes.
1.4.4 Resize TextSupportsText resizes without loss of content or function.
1.4.5 Images of TextSupportsText is real text. Case-study figures are images of design artifacts and annotation boards, where the visual presentation is the subject. Each has full alt text and a full-size version.
1.4.10 ReflowSupportsNo horizontal scrolling at 320 CSS px on any template.
1.4.11 Non-text ContrastSupportsFocus indicator 6.59:1 to 18.45:1. Password field border 5.33:1. Decorative hairline borders aren't required to meet contrast.
1.4.12 Text SpacingSupportsNo clipped or overlapping text with the text-spacing override.
1.4.13 Content on Hover or FocusNot ApplicableNo content appears on hover or focus.
2.4.5 Multiple WaysSupportsMain navigation, site search, and index pages for Writing, Reading, and Work.
2.4.6 Headings and LabelsSupportsHeadings describe their sections, including repeated subheadings within each step of an essay. Remark: VoiceOver speaks the "Read" heading on the Reading page in the present tense.
2.4.7 Focus VisibleSupportsA visible outline on every focusable element, in both themes.
2.4.11 Focus Not Obscured (Minimum)SupportsThe header isn't sticky, and no focused element is hidden.
2.5.7 Dragging MovementsNot ApplicableNo drag interactions.
2.5.8 Target Size (Minimum)SupportsTargets under 24 by 24 px (the search icon and nav and footer links) meet the spacing exception. The tightest spacing is 25.1 px.
3.1.2 Language of PartsSupportsPassages in other languages are marked with their language, e.g. a Greek word in "Wolves and Sheep; Serpents and Doves."
3.2.3 Consistent NavigationSupportsNavigation is in the same order on every page.
3.2.4 Consistent IdentificationSupportsComponents with the same function have the same name across pages, e.g. "Search".
3.3.3 Error SuggestionSupportsThe password error says what to do next. A specific correction can't be suggested without revealing the password.
3.3.4 Error Prevention (Legal, Financial, Data)Not ApplicableNo legal, financial, or data submissions.
3.3.8 Accessible Authentication (Minimum)SupportsThe password field allows paste and supports password managers. No cognitive function test.
4.1.3 Status MessagesSupportsSearch announces the result count ("46 results for accessibility") and "No results" without moving focus.

Table 3: Success Criteria, Level AAA

Not evaluated.

Report date (revised; first published ). Found something this report gets wrong? Email steve@upstreamxd.com.