@veluai/velu 0.2.36 → 0.2.37

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.
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import Logo from './Logo.jsx';
3
+ import SocialLinks from './SocialLinks.jsx';
4
+ import ThemePreferenceMenu from './ThemePreferenceMenu.jsx';
5
+
6
+ export default function VepaFooter({ brand, columns = [], socials = [], linkComponent: Link = 'a' }) {
7
+ const single = columns.length === 1;
8
+ const completeHeadings = columns.every((c) => c.title);
9
+ return <footer id="footer" className="vepa-footer" data-layout={columns.length <= 3 ? 'compact' : 'expanded'} data-single={single} data-headings={completeHeadings}>
10
+ <div className="vepa-footer__inner">
11
+ <div className="vepa-footer__top">
12
+ <div className="vepa-footer__brand-column">
13
+ <Link href={brand?.href || '/'} className="vepa-footer__brand">
14
+ {brand?.logo ? <Logo logo={brand.logo} alt={brand.label} /> : <span>{brand?.label || 'Velu'}</span>}
15
+ </Link>
16
+ <SocialLinks socials={socials} className="vepa-footer__brand-socials" />
17
+ </div>
18
+ <div className="vepa-footer__columns" style={{ '--footer-columns': columns.length }}>
19
+ {columns.map((column, i) => <div className="vepa-footer__column" key={i}>
20
+ <div className="vepa-footer__links">
21
+ {column.title && !single && <p className="vepa-footer__heading">{column.title}</p>}
22
+ {(column.items || []).map((item, j) => {
23
+ const external = /^https?:\/\//.test(item.href || '');
24
+ const Tag = external ? 'a' : Link;
25
+ return <Tag className="vepa-footer__link" key={j} href={item.href || '#'} {...(external ? { target: '_blank', rel: 'noreferrer' } : {})}>{item.label}</Tag>;
26
+ })}
27
+ </div>
28
+ </div>)}
29
+ </div>
30
+ <SocialLinks socials={socials} className="vepa-footer__end-socials" />
31
+ </div>
32
+ {!completeHeadings && <SocialLinks socials={socials} className="vepa-footer__mobile-socials" />}
33
+ <div className="vepa-footer__divider" />
34
+ <div className="vepa-footer__bottom">
35
+ <a href="https://veludocs.com" target="_blank" rel="noreferrer" className="vepa-footer__powered">Powered by <strong>Velu</strong></a>
36
+ <ThemePreferenceMenu inline />
37
+ </div>
38
+ </div>
39
+ </footer>;
40
+ }
@@ -2,6 +2,7 @@
2
2
  (cta hover, image clip, group grid) so this has CSS. Namespaced. */
3
3
 
4
4
  .velu-card {
5
+ position: relative;
5
6
  display: flex;
6
7
  flex-direction: column;
7
8
  border: var(--border-width) solid var(--border-color);
@@ -11,6 +12,14 @@
11
12
  color: var(--text-color);
12
13
  text-decoration: none;
13
14
  }
15
+ .velu-card__link { position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
16
+ .velu-card:has(> .velu-card__link):hover { border-color: var(--accent-color); }
17
+ .velu-card__link:focus-visible { outline: 2px solid var(--accent-color); outline-offset: -2px; }
18
+ /* Nested controls must sit above the stretched-link overlay, or clicks hit the card href. */
19
+ .velu-card :is(a, button, input, select, textarea, summary, label):not(.velu-card__link) {
20
+ position: relative;
21
+ z-index: 2;
22
+ }
14
23
 
15
24
  /* CTA card: the whole card is the click target (stretched-link pattern —
16
25
  the CTA stays the single real <a>; a ::after overlay makes the entire
@@ -45,6 +45,31 @@
45
45
  0 0 var(--s2) color-mix(in srgb, #000 18%, transparent),
46
46
  0 0 var(--s0) color-mix(in srgb, #000 8%, transparent);
47
47
  }
48
+
49
+ /* Full-page Ask AI (`mode: assistant`). Sits under the navbar and
50
+ replaces the docs body instead of sliding in as a side panel. */
51
+ .velu-chatbot--page {
52
+ inset-block-start: var(--velu-header-height, 3.5rem);
53
+ inset-block-end: 0;
54
+ inset-inline: 0;
55
+ inline-size: 100%;
56
+ max-inline-size: none;
57
+ transform: none;
58
+ border-inline-start: 0;
59
+ border-block-start: var(--border-width) solid var(--surface-color);
60
+ box-shadow: none;
61
+ z-index: 5;
62
+ /* Side gutters so the full-page chat isn't flush to the viewport. */
63
+ padding-inline: var(--s4);
64
+ }
65
+ .velu-chatbot--page .velu-chatbot__header,
66
+ .velu-chatbot--page .velu-chatbot__body,
67
+ .velu-chatbot--page .velu-chatbot__composer,
68
+ .velu-chatbot--page .velu-chatbot__history {
69
+ max-inline-size: 42rem;
70
+ inline-size: 100%;
71
+ margin-inline: auto;
72
+ }
48
73
  /* base.css applies a global `* { max-width: 66ch }`; reset it so the
49
74
  panel's structural elements size to flex/the panel, not 66ch. */
50
75
  .velu-chatbot * {
@@ -118,6 +143,23 @@
118
143
  .velu-chatbot--open {
119
144
  transform: translateY(0);
120
145
  }
146
+ /* Page-mode assistant stays a full-viewport chat, not a bottom sheet. */
147
+ .velu-chatbot--page,
148
+ .velu-chatbot--page.velu-chatbot--open {
149
+ inset-block-start: var(--velu-header-height, 3.5rem);
150
+ inset-block-end: 0;
151
+ inset-inline: 0;
152
+ inline-size: 100%;
153
+ max-inline-size: none;
154
+ block-size: auto;
155
+ transform: none;
156
+ border-radius: 0;
157
+ padding-block-start: 0;
158
+ box-shadow: none;
159
+ }
160
+ .velu-chatbot--page .velu-chatbot__drag-handle {
161
+ display: none;
162
+ }
121
163
  }
122
164
 
123
165
  /* ── Header ─────────────────────────────────────────────────────────── */
@@ -808,6 +808,81 @@
808
808
  }
809
809
  }
810
810
 
811
+ /* ── Page modes (frontmatter `mode`) ─────────────────────────────────── */
812
+ /* Mintlify-compatible layouts. Default is the current chrome (sidebar +
813
+ TOC + footer) and needs no extra rules. */
814
+
815
+ /* Wide: drop the right rail, keep the right gutter, let the article
816
+ use the extra width inside that gutter. */
817
+ .velu-docs-layout[data-page-mode='wide'] .velu-docs-layout__aside--right,
818
+ .velu-docs-layout[data-page-mode='frame'] .velu-docs-layout__aside--right {
819
+ display: none;
820
+ }
821
+ .velu-docs-layout[data-page-mode='wide'] .velu-docs-layout__article {
822
+ max-inline-size: none;
823
+ }
824
+
825
+ /* Frame is custom canvas + sidebar: no TOC gutter; the landing column
826
+ is centered in the remaining width next to the sidebar. */
827
+ .velu-docs-layout[data-page-mode='frame'] .velu-docs-layout__center {
828
+ margin-inline-end: 0;
829
+ }
830
+
831
+ /* Custom / center / assistant: no sidebar, no TOC. */
832
+ .velu-docs-layout[data-page-mode='custom'] .velu-docs-layout__aside,
833
+ .velu-docs-layout[data-page-mode='center'] .velu-docs-layout__aside,
834
+ .velu-docs-layout[data-page-mode='assistant'] .velu-docs-layout__aside {
835
+ display: none;
836
+ }
837
+ .velu-docs-layout[data-page-mode='custom'] .velu-docs-layout__center,
838
+ .velu-docs-layout[data-page-mode='center'] .velu-docs-layout__center,
839
+ .velu-docs-layout[data-page-mode='assistant'] .velu-docs-layout__center {
840
+ margin-inline: 0;
841
+ }
842
+ .velu-docs-layout[data-page-mode='custom'] .velu-docs-layout__sidebar-toggle,
843
+ .velu-docs-layout[data-page-mode='center'] .velu-docs-layout__sidebar-toggle,
844
+ .velu-docs-layout[data-page-mode='assistant'] .velu-docs-layout__sidebar-toggle,
845
+ .velu-docs-layout[data-page-mode='wide'] .velu-toc-bar,
846
+ .velu-docs-layout[data-page-mode='custom'] .velu-toc-bar,
847
+ .velu-docs-layout[data-page-mode='frame'] .velu-toc-bar,
848
+ .velu-docs-layout[data-page-mode='center'] .velu-toc-bar,
849
+ .velu-docs-layout[data-page-mode='assistant'] .velu-toc-bar {
850
+ display: none;
851
+ }
852
+
853
+ /* Custom / frame are a landing canvas: center a max-w-4xl column.
854
+ Frame keeps the sidebar; custom does not. */
855
+ .velu-docs-layout[data-page-mode='custom'] .velu-docs-layout__main,
856
+ .velu-docs-layout[data-page-mode='frame'] .velu-docs-layout__main {
857
+ padding-block: calc(var(--s5) * 2);
858
+ padding-inline: var(--s4);
859
+ }
860
+ .velu-docs-layout[data-page-mode='custom'] .velu-docs-layout__article,
861
+ .velu-docs-layout[data-page-mode='frame'] .velu-docs-layout__article {
862
+ max-inline-size: 56rem;
863
+ margin-inline: auto;
864
+ }
865
+ .velu-docs-layout[data-page-mode='custom'] .velu-prose > :is(h1, h2, h3, p),
866
+ .velu-docs-layout[data-page-mode='frame'] .velu-prose > :is(h1, h2, h3, p) {
867
+ max-width: none;
868
+ text-align: center;
869
+ }
870
+
871
+ /* Assistant page: the chat fills the viewport below the header. Hide
872
+ the empty centre column when the chat is showing (no disabled-search
873
+ fallback). */
874
+ .velu-docs-layout[data-page-mode='assistant']
875
+ .velu-docs-layout__center:not(:has(.velu-assistant-disabled)) {
876
+ display: none;
877
+ }
878
+ .velu-assistant-disabled {
879
+ display: flex;
880
+ align-items: center;
881
+ justify-content: center;
882
+ min-block-size: 70vh;
883
+ padding: var(--s4) var(--s2);
884
+ }
885
+
811
886
  /* ── 404 takeover ─────────────────────────────────────────────────────── */
