@visitwonders/assembly 0.15.0 → 0.16.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 (247) hide show
  1. package/README.md +8 -0
  2. package/declarations/action/button-group.d.ts.map +1 -1
  3. package/declarations/action/button.d.ts.map +1 -1
  4. package/declarations/action/index.d.ts.map +1 -1
  5. package/declarations/action/link.d.ts.map +1 -1
  6. package/declarations/data/index.d.ts +1 -0
  7. package/declarations/data/index.d.ts.map +1 -1
  8. package/declarations/data/pagination-cluster.d.ts +21 -0
  9. package/declarations/data/pagination-cluster.d.ts.map +1 -0
  10. package/declarations/data/pagination.d.ts +103 -0
  11. package/declarations/data/pagination.d.ts.map +1 -0
  12. package/declarations/data/sortable-list.d.ts.map +1 -1
  13. package/declarations/data/table.d.ts.map +1 -1
  14. package/declarations/form/calendar.d.ts.map +1 -1
  15. package/declarations/form/checkbox-group.d.ts.map +1 -1
  16. package/declarations/form/checkbox.d.ts.map +1 -1
  17. package/declarations/form/combobox-field.d.ts.map +1 -1
  18. package/declarations/form/combobox.d.ts.map +1 -1
  19. package/declarations/form/control.d.ts.map +1 -1
  20. package/declarations/form/country-select-field.d.ts.map +1 -1
  21. package/declarations/form/country-select.d.ts.map +1 -1
  22. package/declarations/form/date-picker-field.d.ts.map +1 -1
  23. package/declarations/form/date-picker.d.ts.map +1 -1
  24. package/declarations/form/date-range-picker-field.d.ts.map +1 -1
  25. package/declarations/form/date-range-picker.d.ts.map +1 -1
  26. package/declarations/form/display-field.d.ts.map +1 -1
  27. package/declarations/form/error-message.d.ts.map +1 -1
  28. package/declarations/form/field.d.ts.map +1 -1
  29. package/declarations/form/fieldset.d.ts.map +1 -1
  30. package/declarations/form/form.d.ts.map +1 -1
  31. package/declarations/form/help-text.d.ts.map +1 -1
  32. package/declarations/form/index.d.ts.map +1 -1
  33. package/declarations/form/input.d.ts.map +1 -1
  34. package/declarations/form/label.d.ts.map +1 -1
  35. package/declarations/form/listbox.d.ts.map +1 -1
  36. package/declarations/form/money-field.d.ts.map +1 -1
  37. package/declarations/form/multi-combobox-field.d.ts.map +1 -1
  38. package/declarations/form/multi-combobox.d.ts.map +1 -1
  39. package/declarations/form/multi-select.d.ts.map +1 -1
  40. package/declarations/form/number-field.d.ts.map +1 -1
  41. package/declarations/form/option-group.d.ts.map +1 -1
  42. package/declarations/form/option.d.ts.map +1 -1
  43. package/declarations/form/radio-group.d.ts.map +1 -1
  44. package/declarations/form/radio.d.ts.map +1 -1
  45. package/declarations/form/search-input.d.ts.map +1 -1
  46. package/declarations/form/select-field.d.ts.map +1 -1
  47. package/declarations/form/select.d.ts.map +1 -1
  48. package/declarations/form/text-field.d.ts.map +1 -1
  49. package/declarations/form/textarea.d.ts.map +1 -1
  50. package/declarations/form/time-picker-field.d.ts.map +1 -1
  51. package/declarations/form/time-picker.d.ts.map +1 -1
  52. package/declarations/form/toggle-field.d.ts.map +1 -1
  53. package/declarations/form/toggle-group.d.ts.map +1 -1
  54. package/declarations/form/toggle.d.ts.map +1 -1
  55. package/declarations/layout/divider.d.ts +1 -1
  56. package/declarations/layout/divider.d.ts.map +1 -1
  57. package/declarations/layout/grid-item.d.ts.map +1 -1
  58. package/declarations/layout/grid.d.ts.map +1 -1
  59. package/declarations/layout/h-stack.d.ts.map +1 -1
  60. package/declarations/layout/index.d.ts.map +1 -1
  61. package/declarations/layout/panel.d.ts.map +1 -1
  62. package/declarations/layout/stack.d.ts +2 -2
  63. package/declarations/layout/stack.d.ts.map +1 -1
  64. package/declarations/layout/v-stack.d.ts.map +1 -1
  65. package/declarations/media/icon.d.ts.map +1 -1
  66. package/declarations/media/image.d.ts +1 -1
  67. package/declarations/media/image.d.ts.map +1 -1
  68. package/declarations/media/index.d.ts.map +1 -1
  69. package/declarations/overlay/blanket.d.ts.map +1 -1
  70. package/declarations/overlay/drawer.d.ts.map +1 -1
  71. package/declarations/overlay/index.d.ts.map +1 -1
  72. package/declarations/overlay/modal.d.ts.map +1 -1
  73. package/declarations/overlay/popover.d.ts.map +1 -1
  74. package/declarations/overlay/toast.d.ts.map +1 -1
  75. package/declarations/overlay/tooltip.d.ts.map +1 -1
  76. package/declarations/status/badge.d.ts.map +1 -1
  77. package/declarations/status/index.d.ts.map +1 -1
  78. package/declarations/status/skeleton-avatar.d.ts.map +1 -1
  79. package/declarations/status/skeleton-button.d.ts.map +1 -1
  80. package/declarations/status/skeleton-image.d.ts.map +1 -1
  81. package/declarations/status/skeleton-text.d.ts.map +1 -1
  82. package/declarations/status/skeleton.d.ts.map +1 -1
  83. package/declarations/status/tag.d.ts.map +1 -1
  84. package/declarations/typography/heading.d.ts +16 -29
  85. package/declarations/typography/heading.d.ts.map +1 -1
  86. package/declarations/typography/index.d.ts.map +1 -1
  87. package/declarations/typography/text.d.ts +1 -1
  88. package/declarations/typography/text.d.ts.map +1 -1
  89. package/declarations/ui/index.d.ts.map +1 -1
  90. package/dist/_app_/data/pagination-cluster.js +1 -0
  91. package/dist/_app_/data/pagination.js +1 -0
  92. package/dist/action/button.css +30 -19
  93. package/dist/data/index.js +1 -0
  94. package/dist/data/index.js.map +1 -1
  95. package/dist/data/pagination-cluster.js +106 -0
  96. package/dist/data/pagination-cluster.js.map +1 -0
  97. package/dist/data/pagination.css +216 -0
  98. package/dist/data/pagination.js +287 -0
  99. package/dist/data/pagination.js.map +1 -0
  100. package/dist/form/calendar.css +6 -6
  101. package/dist/form/checkbox.css +25 -24
  102. package/dist/form/date-range-picker.css +1 -1
  103. package/dist/form/input.css +16 -15
  104. package/dist/form/multi-combobox.css +2 -2
  105. package/dist/form/multi-select.css +2 -2
  106. package/dist/form/radio.css +19 -16
  107. package/dist/form/toggle.css +4 -2
  108. package/dist/status/tag.css +2 -2
  109. package/dist/styles/semantic/colors.css +31 -5
  110. package/dist/styles/semantic/component.css +154 -0
  111. package/dist/styles/semantic/effects.css +9 -3
  112. package/dist/styles/semantic/typography.css +60 -0
  113. package/dist/styles/tokens.css +3 -0
  114. package/dist/styles.css +258 -8
  115. package/dist/typography/{heading-css-726c4c3109f2b741657733e1ba103c67.css → heading-css-eca8b0ae619f69fcbe9535f4700db421.css} +35 -3
  116. package/dist/typography/heading.js +34 -39
  117. package/dist/typography/{text-css-935f55e9cd74b06a5ce61330c4c79ef9.css → text-css-a4c06f76a813db6b613c4f3c22e6bb85.css} +23 -9
  118. package/dist/typography/text.js +1 -1
  119. package/package.json +7 -7
  120. package/declarations/components/form/checkbox.d.ts +0 -0
  121. package/declarations/components/form/checkbox.d.ts.map +0 -1
  122. package/declarations/components/form/control.d.ts +0 -0
  123. package/declarations/components/form/control.d.ts.map +0 -1
  124. package/declarations/components/form/error-message.d.ts +0 -0
  125. package/declarations/components/form/error-message.d.ts.map +0 -1
  126. package/declarations/components/form/field.d.ts +0 -0
  127. package/declarations/components/form/field.d.ts.map +0 -1
  128. package/declarations/components/form/form.d.ts +0 -0
  129. package/declarations/components/form/form.d.ts.map +0 -1
  130. package/declarations/components/form/help-text.d.ts +0 -0
  131. package/declarations/components/form/help-text.d.ts.map +0 -1
  132. package/declarations/components/form/index.d.ts +0 -0
  133. package/declarations/components/form/index.d.ts.map +0 -1
  134. package/declarations/components/form/input.d.ts +0 -0
  135. package/declarations/components/form/input.d.ts.map +0 -1
  136. package/declarations/components/form/label.d.ts +0 -0
  137. package/declarations/components/form/label.d.ts.map +0 -1
  138. package/declarations/components/form/radio-group.d.ts +0 -0
  139. package/declarations/components/form/radio-group.d.ts.map +0 -1
  140. package/declarations/components/form/radio.d.ts +0 -0
  141. package/declarations/components/form/radio.d.ts.map +0 -1
  142. package/declarations/components/form/search-input.d.ts +0 -0
  143. package/declarations/components/form/search-input.d.ts.map +0 -1
  144. package/declarations/components/form/select.d.ts +0 -0
  145. package/declarations/components/form/select.d.ts.map +0 -1
  146. package/declarations/components/form/test.d.ts +0 -0
  147. package/declarations/components/form/test.d.ts.map +0 -1
  148. package/declarations/components/form/textarea.d.ts +0 -0
  149. package/declarations/components/form/textarea.d.ts.map +0 -1
  150. package/declarations/components/form/toggle.d.ts +0 -0
  151. package/declarations/components/form/toggle.d.ts.map +0 -1
  152. package/declarations/components/primitives/grid-item.d.ts +0 -0
  153. package/declarations/components/primitives/grid-item.d.ts.map +0 -1
  154. package/declarations/components/primitives/grid.d.ts +0 -0
  155. package/declarations/components/primitives/grid.d.ts.map +0 -1
  156. package/declarations/components/primitives/h-stack.d.ts +0 -0
  157. package/declarations/components/primitives/h-stack.d.ts.map +0 -1
  158. package/declarations/components/primitives/heading.d.ts +0 -0
  159. package/declarations/components/primitives/heading.d.ts.map +0 -1
  160. package/declarations/components/primitives/image.d.ts +0 -0
  161. package/declarations/components/primitives/image.d.ts.map +0 -1
  162. package/declarations/components/primitives/index.d.ts +0 -0
  163. package/declarations/components/primitives/index.d.ts.map +0 -1
  164. package/declarations/components/primitives/link.d.ts +0 -0
  165. package/declarations/components/primitives/link.d.ts.map +0 -1
  166. package/declarations/components/primitives/stack.d.ts +0 -0
  167. package/declarations/components/primitives/stack.d.ts.map +0 -1
  168. package/declarations/components/primitives/text.d.ts +0 -0
  169. package/declarations/components/primitives/text.d.ts.map +0 -1
  170. package/declarations/components/primitives/v-stack.d.ts +0 -0
  171. package/declarations/components/primitives/v-stack.d.ts.map +0 -1
  172. package/declarations/components/ui/badge.d.ts +0 -0
  173. package/declarations/components/ui/badge.d.ts.map +0 -1
  174. package/declarations/components/ui/button.d.ts +0 -0
  175. package/declarations/components/ui/button.d.ts.map +0 -1
  176. package/declarations/components/ui/card.d.ts +0 -0
  177. package/declarations/components/ui/card.d.ts.map +0 -1
  178. package/declarations/components/ui/description-list.d.ts +0 -0
  179. package/declarations/components/ui/description-list.d.ts.map +0 -1
  180. package/declarations/components/ui/drawer.d.ts +0 -0
  181. package/declarations/components/ui/drawer.d.ts.map +0 -1
  182. package/declarations/components/ui/icon-button.d.ts +0 -0
  183. package/declarations/components/ui/icon-button.d.ts.map +0 -1
  184. package/declarations/components/ui/icon.d.ts +0 -0
  185. package/declarations/components/ui/icon.d.ts.map +0 -1
  186. package/declarations/components/ui/index.d.ts +0 -0
  187. package/declarations/components/ui/index.d.ts.map +0 -1
  188. package/declarations/components/ui/modal.d.ts +0 -0
  189. package/declarations/components/ui/modal.d.ts.map +0 -1
  190. package/declarations/components/ui/page-header.d.ts +0 -0
  191. package/declarations/components/ui/page-header.d.ts.map +0 -1
  192. package/declarations/components/ui/skeleton-card.d.ts +0 -0
  193. package/declarations/components/ui/skeleton-card.d.ts.map +0 -1
  194. package/declarations/components/ui/skeleton-text.d.ts +0 -0
  195. package/declarations/components/ui/skeleton-text.d.ts.map +0 -1
  196. package/declarations/components/ui/skeleton.d.ts +0 -0
  197. package/declarations/components/ui/skeleton.d.ts.map +0 -1
  198. package/declarations/components/ui/spinner.d.ts +0 -0
  199. package/declarations/components/ui/spinner.d.ts.map +0 -1
  200. package/declarations/components/ui/tab-nav/index.d.ts +0 -0
  201. package/declarations/components/ui/tab-nav/index.d.ts.map +0 -1
  202. package/declarations/components/ui/table/body.d.ts +0 -0
  203. package/declarations/components/ui/table/body.d.ts.map +0 -1
  204. package/declarations/components/ui/table/caption.d.ts +0 -0
  205. package/declarations/components/ui/table/caption.d.ts.map +0 -1
  206. package/declarations/components/ui/table/cell.d.ts +0 -0
  207. package/declarations/components/ui/table/cell.d.ts.map +0 -1
  208. package/declarations/components/ui/table/footer.d.ts +0 -0
  209. package/declarations/components/ui/table/footer.d.ts.map +0 -1
  210. package/declarations/components/ui/table/header-cell.d.ts +0 -0
  211. package/declarations/components/ui/table/header-cell.d.ts.map +0 -1
  212. package/declarations/components/ui/table/header.d.ts +0 -0
  213. package/declarations/components/ui/table/header.d.ts.map +0 -1
  214. package/declarations/components/ui/table/index.d.ts +0 -0
  215. package/declarations/components/ui/table/index.d.ts.map +0 -1
  216. package/declarations/components/ui/table/row.d.ts +0 -0
  217. package/declarations/components/ui/table/row.d.ts.map +0 -1
  218. package/declarations/components/ui/table_old.d.ts +0 -0
  219. package/declarations/components/ui/table_old.d.ts.map +0 -1
  220. package/declarations/form/test.d.ts +0 -0
  221. package/declarations/form/test.d.ts.map +0 -1
  222. package/declarations/primitives/grid-item.d.ts +0 -0
  223. package/declarations/primitives/grid-item.d.ts.map +0 -1
  224. package/declarations/primitives/grid.d.ts +0 -0
  225. package/declarations/primitives/grid.d.ts.map +0 -1
  226. package/declarations/primitives/h-stack.d.ts +0 -0
  227. package/declarations/primitives/h-stack.d.ts.map +0 -1
  228. package/declarations/primitives/heading.d.ts +0 -0
  229. package/declarations/primitives/heading.d.ts.map +0 -1
  230. package/declarations/primitives/image.d.ts +0 -0
  231. package/declarations/primitives/image.d.ts.map +0 -1
  232. package/declarations/primitives/index.d.ts +0 -0
  233. package/declarations/primitives/index.d.ts.map +0 -1
  234. package/declarations/primitives/link.d.ts +0 -0
  235. package/declarations/primitives/link.d.ts.map +0 -1
  236. package/declarations/primitives/stack.d.ts +0 -0
  237. package/declarations/primitives/stack.d.ts.map +0 -1
  238. package/declarations/primitives/text.d.ts +0 -0
  239. package/declarations/primitives/text.d.ts.map +0 -1
  240. package/declarations/primitives/v-stack.d.ts +0 -0
  241. package/declarations/primitives/v-stack.d.ts.map +0 -1
  242. package/declarations/typography/link.d.ts +0 -0
  243. package/declarations/typography/link.d.ts.map +0 -1
  244. package/declarations/ui/button.d.ts +0 -0
  245. package/declarations/ui/button.d.ts.map +0 -1
  246. package/declarations/ui/icon.d.ts +0 -0
  247. package/declarations/ui/icon.d.ts.map +0 -1
