@vertebr/react 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/components/admin/AddonEditor.d.ts +13 -0
  2. package/dist/components/admin/AddonEditor.d.ts.map +1 -0
  3. package/dist/components/admin/AddonEditor.js +27 -0
  4. package/dist/components/admin/AddonOverview.d.ts +8 -0
  5. package/dist/components/admin/AddonOverview.d.ts.map +1 -0
  6. package/dist/components/admin/AddonOverview.js +125 -0
  7. package/dist/components/admin/AddonPreviewThumb.d.ts +11 -0
  8. package/dist/components/admin/AddonPreviewThumb.d.ts.map +1 -0
  9. package/dist/components/admin/AddonPreviewThumb.js +52 -0
  10. package/dist/components/admin/AdminCommandPalette.d.ts +9 -0
  11. package/dist/components/admin/AdminCommandPalette.d.ts.map +1 -0
  12. package/dist/components/admin/AdminCommandPalette.js +68 -0
  13. package/dist/components/admin/AdminContent.d.ts +4 -1
  14. package/dist/components/admin/AdminContent.d.ts.map +1 -1
  15. package/dist/components/admin/AdminContent.js +32 -10
  16. package/dist/components/admin/AdminHeader.d.ts +2 -3
  17. package/dist/components/admin/AdminHeader.d.ts.map +1 -1
  18. package/dist/components/admin/AdminHeader.js +10 -3
  19. package/dist/components/admin/AdminPoweredBy.d.ts +5 -0
  20. package/dist/components/admin/AdminPoweredBy.d.ts.map +1 -0
  21. package/dist/components/admin/AdminPoweredBy.js +8 -0
  22. package/dist/components/admin/AdminSidebar.d.ts.map +1 -1
  23. package/dist/components/admin/AdminSidebar.js +9 -7
  24. package/dist/components/admin/AdminSyncPage.d.ts +7 -0
  25. package/dist/components/admin/AdminSyncPage.d.ts.map +1 -0
  26. package/dist/components/admin/AdminSyncPage.js +169 -0
  27. package/dist/components/admin/AdminTopBar.d.ts +11 -3
  28. package/dist/components/admin/AdminTopBar.d.ts.map +1 -1
  29. package/dist/components/admin/AdminTopBar.js +27 -4
  30. package/dist/components/admin/AuditBoard.d.ts +7 -0
  31. package/dist/components/admin/AuditBoard.d.ts.map +1 -0
  32. package/dist/components/admin/AuditBoard.js +43 -0
  33. package/dist/components/admin/HealthModal.d.ts +9 -0
  34. package/dist/components/admin/HealthModal.d.ts.map +1 -0
  35. package/dist/components/admin/HealthModal.js +59 -0
  36. package/dist/components/admin/PagePreviewPane.d.ts +3 -1
  37. package/dist/components/admin/PagePreviewPane.d.ts.map +1 -1
  38. package/dist/components/admin/PagePreviewPane.js +2 -2
  39. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  40. package/dist/components/admin/VertebrAdmin.js +146 -17
  41. package/dist/components/admin/addonLabels.d.ts +6 -0
  42. package/dist/components/admin/addonLabels.d.ts.map +1 -0
  43. package/dist/components/admin/addonLabels.js +20 -0
  44. package/dist/components/admin/adminSearch.d.ts +12 -0
  45. package/dist/components/admin/adminSearch.d.ts.map +1 -0
  46. package/dist/components/admin/adminSearch.js +120 -0
  47. package/dist/components/admin/breadcrumbs.d.ts.map +1 -1
  48. package/dist/components/admin/breadcrumbs.js +14 -0
  49. package/dist/components/admin/routes.d.ts.map +1 -1
  50. package/dist/components/admin/routes.js +43 -1
  51. package/dist/components/admin/types.d.ts +9 -0
  52. package/dist/components/admin/types.d.ts.map +1 -1
  53. package/dist/components/config/ReferenceInput.d.ts +11 -0
  54. package/dist/components/config/ReferenceInput.d.ts.map +1 -0
  55. package/dist/components/config/ReferenceInput.js +99 -0
  56. package/dist/components/config/RevisionHistory.d.ts +8 -0
  57. package/dist/components/config/RevisionHistory.d.ts.map +1 -0
  58. package/dist/components/config/RevisionHistory.js +84 -0
  59. package/dist/components/config/form/ConfigField.d.ts +3 -2
  60. package/dist/components/config/form/ConfigField.d.ts.map +1 -1
  61. package/dist/components/config/form/ConfigField.js +3 -2
  62. package/dist/components/config/form/ConfigForm.d.ts +1 -1
  63. package/dist/components/config/form/ConfigForm.d.ts.map +1 -1
  64. package/dist/components/config/form/ConfigForm.js +13 -6
  65. package/dist/components/config/form/RecordConfigForm.d.ts +3 -2
  66. package/dist/components/config/form/RecordConfigForm.d.ts.map +1 -1
  67. package/dist/components/config/form/RecordConfigForm.js +2 -1
  68. package/dist/components/config/form/SettingsConfigForm.d.ts +3 -2
  69. package/dist/components/config/form/SettingsConfigForm.d.ts.map +1 -1
  70. package/dist/components/config/form/SettingsConfigForm.js +2 -2
  71. package/dist/components/config/form/types.d.ts +5 -1
  72. package/dist/components/config/form/types.d.ts.map +1 -1
  73. package/dist/components/env/EnvMultiSelect.d.ts +20 -0
  74. package/dist/components/env/EnvMultiSelect.d.ts.map +1 -0
  75. package/dist/components/env/EnvMultiSelect.js +38 -0
  76. package/dist/components/resources/ResourceTable.d.ts +7 -1
  77. package/dist/components/resources/ResourceTable.d.ts.map +1 -1
  78. package/dist/components/resources/ResourceTable.js +56 -6
  79. package/dist/components/theme/ThemeToggle.d.ts +3 -1
  80. package/dist/components/theme/ThemeToggle.d.ts.map +1 -1
  81. package/dist/components/theme/ThemeToggle.js +2 -2
  82. package/dist/components/ui/icons.d.ts +3 -0
  83. package/dist/components/ui/icons.d.ts.map +1 -1
  84. package/dist/components/ui/icons.js +17 -0
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +1 -0
  88. package/dist/lib/capabilities.d.ts +4 -0
  89. package/dist/lib/capabilities.d.ts.map +1 -0
  90. package/dist/lib/capabilities.js +9 -0
  91. package/dist/styles/addon.css +540 -0
  92. package/dist/styles/audit.css +34 -0
  93. package/dist/styles/base.css +1 -0
  94. package/dist/styles/font-library.css +2 -0
  95. package/dist/styles/form.css +143 -0
  96. package/dist/styles/index.css +3 -0
  97. package/dist/styles/main.css +0 -38
  98. package/dist/styles/modal.css +113 -0
  99. package/dist/styles/motion.css +55 -0
  100. package/dist/styles/nav.css +39 -4
  101. package/dist/styles/select.css +6 -0
  102. package/dist/styles/shell.css +417 -14
  103. package/dist/styles/sidebar.css +63 -3
  104. package/dist/styles/sync.css +540 -0
  105. package/dist/styles/table.css +15 -5
  106. package/dist/themes/dark.css +11 -11
  107. package/dist/themes/index.css +1 -0
  108. package/dist/themes/light.css +19 -19
  109. package/package.json +1 -1
