@vertebr/react 0.1.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.
@@ -0,0 +1,997 @@
1
+ :root {
2
+ --vb-bg: #0e1014;
3
+ --vb-bg-elevated: #161922;
4
+ --vb-bg-muted: #1e2330;
5
+ --vb-bg-hover: #252b3a;
6
+ --vb-border: #2a3142;
7
+ --vb-border-strong: #3a4358;
8
+ --vb-text: #f0eee8;
9
+ --vb-text-muted: #8b93a7;
10
+ --vb-text-subtle: #6a7285;
11
+ --vb-accent: #c9a66b;
12
+ --vb-accent-dim: #9a7d45;
13
+ --vb-accent-soft: rgba(201, 166, 107, 0.14);
14
+ --vb-danger: #e07a72;
15
+ --vb-danger-soft: rgba(224, 122, 114, 0.12);
16
+ --vb-ok: #87a87f;
17
+ --vb-ok-soft: rgba(135, 168, 127, 0.14);
18
+ --vb-font: "IBM Plex Sans", "Segoe UI", sans-serif;
19
+ --vb-mono: "IBM Plex Mono", ui-monospace, monospace;
20
+ --vb-radius: 8px;
21
+ --vb-radius-sm: 6px;
22
+ --vb-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset,
23
+ 0 18px 48px rgba(0, 0, 0, 0.45);
24
+ --vb-sidebar-width: 260px;
25
+ }
26
+
27
+ html:has(.vertebr-root),
28
+ html:has(.vertebr-login),
29
+ html:has(.vertebr-loading),
30
+ html:has(.vertebr-error) {
31
+ background: var(--vb-bg);
32
+ }
33
+
34
+ html:has(.vertebr-root) body,
35
+ html:has(.vertebr-login) body,
36
+ html:has(.vertebr-loading) body,
37
+ html:has(.vertebr-error) body {
38
+ margin: 0;
39
+ padding: 0;
40
+ min-height: 100vh;
41
+ background: var(--vb-bg);
42
+ color: var(--vb-text);
43
+ font-family: var(--vb-font);
44
+ }
45
+
46
+ .vertebr-root {
47
+ box-sizing: border-box;
48
+ min-height: 100vh;
49
+ display: grid;
50
+ grid-template-columns: var(--vb-sidebar-width) 1fr;
51
+ background:
52
+ radial-gradient(
53
+ 900px 480px at 0% -10%,
54
+ rgba(201, 166, 107, 0.07),
55
+ transparent 55%
56
+ ),
57
+ radial-gradient(
58
+ 700px 400px at 100% 100%,
59
+ rgba(60, 80, 120, 0.08),
60
+ transparent 50%
61
+ ),
62
+ linear-gradient(180deg, #12151c 0%, var(--vb-bg) 45%);
63
+ color: var(--vb-text);
64
+ font-family: var(--vb-font);
65
+ font-size: 15px;
66
+ line-height: 1.45;
67
+ -webkit-font-smoothing: antialiased;
68
+ }
69
+
70
+ .vertebr-root *,
71
+ .vertebr-root *::before,
72
+ .vertebr-root *::after {
73
+ box-sizing: border-box;
74
+ }
75
+
76
+ /* ── Sidebar ─────────────────────────────────────────── */
77
+
78
+ .vertebr-sidebar {
79
+ position: sticky;
80
+ top: 0;
81
+ align-self: start;
82
+ height: 100vh;
83
+ border-right: 1px solid var(--vb-border);
84
+ background: linear-gradient(
85
+ 180deg,
86
+ rgba(14, 16, 20, 0.98) 0%,
87
+ rgba(18, 21, 28, 0.96) 100%
88
+ );
89
+ backdrop-filter: blur(12px);
90
+ padding: 1.35rem 0.9rem 1rem;
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: 1.25rem;
94
+ overflow-y: auto;
95
+ }
96
+
97
+ .vertebr-sidebar-top {
98
+ display: flex;
99
+ flex-direction: column;
100
+ gap: 1.35rem;
101
+ flex: 1;
102
+ min-height: 0;
103
+ }
104
+
105
+ .vertebr-sidebar-bottom {
106
+ margin-top: auto;
107
+ padding-top: 1rem;
108
+ border-top: 1px solid var(--vb-border);
109
+ }
110
+
111
+ .vertebr-brand {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: 0.15rem;
115
+ padding: 0.15rem 0.55rem 0.35rem;
116
+ }
117
+
118
+ .vertebr-brand strong {
119
+ font-size: 1.05rem;
120
+ letter-spacing: 0.14em;
121
+ text-transform: uppercase;
122
+ font-weight: 600;
123
+ color: var(--vb-text);
124
+ }
125
+
126
+ .vertebr-brand span {
127
+ color: var(--vb-text-subtle);
128
+ font-size: 0.72rem;
129
+ font-family: var(--vb-mono);
130
+ letter-spacing: 0.02em;
131
+ }
132
+
133
+ .vertebr-env {
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: 0.4rem;
137
+ padding: 0 0.15rem;
138
+ }
139
+
140
+ /* ── Select ──────────────────────────────────────────── */
141
+
142
+ .vertebr-select-trigger {
143
+ width: 100%;
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: space-between;
147
+ gap: 0.5rem;
148
+ appearance: none;
149
+ border: 1px solid var(--vb-border);
150
+ background: var(--vb-bg-elevated);
151
+ color: var(--vb-text);
152
+ border-radius: var(--vb-radius-sm);
153
+ padding: 0.55rem 0.7rem;
154
+ font-family: var(--vb-font);
155
+ font-size: 0.88rem;
156
+ font-weight: 500;
157
+ line-height: 1.2;
158
+ cursor: pointer;
159
+ transition:
160
+ border-color 140ms ease,
161
+ background 140ms ease,
162
+ box-shadow 140ms ease;
163
+ }
164
+
165
+ .vertebr-select-trigger:hover {
166
+ border-color: var(--vb-border-strong);
167
+ background: var(--vb-bg-muted);
168
+ }
169
+
170
+ .vertebr-select-trigger:focus-visible,
171
+ .vertebr-select-trigger[data-state="open"] {
172
+ outline: none;
173
+ border-color: var(--vb-accent-dim);
174
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
175
+ }
176
+
177
+ .vertebr-select-trigger[data-tone="danger"] {
178
+ border-color: rgba(224, 122, 114, 0.45);
179
+ color: #f3c4bf;
180
+ }
181
+
182
+ .vertebr-select-value {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: 0.5rem;
186
+ min-width: 0;
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ white-space: nowrap;
190
+ }
191
+
192
+ .vertebr-select-dot {
193
+ width: 7px;
194
+ height: 7px;
195
+ border-radius: 999px;
196
+ flex: none;
197
+ background: var(--vb-ok);
198
+ box-shadow: 0 0 0 3px var(--vb-ok-soft);
199
+ }
200
+
201
+ .vertebr-select-dot[data-tone="danger"] {
202
+ background: var(--vb-danger);
203
+ box-shadow: 0 0 0 3px var(--vb-danger-soft);
204
+ }
205
+
206
+ .vertebr-select-dot[data-tone="warning"],
207
+ .vertebr-select-dot[data-tone="warn"] {
208
+ background: var(--vb-accent);
209
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
210
+ }
211
+
212
+ .vertebr-select-icon {
213
+ display: flex;
214
+ color: var(--vb-text-muted);
215
+ transition: transform 140ms ease;
216
+ }
217
+
218
+ .vertebr-select-trigger[data-state="open"] .vertebr-select-icon {
219
+ transform: rotate(180deg);
220
+ }
221
+
222
+ .vertebr-select-content {
223
+ z-index: 60;
224
+ min-width: var(--radix-select-trigger-width);
225
+ background: var(--vb-bg-elevated);
226
+ border: 1px solid var(--vb-border-strong);
227
+ border-radius: var(--vb-radius);
228
+ box-shadow: var(--vb-shadow);
229
+ overflow: hidden;
230
+ font-family: var(--vb-font);
231
+ color: var(--vb-text);
232
+ animation: vertebr-pop 120ms ease-out;
233
+ }
234
+
235
+ @keyframes vertebr-pop {
236
+ from {
237
+ opacity: 0;
238
+ transform: translateY(-4px);
239
+ }
240
+ to {
241
+ opacity: 1;
242
+ transform: translateY(0);
243
+ }
244
+ }
245
+
246
+ .vertebr-select-viewport {
247
+ padding: 0.3rem;
248
+ display: flex;
249
+ flex-direction: column;
250
+ gap: 0.1rem;
251
+ }
252
+
253
+ .vertebr-select-item {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: 0.5rem;
257
+ padding: 0.5rem 0.6rem;
258
+ border-radius: var(--vb-radius-sm);
259
+ font-size: 0.88rem;
260
+ cursor: pointer;
261
+ user-select: none;
262
+ outline: none;
263
+ }
264
+
265
+ .vertebr-select-item[data-highlighted] {
266
+ background: var(--vb-bg-hover);
267
+ }
268
+
269
+ .vertebr-select-item[data-state="checked"] {
270
+ color: var(--vb-accent);
271
+ }
272
+
273
+ .vertebr-select-check {
274
+ margin-left: auto;
275
+ display: flex;
276
+ color: var(--vb-accent);
277
+ }
278
+
279
+ .vertebr-env-lock {
280
+ margin-left: auto;
281
+ font-family: var(--vb-mono);
282
+ font-size: 0.62rem;
283
+ letter-spacing: 0.08em;
284
+ text-transform: uppercase;
285
+ color: var(--vb-accent);
286
+ border: 1px solid rgba(201, 166, 107, 0.3);
287
+ border-radius: 999px;
288
+ padding: 0.12rem 0.4rem;
289
+ background: var(--vb-accent-soft);
290
+ }
291
+
292
+ /* ── Auth ────────────────────────────────────────────── */
293
+
294
+ .vertebr-auth {
295
+ display: flex;
296
+ flex-direction: column;
297
+ gap: 0.5rem;
298
+ padding: 0.15rem 0.2rem 0.35rem;
299
+ }
300
+
301
+ .vertebr-auth-hint {
302
+ margin: 0;
303
+ color: var(--vb-text-muted);
304
+ font-size: 0.78rem;
305
+ line-height: 1.4;
306
+ word-break: break-all;
307
+ }
308
+
309
+ .vertebr-auth-input {
310
+ width: 100%;
311
+ border: 1px solid var(--vb-border);
312
+ background: var(--vb-bg);
313
+ color: var(--vb-text);
314
+ border-radius: var(--vb-radius-sm);
315
+ padding: 0.55rem 0.65rem;
316
+ font: inherit;
317
+ font-size: 0.85rem;
318
+ transition: border-color 140ms ease, box-shadow 140ms ease;
319
+ }
320
+
321
+ .vertebr-auth-input:focus {
322
+ outline: none;
323
+ border-color: var(--vb-accent-dim);
324
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
325
+ }
326
+
327
+ .vertebr-auth-actions {
328
+ display: flex;
329
+ gap: 0.5rem;
330
+ }
331
+
332
+ /* ── Nav ─────────────────────────────────────────────── */
333
+
334
+ .vertebr-nav {
335
+ display: flex;
336
+ flex-direction: column;
337
+ gap: 1.15rem;
338
+ }
339
+
340
+ .vertebr-nav-group {
341
+ display: flex;
342
+ flex-direction: column;
343
+ gap: 0.15rem;
344
+ }
345
+
346
+ .vertebr-nav-label {
347
+ font-size: 0.65rem;
348
+ letter-spacing: 0.14em;
349
+ text-transform: uppercase;
350
+ color: var(--vb-text-subtle);
351
+ padding: 0.2rem 0.65rem 0.4rem;
352
+ font-family: var(--vb-mono);
353
+ font-weight: 500;
354
+ }
355
+
356
+ .vertebr-nav button {
357
+ appearance: none;
358
+ border: 0;
359
+ background: transparent;
360
+ color: var(--vb-text-muted);
361
+ text-align: left;
362
+ padding: 0.48rem 0.7rem;
363
+ border-radius: var(--vb-radius-sm);
364
+ cursor: pointer;
365
+ font: inherit;
366
+ font-size: 0.9rem;
367
+ font-weight: 450;
368
+ transition:
369
+ background 120ms ease,
370
+ color 120ms ease,
371
+ box-shadow 120ms ease;
372
+ }
373
+
374
+ .vertebr-nav button:hover {
375
+ background: var(--vb-bg-muted);
376
+ color: var(--vb-text);
377
+ }
378
+
379
+ .vertebr-nav button[data-active="true"] {
380
+ background: var(--vb-accent-soft);
381
+ box-shadow: inset 2px 0 0 var(--vb-accent);
382
+ color: var(--vb-accent);
383
+ font-weight: 500;
384
+ }
385
+
386
+ .vertebr-nav button:focus-visible,
387
+ .vertebr-btn:focus-visible {
388
+ outline: none;
389
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
390
+ }
391
+
392
+ .vertebr-sidebar::-webkit-scrollbar,
393
+ .vertebr-main::-webkit-scrollbar,
394
+ .vertebr-table-wrap::-webkit-scrollbar {
395
+ width: 10px;
396
+ height: 10px;
397
+ }
398
+
399
+ .vertebr-sidebar::-webkit-scrollbar-thumb,
400
+ .vertebr-main::-webkit-scrollbar-thumb,
401
+ .vertebr-table-wrap::-webkit-scrollbar-thumb {
402
+ background: var(--vb-bg-muted);
403
+ border: 2px solid transparent;
404
+ background-clip: content-box;
405
+ border-radius: 999px;
406
+ }
407
+
408
+ .vertebr-sidebar::-webkit-scrollbar-thumb:hover,
409
+ .vertebr-main::-webkit-scrollbar-thumb:hover,
410
+ .vertebr-table-wrap::-webkit-scrollbar-thumb:hover {
411
+ background: var(--vb-border-strong);
412
+ background-clip: content-box;
413
+ }
414
+
415
+ .vertebr-sidebar::-webkit-scrollbar-track,
416
+ .vertebr-main::-webkit-scrollbar-track,
417
+ .vertebr-table-wrap::-webkit-scrollbar-track {
418
+ background: transparent;
419
+ }
420
+
421
+ /* ── Main ────────────────────────────────────────────── */
422
+
423
+ .vertebr-main {
424
+ overflow: auto;
425
+ min-width: 0;
426
+ display: flex;
427
+ flex-direction: column;
428
+ }
429
+
430
+ .vertebr-header {
431
+ position: sticky;
432
+ top: 0;
433
+ z-index: 20;
434
+ display: flex;
435
+ justify-content: space-between;
436
+ align-items: flex-end;
437
+ gap: 1rem;
438
+ padding: 1.6rem 2rem 1.15rem;
439
+ border-bottom: 1px solid rgba(42, 49, 66, 0.8);
440
+ background: linear-gradient(
441
+ 180deg,
442
+ rgba(14, 16, 20, 0.96) 0%,
443
+ rgba(14, 16, 20, 0.86) 100%
444
+ );
445
+ backdrop-filter: blur(10px);
446
+ }
447
+
448
+ .vertebr-content {
449
+ padding: 1.5rem 2rem 3rem;
450
+ min-width: 0;
451
+ }
452
+
453
+ .vertebr-heading-row {
454
+ display: flex;
455
+ align-items: center;
456
+ gap: 0.7rem;
457
+ flex-wrap: wrap;
458
+ }
459
+
460
+ .vertebr-header h1 {
461
+ margin: 0;
462
+ font-size: 1.55rem;
463
+ font-weight: 600;
464
+ letter-spacing: -0.03em;
465
+ line-height: 1.15;
466
+ }
467
+
468
+ .vertebr-header p {
469
+ margin: 0.4rem 0 0;
470
+ color: var(--vb-text-muted);
471
+ font-size: 0.9rem;
472
+ }
473
+
474
+ .vertebr-env-badge {
475
+ font-family: var(--vb-mono);
476
+ font-size: 0.68rem;
477
+ letter-spacing: 0.1em;
478
+ text-transform: uppercase;
479
+ border: 1px solid var(--vb-border);
480
+ border-radius: 999px;
481
+ padding: 0.22rem 0.6rem;
482
+ color: var(--vb-text-muted);
483
+ background: rgba(255, 255, 255, 0.03);
484
+ }
485
+
486
+ .vertebr-env-badge[data-tone="danger"] {
487
+ color: #f3c4bf;
488
+ border-color: rgba(224, 122, 114, 0.45);
489
+ background: var(--vb-danger-soft);
490
+ }
491
+
492
+ .vertebr-env-badge[data-tone="warn"],
493
+ .vertebr-env-badge[data-tone="warning"] {
494
+ color: #e8d0a0;
495
+ border-color: rgba(201, 166, 107, 0.45);
496
+ background: var(--vb-accent-soft);
497
+ }
498
+
499
+ .vertebr-env-badge[data-tone="neutral"] {
500
+ color: var(--vb-ok);
501
+ border-color: rgba(135, 168, 127, 0.4);
502
+ background: var(--vb-ok-soft);
503
+ }
504
+
505
+ /* ── Panel ───────────────────────────────────────────── */
506
+
507
+ .vertebr-panel {
508
+ background: var(--vb-bg-elevated);
509
+ border: 1px solid var(--vb-border);
510
+ border-radius: 12px;
511
+ box-shadow: var(--vb-shadow);
512
+ overflow: hidden;
513
+ }
514
+
515
+ .vertebr-panel-head {
516
+ display: flex;
517
+ align-items: center;
518
+ justify-content: space-between;
519
+ gap: 1rem;
520
+ padding: 0.9rem 1.5rem;
521
+ border-bottom: 1px solid var(--vb-border);
522
+ background: rgba(255, 255, 255, 0.02);
523
+ }
524
+
525
+ .vertebr-panel-head h2 {
526
+ margin: 0;
527
+ font-size: 0.72rem;
528
+ font-family: var(--vb-mono);
529
+ font-weight: 500;
530
+ letter-spacing: 0.12em;
531
+ text-transform: uppercase;
532
+ color: var(--vb-text-subtle);
533
+ }
534
+
535
+ .vertebr-count {
536
+ font-family: var(--vb-mono);
537
+ font-size: 0.7rem;
538
+ color: var(--vb-text-subtle);
539
+ border: 1px solid var(--vb-border);
540
+ border-radius: 999px;
541
+ padding: 0.12rem 0.5rem;
542
+ }
543
+
544
+ .vertebr-row-actions {
545
+ display: flex;
546
+ flex-wrap: wrap;
547
+ gap: 0.35rem;
548
+ justify-content: flex-end;
549
+ }
550
+
551
+ .vertebr-row-actions .vertebr-btn {
552
+ padding: 0.35rem 0.6rem;
553
+ font-size: 0.78rem;
554
+ }
555
+
556
+ .vertebr-metrics-grid {
557
+ display: grid;
558
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
559
+ gap: 1rem;
560
+ padding: 1.35rem 1.5rem 1.5rem;
561
+ }
562
+
563
+ .vertebr-metric-card {
564
+ border: 1px solid var(--vb-border);
565
+ border-radius: var(--vb-radius);
566
+ background: rgba(255, 255, 255, 0.02);
567
+ padding: 1rem 1.05rem 1.1rem;
568
+ min-height: 110px;
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 0.35rem;
572
+ }
573
+
574
+ .vertebr-metric-card[data-tone="ok"] {
575
+ border-color: rgba(135, 168, 127, 0.4);
576
+ background: var(--vb-ok-soft);
577
+ }
578
+
579
+ .vertebr-metric-card[data-tone="warn"] {
580
+ border-color: rgba(201, 166, 107, 0.4);
581
+ background: var(--vb-accent-soft);
582
+ }
583
+
584
+ .vertebr-metric-card[data-tone="danger"] {
585
+ border-color: rgba(224, 122, 114, 0.4);
586
+ background: var(--vb-danger-soft);
587
+ }
588
+
589
+ .vertebr-metric-label {
590
+ margin: 0;
591
+ font-size: 0.72rem;
592
+ letter-spacing: 0.1em;
593
+ text-transform: uppercase;
594
+ font-family: var(--vb-mono);
595
+ color: var(--vb-text-subtle);
596
+ }
597
+
598
+ .vertebr-metric-value {
599
+ margin: 0;
600
+ font-size: 1.75rem;
601
+ font-weight: 600;
602
+ letter-spacing: -0.03em;
603
+ line-height: 1.1;
604
+ }
605
+
606
+ .vertebr-metric-hint {
607
+ margin: 0.15rem 0 0;
608
+ font-size: 0.78rem;
609
+ color: var(--vb-text-muted);
610
+ line-height: 1.35;
611
+ }
612
+
613
+ .vertebr-resource-edit {
614
+ display: flex;
615
+ flex-direction: column;
616
+ }
617
+
618
+ /* ── Table ───────────────────────────────────────────── */
619
+
620
+ .vertebr-table-wrap {
621
+ overflow: auto;
622
+ }
623
+
624
+ .vertebr-table {
625
+ width: 100%;
626
+ border-collapse: collapse;
627
+ font-size: 0.9rem;
628
+ }
629
+
630
+ .vertebr-table th,
631
+ .vertebr-table td {
632
+ padding: 0.8rem 1.1rem;
633
+ border-bottom: 1px solid var(--vb-border);
634
+ text-align: left;
635
+ vertical-align: top;
636
+ }
637
+
638
+ .vertebr-table th {
639
+ color: var(--vb-text-subtle);
640
+ font-size: 0.68rem;
641
+ letter-spacing: 0.1em;
642
+ text-transform: uppercase;
643
+ font-family: var(--vb-mono);
644
+ font-weight: 500;
645
+ background: rgba(255, 255, 255, 0.025);
646
+ }
647
+
648
+ .vertebr-table tbody tr {
649
+ transition: background 100ms ease;
650
+ }
651
+
652
+ .vertebr-table tbody tr:hover {
653
+ background: rgba(255, 255, 255, 0.02);
654
+ }
655
+
656
+ .vertebr-table tr:last-child td {
657
+ border-bottom: 0;
658
+ }
659
+
660
+ .vertebr-empty {
661
+ padding: 3rem 1.5rem;
662
+ text-align: center;
663
+ color: var(--vb-text-muted);
664
+ font-size: 0.92rem;
665
+ }
666
+
667
+ /* ── Form ────────────────────────────────────────────── */
668
+
669
+ .vertebr-form {
670
+ display: flex;
671
+ flex-direction: column;
672
+ min-height: 0;
673
+ }
674
+
675
+ .vertebr-form-fields {
676
+ display: grid;
677
+ grid-template-columns: repeat(auto-fill, minmax(clamp(220px, 22vw, 320px), 1fr));
678
+ gap: 1.1rem 1.25rem;
679
+ padding: 1.35rem 1.5rem 1.25rem;
680
+ align-items: start;
681
+ }
682
+
683
+ .vertebr-field {
684
+ display: grid;
685
+ gap: 0.35rem;
686
+ align-content: start;
687
+ }
688
+
689
+ .vertebr-field[data-span="wide"] {
690
+ grid-column: span 2;
691
+ }
692
+
693
+ .vertebr-field[data-span="full"] {
694
+ grid-column: 1 / -1;
695
+ }
696
+
697
+ .vertebr-field label,
698
+ .vertebr-field > span {
699
+ font-size: 0.78rem;
700
+ font-weight: 500;
701
+ color: var(--vb-text-muted);
702
+ letter-spacing: 0.01em;
703
+ }
704
+
705
+ .vertebr-field input[type="text"],
706
+ .vertebr-field input[type="number"],
707
+ .vertebr-field input[type="password"],
708
+ .vertebr-field input[type="email"],
709
+ .vertebr-field textarea {
710
+ width: 100%;
711
+ border: 1px solid var(--vb-border);
712
+ background: var(--vb-bg);
713
+ color: var(--vb-text);
714
+ border-radius: var(--vb-radius-sm);
715
+ padding: 0.58rem 0.75rem;
716
+ font: inherit;
717
+ font-size: 0.9rem;
718
+ transition:
719
+ border-color 140ms ease,
720
+ box-shadow 140ms ease,
721
+ background 140ms ease;
722
+ }
723
+
724
+ .vertebr-field textarea {
725
+ resize: vertical;
726
+ min-height: 4.5rem;
727
+ line-height: 1.5;
728
+ padding-top: 0.65rem;
729
+ }
730
+
731
+ .vertebr-field input:hover,
732
+ .vertebr-field textarea:hover {
733
+ border-color: var(--vb-border-strong);
734
+ }
735
+
736
+ .vertebr-field input:focus,
737
+ .vertebr-field textarea:focus {
738
+ outline: none;
739
+ border-color: var(--vb-accent-dim);
740
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
741
+ background: #12151c;
742
+ }
743
+
744
+ .vertebr-field input[readonly],
745
+ .vertebr-field textarea[readonly] {
746
+ opacity: 0.65;
747
+ cursor: default;
748
+ }
749
+
750
+ .vertebr-switch-row {
751
+ display: flex;
752
+ align-items: center;
753
+ justify-content: space-between;
754
+ gap: 1rem;
755
+ padding: 0.7rem 0.85rem;
756
+ border: 1px solid var(--vb-border);
757
+ border-radius: var(--vb-radius-sm);
758
+ background: rgba(255, 255, 255, 0.015);
759
+ grid-column: 1 / -1;
760
+ }
761
+
762
+ .vertebr-switch-row label {
763
+ font-size: 0.88rem;
764
+ font-weight: 500;
765
+ color: var(--vb-text);
766
+ font-family: var(--vb-font);
767
+ }
768
+
769
+ .vertebr-switch {
770
+ width: 40px;
771
+ height: 22px;
772
+ background: var(--vb-bg-muted);
773
+ border-radius: 999px;
774
+ position: relative;
775
+ border: 1px solid var(--vb-border);
776
+ cursor: pointer;
777
+ flex: none;
778
+ transition: background 140ms ease, border-color 140ms ease;
779
+ }
780
+
781
+ .vertebr-switch[data-state="checked"] {
782
+ background: rgba(201, 166, 107, 0.35);
783
+ border-color: var(--vb-accent-dim);
784
+ }
785
+
786
+ .vertebr-switch-thumb {
787
+ display: block;
788
+ width: 16px;
789
+ height: 16px;
790
+ background: var(--vb-text);
791
+ border-radius: 999px;
792
+ transform: translateX(2px);
793
+ transition: transform 140ms ease, background 140ms ease;
794
+ margin-top: 2px;
795
+ }
796
+
797
+ .vertebr-switch[data-state="checked"] .vertebr-switch-thumb {
798
+ transform: translateX(18px);
799
+ background: var(--vb-accent);
800
+ }
801
+
802
+ .vertebr-actions {
803
+ display: flex;
804
+ align-items: center;
805
+ gap: 0.85rem;
806
+ padding: 0.9rem 1.5rem;
807
+ border-top: 1px solid var(--vb-border);
808
+ background: linear-gradient(
809
+ 180deg,
810
+ rgba(22, 25, 34, 0.65) 0%,
811
+ rgba(18, 21, 28, 0.95) 100%
812
+ );
813
+ position: sticky;
814
+ bottom: 0;
815
+ }
816
+
817
+ .vertebr-actions-spacer {
818
+ flex: 1;
819
+ }
820
+
821
+ .vertebr-dirty {
822
+ display: inline-flex;
823
+ align-items: center;
824
+ gap: 0.4rem;
825
+ font-family: var(--vb-mono);
826
+ font-size: 0.7rem;
827
+ letter-spacing: 0.06em;
828
+ text-transform: uppercase;
829
+ color: var(--vb-accent);
830
+ }
831
+
832
+ .vertebr-dirty::before {
833
+ content: "";
834
+ width: 6px;
835
+ height: 6px;
836
+ border-radius: 999px;
837
+ background: var(--vb-accent);
838
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
839
+ }
840
+
841
+ .vertebr-kbd {
842
+ font-family: var(--vb-mono);
843
+ font-size: 0.68rem;
844
+ color: var(--vb-text-subtle);
845
+ border: 1px solid var(--vb-border);
846
+ border-bottom-width: 2px;
847
+ border-radius: 4px;
848
+ padding: 0.1rem 0.35rem;
849
+ }
850
+
851
+ /* ── Buttons / status ────────────────────────────────── */
852
+
853
+ .vertebr-btn {
854
+ appearance: none;
855
+ border: 1px solid var(--vb-border);
856
+ background: var(--vb-bg-muted);
857
+ color: var(--vb-text);
858
+ border-radius: var(--vb-radius-sm);
859
+ padding: 0.52rem 0.95rem;
860
+ font: inherit;
861
+ font-size: 0.88rem;
862
+ font-weight: 500;
863
+ cursor: pointer;
864
+ transition:
865
+ background 120ms ease,
866
+ border-color 120ms ease,
867
+ transform 80ms ease;
868
+ }
869
+
870
+ .vertebr-btn:hover:not(:disabled) {
871
+ background: var(--vb-bg-hover);
872
+ border-color: var(--vb-border-strong);
873
+ }
874
+
875
+ .vertebr-btn:active:not(:disabled) {
876
+ transform: translateY(1px);
877
+ }
878
+
879
+ .vertebr-btn-primary {
880
+ background: linear-gradient(180deg, #d4b27a 0%, var(--vb-accent) 100%);
881
+ border-color: #b89255;
882
+ color: #1a140c;
883
+ font-weight: 600;
884
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset;
885
+ }
886
+
887
+ .vertebr-btn-primary:hover:not(:disabled) {
888
+ background: linear-gradient(180deg, #dbbc88 0%, #d0ad72 100%);
889
+ border-color: #c4a574;
890
+ }
891
+
892
+ .vertebr-btn:disabled {
893
+ opacity: 0.5;
894
+ cursor: not-allowed;
895
+ }
896
+
897
+ .vertebr-status {
898
+ font-family: var(--vb-mono);
899
+ font-size: 0.75rem;
900
+ color: var(--vb-text-muted);
901
+ letter-spacing: 0.02em;
902
+ }
903
+
904
+ .vertebr-status[data-tone="ok"] {
905
+ color: var(--vb-ok);
906
+ }
907
+
908
+ .vertebr-status[data-tone="danger"] {
909
+ color: var(--vb-danger);
910
+ }
911
+
912
+ /* ── States ──────────────────────────────────────────── */
913
+
914
+ .vertebr-loading,
915
+ .vertebr-error {
916
+ min-height: 100vh;
917
+ display: grid;
918
+ place-items: center;
919
+ background: var(--vb-bg);
920
+ color: var(--vb-text);
921
+ font-family: var(--vb-font);
922
+ }
923
+
924
+ .vertebr-login {
925
+ min-height: 100vh;
926
+ display: grid;
927
+ place-items: center;
928
+ padding: 1.5rem;
929
+ background:
930
+ radial-gradient(
931
+ 900px 500px at 50% 0%,
932
+ rgba(201, 166, 107, 0.1),
933
+ transparent 60%
934
+ ),
935
+ var(--vb-bg);
936
+ color: var(--vb-text);
937
+ font-family: var(--vb-font);
938
+ }
939
+
940
+ .vertebr-login-card {
941
+ width: min(100%, 400px);
942
+ display: grid;
943
+ gap: 1.25rem;
944
+ padding: 1.6rem;
945
+ border: 1px solid var(--vb-border);
946
+ border-radius: 12px;
947
+ background: var(--vb-bg-elevated);
948
+ box-shadow: var(--vb-shadow);
949
+ }
950
+
951
+ .vertebr-login-card h1 {
952
+ margin: 0;
953
+ font-size: 1.5rem;
954
+ letter-spacing: -0.02em;
955
+ }
956
+
957
+ .vertebr-login-card p {
958
+ margin: 0.4rem 0 0;
959
+ color: var(--vb-text-muted);
960
+ line-height: 1.5;
961
+ }
962
+
963
+ .vertebr-login-form {
964
+ display: grid;
965
+ gap: 0.9rem;
966
+ }
967
+
968
+ .vertebr-error {
969
+ color: var(--vb-danger);
970
+ }
971
+
972
+ @media (max-width: 720px) {
973
+ .vertebr-form-fields {
974
+ grid-template-columns: 1fr;
975
+ }
976
+
977
+ .vertebr-field[data-span="wide"] {
978
+ grid-column: 1 / -1;
979
+ }
980
+ }
981
+
982
+ @media (max-width: 860px) {
983
+ .vertebr-root {
984
+ grid-template-columns: 1fr;
985
+ }
986
+
987
+ .vertebr-sidebar {
988
+ position: relative;
989
+ height: auto;
990
+ border-right: 0;
991
+ border-bottom: 1px solid var(--vb-border);
992
+ }
993
+
994
+ .vertebr-main {
995
+ padding: 1.25rem 1rem 2rem;
996
+ }
997
+ }