@vertebr/react 0.6.0 → 0.8.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 (58) hide show
  1. package/dist/components/admin/AdminContent.d.ts +2 -1
  2. package/dist/components/admin/AdminContent.d.ts.map +1 -1
  3. package/dist/components/admin/AdminContent.js +10 -2
  4. package/dist/components/admin/AdminHeader.d.ts +3 -2
  5. package/dist/components/admin/AdminHeader.d.ts.map +1 -1
  6. package/dist/components/admin/AdminHeader.js +5 -3
  7. package/dist/components/admin/AdminSaveBar.d.ts +2 -0
  8. package/dist/components/admin/AdminSaveBar.d.ts.map +1 -0
  9. package/dist/components/admin/AdminSaveBar.js +10 -0
  10. package/dist/components/admin/AdminSidebar.d.ts +2 -20
  11. package/dist/components/admin/AdminSidebar.d.ts.map +1 -1
  12. package/dist/components/admin/AdminSidebar.js +8 -12
  13. package/dist/components/admin/AdminToastStack.d.ts +2 -0
  14. package/dist/components/admin/AdminToastStack.d.ts.map +1 -0
  15. package/dist/components/admin/AdminToastStack.js +8 -0
  16. package/dist/components/admin/AdminTopBar.d.ts +24 -0
  17. package/dist/components/admin/AdminTopBar.d.ts.map +1 -0
  18. package/dist/components/admin/AdminTopBar.js +7 -0
  19. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  20. package/dist/components/admin/VertebrAdmin.js +15 -1
  21. package/dist/components/admin/breadcrumbs.d.ts +8 -0
  22. package/dist/components/admin/breadcrumbs.d.ts.map +1 -0
  23. package/dist/components/admin/breadcrumbs.js +44 -0
  24. package/dist/components/admin/routes.d.ts.map +1 -1
  25. package/dist/components/admin/routes.js +9 -2
  26. package/dist/components/admin/types.d.ts +6 -0
  27. package/dist/components/admin/types.d.ts.map +1 -1
  28. package/dist/components/config/form/ConfigForm.d.ts.map +1 -1
  29. package/dist/components/config/form/ConfigForm.js +44 -7
  30. package/dist/components/fonts/FontPickerField.d.ts.map +1 -1
  31. package/dist/components/fonts/FontPickerField.js +12 -1
  32. package/dist/components/resources/ResourceTable.d.ts +3 -1
  33. package/dist/components/resources/ResourceTable.d.ts.map +1 -1
  34. package/dist/components/resources/ResourceTable.js +20 -5
  35. package/dist/components/ui/icons.d.ts +15 -0
  36. package/dist/components/ui/icons.d.ts.map +1 -0
  37. package/dist/components/ui/icons.js +60 -0
  38. package/dist/components/ui/primitives.d.ts +27 -0
  39. package/dist/components/ui/primitives.d.ts.map +1 -0
  40. package/dist/components/ui/primitives.js +16 -0
  41. package/dist/hooks/useSaveBar.d.ts +21 -0
  42. package/dist/hooks/useSaveBar.d.ts.map +1 -0
  43. package/dist/hooks/useSaveBar.js +30 -0
  44. package/dist/hooks/useToast.d.ts +18 -0
  45. package/dist/hooks/useToast.d.ts.map +1 -0
  46. package/dist/hooks/useToast.js +23 -0
  47. package/dist/styles/base.css +8 -14
  48. package/dist/styles/buttons.css +3 -12
  49. package/dist/styles/index.css +1 -0
  50. package/dist/styles/main.css +3 -7
  51. package/dist/styles/nav.css +3 -1
  52. package/dist/styles/shell.css +314 -0
  53. package/dist/styles/sidebar.css +26 -5
  54. package/dist/themes/dark.css +48 -46
  55. package/dist/themes/index.css +1 -0
  56. package/dist/themes/light.css +91 -85
  57. package/dist/themes/tokens.css +52 -0
  58. package/package.json +1 -1
