@ahmednawaz/crank 0.1.7 → 0.1.8

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,1991 @@
1
+ /* Crank inspector UI — shared with tool-ui design tokens (white theme) */
2
+ @import url("https://cdn.jsdelivr.net/npm/@fontsource-variable/geist@5.2.8/index.css");
3
+
4
+ :host,
5
+ #vp-shell {
6
+ --background: oklch(0.985 0.002 255);
7
+ --foreground: oklch(0.17 0.01 255);
8
+ --card: oklch(1 0 0);
9
+ --card-foreground: oklch(0.17 0.01 255);
10
+ --primary: oklch(0.24 0.02 255);
11
+ --primary-foreground: oklch(0.99 0 0);
12
+ --secondary: oklch(0.95 0.004 255);
13
+ --secondary-foreground: oklch(0.21 0.01 255);
14
+ --muted: oklch(0.95 0.004 255);
15
+ --muted-foreground: oklch(0.42 0.012 255);
16
+ --accent: oklch(0.93 0.007 255);
17
+ --accent-foreground: oklch(0.2 0.01 255);
18
+ --hover: oklch(0.95 0.006 255);
19
+ --active: oklch(0.92 0.009 255);
20
+ --destructive: oklch(0.59 0.22 26);
21
+ --input: oklch(0.9 0.005 255);
22
+ --border: oklch(0.89 0.006 255);
23
+ --ring: oklch(0.68 0.03 255);
24
+
25
+ --vp-font-family-sans: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
26
+ --vp-font-size-micro: 11px;
27
+ --vp-font-size-support: 12px;
28
+ --vp-font-size-label: 13px;
29
+ --vp-font-size-body: 14px;
30
+ --vp-font-size-display: 16px;
31
+ --vp-line-height-micro: 1.35;
32
+ --vp-line-height-support: 1.4;
33
+ --vp-line-height-label: 1.4;
34
+ --vp-line-height-body: 1.45;
35
+ --vp-line-height-display: 1.3;
36
+ --vp-font-weight-regular: 400;
37
+ --vp-font-weight-medium: 450;
38
+ --vp-font-weight-semibold: 550;
39
+ --vp-font-weight-title: 620;
40
+
41
+ --vp-list-padding: 2px;
42
+ --vp-list-gap: 2px;
43
+ --vp-list-radius-inner: 0.8rem;
44
+ --vp-list-radius-outer: calc(var(--vp-list-radius-inner) + var(--vp-list-padding));
45
+ --vp-control-radius: 0.8rem;
46
+ --vp-control-shell-height: 2.25rem;
47
+ --vp-control-shell-radius: 12px;
48
+ --vp-control-shell-padding-x: 0.875rem;
49
+ --vp-control-shell-gap: 0.625rem;
50
+ --vp-control-shell-font-size: 0.9375rem;
51
+ --vp-control-shell-font-weight: var(--vp-font-weight-medium);
52
+ --vp-control-shell-line-height: 1.15;
53
+
54
+ --vp-compact-control-height: 1.75rem;
55
+ --vp-compact-control-radius: calc(var(--vp-control-radius) * 0.5);
56
+ --vp-compact-control-padding-x: 0.5rem;
57
+ --vp-compact-control-gap: 0.25rem;
58
+ --vp-compact-control-font-size: var(--vp-font-size-support);
59
+ --vp-compact-control-font-weight: 500;
60
+ --vp-compact-control-line-height: var(--vp-line-height-support);
61
+
62
+ --vp-panel-padding: 1rem;
63
+ --vp-inline-gap: 0.5rem;
64
+ --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
65
+ --ease-standard: cubic-bezier(0.2, 0, 0, 1);
66
+
67
+ --vp-button-primary-gradient: linear-gradient(180deg, #323232 0%, #222222 100%);
68
+ --vp-button-primary-gradient-hover: linear-gradient(180deg, #363636 0%, #252525 100%);
69
+ --vp-button-primary-gradient-active: linear-gradient(180deg, #2e2e2e 0%, #1e1e1e 100%);
70
+ --vp-button-primary-border: rgb(51 51 51 / 0.55);
71
+ --vp-button-primary-shadow:
72
+ inset 0 1px 0 0 rgb(255 255 255 / 0.15),
73
+ inset 0 -1px 1.2px 0.35px #121212,
74
+ 0 2px 4px -1px rgb(13 13 13 / 0.5);
75
+ --vp-button-primary-shadow-hover:
76
+ inset 0 1px 0 0 rgb(255 255 255 / 0.17),
77
+ inset 0 -1px 1.2px 0.35px #121212,
78
+ 0 2px 5px -1px rgb(13 13 13 / 0.52);
79
+ --vp-button-primary-shadow-active:
80
+ inset 0 1px 2px 0 rgb(0 0 0 / 0.28),
81
+ inset 0 -0.5px 1px 0 rgb(255 255 255 / 0.07),
82
+ 0 1px 2px -1px rgb(13 13 13 / 0.42);
83
+
84
+ --vp-button-secondary-stroke: #d4d4d4;
85
+ --vp-button-secondary-gradient: linear-gradient(180deg, #ffffff 0%, #f5f5f6 100%);
86
+ --vp-button-secondary-gradient-hover: linear-gradient(180deg, #ffffff 0%, #f1f1f2 100%);
87
+ --vp-button-secondary-gradient-active: linear-gradient(180deg, #f1f1f2 0%, #ebebec 100%);
88
+ --vp-button-secondary-shadow:
89
+ inset 0 1px 0 0 rgb(255 255 255 / 0.33),
90
+ inset 0 -1px 1.2px 0.35px rgb(17 17 17 / 0.06),
91
+ 0 2px 4px -1px rgb(0 0 0 / 0.15);
92
+ --vp-button-secondary-shadow-hover:
93
+ inset 0 1px 0 0 rgb(255 255 255 / 0.38),
94
+ inset 0 -1px 1.2px 0.35px rgb(17 17 17 / 0.07),
95
+ 0 2px 5px -1px rgb(0 0 0 / 0.16);
96
+ --vp-button-secondary-shadow-active:
97
+ inset 0 1px 2px 0 rgb(0 0 0 / 0.06),
98
+ inset 0 -0.5px 1px 0 rgb(255 255 255 / 0.85),
99
+ 0 1px 2px -1px rgb(0 0 0 / 0.12);
100
+
101
+ --vp-input-surface-gradient: var(--vp-button-secondary-gradient);
102
+ --vp-input-surface-gradient-hover: var(--vp-button-secondary-gradient-hover);
103
+ --vp-input-surface-gradient-focus: var(--vp-button-secondary-gradient-hover);
104
+ --vp-input-surface-gradient-disabled: linear-gradient(180deg, #fbfbfb 0%, #f9f9fa 100%);
105
+ --vp-input-surface-shadow: var(--vp-button-secondary-shadow);
106
+ --vp-input-surface-shadow-hover: var(--vp-button-secondary-shadow-hover);
107
+ --vp-input-surface-shadow-focus: var(--vp-button-secondary-shadow-hover);
108
+ --vp-input-surface-shadow-disabled:
109
+ inset 0 1px 0 0 rgb(255 255 255 / 0.5),
110
+ inset 0 -1px 1.2px 0.35px rgb(17 17 17 / 0.03),
111
+ 0 1px 2px -1px rgb(0 0 0 / 0.06);
112
+
113
+ --vp-button-ghost-gradient-hover: linear-gradient(180deg, #fafafa 0%, #f4f4f5 100%);
114
+ --vp-button-ghost-gradient-active: linear-gradient(180deg, #f6f6f7 0%, #f1f1f2 100%);
115
+ --vp-button-ghost-shadow-hover:
116
+ inset 0 0.5px 1px 0 rgb(255 255 255 / 0.8),
117
+ inset 0 -1px 1.2px 0 rgb(17 17 17 / 0.03),
118
+ 0 1px 2px -1px rgb(17 17 17 / 0.04);
119
+ --vp-button-ghost-shadow-active:
120
+ inset 0 1px 1.5px 0 rgb(17 17 17 / 0.04),
121
+ inset 0 -0.5px 1px 0 rgb(255 255 255 / 0.65),
122
+ 0 1px 1px -1px rgb(17 17 17 / 0.03);
123
+
124
+ --vp-list-surface-gradient: linear-gradient(180deg, #ffffff 0%, #fcfcfc 100%);
125
+ --vp-list-highlight: oklch(0.55 0.01 255 / 0.07);
126
+
127
+ --vp-alert-error-bg: oklch(0.59 0.22 26 / 0.08);
128
+ --vp-alert-error-fg: oklch(0.45 0.18 26);
129
+ --vp-alert-warning-bg: oklch(0.78 0.12 85 / 0.12);
130
+ --vp-alert-warning-fg: oklch(0.42 0.1 75);
131
+ --vp-toast-success-bg: oklch(0.72 0.14 155 / 0.12);
132
+ --vp-toast-success-fg: oklch(0.35 0.08 155);
133
+ --vp-conn-ready: #22c55e;
134
+ --vp-conn-warning: #eab308;
135
+ --vp-conn-error: #ef4444;
136
+ }
137
+
138
+ * {
139
+ box-sizing: border-box;
140
+ }
141
+
142
+ #vp-shell {
143
+ width: 380px;
144
+ max-height: calc(100vh - 48px);
145
+ display: flex;
146
+ flex-direction: column;
147
+ font-family: var(--vp-font-family-sans);
148
+ color: var(--foreground);
149
+ background: var(--background);
150
+ border: 1px solid var(--border);
151
+ border-radius: var(--vp-list-radius-outer);
152
+ box-shadow: 0 18px 60px rgb(0 0 0 / 0.12);
153
+ overflow: hidden;
154
+ -webkit-font-smoothing: antialiased;
155
+ }
156
+
157
+ #vp-header {
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: space-between;
161
+ gap: 8px;
162
+ padding: 10px 12px;
163
+ border-bottom: 1px solid var(--border);
164
+ background: var(--background);
165
+ cursor: move;
166
+ }
167
+
168
+ #vp-title {
169
+ display: none;
170
+ }
171
+
172
+ #vp-header-actions {
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 4px;
176
+ margin-left: auto;
177
+ }
178
+
179
+ #vp-header-icons {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 4px;
183
+ margin-right: 4px;
184
+ }
185
+
186
+ #vp-conn {
187
+ width: 8px;
188
+ height: 8px;
189
+ border-radius: 50%;
190
+ background: var(--vp-conn-ready);
191
+ transition: background 200ms;
192
+ }
193
+
194
+ #vp-conn.ready {
195
+ background: var(--vp-conn-ready);
196
+ }
197
+
198
+ #vp-conn.warning {
199
+ background: var(--vp-conn-warning);
200
+ }
201
+
202
+ #vp-conn.error {
203
+ background: var(--vp-conn-error);
204
+ }
205
+
206
+ #vp-alert {
207
+ display: none;
208
+ margin: 0;
209
+ padding: 8px 12px;
210
+ border-bottom: 1px solid var(--border);
211
+ font-size: var(--vp-font-size-support);
212
+ line-height: var(--vp-line-height-support);
213
+ }
214
+
215
+ #vp-alert.error {
216
+ display: block;
217
+ color: var(--vp-alert-error-fg);
218
+ background: var(--vp-alert-error-bg);
219
+ }
220
+
221
+ #vp-alert.warning {
222
+ display: block;
223
+ color: var(--vp-alert-warning-fg);
224
+ background: var(--vp-alert-warning-bg);
225
+ }
226
+
227
+ #vp-toast {
228
+ display: none;
229
+ margin: 0;
230
+ padding: 8px 12px;
231
+ border-bottom: 1px solid var(--border);
232
+ font-size: var(--vp-font-size-support);
233
+ line-height: var(--vp-line-height-support);
234
+ color: var(--vp-toast-success-fg);
235
+ background: var(--vp-toast-success-bg);
236
+ }
237
+
238
+ #vp-toast.error {
239
+ display: block;
240
+ color: var(--vp-alert-error-fg);
241
+ background: var(--vp-alert-error-bg);
242
+ }
243
+
244
+ #vp-toast.success {
245
+ display: block;
246
+ }
247
+
248
+ #vp-body {
249
+ display: flex;
250
+ flex-direction: column;
251
+ gap: 10px;
252
+ padding: 12px;
253
+ overflow: auto;
254
+ max-height: calc(100vh - 114px);
255
+ background: var(--background);
256
+ }
257
+
258
+ #vp-body::-webkit-scrollbar {
259
+ width: 8px;
260
+ }
261
+
262
+ #vp-body::-webkit-scrollbar-thumb {
263
+ background: oklch(0.89 0.006 255);
264
+ border-radius: 999px;
265
+ }
266
+
267
+ #vp-footer {
268
+ position: sticky;
269
+ bottom: 0;
270
+ z-index: 2;
271
+ padding-top: 8px;
272
+ background: linear-gradient(180deg, rgb(255 255 255 / 0) 0%, rgb(255 255 255 / 0.96) 22%, #fff 100%);
273
+ }
274
+
275
+ #vp-live-preview-host {
276
+ min-height: 72px;
277
+ max-width: 280px;
278
+ border: 1px dashed var(--border);
279
+ border-radius: 8px;
280
+ padding: 8px;
281
+ display: flex;
282
+ align-items: flex-start;
283
+ justify-content: flex-start;
284
+ overflow: auto;
285
+ background: oklch(0.97 0.004 255);
286
+ }
287
+
288
+ .crank-hidden {
289
+ display: none !important;
290
+ }
291
+
292
+ /* Typography utilities */
293
+ .vp-type-micro {
294
+ font-family: var(--vp-font-family-sans);
295
+ font-size: var(--vp-font-size-micro);
296
+ line-height: var(--vp-line-height-micro);
297
+ }
298
+
299
+ .vp-type-support {
300
+ font-family: var(--vp-font-family-sans);
301
+ font-size: var(--vp-font-size-support);
302
+ line-height: var(--vp-line-height-support);
303
+ }
304
+
305
+ .vp-type-label {
306
+ font-family: var(--vp-font-family-sans);
307
+ font-size: var(--vp-font-size-label);
308
+ line-height: var(--vp-line-height-label);
309
+ }
310
+
311
+ .vp-type-body {
312
+ font-size: var(--vp-font-size-body);
313
+ line-height: var(--vp-line-height-body);
314
+ }
315
+
316
+ .vp-text {
317
+ color: var(--foreground);
318
+ }
319
+
320
+ .vp-muted {
321
+ color: var(--muted-foreground);
322
+ }
323
+
324
+ .vp-subtle {
325
+ color: var(--muted-foreground);
326
+ font-size: var(--vp-font-size-support);
327
+ line-height: var(--vp-line-height-support);
328
+ }
329
+
330
+ .vp-strong {
331
+ color: var(--foreground);
332
+ font-weight: var(--vp-font-weight-semibold);
333
+ }
334
+
335
+ .vp-divider {
336
+ height: 1px;
337
+ background: var(--border);
338
+ margin: 8px 0;
339
+ }
340
+
341
+ .vp-section-title {
342
+ display: flex;
343
+ align-items: center;
344
+ justify-content: space-between;
345
+ text-transform: uppercase;
346
+ color: var(--muted-foreground);
347
+ font-size: var(--vp-font-size-micro);
348
+ letter-spacing: 0.12em;
349
+ margin: 8px 0;
350
+ font-weight: var(--vp-font-weight-medium);
351
+ }
352
+
353
+ .vp-card {
354
+ display: grid;
355
+ gap: 8px;
356
+ margin-bottom: 10px;
357
+ padding: 8px;
358
+ background: var(--card);
359
+ border-radius: 8px;
360
+ border: 1px solid var(--border);
361
+ }
362
+
363
+ .vp-property-row {
364
+ display: grid;
365
+ gap: 6px;
366
+ margin-bottom: 8px;
367
+ padding: 8px;
368
+ background: var(--card);
369
+ border-radius: 8px;
370
+ border: 1px solid var(--border);
371
+ }
372
+
373
+ /* InputField — mirrors tool-ui/src/components/ui/input-field.tsx */
374
+ .vp-field {
375
+ position: relative;
376
+ display: flex;
377
+ flex-direction: column;
378
+ gap: 4px;
379
+ min-width: 0;
380
+ }
381
+
382
+ .vp-field.is-active .vp-field-label-visible,
383
+ .vp-field:focus-within .vp-field-label-visible {
384
+ color: var(--foreground);
385
+ font-weight: var(--vp-font-weight-semibold);
386
+ }
387
+
388
+ .vp-field-label-grid {
389
+ display: inline-grid;
390
+ align-self: flex-start;
391
+ max-width: 100%;
392
+ }
393
+
394
+ .vp-field-label-grid--compact {
395
+ padding-left: var(--vp-compact-control-padding-x);
396
+ font-size: var(--vp-compact-control-font-size);
397
+ font-weight: var(--vp-compact-control-font-weight);
398
+ line-height: var(--vp-compact-control-line-height);
399
+ }
400
+
401
+ .vp-field-label-grid--default {
402
+ padding-left: var(--vp-control-shell-padding-x);
403
+ font-size: var(--vp-control-shell-font-size);
404
+ font-weight: var(--vp-control-shell-font-weight);
405
+ line-height: var(--vp-control-shell-line-height);
406
+ }
407
+
408
+ .vp-field-label-reserve {
409
+ visibility: hidden;
410
+ grid-column: 1;
411
+ grid-row: 1;
412
+ font-weight: var(--vp-font-weight-semibold);
413
+ white-space: nowrap;
414
+ }
415
+
416
+ .vp-field-label-visible {
417
+ grid-column: 1;
418
+ grid-row: 1;
419
+ color: var(--muted-foreground);
420
+ font-weight: var(--vp-font-weight-regular);
421
+ transition:
422
+ color 150ms var(--ease-standard),
423
+ font-weight 150ms var(--ease-standard);
424
+ white-space: nowrap;
425
+ overflow: hidden;
426
+ text-overflow: ellipsis;
427
+ }
428
+
429
+ .vp-field-meta {
430
+ display: flex;
431
+ flex-wrap: wrap;
432
+ align-items: center;
433
+ gap: 6px;
434
+ padding-left: var(--vp-compact-control-padding-x);
435
+ }
436
+
437
+ .vp-field-select {
438
+ position: relative;
439
+ width: 100%;
440
+ }
441
+
442
+ .vp-field-select-trigger {
443
+ display: inline-flex;
444
+ min-width: 0;
445
+ flex: 1;
446
+ align-items: center;
447
+ gap: 4px;
448
+ width: 100%;
449
+ border: none;
450
+ background: transparent;
451
+ box-shadow: none;
452
+ outline: none;
453
+ color: var(--muted-foreground);
454
+ text-align: left;
455
+ cursor: pointer;
456
+ font: inherit;
457
+ padding: 0;
458
+ transition: color 150ms var(--ease-standard);
459
+ }
460
+
461
+ .vp-field.is-active .vp-field-select-trigger,
462
+ .vp-field:focus-within .vp-field-select-trigger,
463
+ .vp-field-select.is-open .vp-field-select-trigger {
464
+ color: var(--foreground);
465
+ }
466
+
467
+ .vp-field-select-label {
468
+ flex: 1;
469
+ min-width: 0;
470
+ overflow: hidden;
471
+ text-overflow: ellipsis;
472
+ white-space: nowrap;
473
+ }
474
+
475
+ .vp-field-select-chevron {
476
+ flex-shrink: 0;
477
+ display: inline-flex;
478
+ align-items: center;
479
+ justify-content: center;
480
+ width: 14px;
481
+ height: 14px;
482
+ color: var(--muted-foreground);
483
+ transition:
484
+ transform 150ms var(--ease-standard),
485
+ color 150ms var(--ease-standard);
486
+ }
487
+
488
+ .vp-field-select.is-open .vp-field-select-chevron {
489
+ transform: rotate(180deg);
490
+ color: var(--foreground);
491
+ }
492
+
493
+ .vp-dropdown-menu {
494
+ position: absolute;
495
+ top: calc(100% + 6px);
496
+ right: 0;
497
+ left: 0;
498
+ z-index: 40;
499
+ min-width: 180px;
500
+ padding: var(--vp-list-padding);
501
+ border-radius: var(--vp-list-radius-outer);
502
+ border: 1px solid var(--vp-button-secondary-stroke);
503
+ background: var(--vp-list-surface-gradient);
504
+ box-shadow: var(--vp-button-secondary-shadow);
505
+ display: flex;
506
+ flex-direction: column;
507
+ gap: var(--vp-list-gap);
508
+ transform-origin: top center;
509
+ animation: vp-dropdown-in 160ms var(--ease-standard);
510
+ }
511
+
512
+ .vp-dropdown-menu.crank-hidden {
513
+ display: none !important;
514
+ animation: none;
515
+ }
516
+
517
+ @keyframes vp-dropdown-in {
518
+ from {
519
+ opacity: 0;
520
+ transform: translateY(-4px) scaleY(0.96);
521
+ }
522
+ to {
523
+ opacity: 1;
524
+ transform: translateY(0) scaleY(1);
525
+ }
526
+ }
527
+
528
+ .vp-menu-item {
529
+ position: relative;
530
+ z-index: 1;
531
+ display: flex;
532
+ align-items: center;
533
+ gap: 6px;
534
+ width: 100%;
535
+ padding: 6px 8px;
536
+ border: none;
537
+ border-radius: var(--vp-list-radius-inner);
538
+ background: transparent;
539
+ color: var(--muted-foreground);
540
+ font-size: var(--vp-font-size-label);
541
+ line-height: var(--vp-line-height-label);
542
+ font-weight: var(--vp-font-weight-regular);
543
+ text-align: left;
544
+ cursor: pointer;
545
+ font-family: inherit;
546
+ transition:
547
+ color 150ms var(--ease-standard),
548
+ font-weight 150ms var(--ease-standard),
549
+ background 150ms var(--ease-standard);
550
+ }
551
+
552
+ .vp-menu-item:hover,
553
+ .vp-menu-item:focus-visible {
554
+ color: var(--foreground);
555
+ background: var(--vp-list-highlight);
556
+ outline: none;
557
+ }
558
+
559
+ .vp-menu-item.is-checked {
560
+ color: var(--foreground);
561
+ font-weight: var(--vp-font-weight-semibold);
562
+ }
563
+
564
+ .vp-menu-item__label {
565
+ flex: 1;
566
+ min-width: 0;
567
+ overflow: hidden;
568
+ text-overflow: ellipsis;
569
+ white-space: nowrap;
570
+ }
571
+
572
+ .vp-menu-item__check {
573
+ flex-shrink: 0;
574
+ width: 14px;
575
+ height: 14px;
576
+ color: var(--foreground);
577
+ }
578
+
579
+ .vp-control-row {
580
+ display: grid;
581
+ gap: 6px;
582
+ align-items: center;
583
+ grid-template-columns: auto 1fr auto;
584
+ }
585
+
586
+ .vp-token-row {
587
+ padding: 6px 8px;
588
+ border: 1px solid var(--border);
589
+ border-radius: var(--vp-compact-control-radius);
590
+ background: var(--card);
591
+ }
592
+
593
+ .vp-token-row__name {
594
+ color: var(--foreground);
595
+ font-size: var(--vp-font-size-support);
596
+ line-height: var(--vp-line-height-support);
597
+ word-break: break-word;
598
+ }
599
+
600
+ .vp-token-row__value {
601
+ color: var(--muted-foreground);
602
+ font-size: var(--vp-font-size-micro);
603
+ line-height: var(--vp-line-height-micro);
604
+ margin-top: 2px;
605
+ word-break: break-word;
606
+ }
607
+
608
+ .vp-cap-badge {
609
+ display: inline-block;
610
+ padding: 2px 6px;
611
+ border-radius: 999px;
612
+ font-size: var(--vp-font-size-micro);
613
+ line-height: var(--vp-line-height-micro);
614
+ font-weight: var(--vp-font-weight-medium);
615
+ }
616
+
617
+ .vp-cap-badge--editable {
618
+ color: var(--vp-toast-success-fg);
619
+ background: var(--vp-toast-success-bg);
620
+ border: 1px solid color-mix(in oklch, var(--vp-toast-success-fg) 35%, transparent);
621
+ }
622
+
623
+ .vp-cap-badge--readonly {
624
+ color: var(--vp-alert-error-fg);
625
+ background: var(--vp-alert-error-bg);
626
+ border: 1px solid color-mix(in oklch, var(--destructive) 35%, transparent);
627
+ }
628
+
629
+ .vp-cap-badge--preview {
630
+ color: var(--vp-alert-warning-fg);
631
+ background: var(--vp-alert-warning-bg);
632
+ border: 1px solid color-mix(in oklch, var(--vp-alert-warning-fg) 35%, transparent);
633
+ }
634
+
635
+ .vp-context-btn {
636
+ display: block;
637
+ width: 100%;
638
+ text-align: left;
639
+ font-size: var(--vp-font-size-support);
640
+ line-height: var(--vp-line-height-support);
641
+ color: var(--foreground);
642
+ margin-bottom: 4px;
643
+ word-break: break-word;
644
+ border: 1px solid transparent;
645
+ border-radius: var(--vp-compact-control-radius);
646
+ background: transparent;
647
+ padding: 4px 6px;
648
+ cursor: pointer;
649
+ font-family: inherit;
650
+ transition: background 150ms var(--ease-out), border-color 150ms var(--ease-out);
651
+ }
652
+
653
+ .vp-context-btn:hover {
654
+ background: var(--hover);
655
+ }
656
+
657
+ .vp-context-btn--emphasis {
658
+ border-color: var(--border);
659
+ background: var(--card);
660
+ padding: 5px 7px;
661
+ }
662
+
663
+ .vp-context-btn--soft {
664
+ border-color: var(--border);
665
+ background: var(--accent);
666
+ }
667
+
668
+ .vp-segment-btn {
669
+ padding: 6px;
670
+ border: 1px solid var(--border);
671
+ background: var(--secondary);
672
+ color: var(--foreground);
673
+ border-radius: 4px;
674
+ cursor: pointer;
675
+ font-size: var(--vp-font-size-support);
676
+ font-weight: var(--vp-font-weight-regular);
677
+ font-family: inherit;
678
+ transition:
679
+ background 150ms var(--ease-out),
680
+ border-color 150ms var(--ease-out),
681
+ color 150ms var(--ease-out);
682
+ }
683
+
684
+ .vp-segment-btn:hover {
685
+ background: var(--hover);
686
+ }
687
+
688
+ .vp-segment-btn.is-selected {
689
+ border-color: var(--ring);
690
+ background: var(--vp-list-highlight);
691
+ font-weight: var(--vp-font-weight-semibold);
692
+ }
693
+
694
+ .vp-segment-btn--compact {
695
+ padding: 6px 4px;
696
+ font-size: var(--vp-font-size-micro);
697
+ }
698
+
699
+ .vp-pill {
700
+ display: inline-block;
701
+ background: var(--secondary);
702
+ border: 1px solid var(--border);
703
+ color: var(--foreground);
704
+ border-radius: 999px;
705
+ padding: 4px 8px;
706
+ font-size: var(--vp-font-size-micro);
707
+ line-height: var(--vp-line-height-micro);
708
+ }
709
+
710
+ .vp-pill--accent {
711
+ background: color-mix(in oklch, var(--ring) 12%, var(--card));
712
+ border-color: color-mix(in oklch, var(--ring) 45%, var(--border));
713
+ color: var(--foreground);
714
+ }
715
+
716
+ .vp-pill--muted {
717
+ color: var(--muted-foreground);
718
+ }
719
+
720
+ .vp-audit-entry {
721
+ padding: 8px;
722
+ border: 1px solid var(--border);
723
+ border-radius: var(--vp-compact-control-radius);
724
+ background: var(--card);
725
+ margin-bottom: 6px;
726
+ }
727
+
728
+ .vp-audit-entry.is-current {
729
+ border-color: var(--ring);
730
+ background: color-mix(in oklch, var(--ring) 8%, var(--card));
731
+ }
732
+
733
+ .vp-audit-entry.is-past {
734
+ opacity: 0.72;
735
+ }
736
+
737
+ .vp-audit-entry__property {
738
+ color: var(--foreground);
739
+ font-size: var(--vp-font-size-support);
740
+ font-weight: var(--vp-font-weight-semibold);
741
+ }
742
+
743
+ .vp-audit-entry.is-past .vp-audit-entry__property {
744
+ color: var(--muted-foreground);
745
+ }
746
+
747
+ .vp-audit-entry__meta {
748
+ color: var(--muted-foreground);
749
+ font-size: var(--vp-font-size-micro);
750
+ margin-top: 2px;
751
+ }
752
+
753
+ .vp-audit-entry__old {
754
+ color: var(--destructive);
755
+ font-size: var(--vp-font-size-micro);
756
+ margin-top: 4px;
757
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
758
+ }
759
+
760
+ .vp-audit-entry__new {
761
+ color: var(--vp-toast-success-fg);
762
+ font-size: var(--vp-font-size-micro);
763
+ margin-top: 2px;
764
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
765
+ }
766
+
767
+ .vp-status-badge {
768
+ display: inline-block;
769
+ padding: 2px 6px;
770
+ border-radius: 999px;
771
+ font-size: 9px;
772
+ font-weight: var(--vp-font-weight-bold);
773
+ letter-spacing: 0.08em;
774
+ text-transform: uppercase;
775
+ }
776
+
777
+ .vp-status-badge--current {
778
+ border: 1px solid color-mix(in oklch, var(--ring) 45%, var(--border));
779
+ color: var(--foreground);
780
+ background: color-mix(in oklch, var(--ring) 12%, var(--card));
781
+ }
782
+
783
+ .vp-status-badge--pending {
784
+ border: 1px solid var(--border);
785
+ color: var(--muted-foreground);
786
+ background: var(--secondary);
787
+ }
788
+
789
+ .vp-status-badge--saved {
790
+ border: 1px solid color-mix(in oklch, var(--vp-toast-success-fg) 45%, var(--border));
791
+ color: var(--vp-toast-success-fg);
792
+ background: var(--vp-toast-success-bg);
793
+ }
794
+
795
+ .vp-status-badge--failed {
796
+ border: 1px solid color-mix(in oklch, var(--destructive) 45%, var(--border));
797
+ color: var(--vp-alert-error-fg);
798
+ background: var(--vp-alert-error-bg);
799
+ }
800
+
801
+ .vp-banner--info {
802
+ background: color-mix(in oklch, var(--ring) 8%, var(--card));
803
+ border-color: color-mix(in oklch, var(--ring) 45%, var(--border));
804
+ color: var(--foreground);
805
+ }
806
+
807
+ .vp-component-mode-banner {
808
+ border: 1px solid color-mix(in oklch, var(--ring) 45%, var(--border));
809
+ background: color-mix(in oklch, var(--ring) 8%, var(--card));
810
+ border-radius: 8px;
811
+ padding: 8px;
812
+ margin-bottom: 10px;
813
+ }
814
+
815
+ .vp-usage-row {
816
+ border: 1px solid var(--border);
817
+ border-radius: var(--vp-compact-control-radius);
818
+ background: var(--card);
819
+ padding: 6px 7px;
820
+ }
821
+
822
+ .vp-usage-row__file {
823
+ font-size: var(--vp-font-size-support);
824
+ color: var(--foreground);
825
+ word-break: break-word;
826
+ }
827
+
828
+ .vp-usage-row__snippet {
829
+ margin-top: 4px;
830
+ font-size: var(--vp-font-size-micro);
831
+ color: var(--muted-foreground);
832
+ word-break: break-word;
833
+ }
834
+
835
+ .vp-snapshot-panel {
836
+ border: 1px solid var(--border);
837
+ border-radius: 8px;
838
+ padding: 8px;
839
+ margin-bottom: 10px;
840
+ background: var(--card);
841
+ }
842
+
843
+ .vp-snapshot-host {
844
+ min-height: 72px;
845
+ max-width: 280px;
846
+ border: 1px dashed var(--border);
847
+ border-radius: 8px;
848
+ padding: 8px;
849
+ display: flex;
850
+ align-items: flex-start;
851
+ justify-content: flex-start;
852
+ overflow: auto;
853
+ background: color-mix(in oklch, var(--ring) 6%, var(--accent));
854
+ }
855
+
856
+ .vp-sizing-row {
857
+ display: grid;
858
+ gap: 6px;
859
+ grid-template-columns: auto 1fr auto;
860
+ align-items: center;
861
+ padding: 8px;
862
+ background: var(--secondary);
863
+ border-radius: var(--vp-compact-control-radius);
864
+ border: 1px solid var(--border);
865
+ }
866
+
867
+ .vp-advanced-panel {
868
+ display: grid;
869
+ gap: 6px;
870
+ padding: 8px;
871
+ background: var(--accent);
872
+ border-radius: var(--vp-compact-control-radius);
873
+ border: 1px solid var(--border);
874
+ }
875
+
876
+ .vp-element-badge {
877
+ display: inline-block;
878
+ border-radius: 999px;
879
+ padding: 4px 8px;
880
+ background: var(--secondary);
881
+ border: 1px solid var(--border);
882
+ color: var(--muted-foreground);
883
+ font-size: var(--vp-font-size-micro);
884
+ }
885
+
886
+ .vp-element-badge--react {
887
+ background: color-mix(in oklch, var(--ring) 10%, var(--card));
888
+ border-color: color-mix(in oklch, var(--ring) 35%, var(--border));
889
+ color: var(--foreground);
890
+ }
891
+
892
+ .vp-diff-banner {
893
+ margin: 0 0 10px;
894
+ padding: 8px;
895
+ border: 1px solid color-mix(in oklch, var(--destructive) 25%, var(--border));
896
+ border-radius: 8px;
897
+ background: var(--vp-alert-error-bg);
898
+ color: var(--vp-alert-error-fg);
899
+ font-size: var(--vp-font-size-support);
900
+ line-height: var(--vp-line-height-support);
901
+ }
902
+
903
+ .vp-diff-banner--compact {
904
+ margin: 0 0 8px;
905
+ border-radius: var(--vp-compact-control-radius);
906
+ }
907
+
908
+ .vp-diff-banner__title {
909
+ font-weight: var(--vp-font-weight-semibold);
910
+ margin-bottom: 3px;
911
+ color: var(--foreground);
912
+ }
913
+
914
+ .vp-diff-banner__hint {
915
+ color: var(--muted-foreground);
916
+ }
917
+
918
+ .vp-diff-line {
919
+ font-size: var(--vp-font-size-micro);
920
+ color: var(--foreground);
921
+ }
922
+
923
+ .vp-diff-line__shared {
924
+ color: var(--muted-foreground);
925
+ }
926
+
927
+ .vp-diff-line__local {
928
+ color: var(--foreground);
929
+ font-weight: var(--vp-font-weight-medium);
930
+ }
931
+
932
+ .vp-typography-token-banner {
933
+ margin: 0 0 10px;
934
+ padding: 8px;
935
+ border: 1px solid color-mix(in oklch, var(--ring) 30%, var(--border));
936
+ border-radius: var(--vp-compact-control-radius);
937
+ background: color-mix(in oklch, var(--ring) 8%, var(--card));
938
+ }
939
+
940
+ .vp-banner {
941
+ padding: 8px;
942
+ border-radius: var(--vp-compact-control-radius);
943
+ border: 1px solid var(--border);
944
+ background: var(--accent);
945
+ color: var(--foreground);
946
+ font-size: var(--vp-font-size-support);
947
+ line-height: var(--vp-line-height-support);
948
+ }
949
+
950
+ .vp-banner--warning {
951
+ background: var(--vp-alert-warning-bg);
952
+ border-color: color-mix(in oklch, var(--vp-alert-warning-fg) 25%, var(--border));
953
+ color: var(--vp-alert-warning-fg);
954
+ }
955
+
956
+ .vp-banner--error {
957
+ background: var(--vp-alert-error-bg);
958
+ border-color: color-mix(in oklch, var(--destructive) 25%, var(--border));
959
+ color: var(--vp-alert-error-fg);
960
+ }
961
+
962
+ .vp-empty-state {
963
+ color: var(--muted-foreground);
964
+ padding: 12px;
965
+ text-align: center;
966
+ font-size: var(--vp-font-size-support);
967
+ }
968
+
969
+ .vp-panel-block {
970
+ border: 1px solid var(--border);
971
+ border-radius: 8px;
972
+ padding: 8px;
973
+ margin-bottom: 10px;
974
+ background: var(--card);
975
+ }
976
+
977
+ .vp-check-row {
978
+ display: flex;
979
+ align-items: center;
980
+ gap: 6px;
981
+ cursor: pointer;
982
+ font-size: var(--vp-font-size-support);
983
+ color: var(--foreground);
984
+ }
985
+
986
+ .vp-chip {
987
+ display: inline-block;
988
+ padding: 2px 7px;
989
+ border-radius: 999px;
990
+ border: 1px solid var(--border);
991
+ background: var(--background);
992
+ color: var(--muted-foreground);
993
+ font-size: var(--vp-font-size-support);
994
+ }
995
+
996
+ .vp-badge-token {
997
+ display: inline-block;
998
+ padding: 2px 6px;
999
+ background: color-mix(in oklch, var(--ring) 12%, var(--card));
1000
+ border: 1px solid color-mix(in oklch, var(--ring) 30%, var(--border));
1001
+ border-radius: 4px;
1002
+ font-size: var(--vp-font-size-micro);
1003
+ color: var(--foreground);
1004
+ }
1005
+
1006
+ .vp-badge-override {
1007
+ display: inline-block;
1008
+ padding: 2px 6px;
1009
+ background: var(--vp-alert-error-bg);
1010
+ border: 1px solid oklch(0.59 0.22 26 / 0.35);
1011
+ border-radius: 4px;
1012
+ font-size: var(--vp-font-size-micro);
1013
+ color: var(--vp-alert-error-fg);
1014
+ }
1015
+
1016
+ .vp-error-text {
1017
+ color: var(--vp-alert-error-fg);
1018
+ padding: 12px;
1019
+ }
1020
+
1021
+ /* Control shells */
1022
+ .vp-control-shell {
1023
+ box-sizing: border-box;
1024
+ min-height: var(--vp-control-shell-height);
1025
+ height: var(--vp-control-shell-height);
1026
+ gap: var(--vp-control-shell-gap);
1027
+ padding-inline: var(--vp-control-shell-padding-x);
1028
+ border-radius: var(--vp-control-shell-radius);
1029
+ }
1030
+
1031
+ .vp-control-typography {
1032
+ font-family: var(--vp-font-family-sans);
1033
+ font-size: var(--vp-control-shell-font-size);
1034
+ font-weight: var(--vp-control-shell-font-weight);
1035
+ line-height: var(--vp-control-shell-line-height);
1036
+ }
1037
+
1038
+ .vp-compact-control-shell {
1039
+ min-height: var(--vp-compact-control-height);
1040
+ height: var(--vp-compact-control-height);
1041
+ gap: var(--vp-compact-control-gap);
1042
+ padding-inline: var(--vp-compact-control-padding-x);
1043
+ border-radius: var(--vp-compact-control-radius);
1044
+ }
1045
+
1046
+ .vp-compact-control-typography {
1047
+ font-family: var(--vp-font-family-sans);
1048
+ font-size: var(--vp-compact-control-font-size);
1049
+ font-weight: var(--vp-compact-control-font-weight);
1050
+ line-height: var(--vp-compact-control-line-height);
1051
+ }
1052
+
1053
+ .vp-button-surface-control {
1054
+ display: inline-flex;
1055
+ align-items: center;
1056
+ justify-content: center;
1057
+ border-width: 1px;
1058
+ border-style: solid;
1059
+ cursor: pointer;
1060
+ white-space: nowrap;
1061
+ font-family: inherit;
1062
+ }
1063
+
1064
+ .vp-button-primary-surface {
1065
+ border-color: var(--vp-button-primary-border);
1066
+ background: var(--vp-button-primary-gradient);
1067
+ box-shadow: var(--vp-button-primary-shadow);
1068
+ color: var(--primary-foreground);
1069
+ transition:
1070
+ background 150ms var(--ease-out),
1071
+ box-shadow 150ms var(--ease-out),
1072
+ border-color 150ms var(--ease-out),
1073
+ transform 150ms var(--ease-out);
1074
+ }
1075
+
1076
+ .vp-button-primary-surface:hover:not(:disabled):not([aria-disabled="true"]) {
1077
+ background: var(--vp-button-primary-gradient-hover);
1078
+ box-shadow: var(--vp-button-primary-shadow-hover);
1079
+ }
1080
+
1081
+ .vp-button-primary-surface:active:not(:disabled):not([aria-disabled="true"]) {
1082
+ background: var(--vp-button-primary-gradient-active);
1083
+ box-shadow: var(--vp-button-primary-shadow-active);
1084
+ transform: scale(0.98);
1085
+ }
1086
+
1087
+ .vp-button-secondary-surface {
1088
+ border-color: var(--vp-button-secondary-stroke);
1089
+ background: var(--vp-button-secondary-gradient);
1090
+ box-shadow: var(--vp-button-secondary-shadow);
1091
+ color: var(--foreground);
1092
+ transition:
1093
+ background 150ms var(--ease-out),
1094
+ box-shadow 150ms var(--ease-out),
1095
+ border-color 150ms var(--ease-out),
1096
+ transform 150ms var(--ease-out);
1097
+ }
1098
+
1099
+ .vp-button-secondary-surface:hover:not(:disabled):not([aria-disabled="true"]) {
1100
+ background: var(--vp-button-secondary-gradient-hover);
1101
+ box-shadow: var(--vp-button-secondary-shadow-hover);
1102
+ }
1103
+
1104
+ .vp-button-secondary-surface:active:not(:disabled):not([aria-disabled="true"]) {
1105
+ background: var(--vp-button-secondary-gradient-active);
1106
+ box-shadow: var(--vp-button-secondary-shadow-active);
1107
+ transform: scale(0.98);
1108
+ }
1109
+
1110
+ .vp-control-surface,
1111
+ .vp-input-surface {
1112
+ border-width: 1px;
1113
+ border-style: solid;
1114
+ border-color: var(--vp-button-secondary-stroke);
1115
+ background: var(--vp-input-surface-gradient);
1116
+ box-shadow: var(--vp-input-surface-shadow);
1117
+ transition:
1118
+ background 150ms var(--ease-out),
1119
+ box-shadow 150ms var(--ease-out),
1120
+ border-color 150ms var(--ease-out);
1121
+ }
1122
+
1123
+ .vp-control-surface:hover:not(.vp-control-surface-disabled):not(:focus-within),
1124
+ .vp-input-surface:hover:not(.vp-input-surface-disabled):not(:focus-within),
1125
+ .vp-input-surface[data-active="true"]:not(:focus-within):not(.vp-input-surface-disabled),
1126
+ .vp-control-surface[data-active="true"]:not(:focus-within):not(.vp-control-surface-disabled) {
1127
+ background: var(--vp-input-surface-gradient-hover);
1128
+ box-shadow: var(--vp-input-surface-shadow-hover);
1129
+ }
1130
+
1131
+ .vp-control-surface:focus-within:not(.vp-control-surface-disabled),
1132
+ .vp-input-surface:focus-within:not(.vp-input-surface-disabled) {
1133
+ background: var(--vp-input-surface-gradient-focus);
1134
+ box-shadow: var(--vp-input-surface-shadow-focus);
1135
+ }
1136
+
1137
+ .vp-input-surface:focus-within:not(.vp-input-surface-disabled) {
1138
+ outline: 2px solid var(--ring);
1139
+ outline-offset: 0;
1140
+ }
1141
+
1142
+ .vp-control-surface-disabled,
1143
+ .vp-input-surface-disabled {
1144
+ background: var(--vp-input-surface-gradient-disabled);
1145
+ box-shadow: var(--vp-input-surface-shadow-disabled);
1146
+ opacity: 0.65;
1147
+ }
1148
+
1149
+ .vp-button-ghost-surface {
1150
+ display: inline-flex;
1151
+ align-items: center;
1152
+ justify-content: center;
1153
+ border: none;
1154
+ background: transparent;
1155
+ box-shadow: none;
1156
+ color: var(--muted-foreground);
1157
+ cursor: pointer;
1158
+ white-space: nowrap;
1159
+ font-family: inherit;
1160
+ transition:
1161
+ background 150ms var(--ease-out),
1162
+ box-shadow 150ms var(--ease-out),
1163
+ color 150ms var(--ease-out),
1164
+ transform 150ms var(--ease-out);
1165
+ }
1166
+
1167
+ .vp-button-ghost-surface:hover:not(:disabled) {
1168
+ background: var(--vp-button-ghost-gradient-hover);
1169
+ box-shadow: var(--vp-button-ghost-shadow-hover);
1170
+ color: var(--foreground);
1171
+ }
1172
+
1173
+ .vp-button-ghost-surface:active:not(:disabled) {
1174
+ background: var(--vp-button-ghost-gradient-active);
1175
+ box-shadow: var(--vp-button-ghost-shadow-active);
1176
+ transform: scale(0.97);
1177
+ }
1178
+
1179
+ .vp-button-ghost-surface.is-active {
1180
+ color: var(--foreground);
1181
+ background: var(--vp-list-highlight);
1182
+ }
1183
+
1184
+ .vp-input-surface {
1185
+ display: flex;
1186
+ align-items: center;
1187
+ width: 100%;
1188
+ }
1189
+
1190
+ .vp-input-surface--textarea {
1191
+ align-items: stretch;
1192
+ height: auto;
1193
+ min-height: var(--vp-compact-control-height);
1194
+ padding-block: 6px;
1195
+ }
1196
+
1197
+ .vp-input-surface--fixed {
1198
+ width: auto;
1199
+ flex: 0 0 auto;
1200
+ }
1201
+
1202
+ .vp-input-native,
1203
+ .vp-select-native,
1204
+ .vp-textarea-native {
1205
+ flex: 1;
1206
+ min-width: 0;
1207
+ width: 100%;
1208
+ border: none;
1209
+ background: transparent;
1210
+ box-shadow: none;
1211
+ outline: none;
1212
+ color: var(--foreground);
1213
+ font-family: inherit;
1214
+ font-size: inherit;
1215
+ font-weight: inherit;
1216
+ line-height: inherit;
1217
+ text-align: left;
1218
+ padding: 0;
1219
+ margin: 0;
1220
+ }
1221
+
1222
+ .vp-textarea-native {
1223
+ resize: vertical;
1224
+ min-height: 3.5rem;
1225
+ line-height: var(--vp-line-height-support);
1226
+ padding: 0;
1227
+ }
1228
+
1229
+ .vp-select-native {
1230
+ cursor: pointer;
1231
+ appearance: none;
1232
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
1233
+ background-repeat: no-repeat;
1234
+ background-position: right 0 center;
1235
+ padding-right: 1rem;
1236
+ }
1237
+
1238
+ .vp-input-native[type="color"] {
1239
+ height: 30px;
1240
+ padding: 0;
1241
+ cursor: pointer;
1242
+ }
1243
+
1244
+ .vp-input-native[type="range"] {
1245
+ accent-color: oklch(0.4 0.06 255);
1246
+ }
1247
+
1248
+ .vp-btn-row {
1249
+ display: flex;
1250
+ gap: 8px;
1251
+ }
1252
+
1253
+ .vp-btn-row > .vp-button-surface-control,
1254
+ .vp-btn-row > .vp-button-primary-surface,
1255
+ .vp-btn-row > .vp-button-secondary-surface {
1256
+ flex: 1;
1257
+ }
1258
+
1259
+ .vp-button-group {
1260
+ display: flex;
1261
+ flex-wrap: wrap;
1262
+ gap: 8px;
1263
+ align-items: center;
1264
+ }
1265
+
1266
+ .vp-button-group--stretch {
1267
+ display: flex;
1268
+ gap: 8px;
1269
+ }
1270
+
1271
+ .vp-button-group--stretch > button {
1272
+ flex: 1;
1273
+ min-width: 0;
1274
+ }
1275
+
1276
+ .vp-btn-icon {
1277
+ display: inline-flex;
1278
+ align-items: center;
1279
+ justify-content: center;
1280
+ width: var(--vp-compact-control-height);
1281
+ height: var(--vp-compact-control-height);
1282
+ min-width: var(--vp-compact-control-height);
1283
+ padding: 0;
1284
+ border-radius: var(--vp-compact-control-radius);
1285
+ }
1286
+
1287
+ /* Segmented tabs (tool-ui TabsList style)
1288
+ Golden rule: --vp-list-radius-outer = --vp-list-radius-inner + --vp-list-padding */
1289
+ .vp-list-surface.vp-control-surface {
1290
+ background: var(--vp-list-surface-gradient);
1291
+ }
1292
+
1293
+ .vp-tabs {
1294
+ position: relative;
1295
+ display: inline-flex;
1296
+ align-items: center;
1297
+ gap: var(--vp-list-gap);
1298
+ padding: var(--vp-list-padding);
1299
+ width: 100%;
1300
+ margin-bottom: 8px;
1301
+ border-radius: var(--vp-list-radius-outer);
1302
+ background: var(--vp-list-surface-gradient);
1303
+ box-sizing: border-box;
1304
+ }
1305
+
1306
+ .vp-tabs.vp-control-surface:focus-within,
1307
+ .vp-tabs.vp-control-surface:hover {
1308
+ background: var(--vp-list-surface-gradient);
1309
+ box-shadow: var(--vp-input-surface-shadow);
1310
+ }
1311
+
1312
+ .vp-tabs.vp-control-surface:focus-within {
1313
+ outline: none;
1314
+ }
1315
+
1316
+ .vp-control-surface-overlay {
1317
+ background: transparent;
1318
+ border: none;
1319
+ box-shadow: none;
1320
+ }
1321
+
1322
+ .vp-tab-indicator.vp-control-surface-overlay {
1323
+ background: var(--vp-list-highlight);
1324
+ }
1325
+
1326
+ .vp-tab-indicator {
1327
+ position: absolute;
1328
+ top: 0;
1329
+ left: 0;
1330
+ pointer-events: none;
1331
+ border-radius: var(--vp-list-radius-inner);
1332
+ background: var(--vp-list-highlight);
1333
+ will-change: transform, opacity;
1334
+ }
1335
+
1336
+ .vp-tab-indicator--selected {
1337
+ z-index: 0;
1338
+ opacity: 1;
1339
+ transition: opacity 80ms var(--ease-out);
1340
+ }
1341
+
1342
+ .vp-tab-indicator--hover {
1343
+ z-index: 0;
1344
+ opacity: 0;
1345
+ transition: opacity 80ms var(--ease-out);
1346
+ }
1347
+
1348
+ .vp-tab-indicator--hover.is-visible {
1349
+ opacity: 0.4;
1350
+ }
1351
+
1352
+ .vp-tab {
1353
+ position: relative;
1354
+ z-index: 1;
1355
+ flex: 1;
1356
+ display: inline-flex;
1357
+ align-items: center;
1358
+ justify-content: center;
1359
+ border: none;
1360
+ background: transparent;
1361
+ cursor: pointer;
1362
+ padding-block: 0.375rem;
1363
+ padding-inline: 0.5rem;
1364
+ border-radius: var(--vp-list-radius-inner);
1365
+ color: var(--muted-foreground);
1366
+ font-family: inherit;
1367
+ outline: none;
1368
+ box-sizing: border-box;
1369
+ transition:
1370
+ color 150ms var(--ease-standard),
1371
+ transform 150ms var(--ease-out);
1372
+ }
1373
+
1374
+ .vp-tab:focus {
1375
+ outline: none;
1376
+ }
1377
+
1378
+ .vp-tab:focus-visible {
1379
+ outline: none;
1380
+ }
1381
+
1382
+ .vp-tab:active {
1383
+ transform: scale(0.98);
1384
+ }
1385
+
1386
+ .vp-tab:hover,
1387
+ .vp-tab.is-hovered {
1388
+ color: var(--foreground);
1389
+ }
1390
+
1391
+ .vp-tab.is-hovered .vp-tab-label-visible {
1392
+ color: var(--foreground);
1393
+ }
1394
+
1395
+ .vp-tab.is-active {
1396
+ color: var(--foreground);
1397
+ background: transparent;
1398
+ }
1399
+
1400
+ .vp-tab-label-grid {
1401
+ display: inline-grid;
1402
+ max-width: 100%;
1403
+ justify-items: start;
1404
+ }
1405
+
1406
+ .vp-tab-label-reserve {
1407
+ grid-column: 1;
1408
+ grid-row: 1;
1409
+ visibility: hidden;
1410
+ font-weight: var(--vp-font-weight-semibold);
1411
+ white-space: nowrap;
1412
+ }
1413
+
1414
+ .vp-tab-label-visible {
1415
+ grid-column: 1;
1416
+ grid-row: 1;
1417
+ font-weight: var(--vp-font-weight-regular);
1418
+ white-space: nowrap;
1419
+ transition:
1420
+ color 150ms var(--ease-standard),
1421
+ font-weight 150ms var(--ease-standard);
1422
+ }
1423
+
1424
+ .vp-tab-label-visible.is-active,
1425
+ .vp-tab.is-active .vp-tab-label-visible {
1426
+ color: var(--foreground);
1427
+ font-weight: var(--vp-font-weight-semibold);
1428
+ }
1429
+
1430
+ .vp-list-button {
1431
+ display: flex;
1432
+ align-items: center;
1433
+ justify-content: space-between;
1434
+ gap: 8px;
1435
+ width: 100%;
1436
+ padding: 7px 8px;
1437
+ border: 1px solid var(--border);
1438
+ border-radius: var(--vp-compact-control-radius);
1439
+ background: var(--background);
1440
+ color: var(--foreground);
1441
+ font-size: var(--vp-font-size-support);
1442
+ cursor: pointer;
1443
+ text-align: left;
1444
+ font-family: inherit;
1445
+ transition:
1446
+ background 150ms var(--ease-out),
1447
+ border-color 150ms var(--ease-out);
1448
+ }
1449
+
1450
+ .vp-list-button:hover {
1451
+ background: var(--vp-list-highlight);
1452
+ }
1453
+
1454
+ .vp-field-label {
1455
+ font-family: var(--vp-font-family-sans);
1456
+ font-size: var(--vp-font-size-label);
1457
+ font-weight: var(--vp-font-weight-medium);
1458
+ color: var(--foreground);
1459
+ }
1460
+
1461
+ .vp-field-label--micro {
1462
+ font-size: var(--vp-font-size-micro);
1463
+ color: var(--foreground);
1464
+ font-weight: var(--vp-font-weight-medium);
1465
+ display: block;
1466
+ margin-bottom: 3px;
1467
+ }
1468
+
1469
+ .vp-field-label--scrub {
1470
+ cursor: grab;
1471
+ user-select: none;
1472
+ font-size: var(--vp-font-size-support);
1473
+ color: var(--foreground);
1474
+ font-weight: var(--vp-font-weight-medium);
1475
+ }
1476
+
1477
+ #vp-footer {
1478
+ background: linear-gradient(
1479
+ 180deg,
1480
+ color-mix(in oklch, var(--background) 0%, transparent) 0%,
1481
+ color-mix(in oklch, var(--background) 96%, transparent) 22%,
1482
+ var(--background) 100%
1483
+ );
1484
+ }
1485
+
1486
+ #vp-live-preview-host {
1487
+ background: var(--accent);
1488
+ }
1489
+
1490
+ button:disabled,
1491
+ .vp-button-primary-surface:disabled,
1492
+ .vp-button-secondary-surface:disabled {
1493
+ opacity: 0.55;
1494
+ cursor: not-allowed;
1495
+ transform: none;
1496
+ }
1497
+
1498
+ /* Launch hub (companion origin) */
1499
+ .vp-hub-app-list {
1500
+ display: grid;
1501
+ gap: 8px;
1502
+ }
1503
+
1504
+ .vp-hub-app-card {
1505
+ display: block;
1506
+ width: 100%;
1507
+ text-align: left;
1508
+ padding: 12px 14px;
1509
+ border: 1px solid var(--border);
1510
+ border-radius: var(--vp-list-radius-inner);
1511
+ background: var(--background);
1512
+ cursor: pointer;
1513
+ transition: border-color 120ms ease, box-shadow 120ms ease, opacity 120ms ease;
1514
+ }
1515
+
1516
+ .vp-hub-app-card:hover:not(:disabled) {
1517
+ border-color: color-mix(in oklch, var(--primary) 45%, var(--border));
1518
+ }
1519
+
1520
+ .vp-hub-app-card.is-launching {
1521
+ border-color: var(--primary);
1522
+ box-shadow: 0 0 0 1px color-mix(in oklch, var(--primary) 35%, transparent);
1523
+ }
1524
+
1525
+ .vp-hub-app-card:disabled {
1526
+ opacity: 0.55;
1527
+ cursor: not-allowed;
1528
+ }
1529
+
1530
+ .vp-hub-app-row {
1531
+ display: flex;
1532
+ align-items: center;
1533
+ justify-content: space-between;
1534
+ gap: 12px;
1535
+ }
1536
+
1537
+ .vp-hub-app-main {
1538
+ min-width: 0;
1539
+ flex: 1;
1540
+ }
1541
+
1542
+ .vp-hub-app-cta {
1543
+ flex-shrink: 0;
1544
+ color: var(--primary);
1545
+ font-weight: var(--vp-font-weight-semibold);
1546
+ }
1547
+
1548
+ .vp-hub-fix-panel {
1549
+ padding: 12px 14px;
1550
+ border: 1px solid color-mix(in oklch, var(--accent) 28%, var(--border));
1551
+ border-radius: var(--vp-list-radius-inner);
1552
+ background: color-mix(in oklch, var(--accent) 6%, var(--background));
1553
+ }
1554
+
1555
+ .vp-hub-fix-title {
1556
+ font-size: var(--vp-font-size-label);
1557
+ font-weight: var(--vp-font-weight-semibold);
1558
+ color: var(--foreground);
1559
+ }
1560
+
1561
+ .vp-hub-app-card.is-selected {
1562
+ border-color: var(--primary);
1563
+ box-shadow: 0 0 0 1px color-mix(in oklch, var(--primary) 65%, transparent);
1564
+ }
1565
+
1566
+ .vp-hub-app-origin {
1567
+ font-size: var(--vp-font-size-label);
1568
+ font-weight: var(--vp-font-weight-semibold);
1569
+ color: var(--foreground);
1570
+ }
1571
+
1572
+ .vp-hub-app-meta {
1573
+ line-height: 1.35;
1574
+ }
1575
+
1576
+ .vp-hub-badge {
1577
+ display: inline-block;
1578
+ margin-right: 6px;
1579
+ padding: 1px 6px;
1580
+ border-radius: 4px;
1581
+ font-size: 10px;
1582
+ font-weight: var(--vp-font-weight-medium);
1583
+ background: color-mix(in oklch, var(--muted) 55%, transparent);
1584
+ color: var(--muted-foreground);
1585
+ vertical-align: middle;
1586
+ }
1587
+
1588
+ .vp-hub-badge--running {
1589
+ background: color-mix(in oklch, var(--primary) 18%, transparent);
1590
+ color: var(--primary);
1591
+ }
1592
+
1593
+ .vp-hub-badge--saved {
1594
+ background: color-mix(in oklch, var(--accent) 35%, transparent);
1595
+ color: var(--accent-foreground);
1596
+ }
1597
+
1598
+ .vp-hub-badge--denied {
1599
+ background: color-mix(in oklch, var(--destructive) 18%, transparent);
1600
+ color: var(--destructive);
1601
+ }
1602
+
1603
+ .vp-hub-badge--review {
1604
+ background: color-mix(in oklch, var(--accent) 28%, transparent);
1605
+ color: var(--accent-foreground);
1606
+ }
1607
+
1608
+ .vp-hub-mismatch-warning {
1609
+ margin-top: 10px;
1610
+ padding: 10px 12px;
1611
+ border: 1px solid color-mix(in oklch, var(--accent) 30%, var(--border));
1612
+ border-radius: var(--vp-list-radius-inner);
1613
+ background: color-mix(in oklch, var(--accent) 8%, var(--background));
1614
+ line-height: 1.45;
1615
+ }
1616
+
1617
+ .vp-hub-folder-panel {
1618
+ padding: 12px;
1619
+ border: 1px solid var(--border);
1620
+ border-radius: var(--vp-list-radius-inner);
1621
+ background: color-mix(in oklch, var(--background) 96%, var(--muted));
1622
+ }
1623
+
1624
+ .vp-hub-check {
1625
+ display: flex;
1626
+ align-items: center;
1627
+ gap: 8px;
1628
+ margin-top: 10px;
1629
+ }
1630
+
1631
+ .vp-hub-access-warning {
1632
+ margin-top: 10px;
1633
+ padding: 8px 10px;
1634
+ border-radius: var(--vp-list-radius-inner);
1635
+ border: 1px solid color-mix(in oklch, var(--destructive) 30%, var(--border));
1636
+ background: var(--vp-alert-error-bg);
1637
+ color: var(--vp-alert-error-fg);
1638
+ line-height: 1.45;
1639
+ }
1640
+
1641
+ .vp-hub-status {
1642
+ margin: 0;
1643
+ line-height: 1.45;
1644
+ white-space: pre-line;
1645
+ }
1646
+
1647
+ .vp-hub-status--ok {
1648
+ color: var(--primary);
1649
+ }
1650
+
1651
+ .vp-hub-status--error {
1652
+ color: var(--destructive);
1653
+ }
1654
+
1655
+ .vp-hub-status--muted {
1656
+ color: var(--muted-foreground);
1657
+ }
1658
+
1659
+ /* Component studio — variant matrix modal */
1660
+ .vp-component-studio {
1661
+ position: fixed;
1662
+ inset: 0;
1663
+ z-index: 2147483645;
1664
+ display: none;
1665
+ pointer-events: none;
1666
+ font-family: var(--vp-font-family-sans);
1667
+ }
1668
+
1669
+ .vp-component-studio.is-open {
1670
+ display: block;
1671
+ pointer-events: none;
1672
+ }
1673
+
1674
+ .vp-component-studio-backdrop {
1675
+ position: absolute;
1676
+ inset: 0;
1677
+ background: rgb(12 14 18 / 0.2);
1678
+ pointer-events: none;
1679
+ }
1680
+
1681
+ .vp-component-studio-panel {
1682
+ position: absolute;
1683
+ left: 20px;
1684
+ top: 20px;
1685
+ bottom: 20px;
1686
+ width: min(720px, calc(100vw - 440px));
1687
+ max-width: calc(100vw - 440px);
1688
+ display: grid;
1689
+ grid-template-rows: auto auto auto 1fr;
1690
+ gap: 12px;
1691
+ padding: 14px;
1692
+ border-radius: calc(var(--vp-list-radius-outer) + 2px);
1693
+ border: 1px solid var(--border);
1694
+ background: var(--background);
1695
+ box-shadow: 0 24px 64px rgb(0 0 0 / 0.28);
1696
+ min-width: 0;
1697
+ pointer-events: auto;
1698
+ }
1699
+
1700
+ .vp-component-studio-header {
1701
+ display: flex;
1702
+ align-items: flex-start;
1703
+ justify-content: space-between;
1704
+ gap: 12px;
1705
+ }
1706
+
1707
+ .vp-component-studio-title {
1708
+ margin: 0;
1709
+ font-size: var(--vp-font-size-display);
1710
+ font-weight: var(--vp-font-weight-title);
1711
+ color: var(--foreground);
1712
+ line-height: var(--vp-line-height-display);
1713
+ }
1714
+
1715
+ .vp-component-studio-subtitle {
1716
+ margin: 4px 0 0;
1717
+ font-size: var(--vp-font-size-support);
1718
+ color: var(--muted-foreground);
1719
+ line-height: var(--vp-line-height-support);
1720
+ }
1721
+
1722
+ .vp-component-studio-meta {
1723
+ display: flex;
1724
+ flex-wrap: wrap;
1725
+ gap: 6px;
1726
+ }
1727
+
1728
+ .vp-component-studio-matrix-wrap {
1729
+ min-height: 0;
1730
+ overflow: auto;
1731
+ border: 1px solid var(--border);
1732
+ border-radius: var(--vp-list-radius-inner);
1733
+ background: var(--card);
1734
+ }
1735
+
1736
+ .vp-studio-preview-pane {
1737
+ display: flex;
1738
+ align-items: center;
1739
+ justify-content: center;
1740
+ min-height: 156px;
1741
+ padding: 12px;
1742
+ border: 1px solid var(--border);
1743
+ border-radius: var(--vp-list-radius-inner);
1744
+ background: var(--card);
1745
+ }
1746
+
1747
+ .vp-studio-preview-host {
1748
+ display: flex;
1749
+ align-items: center;
1750
+ justify-content: center;
1751
+ width: 100%;
1752
+ min-height: 120px;
1753
+ }
1754
+
1755
+ .vp-studio-preview-mount {
1756
+ width: 100%;
1757
+ display: flex;
1758
+ align-items: center;
1759
+ justify-content: center;
1760
+ cursor: crosshair;
1761
+ }
1762
+
1763
+ .vp-studio-preview-stage {
1764
+ width: 100%;
1765
+ display: flex;
1766
+ align-items: center;
1767
+ justify-content: center;
1768
+ }
1769
+
1770
+ .vp-studio-preview-viewport {
1771
+ display: inline-flex;
1772
+ max-width: 100%;
1773
+ overflow: auto;
1774
+ padding: 12px;
1775
+ border-radius: var(--radius);
1776
+ background-image:
1777
+ linear-gradient(45deg, rgb(0 0 0 / 0.04) 25%, transparent 25%),
1778
+ linear-gradient(-45deg, rgb(0 0 0 / 0.04) 25%, transparent 25%),
1779
+ linear-gradient(45deg, transparent 75%, rgb(0 0 0 / 0.04) 75%),
1780
+ linear-gradient(-45deg, transparent 75%, rgb(0 0 0 / 0.04) 75%);
1781
+ background-size: 16px 16px;
1782
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
1783
+ }
1784
+
1785
+ .vp-studio-preview-clone {
1786
+ pointer-events: auto;
1787
+ }
1788
+
1789
+ .vp-studio-live-preview-card {
1790
+ display: flex;
1791
+ flex-direction: column;
1792
+ gap: 6px;
1793
+ width: 100%;
1794
+ padding: 14px 16px;
1795
+ border: 1px solid var(--border);
1796
+ border-radius: var(--radius);
1797
+ background: var(--background);
1798
+ text-align: left;
1799
+ }
1800
+
1801
+ .vp-studio-live-preview-label {
1802
+ font-size: var(--vp-font-size-micro);
1803
+ font-weight: var(--vp-font-weight-semibold);
1804
+ color: var(--ring);
1805
+ text-transform: uppercase;
1806
+ letter-spacing: 0.04em;
1807
+ }
1808
+
1809
+ .vp-studio-live-preview-name {
1810
+ font-size: var(--vp-font-size-display);
1811
+ font-weight: var(--vp-font-weight-title);
1812
+ color: var(--foreground);
1813
+ }
1814
+
1815
+ .vp-studio-live-preview-meta {
1816
+ font-size: var(--vp-font-size-support);
1817
+ color: var(--muted-foreground);
1818
+ }
1819
+
1820
+ .vp-studio-live-preview-hint {
1821
+ font-size: var(--vp-font-size-micro);
1822
+ line-height: 1.4;
1823
+ color: var(--muted-foreground);
1824
+ }
1825
+
1826
+ .vp-studio-variant-list {
1827
+ display: flex;
1828
+ justify-content: center;
1829
+ padding: 16px;
1830
+ }
1831
+
1832
+ .vp-variant-matrix {
1833
+ width: 100%;
1834
+ border-collapse: separate;
1835
+ border-spacing: 0;
1836
+ min-width: 520px;
1837
+ }
1838
+
1839
+ .vp-variant-matrix th,
1840
+ .vp-variant-matrix td {
1841
+ border-bottom: 1px solid var(--border);
1842
+ border-right: 1px solid var(--border);
1843
+ vertical-align: middle;
1844
+ padding: 0;
1845
+ }
1846
+
1847
+ .vp-variant-matrix tr:last-child th,
1848
+ .vp-variant-matrix tr:last-child td {
1849
+ border-bottom: none;
1850
+ }
1851
+
1852
+ .vp-variant-matrix th:last-child,
1853
+ .vp-variant-matrix td:last-child {
1854
+ border-right: none;
1855
+ }
1856
+
1857
+ .vp-variant-matrix thead th {
1858
+ position: sticky;
1859
+ top: 0;
1860
+ z-index: 2;
1861
+ background: var(--secondary);
1862
+ color: var(--foreground);
1863
+ font-size: var(--vp-font-size-support);
1864
+ font-weight: var(--vp-font-weight-semibold);
1865
+ text-align: center;
1866
+ padding: 10px 12px;
1867
+ }
1868
+
1869
+ .vp-variant-matrix .vp-variant-matrix-corner {
1870
+ left: 0;
1871
+ z-index: 3;
1872
+ }
1873
+
1874
+ .vp-variant-matrix .vp-variant-matrix-row-label {
1875
+ position: sticky;
1876
+ left: 0;
1877
+ z-index: 1;
1878
+ background: var(--secondary);
1879
+ color: var(--foreground);
1880
+ font-size: var(--vp-font-size-support);
1881
+ font-weight: var(--vp-font-weight-semibold);
1882
+ text-align: left;
1883
+ padding: 10px 12px;
1884
+ min-width: 108px;
1885
+ white-space: nowrap;
1886
+ }
1887
+
1888
+ .vp-studio-cell {
1889
+ min-width: 0;
1890
+ min-height: 0;
1891
+ width: 100%;
1892
+ padding: 8px 10px;
1893
+ border: 0;
1894
+ border-radius: var(--radius);
1895
+ background: var(--card);
1896
+ cursor: pointer;
1897
+ font: inherit;
1898
+ font-size: var(--vp-font-size-micro);
1899
+ color: var(--foreground);
1900
+ text-align: center;
1901
+ transition: background-color 150ms var(--ease-standard), box-shadow 150ms var(--ease-standard);
1902
+ }
1903
+
1904
+ .vp-studio-cell:hover {
1905
+ background: var(--hover);
1906
+ }
1907
+
1908
+ .vp-studio-cell.is-selected {
1909
+ background: color-mix(in oklch, var(--ring) 12%, var(--card));
1910
+ box-shadow: inset 0 0 0 2px var(--ring);
1911
+ }
1912
+
1913
+ .vp-studio-cell.is-empty {
1914
+ cursor: default;
1915
+ background: var(--muted);
1916
+ }
1917
+
1918
+ .vp-studio-cell.is-empty:hover {
1919
+ background: var(--muted);
1920
+ }
1921
+
1922
+ .vp-studio-cell-empty-label {
1923
+ font-size: var(--vp-font-size-support);
1924
+ color: var(--muted-foreground);
1925
+ text-align: center;
1926
+ }
1927
+
1928
+ .vp-studio-single-cell-wrap {
1929
+ display: flex;
1930
+ align-items: center;
1931
+ justify-content: center;
1932
+ min-height: 200px;
1933
+ padding: 24px;
1934
+ }
1935
+
1936
+ .vp-studio-single-cell-wrap .vp-studio-cell {
1937
+ min-width: 240px;
1938
+ min-height: 120px;
1939
+ }
1940
+
1941
+ .vp-studio-generic-preview {
1942
+ display: flex;
1943
+ flex-direction: column;
1944
+ align-items: center;
1945
+ justify-content: center;
1946
+ gap: 6px;
1947
+ min-height: 48px;
1948
+ padding: 12px 16px;
1949
+ font-size: var(--vp-font-size-support);
1950
+ color: var(--muted-foreground);
1951
+ text-align: center;
1952
+ border: 1px dashed var(--border);
1953
+ border-radius: var(--radius);
1954
+ background: var(--muted);
1955
+ }
1956
+
1957
+ .vp-studio-generic-preview-name {
1958
+ font-weight: var(--vp-font-weight-semibold);
1959
+ color: var(--foreground);
1960
+ }
1961
+
1962
+ .vp-studio-generic-preview-hint {
1963
+ font-size: var(--vp-font-size-micro);
1964
+ line-height: 1.35;
1965
+ max-width: 220px;
1966
+ }
1967
+
1968
+ .vp-studio-preview-host-spacer {
1969
+ min-height: 64px;
1970
+ }
1971
+
1972
+ .vp-component-studio-usages {
1973
+ max-height: 120px;
1974
+ overflow: auto;
1975
+ display: grid;
1976
+ gap: 6px;
1977
+ }
1978
+
1979
+ .vp-component-studio-usage-item {
1980
+ font-size: var(--vp-font-size-micro);
1981
+ color: var(--muted-foreground);
1982
+ word-break: break-word;
1983
+ }
1984
+
1985
+ .vp-component-studio-no-schema {
1986
+ padding: 24px;
1987
+ color: var(--muted-foreground);
1988
+ font-size: var(--vp-font-size-support);
1989
+ line-height: 1.45;
1990
+ }
1991
+