@equal-experts/kuat-react 0.14.0 → 0.15.0-beta.1

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 (32) hide show
  1. package/agent-docs/AGENTS.md +1 -1
  2. package/agent-docs/README.md +1 -1
  3. package/agent-docs/components/callout.md +66 -0
  4. package/agent-docs/components/components.manifest.json +6 -0
  5. package/agent-docs/external/kuat-agent-rules/reference/accessibility/accessibility.md +27 -1
  6. package/agent-docs/external/kuat-agent-rules/reference/design-language/colour-usage.md +107 -0
  7. package/agent-docs/external/kuat-agent-rules/reference/design-language/colours.md +86 -11
  8. package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/colors.tokens.json +193 -5
  9. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/README.md +6 -0
  10. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/website.md +14 -0
  11. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/README.md +1 -0
  12. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/accessibility.md +0 -29
  13. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/colour-modes.md +58 -0
  14. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-decision-tree.md +3 -32
  15. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-registry.md +1 -1
  16. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/product-content.md +0 -26
  17. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/README.md +14 -5
  18. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{forms.md → complete-a-form.md} +43 -53
  19. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{dashboards.md → dashboard.md} +42 -51
  20. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/documentation.md +41 -51
  21. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{authentication.md → sign-in.md} +42 -52
  22. package/agent-docs/manifest.json +3 -3
  23. package/agent-docs/rules/LOADING-consumer.md +1 -1
  24. package/dist/callout-DFmAtUwR.js +46 -0
  25. package/dist/callout.d.ts +3 -0
  26. package/dist/callout.js +7 -0
  27. package/dist/components/ui/callout/callout.d.ts +19 -0
  28. package/dist/components/ui/callout/index.d.ts +2 -0
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.js +196 -193
  31. package/dist/style.css +1 -1
  32. package/package.json +5 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://tr.designtokens.org/format/",
