Skip to content

Feat/3.6 screen reader support#16

Merged
trotro merged 16 commits intomainfrom
feat/3-6-screen-reader-support
Mar 20, 2026
Merged

Feat/3.6 screen reader support#16
trotro merged 16 commits intomainfrom
feat/3-6-screen-reader-support

Conversation

@trotro
Copy link
Collaborator

@trotro trotro commented Mar 18, 2026

Summary

This PR implements Story 3.6 – Screen Reader Support for All Content and includes the follow-up fixes from code review.

The goal is to ensure all content and interactive elements are correctly announced by screen readers (NVDA, JAWS, VoiceOver), with proper ARIA semantics across Zola templates and
the standalone comparison page.

Changes

  • templates/base.html

    • Added <footer class="site-footer"> landmark with i18n copyright text
  • templates/page.html

    • Full i18n pass — all hardcoded English strings replaced with trans() keys
    • Added aria-labelledby to the certifications section
    • Added aria-hidden="true" to the decorative cert-icon checkmark
    • Added aria-label to the external link icon on attestation links
  • static/compare.html

    • Added <footer class="site-footer"> landmark (static file, does not inherit base.html)
    • Added aria-live="polite" and aria-busy management to #comparison-content
    • Added <caption> to the comparison table
    • Added scope="col" / scope="row" to all <th> cells
    • Replaced / symbols with aria-hidden + .sr-only text alternatives (Yes/No)
    • Replaced inline style="color: red" with .comparison-error CSS class
  • static/style.css

    • Added .sr-only screen-reader-only utility class
    • Added .site-footer and .site-footer a styles
    • Added .comparison-error class
  • zola.toml

    • Added 14 new i18n keys × 2 languages (EN + FR): footer_copyright, provider_info_label, country_of_origin, headquarters_label, founded_label, website_label,
      opens_in_new_tab, about_heading, services_heading, services_intro, certifications_heading, certifications_intro, view_attestation, datacenter_heading,
      datacenter_intro, back_to_providers

Code Review Follow-ups Included

  • Added <footer> to compare.html — static file does not inherit base.html template
  • Removed invalid scope="colgroup" from section divider rows in the comparison table
  • Replaced inline style="color:red" with a proper CSS class

Validation

  • mise run test

Result: 0 axe-core violations on the 4 checked pages.

BMM Tracking

  • Story file: _bmad-output/implementation-artifacts/3-6-screen-reader-support-for-all-content.md
  • Sprint status: 3-6-screen-reader-support-for-all-contentdone

trotro and others added 3 commits March 15, 2026 19:33
- Add <footer> landmark to base.html with i18n copyright text
- Add .sr-only utility class and .site-footer styles to style.css
- Add footer_copyright i18n key (EN + FR)
- Fully i18nize page.html (all hardcoded strings replaced with trans())
- Add aria-labelledby to certifications section in page.html
- Add aria-hidden=true to decorative cert-icon checkmark in page.html
- Add provider_info_label, country_of_origin, headquarters_label, founded_label,
  website_label, opens_in_new_tab, about_heading, services_heading, services_intro,
  certifications_heading, certifications_intro, view_attestation, datacenter_heading,
  datacenter_intro, back_to_providers i18n keys (EN + FR)
- Add aria-live=polite + aria-busy management to #comparison-content in compare.html
- Add <caption> to comparison table
- Add scope=col/row/colgroup to all <th> elements in comparison table
- Replace check/cross symbols with aria-hidden + sr-only text alternatives

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add <footer> landmark to compare.html (H1 — missing contentinfo on every page)
- Remove scope=colgroup from section divider rows in comparison table (H2 — invalid scope value)
- Add .comparison-error CSS class; remove inline style=color:red (M2)
- Add zola.toml to story 3.6 File List (M1 — documentation gap)
- Add .comparison-error to style.css

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
trotro and others added 13 commits March 18, 2026 12:22
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
- Create templates/404.html extending base.html (fixes html-has-lang, viewport,
  meta-description, errors-in-console on 404 page)
- Add not_found_title, not_found_heading, not_found_message, back_home i18n keys (EN+FR)
- Fix label-content-name-mismatch: update lang_fr_label/lang_en_label to include
  abbreviation (FR — Français, EN — English) for WCAG 2.5.3 compliance
- Update lang.js dynamic switcher labels to match (FR — Français, EN — English)
- Fix compare.html: add meta-description and favicon link
- Make provider-actions block conditional on page.extra.country in page.html
  (certification explainer pages should not have Add to Comparison button)
- Add defer to all script tags in base.html and lang.js in compare.html
  (removes render-blocking scripts from critical path)
- Replace render-blocking Google Fonts stylesheet with preload+onload pattern
  (non-blocking font loading with noscript fallback)
- Add .not-found styles to style.css
- Create .lighthouserc.json with project-appropriate assertion thresholds
  (accessibility ≥95, seo ≥95, best-practices ≥90; network-dependency-tree-insight
  disabled as CSS files form an unavoidable 1-level critical chain)

All tests pass: validate ✅ check ✅ a11y ✅ lighthouse ✅

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid building Zola twice for the same commit by sharing build artifacts
between test jobs:

  build (getzola/github-pages + upload-artifact public/)
    ├── axe-core  (download-artifact → python http.server → bunx axe-core)
    └── lighthouse (checkout + download-artifact → bunx lhci autorun)

- Replace zola serve with python3 -m http.server in axe-core job
  (no zola binary needed for serving pre-built static files)
- lighthouse job keeps checkout for .lighthouserc.json
- Triggers: pull_request (templates/**, static/**, content/**) + push
- artifact retention-days: 1 (ephemeral, no storage cost)
- Delete .github/workflows/accessibility.yml
- Delete .github/workflows/lighthouse.yml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@trotro trotro merged commit b37da04 into main Mar 20, 2026
11 checks passed
@trotro trotro deleted the feat/3-6-screen-reader-support branch March 20, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant