@stainless-api/ui-primitives 0.1.0-beta.4 → 0.1.0-beta.40

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 (39) hide show
  1. package/dist/components/Accordion.d.ts +26 -0
  2. package/dist/components/Accordion.js +31 -0
  3. package/dist/components/Button.d.ts +42 -0
  4. package/dist/components/Button.js +51 -0
  5. package/dist/components/Callout.d.ts +18 -0
  6. package/dist/components/Callout.js +28 -0
  7. package/dist/components/Steps.d.ts +17 -0
  8. package/dist/components/Steps.js +24 -0
  9. package/dist/index.d.ts +171 -0
  10. package/dist/index.js +181 -0
  11. package/dist/scripts/index.d.ts +23 -0
  12. package/dist/scripts/index.js +164 -0
  13. package/dist/styles/starlight-compat.css +153 -0
  14. package/dist/styles/starlight-compat.js +0 -0
  15. package/dist/styles.css +1175 -0
  16. package/dist/styles.js +0 -0
  17. package/package.json +40 -24
  18. package/.env +0 -1
  19. package/CHANGELOG.md +0 -27
  20. package/eslint.config.js +0 -2
  21. package/src/components/Button.tsx +0 -94
  22. package/src/components/Callout.tsx +0 -31
  23. package/src/components/DetailsGroup.tsx +0 -17
  24. package/src/components/DropdownButton.tsx +0 -98
  25. package/src/components/button.css +0 -157
  26. package/src/components/callout.css +0 -72
  27. package/src/components/details.css +0 -126
  28. package/src/components/dropdown-button.css +0 -162
  29. package/src/index.ts +0 -4
  30. package/src/scripts/dropdown-button.ts +0 -55
  31. package/src/scripts/index.ts +0 -1
  32. package/src/styles/layout.css +0 -11
  33. package/src/styles/scales.css +0 -129
  34. package/src/styles/starlight-compat.css +0 -125
  35. package/src/styles/swatches.css +0 -87
  36. package/src/styles/theme.css +0 -49
  37. package/src/styles/typography.css +0 -199
  38. package/src/styles.css +0 -11
  39. package/tsconfig.json +0 -15