@@ -32,9 +32,9 @@
32
32
  display: flex;
33
33
  align-items: center;
34
34
  justify-content: center;
35
- border: var(--border-width-1) solid var(--color-border-control);
35
+ border: var(--border-width-1) solid var(--color-input-border-default);
36
36
  border-radius: var(--radius-round);
37
- background-color: var(--color-bg-surface);
37
+ background-color: var(--color-input-bg-default);
38
38
  transition: all var(--transition-fast);
39
39
  }
40
40
 
@@ -65,43 +65,46 @@
65
65
 
66
66
  /* Hover */
67
67
  .radio-label-wrapper_e6dda4f5d:hover .radio-control_e6dda4f5d {
68
- border-color: var(--color-border-control-hover);
68
+ border-color: var(--color-input-border-hover);
69
69
  }
70
70
 
71
71
  .radio-wrapper_e6dda4f5d[data-disabled="true"] .radio-label-wrapper_e6dda4f5d:hover .radio-control_e6dda4f5d {
72
- border-color: var(--color-border-control-disabled);
72
+ border-color: var(--color-input-border-disabled);
73
73
  }
74
74
 
75
75
  /* Focus */
76
76
  .radio-input_e6dda4f5d:focus-visible + .radio-control_e6dda4f5d {
77
- border-color: var(--color-border-focus);
77
+ border-color: var(--color-input-border-focus);
78
78
  box-shadow: var(--focus-ring);
79
79
  }
