systemlens 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.
package/web/style.css ADDED
@@ -0,0 +1,886 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ SystemLens — Web Dashboard Stylesheet
3
+ Premium dark-mode design with glassmorphism and micro-animations
4
+ ═══════════════════════════════════════════════════════════════ */
5
+
6
+ /* ─── CSS Variables (Design Tokens) ─── */
7
+ :root {
8
+ /* Core Palette */
9
+ --bg-primary: #0a0a0f;
10
+ --bg-secondary: #111118;
11
+ --bg-card: rgba(17, 17, 24, 0.7);
12
+ --bg-card-hover: rgba(25, 25, 38, 0.85);
13
+ --bg-glass: rgba(255, 255, 255, 0.03);
14
+
15
+ /* Borders */
16
+ --border-subtle: rgba(255, 255, 255, 0.06);
17
+ --border-accent: rgba(99, 102, 241, 0.3);
18
+
19
+ /* Text */
20
+ --text-primary: #e4e4e7;
21
+ --text-secondary: #a1a1aa;
22
+ --text-muted: #71717a;
23
+ --text-accent: #818cf8;
24
+
25
+ /* Status Colors */
26
+ --green: #22c55e;
27
+ --green-glow: rgba(34, 197, 94, 0.15);
28
+ --yellow: #eab308;
29
+ --yellow-glow: rgba(234, 179, 8, 0.15);
30
+ --orange: #f97316;
31
+ --orange-glow: rgba(249, 115, 22, 0.15);
32
+ --red: #ef4444;
33
+ --red-glow: rgba(239, 68, 68, 0.15);
34
+ --blue: #3b82f6;
35
+ --purple: #8b5cf6;
36
+ --cyan: #06b6d4;
37
+ --indigo: #6366f1;
38
+
39
+ /* Gradients */
40
+ --gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6);
41
+ --gradient-success: linear-gradient(135deg, #22c55e, #06b6d4);
42
+ --gradient-warning: linear-gradient(135deg, #eab308, #f97316);
43
+ --gradient-danger: linear-gradient(135deg, #ef4444, #f97316);
44
+
45
+ /* Shadows */
46
+ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3);
47
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);
48
+ --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
49
+ --shadow-glow-indigo: 0 0 30px rgba(99, 102, 241, 0.15);
50
+
51
+ /* Spacing */
52
+ --space-xs: 4px;
53
+ --space-sm: 8px;
54
+ --space-md: 16px;
55
+ --space-lg: 24px;
56
+ --space-xl: 32px;
57
+ --space-2xl: 48px;
58
+
59
+ /* Radius */
60
+ --radius-sm: 8px;
61
+ --radius-md: 12px;
62
+ --radius-lg: 16px;
63
+ --radius-xl: 20px;
64
+
65
+ /* Typography */
66
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
67
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
68
+
69
+ /* Transitions */
70
+ --transition-fast: 0.15s ease;
71
+ --transition-normal: 0.25s ease;
72
+ --transition-slow: 0.4s cubic-bezier(0.4, 0, 0.2, 1);
73
+ }
74
+
75
+ /* ─── Reset & Base ─── */
76
+ *, *::before, *::after {
77
+ margin: 0;
78
+ padding: 0;
79
+ box-sizing: border-box;
80
+ }
81
+
82
+ html {
83
+ font-size: 14px;
84
+ scroll-behavior: smooth;
85
+ }
86
+
87
+ body {
88
+ font-family: var(--font-sans);
89
+ background: var(--bg-primary);
90
+ color: var(--text-primary);
91
+ min-height: 100vh;
92
+ overflow-x: hidden;
93
+ line-height: 1.6;
94
+ position: relative;
95
+ }
96
+
97
+ /* ─── Background Glow Effects ─── */
98
+ .bg-glow {
99
+ position: fixed;
100
+ border-radius: 50%;
101
+ filter: blur(120px);
102
+ opacity: 0.4;
103
+ pointer-events: none;
104
+ z-index: 0;
105
+ animation: glowPulse 8s ease-in-out infinite alternate;
106
+ }
107
+
108
+ .bg-glow-1 {
109
+ width: 500px;
110
+ height: 500px;
111
+ background: radial-gradient(circle, rgba(99, 102, 241, 0.12) 0%, transparent 70%);
112
+ top: -200px;
113
+ right: -100px;
114
+ }
115
+
116
+ .bg-glow-2 {
117
+ width: 400px;
118
+ height: 400px;
119
+ background: radial-gradient(circle, rgba(139, 92, 246, 0.08) 0%, transparent 70%);
120
+ bottom: 200px;
121
+ left: -100px;
122
+ animation-delay: 3s;
123
+ }
124
+
125
+ .bg-glow-3 {
126
+ width: 300px;
127
+ height: 300px;
128
+ background: radial-gradient(circle, rgba(6, 182, 212, 0.06) 0%, transparent 70%);
129
+ top: 50%;
130
+ left: 50%;
131
+ transform: translate(-50%, -50%);
132
+ animation-delay: 5s;
133
+ }
134
+
135
+ @keyframes glowPulse {
136
+ 0% { opacity: 0.3; transform: scale(1); }
137
+ 100% { opacity: 0.5; transform: scale(1.1); }
138
+ }
139
+
140
+ /* ─── Header ─── */
141
+ .header {
142
+ position: sticky;
143
+ top: 0;
144
+ z-index: 100;
145
+ display: flex;
146
+ justify-content: space-between;
147
+ align-items: center;
148
+ padding: var(--space-md) var(--space-xl);
149
+ background: rgba(10, 10, 15, 0.8);
150
+ backdrop-filter: blur(20px);
151
+ -webkit-backdrop-filter: blur(20px);
152
+ border-bottom: 1px solid var(--border-subtle);
153
+ }
154
+
155
+ .header-left {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: var(--space-lg);
159
+ }
160
+
161
+ .logo {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: var(--space-sm);
165
+ }
166
+
167
+ .logo-icon {
168
+ font-size: 1.6rem;
169
+ animation: logoFloat 3s ease-in-out infinite;
170
+ }
171
+
172
+ @keyframes logoFloat {
173
+ 0%, 100% { transform: translateY(0); }
174
+ 50% { transform: translateY(-3px); }
175
+ }
176
+
177
+ .logo-text {
178
+ font-size: 1.4rem;
179
+ font-weight: 800;
180
+ letter-spacing: -0.5px;
181
+ color: var(--text-primary);
182
+ }
183
+
184
+ .logo-accent {
185
+ background: var(--gradient-primary);
186
+ -webkit-background-clip: text;
187
+ -webkit-text-fill-color: transparent;
188
+ background-clip: text;
189
+ }
190
+
191
+ .header-tagline {
192
+ font-size: 0.78rem;
193
+ color: var(--text-muted);
194
+ font-weight: 400;
195
+ }
196
+
197
+ .header-right {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: var(--space-lg);
201
+ }
202
+
203
+ .connection-status {
204
+ display: flex;
205
+ align-items: center;
206
+ gap: 6px;
207
+ font-size: 0.78rem;
208
+ color: var(--text-muted);
209
+ }
210
+
211
+ .status-dot {
212
+ width: 8px;
213
+ height: 8px;
214
+ border-radius: 50%;
215
+ background: var(--yellow);
216
+ animation: pulse 2s ease-in-out infinite;
217
+ }
218
+
219
+ .status-dot.connected {
220
+ background: var(--green);
221
+ }
222
+
223
+ .status-dot.disconnected {
224
+ background: var(--red);
225
+ animation: none;
226
+ }
227
+
228
+ @keyframes pulse {
229
+ 0%, 100% { opacity: 1; }
230
+ 50% { opacity: 0.4; }
231
+ }
232
+
233
+ .last-update {
234
+ font-family: var(--font-mono);
235
+ font-size: 0.78rem;
236
+ color: var(--text-muted);
237
+ background: var(--bg-glass);
238
+ padding: 4px 10px;
239
+ border-radius: 6px;
240
+ border: 1px solid var(--border-subtle);
241
+ }
242
+
243
+ /* ─── Health Banner ─── */
244
+ .health-banner {
245
+ margin: var(--space-lg) var(--space-xl);
246
+ padding: var(--space-lg) var(--space-xl);
247
+ border-radius: var(--radius-lg);
248
+ background: var(--bg-card);
249
+ border: 1px solid var(--border-subtle);
250
+ backdrop-filter: blur(10px);
251
+ transition: all var(--transition-slow);
252
+ position: relative;
253
+ z-index: 1;
254
+ overflow: hidden;
255
+ }
256
+
257
+ .health-banner::before {
258
+ content: '';
259
+ position: absolute;
260
+ top: 0;
261
+ left: 0;
262
+ right: 0;
263
+ height: 3px;
264
+ background: var(--gradient-primary);
265
+ transition: background var(--transition-slow);
266
+ }
267
+
268
+ .health-banner.excellent::before { background: var(--gradient-success); }
269
+ .health-banner.good::before { background: var(--gradient-primary); }
270
+ .health-banner.stressed::before { background: var(--gradient-warning); }
271
+ .health-banner.critical::before { background: var(--gradient-danger); }
272
+
273
+ .health-banner.excellent { border-color: rgba(34, 197, 94, 0.2); }
274
+ .health-banner.good { border-color: rgba(99, 102, 241, 0.2); }
275
+ .health-banner.stressed { border-color: rgba(249, 115, 22, 0.2); }
276
+ .health-banner.critical {
277
+ border-color: rgba(239, 68, 68, 0.2);
278
+ animation: criticalPulse 2s ease-in-out infinite;
279
+ }
280
+
281
+ @keyframes criticalPulse {
282
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
283
+ 50% { box-shadow: 0 0 20px 2px rgba(239, 68, 68, 0.1); }
284
+ }
285
+
286
+ .health-content {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: var(--space-md);
290
+ }
291
+
292
+ .health-emoji {
293
+ font-size: 2.2rem;
294
+ transition: transform var(--transition-normal);
295
+ }
296
+
297
+ .health-banner:hover .health-emoji {
298
+ transform: scale(1.15);
299
+ }
300
+
301
+ .health-label {
302
+ font-size: 1.1rem;
303
+ font-weight: 700;
304
+ margin-bottom: 2px;
305
+ }
306
+
307
+ .health-desc {
308
+ font-size: 0.85rem;
309
+ color: var(--text-secondary);
310
+ }
311
+
312
+ .health-headline {
313
+ margin-top: var(--space-md);
314
+ padding-top: var(--space-md);
315
+ border-top: 1px solid var(--border-subtle);
316
+ font-size: 0.92rem;
317
+ color: var(--text-primary);
318
+ font-weight: 500;
319
+ }
320
+
321
+ /* ─── Dashboard Grid ─── */
322
+ .dashboard {
323
+ padding: 0 var(--space-xl) var(--space-xl);
324
+ max-width: 1440px;
325
+ margin: 0 auto;
326
+ position: relative;
327
+ z-index: 1;
328
+ }
329
+
330
+ /* ─── Metrics Row ─── */
331
+ .metrics-row {
332
+ display: grid;
333
+ grid-template-columns: repeat(4, 1fr);
334
+ gap: var(--space-md);
335
+ margin-bottom: var(--space-lg);
336
+ }
337
+
338
+ .metric-card {
339
+ background: var(--bg-card);
340
+ border: 1px solid var(--border-subtle);
341
+ border-radius: var(--radius-md);
342
+ padding: var(--space-lg);
343
+ backdrop-filter: blur(10px);
344
+ transition: all var(--transition-normal);
345
+ position: relative;
346
+ overflow: hidden;
347
+ }
348
+
349
+ .metric-card:hover {
350
+ background: var(--bg-card-hover);
351
+ border-color: var(--border-accent);
352
+ transform: translateY(-2px);
353
+ box-shadow: var(--shadow-glow-indigo);
354
+ }
355
+
356
+ .metric-header {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: var(--space-sm);
360
+ margin-bottom: var(--space-sm);
361
+ }
362
+
363
+ .metric-icon {
364
+ font-size: 1.1rem;
365
+ }
366
+
367
+ .metric-title {
368
+ font-size: 0.78rem;
369
+ font-weight: 600;
370
+ text-transform: uppercase;
371
+ letter-spacing: 0.5px;
372
+ color: var(--text-secondary);
373
+ }
374
+
375
+ .metric-value {
376
+ font-size: 2rem;
377
+ font-weight: 800;
378
+ font-family: var(--font-mono);
379
+ margin-bottom: var(--space-sm);
380
+ transition: color var(--transition-fast);
381
+ }
382
+
383
+ .metric-value.green { color: var(--green); }
384
+ .metric-value.yellow { color: var(--yellow); }
385
+ .metric-value.orange { color: var(--orange); }
386
+ .metric-value.red { color: var(--red); }
387
+
388
+ .metric-bar-container {
389
+ height: 6px;
390
+ background: rgba(255, 255, 255, 0.05);
391
+ border-radius: 3px;
392
+ overflow: hidden;
393
+ margin-bottom: var(--space-sm);
394
+ }
395
+
396
+ .metric-bar {
397
+ height: 100%;
398
+ border-radius: 3px;
399
+ transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1), background var(--transition-fast);
400
+ background: var(--gradient-success);
401
+ }
402
+
403
+ .metric-bar.warning { background: var(--gradient-warning); }
404
+ .metric-bar.critical { background: var(--gradient-danger); }
405
+
406
+ .metric-details {
407
+ font-size: 0.72rem;
408
+ color: var(--text-muted);
409
+ font-family: var(--font-mono);
410
+ }
411
+
412
+ .metric-sub {
413
+ display: flex;
414
+ gap: var(--space-sm);
415
+ margin-top: var(--space-sm);
416
+ }
417
+
418
+ .sub-tag {
419
+ font-size: 0.7rem;
420
+ padding: 2px 8px;
421
+ border-radius: 4px;
422
+ background: rgba(255, 255, 255, 0.04);
423
+ color: var(--text-muted);
424
+ font-family: var(--font-mono);
425
+ }
426
+
427
+ .sub-tag.alert {
428
+ background: rgba(239, 68, 68, 0.1);
429
+ color: var(--red);
430
+ }
431
+
432
+ .metric-sparkline {
433
+ margin-top: var(--space-sm);
434
+ height: 30px;
435
+ display: flex;
436
+ align-items: flex-end;
437
+ gap: 2px;
438
+ }
439
+
440
+ .sparkline-bar {
441
+ flex: 1;
442
+ min-width: 2px;
443
+ max-width: 6px;
444
+ border-radius: 1px 1px 0 0;
445
+ transition: height 0.3s ease;
446
+ opacity: 0.7;
447
+ }
448
+
449
+ /* ─── Two Column Layout ─── */
450
+ .two-columns {
451
+ display: grid;
452
+ grid-template-columns: 1fr 1fr;
453
+ gap: var(--space-lg);
454
+ }
455
+
456
+ .column-left, .column-right {
457
+ display: flex;
458
+ flex-direction: column;
459
+ gap: var(--space-lg);
460
+ }
461
+
462
+ /* ─── Panels ─── */
463
+ .panel {
464
+ background: var(--bg-card);
465
+ border: 1px solid var(--border-subtle);
466
+ border-radius: var(--radius-md);
467
+ backdrop-filter: blur(10px);
468
+ overflow: hidden;
469
+ transition: all var(--transition-normal);
470
+ }
471
+
472
+ .panel:hover {
473
+ border-color: rgba(255, 255, 255, 0.08);
474
+ }
475
+
476
+ .panel-header {
477
+ display: flex;
478
+ align-items: center;
479
+ gap: var(--space-sm);
480
+ padding: var(--space-md) var(--space-lg);
481
+ border-bottom: 1px solid var(--border-subtle);
482
+ background: rgba(255, 255, 255, 0.01);
483
+ }
484
+
485
+ .panel-icon {
486
+ font-size: 1rem;
487
+ }
488
+
489
+ .panel-title {
490
+ font-size: 0.85rem;
491
+ font-weight: 700;
492
+ letter-spacing: 0.3px;
493
+ flex: 1;
494
+ }
495
+
496
+ .panel-body {
497
+ padding: var(--space-lg);
498
+ }
499
+
500
+ .placeholder-text {
501
+ color: var(--text-muted);
502
+ font-style: italic;
503
+ font-size: 0.85rem;
504
+ }
505
+
506
+ /* ─── Process Tabs ─── */
507
+ .panel-tabs {
508
+ display: flex;
509
+ gap: 4px;
510
+ background: rgba(255, 255, 255, 0.03);
511
+ border-radius: 6px;
512
+ padding: 3px;
513
+ }
514
+
515
+ .tab {
516
+ font-family: var(--font-sans);
517
+ font-size: 0.72rem;
518
+ font-weight: 500;
519
+ padding: 4px 12px;
520
+ border: none;
521
+ border-radius: 4px;
522
+ background: transparent;
523
+ color: var(--text-muted);
524
+ cursor: pointer;
525
+ transition: all var(--transition-fast);
526
+ }
527
+
528
+ .tab:hover {
529
+ color: var(--text-secondary);
530
+ }
531
+
532
+ .tab.active {
533
+ background: rgba(99, 102, 241, 0.15);
534
+ color: var(--text-accent);
535
+ }
536
+
537
+ /* ─── Process Table ─── */
538
+ .process-table {
539
+ width: 100%;
540
+ }
541
+
542
+ .table-placeholder {
543
+ text-align: center;
544
+ color: var(--text-muted);
545
+ padding: var(--space-xl);
546
+ font-size: 0.85rem;
547
+ }
548
+
549
+ .process-row {
550
+ display: grid;
551
+ grid-template-columns: 55px 1fr 110px 65px 65px 80px;
552
+ align-items: center;
553
+ padding: var(--space-sm) var(--space-md);
554
+ border-radius: var(--radius-sm);
555
+ transition: background var(--transition-fast);
556
+ font-size: 0.8rem;
557
+ gap: var(--space-sm);
558
+ }
559
+
560
+ .process-row:hover {
561
+ background: rgba(255, 255, 255, 0.03);
562
+ }
563
+
564
+ .process-row.header {
565
+ font-weight: 600;
566
+ color: var(--text-muted);
567
+ text-transform: uppercase;
568
+ font-size: 0.68rem;
569
+ letter-spacing: 0.5px;
570
+ border-bottom: 1px solid var(--border-subtle);
571
+ margin-bottom: var(--space-xs);
572
+ }
573
+
574
+ .process-pid {
575
+ font-family: var(--font-mono);
576
+ font-size: 0.72rem;
577
+ color: var(--text-muted);
578
+ }
579
+
580
+ .process-name {
581
+ font-weight: 600;
582
+ color: var(--text-primary);
583
+ overflow: hidden;
584
+ text-overflow: ellipsis;
585
+ white-space: nowrap;
586
+ }
587
+
588
+ .process-category {
589
+ font-size: 0.72rem;
590
+ padding: 2px 8px;
591
+ border-radius: 4px;
592
+ background: rgba(255, 255, 255, 0.04);
593
+ text-align: center;
594
+ white-space: nowrap;
595
+ overflow: hidden;
596
+ text-overflow: ellipsis;
597
+ }
598
+
599
+ .process-cpu, .process-mem {
600
+ font-family: var(--font-mono);
601
+ font-weight: 600;
602
+ text-align: right;
603
+ }
604
+
605
+ .process-mem-size {
606
+ font-family: var(--font-mono);
607
+ font-size: 0.72rem;
608
+ color: var(--text-muted);
609
+ text-align: right;
610
+ }
611
+
612
+ /* ─── Explanation Panel ─── */
613
+ .explanation-panel .panel-body p {
614
+ color: var(--text-secondary);
615
+ font-size: 0.85rem;
616
+ line-height: 1.7;
617
+ margin-bottom: var(--space-md);
618
+ }
619
+
620
+ .explanation-panel .panel-body p:last-child {
621
+ margin-bottom: 0;
622
+ }
623
+
624
+ /* ─── Cause & Effect ─── */
625
+ .cause-chain {
626
+ padding: var(--space-md);
627
+ border-radius: var(--radius-sm);
628
+ background: rgba(255, 255, 255, 0.02);
629
+ border-left: 3px solid var(--indigo);
630
+ margin-bottom: var(--space-md);
631
+ transition: background var(--transition-fast);
632
+ }
633
+
634
+ .cause-chain:hover {
635
+ background: rgba(255, 255, 255, 0.04);
636
+ }
637
+
638
+ .cause-chain:last-child {
639
+ margin-bottom: 0;
640
+ }
641
+
642
+ .cause-label {
643
+ font-size: 0.72rem;
644
+ font-weight: 700;
645
+ text-transform: uppercase;
646
+ letter-spacing: 0.5px;
647
+ margin-bottom: 2px;
648
+ }
649
+
650
+ .cause-label.cause { color: var(--blue); }
651
+ .cause-label.effect { color: var(--yellow); }
652
+ .cause-label.consequence { color: var(--red); }
653
+
654
+ .cause-text {
655
+ font-size: 0.82rem;
656
+ color: var(--text-secondary);
657
+ margin-bottom: var(--space-sm);
658
+ }
659
+
660
+ /* ─── Dev Insights ─── */
661
+ .dev-insight {
662
+ display: flex;
663
+ align-items: flex-start;
664
+ gap: var(--space-sm);
665
+ padding: var(--space-sm) var(--space-md);
666
+ border-radius: var(--radius-sm);
667
+ margin-bottom: var(--space-sm);
668
+ background: rgba(139, 92, 246, 0.05);
669
+ border: 1px solid rgba(139, 92, 246, 0.1);
670
+ }
671
+
672
+ .dev-insight:last-child {
673
+ margin-bottom: 0;
674
+ }
675
+
676
+ .dev-insight-emoji {
677
+ font-size: 1rem;
678
+ flex-shrink: 0;
679
+ }
680
+
681
+ .dev-insight-text {
682
+ font-size: 0.82rem;
683
+ color: var(--text-secondary);
684
+ line-height: 1.5;
685
+ }
686
+
687
+ /* ─── Patterns ─── */
688
+ .pattern-item {
689
+ display: flex;
690
+ align-items: flex-start;
691
+ gap: var(--space-sm);
692
+ padding: var(--space-sm) 0;
693
+ font-size: 0.82rem;
694
+ color: var(--text-secondary);
695
+ }
696
+
697
+ /* ─── Suggestions ─── */
698
+ .suggestion-item {
699
+ padding: var(--space-md);
700
+ border-radius: var(--radius-sm);
701
+ background: rgba(255, 255, 255, 0.02);
702
+ border: 1px solid var(--border-subtle);
703
+ margin-bottom: var(--space-sm);
704
+ transition: all var(--transition-fast);
705
+ }
706
+
707
+ .suggestion-item:hover {
708
+ background: rgba(255, 255, 255, 0.04);
709
+ border-color: rgba(255, 255, 255, 0.1);
710
+ transform: translateX(3px);
711
+ }
712
+
713
+ .suggestion-item:last-child {
714
+ margin-bottom: 0;
715
+ }
716
+
717
+ .suggestion-header {
718
+ display: flex;
719
+ align-items: center;
720
+ gap: var(--space-sm);
721
+ margin-bottom: 6px;
722
+ }
723
+
724
+ .suggestion-emoji {
725
+ font-size: 1rem;
726
+ }
727
+
728
+ .suggestion-action {
729
+ font-weight: 600;
730
+ font-size: 0.85rem;
731
+ color: var(--text-primary);
732
+ flex: 1;
733
+ }
734
+
735
+ .suggestion-impact {
736
+ font-size: 0.65rem;
737
+ font-weight: 700;
738
+ text-transform: uppercase;
739
+ letter-spacing: 0.5px;
740
+ padding: 2px 8px;
741
+ border-radius: 4px;
742
+ }
743
+
744
+ .suggestion-impact.critical {
745
+ background: rgba(239, 68, 68, 0.15);
746
+ color: var(--red);
747
+ }
748
+
749
+ .suggestion-impact.high {
750
+ background: rgba(234, 179, 8, 0.15);
751
+ color: var(--yellow);
752
+ }
753
+
754
+ .suggestion-impact.medium {
755
+ background: rgba(6, 182, 212, 0.15);
756
+ color: var(--cyan);
757
+ }
758
+
759
+ .suggestion-impact.low {
760
+ background: rgba(255, 255, 255, 0.05);
761
+ color: var(--text-muted);
762
+ }
763
+
764
+ .suggestion-reason {
765
+ font-size: 0.78rem;
766
+ color: var(--text-muted);
767
+ line-height: 1.5;
768
+ }
769
+
770
+ .suggestion-meta {
771
+ display: flex;
772
+ gap: var(--space-md);
773
+ margin-top: 6px;
774
+ font-size: 0.68rem;
775
+ color: var(--text-muted);
776
+ }
777
+
778
+ .no-suggestions {
779
+ text-align: center;
780
+ padding: var(--space-xl);
781
+ color: var(--green);
782
+ font-size: 0.92rem;
783
+ }
784
+
785
+ .no-suggestions-emoji {
786
+ font-size: 2rem;
787
+ display: block;
788
+ margin-bottom: var(--space-sm);
789
+ }
790
+
791
+ /* ─── Footer ─── */
792
+ .footer {
793
+ text-align: center;
794
+ padding: var(--space-lg) var(--space-xl);
795
+ font-size: 0.72rem;
796
+ color: var(--text-muted);
797
+ border-top: 1px solid var(--border-subtle);
798
+ margin-top: var(--space-xl);
799
+ display: flex;
800
+ justify-content: center;
801
+ align-items: center;
802
+ gap: var(--space-md);
803
+ }
804
+
805
+ .footer-sep {
806
+ color: var(--border-subtle);
807
+ }
808
+
809
+ /* ─── Utility Colors for Values ─── */
810
+ .color-green { color: var(--green) !important; }
811
+ .color-yellow { color: var(--yellow) !important; }
812
+ .color-orange { color: var(--orange) !important; }
813
+ .color-red { color: var(--red) !important; }
814
+
815
+ /* ─── Responsive ─── */
816
+ @media (max-width: 1100px) {
817
+ .metrics-row {
818
+ grid-template-columns: repeat(2, 1fr);
819
+ }
820
+ .two-columns {
821
+ grid-template-columns: 1fr;
822
+ }
823
+ }
824
+
825
+ @media (max-width: 600px) {
826
+ .metrics-row {
827
+ grid-template-columns: 1fr;
828
+ }
829
+ .header {
830
+ flex-direction: column;
831
+ gap: var(--space-sm);
832
+ padding: var(--space-md);
833
+ }
834
+ .header-right {
835
+ width: 100%;
836
+ justify-content: space-between;
837
+ }
838
+ .health-banner {
839
+ margin: var(--space-md);
840
+ padding: var(--space-md);
841
+ }
842
+ .dashboard {
843
+ padding: 0 var(--space-md) var(--space-md);
844
+ }
845
+ .process-row {
846
+ grid-template-columns: 45px 1fr 60px 60px;
847
+ font-size: 0.72rem;
848
+ }
849
+ .process-category, .process-mem-size {
850
+ display: none;
851
+ }
852
+ }
853
+
854
+ /* ─── Animations ─── */
855
+ @keyframes fadeIn {
856
+ from { opacity: 0; transform: translateY(8px); }
857
+ to { opacity: 1; transform: translateY(0); }
858
+ }
859
+
860
+ .metric-card {
861
+ animation: fadeIn 0.5s ease forwards;
862
+ }
863
+
864
+ .metric-card:nth-child(2) { animation-delay: 0.05s; }
865
+ .metric-card:nth-child(3) { animation-delay: 0.1s; }
866
+ .metric-card:nth-child(4) { animation-delay: 0.15s; }
867
+
868
+ .panel {
869
+ animation: fadeIn 0.5s ease forwards;
870
+ animation-delay: 0.2s;
871
+ opacity: 0;
872
+ }
873
+
874
+ .panel:nth-child(2) { animation-delay: 0.25s; }
875
+ .panel:nth-child(3) { animation-delay: 0.3s; }
876
+
877
+ /* ─── Scrollbar ─── */
878
+ ::-webkit-scrollbar { width: 6px; }
879
+ ::-webkit-scrollbar-track { background: transparent; }
880
+ ::-webkit-scrollbar-thumb {
881
+ background: rgba(255, 255, 255, 0.1);
882
+ border-radius: 3px;
883
+ }
884
+ ::-webkit-scrollbar-thumb:hover {
885
+ background: rgba(255, 255, 255, 0.15);
886
+ }