@equal-experts/kuat-react 0.13.0 → 0.14.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/agent-docs/AGENTS.md +10 -0
  2. package/agent-docs/README.md +17 -0
  3. package/agent-docs/bundle-manifest.json +55 -0
  4. package/agent-docs/components/_template.md +21 -0
  5. package/agent-docs/components/button-group.md +27 -0
  6. package/agent-docs/components/button.md +50 -0
  7. package/agent-docs/components/components.manifest.json +23 -0
  8. package/agent-docs/components/kuat-header.md +27 -0
  9. package/agent-docs/external/kuat-agent-rules/reference/accessibility/README.md +7 -0
  10. package/agent-docs/external/kuat-agent-rules/reference/accessibility/accessibility.md +446 -0
  11. package/agent-docs/external/kuat-agent-rules/reference/brand/README.md +9 -0
  12. package/agent-docs/external/kuat-agent-rules/reference/brand/brand.md +109 -0
  13. package/agent-docs/external/kuat-agent-rules/reference/brand/logo.md +152 -0
  14. package/agent-docs/external/kuat-agent-rules/reference/brand/voice-and-tone.md +166 -0
  15. package/agent-docs/external/kuat-agent-rules/reference/content/README.md +12 -0
  16. package/agent-docs/external/kuat-agent-rules/reference/content/formatting.md +120 -0
  17. package/agent-docs/external/kuat-agent-rules/reference/content/numbers.md +87 -0
  18. package/agent-docs/external/kuat-agent-rules/reference/content/punctuation.md +94 -0
  19. package/agent-docs/external/kuat-agent-rules/reference/content/writing-style.md +96 -0
  20. package/agent-docs/external/kuat-agent-rules/reference/design-language/README.md +11 -0
  21. package/agent-docs/external/kuat-agent-rules/reference/design-language/borders.md +160 -0
  22. package/agent-docs/external/kuat-agent-rules/reference/design-language/colours.md +201 -0
  23. package/agent-docs/external/kuat-agent-rules/reference/design-language/design-language.md +117 -0
  24. package/agent-docs/external/kuat-agent-rules/reference/design-language/spacing.md +131 -0
  25. package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/README.md +29 -0
  26. package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/colors.tokens.json +84 -0
  27. package/agent-docs/external/kuat-agent-rules/reference/design-language/typography.md +156 -0
  28. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/README.md +10 -0
  29. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/README.md +26 -0
  30. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/blog-posts.md +29 -0
  31. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/marketing-content.md +61 -0
  32. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/seo.md +40 -0
  33. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/emails.md +68 -0
  34. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/README.md +7 -0
  35. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/marketing-pages.md +368 -0
  36. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/website.md +154 -0
  37. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/README.md +16 -0
  38. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/accessibility.md +392 -0
  39. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-decision-tree.md +248 -0
  40. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-registry.md +49 -0
  41. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/README.md +29 -0
  42. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/actions.md +45 -0
  43. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/confirmations.md +51 -0
  44. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/empty-states.md +37 -0
  45. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/errors.md +48 -0
  46. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/forms.md +68 -0
  47. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/product-content.md +128 -0
  48. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/design.md +177 -0
  49. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/emails.md +65 -0
  50. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/README.md +10 -0
  51. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/authentication.md +303 -0
  52. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/dashboards.md +313 -0
  53. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/documentation.md +333 -0
  54. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/forms.md +361 -0
  55. package/agent-docs/kuat-docs/rules/README.md +155 -0
  56. package/agent-docs/kuat-docs/rules/design/layouts.md +394 -0
  57. package/agent-docs/kuat-docs/rules/scenarios/README.md +83 -0
  58. package/agent-docs/kuat-docs/rules/scenarios/authentication.md +301 -0
  59. package/agent-docs/kuat-docs/rules/scenarios/dashboards.md +314 -0
  60. package/agent-docs/kuat-docs/rules/scenarios/documentation.md +333 -0
  61. package/agent-docs/kuat-docs/rules/scenarios/forms.md +359 -0
  62. package/agent-docs/kuat-docs/rules/scenarios/marketing-pages.md +367 -0
  63. package/agent-docs/manifest.json +9 -0
  64. package/agent-docs/rules/LOADING-consumer.md +27 -0
  65. package/dist/accordion.d.ts +2 -0
  66. package/dist/alert-dialog.d.ts +2 -0
  67. package/dist/badge.d.ts +3 -0
  68. package/dist/button-group.d.ts +2 -0
  69. package/dist/button.d.ts +3 -0
  70. package/dist/carousel.d.ts +2 -0
  71. package/dist/checkbox.d.ts +3 -0
  72. package/dist/components/ui/accordion/accordion.d.ts +7 -0
  73. package/dist/components/ui/accordion/index.d.ts +1 -0
  74. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +20 -0
  75. package/dist/components/ui/alert-dialog/index.d.ts +1 -0
  76. package/dist/components/ui/badge/badge.d.ts +16 -0
  77. package/dist/components/ui/badge/index.d.ts +2 -0
  78. package/dist/components/ui/breadcrumb/Breadcrumb.d.ts +29 -0
  79. package/dist/components/ui/breadcrumb/breadcrumb-primitives.d.ts +19 -0
  80. package/dist/components/ui/breadcrumb/index.d.ts +4 -0
  81. package/dist/components/ui/button/button.d.ts +27 -0
  82. package/dist/components/ui/button/index.d.ts +2 -0
  83. package/dist/components/ui/button-group/button-group.d.ts +23 -0
  84. package/dist/components/ui/button-group/index.d.ts +2 -0
  85. package/dist/components/ui/carousel/carousel.d.ts +50 -0
  86. package/dist/components/ui/carousel/index.d.ts +2 -0
  87. package/dist/components/ui/checkbox/checkbox-field.d.ts +23 -0
  88. package/dist/components/ui/checkbox/checkbox.d.ts +5 -0
  89. package/dist/components/ui/checkbox/index.d.ts +4 -0
  90. package/dist/components/ui/content-card/content-card.d.ts +29 -0
  91. package/dist/components/ui/content-card/index.d.ts +2 -0
  92. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +27 -0
  93. package/dist/components/ui/dropdown-menu/index.d.ts +1 -0
  94. package/dist/components/ui/ee-logo-icon/ee-logo-icon.d.ts +11 -0
  95. package/dist/components/ui/ee-logo-icon/index.d.ts +2 -0
  96. package/dist/components/ui/field/field.d.ts +28 -0
  97. package/dist/components/ui/field/index.d.ts +2 -0
  98. package/dist/components/ui/icon-button/icon-button.d.ts +27 -0
  99. package/dist/components/ui/icon-button/index.d.ts +2 -0
  100. package/dist/components/ui/input/index.d.ts +2 -0
  101. package/dist/components/ui/input/input.d.ts +20 -0
  102. package/dist/components/ui/kuat-carousel/index.d.ts +2 -0
  103. package/dist/components/ui/kuat-carousel/kuat-carousel.d.ts +16 -0
  104. package/dist/components/ui/kuat-header/index.d.ts +4 -0
  105. package/dist/components/ui/kuat-header/kuat-header.d.ts +16 -0
  106. package/dist/components/ui/kuat-header/kuat-header.logic.d.ts +32 -0
  107. package/dist/components/ui/kuat-header/kuat-header.types.d.ts +91 -0
  108. package/dist/components/ui/kuat-logo-lockup/index.d.ts +2 -0
  109. package/dist/components/ui/kuat-logo-lockup/kuat-logo-lockup.d.ts +17 -0
  110. package/dist/components/ui/kuat-radial-progress/index.d.ts +2 -0
  111. package/dist/components/ui/kuat-radial-progress/kuat-radial-progress.d.ts +16 -0
  112. package/dist/components/ui/radio/index.d.ts +4 -0
  113. package/dist/components/ui/radio/radio-field.d.ts +25 -0
  114. package/dist/components/ui/radio/radio.d.ts +7 -0
  115. package/dist/components/ui/select/constants.d.ts +19 -0
  116. package/dist/components/ui/select/index.d.ts +3 -0
  117. package/dist/components/ui/select/select.d.ts +53 -0
  118. package/dist/components/ui/separator/index.d.ts +2 -0
  119. package/dist/components/ui/separator/separator.d.ts +9 -0
  120. package/dist/components/ui/sonner/index.d.ts +4 -0
  121. package/dist/components/ui/sonner/sonner-content.d.ts +15 -0
  122. package/dist/components/ui/sonner/sonner.d.ts +21 -0
  123. package/dist/components/ui/switch/index.d.ts +4 -0
  124. package/dist/components/ui/switch/switch-field.d.ts +23 -0
  125. package/dist/components/ui/switch/switch.d.ts +5 -0
  126. package/dist/components/ui/textarea/index.d.ts +2 -0
  127. package/dist/components/ui/textarea/textarea.d.ts +9 -0
  128. package/dist/components/ui/toggle/constants.d.ts +4 -0
  129. package/dist/components/ui/toggle/index.d.ts +6 -0
  130. package/dist/components/ui/toggle/toggle-group.d.ts +11 -0
  131. package/dist/components/ui/toggle/toggle.d.ts +9 -0
  132. package/dist/field.d.ts +3 -0
  133. package/dist/icon-button.d.ts +3 -0
  134. package/dist/index.d.ts +47 -0
  135. package/dist/input.d.ts +3 -0
  136. package/dist/kuat-carousel.d.ts +2 -0
  137. package/dist/kuat-radial-progress.d.ts +7 -0
  138. package/dist/lib/react-node-compat.d.ts +7 -0
  139. package/dist/lib/utils.d.ts +3 -0
  140. package/dist/radio.d.ts +3 -0
  141. package/dist/select.d.ts +3 -0
  142. package/dist/sonner.d.ts +1 -0
  143. package/dist/style.css +1 -1
  144. package/dist/style.css.d.ts +2 -0
  145. package/dist/switch.d.ts +1 -0
  146. package/dist/test/setup.d.ts +1 -0
  147. package/dist/textarea.d.ts +3 -0
  148. package/dist/toggle-group.d.ts +3 -0
  149. package/dist/toggle.d.ts +3 -0
  150. package/package.json +4 -2
