@grove-dev/starlight 0.1.9

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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/components/custom/ContainerSection.astro +58 -0
  4. package/components/custom/LinkButton.astro +141 -0
  5. package/components/custom/dropdown/Dropdown.astro +616 -0
  6. package/components/custom/dropdown/DropdownContent.astro +179 -0
  7. package/components/custom/dropdown/DropdownItem.astro +72 -0
  8. package/components/custom/dropdown/DropdownLabel.astro +31 -0
  9. package/components/custom/dropdown/DropdownSeparator.astro +18 -0
  10. package/components/custom/dropdown/DropdownShortcut.astro +24 -0
  11. package/components/custom/dropdown/DropdownTrigger.astro +54 -0
  12. package/components/custom/dropdown/index.ts +29 -0
  13. package/components/overrides/ContentPanel.astro +1 -0
  14. package/components/overrides/Footer.astro +54 -0
  15. package/components/overrides/Header.astro +93 -0
  16. package/components/overrides/Hero.astro +260 -0
  17. package/components/overrides/MarkdownContent.astro +17 -0
  18. package/components/overrides/PageFrame.astro +121 -0
  19. package/components/overrides/PageSidebar.astro +20 -0
  20. package/components/overrides/PageTitle.astro +130 -0
  21. package/components/overrides/Pagination.astro +101 -0
  22. package/components/overrides/Search.astro +549 -0
  23. package/components/overrides/Sidebar.astro +111 -0
  24. package/components/overrides/SiteTitle.astro +65 -0
  25. package/components/overrides/SocialIcons.astro +47 -0
  26. package/components/overrides/TableOfContents.astro +36 -0
  27. package/components/overrides/ThemeSelect.astro +156 -0
  28. package/components/overrides/TwoColumnContent.astro +75 -0
  29. package/components/overrides/parts/Drawer.astro +232 -0
  30. package/components/overrides/parts/MobileMenuToggle.astro +42 -0
  31. package/components/overrides/parts/NavBar.astro +110 -0
  32. package/components/overrides/parts/SidebarSublist.astro +115 -0
  33. package/components/overrides/parts/toc/TableOfContentsList.astro +71 -0
  34. package/components/overrides/parts/toc/starlight-toc.ts +119 -0
  35. package/core/config/constants.ts +1 -0
  36. package/core/config/expresive-code.ts +63 -0
  37. package/core/config/override.ts +48 -0
  38. package/core/config/schemas.ts +57 -0
  39. package/core/config/vite.ts +20 -0
  40. package/core/plugin.ts +56 -0
  41. package/global.d.ts +5 -0
  42. package/index.ts +3 -0
  43. package/package.json +54 -0
  44. package/schema.ts +24 -0
  45. package/styles/base.css +897 -0
  46. package/styles/layers.css +1 -0
  47. package/styles/theme.css +67 -0
  48. package/user-components.ts +3 -0
  49. package/virtual.d.ts +51 -0