80
80
 
81
- /* Checked */
81
+ /* Checked — anchored to the shared `--color-bg-control-checked`
82
+ token, in line with the other selected-state controls. Folded
83
+ the pre-existing radio debt that pinned the dot to
84
+ `--color-border-focus` and `--color-text-link-hover`. */
82
85
  .radio-input_e6dda4f5d:checked + .radio-control_e6dda4f5d {
83
- border-color: var(--color-border-focus);
86
+ border-color: var(--color-input-checked-border);
84
87
  }
85
88
 
86
89
  .radio-input_e6dda4f5d:checked + .radio-control_e6dda4f5d .radio-dot_e6dda4f5d {
87
- background-color: var(--color-border-focus);
90
+ background-color: var(--color-input-checked-bg);
88
91
  }
89
92
 
90
93
  .radio-label-wrapper_e6dda4f5d:hover .radio-input_e6dda4f5d:checked + .radio-control_e6dda4f5d {
91
- border-color: var(--color-text-link-hover);
94
+ border-color: var(--color-input-checked-bg-hover);
92
95
  }
93
96
 
94
97
  .radio-label-wrapper_e6dda4f5d:hover .radio-input_e6dda4f5d:checked + .radio-control_e6dda4f5d .radio-dot_e6dda4f5d {
95
- background-color: var(--color-text-link-hover);
98
+ background-color: var(--color-input-checked-bg-hover);
96
99
  }