@@ -0,0 +1,1175 @@
1
+ /* Typography - Stainless */
2
+ @layer stl-ui.tokens {
3
+ :root {
4
+ --stl-typography-font: 'Geist', system-ui, sans-serif;
5
+ --stl-typography-font-mono: 'Geist Mono', ui-monospace, monospace;
6
+ --stl-typography-font-heading: var(--stl-typography-font);
7
+
8
+ --stl-typography-line-height: 1.5;
9
+ --stl-typography-line-height-heading: 1.2;
10
+
11
+ --stl-typography-text-body: var(--stl-typography-scale-base);
12
+ --stl-typography-text-body-sm: var(--stl-typography-scale-sm);
13
+ --stl-typography-text-body-xs: var(--stl-typography-scale-xs);
14
+
15
+ --stl-typography-text-code: max(0.875em, var(--stl-typography-scale-xs));
16
+
17
+ --stl-typography-text-h1: var(--stl-typography-scale-5xl);
18
+ --stl-typography-text-h2: var(--stl-typography-scale-4xl);
19
+ --stl-typography-text-h3: var(--stl-typography-scale-3xl);
20
+ --stl-typography-text-h4: var(--stl-typography-scale-2xl);
21
+ --stl-typography-text-h5: var(--stl-typography-scale-xl);
22
+ --stl-typography-scale-xs: 12px;
23
+ --stl-typography-scale-sm: 14px;
24
+ --stl-typography-scale-base: 16px;
25
+ --stl-typography-scale-lg: 18px;
26
+ --stl-typography-scale-xl: 20px;
27
+ --stl-typography-scale-2xl: 24px;
28
+ --stl-typography-scale-3xl: 29px;
29
+ --stl-typography-scale-4xl: 35px;
30
+ --stl-typography-scale-5xl: 42px;
31
+ --stl-typography-scale-6xl: 64px;
32
+
33
+ --stl-color-text-selection-foreground: /* unset by default; text colors are unchanged */;
34
+ --stl-color-text-selection-background: light-dark(
35
+ rgb(from var(--stl-color-text-selection) r g b / calc(alpha * 0.2)),
36
+ rgb(from var(--stl-color-text-selection) r g b / calc(alpha * 0.35))
37
+ );
38
+ }
39
+ }
40
+
41
+ /* Prose exists in its own sub-layer for easy reverting */
42
+ body {
43
+ font-family: var(--stl-typography-font);
44
+ font-feature-settings:
45
+ 'ss01' on,
46
+ 'ss03' on,
47
+ 'ss04' on,
48
+ 'ss06' on,
49
+ 'ss08' on;
50
+ }
51
+
52
+ .stl-ui-prose {
53
+ letter-spacing: -0.01em;
54
+ font-weight: 400;
55
+ line-height: var(--stl-typography-line-height);
56
+ font-size: var(--stl-typography-text-body);
57
+ color: var(--stl-color-foreground-reduced);
58
+
59
+ :where(.stl-ui-not-prose) {
60
+ letter-spacing: initial;
61
+ font-weight: initial;
62
+ line-height: initial;
63
+ font-size: initial;
64
+ color: initial;
65
+ }
66
+
67
+ &.small {
68
+ font-size: var(--stl-typography-scale-sm);
69
+ letter-spacing: normal;
70
+ }
71
+
72
+ :where(strong:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose strong) {
73
+ color: var(--stl-color-foreground);
74
+ }
75
+
76
+ :where(a:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose a) {
77
+ color: var(--stl-color-link-foreground);
78
+ text-decoration-color: rgb(from currentColor r g b / calc(alpha * var(--stl-opacity-level-040)));
79
+ transition: text-decoration-color 0.1s ease-out;
80
+ &:hover {
81
+ text-decoration-color: currentColor;
82
+ }
83
+ }
84
+
85
+ :where(h1, h2, h3, h4, h5, h6):where(:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose *) {
86
+ color: var(--stl-color-foreground);
87
+ font-weight: 500;
88
+ line-height: var(--stl-typography-line-height-heading);
89
+ font-family: var(--stl-typography-font-heading);
90
+ }
91
+
92
+ :where(h1:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose h1) {
93
+ /* Heading 1/Medium */
94
+ font-size: var(--stl-typography-text-h1);
95
+ letter-spacing: -0.03em;
96
+ margin-top: 1.5em;
97
+ }
98
+
99
+ :where(h2:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose h2) {
100
+ /* Heading 2/Medium */
101
+ font-size: var(--stl-typography-text-h2);
102
+ letter-spacing: -0.03em;
103
+ margin-top: 1.35em;
104
+ }
105
+
106
+ :where(h3:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose h3) {
107
+ /* Heading 3/Medium */
108
+ font-size: var(--stl-typography-text-h3);
109
+ letter-spacing: -0.02em;
110
+ margin-top: 1.35em;
111
+ }
112
+
113
+ :where(h4:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose h4) {
114
+ /* Heading 4/Medium */
115
+ font-size: var(--stl-typography-text-h4);
116
+ letter-spacing: -0.02em;
117
+ margin-top: 1.35em;
118
+ }
119
+
120
+ :where(h5:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose h5) {
121
+ /* Heading 5/Medium */
122
+ font-size: var(--stl-typography-text-h5);
123
+ letter-spacing: -0.02em;
124
+ margin-top: 1.2em;
125
+ }
126
+
127
+ :where(li:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose li) {
128
+ &:where(:not(:last-child)) {
129
+ margin-bottom: 8px;
130
+ }
131
+ }
132
+
133
+ &.smaller-headings {
134
+ --stl-typography-text-h1: var(--stl-typography-scale-3xl);
135
+ --stl-typography-text-h2: var(--stl-typography-scale-2xl);
136
+ --stl-typography-text-h3: var(--stl-typography-scale-xl);
137
+ --stl-typography-text-h4: var(--stl-typography-scale-lg);
138
+ --stl-typography-text-h5: var(--stl-typography-scale-base);
139
+
140
+ :where(h1) {
141
+ margin-top: 1.5em;
142
+ }
143
+ :where(h2, h3, h4) {
144
+ margin-top: 1.25em;
145
+ }
146
+ :where(h5) {
147
+ margin-top: 1em;
148
+ }
149
+ }
150
+
151
+ /* code blocks */
152
+ :where(
153
+ pre:not(.stl-ui-not-prose *, .expressive-code *),
154
+ .stl-ui-not-prose .stl-ui-prose pre:not(.expressive-code *)
155
+ ) {
156
+ padding: 12px 20px;
157
+ border-radius: var(--stl-ui-layout-border-radius-sml);
158
+ border: 1px solid var(--stl-color-border);
159
+ background-color: var(--stl-color-faint-background);
160
+ overflow: auto;
161
+ margin-bottom: 1rem;
162
+ }
163
+
164
+ :where(ol, ul) {
165
+ &:where(:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose *) {
166
+ padding-left: 26px;
167
+ }
168
+ }
169
+
170
+ :where(ol, ul, aside, img, figure, details):where(
171
+ :not(.stl-ui-not-prose *),
172
+ .stl-ui-not-prose .stl-ui-prose *
173
+ ) {
174
+ margin-top: 16px;
175
+ }
176
+
177
+ /* all code (inline + block) */
178
+ :where(code):where(:not(.stl-ui-not-prose *), .stl-ui-not-prose .stl-ui-prose *) {
179
+ font-family: var(--stl-typography-font-mono);
180
+ font-feature-settings:
181
+ 'ss01' on,
182
+ 'ss03' on,
183
+ 'ss04' on,
184
+ 'ss06' on;
185
+
186
+ font-size: var(--stl-typography-text-code);
187
+ font-weight: inherit;
188
+ letter-spacing: normal;
189
+
190
+ /* inline code */
191
+ &:where(:not(pre > &)) {
192
+ color: var(--stl-color-foreground);
193
+ padding: 0 0.2em;
194
+ background-color: rgb(from var(--stl-color-foreground) r g b / 0.1);
195
+ border-radius: 0.2em;
196
+ }
197
+
198
+ /* code blocks */
199
+ /* &:where(pre > &) { } */
200
+ }
201
+ }
202
+
203
+ /* _direct_ children of stl-ui-prose should get a margin-top by default for spacing. */
204
+ :where(.stl-ui-prose, .stl-ui-prose > .sl-markdown-content) > :where(:not(:first-child)) {
205
+ margin-top: 16px;
206
+ }
207
+
208
+ @layer starlight.content {
209
+ .stl-ui-prose .sl-markdown-content {
210
+ a,
211
+ a:hover {
212
+ color: revert-layer;
213
+ }
214
+ }
215
+ }
216
+
217
+ ::selection {
218
+ background-color: var(--stl-color-text-selection-background);
219
+ color: var(--stl-color-text-selection-foreground);
220
+ }
221
+
222
+ @layer stl-ui.tokens {
223
+ /* Layout - Stainless */
224
+ :root {
225
+ --stl-ui-layout-border-radius-xs: 4px;
226
+ --stl-ui-layout-border-radius-sml: 8px;
227
+ --stl-ui-layout-border-radius: 12px;
228
+ --stl-ui-layout-border-radius-med: 16px;
229
+ --stl-ui-layout-border-radius-max: 100vmax;
230
+ --stl-ui-left-content-indent: 24px;
231
+
232
+ --stl-ui-page-padding-inline: 20px;
233
+ }
234
+ }
235
+
236
+ /* 1. Base colors */
237
+ @layer stl-ui.tokens {
238
+ :root {
239
+ --stl-opacity-level-080: 0.80;
240
+ --stl-opacity-level-040: 0.40;
241
+ --stl-opacity-level-016: 0.16;
242
+ --stl-opacity-level-008: 0.08;
243
+ --stl-opacity-level-004: 0.04;
244
+ /* background */
245
+ --stl-color-background: light-dark(rgb(255 255 255), rgb(10 10 10));
246
+ --stl-color-background-hover: light-dark(rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-004))), rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))));
247
+ /* background shades */
248
+ /* muted background */
249
+ --stl-color-muted-background: light-dark(rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
250
+ --stl-color-muted-background-hover: rgb(from var(--stl-color-muted-background) r g b/calc(alpha * 2));
251
+ /* faint background */
252
+ --stl-color-faint-background: rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-004)));
253
+ --stl-color-faint-background-hover: rgb(from var(--stl-color-faint-background) r g b/calc(alpha * 2));
254
+ /* ui elements like cards and buttons match --stl-color-background in light mode, but have a slight tint in dark mode */
255
+ --stl-color-ui-background: light-dark(
256
+ var(--stl-color-background),
257
+ rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-004)))
258
+ );
259
+ --stl-color-ui-background-hover: light-dark(
260
+ var(--stl-color-background-hover),
261
+ rgb(from var(--stl-color-ui-background) r g b/calc(alpha * 2))
262
+ );
263
+ /* foreground */
264
+ --stl-color-foreground: light-dark(rgb(38 38 38), rgb(245 245 245));
265
+ --stl-color-foreground-reduced: rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
266
+ --stl-color-foreground-muted: rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
267
+ /* inverse */
268
+ --stl-color-inverse-background: var(--stl-color-foreground);
269
+ --stl-color-inverse-background-hover: rgb(from var(--stl-color-inverse-background) r g b/calc(alpha * 0.9));
270
+ --stl-color-inverse-foreground: var(--stl-color-background);
271
+ /* default border (“foreground border”) */
272
+ --stl-color-border: rgb(from var(--stl-color-foreground) r g b/calc(alpha * var(--stl-opacity-level-016)));
273
+ --stl-color-border-faint: rgb(from var(--stl-color-border) r g b/calc(alpha * 0.5));
274
+ --stl-color-border-strong: rgb(from var(--stl-color-border) r g b/calc(alpha * 2.5));
275
+ }
276
+ }
277
+ /* 2. Color palettes (accent, red, green, etc) */
278
+ @layer stl-ui.tokens {
279
+ :root {
280
+ /* accent */
281
+ --stl-color-accent: light-dark(#155dfc, #2b7fff);
282
+ --stl-color-accent-foreground: var(--stl-color-accent);
283
+ --stl-color-accent-foreground-reduced: rgb(from var(--stl-color-accent-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
284
+ --stl-color-accent-foreground-muted: rgb(from var(--stl-color-accent-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
285
+ --stl-color-accent-muted-background: light-dark(rgb(from var(--stl-color-accent-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-accent-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
286
+ --stl-color-accent-muted-background-hover: rgb(from var(--stl-color-accent-muted-background) r g b/calc(alpha * 2));
287
+ --stl-color-accent-border: light-dark(rgb(from var(--stl-color-accent) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-accent) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
288
+ --stl-color-accent-border-faint: rgb(from var(--stl-color-accent-border) r g b/calc(alpha * 0.5));
289
+ --stl-color-accent-border-strong: var(--stl-color-accent);
290
+ --stl-color-accent-inverse-background: var(--stl-color-accent);
291
+ --stl-color-accent-inverse-background-hover: rgb(from var(--stl-color-accent) r g b/calc(alpha * var(--stl-opacity-level-080)));
292
+ --stl-color-accent-inverse-foreground: rgb(255, 255, 255);
293
+ /* red */
294
+ --stl-color-red: light-dark(#d01e22, #e34041);
295
+ --stl-color-red-foreground: var(--stl-color-red);
296
+ --stl-color-red-foreground-reduced: rgb(from var(--stl-color-red-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
297
+ --stl-color-red-foreground-muted: rgb(from var(--stl-color-red-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
298
+ --stl-color-red-muted-background: light-dark(rgb(from var(--stl-color-red-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-red-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
299
+ --stl-color-red-muted-background-hover: rgb(from var(--stl-color-red-muted-background) r g b/calc(alpha * 2));
300
+ --stl-color-red-border: light-dark(rgb(from var(--stl-color-red) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-red) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
301
+ --stl-color-red-border-faint: rgb(from var(--stl-color-red-border) r g b/calc(alpha * 0.5));
302
+ --stl-color-red-border-strong: var(--stl-color-red);
303
+ --stl-color-red-inverse-background: var(--stl-color-red);
304
+ --stl-color-red-inverse-background-hover: rgb(from var(--stl-color-red) r g b/calc(alpha * var(--stl-opacity-level-080)));
305
+ --stl-color-red-inverse-foreground: rgb(255, 255, 255);
306
+ /* green */
307
+ --stl-color-green: light-dark(#16a34a, #22c55e);
308
+ --stl-color-green-foreground: var(--stl-color-green);
309
+ --stl-color-green-foreground-reduced: rgb(from var(--stl-color-green-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
310
+ --stl-color-green-foreground-muted: rgb(from var(--stl-color-green-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
311
+ --stl-color-green-muted-background: light-dark(rgb(from var(--stl-color-green-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-green-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
312
+ --stl-color-green-muted-background-hover: rgb(from var(--stl-color-green-muted-background) r g b/calc(alpha * 2));
313
+ --stl-color-green-border: light-dark(rgb(from var(--stl-color-green) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-green) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
314
+ --stl-color-green-border-faint: rgb(from var(--stl-color-green-border) r g b/calc(alpha * 0.5));
315
+ --stl-color-green-border-strong: var(--stl-color-green);
316
+ --stl-color-green-inverse-background: var(--stl-color-green);
317
+ --stl-color-green-inverse-background-hover: rgb(from var(--stl-color-green) r g b/calc(alpha * var(--stl-opacity-level-080)));
318
+ --stl-color-green-inverse-foreground: rgb(255, 255, 255);
319
+ /* blue */
320
+ --stl-color-blue: light-dark(#155dfc, #2b7fff);
321
+ --stl-color-blue-foreground: var(--stl-color-blue);
322
+ --stl-color-blue-foreground-reduced: rgb(from var(--stl-color-blue-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
323
+ --stl-color-blue-foreground-muted: rgb(from var(--stl-color-blue-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
324
+ --stl-color-blue-muted-background: light-dark(rgb(from var(--stl-color-blue-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-blue-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
325
+ --stl-color-blue-muted-background-hover: rgb(from var(--stl-color-blue-muted-background) r g b/calc(alpha * 2));
326
+ --stl-color-blue-border: light-dark(rgb(from var(--stl-color-blue) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-blue) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
327
+ --stl-color-blue-border-faint: rgb(from var(--stl-color-blue-border) r g b/calc(alpha * 0.5));
328
+ --stl-color-blue-border-strong: var(--stl-color-blue);
329
+ --stl-color-blue-inverse-background: var(--stl-color-blue);
330
+ --stl-color-blue-inverse-background-hover: rgb(from var(--stl-color-blue) r g b/calc(alpha * var(--stl-opacity-level-080)));
331
+ --stl-color-blue-inverse-foreground: rgb(255, 255, 255);
332
+ /* yellow */
333
+ --stl-color-yellow: light-dark(#ca8a04, #eab308);
334
+ --stl-color-yellow-foreground: var(--stl-color-yellow);
335
+ --stl-color-yellow-foreground-reduced: rgb(from var(--stl-color-yellow-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
336
+ --stl-color-yellow-foreground-muted: rgb(from var(--stl-color-yellow-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
337
+ --stl-color-yellow-muted-background: light-dark(rgb(from var(--stl-color-yellow-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-yellow-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
338
+ --stl-color-yellow-muted-background-hover: rgb(from var(--stl-color-yellow-muted-background) r g b/calc(alpha * 2));
339
+ --stl-color-yellow-border: light-dark(rgb(from var(--stl-color-yellow) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-yellow) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
340
+ --stl-color-yellow-border-faint: rgb(from var(--stl-color-yellow-border) r g b/calc(alpha * 0.5));
341
+ --stl-color-yellow-border-strong: var(--stl-color-yellow);
342
+ --stl-color-yellow-inverse-background: var(--stl-color-yellow);
343
+ --stl-color-yellow-inverse-background-hover: rgb(from var(--stl-color-yellow) r g b/calc(alpha * var(--stl-opacity-level-080)));
344
+ --stl-color-yellow-inverse-foreground: rgb(255, 255, 255);
345
+ /* orange */
346
+ --stl-color-orange: light-dark(#ea580c, #f97316);
347
+ --stl-color-orange-foreground: var(--stl-color-orange);
348
+ --stl-color-orange-foreground-reduced: rgb(from var(--stl-color-orange-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
349
+ --stl-color-orange-foreground-muted: rgb(from var(--stl-color-orange-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
350
+ --stl-color-orange-muted-background: light-dark(rgb(from var(--stl-color-orange-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-orange-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
351
+ --stl-color-orange-muted-background-hover: rgb(from var(--stl-color-orange-muted-background) r g b/calc(alpha * 2));
352
+ --stl-color-orange-border: light-dark(rgb(from var(--stl-color-orange) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-orange) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
353
+ --stl-color-orange-border-faint: rgb(from var(--stl-color-orange-border) r g b/calc(alpha * 0.5));
354
+ --stl-color-orange-border-strong: var(--stl-color-orange);
355
+ --stl-color-orange-inverse-background: var(--stl-color-orange);
356
+ --stl-color-orange-inverse-background-hover: rgb(from var(--stl-color-orange) r g b/calc(alpha * var(--stl-opacity-level-080)));
357
+ --stl-color-orange-inverse-foreground: rgb(255, 255, 255);
358
+ /* purple */
359
+ --stl-color-purple: light-dark(#9333ea, #a855f7);
360
+ --stl-color-purple-foreground: var(--stl-color-purple);
361
+ --stl-color-purple-foreground-reduced: rgb(from var(--stl-color-purple-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
362
+ --stl-color-purple-foreground-muted: rgb(from var(--stl-color-purple-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
363
+ --stl-color-purple-muted-background: light-dark(rgb(from var(--stl-color-purple-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-purple-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
364
+ --stl-color-purple-muted-background-hover: rgb(from var(--stl-color-purple-muted-background) r g b/calc(alpha * 2));
365
+ --stl-color-purple-border: light-dark(rgb(from var(--stl-color-purple) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-purple) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
366
+ --stl-color-purple-border-faint: rgb(from var(--stl-color-purple-border) r g b/calc(alpha * 0.5));
367
+ --stl-color-purple-border-strong: var(--stl-color-purple);
368
+ --stl-color-purple-inverse-background: var(--stl-color-purple);
369
+ --stl-color-purple-inverse-background-hover: rgb(from var(--stl-color-purple) r g b/calc(alpha * var(--stl-opacity-level-080)));
370
+ --stl-color-purple-inverse-foreground: rgb(255, 255, 255);
371
+ /* cyan */
372
+ --stl-color-cyan: light-dark(#0891b2, #06b6d4);
373
+ --stl-color-cyan-foreground: var(--stl-color-cyan);
374
+ --stl-color-cyan-foreground-reduced: rgb(from var(--stl-color-cyan-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
375
+ --stl-color-cyan-foreground-muted: rgb(from var(--stl-color-cyan-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
376
+ --stl-color-cyan-muted-background: light-dark(rgb(from var(--stl-color-cyan-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-cyan-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
377
+ --stl-color-cyan-muted-background-hover: rgb(from var(--stl-color-cyan-muted-background) r g b/calc(alpha * 2));
378
+ --stl-color-cyan-border: light-dark(rgb(from var(--stl-color-cyan) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-cyan) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
379
+ --stl-color-cyan-border-faint: rgb(from var(--stl-color-cyan-border) r g b/calc(alpha * 0.5));
380
+ --stl-color-cyan-border-strong: var(--stl-color-cyan);
381
+ --stl-color-cyan-inverse-background: var(--stl-color-cyan);
382
+ --stl-color-cyan-inverse-background-hover: rgb(from var(--stl-color-cyan) r g b/calc(alpha * var(--stl-opacity-level-080)));
383
+ --stl-color-cyan-inverse-foreground: rgb(255, 255, 255);
384
+ /* pink */
385
+ --stl-color-pink: light-dark(#ec4899, #ec4899);
386
+ --stl-color-pink-foreground: var(--stl-color-pink);
387
+ --stl-color-pink-foreground-reduced: rgb(from var(--stl-color-pink-foreground) r g b/calc(alpha * var(--stl-opacity-level-080)));
388
+ --stl-color-pink-foreground-muted: rgb(from var(--stl-color-pink-foreground) r g b/calc(alpha * var(--stl-opacity-level-040)));
389
+ --stl-color-pink-muted-background: light-dark(rgb(from var(--stl-color-pink-foreground) r g b/calc(alpha * var(--stl-opacity-level-008))), rgb(from var(--stl-color-pink-foreground) r g b/calc(alpha * var(--stl-opacity-level-016))));
390
+ --stl-color-pink-muted-background-hover: rgb(from var(--stl-color-pink-muted-background) r g b/calc(alpha * 2));
391
+ --stl-color-pink-border: light-dark(rgb(from var(--stl-color-pink) r g b/calc(alpha * var(--stl-opacity-level-016))), rgb(from var(--stl-color-pink) r g b/calc(alpha * calc(var(--stl-opacity-level-016) * 1.5))));
392
+ --stl-color-pink-border-faint: rgb(from var(--stl-color-pink-border) r g b/calc(alpha * 0.5));
393
+ --stl-color-pink-border-strong: var(--stl-color-pink);
394
+ --stl-color-pink-inverse-background: var(--stl-color-pink);
395
+ --stl-color-pink-inverse-background-hover: rgb(from var(--stl-color-pink) r g b/calc(alpha * var(--stl-opacity-level-080)));
396
+ --stl-color-pink-inverse-foreground: rgb(255, 255, 255);
397
+ }
398
+ :root[data-theme=dark],
399
+ .stl-theme-dark {
400
+ color-scheme: dark;
401
+ background: var(--stl-color-background);
402
+ color: var(--stl-color-foreground);
403
+ }
404
+ :root[data-theme=light],
405
+ .stl-theme-light {
406
+ color-scheme: light;
407
+ background: var(--stl-color-background);
408
+ color: var(--stl-color-foreground);
409
+ }
410
+ }
411
+ /* Semantic color roles */
412
+ @layer stl-ui.tokens {
413
+ :root {
414
+ --stl-color-link-foreground: var(--stl-color-accent-foreground);
415
+ --stl-color-text-selection: var(--stl-color-accent-inverse-background);
416
+ }
417
+ }
418
+ .stl-ui-button {
419
+ height: 32px;
420
+ padding: 8px 10px;
421
+ border-radius: var(--stl-ui-layout-border-radius-sml);
422
+ line-height: 150%;
423
+ font-weight: 500;
424
+ font-size: var(--stl-typography-text-body-sm);
425
+ font-family: var(--stl-typography-font);
426
+
427
+ cursor: pointer;
428
+ display: inline-flex;
429
+ align-items: center;
430
+ justify-content: center;
431
+ gap: 2px;
432
+ white-space: nowrap;
433
+ flex-shrink: 0;
434
+
435
+ border: 1px solid transparent;
436
+ color: var(--stl-color-inverse-foreground);
437
+ background-color: var(--stl-color-inverse-background);
438
+
439
+ &:hover {
440
+ background-color: var(--stl-color-inverse-background-hover);
441
+ }
442
+
443
+ &[hidden] {
444
+ display: none;
445
+ }
446
+ }
447
+
448
+ /* --- COLOR VARIANTS --- */
449
+
450
+ .stl-ui-button--accent {
451
+ color: var(--stl-color-accent-inverse-foreground);
452
+ background-color: var(--stl-color-accent-inverse-background);
453
+ &:hover {
454
+ background-color: var(--stl-color-accent-inverse-background-hover);
455
+ }
456
+ }
457
+
458
+ .stl-ui-button--accent-muted {
459
+ color: var(--stl-color-accent-foreground);
460
+ background-color: var(--stl-color-accent-muted-background);
461
+ &:hover {
462
+ background-color: var(--stl-color-accent-muted-background-hover);
463
+ }
464
+ &.stl-ui-button--with-border {
465
+ border-color: var(--stl-color-accent-border);
466
+ }
467
+ }
468
+
469
+ .stl-ui-button--muted {
470
+ color: var(--stl-color-foreground);
471
+ background-color: var(--stl-color-muted-background);
472
+ &:hover {
473
+ background-color: var(--stl-color-muted-background-hover);
474
+ }
475
+ &.stl-ui-button--with-border {
476
+ border-color: var(--stl-color-border);
477
+ }
478
+ }
479
+
480
+ .stl-ui-button--outline {
481
+ color: var(--stl-color-foreground);
482
+ background-color: var(--stl-color-ui-background);
483
+ border-color: var(--stl-color-border);
484
+ &:hover {
485
+ background:
486
+ linear-gradient(var(--stl-color-ui-background-hover), var(--stl-color-ui-background-hover)),
487
+ linear-gradient(var(--stl-color-ui-background), var(--stl-color-ui-background));
488
+ }
489
+ }
490
+
491
+ .stl-ui-button--ghost {
492
+ color: var(--stl-color-foreground);
493
+ background-color: transparent;
494
+ &:hover {
495
+ background-color: var(--stl-color-background-hover);
496
+ }
497
+ &.stl-ui-button--with-border {
498
+ border-color: var(--stl-color-border);
499
+ }
500
+ }
501
+
502
+ .stl-ui-button--success {
503
+ color: var(--stl-color-green-inverse-foreground);
504
+ background-color: var(--stl-color-green-inverse-background);
505
+ &:hover {
506
+ background-color: var(--stl-color-green-inverse-background-hover);
507
+ }
508
+ }
509
+
510
+ .stl-ui-button--destructive {
511
+ color: var(--stl-color-red-inverse-foreground);
512
+ background-color: var(--stl-color-red-inverse-background);
513
+ &:hover {
514
+ background-color: var(--stl-color-red-inverse-background-hover);
515
+ }
516
+ }
517
+
518
+ /* --- LOADING STATE --- */
519
+
520
+ /**
521
+ * When loading, set aria-disabled="true" and aria-label="<Doing action...>"
522
+ * Don't use disabled, it loses focus.
523
+ */
524
+
525
+ .stl-ui-button--loading {
526
+ -webkit-text-fill-color: transparent;
527
+ position: relative;
528
+
529
+ & * {
530
+ color: transparent;
531
+ }
532
+
533
+ &::before {
534
+ content: '';
535
+ animation: stl-ui-button--loading-spin 1s linear infinite;
536
+ position: absolute;
537
+ width: 16px;
538
+ height: 16px;
539
+ mask-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWxvYWRlci1jaXJjbGUtaWNvbiBsdWNpZGUtbG9hZGVyLWNpcmNsZSI+PHBhdGggZD0iTTIxIDEyYTkgOSAwIDEgMS02LjIxOS04LjU2Ii8+PC9zdmc+');
540
+ mask-size: contain;
541
+ mask-position: center;
542
+ mask-repeat: no-repeat;
543
+ background: currentColor;
544
+ }
545
+ }
546
+
547
+ @keyframes stl-ui-button--loading-spin {
548
+ to {
549
+ transform: rotate(360deg);
550
+ }
551
+ }
552
+
553
+ /* --- SIZE VARIANTS --- */
554
+ .stl-ui-button--size-sm {
555
+ height: 24px;
556
+ padding: 0 6px;
557
+ border-radius: var(--stl-ui-layout-border-radius-xs);
558
+ line-height: 100%;
559
+ font-weight: 500;
560
+ font-size: var(--stl-typography-text-body-xs);
561
+ }
562
+
563
+ .stl-ui-button--size-lg {
564
+ height: 40px;
565
+ padding: 8px 14px;
566
+ border-radius: var(--stl-ui-layout-border-radius);
567
+ line-height: 150%;
568
+ font-weight: 500;
569
+ font-size: var(--stl-typography-text-body);
570
+ }
571
+
572
+ /* --- ICONS --- */
573
+ .stl-ui-button__icon {
574
+ flex-shrink: 0;
575
+ display: flex;
576
+ align-items: center;
577
+ justify-content: center;
578
+
579
+ svg {
580
+ margin-top: 0;
581
+ }
582
+ }
583
+
584
+ /* Left Icon */
585
+ .stl-ui-button:has(.stl-ui-button__icon:first-child) .stl-ui-button__icon {
586
+ margin-left: -4px;
587
+ margin-right: 4px;
588
+ }
589
+
590
+ .stl-ui-button:has(.stl-ui-button__icon:last-child) .stl-ui-button__icon {
591
+ /* Right Icon */
592
+ margin-right: -4px;
593
+ margin-left: 4px;
594
+
595
+ /* Right & Left Icon */
596
+ &:first-child {
597
+ margin-left: -4px;
598
+ margin-right: 4px;
599
+ }
600
+ }
601
+
602
+ /* Only Icon */
603
+ .stl-ui-button:not(:has(.stl-ui-button-label)):has(.stl-ui-button__icon:last-child):has(
604
+ .stl-ui-button__icon:first-child
605
+ ) {
606
+ aspect-ratio: 1 / 1;
607
+
608
+ .stl-ui-button__icon {
609
+ margin-left: -4px;
610
+ margin-right: -4px;
611
+ }
612
+ }
613
+
614
+ /* --- LINKS --- */
615
+
616
+ a.stl-ui-button {
617
+ text-decoration: none;
618
+ text-align: center;
619
+ }
620
+
621
+ .stl-ui-dropdown {
622
+ --stl-ui-dropdown-button-color: var(--stl-color-foreground);
623
+ --stl-ui-dropdown-button-background-color: var(--stl-color-ui-background);
624
+ --stl-ui-dropdown-button-border-color: var(--stl-color-border);
625
+
626
+ --stl-ui-dropdown-button-border-radius: var(--stl-ui-layout-border-radius-sml);
627
+ --stl-ui-dropdown-button-font-size: var(--stl-typography-scale-sm);
628
+
629
+ --stl-ui-dropdown-button-height: 32px;
630
+ --stl-ui-dropdown-button-padding: 0 10px;
631
+ --stl-ui-dropdown-button-line-height: 100%;
632
+ --stl-ui-dropdown-button-font-weight: 500;
633
+
634
+ position: relative;
635
+ display: inline-flex;
636
+ align-items: center;
637
+
638
+ color: var(--stl-ui-dropdown-button-color);
639
+ gap: 0;
640
+ font-size: var(--stl-ui-dropdown-button-font-size);
641
+
642
+ hr {
643
+ --stl-ui-dropdown-button__divider-height: 1px;
644
+ --stl-ui-dropdown-button__divider-color: var(--stl-color-border);
645
+
646
+ height: var(--stl-ui-dropdown-button__divider-height);
647
+ background-color: var(--stl-ui-dropdown-button__divider-color);
648
+ border: none;
649
+
650
+ margin: 4px 0;
651
+ width: calc(100% + 8px);
652
+ transform: translateX(-4px);
653
+ }
654
+
655
+ .stl-ui-dropdown__button {
656
+ background-color: var(--stl-ui-dropdown-button-background-color);
657
+
658
+ border: 1px solid var(--stl-ui-dropdown-button-border-color);
659
+ border-radius: var(--stl-ui-dropdown-button-border-radius);
660
+ height: var(--stl-ui-dropdown-button-height);
661
+ padding: var(--stl-ui-dropdown-button-padding);
662
+ line-height: var(--stl-ui-dropdown-button-line-height);
663
+ font-weight: var(--stl-ui-dropdown-button-font-weight);
664
+ cursor: pointer;
665
+ display: flex;
666
+ align-items: center;
667
+ justify-content: center;
668
+ color: inherit;
669
+
670
+ &:focus {
671
+ outline: 1px auto Highlight;
672
+ }
673
+
674
+ &:hover {
675
+ background-color: var(--stl-color-ui-background-hover);
676
+ }
677
+
678
+ .stl-ui-dropdown__trigger-icon {
679
+ margin-right: -4px;
680
+ margin-left: 4px;
681
+ display: flex;
682
+ align-items: center;
683
+ justify-content: center;
684
+ }
685
+ }
686
+
687
+ .stl-ui-dropdown__icon {
688
+ display: flex;
689
+ align-items: center;
690
+ justify-content: center;
691
+
692
+ svg {
693
+ width: 16px;
694
+ height: 16px;
695
+ }
696
+ }
697
+
698
+ /**
699
+ * Dropdown Button
700
+ */
701
+ .stl-ui-dropdown-button--action {
702
+ display: flex;
703
+ align-items: center;
704
+ gap: 8px;
705
+ border-top-right-radius: 0;
706
+ border-bottom-right-radius: 0;
707
+ border-right-width: 0;
708
+
709
+ &:hover {
710
+ background-color: var(--stl-color-ui-background-hover);
711
+ z-index: 1;
712
+ border-right-width: 1px;
713
+ & + .stl-ui-dropdown-button__trigger {
714
+ border-left-width: 0;
715
+ }
716
+ }
717
+
718
+ &.disabled {
719
+ cursor: not-allowed;
720
+ background-color: var(--stl-color-ui-background);
721
+ }
722
+ }
723
+
724
+ .stl-ui-dropdown-button__trigger {
725
+ border-radius: 0;
726
+ border-top-right-radius: var(--stl-ui-dropdown-button-border-radius);
727
+ border-bottom-right-radius: var(--stl-ui-dropdown-button-border-radius);
728
+
729
+ &:hover {
730
+ background-color: var(--stl-color-ui-background-hover);
731
+ }
732
+ }
733
+
734
+ .stl-ui-dropdown__trigger-selected {
735
+ display: flex;
736
+ align-items: center;
737
+ gap: 8px;
738
+ }
739
+
740
+ /**
741
+ * Dropdown Menu
742
+ */
743
+ .stl-ui-dropdown-menu {
744
+ --stl-ui-dropdown-menu-background-color: var(--stl-color-ui-background);
745
+ --stl-ui-dropdown-menu-border-color: var(--stl-color-border);
746
+ --stl-ui-dropdown-menu-box-shadow: 0px 4px 4px -2px #00000014;
747
+ --stl-ui-dropdown-menu-border-radius: var(--stl-ui-layout-border-radius-sml);
748
+
749
+ /* opaque background with sometimes-transparent color on top in image layer*/
750
+ background-color: var(--stl-color-background);
751
+ background-image: linear-gradient(
752
+ to right,
753
+ var(--stl-ui-dropdown-menu-background-color),
754
+ var(--stl-ui-dropdown-menu-background-color)
755
+ );
756
+
757
+ border: 1px solid var(--stl-ui-dropdown-menu-border-color);
758
+ box-shadow: var(--stl-ui-dropdown-menu-box-shadow);
759
+ border-radius: var(--stl-ui-dropdown-menu-border-radius);
760
+
761
+ position: absolute;
762
+ right: 0;
763
+ z-index: 1000;
764
+ min-width: 100%;
765
+ width: max-content;
766
+ padding: 4px;
767
+ display: none;
768
+
769
+ &.stl-ui-dropdown-menu--above {
770
+ top: auto;
771
+ bottom: 100%;
772
+ margin-bottom: 4px;
773
+ }
774
+
775
+ &.stl-ui-dropdown-menu--below {
776
+ top: 100%;
777
+ bottom: auto;
778
+ margin-top: 4px;
779
+ }
780
+
781
+ &[data-state='open'] {
782
+ display: block;
783
+ }
784
+
785
+ .stl-ui-dropdown-menu__item {
786
+ --stl-ui-dropdown-menu__item-border-radius: var(--stl-ui-dropdown-button-border-radius);
787
+ --stl-ui-dropdown-menu__item-height: var(--stl-ui-dropdown-button-height);
788
+ --stl-ui-dropdown-menu__item-line-height: var(--stl-ui-dropdown-button-line-height);
789
+ --stl-ui-dropdown-menu__item-hover-background-color: var(--stl-color-ui-background-hover);
790
+
791
+ border-radius: var(--stl-ui-dropdown-menu__item-border-radius);
792
+ height: var(--stl-ui-dropdown-menu__item-height);
793
+ line-height: var(--stl-ui-dropdown-menu__item-line-height);
794
+
795
+ background: transparent;
796
+ border: none;
797
+
798
+ padding: 8px;
799
+ cursor: pointer;
800
+ display: flex;
801
+ align-items: center;
802
+ justify-content: space-between;
803
+ gap: 16px;
804
+ width: 100%;
805
+
806
+ &:hover,
807
+ &:focus-visible {
808
+ background-color: var(--stl-ui-dropdown-menu__item-hover-background-color);
809
+ }
810
+
811
+ &:hover,
812
+ &:focus-visible,
813
+ &:focus {
814
+ color: var(--stl-color-foreground);
815
+ }
816
+
817
+ &.stl-ui-dropdown-menu__item-link {
818
+ display: flex;
819
+ align-items: center;
820
+ justify-content: space-between;
821
+ gap: 16px;
822
+ width: 100%;
823
+
824
+ &:hover {
825
+ color: var(--stl-color-foreground);
826
+ }
827
+ }
828
+
829
+ .stl-ui-dropdown-menu__item-icon {
830
+ display: flex;
831
+ }
832
+
833
+ .stl-ui-dropdown-menu__item-content {
834
+ display: flex;
835
+ align-items: center;
836
+ gap: 8px;
837
+ }
838
+
839
+ .stl-ui-dropdown-menu__item-text {
840
+ white-space: nowrap;
841
+ }
842
+
843
+ .stl-ui-dropdown-menu__item-text--subtle {
844
+ color: var(--stl-color-foreground-muted);
845
+ }
846
+
847
+ strong {
848
+ color: var(--stl-color-foreground);
849
+ font-weight: 500;
850
+ }
851
+
852
+ .stl-ui-dropdown-menu__item-subtle-icon {
853
+ --stl-ui-dropdown-menu__item-subtle-icon-color: rgb(from var(--stl-color-foreground) r g b / 0.25);
854
+
855
+ svg {
856
+ color: var(--stl-ui-dropdown-menu__item-subtle-icon-color);
857
+ }
858
+ }
859
+ }
860
+ }
861
+ }
862
+
863
+ .stl-ui-callout {
864
+ --stl-ui-callout-background-color: var(--stl-color-faint-background);
865
+ --stl-ui-callout-border-color: var(--stl-color-border);
866
+ --stl-ui-callout-accent-color: var(--stl-color-foreground);
867
+
868
+ border: 1px solid var(--stl-ui-callout-border-color);
869
+ background-color: var(--stl-ui-callout-background-color);
870
+ border-radius: var(--stl-ui-layout-border-radius);
871
+ padding: 12px;
872
+ line-height: var(--stl-typography-line-height);
873
+ font-weight: 400;
874
+ font-size: var(--stl-typography-text-body);
875
+ color: var(--stl-color-foreground);
876
+
877
+ display: flex;
878
+ align-items: flex-start;
879
+ gap: 8px;
880
+
881
+ :where(a, strong) {
882
+ color: var(--stl-ui-callout-strong-color, var(--stl-ui-callout-accent-color));
883
+ }
884
+ :where(a) {
885
+ text-decoration-color: rgba(from currentColor r g b / 0.4);
886
+ transition: text-decoration-color 0.1s ease;
887
+ &:hover {
888
+ text-decoration-color: rgba(from currentColor r g b / 0.8);
889
+ }
890
+ }
891
+
892
+ ::selection {
893
+ background-color: light-dark(
894
+ rgb(from var(--stl-ui-callout-background-color) r g b / 0.2),
895
+ rgb(from var(--stl-ui-callout-background-color) r g b / 0.35)
896
+ );
897
+ color: var(--stl-color-foreground);
898
+ }
899
+ }
900
+
901
+ .stl-ui-callout--info {
902
+ --stl-ui-callout-background-color: var(--stl-color-faint-background);
903
+ --stl-ui-callout-border-color: var(--stl-color-border);
904
+ --stl-ui-callout-accent-color: var(--stl-color-foreground-reduced);
905
+ --stl-ui-callout-strong-color: var(--stl-color-foreground);
906
+ }
907
+
908
+ .stl-ui-callout--note {
909
+ --stl-ui-callout-background-color: var(--stl-color-blue-muted-background);
910
+ --stl-ui-callout-border-color: var(--stl-color-blue-border);
911
+ --stl-ui-callout-accent-color: var(--stl-color-blue-foreground);
912
+ }
913
+
914
+ .stl-ui-callout--tip {
915
+ --stl-ui-callout-background-color: var(--stl-color-purple-muted-background);
916
+ --stl-ui-callout-border-color: var(--stl-color-purple-border);
917
+ --stl-ui-callout-accent-color: var(--stl-color-purple-foreground);
918
+ }
919
+
920
+ .stl-ui-callout--success {
921
+ --stl-ui-callout-background-color: var(--stl-color-green-muted-background);
922
+ --stl-ui-callout-border-color: var(--stl-color-green-border);
923
+ --stl-ui-callout-accent-color: var(--stl-color-green-foreground);
924
+ }
925
+
926
+ .stl-ui-callout--warning {
927
+ --stl-ui-callout-background-color: var(--stl-color-yellow-muted-background);
928
+ --stl-ui-callout-border-color: var(--stl-color-yellow-border);
929
+ --stl-ui-callout-accent-color: var(--stl-color-yellow-foreground);
930
+ }
931
+
932
+ .stl-ui-callout--danger {
933
+ --stl-ui-callout-background-color: var(--stl-color-red-muted-background);
934
+ --stl-ui-callout-border-color: var(--stl-color-red-border);
935
+ --stl-ui-callout-accent-color: var(--stl-color-red-foreground);
936
+ }
937
+
938
+ .stl-ui-callout__icon {
939
+ color: var(--stl-ui-callout-accent-color);
940
+ flex-shrink: 0;
941
+ width: 1em;
942
+ height: 1em;
943
+ margin: calc((1lh - 1em) / 2);
944
+ }
945
+
946
+ .stl-ui-callout__content {
947
+ flex: 1;
948
+ margin-top: 0;
949
+
950
+ & > :first-child {
951
+ margin-top: 0;
952
+ }
953
+ }
954
+
955
+ /* revert starlight details styles */
956
+ @layer starlight.content {
957
+ /* artificially increase specificity to outcompete selectors in the same layer whose styles we want to revert */
958
+ .stl-ui-prose .sl-markdown-content.sl-markdown-content.sl-markdown-content {
959
+ details,
960
+ summary,
961
+ summary::before,
962
+ summary::marker {
963
+ all: revert-layer;
964
+ }
965
+ }
966
+ }
967
+
968
+ .stl-ui-accordion {
969
+ --stl-ui-accordion-padding: 12px;
970
+ --stl-ui-accordion-content-padding-bottom: 4px;
971
+ --stl-ui-accordion-marker-size: 1em;
972
+ --stl-ui-accordion-marker-margin: calc((1lh - var(--stl-ui-accordion-marker-size)) / 2);
973
+ --stl-ui-accordion-marker-color: var(--stl-color-border-strong);
974
+ --stl-ui-accordion-row-gap: 8px;
975
+ --stl-ui-accordion-summary-column-gap: 8px;
976
+ --stl-ui-accordion-border-radius: var(--stl-ui-layout-border-radius);
977
+ /* left inset to make content line up with summary content (after chevron) */
978
+ --stl-ui--internal--accordion-padding-start: calc(
979
+ var(--stl-ui-accordion-padding) + var(--stl-ui-accordion-marker-size) +
980
+ var(--stl-ui-accordion-marker-margin) * 2 + var(--stl-ui-accordion-summary-column-gap)
981
+ );
982
+
983
+ background-color: var(--stl-color-ui-background);
984
+ border: 1px solid var(--stl-color-border);
985
+ border-radius: var(--stl-ui-accordion-border-radius);
986
+ font-size: var(--stl-typography-text-body);
987
+
988
+ padding: var(--stl-ui-accordion-padding);
989
+ /* indent content to line up with left edge of summary content */
990
+ padding-inline-start: var(--stl-ui--internal--accordion-padding-start);
991
+
992
+ & > .stl-ui-accordion__summary {
993
+ display: block;
994
+ list-style: none;
995
+
996
+ /* summary extends to the edges of the element in order to increase click target */
997
+ padding: var(--stl-ui-accordion-padding);
998
+ padding-inline-start: var(--stl-ui--internal--accordion-padding-start);
999
+ margin: calc(-1 * var(--stl-ui-accordion-padding));
1000
+ margin-inline-start: calc(-1 * var(--stl-ui--internal--accordion-padding-start));
1001
+
1002
+ cursor: pointer;
1003
+ font-weight: 500;
1004
+
1005
+ border-radius: var(--stl-ui-accordion-border-radius);
1006
+
1007
+ &::before {
1008
+ content: '';
1009
+ width: var(--stl-ui-accordion-marker-size);
1010
+ height: var(--stl-ui-accordion-marker-size);
1011
+ margin: var(--stl-ui-accordion-marker-margin);
1012
+ background-color: var(--stl-ui-accordion-marker-color);
1013
+ display: block;
1014
+ position: absolute;
1015
+ --stl-ui-accordion--internal--marker-width: calc(
1016
+ var(--stl-ui-accordion-marker-size) + var(--stl-ui-accordion-marker-margin) * 2
1017
+ );
1018
+ --stl-ui-accordion--internal--summary-marker-transform: translateX(
1019
+ calc(
1020
+ -1 * var(--stl-ui-accordion--internal--marker-width) - var(--stl-ui-accordion-summary-column-gap)
1021
+ )
1022
+ );
1023
+ transform: var(--stl-ui-accordion--internal--summary-marker-transform);
1024
+
1025
+ --lucide-chevron-right: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNoZXZyb24tcmlnaHQtaWNvbiBsdWNpZGUtY2hldnJvbi1yaWdodCI+PHBhdGggZD0ibTkgMTggNi02LTYtNiIvPjwvc3ZnPg==');
1026
+ mask-image: var(--lucide-chevron-right);
1027
+ mask-size: contain;
1028
+ mask-repeat: no-repeat;
1029
+
1030
+ transition: transform 0.1s ease-out;
1031
+ }
1032
+
1033
+ & > :first-child {
1034
+ margin-top: 0;
1035
+ }
1036
+ }
1037
+
1038
+ &[open] {
1039
+ border-color: var(--stl-color-border-strong);
1040
+ padding-bottom: calc(var(--stl-ui-accordion-padding) + var(--stl-ui-accordion-content-padding-bottom));
1041
+
1042
+ & > .stl-ui-accordion__summary {
1043
+ /* padding-bottom shouldn’t extend beyond the row gap while open, i.e. we shouldn’t be negative-margin-placing content overlapping summary */
1044
+ --stl-ui--internal--summary-padding-bottom: min(
1045
+ var(--stl-ui-accordion-padding),
1046
+ var(--stl-ui-accordion-row-gap)
1047
+ );
1048
+ padding-bottom: var(--stl-ui--internal--summary-padding-bottom);
1049
+ margin-bottom: calc(var(--stl-ui-accordion-row-gap) - var(--stl-ui--internal--summary-padding-bottom));
1050
+ border-bottom-left-radius: 0;
1051
+ border-bottom-right-radius: 0;
1052
+
1053
+ &::before {
1054
+ transform: var(--stl-ui-accordion--internal--summary-marker-transform) rotate(90deg);
1055
+ }
1056
+ }
1057
+ }
1058
+
1059
+ &:has(> .stl-ui-accordion__summary:hover) {
1060
+ background-color: var(--stl-color-ui-background-hover);
1061
+ }
1062
+
1063
+ & > .stl-ui-accordion__summary + * {
1064
+ margin-top: 0;
1065
+ }
1066
+ }
1067
+
1068
+ /* Groups */
1069
+
1070
+ .stl-ui-accordion-group {
1071
+ & > .stl-ui-accordion:has(+ .stl-ui-accordion) {
1072
+ border-bottom-left-radius: 0;
1073
+ border-bottom-right-radius: 0;
1074
+ & > .stl-ui-accordion__summary {
1075
+ border-bottom-left-radius: 0;
1076
+ border-bottom-right-radius: 0;
1077
+ }
1078
+ }
1079
+
1080
+ & > .stl-ui-accordion + .stl-ui-accordion {
1081
+ margin-top: 0;
1082
+ border-top-width: 0;
1083
+ border-top-left-radius: 0;
1084
+ border-top-right-radius: 0;
1085
+
1086
+ & > .stl-ui-accordion__summary {
1087
+ border-top-left-radius: 0;
1088
+ border-top-right-radius: 0;
1089
+ }
1090
+ }
1091
+
1092
+ /* Ensure the darker border always extends all the way around the active element, instead of
1093
+ * leaving an inactive border-top */
1094
+
1095
+ .stl-ui-accordion:not(:hover, [open]):has(+ .stl-ui-accordion:hover) {
1096
+ border-bottom-width: 0;
1097
+ }
1098
+ .stl-ui-accordion:not(:hover, [open]) + .stl-ui-accordion:hover {
1099
+ border-top-width: 1px;
1100
+ }
1101
+
1102
+ .stl-ui-accordion:not([open]):has(+ .stl-ui-accordion[open]) {
1103
+ border-bottom-width: 0;
1104
+ }
1105
+ .stl-ui-accordion:not([open]) + .stl-ui-accordion[open] {
1106
+ border-top-width: 1px;
1107
+ }
1108
+ }
1109
+
1110
+ .stl-ui-steps {
1111
+ padding-left: 0;
1112
+ }
1113
+
1114
+ .stl-ui-steps__step {
1115
+ --step-icon-width: 24px;
1116
+ --step-padding: 12px;
1117
+ list-style: none;
1118
+ position: relative;
1119
+ padding: var(--step-padding);
1120
+ /* Space for the custom marker */
1121
+ padding-left: calc(var(--step-icon-width) + var(--step-padding));
1122
+ margin: 0;
1123
+
1124
+ &::before {
1125
+ content: counter(list-item);
1126
+ position: absolute;
1127
+ left: 0;
1128
+ top: var(--step-padding);
1129
+ width: var(--step-icon-width);
1130
+ height: var(--step-icon-width);
1131
+ border: 1px solid var(--stl-color-border);
1132
+ border-radius: 100%;
1133
+ display: flex;
1134
+ align-items: center;
1135
+ justify-content: center;
1136
+ background: var(--stl-color-bg);
1137
+ z-index: 1;
1138
+ font-size: var(--stl-typography-text-body-xs);
1139
+ font-style: normal;
1140
+ font-weight: 600;
1141
+ line-height: 100%;
1142
+ }
1143
+
1144
+ &::after {
1145
+ content: '';
1146
+ position: absolute;
1147
+ left: calc(var(--step-icon-width) / 2 - 0.5px);
1148
+ top: calc(var(--step-icon-width) + var(--step-padding));
1149
+ bottom: calc(-1 * (var(--step-padding)));
1150
+ width: 1px;
1151
+ background: var(--stl-color-border);
1152
+ }
1153
+
1154
+ &:last-child {
1155
+ padding-bottom: 0;
1156
+
1157
+ /* No line after the last step */
1158
+ &::after {
1159
+ display: none;
1160
+ }
1161
+ }
1162
+ }
1163
+ .stl-ui-steps__step-title {
1164
+ font-weight: 600;
1165
+ }
1166
+
1167
+ .stl-ui-steps__step-content {
1168
+ margin-bottom: 0;
1169
+ margin-top: 4px;
1170
+ }
1171
+
1172
+ /* design system variables */
1173
+
1174
+ /* components */
1175
+