3
- "$description": "Equal Experts brand COLOUR tokens — the SINGLE SOURCE OF TRUTH (upstream, in kuat-agent-rules). Downstream artifacts are GENERATED from this file: reference/design-language/colours.md (human-readable) and @equal-experts/kuat-core src/variables.css (CSS). Never hand-edit those; change colours HERE. kuat-core is downstream — do not invert. Support scales (slate/red/indigo) are NOT brand colours and live only in kuat-core. Format: W3C Design Tokens; $value is hex, oklch preserved in $extensions.",
3
+ "$description": "Equal Experts brand COLOUR tokens — the SINGLE SOURCE OF TRUTH (upstream, in kuat-agent-rules). Downstream artifacts are GENERATED from this file: reference/design-language/colours.md (human-readable) and @equal-experts/kuat-core src/variables.css (CSS). Never hand-edit those; change colours HERE. kuat-core is downstream — do not invert. Support scales (slate/red/indigo) are NOT brand colours and live only in kuat-core. Format: W3C Design Tokens; $value is hex, oklch preserved in $extensions. Extended palette + neutral scale + semantic layer added per the June 2026 colours lockdown (extended-palette-review.md) — accessible link blue is WIP, flagged in its own $description.",
4
4
  "color": {
5
5
  "ee-blue": {
6
6
  "$description": "EE Blue — primary brand colour (trust, technology). Scale 50 (light) → 950 (dark).",
@@ -57,6 +57,160 @@
57
57
  "800": { "$type": "color", "$value": "#603100", "$extensions": { "oklch": "oklch(0.325 0.140 65.0)" } },
58
58
  "900": { "$type": "color", "$value": "#301900", "$extensions": { "oklch": "oklch(0.225 0.120 65.0)" } },
59
59
  "950": { "$type": "color", "$value": "#180c00", "$extensions": { "oklch": "oklch(0.125 0.100 65.0)" } }
60
+ },
61
+ "index-indigo": {
62
+ "$description": "Index Indigo — info/call-out (white text). Extended palette (2026-06-29 colours lockdown). Scale 50 (light) → 950 (dark), anchored at 800 (measured lightness) — not forced to 500.",
63
+ "50": { "$type": "color", "$value": "#f0eefb", "$extensions": { "oklch": "oklch(0.955 0.018 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-50)" } } },
64
+ "100": { "$type": "color", "$value": "#d6d3e8", "$extensions": { "oklch": "oklch(0.875 0.029 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-100)" } } },
65
+ "200": { "$type": "color", "$value": "#bcb8d4", "$extensions": { "oklch": "oklch(0.795 0.040 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-200)" } } },
66
+ "300": { "$type": "color", "$value": "#a49ec1", "$extensions": { "oklch": "oklch(0.715 0.051 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-300)" } } },
67
+ "400": { "$type": "color", "$value": "#8b84ad", "$extensions": { "oklch": "oklch(0.635 0.061 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-400)" } } },
68
+ "500": { "$type": "color", "$value": "#746b9a", "$extensions": { "oklch": "oklch(0.555 0.072 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-500)" } } },
69
+ "600": { "$type": "color", "$value": "#5e5387", "$extensions": { "oklch": "oklch(0.475 0.083 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-600)" } } },
70
+ "700": { "$type": "color", "$value": "#493b74", "$extensions": { "oklch": "oklch(0.395 0.094 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-700)" } } },
71
+ "800": { "$type": "color", "$value": "#352361", "$extensions": { "oklch": "oklch(0.315 0.105 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-800)" } } },
72
+ "900": { "$type": "color", "$value": "#1d1338", "$extensions": { "oklch": "oklch(0.223 0.070 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-900)" } } },
73
+ "950": { "$type": "color", "$value": "#080514", "$extensions": { "oklch": "oklch(0.130 0.036 292.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-950)" } } }
74
+ },
75
+ "packet-plum": {
76
+ "$description": "Packet Plum — expressive accent / dark surface (white text). Extended palette. Scale 50 (light) → 950 (dark), anchored at 600 (measured lightness).",
77
+ "50": { "$type": "color", "$value": "#faebf6", "$extensions": { "oklch": "oklch(0.955 0.022 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-50)" } } },
78
+ "100": { "$type": "color", "$value": "#e7cde1", "$extensions": { "oklch": "oklch(0.875 0.039 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-100)" } } },
79
+ "200": { "$type": "color", "$value": "#d3afcc", "$extensions": { "oklch": "oklch(0.796 0.057 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-200)" } } },
80
+ "300": { "$type": "color", "$value": "#c092b8", "$extensions": { "oklch": "oklch(0.716 0.074 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-300)" } } },
81
+ "400": { "$type": "color", "$value": "#ad76a3", "$extensions": { "oklch": "oklch(0.636 0.092 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-400)" } } },
82
+ "500": { "$type": "color", "$value": "#995a8f", "$extensions": { "oklch": "oklch(0.557 0.109 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-500)" } } },
83
+ "600": { "$type": "color", "$value": "#853d7b", "$extensions": { "oklch": "oklch(0.477 0.127 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-600)" } } },
84
+ "700": { "$type": "color", "$value": "#652c5d", "$extensions": { "oklch": "oklch(0.390 0.106 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-700)" } } },
85
+ "800": { "$type": "color", "$value": "#471b41", "$extensions": { "oklch": "oklch(0.303 0.085 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-800)" } } },
86
+ "900": { "$type": "color", "$value": "#2a0c26", "$extensions": { "oklch": "oklch(0.217 0.064 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-900)" } } },
87
+ "950": { "$type": "color", "$value": "#11020e", "$extensions": { "oklch": "oklch(0.130 0.043 332.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-950)" } } }
88
+ },
89
+ "runtime-red": {
90
+ "$description": "Runtime Red — error/danger (white text); replaces support-scale #dc2626. Extended palette. Scale 50 (light) → 950 (dark), anchored at 600 (measured lightness).",
91
+ "50": { "$type": "color", "$value": "#ffebea", "$extensions": { "oklch": "oklch(0.955 0.022 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-50)" } } },
92
+ "100": { "$type": "color", "$value": "#f7c8c6", "$extensions": { "oklch": "oklch(0.873 0.053 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-100)" } } },
93
+ "200": { "$type": "color", "$value": "#e8a7a6", "$extensions": { "oklch": "oklch(0.790 0.077 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-200)" } } },
94
+ "300": { "$type": "color", "$value": "#d98786", "$extensions": { "oklch": "oklch(0.708 0.101 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-300)" } } },
95
+ "400": { "$type": "color", "$value": "#c86667", "$extensions": { "oklch": "oklch(0.626 0.125 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-400)" } } },
96
+ "500": { "$type": "color", "$value": "#b64349", "$extensions": { "oklch": "oklch(0.543 0.149 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-500)" } } },
97
+ "600": { "$type": "color", "$value": "#a3152b", "$extensions": { "oklch": "oklch(0.461 0.173 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-600)" } } },
98
+ "700": { "$type": "color", "$value": "#7d0a1e", "$extensions": { "oklch": "oklch(0.378 0.144 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-700)" } } },
99
+ "800": { "$type": "color", "$value": "#590211", "$extensions": { "oklch": "oklch(0.295 0.116 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-800)" } } },
100
+ "900": { "$type": "color", "$value": "#370006", "$extensions": { "oklch": "oklch(0.213 0.086 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-900)" } } },
101
+ "950": { "$type": "color", "$value": "#180001", "$extensions": { "oklch": "oklch(0.130 0.054 20.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-950)" } } }
102
+ },
103
+ "uptime-green": {
104
+ "$description": "Uptime Green — success (white text). Extended palette. Scale 50 (light) → 950 (dark), anchored at 500 (measured lightness — this one lands naturally at 500).",
105
+ "50": { "$type": "color", "$value": "#e5f5e4", "$extensions": { "oklch": "oklch(0.955 0.028 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-50)" } } },
106
+ "100": { "$type": "color", "$value": "#bfdebd", "$extensions": { "oklch": "oklch(0.870 0.056 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-100)" } } },
107
+ "200": { "$type": "color", "$value": "#99c797", "$extensions": { "oklch": "oklch(0.785 0.084 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-200)" } } },
108
+ "300": { "$type": "color", "$value": "#72b070", "$extensions": { "oklch": "oklch(0.699 0.112 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-300)" } } },
109
+ "400": { "$type": "color", "$value": "#4a9949", "$extensions": { "oklch": "oklch(0.614 0.139 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-400)" } } },
110
+ "500": { "$type": "color", "$value": "#11821b", "$extensions": { "oklch": "oklch(0.529 0.167 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-500)" } } },
111
+ "600": { "$type": "color", "$value": "#056810", "$extensions": { "oklch": "oklch(0.449 0.145 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-600)" } } },
112
+ "700": { "$type": "color", "$value": "#004f07", "$extensions": { "oklch": "oklch(0.369 0.122 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-700)" } } },
113
+ "800": { "$type": "color", "$value": "#003603", "$extensions": { "oklch": "oklch(0.290 0.095 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-800)" } } },
114
+ "900": { "$type": "color", "$value": "#002001", "$extensions": { "oklch": "oklch(0.210 0.070 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-900)" } } },
115
+ "950": { "$type": "color", "$value": "#000b00", "$extensions": { "oklch": "oklch(0.130 0.045 143.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-950)" } } }
116
+ },
117
+ "server-slate": {
118
+ "$description": "Server Slate — near-neutral brand grey (white text); kept distinct from the EE neutral scale (WS0.5: they serve different jobs). Extended palette. Scale 50 (light) → 950 (dark), anchored at 600 (measured lightness).",
119
+ "50": { "$type": "color", "$value": "#eef0f1", "$extensions": { "oklch": "oklch(0.955 0.002 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-50)" } } },
120
+ "100": { "$type": "color", "$value": "#d1d5d6", "$extensions": { "oklch": "oklch(0.870 0.004 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-100)" } } },
121
+ "200": { "$type": "color", "$value": "#b5babb", "$extensions": { "oklch": "oklch(0.785 0.006 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-200)" } } },
122
+ "300": { "$type": "color", "$value": "#99a0a2", "$extensions": { "oklch": "oklch(0.700 0.008 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-300)" } } },
123
+ "400": { "$type": "color", "$value": "#7e8689", "$extensions": { "oklch": "oklch(0.615 0.010 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-400)" } } },
124
+ "500": { "$type": "color", "$value": "#646e70", "$extensions": { "oklch": "oklch(0.530 0.012 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-500)" } } },
125
+ "600": { "$type": "color", "$value": "#4c5659", "$extensions": { "oklch": "oklch(0.445 0.014 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-600)" } } },
126
+ "700": { "$type": "color", "$value": "#384043", "$extensions": { "oklch": "oklch(0.366 0.012 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-700)" } } },
127
+ "800": { "$type": "color", "$value": "#262c2e", "$extensions": { "oklch": "oklch(0.287 0.009 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-800)" } } },
128
+ "900": { "$type": "color", "$value": "#15191a", "$extensions": { "oklch": "oklch(0.209 0.007 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-900)" } } },
129
+ "950": { "$type": "color", "$value": "#060808", "$extensions": { "oklch": "oklch(0.130 0.005 217.7)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-950)" } } }
130
+ },
131
+ "logic-lime": {
132
+ "$description": "Logic Lime — bright pull-out accent (dark text); display alias \"Lime\". Extended palette. Scale 50 (light) → 950 (dark), anchored at 300 (measured lightness).",
133
+ "50": { "$type": "color", "$value": "#ecf4dc", "$extensions": { "oklch": "oklch(0.955 0.033 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-50)" } } },
134
+ "100": { "$type": "color", "$value": "#d8ecac", "$extensions": { "oklch": "oklch(0.912 0.086 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-100)" } } },
135
+ "200": { "$type": "color", "$value": "#c4e376", "$extensions": { "oklch": "oklch(0.870 0.140 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-200)" } } },
136
+ "300": { "$type": "color", "$value": "#b1d923", "$extensions": { "oklch": "oklch(0.827 0.193 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-300)" } } },
137
+ "400": { "$type": "color", "$value": "#94b70d", "$extensions": { "oklch": "oklch(0.727 0.175 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-400)" } } },
138
+ "500": { "$type": "color", "$value": "#799600", "$extensions": { "oklch": "oklch(0.628 0.153 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-500)" } } },
139
+ "600": { "$type": "color", "$value": "#5f7600", "$extensions": { "oklch": "oklch(0.528 0.129 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-600)" } } },
140
+ "700": { "$type": "color", "$value": "#465800", "$extensions": { "oklch": "oklch(0.429 0.105 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-700)" } } },
141
+ "800": { "$type": "color", "$value": "#2e3b00", "$extensions": { "oklch": "oklch(0.329 0.081 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-800)" } } },
142
+ "900": { "$type": "color", "$value": "#182100", "$extensions": { "oklch": "oklch(0.230 0.057 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-900)" } } },
143
+ "950": { "$type": "color", "$value": "#050900", "$extensions": { "oklch": "oklch(0.130 0.034 122.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-950)" } } }
144
+ },
145
+ "edge-blue": {
146
+ "$description": "Edge Blue — light end of the 3-stage blue (Tech Blue → EE Blue → Edge Blue); hover/active state (dark text). Extended palette. Scale 50 (light) → 950 (dark), anchored at 200 (measured lightness).",
147
+ "50": { "$type": "color", "$value": "#ebf1f6", "$extensions": { "oklch": "oklch(0.955 0.009 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-50)" } } },
148
+ "100": { "$type": "color", "$value": "#c6dcec", "$extensions": { "oklch": "oklch(0.884 0.032 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-100)" } } },
149
+ "200": { "$type": "color", "$value": "#a1c8e2", "$extensions": { "oklch": "oklch(0.813 0.055 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-200)" } } },
150
+ "300": { "$type": "color", "$value": "#8aacc3", "$extensions": { "oklch": "oklch(0.728 0.050 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-300)" } } },
151
+ "400": { "$type": "color", "$value": "#7391a6", "$extensions": { "oklch": "oklch(0.642 0.046 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-400)" } } },
152
+ "500": { "$type": "color", "$value": "#5d7889", "$extensions": { "oklch": "oklch(0.557 0.041 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-500)" } } },
153
+ "600": { "$type": "color", "$value": "#485f6e", "$extensions": { "oklch": "oklch(0.471 0.037 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-600)" } } },
154
+ "700": { "$type": "color", "$value": "#344753", "$extensions": { "oklch": "oklch(0.386 0.032 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-700)" } } },
155
+ "800": { "$type": "color", "$value": "#21303a", "$extensions": { "oklch": "oklch(0.301 0.028 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-800)" } } },
156
+ "900": { "$type": "color", "$value": "#0f1b23", "$extensions": { "oklch": "oklch(0.215 0.023 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-900)" } } },
157
+ "950": { "$type": "color", "$value": "#02080e", "$extensions": { "oklch": "oklch(0.130 0.019 237.6)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-950)" } } }
158
+ },
159
+ "signal-yellow": {
160
+ "$description": "Signal Yellow — bright pull-out accent (dark text); display alias \"Sunflower\"; NOT a status colour. Extended palette. Scale 50 (light) → 950 (dark), anchored at 300 (measured lightness).",
161
+ "50": { "$type": "color", "$value": "#f6f0db", "$extensions": { "oklch": "oklch(0.955 0.029 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-50)" } } },
162
+ "100": { "$type": "color", "$value": "#f9eaae", "$extensions": { "oklch": "oklch(0.934 0.077 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-100)" } } },
163
+ "200": { "$type": "color", "$value": "#fce27c", "$extensions": { "oklch": "oklch(0.913 0.125 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-200)" } } },
164
+ "300": { "$type": "color", "$value": "#ffd930", "$extensions": { "oklch": "oklch(0.892 0.173 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-300)" } } },
165
+ "400": { "$type": "color", "$value": "#d8b618", "$extensions": { "oklch": "oklch(0.783 0.157 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-400)" } } },
166
+ "500": { "$type": "color", "$value": "#b19500", "$extensions": { "oklch": "oklch(0.674 0.139 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-500)" } } },
167
+ "600": { "$type": "color", "$value": "#8b7400", "$extensions": { "oklch": "oklch(0.565 0.116 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-600)" } } },
168
+ "700": { "$type": "color", "$value": "#675600", "$extensions": { "oklch": "oklch(0.457 0.094 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-700)" } } },
169
+ "800": { "$type": "color", "$value": "#463900", "$extensions": { "oklch": "oklch(0.348 0.072 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-800)" } } },
170
+ "900": { "$type": "color", "$value": "#261e00", "$extensions": { "oklch": "oklch(0.239 0.050 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-900)" } } },
171
+ "950": { "$type": "color", "$value": "#0b0700", "$extensions": { "oklch": "oklch(0.130 0.028 95.2)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-950)" } } }
172
+ },
173
+ "cursor-coral": {
174
+ "$description": "Cursor Coral — decorative pull-out (dark text); NOT error/destructive. Extended palette. Scale 50 (light) → 950 (dark), anchored at 400 (measured lightness).",
175
+ "50": { "$type": "color", "$value": "#ffebe9", "$extensions": { "oklch": "oklch(0.955 0.022 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-50)" } } },
176
+ "100": { "$type": "color", "$value": "#ffccc8", "$extensions": { "oklch": "oklch(0.889 0.058 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-100)" } } },
177
+ "200": { "$type": "color", "$value": "#ffaca6", "$extensions": { "oklch": "oklch(0.823 0.099 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-200)" } } },
178
+ "300": { "$type": "color", "$value": "#ff8882", "$extensions": { "oklch": "oklch(0.757 0.145 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-300)" } } },
179
+ "400": { "$type": "color", "$value": "#ff5c5c", "$extensions": { "oklch": "oklch(0.691 0.199 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-400)" } } },
180
+ "500": { "$type": "color", "$value": "#d44849", "$extensions": { "oklch": "oklch(0.597 0.177 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-500)" } } },
181
+ "600": { "$type": "color", "$value": "#ab3436", "$extensions": { "oklch": "oklch(0.504 0.155 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-600)" } } },
182
+ "700": { "$type": "color", "$value": "#842124", "$extensions": { "oklch": "oklch(0.410 0.133 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-700)" } } },
183
+ "800": { "$type": "color", "$value": "#5e0f13", "$extensions": { "oklch": "oklch(0.317 0.111 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-800)" } } },
184
+ "900": { "$type": "color", "$value": "#3b0005", "$extensions": { "oklch": "oklch(0.223 0.090 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-900)" } } },
185
+ "950": { "$type": "color", "$value": "#180001", "$extensions": { "oklch": "oklch(0.130 0.055 23.9)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-950)" } } }
186
+ },
187
+ "patch-peach": {
188
+ "$description": "Patch Peach — light warm pull-out accent (dark text). Extended palette. Scale 50 (light) → 950 (dark), anchored at 300 (measured lightness).",
189
+ "50": { "$type": "color", "$value": "#fcede0", "$extensions": { "oklch": "oklch(0.955 0.024 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-50)" } } },
190
+ "100": { "$type": "color", "$value": "#fed7b3", "$extensions": { "oklch": "oklch(0.903 0.064 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-100)" } } },
191
+ "200": { "$type": "color", "$value": "#fec084", "$extensions": { "oklch": "oklch(0.850 0.104 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-200)" } } },
192
+ "300": { "$type": "color", "$value": "#fca84e", "$extensions": { "oklch": "oklch(0.798 0.144 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-300)" } } },
193
+ "400": { "$type": "color", "$value": "#d68c3c", "$extensions": { "oklch": "oklch(0.703 0.130 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-400)" } } },
194
+ "500": { "$type": "color", "$value": "#b2722a", "$extensions": { "oklch": "oklch(0.607 0.117 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-500)" } } },
195
+ "600": { "$type": "color", "$value": "#8f5819", "$extensions": { "oklch": "oklch(0.512 0.103 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-600)" } } },
196
+ "700": { "$type": "color", "$value": "#6d4007", "$extensions": { "oklch": "oklch(0.416 0.090 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-700)" } } },
197
+ "800": { "$type": "color", "$value": "#4c2a00", "$extensions": { "oklch": "oklch(0.321 0.072 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-800)" } } },
198
+ "900": { "$type": "color", "$value": "#2c1600", "$extensions": { "oklch": "oklch(0.225 0.051 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-900)" } } },
199
+ "950": { "$type": "color", "$value": "#0f0500", "$extensions": { "oklch": "oklch(0.130 0.031 64.8)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-950)" } } }
200
+ },
201
+ "neutral": {
202
+ "$description": "EE neutral scale — monotonic Byte White (50) → Dark Data (950). Distinct from Server Slate (a brand grey, not a UI neutral). Aliased at 50/100/600/950 (see brand.byte-white / brand.the-cloud / brand.overcast / brand.dark-data).",
203
+ "50": { "$type": "color", "$value": "#ffffff", "$extensions": { "oklch": "oklch(1.000 0.0000 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-50)" } } },
204
+ "100": { "$type": "color", "$value": "#f5f5f5", "$extensions": { "oklch": "oklch(0.970 0.0000 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-100)" } } },
205
+ "200": { "$type": "color", "$value": "#dbdbdb", "$extensions": { "oklch": "oklch(0.891 0.0007 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-200)" } } },
206
+ "300": { "$type": "color", "$value": "#c1c2c2", "$extensions": { "oklch": "oklch(0.813 0.0014 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-300)" } } },
207
+ "400": { "$type": "color", "$value": "#a7a9a9", "$extensions": { "oklch": "oklch(0.734 0.0020 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-400)" } } },
208
+ "500": { "$type": "color", "$value": "#8f9192", "$extensions": { "oklch": "oklch(0.655 0.0027 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-500)" } } },
209
+ "600": { "$type": "color", "$value": "#777a7a", "$extensions": { "oklch": "oklch(0.576 0.0034 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-600)" } } },
210
+ "700": { "$type": "color", "$value": "#606364", "$extensions": { "oklch": "oklch(0.497 0.0041 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-700)" } } },
211
+ "800": { "$type": "color", "$value": "#4a4d4e", "$extensions": { "oklch": "oklch(0.418 0.0047 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-800)" } } },
212
+ "900": { "$type": "color", "$value": "#35393a", "$extensions": { "oklch": "oklch(0.340 0.0054 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-900)" } } },
213
+ "950": { "$type": "color", "$value": "#212526", "$extensions": { "oklch": "oklch(0.261 0.0061 214.4)", "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-950)" } } }
60
214
  }
