@cloudflare/kumo 1.17.0 → 1.18.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 (201) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/ai/USAGE.md +38 -32
  3. package/ai/component-registry.json +123 -120
  4. package/ai/component-registry.md +203 -63
  5. package/ai/schemas.ts +1 -1
  6. package/dist/.build-complete +1 -1
  7. package/dist/ai/schemas.d.ts +40 -48
  8. package/dist/ai/schemas.d.ts.map +1 -1
  9. package/dist/ai/schemas.js +2 -2
  10. package/dist/ai/schemas.js.map +1 -1
  11. package/dist/chunks/badge-dan90i0rzy4pwa1j.js +102 -0
  12. package/dist/chunks/badge-dan90i0rzy4pwa1j.js.map +1 -0
  13. package/dist/chunks/{banner-nz0eryqnz3qd86ln.js → banner-eiwcnk7ts21s3bnb.js} +4 -4
  14. package/dist/chunks/{banner-nz0eryqnz3qd86ln.js.map → banner-eiwcnk7ts21s3bnb.js.map} +1 -1
  15. package/dist/chunks/{breadcrumbs-cjgn3w4drahvqnuj.js → breadcrumbs-k39s28qx05vbxxth.js} +2 -2
  16. package/dist/chunks/{breadcrumbs-cjgn3w4drahvqnuj.js.map → breadcrumbs-k39s28qx05vbxxth.js.map} +1 -1
  17. package/dist/chunks/{button-odxi0hp4fvi5i2w3.js → button-cdxnqcgzwko8ooha.js} +15 -15
  18. package/dist/chunks/button-cdxnqcgzwko8ooha.js.map +1 -0
  19. package/dist/chunks/{checkbox-dx8x0rzv582yjv7n.js → checkbox-kt1uojk2f9e0d0h1.js} +13 -13
  20. package/dist/chunks/checkbox-kt1uojk2f9e0d0h1.js.map +1 -0
  21. package/dist/chunks/{clipboard-text-kyk51d1ze7zvdn4q.js → clipboard-text-vcbvmtne4zjk4b18.js} +4 -4
  22. package/dist/chunks/{clipboard-text-kyk51d1ze7zvdn4q.js.map → clipboard-text-vcbvmtne4zjk4b18.js.map} +1 -1
  23. package/dist/chunks/{code-liq1g6f5lhee305d.js → code-cz0w1y5z4h29a9eg.js} +18 -18
  24. package/dist/chunks/code-cz0w1y5z4h29a9eg.js.map +1 -0
  25. package/dist/chunks/{combobox-9fhjzprab46csmon.js → combobox-he2hd9e2ruknq5mp.js} +4 -4
  26. package/dist/chunks/{combobox-9fhjzprab46csmon.js.map → combobox-he2hd9e2ruknq5mp.js.map} +1 -1
  27. package/dist/chunks/{command-palette-kenx2bbdzd4kpx36.js → command-palette-jc1w07jwakxvj23a.js} +4 -4
  28. package/dist/chunks/{command-palette-kenx2bbdzd4kpx36.js.map → command-palette-jc1w07jwakxvj23a.js.map} +1 -1
  29. package/dist/chunks/{dialog-e05ysa8t2fklw065.js → dialog-oqh8l3l3zutpibxx.js} +3 -3
  30. package/dist/chunks/{dialog-e05ysa8t2fklw065.js.map → dialog-oqh8l3l3zutpibxx.js.map} +1 -1
  31. package/dist/chunks/{dropdown-g587px7zv3ssaxr4.js → dropdown-ncwhcd912vmone8k.js} +2 -2
  32. package/dist/chunks/{dropdown-g587px7zv3ssaxr4.js.map → dropdown-ncwhcd912vmone8k.js.map} +1 -1
  33. package/dist/chunks/{empty-fuz1un7r7mbz0kim.js → empty-cj898km1r8xwuw44.js} +2 -2
  34. package/dist/chunks/{empty-fuz1un7r7mbz0kim.js.map → empty-cj898km1r8xwuw44.js.map} +1 -1
  35. package/dist/chunks/{field-fq504lyu7ttsh5m9.js → field-krp6z6vfbkrvufz2.js} +3 -3
  36. package/dist/chunks/{field-fq504lyu7ttsh5m9.js.map → field-krp6z6vfbkrvufz2.js.map} +1 -1
  37. package/dist/chunks/input-area-no30c09udyjxshu5.js +78 -0
  38. package/dist/chunks/input-area-no30c09udyjxshu5.js.map +1 -0
  39. package/dist/chunks/{input-group-hbebbyh8fo6aqydn.js → input-group-lxdd09p60cf27pe1.js} +26 -26
  40. package/dist/chunks/input-group-lxdd09p60cf27pe1.js.map +1 -0
  41. package/dist/chunks/{input-kvhyo3p4859bexvx.js → input-h48k3uagzrgb98au.js} +40 -36
  42. package/dist/chunks/input-h48k3uagzrgb98au.js.map +1 -0
  43. package/dist/chunks/{label-j9owppbgnn35mebg.js → label-latndvb1ngem7we8.js} +3 -3
  44. package/dist/chunks/{label-j9owppbgnn35mebg.js.map → label-latndvb1ngem7we8.js.map} +1 -1
  45. package/dist/chunks/{link-hmmf3k1xn6rm72rt.js → link-hn5ejal7nhh0o0b4.js} +2 -2
  46. package/dist/chunks/{link-hmmf3k1xn6rm72rt.js.map → link-hn5ejal7nhh0o0b4.js.map} +1 -1
  47. package/dist/chunks/{loader-m5wfmqwgucrr4i5v.js → loader-hr2w7cpqeev3p3vl.js} +9 -6
  48. package/dist/chunks/loader-hr2w7cpqeev3p3vl.js.map +1 -0
  49. package/dist/chunks/{menubar-abojnm0uwjuni8ok.js → menubar-f1pilzooe5mue7c4.js} +2 -2
  50. package/dist/chunks/{menubar-abojnm0uwjuni8ok.js.map → menubar-f1pilzooe5mue7c4.js.map} +1 -1
  51. package/dist/chunks/{meter-i84dte2f82qmvn7y.js → meter-gfa1hz9fhjnvx784.js} +2 -2
  52. package/dist/chunks/{meter-i84dte2f82qmvn7y.js.map → meter-gfa1hz9fhjnvx784.js.map} +1 -1
  53. package/dist/chunks/pagination-cu5lm6p5dxuycta4.js +243 -0
  54. package/dist/chunks/pagination-cu5lm6p5dxuycta4.js.map +1 -0
  55. package/dist/chunks/{popover-i951xjcgezeqr4iv.js → popover-h300w4vit0s2ayej.js} +7 -7
  56. package/dist/chunks/{popover-i951xjcgezeqr4iv.js.map → popover-h300w4vit0s2ayej.js.map} +1 -1
  57. package/dist/chunks/{radio-l2vkcue40d84fmo1.js → radio-jouttv89lbvhs55r.js} +37 -37
  58. package/dist/chunks/radio-jouttv89lbvhs55r.js.map +1 -0
  59. package/dist/chunks/select-kva5ru5f673kah1m.js +179 -0
  60. package/dist/chunks/select-kva5ru5f673kah1m.js.map +1 -0
  61. package/dist/chunks/{sensitive-input-kznmknpp5h1grc6k.js → sensitive-input-hd4tpqkzifad1yca.js} +34 -34
  62. package/dist/chunks/{sensitive-input-kznmknpp5h1grc6k.js.map → sensitive-input-hd4tpqkzifad1yca.js.map} +1 -1
  63. package/dist/chunks/{sidebar-jepeq7gaf4issuw6.js → sidebar-hljy3ssm8itc0ucx.js} +5 -5
  64. package/dist/chunks/sidebar-hljy3ssm8itc0ucx.js.map +1 -0
  65. package/dist/chunks/{surface-blo81kgy9g0sexgm.js → surface-cilvbyhmyujz1bee.js} +2 -2
  66. package/dist/chunks/{surface-blo81kgy9g0sexgm.js.map → surface-cilvbyhmyujz1bee.js.map} +1 -1
  67. package/dist/chunks/{switch-i0zwcp3wq6vsxm1c.js → switch-ihaydbzem62bey4p.js} +106 -104
  68. package/dist/chunks/switch-ihaydbzem62bey4p.js.map +1 -0
  69. package/dist/chunks/{table-nrcw19tlpduayukl.js → table-inweecadl3her7pd.js} +9 -9
  70. package/dist/chunks/{table-nrcw19tlpduayukl.js.map → table-inweecadl3her7pd.js.map} +1 -1
  71. package/dist/chunks/{tabs-bw92jb303zxw7w4f.js → tabs-e7eh7l3mpk3xgmwq.js} +15 -15
  72. package/dist/chunks/{tabs-bw92jb303zxw7w4f.js.map → tabs-e7eh7l3mpk3xgmwq.js.map} +1 -1
  73. package/dist/chunks/{toast-lrnwby56drs7vtae.js → toast-bpz6iaq54u9jmuu8.js} +30 -30
  74. package/dist/chunks/{toast-lrnwby56drs7vtae.js.map → toast-bpz6iaq54u9jmuu8.js.map} +1 -1
  75. package/dist/chunks/{tooltip-cit9ltlxfuhwctuj.js → tooltip-belkznz8t8333h5f.js} +20 -16
  76. package/dist/chunks/tooltip-belkznz8t8333h5f.js.map +1 -0
  77. package/dist/chunks/{vendor-base-ui-n30qblevnpk9cc5c.js → vendor-base-ui-k7bzesq81ie36nya.js} +34 -31
  78. package/dist/chunks/{vendor-base-ui-n30qblevnpk9cc5c.js.map → vendor-base-ui-k7bzesq81ie36nya.js.map} +1 -1
  79. package/dist/code.js +1 -1
  80. package/dist/components/badge.js +1 -1
  81. package/dist/components/banner.js +1 -1
  82. package/dist/components/breadcrumbs.js +1 -1
  83. package/dist/components/button.js +1 -1
  84. package/dist/components/checkbox.js +1 -1
  85. package/dist/components/clipboard-text.js +1 -1
  86. package/dist/components/code.js +1 -1
  87. package/dist/components/combobox.js +1 -1
  88. package/dist/components/command-palette.js +1 -1
  89. package/dist/components/dialog.js +1 -1
  90. package/dist/components/dropdown.js +1 -1
  91. package/dist/components/empty.js +1 -1
  92. package/dist/components/field.js +1 -1
  93. package/dist/components/input.js +3 -3
  94. package/dist/components/label.js +1 -1
  95. package/dist/components/link.js +1 -1
  96. package/dist/components/loader.js +1 -1
  97. package/dist/components/menubar.js +1 -1
  98. package/dist/components/meter.js +1 -1
  99. package/dist/components/pagination.js +1 -1
  100. package/dist/components/popover.js +1 -1
  101. package/dist/components/radio.js +1 -1
  102. package/dist/components/select.js +1 -1
  103. package/dist/components/sensitive-input.js +1 -1
  104. package/dist/components/sidebar.js +1 -1
  105. package/dist/components/surface.js +1 -1
  106. package/dist/components/switch.js +1 -1
  107. package/dist/components/table.js +1 -1
  108. package/dist/components/tabs.js +1 -1
  109. package/dist/components/toast.js +2 -2
  110. package/dist/components/tooltip.js +1 -1
  111. package/dist/index.js +38 -38
  112. package/dist/primitives/accordion.js +1 -1
  113. package/dist/primitives/alert-dialog.js +1 -1
  114. package/dist/primitives/autocomplete.js +1 -1
  115. package/dist/primitives/avatar.js +1 -1
  116. package/dist/primitives/button.js +1 -1
  117. package/dist/primitives/checkbox-group.js +1 -1
  118. package/dist/primitives/checkbox.js +1 -1
  119. package/dist/primitives/collapsible.js +1 -1
  120. package/dist/primitives/combobox.js +1 -1
  121. package/dist/primitives/context-menu.js +1 -1
  122. package/dist/primitives/csp-provider.js +1 -1
  123. package/dist/primitives/dialog.js +1 -1
  124. package/dist/primitives/direction-provider.js +1 -1
  125. package/dist/primitives/drawer.js +1 -1
  126. package/dist/primitives/field.js +1 -1
  127. package/dist/primitives/fieldset.js +1 -1
  128. package/dist/primitives/form.js +1 -1
  129. package/dist/primitives/input.js +1 -1
  130. package/dist/primitives/menu.js +1 -1
  131. package/dist/primitives/menubar.js +1 -1
  132. package/dist/primitives/meter.js +1 -1
  133. package/dist/primitives/navigation-menu.js +1 -1
  134. package/dist/primitives/number-field.js +1 -1
  135. package/dist/primitives/popover.js +1 -1
  136. package/dist/primitives/preview-card.js +1 -1
  137. package/dist/primitives/progress.js +1 -1
  138. package/dist/primitives/radio-group.js +1 -1
  139. package/dist/primitives/radio.js +1 -1
  140. package/dist/primitives/scroll-area.js +1 -1
  141. package/dist/primitives/select.js +1 -1
  142. package/dist/primitives/separator.js +1 -1
  143. package/dist/primitives/slider.js +1 -1
  144. package/dist/primitives/switch.js +1 -1
  145. package/dist/primitives/tabs.js +1 -1
  146. package/dist/primitives/toast.js +1 -1
  147. package/dist/primitives/toggle-group.js +1 -1
  148. package/dist/primitives/toggle.js +1 -1
  149. package/dist/primitives/toolbar.js +1 -1
  150. package/dist/primitives/tooltip.js +1 -1
  151. package/dist/primitives.js +1 -1
  152. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  153. package/dist/scripts/theme-generator/config.js +29 -110
  154. package/dist/scripts/theme-generator/config.js.map +1 -1
  155. package/dist/src/components/badge/badge.d.ts +61 -79
  156. package/dist/src/components/badge/badge.d.ts.map +1 -1
  157. package/dist/src/components/banner/banner.d.ts +3 -3
  158. package/dist/src/components/button/button.d.ts +2 -2
  159. package/dist/src/components/checkbox/checkbox.d.ts +1 -1
  160. package/dist/src/components/code/code.d.ts.map +1 -1
  161. package/dist/src/components/input/input-area.d.ts.map +1 -1
  162. package/dist/src/components/input/input.d.ts +1 -2
  163. package/dist/src/components/input/input.d.ts.map +1 -1
  164. package/dist/src/components/loader/loader.d.ts +7 -1
  165. package/dist/src/components/loader/loader.d.ts.map +1 -1
  166. package/dist/src/components/pagination/pagination.d.ts +11 -1
  167. package/dist/src/components/pagination/pagination.d.ts.map +1 -1
  168. package/dist/src/components/radio/radio.d.ts +1 -1
  169. package/dist/src/components/select/select.d.ts +66 -2
  170. package/dist/src/components/select/select.d.ts.map +1 -1
  171. package/dist/src/components/sensitive-input/sensitive-input.d.ts +1 -1
  172. package/dist/src/components/switch/switch.d.ts.map +1 -1
  173. package/dist/src/components/toast/toast.d.ts +1 -1
  174. package/dist/src/components/tooltip/tooltip.d.ts +11 -1
  175. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
  176. package/dist/styles/kumo-binding.css +3 -0
  177. package/dist/styles/kumo-standalone.css +1 -1
  178. package/dist/styles/theme-fedramp.css +3 -3
  179. package/dist/styles/theme-kumo.css +61 -122
  180. package/package.json +1 -1
  181. package/scripts/component-registry/index.test.ts +4 -4
  182. package/scripts/component-registry/metadata.ts +3 -3
  183. package/scripts/theme-generator/config.ts +29 -110
  184. package/dist/chunks/badge-n80t3z8u9ttlxi20.js +0 -120
  185. package/dist/chunks/badge-n80t3z8u9ttlxi20.js.map +0 -1
  186. package/dist/chunks/button-odxi0hp4fvi5i2w3.js.map +0 -1
  187. package/dist/chunks/checkbox-dx8x0rzv582yjv7n.js.map +0 -1
  188. package/dist/chunks/code-liq1g6f5lhee305d.js.map +0 -1
  189. package/dist/chunks/input-area-nq40szg9110on89c.js +0 -74
  190. package/dist/chunks/input-area-nq40szg9110on89c.js.map +0 -1
  191. package/dist/chunks/input-group-hbebbyh8fo6aqydn.js.map +0 -1
  192. package/dist/chunks/input-kvhyo3p4859bexvx.js.map +0 -1
  193. package/dist/chunks/loader-m5wfmqwgucrr4i5v.js.map +0 -1
  194. package/dist/chunks/pagination-pbd7qqik97ac0l7m.js +0 -224
  195. package/dist/chunks/pagination-pbd7qqik97ac0l7m.js.map +0 -1
  196. package/dist/chunks/radio-l2vkcue40d84fmo1.js.map +0 -1
  197. package/dist/chunks/select-paedwa3nlhpq82ua.js +0 -132
  198. package/dist/chunks/select-paedwa3nlhpq82ua.js.map +0 -1
  199. package/dist/chunks/sidebar-jepeq7gaf4issuw6.js.map +0 -1
  200. package/dist/chunks/switch-i0zwcp3wq6vsxm1c.js.map +0 -1
  201. package/dist/chunks/tooltip-cit9ltlxfuhwctuj.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # @cloudflare/kumo