@@ -0,0 +1,314 @@
1
+ /* ── Top bar ─────────────────────────────────────────── */
2
+
3
+ .vertebr-topbar {
4
+ grid-column: 1 / -1;
5
+ grid-row: 1;
6
+ z-index: 40;
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: space-between;
10
+ gap: var(--vb-space-400);
11
+ height: var(--vb-topbar-height);
12
+ padding: 0 var(--vb-space-500);
13
+ border-bottom: 1px solid var(--vb-border-subdued);
14
+ background: var(--vb-topbar-bg);
15
+ }
16
+
17
+ .vertebr-topbar-start,
18
+ .vertebr-topbar-end {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: var(--vb-space-300);
22
+ min-width: 0;
23
+ }
24
+
25
+ .vertebr-topbar-brand {
26
+ font-size: var(--vb-font-size-200);
27
+ font-weight: var(--vb-font-weight-semibold);
28
+ white-space: nowrap;
29
+ }
30
+
31
+ .vertebr-topbar-toggle {
32
+ appearance: none;
33
+ border: 1px solid var(--vb-border);
34
+ background: var(--vb-bg-elevated);
35
+ color: var(--vb-text);
36
+ border-radius: var(--vb-radius-sm);
37
+ width: 2rem;
38
+ height: 2rem;
39
+ cursor: pointer;
40
+ }
41
+
42
+ .vertebr-topbar-env {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: var(--vb-space-200);
46
+ }
47
+
48
+ .vertebr-topbar-search {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: var(--vb-space-200);
52
+ min-width: 12rem;
53
+ max-width: 22rem;
54
+ flex: 1;
55
+ padding: 0.45rem 0.75rem;
56
+ border: 1px solid var(--vb-border);
57
+ border-radius: var(--vb-radius-full);
58
+ background: var(--vb-bg-muted);
59
+ color: var(--vb-text-subtle);
60
+ font-size: var(--vb-font-size-100);
61
+ }
62
+
63
+ .vertebr-topbar-search kbd {
64
+ margin-left: auto;
65
+ font-family: var(--vb-mono);
66
+ font-size: var(--vb-font-size-75);
67
+ opacity: 0.7;
68
+ }
69
+
70
+ .vertebr-topbar-token {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: var(--vb-space-100);
74
+ }
75
+
76
+ .vertebr-topbar-user {
77
+ font-size: var(--vb-font-size-100);
78
+ color: var(--vb-text-muted);
79
+ max-width: 12rem;
80
+ overflow: hidden;
81
+ text-overflow: ellipsis;
82
+ white-space: nowrap;
83
+ }
84
+
85
+ @media (max-width: 900px) {
86
+ .vertebr-topbar-search {
87
+ display: none;
88
+ }
89
+ }
90
+
91
+ /* ── Save bar ────────────────────────────────────────── */
92
+
93
+ .vertebr-savebar {
94
+ position: sticky;
95
+ bottom: 0;
96
+ z-index: 35;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ gap: var(--vb-space-400);
101
+ min-height: var(--vb-savebar-height);
102
+ padding: var(--vb-space-300) var(--vb-space-500);
103
+ padding-bottom: calc(var(--vb-space-300) + env(safe-area-inset-bottom, 0px));
104
+ border-top: 1px solid var(--vb-border);
105
+ background: color-mix(in srgb, var(--vb-bg-elevated) 92%, transparent);
106
+ backdrop-filter: blur(8px);
107
+ }
108
+
109
+ .vertebr-savebar-message {
110
+ font-size: var(--vb-font-size-200);
111
+ color: var(--vb-text-secondary);
112
+ }
113
+
114
+ .vertebr-savebar[data-tone="ok"] .vertebr-savebar-message {
115
+ color: var(--vb-ok);
116
+ }
117
+
118
+ .vertebr-savebar[data-tone="danger"] .vertebr-savebar-message {
119
+ color: var(--vb-danger-text);
120
+ }
121
+
122
+ .vertebr-savebar-actions {
123
+ display: flex;
124
+ gap: var(--vb-space-200);
125
+ }
126
+
127
+ /* ── Toasts ──────────────────────────────────────────── */
128
+
129
+ .vertebr-toast-stack {
130
+ position: fixed;
131
+ right: var(--vb-space-500);
132
+ bottom: calc(var(--vb-space-500) + env(safe-area-inset-bottom, 0px));
133
+ z-index: 100;
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: var(--vb-space-200);
137
+ pointer-events: none;
138
+ }
139
+
140
+ .vertebr-toast {
141
+ pointer-events: auto;
142
+ display: flex;
143
+ align-items: center;
144
+ gap: var(--vb-space-300);
145
+ min-width: 16rem;
146
+ max-width: 24rem;
147
+ padding: var(--vb-space-300) var(--vb-space-400);
148
+ border: 1px solid var(--vb-border);
149
+ border-radius: var(--vb-radius-md);
150
+ background: var(--vb-bg-elevated);
151
+ box-shadow: var(--vb-shadow-lg);
152
+ font-size: var(--vb-font-size-200);
153
+ }
154
+
155
+ .vertebr-toast[data-tone="ok"] {
156
+ border-color: color-mix(in srgb, var(--vb-ok) 40%, var(--vb-border));
157
+ }
158
+
159
+ .vertebr-toast[data-tone="danger"] {
160
+ border-color: color-mix(in srgb, var(--vb-danger) 40%, var(--vb-border));
161
+ }
162
+
163
+ .vertebr-toast-dismiss {
164
+ appearance: none;
165
+ border: none;
166
+ background: transparent;
167
+ color: var(--vb-text-muted);
168
+ font-size: 1.1rem;
169
+ cursor: pointer;
170
+ margin-left: auto;
171
+ }
172
+
173
+ /* ── UI primitives ───────────────────────────────────── */
174
+
175
+ .vertebr-card {
176
+ border: 1px solid var(--vb-border-subdued);
177
+ border-radius: var(--vb-radius-lg);
178
+ background: var(--vb-bg-elevated);
179
+ box-shadow: var(--vb-shadow-sm);
180
+ }
181
+
182
+ .vertebr-card[data-subdued="true"] {
183
+ background: var(--vb-bg-subdued);
184
+ box-shadow: none;
185
+ }
186
+
187
+ .vertebr-card-head {
188
+ padding: var(--vb-space-400) var(--vb-space-500);
189
+ border-bottom: 1px solid var(--vb-border-subdued);
190
+ font-weight: var(--vb-font-weight-semibold);
191
+ }
192
+
193
+ .vertebr-card-body {
194
+ padding: var(--vb-space-500);
195
+ }
196
+
197
+ .vertebr-badge {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ padding: 0.12rem 0.45rem;
201
+ border-radius: var(--vb-radius-full);
202
+ font-size: var(--vb-font-size-75);
203
+ font-weight: var(--vb-font-weight-medium);
204
+ border: 1px solid var(--vb-border);
205
+ color: var(--vb-text-secondary);
206
+ background: var(--vb-bg-muted);
207
+ }
208
+
209
+ .vertebr-badge[data-tone="ok"] {
210
+ color: var(--vb-ok);
211
+ border-color: color-mix(in srgb, var(--vb-ok) 35%, transparent);
212
+ background: var(--vb-ok-soft);
213
+ }
214
+
215
+ .vertebr-badge[data-tone="danger"] {
216
+ color: var(--vb-danger-text);
217
+ border-color: color-mix(in srgb, var(--vb-danger) 35%, transparent);
218
+ background: var(--vb-danger-soft);
219
+ }
220
+
221
+ .vertebr-banner {
222
+ padding: var(--vb-space-300) var(--vb-space-400);
223
+ border-radius: var(--vb-radius-md);
224
+ border: 1px solid var(--vb-border);
225
+ background: var(--vb-bg-muted);
226
+ font-size: var(--vb-font-size-200);
227
+ }
228
+
229
+ .vertebr-banner[data-tone="ok"] {
230
+ border-color: color-mix(in srgb, var(--vb-ok) 35%, transparent);
231
+ background: var(--vb-ok-soft);
232
+ }
233
+
234
+ .vertebr-banner[data-tone="danger"] {
235
+ border-color: color-mix(in srgb, var(--vb-danger) 35%, transparent);
236
+ background: var(--vb-danger-soft);
237
+ }
238
+
239
+ .vertebr-empty-state {
240
+ display: grid;
241
+ gap: var(--vb-space-200);
242
+ justify-items: start;
243
+ padding: var(--vb-space-800);
244
+ text-align: left;
245
+ }
246
+
247
+ .vertebr-empty-state h3 {
248
+ margin: 0;
249
+ font-size: var(--vb-font-size-400);
250
+ }
251
+
252
+ .vertebr-empty-state p {
253
+ margin: 0;
254
+ color: var(--vb-text-muted);
255
+ max-width: 28rem;
256
+ }
257
+
258
+ .vertebr-skeleton {
259
+ display: grid;
260
+ gap: var(--vb-space-200);
261
+ }
262
+
263
+ .vertebr-skeleton span {
264
+ display: block;
265
+ height: 0.85rem;
266
+ border-radius: var(--vb-radius-sm);
267
+ background: linear-gradient(
268
+ 90deg,
269
+ var(--vb-bg-muted) 0%,
270
+ var(--vb-bg-hover) 50%,
271
+ var(--vb-bg-muted) 100%
272
+ );
273
+ background-size: 200% 100%;
274
+ animation: vb-skeleton 1.2s ease-in-out infinite;
275
+ }
276
+
277
+ @keyframes vb-skeleton {
278
+ 0% {
279
+ background-position: 100% 0;
280
+ }
281
+ 100% {
282
+ background-position: -100% 0;
283
+ }
284
+ }
285
+
286
+ /* ── Breadcrumbs ─────────────────────────────────────── */
287
+
288
+ .vertebr-breadcrumbs {
289
+ display: flex;
290
+ flex-wrap: wrap;
291
+ align-items: center;
292
+ gap: 0.35rem;
293
+ margin: 0 0 var(--vb-space-200);
294
+ padding: 0;
295
+ list-style: none;
296
+ font-size: var(--vb-font-size-100);
297
+ color: var(--vb-text-muted);
298
+ }
299
+
300
+ .vertebr-breadcrumbs li {
301
+ display: inline-flex;
302
+ align-items: center;
303
+ gap: 0.35rem;
304
+ }
305
+
306
+ .vertebr-breadcrumbs li:not(:last-child)::after {
307
+ content: "/";
308
+ opacity: 0.5;
309
+ }
310
+
311
+ .vertebr-breadcrumbs strong {
312
+ color: var(--vb-text);
313
+ font-weight: var(--vb-font-weight-medium);
314
+ }
@@ -1,15 +1,16 @@
1
1
  /* ── Sidebar ─────────────────────────────────────────── */
