Borrissol scores Lighthouse Accessibility 97 — high enough to demonstrate real commitment to inclusive design while reflecting a few pragmatic trade-offs inherent in a marketing site with embedded third-party content (Google Maps, Google Analytics). This page documents every accessibility feature built into the site and the rules contributors must follow to keep that score.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/constanza101/borrissol/llms.txt
Use this file to discover all available pages before exploring further.
Accessibility features overview
| Feature | Implementation |
|---|---|
| Skip link | First child of <body>, visually hidden by default, visible on :focus |
| Section labels | Every <section> has aria-labelledby pointing to its heading |
| Nav label | <nav aria-label="…"> on all navigation elements |
| Footer role | <footer role="contentinfo"> |
| Focus outline | focus-visible CSS outline on all interactive elements |
| Touch targets | Minimum 44 × 44 px on all buttons and links |
| Hamburger button | aria-expanded attribute toggled by JS |
| Heading hierarchy | Never skips levels (H1 → H2 → H3, no jumps) |
| Reduced motion | prefers-reduced-motion respected in scroll reveal animations |
| FAQ | Native <details> / <summary> — keyboard accessible without JS |
Skip link
The skip link is defined inLayout.astro as the first child of <body>. It allows keyboard and screen reader users to jump past the navigation directly to the main content without tabbing through every nav item.
The link is visually hidden by default and becomes visible when it receives focus:
position: absolute with a large negative offset at rest, returning to a visible position on :focus-visible:
ARIA section pattern
Every<section> on the page uses aria-labelledby to associate it with its visible heading. This allows screen readers to announce the section name as users navigate by landmark.
The
id on the heading and the aria-labelledby value on the section must always match exactly. When renaming or refactoring a section, update both attributes together.Navigation and landmarks
aria-label so that when a page has more than one <nav> (e.g. primary nav and a footer nav), screen readers can distinguish them by name.
Focus management
Every interactive element on the site has a visible:focus-visible outline. This is defined globally in theme.css and must not be overridden with outline: none in any component stylesheet.
The WhatsApp Floating Action Button (FAB) requires particular attention:
- It must have an accessible label (e.g.
aria-label="Contacta'ns per WhatsApp") - It must have a clearly visible
:focus-visiblestate - It must meet the 44 × 44 px minimum touch target size
Touch target sizes
Minimum touch target size is 44 × 44 px per WCAG Success Criterion 2.5.8. This applies to:- All CTA buttons (
.btn-primary,.btn-secondary,.btn-tertiary) - All navigation links in the navbar and mobile menu
- The WhatsApp FAB
- The scroll-to-top button
- Carousel arrow controls
Hamburger menu
The mobile hamburger button usesaria-expanded to communicate its open/closed state to assistive technologies. JavaScript toggles the attribute when the menu opens or closes:
Heading hierarchy
Heading levels are never skipped anywhere on the site. The document outline follows a strict H1 → H2 → H3 progression:- H1 — the main page headline (one per page, always present)
- H2 — section headings (one per
<section>) - H3 — sub-items within a section (workshop cards, FAQ items, etc.)
Reduced motion
The scroll reveal animations driven byIntersectionObserver in Layout.astro check the prefers-reduced-motion media query at runtime. If the user has enabled reduced motion in their OS settings, content is displayed immediately without transitions or slide-in effects:
FAQ accessibility
The FAQ section uses native HTML<details> and <summary> elements. This means:
- Fully keyboard navigable with no JavaScript
- Screen readers announce the expanded/collapsed state natively via the browser
- Works with JavaScript disabled
Rules for contributors
The following rules apply to all contributors — human and AI — when adding or modifying interactive content:- Never skip heading levels. Every heading must have a parent heading exactly one level up.
- Always provide
alttext for images. Use a descriptive string for meaningful images. Usealt=""for purely decorative images so screen readers skip them. - Always use semantic HTML. Use
<button>for actions that trigger behaviour; use<a>for navigation to a URL. Never use<div>or<span>as interactive elements. - Always test keyboard navigation after adding interactive elements. Tab through the page and confirm focus order is logical and every interactive element is reachable and operable.
- New interactive elements must have a
focus-visibleoutline. Never suppress the default outline without providing an equal or better replacement. - Maintain ARIA section pattern. Every new
<section>must havearia-labelledbypointing to its heading, and that heading must have a matchingid.