2
2
 
3
+ ## 1.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b1e51a8: Add Enter key navigation to Pagination page number input and new `pageSelector` prop for dropdown mode
8
+ - The page number input in `Pagination.Controls` now navigates on Enter key press (previously only on blur)
9
+ - New `pageSelector` prop on `Pagination.Controls`: set to `"dropdown"` to render a Select dropdown instead of a text input for page selection
10
+
11
+ - e676f0b: Add disabled option support, groups, group labels, and separators to Select
12
+ - `Select.Option` now accepts `disabled` and `className` props
13
+ - New `Select.Group` and `Select.GroupLabel` sub-components for organizing options under labeled headers
14
+ - New `Select.Separator` sub-component for visual dividers between groups
15
+ - The `items` object-map prop now accepts `SelectItemDescriptor` values with `disabled` metadata
16
+
17
+ - a685953: Expose `delay` and `closeDelay` props on Tooltip component to control open and close timing. These props are forwarded to the underlying Base UI Trigger component.
18
+
19
+ ### Patch Changes
20
+
21
+ - dacf445: Input and InputArea now automatically apply error styling when the `error` prop is truthy. You no longer need to set `variant="error"` separately - just pass an error message and the styling is applied automatically. The `variant="error"` prop is now deprecated but still works for backwards compatibility.
22
+ - 44c26f5: Adjust semantic tint usage for status/error ring styles across core form and feedback components.
23
+ - Update background styles in `Badge` and `Banner` components to use `*-tint` tokens.
24
+ - Update `kumo-danger` to a darker token to improve a11y contrast.
25
+ - Update error ring styling in form components to use semantic tokens (now darker with token swap).
26
+ - Removed `text-color-badge-red-subtle` token in replacement of the `danger` token.
27
+ - Update theme generator color mappings used by these tints to improve visual consistency.
28
+
29
+ - 2bb8628: Fix CodeBlock crash when an unsupported `lang` value is passed at runtime. The `codeVariants()` function now uses optional chaining with a nullish coalescing fallback to the default language, matching the defensive pattern already used by `switchVariants()` and `badgeVariants()`.
30
+ - e8bcf6f: fix(select): use ring-kumo-hairline token in Select popup (missed in PR #355)
31
+ - c3beded: Fix Select popup scrolling and height behavior; align popup/list structure with Base UI. Split popup into frame (Popup) and scroll container (List) to match Combobox pattern and fix touch scroll on long lists.
32
+ - 4a2fb02: fix(loader): add ARIA attributes for screen reader accessibility
33
+
34
+ Added `role="status"` and `aria-label="Loading"` to the Loader SVG component to make it accessible to screen readers. This resolves a WCAG 2.1 SC 4.1.3 (Status Messages) violation where assistive technology users received no indication that content was loading.
35
+
36
+ - 5e4c7b1: Refine badge semantics/fill styling and banner tone updates
37
+ - Rework `Badge` variant model to prioritize semantic variants (`primary`, `secondary`, `error`, `warning`, `success`, `info`) with updated descriptions and `primary` as default.
38
+ - Keep token color variants for product-specific use cases while updating class mappings so semantic and token variants are distinct.
39
+ - Slight updates to token color variants to meet a11y contrast requirements.
40
+ - Update token color variants by replacing `yellow` with `purple` since `yellow` doesn't meet a11y contrast requirements, and keeping docs/demo examples in sync.
41
+ - Update badge docs demos/content to focus on primary semantic badges and a consolidated "other variants" section.
42
+ - Adjust banner variant surfaces (`default`, `alert`, `error`) to stronger tinted backgrounds and borders.
43
+ - Update theme generator badge/semantic token mappings and regenerate `theme-kumo.css` to match the new badge color system.
44
+
45
+ - 6458fae: Fix Switch label click not toggling when a custom `id` prop is provided
46
+
47
+ The `id` was not being forwarded to Base UI's `Switch.Root`, causing a mismatch between the label's `htmlFor` and the button's actual `id`.
48
+
49
+ - cf6b917: Align semantic token documentation and docs presentation updates.
50
+ - Update `colors.mdx` token documentation structure.
51
+ - Replaced `kumo-ring` with `kumo-hairline` for border/ring colors and all its instances in kumo components and docs.
52
+ - Sync `packages/kumo/ai/USAGE.md` token reference categories and descriptions with the docs token guide.
53
+ - Adjust the typo in the recessed dark token value in theme generator config and regenerate `theme-kumo.css`.
54
+ - Updated `kumo-fill-hover` token value from `neutral-700` to `neutral-800`
55
+
3
56
  ## 1.17.0
4
57
 
5
58
  ### Minor Changes
package/ai/USAGE.md CHANGED
@@ -73,46 +73,52 @@ import { Button, Input, Dialog } from "@cloudflare/kumo";
73
73
 
74
74
  ## Semantic Token Reference
75
75
 
76
+ ### Surface Hierarchy
77
+ | Token | Purpose |
78
+ |-------|---------|
79
+ | `bg-kumo-canvas` | The outermost page background — sits behind everything |
80
+ | `bg-kumo-base` | Default component background |
81
+ | `bg-kumo-elevated` | Slightly elevated surface, e.g. `LayerCard.Secondary` |
82
+ | `bg-kumo-recessed` | Recessed surface with a subtly darker fill, e.g. segmented `Tabs` background |
83
+ | `bg-kumo-tint` | Subtle tinted background for tables or hover states |
84
+ | `bg-kumo-contrast` | High-contrast, inverted background |
85
+
86
+ ### Brand
87
+ | Token | Purpose |
88
+ |-------|---------|
89
+ | `bg-kumo-brand` | Primary brand background |
90
+ | `bg-kumo-brand-hover` | Hover state for brand backgrounds |
91
+
92
+ ### Semantic Status Colors
93
+ | Token | Purpose |
94
+ |-------|---------|
95
+ | `bg-kumo-info` | Info indicator (icon, dot, bar) |
96
+ | `bg-kumo-success` | Success indicator |
97
+ | `bg-kumo-warning` | Warning indicator |
98
+ | `bg-kumo-danger` | Error/destructive indicator |
99
+
100
+ Use the solid token on icons, status dots, and progress fills. Banners and badges use the solid fills with a reduced opacity.
101
+
76
102
  ### Text Colors
77
103
  | Token | Purpose |
78
104
  |-------|---------|
79
- | `text-kumo-default` | Primary text |
80
- | `text-kumo-inverse` | Inverse text (on dark backgrounds) |
81
- | `text-kumo-strong` | Secondary/muted-strong text |
82
- | `text-kumo-subtle` | Muted/placeholder text |
105
+ | `text-kumo-default` | Primary body text |
106
+ | `text-kumo-strong` | Secondary text with slightly less contrast than default |
107
+ | `text-kumo-subtle` | Muted text for descriptions, captions, or secondary labels |
108
+ | `text-kumo-inactive` | Disabled or inactive text |
109
+ | `text-kumo-placeholder` | Placeholder text in inputs |
110
+ | `text-kumo-inverse` | Text intended for use on high-contrast or inverted backgrounds |
83
111
  | `text-kumo-link` | Link text |
112
+ | `text-kumo-info` | Info-colored text |
113
+ | `text-kumo-success` | Success-colored text |
114
+ | `text-kumo-warning` | Warning-colored text |
84
115
  | `text-kumo-danger` | Error/destructive text |
85
- | `text-kumo-success` | Success text |
86
- | `text-kumo-warning` | Warning text |
87
- | `text-kumo-brand` | Brand-colored text |
88
116
 
89
- ### Background Colors
90
- | Token | Purpose |
91
- |-------|---------|
92
- | `bg-kumo-surface` | Page background |
93
- | `bg-kumo-base` | Component background |
94
- | `bg-kumo-elevated` | Slightly elevated surface |
95
- | `bg-kumo-recessed` | Recessed surface with a darker colour |
96
- | `bg-kumo-overlay` | Overlay/hover background |
97
- | `bg-kumo-contrast` | High-contrast background (inverted) |
98
- | `bg-kumo-control` | Form control background |
99
- | `bg-kumo-fill` | Muted fill (borders, badges) |
100
- | `bg-kumo-fill-hover` | Hover state for fills |
101
- | `bg-kumo-tint` | Subtle tinted background |
102
- | `bg-kumo-interact` | Interactive element background |
103
- | `bg-kumo-brand` | Brand primary background |
104
- | `bg-kumo-brand-hover` | Brand hover background |
105
- | `bg-kumo-danger` | Error/destructive background |
106
- | `bg-kumo-success` | Success background |
107
- | `bg-kumo-warning` | Warning background |
108
-
109
- ### Border/Ring Colors
117
+ ### Borders & Rings
110
118
  | Token | Purpose |
111
119
  |-------|---------|
112
- | `border-kumo-fill` | Default border |
113
- | `border-kumo-line` | Subtle separator line |
114
- | `ring-kumo-line` | Default ring (input borders) |
115
- | `ring-kumo-ring` | Focus ring |
120
+ | `kumo-hairline` | A border/ring color to distinguish between flat surfaces where no shadow is present (i.e. `LayerCard`). |
121
+ | `kumo-line` | A thicker border/ring color that defines the edge of an elevated surface alongside a shadow. |
116
122
 
117
123
  ## Icons
118
124