algorithmic-color-pale…
Derive a full UI colour palette algorithmically from one or two brand colours. Darker and lighter variants for interactive states, desaturated greys from the…
UI must comply with WCAG 2.2 Level AA, as required by the European Accessibility Act (EN 301 549). Do not deviate without deliberate justification. Disabled UI elements are explicitly exempt from colour contrast requirements. Use when designing, building, or reviewing any
$ npx -y skills add dembrandt/dembrandt-skills --skill wcag-accessibility --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/wcag-accessibilityContext preview
The summary Claude sees to decide when to auto-load this skill.
UI must comply with WCAG 2.2 Level AA, as required by the European Accessibility Act (EN 301 549). Do not deviate without deliberate justification. Disabled UI elements are explicitly exempt from colour contrast requirements. Use when designing, building, or reviewing any
name: wcag-accessibility
description: UI must comply with WCAG 2.2 Level AA, as required by the European Accessibility Act (EN 301 549). Do not deviate without deliberate justification. Disabled UI elements are explicitly exempt from colour contrast requirements. Use when designing, building, or reviewing any user-facing interface for accessibility compliance.
metadata:
priority: 9
docs:
- "https://www.w3.org/TR/WCAG22/"
- "https://www.etsi.org/deliver/etsi_en/301500_302000/301549/03.02.01_60/en_301549v030201p.pdf"
pathPatterns:
- "**/*.tsx"
- "**/*.jsx"
- "**/*.vue"
- "**/*.svelte"
- "**/*.html"
- "**/*.css"
- "**/*.scss"
- "components/**"
- "src/components/**"
- "design-system/**"
promptSignals:
phrases:
- "accessibility"
- "wcag"
- "a11y"
- "contrast"
- "contrast ratio"
- "screen reader"
- "aria"
- "focus"
- "focus visible"
- "keyboard navigation"
- "keyboard"
- "colour blind"
retrieval:
aliases:
- wcag
- accessibility
- a11y
- EN 301 549
- European Accessibility Act
- contrast
- screen reader
- aria
intents:
- check accessibility compliance
- fix contrast ratio
- add keyboard navigation
- make component screen-reader friendly
- meet EU accessibility requirements
examples:
- is this colour contrast accessible
- make this component keyboard navigable
- check this UI against WCAG
- does this meet EU accessibility standardsThe **European Accessibility Act (EAA)** requires digital products and services in the EU to meet **EN 301 549**, which references **WCAG 2.2 Level AA** as the technical baseline. This is not optional — it is a legal requirement for products operating in the EU market.
**Default: always build to WCAG 2.2 AA.** Deviating requires explicit, documented justification. Do not skip accessibility requirements because of timeline pressure or design preference.
WCAG 2.2 AA organises requirements under four principles: **Perceivable, Operable, Understandable, Robust**.
---
Users must be able to perceive all content and UI components.
| Context | Minimum ratio | Enhanced (AAA) | |---|---|---| | Normal text (< 18pt / < 14pt bold) | **4.5 : 1** | 7 : 1 | | Large text (≥ 18pt / ≥ 14pt bold) | **3 : 1** | 4.5 : 1 | | UI components and graphical objects | **3 : 1** | — |
> **Check contrast on the real rendered page, not the spec (dembrandt engine, optional).** Design-time swatches lie once real text lands on real backgrounds, gradients, and overlays. `get_findings` / `render_report` run against the live DOM and surface the actual failing text/background pairs with their measured ratios — a fast way to catch the combinations a static palette review misses. See [`extract-design`](../extract-design/SKILL.md).
**Disabled elements are exempt.** WCAG explicitly excludes inactive UI components from contrast requirements (WCAG 1.4.3 exception). A disabled button may use low-contrast text — this is intentional and correct, as it communicates the unavailable state.
Do not use colour as the only means of conveying information (e.g. a red border alone to indicate an error — add an icon or text label).
---
Users must be able to operate all UI components.
All interactive elements must be reachable and operable by keyboard alone.
A visible focus indicator is required on every interactive element (WCAG 2.2 strengthens focus visibility requirements).
/* Minimum: do not remove focus outline without a replacement */
:focus-visible {
outline: 2px solid var(--color-focus);
outline-offset: 2px;
}Never use `outline: none` without providing a custom focus style. The focus ring is not a design problem to eliminate — it is a navigation tool.
Interactive elements on touch devices must be at least **24×24px** (WCAG 2.2) — **44×44px** is the recommended comfortable minimum (Apple HIG, Material Design). Small icon buttons need padding to reach this size even if the visual icon is smaller.
Nothing on screen should flash more than 3 times per second.
Pages with repeated navigation must provide a "Skip to main content" link as the first focusable element, so keyboard users can bypass navigation on every page.
---
Users must be able to understand the content and how the UI works.
UX and design-system skills for AI agents. Install once, and your agent knows how to design. --all installs every skill at once. They load only when a prompt needs them, so there is no runtime cost to having them all. Want to pick by hand?
Repo: dembrandt/dembrandt-skills
Derive a full UI colour palette algorithmically from one or two brand colours. Darker and lighter variants for interactive states, desaturated greys from the…
The persistent shell around an application — the top bar, the app launcher, the tenant and environment cue, and in heavy tools a status bar. In an estate of…
Product visuals — hero shots, demos, screenshots, landing-page panels — must reproduce the real product, not a stylised poster of it. Design with real content…
A brand's visual tone — playful or serious, rounded or angular — should be consistent across all UI elements. Shape language in typography, border-radius, and…
Every interactive element needs a complete set of visual states — rest, hover, active/pressed, focus, disabled, and loading. States should be derived…
Rebuild an existing web page 1:1 from measurement instead of by eye — into Figma, Penpot, or code. Captures the rendered page, the raw source and the computed…