Files
amare/openspec/specs/web-accessibility/spec.md
Manoel Freitas cf1589c916 feat: recreate public frontend with Heritage Editorial identity (#5)
* feat: recreate public frontend with Heritage Editorial identity

Replace placeholder visual system with EB Garamond/olive tokens, brand assets, editorial home narrative, São Paulo settings, real testimonials, and regenerated visual baselines.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: archive recreate-public-frontend and sync Heritage Editorial specs

Merge delta requirements into main OpenSpec capabilities and move the completed change into the dated archive.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 23:39:00 -03:00

3.6 KiB

web-accessibility Specification

Purpose

Define automated accessibility checks, semantic structure, keyboard operability, reduced motion, and console hygiene for public routes.

Requirements

Requirement: Public routes have no critical or serious accessibility issues

The system SHALL run automated accessibility checks on the public routes covered by the browser suite (SPEC §6.5, §13.8) after the Heritage Editorial redesign. A critical or serious issue MUST fail the suite.

Scenario: Critical issue blocks the suite

  • WHEN the automated accessibility check reports a critical or serious issue on a covered route
  • THEN the browser suite MUST fail and report the offending rule and selector

Scenario: Covered routes are checked

  • WHEN the accessibility suite runs
  • THEN the home, services listing, portfolio listing and case detail MUST each be checked

Requirement: Public pages use accessible semantic structure

Public pages SHALL provide semantic landmarks, exactly one h1 per page, a coherent heading order, alt text on every content image and brand mark, and visible focus on interactive elements (SPEC §6.5).

Scenario: Single h1 per page

  • WHEN any public page is rendered
  • THEN exactly one h1 element MUST be present

Scenario: Landmarks are present

  • WHEN any public page is rendered
  • THEN header, main, nav and footer landmarks MUST be present

Scenario: Content images expose alt text

  • WHEN a page renders a cover or gallery image
  • THEN the alt attribute MUST contain the stored alt text

Scenario: Brand mark exposes accessible name

  • WHEN the public header brand mark is rendered
  • THEN it MUST expose an accessible name identifying Amare Assessoria

Requirement: Public pages are fully keyboard operable

Visitors SHALL be able to reach and activate every interactive element with the keyboard, including the mobile navigation disclosure when visible, with a visible focus indicator and a skip link to the main content.

Scenario: Keyboard reaches the primary CTA

  • WHEN a visitor navigates the home with the Tab key
  • THEN the primary CTA MUST receive focus with a visible indicator
  • AND activating it with the keyboard MUST navigate to the contact route
  • WHEN a visitor focuses the first element of a public page
  • THEN a skip link to the main content MUST be available

Scenario: Mobile menu is keyboard operable

  • WHEN the mobile menu button is focused and activated with the keyboard
  • THEN the navigation links MUST become reachable by subsequent Tab stops
  • AND the button MUST expose the correct aria-expanded state

Requirement: Reduced motion preference is honored

The system SHALL suppress non-essential animation and transition when the user agent reports prefers-reduced-motion: reduce, including editorial hover scales and menu transitions introduced by the redesign.

Scenario: Reduced motion disables transitions

  • GIVEN the browser reports prefers-reduced-motion: reduce
  • WHEN a public page is loaded
  • THEN decorative transitions and animations MUST NOT run

Requirement: Public pages emit no console errors

Covered public routes SHALL load without JavaScript console errors in a real browser (SPEC §13.8, §19), including pages that load the mobile navigation script.

Scenario: Console stays clean on covered routes

  • WHEN a covered public route is loaded in the browser suite
  • THEN the console MUST contain no error-level messages