Accessibility
How Slowly builds accessible markup by default, and where the choices are yours.
Accessibility in Slowly starts with the markup, not a checkbox added at the end. Blocks render real HTML elements, so most of the accessible behaviour comes for free, and the places where a choice is yours are called out below.
Semantic markup first
Blocks output the element they mean. A Nav is a <nav>, a Section is a <section>, a Heading keeps its level, a collapsible Table of Contents uses a native <details> and <summary> rather than a scripted widget. Native elements bring keyboard support and screen reader semantics with them, so a collapse toggles with the keyboard and a landmark announces itself without any extra attributes.
ARIA is used only where it adds meaning a native element cannot. Breadcrumbs follow the WAI-ARIA pattern (nav with a label, aria-current="page" on the current crumb, separators hidden from screen readers). The Table of Contents marks the in-view link with aria-current="location". The Reading Progress bar is deliberately aria-hidden with no progress role, because a screen reader user does not read a page by scroll percentage and a constantly changing number is noise.
Choices that are yours
- Contrast. Colour is yours to set, so the contrast is yours to meet. Aim for at least 4.5:1 for body text. Colour should never be the only signal that distinguishes two things.
- Alt text. The Image and Gallery blocks take alt text. Write what the image means, and leave it empty for purely decorative images so screen readers skip them.
- Preference states. The states selector lets you design the version a reduced-motion, high-contrast, or reduced-data preference should produce. It is for building a still alternative that stands on its own, not for adding motion back. Slowly does not yet reduce motion automatically, so a section that leans on animation needs a state that reads well without it.
- Pagination labels. Give pagination controls descriptive labels rather than bare numbers, and prefer a "Load more" button over scroll-triggered loading for keyboard users.
Each block page notes anything specific to that block under its own Accessibility heading.