61
215
  },
62
216
  "brand": {
@@ -66,9 +220,20 @@
66
220
  "transform-teal": { "$type": "color", "$value": "{color.transform-teal.500}" },
67
221
  "equal-ember": { "$type": "color", "$value": "{color.equal-ember.500}" },
68
222
  "ee-blue-accent": { "$type": "color", "$value": "{color.ee-blue.50}" },
69
- "dark-data": { "$type": "color", "$value": "#212526", "$description": "Primary text dark." },
70
- "the-cloud": { "$type": "color", "$value": "#f5f5f5", "$description": "Light surface." },
71
- "byte-white": { "$type": "color", "$value": "#ffffff" }
223
+ "dark-data": { "$type": "color", "$value": "{color.neutral.950}", "$description": "Primary text dark. Now aliased into the EE neutral scale (was a raw hex; value unchanged, #212526)." },
224
+ "the-cloud": { "$type": "color", "$value": "{color.neutral.100}", "$description": "Light surface. Now aliased into the EE neutral scale (was a raw hex; value unchanged, #f5f5f5)." },
225
+ "byte-white": { "$type": "color", "$value": "{color.neutral.50}", "$description": "Now aliased into the EE neutral scale (was a raw hex; value unchanged, #ffffff)." },
226
+ "overcast": { "$type": "color", "$value": "{color.neutral.600}", "$description": "Mid neutral grey — the fourth named EE neutral point (WS0.1).", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--neutral-600)" } } },
227
+ "index-indigo": { "$type": "color", "$value": "{color.index-indigo.800}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--index-indigo-800)" } } },
228
+ "packet-plum": { "$type": "color", "$value": "{color.packet-plum.600}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--packet-plum-600)" } } },
229
+ "runtime-red": { "$type": "color", "$value": "{color.runtime-red.600}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--runtime-red-600)" } } },
230
+ "uptime-green": { "$type": "color", "$value": "{color.uptime-green.500}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--uptime-green-500)" } } },
231
+ "server-slate": { "$type": "color", "$value": "{color.server-slate.600}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--server-slate-600)" } } },
232
+ "logic-lime": { "$type": "color", "$value": "{color.logic-lime.300}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--logic-lime-300)" } } },
233
+ "edge-blue": { "$type": "color", "$value": "{color.edge-blue.200}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--edge-blue-200)" } } },
234
+ "signal-yellow": { "$type": "color", "$value": "{color.signal-yellow.300}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--signal-yellow-300)" } } },
235
+ "cursor-coral": { "$type": "color", "$value": "{color.cursor-coral.400}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--cursor-coral-400)" } } },
236
+ "patch-peach": { "$type": "color", "$value": "{color.patch-peach.300}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--patch-peach-300)" } } }
72
237
  },
