@stainless-api/ui-primitives 0.1.0-beta.3 → 0.1.0-beta.30

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