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>
This commit is contained in:
@@ -104,3 +104,33 @@ Public content image uploads (Filament FileUpload via `PublicImageUploadRules`)
|
|||||||
|
|
||||||
- **WHEN** `FILESYSTEM_DISK` is `local`, unset, or any value other than `r2`/`s3`
|
- **WHEN** `FILESYSTEM_DISK` is `local`, unset, or any value other than `r2`/`s3`
|
||||||
- **THEN** `PublicImageUploadRules::disk()` MUST return `public`
|
- **THEN** `PublicImageUploadRules::disk()` MUST return `public`
|
||||||
|
|
||||||
|
### Requirement: Brand logo assets are available to the public layout
|
||||||
|
|
||||||
|
The system SHALL provide optimized Amare brand logo assets derived from the official faceted-heart lockup for use in the public header, footer and institutional pages. Assets MUST preserve the original geometry, include an accessible text alternative, and provide variants suitable for light and dark tonal fields. When `site_settings.logo_path` is present, the uploaded logo MUST be used; otherwise the versioned static brand asset MUST be used.
|
||||||
|
|
||||||
|
#### Scenario: Header renders brand mark with alt text
|
||||||
|
|
||||||
|
- **WHEN** any public page is rendered
|
||||||
|
- **THEN** the brand mark image or equivalent MUST expose accessible alternative text identifying Amare Assessoria
|
||||||
|
|
||||||
|
#### Scenario: Dark portfolio field uses a legible logo variant
|
||||||
|
|
||||||
|
- **WHEN** the brand mark is rendered on an olive-deep or otherwise dark public surface
|
||||||
|
- **THEN** the chosen logo variant MUST remain legible against that background
|
||||||
|
|
||||||
|
#### Scenario: Uploaded logo overrides static fallback
|
||||||
|
|
||||||
|
- **GIVEN** an admin has saved `logo_path` and `logo_alt` in site settings
|
||||||
|
- **WHEN** the public layout renders the brand mark
|
||||||
|
- **THEN** the uploaded logo MUST be used instead of the static fallback
|
||||||
|
|
||||||
|
### Requirement: Editorial image treatment remains self-hosted and deterministic
|
||||||
|
|
||||||
|
Public photography SHALL continue to use validated self-hosted uploads and responsive variants. Decorative saturation/contrast treatment for editorial mood MUST be applied via CSS on self-hosted images and MUST NOT introduce external image CDN dependencies that break deterministic visual tests.
|
||||||
|
|
||||||
|
#### Scenario: Public pages do not depend on external stock hosts
|
||||||
|
|
||||||
|
- **WHEN** the visual or browser suite loads covered public routes
|
||||||
|
- **THEN** content images MUST resolve from the application media disk or static fixtures
|
||||||
|
- **AND** MUST NOT require network access to third-party stock hosts
|
||||||
|
|||||||
@@ -5,16 +5,24 @@ TBD - created by archiving change setup-foundation. Update Purpose after archive
|
|||||||
## Requirements
|
## Requirements
|
||||||
### Requirement: Design tokens are centralized for the public site
|
### Requirement: Design tokens are centralized for the public site
|
||||||
|
|
||||||
The system SHALL define minimum design tokens in a single source consumed by the public site layout and components. Tokens MUST cover typography families, font scale, spacing, border radius, container width, background/text/border/accent/state colors, shadows, and transition duration/easing.
|
The system SHALL define design tokens in a single source consumed by the public site layout and components. Tokens MUST implement the Heritage Editorial system from `DESIGN.md`: typography family EB Garamond (self-hosted), font scale (display/headline/title/body/label), spacing on an 8px rhythm, border radius `0` for interactive and content surfaces, container max width `1120px`, paper/olive/sage/ink color roles, transition duration/easing, and MUST NOT rely on card shadows as a hierarchy mechanism for regular content.
|
||||||
|
|
||||||
#### Scenario: Public layout uses shared tokens
|
#### Scenario: Public layout uses shared Heritage Editorial tokens
|
||||||
|
|
||||||
- **WHEN** a public page is rendered
|
- **WHEN** a public page is rendered
|
||||||
- **THEN** visual properties MUST be derived from the centralized token definitions rather than arbitrary inline values
|
- **THEN** visual properties MUST be derived from the centralized token definitions rather than arbitrary inline values
|
||||||
|
- **AND** the primary typeface MUST be EB Garamond (or the declared serif fallback stack)
|
||||||
|
- **AND** public content surfaces MUST use `0` border radius from tokens
|
||||||
|
|
||||||
|
#### Scenario: Palette commits paper and olive regions
|
||||||
|
|
||||||
|
- **WHEN** the public site is rendered
|
||||||
|
- **THEN** background regions MUST use paper ivory / paper deep / olive deep tokens rather than pure white card stacks on a white page
|
||||||
|
- **AND** primary interactive emphasis MUST use olive heritage (`#556B2F`) / olive deep (`#3E5219`) tokens
|
||||||
|
|
||||||
### Requirement: Public site respects reduced motion preference
|
### Requirement: Public site respects reduced motion preference
|
||||||
|
|
||||||
The system SHALL honor `prefers-reduced-motion` by disabling or minimizing non-essential animations and transitions on the public site.
|
The system SHALL honor `prefers-reduced-motion` by disabling or minimizing non-essential animations and transitions on the public site, including image hover scales and menu transitions.
|
||||||
|
|
||||||
#### Scenario: User prefers reduced motion
|
#### Scenario: User prefers reduced motion
|
||||||
|
|
||||||
@@ -23,10 +31,25 @@ The system SHALL honor `prefers-reduced-motion` by disabling or minimizing non-e
|
|||||||
|
|
||||||
### Requirement: Public site meets baseline accessibility contrast
|
### Requirement: Public site meets baseline accessibility contrast
|
||||||
|
|
||||||
The system SHALL use color combinations on the public site that meet WCAG AA contrast requirements for text and interactive elements defined in the token palette.
|
The system SHALL use Heritage Editorial color combinations that meet WCAG AA contrast requirements for text and interactive elements. Long-form text MUST use ink on paper; sage MUST NOT replace reading color when contrast would fall below AA.
|
||||||
|
|
||||||
#### Scenario: Primary text is readable
|
#### Scenario: Primary text is readable
|
||||||
|
|
||||||
- **WHEN** primary body text is rendered on its background color
|
- **WHEN** primary body text is rendered on its background color
|
||||||
- **THEN** the contrast ratio MUST meet WCAG AA minimums
|
- **THEN** the contrast ratio MUST meet WCAG AA minimums
|
||||||
|
|
||||||
|
#### Scenario: Olive on paper interactive text is readable
|
||||||
|
|
||||||
|
- **WHEN** primary buttons or links use olive tokens on paper backgrounds (or paper text on olive)
|
||||||
|
- **THEN** the contrast ratio MUST meet WCAG AA minimums
|
||||||
|
|
||||||
|
### Requirement: Elevation comes from tonal fields not card shadows
|
||||||
|
|
||||||
|
The public site SHALL express hierarchy through tonal paper fields, 1px botanical rules, and editorial overlap. Regular content components MUST NOT use short grey SaaS card shadows.
|
||||||
|
|
||||||
|
#### Scenario: Content cards omit drop shadows
|
||||||
|
|
||||||
|
- **WHEN** home services, testimonials, or portfolio items are rendered
|
||||||
|
- **THEN** they MUST NOT depend on `--amare-shadow-*` card elevation for hierarchy
|
||||||
|
- **AND** separation MUST come from borders, tonal backgrounds, or whitespace
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ The system SHALL expose the public routes of SPEC §5.1: `home` (`/`), `services
|
|||||||
|
|
||||||
### Requirement: Home renders the editorial structure from CMS content
|
### Requirement: Home renders the editorial structure from CMS content
|
||||||
|
|
||||||
The home page SHALL render, in the order defined by SPEC §6.2, header/navigation, hero, featured visual proof, services summary, working method, selected cases, testimonials, final briefing CTA, and footer with contact, social links and legal links (WEB-01). Hero copy, brand name and contact data MUST come from `site_settings`; services, cases and testimonials MUST come from published records.
|
The home page SHALL render, in order: header/navigation, hero, manifesto, featured services summary, featured portfolio selection, working method (four steps), testimonials, Amare positioning/profile, final contact CTA, and footer with contact, social links and legal links (WEB-01). Hero copy, brand name, manifesto, method and principles MUST come from `site_settings` (with editorial defaults when optional fields are empty); services, cases and testimonials MUST come from published records. The home MUST follow the Heritage Editorial composition (asymmetric spreads on desktop, linear sequence on mobile) rather than rounded card grids.
|
||||||
|
|
||||||
#### Scenario: Published content is displayed in configured order
|
#### Scenario: Published content is displayed in configured order
|
||||||
|
|
||||||
@@ -43,18 +43,21 @@ The home page SHALL render, in the order defined by SPEC §6.2, header/navigatio
|
|||||||
- **WHEN** a visitor loads the home
|
- **WHEN** a visitor loads the home
|
||||||
- **THEN** the published content MUST be displayed following the `sort_order` and featured flags
|
- **THEN** the published content MUST be displayed following the `sort_order` and featured flags
|
||||||
- **AND** the hero MUST show the values stored in `site_settings`
|
- **AND** the hero MUST show the values stored in `site_settings`
|
||||||
|
- **AND** the manifesto, method and positioning sections MUST be present
|
||||||
|
|
||||||
#### Scenario: CTA leads to the briefing page
|
#### Scenario: CTA leads to the contact placeholder page
|
||||||
|
|
||||||
- **WHEN** a visitor activates the primary or final CTA on the home
|
- **WHEN** a visitor activates the primary or final CTA on the home
|
||||||
- **THEN** the visitor MUST be taken to the `contact` route
|
- **THEN** the visitor MUST be taken to the `contact` route
|
||||||
|
- **AND** no lead record MUST be created
|
||||||
|
|
||||||
#### Scenario: Empty content does not break the home
|
#### Scenario: Empty catalog sections are omitted
|
||||||
|
|
||||||
- **GIVEN** no published services, cases or testimonials
|
- **GIVEN** no published services, cases or testimonials
|
||||||
- **WHEN** a visitor loads the home
|
- **WHEN** a visitor loads the home
|
||||||
- **THEN** the response MUST be 200
|
- **THEN** the response MUST be 200
|
||||||
- **AND** the affected sections MUST be omitted instead of rendering empty containers
|
- **AND** the services, portfolio and testimonials sections MUST be omitted instead of rendering empty containers
|
||||||
|
- **AND** hero, manifesto, method, positioning and final CTA MUST still render
|
||||||
|
|
||||||
#### Scenario: Home has no console errors
|
#### Scenario: Home has no console errors
|
||||||
|
|
||||||
@@ -63,12 +66,13 @@ The home page SHALL render, in the order defined by SPEC §6.2, header/navigatio
|
|||||||
|
|
||||||
### Requirement: Listing and detail pages exist for catalog content
|
### Requirement: Listing and detail pages exist for catalog content
|
||||||
|
|
||||||
The system SHALL render a services listing (WEB-02) and a portfolio listing plus case detail (WEB-03). The case detail MUST present summary, event type, optional city/venue/date, challenge, solution, optional result, cover image and the ordered gallery.
|
The system SHALL render a services listing (WEB-02) and a portfolio listing plus case detail (WEB-03) using the Heritage Editorial visual language. The case detail MUST present summary, event type, optional city/venue/date, challenge, solution, optional result, cover image and the ordered gallery.
|
||||||
|
|
||||||
#### Scenario: Services listing shows published services
|
#### Scenario: Services listing shows published services
|
||||||
|
|
||||||
- **WHEN** a visitor loads `/servicos`
|
- **WHEN** a visitor loads `/servicos`
|
||||||
- **THEN** every published service MUST be listed with title and summary in `sort_order`
|
- **THEN** every published service MUST be listed with title and summary in `sort_order`
|
||||||
|
- **AND** the listing MUST use the public editorial layout (not an unrelated visual system)
|
||||||
|
|
||||||
#### Scenario: Gallery respects stored order
|
#### Scenario: Gallery respects stored order
|
||||||
|
|
||||||
@@ -83,7 +87,7 @@ The system SHALL render a services listing (WEB-02) and a portfolio listing plus
|
|||||||
|
|
||||||
### Requirement: Institutional and error pages have brand identity
|
### Requirement: Institutional and error pages have brand identity
|
||||||
|
|
||||||
The system SHALL provide the Sobre and Política de privacidade pages and branded error pages (WEB-07). The 404 page MUST use the public layout, and the 500 page MUST NOT expose stack traces or internal details when `APP_DEBUG` is false.
|
The system SHALL provide the Sobre and Política de privacidade pages and branded error pages (WEB-07) using the Heritage Editorial public layout, including the brand mark when available. The 404 page MUST use the public layout, and the 500 page MUST NOT expose stack traces or internal details when `APP_DEBUG` is false.
|
||||||
|
|
||||||
#### Scenario: Unknown URL renders branded 404
|
#### Scenario: Unknown URL renders branded 404
|
||||||
|
|
||||||
@@ -100,7 +104,7 @@ The system SHALL provide the Sobre and Política de privacidade pages and brande
|
|||||||
|
|
||||||
### Requirement: Contact page presents contact data as briefing placeholder
|
### Requirement: Contact page presents contact data as briefing placeholder
|
||||||
|
|
||||||
The `contact` route SHALL render the contact page using `site_settings` (e-mail, phone, city, social links) so the home CTA has a valid destination before the briefing form exists. The page MUST NOT create leads in this change.
|
The `contact` route SHALL render the contact page using `site_settings` (e-mail, phone, city, social links) so the home CTA has a valid destination before the briefing form exists. The page MUST NOT create leads and MUST NOT submit a functional briefing form in this change.
|
||||||
|
|
||||||
#### Scenario: Contact page shows configured contact data
|
#### Scenario: Contact page shows configured contact data
|
||||||
|
|
||||||
@@ -117,3 +121,28 @@ Public pages SHALL load related content with explicit eager loading through dedi
|
|||||||
- **WHEN** a case detail page with many gallery images is rendered
|
- **WHEN** a case detail page with many gallery images is rendered
|
||||||
- **THEN** the gallery MUST be loaded with eager loading
|
- **THEN** the gallery MUST be loaded with eager loading
|
||||||
- **AND** the query count MUST NOT grow with the number of images
|
- **AND** the query count MUST NOT grow with the number of images
|
||||||
|
|
||||||
|
### Requirement: Public header exposes brand mark and responsive navigation
|
||||||
|
|
||||||
|
The public layout SHALL render the Amare brand mark (faceted-heart logo lockup or configured logo), primary route navigation, and a contact CTA. On narrow viewports the navigation MUST be operable via a disclosure control with accessible name and `aria-expanded` state.
|
||||||
|
|
||||||
|
#### Scenario: Desktop header shows navigation and CTA
|
||||||
|
|
||||||
|
- **WHEN** a visitor loads any public page at a desktop viewport
|
||||||
|
- **THEN** the header MUST include brand mark, links to home/services/portfolio/about/contact, and a contact CTA
|
||||||
|
|
||||||
|
#### Scenario: Mobile menu toggles accessibly
|
||||||
|
|
||||||
|
- **WHEN** a visitor activates the menu button on a narrow viewport
|
||||||
|
- **THEN** the primary navigation MUST become available
|
||||||
|
- **AND** the control MUST expose an updated `aria-expanded` value
|
||||||
|
- **AND** activating a navigation link MUST close the menu
|
||||||
|
|
||||||
|
### Requirement: Demonstrative photography is labeled until authorized assets exist
|
||||||
|
|
||||||
|
When public pages render illustrative/demo photography that is not an authorized Amare asset, the system SHALL mark that imagery as demonstrative in visible copy or accessible labeling so visitors are not misled.
|
||||||
|
|
||||||
|
#### Scenario: Portfolio demo imagery is disclosed
|
||||||
|
|
||||||
|
- **WHEN** the home or portfolio renders placeholder photography
|
||||||
|
- **THEN** a visible note or equivalent disclosure MUST indicate the imagery is illustrative pending authorized assets
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Define the typed site-wide settings singleton and its administration rules.
|
|||||||
## Requirements
|
## Requirements
|
||||||
### Requirement: Site settings singleton is manageable by admin only
|
### Requirement: Site settings singleton is manageable by admin only
|
||||||
|
|
||||||
The system SHALL persist site-wide settings in a `site_settings` table as a typed singleton (SPEC WEB-06, §8.2). Fields MUST include brand name, hero copy (eyebrow, title, subtitle, CTA label), about summary, contact email/phone/city, social links (jsonb), default meta title/description, default OG image path and alt text, and optional analytics fields disabled by default.
|
The system SHALL persist site-wide settings in a `site_settings` table as a typed singleton (SPEC WEB-06, §8.2). Fields MUST include brand name, optional logo path and logo alt text, hero copy (eyebrow, title, subtitle, primary CTA label, optional secondary CTA label, optional hero note), manifesto copy (title, lead, body), method steps (structured typed data for four editorial steps), principles (structured typed list), about summary, contact email/phone/city, social links (jsonb), default meta title/description, default OG image path and alt text, and optional analytics fields disabled by default.
|
||||||
|
|
||||||
#### Scenario: Admin updates site settings
|
#### Scenario: Admin updates site settings
|
||||||
|
|
||||||
@@ -25,8 +25,31 @@ The system SHALL persist site-wide settings in a `site_settings` table as a type
|
|||||||
- **THEN** validation MUST fail with a pt-BR error message
|
- **THEN** validation MUST fail with a pt-BR error message
|
||||||
- **AND** alt text MUST remain optional when no default OG image is present
|
- **AND** alt text MUST remain optional when no default OG image is present
|
||||||
|
|
||||||
|
#### Scenario: Logo upload requires alt text
|
||||||
|
|
||||||
|
- **WHEN** an admin uploads a brand logo without alt text
|
||||||
|
- **THEN** validation MUST fail with a pt-BR error message
|
||||||
|
- **AND** alt text MUST remain optional when no logo is uploaded
|
||||||
|
|
||||||
#### Scenario: Singleton avoids generic key-value store
|
#### Scenario: Singleton avoids generic key-value store
|
||||||
|
|
||||||
- **WHEN** site settings are stored
|
- **WHEN** site settings are stored
|
||||||
- **THEN** the system MUST use typed columns on `site_settings`
|
- **THEN** the system MUST use typed columns on `site_settings`
|
||||||
- **AND** MUST NOT introduce a generic key/value configuration table
|
- **AND** MUST NOT introduce a generic key/value configuration table
|
||||||
|
|
||||||
|
#### Scenario: Editorial defaults remain available when optional fields are empty
|
||||||
|
|
||||||
|
- **GIVEN** manifesto, method steps or principles fields are empty
|
||||||
|
- **WHEN** the home is rendered
|
||||||
|
- **THEN** the page MUST still render those sections using safe editorial defaults
|
||||||
|
- **AND** MUST NOT error
|
||||||
|
|
||||||
|
### Requirement: Public geography defaults to São Paulo
|
||||||
|
|
||||||
|
Demo and visual seed content for site settings SHALL present the Amare operating city as São Paulo (capital), matching `PRODUCT.md`, instead of unrelated cities.
|
||||||
|
|
||||||
|
#### Scenario: Seeded settings use São Paulo
|
||||||
|
|
||||||
|
- **WHEN** content seeders populate `site_settings`
|
||||||
|
- **THEN** the city field MUST be São Paulo (or equivalent capital wording)
|
||||||
|
- **AND** MUST NOT present Fortaleza as the operating city
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Define testimonial management, publication, authorization, and featured filterin
|
|||||||
## Requirements
|
## Requirements
|
||||||
### Requirement: Testimonials are managed with publication control
|
### Requirement: Testimonials are managed with publication control
|
||||||
|
|
||||||
The system SHALL allow admins to manage testimonials (SPEC WEB-04) with quote text, author name, optional context, optional photo with alt text, sort order, featured flag, and `published_at`.
|
The system SHALL allow admins to manage testimonials (SPEC WEB-04) with quote text (including multi-paragraph content), author name, optional context (event type and/or date), optional photo with alt text, sort order, featured flag, and `published_at`. Public rendering MUST preserve paragraph breaks from the stored quote. Testimonials sourced from real clients MUST NOT be published to production without authorization; development seeds MAY include the authorized-pending real quotes marked for review.
|
||||||
|
|
||||||
#### Scenario: Unpublished testimonial is excluded
|
#### Scenario: Unpublished testimonial is excluded
|
||||||
|
|
||||||
@@ -27,3 +27,23 @@ The system SHALL allow admins to manage testimonials (SPEC WEB-04) with quote te
|
|||||||
|
|
||||||
- **WHEN** content is queried with featured filter
|
- **WHEN** content is queried with featured filter
|
||||||
- **THEN** records with `is_featured` true MUST be retrievable independently of sort order
|
- **THEN** records with `is_featured` true MUST be retrievable independently of sort order
|
||||||
|
|
||||||
|
#### Scenario: Multi-paragraph quotes render as paragraphs
|
||||||
|
|
||||||
|
- **GIVEN** a published testimonial whose quote contains blank-line separated paragraphs
|
||||||
|
- **WHEN** the home testimonials section is rendered
|
||||||
|
- **THEN** each paragraph MUST appear as distinct block text rather than a single collapsed line
|
||||||
|
|
||||||
|
### Requirement: Real wedding testimonials are seeded from authorized source copy
|
||||||
|
|
||||||
|
Content and visual seeders SHALL replace fictional testimonials with the five real wedding testimonials from `depoimentos.md`, preserving author couple names, quote wording, and date/context. Until final publication authorization is confirmed, production deployments MUST keep those records unpublished or gated by explicit admin publish action.
|
||||||
|
|
||||||
|
#### Scenario: Seed loads the five real couples
|
||||||
|
|
||||||
|
- **WHEN** the content seeder runs
|
||||||
|
- **THEN** testimonials for Jeniffer e Maick, Quesia e Jhonata, Milena e Weslley, Raquel e Pedro, and Victoria e Pedro MUST exist with their source quotes and marriage context/dates
|
||||||
|
|
||||||
|
#### Scenario: Fictional demo quotes are removed
|
||||||
|
|
||||||
|
- **WHEN** the content seeder completes
|
||||||
|
- **THEN** previously invented placeholder testimonial authors MUST NOT remain as the published demo set
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Define deterministic visual baselines for public screens and the explicit baseli
|
|||||||
## Requirements
|
## Requirements
|
||||||
### Requirement: Public screens have desktop and mobile visual baselines
|
### Requirement: Public screens have desktop and mobile visual baselines
|
||||||
|
|
||||||
The system SHALL keep versioned screenshot baselines for the public screens available in this phase (SPEC §13.5): Home, Serviços, Portfólio and Detalhe do portfólio, at 1440×1000 desktop and 390×844 mobile. A rendering change that alters those screens MUST fail the browser suite until the diff is reviewed.
|
The system SHALL keep versioned screenshot baselines for the public screens available in this phase (SPEC §13.5): Home, Serviços, Portfólio and Detalhe do portfólio, at 1440×1000 desktop and 390×844 mobile, under the Heritage Editorial identity. A rendering change that alters those screens MUST fail the browser suite until the diff is reviewed and baselines are explicitly updated.
|
||||||
|
|
||||||
#### Scenario: Unintended visual change fails the suite
|
#### Scenario: Unintended visual change fails the suite
|
||||||
|
|
||||||
@@ -19,9 +19,14 @@ The system SHALL keep versioned screenshot baselines for the public screens avai
|
|||||||
- **WHEN** the visual suite runs
|
- **WHEN** the visual suite runs
|
||||||
- **THEN** each covered screen MUST be asserted at 1440×1000 and 390×844
|
- **THEN** each covered screen MUST be asserted at 1440×1000 and 390×844
|
||||||
|
|
||||||
|
#### Scenario: Heritage Editorial identity is captured
|
||||||
|
|
||||||
|
- **WHEN** approved baselines for the home are reviewed after this change
|
||||||
|
- **THEN** they MUST reflect EB Garamond typography, olive/paper palette and sharp-edged editorial layout rather than the previous gold/rounded placeholder look
|
||||||
|
|
||||||
### Requirement: Visual runs are deterministic
|
### Requirement: Visual runs are deterministic
|
||||||
|
|
||||||
Visual runs SHALL be deterministic per SPEC §13.5: fixed Chromium and Linux image, fixed viewport, timezone `America/Fortaleza`, locale `pt-BR`, fonts installed in the image, frozen clock, deterministic seed, animations and transitions disabled, and no dependency on external network.
|
Visual runs SHALL be deterministic per SPEC §13.5: fixed Chromium and Linux image, fixed viewport, timezone `America/Fortaleza`, locale `pt-BR`, self-hosted fonts installed/bundled for the suite, frozen clock, deterministic seed (including real testimonial subset and São Paulo settings), animations and transitions disabled, and no dependency on external network.
|
||||||
|
|
||||||
#### Scenario: Repeated run without code change produces no diff
|
#### Scenario: Repeated run without code change produces no diff
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Define automated accessibility checks, semantic structure, keyboard operability,
|
|||||||
## Requirements
|
## Requirements
|
||||||
### Requirement: Public routes have no critical or serious accessibility issues
|
### 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). A critical or serious issue MUST fail the suite.
|
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
|
#### Scenario: Critical issue blocks the suite
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ The system SHALL run automated accessibility checks on the public routes covered
|
|||||||
|
|
||||||
### Requirement: Public pages use accessible semantic structure
|
### 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 visible focus on interactive elements (SPEC §6.5).
|
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
|
#### Scenario: Single h1 per page
|
||||||
|
|
||||||
@@ -37,9 +37,14 @@ Public pages SHALL provide semantic landmarks, exactly one `h1` per page, a cohe
|
|||||||
- **WHEN** a page renders a cover or gallery image
|
- **WHEN** a page renders a cover or gallery image
|
||||||
- **THEN** the `alt` attribute MUST contain the stored alt text
|
- **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
|
### Requirement: Public pages are fully keyboard operable
|
||||||
|
|
||||||
Visitors SHALL be able to reach and activate every interactive element with the keyboard, with a visible focus indicator and a skip link to the main content.
|
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
|
#### Scenario: Keyboard reaches the primary CTA
|
||||||
|
|
||||||
@@ -52,9 +57,15 @@ Visitors SHALL be able to reach and activate every interactive element with the
|
|||||||
- **WHEN** a visitor focuses the first element of a public page
|
- **WHEN** a visitor focuses the first element of a public page
|
||||||
- **THEN** a skip link to the main content MUST be available
|
- **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
|
### Requirement: Reduced motion preference is honored
|
||||||
|
|
||||||
The system SHALL suppress non-essential animation and transition when the user agent reports `prefers-reduced-motion: reduce`.
|
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
|
#### Scenario: Reduced motion disables transitions
|
||||||
|
|
||||||
@@ -64,7 +75,7 @@ The system SHALL suppress non-essential animation and transition when the user a
|
|||||||
|
|
||||||
### Requirement: Public pages emit no console errors
|
### Requirement: Public pages emit no console errors
|
||||||
|
|
||||||
Covered public routes SHALL load without JavaScript console errors in a real browser (SPEC §13.8, §19).
|
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
|
#### Scenario: Console stays clean on covered routes
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user