@aravindc26/velu 0.11.0 → 0.11.3

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 (60) hide show
  1. package/package.json +15 -6
  2. package/schema/velu.schema.json +1251 -115
  3. package/src/build.ts +1121 -304
  4. package/src/cli.ts +90 -26
  5. package/src/engine/_server.mjs +1684 -277
  6. package/src/engine/app/(docs)/[...slug]/layout.tsx +371 -0
  7. package/src/engine/app/(docs)/[...slug]/page.tsx +926 -0
  8. package/src/engine/app/api/proxy/route.ts +23 -0
  9. package/src/engine/app/copy-page.css +59 -1
  10. package/src/engine/app/global.css +3157 -3
  11. package/src/engine/app/layout.tsx +56 -1
  12. package/src/engine/app/llms-file/route.ts +87 -0
  13. package/src/engine/app/llms-full-file/route.ts +62 -0
  14. package/src/engine/app/md-file/[...slug]/route.ts +409 -0
  15. package/src/engine/app/page.tsx +45 -0
  16. package/src/engine/app/robots.txt/route.ts +63 -0
  17. package/src/engine/app/rss-file/[...slug]/route.ts +169 -0
  18. package/src/engine/app/sitemap.xml/route.ts +82 -0
  19. package/src/engine/components/assistant.tsx +16 -5
  20. package/src/engine/components/changelog-filters.tsx +114 -0
  21. package/src/engine/components/code-group.tsx +383 -0
  22. package/src/engine/components/color.tsx +118 -0
  23. package/src/engine/components/expandable.tsx +77 -0
  24. package/src/engine/components/icon.tsx +136 -0
  25. package/src/engine/components/image-zoom-fallback.tsx +147 -0
  26. package/src/engine/components/image.tsx +111 -0
  27. package/src/engine/components/manual-api-playground.tsx +154 -0
  28. package/src/engine/components/mermaid.tsx +142 -0
  29. package/src/engine/components/openapi-toc-sync.tsx +59 -0
  30. package/src/engine/components/openapi.tsx +1682 -0
  31. package/src/engine/components/page-feedback.tsx +153 -0
  32. package/src/engine/components/product-switcher.tsx +27 -3
  33. package/src/engine/components/prompt.tsx +90 -0
  34. package/src/engine/components/providers.tsx +1 -6
  35. package/src/engine/components/search.tsx +4 -0
  36. package/src/engine/components/sidebar-links.tsx +13 -15
  37. package/src/engine/components/synced-tabs.tsx +57 -0
  38. package/src/engine/components/toc-examples.tsx +110 -0
  39. package/src/engine/components/view.tsx +344 -0
  40. package/src/engine/generated/redirects.ts +3 -0
  41. package/src/engine/lib/changelog.ts +246 -0
  42. package/src/engine/lib/layout.shared.ts +30 -2
  43. package/src/engine/lib/llms.ts +444 -0
  44. package/src/engine/lib/navigation-normalize.mjs +481 -412
  45. package/src/engine/lib/navigation-normalize.ts +261 -54
  46. package/src/engine/lib/redirects.ts +194 -0
  47. package/src/engine/lib/source.ts +107 -4
  48. package/src/engine/lib/velu.ts +368 -2
  49. package/src/engine/mdx-components.tsx +648 -0
  50. package/src/engine/middleware.ts +66 -0
  51. package/src/engine/public/icons/cursor-dark.svg +12 -0
  52. package/src/engine/public/icons/cursor-light.svg +12 -0
  53. package/src/engine/source.config.ts +98 -1
  54. package/src/engine/src/components/PageTitle.astro +16 -5
  55. package/src/engine/src/lib/velu.ts +11 -3
  56. package/src/navigation-normalize.ts +252 -54
  57. package/src/themes.ts +6 -6
  58. package/src/validate.ts +119 -6
  59. package/src/engine/app/(docs)/[[...slug]]/layout.tsx +0 -87
  60. package/src/engine/app/(docs)/[[...slug]]/page.tsx +0 -146
@@ -1,11 +1,56 @@
1
1
  @import 'tailwindcss';
2
2
  @import 'fumadocs-ui/css/preset.css';
3
+ @import 'fumadocs-openapi/css/preset.css';
3
4
  @import './velu-theme.css';
4
5
 
5
6
  body {
6
7
  min-height: 100vh;
7
8
  }
8
9
 
10
+ .velu-nav-brand {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ gap: 0.25rem;
14
+ max-width: 100%;
15
+ }
16
+
17
+ .velu-nav-logo {
18
+ display: block;
19
+ height: 1.95rem;
20
+ width: auto;
21
+ max-width: 190px;
22
+ }
23
+
24
+ .velu-nav-logo-dark {
25
+ display: none;
26
+ }
27
+
28
+ .dark .velu-nav-logo-light {
29
+ display: none;
30
+ }
31
+
32
+ .dark .velu-nav-logo-dark {
33
+ display: block;
34
+ }
35
+
36
+ /* Keep sidebar brand and collapse control aligned like Mintlify. */
37
+ #nd-sidebar .flex.justify-between {
38
+ width: 100%;
39
+ display: grid;
40
+ grid-template-columns: minmax(0, 1fr) auto;
41
+ align-items: center;
42
+ column-gap: 0.5rem;
43
+ }
44
+
45
+ #nd-sidebar .flex.justify-between > a {
46
+ min-width: 0;
47
+ overflow: hidden;
48
+ }
49
+
50
+ #nd-sidebar .flex.justify-between > button {
51
+ margin-left: auto;
52
+ }
53
+
9
54
  /* Ensure sidebar/toc widths are set on the grid layout */
10
55
  nextjs-portal {
11
56
  display: none !important;
@@ -17,17 +62,88 @@ nextjs-portal {
17
62
  }
18
63
  }
19
64
 
20
- @media (min-width: 1280px) {
21
- #nd-docs-layout {
65
+ @media (min-width: 1024px) {
66
+ #nd-docs-layout,
67
+ #nd-notebook-layout {
22
68
  --fd-toc-width: 268px;
23
69
  }
70
+
71
+ #nd-docs-layout:has(#nd-toc .velu-api-toc-rail),
72
+ #nd-notebook-layout:has(#nd-toc .velu-api-toc-rail) {
73
+ --fd-toc-width: clamp(420px, 32vw, 560px);
74
+ }
75
+
76
+ /* Override notebook's default xl TOC width reset for API example rail. */
77
+ #nd-toc:has(.velu-api-toc-rail) {
78
+ --fd-toc-width: clamp(420px, 32vw, 560px);
79
+ width: var(--fd-toc-width);
80
+ padding-top: 0;
81
+ overflow-y: auto;
82
+ overflow-x: hidden;
83
+ }
84
+
85
+ /* Notebook header: keep tabs on the left and move search to the far right. */
86
+ #nd-subnav [data-header-body] > button[data-search-full] {
87
+ order: 3;
88
+ margin-left: auto;
89
+ width: min(280px, 28vw);
90
+ max-width: 280px;
91
+ min-width: 220px;
92
+ flex: 0 0 auto;
93
+ }
94
+
95
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 {
96
+ order: 2;
97
+ flex: 0 1 auto;
98
+ justify-content: flex-start;
99
+ margin-right: auto;
100
+ }
101
+
102
+ /* Top bar tabs: active underline like Mintlify. */
103
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden {
104
+ align-self: stretch;
105
+ }
106
+
107
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > a,
108
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > button {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ height: 100%;
112
+ font-size: 1.05rem;
113
+ font-weight: 700;
114
+ border-bottom: 2px solid transparent;
115
+ margin-bottom: -1px;
116
+ }
117
+
118
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > button {
119
+ background: transparent;
120
+ padding-inline: 0;
121
+ border-radius: 0;
122
+ }
123
+
124
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > a[data-active='true'],
125
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > button:has(a[data-active='true']),
126
+ #nd-subnav [data-header-body] > div.flex.flex-1.items-center.justify-end.md\:gap-2 > div.flex.items-center.gap-6.empty\:hidden.max-lg\:hidden > button[data-state='open'] {
127
+ border-bottom-color: var(--color-fd-primary);
128
+ }
24
129
  }
25
130
 
26
131
  .velu-sidebar-footer {
27
132
  display: flex;
28
133
  flex-direction: column;
29
134
  gap: 0.5rem;
30
- padding-top: 0.5rem;
135
+ }
136
+
137
+ .velu-sidebar-footer-shell {
138
+ border-top: 1px solid var(--color-fd-border);
139
+ padding: 0.75rem 1rem 1rem;
140
+ }
141
+
142
+ .velu-sidebar-footer-icons {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 0.35rem;
146
+ margin-bottom: 0.35rem;
31
147
  }
32
148
 