812
887
  /* On a not-found route the docs chrome (both fixed asides) is hidden and the
813
888
  centre column spans full width to center the <NotFound> content. The header
@@ -39,6 +39,12 @@
39
39
  color-mix(in srgb, #000 55%, transparent);
40
40
  }
41
41
 
42
+ .velu-header--no-tabs {
43
+ /* Tabs row is gone — restore bottom padding so brand / search /
44
+ actions don't sit on the header hairline. Matches the top inset. */
45
+ padding-block-end: var(--s-1);
46
+ }
47
+
42
48
  /* Once the user has scrolled even a single pixel, the header becomes
43
49
  a translucent frosted-glass overlay so the article content shows
44
50
  through faintly underneath. color-mix keeps the recipe token-driven:
@@ -63,3 +63,4 @@
63
63
  @import './components/docs-layout.css' layer(velu);
64
64
  @import './components/toc-bar.css' layer(velu);
65
65
  @import './components/search.css' layer(velu);
66
+ @import './themes/vepa.css' layer(velu);
@@ -0,0 +1,264 @@
1
+ /* Reference: Mintlify client 0.0.3566, Sequoia. Preset selectors are
2
+ intentionally scoped so a project's unlayered custom CSS still wins. */
3
+ :root:has([data-site-theme='vepa']),
4
+ [data-site-theme='vepa'] {
5
+ --page-bg: #fff;
6
+ --text-color: var(--vepa-gray-700);
7
+ --muted-color: var(--vepa-gray-500);
8
+ --border-color: var(--vepa-gray-200);
9
+ --surface-color: var(--vepa-gray-50);
10
+ --vepa-heading: var(--vepa-gray-900);
11
+ --vepa-hairline: var(--vepa-gray-100);
12
+ --velu-aside-right-width: 18rem;
13
+ --f-h1: 36px;
14
+ --lh-h1: 40px;
15
+ --f-h4: 18px;
16
+ --lh-h4: 28px;
17
+ font-family: var(--font-sans);
18
+ color: var(--text-color);
19
+ font-size: 16px;
20
+ line-height: 28px;
21
+ -webkit-font-smoothing: antialiased;
22
+ }
23
+ /* Set the default on the root, while honoring a project's body font override. */
24
+ [data-site-theme='vepa'] { font-family: inherit; }
25
+ :root[data-theme='dark']:has([data-site-theme='vepa']),
26
+ [data-theme='dark'] [data-site-theme='vepa'] {
27
+ --page-bg: var(--vepa-background-dark);
28
+ --text-color: var(--vepa-gray-400);
29
+ --muted-color: var(--vepa-gray-400);
30
+ --border-color: var(--vepa-gray-800);
31
+ --surface-color: var(--vepa-gray-900);
32
+ --vepa-heading: var(--vepa-gray-200);
33
+ --vepa-hairline: var(--vepa-gray-800);
34
+ }
35
+ [data-site-theme='vepa'] .velu-header {
36
+ padding: 0;
37
+ border: 0;
38
+ box-shadow: inset 0 -1px var(--vepa-hairline);
39
+ background: var(--page-bg);
40
+ backdrop-filter: none;
41
+ }
42
+ [data-site-theme='vepa'] .velu-header__top {
43
+ height: 48px;
44
+ padding-inline: 24px;
45
+ grid-template-columns: repeat(3, minmax(0, 1fr));
46
+ gap: 0;
47
+ }
48
+ [data-site-theme='vepa'] .velu-header__col--center { width: 100%; padding-inline: 8px; }
49
+ [data-site-theme='vepa'] .velu-header__col--center > * { justify-content: center !important; flex-wrap: nowrap !important; }
50
+ [data-site-theme='vepa'] .velu-logo { height: 22px; }
51
+ [data-site-theme='vepa'] .velu-header__wordmark { font-family: inherit; font-size: 30px; line-height: 35px; font-weight: 700; }
52
+ [data-site-theme='vepa'] .velu-header__mark { display: none; }
53
+ [data-site-theme='vepa'] .velu-header__action { font-size: 14px; line-height: 20px; border-radius: 8px; padding: 6px 12px; border: 0; }
54
+ [data-site-theme='vepa'] .velu-header__action--primary { font-weight: 500; }
55
+ [data-theme='dark'] [data-site-theme='vepa'] .velu-header__action--primary { color: #000b; }
56
+ [data-site-theme='vepa'] .velu-header__action--link { font-weight: 400; padding-inline: 8px; }
57
+ [data-site-theme='vepa'] .velu-search__trigger { inline-size: 256px !important; height: 32px; padding: 0 8px; gap: 4px; background: var(--surface-color); border-color: var(--vepa-hairline); border-radius: 8px; font-size: 14px; }
58
+ [data-site-theme='vepa'] .velu-search__trigger-icon svg { width: 16px; height: 16px; }
59
+ [data-site-theme='vepa'] .velu-search__kbd { background: var(--page-bg); border: 0; padding: 2px 6px; font: 500 12px/16px var(--font-sans); border-radius: 4px; }
60
+ [data-site-theme='vepa'] .velu-header__tabs { height: 48px; padding: 0 24px; background: var(--surface-color); }
61
+ [data-site-theme='vepa'] .velu-header__tab { height: 48px; padding-block: 0; font-size: 14px; line-height: 20px; }
62
+ @container docs (min-width: 1024px) {
63
+ [data-site-theme='vepa'] .velu-header[data-has-tabs='false'] .velu-header__tabs { display: none !important; }
64
+ [data-site-theme='vepa'] .velu-header__crumbs,
65
+ [data-site-theme='vepa'] .velu-header__burger { display: none; }
66
+ [data-site-theme='vepa'] .velu-docs-layout__aside--left { display: flex; width: 288px; top: var(--velu-header-height); bottom: 0; padding: 24px 8px 16px; border-right: 1px solid var(--vepa-hairline); transform: none; }
67
+ [data-site-theme='vepa'] .velu-docs-layout__center { margin-left: 288px; margin-right: var(--velu-aside-right-width); }
68
+ [data-site-theme='vepa'] .velu-docs-layout__aside--right { display: block; top: var(--velu-header-height); padding: 16px 32px; width: var(--velu-aside-right-width); border-left: 1px solid var(--vepa-hairline); }
69
+ [data-site-theme='vepa'] .velu-docs-layout__sidebar-toggle { display: none; }
70
+ }
71
+ [data-site-theme='vepa'] .velu-docs-layout__main { padding: 24px; }
72
+ [data-site-theme='vepa'] .velu-docs-layout__article { max-inline-size: 648px; position: relative; }
73
+ [data-site-theme='vepa'] .velu-sidebar { margin: 0; width: 100%; }
74
+ [data-site-theme='vepa'] :is(.velu-sidebar__section, .velu-api-sidebar__section) { position: static; font: 400 12px/16px var(--font-sans); text-transform: none; letter-spacing: 0; padding: 0 24px 8px; color: var(--vepa-heading); }
75
+ [data-site-theme='vepa'] .velu-sidebar__section::after,
76
+ [data-site-theme='vepa'] .velu-sidebar__indicator { display: none; }
77
+ [data-site-theme='vepa'] .velu-sidebar__item,
78
+ [data-site-theme='vepa'] .velu-sidebar__subitem,
79
+ [data-site-theme='vepa'] .velu-api-sidebar__item { font: 400 14px/20px var(--font-sans); padding: 6px 24px; border-radius: 8px; }
80
+ [data-site-theme='vepa'] :is(.velu-sidebar__item, .velu-api-sidebar__item):hover { background: var(--surface-color); }
81
+ [data-site-theme='vepa'] :is(.velu-sidebar__item--active, .velu-api-sidebar__item--active) { color: var(--accent-color); font-weight: 600; border-inline-start: 0; }
82
+ [data-site-theme='vepa'] :is(.velu-sidebar__list, .velu-api-sidebar__list) { gap: 1px !important; }
83
+ [data-site-theme='vepa'] .velu-sidebar > sidebar-group { gap: 0 !important; margin-bottom: 16px; }
84
+ /* API rows share the guide typography; only HTTP method badges use mono. */
85
+ [data-site-theme='vepa'] .velu-api-sidebar { margin: 0; border: 0; width: 100%; gap: 0 !important; }
86
+ [data-site-theme='vepa'] .velu-api-sidebar__section:not(:first-child) { margin-top: 32px; }
87
+ [data-site-theme='vepa'] .velu-api-sidebar__label { font: inherit; }
88
+ [data-site-theme='vepa'] .velu-api-sidebar__item { gap: 8px; align-items: baseline; }
89
+ [data-site-theme='vepa'] .velu-api-sidebar__item .velu-method-badge { font-size: 10px; line-height: 16px; padding: 0 4px; border: 0; border-radius: 4px; }
90
+ [data-site-theme='vepa'] .velu-context-bar { min-height: 16px; margin-bottom: 10px; }
91
+ [data-site-theme='vepa'] .velu-context-bar__eyebrow { font: 500 12px/16px var(--font-sans); color: var(--accent-color); text-transform: none; letter-spacing: 0; }
92
+ [data-site-theme='vepa'] .velu-context-bar__actions { position: absolute; right: 0; top: 29px; }
93
+ [data-site-theme='vepa'] .velu-context-menu__split { height: 34px; border-radius: 12px; }
94
+ [data-site-theme='vepa'] .velu-context-menu__copy,
95
+ [data-site-theme='vepa'] .velu-context-menu__toggle { font-size: 14px; line-height: 20px; padding: 6px 12px; }
96
+ [data-site-theme='vepa'] .velu-hero { gap: 4px; margin: 0; }
97
+ [data-site-theme='vepa'] .velu-hero + .velu-prose { margin-top: 32px; }
98
+ [data-site-theme='vepa'] .velu-hero h1 { font: 500 36px/40px var(--font-sans); letter-spacing: -.025em; color: var(--vepa-heading); margin: 0; padding-right: 170px; }
99
+ [data-site-theme='vepa'] [data-contextual-actions='false'] .velu-hero h1 { padding-right: 0; }
100
+ [data-site-theme='vepa'] :is(.velu-sidebar__section,.velu-api-sidebar__section) { background: transparent; }
101
+ [data-site-theme='vepa'] .velu-api-page__custom-content { margin-block: 56px; }
102
+ [data-site-theme='vepa'] .velu-hero p { color: var(--text-color) !important; margin: 8px 0 0; font-weight: 400; }
103
+ [data-site-theme='vepa'] .velu-prose { font-size: 16px; line-height: 28px; }
104
+ [data-site-theme='vepa'] .velu-prose > p { margin-block: 20px; max-width: none; }
105
+ [data-site-theme='vepa'] .velu-prose > :first-child { margin-top: 0; }
106
+ [data-site-theme='vepa'] .velu-prose :is(h2,h3,h4) { color: var(--vepa-heading); font-weight: 500; }
107
+ [data-site-theme='vepa'] .velu-prose :is(h2,h3,h4),
108
+ [data-site-theme='vepa'] .velu-card__title { font-family: var(--font-sans); }
109
+ [data-site-theme='vepa'] .velu-prose :where(div > p) { margin-block: 20px; }
110
+ [data-site-theme='vepa'] .velu-card__text > p { margin: 0; }
111
+ [data-site-theme='vepa'] .velu-prose h2 { font-size: 24px; line-height: 32px; margin: 48px 0 16px; }
112
+ .velu-vepa-toc { font: 400 14px/24px var(--font-sans); }
113
+ .velu-vepa-toc { font-family: inherit; }
114
+ .velu-vepa-toc > button { font: 400 12px/16px var(--font-sans); padding: 8px 0; color: var(--muted-color); background: none; border: 0; cursor: pointer; }
115
+ .velu-vepa-toc ul { list-style: none; padding: 0; margin: 0; }
116
+ .velu-vepa-toc ul ul { padding-left: 16px; }
117
+ .velu-vepa-toc a { display: block; padding-block: 4px; color: var(--text-color); text-decoration: none; }
118
+ .velu-vepa-toc a[aria-current] { color: var(--accent-color); font-weight: 500; }
119
+ .velu-theme-menu { position: relative; line-height: 20px; }
120
+ .velu-theme-menu__trigger { width: 32px; height: 32px; display: grid; place-items: center; border: 0; border-radius: 8px; background: transparent; color: var(--muted-color); cursor: pointer; }
121
+ .velu-theme-menu__options { position: absolute; z-index: 40; top: 36px; right: 0; width: 144px; padding: 4px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--page-bg); box-shadow: 0 4px 16px #0002; }
122
+ .velu-theme-menu__options button { display: flex; align-items: center; gap: 8px; width: 100%; border: 0; padding: 8px; background: none; border-radius: 8px; color: var(--text-color); font: 400 14px/20px var(--font-sans); cursor: pointer; }
123
+ .velu-theme-menu__options button span { flex: 1; text-align: left; }
124
+ .velu-theme-menu__options button:focus-visible,
125
+ .velu-theme-menu__options button:hover { outline: none; background: var(--surface-color); }
126
+ [data-site-theme='vepa'] :is(.velu-columns,.velu-card-group) { display: grid; grid-template-columns: repeat(var(--vepa-columns, 2), minmax(0, 1fr)); gap: 16px; margin-block: 28px; }
127
+ [data-site-theme='vepa'] :is(.velu-columns,.velu-card-group) > * { min-width: 0; }
128
+ [data-site-theme='vepa'] .velu-card { border-radius: 16px; }
129
+ [data-site-theme='vepa'] .velu-card__body { padding: 24px; gap: 4px; }
130
+ [data-site-theme='vepa'] .velu-card__icon { width: 24px; height: 24px; font-size: 24px; margin-bottom: 8px; }
131
+ [data-site-theme='vepa'] .velu-card__title { font-size: 16px; line-height: 24px; font-weight: 600; }
132
+ [data-site-theme='vepa'] .velu-card__text { font-size: 16px; line-height: 24px; }
133
+ @container docs (max-width: 1279px) {
134
+ [data-site-theme='vepa'] .velu-docs-layout__aside--right { display: none; }
135
+ [data-site-theme='vepa'] .velu-docs-layout__center { margin-right: 0; }
136
+ }
137
+ @container docs (max-width: 1023px) {
138
+ [data-site-theme='vepa'] .velu-header__top { display: grid; grid-template-columns: minmax(0,1fr) auto auto; padding-inline: 16px; gap: 12px !important; }
139
+ [data-site-theme='vepa'] .velu-header__col--brand { min-width: 0; flex-wrap: nowrap !important; }
140
+ [data-site-theme='vepa'] .velu-header__wordmark { font-size: 20px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
141
+ [data-site-theme='vepa'] .velu-header__col--actions { flex-wrap: nowrap !important; gap: 8px !important; }
142
+ [data-site-theme='vepa'] .velu-header__col--center { padding: 0; }
143
+ [data-site-theme='vepa'] .velu-header__actions-list,
144
+ [data-site-theme='vepa'] .velu-header__tab { display: none; }
145
+ [data-site-theme='vepa'] .velu-header__tabs { height: 56px; padding-inline: 16px; }
146
+ [data-site-theme='vepa'] .velu-header__crumbs { display: flex; font-size: 14px; line-height: 20px; }
147
+ [data-site-theme='vepa'] .velu-header__menu { display: flex; order: -1; margin: 0; width: 20px; padding: 0; }
148
+ [data-site-theme='vepa'] .velu-search__trigger { inline-size: 32px !important; border: 0; background: none; padding: 8px; }
149
+ [data-site-theme='vepa'] .velu-search__trigger-label,
150
+ [data-site-theme='vepa'] .velu-search__kbd { display: none; }
151
+ [data-site-theme='vepa'] .velu-docs-layout__center { margin-inline: 0; }
152
+ [data-site-theme='vepa'] .velu-docs-layout__sidebar-toggle,
153
+ [data-site-theme='vepa'] .velu-toc-bar { display: none; }
154
+ [data-site-theme='vepa'] .velu-docs-layout__aside--left { width: 288px; inset-inline: 0 auto; top: var(--velu-header-height); bottom: 0; padding: 24px 8px; transform: translateX(-100%); z-index: 40; visibility: hidden; }
155
+ [data-site-theme='vepa'][data-drawer-open='true'] .velu-docs-layout__aside--left { transform: none; visibility: visible; }
156
+ [data-site-theme='vepa'] :is(.velu-docs-layout__drawer-head,.velu-docs-layout__drawer-select) { display: none; }
157
+ [data-site-theme='vepa'] .velu-docs-layout__aside--left .velu-sidebar { opacity: 1; pointer-events: auto; }
158
+ [data-site-theme='vepa'] .velu-context-bar__actions { position: static; margin-top: 12px; }
159
+ [data-site-theme='vepa'] .velu-context-bar { display: contents !important; }
160
+ [data-site-theme='vepa'] .velu-docs-layout__article { display: flex; flex-direction: column; }
161
+ [data-site-theme='vepa'] .velu-context-bar__eyebrow { order: -3; margin-bottom: 10px; }
162
+ [data-site-theme='vepa'] .velu-hero { order: -2; margin-bottom: 0; }
163
+ [data-site-theme='vepa'] .velu-hero h1 { padding-right: 0; }
164
+ [data-site-theme='vepa'] .velu-prose { margin-top: 32px; }
165
+ }
166
+ @container docs (max-width: 639px) {
167
+ [data-site-theme='vepa'] .velu-hero h1 { font-size: 30px; line-height: 36px; }
168
+ [data-site-theme='vepa'] :is(.velu-columns,.velu-card-group) { grid-template-columns: 1fr; }
169
+ }
170
+ /* Modes retain their semantic chrome rules; only their measure changes. */
171
+ [data-site-theme='vepa'][data-page-mode='wide'] .velu-docs-layout__center,
172
+ [data-site-theme='vepa'][data-page-mode='frame'] .velu-docs-layout__center { margin-right: 0; }
173
+ [data-site-theme='vepa'][data-page-mode='wide'] .velu-docs-layout__article { max-inline-size: 896px; }
174
+ [data-site-theme='vepa'][data-page-mode='frame'] .velu-docs-layout__article { max-inline-size: 1152px; }
175
+ [data-site-theme='vepa']:is([data-page-mode='custom'],[data-page-mode='center'],[data-page-mode='assistant']) .velu-docs-layout__center { margin-inline: 0; }
176
+ [data-site-theme='vepa']:is([data-page-mode='wide'],[data-page-mode='frame'],[data-page-mode='custom'],[data-page-mode='center'],[data-page-mode='assistant']) .velu-docs-layout__aside--right,
177
+ [data-site-theme='vepa']:is([data-page-mode='custom'],[data-page-mode='center'],[data-page-mode='assistant']) .velu-docs-layout__aside--left { display: none; }
178
+ [data-site-theme='vepa'][data-page-mode='custom'] .velu-docs-layout__article { max-inline-size: none; }
179
+ [data-site-theme='vepa'][data-page-mode='center'] .velu-docs-layout__article { max-inline-size: 768px; }
180
+
181
+ /* API examples use a code rail, not the padded 18rem TOC. Reserve the
182
+ same width in the article geometry so neither column overlaps. */
183
+ [data-site-theme='vepa'][data-api='true'] { --velu-aside-right-width: calc(28rem + 24px); }
184
+ [data-site-theme='vepa'][data-api='true'] .velu-docs-layout__aside--right {
185
+ padding: 24px 24px 24px 0;
186
+ border-left: 0;
187
+ min-width: 0;
188
+ }
189
+ [data-site-theme='vepa'] .velu-api-samples { min-width: 0; gap: 24px; }
190
+ [data-site-theme='vepa'] .velu-api-samples > * { min-width: 0; max-width: 100%; }
191
+ [data-site-theme='vepa'] .velu-api-samples :is(pre,code) { font-size: 13px; line-height: 22px; }
192
+ .velu-vepa-request { border: 1px solid var(--border-color); border-radius: 16px; background: var(--surface-color); overflow: hidden; }
193
+ .velu-api-page__inline-samples { display: none; }
194
+ @container docs (max-width: 1279px) {
195
+ [data-site-theme='vepa'] .velu-api-page__inline-samples { display: block; margin-block: 24px 56px; }
196
+ }
197
+ .velu-vepa-request__header { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 8px 12px; font-size: 12px; line-height: 20px; }
198
+ .velu-vepa-request__header select { max-width: 45%; color: var(--muted-color); background: transparent; border: 0; font: inherit; }
199
+ .velu-vepa-request .velu-code-block { border: 0; border-radius: 16px; }
200
+ [data-site-theme='vepa'] .velu-api-page__section { position: relative; margin-block-start: 48px; }
201
+ [data-site-theme='vepa'] .velu-api-page__section > h2 { font: 600 18px/28px var(--font-sans); padding-bottom: 12px; border-bottom: 1px solid var(--border-color); margin: 0 0 24px; }
202
+ .velu-vepa-responses__status { position: absolute; right: 0; top: 4px; font-size: 12px; color: var(--muted-color); }
203
+ .velu-vepa-responses section + section { position: relative; padding-top: 24px; }
204
+ [data-site-theme='vepa'] .velu-api-sidebar .velu-method-badge--get { color: #087443; background: #d6f5e3; }
205
+ [data-site-theme='vepa'] .velu-api-sidebar .velu-method-badge--post { color: #164be9; background: #dfebff; }
206
+ /* Vepa advanced footer: measured against Mintlify Sequoia 0.0.3566. */
207
+ [data-site-theme='vepa'] > [data-velu-footer] { margin-inline-start: 288px; }
208
+ .vepa-footer { border-top: 1px solid var(--vepa-hairline); background: var(--page-bg); }
209
+ .vepa-footer__inner { display: flex; flex-direction: column; gap: 48px; max-width: 984px; width: 100%; margin: auto; padding: 112px 32px; }
210
+ .vepa-footer__top { display: flex; justify-content: space-between; gap: 32px; }
211
+ .vepa-footer__brand-column { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-start; min-width: 192px; gap: 96px; }
212
+ .vepa-footer__brand { color: var(--vepa-heading); text-decoration: none; font-family: inherit; font-size: 30px; line-height: 35px; font-weight: 700; }
213
+ .vepa-footer__brand .velu-logo { height: 26px; max-width: 192px; }
214
+ .vepa-footer__columns { display: grid; grid-template-columns: repeat(var(--footer-columns), minmax(0,1fr)); gap: 32px; flex: 1; min-width: 0; }
215
+ .vepa-footer__column { display: flex; flex-direction: column; align-items: center; }
216
+ .vepa-footer__links { display: flex; flex-direction: column; gap: 16px; min-width: 0; max-width: 100%; }
217
+ .vepa-footer__heading { margin: 0 0 4px; color: var(--vepa-gray-950); font: 600 14px/20px var(--font-sans); }
218
+ .vepa-footer__link { font: 400 14px/20px var(--font-sans); color: color-mix(in srgb, var(--vepa-gray-950) 50%, transparent); max-width: 144px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: none; }
219
+ .vepa-footer__link:hover { color: color-mix(in srgb, var(--vepa-gray-950) 70%, transparent); }
220
+ .vepa-footer .velu-socials { gap: 16px !important; min-width: 140px; max-width: 492px; height: fit-content; }
221
+ .vepa-footer .velu-social { width: 20px; height: 20px; color: var(--vepa-gray-500); }
222
+ .vepa-footer .velu-social svg { width: 20px; height: 20px; }
223
+ .vepa-footer__end-socials { justify-content: flex-end !important; }
224
+ .vepa-footer[data-layout='compact'] .vepa-footer__brand-socials,
225
+ .vepa-footer[data-layout='expanded'] .vepa-footer__end-socials,
226
+ .vepa-footer__mobile-socials { display: none !important; }
227
+ .vepa-footer__divider { height: 1px; background: var(--vepa-hairline); }
228
+ .vepa-footer__bottom { display: flex; justify-content: space-between; align-items: center; }
229
+ .vepa-footer__powered { display: flex; align-items: baseline; gap: 4px; color: var(--vepa-gray-400); font: 400 14px/20px var(--font-sans); text-decoration: none; }
230
+ .vepa-footer__powered strong { font-size: 16px; font-weight: 600; }
231
+ .vepa-footer-theme { display: flex; gap: 8px; }
232
+ .vepa-footer-theme button { display: grid; place-items: center; padding: 6px; background: transparent; border: 0; border-radius: 8px; color: var(--vepa-gray-400); cursor: pointer; }
233
+ .vepa-footer-theme button[aria-pressed='true'] { color: var(--vepa-gray-600); background: var(--vepa-gray-200); }
234
+ .vepa-footer[data-single='true'] .vepa-footer__links { flex-direction: row; align-items: center; justify-content: center; gap: 32px; }
235
+ [data-theme='dark'] .vepa-footer__heading { color: white; }
236
+ [data-theme='dark'] .vepa-footer__link { color: #ffffff80; }
237
+ [data-theme='dark'] .vepa-footer__link:hover { color: #ffffffb3; }
238
+ [data-theme='dark'] .vepa-footer .velu-social { color: var(--vepa-gray-600); }
239
+ [data-theme='dark'] .vepa-footer__divider { background: #ffffff0d; }
240
+ [data-theme='dark'] .vepa-footer__powered { color: var(--vepa-gray-500); }
241
+ [data-theme='dark'] .vepa-footer-theme button { color: var(--vepa-gray-600); }
242
+ [data-theme='dark'] .vepa-footer-theme button[aria-pressed='true'] { color: var(--vepa-gray-400); background: var(--vepa-gray-800); }
243
+ @container docs (max-width: 1023px) {
244
+ [data-site-theme='vepa'] > [data-velu-footer] { margin-inline-start: 0; }
245
+ .vepa-footer__inner { padding-block: 80px; }
246
+ .vepa-footer__brand-column { min-width: 80px; }
247
+ }
248
+ @container docs (max-width: 767px) {
249
+ .vepa-footer__inner { padding-block: 64px; }
250
+ .vepa-footer__top { flex-direction: column; }
251
+ .vepa-footer__brand-column { flex-direction: row; align-items: center; gap: 0; min-width: 64px; }
252
+ .vepa-footer__column { align-items: flex-start; }
253
+ .vepa-footer__columns { grid-template-columns: repeat(2,minmax(0,1fr)); }
254
+ .vepa-footer__link { white-space: normal; }
255
+ .vepa-footer__end-socials { display: none !important; }
256
+ .vepa-footer[data-layout='compact'][data-headings='true'] .vepa-footer__brand-socials { display: flex !important; justify-content: flex-end !important; }
257
+ .vepa-footer[data-headings='false'] .vepa-footer__brand-socials { display: none !important; }
258
+ .vepa-footer__mobile-socials { display: flex !important; }
259
+ .vepa-footer[data-single='true'] .vepa-footer__links { flex-direction: column; align-items: flex-start; gap: 16px; }
260
+ }
261
+ @container docs (max-width: 639px) {
262
+ .vepa-footer__columns { display: flex; flex-direction: column; }
263
+ .vepa-footer__brand { font-size: 24px; line-height: 30px; }
264
+ }
@@ -7,6 +7,11 @@
7
7
  "required": ["name"],
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
+ "theme": {
11
+ "type": "string",
12
+ "enum": ["velu", "vepa"],
13
+ "description": "Visual preset. Vepa follows the Mintlify Sequoia layout; light/dark preference is independent. Defaults to velu."
14
+ },
10
15
  "$schema": {
11
16
  "type": "string",
12
17
  "description": "URL of this JSON Schema, enabling editor validation + autocomplete."
package/src/navigation.js CHANGED
@@ -452,8 +452,9 @@ function itemFor(pageNode, pagesMap, ctx) {
452
452
  const fm = pagesMap[href]?.frontmatter;
453
453
  // Generated API pages carry their own label + HTTP method (for the sidebar
454
454
  // method badge); normal pages source their label from frontmatter.
455
- const label = pageNode.label ?? fm?.title ?? titleCase(lastSeg(href));
455
+ const label = pageNode.label ?? fm?.sidebarTitle ?? fm?.title ?? titleCase(lastSeg(href));
456
456
  const item = { label, href };
457
- if (pageNode.method) item.method = pageNode.method;
457
+ const method = pageNode.method ?? pagesMap[href]?.operation?.method;
458
+ if (method) item.method = method;
458
459
  return item;
459
460
  }