@prudentbird/voxx-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/config.cjs +151 -0
  5. package/dist/config.cjs.map +1 -0
  6. package/dist/config.d.cts +122 -0
  7. package/dist/config.d.cts.map +1 -0
  8. package/dist/config.d.mts +122 -0
  9. package/dist/config.d.mts.map +1 -0
  10. package/dist/config.mjs +149 -0
  11. package/dist/config.mjs.map +1 -0
  12. package/dist/content.cjs +147 -0
  13. package/dist/content.cjs.map +1 -0
  14. package/dist/content.d.cts +41 -0
  15. package/dist/content.d.cts.map +1 -0
  16. package/dist/content.d.mts +41 -0
  17. package/dist/content.d.mts.map +1 -0
  18. package/dist/content.mjs +145 -0
  19. package/dist/content.mjs.map +1 -0
  20. package/dist/dev.cjs +82 -0
  21. package/dist/dev.cjs.map +1 -0
  22. package/dist/dev.d.cts +24 -0
  23. package/dist/dev.d.cts.map +1 -0
  24. package/dist/dev.d.mts +24 -0
  25. package/dist/dev.d.mts.map +1 -0
  26. package/dist/dev.mjs +82 -0
  27. package/dist/dev.mjs.map +1 -0
  28. package/dist/effect.cjs +23 -0
  29. package/dist/effect.d.cts +8 -0
  30. package/dist/effect.d.mts +8 -0
  31. package/dist/effect.mjs +8 -0
  32. package/dist/errors.cjs +20 -0
  33. package/dist/errors.cjs.map +1 -0
  34. package/dist/errors.d.cts +45 -0
  35. package/dist/errors.d.cts.map +1 -0
  36. package/dist/errors.d.mts +45 -0
  37. package/dist/errors.d.mts.map +1 -0
  38. package/dist/errors.mjs +16 -0
  39. package/dist/errors.mjs.map +1 -0
  40. package/dist/feeds.cjs +97 -0
  41. package/dist/feeds.cjs.map +1 -0
  42. package/dist/feeds.d.cts +49 -0
  43. package/dist/feeds.d.cts.map +1 -0
  44. package/dist/feeds.d.mts +49 -0
  45. package/dist/feeds.d.mts.map +1 -0
  46. package/dist/feeds.mjs +94 -0
  47. package/dist/feeds.mjs.map +1 -0
  48. package/dist/frontmatter.cjs +22 -0
  49. package/dist/frontmatter.cjs.map +1 -0
  50. package/dist/frontmatter.d.cts +30 -0
  51. package/dist/frontmatter.d.cts.map +1 -0
  52. package/dist/frontmatter.d.mts +30 -0
  53. package/dist/frontmatter.d.mts.map +1 -0
  54. package/dist/frontmatter.mjs +20 -0
  55. package/dist/frontmatter.mjs.map +1 -0
  56. package/dist/index.cjs +90 -0
  57. package/dist/index.cjs.map +1 -0
  58. package/dist/index.d.cts +50 -0
  59. package/dist/index.d.cts.map +1 -0
  60. package/dist/index.d.mts +50 -0
  61. package/dist/index.d.mts.map +1 -0
  62. package/dist/index.mjs +59 -0
  63. package/dist/index.mjs.map +1 -0
  64. package/dist/llms.cjs +81 -0
  65. package/dist/llms.cjs.map +1 -0
  66. package/dist/llms.d.cts +43 -0
  67. package/dist/llms.d.cts.map +1 -0
  68. package/dist/llms.d.mts +43 -0
  69. package/dist/llms.d.mts.map +1 -0
  70. package/dist/llms.mjs +78 -0
  71. package/dist/llms.mjs.map +1 -0
  72. package/dist/nav.cjs +50 -0
  73. package/dist/nav.cjs.map +1 -0
  74. package/dist/nav.d.cts +16 -0
  75. package/dist/nav.d.cts.map +1 -0
  76. package/dist/nav.d.mts +16 -0
  77. package/dist/nav.d.mts.map +1 -0
  78. package/dist/nav.mjs +50 -0
  79. package/dist/nav.mjs.map +1 -0
  80. package/dist/render.cjs +152 -0
  81. package/dist/render.cjs.map +1 -0
  82. package/dist/render.d.cts +29 -0
  83. package/dist/render.d.cts.map +1 -0
  84. package/dist/render.d.mts +29 -0
  85. package/dist/render.d.mts.map +1 -0
  86. package/dist/render.mjs +143 -0
  87. package/dist/render.mjs.map +1 -0
  88. package/dist/schema.cjs +78 -0
  89. package/dist/schema.cjs.map +1 -0
  90. package/dist/schema.d.cts +93 -0
  91. package/dist/schema.d.cts.map +1 -0
  92. package/dist/schema.d.mts +93 -0
  93. package/dist/schema.d.mts.map +1 -0
  94. package/dist/schema.mjs +77 -0
  95. package/dist/schema.mjs.map +1 -0
  96. package/dist/seo.cjs +77 -0
  97. package/dist/seo.cjs.map +1 -0
  98. package/dist/seo.d.cts +15 -0
  99. package/dist/seo.d.cts.map +1 -0
  100. package/dist/seo.d.mts +15 -0
  101. package/dist/seo.d.mts.map +1 -0
  102. package/dist/seo.mjs +77 -0
  103. package/dist/seo.mjs.map +1 -0
  104. package/dist/types.cjs +45 -0
  105. package/dist/types.cjs.map +1 -0
  106. package/dist/types.d.cts +138 -0
  107. package/dist/types.d.cts.map +1 -0
  108. package/dist/types.d.mts +138 -0
  109. package/dist/types.d.mts.map +1 -0
  110. package/dist/types.mjs +45 -0
  111. package/dist/types.mjs.map +1 -0
  112. package/dist/util.cjs +185 -0
  113. package/dist/util.cjs.map +1 -0
  114. package/dist/util.d.cts +98 -0
  115. package/dist/util.d.cts.map +1 -0
  116. package/dist/util.d.mts +98 -0
  117. package/dist/util.d.mts.map +1 -0
  118. package/dist/util.mjs +171 -0
  119. package/dist/util.mjs.map +1 -0
  120. package/package.json +106 -0
  121. package/theme/demo-globals.css +61 -0
  122. package/theme/voxx.css +915 -0
  123. package/voxx.schema.json +186 -0
