@mercury-fx/ui 2.4.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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/components/actions/Button/Button.d.ts +17 -0
  4. package/dist/components/actions/Button/index.d.ts +1 -0
  5. package/dist/components/actions/IconButton/IconButton.d.ts +24 -0
  6. package/dist/components/actions/IconButton/index.d.ts +1 -0
  7. package/dist/components/actions/Link/Link.d.ts +26 -0
  8. package/dist/components/actions/Link/index.d.ts +1 -0
  9. package/dist/components/data-display/Avatar/Avatar.d.ts +8 -0
  10. package/dist/components/data-display/Avatar/index.d.ts +1 -0
  11. package/dist/components/data-display/Badge/Badge.d.ts +8 -0
  12. package/dist/components/data-display/Badge/index.d.ts +1 -0
  13. package/dist/components/data-display/Blockquote/Blockquote.d.ts +18 -0
  14. package/dist/components/data-display/Blockquote/index.d.ts +1 -0
  15. package/dist/components/data-display/Card/Card.d.ts +9 -0
  16. package/dist/components/data-display/Card/index.d.ts +1 -0
  17. package/dist/components/data-display/Chart/Chart.d.ts +41 -0
  18. package/dist/components/data-display/Chart/index.d.ts +1 -0
  19. package/dist/components/data-display/Checklist/Checklist.d.ts +14 -0
  20. package/dist/components/data-display/Checklist/index.d.ts +1 -0
  21. package/dist/components/data-display/Chip/Chip.d.ts +13 -0
  22. package/dist/components/data-display/Chip/index.d.ts +1 -0
  23. package/dist/components/data-display/Code/Code.d.ts +22 -0
  24. package/dist/components/data-display/Code/index.d.ts +1 -0
  25. package/dist/components/data-display/DataList/DataList.d.ts +27 -0
  26. package/dist/components/data-display/DataList/index.d.ts +1 -0
  27. package/dist/components/data-display/Kbd/Kbd.d.ts +14 -0
  28. package/dist/components/data-display/Kbd/index.d.ts +1 -0
  29. package/dist/components/data-display/ListRow/ListRow.d.ts +16 -0
  30. package/dist/components/data-display/ListRow/index.d.ts +1 -0
  31. package/dist/components/data-display/Stat/Stat.d.ts +16 -0
  32. package/dist/components/data-display/Stat/index.d.ts +1 -0
  33. package/dist/components/data-display/Table/Table.d.ts +14 -0
  34. package/dist/components/data-display/Table/index.d.ts +1 -0
  35. package/dist/components/data-display/Tag/Tag.d.ts +9 -0
  36. package/dist/components/data-display/Tag/index.d.ts +1 -0
  37. package/dist/components/feedback/Alert/Alert.d.ts +11 -0
  38. package/dist/components/feedback/Alert/index.d.ts +1 -0
  39. package/dist/components/feedback/Callout/Callout.d.ts +26 -0
  40. package/dist/components/feedback/Callout/index.d.ts +1 -0
  41. package/dist/components/feedback/PasswordStrength/PasswordStrength.d.ts +13 -0
  42. package/dist/components/feedback/PasswordStrength/index.d.ts +1 -0
  43. package/dist/components/feedback/Progress/Progress.d.ts +9 -0
  44. package/dist/components/feedback/Progress/index.d.ts +1 -0
  45. package/dist/components/feedback/Skeleton/Skeleton.d.ts +19 -0
  46. package/dist/components/feedback/Skeleton/index.d.ts +1 -0
  47. package/dist/components/feedback/Spinner/Spinner.d.ts +18 -0
  48. package/dist/components/feedback/Spinner/index.d.ts +1 -0
  49. package/dist/components/foundations/Divider/Divider.d.ts +11 -0
  50. package/dist/components/foundations/Divider/index.d.ts +1 -0
  51. package/dist/components/foundations/Heading/Heading.d.ts +26 -0
  52. package/dist/components/foundations/Heading/index.d.ts +1 -0
  53. package/dist/components/foundations/Icon/Icon.d.ts +9 -0
  54. package/dist/components/foundations/Icon/index.d.ts +1 -0
  55. package/dist/components/foundations/Separator/Separator.d.ts +20 -0
  56. package/dist/components/foundations/Separator/index.d.ts +1 -0
  57. package/dist/components/foundations/Text/Text.d.ts +19 -0
  58. package/dist/components/foundations/Text/index.d.ts +1 -0
  59. package/dist/components/inputs/AuthCode/AuthCode.d.ts +10 -0
  60. package/dist/components/inputs/AuthCode/index.d.ts +1 -0
  61. package/dist/components/inputs/Calendar/Calendar.d.ts +24 -0
  62. package/dist/components/inputs/Calendar/index.d.ts +1 -0
  63. package/dist/components/inputs/DateField/DateField.d.ts +25 -0
  64. package/dist/components/inputs/DateField/index.d.ts +1 -0
  65. package/dist/components/inputs/Input/Input.d.ts +9 -0
  66. package/dist/components/inputs/Input/index.d.ts +1 -0
  67. package/dist/components/inputs/Label/Label.d.ts +20 -0
  68. package/dist/components/inputs/Label/index.d.ts +1 -0
  69. package/dist/components/inputs/MoneyInput/MoneyInput.d.ts +12 -0
  70. package/dist/components/inputs/MoneyInput/index.d.ts +1 -0
  71. package/dist/components/inputs/Search/Search.d.ts +7 -0
  72. package/dist/components/inputs/Search/index.d.ts +1 -0
  73. package/dist/components/inputs/Select/Select.d.ts +14 -0
  74. package/dist/components/inputs/Select/index.d.ts +1 -0
  75. package/dist/components/inputs/Textarea/Textarea.d.ts +9 -0
  76. package/dist/components/inputs/Textarea/index.d.ts +1 -0
  77. package/dist/components/layout/AspectRatio/AspectRatio.d.ts +14 -0
  78. package/dist/components/layout/AspectRatio/index.d.ts +1 -0
  79. package/dist/components/layout/AuthLayout/AuthLayout.d.ts +30 -0
  80. package/dist/components/layout/AuthLayout/index.d.ts +1 -0
  81. package/dist/components/layout/Box/Box.d.ts +35 -0
  82. package/dist/components/layout/Box/index.d.ts +1 -0
  83. package/dist/components/layout/Center/Center.d.ts +13 -0
  84. package/dist/components/layout/Center/index.d.ts +1 -0
  85. package/dist/components/layout/Cluster/Cluster.d.ts +18 -0
  86. package/dist/components/layout/Cluster/index.d.ts +1 -0
  87. package/dist/components/layout/Collapsible/Collapsible.d.ts +26 -0
  88. package/dist/components/layout/Collapsible/index.d.ts +1 -0
  89. package/dist/components/layout/Container/Container.d.ts +19 -0
  90. package/dist/components/layout/Container/index.d.ts +1 -0
  91. package/dist/components/layout/Flex/Flex.d.ts +24 -0
  92. package/dist/components/layout/Flex/index.d.ts +1 -0
  93. package/dist/components/layout/Grid/Grid.d.ts +26 -0
  94. package/dist/components/layout/Grid/index.d.ts +1 -0
  95. package/dist/components/layout/GridItem/GridItem.d.ts +19 -0
  96. package/dist/components/layout/GridItem/index.d.ts +1 -0
  97. package/dist/components/layout/ScrollArea/ScrollArea.d.ts +22 -0
  98. package/dist/components/layout/ScrollArea/index.d.ts +1 -0
  99. package/dist/components/layout/Section/Section.d.ts +18 -0
  100. package/dist/components/layout/Section/index.d.ts +1 -0
  101. package/dist/components/layout/Sidebar/Sidebar.d.ts +21 -0
  102. package/dist/components/layout/Sidebar/index.d.ts +1 -0
  103. package/dist/components/layout/Spacer/Spacer.d.ts +15 -0
  104. package/dist/components/layout/Spacer/index.d.ts +1 -0
  105. package/dist/components/layout/Stack/Stack.d.ts +20 -0
  106. package/dist/components/layout/Stack/index.d.ts +1 -0
  107. package/dist/components/layout/scales.d.ts +20 -0
  108. package/dist/components/navigation/Accordion/Accordion.d.ts +17 -0
  109. package/dist/components/navigation/Accordion/index.d.ts +1 -0
  110. package/dist/components/navigation/Menubar/Menubar.d.ts +53 -0
  111. package/dist/components/navigation/Menubar/index.d.ts +1 -0
  112. package/dist/components/navigation/Pagination/Pagination.d.ts +14 -0
  113. package/dist/components/navigation/Pagination/index.d.ts +1 -0
  114. package/dist/components/navigation/TabNav/TabNav.d.ts +38 -0
  115. package/dist/components/navigation/TabNav/index.d.ts +1 -0
  116. package/dist/components/navigation/Tabs/Tabs.d.ts +12 -0
  117. package/dist/components/navigation/Tabs/index.d.ts +1 -0
  118. package/dist/components/overlay/AlertDialog/AlertDialog.d.ts +33 -0
  119. package/dist/components/overlay/AlertDialog/index.d.ts +1 -0
  120. package/dist/components/overlay/ContextMenu/ContextMenu.d.ts +40 -0
  121. package/dist/components/overlay/ContextMenu/index.d.ts +1 -0
  122. package/dist/components/overlay/Dialog/Dialog.d.ts +33 -0
  123. package/dist/components/overlay/Dialog/index.d.ts +1 -0
  124. package/dist/components/overlay/Dropdown/Dropdown.d.ts +48 -0
  125. package/dist/components/overlay/Dropdown/index.d.ts +1 -0
  126. package/dist/components/overlay/HoverCard/HoverCard.d.ts +35 -0
  127. package/dist/components/overlay/HoverCard/index.d.ts +1 -0
  128. package/dist/components/overlay/LinkPreview/LinkPreview.d.ts +33 -0
  129. package/dist/components/overlay/LinkPreview/index.d.ts +1 -0
  130. package/dist/components/overlay/Modal/Modal.d.ts +10 -0
  131. package/dist/components/overlay/Modal/index.d.ts +1 -0
  132. package/dist/components/overlay/Popover/Popover.d.ts +35 -0
  133. package/dist/components/overlay/Popover/index.d.ts +1 -0
  134. package/dist/components/overlay/Tooltip/Tooltip.d.ts +6 -0
  135. package/dist/components/overlay/Tooltip/index.d.ts +1 -0
  136. package/dist/components/overlay/_overlay/Portal.d.ts +14 -0
  137. package/dist/components/selection/Checkbox/Checkbox.d.ts +12 -0
  138. package/dist/components/selection/Checkbox/index.d.ts +1 -0
  139. package/dist/components/selection/CheckboxCards/CheckboxCards.d.ts +20 -0
  140. package/dist/components/selection/CheckboxCards/index.d.ts +1 -0
  141. package/dist/components/selection/CheckboxGroup/CheckboxGroup.d.ts +17 -0
  142. package/dist/components/selection/CheckboxGroup/index.d.ts +1 -0
  143. package/dist/components/selection/Radio/Radio.d.ts +11 -0
  144. package/dist/components/selection/Radio/index.d.ts +1 -0
  145. package/dist/components/selection/RadioCards/RadioCards.d.ts +20 -0
  146. package/dist/components/selection/RadioCards/index.d.ts +1 -0
  147. package/dist/components/selection/RadioGroup/RadioGroup.d.ts +18 -0
  148. package/dist/components/selection/RadioGroup/index.d.ts +1 -0
  149. package/dist/components/selection/Segmented/Segmented.d.ts +13 -0
  150. package/dist/components/selection/Segmented/index.d.ts +1 -0
  151. package/dist/components/selection/Slider/Slider.d.ts +13 -0
  152. package/dist/components/selection/Slider/index.d.ts +1 -0
  153. package/dist/components/selection/Switch/Switch.d.ts +10 -0
  154. package/dist/components/selection/Switch/index.d.ts +1 -0
  155. package/dist/components/selection/Toggle/Toggle.d.ts +36 -0
  156. package/dist/components/selection/Toggle/index.d.ts +1 -0
  157. package/dist/index.d.ts +93 -0
  158. package/dist/mercury-ui.css +1 -0
  159. package/dist/mercury-ui.js +4049 -0
  160. package/package.json +58 -0
  161. package/src/styles/additions.css +1030 -0
  162. package/src/styles/fonts/DMMono-Italic.woff2 +0 -0
  163. package/src/styles/fonts/DMMono-Light.woff2 +0 -0
  164. package/src/styles/fonts/DMMono-LightItalic.woff2 +0 -0
  165. package/src/styles/fonts/DMMono-Medium.woff2 +0 -0
  166. package/src/styles/fonts/DMMono-MediumItalic.woff2 +0 -0
  167. package/src/styles/fonts/DMMono-Regular.woff2 +0 -0
  168. package/src/styles/fonts/DMSans-Bold.woff2 +0 -0
  169. package/src/styles/fonts/DMSans-BoldItalic.woff2 +0 -0
  170. package/src/styles/fonts/DMSans-Italic.woff2 +0 -0
  171. package/src/styles/fonts/DMSans-Medium.woff2 +0 -0
  172. package/src/styles/fonts/DMSans-MediumItalic.woff2 +0 -0
  173. package/src/styles/fonts/DMSans-Regular.woff2 +0 -0
  174. package/src/styles/fonts/DMSerifDisplay-Italic.woff2 +0 -0
  175. package/src/styles/fonts/DMSerifDisplay-Regular.woff2 +0 -0
  176. package/src/styles/index.css +5 -0
  177. package/src/styles/layout.css +55 -0
  178. package/src/styles/mercury.css +676 -0
  179. package/src/styles/tokens.css +438 -0