2
2
 
3
3
  .vertebr-sidebar {
4
+ grid-row: 2;
4
5
  position: sticky;
5
- top: 0;
6
+ top: var(--vb-topbar-height);
6
7
  z-index: 30;
7
8
  align-self: start;
8
- height: 100vh;
9
- max-height: 100vh;
10
- border-right: 1px solid var(--vb-border);
9
+ height: calc(100dvh - var(--vb-topbar-height));
10
+ max-height: calc(100dvh - var(--vb-topbar-height));
11
+ border-right: 1px solid var(--vb-border-subdued);
11
12
  background: var(--vb-sidebar-from);
12
- padding: 1.35rem 0.9rem 1rem;
13
+ padding: var(--vb-space-400) var(--vb-space-300) var(--vb-space-400);
13
14
  display: flex;
14
15
  flex-direction: column;
15
16
  gap: 0;
@@ -17,6 +18,26 @@
17
18
  isolation: isolate;
18
19
  }
19
20
 
21
+ .vertebr-sidebar[data-collapsed="true"] {
22
+ padding-inline: var(--vb-space-200);
23
+ }
24
+
25
+ .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-label-text {
26
+ display: none;
27
+ }
28
+
29
+ .vertebr-sidebar[data-collapsed="true"] .vertebr-nav > button,
30
+ .vertebr-sidebar[data-collapsed="true"] .vertebr-nav-parent-label {
31
+ justify-content: center;
32
+ padding-inline: var(--vb-space-200);
33
+ }
34
+
35
+ .vertebr-nav-icon {
36
+ flex: 0 0 auto;
37
+ width: 1.1rem;
38
+ height: 1.1rem;
39
+ }
40
+
20
41
  .vertebr-sidebar-top {
21
42
  display: flex;
22
43
  flex-direction: column;
@@ -1,55 +1,57 @@
1
1
  /**
2
- * Vertebr dark theme (default).
3
- * Apply with data-vb-theme="dark" or leave unset (:root defaults here).
2
+ * Vertebr dark theme (default) — neutral Shopify-inspired palette.
4
3
  */
5
4
  :root,
6
5
  [data-vb-theme="dark"] {
7
6
  color-scheme: dark;
8
7
 
9
- --vb-bg: #0e1014;
10
- --vb-bg-deep: #12151c;
11
- --vb-bg-elevated: #161922;
12
- --vb-bg-muted: #1e2330;
13
- --vb-bg-hover: #252b3a;
14
- --vb-border: #2a3142;
15
- --vb-border-strong: #3a4358;
16
- --vb-text: #f0eee8;
17
- --vb-text-muted: #8b93a7;
18
- --vb-text-subtle: #6a7285;
19
- --vb-accent: #c9a66b;
20
- --vb-accent-dim: #9a7d45;
21
- --vb-accent-soft: rgba(201, 166, 107, 0.14);
22
- --vb-accent-contrast: #1a140c;
23
- --vb-danger: #e07a72;
24
- --vb-danger-soft: rgba(224, 122, 114, 0.12);
25
- --vb-danger-text: #f3c4bf;
26
- --vb-ok: #87a87f;
27
- --vb-ok-soft: rgba(135, 168, 127, 0.14);
28
- --vb-warn-text: #e8d0a0;
8
+ --vb-bg: #1a1a1a;
9
+ --vb-bg-deep: #141414;
10
+ --vb-bg-elevated: #242424;
11
+ --vb-bg-muted: #2e2e2e;
12
+ --vb-bg-hover: #383838;
13
+ --vb-bg-subdued: #303030;
14
+ --vb-border: #424242;
15
+ --vb-border-subdued: #353535;
16
+ --vb-border-strong: #5c5c5c;
17
+ --vb-text: #f3f3f3;
18
+ --vb-text-muted: #a8a8a8;
19
+ --vb-text-subtle: #7a7a7a;
20
+ --vb-text-secondary: #b5b5b5;
21
+ --vb-accent: #008060;
22
+ --vb-accent-dim: #006e52;
23
+ --vb-accent-soft: rgba(0, 128, 96, 0.14);
24
+ --vb-accent-contrast: #ffffff;
25
+ --vb-interactive: #5c9eff;
26
+ --vb-interactive-soft: rgba(92, 158, 255, 0.12);
27
+ --vb-danger: #e51c00;
28
+ --vb-danger-soft: rgba(229, 28, 0, 0.12);
29
+ --vb-danger-text: #ff8a7a;
30
+ --vb-ok: #29845a;
31
+ --vb-ok-soft: rgba(41, 132, 90, 0.14);
32
+ --vb-warn-text: #ffc96b;
33
+ --vb-warn-soft: rgba(255, 201, 107, 0.12);
29
34
 
30
- --vb-glow-accent: rgba(201, 166, 107, 0.07);
31
- --vb-glow-cool: rgba(60, 80, 120, 0.08);
32
- --vb-surface-tint: rgba(255, 255, 255, 0.02);
33
- --vb-surface-tint-strong: rgba(255, 255, 255, 0.04);
34
- --vb-sidebar-from: #0e1014;
35
- --vb-sidebar-to: #12151c;
36
- --vb-header-from: rgba(14, 16, 20, 0.96);
37
- --vb-header-to: rgba(14, 16, 20, 0.86);
38
- --vb-actions-from: rgba(22, 25, 34, 0.65);
39
- --vb-actions-to: rgba(18, 21, 28, 0.95);
40
- --vb-input-focus-bg: #12151c;
41
- --vb-btn-primary-from: #d4b27a;
42
- --vb-btn-primary-to: #c9a66b;
43
- --vb-btn-primary-border: #b89255;
44
- --vb-btn-primary-hover-from: #dbbc88;
45
- --vb-btn-primary-hover-to: #d0ad72;
46
- --vb-btn-primary-hover-border: #c4a574;
35
+ --vb-glow-accent: transparent;
36
+ --vb-glow-cool: transparent;
37
+ --vb-surface-tint: rgba(255, 255, 255, 0.03);
38
+ --vb-surface-tint-strong: rgba(255, 255, 255, 0.06);
39
+ --vb-sidebar-from: #1a1a1a;
40
+ --vb-sidebar-to: #1a1a1a;
41
+ --vb-header-from: #1a1a1a;
42
+ --vb-header-to: #1a1a1a;
43
+ --vb-topbar-bg: #242424;
44
+ --vb-actions-from: rgba(36, 36, 36, 0.95);
45
+ --vb-actions-to: rgba(26, 26, 26, 0.98);
46
+ --vb-input-focus-bg: #2e2e2e;
47
+ --vb-btn-primary-from: #008060;
48
+ --vb-btn-primary-to: #008060;
49
+ --vb-btn-primary-border: #006e52;
50
+ --vb-btn-primary-hover-from: #00966d;
51
+ --vb-btn-primary-hover-to: #00966d;
52
+ --vb-btn-primary-hover-border: #008060;
47
53
 
48
- --vb-font: "IBM Plex Sans", "Segoe UI", sans-serif;
49
- --vb-mono: "IBM Plex Mono", ui-monospace, monospace;
50
- --vb-radius: 8px;
51
- --vb-radius-sm: 6px;
52
- --vb-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset,
53
- 0 18px 48px rgba(0, 0, 0, 0.45);
54
- --vb-sidebar-width: 260px;
54
+ --vb-radius: var(--vb-radius-md);
55
+ --vb-radius-sm: var(--vb-radius-sm);
56
+ --vb-shadow: var(--vb-shadow-md);
55
57
  }
@@ -1,2 +1,3 @@
1
+ @import "./tokens.css";
1
2
  @import "./dark.css";
2
3
  @import "./light.css";
@@ -1,102 +1,108 @@
1
1
  /**
2
- * Vertebr light theme.
3
- * Apply with data-vb-theme="light" on <html> or .vertebr-root.
2
+ * Vertebr light theme — neutral Shopify-inspired palette.
4
3
  */
5
4
  [data-vb-theme="light"] {
6
5
  color-scheme: light;
7
6
 
8
- --vb-bg: #f4f2ec;
9
- --vb-bg-deep: #ebe7de;
10
- --vb-bg-elevated: #fffcf7;
11
- --vb-bg-muted: #ebe6db;
12
- --vb-bg-hover: #e2dcd0;
13
- --vb-border: #d5cfc2;
14
- --vb-border-strong: #bdb5a6;
15
- --vb-text: #1c1a16;
16
- --vb-text-muted: #5c564c;
17
- --vb-text-subtle: #7a7368;
18
- --vb-accent: #9a6f2e;
19
- --vb-accent-dim: #7d5924;
20
- --vb-accent-soft: rgba(154, 111, 46, 0.12);
21
- --vb-accent-contrast: #fff8eb;
22
- --vb-danger: #c44d44;
23
- --vb-danger-soft: rgba(196, 77, 68, 0.12);
24
- --vb-danger-text: #9a2f28;
25
- --vb-ok: #3f6b3a;
26
- --vb-ok-soft: rgba(63, 107, 58, 0.12);
27
- --vb-warn-text: #7a5620;
7
+ --vb-bg: #f1f1f1;
8
+ --vb-bg-deep: #ebebeb;
9
+ --vb-bg-elevated: #ffffff;
10
+ --vb-bg-muted: #f6f6f7;
11
+ --vb-bg-hover: #f1f1f1;
12
+ --vb-bg-subdued: #fafbfb;
13
+ --vb-border: #e3e3e3;
14
+ --vb-border-subdued: #ebebeb;
15
+ --vb-border-strong: #c9cccf;
16
+ --vb-text: #202223;
17
+ --vb-text-muted: #6d7175;
18
+ --vb-text-subtle: #8c9196;
19
+ --vb-text-secondary: #5c5f62;
20
+ --vb-accent: #008060;
21
+ --vb-accent-dim: #006e52;
22
+ --vb-accent-soft: rgba(0, 128, 96, 0.08);
23
+ --vb-accent-contrast: #ffffff;
24
+ --vb-interactive: #005bd3;
25
+ --vb-interactive-soft: rgba(0, 91, 211, 0.08);
26
+ --vb-danger: #d72c0d;
27
+ --vb-danger-soft: rgba(215, 44, 13, 0.08);
28
+ --vb-danger-text: #8e1f0b;
29
+ --vb-ok: #108043;
30
+ --vb-ok-soft: rgba(16, 128, 67, 0.08);
31
+ --vb-warn-text: #916a00;
32
+ --vb-warn-soft: rgba(255, 184, 0, 0.12);
28
33
 
29
- --vb-glow-accent: rgba(154, 111, 46, 0.1);
30
- --vb-glow-cool: rgba(80, 100, 140, 0.06);
31
- --vb-surface-tint: rgba(28, 26, 22, 0.03);
32
- --vb-surface-tint-strong: rgba(28, 26, 22, 0.05);
33
- --vb-sidebar-from: #fffcf7;
34
- --vb-sidebar-to: #f4f2ec;
35
- --vb-header-from: rgba(255, 252, 247, 0.96);
36
- --vb-header-to: rgba(255, 252, 247, 0.88);
37
- --vb-actions-from: rgba(255, 252, 247, 0.85);
38
- --vb-actions-to: rgba(244, 242, 236, 0.98);
39
- --vb-input-focus-bg: #fffcf7;
40
- --vb-btn-primary-from: #b8893f;
41
- --vb-btn-primary-to: #9a6f2e;
42
- --vb-btn-primary-border: #815c26;
43
- --vb-btn-primary-hover-from: #c4964a;
44
- --vb-btn-primary-hover-to: #a87a34;
45
- --vb-btn-primary-hover-border: #8f662a;
34
+ --vb-glow-accent: transparent;
35
+ --vb-glow-cool: transparent;
36
+ --vb-surface-tint: rgba(32, 34, 35, 0.03);
37
+ --vb-surface-tint-strong: rgba(32, 34, 35, 0.05);
38
+ --vb-sidebar-from: #ebebeb;
39
+ --vb-sidebar-to: #ebebeb;
40
+ --vb-header-from: #ffffff;
41
+ --vb-header-to: #ffffff;
42
+ --vb-topbar-bg: #ffffff;
43
+ --vb-actions-from: rgba(255, 255, 255, 0.95);
44
+ --vb-actions-to: rgba(255, 255, 255, 0.98);
45
+ --vb-input-focus-bg: #ffffff;
46
+ --vb-btn-primary-from: #008060;
47
+ --vb-btn-primary-to: #008060;
48
+ --vb-btn-primary-border: #006e52;
49
+ --vb-btn-primary-hover-from: #006e52;
50
+ --vb-btn-primary-hover-to: #006e52;
51
+ --vb-btn-primary-hover-border: #005e46;
46
52
 
47
- --vb-font: "IBM Plex Sans", "Segoe UI", sans-serif;
48
- --vb-mono: "IBM Plex Mono", ui-monospace, monospace;
49
- --vb-radius: 8px;
50
- --vb-radius-sm: 6px;
51
- --vb-shadow: 0 1px 0 rgba(255, 255, 255, 0.65) inset,
52
- 0 14px 40px rgba(40, 32, 18, 0.1);
53
- --vb-sidebar-width: 260px;
53
+ --vb-shadow: var(--vb-shadow-sm);
54
54
  }
55
55
 
56
56
  @media (prefers-color-scheme: light) {
57
57
  :root:not([data-vb-theme]) {
58
58
  color-scheme: light;
59
59
 
60
- --vb-bg: #f4f2ec;
61
- --vb-bg-deep: #ebe7de;
62
- --vb-bg-elevated: #fffcf7;
63
- --vb-bg-muted: #ebe6db;
64
- --vb-bg-hover: #e2dcd0;
65
- --vb-border: #d5cfc2;
66
- --vb-border-strong: #bdb5a6;
67
- --vb-text: #1c1a16;
68
- --vb-text-muted: #5c564c;
69
- --vb-text-subtle: #7a7368;
70
- --vb-accent: #9a6f2e;
71
- --vb-accent-dim: #7d5924;
72
- --vb-accent-soft: rgba(154, 111, 46, 0.12);
73
- --vb-accent-contrast: #fff8eb;
74
- --vb-danger: #c44d44;
75
- --vb-danger-soft: rgba(196, 77, 68, 0.12);
76
- --vb-danger-text: #9a2f28;
77
- --vb-ok: #3f6b3a;
78
- --vb-ok-soft: rgba(63, 107, 58, 0.12);
79
- --vb-warn-text: #7a5620;
60
+ --vb-bg: #f1f1f1;
61
+ --vb-bg-deep: #ebebeb;
62
+ --vb-bg-elevated: #ffffff;
63
+ --vb-bg-muted: #f6f6f7;
64
+ --vb-bg-hover: #f1f1f1;
65
+ --vb-bg-subdued: #fafbfb;
66
+ --vb-border: #e3e3e3;
67
+ --vb-border-subdued: #ebebeb;
68
+ --vb-border-strong: #c9cccf;
69
+ --vb-text: #202223;
70
+ --vb-text-muted: #6d7175;
71
+ --vb-text-subtle: #8c9196;
72
+ --vb-text-secondary: #5c5f62;
73
+ --vb-accent: #008060;
74
+ --vb-accent-dim: #006e52;
75
+ --vb-accent-soft: rgba(0, 128, 96, 0.08);
76
+ --vb-accent-contrast: #ffffff;
77
+ --vb-interactive: #005bd3;
78
+ --vb-interactive-soft: rgba(0, 91, 211, 0.08);
79
+ --vb-danger: #d72c0d;
80
+ --vb-danger-soft: rgba(215, 44, 13, 0.08);
81
+ --vb-danger-text: #8e1f0b;
82
+ --vb-ok: #108043;
83
+ --vb-ok-soft: rgba(16, 128, 67, 0.08);
84
+ --vb-warn-text: #916a00;
85
+ --vb-warn-soft: rgba(255, 184, 0, 0.12);
80
86
 
81
- --vb-glow-accent: rgba(154, 111, 46, 0.1);
82
- --vb-glow-cool: rgba(80, 100, 140, 0.06);
83
- --vb-surface-tint: rgba(28, 26, 22, 0.03);
84
- --vb-surface-tint-strong: rgba(28, 26, 22, 0.05);
85
- --vb-sidebar-from: #fffcf7;
86
- --vb-sidebar-to: #f4f2ec;
87
- --vb-header-from: rgba(255, 252, 247, 0.96);
88
- --vb-header-to: rgba(255, 252, 247, 0.88);
89
- --vb-actions-from: rgba(255, 252, 247, 0.85);
90
- --vb-actions-to: rgba(244, 242, 236, 0.98);
91
- --vb-input-focus-bg: #fffcf7;
92
- --vb-btn-primary-from: #b8893f;
93
- --vb-btn-primary-to: #9a6f2e;
94
- --vb-btn-primary-border: #815c26;
95
- --vb-btn-primary-hover-from: #c4964a;
96
- --vb-btn-primary-hover-to: #a87a34;
97
- --vb-btn-primary-hover-border: #8f662a;
87
+ --vb-glow-accent: transparent;
88
+ --vb-glow-cool: transparent;
89
+ --vb-surface-tint: rgba(32, 34, 35, 0.03);
90
+ --vb-surface-tint-strong: rgba(32, 34, 35, 0.05);
91
+ --vb-sidebar-from: #ebebeb;
92
+ --vb-sidebar-to: #ebebeb;
93
+ --vb-header-from: #ffffff;
94
+ --vb-header-to: #ffffff;
95
+ --vb-topbar-bg: #ffffff;
96
+ --vb-actions-from: rgba(255, 255, 255, 0.95);
97
+ --vb-actions-to: rgba(255, 255, 255, 0.98);
98
+ --vb-input-focus-bg: #ffffff;
99
+ --vb-btn-primary-from: #008060;
100
+ --vb-btn-primary-to: #008060;
101
+ --vb-btn-primary-border: #006e52;
102
+ --vb-btn-primary-hover-from: #006e52;
103
+ --vb-btn-primary-hover-to: #006e52;
104
+ --vb-btn-primary-hover-border: #005e46;
98
105
 
99
- --vb-shadow: 0 1px 0 rgba(255, 255, 255, 0.65) inset,
100
- 0 14px 40px rgba(40, 32, 18, 0.1);
106
+ --vb-shadow: var(--vb-shadow-sm);
101
107
  }
102
108
  }