Accessibility
Last updated on 2026-09-03
The kit is built with WCAG AA accessibility as a baseline. Every component, from the public blog and comment forms to the admin CMS and media library, follows accessible patterns.
Accessibility Features
Keyboard Navigation
- All interactive elements are keyboard-accessible
- Tab order follows logical reading order
- Focus indicators are visible on all focusable elements (
focus-visible:ring-2) - Dialogs and sheets trap focus and return it on close
- The admin sidebar, post editor, and media library are fully keyboard-navigable
- Dropdown menus, tag pickers, and date pickers are fully keyboard-operable
- Comment reply forms can be opened and submitted without a mouse
Screen Reader Support
- Semantic HTML throughout:
<nav>,<main>,<footer>,<article>,<section> - One
<h1>per page with no heading level skips - All images have descriptive
alttext sourced from the media library alt field - Icon-only buttons have
aria-labelattributes - Form fields have associated
<label>elements - Validation errors use
aria-invalidandaria-describedby - Heading hierarchy within articles follows proper nesting (h1 > h2 > h3)
- Form submission results (comment posted, newsletter subscribed) are announced via
aria-liveregions - The admin post list and comment moderation tables use proper
<thead>,<tbody>, and<th>elements
Color and Contrast
- All text meets WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text)
- Status indicators use color + text + icon (never color alone)
- Post status badges include text labels alongside color indicators
- Both light and dark themes maintain contrast compliance
- Focus rings are visible against all backgrounds
- Article body text uses high-contrast foreground on the background surface
Reduced Motion
prefers-reduced-motionis respected throughout:@media (prefers-reduced-motion: reduce) { .animate-fade-in-up, .animate-float, .animate-scale-in { animation: none; opacity: 1; transform: none; } }- Page transitions, hover effects, and toast slide-ins are disabled for users who prefer reduced motion
- Chart animations on the admin analytics dashboard are disabled
Touch Targets
- All interactive elements meet the 44x44px minimum touch target size
- Small visual elements (tag pills, category badges, action dots) use padding to increase the touch area
- Calendar date pickers and filter buttons use
min-h-11 px-3for comfortable touch
Skip Link
Every page includes a skip-to-content link that becomes visible on focus, allowing keyboard users to bypass the navigation header or admin sidebar.
Form Accessibility
Forms are central to both public and admin experiences (comment forms, newsletter signup, post editor, media uploads):
- Required fields are marked with a red asterisk and
aria-required="true" - Validation errors appear inline below the field
- Error fields have
aria-invalid="true"and link to error text viaaria-describedby - Submit buttons show loading state with
aria-busy="true"during async operations - The public comment form is accessible without authentication -- name and email fields are clearly labeled
- Newsletter signup forms use
aria-describedbyto associate helper text
Comment Form Accessibility
The public comment form is designed for broad accessibility:
- All fields (name, email, comment body) have visible labels and placeholder text
- The form does not require authentication, removing a barrier for assistive technology users
- Successful comment submission is announced via an
aria-live="polite"region - If moderation is enabled, a message explains that the comment is pending review
- Reply-to-comment forms are inserted inline with proper focus management
Admin CMS Accessibility
The admin CMS follows the same standards as the public blog:
- The sidebar navigation is keyboard-navigable with clear focus indicators
- The post editor toolbar buttons have
aria-labelattributes describing their function - The media library grid items are focusable and have descriptive
aria-labelattributes (image filename and alt text) - Bulk action checkboxes in post and comment lists are properly labeled
- Sortable table headers have
aria-sortattributes - Pagination controls are keyboard-accessible with descriptive labels
Image Alt Text
- All images uploaded through the media library include an alt text field
- The alt text is required when inserting images into posts
- When no alt text is provided, a warning is shown in the admin interface
- Public-facing
<img>tags always render thealtattribute from the media library record