73
238
  "alias": {
74
239
  "$description": "Semantic role → brand mapping (mirrors kuat-core ee-light). Support-scale-backed roles (muted/border/ring/destructive) resolve to non-brand scales in kuat-core and are intentionally omitted here except destructive.",
@@ -79,6 +244,29 @@
79
244
  "foreground": { "$type": "color", "$value": "{brand.dark-data}" },
80
245
  "background": { "$type": "color", "$value": "{brand.byte-white}" },
81
246
  "muted": { "$type": "color", "$value": "{brand.the-cloud}" },
82
- "destructive": { "$type": "color", "$value": "#dc2626", "$description": "Red 600 (support scale, not brand)." }
247
+ "destructive": { "$type": "color", "$value": "{brand.runtime-red}", "$description": "Runtime Red #a3152b — replaces support-scale #dc2626 per the June 2026 colours lockdown (WS0.3)." }
248
+ },
249
+ "semantic": {
250
+ "$description": "Cross-cutting semantic / RAG roles (sit above the tiers — see reference/design-language/colour-usage.md). Never colour alone (WCAG 1.4.1): pair with icon/shape/label. Link is WIP — value may change pending validation in real link contexts.",
251
+ "error": { "$type": "color", "$value": "{brand.runtime-red}", "$description": "Error/danger. White text (7.8:1 AAA). Shape/label partner: ✕ / \"Error:\" + icon.", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-error)" } } },
252
+ "warning": { "$type": "color", "$value": "{brand.equal-ember}", "$description": "Warning (core Orange, not yellow). DARK DATA text required (5.6:1 AA) — white text fails (2.8:1). Shape/label partner: △ / \"Warning:\" + icon.", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-warning)" } } },
253
+ "success": { "$type": "color", "$value": "{brand.uptime-green}", "$description": "Success. White text (5.0:1 AA). Shape/label partner: ✓ / \"Success:\" + icon.", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-success)" } } },
254
+ "info": { "$type": "color", "$value": "{brand.index-indigo}", "$description": "Info/call-out. White text (13.4:1 AAA). Shape/label partner: ⓘ / \"Info:\" + icon.", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-info)" } } },
255
+ "link": { "$type": "color", "$value": "#0080be", "$description": "WIP — accessible EE Blue for text links/small text; EE Blue #1795d4 itself fails small-text contrast (3.3:1). Deliberately ~97% of AA on white (4.34:1) to stay close to EE Blue (ΔE≈7.5) — a brand-fidelity-over-strict-compliance call, flagged for validation in real link contexts. Strict-AA fallback: #007cb9 (4.58:1).", "$extensions": { "scopes": ["TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-link)" } } },
256
+ "interaction-state": { "$type": "color", "$value": "{brand.edge-blue}", "$description": "Hover/active state — light end of the 3-stage blue. Dark Data text (8.8:1 AAA).", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL", "STROKE_COLOR"], "codeSyntax": { "WEB": "var(--color-interaction-state)" } } },
257
+ "error-dark": { "$type": "color", "$value": "{color.runtime-red.300}", "$description": "On-dark-surface text variant of error (lighter step for legibility on dark backgrounds).", "$extensions": { "scopes": ["TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-error-dark)" } } },
258
+ "success-dark": { "$type": "color", "$value": "{color.uptime-green.300}", "$description": "On-dark-surface text variant of success (lighter step for legibility on dark backgrounds).", "$extensions": { "scopes": ["TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-success-dark)" } } },
259
+ "info-dark": { "$type": "color", "$value": "{color.index-indigo.300}", "$description": "On-dark-surface text variant of info (lighter step for legibility on dark backgrounds).", "$extensions": { "scopes": ["TEXT_FILL"], "codeSyntax": { "WEB": "var(--color-info-dark)" } } }
260
+ },
261
+ "data-viz": {
262
+ "$description": "Tier 3 categorical sequence for charts/data viz only — use in order, stop when there are enough categories. CVD-checked (deutan/protan/tritan), lightness-separated. NEVER place ee-blue and transform-teal adjacent (1.01:1 luminance — pick one per chart). Prefer these extended hues over raw core colours inside core-coloured UI so series stand apart from chrome.",
263
+ "categorical-1": { "$type": "color", "$value": "{brand.ee-blue}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-1)" } } },
264
+ "categorical-2": { "$type": "color", "$value": "{brand.equal-ember}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-2)" } } },
265
+ "categorical-3": { "$type": "color", "$value": "{brand.tech-blue}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-3)" } } },
266
+ "categorical-4": { "$type": "color", "$value": "{brand.logic-lime}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-4)" } } },
267
+ "categorical-5": { "$type": "color", "$value": "{brand.packet-plum}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-5)" } } },
268
+ "categorical-6": { "$type": "color", "$value": "{brand.edge-blue}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-6)" } } },
269
+ "categorical-7": { "$type": "color", "$value": "{brand.runtime-red}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-7)" } } },
270
+ "categorical-8": { "$type": "color", "$value": "{brand.signal-yellow}", "$extensions": { "scopes": ["FRAME_FILL", "SHAPE_FILL"], "codeSyntax": { "WEB": "var(--categorical-8)" } } }
83
271
  }