@@ -0,0 +1,10 @@
1
+ # Kuat — consumer agent entry
2
+
3
+ Rules for this install live under `agent-docs/` in `@equal-experts/kuat-core`, `@equal-experts/kuat-react`, and `@equal-experts/kuat-vue`.
4
+
5
+ 1. Run `ensure-rules.sh` from kuat-agent-docs skills (symlinked) — expect `RULES_SOURCE=package` when cwd has node_modules.
6
+ 2. Load `agent-docs/rules/LOADING-consumer.md`.
7
+ 3. Load component guides via `agent-docs/components.manifest.json`.
8
+ 4. Skills: `kuat-review`, `kuat-create` from [kuat-agent-docs](https://github.com/equalexperts/kuat-agent-docs).
9
+
10
+ **Version:** 0.14.0-beta.0 · **Rules snapshot:** 538afc80d437
@@ -0,0 +1,17 @@
1
+ # Kuat Consumer Agent Docs
2
+
3
+ Curated agent docs bundled with `@equal-experts/kuat-core`, `@equal-experts/kuat-react`, and `@equal-experts/kuat-vue`.
4
+
5
+ ## Start here
6
+
7
+ - [AGENTS.md](./AGENTS.md)
8
+ - [rules/LOADING-consumer.md](./rules/LOADING-consumer.md)
9
+ - [components/components.manifest.json](./components/components.manifest.json)
10
+
11
+ ## Regenerate
12
+
13
+ ```bash
14
+ node scripts/agent-docs/bundle-for-core.mjs
15
+ ```
16
+
17
+ Built against upstream ref: `538afc80d437`
@@ -0,0 +1,55 @@
1
+ {
2
+ "outputDir": "packages/kuat-core/agent-docs",
3
+ "include": [
4
+ {
5
+ "source": "kuat-docs/rules/README.md",
6
+ "target": "kuat-docs/rules/README.md"
7
+ },
8
+ {
9
+ "source": "kuat-docs/rules/design/layouts.md",
10
+ "target": "kuat-docs/rules/design/layouts.md"
11
+ },
12
+ {
13
+ "source": "kuat-docs/rules/scenarios",
14
+ "target": "kuat-docs/rules/scenarios"
15
+ },
16
+ {
17
+ "source": "kuat-docs/components",
18
+ "target": "components"
19
+ },
20
+ {
21
+ "source": "external/kuat-agent-rules/reference/brand",
22
+ "target": "external/kuat-agent-rules/reference/brand"
23
+ },
24
+ {
25
+ "source": "external/kuat-agent-rules/reference/accessibility",
26
+ "target": "external/kuat-agent-rules/reference/accessibility"
27
+ },
28
+ {
29
+ "source": "external/kuat-agent-rules/reference/design-language",
30
+ "target": "external/kuat-agent-rules/reference/design-language"
31
+ },
32
+ {
33
+ "source": "external/kuat-agent-rules/reference/content",
34
+ "target": "external/kuat-agent-rules/reference/content"
35
+ },
36
+ {
37
+ "source": "external/kuat-agent-rules/reference/media-types/web-product",
38
+ "target": "external/kuat-agent-rules/reference/media-types/web-product"
39
+ },
40
+ {
41
+ "source": "external/kuat-agent-rules/reference/media-types/web-marketing",
42
+ "target": "external/kuat-agent-rules/reference/media-types/web-marketing"
43
+ }
44
+ ],
45
+ "denyPathSegments": [
46
+ ".cursor",
47
+ "contribution-docs"
48
+ ],
49
+ "denyFilenames": [
50
+ "CONTRIBUTING.md",
51
+ "AGENTS.md",
52
+ ".cursorrules",
53
+ "PUBLISHING.md"
54
+ ]
55
+ }
@@ -0,0 +1,21 @@
1
+ # Component name (`kuat:or-shadcn:id`)
2
+
3
+ ## Overview
4
+
5
+ ## When to use
6
+
7
+ ## When not to use
8
+
9
+ ## Variants
10
+
11
+ ## States
12
+
13
+ ## Content guidance
14
+
15
+ ## Behaviour
16
+
17
+ ## Accessibility
18
+
19
+ ## API
20
+
21
+ ## Related components
@@ -0,0 +1,27 @@
1
+ # ButtonGroup (`kuat:button-group`)
2
+
3
+ ## Overview
4
+
5
+ Groups related buttons with consistent spacing and optional text labels. Exported from `@equal-experts/kuat-react` / `@equal-experts/kuat-vue`.
6
+
7
+ ## When to use
8
+
9
+ - Segmented controls, toolbar groups, related actions shown together
10
+
11
+ ## When not to use
12
+
13
+ - Single primary action → `shadcn:button` alone
14
+ - Exclusive selection across many options → `RadioGroup` or tabs
15
+
16
+ ## Accessibility
17
+
18
+ - Ensure each child button remains focusable
19
+ - Provide a group label when the set has a shared purpose (`aria-label` on group or visible legend)
20
+
21
+ ## API
22
+
23
+ Import from `@equal-experts/kuat-react` (or vue). Compose with shadcn `Button` children. See Storybook for current props.
24
+
25
+ ## Related components
26
+
27
+ - `shadcn:button`
@@ -0,0 +1,50 @@
1
+ # Button (`shadcn:button`)
2
+
3
+ ## Overview
4
+
5
+ Primary action control for forms, dialogs, and toolbars. In Kuat apps, use the **shadcn Button** installed in your app (`@/components/ui/button`), themed by `@equal-experts/kuat-core` CSS variables.
6
+
7
+ ## When to use
8
+
9
+ - Submitting forms, confirming dialogs, navigation CTAs
10
+ - One clear primary action per section (see upstream form scenarios)
11
+
12
+ ## When not to use
13
+
14
+ - Navigation to another route → prefer `<Link>` styled as needed
15
+ - Toggle on/off state → `Switch` or `Toggle`
16
+ - Group of related exclusive options → `ButtonGroup` (`kuat:button-group`)
17
+
18
+ ## Variants
19
+
20
+ | Variant | Use |
21
+ |---------|-----|
22
+ | `default` | Primary action |
23
+ | `destructive` | Irreversible or dangerous actions |
24
+ | `outline` / `ghost` | Secondary or cancel |
25
+ | `secondary` | Alternative emphasis |
26
+ | `link` | Inline text actions |
27
+
28
+ ## States
29
+
30
+ - **Disabled:** use `disabled` or `aria-disabled` with visible reason; do not disable submit on forms (validate on submit per form scenario rules)
31
+ - **Loading:** show busy state; keep label or `aria-busy`
32
+
33
+ ## Content guidance
34
+
35
+ See upstream `actions.md` for label copy. Verb-driven, 1–3 words, sentence case.
36
+
37
+ ## Accessibility
38
+
39
+ - Native `<button>` or `asChild` with appropriate role
40
+ - Visible focus ring (`ring` tokens)
41
+ - Icon-only buttons require `aria-label`
42
+
43
+ ## API
44
+
45
+ Install via `npx shadcn@latest add button`. Props follow shadcn/Radix: `variant`, `size`, `className`, `asChild`.
46
+
47
+ ## Related components
48
+
49
+ - `kuat:button-group` — grouped actions
50
+ - Form scenarios — placement and validation timing
@@ -0,0 +1,23 @@
1
+ {
2
+ "version": 1,
3
+ "components": {
4
+ "shadcn:button": {
5
+ "slug": "button",
6
+ "displayName": "Button",
7
+ "path": "components/button.md",
8
+ "sources": ["shadcn:button", "@equal-experts/kuat-core"]
9
+ },
10
+ "kuat:button-group": {
11
+ "slug": "button-group",
12
+ "displayName": "ButtonGroup",
13
+ "path": "components/button-group.md",
14
+ "sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
15
+ },
16
+ "kuat:kuat-header": {
17
+ "slug": "kuat-header",
18
+ "displayName": "KuatHeader",
19
+ "path": "components/kuat-header.md",
20
+ "sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,27 @@
1
+ # KuatHeader (`kuat:kuat-header`)
2
+
3
+ ## Overview
4
+
5
+ Application header block with logo and navigation slots. Kuat block — use when you need the standard EE product chrome.
6
+
7
+ ## When to use
8
+
9
+ - Product apps using dark horizontal navigation per product design rules
10
+
11
+ ## When not to use
12
+
13
+ - Marketing pages → marketing layout rules
14
+ - Fully custom chrome → compose lower-level primitives
15
+
16
+ ## Accessibility
17
+
18
+ - Landmark `header` with clear structure
19
+ - Logo has appropriate alt text; nav uses list semantics
20
+
21
+ ## API
22
+
23
+ Import from `@equal-experts/kuat-react` / `kuat-vue`. See Storybook and package exports for slots and props.
24
+
25
+ ## Related components
26
+
27
+ - Product [design.md](../rules/design.md) — navigation patterns
@@ -0,0 +1,7 @@
1
+ # Accessibility
2
+
3
+ Equal Experts accessibility standards, applied across every medium.
4
+
5
+ | File | Scope |
6
+ |------|-------|
7
+ | [accessibility.md](./accessibility.md) | WCAG 2.2 AA standards: contrast, focus, semantics, alt text |
@@ -0,0 +1,446 @@
1
+ # Accessibility
2
+
3
+ Foundational accessibility requirements for Equal Experts content and products. These rules ensure products and services deliver the best experience for all users.
4
+
5
+ **Target: WCAG 2.2 Level AA compliance.**
6
+
7
+ ---
8
+
9
+ ## Quick reference
10
+
11
+ - **Standard:** WCAG 2.2 Level AA (legal baseline for many contexts).
12
+ - **Contrast:** Body text 4.5:1, large text/UI 3:1; never rely on colour alone for meaning.
13
+ - **Typography:** Min body 11pt (14px), line height 1.5; use relative units; support 200% zoom.
14
+ - **Motion:** Provide reduced-motion alternative; no auto-play without user control.
15
+ - **Images:** Meaningful images need alt text; decorative images need empty or role="presentation".
16
+ - **Links/buttons:** Descriptive labels; visible focus; keyboard operable.
17
+ - **Content:** Plain language; logical structure (headings, lists); person-first language.
18
+ - **Testing:** Use contrast checkers and automated a11y tools; test with keyboard and screen reader.
19
+
20
+ *Full detail follows.*
21
+
22
+ ---
23
+
24
+ ## Why Accessibility Matters
25
+
26
+ Accessibility is the practice of making information, activities, and environments sensible, meaningful, and usable for as many people as possible.
27
+
28
+ ### The Case for Accessibility
29
+
30
+ - **16% of the global population** (1.3 billion people) live with a significant disability
31
+ - **Legal requirements** - UK Public Sector organisations must create accessible products, websites, and services
32
+ - **Better UX for everyone** - Accessible design benefits older people, non-native English speakers, those with temporary disabilities, and situational limitations (bright sunlight, noisy environments)
33
+ - **Extended reach** - Accessible content reaches more users and improves overall satisfaction
34
+
35
+ ### Equal Experts Commitment
36
+
37
+ If we want clients to trust us on accessibility, we must lead by example. All content we produce—websites, documents, applications—should reflect our commitment to accessibility.
38
+
39
+ ---
40
+
41
+ ## WCAG Principles (POUR)
42
+
43
+ The Web Content Accessibility Guidelines are built on four principles:
44
+
45
+ | Principle | Description |
46
+ |-----------|-------------|
47
+ | **Perceivable** | Information must be presented in ways users can perceive using their senses |
48
+ | **Operable** | All users must be able to interact with interface components |
49
+ | **Understandable** | Users must be able to understand information and how to operate the UI |
50
+ | **Robust** | Content must work with assistive technologies and user agents |
51
+
52
+ ### Conformance Levels
53
+
54
+ | Level | Description |
55
+ |-------|-------------|
56
+ | A | Minimum conformance (bare minimum) |
57
+ | **AA** | Mid-range conformance (our target) |
58
+ | AAA | Highest conformance level |
59
+
60
+ **Equal Experts targets AA compliance** - this is the standard for most legal requirements.
61
+
62
+ ---
63
+
64
+ ## Visual Accessibility
65
+
66
+ Visual accessibility ensures that design choices don't exclude users with visual impairments, colour blindness, or other conditions that affect how they perceive content.
67
+
68
+ **Key principle:** Design should never rely solely on visual characteristics to convey meaning.
69
+
70
+ ### Colour Contrast
71
+
72
+ Sufficient contrast between text and background is essential for readability.
73
+
74
+ | Content Type | Minimum Ratio | Example |
75
+ |--------------|---------------|---------|
76
+ | Body text | 4.5:1 | Standard paragraphs, labels |
77
+ | Large text (18pt+ or 14pt bold) | 3:1 | Headings, large buttons |
78
+ | UI components | 3:1 | Borders, icons, focus indicators |
79
+ | Print materials | 7:1 | Higher due to printing variables |
80
+
81
+ Use contrast checking tools to verify ratios. See [Testing Tools](#testing-tools).
82
+
83
+ ### Colour Usage
84
+
85
+ **Never use colour alone to convey information.**
86
+
87
+ | Bad | Good |
88
+ |-----|------|
89
+ | Red text for errors | Red text + error icon + "Error:" prefix |
90
+ | Green for success | Green + checkmark icon + success message |
91
+ | Link only distinguished by colour | Link with underline + colour |
92
+
93
+ ### Status Indicators
94
+
95
+ When using colour for status (red/amber/green):
96
+
97
+ 1. **Add shapes** - Different shapes for each status (circle, triangle, square)
98
+ 2. **Add labels** - Text labels alongside colours
99
+ 3. **Include legend** - Always explain what colours mean
100
+ 4. **Consider colour blindness** - Red/green are commonly confused
101
+
102
+ ### Charts and Data Visualisation
103
+
104
+ - Use patterns or textures in addition to colours
105
+ - Ensure adjacent colours have sufficient contrast
106
+ - Provide data tables as alternatives to charts
107
+
108
+ ---
109
+
110
+ ## Typography Accessibility
111
+
112
+ ### Minimum Sizes
113
+
114
+ | Context | Minimum Size |
115
+ |---------|--------------|
116
+ | Body text | 11pt (14px) |
117
+ | Small text (captions, labels) | 10pt (12px) - use sparingly |
118
+ | Touch device body | 16px recommended |
119
+
120
+ ### Line Spacing
121
+
122
+ | Content Type | Line Height |
123
+ |--------------|-------------|
124
+ | Body copy | 1.5x font size |
125
+ | Headings | 1.2x font size |
126
+ | Dense UI (tables) | 1.3x minimum |
127
+
128
+ ### Text Scaling
129
+
130
+ - Text must be scalable to 200% without loss of content or functionality
131
+ - Use relative units (rem, em) not fixed pixels for font sizes
132
+ - Test layouts at 200% zoom
133
+
134
+ ### Typeface Selection
135
+
136
+ - Prefer sans-serif fonts for screen readability
137
+ - Avoid decorative fonts for body text
138
+ - Ensure consistent character spacing
139
+
140
+ ### Text Alignment
141
+
142
+ - **Left-align** body text (default)
143
+ - **Avoid justified** text - uneven spacing hinders readability
144
+ - **Centre-align** sparingly - only for short headings or CTAs
145
+
146
+ ---
147
+
148
+ ## Motion and Animation
149
+
150
+ ### Risks
151
+
152
+ - Flashing content can trigger epileptic seizures
153
+ - Excessive motion causes nausea/disorientation for some users
154
+ - Auto-playing content is distracting
155
+
156
+ ### Requirements
157
+
158
+ | Requirement | Implementation |
159
+ |-------------|----------------|
160
+ | No flashing | Never use content that flashes more than 3 times per second |
161
+ | Pause controls | All auto-playing content must have pause/stop controls |
162
+ | Reduced motion | Respect user preferences for reduced motion |
163
+ | Duration limits | Auto-playing content longer than 5 seconds needs controls |
164
+
165
+ ### GIFs and Animated Content
166
+
167
+ - Limit excessive movement
168
+ - Provide static fallback images where possible
169
+ - Never use GIFs for essential information
170
+
171
+ ---
172
+
173
+ ## Icons
174
+
175
+ ### Size Requirements
176
+
177
+ | Context | Minimum Size |
178
+ |---------|--------------|
179
+ | Touch targets | 44x44px minimum tap area |
180
+ | Visual icon | 24x24px minimum visible size |
181
+ | Dense UI | 20x20px with adequate spacing |
182
+
183
+ ### Accessibility Requirements
184
+
185
+ - **High contrast** - Icons must meet 3:1 contrast ratio
186
+ - **Universal symbols** - Use well-understood icons (magnifying glass for search)
187
+ - **Consistent style** - Same visual style throughout application
188
+ - **Text alternatives** - Provide labels or text alternatives for meaningful icons
189
+ - **Decorative icons** - Mark purely decorative icons appropriately
190
+
191
+ ---
192
+
193
+ ## Images
194
+
195
+ ### Background Images
196
+
197
+ - **Never place text on busy backgrounds**
198
+ - Use colour overlays to improve contrast when text over images is necessary
199
+ - Test text legibility across the full image area
200
+
201
+ ### Inclusive Imagery
202
+
203
+ - Represent diverse ages, backgrounds, and perspectives
204
+ - Prioritise diversity year-round, not just during awareness events
205
+ - Avoid stereotypical representations
206
+
207
+ ### Decorative vs Meaningful Images
208
+
209
+ | Type | Alt Text | Example |
210
+ |------|----------|---------|
211
+ | Decorative | Empty or none | Background patterns, visual flourishes |
212
+ | Meaningful | Descriptive text | Photos, diagrams, charts |
213
+ | Functional | Describes action | Icons in buttons |
214
+
215
+ ---
216
+
217
+ ## Content Accessibility
218
+
219
+ Accessible content can be understood by everyone—including people with cognitive disabilities, non-native English speakers, and those using assistive technologies.
220
+
221
+ **Key principle:** Write content that users can understand the first time they read or hear it.
222
+
223
+ ### Plain Language
224
+
225
+ | Do | Don't |
226
+ |----|-------|
227
+ | Use short sentences | Write long, complex sentences |
228
+ | Use active voice | Use passive voice |
229
+ | Use common words | Use jargon or technical terms without explanation |
230
+ | Be direct and specific | Be vague or ambiguous |
231
+ | Use concrete examples | Use abstract concepts without illustration |
232
+
233
+ ### Readability Targets
234
+
235
+ - Aim for reading level that most users can understand first time
236
+ - Break complex concepts into digestible chunks
237
+ - Test with readability tools (see [Testing Tools](#testing-tools))
238
+
239
+ ### Content Structure
240
+
241
+ **Headings:**
242
+ - Descriptive headings that accurately describe the content below
243
+ - Hierarchical structure - H1 → H2 → H3 (never skip levels)
244
+ - One H1 per page - the main page title
245
+ - Headings help users navigate and scan content
246
+
247
+ **Paragraphs:**
248
+ - Keep paragraphs short - 3-4 sentences maximum
249
+ - One idea per paragraph
250
+ - Avoid walls of text - dense blocks are hard to read
251
+
252
+ **Lists:**
253
+ - Use bullet points for unordered items
254
+ - Use numbered lists for sequential steps
255
+ - Keep list items concise
256
+
257
+ **Reading Order:**
258
+ - Content should make sense when read linearly
259
+ - Don't rely on visual layout to convey meaning
260
+
261
+ ---
262
+
263
+ ## Alternative Text
264
+
265
+ ### When Alt Text is Required
266
+
267
+ | Image Type | Alt Text Required | Approach |
268
+ |------------|-------------------|----------|
269
+ | Informative images | Yes | Describe content and purpose |
270
+ | Decorative images | No | Mark as decorative |
271
+ | Functional images (buttons, links) | Yes | Describe the action |
272
+ | Charts and diagrams | Yes | Summarize data, link to full data |
273
+ | Images with text | Yes | Include all text from image |
274
+
275
+ ### Writing Good Alt Text
276
+
277
+ | Do | Don't |
278
+ |----|-------|
279
+ | Describe content and purpose | Start with "Image of..." or "Picture of..." |
280
+ | Be concise (under 125 characters) | Write lengthy descriptions |
281
+ | Include text that appears in image | Describe visual appearance only |
282
+ | Provide context for charts | Just say "Chart" or "Graph" |
283
+
284
+ ### Examples
285
+
286
+ | Context | Bad Alt Text | Good Alt Text |
287
+ |---------|--------------|---------------|
288
+ | Company logo | "Logo" | "Equal Experts" |
289
+ | Chart | "Bar chart" | "Monthly sales chart showing 40% growth in Q4" |
290
+ | Product photo | "Image of laptop" | "MacBook Pro with dashboard displayed" |
291
+ | Icon button | "Icon" | "Search" |
292
+
293
+ ### Complex Images
294
+
295
+ For complex diagrams or charts:
296
+
297
+ 1. Provide brief alt text summarizing the image
298
+ 2. Include detailed description in surrounding text or linked page
299
+ 3. For data charts, provide accessible data table alternative
300
+
301
+ ---
302
+
303
+ ## Links and Buttons
304
+
305
+ ### Link Text
306
+
307
+ Links should tell users where they're going and why.
308
+
309
+ | Bad | Good |
310
+ |-----|------|
311
+ | "Click here" | "View our pricing plans" |
312
+ | "Read more" | "Read more about accessibility guidelines" |
313
+ | "Learn more" | "Learn more about our consulting services" |
314
+ | URL as link text | Descriptive text for the destination |
315
+
316
+ ### Link Visibility
317
+
318
+ - Links must be visually distinct from regular text
319
+ - Use **underline** plus colour change
320
+ - Don't rely on colour alone
321
+
322
+ ### Button Labels
323
+
324
+ - Describe the action clearly
325
+ - Use verbs: "Submit", "Save", "Delete", "Cancel"
326
+ - Be specific: "Save changes" not just "Save"
327
+ - Match user expectation to actual outcome
328
+
329
+ ---
330
+
331
+ ## Abbreviations and Acronyms
332
+
333
+ ### First Use
334
+
335
+ Always spell out abbreviations on first use:
336
+
337
+ - "Artificial Intelligence (AI)" - then use "AI" thereafter
338
+ - "Application Programming Interface (API)"
339
+ - "User Experience (UX)"
340
+
341
+ ### Screen Reader Considerations
342
+
343
+ - Use capitals for abbreviations: `HMRC` not `Hmrc`
344
+ - Screen readers may mispronounce lowercase abbreviations as words
345
+
346
+ ---
347
+
348
+ ## Text Formatting
349
+
350
+ ### Capitalisation
351
+
352
+ | Do | Don't |
353
+ |----|-------|
354
+ | Use sentence case | USE ALL CAPS FOR EMPHASIS |
355
+ | Capitalise proper nouns | use alternating caps (LiKe ThIs) |
356
+ | Use bold for emphasis | Rely on caps for emphasis |
357
+
358
+ **Why:** Screen readers cannot convey the context of ALL CAPS. Alternating caps is read as gibberish.
359
+
360
+ ### Semantic Formatting
361
+
362
+ - Use appropriate markup for important text, not just bold styling
363
+ - Use appropriate markup for emphasis, not just italic styling
364
+ - Use semantic lists, not manual bullet characters
365
+
366
+ ---
367
+
368
+ ## Inclusive Language
369
+
370
+ Inclusive language is part of how Equal Experts writes — it helps us be accurate and build trust. Around 16% of people worldwide experience some form of disability, so it matters that we don't unintentionally exclude anyone from accessing or understanding our work. This section is the authoritative source for inclusive word choices across all content; the [writing style](../content/writing-style.md) guidance links here.
371
+
372
+ ### Guidelines
373
+
374
+ - Use language that is respectful and free of bias
375
+ - Avoid terms that contribute to stigmas around disability or mental illness
376
+ - Make content **gender-neutral** wherever possible, and avoid words and phrases that indicate gender bias
377
+ - Avoid words, images, or situations that reinforce racial, ethnic, or religious stereotypes
378
+ - Be considerate with computer and software terminology such as "master", "slave", and "blacklist" — prefer neutral alternatives (for example "main", "primary/replica", "blocklist")
379
+ - Avoid assumptions: when including someone in a piece of content, ask how they'd like to be identified
380
+ - Avoid idioms where possible, or make sure they're clearly explained — they don't always translate across cultures or for non-native readers
381
+ - When in doubt, research current preferred terminology
382
+
383
+ ### Person-First Language
384
+
385
+ - "Person with a disability" not "disabled person"
386
+ - "User who is blind" not "blind user"
387
+ - Focus on the person, not the condition
388
+
389
+ ---
390
+
391
+ ## Multimedia Content
392
+
393
+ ### Video
394
+
395
+ - **Captions required** - Essential for deaf/hard-of-hearing users
396
+ - 85% of social media videos are watched without sound
397
+ - Captions can be burned-in or added via platform tools
398
+
399
+ ### Audio
400
+
401
+ - **Transcripts required** - Full text alternative for audio content
402
+ - Helps users who can't listen (noisy environment, preference)
403
+ - Benefits SEO and searchability
404
+
405
+ ### Auto-Playing Content
406
+
407
+ - Provide pause/stop controls
408
+ - Never auto-play audio without user consent
409
+ - Limit duration of auto-playing visual content
410
+
411
+ ---
412
+
413
+ ## Testing Tools
414
+
415
+ ### Colour Contrast
416
+
417
+ - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - Text contrast
418
+ - [Contrast Checker](https://contrastchecker.com/) - Images
419
+ - [Brandwood A11y](https://www.brandwood.com/a11y/) - Text over images
420
+
421
+ ### Automated Testing
422
+
423
+ - [WAVE Browser Extension](https://wave.webaim.org/extension/) - Page accessibility evaluation
424
+ - [Axe DevTools](https://www.deque.com/axe/devtools/) - Comprehensive accessibility testing
425
+
426
+ ### Content Readability
427
+
428
+ - [WebFX Readability Test](https://www.webfx.com/tools/read-able/)
429
+ - [Hemingway Editor](https://hemingwayapp.com/)
430
+
431
+ ---
432
+
433
+ ## Further Reading
434
+
435
+ - [Introduction to Web Accessibility (W3C)](https://www.w3.org/WAI/fundamentals/accessibility-intro/)
436
+ - [WCAG 2.2 Guidelines](https://www.w3.org/TR/WCAG22/)
437
+ - [UK Government Accessibility Guidelines](https://gcs.civilservice.gov.uk/guidance/digital-communication/planning-creating-and-publishing-accessible-website-content/)
438
+
439
+ ---
440
+
441
+ ## Related Documentation
442
+
443
+ - [Colours](../design-language/colours.md) - Brand colour palette and contrast
444
+ - [Typography](../design-language/typography.md) - Font families and type scale
445
+ - [Writing style](../content/writing-style.md) - Writing style and tone
446
+ - [Web Technical Accessibility](../media-types/web-product/accessibility.md) - Implementation details