@@ -0,0 +1,438 @@
1
+ /*
2
+ Mercury Design System — Colors & Type
3
+ Safe to import standalone. Light theme is the default.
4
+ */
5
+
6
+ /* ==========================================================
7
+ FONTS
8
+ DM Sans — local (Regular 400, Semibold 500)
9
+ DM Mono / DM Serif Display
10
+ ========================================================== */
11
+ /* DM Sans — brand-hosted (Regular/Medium/Bold × Normal/Italic) */
12
+ @font-face {
13
+ font-family: "DM Sans"; font-style: normal; font-weight: 400; font-display: swap;
14
+ src: local("DMSans-Regular"), local("DM Sans Regular"),
15
+ url("fonts/DMSans-Regular.woff2") format("woff2");
16
+ }
17
+ @font-face {
18
+ font-family: "DM Sans"; font-style: italic; font-weight: 400; font-display: swap;
19
+ src: local("DMSans-Italic"), local("DM Sans Italic"),
20
+ url("fonts/DMSans-Italic.woff2") format("woff2");
21
+ }
22
+ @font-face {
23
+ font-family: "DM Sans"; font-style: normal; font-weight: 500; font-display: swap;
24
+ src: local("DMSans-Medium"), local("DM Sans Medium"),
25
+ url("fonts/DMSans-Medium.woff2") format("woff2");
26
+ }
27
+ @font-face {
28
+ font-family: "DM Sans"; font-style: italic; font-weight: 500; font-display: swap;
29
+ src: local("DMSans-MediumItalic"), local("DM Sans Medium Italic"),
30
+ url("fonts/DMSans-MediumItalic.woff2") format("woff2");
31
+ }
32
+ @font-face {
33
+ font-family: "DM Sans"; font-style: normal; font-weight: 700; font-display: swap;
34
+ src: local("DMSans-Bold"), local("DM Sans Bold"),
35
+ url("fonts/DMSans-Bold.woff2") format("woff2");
36
+ }
37
+ @font-face {
38
+ font-family: "DM Sans"; font-style: italic; font-weight: 700; font-display: swap;
39
+ src: local("DMSans-BoldItalic"), local("DM Sans Bold Italic"),
40
+ url("fonts/DMSans-BoldItalic.woff2") format("woff2");
41
+ }
42
+ /* DM Mono — brand-hosted (Light/Regular/Medium × Normal/Italic) */
43
+ @font-face {
44
+ font-family: "DM Mono"; font-style: normal; font-weight: 300; font-display: swap;
45
+ src: local("DMMono-Light"), url("fonts/DMMono-Light.woff2") format("woff2");
46
+ }
47
+ @font-face {
48
+ font-family: "DM Mono"; font-style: italic; font-weight: 300; font-display: swap;
49
+ src: local("DMMono-LightItalic"), url("fonts/DMMono-LightItalic.woff2") format("woff2");
50
+ }
51
+ @font-face {
52
+ font-family: "DM Mono"; font-style: normal; font-weight: 400; font-display: swap;
53
+ src: local("DMMono-Regular"), url("fonts/DMMono-Regular.woff2") format("woff2");
54
+ }
55
+ @font-face {
56
+ font-family: "DM Mono"; font-style: italic; font-weight: 400; font-display: swap;
57
+ src: local("DMMono-Italic"), url("fonts/DMMono-Italic.woff2") format("woff2");
58
+ }
59
+ @font-face {
60
+ font-family: "DM Mono"; font-style: normal; font-weight: 500; font-display: swap;
61
+ src: local("DMMono-Medium"), url("fonts/DMMono-Medium.woff2") format("woff2");
62
+ }
63
+ @font-face {
64
+ font-family: "DM Mono"; font-style: italic; font-weight: 500; font-display: swap;
65
+ src: local("DMMono-MediumItalic"), url("fonts/DMMono-MediumItalic.woff2") format("woff2");
66
+ }
67
+ /* DM Serif Display — brand-hosted */
68
+ @font-face {
69
+ font-family: "DM Serif Display"; font-style: normal; font-weight: 400; font-display: swap;
70
+ src: local("DMSerifDisplay-Regular"), local("DM Serif Display Regular"),
71
+ url("fonts/DMSerifDisplay-Regular.woff2") format("woff2");
72
+ }
73
+ @font-face {
74
+ font-family: "DM Serif Display"; font-style: italic; font-weight: 400; font-display: swap;
75
+ src: local("DMSerifDisplay-Italic"), local("DM Serif Display Italic"),
76
+ url("fonts/DMSerifDisplay-Italic.woff2") format("woff2");
77
+ }
78
+
79
+ /* ==========================================================
80
+ COLOR SCALES (RGB triplets — use rgb(var(--name)) )
81
+ Radix-style 12-step scales. Step 9 = solid brand; 1-3 = bg,
82
+ 4-8 = interactive surfaces, 10-12 = text & accents.
83
+ ========================================================== */
84
+ :root, .light-theme {
85
+ /* Slate — neutrals */
86
+ --slate-1: 252 252 253;
87
+ --slate-2: 249 249 251;
88
+ --slate-3: 240 240 243;
89
+ --slate-4: 232 232 236;
90
+ --slate-5: 224 225 230;
91
+ --slate-6: 217 217 224;
92
+ --slate-7: 205 206 214;
93
+ --slate-8: 185 187 198;
94
+ --slate-9: 139 141 152;
95
+ --slate-10: 128 131 141;
96
+ --slate-11: 96 100 108;
97
+ --slate-12: 28 32 36;
98
+
99
+ /* Iris — brand */
100
+ --iris-1: 253 253 255;
101
+ --iris-2: 248 248 255;
102
+ --iris-3: 240 241 254;
103
+ --iris-4: 230 231 255;
104
+ --iris-5: 218 220 255;
105
+ --iris-6: 203 205 255;
106
+ --iris-7: 184 186 248;
107
+ --iris-8: 155 158 240;
108
+ --iris-9: 91 91 214;
109
+ --iris-10: 81 81 205;
110
+ --iris-11: 87 83 198;
111
+ --iris-12: 39 41 98;
112
+
113
+ /* Indigo — active / info / link */
114
+ --indigo-1: 253 253 254;
115
+ --indigo-2: 247 249 255;
116
+ --indigo-3: 237 242 254;
117
+ --indigo-4: 225 233 255;
118
+ --indigo-5: 210 222 255;
119
+ --indigo-6: 193 208 255;
120
+ --indigo-7: 171 189 249;
121
+ --indigo-8: 141 164 239;
122
+ --indigo-9: 62 99 221;
123
+ --indigo-10: 51 88 212;
124
+ --indigo-11: 13 116 206;
125
+ --indigo-12: 31 45 92;
126
+
127
+ /* Green — positive */
128
+ --green-9: 48 164 108;
129
+ /* Red — negative */
130
+ --red-9: 229 72 77;
131
+ /* Orange — caution */
132
+ --orange-9: 247 107 21;
133
+ /* Plum — discovery */
134
+ --plum-9: 171 74 186;
135
+
136
+ /* Extra status scales — needed for full semantic coverage */
137
+ --green-3: 221 243 228; --green-11: 24 128 56;
138
+ --red-3: 255 229 232; --red-11: 205 43 49;
139
+ --orange-3: 255 231 214; --orange-11: 204 77 6;
140
+ --plum-3: 244 226 248; --plum-11: 149 62 163;
141
+
142
+ /* ===== SEMANTIC TOKENS ===============================================
143
+ Naming: <role>-<intent>-<variant>-<state>
144
+ role = bg | fg | border | shadow
145
+ intent = primary, secondary, tertiary, brand, active, positive,
146
+ negative, caution, discovery, info, inverse, disabled
147
+ variant = solid (default) | subtle | muted
148
+ state = default | hover | pressed | disabled
149
+ Use: background: rgb(var(--bg-brand));
150
+ background: rgb(var(--bg-hover)); // alpha variant
151
+ ==================================================================== */
152
+
153
+ /* ---- Surfaces / backgrounds ---- */
154
+ --bg-primary: var(--slate-1); /* page */
155
+ --bg-secondary: var(--slate-2); /* raised surface */
156
+ --bg-tertiary: var(--slate-3); /* sunken / code block */
157
+ --bg-elevated: var(--slate-1); /* popover / modal */
158
+ --bg-inverse: var(--slate-12);
159
+ --bg-inverse-hover: var(--slate-11);
160
+ --bg-inverse-pressed: var(--slate-10);
161
+ --bg-disabled: var(--slate-3);
162
+
163
+ /* Alpha scrims — use as `rgb(var(--bg-hover))` with r g b / a syntax */
164
+ --bg-hover: 28 32 36 / 0.06;
165
+ --bg-pressed: 28 32 36 / 0.12;
166
+ --bg-selected: 91 91 214 / 0.10;
167
+ --bg-backdrop: 28 32 36 / 0.56;
168
+ --bg-overlay: 28 32 36 / 0.32;
169
+
170
+ /* ---- Brand ---- */
171
+ --bg-brand: var(--iris-9);
172
+ --bg-brand-hover: var(--iris-10);
173
+ --bg-brand-pressed: var(--iris-11);
174
+ --bg-brand-subtle: var(--iris-3); /* tint bg for chips, callouts */
175
+ --bg-brand-muted: var(--iris-4); /* interactive subtle surface */
176
+
177
+ /* ---- Active / interactive (controls, links, focus) ---- */
178
+ --bg-active: var(--indigo-9);
179
+ --bg-active-hover: var(--indigo-10);
180
+ --bg-active-subtle: var(--indigo-3);
181
+
182
+ /* ---- Status ---- */
183
+ --bg-positive: var(--green-9);
184
+ --bg-positive-subtle: var(--green-3);
185
+ --bg-negative: var(--red-9);
186
+ --bg-negative-subtle: var(--red-3);
187
+ --bg-caution: var(--orange-9);
188
+ --bg-caution-subtle: var(--orange-3);
189
+ --bg-discovery: var(--plum-9);
190
+ --bg-discovery-subtle:var(--plum-3);
191
+ --bg-info: var(--indigo-9);
192
+ --bg-info-subtle: var(--indigo-3);
193
+
194
+ /* ---- Foregrounds (text + icon) ---- */
195
+ --fg-primary: var(--slate-12); /* body text */
196
+ --fg-secondary: var(--slate-11); /* muted text */
197
+ --fg-tertiary: var(--slate-10); /* placeholder / hint */
198
+ --fg-disabled: var(--slate-8);
199
+ --fg-inverse: var(--slate-1);
200
+ --fg-on-brand: var(--slate-1); /* text on bg-brand */
201
+ --fg-on-active: var(--slate-1);
202
+ --fg-on-positive: var(--slate-1);
203
+ --fg-on-negative: var(--slate-1);
204
+ --fg-on-caution: var(--slate-12); /* orange needs dark ink */
205
+ --fg-on-discovery: var(--slate-1);
206
+
207
+ --fg-brand: var(--iris-11);
208
+ --fg-brand-hover: var(--iris-10);
209
+ --fg-active: var(--indigo-11);
210
+ --fg-link: var(--indigo-11);
211
+ --fg-link-hover: var(--indigo-10);
212
+ --fg-link-visited: var(--plum-11);
213
+ --fg-positive: var(--green-11);
214
+ --fg-negative: var(--red-11);
215
+ --fg-caution: var(--orange-11);
216
+ --fg-discovery: var(--plum-11);
217
+ --fg-info: var(--indigo-11);
218
+
219
+ /* ---- Borders ---- */
220
+ --border-primary: var(--slate-6); /* default hairline */
221
+ --border-secondary: var(--slate-5); /* subtle divider */
222
+ --border-strong: var(--slate-7); /* emphasized */
223
+ --border-disabled: var(--slate-5);
224
+ --border-focus: var(--indigo-9);
225
+ --border-active: var(--indigo-9);
226
+ --border-brand: var(--iris-9);
227
+ --border-inverse: var(--slate-12);
228
+ --border-positive: var(--green-9);
229
+ --border-negative: var(--red-9);
230
+ --border-caution: var(--orange-9);
231
+ --border-discovery: var(--plum-9);
232
+
233
+ /* Focus ring — use as `box-shadow: 0 0 0 3px rgb(var(--ring-focus));` */
234
+ --ring-focus: 62 99 221 / 0.4;
235
+ --ring-negative: 229 72 77 / 0.4;
236
+
237
+ /* ---- Type families ---- */
238
+ --font-primary: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
239
+ --font-secondary: "DM Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
240
+ --font-display: "DM Serif Display", Georgia, "Times New Roman", serif;
241
+
242
+ --fw-regular: 400;
243
+ --fw-medium: 500;
244
+ --fw-semi-bold: 600;
245
+ --fw-bold: 700;
246
+ --fw-black: 900;
247
+
248
+ /* ---- Type scale ---- */
249
+ --text-body-100-size: 10px; --text-body-100-lh: 12px;
250
+ --text-body-200-size: 12px; --text-body-200-lh: 16px;
251
+ --text-body-300-size: 14px; --text-body-300-lh: 20px;
252
+ --text-body-400-size: 16px; --text-body-400-lh: 24px;
253
+ --text-body-500-size: 18px; --text-body-500-lh: 28px;
254
+
255
+ --text-heading-100-size: 18px; --text-heading-100-lh: 28px;
256
+ --text-heading-200-size: 24px; --text-heading-200-lh: 32px;
257
+ --text-heading-300-size: 36px; --text-heading-300-lh: 40px;
258
+ --text-heading-400-size: 48px; --text-heading-400-lh: 56px;
259
+ --text-heading-500-size: 72px; --text-heading-500-lh: 80px;
260
+
261
+ /* ---- Radii ---- */
262
+ --radius-2: 2px;
263
+ --radius-4: 4px;
264
+ --radius-6: 6px;
265
+ --radius-8: 8px;
266
+ --radius-12: 12px;
267
+ --radius-16: 16px;
268
+ --radius-20: 20px;
269
+ --radius-24: 24px;
270
+ --radius-32: 32px;
271
+ --radius-full: 9999px;
272
+
273
+ /* ---- Spacing ---- */
274
+ --space-2: 2px; --space-4: 4px; --space-6: 6px; --space-8: 8px;
275
+ --space-10: 10px; --space-12: 12px; --space-14: 14px; --space-16: 16px;
276
+ --space-20: 20px; --space-24: 24px; --space-28: 28px; --space-32: 32px;
277
+ --space-40: 40px; --space-48: 48px; --space-56: 56px; --space-64: 64px;
278
+ --space-72: 72px; --space-80: 80px; --space-96: 96px; --space-128: 128px;
279
+
280
+ /* ---- Elevation (two-layer shadows) ---- */
281
+ --shadow-100:
282
+ 0 1px 2px 0 rgb(28 32 36 / 0.06),
283
+ 0 0 0 0 rgb(28 32 36 / 0);
284
+ --shadow-200:
285
+ 0 4px 8px -4px rgb(28 32 36 / 0.1),
286
+ 0 2px 4px -2px rgb(28 32 36 / 0.04);
287
+ --shadow-300:
288
+ 0 12px 16px -4px rgb(28 32 36 / 0.08),
289
+ 0 4px 8px -2px rgb(28 32 36 / 0.04);
290
+ --shadow-400:
291
+ 0 20px 24px -4px rgb(28 32 36 / 0.08),
292
+ 0 8px 8px -4px rgb(28 32 36 / 0.04);
293
+ --shadow-500:
294
+ 0 24px 48px -12px rgb(28 32 36 / 0.16);
295
+ --shadow-600:
296
+ 0 32px 64px -12px rgb(28 32 36 / 0.16);
297
+ }
298
+
299
+ /* ==========================================================
300
+ DARK THEME — overrides scales + bg-hover/backdrop shadow tints
301
+ Matches the upstream dark-theme block.
302
+ ========================================================== */
303
+ .dark-theme {
304
+ /* Status scales — dark variants */
305
+ --green-3: 22 57 38; --green-11: 78 212 136;
306
+ --red-3: 61 25 30; --red-11: 255 125 133;
307
+ --orange-3: 63 36 17; --orange-11: 255 160 87;
308
+ --plum-3: 58 29 65; --plum-11: 211 131 228;
309
+
310
+ --slate-1: 17 17 19;
311
+ --slate-2: 24 25 27;
312
+ --slate-3: 33 34 37;
313
+ --slate-4: 39 42 45;
314
+ --slate-5: 46 49 53;
315
+ --slate-6: 54 58 63;
316
+ --slate-7: 67 72 78;
317
+ --slate-8: 90 97 105;
318
+ --slate-9: 105 110 119;
319
+ --slate-10: 119 123 132;
320
+ --slate-11: 176 180 186;
321
+ --slate-12: 237 238 240;
322
+
323
+ --iris-1: 19 19 30;
324
+ --iris-2: 23 22 37;
325
+ --iris-3: 32 34 72;
326
+ --iris-4: 38 42 101;
327
+ --iris-5: 48 51 116;
328
+ --iris-6: 61 62 130;
329
+ --iris-7: 74 74 149;
330
+ --iris-8: 89 88 177;
331
+ --iris-9: 91 91 214;
332
+ --iris-10: 110 106 222;
333
+ --iris-11: 177 169 255;
334
+ --iris-12: 224 223 254;
335
+
336
+ --indigo-9: 62 99 221;
337
+ --indigo-10: 84 114 228;
338
+ --indigo-11: 158 177 255;
339
+ --indigo-12: 214 225 255;
340
+
341
+ --bg-hover: 237 238 240 / 0.06;
342
+ --bg-pressed: 237 238 240 / 0.12;
343
+ --bg-selected: 91 91 214 / 0.18;
344
+ --bg-backdrop: 0 0 0 / 0.72;
345
+ --bg-overlay: 0 0 0 / 0.48;
346
+ --ring-focus: 110 106 222 / 0.4;
347
+ --ring-negative: 255 125 133 / 0.4;
348
+
349
+ /* Dark-mode on-caution flips back to dark ink on lighter orange? no — in
350
+ dark mode orange-9 is still vivid; on-caution stays dark. */
351
+
352
+ --shadow-100: 0 1px 2px 0 rgb(0 0 0 / 0.24);
353
+ --shadow-200: 0 4px 8px -4px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.16);
354
+ --shadow-300: 0 12px 16px -4px rgb(0 0 0 / 0.32), 0 4px 8px -2px rgb(0 0 0 / 0.16);
355
+ --shadow-400: 0 20px 24px -4px rgb(0 0 0 / 0.32), 0 8px 8px -4px rgb(0 0 0 / 0.16);
356
+ --shadow-500: 0 24px 48px -12px rgb(0 0 0 / 0.64);
357
+ --shadow-600: 0 32px 64px -12px rgb(0 0 0 / 0.64);
358
+ }
359
+
360
+ /* ==========================================================
361
+ SEMANTIC TYPE ELEMENTS
362
+ Apply heading/body scale to raw HTML tags.
363
+ ========================================================== */
364
+ html, body {
365
+ font-family: var(--font-primary);
366
+ background: rgb(var(--bg-primary));
367
+ color: rgb(var(--fg-primary));
368
+ -webkit-font-smoothing: antialiased;
369
+ -moz-osx-font-smoothing: grayscale;
370
+ text-rendering: optimizeLegibility;
371
+ }
372
+
373
+ h1, .h1 {
374
+ font-family: var(--font-secondary);
375
+ font-weight: var(--fw-bold);
376
+ font-size: var(--text-heading-500-size);
377
+ line-height: var(--text-heading-500-lh);
378
+ letter-spacing: -0.02em;
379
+ margin: 0;
380
+ }
381
+ h2, .h2 {
382
+ font-family: var(--font-secondary);
383
+ font-weight: var(--fw-bold);
384
+ font-size: var(--text-heading-400-size);
385
+ line-height: var(--text-heading-400-lh);
386
+ letter-spacing: -0.015em;
387
+ margin: 0;
388
+ }
389
+ h3, .h3 {
390
+ font-family: var(--font-secondary);
391
+ font-weight: var(--fw-bold);
392
+ font-size: var(--text-heading-300-size);
393
+ line-height: var(--text-heading-300-lh);
394
+ margin: 0;
395
+ }
396
+ h4, .h4 {
397
+ font-family: var(--font-primary);
398
+ font-weight: var(--fw-bold);
399
+ font-size: var(--text-heading-200-size);
400
+ line-height: var(--text-heading-200-lh);
401
+ margin: 0;
402
+ }
403
+ h5, .h5 {
404
+ font-family: var(--font-primary);
405
+ font-weight: var(--fw-bold);
406
+ font-size: var(--text-heading-100-size);
407
+ line-height: var(--text-heading-100-lh);
408
+ margin: 0;
409
+ }
410
+
411
+ .text-body-100 { font: var(--fw-regular) var(--text-body-100-size)/var(--text-body-100-lh) var(--font-primary); }
412
+ .text-body-200 { font: var(--fw-regular) var(--text-body-200-size)/var(--text-body-200-lh) var(--font-primary); }
413
+ .text-body-300 { font: var(--fw-regular) var(--text-body-300-size)/var(--text-body-300-lh) var(--font-primary); }
414
+ .text-body-400 { font: var(--fw-regular) var(--text-body-400-size)/var(--text-body-400-lh) var(--font-primary); }
415
+ .text-body-500 { font: var(--fw-regular) var(--text-body-500-size)/var(--text-body-500-lh) var(--font-primary); }
416
+
417
+ p { font: var(--fw-regular) var(--text-body-400-size)/var(--text-body-400-lh) var(--font-primary); margin: 0 0 var(--space-16); color: rgb(var(--fg-primary)); text-wrap: pretty; }
418
+ small { font: var(--fw-regular) var(--text-body-200-size)/var(--text-body-200-lh) var(--font-primary); color: rgb(var(--fg-secondary)); }
419
+ code, kbd, pre, samp {
420
+ font-family: var(--font-secondary);
421
+ font-size: var(--text-body-300-size);
422
+ line-height: var(--text-body-300-lh);
423
+ }
424
+ code { background: rgb(var(--bg-tertiary)); padding: 2px 6px; border-radius: var(--radius-4); }
425
+ pre { background: rgb(var(--bg-tertiary)); padding: var(--space-16); border-radius: var(--radius-8); overflow: auto; }
426
+
427
+ a { color: rgb(var(--fg-link)); text-decoration: none; }
428
+ a:hover { text-decoration: underline; }
429
+
430
+ .display {
431
+ font-family: var(--font-display);
432
+ font-weight: var(--fw-regular);
433
+ font-size: clamp(48px, 8vw, 96px);
434
+ line-height: 1.05;
435
+ letter-spacing: -0.01em;
436
+ }
437
+
438
+ ::selection { background: rgb(var(--iris-5)); color: rgb(var(--fg-primary)); }