@@ -4,12 +4,12 @@
4
4
  grid-column: 1 / -1;
5
5
  grid-row: 1;
6
6
  z-index: 40;
7
- display: flex;
7
+ display: grid;
8
+ grid-template-columns: minmax(14rem, 1.15fr) minmax(11rem, 20rem) minmax(14rem, 1fr);
8
9
  align-items: center;
9
- justify-content: space-between;
10
10
  gap: var(--vb-space-400);
11
11
  height: var(--vb-topbar-height);
12
- padding: 0 var(--vb-space-500);
12
+ padding: 0 var(--vb-space-400);
13
13
  border-bottom: 1px solid var(--vb-border-subdued);
14
14
  background: var(--vb-topbar-bg);
15
15
  }
@@ -22,6 +22,47 @@
22
22
  min-width: 0;
23
23
  }
24
24
 
25
+ .vertebr-topbar-start {
26
+ justify-self: start;
27
+ }
28
+
29
+ .vertebr-topbar-center {
30
+ justify-self: center;
31
+ width: 100%;
32
+ min-width: 0;
33
+ }
34
+
35
+ .vertebr-topbar-end {
36
+ justify-self: end;
37
+ gap: var(--vb-space-200);
38
+ }
39
+
40
+ .vertebr-topbar-cluster,
41
+ .vertebr-topbar-account {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: var(--vb-space-100);
45
+ min-width: 0;
46
+ }
47
+
48
+ .vertebr-topbar-cluster {
49
+ padding-right: var(--vb-space-200);
50
+ margin-right: var(--vb-space-100);
51
+ border-right: 1px solid var(--vb-border-subdued);
52
+ }
53
+
54
+ .vertebr-topbar-account {
55
+ max-width: 14rem;
56
+ padding-right: var(--vb-space-200);
57
+ margin-right: var(--vb-space-100);
58
+ border-right: 1px solid var(--vb-border-subdued);
59
+ }
60
+
61
+ .vertebr-topbar-cluster:empty,
62
+ .vertebr-topbar-account:empty {
63
+ display: none;
64
+ }
65
+
25
66
  /* Theme toggle lives in the top bar — hide sidebar-style labels. */
