visual-ai-staging 0.0.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/styles.css ADDED
@@ -0,0 +1,1642 @@
1
+ /* ==========================================================================
2
+ DESIGN TOKENS (Defined in PROJECT.md)
3
+ ========================================================================== */
4
+ :root {
5
+ /* Spacing Tokens */
6
+ --spacing-xs: 4px;
7
+ --spacing-sm: 8px;
8
+ --spacing-md: 16px;
9
+ --spacing-lg: 24px;
10
+ --spacing-xl: 32px;
11
+
12
+ /* Color Tokens */
13
+ --color-bg-primary: hsl(220, 15%, 10%); /* Deep space dark background */
14
+ --color-bg-secondary: hsl(220, 15%, 16%); /* Panel card dark background */
15
+ --color-text-primary: hsl(220, 10%, 95%); /* Crisp off-white text */
16
+ --color-text-secondary: hsl(220, 10%, 70%); /* Muted slate text for labels */
17
+ --color-accent: hsl(210, 100%, 50%); /* Electric blue accent for inspection */
18
+ --color-violet: hsl(270, 80%, 60%); /* Deep violet accent for canvas bounding boxes */
19
+
20
+ /* Border & Radius Tokens */
21
+ --border-radius-sm: 4px;
22
+ --border-radius-md: 8px;
23
+ --border-radius-lg: 12px;
24
+
25
+ /* Glassmorphic border */
26
+ --glass-border: rgba(255, 255, 255, 0.08);
27
+ --glass-shadow: rgba(0, 0, 0, 0.35);
28
+ }
29
+
30
+ /* ==========================================================================
31
+ GLOBAL STYLES & RESET
32
+ ========================================================================== */
33
+ * {
34
+ box-sizing: border-box;
35
+ margin: 0;
36
+ padding: 0;
37
+ }
38
+
39
+ body {
40
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
41
+ background-color: var(--color-bg-primary);
42
+ color: var(--color-text-primary);
43
+ height: 100vh;
44
+ display: flex;
45
+ flex-direction: column;
46
+ overflow: hidden;
47
+ line-height: 1.5;
48
+ }
49
+
50
+ /* ==========================================================================
51
+ HEADER / TOOLBAR
52
+ ========================================================================== */
53
+ .app-header {
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: space-between;
57
+ padding: var(--spacing-md) var(--spacing-lg);
58
+ background-color: var(--color-bg-secondary);
59
+ border-bottom: 1px solid var(--glass-border);
60
+ z-index: 100;
61
+ }
62
+
63
+ .header-logo {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: var(--spacing-sm);
67
+ }
68
+
69
+ .header-logo h1 {
70
+ font-size: 1.15rem;
71
+ font-weight: 700;
72
+ letter-spacing: -0.025em;
73
+ display: flex;
74
+ align-items: center;
75
+ gap: var(--spacing-xs);
76
+ }
77
+
78
+ .header-logo .badge {
79
+ font-size: 0.7rem;
80
+ background-color: var(--color-accent);
81
+ color: #fff;
82
+ padding: 2px 6px;
83
+ border-radius: var(--border-radius-sm);
84
+ text-transform: uppercase;
85
+ font-weight: 800;
86
+ letter-spacing: 0.05em;
87
+ }
88
+
89
+ .logo-icon {
90
+ font-size: 1.3rem;
91
+ animation: pulse-glow 3s infinite ease-in-out;
92
+ }
93
+
94
+ .toolbar-modes {
95
+ display: flex;
96
+ gap: var(--spacing-md);
97
+ }
98
+
99
+ .toolbar-btn {
100
+ background-color: rgba(255, 255, 255, 0.05);
101
+ border: 1px solid var(--glass-border);
102
+ color: var(--color-text-primary);
103
+ padding: 8px var(--spacing-md);
104
+ border-radius: var(--border-radius-md);
105
+ font-weight: 600;
106
+ font-size: 0.85rem;
107
+ cursor: pointer;
108
+ display: flex;
109
+ align-items: center;
110
+ gap: var(--spacing-sm);
111
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
112
+ }
113
+
114
+ .toolbar-btn:hover:not(:disabled) {
115
+ background-color: rgba(255, 255, 255, 0.1);
116
+ border-color: rgba(255, 255, 255, 0.2);
117
+ }
118
+
119
+ .toolbar-btn.active {
120
+ background-color: var(--color-accent);
121
+ border-color: var(--color-accent);
122
+ color: #fff;
123
+ box-shadow: 0 0 12px rgba(0, 149, 255, 0.4);
124
+ }
125
+
126
+ .toolbar-btn:disabled {
127
+ opacity: 0.4;
128
+ cursor: not-allowed;
129
+ }
130
+
131
+ .header-meta {
132
+ display: flex;
133
+ align-items: center;
134
+ gap: var(--spacing-sm);
135
+ font-size: 0.8rem;
136
+ color: var(--color-text-secondary);
137
+ }
138
+
139
+ .status-indicator {
140
+ width: 8px;
141
+ height: 8px;
142
+ border-radius: 50%;
143
+ background-color: #10b981; /* green */
144
+ }
145
+
146
+ .status-indicator.active {
147
+ box-shadow: 0 0 8px #10b981;
148
+ }
149
+
150
+ /* ==========================================================================
151
+ SPLIT LAYOUT
152
+ ========================================================================== */
153
+ .app-layout {
154
+ display: grid;
155
+ grid-template-columns: 1fr 400px;
156
+ flex: 1;
157
+ overflow: hidden;
158
+ }
159
+
160
+ /* ==========================================================================
161
+ LEFT COLUMN: DOM MOCK CONTAINER
162
+ ========================================================================== */
163
+ .mock-page-container {
164
+ display: flex;
165
+ flex-direction: column;
166
+ background-color: var(--color-bg-primary);
167
+ overflow-y: auto;
168
+ border-right: 1px solid var(--glass-border);
169
+ padding: var(--spacing-lg);
170
+ gap: var(--spacing-md);
171
+ }
172
+
173
+ .panel-header {
174
+ display: flex;
175
+ justify-content: space-between;
176
+ align-items: center;
177
+ padding: var(--spacing-xs) 0;
178
+ }
179
+
180
+ .panel-title {
181
+ font-size: 0.9rem;
182
+ font-weight: 600;
183
+ color: var(--color-text-secondary);
184
+ text-transform: uppercase;
185
+ letter-spacing: 0.05em;
186
+ }
187
+
188
+ .viewport-controls .size-pill {
189
+ font-size: 0.75rem;
190
+ background-color: rgba(255, 255, 255, 0.05);
191
+ border: 1px solid var(--glass-border);
192
+ padding: 4px 10px;
193
+ border-radius: 20px;
194
+ color: var(--color-text-secondary);
195
+ }
196
+
197
+ /* ==========================================================================
198
+ DOM MOCK PAGE CONTENT
199
+ ========================================================================== */
200
+ #mock-page {
201
+ position: relative;
202
+ background-color: hsl(222, 25%, 6%);
203
+ border-radius: var(--border-radius-lg);
204
+ border: 1px solid var(--glass-border);
205
+ padding: var(--spacing-xl);
206
+ min-height: 100%;
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: 40px;
210
+ box-shadow: inset 0 0 30px rgba(0, 0, 0, 0.5);
211
+ transition: all 0.2s ease;
212
+ }
213
+
214
+ /* Mock Elements Navigation */
215
+ .mock-nav {
216
+ display: flex;
217
+ justify-content: space-between;
218
+ align-items: center;
219
+ padding-bottom: var(--spacing-md);
220
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
221
+ }
222
+
223
+ .mock-logo {
224
+ font-weight: 800;
225
+ font-size: 1.1rem;
226
+ color: #fff;
227
+ letter-spacing: -0.01em;
228
+ }
229
+
230
+ .mock-nav-links {
231
+ display: flex;
232
+ gap: var(--spacing-md);
233
+ }
234
+
235
+ .mock-nav-links a {
236
+ color: var(--color-text-secondary);
237
+ text-decoration: none;
238
+ font-size: 0.85rem;
239
+ font-weight: 500;
240
+ transition: color 0.2s;
241
+ }
242
+
243
+ .mock-nav-links a:hover {
244
+ color: #fff;
245
+ }
246
+
247
+ /* Mock Hero */
248
+ .mock-hero-content {
249
+ display: flex;
250
+ flex-direction: column;
251
+ align-items: flex-start;
252
+ max-width: 600px;
253
+ padding: var(--spacing-xl) 0 var(--spacing-md);
254
+ }
255
+
256
+ .mock-title {
257
+ font-size: 2.5rem;
258
+ font-weight: 800;
259
+ line-height: 1.15;
260
+ color: #fff;
261
+ letter-spacing: -0.03em;
262
+ margin-bottom: var(--spacing-md);
263
+ }
264
+
265
+ .mock-subtitle {
266
+ font-size: 1.05rem;
267
+ color: var(--color-text-secondary);
268
+ margin-bottom: var(--spacing-lg);
269
+ }
270
+
271
+ .mock-actions {
272
+ display: flex;
273
+ gap: var(--spacing-md);
274
+ }
275
+
276
+ .mock-btn {
277
+ padding: 10px 20px;
278
+ border-radius: var(--border-radius-md);
279
+ font-weight: 600;
280
+ font-size: 0.85rem;
281
+ cursor: pointer;
282
+ border: none;
283
+ transition: all 0.2s;
284
+ }
285
+
286
+ .mock-btn-primary {
287
+ background-color: var(--color-accent);
288
+ color: #fff;
289
+ }
290
+
291
+ .mock-btn-primary:hover {
292
+ filter: brightness(1.1);
293
+ box-shadow: 0 0 15px rgba(0, 149, 255, 0.3);
294
+ }
295
+
296
+ .mock-btn-secondary {
297
+ background-color: rgba(255, 255, 255, 0.05);
298
+ border: 1px solid var(--glass-border);
299
+ color: #fff;
300
+ }
301
+
302
+ .mock-btn-secondary:hover {
303
+ background-color: rgba(255, 255, 255, 0.1);
304
+ }
305
+
306
+ /* Features Grid */
307
+ .mock-features {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: var(--spacing-md);
311
+ }
312
+
313
+ .section-title {
314
+ font-size: 1.3rem;
315
+ font-weight: 700;
316
+ letter-spacing: -0.01em;
317
+ color: #fff;
318
+ }
319
+
320
+ .features-grid {
321
+ display: grid;
322
+ grid-template-columns: repeat(3, 1fr);
323
+ gap: var(--spacing-md);
324
+ }
325
+
326
+ .feature-card {
327
+ background-color: rgba(255, 255, 255, 0.02);
328
+ border: 1px solid rgba(255, 255, 255, 0.04);
329
+ border-radius: var(--border-radius-lg);
330
+ padding: var(--spacing-md);
331
+ display: flex;
332
+ flex-direction: column;
333
+ gap: var(--spacing-sm);
334
+ transition: all 0.2s ease;
335
+ }
336
+
337
+ .feature-card:hover {
338
+ border-color: rgba(255, 255, 255, 0.08);
339
+ background-color: rgba(255, 255, 255, 0.03);
340
+ }
341
+
342
+ .feature-icon {
343
+ font-size: 1.5rem;
344
+ margin-bottom: var(--spacing-xs);
345
+ }
346
+
347
+ .feature-card h3 {
348
+ font-size: 0.95rem;
349
+ font-weight: 700;
350
+ color: #fff;
351
+ }
352
+
353
+ .feature-card p {
354
+ font-size: 0.8rem;
355
+ color: var(--color-text-secondary);
356
+ line-height: 1.4;
357
+ flex: 1;
358
+ }
359
+
360
+ .mock-card-btn {
361
+ background: none;
362
+ border: none;
363
+ color: var(--color-accent);
364
+ font-size: 0.75rem;
365
+ font-weight: 600;
366
+ cursor: pointer;
367
+ text-align: left;
368
+ padding: var(--spacing-xs) 0;
369
+ width: fit-content;
370
+ }
371
+
372
+ .mock-card-btn:hover {
373
+ text-decoration: underline;
374
+ }
375
+
376
+ /* Detail Card */
377
+ .mock-text-section {
378
+ width: 100%;
379
+ }
380
+
381
+ .text-detail-card {
382
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.01) 100%);
383
+ border: 1px solid rgba(255, 255, 255, 0.05);
384
+ border-radius: var(--border-radius-lg);
385
+ padding: var(--spacing-lg);
386
+ display: flex;
387
+ flex-direction: column;
388
+ gap: var(--spacing-sm);
389
+ }
390
+
391
+ .text-detail-card h4 {
392
+ font-size: 1rem;
393
+ font-weight: 700;
394
+ color: #fff;
395
+ }
396
+
397
+ .text-detail-card p {
398
+ font-size: 0.85rem;
399
+ color: var(--color-text-secondary);
400
+ line-height: 1.5;
401
+ }
402
+
403
+ /* Images Grid */
404
+ .mock-images-section {
405
+ display: flex;
406
+ flex-direction: column;
407
+ gap: var(--spacing-md);
408
+ }
409
+
410
+ .images-grid {
411
+ display: grid;
412
+ grid-template-columns: repeat(2, 1fr);
413
+ gap: var(--spacing-md);
414
+ }
415
+
416
+ .mock-image-card {
417
+ border-radius: var(--border-radius-lg);
418
+ overflow: hidden;
419
+ border: 1px solid rgba(255, 255, 255, 0.05);
420
+ background-color: rgba(0, 0, 0, 0.2);
421
+ transition: all 0.2s ease;
422
+ }
423
+
424
+ .mock-img-placeholder {
425
+ height: 140px;
426
+ position: relative;
427
+ display: flex;
428
+ align-items: center;
429
+ justify-content: center;
430
+ }
431
+
432
+ .img-grad-1 {
433
+ background: linear-gradient(135deg, hsl(210, 80%, 25%) 0%, hsl(270, 80%, 25%) 100%);
434
+ }
435
+
436
+ .img-grad-2 {
437
+ background: linear-gradient(135deg, hsl(150, 80%, 20%) 0%, hsl(210, 80%, 25%) 100%);
438
+ }
439
+
440
+ .mock-img-placeholder .img-badge {
441
+ font-size: 0.7rem;
442
+ font-weight: 700;
443
+ background-color: rgba(0, 0, 0, 0.6);
444
+ color: #fff;
445
+ padding: 4px var(--spacing-sm);
446
+ border-radius: 20px;
447
+ border: 1px solid rgba(255, 255, 255, 0.1);
448
+ }
449
+
450
+ .img-details {
451
+ padding: var(--spacing-md);
452
+ display: flex;
453
+ flex-direction: column;
454
+ gap: var(--spacing-xs);
455
+ }
456
+
457
+ .img-details h5 {
458
+ font-size: 0.85rem;
459
+ font-weight: 700;
460
+ color: #fff;
461
+ }
462
+
463
+ .img-details p {
464
+ font-size: 0.75rem;
465
+ color: var(--color-text-secondary);
466
+ }
467
+
468
+ /* ==========================================================================
469
+ INSPECTION OVERLAYS & SELECTED VISUAL STATES
470
+ ========================================================================== */
471
+ /* Hover Overlay style */
472
+ .inspect-hovered {
473
+ outline: 2px dashed var(--color-accent) !important;
474
+ background-color: rgba(0, 149, 255, 0.08) !important;
475
+ cursor: pointer !important;
476
+ }
477
+
478
+ /* Selected visual style */
479
+ .inspect-selected {
480
+ outline: 2px solid var(--color-accent) !important;
481
+ box-shadow: 0 0 16px rgba(0, 149, 255, 0.25) !important;
482
+ }
483
+
484
+ /* ==========================================================================
485
+ RIGHT COLUMN: LATERAL STAGING PANEL (GLASSMORPHIC)
486
+ ========================================================================== */
487
+ .staging-panel {
488
+ background: rgba(22, 28, 38, 0.65);
489
+ backdrop-filter: blur(12px) saturate(180%);
490
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
491
+ border-left: 1px solid var(--glass-border);
492
+ display: flex;
493
+ flex-direction: column;
494
+ overflow-y: auto;
495
+ padding: var(--spacing-lg);
496
+ gap: var(--spacing-xl);
497
+ box-shadow: -5px 0 25px var(--glass-shadow);
498
+ }
499
+
500
+ .staging-section {
501
+ display: flex;
502
+ flex-direction: column;
503
+ gap: var(--spacing-md);
504
+ }
505
+
506
+ .section-heading {
507
+ font-size: 0.8rem;
508
+ font-weight: 700;
509
+ color: var(--color-text-secondary);
510
+ text-transform: uppercase;
511
+ letter-spacing: 0.08em;
512
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
513
+ padding-bottom: var(--spacing-sm);
514
+ }
515
+
516
+ /* Metadata Box */
517
+ .meta-empty {
518
+ font-size: 0.85rem;
519
+ color: var(--color-text-secondary);
520
+ background-color: rgba(255, 255, 255, 0.02);
521
+ border: 1px dashed rgba(255, 255, 255, 0.1);
522
+ padding: var(--spacing-md);
523
+ border-radius: var(--border-radius-md);
524
+ text-align: center;
525
+ line-height: 1.45;
526
+ }
527
+
528
+ .hidden {
529
+ display: none !important;
530
+ }
531
+
532
+ #meta-details {
533
+ display: flex;
534
+ flex-direction: column;
535
+ gap: var(--spacing-sm);
536
+ background-color: rgba(255, 255, 255, 0.02);
537
+ border: 1px solid var(--glass-border);
538
+ padding: var(--spacing-md);
539
+ border-radius: var(--border-radius-md);
540
+ }
541
+
542
+ .meta-row {
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 2px;
546
+ }
547
+
548
+ .meta-label {
549
+ font-size: 0.75rem;
550
+ color: var(--color-text-secondary);
551
+ font-weight: 600;
552
+ }
553
+
554
+ .meta-value {
555
+ font-family: monospace;
556
+ font-size: 0.8rem;
557
+ padding: var(--spacing-xs) var(--spacing-sm);
558
+ border-radius: var(--border-radius-sm);
559
+ word-break: break-all;
560
+ }
561
+
562
+ .tag-value {
563
+ background-color: rgba(270, 80, 60, 0.1);
564
+ color: #fca5a5;
565
+ width: fit-content;
566
+ font-weight: 700;
567
+ }
568
+
569
+ .class-value {
570
+ background-color: rgba(0, 149, 255, 0.1);
571
+ color: #93c5fd;
572
+ }
573
+
574
+ .selector-value {
575
+ background-color: rgba(255, 255, 255, 0.04);
576
+ color: #e2e8f0;
577
+ }
578
+
579
+ .ui-type-value {
580
+ background-color: rgba(168, 85, 247, 0.1);
581
+ color: #d8b4fe;
582
+ font-weight: 700;
583
+ width: fit-content;
584
+ }
585
+
586
+ /* Sliders Control Groups */
587
+ .properties-controls {
588
+ display: flex;
589
+ flex-direction: column;
590
+ gap: var(--spacing-md);
591
+ }
592
+
593
+ .control-group {
594
+ display: flex;
595
+ flex-direction: column;
596
+ gap: var(--spacing-xs);
597
+ }
598
+
599
+ .control-header {
600
+ display: flex;
601
+ justify-content: space-between;
602
+ align-items: center;
603
+ }
604
+
605
+ .control-header label {
606
+ font-size: 0.8rem;
607
+ font-weight: 600;
608
+ color: var(--color-text-primary);
609
+ }
610
+
611
+ .val-wrapper {
612
+ display: flex;
613
+ align-items: center;
614
+ gap: var(--spacing-sm);
615
+ }
616
+
617
+ .control-num {
618
+ font-size: 0.75rem;
619
+ font-family: monospace;
620
+ background-color: rgba(255, 255, 255, 0.05);
621
+ padding: 2px 6px;
622
+ border-radius: var(--border-radius-sm);
623
+ font-weight: 600;
624
+ }
625
+
626
+ .token-badge {
627
+ font-size: 0.65rem;
628
+ font-weight: 700;
629
+ background-color: rgba(168, 85, 247, 0.15);
630
+ color: #d8b4fe;
631
+ border: 1px solid rgba(168, 85, 247, 0.25);
632
+ padding: 1px 5px;
633
+ border-radius: var(--border-radius-sm);
634
+ }
635
+
636
+ /* Custom Sliders */
637
+ .slider {
638
+ -webkit-appearance: none;
639
+ width: 100%;
640
+ height: 6px;
641
+ border-radius: 3px;
642
+ background: rgba(255, 255, 255, 0.1);
643
+ outline: none;
644
+ transition: background 0.15s ease;
645
+ cursor: pointer;
646
+ }
647
+
648
+ .slider:hover {
649
+ background: rgba(255, 255, 255, 0.15);
650
+ }
651
+
652
+ .slider::-webkit-slider-thumb {
653
+ -webkit-appearance: none;
654
+ appearance: none;
655
+ width: 14px;
656
+ height: 14px;
657
+ border-radius: 50%;
658
+ background: var(--color-accent);
659
+ box-shadow: 0 0 6px rgba(0, 149, 255, 0.6);
660
+ transition: transform 0.1s ease;
661
+ }
662
+
663
+ .slider::-webkit-slider-thumb:hover {
664
+ transform: scale(1.2);
665
+ }
666
+
667
+ .slider::-moz-range-thumb {
668
+ width: 14px;
669
+ height: 14px;
670
+ border-radius: 50%;
671
+ background: var(--color-accent);
672
+ box-shadow: 0 0 6px rgba(0, 149, 255, 0.6);
673
+ border: none;
674
+ transition: transform 0.1s ease;
675
+ cursor: pointer;
676
+ }
677
+
678
+ .slider::-moz-range-thumb:hover {
679
+ transform: scale(1.2);
680
+ }
681
+
682
+ /* Colors Panel */
683
+ .color-control-box {
684
+ display: flex;
685
+ flex-direction: column;
686
+ gap: var(--spacing-sm);
687
+ background-color: rgba(255, 255, 255, 0.01);
688
+ border: 1px solid rgba(255, 255, 255, 0.03);
689
+ padding: var(--spacing-md);
690
+ border-radius: var(--border-radius-md);
691
+ }
692
+
693
+ .color-title {
694
+ font-size: 0.8rem;
695
+ font-weight: 700;
696
+ color: var(--color-text-primary);
697
+ }
698
+
699
+ .hsl-sliders {
700
+ display: flex;
701
+ flex-direction: column;
702
+ gap: var(--spacing-xs);
703
+ }
704
+
705
+ .slider-row {
706
+ display: flex;
707
+ align-items: center;
708
+ gap: var(--spacing-md);
709
+ }
710
+
711
+ .hsl-label {
712
+ font-size: 0.7rem;
713
+ font-weight: 800;
714
+ width: 12px;
715
+ color: var(--color-text-secondary);
716
+ }
717
+
718
+ .hsl-val {
719
+ font-size: 0.7rem;
720
+ font-family: monospace;
721
+ width: 32px;
722
+ text-align: right;
723
+ color: var(--color-text-secondary);
724
+ }
725
+
726
+ .color-h-slider {
727
+ background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important;
728
+ }
729
+
730
+ .color-h-slider::-webkit-slider-thumb {
731
+ background: #fff;
732
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
733
+ }
734
+
735
+ .color-palette-repr {
736
+ display: flex;
737
+ align-items: center;
738
+ gap: var(--spacing-md);
739
+ margin-top: var(--spacing-xs);
740
+ }
741
+
742
+ .color-preview-swatch {
743
+ width: 24px;
744
+ height: 24px;
745
+ border-radius: var(--border-radius-sm);
746
+ border: 1px solid rgba(255, 255, 255, 0.2);
747
+ background-color: #000;
748
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
749
+ }
750
+
751
+ .hsl-string {
752
+ font-family: monospace;
753
+ font-size: 0.75rem;
754
+ color: var(--color-text-secondary);
755
+ word-break: break-all;
756
+ }
757
+
758
+ /* Staged Changes List */
759
+ .changes-list {
760
+ display: flex;
761
+ flex-direction: column;
762
+ gap: var(--spacing-md);
763
+ max-height: 250px;
764
+ overflow-y: auto;
765
+ padding-right: var(--spacing-xs);
766
+ }
767
+
768
+ .no-changes {
769
+ font-size: 0.75rem;
770
+ color: var(--color-text-secondary);
771
+ font-style: italic;
772
+ text-align: center;
773
+ padding: var(--spacing-md) 0;
774
+ }
775
+
776
+ .change-item {
777
+ background-color: rgba(255, 255, 255, 0.02);
778
+ border: 1px solid var(--glass-border);
779
+ border-radius: var(--border-radius-md);
780
+ overflow: hidden;
781
+ }
782
+
783
+ .change-header {
784
+ display: flex;
785
+ justify-content: space-between;
786
+ align-items: center;
787
+ background-color: rgba(255, 255, 255, 0.03);
788
+ padding: 6px 10px;
789
+ border-bottom: 1px solid var(--glass-border);
790
+ }
791
+
792
+ .change-selector {
793
+ font-family: monospace;
794
+ font-size: 0.75rem;
795
+ font-weight: 700;
796
+ color: var(--color-text-primary);
797
+ max-width: 220px;
798
+ overflow: hidden;
799
+ text-overflow: ellipsis;
800
+ white-space: nowrap;
801
+ }
802
+
803
+ .revert-btn {
804
+ background: none;
805
+ border: none;
806
+ color: #fca5a5; /* red light */
807
+ font-size: 0.65rem;
808
+ font-weight: 700;
809
+ cursor: pointer;
810
+ padding: 2px 6px;
811
+ border-radius: var(--border-radius-sm);
812
+ transition: background-color 0.2s;
813
+ }
814
+
815
+ .revert-btn:hover {
816
+ background-color: rgba(239, 68, 68, 0.15);
817
+ }
818
+
819
+ .change-body {
820
+ padding: 8px 10px;
821
+ display: flex;
822
+ flex-direction: column;
823
+ gap: var(--spacing-xs);
824
+ }
825
+
826
+ .change-prop {
827
+ display: flex;
828
+ align-items: center;
829
+ gap: var(--spacing-sm);
830
+ font-size: 0.75rem;
831
+ }
832
+
833
+ .prop-name {
834
+ color: var(--color-text-secondary);
835
+ font-family: monospace;
836
+ }
837
+
838
+ .prop-val-old {
839
+ color: #fca5a5;
840
+ text-decoration: line-through;
841
+ font-family: monospace;
842
+ }
843
+
844
+ .prop-arrow {
845
+ color: var(--color-text-secondary);
846
+ }
847
+
848
+ .prop-val-new {
849
+ color: #86efac; /* green light */
850
+ font-family: monospace;
851
+ font-weight: 600;
852
+ }
853
+
854
+ /* ==========================================================================
855
+ FLOATING ACTION BUTTON (FAB) & DROPDOWN MENU
856
+ ========================================================================== */
857
+ .fab-wrapper {
858
+ position: fixed;
859
+ bottom: var(--spacing-lg);
860
+ right: var(--spacing-lg);
861
+ z-index: 999;
862
+ }
863
+
864
+ .fab {
865
+ background-color: var(--color-bg-secondary);
866
+ border: 1px solid var(--glass-border);
867
+ color: var(--color-text-primary);
868
+ padding: 10px 18px;
869
+ border-radius: 30px;
870
+ font-weight: 600;
871
+ font-size: 0.85rem;
872
+ cursor: pointer;
873
+ display: flex;
874
+ align-items: center;
875
+ gap: var(--spacing-sm);
876
+ box-shadow: 0 4px 15px var(--glass-shadow);
877
+ backdrop-filter: blur(10px);
878
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
879
+ }
880
+
881
+ .fab:hover {
882
+ background-color: rgba(255, 255, 255, 0.08);
883
+ border-color: rgba(255, 255, 255, 0.2);
884
+ transform: translateY(-2px);
885
+ }
886
+
887
+ .fab-status-dot {
888
+ width: 8px;
889
+ height: 8px;
890
+ border-radius: 50%;
891
+ background-color: var(--color-text-secondary);
892
+ transition: background-color 0.3s;
893
+ }
894
+
895
+ /* When inspection mode is active, dot is electric blue */
896
+ .fab.inspect-active .fab-status-dot {
897
+ background-color: var(--color-accent);
898
+ box-shadow: 0 0 8px var(--color-accent);
899
+ animation: pulse-glow-dot 1.5s infinite ease-in-out;
900
+ }
901
+
902
+ .fab-label {
903
+ font-size: 0.8rem;
904
+ color: var(--color-text-secondary);
905
+ }
906
+
907
+ .fab-icon {
908
+ font-size: 1rem;
909
+ }
910
+
911
+ /* FAB Menu dropdown */
912
+ .fab-menu {
913
+ position: absolute;
914
+ bottom: 50px;
915
+ right: 0;
916
+ width: 250px;
917
+ background: rgba(22, 28, 38, 0.9);
918
+ backdrop-filter: blur(15px) saturate(180%);
919
+ -webkit-backdrop-filter: blur(15px) saturate(180%);
920
+ border: 1px solid var(--glass-border);
921
+ border-radius: var(--border-radius-lg);
922
+ box-shadow: 0 8px 32px var(--glass-shadow);
923
+ overflow: hidden;
924
+ display: flex;
925
+ flex-direction: column;
926
+ animation: slide-up 0.2s cubic-bezier(0.4, 0, 0.2, 1);
927
+ }
928
+
929
+ .fab-menu-header {
930
+ padding: 10px var(--spacing-md);
931
+ border-bottom: 1px solid var(--glass-border);
932
+ background-color: rgba(255, 255, 255, 0.02);
933
+ }
934
+
935
+ .fab-menu-header h4 {
936
+ font-size: 0.8rem;
937
+ text-transform: uppercase;
938
+ color: var(--color-text-secondary);
939
+ font-weight: 700;
940
+ letter-spacing: 0.05em;
941
+ }
942
+
943
+ .fab-menu-items {
944
+ display: flex;
945
+ flex-direction: column;
946
+ }
947
+
948
+ .fab-menu-items button {
949
+ background: none;
950
+ border: none;
951
+ color: var(--color-text-primary);
952
+ padding: var(--spacing-md);
953
+ font-size: 0.8rem;
954
+ text-align: left;
955
+ cursor: pointer;
956
+ display: flex;
957
+ align-items: center;
958
+ gap: var(--spacing-sm);
959
+ transition: background-color 0.15s ease;
960
+ width: 100%;
961
+ }
962
+
963
+ .fab-menu-items button:hover {
964
+ background-color: rgba(255, 255, 255, 0.05);
965
+ color: #fff;
966
+ }
967
+
968
+ .item-icon {
969
+ font-size: 1rem;
970
+ }
971
+
972
+ /* ==========================================================================
973
+ ANIMATIONS
974
+ ========================================================================== */
975
+ @keyframes pulse-glow {
976
+ 0%, 100% {
977
+ transform: scale(1);
978
+ opacity: 0.8;
979
+ }
980
+ 50% {
981
+ transform: scale(1.15);
982
+ opacity: 1;
983
+ }
984
+ }
985
+
986
+ @keyframes pulse-glow-dot {
987
+ 0%, 100% {
988
+ transform: scale(1);
989
+ opacity: 0.7;
990
+ }
991
+ 50% {
992
+ transform: scale(1.3);
993
+ opacity: 1;
994
+ }
995
+ }
996
+
997
+ @keyframes slide-up {
998
+ from {
999
+ opacity: 0;
1000
+ transform: translateY(10px) scale(0.95);
1001
+ }
1002
+ to {
1003
+ opacity: 1;
1004
+ transform: translateY(0) scale(1);
1005
+ }
1006
+ }
1007
+
1008
+ /* ==========================================================================
1009
+ BOUNDING BOX CANVAS OVERLAY & DRAWING STYLES
1010
+ ========================================================================== */
1011
+ #canvas-overlay {
1012
+ position: absolute;
1013
+ top: 0;
1014
+ left: 0;
1015
+ width: 100%;
1016
+ height: 100%;
1017
+ z-index: 10;
1018
+ pointer-events: none;
1019
+ overflow: visible;
1020
+ border-radius: var(--border-radius-lg);
1021
+ }
1022
+
1023
+ #canvas-overlay.drawing-active {
1024
+ pointer-events: auto;
1025
+ cursor: crosshair;
1026
+ }
1027
+
1028
+ /* Bounding box styles */
1029
+ .drawing-rect-temp {
1030
+ fill: hsla(270, 80%, 60%, 0.15);
1031
+ stroke: hsl(270, 80%, 60%);
1032
+ stroke-width: 2px;
1033
+ stroke-dasharray: 4, 4;
1034
+ }
1035
+
1036
+ .drawing-rect-completed {
1037
+ fill: hsla(270, 80%, 60%, 0.08);
1038
+ stroke: hsl(270, 80%, 60%);
1039
+ stroke-width: 2px;
1040
+ transition: all 0.2s ease;
1041
+ }
1042
+
1043
+ .drawing-rect-completed:hover {
1044
+ fill: hsla(270, 80%, 60%, 0.2);
1045
+ stroke-width: 3px;
1046
+ }
1047
+
1048
+ .drawing-label-bg {
1049
+ fill: hsl(270, 80%, 60%);
1050
+ rx: 3px;
1051
+ ry: 3px;
1052
+ }
1053
+
1054
+ .drawing-label-text {
1055
+ fill: hsl(220, 10%, 95%);
1056
+ font-family: monospace;
1057
+ font-size: 11px;
1058
+ font-weight: bold;
1059
+ }
1060
+
1061
+ /* FAB state for drawing mode */
1062
+ .fab.drawing-active .fab-status-dot {
1063
+ background-color: var(--color-violet);
1064
+ box-shadow: 0 0 8px var(--color-violet);
1065
+ animation: pulse-glow-dot 1.5s infinite ease-in-out;
1066
+ }
1067
+
1068
+ /* Custom styles for insertion change list items */
1069
+ .change-item-insertion {
1070
+ border-left: 3px solid var(--color-violet) !important;
1071
+ }
1072
+
1073
+ /* ==========================================================================
1074
+ MODAL WINDOW DIALOG
1075
+ ========================================================================== */
1076
+ .modal-overlay {
1077
+ position: fixed;
1078
+ top: 0;
1079
+ left: 0;
1080
+ width: 100vw;
1081
+ height: 100vh;
1082
+ background-color: hsla(220, 40%, 7%, 0.7);
1083
+ backdrop-filter: blur(8px);
1084
+ display: flex;
1085
+ align-items: center;
1086
+ justify-content: center;
1087
+ z-index: 1000;
1088
+ transition: opacity 0.25s ease;
1089
+ }
1090
+
1091
+ .modal-overlay.hidden {
1092
+ display: none !important;
1093
+ }
1094
+
1095
+ .modal-content {
1096
+ width: 90%;
1097
+ max-width: 500px;
1098
+ background: hsla(220, 15%, 10%, 0.95);
1099
+ border: 1px solid var(--glass-border);
1100
+ border-radius: var(--border-radius-lg);
1101
+ box-shadow: 0 10px 40px var(--glass-shadow);
1102
+ display: flex;
1103
+ flex-direction: column;
1104
+ overflow: hidden;
1105
+ animation: slide-up 0.25s ease;
1106
+ }
1107
+
1108
+ .modal-header {
1109
+ display: flex;
1110
+ justify-content: space-between;
1111
+ align-items: center;
1112
+ padding: var(--spacing-md) var(--spacing-lg);
1113
+ border-bottom: 1px solid var(--glass-border);
1114
+ background-color: rgba(255, 255, 255, 0.02);
1115
+ }
1116
+
1117
+ .modal-header h4 {
1118
+ font-size: 0.95rem;
1119
+ font-weight: 700;
1120
+ color: #fff;
1121
+ }
1122
+
1123
+ .modal-close-btn {
1124
+ background: none;
1125
+ border: none;
1126
+ color: var(--color-text-secondary);
1127
+ font-size: 1.5rem;
1128
+ cursor: pointer;
1129
+ transition: color 0.2s;
1130
+ }
1131
+
1132
+ .modal-close-btn:hover {
1133
+ color: #fff;
1134
+ }
1135
+
1136
+ .modal-body {
1137
+ padding: var(--spacing-lg);
1138
+ display: flex;
1139
+ flex-direction: column;
1140
+ gap: var(--spacing-md);
1141
+ }
1142
+
1143
+ .form-group {
1144
+ display: flex;
1145
+ flex-direction: column;
1146
+ gap: var(--spacing-xs);
1147
+ }
1148
+
1149
+ .form-group label {
1150
+ font-size: 0.75rem;
1151
+ font-weight: 600;
1152
+ color: var(--color-text-secondary);
1153
+ text-transform: uppercase;
1154
+ letter-spacing: 0.05em;
1155
+ }
1156
+
1157
+ .resolved-selector-display {
1158
+ font-family: monospace;
1159
+ font-size: 0.8rem;
1160
+ background-color: rgba(255, 255, 255, 0.03);
1161
+ border: 1px solid var(--glass-border);
1162
+ padding: var(--spacing-sm) var(--spacing-md);
1163
+ border-radius: var(--border-radius-md);
1164
+ color: #86efac;
1165
+ word-break: break-all;
1166
+ }
1167
+
1168
+ .modal-select,
1169
+ .modal-textarea {
1170
+ background-color: rgba(0, 0, 0, 0.3);
1171
+ border: 1px solid var(--glass-border);
1172
+ border-radius: var(--border-radius-md);
1173
+ color: var(--color-text-primary);
1174
+ padding: var(--spacing-sm) var(--spacing-md);
1175
+ font-size: 0.85rem;
1176
+ outline: none;
1177
+ transition: border-color 0.2s;
1178
+ }
1179
+
1180
+ .modal-select:focus,
1181
+ .modal-textarea:focus {
1182
+ border-color: var(--color-violet);
1183
+ box-shadow: 0 0 8px hsla(270, 80%, 60%, 0.3);
1184
+ }
1185
+
1186
+ .modal-textarea {
1187
+ min-height: 100px;
1188
+ resize: vertical;
1189
+ font-family: inherit;
1190
+ line-height: 1.5;
1191
+ }
1192
+
1193
+ .modal-footer {
1194
+ display: flex;
1195
+ justify-content: flex-end;
1196
+ gap: var(--spacing-md);
1197
+ padding: var(--spacing-md) var(--spacing-lg);
1198
+ border-top: 1px solid var(--glass-border);
1199
+ background-color: rgba(255, 255, 255, 0.02);
1200
+ }
1201
+
1202
+ .modal-btn {
1203
+ padding: 8px 16px;
1204
+ border-radius: var(--border-radius-md);
1205
+ font-weight: 600;
1206
+ font-size: 0.85rem;
1207
+ cursor: pointer;
1208
+ border: none;
1209
+ transition: all 0.2s;
1210
+ }
1211
+
1212
+ .modal-btn-secondary {
1213
+ background-color: rgba(255, 255, 255, 0.05);
1214
+ border: 1px solid var(--glass-border);
1215
+ color: var(--color-text-primary);
1216
+ }
1217
+
1218
+ .modal-btn-secondary:hover {
1219
+ background-color: rgba(255, 255, 255, 0.1);
1220
+ }
1221
+
1222
+ .modal-btn-primary {
1223
+ background-color: var(--color-violet);
1224
+ color: #fff;
1225
+ box-shadow: 0 0 10px hsla(270, 80%, 60%, 0.4);
1226
+ }
1227
+
1228
+ .modal-btn-primary:hover {
1229
+ filter: brightness(1.1);
1230
+ }
1231
+
1232
+ /* ==========================================================================
1233
+ VOICE ANNOTATION SECTION (Milestone 4)
1234
+ ========================================================================== */
1235
+ .voice-annotation-section {
1236
+ margin-top: var(--spacing-xs);
1237
+ }
1238
+
1239
+ .voice-controls-box {
1240
+ background: rgba(255, 255, 255, 0.02);
1241
+ border: 1px solid var(--glass-border);
1242
+ padding: var(--spacing-md);
1243
+ border-radius: var(--border-radius-md);
1244
+ display: flex;
1245
+ flex-direction: column;
1246
+ gap: var(--spacing-md);
1247
+ }
1248
+
1249
+ .voice-actions {
1250
+ display: flex;
1251
+ gap: var(--spacing-sm);
1252
+ align-items: center;
1253
+ }
1254
+
1255
+ .voice-btn {
1256
+ background-color: rgba(255, 255, 255, 0.05);
1257
+ border: 1px solid var(--glass-border);
1258
+ color: var(--color-text-primary);
1259
+ padding: 10px var(--spacing-md);
1260
+ border-radius: var(--border-radius-md);
1261
+ font-weight: 600;
1262
+ font-size: 0.85rem;
1263
+ cursor: pointer;
1264
+ display: flex;
1265
+ align-items: center;
1266
+ justify-content: center;
1267
+ gap: var(--spacing-sm);
1268
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1269
+ flex: 1;
1270
+ }
1271
+
1272
+ .voice-btn:hover:not(:disabled) {
1273
+ background-color: rgba(255, 255, 255, 0.1);
1274
+ border-color: rgba(255, 255, 255, 0.2);
1275
+ }
1276
+
1277
+ .voice-btn:disabled {
1278
+ opacity: 0.35;
1279
+ cursor: not-allowed;
1280
+ }
1281
+
1282
+ /* Microphone record button - active recording state with pulsing glow */
1283
+ .record-btn.recording {
1284
+ background-color: hsl(350, 80%, 45%) !important;
1285
+ border-color: hsl(350, 80%, 55%) !important;
1286
+ color: #fff !important;
1287
+ animation: recording-pulse 1.5s infinite ease-in-out !important;
1288
+ box-shadow: 0 0 15px rgba(239, 68, 68, 0.55) !important;
1289
+ }
1290
+
1291
+ .record-btn.recording:hover {
1292
+ background-color: hsl(350, 80%, 50%) !important;
1293
+ }
1294
+
1295
+ .delete-btn {
1296
+ flex: 0 0 auto;
1297
+ width: 40px;
1298
+ height: 40px;
1299
+ padding: 0;
1300
+ border-radius: var(--border-radius-md);
1301
+ background-color: rgba(239, 68, 68, 0.1);
1302
+ border-color: rgba(239, 68, 68, 0.25);
1303
+ color: #fca5a5;
1304
+ display: flex;
1305
+ align-items: center;
1306
+ justify-content: center;
1307
+ }
1308
+
1309
+ .delete-btn:hover:not(:disabled) {
1310
+ background-color: rgba(239, 68, 68, 0.2);
1311
+ border-color: rgba(239, 68, 68, 0.4);
1312
+ }
1313
+
1314
+ /* Voice timer and status container */
1315
+ .voice-status {
1316
+ display: flex;
1317
+ align-items: center;
1318
+ gap: var(--spacing-sm);
1319
+ font-size: 0.85rem;
1320
+ background-color: rgba(0, 0, 0, 0.25);
1321
+ padding: var(--spacing-sm) var(--spacing-md);
1322
+ border-radius: var(--border-radius-sm);
1323
+ border-left: 3px solid hsl(350, 80%, 50%);
1324
+ align-self: center;
1325
+ width: 100%;
1326
+ }
1327
+
1328
+ .pulse-indicator {
1329
+ width: 8px;
1330
+ height: 8px;
1331
+ border-radius: 50%;
1332
+ background-color: hsl(350, 80%, 50%);
1333
+ animation: pulse-glow-dot 1s infinite ease-in-out;
1334
+ }
1335
+
1336
+ #voice-timer {
1337
+ font-family: monospace;
1338
+ font-weight: 700;
1339
+ color: #fff;
1340
+ }
1341
+
1342
+ .status-label {
1343
+ color: var(--color-text-secondary);
1344
+ }
1345
+
1346
+ /* Audio preview container styling */
1347
+ .audio-player-container {
1348
+ width: 100%;
1349
+ display: flex;
1350
+ justify-content: center;
1351
+ align-items: center;
1352
+ }
1353
+
1354
+ #voice-audio-player {
1355
+ width: 100%;
1356
+ height: 36px;
1357
+ border-radius: var(--border-radius-sm);
1358
+ background-color: #1e293b;
1359
+ outline: none;
1360
+ }
1361
+
1362
+ /* MediaRecorder recording glow keyframe */
1363
+ @keyframes recording-pulse {
1364
+ 0% {
1365
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.6);
1366
+ }
1367
+ 70% {
1368
+ box-shadow: 0 0 0 8px rgba(239, 68, 68, 0);
1369
+ }
1370
+ 100% {
1371
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0);
1372
+ }
1373
+ }
1374
+
1375
+ /* Floating Microphone Badge styles */
1376
+ .voice-badge {
1377
+ position: absolute;
1378
+ top: -12px;
1379
+ right: var(--spacing-sm);
1380
+ z-index: 100;
1381
+ background: hsla(210, 100%, 50%, 0.25);
1382
+ backdrop-filter: blur(8px);
1383
+ -webkit-backdrop-filter: blur(8px);
1384
+ border: 1px solid var(--color-accent);
1385
+ color: #fff;
1386
+ padding: 2px 6px;
1387
+ border-radius: 12px;
1388
+ font-size: 0.7rem;
1389
+ display: flex;
1390
+ align-items: center;
1391
+ justify-content: center;
1392
+ box-shadow: 0 4px 10px rgba(0, 149, 255, 0.4);
1393
+ pointer-events: none;
1394
+ animation: float-badge 2s infinite ease-in-out;
1395
+ }
1396
+
1397
+ @keyframes float-badge {
1398
+ 0%, 100% {
1399
+ transform: translateY(0);
1400
+ }
1401
+ 50% {
1402
+ transform: translateY(-4px);
1403
+ }
1404
+ }
1405
+
1406
+ .voice-note-indicator {
1407
+ border-top: 1px dashed rgba(255, 255, 255, 0.05);
1408
+ margin-top: 4px;
1409
+ padding-top: var(--spacing-sm) !important;
1410
+ }
1411
+
1412
+ /* ==========================================================================
1413
+ TOAST NOTIFICATION (Milestone 5)
1414
+ ========================================================================== */
1415
+ .toast-notification {
1416
+ position: fixed;
1417
+ bottom: var(--spacing-lg);
1418
+ left: var(--spacing-lg);
1419
+ z-index: 10000;
1420
+ background: rgba(22, 28, 38, 0.95);
1421
+ backdrop-filter: blur(15px) saturate(180%);
1422
+ -webkit-backdrop-filter: blur(15px) saturate(180%);
1423
+ border: 1px solid var(--glass-border);
1424
+ border-radius: var(--border-radius-lg);
1425
+ box-shadow: 0 8px 32px var(--glass-shadow), 0 0 15px rgba(0, 149, 255, 0.2);
1426
+ padding: var(--spacing-md) var(--spacing-lg);
1427
+ color: var(--color-text-primary);
1428
+ display: flex;
1429
+ flex-direction: column;
1430
+ gap: var(--spacing-xs);
1431
+ min-width: 300px;
1432
+ max-width: 450px;
1433
+ animation: toast-slide-in 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1434
+ transition: all 0.3s ease;
1435
+ }
1436
+
1437
+ .toast-notification.hide {
1438
+ opacity: 0;
1439
+ transform: translateY(20px) scale(0.9);
1440
+ pointer-events: none;
1441
+ }
1442
+
1443
+ .toast-header {
1444
+ display: flex;
1445
+ align-items: center;
1446
+ gap: var(--spacing-sm);
1447
+ font-weight: 700;
1448
+ font-size: 0.85rem;
1449
+ color: var(--color-accent);
1450
+ }
1451
+
1452
+ .toast-body {
1453
+ font-size: 0.75rem;
1454
+ color: var(--color-text-secondary);
1455
+ line-height: 1.4;
1456
+ word-break: break-all;
1457
+ }
1458
+
1459
+ .toast-meta {
1460
+ margin-top: 6px;
1461
+ font-weight: bold;
1462
+ }
1463
+
1464
+ @keyframes toast-slide-in {
1465
+ from {
1466
+ opacity: 0;
1467
+ transform: translateY(20px) scale(0.9);
1468
+ }
1469
+ to {
1470
+ opacity: 1;
1471
+ transform: translateY(0) scale(1);
1472
+ }
1473
+ }
1474
+
1475
+ /* ==========================================================================
1476
+ REFAC: HIERARCHY TREE, FOCUS ROOT & UNDOCK LAYOUTS
1477
+ ========================================================================== */
1478
+
1479
+ /* Reference focus root outline */
1480
+ .inspect-focus-root {
1481
+ outline: 2px dashed rgba(0, 149, 255, 0.6) !important;
1482
+ outline-offset: 3px !important;
1483
+ background-color: rgba(0, 149, 255, 0.02) !important;
1484
+ }
1485
+
1486
+ /* Undock panel toggle states */
1487
+ .staging-panel.docked-hidden {
1488
+ display: none !important;
1489
+ }
1490
+
1491
+ .mock-page-container.full-width {
1492
+ flex: 0 0 100% !important;
1493
+ max-width: 100% !important;
1494
+ width: 100% !important;
1495
+ }
1496
+
1497
+ .app-layout.undocked {
1498
+ grid-template-columns: 1fr !important;
1499
+ }
1500
+
1501
+ /* Metadata toolbar button */
1502
+ .meta-section-header {
1503
+ display: flex;
1504
+ justify-content: space-between;
1505
+ align-items: center;
1506
+ margin-bottom: var(--spacing-sm);
1507
+ }
1508
+
1509
+ .meta-action-btn {
1510
+ background-color: rgba(255, 255, 255, 0.05);
1511
+ border: 1px solid var(--glass-border);
1512
+ color: var(--color-text-primary);
1513
+ padding: 4px 10px;
1514
+ border-radius: var(--border-radius-sm);
1515
+ font-size: 0.7rem;
1516
+ font-weight: 600;
1517
+ cursor: pointer;
1518
+ display: flex;
1519
+ align-items: center;
1520
+ gap: 4px;
1521
+ transition: all 0.2s ease;
1522
+ }
1523
+
1524
+ .meta-action-btn:hover {
1525
+ background-color: rgba(255, 255, 255, 0.12);
1526
+ border-color: rgba(255, 255, 255, 0.2);
1527
+ }
1528
+
1529
+ .hierarchy-header-title {
1530
+ font-size: 0.75rem;
1531
+ font-weight: 700;
1532
+ text-transform: uppercase;
1533
+ letter-spacing: 0.05em;
1534
+ color: var(--color-text-secondary);
1535
+ margin-top: var(--spacing-md);
1536
+ margin-bottom: var(--spacing-xs);
1537
+ border-top: 1px dashed rgba(255, 255, 255, 0.08);
1538
+ padding-top: var(--spacing-sm);
1539
+ }
1540
+
1541
+ /* Dynamic DOM Tree styles */
1542
+ .hierarchy-tree-container {
1543
+ display: flex;
1544
+ flex-direction: column;
1545
+ gap: 2px;
1546
+ max-height: 180px;
1547
+ overflow-y: auto;
1548
+ background-color: rgba(0, 0, 0, 0.15);
1549
+ border: 1px solid var(--glass-border);
1550
+ border-radius: var(--border-radius-md);
1551
+ padding: 6px;
1552
+ margin-top: var(--spacing-xs);
1553
+ }
1554
+
1555
+ .tree-node {
1556
+ display: flex;
1557
+ align-items: center;
1558
+ padding: 4px 8px;
1559
+ border-radius: var(--border-radius-sm);
1560
+ cursor: pointer;
1561
+ font-family: monospace;
1562
+ font-size: 0.75rem;
1563
+ transition: all 0.15s ease;
1564
+ user-select: none;
1565
+ color: var(--color-text-secondary);
1566
+ }
1567
+
1568
+ .tree-node:hover {
1569
+ background-color: rgba(255, 255, 255, 0.05);
1570
+ color: var(--color-text-primary);
1571
+ }
1572
+
1573
+ .tree-node.active-leaf {
1574
+ background-color: rgba(0, 149, 255, 0.16) !important;
1575
+ color: #fff !important;
1576
+ border: 1px solid rgba(0, 149, 255, 0.3) !important;
1577
+ }
1578
+
1579
+ .tree-node.focus-root {
1580
+ border-left: 2px solid var(--color-accent) !important;
1581
+ }
1582
+
1583
+ .tree-arrow {
1584
+ display: inline-block;
1585
+ width: 10px;
1586
+ margin-right: 6px;
1587
+ text-align: center;
1588
+ transition: transform 0.15s ease;
1589
+ font-size: 0.6rem;
1590
+ color: var(--color-text-secondary);
1591
+ }
1592
+
1593
+ .tree-arrow.collapsed {
1594
+ transform: rotate(-90deg);
1595
+ }
1596
+
1597
+ .tree-tag {
1598
+ color: var(--color-accent);
1599
+ font-weight: 700;
1600
+ }
1601
+
1602
+ .tree-node.active-leaf .tree-tag {
1603
+ color: #93c5fd;
1604
+ }
1605
+
1606
+ .tree-class {
1607
+ color: #c084fc;
1608
+ margin-left: 2px;
1609
+ }
1610
+
1611
+ .tree-badge {
1612
+ margin-left: auto;
1613
+ font-size: 0.6rem;
1614
+ background-color: rgba(168, 85, 247, 0.2);
1615
+ border: 1px solid rgba(168, 85, 247, 0.4);
1616
+ color: #d8b4fe;
1617
+ padding: 0 4px;
1618
+ border-radius: 4px;
1619
+ }
1620
+
1621
+ /* Premium text input field in Visual Sandbox */
1622
+ .text-input {
1623
+ width: 100%;
1624
+ background-color: rgba(0, 0, 0, 0.35);
1625
+ border: 1px solid var(--glass-border);
1626
+ border-radius: var(--border-radius-md);
1627
+ color: var(--color-text-primary);
1628
+ padding: 6px var(--spacing-sm);
1629
+ font-size: 0.8rem;
1630
+ outline: none;
1631
+ transition: all 0.2s ease;
1632
+ margin-top: 4px;
1633
+ }
1634
+
1635
+ .text-input:focus {
1636
+ border-color: var(--color-accent);
1637
+ box-shadow: 0 0 8px rgba(0, 149, 255, 0.35);
1638
+ }
1639
+
1640
+
1641
+
1642
+