@sixthshift/design-system 0.2.1 → 0.3.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 (288) hide show
  1. package/README.md +135 -28
  2. package/dist/components/Badge/Badge.d.ts +5 -2
  3. package/dist/components/Badge/Badge.d.ts.map +1 -1
  4. package/dist/components/Badge/Badge.js +5 -3
  5. package/dist/components/Badge/Badge.js.map +1 -1
  6. package/dist/components/BarChart/BarChart.d.ts +8 -2
  7. package/dist/components/BarChart/BarChart.d.ts.map +1 -1
  8. package/dist/components/BarChart/BarChart.js +5 -3
  9. package/dist/components/BarChart/BarChart.js.map +1 -1
  10. package/dist/components/Calendar/Calendar.d.ts +17 -1
  11. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  12. package/dist/components/Calendar/Calendar.js +80 -225
  13. package/dist/components/Calendar/Calendar.js.map +1 -1
  14. package/dist/components/Calendar/CalendarView.d.ts +15 -0
  15. package/dist/components/Calendar/CalendarView.d.ts.map +1 -0
  16. package/dist/components/Calendar/CalendarView.js +255 -0
  17. package/dist/components/Calendar/CalendarView.js.map +1 -0
  18. package/dist/components/Calendar/calendar.types.d.ts +78 -27
  19. package/dist/components/Calendar/calendar.types.d.ts.map +1 -1
  20. package/dist/components/Calendar/calendar.types.js +10 -3
  21. package/dist/components/Calendar/calendar.types.js.map +1 -1
  22. package/dist/components/Calendar/index.d.ts +16 -2
  23. package/dist/components/Calendar/index.d.ts.map +1 -1
  24. package/dist/components/Calendar/index.js +15 -1
  25. package/dist/components/Calendar/index.js.map +1 -1
  26. package/dist/components/ColorDot/ColorDot.d.ts +9 -3
  27. package/dist/components/ColorDot/ColorDot.d.ts.map +1 -1
  28. package/dist/components/ColorDot/ColorDot.js +5 -3
  29. package/dist/components/ColorDot/ColorDot.js.map +1 -1
  30. package/dist/components/DatePicker/DatePicker.d.ts +2 -2
  31. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
  32. package/dist/components/DatePicker/DatePicker.js +65 -10
  33. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  34. package/dist/components/DatePicker/datepicker.types.d.ts +34 -36
  35. package/dist/components/DatePicker/datepicker.types.d.ts.map +1 -1
  36. package/dist/components/DatePicker/datepicker.types.js +5 -3
  37. package/dist/components/DatePicker/datepicker.types.js.map +1 -1
  38. package/dist/components/DatePicker/index.d.ts +10 -1
  39. package/dist/components/DatePicker/index.d.ts.map +1 -1
  40. package/dist/components/DatePicker/index.js +8 -0
  41. package/dist/components/DatePicker/index.js.map +1 -1
  42. package/dist/components/DateRangePicker/DateRangePicker.d.ts +3 -2
  43. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  44. package/dist/components/DateRangePicker/DateRangePicker.js +17 -21
  45. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  46. package/dist/components/DateRangePicker/daterangepicker.types.d.ts +20 -20
  47. package/dist/components/DateRangePicker/daterangepicker.types.d.ts.map +1 -1
  48. package/dist/components/DateRangePicker/daterangepicker.types.js +6 -0
  49. package/dist/components/DateRangePicker/daterangepicker.types.js.map +1 -1
  50. package/dist/components/DateRangePicker/index.d.ts +8 -1
  51. package/dist/components/DateRangePicker/index.d.ts.map +1 -1
  52. package/dist/components/DateRangePicker/index.js +6 -0
  53. package/dist/components/DateRangePicker/index.js.map +1 -1
  54. package/dist/components/DateTimePicker/DateTimePicker.d.ts +3 -3
  55. package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
  56. package/dist/components/DateTimePicker/DateTimePicker.js +30 -12
  57. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  58. package/dist/components/DateTimePicker/datetimepicker.types.d.ts +20 -17
  59. package/dist/components/DateTimePicker/datetimepicker.types.d.ts.map +1 -1
  60. package/dist/components/DateTimePicker/datetimepicker.types.js +10 -0
  61. package/dist/components/DateTimePicker/datetimepicker.types.js.map +1 -1
  62. package/dist/components/DateTimePicker/index.d.ts +8 -1
  63. package/dist/components/DateTimePicker/index.d.ts.map +1 -1
  64. package/dist/components/DateTimePicker/index.js +6 -0
  65. package/dist/components/DateTimePicker/index.js.map +1 -1
  66. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts +3 -3
  67. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
  68. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +41 -20
  69. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -1
  70. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts +22 -18
  71. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts.map +1 -1
  72. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js +8 -0
  73. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js.map +1 -1
  74. package/dist/components/DateTimeRangePicker/index.d.ts +8 -0
  75. package/dist/components/DateTimeRangePicker/index.d.ts.map +1 -1
  76. package/dist/components/DateTimeRangePicker/index.js +7 -0
  77. package/dist/components/DateTimeRangePicker/index.js.map +1 -1
  78. package/dist/components/EmptyState/EmptyState.d.ts +16 -5
  79. package/dist/components/EmptyState/EmptyState.d.ts.map +1 -1
  80. package/dist/components/EmptyState/EmptyState.js +5 -3
  81. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  82. package/dist/components/Field/Field.d.ts +3 -3
  83. package/dist/components/Field/Field.d.ts.map +1 -1
  84. package/dist/components/Field/Field.js +6 -4
  85. package/dist/components/Field/Field.js.map +1 -1
  86. package/dist/components/LineChart/LineChart.d.ts +18 -2
  87. package/dist/components/LineChart/LineChart.d.ts.map +1 -1
  88. package/dist/components/LineChart/LineChart.js +5 -3
  89. package/dist/components/LineChart/LineChart.js.map +1 -1
  90. package/dist/components/Markdown/Markdown.d.ts +2 -4
  91. package/dist/components/Markdown/Markdown.d.ts.map +1 -1
  92. package/dist/components/Markdown/Markdown.js +3 -2
  93. package/dist/components/Markdown/Markdown.js.map +1 -1
  94. package/dist/components/Message/Message.d.ts.map +1 -1
  95. package/dist/components/Message/Message.js +16 -1
  96. package/dist/components/Message/Message.js.map +1 -1
  97. package/dist/components/MetricList/MetricList.d.ts +3 -3
  98. package/dist/components/MetricList/MetricList.d.ts.map +1 -1
  99. package/dist/components/MetricList/MetricList.js +5 -3
  100. package/dist/components/MetricList/MetricList.js.map +1 -1
  101. package/dist/components/Modal/Modal.d.ts +24 -5
  102. package/dist/components/Modal/Modal.d.ts.map +1 -1
  103. package/dist/components/Modal/Modal.js +16 -6
  104. package/dist/components/Modal/Modal.js.map +1 -1
  105. package/dist/components/Modal/components/ModalContext.d.ts +14 -0
  106. package/dist/components/Modal/components/ModalContext.d.ts.map +1 -1
  107. package/dist/components/Modal/components/ModalContext.js.map +1 -1
  108. package/dist/components/Modal/components/ModalHeader.d.ts.map +1 -1
  109. package/dist/components/Modal/components/ModalHeader.js +13 -2
  110. package/dist/components/Modal/components/ModalHeader.js.map +1 -1
  111. package/dist/components/NavBottom/NavBottom.d.ts +2 -1
  112. package/dist/components/NavBottom/NavBottom.d.ts.map +1 -1
  113. package/dist/components/NavBottom/NavBottom.js +6 -4
  114. package/dist/components/NavBottom/NavBottom.js.map +1 -1
  115. package/dist/components/NavSide/NavItem.js +1 -1
  116. package/dist/components/NavSide/NavItem.js.map +1 -1
  117. package/dist/components/NavSide/NavSide.d.ts +2 -1
  118. package/dist/components/NavSide/NavSide.d.ts.map +1 -1
  119. package/dist/components/NavSide/NavSide.js +5 -3
  120. package/dist/components/NavSide/NavSide.js.map +1 -1
  121. package/dist/components/Popover/Popover.d.ts.map +1 -1
  122. package/dist/components/Popover/Popover.js +7 -0
  123. package/dist/components/Popover/Popover.js.map +1 -1
  124. package/dist/components/Popover/components/PopoverBody.d.ts.map +1 -1
  125. package/dist/components/Popover/components/PopoverBody.js +5 -2
  126. package/dist/components/Popover/components/PopoverBody.js.map +1 -1
  127. package/dist/components/Popover/components/PopoverContext.d.ts +1 -0
  128. package/dist/components/Popover/components/PopoverContext.d.ts.map +1 -1
  129. package/dist/components/Popover/components/PopoverContext.js.map +1 -1
  130. package/dist/components/Popover/components/PopoverTrigger.d.ts.map +1 -1
  131. package/dist/components/Popover/components/PopoverTrigger.js +2 -2
  132. package/dist/components/Popover/components/PopoverTrigger.js.map +1 -1
  133. package/dist/components/ProgressBar/ProgressBar.d.ts +2 -1
  134. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
  135. package/dist/components/ProgressBar/ProgressBar.js +5 -3
  136. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  137. package/dist/components/Select/Select.d.ts +11 -2
  138. package/dist/components/Select/Select.d.ts.map +1 -1
  139. package/dist/components/Select/Select.js +64 -18
  140. package/dist/components/Select/Select.js.map +1 -1
  141. package/dist/components/Select/SelectDropdown.d.ts +14 -2
  142. package/dist/components/Select/SelectDropdown.d.ts.map +1 -1
  143. package/dist/components/Select/SelectDropdown.js +19 -4
  144. package/dist/components/Select/SelectDropdown.js.map +1 -1
  145. package/dist/components/Select/SelectTrigger.d.ts +10 -3
  146. package/dist/components/Select/SelectTrigger.d.ts.map +1 -1
  147. package/dist/components/Select/SelectTrigger.js +12 -3
  148. package/dist/components/Select/SelectTrigger.js.map +1 -1
  149. package/dist/components/Select/useSelectKeyboard.d.ts +15 -1
  150. package/dist/components/Select/useSelectKeyboard.d.ts.map +1 -1
  151. package/dist/components/Select/useSelectKeyboard.js +73 -65
  152. package/dist/components/Select/useSelectKeyboard.js.map +1 -1
  153. package/dist/components/Sheet/Sheet.d.ts +19 -5
  154. package/dist/components/Sheet/Sheet.d.ts.map +1 -1
  155. package/dist/components/Sheet/Sheet.js +18 -6
  156. package/dist/components/Sheet/Sheet.js.map +1 -1
  157. package/dist/components/Sheet/components/SheetContext.d.ts +10 -0
  158. package/dist/components/Sheet/components/SheetContext.d.ts.map +1 -1
  159. package/dist/components/Sheet/components/SheetContext.js.map +1 -1
  160. package/dist/components/Sheet/components/SheetHeader.d.ts.map +1 -1
  161. package/dist/components/Sheet/components/SheetHeader.js +11 -2
  162. package/dist/components/Sheet/components/SheetHeader.js.map +1 -1
  163. package/dist/components/Skeleton/Skeleton.d.ts +2 -1
  164. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  165. package/dist/components/Skeleton/Skeleton.js +5 -3
  166. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  167. package/dist/components/Sparkline/Sparkline.d.ts +10 -2
  168. package/dist/components/Sparkline/Sparkline.d.ts.map +1 -1
  169. package/dist/components/Sparkline/Sparkline.js +5 -3
  170. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  171. package/dist/components/StatsCard/StatsCard.d.ts +4 -4
  172. package/dist/components/StatsCard/StatsCard.d.ts.map +1 -1
  173. package/dist/components/StatsCard/StatsCard.js +5 -3
  174. package/dist/components/StatsCard/StatsCard.js.map +1 -1
  175. package/dist/components/Tabs/Tabs.d.ts +2 -2
  176. package/dist/components/Tabs/components/TabsList.d.ts +1 -1
  177. package/dist/components/Tabs/components/TabsList.d.ts.map +1 -1
  178. package/dist/components/Tabs/components/TabsList.js +5 -4
  179. package/dist/components/Tabs/components/TabsList.js.map +1 -1
  180. package/dist/components/Tabs/components/TabsPanels.d.ts +1 -1
  181. package/dist/components/Tabs/components/TabsPanels.d.ts.map +1 -1
  182. package/dist/components/Tabs/components/TabsPanels.js +5 -3
  183. package/dist/components/Tabs/components/TabsPanels.js.map +1 -1
  184. package/dist/components/TagChip/TagChip.d.ts +2 -1
  185. package/dist/components/TagChip/TagChip.d.ts.map +1 -1
  186. package/dist/components/TagChip/TagChip.js +5 -3
  187. package/dist/components/TagChip/TagChip.js.map +1 -1
  188. package/dist/components/TagInput/TagInput.d.ts +1 -1
  189. package/dist/components/TagInput/TagInput.d.ts.map +1 -1
  190. package/dist/components/TagInput/TagInput.js +5 -4
  191. package/dist/components/TagInput/TagInput.js.map +1 -1
  192. package/dist/components/TimePicker/TimePicker.d.ts +2 -2
  193. package/dist/components/TimePicker/TimePicker.d.ts.map +1 -1
  194. package/dist/components/TimePicker/TimePicker.js +27 -11
  195. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  196. package/dist/components/TimePicker/timepicker.types.d.ts +14 -13
  197. package/dist/components/TimePicker/timepicker.types.d.ts.map +1 -1
  198. package/dist/components/TimePicker/timepicker.types.js +4 -3
  199. package/dist/components/TimePicker/timepicker.types.js.map +1 -1
  200. package/dist/date-time/index.d.ts +2 -0
  201. package/dist/date-time/index.d.ts.map +1 -1
  202. package/dist/date-time/index.js +9 -0
  203. package/dist/date-time/index.js.map +1 -1
  204. package/dist/date-time/iso.d.ts +261 -0
  205. package/dist/date-time/iso.d.ts.map +1 -0
  206. package/dist/date-time/iso.js +358 -0
  207. package/dist/date-time/iso.js.map +1 -0
  208. package/dist/date-time/now.d.ts +7 -6
  209. package/dist/date-time/now.d.ts.map +1 -1
  210. package/dist/date-time/now.js +3 -3
  211. package/dist/date-time/now.js.map +1 -1
  212. package/dist/theme/index.d.ts +4 -3
  213. package/dist/theme/index.d.ts.map +1 -1
  214. package/dist/theme/index.js +3 -2
  215. package/dist/theme/index.js.map +1 -1
  216. package/dist/theme/schema.d.ts +70 -32
  217. package/dist/theme/schema.d.ts.map +1 -1
  218. package/dist/theme/schema.js +36 -18
  219. package/dist/theme/schema.js.map +1 -1
  220. package/package.json +9 -15
  221. package/src/components/Badge/Badge.tsx +5 -4
  222. package/src/components/BarChart/BarChart.tsx +25 -30
  223. package/src/components/Calendar/Calendar.tsx +91 -401
  224. package/src/components/Calendar/CalendarView.tsx +445 -0
  225. package/src/components/Calendar/calendar.types.ts +94 -29
  226. package/src/components/Calendar/index.ts +16 -17
  227. package/src/components/ColorDot/ColorDot.tsx +6 -4
  228. package/src/components/DatePicker/DatePicker.tsx +92 -16
  229. package/src/components/DatePicker/datepicker.types.ts +38 -39
  230. package/src/components/DatePicker/index.ts +11 -10
  231. package/src/components/DateRangePicker/DateRangePicker.tsx +17 -21
  232. package/src/components/DateRangePicker/daterangepicker.types.ts +22 -22
  233. package/src/components/DateRangePicker/index.ts +9 -1
  234. package/src/components/DateTimePicker/DateTimePicker.tsx +46 -18
  235. package/src/components/DateTimePicker/datetimepicker.types.ts +22 -18
  236. package/src/components/DateTimePicker/index.ts +9 -1
  237. package/src/components/DateTimeRangePicker/DateTimeRangePicker.tsx +62 -28
  238. package/src/components/DateTimeRangePicker/datetimerangepicker.types.ts +24 -19
  239. package/src/components/DateTimeRangePicker/index.ts +9 -0
  240. package/src/components/EmptyState/EmptyState.tsx +8 -7
  241. package/src/components/Field/Field.tsx +7 -6
  242. package/src/components/LineChart/LineChart.tsx +147 -141
  243. package/src/components/Markdown/Markdown.tsx +4 -3
  244. package/src/components/Message/Message.tsx +17 -1
  245. package/src/components/MetricList/MetricList.tsx +10 -5
  246. package/src/components/Modal/Modal.tsx +119 -87
  247. package/src/components/Modal/components/ModalContext.tsx +14 -0
  248. package/src/components/Modal/components/ModalHeader.tsx +14 -2
  249. package/src/components/NavBottom/NavBottom.tsx +6 -4
  250. package/src/components/NavSide/NavItem.tsx +1 -1
  251. package/src/components/NavSide/NavSide.tsx +5 -3
  252. package/src/components/Popover/Popover.tsx +7 -0
  253. package/src/components/Popover/components/PopoverBody.tsx +6 -1
  254. package/src/components/Popover/components/PopoverContext.tsx +1 -0
  255. package/src/components/Popover/components/PopoverTrigger.tsx +2 -1
  256. package/src/components/ProgressBar/ProgressBar.tsx +32 -28
  257. package/src/components/Select/Select.tsx +76 -19
  258. package/src/components/Select/SelectDropdown.tsx +32 -3
  259. package/src/components/Select/SelectTrigger.tsx +26 -3
  260. package/src/components/Select/useSelectKeyboard.ts +20 -10
  261. package/src/components/Sheet/Sheet.tsx +108 -83
  262. package/src/components/Sheet/components/SheetContext.tsx +10 -0
  263. package/src/components/Sheet/components/SheetHeader.tsx +17 -2
  264. package/src/components/Skeleton/Skeleton.tsx +5 -3
  265. package/src/components/Sparkline/Sparkline.tsx +29 -36
  266. package/src/components/StatsCard/StatsCard.tsx +7 -6
  267. package/src/components/Tabs/components/TabsList.tsx +5 -3
  268. package/src/components/Tabs/components/TabsPanels.tsx +5 -3
  269. package/src/components/TagChip/TagChip.tsx +10 -3
  270. package/src/components/TagInput/TagInput.tsx +5 -3
  271. package/src/components/TimePicker/TimePicker.tsx +31 -13
  272. package/src/components/TimePicker/timepicker.types.ts +14 -13
  273. package/src/date-time/index.ts +61 -0
  274. package/src/date-time/iso.ts +511 -0
  275. package/src/date-time/now.ts +10 -9
  276. package/src/theme/index.ts +11 -3
  277. package/src/theme/schema.ts +82 -54
  278. package/src/theme/tokens.css +807 -0
  279. package/dist/styles.css +0 -2
  280. package/dist/theme.generated.css +0 -438
  281. package/src/styles/base.css +0 -41
  282. package/src/theme/palette.json +0 -100
  283. package/src/theme/palette.schema.json +0 -40
  284. package/src/theme/theme.json +0 -349
  285. package/src/theme/theme.schema.json +0 -876
  286. package/src/theme/typography.json +0 -7
  287. package/src/theme/typography.schema.json +0 -36
  288. package/tailwind.config.ts +0 -261
