WCAG 2.1 for Web Apps & Power Platform
This skill makes anything you build or review conform to WCAG 2.1 Level AA
(the legal default for most public-sector and EU/UK accessibility law), while
flagging the AAA criteria worth reaching for. It covers generic web content,
full HTML pages/sites and SPAs, and modern theming (dark mode, high contrast,
design tokens), and the four Power Platform component types: PCF controls,
model-driven apps/forms, canvas apps, and Power Pages.
Default target
Unless the user states otherwise, conform to Level AA. Level A is the floor
and AA is what regulations (ADA, Section 508, EN 301 549 / UK Public Sector
Bodies Accessibility Regulations) actually require. Mention AAA only as an
optional enhancement.
How to use this skill
- Identify the component type (web/PCF/model-driven/canvas/Power Pages).
The platform changes how you satisfy a criterion — see the routing table
below and read the matching reference file.
- Author or review against the four principles. Read
references/wcag-checklist.md — it lists every WCAG 2.1 success criterion
grouped under Perceivable, Operable, Understandable, Robust, with the
concrete, testable thing to check for each. This is the heart of the skill.
- Apply the platform-specific guidance from the relevant reference file.
- Self-verify using the verification section below before declaring done.
When building something new, bake the checks in as you write — don't bolt
them on afterwards. When auditing, report findings as a table: criterion,
level (A/AA/AAA), pass/fail, location, and the fix.
Component routing
| If the work involves… |
Read this reference |
| Generic HTML/CSS/JS or React web artifacts |
references/wcag-checklist.md |
| A full HTML page, website, or single-page app |
references/html-pages.md |
| Theming: Power Apps modern themes, dark mode, high contrast, design tokens |
references/theming.md |
| PCF (PowerApps Component Framework) controls |
references/pcf.md |
| HTML/JS web resources (model-driven) |
references/web-resources.md |
| Model-driven apps, forms, views, dashboards |
references/model-driven.md |
| Canvas apps |
references/canvas.md |
| Power Pages (portals) |
references/power-pages.md |
Always read references/wcag-checklist.md — every other file assumes it and only
adds deltas. Read references/html-pages.md for any standalone page/site/SPA, and
references/theming.md whenever colour schemes, dark mode, high-contrast, or a
design-token/theme system is in play (these stack with the platform files — e.g.
a themed Power Pages site reads the checklist + power-pages + theming).
The four principles (POUR) — quick orientation
- Perceivable — users can perceive the information: text alternatives,
captions, colour not used alone, 4.5:1 text contrast / 3:1 large text & UI,
reflow to 320px, resizable text, programmatic structure.
- Operable — users can operate it: full keyboard access, no keyboard traps,
visible focus, logical focus order, enough time, no seizure-inducing flashing,
target size, skip links, descriptive link text.
- Understandable — readable and predictable: page language set, labels and
instructions on inputs, clear error identification + suggestions, consistent
navigation, no surprise context changes on focus/input.
- Robust — works with assistive tech: valid markup, correct name/role/value
for every control, status messages announced via live regions.
The highest-leverage AA checks (apply to everything)
These catch the majority of real failures. Verify every one before finishing:
- Every interactive element is keyboard reachable and operable (Tab/Shift+Tab,
Enter/Space), with a visible focus indicator (2.4.7) and no keyboard
trap (2.1.2).
- Every form control has a programmatic label (
<label for>, aria-label,
or aria-labelledby) — not just a visual placeholder (1.3.1, 3.3.2, 4.1.2).
- Every meaningful image has alt text; decorative images have empty alt
(
alt="") or are hidden from AT (1.1.1).
- Text contrast ≥ 4.5:1 (≥ 3:1 for large text ≥ 18.66px bold / 24px), and
UI components & graphical objects ≥ 3:1 (1.4.3, 1.4.11).
- Colour is never the only way information is conveyed (1.4.1) — pair it
with text, icon, or pattern.
- Semantic structure: real headings in order (h1→h2→h3, no skips), lists as
lists, one
<main>, landmark regions, tables with <th scope> (1.3.1).
- Page/screen has a descriptive title and
lang is set (2.4.2, 3.1.1).
- Dynamic updates are announced to screen readers via
aria-live /
status roles (4.1.3).
- Content reflows with no horizontal scroll at 320 CSS px / 400% zoom and
text resizes to 200% without loss (1.4.10, 1.4.4).
- Errors are identified in text, near the field, with a suggested fix, and
the field is linked via
aria-describedby (3.3.1, 3.3.3).
Verification before "done"
Run through these — automated tools catch ~30–40%, the rest needs the manual
checks:
- Automated: axe-core / Accessibility Insights / Lighthouse / WAVE. For
Power Platform, also the built-in App Checker (model-driven & canvas) and
the Accessibility checker in the canvas studio. Treat these as a first
pass, not proof of conformance.
- Keyboard-only pass: unplug the mouse. Tab through the whole UI. Can you
reach and operate everything? Is focus always visible? Does order make sense?
Can you always Tab back out (no trap)?
- Screen reader spot-check: NVDA or JAWS (Windows) / VoiceOver (Mac). Is
every control announced with a sensible name, role, and state? Are errors and
dynamic changes announced?
- Zoom/reflow: 400% browser zoom (≈320px). No two-dimensional scrolling for
non-data content; nothing clipped or overlapping.
- Contrast: spot-check text and UI against the 4.5:1 / 3:1 thresholds with a
contrast checker; verify in any dark/high-contrast theme too.
- Themes: re-run the contrast, focus-visibility, and colour-only checks in
every theme variant you ship — light, dark, and OS high-contrast /
forced-colors (see
references/theming.md). Conformance is not inherited from
the default theme.
- Colour-only: would the meaning survive in greyscale?
If a criterion genuinely can't be met (e.g. essential complex data viz), say so
explicitly and propose the closest accessible alternative rather than silently
skipping it.
Note on standards version
This skill targets WCAG 2.1. WCAG 2.2 (a superset) adds nine more criteria —
notably Focus Not Obscured (2.4.11/2.4.12), Dragging Movements (2.5.7),
Target Size Minimum 24×24px at AA (2.5.8), Consistent Help (3.2.6), Redundant
Entry (3.3.7), and Accessible Authentication (3.3.8). If the user asks for 2.2
or you're targeting current best practice, also apply those; the checklist notes
where they extend 2.1.
1---2name: wcag-power-platform3description: Ensure web apps, HTML pages, and Power Platform components meet WCAG 2.1 accessibility guidelines. Use this skill WHENEVER building, reviewing, or refactoring any web UI or Power Platform artifact — standalone HTML/CSS/JS pages, websites and single-page apps, React/web artifacts, PCF (PowerApps Component Framework) controls, HTML/JS web resources, model-driven apps and forms, canvas apps, or Power Pages — even if the user does not say "accessibility". Trigger on requests to create pages or components, build forms, style UI, add buttons/inputs/grids/charts, theme an app, apply a Power Apps modern theme / CustomTheme, implement dark mode / high-contrast / design tokens, fix a control, write HTML/CSS/React, or audit a page against WCAG/ADA/Section 508/EN 301 549. Also trigger on "make this accessible", "a11y", "screen reader", "keyboard navigation", "colour contrast", "dark mode", "theme", "ARIA", or "WCAG". Apply the checks proactively so output conforms to WCAG 2.1 AA by default, across every theme variant.4---56# WCAG 2.1 for Web Apps & Power Platform78This skill makes anything you build or review conform to **WCAG 2.1 Level AA**9(the legal default for most public-sector and EU/UK accessibility law), while10flagging the AAA criteria worth reaching for. It covers generic web content,11full HTML pages/sites and SPAs, and modern theming (dark mode, high contrast,12design tokens), **and** the four Power Platform component types: PCF controls,13model-driven apps/forms, canvas apps, and Power Pages.1415## Default target1617Unless the user states otherwise, conform to **Level AA**. Level A is the floor18and AA is what regulations (ADA, Section 508, EN 301 549 / UK Public Sector19Bodies Accessibility Regulations) actually require. Mention AAA only as an20optional enhancement.2122## How to use this skill23241. **Identify the component type** (web/PCF/model-driven/canvas/Power Pages).25 The platform changes *how* you satisfy a criterion — see the routing table26 below and read the matching reference file.272. **Author or review against the four principles.** Read28 `references/wcag-checklist.md` — it lists every WCAG 2.1 success criterion29 grouped under Perceivable, Operable, Understandable, Robust, with the30 concrete, testable thing to check for each. This is the heart of the skill.313. **Apply the platform-specific guidance** from the relevant reference file.324. **Self-verify** using the verification section below before declaring done.3334When *building* something new, bake the checks in as you write — don't bolt35them on afterwards. When *auditing*, report findings as a table: criterion,36level (A/AA/AAA), pass/fail, location, and the fix.3738## Component routing3940| If the work involves… | Read this reference |41|------------------------------------------------|----------------------------------------|42| Generic HTML/CSS/JS or React web artifacts | `references/wcag-checklist.md` |43| A full HTML page, website, or single-page app | `references/html-pages.md` |44| Theming: Power Apps modern themes, dark mode, high contrast, design tokens | `references/theming.md` |45| PCF (PowerApps Component Framework) controls | `references/pcf.md` |46| HTML/JS web resources (model-driven) | `references/web-resources.md` |47| Model-driven apps, forms, views, dashboards | `references/model-driven.md` |48| Canvas apps | `references/canvas.md` |49| Power Pages (portals) | `references/power-pages.md` |5051Always read `references/wcag-checklist.md` — every other file assumes it and only52adds deltas. Read `references/html-pages.md` for any standalone page/site/SPA, and53`references/theming.md` whenever colour schemes, dark mode, high-contrast, or a54design-token/theme system is in play (these stack with the platform files — e.g.55a themed Power Pages site reads the checklist + power-pages + theming).5657## The four principles (POUR) — quick orientation5859- **Perceivable** — users can perceive the information: text alternatives,60 captions, colour not used alone, 4.5:1 text contrast / 3:1 large text & UI,61 reflow to 320px, resizable text, programmatic structure.62- **Operable** — users can operate it: full keyboard access, no keyboard traps,63 visible focus, logical focus order, enough time, no seizure-inducing flashing,64 target size, skip links, descriptive link text.65- **Understandable** — readable and predictable: page language set, labels and66 instructions on inputs, clear error identification + suggestions, consistent67 navigation, no surprise context changes on focus/input.68- **Robust** — works with assistive tech: valid markup, correct name/role/value69 for every control, status messages announced via live regions.7071## The highest-leverage AA checks (apply to everything)7273These catch the majority of real failures. Verify every one before finishing:74751. **Every interactive element is keyboard reachable and operable** (Tab/Shift+Tab,76 Enter/Space), with a **visible focus indicator** (2.4.7) and **no keyboard77 trap** (2.1.2).782. **Every form control has a programmatic label** (`<label for>`, `aria-label`,79 or `aria-labelledby`) — not just a visual placeholder (1.3.1, 3.3.2, 4.1.2).803. **Every meaningful image has alt text; decorative images have empty alt**81 (`alt=""`) or are hidden from AT (1.1.1).824. **Text contrast ≥ 4.5:1** (≥ 3:1 for large text ≥ 18.66px bold / 24px), and83 **UI components & graphical objects ≥ 3:1** (1.4.3, 1.4.11).845. **Colour is never the only way** information is conveyed (1.4.1) — pair it85 with text, icon, or pattern.866. **Semantic structure**: real headings in order (h1→h2→h3, no skips), lists as87 lists, one `<main>`, landmark regions, tables with `<th scope>` (1.3.1).887. **Page/screen has a descriptive title** and `lang` is set (2.4.2, 3.1.1).898. **Dynamic updates are announced** to screen readers via `aria-live` /90 status roles (4.1.3).919. **Content reflows** with no horizontal scroll at 320 CSS px / 400% zoom and92 text resizes to 200% without loss (1.4.10, 1.4.4).9310. **Errors are identified in text, near the field, with a suggested fix**, and94 the field is linked via `aria-describedby` (3.3.1, 3.3.3).9596## Verification before "done"9798Run through these — automated tools catch ~30–40%, the rest needs the manual99checks:100101- **Automated**: axe-core / Accessibility Insights / Lighthouse / WAVE. For102 Power Platform, also the built-in **App Checker** (model-driven & canvas) and103 the **Accessibility checker** in the canvas studio. Treat these as a first104 pass, not proof of conformance.105- **Keyboard-only pass**: unplug the mouse. Tab through the whole UI. Can you106 reach and operate everything? Is focus always visible? Does order make sense?107 Can you always Tab back out (no trap)?108- **Screen reader spot-check**: NVDA or JAWS (Windows) / VoiceOver (Mac). Is109 every control announced with a sensible name, role, and state? Are errors and110 dynamic changes announced?111- **Zoom/reflow**: 400% browser zoom (≈320px). No two-dimensional scrolling for112 non-data content; nothing clipped or overlapping.113- **Contrast**: spot-check text and UI against the 4.5:1 / 3:1 thresholds with a114 contrast checker; verify in any dark/high-contrast theme too.115- **Themes**: re-run the contrast, focus-visibility, and colour-only checks in116 *every* theme variant you ship — light, dark, and OS high-contrast /117 forced-colors (see `references/theming.md`). Conformance is not inherited from118 the default theme.119- **Colour-only**: would the meaning survive in greyscale?120121If a criterion genuinely can't be met (e.g. essential complex data viz), say so122explicitly and propose the closest accessible alternative rather than silently123skipping it.124125## Note on standards version126127This skill targets WCAG 2.1. **WCAG 2.2** (a superset) adds nine more criteria —128notably Focus Not Obscured (2.4.11/2.4.12), Dragging Movements (2.5.7),129Target Size Minimum 24×24px at AA (2.5.8), Consistent Help (3.2.6), Redundant130Entry (3.3.7), and Accessible Authentication (3.3.8). If the user asks for 2.2131or you're targeting current best practice, also apply those; the checklist notes132where they extend 2.1.