@nuvio/overlay 0.1.0 → 0.5.1

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.
package/dist/style.css ADDED
@@ -0,0 +1,1312 @@
1
+ /**
2
+ * Nuvio Glass Pro — self-contained overlay chrome (no host Tailwind).
3
+ * Scoped under .nuvio-root inside Shadow DOM.
4
+ */
5
+
6
+ :host,
7
+ .nuvio-root {
8
+ color-scheme: dark;
9
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
10
+ sans-serif;
11
+
12
+ --nuvio-shell-bg: rgba(3, 7, 18, 0.62);
13
+ --nuvio-shell-bg-strong: rgba(3, 7, 18, 0.72);
14
+
15
+ --nuvio-inner-bg: rgba(0, 0, 0, 0.32);
16
+ --nuvio-inner-bg-strong: rgba(0, 0, 0, 0.44);
17
+ --nuvio-control-bg: rgba(0, 0, 0, 0.4);
18
+
19
+ --nuvio-border: rgba(255, 255, 255, 0.12);
20
+ --nuvio-border-strong: rgba(255, 255, 255, 0.18);
21
+
22
+ --nuvio-text: #ffffff;
23
+ --nuvio-text-soft: rgba(255, 255, 255, 0.9);
24
+ --nuvio-muted: rgba(255, 255, 255, 0.72);
25
+ --nuvio-dim: rgba(255, 255, 255, 0.52);
26
+
27
+ --nuvio-accent: #7dd3fc;
28
+ --nuvio-primary: #2563eb;
29
+ --nuvio-primary-bright: #3b82f6;
30
+ --nuvio-primary-hover: #1d4ed8;
31
+ --nuvio-primary-glow: rgba(37, 99, 235, 0.45);
32
+ --nuvio-success: #34d399;
33
+ --nuvio-warning: #facc15;
34
+ --nuvio-error: #fb7185;
35
+
36
+ --nuvio-blur: blur(24px) saturate(160%);
37
+ --nuvio-inner-blur: blur(14px) saturate(140%);
38
+
39
+ --nuvio-radius-shell: 26px;
40
+ --nuvio-radius-inner: 18px;
41
+ --nuvio-radius-control: 12px;
42
+
43
+ /* Legacy aliases */
44
+ --nuvio-muted-dim: var(--nuvio-dim);
45
+ --nuvio-accent-strong: var(--nuvio-primary);
46
+ --nuvio-accent-muted: rgba(59, 130, 246, 0.18);
47
+ --nuvio-warn: var(--nuvio-warning);
48
+ --nuvio-danger: var(--nuvio-error);
49
+ --nuvio-glass-border: var(--nuvio-border);
50
+ --nuvio-glass-border-strong: var(--nuvio-border-strong);
51
+ --nuvio-glass-inner: var(--nuvio-inner-bg);
52
+ --nuvio-z-chip: 9999;
53
+ --nuvio-z-panel: 9998;
54
+
55
+ box-sizing: border-box;
56
+ font-size: 13px;
57
+ line-height: 1.4;
58
+ color: var(--nuvio-text);
59
+ -webkit-font-smoothing: antialiased;
60
+ }
61
+
62
+ .nuvio-root *,
63
+ .nuvio-root *::before,
64
+ .nuvio-root *::after {
65
+ box-sizing: border-box;
66
+ }
67
+
68
+ /* Shadow portal */
69
+ .nuvio-shadow-mount {
70
+ position: fixed;
71
+ inset: 0;
72
+ z-index: 0;
73
+ pointer-events: none;
74
+ }
75
+
76
+ .nuvio-sr-only {
77
+ position: absolute;
78
+ width: 1px;
79
+ height: 1px;
80
+ padding: 0;
81
+ margin: -1px;
82
+ overflow: hidden;
83
+ clip: rect(0, 0, 0, 0);
84
+ white-space: nowrap;
85
+ border: 0;
86
+ }
87
+
88
+ /* Glass shell (chip + editor) */
89
+ .nuvio-glass-shell,
90
+ .nuvio-chrome-surface,
91
+ .nuvio-glass-frame {
92
+ position: relative;
93
+ overflow: hidden;
94
+ background: var(--nuvio-shell-bg);
95
+ -webkit-backdrop-filter: var(--nuvio-blur);
96
+ backdrop-filter: var(--nuvio-blur);
97
+ border: 1px solid var(--nuvio-border);
98
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.12);
99
+ color: var(--nuvio-text);
100
+ transform: translateZ(0);
101
+ }
102
+
103
+ .nuvio-glass-shell::before,
104
+ .nuvio-chrome-surface::before,
105
+ .nuvio-glass-frame::before {
106
+ content: "";
107
+ position: absolute;
108
+ inset: 0;
109
+ pointer-events: none;
110
+ border-radius: inherit;
111
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 28%),
112
+ radial-gradient(circle at 20% 0%, rgba(255, 255, 255, 0.1), transparent 32%);
113
+ }
114
+
115
+ .nuvio-glass-shell::after,
116
+ .nuvio-chrome-surface::after,
117
+ .nuvio-glass-frame::after {
118
+ content: "";
119
+ position: absolute;
120
+ inset: 0;
121
+ pointer-events: none;
122
+ border-radius: inherit;
123
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.14), inset 0 -1px 0 rgba(255, 255, 255, 0.03);
124
+ }
125
+
126
+ /* Editor uses stronger black glass */
127
+ .nuvio-panel.nuvio-glass-shell,
128
+ .nuvio-panel.nuvio-chrome-surface {
129
+ background: var(--nuvio-shell-bg-strong);
130
+ }
131
+
132
+ .nuvio-glass-content {
133
+ position: relative;
134
+ z-index: 1;
135
+ display: flex;
136
+ flex-direction: column;
137
+ min-height: 0;
138
+ min-width: 0;
139
+ }
140
+
141
+ /* Inner cards */
142
+ .nuvio-card,
143
+ .nuvio-chrome-section,
144
+ .nuvio-glass-section,
145
+ .nuvio-meta-block {
146
+ background: var(--nuvio-inner-bg);
147
+ -webkit-backdrop-filter: var(--nuvio-inner-blur);
148
+ backdrop-filter: var(--nuvio-inner-blur);
149
+ border: 1px solid rgba(255, 255, 255, 0.1);
150
+ border-radius: 18px;
151
+ padding: 12px;
152
+ }
153
+
154
+ .nuvio-card--strong {
155
+ background: var(--nuvio-inner-bg-strong);
156
+ }
157
+
158
+ .nuvio-card--tree {
159
+ padding: 8px 10px;
160
+ }
161
+
162
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
163
+ .nuvio-glass-shell,
164
+ .nuvio-chrome-surface,
165
+ .nuvio-glass-frame {
166
+ background: rgba(3, 7, 18, 0.88);
167
+ }
168
+
169
+ .nuvio-panel.nuvio-glass-shell,
170
+ .nuvio-panel.nuvio-chrome-surface {
171
+ background: rgba(3, 7, 18, 0.9);
172
+ }
173
+
174
+ .nuvio-card,
175
+ .nuvio-chrome-section,
176
+ .nuvio-glass-section,
177
+ .nuvio-meta-block {
178
+ background: rgba(0, 0, 0, 0.65);
179
+ }
180
+
181
+ .nuvio-card--strong {
182
+ background: rgba(0, 0, 0, 0.75);
183
+ }
184
+ }
185
+
186
+ /* Chip */
187
+ .nuvio-chip {
188
+ pointer-events: auto;
189
+ position: fixed;
190
+ z-index: var(--nuvio-z-chip);
191
+ min-height: 44px;
192
+ min-width: 0;
193
+ max-width: min(22rem, calc(100vw - 32px));
194
+ padding: 10px 12px;
195
+ border-radius: 24px;
196
+ text-align: left;
197
+ }
198
+
199
+ .nuvio-chip--collapsed {
200
+ max-width: min(16rem, calc(100vw - 32px));
201
+ padding: 7px 10px;
202
+ border-radius: 999px;
203
+ }
204
+
205
+ .nuvio-chip--collapsed .nuvio-chip-spacer,
206
+ .nuvio-chip--collapsed .nuvio-chip-status {
207
+ display: none;
208
+ }
209
+
210
+ .nuvio-chip--collapsed .nuvio-chip-header {
211
+ gap: 6px;
212
+ }
213
+
214
+ .nuvio-chip--dragging {
215
+ user-select: none;
216
+ }
217
+
218
+ .nuvio-chip-header {
219
+ display: flex;
220
+ align-items: center;
221
+ gap: 8px;
222
+ cursor: grab;
223
+ }
224
+
225
+ .nuvio-chip-header--grabbing {
226
+ cursor: grabbing;
227
+ }
228
+
229
+ .nuvio-chip-title {
230
+ flex-shrink: 0;
231
+ font-size: 13px;
232
+ font-weight: 600;
233
+ letter-spacing: -0.02em;
234
+ color: var(--nuvio-text);
235
+ }
236
+
237
+ .nuvio-chip-spacer {
238
+ flex: 1;
239
+ min-width: 4px;
240
+ }
241
+
242
+ .nuvio-chip-status {
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 3px;
246
+ margin-top: 5px;
247
+ font-size: 11px;
248
+ line-height: 1.35;
249
+ }
250
+
251
+ .nuvio-chip-selected {
252
+ margin: 0;
253
+ }
254
+
255
+ .nuvio-chip-warnings {
256
+ display: flex;
257
+ flex-direction: column;
258
+ gap: 2px;
259
+ }
260
+
261
+ .nuvio-chip-warning-line {
262
+ margin: 0;
263
+ color: var(--nuvio-warning);
264
+ font-size: 11px;
265
+ line-height: 1.35;
266
+ }
267
+
268
+ /* Editor panel */
269
+ .nuvio-panel {
270
+ pointer-events: auto;
271
+ position: fixed;
272
+ z-index: var(--nuvio-z-panel);
273
+ display: flex;
274
+ flex-direction: column;
275
+ width: min(400px, calc(100vw - 48px));
276
+ max-height: calc(100vh - 48px);
277
+ height: auto;
278
+ padding: 12px 14px;
279
+ border-radius: var(--nuvio-radius-shell);
280
+ }
281
+
282
+ .nuvio-panel--docked {
283
+ left: 24px;
284
+ top: 24px;
285
+ right: auto;
286
+ bottom: auto;
287
+ }
288
+
289
+ .nuvio-panel--dragging {
290
+ user-select: none;
291
+ }
292
+
293
+ .nuvio-panel > .nuvio-glass-content {
294
+ display: flex;
295
+ flex-direction: column;
296
+ max-height: calc(100vh - 48px);
297
+ min-height: 0;
298
+ }
299
+
300
+ .nuvio-panel-header {
301
+ display: flex;
302
+ flex-shrink: 0;
303
+ align-items: center;
304
+ gap: 6px;
305
+ margin: 0 0 4px;
306
+ padding: 0 2px 6px;
307
+ border-bottom: none;
308
+ cursor: grab;
309
+ font-size: 13px;
310
+ font-weight: 600;
311
+ color: var(--nuvio-text);
312
+ }
313
+
314
+ .nuvio-editor-versions {
315
+ margin: 0 0 8px;
316
+ padding: 0 2px;
317
+ font-size: 11px;
318
+ color: var(--nuvio-dim);
319
+ line-height: 1.35;
320
+ }
321
+
322
+ .nuvio-panel-header--grabbing {
323
+ cursor: grabbing;
324
+ }
325
+
326
+ .nuvio-panel-header-title {
327
+ min-width: 0;
328
+ flex: 1;
329
+ }
330
+
331
+ .nuvio-toggle-details {
332
+ flex-shrink: 0;
333
+ max-width: 9.5rem;
334
+ padding: 3px 8px;
335
+ border-radius: 999px;
336
+ border: 1px solid var(--nuvio-border, rgba(255, 255, 255, 0.14));
337
+ background: transparent;
338
+ color: var(--nuvio-dim);
339
+ font-size: 10px;
340
+ font-weight: 500;
341
+ line-height: 1.2;
342
+ cursor: pointer;
343
+ white-space: nowrap;
344
+ overflow: hidden;
345
+ text-overflow: ellipsis;
346
+ }
347
+
348
+ .nuvio-toggle-details:hover {
349
+ color: var(--nuvio-text);
350
+ border-color: rgba(255, 255, 255, 0.22);
351
+ }
352
+
353
+ .nuvio-toggle-details--on {
354
+ color: var(--nuvio-accent, #93c5fd);
355
+ border-color: rgba(147, 197, 253, 0.45);
356
+ background: rgba(147, 197, 253, 0.1);
357
+ }
358
+
359
+ .nuvio-selection-strip-id--friendly {
360
+ font-family: inherit;
361
+ font-weight: 600;
362
+ letter-spacing: 0.01em;
363
+ }
364
+
365
+ .nuvio-panel-body {
366
+ flex: 1 1 auto;
367
+ min-height: 0;
368
+ overflow-y: auto;
369
+ display: flex;
370
+ flex-direction: column;
371
+ gap: 8px;
372
+ padding-right: 2px;
373
+ scrollbar-width: thin;
374
+ scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
375
+ }
376
+
377
+ .nuvio-panel-tab {
378
+ pointer-events: auto;
379
+ position: fixed;
380
+ z-index: var(--nuvio-z-panel);
381
+ min-height: 44px;
382
+ padding: 10px 12px;
383
+ border-radius: var(--nuvio-radius-shell);
384
+ font-size: 12px;
385
+ font-weight: 600;
386
+ border: none;
387
+ cursor: pointer;
388
+ color: var(--nuvio-text);
389
+ }
390
+
391
+ .nuvio-panel-tab--left {
392
+ left: 24px;
393
+ top: 50%;
394
+ transform: translateY(-50%);
395
+ }
396
+
397
+ .nuvio-panel-tab--right {
398
+ right: 24px;
399
+ top: 50%;
400
+ transform: translateY(-50%);
401
+ }
402
+
403
+ .nuvio-flip-x {
404
+ display: inline-block;
405
+ transform: scaleX(-1);
406
+ }
407
+
408
+ .nuvio-selection-strip {
409
+ padding: 0 2px 4px;
410
+ font-size: 12px;
411
+ line-height: 1.45;
412
+ }
413
+
414
+ .nuvio-selection-strip-id {
415
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
416
+ font-size: 12px;
417
+ color: var(--nuvio-accent);
418
+ word-break: break-all;
419
+ }
420
+
421
+ .nuvio-selection-strip-path {
422
+ display: block;
423
+ margin-top: 2px;
424
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
425
+ font-size: 11px;
426
+ color: var(--nuvio-muted);
427
+ }
428
+
429
+ @media (max-width: 519px) {
430
+ .nuvio-panel {
431
+ width: calc(100vw - 24px);
432
+ max-height: calc(100vh - 24px);
433
+ }
434
+
435
+ .nuvio-panel > .nuvio-glass-content {
436
+ max-height: calc(100vh - 24px);
437
+ }
438
+
439
+ .nuvio-panel--docked {
440
+ left: 12px;
441
+ top: 12px;
442
+ right: auto;
443
+ }
444
+
445
+ .nuvio-chip {
446
+ max-width: calc(100vw - 24px);
447
+ }
448
+ }
449
+
450
+ /* Typography */
451
+ .nuvio-text-xs {
452
+ font-size: 12px;
453
+ }
454
+ .nuvio-text-2xs {
455
+ font-size: 11px;
456
+ }
457
+ .nuvio-text-3xs {
458
+ font-size: 10px;
459
+ }
460
+ .nuvio-text-muted {
461
+ color: var(--nuvio-muted);
462
+ }
463
+ .nuvio-text-muted-dim,
464
+ .nuvio-text-dim {
465
+ color: var(--nuvio-dim);
466
+ }
467
+ .nuvio-text-accent {
468
+ color: var(--nuvio-accent);
469
+ }
470
+ .nuvio-text-mono {
471
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
472
+ }
473
+ .nuvio-text-success {
474
+ color: var(--nuvio-success);
475
+ }
476
+ .nuvio-text-warn {
477
+ color: var(--nuvio-warning);
478
+ }
479
+ .nuvio-text-error {
480
+ color: var(--nuvio-error);
481
+ }
482
+ .nuvio-font-medium {
483
+ font-weight: 500;
484
+ }
485
+ .nuvio-font-semibold {
486
+ font-weight: 600;
487
+ }
488
+ .nuvio-uppercase {
489
+ text-transform: uppercase;
490
+ letter-spacing: 0.05em;
491
+ }
492
+ .nuvio-leading-snug {
493
+ line-height: 1.35;
494
+ }
495
+ .nuvio-break-all {
496
+ word-break: break-all;
497
+ }
498
+ .nuvio-truncate {
499
+ overflow: hidden;
500
+ text-overflow: ellipsis;
501
+ white-space: nowrap;
502
+ }
503
+
504
+ .nuvio-section-title {
505
+ margin: 0 0 8px;
506
+ font-size: 12px;
507
+ font-weight: 600;
508
+ letter-spacing: 0.02em;
509
+ color: var(--nuvio-text-soft);
510
+ }
511
+
512
+ .nuvio-group-title {
513
+ margin: 10px 0 2px;
514
+ font-size: 10px;
515
+ font-weight: 600;
516
+ text-transform: uppercase;
517
+ letter-spacing: 0.05em;
518
+ color: var(--nuvio-dim);
519
+ }
520
+
521
+ /* Form layout */
522
+ .nuvio-field-row {
523
+ display: grid;
524
+ grid-template-columns: minmax(0, 6.5rem) 1fr;
525
+ align-items: center;
526
+ gap: 4px 8px;
527
+ }
528
+
529
+ .nuvio-field-row--start {
530
+ align-items: start;
531
+ }
532
+
533
+ .nuvio-label {
534
+ font-size: 12px;
535
+ color: var(--nuvio-muted);
536
+ }
537
+
538
+ .nuvio-label--pad-top {
539
+ padding-top: 6px;
540
+ }
541
+
542
+ /* Controls */
543
+ .nuvio-control,
544
+ .nuvio-select,
545
+ .nuvio-textarea {
546
+ appearance: none;
547
+ width: 100%;
548
+ background: var(--nuvio-control-bg);
549
+ border: 1px solid rgba(255, 255, 255, 0.14);
550
+ border-radius: var(--nuvio-radius-control);
551
+ color: var(--nuvio-text);
552
+ min-height: 34px;
553
+ padding: 7px 10px;
554
+ font-size: 13px;
555
+ font-family: inherit;
556
+ }
557
+
558
+ .nuvio-select,
559
+ select.nuvio-control {
560
+ padding-right: 28px;
561
+ background-color: var(--nuvio-control-bg);
562
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' fill-opacity='0.72' d='M3 4.5 6 7.5 9 4.5'/%3E%3C/svg%3E");
563
+ background-repeat: no-repeat;
564
+ background-position: right 10px center;
565
+ background-size: 12px;
566
+ }
567
+
568
+ .nuvio-textarea {
569
+ min-height: 74px;
570
+ resize: vertical;
571
+ border-radius: 14px;
572
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
573
+ font-size: 13px;
574
+ }
575
+
576
+ .nuvio-control:disabled,
577
+ .nuvio-select:disabled,
578
+ .nuvio-textarea:disabled {
579
+ opacity: 0.42;
580
+ cursor: not-allowed;
581
+ filter: saturate(0.6);
582
+ }
583
+
584
+ .nuvio-control:focus-visible,
585
+ .nuvio-select:focus-visible,
586
+ .nuvio-textarea:focus-visible,
587
+ .nuvio-button:focus-visible,
588
+ .nuvio-button-icon:focus-visible,
589
+ .nuvio-button-chip:focus-visible,
590
+ .nuvio-btn:focus-visible,
591
+ .nuvio-btn-icon:focus-visible {
592
+ outline: 2px solid var(--nuvio-accent);
593
+ outline-offset: 2px;
594
+ }
595
+
596
+ /* Buttons */
597
+ .nuvio-button,
598
+ .nuvio-btn {
599
+ min-height: 32px;
600
+ padding: 6px 10px;
601
+ border-radius: var(--nuvio-radius-control);
602
+ border: 1px solid rgba(255, 255, 255, 0.1);
603
+ background: rgba(255, 255, 255, 0.07);
604
+ color: var(--nuvio-text-soft);
605
+ font-size: 12px;
606
+ font-weight: 500;
607
+ font-family: inherit;
608
+ cursor: pointer;
609
+ transition: background 120ms ease, border-color 120ms ease;
610
+ }
611
+
612
+ .nuvio-button:hover:not(:disabled),
613
+ .nuvio-btn:hover:not(:disabled) {
614
+ background: rgba(255, 255, 255, 0.12);
615
+ }
616
+
617
+ .nuvio-button:disabled,
618
+ .nuvio-btn:disabled {
619
+ opacity: 0.42;
620
+ cursor: not-allowed;
621
+ filter: saturate(0.6);
622
+ }
623
+
624
+ .nuvio-button-primary,
625
+ .nuvio-btn--primary {
626
+ background: linear-gradient(180deg, var(--nuvio-primary-bright), var(--nuvio-primary));
627
+ border-color: rgba(59, 130, 246, 0.5);
628
+ color: #ffffff;
629
+ box-shadow: 0 10px 28px var(--nuvio-primary-glow), inset 0 1px 0 rgba(255, 255, 255, 0.22);
630
+ }
631
+
632
+ .nuvio-button-primary:hover:not(:disabled),
633
+ .nuvio-btn--primary:hover:not(:disabled) {
634
+ background: linear-gradient(180deg, var(--nuvio-primary-bright), var(--nuvio-primary-hover));
635
+ }
636
+
637
+ .nuvio-button-ghost,
638
+ .nuvio-btn--ghost {
639
+ background: transparent;
640
+ border-color: var(--nuvio-border-strong);
641
+ color: var(--nuvio-muted);
642
+ }
643
+
644
+ .nuvio-button-ghost:hover:not(:disabled),
645
+ .nuvio-btn--ghost:hover:not(:disabled) {
646
+ background: rgba(255, 255, 255, 0.08);
647
+ color: var(--nuvio-text);
648
+ }
649
+
650
+ .nuvio-button-icon,
651
+ .nuvio-btn-icon {
652
+ flex-shrink: 0;
653
+ min-height: 28px;
654
+ padding: 4px 8px;
655
+ border: 1px solid transparent;
656
+ border-radius: 999px;
657
+ font-size: 12px;
658
+ cursor: pointer;
659
+ background: var(--nuvio-control-bg);
660
+ color: var(--nuvio-muted);
661
+ font-family: inherit;
662
+ transition: background 120ms ease, color 120ms ease;
663
+ }
664
+
665
+ .nuvio-button-icon:hover,
666
+ .nuvio-btn-icon:hover {
667
+ background: rgba(255, 255, 255, 0.14);
668
+ color: var(--nuvio-text);
669
+ }
670
+
671
+ .nuvio-button-chip,
672
+ .nuvio-btn-edit {
673
+ flex-shrink: 0;
674
+ min-height: 28px;
675
+ padding: 4px 12px;
676
+ border: 1px solid var(--nuvio-border);
677
+ border-radius: 999px;
678
+ font-size: 12px;
679
+ font-weight: 600;
680
+ cursor: pointer;
681
+ background: var(--nuvio-control-bg);
682
+ color: var(--nuvio-text-soft);
683
+ font-family: inherit;
684
+ transition: background 120ms ease, border-color 120ms ease;
685
+ }
686
+
687
+ .nuvio-button-chip:hover,
688
+ .nuvio-btn-edit:hover {
689
+ background: rgba(255, 255, 255, 0.13);
690
+ border-color: var(--nuvio-border-strong);
691
+ }
692
+
693
+ .nuvio-button-chip--active,
694
+ .nuvio-btn-edit--active {
695
+ background: linear-gradient(180deg, var(--nuvio-primary-bright), var(--nuvio-primary));
696
+ border-color: rgba(59, 130, 246, 0.55);
697
+ color: #ffffff;
698
+ box-shadow: 0 10px 28px var(--nuvio-primary-glow), inset 0 1px 0 rgba(255, 255, 255, 0.22);
699
+ }
700
+
701
+ .nuvio-button-chip--active:hover,
702
+ .nuvio-btn-edit--active:hover {
703
+ background: linear-gradient(180deg, var(--nuvio-primary-bright), var(--nuvio-primary-hover));
704
+ }
705
+
706
+ /* Layout utilities */
707
+ .nuvio-block {
708
+ display: block;
709
+ }
710
+ .nuvio-stack-1 {
711
+ display: flex;
712
+ flex-direction: column;
713
+ gap: 4px;
714
+ }
715
+ .nuvio-stack-2 {
716
+ display: flex;
717
+ flex-direction: column;
718
+ gap: 8px;
719
+ }
720
+ .nuvio-stack-4 {
721
+ display: flex;
722
+ flex-direction: column;
723
+ gap: 16px;
724
+ }
725
+ .nuvio-row-wrap {
726
+ display: flex;
727
+ flex-wrap: wrap;
728
+ gap: 8px;
729
+ }
730
+ .nuvio-pt-1 {
731
+ padding-top: 4px;
732
+ }
733
+ .nuvio-pt-2 {
734
+ padding-top: 8px;
735
+ }
736
+ .nuvio-p-2 {
737
+ padding: 8px;
738
+ }
739
+ .nuvio-min-w-0 {
740
+ min-width: 0;
741
+ }
742
+ .nuvio-relative {
743
+ position: relative;
744
+ }
745
+
746
+ /* Banners & preview */
747
+ .nuvio-banner {
748
+ border-radius: var(--nuvio-radius-control);
749
+ padding: 8px 10px;
750
+ font-size: 12px;
751
+ line-height: 1.4;
752
+ }
753
+
754
+ .nuvio-banner--error {
755
+ background: rgba(248, 113, 113, 0.12);
756
+ border: 1px solid rgba(248, 113, 113, 0.24);
757
+ color: #fecdd3;
758
+ }
759
+
760
+ .nuvio-banner--warn {
761
+ background: rgba(250, 204, 21, 0.1);
762
+ border: 1px solid rgba(250, 204, 21, 0.28);
763
+ color: #fef9c3;
764
+ }
765
+
766
+ .nuvio-banner--info {
767
+ background: rgba(14, 165, 233, 0.12);
768
+ border: 1px solid rgba(125, 211, 252, 0.28);
769
+ color: #e0f2fe;
770
+ }
771
+
772
+ .nuvio-banner--neutral {
773
+ background: var(--nuvio-inner-bg);
774
+ border: 1px solid var(--nuvio-border);
775
+ color: var(--nuvio-muted);
776
+ }
777
+
778
+ .nuvio-banner--success {
779
+ background: rgba(16, 185, 129, 0.12);
780
+ border: 1px solid rgba(52, 211, 153, 0.24);
781
+ color: #a7f3d0;
782
+ }
783
+
784
+ .nuvio-banner--success-mono {
785
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
786
+ font-size: 11px;
787
+ }
788
+
789
+ .nuvio-preview-box {
790
+ border-radius: var(--nuvio-radius-inner);
791
+ border: 1px solid rgba(52, 211, 153, 0.24);
792
+ background: rgba(16, 185, 129, 0.12);
793
+ padding: 10px 12px;
794
+ }
795
+
796
+ .nuvio-preview-box-title {
797
+ margin: 0;
798
+ font-size: 10px;
799
+ font-weight: 600;
800
+ text-transform: uppercase;
801
+ letter-spacing: 0.05em;
802
+ color: var(--nuvio-success);
803
+ }
804
+
805
+ .nuvio-preview-box-body {
806
+ margin: 4px 0 0;
807
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
808
+ font-size: 11px;
809
+ line-height: 1.4;
810
+ color: #d1fae5;
811
+ }
812
+
813
+ .nuvio-onboarding-steps {
814
+ margin: 0;
815
+ padding-left: 1.1rem;
816
+ display: flex;
817
+ flex-direction: column;
818
+ gap: 4px;
819
+ }
820
+
821
+ .nuvio-onboarding-welcome {
822
+ border-color: rgba(125, 211, 252, 0.35);
823
+ background: rgba(14, 165, 233, 0.08);
824
+ }
825
+
826
+ .nuvio-onboarding-contextual {
827
+ margin-bottom: 4px;
828
+ }
829
+
830
+ /* Component tree */
831
+ .nuvio-tree-title {
832
+ margin: 0 0 8px;
833
+ font-size: 12px;
834
+ font-weight: 600;
835
+ letter-spacing: 0.02em;
836
+ color: var(--nuvio-text-soft);
837
+ }
838
+
839
+ .nuvio-tree-filters {
840
+ display: flex;
841
+ flex-wrap: wrap;
842
+ gap: 6px;
843
+ margin: 0 0 8px;
844
+ }
845
+
846
+ .nuvio-tree-filter {
847
+ border: 1px solid rgba(255, 255, 255, 0.12);
848
+ border-radius: 999px;
849
+ padding: 2px 8px;
850
+ font-size: 10px;
851
+ text-transform: uppercase;
852
+ letter-spacing: 0.04em;
853
+ color: var(--nuvio-muted);
854
+ background: transparent;
855
+ cursor: pointer;
856
+ }
857
+
858
+ .nuvio-tree-filter--active {
859
+ border-color: rgba(59, 130, 246, 0.45);
860
+ background: rgba(59, 130, 246, 0.2);
861
+ color: var(--nuvio-text);
862
+ }
863
+
864
+ .nuvio-tree-group {
865
+ margin-bottom: 8px;
866
+ }
867
+
868
+ .nuvio-tree-group-title {
869
+ margin: 0 0 4px;
870
+ font-size: 10px;
871
+ color: var(--nuvio-dim);
872
+ text-transform: uppercase;
873
+ letter-spacing: 0.04em;
874
+ }
875
+
876
+ .nuvio-tree-list {
877
+ max-height: 160px;
878
+ overflow-y: auto;
879
+ margin: 0;
880
+ padding: 4px;
881
+ list-style: none;
882
+ border-radius: var(--nuvio-radius-control);
883
+ border: 1px solid rgba(255, 255, 255, 0.08);
884
+ background: var(--nuvio-inner-bg);
885
+ }
886
+
887
+ .nuvio-tree-item {
888
+ margin: 0;
889
+ }
890
+
891
+ .nuvio-tree-btn {
892
+ width: 100%;
893
+ border: none;
894
+ border-radius: 10px;
895
+ padding: 6px 8px;
896
+ text-align: left;
897
+ font-size: 12px;
898
+ line-height: 1.35;
899
+ cursor: pointer;
900
+ background: transparent;
901
+ color: var(--nuvio-muted);
902
+ font-family: inherit;
903
+ }
904
+
905
+ .nuvio-tree-btn:hover {
906
+ background: rgba(255, 255, 255, 0.08);
907
+ color: var(--nuvio-text);
908
+ }
909
+
910
+ .nuvio-tree-btn--active {
911
+ background: rgba(37, 99, 235, 0.28);
912
+ font-weight: 500;
913
+ color: var(--nuvio-text);
914
+ }
915
+
916
+ .nuvio-tree-btn-path {
917
+ display: block;
918
+ font-size: 10px;
919
+ color: var(--nuvio-dim);
920
+ }
921
+
922
+ .nuvio-tree-btn-row {
923
+ display: flex;
924
+ align-items: flex-start;
925
+ gap: 6px;
926
+ }
927
+
928
+ .nuvio-tree-role {
929
+ border-radius: 6px;
930
+ background: rgba(255, 255, 255, 0.08);
931
+ border: 1px solid rgba(255, 255, 255, 0.12);
932
+ padding: 0 4px;
933
+ font-size: 9px;
934
+ line-height: 1.4;
935
+ text-transform: uppercase;
936
+ letter-spacing: 0.03em;
937
+ color: var(--nuvio-dim);
938
+ }
939
+
940
+ .nuvio-tree-dup-title {
941
+ margin: 0;
942
+ font-size: 11px;
943
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
944
+ color: var(--nuvio-warning);
945
+ }
946
+
947
+ .nuvio-tree-risk {
948
+ flex-shrink: 0;
949
+ width: 6px;
950
+ height: 6px;
951
+ margin-top: 5px;
952
+ border-radius: 50%;
953
+ }
954
+
955
+ .nuvio-tree-risk--safe {
956
+ background: var(--nuvio-success);
957
+ }
958
+
959
+ .nuvio-tree-risk--caution {
960
+ background: var(--nuvio-warning);
961
+ }
962
+
963
+ .nuvio-tree-risk--unsupported {
964
+ background: var(--nuvio-error);
965
+ }
966
+
967
+ /* Chip diagnostics */
968
+ .nuvio-diagnostics {
969
+ display: flex;
970
+ flex-direction: column;
971
+ gap: 4px;
972
+ }
973
+
974
+ .nuvio-chip-status-line {
975
+ display: flex;
976
+ align-items: flex-start;
977
+ gap: 8px;
978
+ margin: 0;
979
+ font-size: 12px;
980
+ line-height: 1.4;
981
+ }
982
+
983
+ .nuvio-chip-status-text {
984
+ min-width: 0;
985
+ flex: 1;
986
+ }
987
+
988
+ .nuvio-status-dot {
989
+ flex-shrink: 0;
990
+ width: 8px;
991
+ height: 8px;
992
+ margin-top: 4px;
993
+ border-radius: 50%;
994
+ background: var(--nuvio-dim);
995
+ }
996
+
997
+ .nuvio-status-dot--connected {
998
+ background: var(--nuvio-success);
999
+ box-shadow: 0 0 8px rgba(52, 211, 153, 0.45);
1000
+ }
1001
+
1002
+ .nuvio-status-dot--connecting {
1003
+ background: var(--nuvio-warning);
1004
+ animation: nuvio-pulse 1.2s ease-in-out infinite;
1005
+ }
1006
+
1007
+ .nuvio-status-dot--error {
1008
+ background: var(--nuvio-error);
1009
+ }
1010
+
1011
+ .nuvio-status-dot--warn {
1012
+ background: var(--nuvio-warning);
1013
+ }
1014
+
1015
+ .nuvio-status-dot--idle {
1016
+ background: var(--nuvio-dim);
1017
+ }
1018
+
1019
+ .nuvio-chip-mode-badge {
1020
+ display: inline-block;
1021
+ padding: 1px 6px;
1022
+ border-radius: 999px;
1023
+ font-size: 9px;
1024
+ font-weight: 700;
1025
+ text-transform: uppercase;
1026
+ letter-spacing: 0.06em;
1027
+ color: var(--nuvio-accent);
1028
+ background: rgba(125, 211, 252, 0.14);
1029
+ border: 1px solid rgba(125, 211, 252, 0.28);
1030
+ }
1031
+
1032
+ .nuvio-meta-reasons {
1033
+ margin: 6px 0 0;
1034
+ padding-left: 1rem;
1035
+ font-size: 12px;
1036
+ color: var(--nuvio-warning);
1037
+ list-style: disc;
1038
+ }
1039
+
1040
+ .nuvio-risk-safe {
1041
+ color: var(--nuvio-success);
1042
+ }
1043
+
1044
+ .nuvio-risk-caution {
1045
+ color: var(--nuvio-warning);
1046
+ }
1047
+
1048
+ .nuvio-risk-unsupported {
1049
+ color: var(--nuvio-error);
1050
+ }
1051
+
1052
+ .nuvio-diagnostics-versions {
1053
+ word-break: break-word;
1054
+ }
1055
+
1056
+ @keyframes nuvio-pulse {
1057
+ 0%,
1058
+ 100% {
1059
+ opacity: 1;
1060
+ }
1061
+ 50% {
1062
+ opacity: 0.45;
1063
+ }
1064
+ }
1065
+
1066
+ /* Color picker */
1067
+ .nuvio-color-trigger {
1068
+ display: flex;
1069
+ width: 100%;
1070
+ align-items: center;
1071
+ gap: 8px;
1072
+ min-height: 34px;
1073
+ border-radius: var(--nuvio-radius-control);
1074
+ border: 1px solid rgba(255, 255, 255, 0.14);
1075
+ background: var(--nuvio-control-bg);
1076
+ padding: 7px 10px;
1077
+ font-size: 12px;
1078
+ color: var(--nuvio-text);
1079
+ cursor: pointer;
1080
+ text-align: left;
1081
+ font-family: inherit;
1082
+ }
1083
+
1084
+ .nuvio-color-trigger:hover {
1085
+ border-color: var(--nuvio-border-strong);
1086
+ }
1087
+
1088
+ .nuvio-color-swatch {
1089
+ height: 20px;
1090
+ width: 20px;
1091
+ flex-shrink: 0;
1092
+ border-radius: 6px;
1093
+ border: 1px solid rgba(255, 255, 255, 0.2);
1094
+ }
1095
+
1096
+ .nuvio-color-swatch--sm {
1097
+ display: inline-block;
1098
+ height: 14px;
1099
+ width: 14px;
1100
+ border-radius: 4px;
1101
+ border: 1px solid rgba(255, 255, 255, 0.2);
1102
+ }
1103
+
1104
+ .nuvio-color-popover {
1105
+ position: absolute;
1106
+ left: 0;
1107
+ right: 0;
1108
+ z-index: 20;
1109
+ margin-top: 4px;
1110
+ max-height: min(20rem, 50vh);
1111
+ overflow: auto;
1112
+ border-radius: var(--nuvio-radius-inner);
1113
+ border: 1px solid var(--nuvio-border-strong);
1114
+ background: rgba(3, 7, 18, 0.94);
1115
+ -webkit-backdrop-filter: var(--nuvio-inner-blur);
1116
+ backdrop-filter: var(--nuvio-inner-blur);
1117
+ padding: 10px;
1118
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.42);
1119
+ }
1120
+
1121
+ .nuvio-color-specials {
1122
+ display: flex;
1123
+ flex-wrap: wrap;
1124
+ gap: 4px;
1125
+ margin-bottom: 8px;
1126
+ }
1127
+
1128
+ .nuvio-color-special-btn {
1129
+ display: flex;
1130
+ align-items: center;
1131
+ gap: 4px;
1132
+ border: none;
1133
+ border-radius: 8px;
1134
+ padding: 4px 8px;
1135
+ font-size: 10px;
1136
+ cursor: pointer;
1137
+ background: transparent;
1138
+ color: var(--nuvio-muted);
1139
+ font-family: inherit;
1140
+ }
1141
+
1142
+ .nuvio-color-special-btn:hover {
1143
+ background: rgba(255, 255, 255, 0.08);
1144
+ }
1145
+
1146
+ .nuvio-color-special-btn--active {
1147
+ background: rgba(59, 130, 246, 0.22);
1148
+ color: var(--nuvio-text);
1149
+ box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.45);
1150
+ }
1151
+
1152
+ .nuvio-palette-grid {
1153
+ display: grid;
1154
+ gap: 1px;
1155
+ font-size: 9px;
1156
+ color: var(--nuvio-dim);
1157
+ }
1158
+
1159
+ .nuvio-palette-shade {
1160
+ text-align: center;
1161
+ font-variant-numeric: tabular-nums;
1162
+ }
1163
+
1164
+ .nuvio-palette-family {
1165
+ overflow: hidden;
1166
+ text-overflow: ellipsis;
1167
+ padding-right: 4px;
1168
+ text-align: right;
1169
+ color: var(--nuvio-muted);
1170
+ }
1171
+
1172
+ .nuvio-palette-swatch {
1173
+ aspect-ratio: 1;
1174
+ min-height: 1.125rem;
1175
+ min-width: 0;
1176
+ border-radius: 3px;
1177
+ border: 1px solid rgba(0, 0, 0, 0.25);
1178
+ padding: 0;
1179
+ cursor: pointer;
1180
+ }
1181
+
1182
+ .nuvio-palette-swatch:hover {
1183
+ transform: scale(1.08);
1184
+ border-color: rgba(255, 255, 255, 0.5);
1185
+ }
1186
+
1187
+ .nuvio-palette-swatch--selected {
1188
+ border-color: var(--nuvio-primary-bright);
1189
+ box-shadow: 0 0 0 2px var(--nuvio-primary-glow);
1190
+ }
1191
+
1192
+ .nuvio-palette-contents {
1193
+ display: contents;
1194
+ }
1195
+
1196
+ /* Deprecated header strip — keep minimal if referenced */
1197
+ .nuvio-chrome-header,
1198
+ .nuvio-glass-header {
1199
+ background: transparent;
1200
+ border-bottom: none;
1201
+ }
1202
+
1203
+ /* Simple Mode task cards */
1204
+ .nuvio-task-card {
1205
+ display: flex;
1206
+ align-items: flex-start;
1207
+ gap: 0.75rem;
1208
+ width: 100%;
1209
+ padding: 0.75rem 0.875rem;
1210
+ text-align: left;
1211
+ border: 1px solid var(--nuvio-border-subtle);
1212
+ border-radius: 0.75rem;
1213
+ background: rgba(255, 255, 255, 0.04);
1214
+ color: var(--nuvio-text);
1215
+ cursor: pointer;
1216
+ transition: border-color 0.15s ease, background 0.15s ease;
1217
+ }
1218
+
1219
+ .nuvio-task-card:hover {
1220
+ border-color: rgba(56, 189, 248, 0.45);
1221
+ background: rgba(56, 189, 248, 0.08);
1222
+ }
1223
+
1224
+ .nuvio-task-card-icon {
1225
+ flex-shrink: 0;
1226
+ font-size: 1.125rem;
1227
+ line-height: 1.3;
1228
+ }
1229
+
1230
+ .nuvio-task-card-body {
1231
+ display: flex;
1232
+ flex-direction: column;
1233
+ gap: 0.125rem;
1234
+ min-width: 0;
1235
+ }
1236
+
1237
+ .nuvio-task-card-title {
1238
+ font-size: 0.8125rem;
1239
+ font-weight: 600;
1240
+ color: var(--nuvio-text);
1241
+ }
1242
+
1243
+ .nuvio-task-card-hint {
1244
+ font-size: 0.6875rem;
1245
+ line-height: 1.35;
1246
+ color: var(--nuvio-text-muted);
1247
+ }
1248
+
1249
+ .nuvio-card--actions {
1250
+ border-color: rgba(56, 189, 248, 0.25);
1251
+ }
1252
+
1253
+ .nuvio-action-stack {
1254
+ display: flex;
1255
+ flex-direction: column;
1256
+ gap: 0.5rem;
1257
+ }
1258
+
1259
+ .nuvio-button--block {
1260
+ width: 100%;
1261
+ justify-content: center;
1262
+ }
1263
+
1264
+ .nuvio-device-compact {
1265
+ padding: 0.625rem 0.875rem;
1266
+ border-radius: 0.75rem;
1267
+ border: 1px solid var(--nuvio-border-subtle);
1268
+ background: rgba(255, 255, 255, 0.02);
1269
+ }
1270
+
1271
+ .nuvio-advanced-panel,
1272
+ .nuvio-outline-panel {
1273
+ margin-top: 0;
1274
+ }
1275
+
1276
+ .nuvio-back-link {
1277
+ display: block;
1278
+ margin-top: 0.25rem;
1279
+ padding: 0;
1280
+ border: none;
1281
+ background: none;
1282
+ font-size: 0.6875rem;
1283
+ color: var(--nuvio-text-muted);
1284
+ cursor: pointer;
1285
+ text-align: left;
1286
+ }
1287
+
1288
+ .nuvio-back-link:hover {
1289
+ color: var(--nuvio-text);
1290
+ }
1291
+
1292
+ .nuvio-pending-label {
1293
+ margin: 0;
1294
+ font-size: 0.6875rem;
1295
+ color: var(--nuvio-text-muted);
1296
+ }
1297
+
1298
+ .nuvio-preview-box--compact {
1299
+ padding: 0.5rem 0.625rem;
1300
+ }
1301
+
1302
+ .nuvio-preview-box--compact .nuvio-preview-box-body {
1303
+ font-size: 0.75rem;
1304
+ line-height: 1.45;
1305
+ white-space: pre-wrap;
1306
+ }
1307
+
1308
+ .nuvio-advanced-summary,
1309
+ .nuvio-more-styles-summary {
1310
+ cursor: pointer;
1311
+ user-select: none;
1312
+ }