seeclaudecode 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1725 @@
1
+ /* SeeClaude - Cyberpunk Theme */
2
+
3
+ /* CSS Variables - Dark Future Palette */
4
+ :root {
5
+ --bg-primary: hsl(222, 47%, 11%);
6
+ --bg-secondary: hsl(217, 33%, 17%);
7
+ --bg-card: hsl(217, 33%, 17%);
8
+ --bg-hover: hsl(217, 33%, 22%);
9
+
10
+ --text-primary: hsl(210, 40%, 98%);
11
+ --text-secondary: hsl(215, 20%, 65%);
12
+ --text-muted: hsl(215, 15%, 45%);
13
+
14
+ --primary: hsl(150, 100%, 50%);
15
+ --primary-dim: hsl(150, 80%, 35%);
16
+ --secondary: hsl(217, 91%, 60%);
17
+
18
+ --border: hsl(217, 33%, 22%);
19
+ --border-dim: hsl(217, 33%, 17%);
20
+
21
+ --success: hsl(142, 76%, 50%);
22
+ --warning: hsl(45, 93%, 58%);
23
+ --error: hsl(0, 84%, 60%);
24
+
25
+ --font-sans: 'Rajdhani', -apple-system, sans-serif;
26
+ --font-display: 'Orbitron', sans-serif;
27
+ --font-mono: 'JetBrains Mono', monospace;
28
+
29
+ --radius: 6px;
30
+ --transition: 200ms ease;
31
+ }
32
+
33
+ /* Reset */
34
+ *, *::before, *::after {
35
+ box-sizing: border-box;
36
+ margin: 0;
37
+ padding: 0;
38
+ }
39
+
40
+ body {
41
+ font-family: var(--font-sans);
42
+ background: var(--bg-primary);
43
+ color: var(--text-primary);
44
+ line-height: 1.5;
45
+ overflow: hidden;
46
+ -webkit-font-smoothing: antialiased;
47
+ }
48
+
49
+ /* Scrollbar */
50
+ ::-webkit-scrollbar {
51
+ width: 8px;
52
+ height: 8px;
53
+ }
54
+ ::-webkit-scrollbar-track {
55
+ background: var(--bg-primary);
56
+ }
57
+ ::-webkit-scrollbar-thumb {
58
+ background: var(--border);
59
+ border-radius: 4px;
60
+ }
61
+ ::-webkit-scrollbar-thumb:hover {
62
+ background: var(--bg-hover);
63
+ }
64
+
65
+ /* App Layout */
66
+ .app {
67
+ display: flex;
68
+ flex-direction: column;
69
+ height: 100vh;
70
+ position: relative;
71
+ overflow: hidden;
72
+ }
73
+
74
+ /* Background Grid */
75
+ .bg-grid {
76
+ position: absolute;
77
+ inset: 0;
78
+ z-index: 0;
79
+ opacity: 0.15;
80
+ background-image:
81
+ linear-gradient(var(--border-dim) 1px, transparent 1px),
82
+ linear-gradient(90deg, var(--border-dim) 1px, transparent 1px);
83
+ background-size: 50px 50px;
84
+ pointer-events: none;
85
+ }
86
+
87
+ /* Top Navigation */
88
+ .top-nav {
89
+ position: relative;
90
+ z-index: 100;
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: space-between;
94
+ height: 64px;
95
+ padding: 0 24px;
96
+ background: rgba(23, 37, 53, 0.8);
97
+ backdrop-filter: blur(12px);
98
+ border-bottom: 1px solid var(--border);
99
+ }
100
+
101
+ .nav-left, .nav-right {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 16px;
105
+ }
106
+
107
+ /* Logo */
108
+ .logo {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 10px;
112
+ }
113
+
114
+ .logo-icon {
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ width: 36px;
119
+ height: 36px;
120
+ background: rgba(16, 185, 129, 0.15);
121
+ border-radius: var(--radius);
122
+ color: var(--primary);
123
+ }
124
+
125
+ .logo-text {
126
+ font-family: var(--font-display);
127
+ font-size: 1.25rem;
128
+ font-weight: 700;
129
+ letter-spacing: 0.05em;
130
+ color: var(--text-primary);
131
+ }
132
+
133
+ .text-primary {
134
+ color: var(--primary);
135
+ }
136
+
137
+ /* Current Task */
138
+ .nav-center {
139
+ flex: 1;
140
+ display: flex;
141
+ justify-content: center;
142
+ }
143
+
144
+ .current-task {
145
+ display: flex;
146
+ align-items: center;
147
+ gap: 12px;
148
+ padding: 8px 20px;
149
+ background: rgba(16, 185, 129, 0.08);
150
+ border: 1px solid rgba(16, 185, 129, 0.2);
151
+ border-radius: 50px;
152
+ backdrop-filter: blur(8px);
153
+ }
154
+
155
+ .task-indicator {
156
+ width: 8px;
157
+ height: 8px;
158
+ background: var(--primary);
159
+ border-radius: 50%;
160
+ animation: pulse-glow 2s ease-in-out infinite;
161
+ }
162
+
163
+ .task-label {
164
+ font-size: 0.85rem;
165
+ color: var(--text-secondary);
166
+ }
167
+
168
+ .task-name {
169
+ font-size: 0.85rem;
170
+ font-weight: 600;
171
+ color: var(--text-primary);
172
+ max-width: 300px;
173
+ overflow: hidden;
174
+ text-overflow: ellipsis;
175
+ white-space: nowrap;
176
+ }
177
+
178
+ /* Icon Button */
179
+ .icon-btn {
180
+ display: flex;
181
+ align-items: center;
182
+ justify-content: center;
183
+ width: 40px;
184
+ height: 40px;
185
+ background: transparent;
186
+ border: none;
187
+ border-radius: var(--radius);
188
+ color: var(--text-secondary);
189
+ cursor: pointer;
190
+ transition: all var(--transition);
191
+ }
192
+
193
+ .icon-btn:hover {
194
+ background: var(--bg-hover);
195
+ color: var(--primary);
196
+ }
197
+
198
+ .icon-btn.small {
199
+ width: 28px;
200
+ height: 28px;
201
+ }
202
+
203
+ /* Connection Status */
204
+ .connection-status {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 12px;
208
+ padding-left: 16px;
209
+ border-left: 1px solid var(--border);
210
+ }
211
+
212
+ .status-info {
213
+ display: flex;
214
+ flex-direction: column;
215
+ align-items: flex-end;
216
+ }
217
+
218
+ .status-name {
219
+ font-size: 0.875rem;
220
+ font-weight: 500;
221
+ }
222
+
223
+ .status-state {
224
+ font-size: 0.75rem;
225
+ color: var(--text-muted);
226
+ }
227
+
228
+ .status-avatar {
229
+ width: 36px;
230
+ height: 36px;
231
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
232
+ border-radius: 50%;
233
+ box-shadow: 0 0 15px rgba(16, 185, 129, 0.4);
234
+ }
235
+
236
+ .status-avatar.connected {
237
+ animation: pulse-glow 2s ease-in-out infinite;
238
+ }
239
+
240
+ /* Main Content */
241
+ .main-content {
242
+ display: flex;
243
+ flex: 1;
244
+ overflow: hidden;
245
+ position: relative;
246
+ z-index: 10;
247
+ }
248
+
249
+ /* Left Sidebar */
250
+ .left-sidebar {
251
+ display: flex;
252
+ flex-direction: column;
253
+ width: 300px;
254
+ background: rgba(30, 41, 59, 0.5);
255
+ backdrop-filter: blur(12px);
256
+ border-right: 1px solid var(--border);
257
+ }
258
+
259
+ .sidebar-section {
260
+ padding: 16px;
261
+ }
262
+
263
+ .sidebar-section.flex-1 {
264
+ flex: 1;
265
+ overflow: hidden;
266
+ display: flex;
267
+ flex-direction: column;
268
+ }
269
+
270
+ .section-title {
271
+ display: flex;
272
+ align-items: center;
273
+ justify-content: space-between;
274
+ font-size: 0.7rem;
275
+ font-weight: 600;
276
+ text-transform: uppercase;
277
+ letter-spacing: 0.1em;
278
+ color: var(--text-secondary);
279
+ margin-bottom: 12px;
280
+ padding: 0 8px;
281
+ }
282
+
283
+ .live-dot {
284
+ width: 8px;
285
+ height: 8px;
286
+ background: var(--primary);
287
+ border-radius: 50%;
288
+ animation: pulse-glow 1.5s ease-in-out infinite;
289
+ }
290
+
291
+ /* View Buttons */
292
+ .view-buttons {
293
+ display: flex;
294
+ flex-direction: column;
295
+ gap: 4px;
296
+ }
297
+
298
+ .view-btn {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 10px;
302
+ width: 100%;
303
+ padding: 10px 12px;
304
+ background: transparent;
305
+ border: none;
306
+ border-radius: var(--radius);
307
+ color: var(--text-secondary);
308
+ font-family: var(--font-sans);
309
+ font-size: 0.9rem;
310
+ font-weight: 500;
311
+ text-align: left;
312
+ cursor: pointer;
313
+ transition: all var(--transition);
314
+ }
315
+
316
+ .view-btn:hover {
317
+ background: var(--bg-hover);
318
+ color: var(--text-primary);
319
+ }
320
+
321
+ .view-btn.active {
322
+ background: var(--bg-secondary);
323
+ color: var(--text-primary);
324
+ border: 1px solid var(--border);
325
+ }
326
+
327
+ .sidebar-divider {
328
+ height: 1px;
329
+ background: var(--border);
330
+ opacity: 0.5;
331
+ }
332
+
333
+ /* Activity Feed */
334
+ .activity-feed {
335
+ flex: 1;
336
+ overflow-y: auto;
337
+ padding-right: 4px;
338
+ }
339
+
340
+ .activity-empty {
341
+ display: flex;
342
+ flex-direction: column;
343
+ align-items: center;
344
+ justify-content: center;
345
+ height: 200px;
346
+ color: var(--text-muted);
347
+ text-align: center;
348
+ }
349
+
350
+ .activity-empty svg {
351
+ margin-bottom: 12px;
352
+ opacity: 0.5;
353
+ }
354
+
355
+ .activity-empty p {
356
+ font-size: 0.85rem;
357
+ }
358
+
359
+ .activity-item {
360
+ display: flex;
361
+ flex-direction: column;
362
+ gap: 6px;
363
+ padding: 12px;
364
+ margin-bottom: 8px;
365
+ background: rgba(30, 41, 59, 0.4);
366
+ border: 1px solid var(--border-dim);
367
+ border-radius: var(--radius);
368
+ cursor: pointer;
369
+ transition: all var(--transition);
370
+ }
371
+
372
+ .activity-item:hover {
373
+ background: rgba(30, 41, 59, 0.6);
374
+ border-color: rgba(16, 185, 129, 0.3);
375
+ }
376
+
377
+ .activity-item.active {
378
+ border-color: var(--primary);
379
+ box-shadow: 0 0 15px rgba(16, 185, 129, 0.15);
380
+ }
381
+
382
+ .activity-header {
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: space-between;
386
+ }
387
+
388
+ .activity-action {
389
+ font-family: var(--font-mono);
390
+ font-size: 0.65rem;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ color: var(--text-muted);
394
+ }
395
+
396
+ .activity-time {
397
+ font-size: 0.65rem;
398
+ color: var(--primary-dim);
399
+ }
400
+
401
+ .activity-description {
402
+ font-size: 0.875rem;
403
+ font-weight: 500;
404
+ color: var(--text-primary);
405
+ line-height: 1.4;
406
+ }
407
+
408
+ .activity-file {
409
+ display: flex;
410
+ align-items: center;
411
+ gap: 6px;
412
+ font-family: var(--font-mono);
413
+ font-size: 0.75rem;
414
+ color: var(--text-muted);
415
+ }
416
+
417
+ .activity-file:hover {
418
+ color: var(--primary);
419
+ }
420
+
421
+ /* Sidebar Footer */
422
+ .sidebar-footer {
423
+ padding: 12px 16px;
424
+ border-top: 1px solid var(--border);
425
+ background: rgba(30, 41, 59, 0.3);
426
+ }
427
+
428
+ .listening-indicator {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 8px;
432
+ font-family: var(--font-mono);
433
+ font-size: 0.75rem;
434
+ color: var(--text-muted);
435
+ }
436
+
437
+ .listening-indicator svg {
438
+ animation: pulse 2s ease-in-out infinite;
439
+ }
440
+
441
+ /* Main View */
442
+ .main-view {
443
+ flex: 1;
444
+ position: relative;
445
+ background: rgba(15, 23, 42, 0.5);
446
+ overflow: hidden;
447
+ }
448
+
449
+ .view-container {
450
+ width: 100%;
451
+ height: 100%;
452
+ overflow: auto;
453
+ }
454
+
455
+ /* Loading */
456
+ .loading {
457
+ display: flex;
458
+ flex-direction: column;
459
+ align-items: center;
460
+ justify-content: center;
461
+ height: 100%;
462
+ color: var(--text-muted);
463
+ }
464
+
465
+ .loading-spinner {
466
+ width: 48px;
467
+ height: 48px;
468
+ border: 3px solid var(--border);
469
+ border-top-color: var(--primary);
470
+ border-radius: 50%;
471
+ animation: spin 1s linear infinite;
472
+ margin-bottom: 16px;
473
+ }
474
+
475
+ /* Legend Panel */
476
+ .legend-panel {
477
+ position: absolute;
478
+ bottom: 20px;
479
+ right: 20px;
480
+ padding: 16px;
481
+ background: rgba(30, 41, 59, 0.9);
482
+ backdrop-filter: blur(12px);
483
+ border: 1px solid var(--border);
484
+ border-radius: var(--radius);
485
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
486
+ }
487
+
488
+ .legend-panel h4 {
489
+ font-family: var(--font-display);
490
+ font-size: 0.75rem;
491
+ font-weight: 600;
492
+ letter-spacing: 0.1em;
493
+ color: var(--text-primary);
494
+ margin-bottom: 12px;
495
+ padding-bottom: 8px;
496
+ border-bottom: 1px solid var(--border);
497
+ }
498
+
499
+ .legend-grid {
500
+ display: grid;
501
+ grid-template-columns: 1fr 1fr;
502
+ gap: 16px;
503
+ }
504
+
505
+ .legend-col {
506
+ display: flex;
507
+ flex-direction: column;
508
+ gap: 8px;
509
+ }
510
+
511
+ .legend-item {
512
+ display: flex;
513
+ align-items: center;
514
+ gap: 8px;
515
+ font-size: 0.75rem;
516
+ color: var(--text-secondary);
517
+ }
518
+
519
+ .legend-item svg {
520
+ color: var(--text-muted);
521
+ }
522
+
523
+ .legend-dot {
524
+ width: 8px;
525
+ height: 8px;
526
+ border-radius: 50%;
527
+ background: var(--text-muted);
528
+ }
529
+
530
+ .legend-dot.pulse {
531
+ background: var(--primary);
532
+ animation: pulse-glow 1.5s ease-in-out infinite;
533
+ }
534
+
535
+ .legend-dot.changed {
536
+ background: var(--warning);
537
+ }
538
+
539
+ .legend-dot.neutral {
540
+ background: var(--text-muted);
541
+ opacity: 0.3;
542
+ }
543
+
544
+ /* Right Panel */
545
+ .right-panel {
546
+ display: flex;
547
+ flex-direction: column;
548
+ width: 380px;
549
+ background: rgba(30, 41, 59, 0.5);
550
+ backdrop-filter: blur(12px);
551
+ border-left: 1px solid var(--border);
552
+ transition: width var(--transition), transform var(--transition);
553
+ }
554
+
555
+ .right-panel.hidden {
556
+ width: 0;
557
+ transform: translateX(100%);
558
+ }
559
+
560
+ .panel-header {
561
+ display: flex;
562
+ align-items: center;
563
+ justify-content: space-between;
564
+ height: 40px;
565
+ padding: 0 12px;
566
+ background: rgba(30, 41, 59, 0.3);
567
+ border-bottom: 1px solid var(--border);
568
+ }
569
+
570
+ .panel-title {
571
+ display: flex;
572
+ align-items: center;
573
+ gap: 8px;
574
+ font-size: 0.7rem;
575
+ font-weight: 600;
576
+ text-transform: uppercase;
577
+ letter-spacing: 0.05em;
578
+ color: var(--text-secondary);
579
+ }
580
+
581
+ .panel-title svg {
582
+ color: var(--primary);
583
+ }
584
+
585
+ /* Diff Header */
586
+ .diff-header {
587
+ display: flex;
588
+ align-items: center;
589
+ justify-content: space-between;
590
+ padding: 12px 16px;
591
+ background: rgba(30, 41, 59, 0.3);
592
+ border-bottom: 1px solid var(--border);
593
+ }
594
+
595
+ .diff-info {
596
+ display: flex;
597
+ align-items: center;
598
+ gap: 8px;
599
+ }
600
+
601
+ .diff-info svg {
602
+ color: var(--text-muted);
603
+ }
604
+
605
+ .diff-file {
606
+ font-family: var(--font-mono);
607
+ font-size: 0.8rem;
608
+ color: var(--text-primary);
609
+ }
610
+
611
+ /* Diff Content */
612
+ .diff-content {
613
+ flex: 1;
614
+ overflow-y: auto;
615
+ font-family: var(--font-mono);
616
+ font-size: 0.75rem;
617
+ }
618
+
619
+ .diff-empty {
620
+ display: flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ height: 100%;
624
+ padding: 24px;
625
+ text-align: center;
626
+ color: var(--text-muted);
627
+ }
628
+
629
+ .diff-line {
630
+ display: flex;
631
+ padding: 2px 0;
632
+ }
633
+
634
+ .diff-line-number {
635
+ width: 32px;
636
+ padding-right: 8px;
637
+ text-align: right;
638
+ color: var(--text-muted);
639
+ user-select: none;
640
+ border-right: 1px solid var(--border-dim);
641
+ background: rgba(30, 41, 59, 0.3);
642
+ }
643
+
644
+ .diff-line-content {
645
+ flex: 1;
646
+ padding-left: 12px;
647
+ white-space: pre;
648
+ }
649
+
650
+ .diff-line.added {
651
+ background: rgba(34, 197, 94, 0.1);
652
+ }
653
+
654
+ .diff-line.added .diff-line-number {
655
+ color: var(--success);
656
+ background: rgba(34, 197, 94, 0.05);
657
+ border-right-color: rgba(34, 197, 94, 0.2);
658
+ }
659
+
660
+ .diff-line.added .diff-line-content {
661
+ color: var(--success);
662
+ }
663
+
664
+ .diff-line.removed {
665
+ background: rgba(239, 68, 68, 0.1);
666
+ }
667
+
668
+ .diff-line.removed .diff-line-number {
669
+ color: var(--error);
670
+ background: rgba(239, 68, 68, 0.05);
671
+ border-right-color: rgba(239, 68, 68, 0.2);
672
+ }
673
+
674
+ .diff-line.removed .diff-line-content {
675
+ color: var(--error);
676
+ text-decoration: line-through;
677
+ opacity: 0.7;
678
+ }
679
+
680
+ .diff-line.context {
681
+ opacity: 0.5;
682
+ }
683
+
684
+ .diff-line.hunk {
685
+ background: rgba(100, 100, 150, 0.15);
686
+ padding: 4px 8px;
687
+ font-size: 0.7rem;
688
+ color: var(--text-muted);
689
+ border-top: 1px solid var(--border-dim);
690
+ border-bottom: 1px solid var(--border-dim);
691
+ margin: 4px 0;
692
+ }
693
+
694
+ .diff-line-prefix {
695
+ width: 16px;
696
+ padding-right: 4px;
697
+ text-align: center;
698
+ font-weight: 600;
699
+ flex-shrink: 0;
700
+ }
701
+
702
+ .diff-line.added .diff-line-prefix {
703
+ color: var(--success);
704
+ }
705
+
706
+ .diff-line.removed .diff-line-prefix {
707
+ color: var(--error);
708
+ }
709
+
710
+ .diff-error {
711
+ color: var(--error);
712
+ font-size: 0.75rem;
713
+ margin-top: 8px;
714
+ }
715
+
716
+ /* Directory diff with multiple files */
717
+ .diff-file-section {
718
+ border-bottom: 1px solid var(--border);
719
+ margin-bottom: 8px;
720
+ padding-bottom: 8px;
721
+ }
722
+
723
+ .diff-file-section:last-child {
724
+ border-bottom: none;
725
+ }
726
+
727
+ .diff-file-header {
728
+ display: flex;
729
+ align-items: center;
730
+ justify-content: space-between;
731
+ padding: 8px 12px;
732
+ background: rgba(30, 41, 59, 0.5);
733
+ border-radius: 4px;
734
+ margin-bottom: 4px;
735
+ position: sticky;
736
+ top: 0;
737
+ z-index: 10;
738
+ }
739
+
740
+ .diff-file-name {
741
+ font-family: var(--font-mono);
742
+ font-size: 0.75rem;
743
+ color: var(--text-primary);
744
+ font-weight: 500;
745
+ }
746
+
747
+ .diff-file-stats {
748
+ display: flex;
749
+ gap: 8px;
750
+ font-size: 0.7rem;
751
+ font-weight: 600;
752
+ }
753
+
754
+ .diff-file-stats .stat-add {
755
+ color: var(--success);
756
+ }
757
+
758
+ .diff-file-stats .stat-del {
759
+ color: var(--error);
760
+ }
761
+
762
+ /* Diff Stats */
763
+ .diff-stats {
764
+ display: flex;
765
+ gap: 16px;
766
+ padding: 12px 16px;
767
+ background: rgba(30, 41, 59, 0.3);
768
+ border-top: 1px solid var(--border);
769
+ }
770
+
771
+ .stat {
772
+ display: flex;
773
+ flex-direction: column;
774
+ align-items: center;
775
+ }
776
+
777
+ .stat-value {
778
+ font-family: var(--font-display);
779
+ font-size: 1.25rem;
780
+ font-weight: 600;
781
+ }
782
+
783
+ .stat-label {
784
+ font-size: 0.65rem;
785
+ text-transform: uppercase;
786
+ letter-spacing: 0.05em;
787
+ color: var(--text-muted);
788
+ }
789
+
790
+ .stat.additions .stat-value { color: var(--success); }
791
+ .stat.deletions .stat-value { color: var(--error); }
792
+ .stat.files .stat-value { color: var(--secondary); }
793
+
794
+ /* Panel Toggle */
795
+ .panel-toggle {
796
+ position: absolute;
797
+ right: 0;
798
+ top: 50%;
799
+ transform: translateY(-50%);
800
+ display: flex;
801
+ align-items: center;
802
+ justify-content: center;
803
+ width: 24px;
804
+ height: 48px;
805
+ background: var(--bg-secondary);
806
+ border: 1px solid var(--border);
807
+ border-right: none;
808
+ border-radius: var(--radius) 0 0 var(--radius);
809
+ color: var(--text-secondary);
810
+ cursor: pointer;
811
+ transition: all var(--transition);
812
+ z-index: 50;
813
+ }
814
+
815
+ .panel-toggle:hover {
816
+ background: var(--bg-hover);
817
+ color: var(--primary);
818
+ }
819
+
820
+ .panel-toggle.hidden {
821
+ display: none;
822
+ }
823
+
824
+ /* Graph View */
825
+ .graph-container {
826
+ width: 100%;
827
+ height: 100%;
828
+ position: relative;
829
+ overflow: hidden;
830
+ }
831
+
832
+ .graph-wrapper {
833
+ width: 100%;
834
+ height: 100%;
835
+ overflow: hidden;
836
+ cursor: grab;
837
+ }
838
+
839
+ .graph-wrapper:active {
840
+ cursor: grabbing;
841
+ }
842
+
843
+ .graph-svg {
844
+ transform-origin: center center;
845
+ transition: none;
846
+ will-change: transform;
847
+ }
848
+
849
+ .graph-node {
850
+ cursor: pointer;
851
+ transition: all var(--transition);
852
+ }
853
+
854
+ .graph-node:hover .node-bg {
855
+ filter: brightness(1.2);
856
+ }
857
+
858
+ .node-bg {
859
+ fill: var(--bg-card);
860
+ stroke: var(--border);
861
+ stroke-width: 1;
862
+ rx: 6;
863
+ transition: all var(--transition);
864
+ }
865
+
866
+ .graph-node.active .node-bg {
867
+ stroke: var(--primary);
868
+ filter: drop-shadow(0 0 10px rgba(16, 185, 129, 0.4));
869
+ animation: node-pulse 2s ease-in-out infinite;
870
+ }
871
+
872
+ .graph-node.changed .node-bg,
873
+ .graph-node.has-changes .node-bg {
874
+ stroke: var(--warning);
875
+ stroke-width: 2;
876
+ animation: yellow-pulse 1.5s ease-in-out infinite;
877
+ }
878
+
879
+ /* Yellow pulse animation for changed nodes */
880
+ @keyframes yellow-pulse {
881
+ 0%, 100% {
882
+ filter: drop-shadow(0 0 6px rgba(234, 179, 8, 0.5));
883
+ }
884
+ 50% {
885
+ filter: drop-shadow(0 0 18px rgba(234, 179, 8, 0.9));
886
+ }
887
+ }
888
+
889
+ .graph-node.has-changes .node-icon-bg {
890
+ fill: rgba(234, 179, 8, 0.15);
891
+ stroke: var(--warning);
892
+ }
893
+
894
+ /* Change count badge */
895
+ .change-badge {
896
+ fill: var(--warning);
897
+ animation: badge-pulse 1.5s ease-in-out infinite;
898
+ }
899
+
900
+ @keyframes badge-pulse {
901
+ 0%, 100% {
902
+ opacity: 1;
903
+ }
904
+ 50% {
905
+ opacity: 0.7;
906
+ }
907
+ }
908
+
909
+ .node-icon {
910
+ fill: var(--text-muted);
911
+ }
912
+
913
+ .graph-node.active .node-icon {
914
+ fill: var(--primary);
915
+ }
916
+
917
+ .node-label {
918
+ font-family: var(--font-mono);
919
+ font-size: 11px;
920
+ font-weight: 600;
921
+ fill: var(--text-primary);
922
+ }
923
+
924
+ .node-type {
925
+ font-family: var(--font-mono);
926
+ font-size: 9px;
927
+ text-transform: uppercase;
928
+ letter-spacing: 0.05em;
929
+ fill: var(--text-muted);
930
+ }
931
+
932
+ .node-indicator {
933
+ fill: var(--primary);
934
+ animation: indicator-ping 1.5s ease-in-out infinite;
935
+ }
936
+
937
+ .graph-edge {
938
+ stroke: var(--border);
939
+ stroke-width: 1.5;
940
+ fill: none;
941
+ }
942
+
943
+ .graph-edge.active {
944
+ stroke: var(--primary);
945
+ stroke-width: 2;
946
+ animation: edge-flow 1s linear infinite;
947
+ }
948
+
949
+ .graph-edge.has-changes {
950
+ stroke: var(--warning);
951
+ stroke-width: 2.5;
952
+ animation: edge-pulse-yellow 1.5s ease-in-out infinite, edge-flow 0.8s linear infinite;
953
+ }
954
+
955
+ @keyframes edge-pulse-yellow {
956
+ 0%, 100% {
957
+ stroke-opacity: 1;
958
+ filter: drop-shadow(0 0 3px rgba(234, 179, 8, 0.5));
959
+ }
960
+ 50% {
961
+ stroke-opacity: 0.7;
962
+ filter: drop-shadow(0 0 8px rgba(234, 179, 8, 0.9));
963
+ }
964
+ }
965
+
966
+ .graph-edge.file-edge {
967
+ stroke-width: 2;
968
+ }
969
+
970
+ /* File node in graph */
971
+ .graph-node.file-node .node-bg {
972
+ fill: rgba(234, 179, 8, 0.15);
973
+ stroke: var(--warning);
974
+ stroke-width: 2;
975
+ }
976
+
977
+ .graph-node.file-node.has-changes .node-bg {
978
+ animation: file-node-pulse 1.5s ease-in-out infinite;
979
+ }
980
+
981
+ @keyframes file-node-pulse {
982
+ 0%, 100% {
983
+ fill: rgba(234, 179, 8, 0.15);
984
+ filter: drop-shadow(0 0 4px rgba(234, 179, 8, 0.5));
985
+ }
986
+ 50% {
987
+ fill: rgba(234, 179, 8, 0.3);
988
+ filter: drop-shadow(0 0 12px rgba(234, 179, 8, 0.8));
989
+ }
990
+ }
991
+
992
+ .graph-node.file-node .file-label {
993
+ fill: var(--warning);
994
+ }
995
+
996
+ /* File Explorer */
997
+ .file-explorer {
998
+ height: 100%;
999
+ padding: 16px;
1000
+ }
1001
+
1002
+ .file-tree {
1003
+ background: rgba(30, 41, 59, 0.4);
1004
+ border: 1px solid var(--border);
1005
+ border-radius: var(--radius);
1006
+ overflow: hidden;
1007
+ }
1008
+
1009
+ .file-tree-header {
1010
+ display: flex;
1011
+ align-items: center;
1012
+ justify-content: space-between;
1013
+ padding: 12px 16px;
1014
+ background: rgba(30, 41, 59, 0.3);
1015
+ border-bottom: 1px solid var(--border);
1016
+ }
1017
+
1018
+ .file-tree-header h3 {
1019
+ font-size: 0.8rem;
1020
+ font-weight: 600;
1021
+ letter-spacing: 0.05em;
1022
+ color: var(--text-primary);
1023
+ }
1024
+
1025
+ .file-tree-content {
1026
+ padding: 8px;
1027
+ max-height: calc(100vh - 200px);
1028
+ overflow-y: auto;
1029
+ }
1030
+
1031
+ .tree-item {
1032
+ display: flex;
1033
+ align-items: center;
1034
+ gap: 8px;
1035
+ padding: 6px 8px;
1036
+ border-radius: 4px;
1037
+ cursor: pointer;
1038
+ transition: all var(--transition);
1039
+ font-size: 0.875rem;
1040
+ }
1041
+
1042
+ .tree-item:hover {
1043
+ background: var(--bg-hover);
1044
+ }
1045
+
1046
+ .tree-item.active {
1047
+ background: rgba(16, 185, 129, 0.15);
1048
+ color: var(--primary);
1049
+ }
1050
+
1051
+ .tree-item.modified,
1052
+ .tree-item.has-changes {
1053
+ background: rgba(234, 179, 8, 0.1);
1054
+ border-left: 3px solid var(--warning);
1055
+ animation: tree-yellow-pulse 2s ease-in-out infinite;
1056
+ }
1057
+
1058
+ @keyframes tree-yellow-pulse {
1059
+ 0%, 100% {
1060
+ background: rgba(234, 179, 8, 0.1);
1061
+ }
1062
+ 50% {
1063
+ background: rgba(234, 179, 8, 0.25);
1064
+ }
1065
+ }
1066
+
1067
+ .tree-item.has-changes .tree-item-name {
1068
+ color: var(--warning);
1069
+ }
1070
+
1071
+ .tree-item.added {
1072
+ color: var(--success);
1073
+ }
1074
+
1075
+ .tree-item-icon {
1076
+ width: 16px;
1077
+ height: 16px;
1078
+ color: var(--text-muted);
1079
+ }
1080
+
1081
+ .tree-item-icon.folder { color: hsl(217, 91%, 60%); }
1082
+ .tree-item-icon.ts { color: hsl(200, 100%, 50%); }
1083
+ .tree-item-icon.css { color: hsl(330, 80%, 60%); }
1084
+ .tree-item-icon.json { color: hsl(45, 90%, 50%); }
1085
+
1086
+ .tree-item-name {
1087
+ flex: 1;
1088
+ }
1089
+
1090
+ .tree-item-badge {
1091
+ font-size: 0.6rem;
1092
+ font-weight: 600;
1093
+ text-transform: uppercase;
1094
+ padding: 2px 6px;
1095
+ border-radius: 10px;
1096
+ background: var(--bg-hover);
1097
+ }
1098
+
1099
+ .tree-item.modified .tree-item-badge,
1100
+ .tree-item-badge.yellow-pulse {
1101
+ background: var(--warning);
1102
+ color: hsl(222, 47%, 11%);
1103
+ font-weight: 700;
1104
+ animation: badge-yellow-pulse 1.5s ease-in-out infinite;
1105
+ }
1106
+
1107
+ @keyframes badge-yellow-pulse {
1108
+ 0%, 100% {
1109
+ box-shadow: 0 0 4px rgba(234, 179, 8, 0.5);
1110
+ }
1111
+ 50% {
1112
+ box-shadow: 0 0 12px rgba(234, 179, 8, 0.9);
1113
+ }
1114
+ }
1115
+
1116
+ .tree-pulse-dot.green {
1117
+ background: var(--primary);
1118
+ }
1119
+
1120
+ .tree-item.added .tree-item-badge {
1121
+ background: rgba(34, 197, 94, 0.2);
1122
+ color: var(--success);
1123
+ }
1124
+
1125
+ .tree-children {
1126
+ margin-left: 20px;
1127
+ }
1128
+
1129
+ /* Sunburst View */
1130
+ .sunburst-container {
1131
+ width: 100%;
1132
+ height: 100%;
1133
+ display: flex;
1134
+ align-items: center;
1135
+ justify-content: center;
1136
+ }
1137
+
1138
+ .sunburst-svg {
1139
+ max-width: 100%;
1140
+ max-height: 100%;
1141
+ }
1142
+
1143
+ .sunburst-arc {
1144
+ cursor: pointer;
1145
+ transition: filter var(--transition), opacity var(--transition);
1146
+ }
1147
+
1148
+ .sunburst-arc:hover {
1149
+ filter: brightness(1.3);
1150
+ }
1151
+
1152
+ .sunburst-arc.active {
1153
+ animation: arc-pulse 1.5s ease-in-out infinite;
1154
+ }
1155
+
1156
+ .sunburst-arc.changed {
1157
+ filter: drop-shadow(0 0 6px var(--warning));
1158
+ }
1159
+
1160
+ /* Tooltip */
1161
+ .tooltip {
1162
+ position: fixed;
1163
+ padding: 10px 14px;
1164
+ background: rgba(30, 41, 59, 0.95);
1165
+ border: 1px solid var(--primary);
1166
+ border-radius: var(--radius);
1167
+ font-size: 0.8rem;
1168
+ color: var(--text-primary);
1169
+ pointer-events: none;
1170
+ z-index: 1000;
1171
+ max-width: 280px;
1172
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1173
+ display: none;
1174
+ }
1175
+
1176
+ .tooltip strong {
1177
+ display: block;
1178
+ margin-bottom: 4px;
1179
+ }
1180
+
1181
+ .tooltip .tooltip-type {
1182
+ font-size: 0.7rem;
1183
+ color: var(--text-secondary);
1184
+ }
1185
+
1186
+ .tooltip .tooltip-path {
1187
+ font-family: var(--font-mono);
1188
+ font-size: 0.7rem;
1189
+ color: var(--text-muted);
1190
+ margin-top: 4px;
1191
+ }
1192
+
1193
+ /* Animations */
1194
+ @keyframes spin {
1195
+ to { transform: rotate(360deg); }
1196
+ }
1197
+
1198
+ @keyframes pulse {
1199
+ 0%, 100% { opacity: 1; }
1200
+ 50% { opacity: 0.5; }
1201
+ }
1202
+
1203
+ @keyframes pulse-glow {
1204
+ 0%, 100% {
1205
+ opacity: 1;
1206
+ box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4);
1207
+ }
1208
+ 50% {
1209
+ opacity: 0.8;
1210
+ box-shadow: 0 0 12px 4px rgba(16, 185, 129, 0.2);
1211
+ }
1212
+ }
1213
+
1214
+ @keyframes node-pulse {
1215
+ 0%, 100% {
1216
+ filter: drop-shadow(0 0 8px rgba(16, 185, 129, 0.4));
1217
+ }
1218
+ 50% {
1219
+ filter: drop-shadow(0 0 20px rgba(16, 185, 129, 0.6));
1220
+ }
1221
+ }
1222
+
1223
+ @keyframes indicator-ping {
1224
+ 0%, 100% { opacity: 1; r: 6; }
1225
+ 50% { opacity: 0; r: 12; }
1226
+ }
1227
+
1228
+ @keyframes edge-flow {
1229
+ from { stroke-dashoffset: 20; }
1230
+ to { stroke-dashoffset: 0; }
1231
+ }
1232
+
1233
+ @keyframes arc-pulse {
1234
+ 0%, 100% {
1235
+ opacity: 1;
1236
+ filter: brightness(1) drop-shadow(0 0 4px rgba(16, 185, 129, 0.5));
1237
+ }
1238
+ 50% {
1239
+ opacity: 0.85;
1240
+ filter: brightness(1.2) drop-shadow(0 0 15px rgba(16, 185, 129, 0.8));
1241
+ }
1242
+ }
1243
+
1244
+ /* Utility */
1245
+ .hidden {
1246
+ display: none !important;
1247
+ }
1248
+
1249
+ .flex-1 {
1250
+ flex: 1;
1251
+ }
1252
+
1253
+ /* Responsive */
1254
+ @media (max-width: 1200px) {
1255
+ .left-sidebar {
1256
+ width: 260px;
1257
+ }
1258
+ .right-panel {
1259
+ width: 320px;
1260
+ }
1261
+ .nav-center {
1262
+ display: none;
1263
+ }
1264
+ }
1265
+
1266
+ @media (max-width: 900px) {
1267
+ .left-sidebar {
1268
+ display: none;
1269
+ }
1270
+ .right-panel {
1271
+ position: absolute;
1272
+ right: 0;
1273
+ top: 0;
1274
+ bottom: 0;
1275
+ z-index: 100;
1276
+ }
1277
+ }
1278
+
1279
+ /* ========================================
1280
+ NEW FEATURES - Pan/Zoom/Drag Support
1281
+ ======================================== */
1282
+
1283
+ /* Graph Controls */
1284
+ .graph-controls {
1285
+ position: absolute;
1286
+ bottom: 20px;
1287
+ left: 20px;
1288
+ display: flex;
1289
+ gap: 8px;
1290
+ z-index: 50;
1291
+ }
1292
+
1293
+ .control-btn {
1294
+ display: flex;
1295
+ align-items: center;
1296
+ justify-content: center;
1297
+ width: 36px;
1298
+ height: 36px;
1299
+ background: rgba(30, 41, 59, 0.9);
1300
+ backdrop-filter: blur(8px);
1301
+ border: 1px solid var(--border);
1302
+ border-radius: var(--radius);
1303
+ color: var(--text-secondary);
1304
+ font-size: 1.25rem;
1305
+ font-weight: 600;
1306
+ cursor: pointer;
1307
+ transition: all var(--transition);
1308
+ }
1309
+
1310
+ .control-btn:hover {
1311
+ background: var(--bg-hover);
1312
+ color: var(--primary);
1313
+ border-color: var(--primary);
1314
+ }
1315
+
1316
+ .control-btn:active {
1317
+ transform: scale(0.95);
1318
+ }
1319
+
1320
+ /* Graph Draggable States */
1321
+ .graph-svg {
1322
+ cursor: grab;
1323
+ }
1324
+
1325
+ .graph-svg:active,
1326
+ .graph-svg.dragging {
1327
+ cursor: grabbing;
1328
+ }
1329
+
1330
+ /* Node Pulse Ring Animation */
1331
+ .node-pulse-ring {
1332
+ fill: none;
1333
+ stroke: var(--primary);
1334
+ stroke-width: 2;
1335
+ opacity: 0;
1336
+ }
1337
+
1338
+ .graph-node.directly-active .node-pulse-ring {
1339
+ animation: pulse-ring-expand 1.5s ease-out infinite;
1340
+ }
1341
+
1342
+ @keyframes pulse-ring-expand {
1343
+ 0% {
1344
+ opacity: 0.8;
1345
+ r: 30;
1346
+ }
1347
+ 100% {
1348
+ opacity: 0;
1349
+ r: 50;
1350
+ }
1351
+ }
1352
+
1353
+ /* Node Icon Background */
1354
+ .node-icon-bg {
1355
+ fill: rgba(30, 41, 59, 0.8);
1356
+ stroke: var(--border);
1357
+ stroke-width: 1;
1358
+ }
1359
+
1360
+ .graph-node.directly-active .node-icon-bg {
1361
+ fill: rgba(16, 185, 129, 0.2);
1362
+ stroke: var(--primary);
1363
+ }
1364
+
1365
+ .graph-node.changed .node-icon-bg {
1366
+ fill: rgba(234, 179, 8, 0.15);
1367
+ stroke: var(--warning);
1368
+ }
1369
+
1370
+ /* Directly Active Node Styling */
1371
+ .graph-node.directly-active .node-bg {
1372
+ stroke: var(--primary);
1373
+ stroke-width: 2;
1374
+ filter: drop-shadow(0 0 15px rgba(16, 185, 129, 0.6));
1375
+ animation: node-pulse-strong 1.5s ease-in-out infinite;
1376
+ }
1377
+
1378
+ .graph-node.directly-active .node-label {
1379
+ fill: var(--primary);
1380
+ }
1381
+
1382
+ .graph-node.directly-active .node-type {
1383
+ fill: var(--primary-dim);
1384
+ }
1385
+
1386
+ @keyframes node-pulse-strong {
1387
+ 0%, 100% {
1388
+ filter: drop-shadow(0 0 10px rgba(16, 185, 129, 0.5));
1389
+ }
1390
+ 50% {
1391
+ filter: drop-shadow(0 0 25px rgba(16, 185, 129, 0.8));
1392
+ }
1393
+ }
1394
+
1395
+ /* Tree View Enhancements */
1396
+ .tree-chevron {
1397
+ display: flex;
1398
+ align-items: center;
1399
+ justify-content: center;
1400
+ width: 16px;
1401
+ height: 16px;
1402
+ color: var(--text-muted);
1403
+ transition: transform var(--transition), color var(--transition);
1404
+ }
1405
+
1406
+ .tree-chevron.expanded {
1407
+ transform: rotate(90deg);
1408
+ }
1409
+
1410
+ .tree-item:hover .tree-chevron {
1411
+ color: var(--text-secondary);
1412
+ }
1413
+
1414
+ /* Tree Pulse Dot */
1415
+ .tree-pulse-dot {
1416
+ width: 8px;
1417
+ height: 8px;
1418
+ background: var(--primary);
1419
+ border-radius: 50%;
1420
+ animation: tree-pulse-dot-glow 1.5s ease-in-out infinite;
1421
+ flex-shrink: 0;
1422
+ }
1423
+
1424
+ @keyframes tree-pulse-dot-glow {
1425
+ 0%, 100% {
1426
+ transform: scale(1);
1427
+ box-shadow: 0 0 4px rgba(16, 185, 129, 0.6);
1428
+ }
1429
+ 50% {
1430
+ transform: scale(1.3);
1431
+ box-shadow: 0 0 12px rgba(16, 185, 129, 0.9);
1432
+ }
1433
+ }
1434
+
1435
+ /* Tree Item Directly Active */
1436
+ .tree-item.directly-active {
1437
+ background: rgba(16, 185, 129, 0.2);
1438
+ border-left: 3px solid var(--primary);
1439
+ padding-left: 5px;
1440
+ }
1441
+
1442
+ .tree-item.directly-active .tree-item-name {
1443
+ color: var(--primary);
1444
+ font-weight: 600;
1445
+ }
1446
+
1447
+ /* ========================================
1448
+ SUNBURST LEGEND
1449
+ ======================================== */
1450
+
1451
+ .sunburst-legend {
1452
+ position: absolute;
1453
+ bottom: 20px;
1454
+ left: 20px;
1455
+ padding: 16px;
1456
+ background: rgba(30, 41, 59, 0.95);
1457
+ backdrop-filter: blur(12px);
1458
+ border: 1px solid var(--border);
1459
+ border-radius: var(--radius);
1460
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
1461
+ max-width: 220px;
1462
+ z-index: 50;
1463
+ }
1464
+
1465
+ .sunburst-legend h4 {
1466
+ font-family: var(--font-display);
1467
+ font-size: 0.7rem;
1468
+ font-weight: 600;
1469
+ letter-spacing: 0.1em;
1470
+ color: var(--text-primary);
1471
+ margin-bottom: 12px;
1472
+ padding-bottom: 8px;
1473
+ border-bottom: 1px solid var(--border);
1474
+ }
1475
+
1476
+ .legend-items {
1477
+ display: flex;
1478
+ flex-direction: column;
1479
+ gap: 8px;
1480
+ }
1481
+
1482
+ .legend-row {
1483
+ display: flex;
1484
+ align-items: center;
1485
+ gap: 10px;
1486
+ font-size: 0.75rem;
1487
+ color: var(--text-secondary);
1488
+ }
1489
+
1490
+ .legend-swatch {
1491
+ width: 14px;
1492
+ height: 14px;
1493
+ border-radius: 3px;
1494
+ flex-shrink: 0;
1495
+ }
1496
+
1497
+ .legend-divider {
1498
+ height: 1px;
1499
+ background: var(--border);
1500
+ margin: 8px 0;
1501
+ opacity: 0.5;
1502
+ }
1503
+
1504
+ /* Pulse Swatch Animation */
1505
+ .pulse-swatch {
1506
+ width: 14px;
1507
+ height: 14px;
1508
+ background: var(--primary);
1509
+ border-radius: 50%;
1510
+ animation: pulse-swatch-glow 1.5s ease-in-out infinite;
1511
+ flex-shrink: 0;
1512
+ }
1513
+
1514
+ @keyframes pulse-swatch-glow {
1515
+ 0%, 100% {
1516
+ transform: scale(1);
1517
+ box-shadow: 0 0 4px rgba(16, 185, 129, 0.5);
1518
+ }
1519
+ 50% {
1520
+ transform: scale(1.15);
1521
+ box-shadow: 0 0 12px rgba(16, 185, 129, 0.8);
1522
+ }
1523
+ }
1524
+
1525
+ /* Sunburst Directly Active Arc (green pulse) */
1526
+ .sunburst-arc.directly-active {
1527
+ animation: arc-pulse-green 1s ease-in-out infinite;
1528
+ }
1529
+
1530
+ @keyframes arc-pulse-green {
1531
+ 0%, 100% {
1532
+ opacity: 1;
1533
+ filter: brightness(1.1) drop-shadow(0 0 8px rgba(16, 185, 129, 0.7));
1534
+ }
1535
+ 50% {
1536
+ opacity: 0.9;
1537
+ filter: brightness(1.4) drop-shadow(0 0 20px rgba(16, 185, 129, 1));
1538
+ }
1539
+ }
1540
+
1541
+ /* Sunburst Changed Arc (yellow pulse) */
1542
+ .sunburst-arc.changed {
1543
+ animation: arc-pulse-yellow 1.5s ease-in-out infinite;
1544
+ }
1545
+
1546
+ @keyframes arc-pulse-yellow {
1547
+ 0%, 100% {
1548
+ opacity: 1;
1549
+ filter: brightness(1) drop-shadow(0 0 6px rgba(234, 179, 8, 0.6));
1550
+ }
1551
+ 50% {
1552
+ opacity: 0.9;
1553
+ filter: brightness(1.3) drop-shadow(0 0 18px rgba(234, 179, 8, 1));
1554
+ }
1555
+ }
1556
+
1557
+ /* Legend swatches with glow */
1558
+ .legend-swatch.yellow-glow {
1559
+ box-shadow: 0 0 8px rgba(234, 179, 8, 0.8);
1560
+ animation: swatch-yellow-pulse 1.5s ease-in-out infinite;
1561
+ }
1562
+
1563
+ @keyframes swatch-yellow-pulse {
1564
+ 0%, 100% { box-shadow: 0 0 4px rgba(234, 179, 8, 0.6); }
1565
+ 50% { box-shadow: 0 0 12px rgba(234, 179, 8, 1); }
1566
+ }
1567
+
1568
+ .legend-swatch.green-glow {
1569
+ box-shadow: 0 0 8px rgba(16, 185, 129, 0.8);
1570
+ animation: swatch-green-pulse 1s ease-in-out infinite;
1571
+ }
1572
+
1573
+ @keyframes swatch-green-pulse {
1574
+ 0%, 100% { box-shadow: 0 0 4px rgba(16, 185, 129, 0.6); }
1575
+ 50% { box-shadow: 0 0 12px rgba(16, 185, 129, 1); }
1576
+ }
1577
+
1578
+ /* Sunburst Center Text */
1579
+ .sunburst-center-text {
1580
+ pointer-events: none;
1581
+ }
1582
+
1583
+ .sunburst-center-text text {
1584
+ font-family: var(--font-display);
1585
+ font-weight: 600;
1586
+ fill: var(--text-primary);
1587
+ }
1588
+
1589
+ /* ========================================
1590
+ SVG FILTERS FOR GLOW EFFECTS
1591
+ ======================================== */
1592
+
1593
+ /* These are defined in the SVG but we can style them here */
1594
+ .glow-filter {
1595
+ filter: url(#glow);
1596
+ }
1597
+
1598
+ /* Activity Item Active Pulse */
1599
+ .activity-item.active {
1600
+ border-color: var(--primary);
1601
+ background: rgba(16, 185, 129, 0.1);
1602
+ animation: activity-pulse 2s ease-in-out infinite;
1603
+ }
1604
+
1605
+ @keyframes activity-pulse {
1606
+ 0%, 100% {
1607
+ box-shadow: 0 0 8px rgba(16, 185, 129, 0.2);
1608
+ }
1609
+ 50% {
1610
+ box-shadow: 0 0 20px rgba(16, 185, 129, 0.4);
1611
+ }
1612
+ }
1613
+
1614
+ /* ========================================
1615
+ IMPROVED NODE HOVER STATES
1616
+ ======================================== */
1617
+
1618
+ .graph-node:hover .node-bg {
1619
+ fill: var(--bg-hover);
1620
+ stroke-width: 1.5;
1621
+ }
1622
+
1623
+ .graph-node:hover .node-label {
1624
+ fill: var(--text-primary);
1625
+ }
1626
+
1627
+ /* Edge animation when connected to active node */
1628
+ .graph-edge.parent-active {
1629
+ stroke: rgba(16, 185, 129, 0.5);
1630
+ stroke-width: 2;
1631
+ stroke-dasharray: 8 4;
1632
+ animation: edge-flow 1.5s linear infinite;
1633
+ }
1634
+
1635
+ /* ========================================
1636
+ TOOLTIP IMPROVEMENTS
1637
+ ======================================== */
1638
+
1639
+ .tooltip.visible {
1640
+ display: block;
1641
+ animation: tooltip-fade-in 0.15s ease-out;
1642
+ }
1643
+
1644
+ @keyframes tooltip-fade-in {
1645
+ from {
1646
+ opacity: 0;
1647
+ transform: translateY(4px);
1648
+ }
1649
+ to {
1650
+ opacity: 1;
1651
+ transform: translateY(0);
1652
+ }
1653
+ }
1654
+
1655
+ .tooltip .tooltip-status {
1656
+ display: inline-flex;
1657
+ align-items: center;
1658
+ gap: 6px;
1659
+ margin-top: 6px;
1660
+ padding: 4px 8px;
1661
+ background: rgba(16, 185, 129, 0.15);
1662
+ border-radius: 4px;
1663
+ font-size: 0.7rem;
1664
+ color: var(--primary);
1665
+ }
1666
+
1667
+ .tooltip .tooltip-status.changed {
1668
+ background: rgba(234, 179, 8, 0.15);
1669
+ color: var(--warning);
1670
+ }
1671
+
1672
+ /* ========================================
1673
+ FILE NODES (compact files in graph)
1674
+ ======================================== */
1675
+
1676
+ .graph-node.file-node .node-bg {
1677
+ fill: rgba(30, 41, 59, 0.6);
1678
+ stroke-width: 1;
1679
+ }
1680
+
1681
+ .graph-node.file-node.changed .node-bg {
1682
+ fill: rgba(234, 179, 8, 0.15);
1683
+ stroke: var(--warning);
1684
+ stroke-width: 2;
1685
+ }
1686
+
1687
+ .graph-node.file-node .node-label {
1688
+ font-size: 10px;
1689
+ }
1690
+
1691
+ /* Change indicator dot */
1692
+ .change-indicator {
1693
+ animation: change-pulse 2s ease-in-out infinite;
1694
+ }
1695
+
1696
+ @keyframes change-pulse {
1697
+ 0%, 100% {
1698
+ opacity: 1;
1699
+ }
1700
+ 50% {
1701
+ opacity: 0.5;
1702
+ }
1703
+ }
1704
+
1705
+ /* ========================================
1706
+ TREE ACTIVE DOT
1707
+ ======================================== */
1708
+
1709
+ .tree-active-dot {
1710
+ width: 6px;
1711
+ height: 6px;
1712
+ background: var(--primary-dim);
1713
+ border-radius: 50%;
1714
+ opacity: 0.7;
1715
+ flex-shrink: 0;
1716
+ margin-left: auto;
1717
+ }
1718
+
1719
+ /* ========================================
1720
+ MUTED SWATCH FOR LEGEND
1721
+ ======================================== */
1722
+
1723
+ .muted-swatch {
1724
+ border: 1px dashed var(--border);
1725
+ }