package/theme/voxx.css ADDED
@@ -0,0 +1,915 @@
1
+ .voxx {
2
+ --voxx-bg: #ffffff;
3
+ --voxx-fg: #09090b;
4
+ --voxx-muted: #f4f4f5;
5
+ --voxx-muted-fg: #71717a;
6
+ --voxx-border: #e4e4e7;
7
+ --voxx-link: #2563eb;
8
+ --voxx-radius: 0.5rem;
9
+
10
+ color: var(--foreground, var(--voxx-fg));
11
+ font-family: var(
12
+ --voxx-font,
13
+ ui-sans-serif,
14
+ system-ui,
15
+ -apple-system,
16
+ "Segoe UI",
17
+ sans-serif
18
+ );
19
+ -webkit-font-smoothing: antialiased;
20
+ text-rendering: optimizeLegibility;
21
+ }
22
+
23
+ @media (prefers-color-scheme: dark) {
24
+ :root:not(.light) .voxx {
25
+ --voxx-bg: #09090b;
26
+ --voxx-fg: #fafafa;
27
+ --voxx-muted: #18181b;
28
+ --voxx-muted-fg: #a1a1aa;
29
+ --voxx-border: #27272a;
30
+ --voxx-link: #60a5fa;
31
+ }
32
+ }
33
+
34
+ .dark .voxx,
35
+ .voxx.dark {
36
+ --voxx-bg: #09090b;
37
+ --voxx-fg: #fafafa;
38
+ --voxx-muted: #18181b;
39
+ --voxx-muted-fg: #a1a1aa;
40
+ --voxx-border: #27272a;
41
+ --voxx-link: #60a5fa;
42
+ }
43
+
44
+ .voxx-prose {
45
+ font-size: 1rem;
46
+ line-height: 1.75;
47
+ color: var(--foreground, var(--voxx-fg));
48
+ }
49
+
50
+ .voxx-prose > :first-child {
51
+ margin-top: 0;
52
+ }
53
+
54
+ .voxx-prose > :last-child {
55
+ margin-bottom: 0;
56
+ }
57
+
58
+ .voxx-prose :is(h1, h2, h3, h4) {
59
+ color: var(--foreground, var(--voxx-fg));
60
+ font-weight: 650;
61
+ line-height: 1.25;
62
+ letter-spacing: -0.015em;
63
+ scroll-margin-top: 5rem;
64
+ }
65
+
66
+ .voxx-prose h1 {
67
+ font-size: 2rem;
68
+ margin: 0 0 1.25rem;
69
+ }
70
+
71
+ .voxx-prose h2 {
72
+ font-size: 1.5rem;
73
+ margin: 2.5rem 0 1rem;
74
+ padding-bottom: 0.4rem;
75
+ border-bottom: 1px solid var(--border, var(--voxx-border));
76
+ }
77
+
78
+ .voxx-prose h3 {
79
+ font-size: 1.25rem;
80
+ margin: 2rem 0 0.75rem;
81
+ }
82
+
83
+ .voxx-prose h4 {
84
+ font-size: 1.05rem;
85
+ margin: 1.5rem 0 0.5rem;
86
+ }
87
+
88
+ .voxx-prose :is(h1, h2, h3, h4) > a {
89
+ color: inherit;
90
+ text-decoration: none;
91
+ }
92
+
93
+ .voxx-prose p {
94
+ margin: 0 0 1.25rem;
95
+ }
96
+
97
+ .voxx-prose a {
98
+ color: var(--primary, var(--voxx-link));
99
+ text-decoration: underline;
100
+ text-underline-offset: 2px;
101
+ text-decoration-thickness: 1px;
102
+ }
103
+
104
+ .voxx-prose a:hover {
105
+ text-decoration-thickness: 2px;
106
+ }
107
+
108
+ .voxx-prose :is(ul, ol) {
109
+ margin: 0 0 1.25rem;
110
+ padding-left: 1.5rem;
111
+ }
112
+
113
+ .voxx-prose li {
114
+ margin: 0.375rem 0;
115
+ }
116
+
117
+ .voxx-prose li::marker {
118
+ color: var(--muted-foreground, var(--voxx-muted-fg));
119
+ }
120
+
121
+ .voxx-prose blockquote {
122
+ margin: 1.5rem 0;
123
+ padding: 0.25rem 0 0.25rem 1.25rem;
124
+ border-left: 3px solid var(--border, var(--voxx-border));
125
+ color: var(--muted-foreground, var(--voxx-muted-fg));
126
+ font-style: italic;
127
+ }
128
+
129
+ .voxx-prose hr {
130
+ margin: 2.5rem 0;
131
+ border: 0;
132
+ border-top: 1px solid var(--border, var(--voxx-border));
133
+ }
134
+
135
+ .voxx-prose img {
136
+ max-width: 100%;
137
+ height: auto;
138
+ border-radius: var(--radius, var(--voxx-radius));
139
+ display: block;
140
+ margin: 1.5rem 0;
141
+ }
142
+
143
+ .voxx-prose :not(pre) > code {
144
+ font-family: var(--voxx-font-mono, ui-monospace, "SF Mono", Menlo, monospace);
145
+ font-size: 0.875em;
146
+ background: var(--muted, var(--voxx-muted));
147
+ border: 1px solid var(--border, var(--voxx-border));
148
+ border-radius: calc(var(--radius, var(--voxx-radius)) - 2px);
149
+ padding: 0.125rem 0.375rem;
150
+ }
151
+
152
+ .voxx-prose table {
153
+ width: 100%;
154
+ border-collapse: collapse;
155
+ margin: 1.5rem 0;
156
+ font-size: 0.9375rem;
157
+ }
158
+
159
+ .voxx-prose :is(th, td) {
160
+ border: 1px solid var(--border, var(--voxx-border));
161
+ padding: 0.5rem 0.75rem;
162
+ text-align: left;
163
+ }
164
+
165
+ .voxx-prose th {
166
+ background: var(--muted, var(--voxx-muted));
167
+ font-weight: 600;
168
+ }
169
+
170
+ .voxx-prose pre {
171
+ margin: 1.5rem 0;
172
+ padding: 1rem 1.25rem;
173
+ max-width: 100%;
174
+ border-radius: var(--radius, var(--voxx-radius));
175
+ border: 1px solid var(--border, var(--voxx-border));
176
+ white-space: pre-wrap;
177
+ overflow-wrap: anywhere;
178
+ font-size: 0.875rem;
179
+ line-height: 1.6;
180
+ }
181
+
182
+ .voxx-prose pre code {
183
+ font-family: var(--voxx-font-mono, ui-monospace, "SF Mono", Menlo, monospace);
184
+ background: none;
185
+ border: 0;
186
+ padding: 0;
187
+ }
188
+
189
+ .voxx-prose .shiki,
190
+ .voxx-prose .shiki span {
191
+ color: var(--shiki-light);
192
+ }
193
+
194
+ .voxx-prose .shiki {
195
+ background-color: var(--shiki-light-bg) !important;
196
+ }
197
+
198
+ @media (prefers-color-scheme: dark) {
199
+ .voxx-prose .shiki,
200
+ .voxx-prose .shiki span {
201
+ color: var(--shiki-dark);
202
+ }
203
+
204
+ .voxx-prose .shiki {
205
+ background-color: var(--shiki-dark-bg) !important;
206
+ }
207
+ }
208
+
209
+ .dark .voxx-prose .shiki,
210
+ .dark .voxx-prose .shiki span {
211
+ color: var(--shiki-dark);
212
+ }
213
+
214
+ .dark .voxx-prose .shiki {
215
+ background-color: var(--shiki-dark-bg) !important;
216
+ }
217
+
218
+ .voxx-toc {
219
+ font-size: 0.8125rem;
220
+ line-height: 1.5;
221
+ }
222
+
223
+ .voxx-toc__title {
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 0.5rem;
227
+ margin: 0 0 0.5rem;
228
+ font-weight: 500;
229
+ color: var(--muted-foreground, var(--voxx-muted-fg));
230
+ }
231
+
232
+ .voxx-toc__title svg {
233
+ width: 1rem;
234
+ height: 1rem;
235
+ opacity: 0.7;
236
+ }
237
+
238
+ .voxx-toc__list {
239
+ list-style: none;
240
+ margin: 0;
241
+ padding: 0;
242
+ display: flex;
243
+ flex-direction: column;
244
+ }
245
+
246
+ .voxx-toc__item {
247
+ position: relative;
248
+ }
249
+
250
+ .voxx-toc__item::before {
251
+ content: "";
252
+ position: absolute;
253
+ left: 0;
254
+ top: 0;
255
+ bottom: 0;
256
+ width: 1px;
257
+ background: var(--border, var(--voxx-border));
258
+ }
259
+
260
+ .voxx-toc__item[data-depth="3"]::before {
261
+ left: 0.625rem;
262
+ }
263
+
264
+ .voxx-toc__item[data-depth="4"]::before {
265
+ left: 1.25rem;
266
+ }
267
+
268
+ .voxx-toc__item a {
269
+ display: block;
270
+ padding: 0.375rem 0 0.375rem 0.875rem;
271
+ color: var(--muted-foreground, var(--voxx-muted-fg));
272
+ text-decoration: none;
273
+ transition: color 0.15s ease;
274
+ }
275
+
276
+ .voxx-toc__item[data-depth="3"] a {
277
+ padding-left: 1.625rem;
278
+ }
279
+
280
+ .voxx-toc__item[data-depth="4"] a {
281
+ padding-left: 2.25rem;
282
+ }
283
+
284
+ .voxx-toc__item a:hover {
285
+ color: var(--foreground, var(--voxx-fg));
286
+ }
287
+
288
+ .voxx-toc__body {
289
+ position: relative;
290
+ }
291
+
292
+ .voxx-toc__items {
293
+ display: flex;
294
+ flex-direction: column;
295
+ }
296
+
297
+ .voxx-toc__link {
298
+ position: relative;
299
+ display: block;
300
+ padding-top: 0.375rem;
301
+ padding-bottom: 0.375rem;
302
+ color: var(--muted-foreground, var(--voxx-muted-fg));
303
+ text-decoration: none;
304
+ overflow-wrap: anywhere;
305
+ transition: color 0.15s ease;
306
+ }
307
+
308
+ .voxx-toc__link:first-child {
309
+ padding-top: 0;
310
+ }
311
+
312
+ .voxx-toc__link:last-child {
313
+ padding-bottom: 0;
314
+ }
315
+
316
+ .voxx-toc__link:hover {
317
+ color: var(--foreground, var(--voxx-fg));
318
+ }
319
+
320
+ .voxx-toc__link[data-active="true"] {
321
+ color: var(--primary, var(--foreground, var(--voxx-fg)));
322
+ }
323
+
324
+ .voxx-toc__line {
325
+ position: absolute;
326
+ top: 0;
327
+ bottom: 0;
328
+ width: 1px;
329
+ background: var(--border, var(--voxx-border));
330
+ }
331
+
332
+ .voxx-toc__connector {
333
+ position: absolute;
334
+ top: -0.375rem;
335
+ inset-inline-start: 0;
336
+ width: 1rem;
337
+ height: 1rem;
338
+ }
339
+
340
+ .voxx-toc__connector line {
341
+ stroke: var(--border, var(--voxx-border));
342
+ stroke-width: 1;
343
+ }
344
+
345
+ .voxx-toc__mask {
346
+ position: absolute;
347
+ top: 0;
348
+ inset-inline-start: 0;
349
+ pointer-events: none;
350
+ }
351
+
352
+ .voxx-toc__thumb {
353
+ position: absolute;
354
+ width: 100%;
355
+ top: var(--voxx-toc-thumb-top, 0);
356
+ height: var(--voxx-toc-thumb-height, 0);
357
+ background: var(--primary, var(--foreground, var(--voxx-fg)));
358
+ transition:
359
+ top 0.15s ease,
360
+ height 0.15s ease;
361
+ }
362
+
363
+ .voxx-toc__thumb[data-hidden] {
364
+ opacity: 0;
365
+ }
366
+
367
+ .voxx-article {
368
+ max-width: 44rem;
369
+ margin: 0 auto;
370
+ min-width: 0;
371
+ }
372
+
373
+ .voxx-article__header {
374
+ margin-bottom: 2.5rem;
375
+ }
376
+
377
+ .voxx-article__header h1 {
378
+ font-size: clamp(1.875rem, 1.2rem + 2.5vw, 2.75rem);
379
+ font-weight: 700;
380
+ line-height: 1.15;
381
+ letter-spacing: -0.02em;
382
+ margin: 0 0 0.75rem;
383
+ color: var(--foreground, var(--voxx-fg));
384
+ }
385
+
386
+ .voxx-article__meta {
387
+ display: flex;
388
+ flex-wrap: wrap;
389
+ gap: 0.25rem;
390
+ margin: 0;
391
+ font-size: 0.875rem;
392
+ color: var(--muted-foreground, var(--voxx-muted-fg));
393
+ }
394
+
395
+ .voxx-layout {
396
+ display: grid;
397
+ grid-template-columns: minmax(0, 1fr);
398
+ gap: 3rem;
399
+ max-width: 70rem;
400
+ margin: 0 auto;
401
+ padding: 3.5rem 1.5rem 5rem;
402
+ min-width: 0;
403
+ }
404
+
405
+ @media (min-width: 1024px) {
406
+ .voxx-layout {
407
+ grid-template-columns: minmax(0, 1fr) 16rem;
408
+ }
409
+
410
+ .voxx-article {
411
+ margin: 0;
412
+ }
413
+ }
414
+
415
+ .voxx-aside {
416
+ display: none;
417
+ }
418
+
419
+ @media (min-width: 1024px) {
420
+ .voxx-aside {
421
+ display: block;
422
+ }
423
+
424
+ .voxx-aside__inner {
425
+ position: sticky;
426
+ top: 2.5rem;
427
+ }
428
+ }
429
+
430
+ .voxx-index {
431
+ max-width: 44rem;
432
+ margin: 0 auto;
433
+ padding: 3.5rem 1.5rem 5rem;
434
+ }
435
+
436
+ .voxx-index__header {
437
+ margin-bottom: 2.5rem;
438
+ }
439
+
440
+ .voxx-index__header h1 {
441
+ font-size: 2.25rem;
442
+ font-weight: 700;
443
+ letter-spacing: -0.02em;
444
+ margin: 0 0 0.5rem;
445
+ color: var(--foreground, var(--voxx-fg));
446
+ }
447
+
448
+ .voxx-index__desc {
449
+ margin: 0;
450
+ color: var(--muted-foreground, var(--voxx-muted-fg));
451
+ font-size: 1.0625rem;
452
+ }
453
+
454
+ .voxx-postlist {
455
+ list-style: none;
456
+ margin: 0;
457
+ padding: 0;
458
+ display: flex;
459
+ flex-direction: column;
460
+ }
461
+
462
+ .voxx-postcard + .voxx-postcard {
463
+ border-top: 1px solid var(--border, var(--voxx-border));
464
+ }
465
+
466
+ .voxx-postcard__link {
467
+ display: block;
468
+ padding: 1.5rem 0;
469
+ text-decoration: none;
470
+ color: inherit;
471
+ }
472
+
473
+ .voxx-postcard__link:hover .voxx-postcard__title {
474
+ color: var(--primary, var(--voxx-link));
475
+ }
476
+
477
+ .voxx-postcard__title {
478
+ font-size: 1.3rem;
479
+ font-weight: 650;
480
+ letter-spacing: -0.01em;
481
+ margin: 0 0 0.35rem;
482
+ color: var(--foreground, var(--voxx-fg));
483
+ transition: color 0.15s ease;
484
+ }
485
+
486
+ .voxx-postcard__meta {
487
+ margin: 0 0 0.5rem;
488
+ font-size: 0.8125rem;
489
+ color: var(--muted-foreground, var(--voxx-muted-fg));
490
+ }
491
+
492
+ .voxx-postcard__excerpt {
493
+ margin: 0 0 0.75rem;
494
+ color: var(--muted-foreground, var(--voxx-muted-fg));
495
+ line-height: 1.6;
496
+ }
497
+
498
+ .voxx-tags {
499
+ list-style: none;
500
+ display: flex;
501
+ flex-wrap: wrap;
502
+ gap: 0.4rem;
503
+ margin: 0;
504
+ padding: 0;
505
+ }
506
+
507
+ .voxx-tag {
508
+ font-size: 0.75rem;
509
+ padding: 0.15rem 0.55rem;
510
+ border-radius: 9999px;
511
+ border: 1px solid var(--border, var(--voxx-border));
512
+ color: var(--muted-foreground, var(--voxx-muted-fg));
513
+ background: var(--muted, var(--voxx-muted));
514
+ }
515
+
516
+ .voxx-empty {
517
+ color: var(--muted-foreground, var(--voxx-muted-fg));
518
+ }
519
+
520
+ .voxx-header {
521
+ position: sticky;
522
+ top: 0;
523
+ z-index: 40;
524
+ display: flex;
525
+ align-items: center;
526
+ justify-content: space-between;
527
+ gap: 1rem;
528
+ padding: 0.625rem 1.5rem;
529
+ border-bottom: 1px solid var(--border, var(--voxx-border));
530
+ background: var(--background, var(--voxx-bg));
531
+ }
532
+
533
+ .voxx-header__title {
534
+ font-size: 1.0625rem;
535
+ font-weight: 700;
536
+ letter-spacing: -0.01em;
537
+ color: var(--foreground, var(--voxx-fg));
538
+ text-decoration: none;
539
+ }
540
+
541
+ .voxx-header__actions {
542
+ display: flex;
543
+ align-items: center;
544
+ gap: 0.25rem;
545
+ }
546
+
547
+ .voxx-docs {
548
+ display: grid;
549
+ grid-template-columns: minmax(0, 1fr);
550
+ max-width: 90rem;
551
+ margin: 0 auto;
552
+ min-height: 100dvh;
553
+ }
554
+
555
+ @media (min-width: 768px) {
556
+ .voxx-docs {
557
+ grid-template-columns: 16rem minmax(0, 1fr);
558
+ }
559
+ }
560
+
561
+ .voxx-docs__nav-header {
562
+ display: flex;
563
+ align-items: center;
564
+ gap: 0.625rem;
565
+ }
566
+
567
+ .voxx-docs__title {
568
+ font-size: 1.0625rem;
569
+ font-weight: 700;
570
+ letter-spacing: -0.01em;
571
+ color: var(--foreground, var(--voxx-fg));
572
+ text-decoration: none;
573
+ }
574
+
575
+ .voxx-docs__nav-footer {
576
+ display: flex;
577
+ align-items: center;
578
+ justify-content: end;
579
+ }
580
+
581
+ @media (min-width: 768px) {
582
+ .voxx-docs__nav {
583
+ display: block;
584
+ border-right: 1px solid var(--border, var(--voxx-border));
585
+ padding: 0;
586
+ }
587
+
588
+ .voxx-docs__nav-inner {
589
+ position: sticky;
590
+ top: 0;
591
+ display: flex;
592
+ flex-direction: column;
593
+ gap: 1.5rem;
594
+ height: 100dvh;
595
+ padding: 1.5rem 1.25rem;
596
+ }
597
+
598
+ .voxx-docs__nav .voxx-nav {
599
+ flex: 1;
600
+ min-height: 0;
601
+ overflow-y: auto;
602
+ }
603
+
604
+ .voxx-docs__nav-header {
605
+ padding: 0 0.5rem;
606
+ }
607
+
608
+ .voxx-docs__nav-footer {
609
+ margin-top: auto;
610
+ padding: 1rem 0.5rem 0;
611
+ border-top: 1px solid var(--border, var(--voxx-border));
612
+ }
613
+ }
614
+
615
+ @media (max-width: 767.98px) {
616
+ .voxx-docs__nav {
617
+ position: sticky;
618
+ top: 0;
619
+ z-index: 40;
620
+ display: flex;
621
+ align-items: center;
622
+ justify-content: space-between;
623
+ padding: 0.625rem 1rem;
624
+ border-bottom: 1px solid var(--border, var(--voxx-border));
625
+ background: var(--background, var(--voxx-bg));
626
+ }
627
+
628
+ .voxx-docs__nav-inner {
629
+ display: contents;
630
+ }
631
+
632
+ .voxx-docs__nav-inner > .voxx-nav {
633
+ display: none;
634
+ }
635
+ }
636
+
637
+ .voxx-icon-button {
638
+ display: inline-flex;
639
+ align-items: center;
640
+ justify-content: center;
641
+ width: 2.25rem;
642
+ height: 2.25rem;
643
+ padding: 0;
644
+ background: none;
645
+ border: 0;
646
+ border-radius: calc(var(--radius, var(--voxx-radius)) - 2px);
647
+ color: var(--foreground, var(--voxx-fg));
648
+ cursor: pointer;
649
+ transition: background-color 0.15s ease;
650
+ }
651
+
652
+ .voxx-icon-button:hover {
653
+ background: var(--muted, var(--voxx-muted));
654
+ }
655
+
656
+ .voxx-icon-button svg {
657
+ width: 1.25rem;
658
+ height: 1.25rem;
659
+ }
660
+
661
+ @media (min-width: 768px) {
662
+ .voxx-menu-button {
663
+ display: none;
664
+ }
665
+ }
666
+
667
+ .voxx-theme-toggle .voxx-icon-sun {
668
+ display: none;
669
+ }
670
+
671
+ .dark .voxx-theme-toggle .voxx-icon-sun,
672
+ :root.dark .voxx-theme-toggle .voxx-icon-sun {
673
+ display: block;
674
+ }
675
+
676
+ .dark .voxx-theme-toggle .voxx-icon-moon,
677
+ :root.dark .voxx-theme-toggle .voxx-icon-moon {
678
+ display: none;
679
+ }
680
+
681
+ @media (prefers-color-scheme: dark) {
682
+ :root:not(.light) .voxx-theme-toggle .voxx-icon-sun {
683
+ display: block;
684
+ }
685
+
686
+ :root:not(.light) .voxx-theme-toggle .voxx-icon-moon {
687
+ display: none;
688
+ }
689
+ }
690
+
691
+ .voxx-drawer {
692
+ position: fixed;
693
+ inset: 0;
694
+ z-index: 50;
695
+ }
696
+
697
+ .voxx-drawer__overlay {
698
+ position: absolute;
699
+ inset: 0;
700
+ background: rgb(0 0 0 / 0.5);
701
+ animation: voxx-fade-in 0.15s ease;
702
+ }
703
+
704
+ .voxx-drawer__panel {
705
+ position: absolute;
706
+ top: 0;
707
+ bottom: 0;
708
+ left: 0;
709
+ width: min(20rem, 85vw);
710
+ display: flex;
711
+ flex-direction: column;
712
+ background: var(--background, var(--voxx-bg));
713
+ border-right: 1px solid var(--border, var(--voxx-border));
714
+ box-shadow: 0 8px 32px rgb(0 0 0 / 0.25);
715
+ animation: voxx-slide-in 0.2s ease;
716
+ }
717
+
718
+ .voxx-drawer__header {
719
+ display: flex;
720
+ align-items: center;
721
+ justify-content: space-between;
722
+ padding: 0.875rem 1.25rem;
723
+ border-bottom: 1px solid var(--border, var(--voxx-border));
724
+ }
725
+
726
+ .voxx-drawer__body {
727
+ flex: 1;
728
+ min-height: 0;
729
+ overflow-y: auto;
730
+ padding: 1rem 0.75rem;
731
+ }
732
+
733
+ @keyframes voxx-fade-in {
734
+ from {
735
+ opacity: 0;
736
+ }
737
+ to {
738
+ opacity: 1;
739
+ }
740
+ }
741
+
742
+ @keyframes voxx-slide-in {
743
+ from {
744
+ transform: translateX(-100%);
745
+ }
746
+ to {
747
+ transform: none;
748
+ }
749
+ }
750
+
751
+ .voxx-docs__menu {
752
+ display: none;
753
+ }
754
+
755
+ @media (max-width: 767.98px) {
756
+ .voxx-docs__menu {
757
+ display: block;
758
+ }
759
+
760
+ .voxx-docs__menu > summary {
761
+ list-style: none;
762
+ display: inline-flex;
763
+ align-items: center;
764
+ justify-content: center;
765
+ width: 2.25rem;
766
+ height: 2.25rem;
767
+ border-radius: calc(var(--radius, var(--voxx-radius)) - 2px);
768
+ color: var(--foreground, var(--voxx-fg));
769
+ cursor: pointer;
770
+ }
771
+
772
+ .voxx-docs__menu > summary::-webkit-details-marker {
773
+ display: none;
774
+ }
775
+
776
+ .voxx-docs__menu > summary:hover {
777
+ background: var(--muted, var(--voxx-muted));
778
+ }
779
+
780
+ .voxx-docs__menu > summary svg {
781
+ width: 1.25rem;
782
+ height: 1.25rem;
783
+ }
784
+
785
+ .voxx-docs__menu-panel {
786
+ position: absolute;
787
+ top: 100%;
788
+ left: 0;
789
+ right: 0;
790
+ max-height: 70dvh;
791
+ overflow-y: auto;
792
+ padding: 1rem;
793
+ background: var(--background, var(--voxx-bg));
794
+ border-bottom: 1px solid var(--border, var(--voxx-border));
795
+ box-shadow: 0 8px 32px rgb(0 0 0 / 0.25);
796
+ }
797
+ }
798
+
799
+ .voxx-nav {
800
+ font-size: 0.875rem;
801
+ }
802
+
803
+ .voxx-nav__list {
804
+ list-style: none;
805
+ margin: 0;
806
+ padding: 0;
807
+ display: flex;
808
+ flex-direction: column;
809
+ gap: 0.125rem;
810
+ }
811
+
812
+ .voxx-nav__list .voxx-nav__list {
813
+ margin: 0.125rem 0 0.375rem 0.625rem;
814
+ padding-left: 0.625rem;
815
+ border-left: 1px solid var(--border, var(--voxx-border));
816
+ }
817
+
818
+ .voxx-nav__section {
819
+ display: block;
820
+ margin: 1rem 0 0.25rem;
821
+ padding: 0 0.5rem;
822
+ font-weight: 600;
823
+ color: var(--foreground, var(--voxx-fg));
824
+ }
825
+
826
+ .voxx-nav__link {
827
+ display: block;
828
+ padding: 0.3rem 0.5rem;
829
+ border-radius: calc(var(--radius, var(--voxx-radius)) - 2px);
830
+ color: var(--muted-foreground, var(--voxx-muted-fg));
831
+ text-decoration: none;
832
+ transition:
833
+ color 0.15s ease,
834
+ background-color 0.15s ease;
835
+ }
836
+
837
+ .voxx-nav__link:hover {
838
+ color: var(--foreground, var(--voxx-fg));
839
+ }
840
+
841
+ .voxx-nav__link[data-active="true"] {
842
+ color: var(--foreground, var(--voxx-fg));
843
+ background: var(--muted, var(--voxx-muted));
844
+ font-weight: 500;
845
+ }
846
+
847
+ .voxx-releases {
848
+ display: flex;
849
+ flex-direction: column;
850
+ gap: 3rem;
851
+ }
852
+
853
+ .voxx-release__header {
854
+ display: flex;
855
+ align-items: baseline;
856
+ gap: 0.75rem;
857
+ margin-bottom: 1rem;
858
+ }
859
+
860
+ .voxx-release__version {
861
+ margin: 0;
862
+ font-size: 1.4rem;
863
+ font-weight: 650;
864
+ letter-spacing: -0.01em;
865
+ }
866
+
867
+ .voxx-release__version a {
868
+ color: var(--foreground, var(--voxx-fg));
869
+ text-decoration: none;
870
+ }
871
+
872
+ .voxx-release__version a:hover {
873
+ color: var(--primary, var(--voxx-link));
874
+ }
875
+
876
+ .voxx-release__header time {
877
+ font-size: 0.875rem;
878
+ color: var(--muted-foreground, var(--voxx-muted-fg));
879
+ }
880
+
881
+ .voxx-pager {
882
+ display: flex;
883
+ justify-content: space-between;
884
+ gap: 1rem;
885
+ margin-top: 3rem;
886
+ padding-top: 1.5rem;
887
+ border-top: 1px solid var(--border, var(--voxx-border));
888
+ }
889
+
890
+ .voxx-pager__link {
891
+ display: flex;
892
+ flex-direction: column;
893
+ gap: 0.2rem;
894
+ max-width: 48%;
895
+ text-decoration: none;
896
+ }
897
+
898
+ .voxx-pager__link--next {
899
+ text-align: right;
900
+ margin-left: auto;
901
+ }
902
+
903
+ .voxx-pager__label {
904
+ font-size: 0.75rem;
905
+ color: var(--muted-foreground, var(--voxx-muted-fg));
906
+ }
907
+
908
+ .voxx-pager__title {
909
+ font-weight: 600;
910
+ color: var(--foreground, var(--voxx-fg));
911
+ }
912
+
913
+ .voxx-pager__link:hover .voxx-pager__title {
914
+ color: var(--primary, var(--voxx-link));
915
+ }