97
100
 
98
- /* Invalid */
101
+ /* Invalid — error path goes through `--color-input-border-error`. */
99
102
  .radio-wrapper_e6dda4f5d[data-invalid="true"] .radio-control_e6dda4f5d {
100
- border-color: var(--color-border-critical);
103
+ border-color: var(--color-input-border-error);
101
104
  }
102
105
 
103
106
  .radio-wrapper_e6dda4f5d[data-invalid="true"] .radio-input_e6dda4f5d:checked + .radio-control_e6dda4f5d {
104
- border-color: var(--color-border-critical);
107
+ border-color: var(--color-input-border-error);
105
108
  }
106
109
 
107
110
  .radio-wrapper_e6dda4f5d[data-invalid="true"]
@@ -119,12 +122,12 @@
119
122
 
120
123
  /* Disabled */
121
124
  .radio-input_e6dda4f5d:disabled + .radio-control_e6dda4f5d {
122
- background-color: var(--color-bg-disabled);
123
- border-color: var(--color-border-control-disabled);
125
+ background-color: var(--color-input-bg-disabled);
126
+ border-color: var(--color-input-border-disabled);
124
127
  }
125
128
 
126
129
  .radio-input_e6dda4f5d:disabled:checked + .radio-control_e6dda4f5d .radio-dot_e6dda4f5d {
127
- background-color: var(--color-text-disabled);
130
+ background-color: var(--color-input-text-disabled);
128
131
  }