@@ -0,0 +1,807 @@
1
+ /**
2
+ * Design tokens — the single source of truth for the design system.
3
+ *
4
+ * Hand-edited. Four layers, in order:
5
+ *
6
+ * 1. Palette — raw scales. Never referenced by components.
7
+ * 2. Semantic — what components actually use, one block per mode. Every
8
+ * value points at a palette entry, so a re-skin edits layer 1 only.
9
+ * 3. `@theme` — tells Tailwind which utilities exist. Every semantic token
10
+ * needs an entry here or its class does not compile.
11
+ * 4. `@layer base` — the few global rules the components genuinely need. App
12
+ * opinions (page background, scroll behaviour) are deliberately not here:
13
+ * a library has no business restyling its consumer's page.
14
+ *
15
+ * Nothing verifies any of that, so when you add a token: put it in *both* mode
16
+ * blocks and give it a `@theme` entry. Miss the dark block and it is undefined
17
+ * in dark mode; miss the `@theme` entry and its utility never compiles. Neither
18
+ * failure raises an error anywhere.
19
+ */
20
+
21
+ /* =============================================================================
22
+ 1. PALETTE
23
+ ============================================================================= */
24
+
25
+ :root {
26
+ /* Identity. Declared as variables rather than comments so anything that wants
27
+ them — the token documentation stories, a consumer's about page — can read
28
+ them at runtime instead of parsing this file. */
29
+ --theme-name: "Default";
30
+ --theme-version: "0.1.0";
31
+
32
+ --color-emerald-50: #f2fafb;
33
+ --color-emerald-100: #d6eef0;
34
+ --color-emerald-200: #addde0;
35
+ --color-emerald-300: #7cc4c8;
36
+ --color-emerald-400: #4ba5a9;
37
+ --color-emerald-500: #368086;
38
+ --color-emerald-600: #2c666c;
39
+ --color-emerald-700: #234e53;
40
+ --color-emerald-800: #19393d;
41
+ --color-emerald-900: #11292c;
42
+ --color-emerald-950: #0a1a1d;
43
+
44
+ --color-topaz-50: #fff7f0;
45
+ --color-topaz-100: #ffe5d1;
46
+ --color-topaz-200: #fbc89f;
47
+ --color-topaz-300: #f0a066;
48
+ --color-topaz-400: #d9722e;
49
+ --color-topaz-500: #c4530a;
50
+ --color-topaz-600: #9f4007;
51
+ --color-topaz-700: #7b2e06;
52
+ --color-topaz-800: #5a2105;
53
+ --color-topaz-900: #3d1503;
54
+ --color-topaz-950: #230c02;
55
+
56
+ --color-ruby-50: #fff5f6;
57
+ --color-ruby-100: #fde1e4;
58
+ --color-ruby-200: #f8bac3;
59
+ --color-ruby-300: #ec8796;
60
+ --color-ruby-400: #d55368;
61
+ --color-ruby-500: #c33341;
62
+ --color-ruby-600: #9e2533;
63
+ --color-ruby-700: #7a1b27;
64
+ --color-ruby-800: #57131c;
65
+ --color-ruby-900: #3a0c13;
66
+ --color-ruby-950: #21070b;
67
+
68
+ --color-ocean-50: #f0f4fa;
69
+ --color-ocean-100: #dce6f4;
70
+ --color-ocean-200: #b9cde9;
71
+ --color-ocean-300: #8fafd9;
72
+ --color-ocean-400: #6691c7;
73
+ --color-ocean-500: #4573ae;
74
+ --color-ocean-600: #355a8c;
75
+ --color-ocean-700: #034078;
76
+ --color-ocean-800: #022f5a;
77
+ --color-ocean-900: #001f54;
78
+ --color-ocean-950: #0a1128;
79
+
80
+ --color-sky-50: #effcff;
81
+ --color-sky-100: #d6f5fb;
82
+ --color-sky-200: #b3ecf7;
83
+ --color-sky-300: #7fdff0;
84
+ --color-sky-400: #44c9e2;
85
+ --color-sky-500: #1282a2;
86
+ --color-sky-600: #0f6b86;
87
+ --color-sky-700: #10576d;
88
+ --color-sky-800: #12475a;
89
+ --color-sky-900: #133c4c;
90
+ --color-sky-950: #062733;
91
+
92
+ --color-earth-50: #fefcfb;
93
+ --color-earth-100: #faf6f4;
94
+ --color-earth-200: #f2ebe7;
95
+ --color-earth-300: #e8ddd6;
96
+ --color-earth-400: #d4c4b9;
97
+ --color-earth-500: #b8a192;
98
+ --color-earth-600: #9a816f;
99
+ --color-earth-700: #7d6555;
100
+ --color-earth-800: #5e4b40;
101
+ --color-earth-900: #3d302a;
102
+ --color-earth-950: #211916;
103
+
104
+ --color-slate-50: #f8fafc;
105
+ --color-slate-100: #f1f5f9;
106
+ --color-slate-200: #e2e8f0;
107
+ --color-slate-300: #cbd5e1;
108
+ --color-slate-400: #94a3b8;
109
+ --color-slate-500: #64748b;
110
+ --color-slate-600: #475569;
111
+ --color-slate-700: #334155;
112
+ --color-slate-800: #1e293b;
113
+ --color-slate-900: #0f172a;
114
+ --color-slate-950: #020617;
115
+
116
+ --font-sans: Inter Variable, ui-sans-serif, system-ui, sans-serif;
117
+ --font-mono: JetBrains Mono Variable, ui-monospace, monospace;
118
+ }
119
+
120
+ /* =============================================================================
121
+ 2. SEMANTIC TOKENS
122
+ ============================================================================= */
123
+
124
+ :root:not([data-theme]),
125
+ :root[data-theme="light"] {
126
+ /* Background */
127
+ --bg-strong: var(--color-slate-800);
128
+ --bg-strong-hovered: var(--color-slate-900);
129
+ --bg-strong-pressed: var(--color-slate-950);
130
+ --bg-strong-disabled: var(--color-slate-300);
131
+ --bg-normal: white;
132
+ --bg-normal-hovered: var(--color-slate-50);
133
+ --bg-normal-pressed: var(--color-slate-100);
134
+ --bg-normal-disabled: var(--color-slate-200);
135
+ --bg-subtle: var(--color-slate-50);
136
+ --bg-subtle-hovered: var(--color-slate-100);
137
+ --bg-subtle-pressed: var(--color-slate-200);
138
+ --bg-subtle-disabled: var(--color-slate-100);
139
+ --bg-brand-subtle: var(--color-ocean-100);
140
+ --bg-brand-subtle-hovered: var(--color-ocean-200);
141
+ --bg-brand-subtle-pressed: var(--color-ocean-300);
142
+ --bg-brand-subtle-disabled: var(--color-ocean-50);
143
+ --bg-brand: var(--color-ocean-600);
144
+ --bg-brand-hovered: var(--color-ocean-700);
145
+ --bg-brand-pressed: var(--color-ocean-800);
146
+ --bg-brand-disabled: var(--color-ocean-300);
147
+ --bg-brand-strong: var(--color-ocean-800);
148
+ --bg-brand-strong-hovered: var(--color-ocean-900);
149
+ --bg-brand-strong-pressed: var(--color-ocean-950);
150
+ --bg-brand-strong-disabled: var(--color-ocean-400);
151
+ --bg-success-subtle: var(--color-emerald-100);
152
+ --bg-success-subtle-hovered: var(--color-emerald-200);
153
+ --bg-success-subtle-pressed: var(--color-emerald-300);
154
+ --bg-success-subtle-disabled: var(--color-emerald-50);
155
+ --bg-success: var(--color-emerald-600);
156
+ --bg-success-hovered: var(--color-emerald-700);
157
+ --bg-success-pressed: var(--color-emerald-800);
158
+ --bg-success-disabled: var(--color-emerald-300);
159
+ --bg-success-strong: var(--color-emerald-800);
160
+ --bg-success-strong-hovered: var(--color-emerald-900);
161
+ --bg-success-strong-pressed: var(--color-emerald-950);
162
+ --bg-success-strong-disabled: var(--color-emerald-400);
163
+ --bg-warning-subtle: var(--color-topaz-100);
164
+ --bg-warning-subtle-hovered: var(--color-topaz-200);
165
+ --bg-warning-subtle-pressed: var(--color-topaz-300);
166
+ --bg-warning-subtle-disabled: var(--color-topaz-50);
167
+ --bg-warning: var(--color-topaz-600);
168
+ --bg-warning-hovered: var(--color-topaz-700);
169
+ --bg-warning-pressed: var(--color-topaz-800);
170
+ --bg-warning-disabled: var(--color-topaz-300);
171
+ --bg-warning-strong: var(--color-topaz-800);
172
+ --bg-warning-strong-hovered: var(--color-topaz-900);
173
+ --bg-warning-strong-pressed: var(--color-topaz-950);
174
+ --bg-warning-strong-disabled: var(--color-topaz-400);
175
+ --bg-danger-subtle: var(--color-ruby-100);
176
+ --bg-danger-subtle-hovered: var(--color-ruby-200);
177
+ --bg-danger-subtle-pressed: var(--color-ruby-300);
178
+ --bg-danger-subtle-disabled: var(--color-ruby-50);
179
+ --bg-danger: var(--color-ruby-600);
180
+ --bg-danger-hovered: var(--color-ruby-700);
181
+ --bg-danger-pressed: var(--color-ruby-800);
182
+ --bg-danger-disabled: var(--color-ruby-300);
183
+ --bg-danger-strong: var(--color-ruby-800);
184
+ --bg-danger-strong-hovered: var(--color-ruby-900);
185
+ --bg-danger-strong-pressed: var(--color-ruby-950);
186
+ --bg-danger-strong-disabled: var(--color-ruby-400);
187
+ --bg-overlay: rgba(0, 0, 0, 0.5);
188
+
189
+ /* Foreground */
190
+ --fg-strong: var(--color-slate-900);
191
+ --fg-strong-hovered: var(--color-slate-950);
192
+ --fg-strong-pressed: black;
193
+ --fg-strong-disabled: var(--color-slate-400);
194
+ --fg-on-strong: var(--color-slate-50);
195
+ --fg-on-strong-hovered: white;
196
+ --fg-on-strong-pressed: white;
197
+ --fg-on-strong-disabled: var(--color-slate-300);
198
+ --fg-normal: var(--color-slate-900);
199
+ --fg-normal-hovered: var(--color-slate-950);
200
+ --fg-normal-pressed: var(--color-slate-950);
201
+ --fg-normal-disabled: var(--color-slate-400);
202
+ --fg-subtle: var(--color-slate-500);
203
+ --fg-subtle-hovered: var(--color-slate-600);
204
+ --fg-subtle-pressed: var(--color-slate-700);
205
+ --fg-subtle-disabled: var(--color-slate-300);
206
+ --fg-brand: var(--color-ocean-700);
207
+ --fg-brand-hovered: var(--color-ocean-800);
208
+ --fg-brand-pressed: var(--color-ocean-900);
209
+ --fg-brand-disabled: var(--color-ocean-300);
210
+ --fg-on-brand-subtle: var(--color-ocean-800);
211
+ --fg-on-brand-subtle-hovered: var(--color-ocean-900);
212
+ --fg-on-brand-subtle-pressed: var(--color-ocean-950);
213
+ --fg-on-brand-subtle-disabled: var(--color-ocean-400);
214
+ --fg-on-brand: var(--color-slate-50);
215
+ --fg-on-brand-hovered: white;
216
+ --fg-on-brand-pressed: white;
217
+ --fg-on-brand-disabled: var(--color-slate-300);
218
+ --fg-on-brand-strong: var(--color-slate-50);
219
+ --fg-on-brand-strong-hovered: white;
220
+ --fg-on-brand-strong-pressed: white;
221
+ --fg-on-brand-strong-disabled: var(--color-slate-300);
222
+ --fg-success: var(--color-emerald-700);
223
+ --fg-success-hovered: var(--color-emerald-800);
224
+ --fg-success-pressed: var(--color-emerald-900);
225
+ --fg-success-disabled: var(--color-emerald-300);
226
+ --fg-on-success-subtle: var(--color-emerald-800);
227
+ --fg-on-success-subtle-hovered: var(--color-emerald-900);
228
+ --fg-on-success-subtle-pressed: var(--color-emerald-950);
229
+ --fg-on-success-subtle-disabled: var(--color-emerald-400);
230
+ --fg-on-success: var(--color-slate-50);
231
+ --fg-on-success-hovered: white;
232
+ --fg-on-success-pressed: white;
233
+ --fg-on-success-disabled: var(--color-slate-300);
234
+ --fg-on-success-strong: var(--color-slate-50);
235
+ --fg-on-success-strong-hovered: white;
236
+ --fg-on-success-strong-pressed: white;
237
+ --fg-on-success-strong-disabled: var(--color-slate-300);
238
+ --fg-warning: var(--color-topaz-700);
239
+ --fg-warning-hovered: var(--color-topaz-800);
240
+ --fg-warning-pressed: var(--color-topaz-900);
241
+ --fg-warning-disabled: var(--color-topaz-300);
242
+ --fg-on-warning-subtle: var(--color-topaz-800);
243
+ --fg-on-warning-subtle-hovered: var(--color-topaz-900);
244
+ --fg-on-warning-subtle-pressed: var(--color-topaz-950);
245
+ --fg-on-warning-subtle-disabled: var(--color-topaz-400);
246
+ --fg-on-warning: var(--color-slate-50);
247
+ --fg-on-warning-hovered: white;
248
+ --fg-on-warning-pressed: white;
249
+ --fg-on-warning-disabled: var(--color-slate-300);
250
+ --fg-on-warning-strong: var(--color-slate-50);
251
+ --fg-on-warning-strong-hovered: white;
252
+ --fg-on-warning-strong-pressed: white;
253
+ --fg-on-warning-strong-disabled: var(--color-slate-300);
254
+ --fg-danger: var(--color-ruby-700);
255
+ --fg-danger-hovered: var(--color-ruby-800);
256
+ --fg-danger-pressed: var(--color-ruby-900);
257
+ --fg-danger-disabled: var(--color-ruby-300);
258
+ --fg-on-danger-subtle: var(--color-ruby-800);
259
+ --fg-on-danger-subtle-hovered: var(--color-ruby-900);
260
+ --fg-on-danger-subtle-pressed: var(--color-ruby-950);
261
+ --fg-on-danger-subtle-disabled: var(--color-ruby-400);
262
+ --fg-on-danger: var(--color-slate-50);
263
+ --fg-on-danger-hovered: white;
264
+ --fg-on-danger-pressed: white;
265
+ --fg-on-danger-disabled: var(--color-slate-300);
266
+ --fg-on-danger-strong: var(--color-slate-50);
267
+ --fg-on-danger-strong-hovered: white;
268
+ --fg-on-danger-strong-pressed: white;
269
+ --fg-on-danger-strong-disabled: var(--color-slate-300);
270
+
271
+ /* Border */
272
+ --border-strong: var(--color-slate-800);
273
+ --border-strong-hovered: var(--color-slate-900);
274
+ --border-strong-pressed: var(--color-slate-950);
275
+ --border-strong-disabled: var(--color-slate-300);
276
+ --border-normal: var(--color-slate-300);
277
+ --border-normal-hovered: var(--color-slate-400);
278
+ --border-normal-pressed: var(--color-slate-500);
279
+ --border-normal-disabled: var(--color-slate-100);
280
+ --border-subtle: var(--color-slate-100);
281
+ --border-subtle-hovered: var(--color-slate-200);
282
+ --border-subtle-pressed: var(--color-slate-300);
283
+ --border-subtle-disabled: var(--color-slate-50);
284
+ --border-brand-subtle: var(--color-ocean-300);
285
+ --border-brand-subtle-hovered: var(--color-ocean-400);
286
+ --border-brand-subtle-pressed: var(--color-ocean-500);
287
+ --border-brand-subtle-disabled: var(--color-ocean-200);
288
+ --border-brand: var(--color-ocean-600);
289
+ --border-brand-hovered: var(--color-ocean-700);
290
+ --border-brand-pressed: var(--color-ocean-800);
291
+ --border-brand-disabled: var(--color-ocean-200);
292
+ --border-brand-strong: var(--color-ocean-800);
293
+ --border-brand-strong-hovered: var(--color-ocean-900);
294
+ --border-brand-strong-pressed: var(--color-ocean-950);
295
+ --border-brand-strong-disabled: var(--color-ocean-400);
296
+ --border-success: var(--color-emerald-300);
297
+ --border-success-hovered: var(--color-emerald-400);
298
+ --border-success-pressed: var(--color-emerald-500);
299
+ --border-success-disabled: var(--color-emerald-200);
300
+ --border-warning: var(--color-topaz-300);
301
+ --border-warning-hovered: var(--color-topaz-400);
302
+ --border-warning-pressed: var(--color-topaz-500);
303
+ --border-warning-disabled: var(--color-topaz-200);
304
+ --border-danger: var(--color-ruby-300);
305
+ --border-danger-hovered: var(--color-ruby-400);
306
+ --border-danger-pressed: var(--color-ruby-500);
307
+ --border-danger-disabled: var(--color-ruby-200);
308
+
309
+ /* Interaction */
310
+ --focus-ring: var(--color-ocean-500);
311
+ }
312
+
313
+ :root[data-theme="dark"] {
314
+ /* Background */
315
+ --bg-strong: var(--color-slate-200);
316
+ --bg-strong-hovered: var(--color-slate-100);
317
+ --bg-strong-pressed: var(--color-slate-50);
318
+ --bg-strong-disabled: var(--color-slate-600);
319
+ --bg-normal: var(--color-slate-900);
320
+ --bg-normal-hovered: var(--color-slate-800);
321
+ --bg-normal-pressed: var(--color-slate-700);
322
+ --bg-normal-disabled: var(--color-slate-900);
323
+ --bg-subtle: var(--color-slate-800);
324
+ --bg-subtle-hovered: var(--color-slate-700);
325
+ --bg-subtle-pressed: var(--color-slate-600);
326
+ --bg-subtle-disabled: var(--color-slate-800);
327
+ --bg-brand-subtle: var(--color-ocean-950);
328
+ --bg-brand-subtle-hovered: var(--color-ocean-900);
329
+ --bg-brand-subtle-pressed: var(--color-ocean-800);
330
+ --bg-brand-subtle-disabled: var(--color-ocean-950);
331
+ --bg-brand: var(--color-ocean-500);
332
+ --bg-brand-hovered: var(--color-ocean-600);
333
+ --bg-brand-pressed: var(--color-ocean-700);
334
+ --bg-brand-disabled: var(--color-ocean-800);
335
+ --bg-brand-strong: var(--color-ocean-300);
336
+ --bg-brand-strong-hovered: var(--color-ocean-200);
337
+ --bg-brand-strong-pressed: var(--color-ocean-100);
338
+ --bg-brand-strong-disabled: var(--color-ocean-600);
339
+ --bg-success-subtle: var(--color-emerald-950);
340
+ --bg-success-subtle-hovered: var(--color-emerald-900);
341
+ --bg-success-subtle-pressed: var(--color-emerald-800);
342
+ --bg-success-subtle-disabled: var(--color-emerald-950);
343
+ --bg-success: var(--color-emerald-500);
344
+ --bg-success-hovered: var(--color-emerald-600);
345
+ --bg-success-pressed: var(--color-emerald-700);
346
+ --bg-success-disabled: var(--color-emerald-800);
347
+ --bg-success-strong: var(--color-emerald-300);
348
+ --bg-success-strong-hovered: var(--color-emerald-200);
349
+ --bg-success-strong-pressed: var(--color-emerald-100);
350
+ --bg-success-strong-disabled: var(--color-emerald-600);
351
+ --bg-warning-subtle: var(--color-topaz-950);
352
+ --bg-warning-subtle-hovered: var(--color-topaz-900);
353
+ --bg-warning-subtle-pressed: var(--color-topaz-800);
354
+ --bg-warning-subtle-disabled: var(--color-topaz-950);
355
+ --bg-warning: var(--color-topaz-500);
356
+ --bg-warning-hovered: var(--color-topaz-600);
357
+ --bg-warning-pressed: var(--color-topaz-700);
358
+ --bg-warning-disabled: var(--color-topaz-800);
359
+ --bg-warning-strong: var(--color-topaz-300);
360
+ --bg-warning-strong-hovered: var(--color-topaz-200);
361
+ --bg-warning-strong-pressed: var(--color-topaz-100);
362
+ --bg-warning-strong-disabled: var(--color-topaz-600);
363
+ --bg-danger-subtle: var(--color-ruby-950);
364
+ --bg-danger-subtle-hovered: var(--color-ruby-900);
365
+ --bg-danger-subtle-pressed: var(--color-ruby-800);
366
+ --bg-danger-subtle-disabled: var(--color-ruby-950);
367
+ --bg-danger: var(--color-ruby-500);
368
+ --bg-danger-hovered: var(--color-ruby-600);
369
+ --bg-danger-pressed: var(--color-ruby-700);
370
+ --bg-danger-disabled: var(--color-ruby-800);
371
+ --bg-danger-strong: var(--color-ruby-300);
372
+ --bg-danger-strong-hovered: var(--color-ruby-200);
373
+ --bg-danger-strong-pressed: var(--color-ruby-100);
374
+ --bg-danger-strong-disabled: var(--color-ruby-600);
375
+ --bg-overlay: rgba(0, 0, 0, 0.6);
376
+
377
+ /* Foreground */
378
+ --fg-strong: var(--color-slate-50);
379
+ --fg-strong-hovered: white;
380
+ --fg-strong-pressed: white;
381
+ --fg-strong-disabled: var(--color-slate-500);
382
+ --fg-on-strong: var(--color-slate-900);
383
+ --fg-on-strong-hovered: var(--color-slate-950);
384
+ --fg-on-strong-pressed: black;
385
+ --fg-on-strong-disabled: var(--color-slate-500);
386
+ --fg-normal: var(--color-slate-50);
387
+ --fg-normal-hovered: white;
388
+ --fg-normal-pressed: white;
389
+ --fg-normal-disabled: var(--color-slate-500);
390
+ --fg-subtle: var(--color-slate-400);
391
+ --fg-subtle-hovered: var(--color-slate-300);
392
+ --fg-subtle-pressed: var(--color-slate-200);
393
+ --fg-subtle-disabled: var(--color-slate-600);
394
+ --fg-brand: var(--color-ocean-300);
395
+ --fg-brand-hovered: var(--color-ocean-200);
396
+ --fg-brand-pressed: var(--color-ocean-100);
397
+ --fg-brand-disabled: var(--color-ocean-700);
398
+ --fg-on-brand-subtle: var(--color-ocean-300);
399
+ --fg-on-brand-subtle-hovered: var(--color-ocean-200);
400
+ --fg-on-brand-subtle-pressed: var(--color-ocean-100);
401
+ --fg-on-brand-subtle-disabled: var(--color-ocean-700);
402
+ --fg-on-brand: white;
403
+ --fg-on-brand-hovered: white;
404
+ --fg-on-brand-pressed: white;
405
+ --fg-on-brand-disabled: var(--color-slate-400);
406
+ --fg-on-brand-strong: var(--color-slate-900);
407
+ --fg-on-brand-strong-hovered: var(--color-slate-950);
408
+ --fg-on-brand-strong-pressed: black;
409
+ --fg-on-brand-strong-disabled: var(--color-slate-500);
410
+ --fg-success: var(--color-emerald-300);
411
+ --fg-success-hovered: var(--color-emerald-200);
412
+ --fg-success-pressed: var(--color-emerald-100);
413
+ --fg-success-disabled: var(--color-emerald-700);
414
+ --fg-on-success-subtle: var(--color-emerald-300);
415
+ --fg-on-success-subtle-hovered: var(--color-emerald-200);
416
+ --fg-on-success-subtle-pressed: var(--color-emerald-100);
417
+ --fg-on-success-subtle-disabled: var(--color-emerald-700);
418
+ --fg-on-success: white;
419
+ --fg-on-success-hovered: white;
420
+ --fg-on-success-pressed: white;
421
+ --fg-on-success-disabled: var(--color-slate-500);
422
+ --fg-on-success-strong: var(--color-slate-900);
423
+ --fg-on-success-strong-hovered: var(--color-slate-950);
424
+ --fg-on-success-strong-pressed: black;
425
+ --fg-on-success-strong-disabled: var(--color-slate-500);
426
+ --fg-warning: var(--color-topaz-300);
427
+ --fg-warning-hovered: var(--color-topaz-200);
428
+ --fg-warning-pressed: var(--color-topaz-100);
429
+ --fg-warning-disabled: var(--color-topaz-700);
430
+ --fg-on-warning-subtle: var(--color-topaz-300);
431
+ --fg-on-warning-subtle-hovered: var(--color-topaz-200);
432
+ --fg-on-warning-subtle-pressed: var(--color-topaz-100);
433
+ --fg-on-warning-subtle-disabled: var(--color-topaz-700);
434
+ --fg-on-warning: white;
435
+ --fg-on-warning-hovered: white;
436
+ --fg-on-warning-pressed: white;
437
+ --fg-on-warning-disabled: var(--color-slate-500);
438
+ --fg-on-warning-strong: var(--color-slate-900);
439
+ --fg-on-warning-strong-hovered: var(--color-slate-950);
440
+ --fg-on-warning-strong-pressed: black;
441
+ --fg-on-warning-strong-disabled: var(--color-slate-500);
442
+ --fg-danger: var(--color-ruby-300);
443
+ --fg-danger-hovered: var(--color-ruby-200);
444
+ --fg-danger-pressed: var(--color-ruby-100);
445
+ --fg-danger-disabled: var(--color-ruby-700);
446
+ --fg-on-danger-subtle: var(--color-ruby-300);
447
+ --fg-on-danger-subtle-hovered: var(--color-ruby-200);
448
+ --fg-on-danger-subtle-pressed: var(--color-ruby-100);
449
+ --fg-on-danger-subtle-disabled: var(--color-ruby-700);
450
+ --fg-on-danger: white;
451
+ --fg-on-danger-hovered: white;
452
+ --fg-on-danger-pressed: white;
453
+ --fg-on-danger-disabled: var(--color-slate-500);
454
+ --fg-on-danger-strong: var(--color-slate-900);
455
+ --fg-on-danger-strong-hovered: var(--color-slate-950);
456
+ --fg-on-danger-strong-pressed: black;
457
+ --fg-on-danger-strong-disabled: var(--color-slate-500);
458
+
459
+ /* Border */
460
+ --border-strong: var(--color-slate-200);
461
+ --border-strong-hovered: var(--color-slate-100);
462
+ --border-strong-pressed: var(--color-slate-50);
463
+ --border-strong-disabled: var(--color-slate-600);
464
+ --border-normal: var(--color-slate-700);
465
+ --border-normal-hovered: var(--color-slate-600);
466
+ --border-normal-pressed: var(--color-slate-500);
467
+ --border-normal-disabled: var(--color-slate-800);
468
+ --border-subtle: var(--color-slate-800);
469
+ --border-subtle-hovered: var(--color-slate-700);
470
+ --border-subtle-pressed: var(--color-slate-600);
471
+ --border-subtle-disabled: var(--color-slate-900);
472
+ --border-brand-subtle: var(--color-ocean-700);
473
+ --border-brand-subtle-hovered: var(--color-ocean-600);
474
+ --border-brand-subtle-pressed: var(--color-ocean-500);
475
+ --border-brand-subtle-disabled: var(--color-ocean-800);
476
+ --border-brand: var(--color-ocean-500);
477
+ --border-brand-hovered: var(--color-ocean-400);
478
+ --border-brand-pressed: var(--color-ocean-300);
479
+ --border-brand-disabled: var(--color-ocean-800);
480
+ --border-brand-strong: var(--color-ocean-300);
481
+ --border-brand-strong-hovered: var(--color-ocean-200);
482
+ --border-brand-strong-pressed: var(--color-ocean-100);
483
+ --border-brand-strong-disabled: var(--color-ocean-600);
484
+ --border-success: var(--color-emerald-700);
485
+ --border-success-hovered: var(--color-emerald-600);
486
+ --border-success-pressed: var(--color-emerald-500);
487
+ --border-success-disabled: var(--color-emerald-800);
488
+ --border-warning: var(--color-topaz-700);
489
+ --border-warning-hovered: var(--color-topaz-600);
490
+ --border-warning-pressed: var(--color-topaz-500);
491
+ --border-warning-disabled: var(--color-topaz-800);
492
+ --border-danger: var(--color-ruby-700);
493
+ --border-danger-hovered: var(--color-ruby-600);
494
+ --border-danger-pressed: var(--color-ruby-500);
495
+ --border-danger-disabled: var(--color-ruby-800);
496
+
497
+ /* Interaction */
498
+ --focus-ring: var(--color-ocean-400);
499
+ }
500
+
501
+ /* =============================================================================
502
+ 3. TAILWIND THEME
503
+ ============================================================================= */
504
+
505
+ /* Theming is a runtime variable swap, not a build-time variant, so `dark:` is
506
+ only here for consumers who reach for it. Components never use it. */
507
+ @custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
508
+
509
+ @theme inline {
510
+ /* Drop Tailwind's stock palette: a `bg-red-500` in component source is a
511
+ token that was never designed, so it should fail to compile. */
512
+ --color-*: initial;
513
+ --color-white: #ffffff;
514
+ --color-black: #000000;
515
+
516
+ /* Background */
517
+ --color-bg-strong: var(--bg-strong);
518
+ --color-bg-strong-hovered: var(--bg-strong-hovered);
519
+ --color-bg-strong-pressed: var(--bg-strong-pressed);
520
+ --color-bg-strong-disabled: var(--bg-strong-disabled);
521
+ --color-bg-normal: var(--bg-normal);
522
+ --color-bg-normal-hovered: var(--bg-normal-hovered);
523
+ --color-bg-normal-pressed: var(--bg-normal-pressed);
524
+ --color-bg-normal-disabled: var(--bg-normal-disabled);
525
+ --color-bg-subtle: var(--bg-subtle);
526
+ --color-bg-subtle-hovered: var(--bg-subtle-hovered);
527
+ --color-bg-subtle-pressed: var(--bg-subtle-pressed);
528
+ --color-bg-subtle-disabled: var(--bg-subtle-disabled);
529
+ --color-bg-brand-subtle: var(--bg-brand-subtle);
530
+ --color-bg-brand-subtle-hovered: var(--bg-brand-subtle-hovered);
531
+ --color-bg-brand-subtle-pressed: var(--bg-brand-subtle-pressed);
532
+ --color-bg-brand-subtle-disabled: var(--bg-brand-subtle-disabled);
533
+ --color-bg-brand: var(--bg-brand);
534
+ --color-bg-brand-hovered: var(--bg-brand-hovered);
535
+ --color-bg-brand-pressed: var(--bg-brand-pressed);
536
+ --color-bg-brand-disabled: var(--bg-brand-disabled);
537
+ --color-bg-brand-strong: var(--bg-brand-strong);
538
+ --color-bg-brand-strong-hovered: var(--bg-brand-strong-hovered);
539
+ --color-bg-brand-strong-pressed: var(--bg-brand-strong-pressed);
540
+ --color-bg-brand-strong-disabled: var(--bg-brand-strong-disabled);
541
+ --color-bg-success-subtle: var(--bg-success-subtle);
542
+ --color-bg-success-subtle-hovered: var(--bg-success-subtle-hovered);
543
+ --color-bg-success-subtle-pressed: var(--bg-success-subtle-pressed);
544
+ --color-bg-success-subtle-disabled: var(--bg-success-subtle-disabled);
545
+ --color-bg-success: var(--bg-success);
546
+ --color-bg-success-hovered: var(--bg-success-hovered);
547
+ --color-bg-success-pressed: var(--bg-success-pressed);
548
+ --color-bg-success-disabled: var(--bg-success-disabled);
549
+ --color-bg-success-strong: var(--bg-success-strong);
550
+ --color-bg-success-strong-hovered: var(--bg-success-strong-hovered);
551
+ --color-bg-success-strong-pressed: var(--bg-success-strong-pressed);
552
+ --color-bg-success-strong-disabled: var(--bg-success-strong-disabled);
553
+ --color-bg-warning-subtle: var(--bg-warning-subtle);
554
+ --color-bg-warning-subtle-hovered: var(--bg-warning-subtle-hovered);
555
+ --color-bg-warning-subtle-pressed: var(--bg-warning-subtle-pressed);
556
+ --color-bg-warning-subtle-disabled: var(--bg-warning-subtle-disabled);
557
+ --color-bg-warning: var(--bg-warning);
558
+ --color-bg-warning-hovered: var(--bg-warning-hovered);
559
+ --color-bg-warning-pressed: var(--bg-warning-pressed);
560
+ --color-bg-warning-disabled: var(--bg-warning-disabled);
561
+ --color-bg-warning-strong: var(--bg-warning-strong);
562
+ --color-bg-warning-strong-hovered: var(--bg-warning-strong-hovered);
563
+ --color-bg-warning-strong-pressed: var(--bg-warning-strong-pressed);
564
+ --color-bg-warning-strong-disabled: var(--bg-warning-strong-disabled);
565
+ --color-bg-danger-subtle: var(--bg-danger-subtle);
566
+ --color-bg-danger-subtle-hovered: var(--bg-danger-subtle-hovered);
567
+ --color-bg-danger-subtle-pressed: var(--bg-danger-subtle-pressed);
568
+ --color-bg-danger-subtle-disabled: var(--bg-danger-subtle-disabled);
569
+ --color-bg-danger: var(--bg-danger);
570
+ --color-bg-danger-hovered: var(--bg-danger-hovered);
571
+ --color-bg-danger-pressed: var(--bg-danger-pressed);
572
+ --color-bg-danger-disabled: var(--bg-danger-disabled);
573
+ --color-bg-danger-strong: var(--bg-danger-strong);
574
+ --color-bg-danger-strong-hovered: var(--bg-danger-strong-hovered);
575
+ --color-bg-danger-strong-pressed: var(--bg-danger-strong-pressed);
576
+ --color-bg-danger-strong-disabled: var(--bg-danger-strong-disabled);
577
+ --color-bg-overlay: var(--bg-overlay);
578
+
579
+ /* Foreground */
580
+ --color-fg-strong: var(--fg-strong);
581
+ --color-fg-strong-hovered: var(--fg-strong-hovered);
582
+ --color-fg-strong-pressed: var(--fg-strong-pressed);
583
+ --color-fg-strong-disabled: var(--fg-strong-disabled);
584
+ --color-fg-on-strong: var(--fg-on-strong);
585
+ --color-fg-on-strong-hovered: var(--fg-on-strong-hovered);
586
+ --color-fg-on-strong-pressed: var(--fg-on-strong-pressed);
587
+ --color-fg-on-strong-disabled: var(--fg-on-strong-disabled);
588
+ --color-fg-normal: var(--fg-normal);
589
+ --color-fg-normal-hovered: var(--fg-normal-hovered);
590
+ --color-fg-normal-pressed: var(--fg-normal-pressed);
591
+ --color-fg-normal-disabled: var(--fg-normal-disabled);
592
+ --color-fg-subtle: var(--fg-subtle);
593
+ --color-fg-subtle-hovered: var(--fg-subtle-hovered);
594
+ --color-fg-subtle-pressed: var(--fg-subtle-pressed);
595
+ --color-fg-subtle-disabled: var(--fg-subtle-disabled);
596
+ --color-fg-brand: var(--fg-brand);
597
+ --color-fg-brand-hovered: var(--fg-brand-hovered);
598
+ --color-fg-brand-pressed: var(--fg-brand-pressed);
599
+ --color-fg-brand-disabled: var(--fg-brand-disabled);
600
+ --color-fg-on-brand-subtle: var(--fg-on-brand-subtle);
601
+ --color-fg-on-brand-subtle-hovered: var(--fg-on-brand-subtle-hovered);
602
+ --color-fg-on-brand-subtle-pressed: var(--fg-on-brand-subtle-pressed);
603
+ --color-fg-on-brand-subtle-disabled: var(--fg-on-brand-subtle-disabled);
604
+ --color-fg-on-brand: var(--fg-on-brand);
605
+ --color-fg-on-brand-hovered: var(--fg-on-brand-hovered);
606
+ --color-fg-on-brand-pressed: var(--fg-on-brand-pressed);
607
+ --color-fg-on-brand-disabled: var(--fg-on-brand-disabled);
608
+ --color-fg-on-brand-strong: var(--fg-on-brand-strong);
609
+ --color-fg-on-brand-strong-hovered: var(--fg-on-brand-strong-hovered);
610
+ --color-fg-on-brand-strong-pressed: var(--fg-on-brand-strong-pressed);
611
+ --color-fg-on-brand-strong-disabled: var(--fg-on-brand-strong-disabled);
612
+ --color-fg-success: var(--fg-success);
613
+ --color-fg-success-hovered: var(--fg-success-hovered);
614
+ --color-fg-success-pressed: var(--fg-success-pressed);
615
+ --color-fg-success-disabled: var(--fg-success-disabled);
616
+ --color-fg-on-success-subtle: var(--fg-on-success-subtle);
617
+ --color-fg-on-success-subtle-hovered: var(--fg-on-success-subtle-hovered);
618
+ --color-fg-on-success-subtle-pressed: var(--fg-on-success-subtle-pressed);
619
+ --color-fg-on-success-subtle-disabled: var(--fg-on-success-subtle-disabled);
620
+ --color-fg-on-success: var(--fg-on-success);
621
+ --color-fg-on-success-hovered: var(--fg-on-success-hovered);
622
+ --color-fg-on-success-pressed: var(--fg-on-success-pressed);
623
+ --color-fg-on-success-disabled: var(--fg-on-success-disabled);
624
+ --color-fg-warning: var(--fg-warning);
625
+ --color-fg-warning-hovered: var(--fg-warning-hovered);
626
+ --color-fg-warning-pressed: var(--fg-warning-pressed);
627
+ --color-fg-warning-disabled: var(--fg-warning-disabled);
628
+ --color-fg-on-warning-subtle: var(--fg-on-warning-subtle);
629
+ --color-fg-on-warning-subtle-hovered: var(--fg-on-warning-subtle-hovered);
630
+ --color-fg-on-warning-subtle-pressed: var(--fg-on-warning-subtle-pressed);
631
+ --color-fg-on-warning-subtle-disabled: var(--fg-on-warning-subtle-disabled);
632
+ --color-fg-on-warning: var(--fg-on-warning);
633
+ --color-fg-on-warning-hovered: var(--fg-on-warning-hovered);
634
+ --color-fg-on-warning-pressed: var(--fg-on-warning-pressed);
635
+ --color-fg-on-warning-disabled: var(--fg-on-warning-disabled);
636
+ --color-fg-danger: var(--fg-danger);
637
+ --color-fg-danger-hovered: var(--fg-danger-hovered);
638
+ --color-fg-danger-pressed: var(--fg-danger-pressed);
639
+ --color-fg-danger-disabled: var(--fg-danger-disabled);
640
+ --color-fg-on-danger-subtle: var(--fg-on-danger-subtle);
641
+ --color-fg-on-danger-subtle-hovered: var(--fg-on-danger-subtle-hovered);
642
+ --color-fg-on-danger-subtle-pressed: var(--fg-on-danger-subtle-pressed);
643
+ --color-fg-on-danger-subtle-disabled: var(--fg-on-danger-subtle-disabled);
644
+ --color-fg-on-danger: var(--fg-on-danger);
645
+ --color-fg-on-danger-hovered: var(--fg-on-danger-hovered);
646
+ --color-fg-on-danger-pressed: var(--fg-on-danger-pressed);
647
+ --color-fg-on-danger-disabled: var(--fg-on-danger-disabled);
648
+
649
+ /* Border */
650
+ --color-border-strong: var(--border-strong);
651
+ --color-border-strong-hovered: var(--border-strong-hovered);
652
+ --color-border-strong-pressed: var(--border-strong-pressed);
653
+ --color-border-strong-disabled: var(--border-strong-disabled);
654
+ --color-border-normal: var(--border-normal);
655
+ --color-border-normal-hovered: var(--border-normal-hovered);
656
+ --color-border-normal-pressed: var(--border-normal-pressed);
657
+ --color-border-normal-disabled: var(--border-normal-disabled);
658
+ --color-border-subtle: var(--border-subtle);
659
+ --color-border-subtle-hovered: var(--border-subtle-hovered);
660
+ --color-border-subtle-pressed: var(--border-subtle-pressed);
661
+ --color-border-subtle-disabled: var(--border-subtle-disabled);
662
+ --color-border-brand-subtle: var(--border-brand-subtle);
663
+ --color-border-brand-subtle-hovered: var(--border-brand-subtle-hovered);
664
+ --color-border-brand-subtle-pressed: var(--border-brand-subtle-pressed);
665
+ --color-border-brand-subtle-disabled: var(--border-brand-subtle-disabled);
666
+ --color-border-brand: var(--border-brand);
667
+ --color-border-brand-hovered: var(--border-brand-hovered);
668
+ --color-border-brand-pressed: var(--border-brand-pressed);
669
+ --color-border-brand-disabled: var(--border-brand-disabled);
670
+ --color-border-brand-strong: var(--border-brand-strong);
671
+ --color-border-brand-strong-hovered: var(--border-brand-strong-hovered);
672
+ --color-border-brand-strong-pressed: var(--border-brand-strong-pressed);
673
+ --color-border-brand-strong-disabled: var(--border-brand-strong-disabled);
674
+ --color-border-success: var(--border-success);
675
+ --color-border-success-hovered: var(--border-success-hovered);
676
+ --color-border-success-pressed: var(--border-success-pressed);
677
+ --color-border-success-disabled: var(--border-success-disabled);
678
+ --color-border-warning: var(--border-warning);
679
+ --color-border-warning-hovered: var(--border-warning-hovered);
680
+ --color-border-warning-pressed: var(--border-warning-pressed);
681
+ --color-border-warning-disabled: var(--border-warning-disabled);
682
+ --color-border-danger: var(--border-danger);
683
+ --color-border-danger-hovered: var(--border-danger-hovered);
684
+ --color-border-danger-pressed: var(--border-danger-pressed);
685
+ --color-border-danger-disabled: var(--border-danger-disabled);
686
+
687
+ /* Interaction */
688
+ --color-focus-ring: var(--focus-ring);
689
+
690
+ /* Stacking order. Named tokens only — never a raw `z-[n]`. */
691
+ --z-index-content-sticky: 10;
692
+ --z-index-app-bar: 30;
693
+ --z-index-sheet: 50;
694
+ --z-index-popover: 60;
695
+ --z-index-modal: 70;
696
+ --z-index-toast: 9999;
697
+
698
+ /* Overlay enter/exit pairs, selected by `data-state`. */
699
+ --animate-fade-in: fade-in 200ms ease-out forwards;
700
+ --animate-fade-out: fade-out 200ms ease-out forwards;
701
+ --animate-fade-in-slow: fade-in 300ms ease-out forwards;
702
+ --animate-fade-out-slow: fade-out 300ms ease-out forwards;
703
+ --animate-slide-up-in: slide-up-in 200ms ease-out forwards;
704
+ --animate-slide-up-out: slide-up-out 200ms ease-out forwards;
705
+ --animate-slide-right-in: slide-right-in 200ms ease-out forwards;
706
+ --animate-slide-right-out: slide-right-out 200ms ease-out forwards;
707
+ --animate-slide-left-in: slide-left-in 200ms ease-out forwards;
708
+ --animate-slide-left-out: slide-left-out 200ms ease-out forwards;
709
+
710
+ @keyframes fade-in {
711
+ from {
712
+ opacity: 0;
713
+ }
714
+ to {
715
+ opacity: 1;
716
+ }
717
+ }
718
+ @keyframes fade-out {
719
+ from {
720
+ opacity: 1;
721
+ }
722
+ to {
723
+ opacity: 0;
724
+ }
725
+ }
726
+ @keyframes slide-up-in {
727
+ from {
728
+ transform: translateY(100%);
729
+ }
730
+ to {
731
+ transform: translateY(0);
732
+ }
733
+ }
734
+ @keyframes slide-up-out {
735
+ from {
736
+ transform: translateY(0);
737
+ }
738
+ to {
739
+ transform: translateY(100%);
740
+ }
741
+ }
742
+ @keyframes slide-right-in {
743
+ from {
744
+ transform: translateX(100%);
745
+ }
746
+ to {
747
+ transform: translateX(0);
748
+ }
749
+ }
750
+ @keyframes slide-right-out {
751
+ from {
752
+ transform: translateX(0);
753
+ }
754
+ to {
755
+ transform: translateX(100%);
756
+ }
757
+ }
758
+ @keyframes slide-left-in {
759
+ from {
760
+ transform: translateX(-100%);
761
+ }
762
+ to {
763
+ transform: translateX(0);
764
+ }
765
+ }
766
+ @keyframes slide-left-out {
767
+ from {
768
+ transform: translateX(0);
769
+ }
770
+ to {
771
+ transform: translateX(-100%);
772
+ }
773
+ }
774
+ }
775
+
776
+ /* =============================================================================
777
+ 4. BASE LAYER
778
+ ============================================================================= */
779
+
780
+ /* Not app styling — each of these is something the components depend on. */
781
+ @layer base {
782
+ /* Tailwind's preflight defaults border-color to currentColor, so any component
783
+ using a bare `border` would take its border from the text colour. */
784
+ * {
785
+ @apply border-border-normal;
786
+ }
787
+
788
+ /* Twenty components have no focus style of their own and rely on this. */
789
+ :focus-visible {
790
+ @apply outline-hidden ring-2 ring-focus-ring ring-offset-2 ring-offset-bg-normal;
791
+ }
792
+
793
+ /* Honored globally rather than per component, so every animation the system
794
+ ships inherits it. `!important` is the point: it has to beat the animation
795
+ utilities on the elements themselves. */
796
+ @media (prefers-reduced-motion: reduce) {
797
+ /* biome-ignore-start lint/complexity/noImportantStyles: overriding utility-level animations is the intent */
798
+ *,
799
+ *::before,
800
+ *::after {
801
+ animation-duration: 0.01ms !important;
802
+ animation-iteration-count: 1 !important;
803
+ transition-duration: 0.01ms !important;
804
+ }
805
+ /* biome-ignore-end lint/complexity/noImportantStyles: overriding utility-level animations is the intent */
806
+ }
807
+ }