33
149
  .velu-sidebar-banner {
@@ -156,6 +272,20 @@ nextjs-portal {
156
272
  text-align: left;
157
273
  }
158
274
 
275
+ .velu-product-switcher-label-wrap {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ gap: 0.4rem;
279
+ min-width: 0;
280
+ }
281
+
282
+ .velu-product-icon {
283
+ width: 0.9rem;
284
+ height: 0.9rem;
285
+ flex-shrink: 0;
286
+ opacity: 0.75;
287
+ }
288
+
159
289
  .velu-product-menu {
160
290
  position: absolute;
161
291
  top: calc(100% + 0.25rem);
@@ -196,6 +326,19 @@ nextjs-portal {
196
326
  color: var(--color-fd-foreground);
197
327
  }
198
328
 
329
+ .velu-product-option-name-wrap {
330
+ display: inline-flex;
331
+ align-items: center;
332
+ gap: 0.4rem;
333
+ }
334
+
335
+ .velu-product-option-icon {
336
+ width: 0.9rem;
337
+ height: 0.9rem;
338
+ flex-shrink: 0;
339
+ opacity: 0.75;
340
+ }
341
+
199
342
  .velu-product-option.active .velu-product-option-name {
200
343
  color: var(--color-fd-primary);
201
344
  }
@@ -239,6 +382,20 @@ nextjs-portal {
239
382
  flex: 1;
240
383
  }
241
384
 
385
+ .velu-sidebar-link-left {
386
+ display: inline-flex;
387
+ align-items: center;
388
+ gap: 0.4rem;
389
+ min-width: 0;
390
+ }
391
+
392
+ .velu-sidebar-link-leading-icon {
393
+ width: 0.875rem;
394
+ height: 0.875rem;
395
+ opacity: 0.7;
396
+ flex-shrink: 0;
397
+ }
398
+
242
399
  .velu-sidebar-link-icon {
243
400
  width: 0.875rem;
244
401
  height: 0.875rem;
@@ -250,6 +407,82 @@ nextjs-portal {
250
407
  opacity: 0.8;
251
408
  }
252
409
 
410
+ .velu-status-badge {
411
+ display: inline-flex;
412
+ align-items: center;
413
+ margin-inline-start: 0.45rem;
414
+ padding: 0.06rem 0.38rem;
415
+ border-radius: 999px;
416
+ border: 1px solid var(--color-fd-border);
417
+ font-size: 0.62rem;
418
+ font-weight: 650;
419
+ line-height: 1.2;
420
+ color: var(--color-fd-muted-foreground);
421
+ text-transform: uppercase;
422
+ letter-spacing: 0.02em;
423
+ }
424
+
425
+ .velu-status-badge-deprecated {
426
+ border-color: color-mix(in oklab, #f59e0b 52%, var(--color-fd-border));
427
+ background: color-mix(in oklab, #f59e0b 14%, transparent);
428
+ color: #f59e0b;
429
+ }
430
+
431
+ .velu-openapi-sidebar-item {
432
+ display: inline-flex;
433
+ align-items: center;
434
+ gap: 0.55rem;
435
+ min-width: 0;
436
+ }
437
+
438
+ .velu-openapi-sidebar-label {
439
+ min-width: 0;
440
+ }
441
+
442
+ .velu-openapi-method-badge {
443
+ display: inline-flex;
444
+ align-items: center;
445
+ justify-content: center;
446
+ border-radius: 999px;
447
+ padding: 0.06rem 0.43rem;
448
+ font-size: 0.66rem;
449
+ font-weight: 700;
450
+ line-height: 1.2;
451
+ text-transform: uppercase;
452
+ letter-spacing: 0.01em;
453
+ flex-shrink: 0;
454
+ }
455
+
456
+ .velu-openapi-method-get {
457
+ background: color-mix(in oklab, #16a34a 20%, transparent);
458
+ color: #22c55e;
459
+ }
460
+
461
+ .velu-openapi-method-post {
462
+ background: color-mix(in oklab, #2563eb 20%, transparent);
463
+ color: #60a5fa;
464
+ }
465
+
466
+ .velu-openapi-method-put {
467
+ background: color-mix(in oklab, #ca8a04 20%, transparent);
468
+ color: #facc15;
469
+ }
470
+
471
+ .velu-openapi-method-patch {
472
+ background: color-mix(in oklab, #ea580c 20%, transparent);
473
+ color: #fb923c;
474
+ }
475
+
476
+ .velu-openapi-method-delete {
477
+ background: color-mix(in oklab, #dc2626 20%, transparent);
478
+ color: #f87171;
479
+ }
480
+
481
+ .velu-openapi-method-webhook {
482
+ background: color-mix(in oklab, #8b5cf6 20%, transparent);
483
+ color: #c4b5fd;
484
+ }
485
+
253
486
  .velu-theme-toggle {
254
487
  display: flex;
255
488
  align-items: center;
@@ -355,6 +588,284 @@ nextjs-portal {
355
588
  color: var(--color-fd-muted-foreground);
356
589
  }
357
590
 
591
+ .velu-page-feedback-wrap {
592
+ margin-top: 2.75rem;
593
+ display: grid;
594
+ gap: 0.85rem;
595
+ }
596
+
597
+ .velu-page-feedback-block {
598
+ display: grid;
599
+ gap: 0.85rem;
600
+ }
601
+
602
+ .velu-page-feedback-row {
603
+ display: flex;
604
+ align-items: center;
605
+ justify-content: space-between;
606
+ gap: 0.75rem;
607
+ flex-wrap: wrap;
608
+ }
609
+
610
+ .velu-page-feedback-question {
611
+ margin: 0;
612
+ font-size: 0.82rem;
613
+ font-weight: 500;
614
+ line-height: 1.35;
615
+ color: var(--color-fd-foreground);
616
+ }
617
+
618
+ .velu-page-feedback-actions {
619
+ display: inline-flex;
620
+ align-items: center;
621
+ gap: 0.5rem;
622
+ }
623
+
624
+ .velu-page-feedback-btn {
625
+ display: inline-flex;
626
+ align-items: center;
627
+ gap: 0.45rem;
628
+ border: 1px solid var(--color-fd-border);
629
+ border-radius: 999px;
630
+ background: transparent;
631
+ color: var(--color-fd-muted-foreground);
632
+ height: 1.72rem;
633
+ padding: 0 0.6rem;
634
+ font-size: 0.82rem;
635
+ font-weight: 500;
636
+ line-height: 1;
637
+ cursor: pointer;
638
+ transition: color 0.15s, border-color 0.15s, background-color 0.15s;
639
+ }
640
+
641
+ .velu-page-feedback-btn:hover {
642
+ color: var(--color-fd-foreground);
643
+ border-color: color-mix(in oklab, var(--color-fd-primary) 45%, var(--color-fd-border));
644
+ background: color-mix(in oklab, var(--color-fd-primary) 8%, transparent);
645
+ }
646
+
647
+ .velu-page-feedback-btn.is-active {
648
+ color: var(--color-fd-foreground);
649
+ border-color: color-mix(in oklab, var(--color-fd-primary) 55%, var(--color-fd-border));
650
+ }
651
+
652
+ .velu-page-feedback-btn svg {
653
+ width: 0.76rem;
654
+ height: 0.76rem;
655
+ stroke: currentColor;
656
+ fill: none;
657
+ stroke-width: 1.9;
658
+ stroke-linecap: round;
659
+ stroke-linejoin: round;
660
+ }
661
+
662
+ .velu-page-feedback-panel {
663
+ border-top: 1px solid var(--color-fd-border);
664
+ padding-top: 1rem;
665
+ display: grid;
666
+ gap: 0.85rem;
667
+ }
668
+
669
+ .velu-page-feedback-panel-title {
670
+ margin: 0;
671
+ font-size: 0.95rem;
672
+ line-height: 1.35;
673
+ font-weight: 600;
674
+ color: var(--color-fd-foreground);
675
+ }
676
+
677
+ .velu-page-feedback-options {
678
+ display: grid;
679
+ gap: 0.35rem;
680
+ }
681
+
682
+ .velu-page-feedback-option {
683
+ border: 0;
684
+ background: transparent;
685
+ display: inline-flex;
686
+ align-items: center;
687
+ gap: 0.6rem;
688
+ width: fit-content;
689
+ max-width: 100%;
690
+ color: var(--color-fd-muted-foreground);
691
+ font-size: 0.82rem;
692
+ line-height: 1.35;
693
+ text-align: left;
694
+ padding: 0.12rem 0;
695
+ cursor: pointer;
696
+ }
697
+
698
+ .velu-page-feedback-option:hover {
699
+ color: var(--color-fd-foreground);
700
+ }
701
+
702
+ .velu-page-feedback-option.is-checked {
703
+ color: var(--color-fd-foreground);
704
+ }
705
+
706
+ .velu-page-feedback-radio {
707
+ width: 1rem;
708
+ height: 1rem;
709
+ border-radius: 999px;
710
+ border: 1px solid color-mix(in oklab, var(--color-fd-muted-foreground) 50%, var(--color-fd-border));
711
+ box-shadow: inset 0 0 0 0 transparent;
712
+ flex-shrink: 0;
713
+ transition: border-color 0.15s, box-shadow 0.15s, background-color 0.15s;
714
+ }
715
+
716
+ .velu-page-feedback-option.is-checked .velu-page-feedback-radio {
717
+ border-color: var(--color-fd-primary);
718
+ background: color-mix(in oklab, var(--color-fd-primary) 16%, transparent);
719
+ box-shadow: inset 0 0 0 3px var(--color-fd-primary);
720
+ }
721
+
722
+ .velu-page-feedback-inputs {
723
+ display: grid;
724
+ gap: 0.6rem;
725
+ }
726
+
727
+ .velu-page-feedback-input {
728
+ width: 100%;
729
+ border: 1px solid var(--color-fd-border);
730
+ border-radius: 0.75rem;
731
+ background: transparent;
732
+ color: var(--color-fd-foreground);
733
+ font: inherit;
734
+ font-size: 0.82rem;
735
+ line-height: 1.35;
736
+ padding: 0.68rem 0.8rem;
737
+ }
738
+
739
+ .velu-page-feedback-input::placeholder {
740
+ color: var(--color-fd-muted-foreground);
741
+ }
742
+
743
+ .velu-page-feedback-input:focus {
744
+ outline: none;
745
+ border-color: color-mix(in oklab, var(--color-fd-primary) 55%, var(--color-fd-border));
746
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--color-fd-primary) 22%, transparent);
747
+ }
748
+
749
+ .velu-page-feedback-cta {
750
+ display: inline-flex;
751
+ align-items: center;
752
+ gap: 0.55rem;
753
+ }
754
+
755
+ .velu-page-feedback-cancel,
756
+ .velu-page-feedback-submit {
757
+ border-radius: 999px;
758
+ height: 2rem;
759
+ padding: 0 0.9rem;
760
+ font: inherit;
761
+ font-size: 0.82rem;
762
+ font-weight: 500;
763
+ line-height: 1;
764
+ cursor: pointer;
765
+ }
766
+
767
+ .velu-page-feedback-cancel {
768
+ border: 1px solid var(--color-fd-border);
769
+ background: transparent;
770
+ color: var(--color-fd-muted-foreground);
771
+ }
772
+
773
+ .velu-page-feedback-cancel:hover {
774
+ color: var(--color-fd-foreground);
775
+ border-color: color-mix(in oklab, var(--color-fd-primary) 35%, var(--color-fd-border));
776
+ }
777
+
778
+ .velu-page-feedback-submit {
779
+ border: 1px solid color-mix(in oklab, var(--color-fd-primary) 45%, var(--color-fd-border));
780
+ background: var(--color-fd-foreground);
781
+ color: var(--color-fd-background);
782
+ }
783
+
784
+ .velu-page-feedback-submit:hover {
785
+ filter: brightness(0.96);
786
+ }
787
+
788
+ .velu-page-nav-grid {
789
+ display: grid;
790
+ gap: 0.85rem;
791
+ }
792
+
793
+ .velu-page-nav-grid-one {
794
+ grid-template-columns: 1fr;
795
+ }
796
+
797
+ .velu-page-nav-grid-two {
798
+ grid-template-columns: repeat(2, minmax(0, 1fr));
799
+ }
800
+
801
+ .velu-page-nav-card {
802
+ display: flex;
803
+ flex-direction: column;
804
+ gap: 0.35rem;
805
+ border: 1px solid var(--color-fd-border);
806
+ border-radius: 0.85rem;
807
+ padding: 1rem 1.1rem;
808
+ text-decoration: none;
809
+ color: inherit;
810
+ transition: border-color 0.15s, background-color 0.15s;
811
+ }
812
+
813
+ .velu-page-nav-card:hover {
814
+ border-color: color-mix(in oklab, var(--color-fd-primary) 45%, var(--color-fd-border));
815
+ background: color-mix(in oklab, var(--color-fd-primary) 8%, transparent);
816
+ }
817
+
818
+ .velu-page-nav-card-next {
819
+ text-align: right;
820
+ }
821
+
822
+ .velu-page-nav-title {
823
+ margin: 0;
824
+ font-size: 1rem;
825
+ font-weight: 600;
826
+ color: var(--color-fd-foreground);
827
+ line-height: 1.25;
828
+ }
829
+
830
+ .velu-page-nav-meta {
831
+ margin: 0;
832
+ display: inline-flex;
833
+ align-items: center;
834
+ gap: 0.35rem;
835
+ color: var(--color-fd-muted-foreground);
836
+ font-size: 0.95rem;
837
+ line-height: 1.35;
838
+ }
839
+
840
+ .velu-page-nav-meta-next {
841
+ justify-content: flex-end;
842
+ }
843
+
844
+ .velu-page-nav-meta svg {
845
+ width: 0.95rem;
846
+ height: 0.95rem;
847
+ stroke: currentColor;
848
+ fill: none;
849
+ stroke-width: 2;
850
+ stroke-linecap: round;
851
+ stroke-linejoin: round;
852
+ flex-shrink: 0;
853
+ }
854
+
855
+ @media (max-width: 768px) {
856
+ .velu-page-nav-grid-two {
857
+ grid-template-columns: 1fr;
858
+ }
859
+
860
+ .velu-page-nav-card-next {
861
+ text-align: left;
862
+ }
863
+
864
+ .velu-page-nav-meta-next {
865
+ justify-content: flex-start;
866
+ }
867
+ }
868
+
358
869
  .velu-footer a {
359
870
  color: var(--color-fd-primary);
360
871
  font-weight: 600;
@@ -364,3 +875,2646 @@ nextjs-portal {
364
875
  .velu-footer a:hover {
365
876
  text-decoration: underline;
366
877
  }
878
+
879
+ [data-card].velu-card-horizontal {
880
+ display: grid !important;
881
+ grid-template-columns: 2.25rem minmax(0, 1fr);
882
+ column-gap: 0.75rem;
883
+ align-items: start !important;
884
+ }
885
+
886
+ [data-card].velu-card-horizontal > div.not-prose {
887
+ grid-row: 1 / span 3;
888
+ margin-bottom: 0;
889
+ margin-top: 0.02rem;
890
+ align-self: start;
891
+ justify-self: start;
892
+ }
893
+
894
+ [data-card].velu-card-horizontal > h3 {
895
+ margin-bottom: 0.25rem;
896
+ }
897
+
898
+ .velu-card-group {
899
+ display: grid !important;
900
+ grid-template-columns: repeat(var(--velu-card-cols, 2), minmax(0, 1fr));
901
+ gap: 0.75rem !important;
902
+ }
903
+
904
+ .velu-card-group > [data-card] {
905
+ margin: 0 !important;
906
+ }
907
+
908
+ .velu-card-image {
909
+ width: 100%;
910
+ border-radius: 0.55rem;
911
+ margin-bottom: 0.65rem;
912
+ border: 1px solid var(--color-fd-border);
913
+ }
914
+
915
+ [data-card].velu-card {
916
+ display: flex;
917
+ flex-direction: column;
918
+ height: 100%;
919
+ border: 1px solid var(--color-fd-border);
920
+ background: color-mix(in oklab, var(--color-fd-background) 92%, var(--color-fd-card));
921
+ }
922
+
923
+ [data-card].velu-card,
924
+ .velu-card-group > [data-card] {
925
+ transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
926
+ }
927
+
928
+ [data-card].velu-card:hover,
929
+ .velu-card-group > [data-card]:hover {
930
+ /* Keep card surface stable on hover and emphasize border instead. */
931
+ background: color-mix(in oklab, var(--color-fd-background) 92%, var(--color-fd-card)) !important;
932
+ border-color: color-mix(in oklab, var(--color-fd-primary) 72%, var(--color-fd-border));
933
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--color-fd-primary) 28%, transparent);
934
+ }
935
+
936
+ /* Mintlify-like icon chip styling inside cards. */
937
+ [data-card].velu-card > div.not-prose {
938
+ background: transparent !important;
939
+ border: 0 !important;
940
+ color: var(--color-fd-primary) !important;
941
+ box-shadow: none !important;
942
+ width: 2.25rem;
943
+ height: 2.25rem;
944
+ padding: 0 !important;
945
+ border-radius: 0.7rem !important;
946
+ display: inline-flex;
947
+ align-items: center;
948
+ justify-content: center;
949
+ margin-bottom: 0.55rem;
950
+ }
951
+
952
+ [data-card].velu-card > div.not-prose svg,
953
+ [data-card].velu-card > div.not-prose img {
954
+ width: 1.6rem;
955
+ height: 1.6rem;
956
+ }
957
+
958
+ [data-card].velu-card > h3 {
959
+ margin-top: 0.04rem;
960
+ }
961
+
962
+ [data-card].velu-card + [data-card].velu-card {
963
+ margin-top: 0.75rem !important;
964
+ }
965
+
966
+ .velu-card-group > [data-card].velu-card + [data-card].velu-card {
967
+ margin-top: 0 !important;
968
+ }
969
+
970
+ [data-card].velu-card > div:last-child {
971
+ display: flex;
972
+ flex-direction: column;
973
+ flex: 1;
974
+ }
975
+
976
+ .velu-card-cta {
977
+ display: inline-flex;
978
+ align-items: center;
979
+ gap: 0.3rem;
980
+ margin-top: auto;
981
+ padding-top: 0.55rem;
982
+ font-size: 0.82rem;
983
+ font-weight: 600;
984
+ color: var(--color-fd-primary);
985
+ }
986
+
987
+ .velu-card-cta-arrow {
988
+ width: 0.95rem;
989
+ height: 0.95rem;
990
+ }
991
+
992
+ .velu-card-color-blue {
993
+ border-color: rgba(37, 99, 235, 0.3);
994
+ }
995
+
996
+ .velu-card-color-green {
997
+ border-color: rgba(22, 163, 74, 0.3);
998
+ }
999
+
1000
+ .velu-card-color-yellow {
1001
+ border-color: rgba(245, 158, 11, 0.35);
1002
+ }
1003
+
1004
+ .velu-card-color-red {
1005
+ border-color: rgba(220, 38, 38, 0.3);
1006
+ }
1007
+
1008
+ .velu-card-color-purple {
1009
+ border-color: rgba(147, 51, 234, 0.3);
1010
+ }
1011
+
1012
+ .velu-card-color-orange {
1013
+ border-color: rgba(234, 88, 12, 0.3);
1014
+ }
1015
+
1016
+ .velu-card-color-gray {
1017
+ border-color: rgba(148, 163, 184, 0.35);
1018
+ }
1019
+
1020
+ .velu-accordions,
1021
+ .velu-code-group,
1022
+ .velu-properties,
1023
+ .velu-param-field,
1024
+ .velu-response-field {
1025
+ display: grid;
1026
+ gap: 0.75rem;
1027
+ }
1028
+
1029
+ .velu-step-title {
1030
+ margin: 0 0 0.35rem;
1031
+ font-weight: 600;
1032
+ }
1033
+
1034
+ .velu-tabs-border-bottom {
1035
+ border-bottom: 1px solid var(--color-fd-border);
1036
+ padding-bottom: 0.75rem;
1037
+ margin-bottom: 0.75rem;
1038
+ }
1039
+
1040
+ .velu-tabs-plain [role='tablist'] {
1041
+ gap: 1rem;
1042
+ margin-bottom: 0.45rem;
1043
+ }
1044
+
1045
+ .velu-code-group-dropdown {
1046
+ border: 1px solid var(--color-fd-border);
1047
+ border-radius: 0.85rem;
1048
+ overflow: visible;
1049
+ gap: 0;
1050
+ }
1051
+
1052
+ .velu-code-group-tabs {
1053
+ border: 1px solid var(--color-fd-border);
1054
+ border-radius: 0.85rem;
1055
+ overflow: hidden;
1056
+ gap: 0;
1057
+ }
1058
+
1059
+ .velu-code-group-tabs-head {
1060
+ display: flex;
1061
+ flex-wrap: wrap;
1062
+ align-items: flex-end;
1063
+ gap: 0.12rem;
1064
+ min-height: 1.9rem;
1065
+ padding: 0 0.45rem 0;
1066
+ border-bottom: 1px solid var(--color-fd-border);
1067
+ background: color-mix(in oklab, var(--color-fd-card) 82%, transparent);
1068
+ }
1069
+
1070
+ .velu-code-group-tab-btn {
1071
+ display: inline-flex;
1072
+ align-items: center;
1073
+ align-self: flex-end;
1074
+ gap: 0.28rem;
1075
+ border: 0;
1076
+ border-bottom: 2px solid transparent;
1077
+ border-radius: 0.35rem 0.35rem 0 0;
1078
+ padding: 0 0.28rem 0.06rem;
1079
+ background: transparent;
1080
+ color: var(--color-fd-muted-foreground);
1081
+ font-size: 0.82rem;
1082
+ font-weight: 600;
1083
+ line-height: 1;
1084
+ cursor: pointer;
1085
+ min-height: 0;
1086
+ }
1087
+
1088
+ .velu-code-group-tab-btn > span:last-child,
1089
+ .velu-code-group-file > span:last-child,
1090
+ .velu-code-group-select-btn > span:nth-child(2),
1091
+ .velu-code-group-select-item > span:nth-child(2) {
1092
+ padding-top: 0.08rem;
1093
+ padding-bottom: 0.16rem;
1094
+ }
1095
+
1096
+ .velu-code-group-tab-btn.is-active {
1097
+ color: var(--color-fd-primary);
1098
+ border-bottom-color: var(--color-fd-primary);
1099
+ }
1100
+
1101
+ .velu-code-group-dropdown-head {
1102
+ display: flex;
1103
+ align-items: center;
1104
+ justify-content: space-between;
1105
+ gap: 0.75rem;
1106
+ padding: 0.7rem 0.9rem;
1107
+ border-bottom: 1px solid var(--color-fd-border);
1108
+ background: color-mix(in oklab, var(--color-fd-card) 82%, transparent);
1109
+ }
1110
+
1111
+ .velu-code-group-file {
1112
+ display: inline-flex;
1113
+ align-items: center;
1114
+ gap: 0.45rem;
1115
+ font-size: 0.95rem;
1116
+ font-weight: 600;
1117
+ color: var(--color-fd-foreground);
1118
+ }
1119
+
1120
+ .velu-code-group-select-wrap {
1121
+ position: relative;
1122
+ min-width: 10rem;
1123
+ }
1124
+
1125
+ .velu-code-group-select-btn {
1126
+ width: 100%;
1127
+ display: inline-flex;
1128
+ align-items: center;
1129
+ justify-content: space-between;
1130
+ gap: 0.45rem;
1131
+ border: 1px solid var(--color-fd-border);
1132
+ border-radius: 0.65rem;
1133
+ padding: 0.35rem 0.55rem;
1134
+ background: var(--color-fd-background);
1135
+ color: var(--color-fd-foreground);
1136
+ font-size: 0.9rem;
1137
+ cursor: pointer;
1138
+ }
1139
+
1140
+ .velu-code-group-caret {
1141
+ opacity: 0.7;
1142
+ font-size: 0.9rem;
1143
+ }
1144
+
1145
+ .velu-code-group-select-menu {
1146
+ position: absolute;
1147
+ top: calc(100% + 0.35rem);
1148
+ right: 0;
1149
+ min-width: 12rem;
1150
+ border: 1px solid var(--color-fd-border);
1151
+ border-radius: 0.75rem;
1152
+ background: var(--color-fd-popover);
1153
+ padding: 0.3rem;
1154
+ z-index: 20;
1155
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.24);
1156
+ }
1157
+
1158
+ .velu-code-group-select-item {
1159
+ width: 100%;
1160
+ display: inline-flex;
1161
+ align-items: center;
1162
+ gap: 0.5rem;
1163
+ border: 0;
1164
+ border-radius: 0.55rem;
1165
+ padding: 0.45rem 0.5rem;
1166
+ background: transparent;
1167
+ color: var(--color-fd-foreground);
1168
+ text-align: left;
1169
+ cursor: pointer;
1170
+ }
1171
+
1172
+ .velu-code-group-select-item:hover {
1173
+ background: var(--color-fd-accent);
1174
+ }
1175
+
1176
+ .velu-code-group-select-item.is-active {
1177
+ color: var(--color-fd-primary);
1178
+ }
1179
+
1180
+ .velu-code-group-check {
1181
+ margin-left: auto;
1182
+ color: var(--color-fd-primary);
1183
+ }
1184
+
1185
+ .velu-code-group-dropdown-body {
1186
+ padding: 0;
1187
+ overflow: hidden;
1188
+ border-bottom-left-radius: 0.85rem;
1189
+ border-bottom-right-radius: 0.85rem;
1190
+ }
1191
+
1192
+ .velu-code-group-dropdown-body > * {
1193
+ margin-top: 0 !important;
1194
+ margin-bottom: 0 !important;
1195
+ border-top-left-radius: 0;
1196
+ border-top-right-radius: 0;
1197
+ border-bottom-left-radius: 0.85rem;
1198
+ border-bottom-right-radius: 0.85rem;
1199
+ }
1200
+
1201
+ .velu-lang-icon {
1202
+ display: inline-flex;
1203
+ align-items: center;
1204
+ justify-content: center;
1205
+ width: 1.15rem;
1206
+ height: 1.15rem;
1207
+ border-radius: 0.28rem;
1208
+ font-size: 0.58rem;
1209
+ font-weight: 700;
1210
+ line-height: 1;
1211
+ background: color-mix(in oklab, var(--color-fd-muted-foreground) 22%, transparent);
1212
+ color: var(--color-fd-foreground);
1213
+ }
1214
+
1215
+ .velu-lang-icon-img {
1216
+ width: 0.72rem;
1217
+ height: 0.72rem;
1218
+ display: block;
1219
+ border-radius: 0.16rem;
1220
+ object-fit: contain;
1221
+ flex-shrink: 0;
1222
+ }
1223
+
1224
+ .velu-code-group .velu-lang-icon-img,
1225
+ .velu-code-group-tabs-head .velu-lang-icon-img,
1226
+ .velu-code-group-dropdown-head .velu-lang-icon-img,
1227
+ .velu-code-group-select-item .velu-lang-icon-img {
1228
+ margin: 0 !important;
1229
+ }
1230
+
1231
+ .velu-lang-javascript {
1232
+ background: rgba(16, 185, 129, 0.2);
1233
+ color: #34d399;
1234
+ }
1235
+
1236
+ .velu-lang-typescript {
1237
+ background: rgba(59, 130, 246, 0.2);
1238
+ color: #60a5fa;
1239
+ }
1240
+
1241
+ .velu-lang-python {
1242
+ background: rgba(245, 158, 11, 0.2);
1243
+ color: #fbbf24;
1244
+ }
1245
+
1246
+ .velu-lang-java {
1247
+ background: rgba(239, 68, 68, 0.2);
1248
+ color: #f87171;
1249
+ }
1250
+
1251
+ .velu-accordion,
1252
+ .velu-expandable {
1253
+ border: 1px solid var(--color-fd-border);
1254
+ border-radius: 0.6rem;
1255
+ background: var(--color-fd-card);
1256
+ overflow: hidden;
1257
+ }
1258
+
1259
+ .velu-accordion > summary,
1260
+ .velu-expandable > summary {
1261
+ cursor: pointer;
1262
+ font-weight: 600;
1263
+ padding: 0.7rem 0.85rem;
1264
+ }
1265
+
1266
+ .velu-accordion-content,
1267
+ .velu-expandable-content {
1268
+ padding: 0 0.85rem 0.85rem;
1269
+ }
1270
+
1271
+ .velu-frame {
1272
+ --velu-frame-gap-bg: #e5e7eb;
1273
+ border: 1px solid var(--color-fd-border);
1274
+ border-radius: 0.65rem;
1275
+ overflow: hidden;
1276
+ margin: 1rem 0;
1277
+ }
1278
+
1279
+ :root[data-theme='dark'] .velu-frame,
1280
+ .dark .velu-frame {
1281
+ --velu-frame-gap-bg: #2f2f2f;
1282
+ }
1283
+
1284
+ .velu-frame-content {
1285
+ padding: 0.45rem;
1286
+ background: var(--velu-frame-gap-bg);
1287
+ }
1288
+
1289
+ .velu-frame-content img {
1290
+ display: block;
1291
+ width: 100%;
1292
+ height: auto;
1293
+ margin: 0 !important;
1294
+ border-radius: 0.45rem;
1295
+ }
1296
+
1297
+ .velu-frame-hint {
1298
+ display: flex;
1299
+ align-items: center;
1300
+ gap: 0.5rem;
1301
+ padding: 0;
1302
+ margin: 0 0 0.55rem;
1303
+ border: 0;
1304
+ font-size: 1.05rem;
1305
+ line-height: 1.4;
1306
+ color: var(--color-fd-foreground);
1307
+ background: transparent;
1308
+ }
1309
+
1310
+ .velu-frame-hint-icon {
1311
+ width: 1rem;
1312
+ height: 1rem;
1313
+ flex-shrink: 0;
1314
+ opacity: 0.9;
1315
+ color: color-mix(in oklab, var(--color-fd-foreground) 72%, var(--color-fd-muted-foreground));
1316
+ }
1317
+
1318
+ :root[data-theme='dark'] .velu-frame-hint-icon,
1319
+ .dark .velu-frame-hint-icon {
1320
+ opacity: 1;
1321
+ color: color-mix(in oklab, var(--color-fd-foreground) 92%, var(--color-fd-muted-foreground));
1322
+ }
1323
+
1324
+ .velu-frame figcaption {
1325
+ font-size: 0.85rem;
1326
+ color: color-mix(in oklab, var(--color-fd-foreground) 78%, var(--color-fd-muted-foreground));
1327
+ border-top: 0;
1328
+ padding: 0.55rem 0.8rem;
1329
+ background: var(--velu-frame-gap-bg);
1330
+ text-align: center;
1331
+ margin-top: -0.1rem;
1332
+ }
1333
+
1334
+ .velu-frame figcaption a {
1335
+ color: var(--color-fd-primary);
1336
+ text-decoration: underline;
1337
+ }
1338
+
1339
+ .velu-param,
1340
+ .velu-property {
1341
+ border: 1px solid var(--color-fd-border);
1342
+ border-radius: 0.6rem;
1343
+ padding: 0.7rem 0.85rem;
1344
+ }
1345
+
1346
+ .velu-param-head,
1347
+ .velu-property-head {
1348
+ display: flex;
1349
+ flex-wrap: wrap;
1350
+ gap: 0.4rem;
1351
+ align-items: center;
1352
+ position: relative;
1353
+ }
1354
+
1355
+ .velu-param-head span,
1356
+ .velu-property-head span {
1357
+ font-size: 0.75rem;
1358
+ border: 1px solid var(--color-fd-border);
1359
+ border-radius: 999px;
1360
+ padding: 0.1rem 0.45rem;
1361
+ }
1362
+
1363
+ .velu-param-head strong,
1364
+ .velu-property-head strong {
1365
+ color: var(--color-fd-primary);
1366
+ font-size: 0.75rem;
1367
+ }
1368
+
1369
+ .velu-param-head em,
1370
+ .velu-property-head em {
1371
+ font-size: 0.75rem;
1372
+ color: var(--color-fd-muted-foreground);
1373
+ }
1374
+
1375
+ .velu-param-field-item,
1376
+ .velu-response-field-item {
1377
+ border: 0;
1378
+ border-radius: 0;
1379
+ padding: 0;
1380
+ background: transparent;
1381
+ position: relative;
1382
+ }
1383
+
1384
+ .velu-param-field-item::before,
1385
+ .velu-response-field-item::before {
1386
+ content: '';
1387
+ position: absolute;
1388
+ top: 0;
1389
+ bottom: 0;
1390
+ left: -1.15rem;
1391
+ width: 1.15rem;
1392
+ }
1393
+
1394
+ .velu-param-field-item + .velu-param-field-item,
1395
+ .velu-response-field-item + .velu-response-field-item {
1396
+ border-top: 1px solid color-mix(in oklab, var(--color-fd-foreground) 18%, transparent);
1397
+ margin-top: 0.75rem;
1398
+ padding-top: 0.75rem;
1399
+ }
1400
+
1401
+ .velu-param-field-item .velu-param-head code,
1402
+ .velu-response-field-item .velu-property-head code {
1403
+ border: 0;
1404
+ background: transparent;
1405
+ padding: 0;
1406
+ color: var(--color-fd-primary);
1407
+ font-weight: 400;
1408
+ font-size: 1.10em;
1409
+ }
1410
+
1411
+ .velu-param-anchor {
1412
+ position: absolute;
1413
+ left: -1rem;
1414
+ top: 50%;
1415
+ transform: translateY(-50%);
1416
+ display: inline-flex;
1417
+ align-items: center;
1418
+ justify-content: center;
1419
+ width: 0.9rem;
1420
+ height: 0.9rem;
1421
+ color: var(--color-fd-muted-foreground);
1422
+ text-decoration: none;
1423
+ opacity: 0;
1424
+ visibility: hidden;
1425
+ transition: opacity 0.15s ease, color 0.15s ease;
1426
+ }
1427
+
1428
+ .velu-param-anchor svg {
1429
+ width: 0.85rem;
1430
+ height: 0.85rem;
1431
+ }
1432
+
1433
+ .velu-param-field-item:hover .velu-param-anchor,
1434
+ .velu-param-field-item:focus-within .velu-param-anchor,
1435
+ .velu-response-field-item:hover .velu-param-anchor,
1436
+ .velu-response-field-item:focus-within .velu-param-anchor,
1437
+ .velu-param-anchor:focus-visible {
1438
+ opacity: 0.9;
1439
+ visibility: visible;
1440
+ }
1441
+
1442
+ .velu-param-anchor:hover {
1443
+ color: var(--color-fd-foreground);
1444
+ }
1445
+
1446
+ .velu-pill {
1447
+ display: inline-flex;
1448
+ align-items: center;
1449
+ border-radius: 999px;
1450
+ padding: 0.1rem 0.45rem;
1451
+ font-size: 0.72rem;
1452
+ font-weight: 600;
1453
+ line-height: 1.2;
1454
+ }
1455
+
1456
+ .velu-pill-required {
1457
+ background: rgba(220, 38, 38, 0.16);
1458
+ color: #ef4444;
1459
+ }
1460
+
1461
+ .velu-pill-deprecated {
1462
+ background: rgba(245, 158, 11, 0.18);
1463
+ color: #f59e0b;
1464
+ }
1465
+
1466
+ .velu-pill-type {
1467
+ background: #e5e7eb;
1468
+ color: #292929;
1469
+ }
1470
+
1471
+ .velu-param-body,
1472
+ .velu-property-body {
1473
+ margin-top: 0.5rem;
1474
+ }
1475
+
1476
+ .velu-param-field-meta {
1477
+ display: flex;
1478
+ gap: 0.35rem;
1479
+ flex-wrap: wrap;
1480
+ }
1481
+
1482
+ .velu-param-field-meta span {
1483
+ text-transform: uppercase;
1484
+ font-size: 0.7rem;
1485
+ color: var(--color-fd-muted-foreground);
1486
+ border: 1px solid var(--color-fd-border);
1487
+ border-radius: 999px;
1488
+ padding: 0.08rem 0.4rem;
1489
+ }
1490
+
1491
+ .velu-endpoint,
1492
+ .velu-openapi,
1493
+ .velu-snippet {
1494
+ border: 1px solid var(--color-fd-border);
1495
+ border-radius: 0.65rem;
1496
+ padding: 0.8rem;
1497
+ margin: 1rem 0;
1498
+ }
1499
+
1500
+ .velu-api-playground {
1501
+ border: 0;
1502
+ border-radius: 0;
1503
+ padding: 0.35rem 0.35rem 0.6rem;
1504
+ }
1505
+
1506
+ .velu-openapi-operation-layout {
1507
+ display: flex;
1508
+ flex-direction: column;
1509
+ gap: 0.95rem;
1510
+ }
1511
+
1512
+ .velu-openapi-section {
1513
+ display: flex;
1514
+ flex-direction: column;
1515
+ gap: 0.55rem;
1516
+ }
1517
+
1518
+ .velu-openapi-field-group {
1519
+ display: flex;
1520
+ flex-direction: column;
1521
+ gap: 0.5rem;
1522
+ }
1523
+
1524
+ .velu-openapi-field-group + .velu-openapi-field-group {
1525
+ margin-top: 0.6rem;
1526
+ }
1527
+
1528
+ .velu-openapi-field-list {
1529
+ display: flex;
1530
+ flex-direction: column;
1531
+ }
1532
+
1533
+ .velu-openapi-parameter-group > h2,
1534
+ .velu-openapi-parameter-group > h3 {
1535
+ margin: 0;
1536
+ }
1537
+
1538
+ .velu-openapi-parameter-group > .velu-openapi-field-list {
1539
+ border-top: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1540
+ padding-top: 0.95rem;
1541
+ }
1542
+
1543
+ .velu-openapi-field-list > div + div {
1544
+ border-top: 1px solid color-mix(in oklab, var(--color-fd-foreground) 18%, transparent);
1545
+ margin-top: 0.75rem;
1546
+ padding-top: 0.75rem;
1547
+ }
1548
+
1549
+ .velu-openapi-complex-field + .velu-openapi-complex-field {
1550
+ margin-top: 0.75rem;
1551
+ }
1552
+
1553
+ .velu-openapi-child-attrs {
1554
+ margin-top: 0.55rem;
1555
+ border: 1px solid color-mix(in oklab, var(--color-fd-foreground) 16%, transparent);
1556
+ border-radius: 0.72rem;
1557
+ overflow: hidden;
1558
+ }
1559
+
1560
+ .velu-openapi-child-attrs-summary {
1561
+ list-style: none;
1562
+ cursor: pointer;
1563
+ padding: 0.55rem 0.7rem;
1564
+ font-size: 0.83rem;
1565
+ font-weight: 500;
1566
+ color: var(--color-fd-muted-foreground);
1567
+ border-bottom: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1568
+ user-select: none;
1569
+ }
1570
+
1571
+ .velu-openapi-child-attrs-summary::-webkit-details-marker {
1572
+ display: none;
1573
+ }
1574
+
1575
+ .velu-openapi-child-attrs-summary::before {
1576
+ content: '\203A';
1577
+ display: inline-block;
1578
+ margin-right: 0.35rem;
1579
+ transform: rotate(90deg);
1580
+ transition: transform 0.15s ease;
1581
+ }
1582
+
1583
+ .velu-openapi-child-attrs:not([open]) .velu-openapi-child-attrs-summary {
1584
+ border-bottom: 0;
1585
+ }
1586
+
1587
+ .velu-openapi-child-attrs:not([open]) .velu-openapi-child-attrs-summary::before {
1588
+ transform: rotate(0deg);
1589
+ }
1590
+
1591
+ .velu-openapi-child-attrs > .velu-openapi-field-list,
1592
+ .velu-openapi-child-variants {
1593
+ padding: 0.55rem 0.65rem 0.65rem;
1594
+ }
1595
+
1596
+ .velu-openapi-child-variant-list {
1597
+ margin-bottom: 0.55rem;
1598
+ }
1599
+
1600
+ .velu-openapi-child-variant-trigger {
1601
+ border: 0;
1602
+ border-radius: 0;
1603
+ padding: 0.1rem 0.12rem 0.24rem;
1604
+ color: var(--color-fd-muted-foreground);
1605
+ font-size: 0.85rem;
1606
+ font-weight: 600;
1607
+ line-height: 1.15;
1608
+ }
1609
+
1610
+ .velu-openapi-child-variant-trigger[data-state='active'] {
1611
+ color: var(--color-fd-primary);
1612
+ border-bottom: 2px solid var(--color-fd-primary);
1613
+ }
1614
+
1615
+ .velu-openapi-media-label {
1616
+ display: inline-flex;
1617
+ align-items: center;
1618
+ width: fit-content;
1619
+ }
1620
+
1621
+ .velu-openapi-field-description {
1622
+ color: var(--color-fd-muted-foreground);
1623
+ }
1624
+
1625
+ .velu-openapi-response-group {
1626
+ display: flex;
1627
+ flex-direction: column;
1628
+ gap: 0.6rem;
1629
+ border-top: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1630
+ padding-top: 0.75rem;
1631
+ }
1632
+
1633
+ .velu-openapi-response-group:first-of-type {
1634
+ border-top: 0;
1635
+ padding-top: 0.2rem;
1636
+ }
1637
+
1638
+ .velu-openapi-response-head {
1639
+ display: flex;
1640
+ flex-direction: column;
1641
+ gap: 0.35rem;
1642
+ }
1643
+
1644
+ .velu-openapi-response-section {
1645
+ margin-top: 0.25rem;
1646
+ }
1647
+
1648
+ .velu-openapi-response-panel {
1649
+ border: 0;
1650
+ }
1651
+
1652
+ .velu-openapi-response-header {
1653
+ display: flex;
1654
+ align-items: center;
1655
+ justify-content: space-between;
1656
+ gap: 1rem;
1657
+ border-bottom: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1658
+ padding-bottom: 0.55rem;
1659
+ margin-bottom: 0.65rem;
1660
+ }
1661
+
1662
+ .velu-openapi-response-header h2,
1663
+ .velu-openapi-response-header h3 {
1664
+ margin: 0;
1665
+ }
1666
+
1667
+ .velu-openapi-response-controls {
1668
+ display: inline-flex;
1669
+ align-items: center;
1670
+ gap: 1.15rem;
1671
+ margin-left: auto;
1672
+ }
1673
+
1674
+ .velu-openapi-response-status-list {
1675
+ border: 0;
1676
+ background: transparent;
1677
+ }
1678
+
1679
+ .velu-openapi-response-status-list .velu-openapi-response-status-trigger {
1680
+ border: 0;
1681
+ border-radius: 0;
1682
+ padding: 0.1rem 0.12rem 0.26rem;
1683
+ color: var(--color-fd-muted-foreground);
1684
+ font-size: 0.95rem;
1685
+ font-weight: 600;
1686
+ line-height: 1.15;
1687
+ }
1688
+
1689
+ .velu-openapi-response-status-list .velu-openapi-response-status-trigger[data-state='active'] {
1690
+ color: var(--color-fd-primary);
1691
+ border-bottom: 2px solid var(--color-fd-primary);
1692
+ }
1693
+
1694
+ .velu-openapi-response-status-list .velu-openapi-response-status-trigger + .velu-openapi-response-status-trigger {
1695
+ margin-left: 0.35rem;
1696
+ }
1697
+
1698
+ .velu-openapi-response-content-type {
1699
+ color: var(--color-fd-muted-foreground);
1700
+ font-size: 0.95rem;
1701
+ font-weight: 600;
1702
+ white-space: nowrap;
1703
+ }
1704
+
1705
+ .velu-openapi-response-panel .velu-openapi-response-head {
1706
+ margin-bottom: 0.5rem;
1707
+ }
1708
+
1709
+ .velu-openapi-response-panel .velu-openapi-response-group {
1710
+ border-top: 0;
1711
+ padding-top: 0;
1712
+ }
1713
+
1714
+ .velu-openapi-response-empty {
1715
+ color: var(--color-fd-muted-foreground);
1716
+ font-size: 0.875rem;
1717
+ font-weight: 500;
1718
+ line-height: 1.3;
1719
+ }
1720
+
1721
+ .velu-openapi-response-headers {
1722
+ margin-bottom: 0.85rem;
1723
+ }
1724
+
1725
+ .velu-openapi-response-headers h3 {
1726
+ margin: 0 0 0.5rem;
1727
+ }
1728
+
1729
+ .velu-openapi-response-headers > .velu-openapi-field-list {
1730
+ border-top: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1731
+ padding-top: 0.75rem;
1732
+ }
1733
+
1734
+ .velu-openapi-body-section {
1735
+ gap: 0.65rem;
1736
+ }
1737
+
1738
+ .velu-openapi-body-header {
1739
+ display: flex;
1740
+ align-items: center;
1741
+ justify-content: space-between;
1742
+ gap: 1rem;
1743
+ border-bottom: 1px solid color-mix(in oklab, var(--color-fd-foreground) 14%, transparent);
1744
+ padding-bottom: 0.55rem;
1745
+ margin-bottom: 0.2rem;
1746
+ }
1747
+
1748
+ .velu-openapi-body-header h2,
1749
+ .velu-openapi-body-header h3 {
1750
+ margin: 0;
1751
+ }
1752
+
1753
+ .velu-openapi-body-content-type {
1754
+ color: var(--color-fd-muted-foreground);
1755
+ font-size: 0.95rem;
1756
+ font-weight: 600;
1757
+ white-space: nowrap;
1758
+ }
1759
+
1760
+ .velu-openapi-body-media-list {
1761
+ border: 0;
1762
+ background: transparent;
1763
+ }
1764
+
1765
+ .velu-openapi-body-media-trigger {
1766
+ border: 0;
1767
+ border-radius: 0;
1768
+ padding: 0.1rem 0.12rem 0.26rem;
1769
+ color: var(--color-fd-muted-foreground);
1770
+ font-size: 0.95rem;
1771
+ font-weight: 600;
1772
+ line-height: 1.15;
1773
+ }
1774
+
1775
+ .velu-openapi-body-media-trigger[data-state='active'] {
1776
+ color: var(--color-fd-primary);
1777
+ border-bottom: 2px solid var(--color-fd-primary);
1778
+ }
1779
+
1780
+ .velu-openapi-body-section > .velu-openapi-field-list {
1781
+ border-top: 0;
1782
+ padding-top: 0;
1783
+ }
1784
+
1785
+ .velu-openapi-response-media-switch-header {
1786
+ margin-bottom: 0.55rem;
1787
+ }
1788
+
1789
+ .velu-openapi-response-media-list {
1790
+ border: 0;
1791
+ background: transparent;
1792
+ }
1793
+
1794
+ .velu-openapi-response-media-trigger {
1795
+ border: 0;
1796
+ border-radius: 999px;
1797
+ padding: 0.14rem 0.5rem 0.2rem;
1798
+ font-size: 0.78rem;
1799
+ font-weight: 600;
1800
+ color: var(--color-fd-muted-foreground);
1801
+ }
1802
+
1803
+ .velu-openapi-response-media-trigger[data-state='active'] {
1804
+ color: var(--color-fd-foreground);
1805
+ background: color-mix(in oklab, var(--color-fd-foreground) 10%, transparent);
1806
+ }
1807
+
1808
+ .velu-openapi-response-examples {
1809
+ margin-bottom: 0.7rem;
1810
+ }
1811
+
1812
+ .velu-openapi-response-example-switch-header {
1813
+ margin-bottom: 0.55rem;
1814
+ }
1815
+
1816
+ .velu-openapi-response-example-list {
1817
+ border: 0;
1818
+ background: transparent;
1819
+ flex-wrap: wrap;
1820
+ }
1821
+
1822
+ .velu-openapi-response-example-trigger {
1823
+ border: 0;
1824
+ border-radius: 999px;
1825
+ padding: 0.14rem 0.5rem 0.2rem;
1826
+ font-size: 0.78rem;
1827
+ font-weight: 600;
1828
+ color: var(--color-fd-muted-foreground);
1829
+ }
1830
+
1831
+ .velu-openapi-response-example-trigger[data-state='active'] {
1832
+ color: var(--color-fd-foreground);
1833
+ background: color-mix(in oklab, var(--color-fd-foreground) 10%, transparent);
1834
+ }
1835
+
1836
+ .velu-openapi-response-example-code {
1837
+ margin-bottom: 0.65rem;
1838
+ }
1839
+
1840
+ .velu-openapi-response-example-code pre {
1841
+ margin: 0;
1842
+ }
1843
+
1844
+ .velu-openapi-field-depth-1 {
1845
+ padding-left: 0.85rem;
1846
+ }
1847
+
1848
+ .velu-openapi-field-depth-2 {
1849
+ padding-left: 1.5rem;
1850
+ }
1851
+
1852
+ .velu-openapi-field-depth-3,
1853
+ .velu-openapi-field-depth-4 {
1854
+ padding-left: 2rem;
1855
+ }
1856
+
1857
+ .velu-manual-api {
1858
+ border: 1px solid var(--color-fd-border);
1859
+ border-radius: 0.75rem;
1860
+ padding: 0.75rem;
1861
+ margin: 1rem 0;
1862
+ background: color-mix(in oklab, var(--color-fd-background) 92%, var(--color-fd-card));
1863
+ }
1864
+
1865
+ .velu-manual-api-head {
1866
+ display: flex;
1867
+ align-items: center;
1868
+ gap: 0.55rem;
1869
+ flex-wrap: wrap;
1870
+ }
1871
+
1872
+ .velu-manual-api-method {
1873
+ display: inline-flex;
1874
+ align-items: center;
1875
+ border-radius: 999px;
1876
+ border: 1px solid color-mix(in oklab, var(--color-fd-primary) 40%, transparent);
1877
+ color: var(--color-fd-primary);
1878
+ font-size: 0.75rem;
1879
+ font-weight: 700;
1880
+ padding: 0.12rem 0.5rem;
1881
+ }
1882
+
1883
+ .velu-manual-api-url {
1884
+ font-size: 0.82rem;
1885
+ word-break: break-all;
1886
+ }
1887
+
1888
+ .velu-manual-api-send {
1889
+ margin-left: auto;
1890
+ border: 1px solid color-mix(in oklab, var(--color-fd-primary) 35%, transparent);
1891
+ background: color-mix(in oklab, var(--color-fd-primary) 16%, transparent);
1892
+ color: var(--color-fd-primary);
1893
+ border-radius: 0.45rem;
1894
+ padding: 0.22rem 0.6rem;
1895
+ font-size: 0.78rem;
1896
+ font-weight: 600;
1897
+ cursor: pointer;
1898
+ }
1899
+
1900
+ .velu-manual-api-send:disabled {
1901
+ opacity: 0.65;
1902
+ cursor: default;
1903
+ }
1904
+
1905
+ .velu-manual-api-auth-grid {
1906
+ display: grid;
1907
+ gap: 0.5rem;
1908
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1909
+ margin-top: 0.7rem;
1910
+ }
1911
+
1912
+ .velu-manual-api-auth {
1913
+ display: grid;
1914
+ gap: 0.28rem;
1915
+ margin-top: 0.7rem;
1916
+ }
1917
+
1918
+ .velu-manual-api-auth > span {
1919
+ font-size: 0.73rem;
1920
+ color: var(--color-fd-muted-foreground);
1921
+ }
1922
+
1923
+ .velu-manual-api-auth > input {
1924
+ border: 1px solid var(--color-fd-border);
1925
+ border-radius: 0.45rem;
1926
+ padding: 0.42rem 0.56rem;
1927
+ font-size: 0.82rem;
1928
+ background: color-mix(in oklab, var(--color-fd-background) 92%, transparent);
1929
+ }
1930
+
1931
+ .velu-manual-api-error {
1932
+ margin: 0.75rem 0 0;
1933
+ color: #e11d48;
1934
+ font-size: 0.8rem;
1935
+ }
1936
+
1937
+ .velu-manual-api-result {
1938
+ margin-top: 0.75rem;
1939
+ border-top: 1px solid var(--color-fd-border);
1940
+ padding-top: 0.6rem;
1941
+ }
1942
+
1943
+ .velu-manual-api-status {
1944
+ font-size: 0.78rem;
1945
+ color: var(--color-fd-muted-foreground);
1946
+ margin-bottom: 0.35rem;
1947
+ }
1948
+
1949
+ .velu-manual-api-result pre {
1950
+ margin: 0;
1951
+ border: 1px solid var(--color-fd-border);
1952
+ border-radius: 0.55rem;
1953
+ padding: 0.7rem;
1954
+ overflow: auto;
1955
+ background: color-mix(in oklab, var(--color-fd-background) 85%, var(--color-fd-card));
1956
+ }
1957
+
1958
+ .velu-manual-api-simple {
1959
+ border-style: dashed;
1960
+ }
1961
+
1962
+ @media (max-width: 768px) {
1963
+ .velu-manual-api-auth-grid {
1964
+ grid-template-columns: 1fr;
1965
+ }
1966
+
1967
+ .velu-manual-api-send {
1968
+ margin-left: 0;
1969
+ }
1970
+ }
1971
+
1972
+ .velu-openapi-warning {
1973
+ border: 1px solid var(--color-fd-border);
1974
+ border-radius: 0.65rem;
1975
+ padding: 0.75rem 0.9rem;
1976
+ color: var(--color-fd-muted-foreground);
1977
+ }
1978
+
1979
+ .velu-openapi-schema-wrapper {
1980
+ margin: 1rem 0;
1981
+ }
1982
+
1983
+ .velu-openapi-schema {
1984
+ border: 1px solid var(--color-fd-border);
1985
+ border-radius: 0.65rem;
1986
+ padding: 0.9rem;
1987
+ }
1988
+
1989
+ .velu-openapi-schema > h2 {
1990
+ margin: 0 0 0.5rem;
1991
+ font-size: 1.05rem;
1992
+ }
1993
+
1994
+ .velu-openapi-schema > p {
1995
+ margin: 0 0 0.6rem;
1996
+ color: var(--color-fd-muted-foreground);
1997
+ }
1998
+
1999
+ .velu-openapi-schema-json {
2000
+ margin: 0;
2001
+ border: 1px solid var(--color-fd-border);
2002
+ border-radius: 0.55rem;
2003
+ padding: 0.7rem;
2004
+ overflow: auto;
2005
+ background: color-mix(in oklab, var(--color-fd-background) 85%, var(--color-fd-card));
2006
+ }
2007
+
2008
+ .velu-api-toc-rail {
2009
+ margin-top: 0.35rem;
2010
+ width: 100%;
2011
+ min-width: 0;
2012
+ overflow: hidden;
2013
+ }
2014
+
2015
+ .velu-api-toc-rail #velu-api-toc-rail-host {
2016
+ width: 100%;
2017
+ min-width: 0;
2018
+ }
2019
+
2020
+ .velu-api-toc-example {
2021
+ border: 0;
2022
+ border-radius: 0;
2023
+ padding: 0;
2024
+ margin: 0;
2025
+ }
2026
+
2027
+ .velu-openapi-example-source {
2028
+ display: none;
2029
+ }
2030
+
2031
+ #velu-api-toc-rail-host .velu-openapi-example-source {
2032
+ display: block;
2033
+ border: 0;
2034
+ margin: 0;
2035
+ padding: 0;
2036
+ width: 100%;
2037
+ max-width: 100%;
2038
+ box-sizing: border-box;
2039
+ }
2040
+
2041
+ #velu-api-toc-rail-host .velu-openapi-example-source > * {
2042
+ width: 100%;
2043
+ max-width: 100%;
2044
+ box-sizing: border-box;
2045
+ }
2046
+
2047
+ #velu-api-toc-rail-host .prose-no-margin,
2048
+ #velu-api-toc-rail-host [role='tablist'],
2049
+ #velu-api-toc-rail-host [role='tabpanel'],
2050
+ #velu-api-toc-rail-host figure {
2051
+ width: 100%;
2052
+ max-width: 100%;
2053
+ box-sizing: border-box;
2054
+ }
2055
+
2056
+ #velu-api-toc-rail-host [role='tabpanel'] > figure {
2057
+ margin: 0 !important;
2058
+ border-radius: 0.65rem !important;
2059
+ border: 0 !important;
2060
+ box-shadow: none !important;
2061
+ background: transparent !important;
2062
+ }
2063
+
2064
+ #velu-api-toc-rail-host .velu-openapi-example-source pre,
2065
+ #velu-api-toc-rail-host .velu-openapi-example-source .shiki,
2066
+ #velu-api-toc-rail-host .velu-openapi-example-source [data-codeblock] {
2067
+ width: 100%;
2068
+ max-width: 100%;
2069
+ overflow-x: auto;
2070
+ }
2071
+
2072
+ #velu-api-toc-rail-host .fd-scroll-container {
2073
+ width: 100% !important;
2074
+ max-width: 100% !important;
2075
+ padding-top: 0 !important;
2076
+ padding-bottom: 0 !important;
2077
+ --padding-right: calc(var(--spacing) * 4) !important;
2078
+ }
2079
+
2080
+ #nd-toc:has(.velu-api-toc-rail) > :not(.velu-api-toc-rail) {
2081
+ display: none !important;
2082
+ }
2083
+
2084
+ .velu-update {
2085
+ display: grid;
2086
+ grid-template-columns: minmax(8rem, 11rem) minmax(0, 1fr);
2087
+ column-gap: 1rem;
2088
+ row-gap: 0.45rem;
2089
+ align-items: start;
2090
+ border: 0;
2091
+ border-radius: 0;
2092
+ background: transparent;
2093
+ padding: 0;
2094
+ margin: 1rem 0 1.5rem;
2095
+ }
2096
+
2097
+ .velu-request-example,
2098
+ .velu-response-example {
2099
+ margin: 0;
2100
+ }
2101
+
2102
+ .velu-request-example:not(.velu-in-toc-example),
2103
+ .velu-response-example:not(.velu-in-toc-example) {
2104
+ margin: 1rem 0;
2105
+ }
2106
+
2107
+ .velu-request-example > *:first-child,
2108
+ .velu-response-example > *:first-child {
2109
+ margin-top: 0 !important;
2110
+ }
2111
+
2112
+ .velu-request-example > *:last-child,
2113
+ .velu-response-example > *:last-child {
2114
+ margin-bottom: 0 !important;
2115
+ }
2116
+
2117
+ .velu-response-example-status {
2118
+ display: inline-flex;
2119
+ align-items: center;
2120
+ border: 1px solid var(--color-fd-border);
2121
+ border-radius: 999px;
2122
+ padding: 0.1rem 0.45rem;
2123
+ font-size: 0.72rem;
2124
+ color: var(--color-fd-muted-foreground);
2125
+ margin-bottom: 0.45rem;
2126
+ }
2127
+
2128
+ .velu-endpoint-head {
2129
+ display: flex;
2130
+ align-items: center;
2131
+ gap: 0.6rem;
2132
+ }
2133
+
2134
+ .velu-endpoint-head span {
2135
+ font-size: 0.75rem;
2136
+ font-weight: 700;
2137
+ color: #fff;
2138
+ background: var(--color-fd-primary);
2139
+ padding: 0.1rem 0.45rem;
2140
+ border-radius: 0.35rem;
2141
+ }
2142
+
2143
+ .velu-endpoint-body {
2144
+ margin-top: 0.55rem;
2145
+ }
2146
+
2147
+ .velu-video iframe {
2148
+ width: 100%;
2149
+ aspect-ratio: 16 / 9;
2150
+ border: 0;
2151
+ border-radius: 0.6rem;
2152
+ margin: 1rem 0;
2153
+ }
2154
+
2155
+ .velu-update-meta {
2156
+ display: flex;
2157
+ flex-direction: column;
2158
+ gap: 0.35rem;
2159
+ padding-left: 1rem;
2160
+ position: sticky;
2161
+ top: calc(var(--fd-nav-height, 0px) + 0.75rem);
2162
+ align-self: start;
2163
+ }
2164
+
2165
+ .velu-update-anchor {
2166
+ position: absolute;
2167
+ left: 0;
2168
+ top: 0.33rem;
2169
+ display: inline-flex;
2170
+ align-items: center;
2171
+ justify-content: center;
2172
+ width: 0.85rem;
2173
+ height: 0.85rem;
2174
+ color: var(--color-fd-muted-foreground);
2175
+ text-decoration: none;
2176
+ opacity: 0.75;
2177
+ visibility: visible;
2178
+ transition: opacity 0.15s ease, color 0.15s ease;
2179
+ }
2180
+
2181
+ .velu-update-anchor svg {
2182
+ width: 0.82rem;
2183
+ height: 0.82rem;
2184
+ }
2185
+
2186
+ .velu-update:hover .velu-update-anchor,
2187
+ .velu-update:focus-within .velu-update-anchor,
2188
+ .velu-update-anchor:focus-visible {
2189
+ opacity: 1;
2190
+ }
2191
+
2192
+ .velu-update-anchor:hover {
2193
+ color: var(--color-fd-foreground);
2194
+ }
2195
+
2196
+ .velu-update-label {
2197
+ display: inline-flex;
2198
+ align-items: center;
2199
+ width: fit-content;
2200
+ border-radius: 999px;
2201
+ padding: 0.2rem 0.6rem;
2202
+ font-size: 0.76rem;
2203
+ font-weight: 600;
2204
+ color: var(--color-fd-primary-foreground, #fff);
2205
+ background: var(--color-fd-primary);
2206
+ text-decoration: none;
2207
+ }
2208
+
2209
+ .velu-update-label:hover {
2210
+ background: color-mix(in oklab, var(--color-fd-primary) 86%, black);
2211
+ color: var(--color-fd-primary-foreground, #fff);
2212
+ }
2213
+
2214
+ .velu-update-description {
2215
+ color: var(--color-fd-muted-foreground);
2216
+ font-size: 0.85rem;
2217
+ }
2218
+
2219
+ .velu-update-tags {
2220
+ display: grid;
2221
+ gap: 0.18rem;
2222
+ }
2223
+
2224
+ .velu-update-tag {
2225
+ display: inline-flex;
2226
+ align-items: center;
2227
+ border: 0;
2228
+ border-radius: 0;
2229
+ font-size: 0.72rem;
2230
+ line-height: 1.3;
2231
+ padding: 0;
2232
+ color: color-mix(in oklab, var(--color-fd-foreground) 82%, var(--color-fd-muted-foreground));
2233
+ }
2234
+
2235
+ .velu-update-content {
2236
+ min-width: 0;
2237
+ }
2238
+
2239
+ .velu-update-content > :first-child {
2240
+ margin-top: 0;
2241
+ }
2242
+
2243
+ .velu-update-content > :last-child {
2244
+ margin-bottom: 0;
2245
+ }
2246
+
2247
+ .velu-update[hidden] {
2248
+ display: none !important;
2249
+ }
2250
+
2251
+ .velu-changelog-filter-block {
2252
+ display: grid;
2253
+ gap: 0.5rem;
2254
+ }
2255
+
2256
+ .velu-changelog-filter-heading {
2257
+ font-size: 1rem;
2258
+ font-weight: 500;
2259
+ color: var(--color-fd-foreground);
2260
+ }
2261
+
2262
+ .velu-changelog-filters {
2263
+ display: flex;
2264
+ flex-wrap: wrap;
2265
+ gap: 0.45rem;
2266
+ margin: 0;
2267
+ }
2268
+
2269
+ .velu-changelog-filter-host {
2270
+ margin-bottom: 0.4rem;
2271
+ }
2272
+
2273
+ #nd-toc.velu-changelog-filters-only > h3,
2274
+ #nd-toc.velu-changelog-filters-only > .relative {
2275
+ display: none !important;
2276
+ }
2277
+
2278
+ .velu-changelog-filter {
2279
+ border: 1px solid transparent;
2280
+ border-radius: 999px;
2281
+ padding: 0.22rem 0.65rem;
2282
+ font-size: 0.74rem;
2283
+ font-weight: 500;
2284
+ line-height: 1.25;
2285
+ color: color-mix(in oklab, var(--color-fd-foreground) 82%, var(--color-fd-muted-foreground));
2286
+ background: color-mix(in oklab, var(--color-fd-muted-foreground) 14%, transparent);
2287
+ cursor: pointer;
2288
+ transition: color 0.15s, border-color 0.15s, background-color 0.15s;
2289
+ }
2290
+
2291
+ .velu-changelog-filter:hover {
2292
+ border-color: color-mix(in oklab, var(--color-fd-primary) 35%, transparent);
2293
+ color: var(--color-fd-foreground);
2294
+ background: color-mix(in oklab, var(--color-fd-muted-foreground) 18%, transparent);
2295
+ }
2296
+
2297
+ .velu-changelog-filter.active {
2298
+ color: var(--color-fd-primary);
2299
+ border-color: color-mix(in oklab, var(--color-fd-primary) 35%, transparent);
2300
+ background: color-mix(in oklab, var(--color-fd-primary) 16%, transparent);
2301
+ }
2302
+
2303
+ @media (max-width: 768px) {
2304
+ .velu-update {
2305
+ grid-template-columns: 1fr;
2306
+ }
2307
+
2308
+ .velu-update-meta {
2309
+ position: static;
2310
+ top: auto;
2311
+ padding-left: 0;
2312
+ }
2313
+
2314
+ .velu-update-anchor {
2315
+ position: static;
2316
+ width: 1rem;
2317
+ height: 1rem;
2318
+ margin-bottom: -0.15rem;
2319
+ opacity: 1;
2320
+ visibility: visible;
2321
+ }
2322
+
2323
+ .velu-changelog-filters {
2324
+ margin-bottom: 0.45rem;
2325
+ }
2326
+ }
2327
+
2328
+ .velu-view {
2329
+ margin: 1rem 0;
2330
+ }
2331
+
2332
+ .velu-view-toc-host {
2333
+ margin-bottom: 0.75rem;
2334
+ }
2335
+
2336
+ .velu-view-toc-switcher {
2337
+ position: relative;
2338
+ }
2339
+
2340
+ .velu-view-toc-trigger {
2341
+ width: 100%;
2342
+ display: inline-flex;
2343
+ align-items: center;
2344
+ justify-content: space-between;
2345
+ gap: 0.55rem;
2346
+ border: 1px solid var(--color-fd-border);
2347
+ border-radius: 0.9rem;
2348
+ background: var(--color-fd-card);
2349
+ color: var(--color-fd-foreground);
2350
+ font-size: 1.02rem;
2351
+ font-weight: 500;
2352
+ line-height: 1.15;
2353
+ padding: 0.7rem 0.85rem;
2354
+ cursor: pointer;
2355
+ transition: border-color 0.15s, background-color 0.15s, color 0.15s;
2356
+ }
2357
+
2358
+ .velu-view-toc-trigger:hover {
2359
+ border-color: var(--color-fd-primary);
2360
+ }
2361
+
2362
+ .velu-view-toc-trigger > span {
2363
+ flex: 1;
2364
+ text-align: left;
2365
+ }
2366
+
2367
+ .velu-view-toc-chevron {
2368
+ width: 1rem;
2369
+ height: 1rem;
2370
+ transition: transform 0.15s ease;
2371
+ color: var(--color-fd-muted-foreground);
2372
+ }
2373
+
2374
+ .velu-view-toc-chevron.open {
2375
+ transform: rotate(180deg);
2376
+ }
2377
+
2378
+ .velu-view-toc-menu {
2379
+ margin-top: 0.35rem;
2380
+ border: 1px solid var(--color-fd-border);
2381
+ border-radius: 0.9rem;
2382
+ background: var(--color-fd-card);
2383
+ overflow: hidden;
2384
+ }
2385
+
2386
+ .velu-view-toc-option {
2387
+ width: 100%;
2388
+ display: flex;
2389
+ align-items: center;
2390
+ justify-content: space-between;
2391
+ gap: 0.6rem;
2392
+ padding: 0.7rem 0.85rem;
2393
+ border: 0;
2394
+ border-top: 1px solid transparent;
2395
+ background: transparent;
2396
+ color: var(--color-fd-foreground);
2397
+ font-size: 1.02rem;
2398
+ text-align: left;
2399
+ cursor: pointer;
2400
+ }
2401
+
2402
+ .velu-view-toc-option + .velu-view-toc-option {
2403
+ border-top-color: var(--color-fd-border);
2404
+ }
2405
+
2406
+ .velu-view-toc-option:hover {
2407
+ background: var(--color-fd-accent);
2408
+ }
2409
+
2410
+ .velu-view-toc-option-main {
2411
+ display: inline-flex;
2412
+ align-items: center;
2413
+ gap: 0.55rem;
2414
+ }
2415
+
2416
+ .velu-view-check {
2417
+ width: 1rem;
2418
+ height: 1rem;
2419
+ color: #15803d;
2420
+ }
2421
+
2422
+ .velu-view-option {
2423
+ display: inline-flex;
2424
+ align-items: center;
2425
+ gap: 0.35rem;
2426
+ }
2427
+
2428
+ .velu-view-option-icon {
2429
+ width: 0.95rem;
2430
+ height: 0.95rem;
2431
+ flex-shrink: 0;
2432
+ }
2433
+
2434
+ .velu-view-option-icon-img {
2435
+ margin: 0 !important;
2436
+ border-radius: 0.16rem;
2437
+ object-fit: contain;
2438
+ }
2439
+
2440
+ /* Fallback utilities for imported MDX media classes. */
2441
+ #nd-page .w-full {
2442
+ width: 100% !important;
2443
+ }
2444
+
2445
+ #nd-page .h-96 {
2446
+ height: 24rem !important;
2447
+ }
2448
+
2449
+ #nd-page .rounded-lg {
2450
+ border-radius: 0.5rem !important;
2451
+ }
2452
+
2453
+ #nd-page .rounded-xl {
2454
+ border-radius: 0.75rem !important;
2455
+ }
2456
+
2457
+ #nd-page :is(img, iframe, video).aspect-video {
2458
+ width: 100% !important;
2459
+ aspect-ratio: 16 / 9 !important;
2460
+ height: auto !important;
2461
+ display: block;
2462
+ }
2463
+
2464
+ #nd-page iframe {
2465
+ border: 0;
2466
+ }
2467
+
2468
+ #nd-page img.velu-image-zoomable,
2469
+ #nd-page .velu-frame-content img.velu-image-zoomable {
2470
+ cursor: zoom-in !important;
2471
+ }
2472
+
2473
+ #nd-page img.velu-image-zoomable-fallback,
2474
+ #nd-page .velu-frame-content img.velu-image-zoomable-fallback {
2475
+ cursor: zoom-in !important;
2476
+ }
2477
+
2478
+ .velu-image-lightbox {
2479
+ position: fixed;
2480
+ inset: 0;
2481
+ z-index: 120;
2482
+ background: rgba(0, 0, 0, 0.82);
2483
+ padding: 1.5rem;
2484
+ display: flex;
2485
+ align-items: center;
2486
+ justify-content: center;
2487
+ cursor: zoom-out;
2488
+ }
2489
+
2490
+ .velu-image-lightbox-img {
2491
+ display: block;
2492
+ width: auto;
2493
+ height: auto;
2494
+ max-width: min(94vw, 1500px);
2495
+ max-height: 90vh;
2496
+ border-radius: 0.75rem;
2497
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.45);
2498
+ cursor: auto;
2499
+ }
2500
+
2501
+ .velu-image-lightbox-close {
2502
+ position: fixed;
2503
+ top: 1rem;
2504
+ right: 1rem;
2505
+ border: 1px solid rgba(255, 255, 255, 0.28);
2506
+ background: rgba(0, 0, 0, 0.58);
2507
+ color: #fff;
2508
+ width: 2rem;
2509
+ height: 2rem;
2510
+ border-radius: 999px;
2511
+ font-size: 1.45rem;
2512
+ line-height: 1;
2513
+ display: inline-flex;
2514
+ align-items: center;
2515
+ justify-content: center;
2516
+ cursor: pointer;
2517
+ }
2518
+
2519
+ .velu-view-content > :first-child {
2520
+ margin-top: 0;
2521
+ }
2522
+
2523
+ .velu-view-content > :last-child {
2524
+ margin-bottom: 0;
2525
+ }
2526
+
2527
+ .velu-toc-replaced > * {
2528
+ display: none !important;
2529
+ }
2530
+
2531
+ .velu-toc-examples {
2532
+ display: grid;
2533
+ gap: 0.9rem;
2534
+ margin-top: 0.75rem;
2535
+ width: calc(100% - 0.35rem);
2536
+ box-sizing: border-box;
2537
+ }
2538
+
2539
+ #nd-toc .velu-in-toc-example {
2540
+ margin: 0;
2541
+ width: 100%;
2542
+ max-width: 100%;
2543
+ }
2544
+
2545
+ #nd-toc .velu-in-toc-example.velu-panel {
2546
+ border: 1px solid var(--color-fd-border);
2547
+ background: var(--color-fd-card);
2548
+ border-radius: 1rem;
2549
+ padding: 0.45rem;
2550
+ }
2551
+
2552
+ #nd-toc .velu-in-toc-example h4 {
2553
+ margin-bottom: 0.55rem;
2554
+ }
2555
+
2556
+ .velu-toc-replaced {
2557
+ padding-right: 0.5rem !important;
2558
+ overflow: visible !important;
2559
+ }
2560
+
2561
+ .velu-toc-replaced > .velu-toc-examples {
2562
+ display: grid !important;
2563
+ }
2564
+
2565
+ #nd-toc .velu-in-toc-example pre,
2566
+ #nd-toc .velu-in-toc-example [data-codeblock],
2567
+ #nd-toc .velu-in-toc-example .shiki {
2568
+ max-width: 100% !important;
2569
+ overflow-x: auto !important;
2570
+ }
2571
+
2572
+ #nd-toc .velu-in-toc-example [role='tablist'],
2573
+ #nd-toc .velu-in-toc-example [role='tabpanel'],
2574
+ #nd-toc .velu-in-toc-example [data-codeblock] {
2575
+ width: 100% !important;
2576
+ max-width: 100% !important;
2577
+ box-sizing: border-box;
2578
+ }
2579
+
2580
+ #nd-toc .velu-in-toc-example [role='tabpanel'] {
2581
+ padding: 0 !important;
2582
+ }
2583
+
2584
+ #nd-toc .velu-in-toc-example [role='tabpanel'] > figure {
2585
+ width: 100% !important;
2586
+ max-width: 100% !important;
2587
+ margin: 0 !important;
2588
+ box-sizing: border-box;
2589
+ }
2590
+
2591
+ #nd-toc .velu-in-toc-example pre,
2592
+ #nd-toc .velu-in-toc-example .shiki,
2593
+ #nd-toc .velu-in-toc-example .shiki code {
2594
+ display: block !important;
2595
+ width: 100% !important;
2596
+ max-width: 100% !important;
2597
+ min-width: 0 !important;
2598
+ box-sizing: border-box;
2599
+ }
2600
+
2601
+ #nd-toc .velu-in-toc-example .fd-scroll-container {
2602
+ width: 100% !important;
2603
+ max-width: 100% !important;
2604
+ box-sizing: border-box;
2605
+ --padding-right: calc(var(--spacing) * 4) !important;
2606
+ }
2607
+
2608
+ #nd-toc .velu-in-toc-example .fd-scroll-container > pre {
2609
+ width: 100% !important;
2610
+ min-width: 100% !important;
2611
+ }
2612
+
2613
+ @media (max-width: 1023px) {
2614
+ .velu-toc-replaced > * {
2615
+ display: unset !important;
2616
+ }
2617
+
2618
+ .velu-toc-examples {
2619
+ display: none !important;
2620
+ }
2621
+
2622
+ #nd-page.velu-page-with-toc-examples {
2623
+ max-width: 900px !important;
2624
+ }
2625
+ }
2626
+
2627
+
2628
+ @media (min-width: 1024px) {
2629
+ #nd-page.velu-page-with-toc-examples {
2630
+ max-width: 680px !important;
2631
+ }
2632
+ }
2633
+
2634
+ .velu-tooltip-wrap {
2635
+ position: relative;
2636
+ display: inline-flex;
2637
+ align-items: baseline;
2638
+ }
2639
+
2640
+ .velu-tooltip {
2641
+ text-decoration: underline dotted;
2642
+ text-underline-offset: 0.2rem;
2643
+ cursor: help;
2644
+ }
2645
+
2646
+ .velu-tooltip-popover {
2647
+ position: absolute;
2648
+ left: 50%;
2649
+ bottom: calc(100% + 0.25rem);
2650
+ transform: translateX(-50%) translateY(4px);
2651
+ min-width: 14rem;
2652
+ max-width: min(22rem, calc(100vw - 2rem));
2653
+ border: 1px solid var(--color-fd-border);
2654
+ border-radius: 0.65rem;
2655
+ background: var(--color-fd-popover);
2656
+ color: var(--color-fd-foreground);
2657
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
2658
+ padding: 0.6rem 0.7rem;
2659
+ display: grid;
2660
+ gap: 0.25rem;
2661
+ opacity: 0;
2662
+ visibility: hidden;
2663
+ pointer-events: none;
2664
+ transition: opacity 0.14s ease, transform 0.14s ease;
2665
+ z-index: 60;
2666
+ }
2667
+
2668
+ /* Keep hover active while moving from trigger text to the tooltip card. */
2669
+ .velu-tooltip-popover::before {
2670
+ content: '';
2671
+ position: absolute;
2672
+ left: 0;
2673
+ right: 0;
2674
+ bottom: -0.5rem;
2675
+ height: 0.5rem;
2676
+ }
2677
+
2678
+ .velu-tooltip-popover::after {
2679
+ content: '';
2680
+ position: absolute;
2681
+ top: 100%;
2682
+ left: 50%;
2683
+ transform: translateX(-50%);
2684
+ border-width: 6px 6px 0 6px;
2685
+ border-style: solid;
2686
+ border-color: var(--color-fd-border) transparent transparent transparent;
2687
+ }
2688
+
2689
+ .velu-tooltip-wrap:hover .velu-tooltip-popover,
2690
+ .velu-tooltip-wrap:focus-within .velu-tooltip-popover {
2691
+ opacity: 1;
2692
+ visibility: visible;
2693
+ pointer-events: auto;
2694
+ transform: translateX(-50%) translateY(0);
2695
+ }
2696
+
2697
+ .velu-tooltip-headline {
2698
+ font-size: 0.8rem;
2699
+ font-weight: 700;
2700
+ line-height: 1.35;
2701
+ }
2702
+
2703
+ .velu-tooltip-text {
2704
+ font-size: 0.78rem;
2705
+ line-height: 1.45;
2706
+ color: var(--color-fd-muted-foreground);
2707
+ }
2708
+
2709
+ .velu-tooltip-cta {
2710
+ font-size: 0.78rem;
2711
+ font-weight: 600;
2712
+ color: var(--color-fd-primary);
2713
+ text-decoration: none;
2714
+ }
2715
+
2716
+ .velu-inline-icon {
2717
+ display: inline-flex;
2718
+ vertical-align: middle;
2719
+ width: 1rem;
2720
+ height: 1rem;
2721
+ }
2722
+
2723
+ .velu-inline-icon svg,
2724
+ .velu-inline-icon img {
2725
+ width: 100%;
2726
+ height: 100%;
2727
+ }
2728
+
2729
+ .velu-mermaid {
2730
+ position: relative;
2731
+ border: 0;
2732
+ border-radius: 0.6rem;
2733
+ padding: 0;
2734
+ background: transparent;
2735
+ overflow: hidden;
2736
+ }
2737
+
2738
+ .velu-mermaid-stage {
2739
+ display: flex;
2740
+ align-items: center;
2741
+ justify-content: center;
2742
+ min-height: 180px;
2743
+ transform-origin: center center;
2744
+ transition: transform 0.18s ease;
2745
+ }
2746
+
2747
+ .velu-mermaid-svg {
2748
+ width: 100%;
2749
+ display: flex;
2750
+ align-items: center;
2751
+ justify-content: center;
2752
+ }
2753
+
2754
+ .velu-mermaid-svg svg {
2755
+ width: auto;
2756
+ max-width: 100%;
2757
+ height: auto;
2758
+ display: block;
2759
+ }
2760
+
2761
+ .velu-mermaid-error {
2762
+ margin: 0;
2763
+ white-space: pre-wrap;
2764
+ font-size: 0.85rem;
2765
+ }
2766
+
2767
+ .velu-mermaid-controls {
2768
+ position: absolute;
2769
+ display: grid;
2770
+ grid-template-columns: repeat(3, 2.25rem);
2771
+ grid-template-rows: repeat(3, 2.25rem);
2772
+ gap: 0.28rem;
2773
+ width: auto;
2774
+ padding: 0.28rem;
2775
+ border: 1px solid var(--color-fd-border);
2776
+ border-radius: 0.65rem;
2777
+ background: color-mix(in oklab, var(--color-fd-card) 96%, transparent);
2778
+ backdrop-filter: blur(4px);
2779
+ }
2780
+
2781
+ .velu-mermaid-controls button {
2782
+ border: 1px solid var(--color-fd-border);
2783
+ background: color-mix(in oklab, var(--color-fd-card) 82%, transparent);
2784
+ color: var(--color-fd-foreground);
2785
+ border-radius: 0.5rem;
2786
+ font-size: 1rem;
2787
+ line-height: 1;
2788
+ padding: 0;
2789
+ cursor: pointer;
2790
+ display: inline-flex;
2791
+ align-items: center;
2792
+ justify-content: center;
2793
+ }
2794
+
2795
+ .velu-mermaid-controls button:hover {
2796
+ border-color: var(--color-fd-primary);
2797
+ color: var(--color-fd-primary);
2798
+ }
2799
+
2800
+ .velu-mermaid-btn-up { grid-column: 2; grid-row: 1; }
2801
+ .velu-mermaid-btn-zoom-in { grid-column: 3; grid-row: 1; }
2802
+ .velu-mermaid-btn-left { grid-column: 1; grid-row: 2; }
2803
+ .velu-mermaid-btn-reset { grid-column: 2; grid-row: 2; }
2804
+ .velu-mermaid-btn-right { grid-column: 3; grid-row: 2; }
2805
+ .velu-mermaid-btn-down { grid-column: 2; grid-row: 3; }
2806
+ .velu-mermaid-btn-zoom-out { grid-column: 3; grid-row: 3; }
2807
+
2808
+ .velu-mermaid-controls-top-left { top: 0.55rem; left: 0.55rem; }
2809
+ .velu-mermaid-controls-top-right { top: 0.55rem; right: 0.55rem; }
2810
+ .velu-mermaid-controls-bottom-left { bottom: 0.55rem; left: 0.55rem; }
2811
+ .velu-mermaid-controls-bottom-right { bottom: 0.55rem; right: 0.55rem; }
2812
+
2813
+ @media (max-width: 768px) {
2814
+ .velu-mermaid-controls {
2815
+ grid-template-columns: repeat(3, 2rem);
2816
+ grid-template-rows: repeat(3, 2rem);
2817
+ }
2818
+ }
2819
+
2820
+ .velu-callout {
2821
+ border-width: 1px;
2822
+ box-shadow: none;
2823
+ }
2824
+
2825
+ .velu-callout > div:last-child > div {
2826
+ color: inherit;
2827
+ }
2828
+
2829
+ .velu-callout-info {
2830
+ background: rgba(37, 99, 235, 0.1);
2831
+ border-color: rgba(37, 99, 235, 0.26);
2832
+ color: #1e40af;
2833
+ }
2834
+
2835
+ :root[data-theme='dark'] .velu-callout-info,
2836
+ .dark .velu-callout-info {
2837
+ background: rgba(37, 99, 235, 0.14);
2838
+ border-color: rgba(37, 99, 235, 0.32);
2839
+ color: #bfdbfe;
2840
+ }
2841
+
2842
+ .velu-callout-warning {
2843
+ background: rgba(245, 158, 11, 0.16);
2844
+ border-color: rgba(245, 158, 11, 0.34);
2845
+ color: #92400e;
2846
+ }
2847
+
2848
+ .velu-callout-success {
2849
+ background: rgba(22, 163, 74, 0.14);
2850
+ border-color: rgba(22, 163, 74, 0.34);
2851
+ color: #166534;
2852
+ }
2853
+
2854
+ .velu-callout-error {
2855
+ background: rgba(220, 38, 38, 0.16);
2856
+ border-color: rgba(220, 38, 38, 0.34);
2857
+ color: #991b1b;
2858
+ }
2859
+
2860
+ .velu-callout-idea {
2861
+ background: rgba(147, 51, 234, 0.14);
2862
+ border-color: rgba(147, 51, 234, 0.32);
2863
+ color: #6b21a8;
2864
+ }
2865
+
2866
+ :root[data-theme='dark'] .velu-callout-warning,
2867
+ .dark .velu-callout-warning {
2868
+ color: #fde68a;
2869
+ }
2870
+
2871
+ :root[data-theme='dark'] .velu-callout-success,
2872
+ .dark .velu-callout-success {
2873
+ color: #bbf7d0;
2874
+ }
2875
+
2876
+ :root[data-theme='dark'] .velu-callout-error,
2877
+ .dark .velu-callout-error {
2878
+ color: #fecaca;
2879
+ }
2880
+
2881
+ :root[data-theme='dark'] .velu-callout-idea,
2882
+ .dark .velu-callout-idea {
2883
+ color: #e9d5ff;
2884
+ }
2885
+
2886
+ .velu-badge {
2887
+ display: inline-flex;
2888
+ align-items: center;
2889
+ gap: 0.3rem;
2890
+ border: 1px solid transparent;
2891
+ border-radius: 0.35rem;
2892
+ padding: 0.15rem 0.5rem;
2893
+ font-size: 0.75rem;
2894
+ font-weight: 600;
2895
+ }
2896
+
2897
+ .velu-badge-icon {
2898
+ display: inline-flex;
2899
+ width: 0.85rem;
2900
+ height: 0.85rem;
2901
+ }
2902
+
2903
+ .velu-badge-icon svg,
2904
+ .velu-badge-icon img {
2905
+ width: 0.85rem;
2906
+ height: 0.85rem;
2907
+ }
2908
+
2909
+ .velu-badge-size-sm {
2910
+ font-size: 0.7rem;
2911
+ padding: 0.1rem 0.4rem;
2912
+ }
2913
+
2914
+ .velu-badge-size-xs {
2915
+ font-size: 0.66rem;
2916
+ padding: 0.06rem 0.32rem;
2917
+ }
2918
+
2919
+ .velu-badge-size-md {
2920
+ font-size: 0.75rem;
2921
+ padding: 0.15rem 0.5rem;
2922
+ }
2923
+
2924
+ .velu-badge-size-lg {
2925
+ font-size: 0.82rem;
2926
+ padding: 0.2rem 0.6rem;
2927
+ }
2928
+
2929
+ .velu-badge-shape-rounded {
2930
+ border-radius: 0.35rem;
2931
+ }
2932
+
2933
+ .velu-badge-shape-pill {
2934
+ border-radius: 999px;
2935
+ }
2936
+
2937
+ .velu-badge-shape-square {
2938
+ border-radius: 0.4rem;
2939
+ }
2940
+
2941
+ .velu-badge-color-gray {
2942
+ background: color-mix(in oklab, var(--color-fd-muted-foreground) 14%, transparent);
2943
+ color: var(--color-fd-foreground);
2944
+ }
2945
+
2946
+ .velu-badge-color-blue {
2947
+ background: rgba(37, 99, 235, 0.14);
2948
+ color: #1d4ed8;
2949
+ }
2950
+
2951
+ .velu-badge-color-green {
2952
+ background: rgba(22, 163, 74, 0.16);
2953
+ color: #15803d;
2954
+ }
2955
+
2956
+ .velu-badge-color-yellow {
2957
+ background: rgba(245, 158, 11, 0.2);
2958
+ color: #a16207;
2959
+ }
2960
+
2961
+ .velu-badge-color-red {
2962
+ background: rgba(220, 38, 38, 0.16);
2963
+ color: #b91c1c;
2964
+ }
2965
+
2966
+ .velu-badge-color-purple {
2967
+ background: rgba(147, 51, 234, 0.16);
2968
+ color: #7e22ce;
2969
+ }
2970
+
2971
+ .velu-badge-color-white {
2972
+ background: #fff;
2973
+ color: #111827;
2974
+ border-color: rgba(17, 24, 39, 0.16);
2975
+ }
2976
+
2977
+ .velu-badge-color-surface {
2978
+ background: var(--color-fd-card);
2979
+ color: var(--color-fd-foreground);
2980
+ border-color: var(--color-fd-border);
2981
+ }
2982
+
2983
+ .velu-badge-color-white-destructive {
2984
+ background: #fff;
2985
+ color: #b91c1c;
2986
+ border-color: rgba(185, 28, 28, 0.26);
2987
+ }
2988
+
2989
+ .velu-badge-color-surface-destructive {
2990
+ background: rgba(220, 38, 38, 0.1);
2991
+ color: #b91c1c;
2992
+ border-color: rgba(220, 38, 38, 0.25);
2993
+ }
2994
+
2995
+ .velu-badge-color-orange {
2996
+ background: rgba(234, 88, 12, 0.16);
2997
+ color: #c2410c;
2998
+ }
2999
+
3000
+ .velu-badge-stroke {
3001
+ background: transparent;
3002
+ border-color: currentColor;
3003
+ }
3004
+
3005
+ .velu-badge-disabled {
3006
+ opacity: 0.5;
3007
+ }
3008
+
3009
+ .velu-banner {
3010
+ display: flex;
3011
+ align-items: center;
3012
+ gap: 0.45rem;
3013
+ border: 1px solid var(--color-fd-border);
3014
+ background: var(--color-fd-accent);
3015
+ border-radius: 0.6rem;
3016
+ padding: 0.75rem 0.9rem;
3017
+ margin: 1rem 0;
3018
+ color: var(--color-fd-foreground);
3019
+ text-decoration: none;
3020
+ line-height: 1.35;
3021
+ }
3022
+
3023
+ .velu-banner:hover {
3024
+ border-color: var(--color-fd-primary);
3025
+ }
3026
+
3027
+ .velu-banner-icon {
3028
+ width: 1rem;
3029
+ height: 1rem;
3030
+ display: inline-flex;
3031
+ flex-shrink: 0;
3032
+ }
3033
+
3034
+ .velu-banner-icon svg,
3035
+ .velu-banner-icon img {
3036
+ width: 1rem;
3037
+ height: 1rem;
3038
+ }
3039
+
3040
+ .velu-banner-content {
3041
+ min-width: 0;
3042
+ }
3043
+
3044
+ .velu-banner-content > p {
3045
+ margin: 0;
3046
+ }
3047
+
3048
+ .velu-banner-content > :first-child {
3049
+ margin-top: 0;
3050
+ }
3051
+
3052
+ .velu-banner-content > :last-child {
3053
+ margin-bottom: 0;
3054
+ }
3055
+
3056
+ .velu-banner-info {
3057
+ background: rgba(37, 99, 235, 0.1);
3058
+ border-color: rgba(37, 99, 235, 0.25);
3059
+ }
3060
+
3061
+ .velu-banner-success {
3062
+ background: rgba(22, 163, 74, 0.12);
3063
+ border-color: rgba(22, 163, 74, 0.28);
3064
+ }
3065
+
3066
+ .velu-banner-warning {
3067
+ background: rgba(245, 158, 11, 0.15);
3068
+ border-color: rgba(245, 158, 11, 0.3);
3069
+ }
3070
+
3071
+ .velu-color {
3072
+ display: inline-flex;
3073
+ align-items: center;
3074
+ gap: 0.45rem;
3075
+ border: 1px solid var(--color-fd-border);
3076
+ border-radius: 0.5rem;
3077
+ padding: 0.35rem 0.5rem;
3078
+ }
3079
+
3080
+ .velu-color-swatch {
3081
+ background: var(--velu-color-light, transparent);
3082
+ width: 1rem;
3083
+ height: 1rem;
3084
+ border-radius: 0.2rem;
3085
+ border: 1px solid rgba(0, 0, 0, 0.1);
3086
+ }
3087
+
3088
+ :root[data-theme='dark'] .velu-color-swatch {
3089
+ background: var(--velu-color-dark, var(--velu-color-light, transparent));
3090
+ }
3091
+
3092
+ .dark .velu-color-swatch {
3093
+ background: var(--velu-color-dark, var(--velu-color-light, transparent));
3094
+ }
3095
+
3096
+ .velu-color-group {
3097
+ display: grid;
3098
+ gap: 0.65rem;
3099
+ width: 100%;
3100
+ }
3101
+
3102
+ .velu-color-compact {
3103
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
3104
+ gap: 0.75rem;
3105
+ }
3106
+
3107
+ .velu-color-table {
3108
+ grid-template-columns: 1fr;
3109
+ }
3110
+
3111
+ .velu-color-item {
3112
+ position: relative;
3113
+ display: inline-flex;
3114
+ align-items: center;
3115
+ gap: 0.45rem;
3116
+ border: 1px solid var(--color-fd-border);
3117
+ border-radius: 0.5rem;
3118
+ padding: 0.35rem 0.5rem;
3119
+ background: var(--color-fd-card);
3120
+ cursor: pointer;
3121
+ text-align: left;
3122
+ transition: border-color 0.15s, background-color 0.15s;
3123
+ }
3124
+
3125
+ .velu-color-item:hover {
3126
+ border-color: var(--color-fd-primary);
3127
+ }
3128
+
3129
+ .velu-color-item[data-copied='true'] {
3130
+ border-color: color-mix(in oklab, var(--color-fd-primary) 70%, transparent);
3131
+ background: color-mix(in oklab, var(--color-fd-primary) 10%, var(--color-fd-card));
3132
+ }
3133
+
3134
+ .velu-color-compact .velu-color-item {
3135
+ display: grid;
3136
+ grid-template-columns: 1fr;
3137
+ gap: 0.45rem;
3138
+ border: 0;
3139
+ padding: 0;
3140
+ background: transparent;
3141
+ }
3142
+
3143
+ .velu-color-swatch-wrap {
3144
+ position: relative;
3145
+ display: inline-flex;
3146
+ }
3147
+
3148
+ .velu-color-compact .velu-color-swatch {
3149
+ width: 100%;
3150
+ height: auto;
3151
+ aspect-ratio: 1.35 / 1;
3152
+ border-radius: 0.55rem;
3153
+ border: 0;
3154
+ }
3155
+
3156
+ .velu-color-copied-check {
3157
+ position: absolute;
3158
+ top: 0.4rem;
3159
+ right: 0.4rem;
3160
+ width: 1.2rem;
3161
+ height: 1.2rem;
3162
+ display: inline-flex;
3163
+ align-items: center;
3164
+ justify-content: center;
3165
+ border-radius: 999px;
3166
+ background: rgba(3, 7, 18, 0.75);
3167
+ color: #fff;
3168
+ font-size: 0.78rem;
3169
+ font-weight: 700;
3170
+ opacity: 0;
3171
+ transform: scale(0.82);
3172
+ transition: opacity 0.15s ease, transform 0.15s ease;
3173
+ pointer-events: none;
3174
+ }
3175
+
3176
+ .velu-color-copied-check.is-visible {
3177
+ opacity: 1;
3178
+ transform: scale(1);
3179
+ }
3180
+
3181
+ .velu-color-item-text {
3182
+ display: inline-flex;
3183
+ flex-direction: column;
3184
+ gap: 0.1rem;
3185
+ min-width: 0;
3186
+ }
3187
+
3188
+ .velu-color-compact .velu-color-item-text {
3189
+ padding: 0 0.1rem;
3190
+ }
3191
+
3192
+ .velu-color-compact .velu-color-item-text code {
3193
+ background: transparent;
3194
+ border: 0;
3195
+ padding: 0;
3196
+ border-radius: 0;
3197
+ font-family: inherit;
3198
+ font-size: 1.25rem;
3199
+ font-weight: 700;
3200
+ color: var(--color-fd-foreground);
3201
+ }
3202
+
3203
+ .velu-color-item-text > span {
3204
+ font-size: 0.75rem;
3205
+ color: var(--color-fd-muted-foreground);
3206
+ }
3207
+
3208
+ .velu-color-compact .velu-color-item-text > span {
3209
+ font-size: 0.95rem;
3210
+ }
3211
+
3212
+ .velu-color-row {
3213
+ display: grid;
3214
+ gap: 0.45rem;
3215
+ }
3216
+
3217
+ .velu-color-row-title {
3218
+ font-size: 0.8rem;
3219
+ font-weight: 600;
3220
+ color: var(--color-fd-muted-foreground);
3221
+ }
3222
+
3223
+ .velu-color-row-items {
3224
+ display: grid;
3225
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
3226
+ gap: 0.5rem;
3227
+ }
3228
+
3229
+ .velu-color-table .velu-color-row {
3230
+ grid-template-columns: 140px 1fr;
3231
+ align-items: center;
3232
+ gap: 0.9rem;
3233
+ }
3234
+
3235
+ .velu-color-table .velu-color-row-title {
3236
+ font-size: 1.05rem;
3237
+ font-weight: 700;
3238
+ color: var(--color-fd-foreground);
3239
+ }
3240
+
3241
+ .velu-color-table .velu-color-row-items {
3242
+ display: flex;
3243
+ flex-wrap: wrap;
3244
+ gap: 0.7rem;
3245
+ }
3246
+
3247
+ .velu-color-table .velu-color-item {
3248
+ border: 0;
3249
+ padding: 0;
3250
+ background: transparent;
3251
+ }
3252
+
3253
+ .velu-color-table .velu-color-item-text {
3254
+ display: none;
3255
+ }
3256
+
3257
+ .velu-color-table .velu-color-swatch {
3258
+ width: 4.5rem;
3259
+ height: 3rem;
3260
+ border-radius: 0.55rem;
3261
+ border: 0;
3262
+ }
3263
+
3264
+ .velu-color-table .velu-color-copied-check {
3265
+ top: 0.25rem;
3266
+ right: 0.25rem;
3267
+ }
3268
+
3269
+ .velu-columns,
3270
+ .velu-examples {
3271
+ display: grid;
3272
+ grid-template-columns: repeat(var(--velu-columns-count, auto-fit), minmax(220px, 1fr));
3273
+ gap: 0.8rem;
3274
+ margin: 1rem 0;
3275
+ }
3276
+
3277
+ .velu-tiles {
3278
+ display: grid;
3279
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
3280
+ gap: 0.8rem;
3281
+ margin: 1rem 0;
3282
+ }
3283
+
3284
+ .velu-column,
3285
+ .velu-response {
3286
+ border: 1px solid var(--color-fd-border);
3287
+ border-radius: 0.6rem;
3288
+ padding: 0.7rem;
3289
+ }
3290
+
3291
+ .velu-panel {
3292
+ border: 1px solid var(--color-fd-border);
3293
+ background: var(--color-fd-card);
3294
+ border-radius: 1rem;
3295
+ padding: 0.45rem;
3296
+ margin: 1rem 0;
3297
+ }
3298
+
3299
+ .velu-panel h4 {
3300
+ margin: 0 0 0.35rem;
3301
+ }
3302
+
3303
+ .velu-panel .velu-callout,
3304
+ #nd-toc .velu-in-toc-example.velu-panel .velu-callout {
3305
+ margin: 0;
3306
+ }
3307
+
3308
+ .velu-prompt {
3309
+ border: 1px solid var(--color-fd-border);
3310
+ border-radius: 0.8rem;
3311
+ padding: 0.6rem 0.75rem;
3312
+ background: var(--color-fd-card);
3313
+ margin: 1rem 0;
3314
+ }
3315
+
3316
+ .velu-prompt-row {
3317
+ display: flex;
3318
+ align-items: center;
3319
+ justify-content: space-between;
3320
+ gap: 0.6rem;
3321
+ }
3322
+
3323
+ .velu-prompt-left {
3324
+ display: inline-flex;
3325
+ align-items: center;
3326
+ gap: 0.55rem;
3327
+ min-width: 0;
3328
+ }
3329
+
3330
+ .velu-prompt-icon {
3331
+ width: 1rem;
3332
+ height: 1rem;
3333
+ color: var(--color-fd-muted-foreground);
3334
+ flex-shrink: 0;
3335
+ }
3336
+
3337
+ .velu-prompt-desc {
3338
+ color: var(--color-fd-foreground);
3339
+ font-size: 0.95rem;
3340
+ font-weight: 400;
3341
+ line-height: 1.35;
3342
+ min-width: 0;
3343
+ }
3344
+
3345
+ .velu-prompt-actions {
3346
+ display: inline-flex;
3347
+ align-items: center;
3348
+ gap: 0.45rem;
3349
+ flex-shrink: 0;
3350
+ }
3351
+
3352
+ .velu-prompt-copy {
3353
+ border: 0;
3354
+ border-radius: 0.45rem;
3355
+ background: var(--color-fd-primary);
3356
+ color: var(--color-fd-primary-foreground, #fff);
3357
+ font-size: 0.8rem;
3358
+ font-weight: 600;
3359
+ padding: 0 0.55rem;
3360
+ height: 1.72rem;
3361
+ cursor: pointer;
3362
+ white-space: nowrap;
3363
+ line-height: 1.15;
3364
+ }
3365
+
3366
+ .velu-prompt-copy:hover {
3367
+ background: color-mix(in oklab, var(--color-fd-primary) 86%, black);
3368
+ }
3369
+
3370
+ .velu-prompt-open {
3371
+ border: 1px solid var(--color-fd-border);
3372
+ border-radius: 0.45rem;
3373
+ background: var(--color-fd-background);
3374
+ color: var(--color-fd-foreground);
3375
+ font-size: 0.8rem;
3376
+ font-weight: 600;
3377
+ padding: 0 0.5rem;
3378
+ height: 1.72rem;
3379
+ cursor: pointer;
3380
+ white-space: nowrap;
3381
+ line-height: 1.15;
3382
+ display: inline-flex;
3383
+ align-items: center;
3384
+ gap: 0.35rem;
3385
+ }
3386
+
3387
+ .velu-prompt-open:hover {
3388
+ background: var(--color-fd-accent);
3389
+ }
3390
+
3391
+ .velu-prompt-open-icon {
3392
+ width: 0.85rem;
3393
+ height: 0.85rem;
3394
+ flex-shrink: 0;
3395
+ }
3396
+
3397
+ .velu-prompt-open-icon-on-light {
3398
+ filter: brightness(0.55) contrast(1.35);
3399
+ }
3400
+
3401
+ .velu-prompt-open-icon-on-dark {
3402
+ filter: invert(1) brightness(1.08) contrast(1.1);
3403
+ }
3404
+
3405
+ .velu-prompt-open-icon-on-dark {
3406
+ display: none;
3407
+ }
3408
+
3409
+ :root[data-theme='dark'] .velu-prompt-open-icon-on-light,
3410
+ .dark .velu-prompt-open-icon-on-light {
3411
+ display: none;
3412
+ }
3413
+
3414
+ :root[data-theme='dark'] .velu-prompt-open-icon-on-dark,
3415
+ .dark .velu-prompt-open-icon-on-dark {
3416
+ display: inline-block;
3417
+ }
3418
+
3419
+ .velu-tile {
3420
+ display: flex;
3421
+ flex-direction: column;
3422
+ gap: 0.75rem;
3423
+ border: 0;
3424
+ border-radius: 0.75rem;
3425
+ padding: 0.85rem;
3426
+ text-decoration: none;
3427
+ color: inherit;
3428
+ }
3429
+
3430
+ .velu-tile:hover {
3431
+ background: var(--color-fd-accent);
3432
+ }
3433
+
3434
+ .velu-tile-preview {
3435
+ display: flex;
3436
+ align-items: center;
3437
+ justify-content: center;
3438
+ min-height: 170px;
3439
+ border: 0;
3440
+ border-radius: 0.9rem;
3441
+ overflow: hidden;
3442
+ background: color-mix(in oklab, var(--color-fd-card) 92%, transparent);
3443
+ padding: 1rem;
3444
+ }
3445
+
3446
+ .velu-tile-preview img {
3447
+ display: block;
3448
+ width: auto;
3449
+ height: auto;
3450
+ max-width: min(100%, 320px);
3451
+ max-height: 230px;
3452
+ margin: 0 !important;
3453
+ }
3454
+
3455
+ /* Fallback for MDX utility classes that may not be generated in this app build. */
3456
+ .velu-tile-preview .hidden {
3457
+ display: none;
3458
+ }
3459
+
3460
+ .velu-tile-preview .block {
3461
+ display: block;
3462
+ }
3463
+
3464
+ :root[data-theme='dark'] .velu-tile-preview .dark\:hidden,
3465
+ .dark .velu-tile-preview .dark\:hidden {
3466
+ display: none !important;
3467
+ }
3468
+
3469
+ :root[data-theme='dark'] .velu-tile-preview .dark\:block,
3470
+ .dark .velu-tile-preview .dark\:block {
3471
+ display: block !important;
3472
+ }
3473
+
3474
+ .velu-tile-body {
3475
+ display: flex;
3476
+ flex-direction: column;
3477
+ gap: 0.15rem;
3478
+ text-align: center;
3479
+ align-items: center;
3480
+ }
3481
+
3482
+ .velu-tile-title {
3483
+ font-weight: 600;
3484
+ line-height: 1.35;
3485
+ }
3486
+
3487
+ .velu-tile-description {
3488
+ font-size: 0.9rem;
3489
+ color: var(--color-fd-muted-foreground);
3490
+ line-height: 1.4;
3491
+ }
3492
+
3493
+ .velu-tree,
3494
+ .velu-files {
3495
+ margin: 1rem 0;
3496
+ }
3497
+
3498
+ .velu-tree .velu-tree-file,
3499
+ .velu-files .velu-tree-file {
3500
+ font-family: var(--font-fd-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
3501
+ }
3502
+
3503
+ .velu-tree-folder-static .velu-tree-folder-label {
3504
+ display: flex;
3505
+ align-items: center;
3506
+ border-radius: 0.375rem;
3507
+ padding: 0.375rem 0.5rem;
3508
+ font-size: 0.875rem;
3509
+ font-weight: 500;
3510
+ }
3511
+
3512
+ .velu-tree-children {
3513
+ margin-inline-start: 0.5rem;
3514
+ border-inline-start: 1px solid var(--color-fd-border);
3515
+ padding-inline-start: 0.5rem;
3516
+ }
3517
+
3518
+ .velu-tree ul {
3519
+ margin: 0.2rem 0 0.2rem 1rem;
3520
+ }