129
132
 
130
133
  /* Label */
@@ -108,9 +108,11 @@
108
108
  transform: scale(0.95);
109
109
  }
110
110
 
111
- /* Checked state - track */
111
+ /* Checked state - track (default tone). Sentiment variants below
112
+ intentionally bypass `--color-bg-control-checked` to expose the
113
+ sentiment-specific fill — architect-confirmed override. */
112
114
  .track_eb612ecfd.checked_eb612ecfd {
113
- background-color: var(--color-bg-fill-accent);
115
+ background-color: var(--color-bg-control-checked);
114
116
  }
115
117
 
116
118
  /* Checked + hover */
@@ -54,7 +54,7 @@ button.e873402ac.tag-content_e873402ac,a.e873402ac.tag-content_e873402ac {
54
54
 
55
55
  button.e873402ac.tag-content_e873402ac:focus-visible,a.e873402ac.tag-content_e873402ac:focus-visible {
56
56
  outline: none;
57
- box-shadow: inset 0 0 0 2px var(--color-focus-ring-halo);
57
+ box-shadow: inset 0 0 0 2px var(--color-focus-ring-outer);
58
58
  }
59
59
 
60
60
  /* ===================================
@@ -337,7 +337,7 @@ button.e873402ac.tag-content_e873402ac:focus-visible,a.e873402ac.tag-content_e87
337
337
  .tag-remove_e873402ac:focus-visible {
338
338
  outline: none;
339
339
  opacity: 1;
340
- box-shadow: 0 0 0 2px var(--color-focus-ring-halo);
340
+ box-shadow: 0 0 0 2px var(--color-focus-ring-outer);
341
341
  }
342
342
 
343
343
  .tag-remove_e873402ac:disabled {
@@ -17,6 +17,15 @@
17
17
  --color-bg-inverse: var(--gray-900); /* Dark background for contrast */
18
18
  --color-bg-disabled: var(--gray-100); /* Disabled backgrounds */
19
19
 
20
+ /* Status Surfaces — for panels, banners, callouts, toasts.
21
+ Distinct from `bg-{semantic}-subtle` (tinted hover/badge backgrounds)
22
+ and `bg-fill-{semantic}` (solid status fills). Surface tier sits at
23
+ the same level as `bg-surface` but carries status sentiment. */
24
+ --color-bg-surface-success: var(--green-50);
25
+ --color-bg-surface-warning: var(--amber-50);
26
+ --color-bg-surface-critical: var(--red-50);
27
+ --color-bg-surface-info: var(--cyan-50);
28
+
20
29
  /* Hover States */
21
30
  --color-bg-hover-subtle: var(--gray-50);
22
31
 
@@ -33,13 +42,19 @@
33
42
  --color-bg-fill-interactive-selected: var(--gray-175);
34
43
  --color-bg-fill-interactive-disabled: var(--gray-50);
35
44
 
36
- /* Accent Fill (Selected controls — checkboxes, toggles, radios) */
45
+ /* Accent Fill (Selected controls — checkboxes, toggles, radios,
46
+ calendar selected day, multi-select chips, date-range fill) */
37
47
  --color-bg-fill-accent: var(--indigo-500);
38
48
  --color-bg-fill-accent-hover: var(--indigo-600);
39
49
  --color-bg-fill-accent-active: var(--indigo-700);
40
50
  --color-bg-fill-accent-disabled: var(--indigo-300);
41
51
 
42
- /* Secondary Fill */
52
+ /* Accent Fill — Subtle (tinted accent backgrounds, e.g. table row
53
+ selected). Sits in the same range as the other `*-subtle` tints. */
54
+ --color-bg-fill-accent-subtle: var(--indigo-50);
55
+ --color-bg-fill-accent-subtle-hover: var(--indigo-100);
56
+
57
+ /* reserved — no consumers yet, validate value when first used */
43
58
  --color-bg-fill-secondary: var(--cyan-600);
44
59
  --color-bg-fill-secondary-hover: var(--cyan-700);
45
60
  --color-bg-fill-secondary-active: var(--cyan-800);
@@ -135,6 +150,15 @@
135
150
  --color-border-control-active: var(--gray-500);
136
151
  --color-border-control-disabled: var(--gray-300);
137
152
  --color-border-control-readonly: var(--gray-300);
153
+ /* Aliased to `--color-border-critical` so consumers reach for the
154
+ error-state intent rather than the raw critical token. */
155
+ --color-border-control-error: var(--color-border-critical);
156
+
157
+ /* Control Fill — Checked (selected affordance for checkbox, toggle,
158
+ radio, multi-select, multi-combobox, calendar selected day,
159
+ date-range range fill). Aliased to `--color-bg-fill-accent` so all
160
+ "checked/selected" controls share one anchor. */
161
+ --color-bg-control-checked: var(--color-bg-fill-accent);
138
162
 
139
163
  /* Brand/Primary Border */
140
164
  --color-border-primary: var(--indigo-700);
@@ -142,9 +166,11 @@
142
166
  /* Focus Border */
143
167
  --color-border-focus: var(--indigo-500);
144
168
 
145
- /* Focus Ring Halo (box-shadow glow) */
146
- --color-focus-ring-halo: var(--indigo-200);
147
- --color-focus-ring-halo-critical: var(--red-200);
169
+ /* Focus Ring two-stop composite (WCAG 2.2 non-text-contrast).
170
+ `inner` separates the ring from the focused element; `outer` carries
171
+ the ring colour. Composed in `effects.css` as `--focus-ring`. */
172
+ --color-focus-ring-inner: var(--white);
173
+ --color-focus-ring-outer: var(--indigo-500);
148
174
 
149
175
  /* Semantic Borders */
150
176
  --color-border-neutral: var(--gray-900);
@@ -0,0 +1,154 @@
1
+ /* ===================================
2
+ * Component-Tier Tokens (Layer 3)
3
+ *
4
+ * Action and Input matrices. Every cell aliases a layer-2 generic — no
5
+ * flat hex. Variants compose in component CSS (e.g. button.css picks
6
+ * which property carries the tone colour for `outline` vs `solid`).
7
+ *
8
+ * The rest of Assembly's components consume semantic tokens directly;
9
+ * only action + input have a layer-3 surface. See
10
+ * `docs/component-tokens.md` for the rationale and the cell-by-cell
11
+ * spec — this file mirrors it.
12
+ * =================================== */
13
+ :root {
14
+ /* ===================================
15
+ * Action Matrix
16
+ * Shape: --color-action-{tone}-{property}-{state}
17
+ * tones = primary | neutral | critical
18
+ * properties = bg | border | text | icon
19
+ * states = default | hover | focus | pressed | disabled
20
+ * =================================== */
21
+
22
+ /* Primary — bg */
23
+ --color-action-primary-bg-default: var(--color-bg-fill-primary);
24
+ --color-action-primary-bg-hover: var(--color-bg-fill-primary-hover);
25
+ --color-action-primary-bg-focus: var(--color-bg-fill-primary);
26
+ --color-action-primary-bg-pressed: var(--color-bg-fill-primary-active);
27
+ --color-action-primary-bg-disabled: var(--color-bg-fill-primary-disabled);
28
+
29
+ /* Primary — border */
30
+ --color-action-primary-border-default: var(--color-border-primary);
31
+ --color-action-primary-border-hover: var(--color-border-primary);
32
+ --color-action-primary-border-focus: var(--color-border-focus);
33
+ --color-action-primary-border-pressed: var(--color-border-primary);
34
+ --color-action-primary-border-disabled: var(--color-border-control-disabled);
35
+
36
+ /* Primary — text */
37
+ --color-action-primary-text-default: var(--color-text-on-primary);
38
+ --color-action-primary-text-hover: var(--color-text-on-primary);
39
+ --color-action-primary-text-focus: var(--color-text-on-primary);
40
+ --color-action-primary-text-pressed: var(--color-text-on-primary);
41
+ --color-action-primary-text-disabled: var(--color-text-disabled);
42
+
43
+ /* Primary — icon */
44
+ --color-action-primary-icon-default: var(--color-text-on-primary);
45
+ --color-action-primary-icon-hover: var(--color-text-on-primary);
46
+ --color-action-primary-icon-focus: var(--color-text-on-primary);
47
+ --color-action-primary-icon-pressed: var(--color-text-on-primary);
48
+ --color-action-primary-icon-disabled: var(--color-text-disabled);
49
+
50
+ /* Neutral — bg */
51
+ --color-action-neutral-bg-default: var(--color-bg-fill-interactive);
52
+ --color-action-neutral-bg-hover: var(--color-bg-fill-interactive-hover);
53
+ --color-action-neutral-bg-focus: var(--color-bg-fill-interactive);
54
+ --color-action-neutral-bg-pressed: var(--color-bg-fill-interactive-active);
55
+ --color-action-neutral-bg-disabled: var(--color-bg-fill-interactive-disabled);
56
+
57
+ /* Neutral — border */
58
+ --color-action-neutral-border-default: var(--color-border-control);
59
+ --color-action-neutral-border-hover: var(--color-border-control-hover);
60
+ --color-action-neutral-border-focus: var(--color-border-focus);
61
+ --color-action-neutral-border-pressed: var(--color-border-control-active);
62
+ --color-action-neutral-border-disabled: var(--color-border-control-disabled);
63
+
64
+ /* Neutral — text */
65
+ --color-action-neutral-text-default: var(--color-text);
66
+ --color-action-neutral-text-hover: var(--color-text);
67
+ --color-action-neutral-text-focus: var(--color-text);
68
+ --color-action-neutral-text-pressed: var(--color-text);
69
+ --color-action-neutral-text-disabled: var(--color-text-disabled);
70
+
71
+ /* Neutral — icon */
72
+ --color-action-neutral-icon-default: var(--color-icon);
73
+ --color-action-neutral-icon-hover: var(--color-icon-interactive-hover);
74
+ --color-action-neutral-icon-focus: var(--color-icon);
75
+ --color-action-neutral-icon-pressed: var(--color-icon);
76
+ --color-action-neutral-icon-disabled: var(--color-icon-disabled);
77
+
78
+ /* Critical — bg */
79
+ --color-action-critical-bg-default: var(--color-bg-fill-critical);
80
+ --color-action-critical-bg-hover: var(--color-bg-fill-critical-hover);
81
+ --color-action-critical-bg-focus: var(--color-bg-fill-critical);
82
+ --color-action-critical-bg-pressed: var(--color-bg-fill-critical-active);
83
+ --color-action-critical-bg-disabled: var(
84
+ --color-bg-fill-interactive-disabled
85
+ );
86
+
87
+ /* Critical — border */
88
+ --color-action-critical-border-default: var(--color-border-critical);
89
+ --color-action-critical-border-hover: var(--color-border-critical);
90
+ --color-action-critical-border-focus: var(--color-border-critical);
91
+ --color-action-critical-border-pressed: var(--color-border-critical);
92
+ --color-action-critical-border-disabled: var(--color-border-control-disabled);
93
+
94
+ /* Critical — text */
95
+ --color-action-critical-text-default: var(--color-text-on-critical);
96
+ --color-action-critical-text-hover: var(--color-text-on-critical);
97
+ --color-action-critical-text-focus: var(--color-text-on-critical);
98
+ --color-action-critical-text-pressed: var(--color-text-on-critical);
99
+ --color-action-critical-text-disabled: var(--color-text-disabled);
100
+
101
+ /* Critical — icon */
102
+ --color-action-critical-icon-default: var(--color-text-on-critical);
103
+ --color-action-critical-icon-hover: var(--color-text-on-critical);
104
+ --color-action-critical-icon-focus: var(--color-text-on-critical);
105
+ --color-action-critical-icon-pressed: var(--color-text-on-critical);
106
+ --color-action-critical-icon-disabled: var(--color-text-disabled);
107
+
108
+ /* ===================================
109
+ * Input Matrix
110
+ * Shape: --color-input-{property}-{state}
111
+ * properties = bg | border | text | icon | checked
112
+ * states = default | hover | focus | disabled | error
113
+ *
114
+ * `checked` is the selected-state affordance; it collapses the state
115
+ * axis (the "checked" affordance itself is a state). Inputs without a
116
+ * checked affordance (text inputs, textareas) ignore the `checked-*`
117
+ * cells.
118
+ * =================================== */
119
+
120
+ /* bg */
121
+ --color-input-bg-default: var(--color-bg-surface);
122
+ --color-input-bg-hover: var(--color-bg-surface);
123
+ --color-input-bg-focus: var(--color-bg-surface);
124
+ --color-input-bg-disabled: var(--color-bg-disabled);
125
+ --color-input-bg-error: var(--color-bg-surface);
126
+
127
+ /* border */
128
+ --color-input-border-default: var(--color-border-control);
129
+ --color-input-border-hover: var(--color-border-control-hover);
130
+ --color-input-border-focus: var(--color-border-focus);
131
+ --color-input-border-disabled: var(--color-border-control-disabled);
132
+ --color-input-border-error: var(--color-border-control-error);
133
+
134
+ /* text */
135
+ --color-input-text-default: var(--color-text);
136
+ --color-input-text-hover: var(--color-text);
137
+ --color-input-text-focus: var(--color-text);
138
+ --color-input-text-disabled: var(--color-text-disabled);
139
+ --color-input-text-error: var(--color-text);
140
+
141
+ /* icon */
142
+ --color-input-icon-default: var(--color-icon-secondary);
143
+ --color-input-icon-hover: var(--color-icon);
144
+ --color-input-icon-focus: var(--color-icon);
145
+ --color-input-icon-disabled: var(--color-icon-disabled);
146
+ --color-input-icon-error: var(--color-icon-critical);
147
+
148
+ /* checked (selected affordance) */
149
+ --color-input-checked-bg: var(--color-bg-control-checked);
150
+ --color-input-checked-bg-hover: var(--color-bg-fill-accent-hover);
151
+ --color-input-checked-border: var(--color-bg-control-checked);
152
+ --color-input-checked-icon: var(--color-text-on-accent);
153
+ --color-input-checked-disabled: var(--color-bg-fill-accent-disabled);
154
+ }
@@ -3,9 +3,15 @@
3
3
  --shadow-surface: var(--shadow-xs);
4
4
  --shadow-modal: var(--shadow-lg);
5
5
 
6
- /* Focus Ring */
7
- --focus-ring: 0 0 0 3px var(--color-focus-ring-halo);
8
- --focus-ring-critical: 0 0 0 3px var(--color-focus-ring-halo-critical);
6
+ /* Focus Ring — two-stop composite. Inner stop separates the ring from
7
+ the focused surface; outer stop carries the ring colour. Meets WCAG
8
+ 2.2 non-text-contrast on light + dark surfaces. */
9
+ --focus-ring:
10
+ 0 0 0 2px var(--color-focus-ring-inner),
11
+ 0 0 0 4px var(--color-focus-ring-outer);
12
+ --focus-ring-critical:
13
+ 0 0 0 2px var(--color-focus-ring-inner),
14
+ 0 0 0 4px var(--color-border-critical);
9
15
 
10
16
  /* Z-Index Semantic Layers */
11
17
  --z-dropdown: var(--z-100);
@@ -29,4 +29,64 @@
29
29
  --letter-spacing-tight: -0.025em;
30
30
  --letter-spacing-normal: 0;
31
31
  --letter-spacing-wide: 0.025em;
32
+
33
+ /* ===================================
34
+ * Typography Roles — Bundled Sub-tokens
35
+ *
36
+ * Role names (display | page | section | subsection for headings;
37
+ * sm | md | lg for body) survive a redesign that re-scales the type
38
+ * ramp. Components consume the four sub-tokens (size, weight, leading,
39
+ * tracking) per role rather than composing atomic font-size +
40
+ * line-height + weight per call site. Sub-tokens not `font:`
41
+ * shorthand — shorthand resets font-stretch/variant and cannot carry
42
+ * letter-spacing.
43
+ *
44
+ * Heading mapping (locked, see WON-580):
45
+ * level=1 → page (default page title)
46
+ * level=2 → section (first-level section header)
47
+ * level=3-6 → subsection (size step-down via @size override)
48
+ * `display` is an opt-in @size — never a level default.
49
+ * =================================== */
50
+
51
+ /* Heading — Display (opt-in via @size="display") */
52
+ --typography-heading-display-size: var(--font-size-5xl); /* 30px */
53
+ --typography-heading-display-weight: var(--font-weight-medium);
54
+ --typography-heading-display-leading: var(--line-height-36);
55
+ --typography-heading-display-tracking: var(--letter-spacing-tight);
56
+
57
+ /* Heading — Page (level=1 default) */
58
+ --typography-heading-page-size: var(--font-size-4xl); /* 24px */
59
+ --typography-heading-page-weight: var(--font-weight-medium);
60
+ --typography-heading-page-leading: var(--line-height-28);
61
+ --typography-heading-page-tracking: var(--letter-spacing-tight);
62
+
63
+ /* Heading — Section (level=2 default) */
64
+ --typography-heading-section-size: var(--font-size-3xl); /* 20px */
65
+ --typography-heading-section-weight: var(--font-weight-medium);
66
+ --typography-heading-section-leading: var(--line-height-24);
67
+ --typography-heading-section-tracking: var(--letter-spacing-normal);
68
+
69
+ /* Heading — Subsection (level=3 default; 4-6 step down via @size) */
70
+ --typography-heading-subsection-size: var(--font-size-2xl); /* 18px */
71
+ --typography-heading-subsection-weight: var(--font-weight-medium);
72
+ --typography-heading-subsection-leading: var(--line-height-24);
73
+ --typography-heading-subsection-tracking: var(--letter-spacing-normal);
74
+
75
+ /* Body — Small (captions, dense table cells, helper text) */
76
+ --typography-body-sm-size: var(--font-size-sm); /* 12px */
77
+ --typography-body-sm-weight: var(--font-weight-regular);
78
+ --typography-body-sm-leading: var(--line-height-tight); /* 16px */
79
+ --typography-body-sm-tracking: var(--letter-spacing-normal);
80
+
81
+ /* Body — Medium (default body text) */
82
+ --typography-body-md-size: var(--font-size-md); /* 13px */
83
+ --typography-body-md-weight: var(--font-weight-regular);
84
+ --typography-body-md-leading: var(--line-height-normal); /* 20px */
85
+ --typography-body-md-tracking: var(--letter-spacing-normal);
86
+
87
+ /* Body — Large (lead paragraphs, emphasized body) */
88
+ --typography-body-lg-size: var(--font-size-lg); /* 14px */
89
+ --typography-body-lg-weight: var(--font-weight-regular);
90
+ --typography-body-lg-leading: var(--line-height-normal); /* 20px */
91
+ --typography-body-lg-tracking: var(--letter-spacing-normal);
32
92
  }
@@ -21,6 +21,9 @@
21
21
  @import url("./semantic/effects.css");
22
22
  @import url("./semantic/motion.css");
23
23
 
24
+ /* Component-tier tokens (Action + Input matrices only) */
25
+ @import url("./semantic/component.css");
26
+
24
27
  /* Base styles */
25
28
  @import url("./base/typography.css");
26
29