@teseor/css 1.0.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 (298) hide show
  1. package/README.md +102 -0
  2. package/dist/compiled.css +4463 -0
  3. package/dist/index.css +4445 -0
  4. package/fonts/.gitkeep +9 -0
  5. package/package.json +38 -0
  6. package/src/00-config/layers/layers.scss +1 -0
  7. package/src/00-config/mixins/_border.scss +13 -0
  8. package/src/00-config/mixins/index.scss +1 -0
  9. package/src/00-config/tokens/_variables.scss +120 -0
  10. package/src/00-config/tokens/borders/index.scss +6 -0
  11. package/src/00-config/tokens/colors/colors.docs.json +168 -0
  12. package/src/00-config/tokens/colors/index.scss +25 -0
  13. package/src/00-config/tokens/grid/grid.docs.json +54 -0
  14. package/src/00-config/tokens/grid/index.scss +11 -0
  15. package/src/00-config/tokens/index.scss +15 -0
  16. package/src/00-config/tokens/input.scss +14 -0
  17. package/src/00-config/tokens/motion/index.scss +25 -0
  18. package/src/00-config/tokens/radius/index.scss +7 -0
  19. package/src/00-config/tokens/semantic/colors/index.scss +30 -0
  20. package/src/00-config/tokens/semantic/spacing/index.scss +10 -0
  21. package/src/00-config/tokens/shadows/index.scss +5 -0
  22. package/src/00-config/tokens/spacing/index.scss +15 -0
  23. package/src/00-config/tokens/spacing/spacing.docs.json +114 -0
  24. package/src/00-config/tokens/theming.docs.json +77 -0
  25. package/src/00-config/tokens/typography/index.scss +119 -0
  26. package/src/00-config/tokens/zindex/index.scss +14 -0
  27. package/src/01-reset/index.scss +1 -0
  28. package/src/01-reset/reset.scss +8 -0
  29. package/src/02-base/index.scss +2 -0
  30. package/src/02-base/root/root.scss +12 -0
  31. package/src/02-base/typography/typography.docs.json +94 -0
  32. package/src/02-base/typography/typography.scss +145 -0
  33. package/src/03-layout/app-shell/app-shell.api.json +26 -0
  34. package/src/03-layout/app-shell/app-shell.docs.json +119 -0
  35. package/src/03-layout/app-shell/index.scss +5 -0
  36. package/src/03-layout/box/box.api.json +15 -0
  37. package/src/03-layout/box/box.docs.json +57 -0
  38. package/src/03-layout/box/index.scss +34 -0
  39. package/src/03-layout/center/center.api.json +6 -0
  40. package/src/03-layout/center/center.docs.json +24 -0
  41. package/src/03-layout/center/index.scss +11 -0
  42. package/src/03-layout/cluster/cluster.api.json +10 -0
  43. package/src/03-layout/cluster/cluster.docs.json +129 -0
  44. package/src/03-layout/cluster/index.scss +18 -0
  45. package/src/03-layout/container/container.api.json +13 -0
  46. package/src/03-layout/container/index.scss +17 -0
  47. package/src/03-layout/flex/flex.api.json +15 -0
  48. package/src/03-layout/flex/flex.docs.json +56 -0
  49. package/src/03-layout/flex/index.scss +51 -0
  50. package/src/03-layout/grid/grid.api.json +10 -0
  51. package/src/03-layout/grid/grid.docs.json +116 -0
  52. package/src/03-layout/grid/index.scss +15 -0
  53. package/src/03-layout/index.scss +11 -0
  54. package/src/03-layout/main/index.scss +17 -0
  55. package/src/03-layout/main/main.api.json +13 -0
  56. package/src/03-layout/sidebar/index.scss +30 -0
  57. package/src/03-layout/sidebar/sidebar.api.json +13 -0
  58. package/src/03-layout/sidebar-nav/index.scss +209 -0
  59. package/src/03-layout/sidebar-nav/sidebar-nav-all.png +0 -0
  60. package/src/03-layout/sidebar-nav/sidebar-nav.api.json +115 -0
  61. package/src/03-layout/sidebar-nav/sidebar-nav.docs.json +100 -0
  62. package/src/03-layout/sidebar-nav/sidebar-nav.visual.spec.ts +14 -0
  63. package/src/03-layout/stack/index.scss +13 -0
  64. package/src/03-layout/stack/stack.api.json +10 -0
  65. package/src/03-layout/stack/stack.docs.json +131 -0
  66. package/src/04-components/accordion/accordion-visual.png +0 -0
  67. package/src/04-components/accordion/accordion.api.json +19 -0
  68. package/src/04-components/accordion/accordion.docs.json +51 -0
  69. package/src/04-components/accordion/accordion.visual.spec.ts +14 -0
  70. package/src/04-components/accordion/index.scss +78 -0
  71. package/src/04-components/alert/alert-visual.png +0 -0
  72. package/src/04-components/alert/alert.api.json +91 -0
  73. package/src/04-components/alert/alert.docs.json +79 -0
  74. package/src/04-components/alert/alert.visual.spec.ts +14 -0
  75. package/src/04-components/alert/index.scss +108 -0
  76. package/src/04-components/avatar/avatar-visual.png +0 -0
  77. package/src/04-components/avatar/avatar.api.json +70 -0
  78. package/src/04-components/avatar/avatar.docs.json +200 -0
  79. package/src/04-components/avatar/avatar.visual.spec.ts +14 -0
  80. package/src/04-components/avatar/index.scss +104 -0
  81. package/src/04-components/badge/badge-visual.png +0 -0
  82. package/src/04-components/badge/badge.api.json +86 -0
  83. package/src/04-components/badge/badge.docs.json +89 -0
  84. package/src/04-components/badge/badge.visual.spec.ts +14 -0
  85. package/src/04-components/badge/index.scss +64 -0
  86. package/src/04-components/breadcrumb/breadcrumb-visual.png +0 -0
  87. package/src/04-components/breadcrumb/breadcrumb.api.json +31 -0
  88. package/src/04-components/breadcrumb/breadcrumb.docs.json +59 -0
  89. package/src/04-components/breadcrumb/breadcrumb.visual.spec.ts +14 -0
  90. package/src/04-components/breadcrumb/index.scss +77 -0
  91. package/src/04-components/button/button-visual.png +0 -0
  92. package/src/04-components/button/button.api.json +138 -0
  93. package/src/04-components/button/button.docs.json +75 -0
  94. package/src/04-components/button/button.visual.spec.ts +14 -0
  95. package/src/04-components/button/index.scss +222 -0
  96. package/src/04-components/button-group/button-group-visual.png +0 -0
  97. package/src/04-components/button-group/button-group.api.json +11 -0
  98. package/src/04-components/button-group/button-group.docs.json +52 -0
  99. package/src/04-components/button-group/button-group.visual.spec.ts +14 -0
  100. package/src/04-components/button-group/index.scss +78 -0
  101. package/src/04-components/card/card-visual.png +0 -0
  102. package/src/04-components/card/card.api.json +53 -0
  103. package/src/04-components/card/card.docs.json +103 -0
  104. package/src/04-components/card/card.visual.spec.ts +14 -0
  105. package/src/04-components/card/index.scss +41 -0
  106. package/src/04-components/checkbox/checkbox-visual.png +0 -0
  107. package/src/04-components/checkbox/checkbox.api.json +50 -0
  108. package/src/04-components/checkbox/checkbox.docs.json +151 -0
  109. package/src/04-components/checkbox/checkbox.visual.spec.ts +14 -0
  110. package/src/04-components/checkbox/index.scss +104 -0
  111. package/src/04-components/code/code-visual.png +0 -0
  112. package/src/04-components/code/code.api.json +47 -0
  113. package/src/04-components/code/code.docs.json +84 -0
  114. package/src/04-components/code/code.visual.spec.ts +14 -0
  115. package/src/04-components/code/index.scss +64 -0
  116. package/src/04-components/data-list/data-list-visual.png +0 -0
  117. package/src/04-components/data-list/data-list.api.json +23 -0
  118. package/src/04-components/data-list/data-list.docs.json +79 -0
  119. package/src/04-components/data-list/data-list.visual.spec.ts +14 -0
  120. package/src/04-components/data-list/index.scss +98 -0
  121. package/src/04-components/dialog/dialog-visual.png +0 -0
  122. package/src/04-components/dialog/dialog.api.json +23 -0
  123. package/src/04-components/dialog/dialog.docs.json +58 -0
  124. package/src/04-components/dialog/dialog.visual.spec.ts +14 -0
  125. package/src/04-components/dialog/index.scss +74 -0
  126. package/src/04-components/disclosure/disclosure-visual.png +0 -0
  127. package/src/04-components/disclosure/disclosure.api.json +31 -0
  128. package/src/04-components/disclosure/disclosure.docs.json +73 -0
  129. package/src/04-components/disclosure/disclosure.visual.spec.ts +14 -0
  130. package/src/04-components/disclosure/index.scss +111 -0
  131. package/src/04-components/divider/divider-visual.png +0 -0
  132. package/src/04-components/divider/divider.api.json +30 -0
  133. package/src/04-components/divider/divider.docs.json +68 -0
  134. package/src/04-components/divider/divider.visual.spec.ts +14 -0
  135. package/src/04-components/divider/index.scss +115 -0
  136. package/src/04-components/drawer/drawer-visual.png +0 -0
  137. package/src/04-components/drawer/drawer.api.json +39 -0
  138. package/src/04-components/drawer/drawer.docs.json +78 -0
  139. package/src/04-components/drawer/drawer.visual.spec.ts +14 -0
  140. package/src/04-components/drawer/index.scss +251 -0
  141. package/src/04-components/field/field-visual.png +0 -0
  142. package/src/04-components/field/field.api.json +11 -0
  143. package/src/04-components/field/field.docs.json +59 -0
  144. package/src/04-components/field/field.visual.spec.ts +14 -0
  145. package/src/04-components/field/index.scss +44 -0
  146. package/src/04-components/form-error/form-error-visual.png +0 -0
  147. package/src/04-components/form-error/form-error.api.json +19 -0
  148. package/src/04-components/form-error/form-error.docs.json +40 -0
  149. package/src/04-components/form-error/form-error.visual.spec.ts +14 -0
  150. package/src/04-components/form-error/index.scss +31 -0
  151. package/src/04-components/form-helper/form-helper-visual.png +0 -0
  152. package/src/04-components/form-helper/form-helper.api.json +19 -0
  153. package/src/04-components/form-helper/form-helper.docs.json +31 -0
  154. package/src/04-components/form-helper/form-helper.visual.spec.ts +14 -0
  155. package/src/04-components/form-helper/index.scss +24 -0
  156. package/src/04-components/heading/heading-visual.png +0 -0
  157. package/src/04-components/heading/heading.api.json +83 -0
  158. package/src/04-components/heading/heading.docs.json +98 -0
  159. package/src/04-components/heading/heading.visual.spec.ts +14 -0
  160. package/src/04-components/heading/index.scss +61 -0
  161. package/src/04-components/icon/icon-visual.png +0 -0
  162. package/src/04-components/icon/icon.api.json +56 -0
  163. package/src/04-components/icon/icon.docs.json +155 -0
  164. package/src/04-components/icon/icon.visual.spec.ts +14 -0
  165. package/src/04-components/icon/index.scss +79 -0
  166. package/src/04-components/index.scss +41 -0
  167. package/src/04-components/input/index.scss +154 -0
  168. package/src/04-components/input/input-visual.png +0 -0
  169. package/src/04-components/input/input.api.json +85 -0
  170. package/src/04-components/input/input.docs.json +189 -0
  171. package/src/04-components/input/input.visual.spec.ts +14 -0
  172. package/src/04-components/label/index.scss +46 -0
  173. package/src/04-components/label/label-visual.png +0 -0
  174. package/src/04-components/label/label.api.json +27 -0
  175. package/src/04-components/label/label.docs.json +73 -0
  176. package/src/04-components/label/label.visual.spec.ts +14 -0
  177. package/src/04-components/link/index.scss +73 -0
  178. package/src/04-components/link/link-visual.png +0 -0
  179. package/src/04-components/link/link.api.json +39 -0
  180. package/src/04-components/link/link.docs.json +104 -0
  181. package/src/04-components/link/link.visual.spec.ts +14 -0
  182. package/src/04-components/menu/index.scss +145 -0
  183. package/src/04-components/menu/menu-visual.png +0 -0
  184. package/src/04-components/menu/menu.api.json +47 -0
  185. package/src/04-components/menu/menu.docs.json +81 -0
  186. package/src/04-components/menu/menu.visual.spec.ts +14 -0
  187. package/src/04-components/modal/index.scss +93 -0
  188. package/src/04-components/modal/modal-visual.png +0 -0
  189. package/src/04-components/modal/modal.api.json +43 -0
  190. package/src/04-components/modal/modal.docs.json +86 -0
  191. package/src/04-components/modal/modal.visual.spec.ts +14 -0
  192. package/src/04-components/overlay/index.scss +49 -0
  193. package/src/04-components/overlay/overlay-visual.png +0 -0
  194. package/src/04-components/overlay/overlay.api.json +23 -0
  195. package/src/04-components/overlay/overlay.docs.json +63 -0
  196. package/src/04-components/overlay/overlay.visual.spec.ts +14 -0
  197. package/src/04-components/pagination/index.scss +114 -0
  198. package/src/04-components/pagination/pagination-visual.png +0 -0
  199. package/src/04-components/pagination/pagination.api.json +39 -0
  200. package/src/04-components/pagination/pagination.docs.json +88 -0
  201. package/src/04-components/pagination/pagination.visual.spec.ts +14 -0
  202. package/src/04-components/popover/index.scss +114 -0
  203. package/src/04-components/popover/popover-visual.png +0 -0
  204. package/src/04-components/popover/popover.api.json +39 -0
  205. package/src/04-components/popover/popover.docs.json +70 -0
  206. package/src/04-components/popover/popover.visual.spec.ts +14 -0
  207. package/src/04-components/progress/index.scss +102 -0
  208. package/src/04-components/progress/progress-visual.png +0 -0
  209. package/src/04-components/progress/progress.api.json +23 -0
  210. package/src/04-components/progress/progress.docs.json +87 -0
  211. package/src/04-components/progress/progress.visual.spec.ts +14 -0
  212. package/src/04-components/radio/index.scss +96 -0
  213. package/src/04-components/radio/radio-visual.png +0 -0
  214. package/src/04-components/radio/radio.api.json +46 -0
  215. package/src/04-components/radio/radio.docs.json +159 -0
  216. package/src/04-components/radio/radio.visual.spec.ts +14 -0
  217. package/src/04-components/select/index.scss +113 -0
  218. package/src/04-components/select/select-visual.png +0 -0
  219. package/src/04-components/select/select.api.json +85 -0
  220. package/src/04-components/select/select.docs.json +162 -0
  221. package/src/04-components/select/select.visual.spec.ts +14 -0
  222. package/src/04-components/skeleton/index.scss +99 -0
  223. package/src/04-components/skeleton/skeleton-visual.png +0 -0
  224. package/src/04-components/skeleton/skeleton.api.json +19 -0
  225. package/src/04-components/skeleton/skeleton.docs.json +62 -0
  226. package/src/04-components/skeleton/skeleton.visual.spec.ts +14 -0
  227. package/src/04-components/spinner/index.scss +60 -0
  228. package/src/04-components/spinner/spinner-visual.png +0 -0
  229. package/src/04-components/spinner/spinner.api.json +63 -0
  230. package/src/04-components/spinner/spinner.docs.json +88 -0
  231. package/src/04-components/spinner/spinner.visual.spec.ts +15 -0
  232. package/src/04-components/status/index.scss +85 -0
  233. package/src/04-components/status/status-visual.png +0 -0
  234. package/src/04-components/status/status.api.json +19 -0
  235. package/src/04-components/status/status.docs.json +60 -0
  236. package/src/04-components/status/status.visual.spec.ts +14 -0
  237. package/src/04-components/table/index.scss +60 -0
  238. package/src/04-components/table/table-visual.png +0 -0
  239. package/src/04-components/table/table.api.json +27 -0
  240. package/src/04-components/table/table.docs.json +59 -0
  241. package/src/04-components/table/table.visual.spec.ts +14 -0
  242. package/src/04-components/tabs/index.scss +77 -0
  243. package/src/04-components/tabs/tabs-visual.png +0 -0
  244. package/src/04-components/tabs/tabs.api.json +31 -0
  245. package/src/04-components/tabs/tabs.docs.json +61 -0
  246. package/src/04-components/tabs/tabs.visual.spec.ts +14 -0
  247. package/src/04-components/tag/index.scss +98 -0
  248. package/src/04-components/tag/tag-visual.png +0 -0
  249. package/src/04-components/tag/tag.api.json +86 -0
  250. package/src/04-components/tag/tag.docs.json +108 -0
  251. package/src/04-components/tag/tag.visual.spec.ts +14 -0
  252. package/src/04-components/textarea/index.scss +124 -0
  253. package/src/04-components/textarea/textarea-visual.png +0 -0
  254. package/src/04-components/textarea/textarea.api.json +93 -0
  255. package/src/04-components/textarea/textarea.docs.json +191 -0
  256. package/src/04-components/textarea/textarea.visual.spec.ts +14 -0
  257. package/src/04-components/toast/index.scss +180 -0
  258. package/src/04-components/toast/toast-visual.png +0 -0
  259. package/src/04-components/toast/toast.api.json +43 -0
  260. package/src/04-components/toast/toast.docs.json +99 -0
  261. package/src/04-components/toast/toast.visual.spec.ts +14 -0
  262. package/src/04-components/toggle/index.scss +117 -0
  263. package/src/04-components/toggle/toggle-visual.png +0 -0
  264. package/src/04-components/toggle/toggle.api.json +43 -0
  265. package/src/04-components/toggle/toggle.docs.json +92 -0
  266. package/src/04-components/toggle/toggle.visual.spec.ts +14 -0
  267. package/src/04-components/tooltip/index.scss +102 -0
  268. package/src/04-components/tooltip/tooltip-visual.png +0 -0
  269. package/src/04-components/tooltip/tooltip.api.json +39 -0
  270. package/src/04-components/tooltip/tooltip.docs.json +63 -0
  271. package/src/04-components/tooltip/tooltip.visual.spec.ts +14 -0
  272. package/src/05-utilities/border/index.scss +21 -0
  273. package/src/05-utilities/display/display.api.json +6 -0
  274. package/src/05-utilities/display/display.docs.json +28 -0
  275. package/src/05-utilities/display/display.scss +195 -0
  276. package/src/05-utilities/index.scss +6 -0
  277. package/src/05-utilities/spacing/spacing.api.json +6 -0
  278. package/src/05-utilities/spacing/spacing.docs.json +43 -0
  279. package/src/05-utilities/spacing/spacing.scss +399 -0
  280. package/src/05-utilities/text/text.api.json +38 -0
  281. package/src/05-utilities/text/text.docs.json +132 -0
  282. package/src/05-utilities/text/text.scss +246 -0
  283. package/src/05-utilities/view-transition/index.scss +198 -0
  284. package/src/05-utilities/view-transition/view-transition.api.json +21 -0
  285. package/src/05-utilities/view-transition/view-transition.docs.json +63 -0
  286. package/src/05-utilities/visually-hidden/index.scss +38 -0
  287. package/src/05-utilities/visually-hidden/visually-hidden.api.json +8 -0
  288. package/src/05-utilities/visually-hidden/visually-hidden.docs.json +29 -0
  289. package/src/99-debug/grid-overlay.scss +79 -0
  290. package/src/99-debug/index.scss +1 -0
  291. package/src/index.scss +30 -0
  292. package/src/testing/api-types.ts +20 -0
  293. package/src/testing/grid-alignment.spec.ts +92 -0
  294. package/src/testing/html-generator.ts +151 -0
  295. package/src/testing/index.ts +15 -0
  296. package/src/testing/page-setup.ts +131 -0
  297. package/src/testing/rhythm.ts +146 -0
  298. package/src/testing/scaffold.ts +50 -0