84
272
  }
@@ -5,3 +5,9 @@ Applied layout and design patterns for marketing website page types.
5
5
  | Pattern | For | Base layout |
6
6
  |---------|-----|-------------|
7
7
  | [marketing-pages.md](./marketing-pages.md) | Landing pages, pricing, features, case studies | Horizontal navigation |
8
+
9
+ > **Pattern model (later cut):** These patterns will adopt the
10
+ > [outcome-framed pattern model](../../../patterns/overview.md) in a later cut, splitting page types into
11
+ > individual patterns and linking shared concepts. The marketing case study will then implement the
12
+ > shared [describe a case study](../../../patterns/help-users/describe-a-case-study.md) concept. Existing
13
+ > files stay as-is for now.
@@ -10,6 +10,20 @@ Marketing websites are public-facing pages designed to inform, engage, and conve
10
10
 
11
11
  ---
12
12
 
13
+ ## Colour Usage
14
+
15
+ Marketing pages are **core-dominant**: Tier 1 (EE Blue, Transform Teal, Tech Blue, Equal Ember,
16
+ Dark Data, The Cloud, White) for almost everything. Full-page background floods are restricted to
17
+ **Tech Blue or Dark Data** (or The Cloud / white) — EE Blue is used at block/component level only,
18
+ never as a full-page fill.
19
+
20
+ Extended-palette colours (Logic Lime, Equal Ember) appear only as small pull-outs — dark text on
21
+ them, never body text, never a full flood — and must stay within **~5–10% of a page's total
22
+ area**. See [colour-usage.md](../../design-language/colour-usage.md) for the full tier model and
23
+ [colours.md](../../design-language/colours.md) for values.
24
+
25
+ ---
26
+
13
27
  ## Layout Structure
