Keyboard shortcuts and table of contents

RoseaThemes

WCAG in RoseaThemes.

I design with keyboard users and screen readers in mind, focusing on real accessibility rather than quick fixes.

On this page I explain, in simple language,
how I approach WCAG in Moodle: what the theme does, what it cannot do on its own, and how I test accessibility in practice.

  • Perceivable I focus on text contrast, clear hierarchy, and meaningful labels.
  • Operable Everything should work with a keyboard and have visible focus.
  • Understandable I keep navigation consistent
    and UI predictable.
  • Robust I rely on semantic HTML and meaningful ARIA.
Illustration: accessible LMS interface — semantics, focus, and navigation

What WCAG means here — and what it does not

WCAG is a set of rules that helps build accessible websites. In short, it follows the POUR model: the interface should be perceivable, operable, understandable, and robust. In most projects, AA is the practical target. A theme alone cannot solve all WCAG requirements, but it can help a lot.

What the theme actually controls in Moodle

The theme controls the interface layer: layout, navigation, typography, colors, focus states, and part of the system templates. I decide whether users can quickly skip to content and whether the heading structure is logical.

What the theme will not solve

I do not control everything. Course content, video captions, PDF quality, custom plugins, and extra scripts are outside the theme itself. The same goes for client configuration, for example brand colors with poor contrast.

What this page is — and what it is not

This page is a description of my approach to accessibility. It is not a certificate and not a legal guarantee of full platform compliance. In the end, testing on a real setup and real content is always required.

Why an “accessibility popup” does not solve the problem

There are widgets that promise “quick WCAG compliance”. They may help in isolated cases, but they do not fix the root cause: weak HTML, broken labels, and keyboard issues.

Typical limits of widgets

  • Semantics Semantics remain unchanged — empty alt text and wrong headings do not disappear after enabling a widget.
  • Focus Focus can break — extra layers can create focus traps and confusion for screen readers.
  • Script It is extra script weight — it can slow down the page and require additional consent.
  • Risk It creates a false sense of completion — without testing and process, issues remain.

Why a solid theme comes first

That is why I first build a strong foundation in the theme itself: clear HTML, clear labels, visible focus, and predictable navigation. A widget can be an addition, but not a replacement for code and content quality.

Techniques I use in templates (HTML, ARIA, UX)

This is how I apply WCAG principles in day-to-day work on Moodle and IOMAD themes.

Landmarks and regions

I use semantic containers (<header>, <nav>, <main>, <footer>) and clear region labels. This helps screen reader users navigate faster.

Headings and content order

I keep heading hierarchy consistent and content order logical. This significantly improves navigation in NVDA, JAWS, and VoiceOver.

Skip link and first focus target

I make sure “Skip to main content” is the first meaningful keyboard target. It saves time and reduces friction.

Keyboard, focus, and sliders

I test interactive components with keyboard controls: Escape closes layers, focus never disappears, and :focus-visible remains clear. I keep aria-live messages short and precise.

ARIA: support, not a replacement

I treat ARIA as support. I use it for dynamic states and label relationships, but I do not add ARIA where proper HTML is enough.

Images, icons, hidden text

I hide decorative icons from assistive tech. Icon-only buttons get clear names. For links that open new tabs, I add explicit information.

How this works with a screen reader

A screen reader does not “see” layout the way people do. It reads HTML structure and roles. That is why correct HTML matters more than visuals alone.

Typical user flow

  1. After landing on a page, the first Tab usually reaches the skip link.
  2. Then users move to main or jump by headings.
  3. Then they navigate content in source order.
  4. Dynamic announcements (aria-live) should be short.

Moodle: a second layer of complexity

In Moodle, modules, blocks, and plugins add extra complexity. The theme improves consistency, but it does not control all HTML generated by every activity. That is why I always test both the theme and a real course.

Symptoms of weak structure (what users actually hear)

  • Regions Multiple “navigation” regions with no distinction.
  • Images Empty or misleading image descriptions (alt).
  • Links “Click here” links with no context.
  • Focus Focus disappears after opening a menu.

In my themes, I reduce these issues where I have control. I cannot automatically remove them from content and third-party plugins.

Mini audit: theme vs the rest of the platform

Below is a simple split: what I cover in the theme, and what the implementation/content team still needs to handle.

Table: who owns what

Area and scope of impact
Area What Rosea themes address What remains on institution/content side
Global navigation, layout, theme UI components Region semantics, icon labels, menu tab order, visible focus, contrast, and component consistency in the theme. Custom plugin menus, extra scripts, custom footer HTML, and brand colors that reduce contrast.
Course content and materials Typography and baseline content styling from the theme side. Content quality: headings, image descriptions, video captions, accessible PDFs, and plain language.
Forms (login, search, settings) Labels and error messages where they come from theme templates. Plugin forms, CAPTCHA without alternatives, color-only validation, and errors not linked to fields.
Performance and stability Lighter UI, limited animations, and predictable DOM on the theme side. Hosting, cache, external scripts, iframes, and SSO integrations that affect speed and stability.

Short pre-launch checklist

  • Flow Check login, the first post-login view, and the most-used module (e.g. forum or quiz) with keyboard and screen reader.
  • Course Test one real course with images, files, and video — verify alternative text, captions, and downloadable material accessibility.
  • Contrast Check text and focus contrast against final brand colors.
  • Plugins List active front-end plugins and test their impact.