@@ -0,0 +1,246 @@
1
+ // Text utilities
2
+
3
+ // Uses logical properties for international/RTL support
4
+ @layer utilities {
5
+ // ==========================================================================
6
+ // TEXT ALIGNMENT - use start/end for RTL support
7
+ // ==========================================================================
8
+ .text-start {
9
+ text-align: start;
10
+ }
11
+
12
+ .text-center {
13
+ text-align: center;
14
+ }
15
+
16
+ .text-end {
17
+ text-align: end;
18
+ }
19
+
20
+ .text-justify {
21
+ text-align: justify;
22
+ }
23
+
24
+ // ==========================================================================
25
+ // FONT WEIGHT
26
+ // ==========================================================================
27
+ .font-normal {
28
+ font-weight: var(--ui-weight-normal);
29
+ }
30
+
31
+ .font-medium {
32
+ font-weight: var(--ui-weight-medium);
33
+ }
34
+
35
+ .font-semibold {
36
+ font-weight: var(--ui-weight-semibold);
37
+ }
38
+
39
+ .font-bold {
40
+ font-weight: var(--ui-weight-bold);
41
+ }
42
+
43
+ // ==========================================================================
44
+ // FONT SIZE - uses modular scale tokens
45
+ // ==========================================================================
46
+ .text-xs {
47
+ font-size: var(--ui-font-size-xs);
48
+ line-height: var(--ui-leading-xs);
49
+ }
50
+
51
+ .text-sm {
52
+ font-size: var(--ui-font-size-sm);
53
+ line-height: var(--ui-leading-sm);
54
+ }
55
+
56
+ .text-md {
57
+ font-size: var(--ui-font-size-md);
58
+ line-height: var(--ui-leading-md);
59
+ }
60
+
61
+ .text-lg {
62
+ font-size: var(--ui-font-size-lg);
63
+ line-height: var(--ui-leading-lg);
64
+ }
65
+
66
+ .text-xl {
67
+ font-size: var(--ui-font-size-xl);
68
+ line-height: var(--ui-leading-xl);
69
+ }
70
+
71
+ .text-2xl {
72
+ font-size: var(--ui-font-size-2xl);
73
+ line-height: var(--ui-leading-2xl);
74
+ }
75
+
76
+ .text-3xl {
77
+ font-size: var(--ui-font-size-3xl);
78
+ line-height: var(--ui-leading-3xl);
79
+ }
80
+
81
+ .text-4xl {
82
+ font-size: var(--ui-font-size-4xl);
83
+ line-height: var(--ui-leading-4xl);
84
+ }
85
+
86
+ // ==========================================================================
87
+ // SEMANTIC TEXT ROLES
88
+ // ==========================================================================
89
+
90
+ // Lead - Opening paragraph style
91
+ .text-lead {
92
+ font-size: var(--ui-lead-size);
93
+ font-weight: var(--ui-lead-weight);
94
+ line-height: var(--ui-lead-line-height);
95
+ letter-spacing: var(--ui-lead-tracking);
96
+ }
97
+
98
+ // Eyebrow - Small caps label above headings
99
+ .text-eyebrow {
100
+ font-size: var(--ui-eyebrow-size);
101
+ font-weight: var(--ui-eyebrow-weight);
102
+ line-height: var(--ui-eyebrow-line-height);
103
+ letter-spacing: var(--ui-eyebrow-tracking);
104
+ text-transform: uppercase;
105
+ }
106
+
107
+ // Caption - Labels, hints, metadata
108
+ .text-caption {
109
+ font-size: var(--ui-caption-size);
110
+ font-weight: var(--ui-caption-weight);
111
+ line-height: var(--ui-caption-line-height);
112
+ letter-spacing: var(--ui-caption-tracking);
113
+ }
114
+
115
+ // Body small - Secondary text
116
+ .text-body-sm {
117
+ font-size: var(--ui-body-sm-size);
118
+ font-weight: var(--ui-body-sm-weight);
119
+ line-height: var(--ui-body-sm-line-height);
120
+ letter-spacing: var(--ui-body-sm-tracking);
121
+ }
122
+
123
+ // ==========================================================================
124
+ // FONT FAMILY
125
+ // ==========================================================================
126
+ .font-sans {
127
+ font-family: var(--ui-font-sans);
128
+ }
129
+
130
+ .font-mono {
131
+ font-family: var(--ui-font-mono);
132
+ }
133
+
134
+ // ==========================================================================
135
+ // TEXT DECORATION
136
+ // ==========================================================================
137
+ .underline {
138
+ text-decoration: underline;
139
+ }
140
+
141
+ .line-through {
142
+ text-decoration: line-through;
143
+ }
144
+
145
+ .no-underline {
146
+ text-decoration: none;
147
+ }
148
+
149
+ // ==========================================================================
150
+ // TEXT TRANSFORM
151
+ // ==========================================================================
152
+ .uppercase {
153
+ text-transform: uppercase;
154
+ }
155
+
156
+ .lowercase {
157
+ text-transform: lowercase;
158
+ }
159
+
160
+ .capitalize {
161
+ text-transform: capitalize;
162
+ }
163
+
164
+ .normal-case {
165
+ text-transform: none;
166
+ }
167
+
168
+ // ==========================================================================
169
+ // TEXT COLOR
170
+ // ==========================================================================
171
+ .text-primary {
172
+ color: var(--ui-color-primary);
173
+ }
174
+
175
+ .text-muted {
176
+ color: var(--ui-color-text-muted);
177
+ }
178
+
179
+ .text-success {
180
+ color: var(--ui-color-success);
181
+ }
182
+
183
+ .text-warning {
184
+ color: var(--ui-color-warning);
185
+ }
186
+
187
+ .text-danger {
188
+ color: var(--ui-color-danger);
189
+ }
190
+
191
+ // ==========================================================================
192
+ // TEXT WRAPPING
193
+ // ==========================================================================
194
+ .truncate {
195
+ overflow: hidden;
196
+
197
+ text-overflow: ellipsis;
198
+ white-space: nowrap;
199
+ }
200
+
201
+ .whitespace-normal {
202
+ white-space: normal;
203
+ }
204
+
205
+ .whitespace-nowrap {
206
+ white-space: nowrap;
207
+ }
208
+
209
+ .whitespace-pre {
210
+ white-space: pre;
211
+ }
212
+
213
+ .whitespace-pre-wrap {
214
+ white-space: pre-wrap;
215
+ }
216
+
217
+ // ==========================================================================
218
+ // LINE LENGTH (for readable text)
219
+ // ==========================================================================
220
+ .prose {
221
+ max-inline-size: 65ch;
222
+ }
223
+
224
+ .prose-sm {
225
+ max-inline-size: 45ch;
226
+ }
227
+
228
+ .prose-lg {
229
+ max-inline-size: 75ch;
230
+ }
231
+
232
+ // ==========================================================================
233
+ // LETTER SPACING
234
+ // ==========================================================================
235
+ .tracking-display {
236
+ letter-spacing: var(--ui-tracking-display);
237
+ }
238
+
239
+ .tracking-body {
240
+ letter-spacing: var(--ui-tracking-body);
241
+ }
242
+
243
+ .tracking-caps {
244
+ letter-spacing: var(--ui-tracking-caps);
245
+ }
246
+ }
@@ -0,0 +1,198 @@
1
+ // Enable cross-document view transitions for same-origin navigation
2
+ @view-transition {
3
+ navigation: auto;
4
+ }
5
+
6
+ @layer utilities {
7
+ // Animation keyframes
8
+ @keyframes vt-fade-in {
9
+ from {
10
+ opacity: 0;
11
+ }
12
+ }
13
+
14
+ @keyframes vt-fade-out {
15
+ to {
16
+ opacity: 0;
17
+ }
18
+ }
19
+
20
+ @keyframes vt-slide-in-up {
21
+ from {
22
+ opacity: 0;
23
+ transform: translateY(1.25rem);
24
+ }
25
+ }
26
+
27
+ @keyframes vt-slide-out-up {
28
+ to {
29
+ opacity: 0;
30
+ transform: translateY(-1.25rem);
31
+ }
32
+ }
33
+
34
+ @keyframes vt-slide-in-down {
35
+ from {
36
+ opacity: 0;
37
+ transform: translateY(-1.25rem);
38
+ }
39
+ }
40
+
41
+ @keyframes vt-slide-out-down {
42
+ to {
43
+ opacity: 0;
44
+ transform: translateY(1.25rem);
45
+ }
46
+ }
47
+
48
+ @keyframes vt-slide-in-start {
49
+ from {
50
+ opacity: 0;
51
+ transform: translateX(-1.25rem);
52
+ }
53
+ }
54
+
55
+ @keyframes vt-slide-out-start {
56
+ to {
57
+ opacity: 0;
58
+ transform: translateX(-1.25rem);
59
+ }
60
+ }
61
+
62
+ @keyframes vt-slide-in-end {
63
+ from {
64
+ opacity: 0;
65
+ transform: translateX(1.25rem);
66
+ }
67
+ }
68
+
69
+ @keyframes vt-slide-out-end {
70
+ to {
71
+ opacity: 0;
72
+ transform: translateX(1.25rem);
73
+ }
74
+ }
75
+
76
+ @keyframes vt-scale-in {
77
+ from {
78
+ opacity: 0;
79
+ transform: scale(0.95);
80
+ }
81
+ }
82
+
83
+ @keyframes vt-scale-out {
84
+ to {
85
+ opacity: 0;
86
+ transform: scale(1.05);
87
+ }
88
+ }
89
+
90
+ // Named element utilities
91
+ .transition-name-sidebar { view-transition-name: sidebar; }
92
+ .transition-name-main { view-transition-name: main; }
93
+ .transition-name-header { view-transition-name: header; }
94
+ .transition-name-hero { view-transition-name: hero; }
95
+ .transition-name-card { view-transition-name: card; }
96
+ .transition-name-modal { view-transition-name: modal; }
97
+
98
+ // Animation presets
99
+ .transition-name-slide-up { view-transition-name: slide-up; }
100
+ .transition-name-slide-down { view-transition-name: slide-down; }
101
+ .transition-name-slide-start { view-transition-name: slide-start; }
102
+ .transition-name-slide-end { view-transition-name: slide-end; }
103
+ .transition-name-scale { view-transition-name: scale; }
104
+ .transition-name-fade { view-transition-name: fade; }
105
+
106
+ // Disable transition for specific element
107
+ .transition-name-none { view-transition-name: none; }
108
+
109
+ // Static elements (no animation, just persist)
110
+ ::view-transition-old(sidebar),
111
+ ::view-transition-new(sidebar),
112
+ ::view-transition-old(header),
113
+ ::view-transition-new(header) {
114
+ animation: none;
115
+ }
116
+
117
+ // Default crossfade timing
118
+ ::view-transition-old(root),
119
+ ::view-transition-new(root) {
120
+ animation-duration: var(--ui-duration-base);
121
+ animation-timing-function: var(--ui-ease-default);
122
+ }
123
+
124
+ // Fade animation
125
+ ::view-transition-old(fade) {
126
+ animation: vt-fade-out var(--ui-duration-base) var(--ui-ease-out);
127
+ }
128
+
129
+ ::view-transition-new(fade) {
130
+ animation: vt-fade-in var(--ui-duration-base) var(--ui-ease-out);
131
+ }
132
+
133
+ // Slide up animation
134
+ ::view-transition-old(slide-up),
135
+ ::view-transition-old(main) {
136
+ animation: vt-slide-out-up var(--ui-duration-base) var(--ui-ease-out);
137
+ }
138
+
139
+ ::view-transition-new(slide-up),
140
+ ::view-transition-new(main) {
141
+ animation: vt-slide-in-up var(--ui-duration-base) var(--ui-ease-out);
142
+ }
143
+
144
+ // Slide down animation
145
+ ::view-transition-old(slide-down) {
146
+ animation: vt-slide-out-down var(--ui-duration-base) var(--ui-ease-out);
147
+ }
148
+
149
+ ::view-transition-new(slide-down) {
150
+ animation: vt-slide-in-down var(--ui-duration-base) var(--ui-ease-out);
151
+ }
152
+
153
+ // Slide start (left in LTR) animation
154
+ ::view-transition-old(slide-start) {
155
+ animation: vt-slide-out-start var(--ui-duration-base) var(--ui-ease-out);
156
+ }
157
+
158
+ ::view-transition-new(slide-start) {
159
+ animation: vt-slide-in-start var(--ui-duration-base) var(--ui-ease-out);
160
+ }
161
+
162
+ // Slide end (right in LTR) animation
163
+ ::view-transition-old(slide-end) {
164
+ animation: vt-slide-out-end var(--ui-duration-base) var(--ui-ease-out);
165
+ }
166
+
167
+ ::view-transition-new(slide-end) {
168
+ animation: vt-slide-in-end var(--ui-duration-base) var(--ui-ease-out);
169
+ }
170
+
171
+ // Scale animation
172
+ ::view-transition-old(scale),
173
+ ::view-transition-old(modal),
174
+ ::view-transition-old(card) {
175
+ animation: vt-scale-out var(--ui-duration-base) var(--ui-ease-out);
176
+ }
177
+
178
+ ::view-transition-new(scale),
179
+ ::view-transition-new(modal),
180
+ ::view-transition-new(card) {
181
+ animation: vt-scale-in var(--ui-duration-base) var(--ui-ease-out);
182
+ }
183
+
184
+ // Hero morphs automatically (browser interpolates position/size)
185
+ ::view-transition-group(hero) {
186
+ animation-duration: var(--ui-duration-slow);
187
+ animation-timing-function: var(--ui-ease-in-out);
188
+ }
189
+
190
+ // Accessibility: disable animations for reduced motion
191
+ @media (prefers-reduced-motion: reduce) {
192
+ ::view-transition-old(*),
193
+ ::view-transition-new(*),
194
+ ::view-transition-group(*) {
195
+ animation-duration: 0s !important;
196
+ }
197
+ }
198
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "view-transition",
3
+ "type": "utility",
4
+ "description": "CSS View Transitions API utilities for smooth page navigation animations",
5
+ "utilities": [
6
+ "transition-name-sidebar",
7
+ "transition-name-main",
8
+ "transition-name-header",
9
+ "transition-name-hero",
10
+ "transition-name-card",
11
+ "transition-name-modal",
12
+ "transition-name-slide-up",
13
+ "transition-name-slide-down",
14
+ "transition-name-slide-start",
15
+ "transition-name-slide-end",
16
+ "transition-name-scale",
17
+ "transition-name-fade",
18
+ "transition-name-none"
19
+ ],
20
+ "cssVars": []
21
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "id": "view-transition-utils",
3
+ "type": "utility",
4
+ "title": "View Transition",
5
+ "description": "CSS View Transitions API utilities for smooth page navigation. Enabled by default; unsupported browsers work normally.",
6
+ "api": "view-transition.api.json",
7
+ "sections": [
8
+ {
9
+ "title": "Static elements",
10
+ "description": "Elements that persist without animation. Sidebar and header stay fixed during page transitions.",
11
+ "examples": [
12
+ {
13
+ "code": "<header class=\"ui-transition-name-header\">...</header>\n<nav class=\"ui-transition-name-sidebar\">...</nav>"
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "title": "Slide animations",
19
+ "description": "Content slides in/out in different directions.",
20
+ "examples": [
21
+ {
22
+ "code": "<main class=\"ui-transition-name-main\">Slides up</main>\n<main class=\"ui-transition-name-slide-up\">Slides up</main>\n<main class=\"ui-transition-name-slide-down\">Slides down</main>\n<main class=\"ui-transition-name-slide-start\">Slides from left</main>\n<main class=\"ui-transition-name-slide-end\">Slides from right</main>"
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "title": "Scale and fade",
28
+ "description": "Scale effect for modals/cards, fade for subtle transitions.",
29
+ "examples": [
30
+ {
31
+ "code": "<div class=\"ui-transition-name-scale\">Scales in/out</div>\n<div class=\"ui-transition-name-card\">Card scales</div>\n<div class=\"ui-transition-name-modal\">Modal scales</div>\n<div class=\"ui-transition-name-fade\">Fades in/out</div>"
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "title": "Hero morph",
37
+ "description": "Same element on both pages morphs (position/size interpolates). Use same class on source and target.",
38
+ "examples": [
39
+ {
40
+ "code": "<!-- Page 1: thumbnail -->\n<img class=\"ui-transition-name-hero\" src=\"product.jpg\">\n\n<!-- Page 2: full image -->\n<img class=\"ui-transition-name-hero\" src=\"product.jpg\">"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "title": "Disable",
46
+ "description": "Exclude an element from view transitions.",
47
+ "examples": [
48
+ {
49
+ "code": "<div class=\"ui-transition-name-none\">No transition</div>"
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "title": "Preserving scroll position",
55
+ "description": "View transitions snapshot elements, resetting scroll. Use `pagereveal` event to restore scroll before paint.",
56
+ "examples": [
57
+ {
58
+ "code": "// Save scroll on navigation\nlink.addEventListener('click', () => {\n sessionStorage.setItem('scroll', sidebar.scrollTop);\n});\n\n// Restore before page reveals\nwindow.addEventListener('pagereveal', () => {\n const saved = sessionStorage.getItem('scroll');\n if (saved) sidebar.scrollTop = parseInt(saved, 10);\n});"
59
+ }
60
+ ]
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,38 @@
1
+ // Visually Hidden - accessible hiding utility
2
+ // Hides content visually but keeps it accessible to screen readers
3
+
4
+ @use '../../00-config/tokens/variables' as t;
5
+
6
+ @layer utilities {
7
+ .visually-hidden {
8
+ position: absolute;
9
+
10
+ block-size: calc(#{t.$unit} / 8);
11
+ inline-size: calc(#{t.$unit} / 8);
12
+ padding: 0;
13
+ margin: calc(#{t.$unit} / -8);
14
+ overflow: hidden;
15
+
16
+ white-space: nowrap;
17
+
18
+ border: 0;
19
+ clip: rect(0 0 0 0); // stylelint-disable-line property-no-deprecated
20
+ clip-path: inset(50%);
21
+ }
22
+
23
+ // Focusable variant - becomes visible on focus
24
+ .visually-hidden--focusable:focus,
25
+ .visually-hidden--focusable:active {
26
+ position: static;
27
+
28
+ block-size: auto;
29
+ inline-size: auto;
30
+ margin: 0;
31
+ overflow: visible;
32
+
33
+ white-space: normal;
34
+
35
+ clip: auto; // stylelint-disable-line property-no-deprecated
36
+ clip-path: none;
37
+ }
38
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "visually-hidden",
3
+ "element": "span",
4
+ "modifiers": {
5
+ "focusable": { "type": "boolean" }
6
+ },
7
+ "cssVars": []
8
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "id": "visually-hidden",
3
+ "type": "utility",
4
+ "title": "Visually Hidden",
5
+ "description": "Hides content visually while keeping it accessible to screen readers. Use for skip links and accessible labels.",
6
+ "api": "visually-hidden.api.json",
7
+ "sections": [
8
+ {
9
+ "title": "Default",
10
+ "description": "Content is hidden visually but announced by screen readers",
11
+ "examples": [
12
+ {
13
+ "html": "<button>Submit<span class=\"ui-visually-hidden\"> form to contact support</span></button>",
14
+ "code": "<button>\n Submit\n <span class=\"ui-visually-hidden\"> form to contact support</span>\n</button>"
15
+ }
16
+ ]
17
+ },
18
+ {
19
+ "title": "Focusable (Skip Link)",
20
+ "description": "Becomes visible when focused - useful for skip links",
21
+ "examples": [
22
+ {
23
+ "html": "<a href=\"#main\" class=\"ui-visually-hidden ui-visually-hidden--focusable\" style=\"position: relative;\">Skip to main content</a>",
24
+ "code": "<a href=\"#main\" class=\"ui-visually-hidden ui-visually-hidden--focusable\">\n Skip to main content\n</a>"
25
+ }
26
+ ]
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,79 @@
1
+ /* Debug grid overlay - add class="debug-grid" to body or any container */
2
+ .debug-grid,
3
+ .debug-grid-rows,
4
+ .debug-baseline {
5
+ position: relative;
6
+ }
7
+
8
+ .debug-grid {
9
+ --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.15);
10
+ }
11
+
12
+ .debug-grid::after {
13
+ content: "";
14
+ position: absolute;
15
+ inset-block-start: 0;
16
+ inset-inline-start: 0;
17
+ z-index: var(--ui-z-debug);
18
+
19
+ block-size: 100%;
20
+ inline-size: 100%;
21
+ min-block-size: 100vh;
22
+
23
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px),
24
+ linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
25
+ pointer-events: none;
26
+ background-size: var(--unit) var(--unit);
27
+ background-position: 0 0;
28
+ }
29
+
30
+ /* Stronger grid at row intervals (16px) */
31
+ .debug-grid-rows {
32
+ --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.1);
33
+ --debug-color-strong: hsl(var(--ui-hue-primary) 80% 50% / 0.25);
34
+ }
35
+
36
+ .debug-grid-rows::after {
37
+ content: "";
38
+ position: absolute;
39
+ inset-block-start: 0;
40
+ inset-inline-start: 0;
41
+ z-index: var(--ui-z-debug);
42
+
43
+ block-size: 100%;
44
+ inline-size: 100%;
45
+ min-block-size: 100vh;
46
+
47
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px),
48
+ linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px),
49
+ linear-gradient(to bottom, var(--debug-color-strong) 1px, transparent 1px);
50
+ pointer-events: none;
51
+ background-size: var(--unit) var(--unit), var(--unit) var(--unit), var(--unit) var(--ui-row);
52
+ background-position: 0 0;
53
+ }
54
+
55
+ /* Baseline grid only (horizontal lines) */
56
+ .debug-baseline {
57
+ --debug-color: hsl(var(--ui-hue-danger) 80% 50% / 0.2);
58
+ }
59
+
60
+ .debug-baseline::after {
61
+ content: "";
62
+ position: absolute;
63
+ inset-block-start: 0;
64
+ inset-inline-start: 0;
65
+ z-index: var(--ui-z-debug);
66
+
67
+ block-size: 100%;
68
+ inline-size: 100%;
69
+ min-block-size: 100vh;
70
+
71
+ background-image: linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
72
+ pointer-events: none;
73
+ background-size: 100% var(--unit);
74
+ }
75
+
76
+ /* Element boundaries outline */
77
+ .debug-outline * {
78
+ outline: 1px solid hsl(0 100% 50% / 0.5);
79
+ }
@@ -0,0 +1 @@
1
+ @forward "./grid-overlay";