14
28
 
15
29
  ```
@@ -5,6 +5,7 @@ Reference for Equal Experts web applications, dashboards, internal tools, and pr
5
5
  | File | Scope |
6
6
  |------|-------|
7
7
  | [design.md](./design.md) | Layout, navigation, product visual patterns |
8
+ | [colour-modes.md](./colour-modes.md) | Shadcn light/dark semantic colour mapping |
8
9
  | [accessibility.md](./accessibility.md) | Product accessibility requirements |
9
10
  | [emails.md](./emails.md) | Transactional / product email patterns |
10
11
  | [component-decision-tree.md](./component-decision-tree.md) | Which component source to use (Blocks → Kuat → shadcn → custom) |
@@ -355,35 +355,6 @@ Kuat components automatically respect `prefers-reduced-motion`. When building cu
355
355
 
356
356
  ---
357
357
 
358
- ## Testing Checklist
359
-
360
- ### Keyboard Testing
361
-
362
- - [ ] Can reach all interactive elements with Tab
363
- - [ ] Focus order is logical
364
- - [ ] Focus indicator is visible
365
- - [ ] Can activate buttons/links with Enter/Space
366
- - [ ] Can close modals with Escape
367
- - [ ] No keyboard traps
368
-
369
- ### Screen Reader Testing
370
-
371
- - [ ] Page has descriptive title
372
- - [ ] Headings create logical outline
373
- - [ ] Images have appropriate alt text
374
- - [ ] Links and buttons have clear labels
375
- - [ ] Form fields are labelled
376
- - [ ] Error messages are announced
377
-
378
- ### Visual Testing
379
-
380
- - [ ] Content visible at 200% zoom
381
- - [ ] Works in both orientations
382
- - [ ] Colour contrast meets requirements
383
- - [ ] Information not conveyed by colour alone
384
-
385
- ---
386
-
387
358
  ## Related Documentation
388
359
 
389
360
  - [Accessibility foundations](../../accessibility/accessibility.md) - Principles and guidelines
@@ -0,0 +1,58 @@
1
+ # Colour Modes (Light & Dark)
2
+
3
+ Shadcn/ui semantic-role mapping for Equal Experts product UI. Product UI runs on a 50–950
4
+ primitive scale with semantic role tokens (`background`, `foreground`, `primary`,
5
+ `primary-foreground`, …) that flip value between light and dark mode while the role name stays
6
+ fixed — components reference `bg-primary text-primary-foreground` and the mode handles the rest.
7
+
8
+ **Status:** the mapping below is agreed (June 2026 colours lockdown) and is the target for
9
+ `@equal-experts/kuat-core`'s light and dark themes and `token-contract.json` (published
10
+ downstream). Until that release ships, treat the recommended values as the authority for review
11
+ and design work; the shipped `--color-*` CSS custom properties are the implementation of record
12
+ once published — see [colours.md](../../design-language/colours.md) for the upstream token values
13
+ these resolve from.
14
+
15
+ ## Light mode
16
+
17
+ | Role | Value | Notes |
18
+ |------|-------|-------|
19
+ | `background` / `foreground` | White / Dark Data | 15.5:1 |
20
+ | `card` / `card-foreground` | White / Dark Data | 15.5:1 |
21
+ | `primary` / `primary-foreground` | EE Blue-600 `#1378ae` / White | EE Blue-600, not the brand -500, so white button text reaches AA (4.85:1); brand EE Blue `#1795d4` only passes for large/bold labels |
22
+ | `secondary` / `secondary-foreground` | Transform Teal-50 / Transform Teal-700 | 6.8:1 |
23
+ | `muted` / `muted-foreground` | The Cloud / Server Slate | 6.9:1 |
24
+ | `accent` / `accent-foreground` | EE Blue-50 / EE Blue-700 | 6.5:1 |
25
+ | `destructive` / `destructive-foreground` | Runtime Red / White | 7.8:1 |
26
+ | `ring` | EE Blue-600 | Meets 3:1 UI floor |
27
+ | `border` / `input` | Light neutral | Decorative divider — subtle by design, not a state indicator |
28
+ | `chart-1…5` | Tier 3 order | EE Blue, Equal Ember, Tech Blue, Logic Lime, Packet Plum |
29
+
30
+ ## Dark mode
31
+
32
+ | Role | Value | Notes |
33
+ |------|-------|-------|
34
+ | `background` / `foreground` | Dark Data / The Cloud | 14.2:1 |
35
+ | `card` / `card-foreground` | Dark surface / The Cloud | 12.5:1 |
36
+ | `primary` / `primary-foreground` | EE Blue (brand -500) / Dark Data | 4.6:1 — on dark surfaces, brand EE Blue itself passes with dark text |
37
+ | `secondary` / `secondary-foreground` | Tech Blue / White | 7.8:1 |
38
+ | `muted` / `muted-foreground` | Dark neutral / Edge Blue | 7.2:1 |
39
+ | `accent` / `accent-foreground` | Tech Blue-900 / Edge Blue | 10.7:1 |
40
+ | `destructive` / `destructive-foreground` | Runtime Red / White | 7.8:1 (unchanged from light mode) |
41
+ | `ring` | EE Blue (brand -500) | — |
42
+ | `border` / `input` | Dark neutral | — |
43
+ | `chart-1…5` | Tier 3 order, dark-adjusted | EE Blue, Equal Ember, Edge Blue, Logic Lime, Signal Yellow (Edge Blue/Signal Yellow swapped in for dark-surface contrast) |
44
+
45
+ ## Interaction states
46
+
47
+ Hover/active states use **Edge Blue** (the light end of the three-stage blue — see
48
+ [colour-usage.md](../../design-language/colour-usage.md#the-three-stage-blue)), not a raw opacity
49
+ tint of EE Blue. Interactive elements combine a tint-plus-darker-overlay treatment with an
50
+ affordance cue (border-radius, shape) — colour is never the only signal that something is
51
+ clickable.
52
+
53
+ ## Links vs primary actions
54
+
55
+ `primary` (buttons, key CTAs) uses EE Blue; text links and small text use the semantic `link`
56
+ token, not `primary` — see
57
+ [colour-usage.md](../../design-language/colour-usage.md#links-vs-buttons--the-accessible-blue) for
58
+ why these are deliberately different values.
@@ -206,38 +206,9 @@ import { cn } from "@/lib/utils"
206
206
 
207
207
  ---
208
208
 
209
- ## Testing Checklist
210
-
211
- Before shipping a component, verify:
212
-
213
- ### Functionality
214
- - [ ] All variants render correctly
215
- - [ ] Default props work
216
- - [ ] Custom className can be passed
217
- - [ ] Component ref is forwarded (React)
218
-
219
- ### Types
220
- - [ ] Props are properly typed
221
- - [ ] Types are exported
222
- - [ ] No TypeScript errors
223
-
224
- ### Accessibility
225
- - [ ] Keyboard navigation works
226
- - [ ] Screen reader announces correctly
227
- - [ ] Focus visible and logical
228
- - [ ] ARIA attributes present
229
-
230
- ### Styling
231
- - [ ] Uses design tokens
232
- - [ ] Works in light and dark mode
233
- - [ ] Responsive if applicable
234
- - [ ] Matches design specifications
235
-
236
- ### Edge Cases
237
- - [ ] Long text handled
238
- - [ ] Empty states handled
239
- - [ ] Loading states (if applicable)
240
- - [ ] Error states (if applicable)
209
+ ## Component testing
210
+
211
+ Component test strategy and per-component verification (functionality, types, accessibility, styling, edge cases) are **owned by the implementation repo** — `kuat-mono` and the published package — per the upstream/local ownership split (see the repo's `AGENTS.md`). This reference covers component **selection and structure**, not test procedure.
241
212
 
242
213
  ---
243
214
 
@@ -8,7 +8,7 @@ Stable IDs link patterns and checklists to per-component guides in the implement
8
8
 
9
9
  | ID | Display name | Source | Overlay / package doc | Upstream refs |
10
10
  |----|--------------|--------|----------------------|---------------|
11
- | `shadcn:button` | Button | shadcn CLI + `kuat-core` theme | `components/button.md` | [forms](./patterns/forms.md), [authentication](./patterns/authentication.md), [content/actions](./content/actions.md) |
11
+ | `shadcn:button` | Button | shadcn CLI + `kuat-core` theme | `components/button.md` | [complete a form](./patterns/complete-a-form.md), [sign in](./patterns/sign-in.md), [content/actions](./content/actions.md) |
12
12
  | `kuat:button-group` | ButtonGroup | `@equal-experts/kuat-react` / `kuat-vue` | `components/button-group.md` | [component-decision-tree](./component-decision-tree.md) |
13
13
  | `kuat:kuat-header` | KuatHeader | `@equal-experts/kuat-react` / `kuat-vue` block | `components/kuat-header.md` | [component-decision-tree](./component-decision-tree.md), [design](./design.md) |
14
14
 
@@ -90,32 +90,6 @@ Before writing, know:
90
90
 
91
91
  ---
92
92
 
93
- ## Product Content Checklist
94
-
95
- **Context and Timing:**
96
- - [ ] Content appears at right moment
97
- - [ ] Information directly relevant
98
- - [ ] Content disappears when not relevant
99
-
100
- **Clarity and Conciseness:**
101
- - [ ] Every word carries meaning
102
- - [ ] As short as possible while clear
103
- - [ ] Most important info first
104
-
105
- **Usability:**
106
- - [ ] Users can complete task without leaving for help
107
- - [ ] Button labels describe action clearly
108
- - [ ] Form labels clear and persistent
109
- - [ ] Error messages explain problem and fix
110
-
111
- **Accessibility:**
112
- - [ ] Accessible to screen readers
113
- - [ ] Labels connected to inputs
114
- - [ ] Error messages associated with fields
115
- - [ ] Logical heading hierarchy
116
-
117
- ---
118
-
119
93
  ## Related Documentation
120
94
 
121
95
  - [Voice and tone](../../../brand/voice-and-tone.md) - Voice, tone, style
@@ -1,10 +1,19 @@
1
1
  # Web Product Patterns
2
2
 
3
- Applied layout and design patterns for web-application page types.
3
+ Outcome-framed patterns for web-application page types, grouped by the user outcome they serve (see the
4
+ [patterns overview](../../../patterns/overview.md)). Each is **single-medium**: its concept and its
5
+ web-product implementation live together in one document.
6
+
7
+ ## Help users to…
8
+
9
+ | Pattern | For | Base layout |
10
+ |---------|-----|-------------|
11
+ | [Sign in](./sign-in.md) | Login, registration, password flows, MFA | Single column |
12
+ | [Complete a form](./complete-a-form.md) | Settings, multi-step forms, data entry | Varies |
13
+
14
+ ## Pages
4
15
 
5
16
  | Pattern | For | Base layout |
6
17
  |---------|-----|-------------|
7
- | [authentication.md](./authentication.md) | Login, registration, password flows, MFA | Single column |
8
- | [dashboards.md](./dashboards.md) | Analytics, data tables, metrics, reporting | Sidebar navigation |
9
- | [forms.md](./forms.md) | Settings, multi-step forms, data entry | Varies |
10
- | [documentation.md](./documentation.md) | Docs sites, knowledge bases, API reference | Sidebar + split |
18
+ | [Dashboard](./dashboard.md) | Analytics, data tables, metrics, reporting | Sidebar navigation |
19
+ | [Documentation](./documentation.md) | Docs sites, knowledge bases, API reference | Sidebar + split |