@@ -0,0 +1,897 @@
1
+ @layer lucode {
2
+ /* theme */
3
+ :root {
4
+ --tracking-tight: -0.025em;
5
+ --tracking-tighter: -0.05em;
6
+ --tracking-normal: 0em;
7
+ --tracking-wide: 0.025em;
8
+ --tracking-wider: 0.05em;
9
+ --spacing: 0.25rem;
10
+ --radius: 0.625rem;
11
+ --header-height: calc(var(--spacing) * 14);
12
+ --sidebar-width: 18rem;
13
+ --container-max-width: 1600px;
14
+
15
+ /* starlight color mappings */
16
+ --sl-color-text-accent: var(--foreground);
17
+ --sl-color-banner-text: var(--foreground);
18
+ --sl-color-bg: var(--background);
19
+ --sl-color-text: var(--foreground);
20
+ --sl-color-accent-low: var(--muted);
21
+ --sl-color-accent: var(--border);
22
+ --sl-color-accent-high: var(--foreground);
23
+ --sl-color-gray-1: var(--gray-1);
24
+ --sl-color-gray-2: var(--gray-2);
25
+ --sl-color-gray-3: var(--gray-3);
26
+ --sl-color-gray-4: var(--gray-4);
27
+ --sl-color-gray-5: var(--gray-5);
28
+ --sl-color-gray-6: var(--gray-6);
29
+ --sl-color-gray-7: var(--gray-7);
30
+
31
+ /* colors */
32
+ --sl-color-orange-low: var(--orange-low);
33
+ --sl-color-orange: var(--orange);
34
+ --sl-color-orange-high: var(--orange-high);
35
+ --sl-color-green-low: var(--green-low);
36
+ --sl-color-green: var(--green);
37
+ --sl-color-green-high: var(--green-high);
38
+ --sl-color-blue-low: var(--blue-low);
39
+ --sl-color-blue: var(--blue);
40
+ --sl-color-blue-high: var(--blue-high);
41
+ --sl-color-purple-low: var(--purple-low);
42
+ --sl-color-purple: var(--purple);
43
+ --sl-color-purple-high: var(--purple-high);
44
+ --sl-color-red-low: var(--red-low);
45
+ --sl-color-red: var(--red);
46
+ --sl-color-red-high: var(--red-high);
47
+
48
+ /* theme tokens */
49
+ --primary: var(--foreground);
50
+ --primary-foreground: var(--gray-7);
51
+ --secondary: var(--gray-6);
52
+ --secondary-foreground: var(--foreground);
53
+ --muted: var(--gray-6);
54
+ --muted-foreground: var(--gray-3);
55
+ --accent: var(--gray-5);
56
+ --accent-foreground: var(--foreground);
57
+ --border: var(--gray-6);
58
+ --input: var(--gray-8);
59
+ --ring: var(--gray-4);
60
+ --card: var(--background);
61
+ --card-foreground: var(--foreground);
62
+ --code-background: var(--gray-7);
63
+ --mark-background: var(--gray-8);
64
+ --popover-background: var(--gray-7);
65
+ --popover-foreground: var(--foreground);
66
+ --markdown-foreground: var(--gray-2);
67
+
68
+ /* backdrop */
69
+ ::backdrop {
70
+ --sl-color-backdrop-overlay: color-mix(in oklab, var(--background) 80%, transparent);
71
+ }
72
+ }
73
+
74
+ .container-wrapper {
75
+ width: 100%;
76
+ padding-inline: calc(var(--spacing) * 2);
77
+ margin-inline: auto;
78
+ }
79
+
80
+ .container {
81
+ max-width: var(--container-max-width);
82
+ margin-inline: auto;
83
+ width: 100%;
84
+ }
85
+
86
+ .container-wrapper-main {
87
+ display: flex;
88
+ flex-direction: column;
89
+ max-width: none;
90
+ }
91
+
92
+ @media (min-width: 1024px) {
93
+ .container-wrapper-main {
94
+ display: grid;
95
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
96
+ }
97
+ }
98
+
99
+ .aside {
100
+ display: none;
101
+ height: calc(100vh - var(--header-height) - 1px);
102
+ position: sticky;
103
+ top: calc(var(--header-height) + 1px);
104
+ overflow: hidden;
105
+ }
106
+
107
+ @media (min-width: 1024px) {
108
+ .aside {
109
+ display: block;
110
+ }
111
+ }
112
+
113
+ /* global typography refinements */
114
+ * {
115
+ border-color: var(--border);
116
+ }
117
+
118
+ body {
119
+ -webkit-font-smoothing: antialiased;
120
+ -moz-osx-font-smoothing: grayscale;
121
+ }
122
+
123
+ /* link styles for markdown content */
124
+ .sl-markdown-content a:not([class]) {
125
+ text-decoration: underline;
126
+ text-underline-offset: calc(var(--spacing) * 1);
127
+ text-decoration-color: var(--muted-foreground);
128
+ color: var(--foreground);
129
+ font-weight: 500;
130
+ }
131
+
132
+ .sl-markdown-content a:not([class]):hover {
133
+ text-decoration-color: var(--foreground);
134
+ }
135
+
136
+ /* paragraph styles */
137
+ .sl-markdown-content * {
138
+ @media (min-width: 40rem) {
139
+ font-size: 15px;
140
+ }
141
+ }
142
+
143
+ .sl-markdown-content :is(h1, h2, h3, h4, h5, h6) {
144
+ font-weight: 500;
145
+ letter-spacing: var(--tracking-tight);
146
+ color: var(--foreground);
147
+ }
148
+
149
+ .sl-markdown-content h1 {
150
+ font-size: 1.875rem;
151
+ line-height: 2.25rem;
152
+ font-weight: 600;
153
+ }
154
+
155
+ .sl-markdown-content h2 {
156
+ font-size: 1.25rem;
157
+ line-height: 1.75rem;
158
+ padding-top: calc(var(--spacing) * 6);
159
+ margin-top: calc(var(--spacing) * 12);
160
+ }
161
+
162
+ .sl-markdown-content h3 {
163
+ font-size: 1.125rem;
164
+ line-height: 1.75rem;
165
+ }
166
+
167
+ .sl-markdown-content h4 {
168
+ font-size: 1rem;
169
+ line-height: 1.5rem;
170
+ }
171
+
172
+ .sl-markdown-content h5 {
173
+ font-size: 0.875rem;
174
+ line-height: 1.25rem;
175
+ }
176
+
177
+ .sl-markdown-content h6 {
178
+ font-size: 0.875rem;
179
+ line-height: 1.25rem;
180
+ }
181
+
182
+ .sl-markdown-content .sl-heading-wrapper {
183
+ --sl-anchor-icon-gap: 0.375rem;
184
+ }
185
+
186
+ .sl-markdown-content
187
+ :not(h1, h2, h3, h4, h5, h6, .sl-heading-wrapper)
188
+ + :is(.sl-heading-wrapper) {
189
+ margin-top: calc(var(--spacing) * 12);
190
+ }
191
+
192
+ .sl-markdown-content a[data-slot='button'] {
193
+ margin-top: var(--sl-content-gap-y);
194
+ }
195
+
196
+ .sl-markdown-content
197
+ a[data-slot='button']
198
+ + :not(a, strong, em, del, span, input, code, br, :where(.not-content *)) {
199
+ margin-top: var(--sl-content-gap-y);
200
+ }
201
+
202
+ .sl-markdown-content .sl-heading-wrapper.level-h1 {
203
+ --sl-anchor-icon-size: 1.125rem;
204
+ --sl-anchor-icon-space: calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));
205
+ line-height: 2.25rem;
206
+ }
207
+
208
+ .sl-markdown-content .sl-heading-wrapper.level-h2 {
209
+ --sl-anchor-icon-size: calc(var(--spacing) * 5);
210
+ --sl-anchor-icon-space: calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));
211
+ line-height: 1.75rem;
212
+ }
213
+
214
+ .sl-markdown-content .sl-heading-wrapper.level-h3 {
215
+ --sl-anchor-icon-size: 0.875rem;
216
+ --sl-anchor-icon-space: calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));
217
+ line-height: 1.75rem;
218
+ }
219
+
220
+ .sl-markdown-content .sl-heading-wrapper.level-h4 {
221
+ --sl-anchor-icon-size: 0.875rem;
222
+ --sl-anchor-icon-space: calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));
223
+ line-height: 1.5rem;
224
+ }
225
+
226
+ .sl-markdown-content .sl-heading-wrapper:is(.level-h5, .level-h6) {
227
+ --sl-anchor-icon-size: 0.75rem;
228
+ --sl-anchor-icon-space: calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));
229
+ line-height: 1.25rem;
230
+ }
231
+
232
+ .sl-markdown-content .sl-anchor-link {
233
+ color: color-mix(in oklab, var(--foreground) 40%, transparent);
234
+ }
235
+
236
+ /* code inline */
237
+ .sl-markdown-content :not(pre) > code {
238
+ background: var(--muted);
239
+ border-radius: calc(var(--radius) - 4px);
240
+ padding: 0.25rem 0.5rem;
241
+ font-size: 0.875em;
242
+ }
243
+
244
+ /* code blocks */
245
+ .expressive-code .ec-line :where(span[style^='--']:not([class])),
246
+ :root:not([data-theme='dark'])
247
+ .expressive-code[data-theme='dark']
248
+ .ec-line
249
+ :where(span[style^='--']:not([class])) {
250
+ font-size: 0.933em;
251
+ }
252
+
253
+ /* kbd styles */
254
+ .sl-markdown-content kbd {
255
+ display: inline-flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ font-family: inherit;
259
+ font-size: 0.75rem;
260
+ font-weight: 500;
261
+ line-height: 1;
262
+ min-width: 1.25rem;
263
+ min-height: 1.25rem;
264
+ padding: 0.15rem 0.35rem;
265
+ border-radius: calc(var(--radius) - 4px);
266
+ border: 1px solid var(--border);
267
+ background: var(--secondary);
268
+ color: var(--foreground);
269
+ }
270
+
271
+ /* built-in Starlight FileTree */
272
+ .sl-markdown-content starlight-file-tree {
273
+ border: 0;
274
+ border-radius: var(--radius);
275
+ background-color: var(--code-background);
276
+ }
277
+
278
+ .sl-markdown-content starlight-file-tree :is(.directory > details > summary, .file) {
279
+ color: var(--foreground);
280
+ }
281
+
282
+ .sl-markdown-content starlight-file-tree :is(.empty, .comment) {
283
+ color: var(--muted-foreground);
284
+ }
285
+
286
+ .sl-markdown-content starlight-file-tree ul {
287
+ border-inline-start-color: var(--border);
288
+ }
289
+
290
+ .sl-markdown-content
291
+ starlight-file-tree
292
+ :is(
293
+ .directory > details > summary::marker,
294
+ .directory > details > summary::-webkit-details-marker
295
+ ) {
296
+ color: var(--muted-foreground);
297
+ }
298
+
299
+ .sl-markdown-content starlight-file-tree svg {
300
+ fill: var(--muted-foreground);
301
+ }
302
+
303
+ .sl-markdown-content starlight-file-tree .directory > details > summary:hover {
304
+ border-radius: calc(var(--radius) - 4px);
305
+ background-color: color-mix(in oklab, var(--accent) 60%, transparent);
306
+ }
307
+
308
+ .sl-markdown-content
309
+ starlight-file-tree
310
+ :is(.directory > details > summary:hover, .directory > details > summary:hover .tree-icon) {
311
+ color: var(--foreground);
312
+ fill: currentColor;
313
+ }
314
+
315
+ .sl-markdown-content starlight-file-tree .directory > details > summary:hover ~ ul {
316
+ border-inline-start-color: var(--ring);
317
+ }
318
+
319
+ .sl-markdown-content starlight-file-tree .highlight {
320
+ border-radius: calc(var(--radius) - 4px);
321
+ padding-inline: calc(var(--spacing) * 1.5);
322
+ color: var(--foreground);
323
+ background-color: var(--secondary);
324
+ }
325
+
326
+ .sl-markdown-content starlight-file-tree .highlight svg.tree-icon {
327
+ fill: currentColor;
328
+ }
329
+
330
+ /* built-in Starlight Cards and LinkCards */
331
+ .sl-markdown-content .card-grid {
332
+ gap: 1rem;
333
+ }
334
+
335
+ .sl-markdown-content :is(.card, .sl-link-card) {
336
+ border: 0;
337
+ border-radius: calc(var(--radius) + 0.25rem);
338
+ padding: 1.5rem;
339
+ background-color: var(--code-background);
340
+ box-shadow: none;
341
+ transition: background-color 0.15s;
342
+ }
343
+
344
+ .sl-markdown-content :is(.card, .sl-link-card):hover {
345
+ background-color: color-mix(in oklab, var(--code-background) 75%, var(--secondary));
346
+ }
347
+
348
+ .sl-markdown-content .card {
349
+ --card-icon-background: var(--secondary);
350
+ gap: 0.75rem;
351
+ }
352
+
353
+ .sl-markdown-content .card:nth-child(4n + 1) {
354
+ --card-icon-background: color-mix(in oklab, var(--sl-color-orange) 18%, var(--secondary));
355
+ }
356
+
357
+ .sl-markdown-content .card:nth-child(4n + 2) {
358
+ --card-icon-background: color-mix(in oklab, var(--sl-color-purple) 18%, var(--secondary));
359
+ }
360
+
361
+ .sl-markdown-content .card:nth-child(4n + 3) {
362
+ --card-icon-background: color-mix(in oklab, var(--sl-color-green) 18%, var(--secondary));
363
+ }
364
+
365
+ .sl-markdown-content .card:nth-child(4n + 4) {
366
+ --card-icon-background: color-mix(in oklab, var(--sl-color-red) 18%, var(--secondary));
367
+ }
368
+
369
+ .sl-markdown-content .card .title {
370
+ gap: 0.75rem;
371
+ font-size: 0.875rem;
372
+ font-weight: 500;
373
+ line-height: 1.25rem;
374
+ color: var(--foreground);
375
+ }
376
+
377
+ .sl-markdown-content .card .icon {
378
+ border: 0;
379
+ box-sizing: content-box;
380
+ width: 1rem;
381
+ height: 1rem;
382
+ padding: 0.5rem;
383
+ border-radius: calc(var(--radius) - 2px);
384
+ color: var(--foreground);
385
+ background-color: var(--card-icon-background);
386
+ }
387
+
388
+ .sl-markdown-content .card:nth-child(n) {
389
+ --sl-card-border: var(--border);
390
+ --sl-card-bg: var(--secondary);
391
+ }
392
+
393
+ .sl-markdown-content .card .body {
394
+ font-size: 0.875rem;
395
+ line-height: 1.625rem;
396
+ color: var(--muted-foreground);
397
+ }
398
+
399
+ .sl-markdown-content .sl-link-card {
400
+ gap: 0.75rem;
401
+ align-items: start;
402
+ }
403
+
404
+ .sl-markdown-content .sl-link-card .stack {
405
+ gap: 0.25rem;
406
+ }
407
+
408
+ .sl-markdown-content .sl-link-card .title {
409
+ font-size: 0.875rem;
410
+ font-weight: 500;
411
+ line-height: 1.25rem;
412
+ color: var(--foreground);
413
+ }
414
+
415
+ .sl-markdown-content .sl-link-card .description {
416
+ font-size: 0.875rem;
417
+ line-height: 1.625rem;
418
+ color: var(--muted-foreground);
419
+ }
420
+
421
+ .sl-markdown-content .sl-link-card .icon {
422
+ color: var(--muted-foreground);
423
+ }
424
+
425
+ .sl-markdown-content .sl-link-card:hover .icon {
426
+ color: var(--foreground);
427
+ }
428
+
429
+ /* built-in Starlight Asides */
430
+ .sl-markdown-content .starlight-aside {
431
+ --aside-background: var(--code-background);
432
+ --aside-border: var(--border);
433
+ --aside-title: var(--foreground);
434
+ --aside-content: var(--muted-foreground);
435
+ padding: 0.875rem 1rem;
436
+ border: 1px solid var(--aside-border);
437
+ border-inline-start: 1px solid var(--aside-border);
438
+ border-radius: var(--radius);
439
+ background-color: var(--aside-background);
440
+ color: var(--aside-content);
441
+ }
442
+
443
+ .sl-markdown-content .starlight-aside--note {
444
+ --aside-background: color-mix(
445
+ in oklab,
446
+ var(--sl-color-blue-low) 78%,
447
+ var(--code-background)
448
+ );
449
+ --aside-border: color-mix(in oklab, var(--sl-color-blue) 45%, var(--border));
450
+ --aside-title: var(--sl-color-blue-high);
451
+ --aside-content: color-mix(in oklab, var(--sl-color-blue-high) 72%, var(--foreground));
452
+ }
453
+
454
+ .sl-markdown-content .starlight-aside--tip {
455
+ --aside-background: color-mix(
456
+ in oklab,
457
+ var(--sl-color-purple-low) 78%,
458
+ var(--code-background)
459
+ );
460
+ --aside-border: color-mix(in oklab, var(--sl-color-purple) 45%, var(--border));
461
+ --aside-title: var(--sl-color-purple-high);
462
+ --aside-content: color-mix(in oklab, var(--sl-color-purple-high) 72%, var(--foreground));
463
+ }
464
+
465
+ .sl-markdown-content .starlight-aside--caution {
466
+ --aside-background: color-mix(
467
+ in oklab,
468
+ var(--sl-color-orange-low) 82%,
469
+ var(--code-background)
470
+ );
471
+ --aside-border: color-mix(in oklab, var(--sl-color-orange) 48%, var(--border));
472
+ --aside-title: var(--sl-color-orange-high);
473
+ --aside-content: color-mix(in oklab, var(--sl-color-orange-high) 72%, var(--foreground));
474
+ }
475
+
476
+ .sl-markdown-content .starlight-aside--danger {
477
+ --aside-background: color-mix(
478
+ in oklab,
479
+ var(--sl-color-red-low) 80%,
480
+ var(--code-background)
481
+ );
482
+ --aside-border: color-mix(in oklab, var(--sl-color-red) 48%, var(--border));
483
+ --aside-title: var(--sl-color-red-high);
484
+ --aside-content: color-mix(in oklab, var(--sl-color-red-high) 72%, var(--foreground));
485
+ }
486
+
487
+ .sl-markdown-content .starlight-aside__title {
488
+ gap: 0.625rem;
489
+ align-items: center;
490
+ font-size: 0.875rem;
491
+ font-weight: 600;
492
+ line-height: 1.25rem;
493
+ color: var(--aside-title);
494
+ }
495
+
496
+ .sl-markdown-content .starlight-aside__icon {
497
+ width: 1rem;
498
+ height: 1rem;
499
+ font-size: 1rem;
500
+ flex-shrink: 0;
501
+ color: var(--aside-title);
502
+ }
503
+
504
+ .sl-markdown-content .starlight-aside__title + .starlight-aside__content {
505
+ margin-top: calc(var(--spacing) * 1.5);
506
+ }
507
+
508
+ .sl-markdown-content .starlight-aside__content {
509
+ font-size: 0.875rem;
510
+ line-height: 1.625rem;
511
+ color: var(--aside-content);
512
+ }
513
+
514
+ .sl-markdown-content .starlight-aside__content a {
515
+ color: var(--aside-title);
516
+ text-decoration-color: color-mix(in oklab, var(--aside-title) 45%, transparent);
517
+ }
518
+
519
+ .sl-markdown-content .starlight-aside__content a:hover {
520
+ text-decoration-color: currentColor;
521
+ }
522
+
523
+ /* built-in Starlight Badges */
524
+ .sl-markdown-content .sl-badge {
525
+ --badge-background: var(--secondary);
526
+ --badge-foreground: var(--secondary-foreground);
527
+ --badge-border: transparent;
528
+ display: inline-flex;
529
+ align-items: center;
530
+ justify-content: center;
531
+ gap: 0.25rem;
532
+ min-height: 1.25rem;
533
+ padding: 0.125rem 0.5rem;
534
+ border: 1px solid var(--badge-border);
535
+ border-radius: 9999px;
536
+ font-family: inherit;
537
+ font-size: 0.75rem;
538
+ font-weight: 500;
539
+ line-height: 1;
540
+ color: var(--badge-foreground);
541
+ background-color: var(--badge-background);
542
+ vertical-align: middle;
543
+ }
544
+
545
+ .sl-markdown-content .sl-badge.default {
546
+ --badge-background: var(--secondary);
547
+ --badge-foreground: var(--secondary-foreground);
548
+ }
549
+
550
+ .sl-markdown-content .sl-badge.note {
551
+ --badge-background: color-mix(
552
+ in oklab,
553
+ var(--sl-color-blue-low) 88%,
554
+ var(--code-background)
555
+ );
556
+ --badge-foreground: var(--sl-color-blue-high);
557
+ }
558
+
559
+ .sl-markdown-content .sl-badge.success {
560
+ --badge-background: color-mix(
561
+ in oklab,
562
+ var(--sl-color-green-low) 88%,
563
+ var(--code-background)
564
+ );
565
+ --badge-foreground: var(--sl-color-green-high);
566
+ }
567
+
568
+ .sl-markdown-content .sl-badge.tip {
569
+ --badge-background: color-mix(
570
+ in oklab,
571
+ var(--sl-color-purple-low) 88%,
572
+ var(--code-background)
573
+ );
574
+ --badge-foreground: var(--sl-color-purple-high);
575
+ }
576
+
577
+ .sl-markdown-content .sl-badge.caution {
578
+ --badge-background: color-mix(
579
+ in oklab,
580
+ var(--sl-color-orange-low) 90%,
581
+ var(--code-background)
582
+ );
583
+ --badge-foreground: var(--sl-color-orange-high);
584
+ }
585
+
586
+ .sl-markdown-content .sl-badge.danger {
587
+ --badge-background: color-mix(
588
+ in oklab,
589
+ var(--sl-color-red-low) 90%,
590
+ var(--code-background)
591
+ );
592
+ --badge-foreground: var(--sl-color-red-high);
593
+ }
594
+
595
+ .sl-markdown-content .sl-badge.small {
596
+ min-height: 1.25rem;
597
+ padding-inline: calc(var(--spacing) * 2);
598
+ font-size: 0.75rem;
599
+ }
600
+
601
+ .sl-markdown-content .sl-badge.medium {
602
+ min-height: 1.375rem;
603
+ padding-inline: calc(var(--spacing) * 2.5);
604
+ font-size: 0.75rem;
605
+ }
606
+
607
+ .sl-markdown-content .sl-badge.large {
608
+ min-height: 1.5rem;
609
+ padding-inline: calc(var(--spacing) * 3);
610
+ font-size: 0.8125rem;
611
+ }
612
+
613
+ .sidebar-content .sl-badge {
614
+ font-family: inherit;
615
+ font-size: 0.6875rem;
616
+ font-weight: 500;
617
+ line-height: 1;
618
+ min-height: 1.125rem;
619
+ padding: 0.125rem 0.4375rem;
620
+ border-radius: 9999px;
621
+ }
622
+
623
+ .sidebar-content a[aria-current='page'] > .sl-badge {
624
+ background-color: color-mix(in oklab, currentColor 12%, transparent);
625
+ border-color: transparent;
626
+ color: inherit;
627
+ }
628
+
629
+ /* built-in Starlight LinkButtons */
630
+ .sl-link-button {
631
+ display: inline-flex;
632
+ align-items: center;
633
+ justify-content: center;
634
+ gap: 0.375rem;
635
+ height: 2rem;
636
+ padding: 0 0.75rem;
637
+ border: 1px solid transparent;
638
+ border-radius: var(--radius);
639
+ font-size: 0.875rem;
640
+ font-weight: 500;
641
+ line-height: 1;
642
+ white-space: nowrap;
643
+ text-decoration: none;
644
+ transition-property: color, background-color, border-color, box-shadow;
645
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
646
+ transition-duration: 0.15s;
647
+ outline: none;
648
+ outline-offset: 0.25rem;
649
+ box-shadow: none;
650
+ }
651
+
652
+ .sl-link-button:hover {
653
+ text-decoration: none;
654
+ }
655
+
656
+ .sl-link-button:focus-visible {
657
+ border-color: var(--ring);
658
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 35%, transparent);
659
+ }
660
+
661
+ .sl-link-button svg {
662
+ width: 1rem;
663
+ height: 1rem;
664
+ flex-shrink: 0;
665
+ }
666
+
667
+ .sl-link-button.primary {
668
+ color: var(--primary-foreground);
669
+ background-color: var(--primary);
670
+ border-color: transparent;
671
+ }
672
+
673
+ .sl-link-button.primary:hover {
674
+ color: var(--primary-foreground);
675
+ background-color: color-mix(in oklab, var(--primary) 88%, var(--background));
676
+ }
677
+
678
+ .sl-link-button.secondary {
679
+ color: var(--foreground);
680
+ background-color: color-mix(in oklab, var(--background) 82%, var(--secondary));
681
+ border-color: var(--border);
682
+ }
683
+
684
+ .sl-link-button.secondary:hover {
685
+ color: var(--foreground);
686
+ background-color: var(--accent);
687
+ }
688
+
689
+ .sl-link-button.minimal {
690
+ color: var(--foreground);
691
+ background-color: transparent;
692
+ border-color: transparent;
693
+ }
694
+
695
+ .sl-link-button.minimal:hover {
696
+ color: var(--accent-foreground);
697
+ background-color: var(--accent);
698
+ }
699
+
700
+ /* built-in Starlight Steps */
701
+ .sl-markdown-content .sl-steps {
702
+ --bullet-size: 1.75rem;
703
+ --bullet-margin: 0.25rem;
704
+ margin-block: calc(var(--spacing) * 6) calc(var(--spacing) * 8);
705
+ }
706
+
707
+ .sl-markdown-content .sl-steps > li {
708
+ padding-inline-start: calc(var(--bullet-size) + 1rem);
709
+ padding-bottom: calc(var(--spacing) * 4);
710
+ min-height: calc(var(--bullet-size) + var(--bullet-margin));
711
+ }
712
+
713
+ .sl-markdown-content .sl-steps > li::before {
714
+ font-size: 0.875rem;
715
+ font-weight: 500;
716
+ color: var(--muted-foreground);
717
+ background-color: var(--muted);
718
+ box-shadow: none;
719
+ }
720
+
721
+ .sl-markdown-content .sl-steps > li::after {
722
+ background-color: var(--border);
723
+ }
724
+
725
+ .sl-markdown-content .sl-steps > li:last-child {
726
+ padding-bottom: 0;
727
+ }
728
+
729
+ .sl-markdown-content .sl-steps > li:last-child::after {
730
+ display: none;
731
+ }
732
+
733
+ .sl-markdown-content .sl-steps > li > .sl-heading-wrapper {
734
+ display: flex;
735
+ align-items: center;
736
+ gap: 0.5rem;
737
+ height: var(--bullet-size);
738
+ min-height: var(--bullet-size);
739
+ transform: none;
740
+ margin-bottom: 0;
741
+ }
742
+
743
+ .sl-markdown-content .sl-steps > li > .sl-heading-wrapper :is(h3, h4) {
744
+ font-size: 1rem;
745
+ line-height: 1.75rem;
746
+ font-weight: 500;
747
+ margin: 0;
748
+ }
749
+
750
+ .sl-markdown-content .sl-steps > li > .sl-heading-wrapper .sl-anchor-link {
751
+ height: var(--bullet-size);
752
+ line-height: var(--bullet-size);
753
+ align-items: center;
754
+ }
755
+
756
+ .sl-markdown-content .sl-steps > li > .sl-heading-wrapper .sl-anchor-icon > svg {
757
+ vertical-align: middle;
758
+ transform: none;
759
+ }
760
+
761
+ .sl-markdown-content .sl-steps > li > p {
762
+ color: var(--muted-foreground);
763
+ }
764
+
765
+ .sl-markdown-content .sl-steps > li > .sl-heading-wrapper + p {
766
+ margin-top: 0;
767
+ }
768
+
769
+ /* built-in Starlight Tabs */
770
+ .sl-markdown-content starlight-tabs {
771
+ display: block;
772
+ margin-block: calc(var(--spacing) * 6) calc(var(--spacing) * 8);
773
+ }
774
+
775
+ .sl-markdown-content starlight-tabs .tablist-wrapper {
776
+ overflow-x: auto;
777
+ padding: 0.25rem 0.75rem;
778
+ border-radius: calc(var(--radius) + 0.25rem) calc(var(--radius) + 0.25rem) 0 0;
779
+ background-color: var(--code-background);
780
+ box-shadow: inset 0 -1px 0 color-mix(in oklab, var(--border) 85%, transparent);
781
+ }
782
+
783
+ .sl-markdown-content starlight-tabs [role='tablist'] {
784
+ display: flex;
785
+ align-items: center;
786
+ gap: 0.25rem;
787
+ min-width: max-content;
788
+ border-bottom: 0;
789
+ padding: 0;
790
+ }
791
+
792
+ .sl-markdown-content starlight-tabs .tab > [role='tab'] {
793
+ display: inline-flex;
794
+ align-items: center;
795
+ gap: 0.375rem;
796
+ min-height: 1.75rem;
797
+ padding: 0.125rem 0.5rem 0.25rem;
798
+ border-radius: calc(var(--radius) - 2px);
799
+ color: color-mix(in oklab, var(--foreground) 60%, transparent);
800
+ font-size: 0.875rem;
801
+ font-weight: 500;
802
+ line-height: 1.25rem;
803
+ box-shadow: none;
804
+ transition-property: color, background-color, box-shadow;
805
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
806
+ transition-duration: 0.15s;
807
+ }
808
+
809
+ .sl-markdown-content starlight-tabs .tab > [role='tab']:hover {
810
+ color: var(--foreground);
811
+ background-color: color-mix(in oklab, var(--background) 35%, transparent);
812
+ }
813
+
814
+ .sl-markdown-content starlight-tabs .tab > [role='tab']:focus-visible {
815
+ outline: none;
816
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 35%, transparent);
817
+ }
818
+
819
+ .sl-markdown-content starlight-tabs .tab [role='tab'][aria-selected='true'] {
820
+ color: var(--foreground);
821
+ background-color: var(--background);
822
+ box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--border) 70%, transparent);
823
+ }
824
+
825
+ .sl-markdown-content starlight-tabs .tab > [role='tab'] svg {
826
+ width: 0.875rem;
827
+ height: 0.875rem;
828
+ color: currentColor;
829
+ }
830
+
831
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] {
832
+ margin-top: 0;
833
+ padding: 1rem;
834
+ border-radius: 0 0 calc(var(--radius) + 0.25rem) calc(var(--radius) + 0.25rem);
835
+ background-color: var(--code-background);
836
+ }
837
+
838
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] > :first-child {
839
+ margin-top: 0;
840
+ }
841
+
842
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] > :last-child {
843
+ margin-bottom: 0;
844
+ }
845
+
846
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] :is(pre, figure) {
847
+ margin: 0;
848
+ }
849
+
850
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] > .expressive-code {
851
+ margin: -1rem;
852
+ }
853
+
854
+ .sl-markdown-content
855
+ starlight-tabs
856
+ .tablist-wrapper
857
+ ~ [role='tabpanel']
858
+ > .expressive-code
859
+ .frame {
860
+ --button-spacing: 0.4rem;
861
+ border: 0;
862
+ border-radius: 0 0 calc(var(--radius) + 0.25rem) calc(var(--radius) + 0.25rem);
863
+ }
864
+
865
+ .sl-markdown-content
866
+ starlight-tabs
867
+ .tablist-wrapper
868
+ ~ [role='tabpanel']
869
+ > .expressive-code
870
+ .header {
871
+ display: none;
872
+ }
873
+
874
+ .sl-markdown-content
875
+ starlight-tabs
876
+ .tablist-wrapper
877
+ ~ [role='tabpanel']
878
+ > .expressive-code
879
+ pre {
880
+ border-radius: 0 0 calc(var(--radius) + 0.25rem) calc(var(--radius) + 0.25rem);
881
+ }
882
+
883
+ .sl-markdown-content starlight-tabs .tablist-wrapper ~ [role='tabpanel'] p {
884
+ color: color-mix(in oklab, var(--foreground) 72%, var(--muted-foreground));
885
+ }
886
+
887
+ /* footer link styles */
888
+ [data-slot='footer-text'] a {
889
+ text-decoration: underline;
890
+ text-underline-offset: calc(var(--spacing) * 1);
891
+ color: var(--muted-foreground);
892
+ }
893
+
894
+ [data-slot='footer-text'] a:hover {
895
+ color: var(--foreground);
896
+ }
897
+ }