26
67
  .vertebr-topbar .vertebr-nav-label {
27
68
  display: none;
@@ -30,51 +71,239 @@
30
71
  .vertebr-topbar .vertebr-theme {
31
72
  padding: 0;
32
73
  gap: 0;
74
+ flex: none;
75
+ }
76
+
77
+ .vertebr-topbar .vertebr-theme[data-compact="true"] .vertebr-theme-toggle {
78
+ grid-template-columns: 1fr 1fr;
79
+ gap: 0.15rem;
80
+ padding: 0.15rem;
81
+ }
82
+
83
+ .vertebr-topbar .vertebr-theme[data-compact="true"] .vertebr-theme-option {
84
+ padding: 0.35rem 0.4rem;
85
+ min-width: 1.85rem;
33
86
  }
34
87
 
35
88
  .vertebr-topbar-brand {
36
89
  font-size: var(--vb-font-size-200);
37
90
  font-weight: var(--vb-font-weight-semibold);
91
+ letter-spacing: -0.01em;
92
+ white-space: nowrap;
93
+ color: var(--vb-text);
94
+ }
95
+
96
+ .vertebr-topbar-brand-wrap {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: var(--vb-space-200);
100
+ min-width: 0;
101
+ }
102
+
103
+ .vertebr-topbar-host {
104
+ display: inline-flex;
105
+ align-items: center;
106
+ gap: 0.4rem;
107
+ min-width: 0;
108
+ max-width: 12rem;
109
+ color: var(--vb-text-secondary);
110
+ font-size: var(--vb-font-size-200);
111
+ font-weight: var(--vb-font-weight-medium);
112
+ }
113
+
114
+ .vertebr-topbar-host[data-primary="true"] {
115
+ color: var(--vb-text);
116
+ }
117
+
118
+ .vertebr-topbar-host[data-primary="true"] .vertebr-topbar-host-label {
119
+ font-size: var(--vb-font-size-200);
120
+ font-weight: var(--vb-font-weight-semibold);
121
+ letter-spacing: -0.01em;
122
+ }
123
+
124
+ .vertebr-topbar-product {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ padding-left: var(--vb-space-200);
128
+ border-left: 1px solid var(--vb-border-subdued);
129
+ color: var(--vb-text-muted);
130
+ font-size: var(--vb-font-size-75);
131
+ font-weight: var(--vb-font-weight-medium);
132
+ letter-spacing: 0.04em;
133
+ text-transform: uppercase;
134
+ white-space: nowrap;
135
+ }
136
+
137
+ .vertebr-topbar-host-logo {
138
+ width: 1.15rem;
139
+ height: 1.15rem;
140
+ border-radius: var(--vb-radius-xs);
141
+ object-fit: contain;
142
+ }
143
+
144
+ .vertebr-topbar-host-label {
145
+ overflow: hidden;
146
+ text-overflow: ellipsis;
38
147
  white-space: nowrap;
39
148
  }
40
149
 
41
150
  .vertebr-topbar-toggle {
42
151
  appearance: none;
152
+ display: inline-grid;
153
+ place-items: center;
43
154
  border: 1px solid var(--vb-border);
44
155
  background: var(--vb-bg-elevated);
45
- color: var(--vb-text);
156
+ color: var(--vb-text-secondary);
46
157
  border-radius: var(--vb-radius-sm);
47
158
  width: 2rem;
48
159
  height: 2rem;
49
160
  cursor: pointer;
161
+ flex: none;
162
+ transition:
163
+ background 0.15s ease,
164
+ color 0.15s ease,
165
+ border-color 0.15s ease;
166
+ }
167
+
168
+ .vertebr-topbar-toggle:hover {
169
+ background: var(--vb-bg-hover);
170
+ color: var(--vb-text);
171
+ border-color: var(--vb-border-strong, var(--vb-border));
50
172
  }
51
173
 
52
174
  .vertebr-topbar-env {
53
175
  display: flex;
54
176
  align-items: center;
55
177
  gap: var(--vb-space-200);
178
+ margin-left: var(--vb-space-100);
56
179
  }
57
180
 
58
181
  .vertebr-topbar-search {
182
+ appearance: none;
59
183
  display: flex;
60
184
  align-items: center;
61
185
  gap: var(--vb-space-200);
62
- min-width: 12rem;
63
- max-width: 22rem;
64
- flex: 1;
65
- padding: 0.45rem 0.75rem;
66
- border: 1px solid var(--vb-border);
67
- border-radius: var(--vb-radius-full);
186
+ width: 100%;
187
+ padding: 0.4rem 0.7rem;
188
+ border: 1px solid transparent;
189
+ border-radius: var(--vb-radius-md);
68
190
  background: var(--vb-bg-muted);
69
191
  color: var(--vb-text-subtle);
70
192
  font-size: var(--vb-font-size-100);
193
+ cursor: pointer;
194
+ text-align: left;
195
+ transition:
196
+ border-color 0.15s ease,
197
+ background 0.15s ease,
198
+ color 0.15s ease,
199
+ box-shadow 0.15s ease;
200
+ }
201
+
202
+ .vertebr-topbar-search:hover {
203
+ border-color: var(--vb-border);
204
+ background: var(--vb-bg-elevated);
205
+ color: var(--vb-text-secondary);
206
+ box-shadow: var(--vb-shadow-sm);
71
207
  }
72
208
 
73
209
  .vertebr-topbar-search kbd {
74
210
  margin-left: auto;
211
+ padding: 0.1rem 0.35rem;
212
+ border: 1px solid var(--vb-border-subdued);
213
+ border-radius: var(--vb-radius-xs);
214
+ background: var(--vb-bg-elevated);
75
215
  font-family: var(--vb-mono);
76
216
  font-size: var(--vb-font-size-75);
77
- opacity: 0.7;
217
+ opacity: 0.85;
218
+ }
219
+
220
+ .vertebr-topbar-action {
221
+ appearance: none;
222
+ display: inline-flex;
223
+ align-items: center;
224
+ gap: 0.35rem;
225
+ height: 2rem;
226
+ padding: 0 0.65rem;
227
+ border: 1px solid var(--vb-border);
228
+ border-radius: var(--vb-radius-sm);
229
+ background: var(--vb-bg-elevated);
230
+ color: var(--vb-text-secondary);
231
+ font: inherit;
232
+ font-size: var(--vb-font-size-100);
233
+ font-weight: var(--vb-font-weight-medium);
234
+ white-space: nowrap;
235
+ cursor: pointer;
236
+ transition:
237
+ background 0.15s ease,
238
+ color 0.15s ease,
239
+ border-color 0.15s ease;
240
+ }
241
+
242
+ .vertebr-topbar-action:hover {
243
+ background: var(--vb-bg-hover);
244
+ color: var(--vb-text);
245
+ border-color: var(--vb-border-strong, var(--vb-border));
246
+ }
247
+
248
+ .vertebr-topbar-sync {
249
+ display: inline-flex;
250
+ align-items: center;
251
+ gap: 0.35rem;
252
+ white-space: nowrap;
253
+ }
254
+
255
+ .vertebr-topbar-health {
256
+ appearance: none;
257
+ display: inline-flex;
258
+ align-items: center;
259
+ gap: 0.4rem;
260
+ height: 2rem;
261
+ padding: 0 0.6rem;
262
+ border: 1px solid transparent;
263
+ border-radius: var(--vb-radius-sm);
264
+ font: inherit;
265
+ font-size: var(--vb-font-size-100);
266
+ font-weight: var(--vb-font-weight-medium);
267
+ color: var(--vb-text-muted);
268
+ background: transparent;
269
+ cursor: pointer;
270
+ transition:
271
+ background 0.15s ease,
272
+ border-color 0.15s ease,
273
+ filter 0.15s ease;
274
+ }
275
+
276
+ .vertebr-topbar-health:hover {
277
+ filter: brightness(0.97);
278
+ border-color: color-mix(in srgb, currentColor 28%, transparent);
279
+ }
280
+
281
+ .vertebr-topbar-health:focus-visible {
282
+ outline: 2px solid var(--vb-focus, currentColor);
283
+ outline-offset: 2px;
284
+ }
285
+
286
+ .vertebr-topbar-health-dot {
287
+ width: 0.45rem;
288
+ height: 0.45rem;
289
+ border-radius: 999px;
290
+ background: currentColor;
291
+ flex: none;
292
+ }
293
+
294
+ .vertebr-topbar-health[data-tone="ok"] {
295
+ color: var(--vb-ok, #2f6f4e);
296
+ background: var(--vb-ok-soft, color-mix(in srgb, var(--vb-ok, #2f6f4e) 12%, transparent));
297
+ }
298
+
299
+ .vertebr-topbar-health[data-tone="warn"] {
300
+ color: var(--vb-warn, #9a6b2f);
301
+ background: color-mix(in srgb, var(--vb-warn, #9a6b2f) 12%, transparent);
302
+ }
303
+
304
+ .vertebr-topbar-health[data-tone="error"] {
305
+ color: var(--vb-danger, #a33b3b);
306
+ background: var(--vb-danger-soft, color-mix(in srgb, var(--vb-danger, #a33b3b) 12%, transparent));
78
307
  }
79
308
 
80
309
  .vertebr-topbar-token {
@@ -85,19 +314,185 @@
85
314
 
86
315
  .vertebr-topbar-user {
87
316
  font-size: var(--vb-font-size-100);
88
- color: var(--vb-text-muted);
89
- max-width: 12rem;
317
+ color: var(--vb-text-secondary);
318
+ max-width: 9rem;
90
319
  overflow: hidden;
91
320
  text-overflow: ellipsis;
92
321
  white-space: nowrap;
93
322
  }
94
323
 
324
+ .vertebr-topbar-signout {
325
+ appearance: none;
326
+ border: none;
327
+ background: transparent;
328
+ color: var(--vb-text-muted);
329
+ font: inherit;
330
+ font-size: var(--vb-font-size-100);
331
+ font-weight: var(--vb-font-weight-medium);
332
+ padding: 0.25rem 0.35rem;
333
+ border-radius: var(--vb-radius-xs);
334
+ cursor: pointer;
335
+ white-space: nowrap;
336
+ }
337
+
338
+ .vertebr-topbar-signout:hover {
339
+ color: var(--vb-text);
340
+ background: var(--vb-bg-hover);
341
+ }
342
+
343
+ @media (max-width: 1100px) {
344
+ .vertebr-topbar-health-text {
345
+ display: none;
346
+ }
347
+
348
+ .vertebr-topbar-health {
349
+ padding: 0;
350
+ width: 2rem;
351
+ justify-content: center;
352
+ }
353
+
354
+ .vertebr-topbar-user {
355
+ display: none;
356
+ }
357
+ }
358
+
95
359
  @media (max-width: 900px) {
96
- .vertebr-topbar-search {
360
+ .vertebr-topbar {
361
+ grid-template-columns: minmax(0, 1fr) auto;
362
+ }
363
+
364
+ .vertebr-topbar-center {
365
+ display: none;
366
+ }
367
+
368
+ .vertebr-topbar-action span {
369
+ display: none;
370
+ }
371
+
372
+ .vertebr-topbar-action {
373
+ width: 2rem;
374
+ padding: 0;
375
+ justify-content: center;
376
+ }
377
+
378
+ .vertebr-topbar-host {
379
+ max-width: 7rem;
380
+ }
381
+
382
+ .vertebr-topbar-product {
97
383
  display: none;
98
384
  }
99
385
  }
100
386
 
387
+
388
+ /* ── Command palette ─────────────────────────────────── */
389
+
390
+ .vertebr-command-backdrop {
391
+ position: fixed;
392
+ inset: 0;
393
+ z-index: 90;
394
+ display: grid;
395
+ place-items: start center;
396
+ padding: min(12vh, 6rem) 1rem 1rem;
397
+ background: color-mix(in srgb, var(--vb-bg) 55%, rgba(0, 0, 0, 0.45));
398
+ backdrop-filter: blur(6px);
399
+ animation: vb-fade-in var(--vb-duration-normal) var(--vb-ease);
400
+ }
401
+
402
+ .vertebr-command {
403
+ width: min(100%, 34rem);
404
+ overflow: hidden;
405
+ border: 1px solid var(--vb-border);
406
+ border-radius: var(--vb-radius-lg);
407
+ background: var(--vb-bg-elevated);
408
+ box-shadow: var(--vb-shadow-lg);
409
+ animation: vb-pop-in var(--vb-duration-normal) var(--vb-ease);
410
+ }
411
+
412
+ .vertebr-command-input-wrap {
413
+ display: flex;
414
+ align-items: center;
415
+ gap: var(--vb-space-200);
416
+ padding: var(--vb-space-300) var(--vb-space-400);
417
+ border-bottom: 1px solid var(--vb-border-subdued);
418
+ color: var(--vb-text-muted);
419
+ }
420
+
421
+ .vertebr-command-input {
422
+ flex: 1;
423
+ min-width: 0;
424
+ border: none;
425
+ background: transparent;
426
+ color: var(--vb-text);
427
+ font: inherit;
428
+ font-size: var(--vb-font-size-200);
429
+ outline: none;
430
+ }
431
+
432
+ .vertebr-command-input-wrap kbd {
433
+ font-family: var(--vb-mono);
434
+ font-size: var(--vb-font-size-75);
435
+ color: var(--vb-text-muted);
436
+ }
437
+
438
+ .vertebr-command-results {
439
+ max-height: min(50vh, 24rem);
440
+ overflow: auto;
441
+ padding: var(--vb-space-200);
442
+ }
443
+
444
+ .vertebr-command-empty {
445
+ padding: var(--vb-space-400);
446
+ color: var(--vb-text-muted);
447
+ font-size: var(--vb-font-size-200);
448
+ text-align: center;
449
+ }
450
+
451
+ .vertebr-command-group + .vertebr-command-group {
452
+ margin-top: var(--vb-space-200);
453
+ }
454
+
455
+ .vertebr-command-group-label {
456
+ padding: var(--vb-space-100) var(--vb-space-200);
457
+ color: var(--vb-text-muted);
458
+ font-size: var(--vb-font-size-75);
459
+ font-weight: var(--vb-font-weight-medium);
460
+ text-transform: uppercase;
461
+ letter-spacing: 0.04em;
462
+ }
463
+
464
+ .vertebr-command-item {
465
+ appearance: none;
466
+ display: flex;
467
+ align-items: center;
468
+ justify-content: space-between;
469
+ gap: var(--vb-space-300);
470
+ width: 100%;
471
+ padding: var(--vb-space-200) var(--vb-space-300);
472
+ border: none;
473
+ border-radius: var(--vb-radius-md);
474
+ background: transparent;
475
+ color: var(--vb-text);
476
+ font: inherit;
477
+ font-size: var(--vb-font-size-200);
478
+ text-align: left;
479
+ cursor: pointer;
480
+ }
481
+
482
+ .vertebr-command-item[data-active] {
483
+ background: var(--vb-bg-hover);
484
+ }
485
+
486
+ .vertebr-command-item-label {
487
+ font-weight: var(--vb-font-weight-medium);
488
+ }
489
+
490
+ .vertebr-command-item-hint {
491
+ color: var(--vb-text-muted);
492
+ font-size: var(--vb-font-size-100);
493
+ white-space: nowrap;
494
+ }
495
+
101
496
  /* ── Save bar ────────────────────────────────────────── */
102
497
 
103
498
  .vertebr-savebar {
@@ -114,6 +509,7 @@
114
509
  border-top: 1px solid var(--vb-border);
115
510
  background: color-mix(in srgb, var(--vb-bg-elevated) 92%, transparent);
116
511
  backdrop-filter: blur(8px);
512
+ animation: vb-slide-up-bar var(--vb-duration-normal) var(--vb-ease);
117
513
  }
118
514
 
119
515
  .vertebr-savebar-message {
@@ -160,6 +556,7 @@
160
556
  background: var(--vb-bg-elevated);
161
557
  box-shadow: var(--vb-shadow-lg);
162
558
  font-size: var(--vb-font-size-200);
559
+ animation: vb-slide-up var(--vb-duration-normal) var(--vb-ease);
163
560
  }
164
561
 
165
562
  .vertebr-toast[data-tone="ok"] {
@@ -228,6 +625,12 @@
228
625
  background: var(--vb-danger-soft);
229
626
  }
230
627
 
628
+ .vertebr-badge[data-tone="warn"] {
629
+ color: var(--vb-accent);
630
+ border-color: color-mix(in srgb, var(--vb-accent) 35%, transparent);
631
+ background: var(--vb-accent-soft);
632
+ }
633
+
231
634
  .vertebr-banner {
232
635
  padding: var(--vb-space-300) var(--vb-space-400);
233
636
  border-radius: var(--vb-radius-md);
@@ -16,6 +16,7 @@
16
16
  gap: 0;
17
17
  overflow: hidden;
18
18
  isolation: isolate;
19
+ transition: padding-inline var(--vb-duration-normal) var(--vb-ease);
19
20
  }
20
21
 
21
22
  .vertebr-sidebar[data-collapsed="true"] {
@@ -23,13 +24,32 @@
23
24
  }
24
25
 
25
26
  .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-label-text {
26
- display: none;
27
+ opacity: 0;
28
+ max-width: 0;
27
29
  }
28
30
 
29
- .vertebr-sidebar[data-collapsed="true"] .vertebr-nav > button,
30
- .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-parent-label {
31
+ .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-label {
32
+ opacity: 0;
33
+ max-height: 0;
34
+ padding-block: 0;
35
+ margin: 0;
36
+ overflow: hidden;
37
+ }
38
+
39
+ .vertebr-nav-label-text {
40
+ overflow: hidden;
41
+ white-space: nowrap;
42
+ opacity: 1;
43
+ max-width: 12rem;
44
+ transition:
45
+ opacity var(--vb-duration-normal) var(--vb-ease),
46
+ max-width var(--vb-duration-normal) var(--vb-ease);
47
+ }
48
+
49
+ .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-group > button {
31
50
  justify-content: center;
32
51
  padding-inline: var(--vb-space-200);
52
+ gap: 0;
33
53
  }
34
54
 
35
55
  .vertebr-nav-icon {
@@ -61,3 +81,43 @@
61
81
  flex-direction: column;
62
82
  gap: 1rem;
63
83
  }
84
+
85
+ .vertebr-powered-by {
86
+ font-size: var(--vb-font-size-75);
87
+ color: var(--vb-text-subtle);
88
+ line-height: 1.35;
89
+ }
90
+
91
+ .vertebr-powered-by a {
92
+ color: inherit;
93
+ text-decoration: none;
94
+ transition: color 0.15s ease;
95
+ }
96
+
97
+ .vertebr-powered-by a:hover {
98
+ color: var(--vb-accent);
99
+ }
100
+
101
+ .vertebr-powered-by strong {
102
+ color: var(--vb-text-muted);
103
+ font-weight: var(--vb-font-weight-semibold);
104
+ }
105
+
106
+ .vertebr-powered-by[data-collapsed="true"] {
107
+ display: flex;
108
+ justify-content: center;
109
+ }
110
+
111
+ .vertebr-powered-by[data-collapsed="true"] a {
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ width: 1.75rem;
116
+ height: 1.75rem;
117
+ border: 1px solid var(--vb-border);
118
+ border-radius: var(--vb-radius-sm);
119
+ font-size: var(--vb-font-size-100);
120
+ font-weight: var(--vb-font-weight-semibold);
121
+ color: var(--vb-accent);
122
+ background: var(--vb-bg-elevated);
123
+ }