@teamlens/web 0.1.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,1019 @@
1
+ /* ============================================================
2
+ TeamLens Dashboard — Dark Theme
3
+ Inspired by Linear / Vercel aesthetic
4
+ ============================================================ */
5
+
6
+ /* --- Reset & Base --- */
7
+ *, *::before, *::after {
8
+ box-sizing: border-box;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+
13
+ :root {
14
+ --bg-primary: #0a0a0b;
15
+ --bg-secondary: #111113;
16
+ --bg-tertiary: #18181b;
17
+ --bg-elevated: #1e1e22;
18
+ --bg-hover: #232328;
19
+ --bg-active: #2a2a30;
20
+
21
+ --border-default: #27272a;
22
+ --border-subtle: #1e1e22;
23
+ --border-hover: #3f3f46;
24
+
25
+ --text-primary: #fafafa;
26
+ --text-secondary: #a1a1aa;
27
+ --text-tertiary: #71717a;
28
+ --text-muted: #52525b;
29
+
30
+ --accent-primary: #6366f1;
31
+ --accent-primary-hover: #818cf8;
32
+ --accent-secondary: #8b5cf6;
33
+
34
+ --green: #22c55e;
35
+ --green-dim: rgba(34, 197, 94, 0.15);
36
+ --yellow: #eab308;
37
+ --yellow-dim: rgba(234, 179, 8, 0.15);
38
+ --red: #ef4444;
39
+ --red-dim: rgba(239, 68, 68, 0.15);
40
+ --blue: #3b82f6;
41
+ --blue-dim: rgba(59, 130, 246, 0.15);
42
+ --purple: #a855f7;
43
+ --purple-dim: rgba(168, 85, 247, 0.15);
44
+ --orange: #f97316;
45
+ --orange-dim: rgba(249, 115, 22, 0.15);
46
+ --cyan: #06b6d4;
47
+ --cyan-dim: rgba(6, 182, 212, 0.15);
48
+
49
+ --radius-sm: 6px;
50
+ --radius-md: 8px;
51
+ --radius-lg: 12px;
52
+ --radius-xl: 16px;
53
+
54
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.3);
55
+ --shadow-md: 0 4px 12px rgba(0,0,0,0.4);
56
+ --shadow-lg: 0 8px 24px rgba(0,0,0,0.5);
57
+
58
+ --sidebar-width: 240px;
59
+ --topbar-height: 56px;
60
+
61
+ --transition-fast: 120ms ease;
62
+ --transition-normal: 200ms ease;
63
+ --transition-slow: 300ms ease;
64
+
65
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, Helvetica, Arial, sans-serif;
66
+ --font-mono: 'SF Mono', 'Fira Code', 'Fira Mono', 'Roboto Mono', monospace;
67
+ }
68
+
69
+ html {
70
+ font-size: 14px;
71
+ -webkit-font-smoothing: antialiased;
72
+ -moz-osx-font-smoothing: grayscale;
73
+ }
74
+
75
+ body {
76
+ font-family: var(--font-sans);
77
+ background: var(--bg-primary);
78
+ color: var(--text-primary);
79
+ line-height: 1.5;
80
+ overflow: hidden;
81
+ height: 100vh;
82
+ }
83
+
84
+ /* --- Layout --- */
85
+ .layout {
86
+ display: flex;
87
+ height: 100vh;
88
+ overflow: hidden;
89
+ }
90
+
91
+ /* --- Sidebar --- */
92
+ .sidebar {
93
+ width: var(--sidebar-width);
94
+ background: var(--bg-secondary);
95
+ border-right: 1px solid var(--border-default);
96
+ display: flex;
97
+ flex-direction: column;
98
+ flex-shrink: 0;
99
+ overflow: hidden;
100
+ }
101
+
102
+ .sidebar-header {
103
+ padding: 20px 16px 16px;
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ border-bottom: 1px solid var(--border-subtle);
108
+ }
109
+
110
+ .logo {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 10px;
114
+ }
115
+
116
+ .logo-text {
117
+ font-size: 1.1rem;
118
+ font-weight: 700;
119
+ letter-spacing: -0.02em;
120
+ color: var(--text-primary);
121
+ }
122
+
123
+ .version-badge {
124
+ font-size: 0.7rem;
125
+ font-family: var(--font-mono);
126
+ color: var(--text-tertiary);
127
+ background: var(--bg-tertiary);
128
+ padding: 2px 6px;
129
+ border-radius: var(--radius-sm);
130
+ border: 1px solid var(--border-default);
131
+ }
132
+
133
+ /* Navigation */
134
+ .nav {
135
+ padding: 12px 8px;
136
+ display: flex;
137
+ flex-direction: column;
138
+ gap: 2px;
139
+ flex: 1;
140
+ }
141
+
142
+ .nav-item {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 10px;
146
+ padding: 8px 12px;
147
+ border-radius: var(--radius-md);
148
+ color: var(--text-secondary);
149
+ text-decoration: none;
150
+ font-size: 0.9rem;
151
+ font-weight: 500;
152
+ transition: all var(--transition-fast);
153
+ cursor: pointer;
154
+ }
155
+
156
+ .nav-item:hover {
157
+ background: var(--bg-hover);
158
+ color: var(--text-primary);
159
+ }
160
+
161
+ .nav-item.active {
162
+ background: var(--bg-active);
163
+ color: var(--text-primary);
164
+ }
165
+
166
+ .nav-item.active svg {
167
+ color: var(--accent-primary);
168
+ }
169
+
170
+ .nav-item svg {
171
+ flex-shrink: 0;
172
+ opacity: 0.7;
173
+ }
174
+
175
+ .nav-item.active svg {
176
+ opacity: 1;
177
+ }
178
+
179
+ /* Sidebar Footer */
180
+ .sidebar-footer {
181
+ padding: 12px 16px;
182
+ border-top: 1px solid var(--border-subtle);
183
+ }
184
+
185
+ .refresh-indicator {
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 8px;
189
+ font-size: 0.75rem;
190
+ color: var(--text-tertiary);
191
+ }
192
+
193
+ .pulse-dot {
194
+ width: 6px;
195
+ height: 6px;
196
+ border-radius: 50%;
197
+ background: var(--green);
198
+ animation: pulse 2s ease-in-out infinite;
199
+ }
200
+
201
+ @keyframes pulse {
202
+ 0%, 100% { opacity: 1; }
203
+ 50% { opacity: 0.3; }
204
+ }
205
+
206
+ .refresh-text strong {
207
+ color: var(--text-secondary);
208
+ }
209
+
210
+ /* --- Main Content Area --- */
211
+ .main {
212
+ flex: 1;
213
+ display: flex;
214
+ flex-direction: column;
215
+ overflow: hidden;
216
+ min-width: 0;
217
+ }
218
+
219
+ .topbar {
220
+ height: var(--topbar-height);
221
+ padding: 0 24px;
222
+ display: flex;
223
+ align-items: center;
224
+ justify-content: space-between;
225
+ border-bottom: 1px solid var(--border-default);
226
+ background: var(--bg-secondary);
227
+ flex-shrink: 0;
228
+ }
229
+
230
+ .page-title {
231
+ font-size: 1.1rem;
232
+ font-weight: 600;
233
+ letter-spacing: -0.01em;
234
+ }
235
+
236
+ .topbar-actions {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 8px;
240
+ }
241
+
242
+ /* --- Buttons --- */
243
+ .btn {
244
+ display: inline-flex;
245
+ align-items: center;
246
+ gap: 6px;
247
+ padding: 6px 12px;
248
+ border-radius: var(--radius-md);
249
+ font-size: 0.85rem;
250
+ font-weight: 500;
251
+ font-family: inherit;
252
+ cursor: pointer;
253
+ border: 1px solid transparent;
254
+ transition: all var(--transition-fast);
255
+ }
256
+
257
+ .btn-ghost {
258
+ background: transparent;
259
+ color: var(--text-secondary);
260
+ border-color: var(--border-default);
261
+ }
262
+
263
+ .btn-ghost:hover {
264
+ background: var(--bg-hover);
265
+ color: var(--text-primary);
266
+ border-color: var(--border-hover);
267
+ }
268
+
269
+ /* --- Content Area --- */
270
+ .content {
271
+ flex: 1;
272
+ overflow-y: auto;
273
+ overflow-x: hidden;
274
+ padding: 24px;
275
+ scroll-behavior: smooth;
276
+ }
277
+
278
+ .content::-webkit-scrollbar {
279
+ width: 6px;
280
+ }
281
+
282
+ .content::-webkit-scrollbar-track {
283
+ background: transparent;
284
+ }
285
+
286
+ .content::-webkit-scrollbar-thumb {
287
+ background: var(--border-default);
288
+ border-radius: 3px;
289
+ }
290
+
291
+ .content::-webkit-scrollbar-thumb:hover {
292
+ background: var(--border-hover);
293
+ }
294
+
295
+ /* --- Loading State --- */
296
+ .loading-state {
297
+ display: flex;
298
+ flex-direction: column;
299
+ align-items: center;
300
+ justify-content: center;
301
+ gap: 16px;
302
+ padding: 80px 0;
303
+ color: var(--text-tertiary);
304
+ }
305
+
306
+ .spinner {
307
+ width: 24px;
308
+ height: 24px;
309
+ border: 2px solid var(--border-default);
310
+ border-top-color: var(--accent-primary);
311
+ border-radius: 50%;
312
+ animation: spin 0.8s linear infinite;
313
+ }
314
+
315
+ @keyframes spin {
316
+ to { transform: rotate(360deg); }
317
+ }
318
+
319
+ /* --- Empty State --- */
320
+ .empty-state {
321
+ text-align: center;
322
+ padding: 60px 20px;
323
+ color: var(--text-tertiary);
324
+ }
325
+
326
+ .empty-state-icon {
327
+ font-size: 2.5rem;
328
+ margin-bottom: 12px;
329
+ opacity: 0.4;
330
+ }
331
+
332
+ .empty-state h3 {
333
+ font-size: 1rem;
334
+ font-weight: 600;
335
+ color: var(--text-secondary);
336
+ margin-bottom: 4px;
337
+ }
338
+
339
+ .empty-state p {
340
+ font-size: 0.85rem;
341
+ }
342
+
343
+ /* --- Stats Grid --- */
344
+ .stats-grid {
345
+ display: grid;
346
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
347
+ gap: 12px;
348
+ margin-bottom: 24px;
349
+ }
350
+
351
+ .stat-card {
352
+ background: var(--bg-secondary);
353
+ border: 1px solid var(--border-default);
354
+ border-radius: var(--radius-lg);
355
+ padding: 16px 20px;
356
+ display: flex;
357
+ flex-direction: column;
358
+ gap: 4px;
359
+ transition: border-color var(--transition-fast);
360
+ }
361
+
362
+ .stat-card:hover {
363
+ border-color: var(--border-hover);
364
+ }
365
+
366
+ .stat-label {
367
+ font-size: 0.75rem;
368
+ font-weight: 500;
369
+ color: var(--text-tertiary);
370
+ text-transform: uppercase;
371
+ letter-spacing: 0.05em;
372
+ }
373
+
374
+ .stat-value {
375
+ font-size: 1.75rem;
376
+ font-weight: 700;
377
+ letter-spacing: -0.03em;
378
+ color: var(--text-primary);
379
+ line-height: 1.2;
380
+ }
381
+
382
+ .stat-value.accent {
383
+ color: var(--accent-primary);
384
+ }
385
+
386
+ .stat-value.green {
387
+ color: var(--green);
388
+ }
389
+
390
+ .stat-sub {
391
+ font-size: 0.75rem;
392
+ color: var(--text-tertiary);
393
+ margin-top: 2px;
394
+ }
395
+
396
+ /* --- Section Headers --- */
397
+ .section-header {
398
+ display: flex;
399
+ align-items: center;
400
+ justify-content: space-between;
401
+ margin-bottom: 12px;
402
+ margin-top: 8px;
403
+ }
404
+
405
+ .section-title {
406
+ font-size: 0.9rem;
407
+ font-weight: 600;
408
+ color: var(--text-primary);
409
+ letter-spacing: -0.01em;
410
+ }
411
+
412
+ .section-subtitle {
413
+ font-size: 0.8rem;
414
+ color: var(--text-tertiary);
415
+ }
416
+
417
+ /* --- Cards / Panels --- */
418
+ .card {
419
+ background: var(--bg-secondary);
420
+ border: 1px solid var(--border-default);
421
+ border-radius: var(--radius-lg);
422
+ overflow: hidden;
423
+ margin-bottom: 16px;
424
+ transition: border-color var(--transition-fast);
425
+ }
426
+
427
+ .card:hover {
428
+ border-color: var(--border-hover);
429
+ }
430
+
431
+ .card-header {
432
+ padding: 14px 18px;
433
+ border-bottom: 1px solid var(--border-subtle);
434
+ display: flex;
435
+ align-items: center;
436
+ justify-content: space-between;
437
+ }
438
+
439
+ .card-header h3 {
440
+ font-size: 0.85rem;
441
+ font-weight: 600;
442
+ }
443
+
444
+ .card-body {
445
+ padding: 18px;
446
+ }
447
+
448
+ /* --- Tables --- */
449
+ .table-wrapper {
450
+ overflow-x: auto;
451
+ }
452
+
453
+ table {
454
+ width: 100%;
455
+ border-collapse: collapse;
456
+ font-size: 0.85rem;
457
+ }
458
+
459
+ thead th {
460
+ text-align: left;
461
+ padding: 10px 14px;
462
+ font-size: 0.75rem;
463
+ font-weight: 600;
464
+ color: var(--text-tertiary);
465
+ text-transform: uppercase;
466
+ letter-spacing: 0.05em;
467
+ border-bottom: 1px solid var(--border-default);
468
+ white-space: nowrap;
469
+ }
470
+
471
+ tbody td {
472
+ padding: 10px 14px;
473
+ border-bottom: 1px solid var(--border-subtle);
474
+ color: var(--text-secondary);
475
+ vertical-align: middle;
476
+ }
477
+
478
+ tbody tr {
479
+ transition: background var(--transition-fast);
480
+ }
481
+
482
+ tbody tr:hover {
483
+ background: var(--bg-hover);
484
+ }
485
+
486
+ tbody tr:last-child td {
487
+ border-bottom: none;
488
+ }
489
+
490
+ .table-link {
491
+ color: var(--accent-primary-hover);
492
+ text-decoration: none;
493
+ cursor: pointer;
494
+ }
495
+
496
+ .table-link:hover {
497
+ text-decoration: underline;
498
+ }
499
+
500
+ /* --- Badges --- */
501
+ .badge {
502
+ display: inline-flex;
503
+ align-items: center;
504
+ padding: 2px 8px;
505
+ border-radius: 99px;
506
+ font-size: 0.7rem;
507
+ font-weight: 600;
508
+ letter-spacing: 0.02em;
509
+ text-transform: capitalize;
510
+ white-space: nowrap;
511
+ }
512
+
513
+ .badge-decision { background: var(--purple-dim); color: var(--purple); }
514
+ .badge-pattern { background: var(--blue-dim); color: var(--blue); }
515
+ .badge-preference { background: var(--cyan-dim); color: var(--cyan); }
516
+ .badge-issue { background: var(--red-dim); color: var(--red); }
517
+ .badge-context { background: var(--yellow-dim); color: var(--yellow); }
518
+ .badge-setup { background: var(--green-dim); color: var(--green); }
519
+ .badge-default { background: var(--bg-tertiary); color: var(--text-tertiary); }
520
+
521
+ .badge-active { background: var(--green-dim); color: var(--green); }
522
+ .badge-completed { background: var(--blue-dim); color: var(--blue); }
523
+ .badge-stale { background: var(--yellow-dim); color: var(--yellow); }
524
+
525
+ /* --- Leaderboard --- */
526
+ .leaderboard {
527
+ display: flex;
528
+ flex-direction: column;
529
+ gap: 4px;
530
+ }
531
+
532
+ .leaderboard-item {
533
+ display: flex;
534
+ align-items: center;
535
+ gap: 12px;
536
+ padding: 10px 14px;
537
+ border-radius: var(--radius-md);
538
+ transition: background var(--transition-fast);
539
+ }
540
+
541
+ .leaderboard-item:hover {
542
+ background: var(--bg-hover);
543
+ }
544
+
545
+ .rank {
546
+ width: 28px;
547
+ height: 28px;
548
+ display: flex;
549
+ align-items: center;
550
+ justify-content: center;
551
+ border-radius: var(--radius-sm);
552
+ font-size: 0.8rem;
553
+ font-weight: 700;
554
+ flex-shrink: 0;
555
+ }
556
+
557
+ .rank-1 { background: linear-gradient(135deg, #fbbf24, #f59e0b); color: #000; }
558
+ .rank-2 { background: linear-gradient(135deg, #d1d5db, #9ca3af); color: #000; }
559
+ .rank-3 { background: linear-gradient(135deg, #d97706, #b45309); color: #fff; }
560
+ .rank-default { background: var(--bg-tertiary); color: var(--text-tertiary); }
561
+
562
+ .leaderboard-info {
563
+ flex: 1;
564
+ min-width: 0;
565
+ }
566
+
567
+ .leaderboard-name {
568
+ font-weight: 600;
569
+ font-size: 0.9rem;
570
+ color: var(--text-primary);
571
+ white-space: nowrap;
572
+ overflow: hidden;
573
+ text-overflow: ellipsis;
574
+ }
575
+
576
+ .leaderboard-meta {
577
+ font-size: 0.75rem;
578
+ color: var(--text-tertiary);
579
+ }
580
+
581
+ .leaderboard-stats {
582
+ display: flex;
583
+ align-items: center;
584
+ gap: 16px;
585
+ flex-shrink: 0;
586
+ }
587
+
588
+ .leaderboard-stat {
589
+ text-align: right;
590
+ }
591
+
592
+ .leaderboard-stat-value {
593
+ font-size: 0.9rem;
594
+ font-weight: 700;
595
+ color: var(--text-primary);
596
+ }
597
+
598
+ .leaderboard-stat-label {
599
+ font-size: 0.65rem;
600
+ color: var(--text-tertiary);
601
+ text-transform: uppercase;
602
+ letter-spacing: 0.05em;
603
+ }
604
+
605
+ /* --- Bar Chart (CSS-only) --- */
606
+ .bar-chart {
607
+ display: flex;
608
+ flex-direction: column;
609
+ gap: 8px;
610
+ }
611
+
612
+ .bar-row {
613
+ display: flex;
614
+ align-items: center;
615
+ gap: 12px;
616
+ }
617
+
618
+ .bar-label {
619
+ width: 100px;
620
+ font-size: 0.75rem;
621
+ color: var(--text-secondary);
622
+ text-align: right;
623
+ white-space: nowrap;
624
+ overflow: hidden;
625
+ text-overflow: ellipsis;
626
+ flex-shrink: 0;
627
+ }
628
+
629
+ .bar-track {
630
+ flex: 1;
631
+ height: 20px;
632
+ background: var(--bg-tertiary);
633
+ border-radius: var(--radius-sm);
634
+ overflow: hidden;
635
+ position: relative;
636
+ }
637
+
638
+ .bar-fill {
639
+ height: 100%;
640
+ border-radius: var(--radius-sm);
641
+ background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
642
+ transition: width var(--transition-slow);
643
+ min-width: 2px;
644
+ }
645
+
646
+ .bar-fill.green { background: linear-gradient(90deg, #16a34a, #22c55e); }
647
+ .bar-fill.blue { background: linear-gradient(90deg, #2563eb, #3b82f6); }
648
+ .bar-fill.purple { background: linear-gradient(90deg, #7c3aed, #a855f7); }
649
+ .bar-fill.orange { background: linear-gradient(90deg, #ea580c, #f97316); }
650
+ .bar-fill.cyan { background: linear-gradient(90deg, #0891b2, #06b6d4); }
651
+
652
+ .bar-value {
653
+ width: 60px;
654
+ font-size: 0.75rem;
655
+ font-weight: 600;
656
+ color: var(--text-secondary);
657
+ font-family: var(--font-mono);
658
+ flex-shrink: 0;
659
+ }
660
+
661
+ /* --- Trend Sparkline (CSS mini chart) --- */
662
+ .trend-row {
663
+ display: flex;
664
+ align-items: flex-end;
665
+ gap: 2px;
666
+ height: 40px;
667
+ }
668
+
669
+ .trend-bar {
670
+ flex: 1;
671
+ background: var(--accent-primary);
672
+ border-radius: 2px 2px 0 0;
673
+ min-height: 2px;
674
+ opacity: 0.7;
675
+ transition: opacity var(--transition-fast);
676
+ }
677
+
678
+ .trend-bar:hover {
679
+ opacity: 1;
680
+ }
681
+
682
+ /* --- Tag Pills --- */
683
+ .tags {
684
+ display: flex;
685
+ flex-wrap: wrap;
686
+ gap: 4px;
687
+ }
688
+
689
+ .tag {
690
+ font-size: 0.7rem;
691
+ padding: 1px 6px;
692
+ border-radius: 99px;
693
+ background: var(--bg-tertiary);
694
+ color: var(--text-tertiary);
695
+ border: 1px solid var(--border-default);
696
+ }
697
+
698
+ /* --- File Path --- */
699
+ .filepath {
700
+ font-family: var(--font-mono);
701
+ font-size: 0.75rem;
702
+ color: var(--text-tertiary);
703
+ white-space: nowrap;
704
+ overflow: hidden;
705
+ text-overflow: ellipsis;
706
+ max-width: 300px;
707
+ display: inline-block;
708
+ }
709
+
710
+ /* --- Insight Card --- */
711
+ .insight-card {
712
+ background: var(--bg-secondary);
713
+ border: 1px solid var(--border-default);
714
+ border-radius: var(--radius-lg);
715
+ padding: 16px 18px;
716
+ margin-bottom: 8px;
717
+ transition: border-color var(--transition-fast);
718
+ }
719
+
720
+ .insight-card:hover {
721
+ border-color: var(--border-hover);
722
+ }
723
+
724
+ .insight-header {
725
+ display: flex;
726
+ align-items: center;
727
+ gap: 8px;
728
+ margin-bottom: 8px;
729
+ }
730
+
731
+ .insight-content {
732
+ font-size: 0.85rem;
733
+ color: var(--text-secondary);
734
+ line-height: 1.6;
735
+ margin-bottom: 10px;
736
+ }
737
+
738
+ .insight-footer {
739
+ display: flex;
740
+ align-items: center;
741
+ gap: 12px;
742
+ flex-wrap: wrap;
743
+ }
744
+
745
+ .insight-meta {
746
+ font-size: 0.72rem;
747
+ color: var(--text-tertiary);
748
+ }
749
+
750
+ /* --- ROI Card --- */
751
+ .roi-grid {
752
+ display: grid;
753
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
754
+ gap: 12px;
755
+ margin-bottom: 24px;
756
+ }
757
+
758
+ .roi-card {
759
+ background: var(--bg-secondary);
760
+ border: 1px solid var(--border-default);
761
+ border-radius: var(--radius-lg);
762
+ padding: 18px 20px;
763
+ position: relative;
764
+ overflow: hidden;
765
+ }
766
+
767
+ .roi-card::before {
768
+ content: '';
769
+ position: absolute;
770
+ top: 0;
771
+ left: 0;
772
+ right: 0;
773
+ height: 3px;
774
+ background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
775
+ }
776
+
777
+ .roi-label {
778
+ font-size: 0.75rem;
779
+ font-weight: 500;
780
+ color: var(--text-tertiary);
781
+ text-transform: uppercase;
782
+ letter-spacing: 0.05em;
783
+ margin-bottom: 4px;
784
+ }
785
+
786
+ .roi-value {
787
+ font-size: 2rem;
788
+ font-weight: 700;
789
+ color: var(--green);
790
+ letter-spacing: -0.03em;
791
+ }
792
+
793
+ .roi-sub {
794
+ font-size: 0.75rem;
795
+ color: var(--text-tertiary);
796
+ margin-top: 2px;
797
+ }
798
+
799
+ /* --- Grid layouts --- */
800
+ .two-col {
801
+ display: grid;
802
+ grid-template-columns: 1fr 1fr;
803
+ gap: 16px;
804
+ }
805
+
806
+ @media (max-width: 1024px) {
807
+ .two-col {
808
+ grid-template-columns: 1fr;
809
+ }
810
+ }
811
+
812
+ /* --- Session Detail Overlay --- */
813
+ .session-detail {
814
+ background: var(--bg-secondary);
815
+ border: 1px solid var(--border-default);
816
+ border-radius: var(--radius-lg);
817
+ padding: 20px;
818
+ margin-bottom: 16px;
819
+ }
820
+
821
+ .session-detail-header {
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: space-between;
825
+ margin-bottom: 16px;
826
+ }
827
+
828
+ .session-detail-title {
829
+ font-size: 1rem;
830
+ font-weight: 700;
831
+ }
832
+
833
+ .back-link {
834
+ font-size: 0.85rem;
835
+ color: var(--accent-primary-hover);
836
+ text-decoration: none;
837
+ cursor: pointer;
838
+ }
839
+
840
+ .back-link:hover {
841
+ text-decoration: underline;
842
+ }
843
+
844
+ /* --- Filters --- */
845
+ .filters {
846
+ display: flex;
847
+ gap: 8px;
848
+ margin-bottom: 16px;
849
+ flex-wrap: wrap;
850
+ }
851
+
852
+ .filter-input {
853
+ padding: 6px 12px;
854
+ border-radius: var(--radius-md);
855
+ border: 1px solid var(--border-default);
856
+ background: var(--bg-tertiary);
857
+ color: var(--text-primary);
858
+ font-size: 0.8rem;
859
+ font-family: inherit;
860
+ outline: none;
861
+ transition: border-color var(--transition-fast);
862
+ min-width: 140px;
863
+ }
864
+
865
+ .filter-input:focus {
866
+ border-color: var(--accent-primary);
867
+ }
868
+
869
+ .filter-input::placeholder {
870
+ color: var(--text-muted);
871
+ }
872
+
873
+ select.filter-input {
874
+ appearance: none;
875
+ background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2371717a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
876
+ background-repeat: no-repeat;
877
+ background-position: right 10px center;
878
+ padding-right: 28px;
879
+ cursor: pointer;
880
+ }
881
+
882
+ /* --- Hot Files --- */
883
+ .hot-file-row {
884
+ display: flex;
885
+ align-items: center;
886
+ gap: 12px;
887
+ padding: 8px 0;
888
+ border-bottom: 1px solid var(--border-subtle);
889
+ }
890
+
891
+ .hot-file-row:last-child {
892
+ border-bottom: none;
893
+ }
894
+
895
+ .hot-file-rank {
896
+ font-size: 0.75rem;
897
+ font-weight: 700;
898
+ color: var(--text-muted);
899
+ width: 24px;
900
+ text-align: center;
901
+ flex-shrink: 0;
902
+ }
903
+
904
+ .hot-file-path {
905
+ flex: 1;
906
+ font-family: var(--font-mono);
907
+ font-size: 0.78rem;
908
+ color: var(--text-secondary);
909
+ white-space: nowrap;
910
+ overflow: hidden;
911
+ text-overflow: ellipsis;
912
+ }
913
+
914
+ .hot-file-count {
915
+ font-size: 0.8rem;
916
+ font-weight: 600;
917
+ color: var(--orange);
918
+ flex-shrink: 0;
919
+ }
920
+
921
+ /* --- Pagination --- */
922
+ .pagination {
923
+ display: flex;
924
+ align-items: center;
925
+ justify-content: center;
926
+ gap: 8px;
927
+ margin-top: 16px;
928
+ }
929
+
930
+ .pagination .btn {
931
+ font-size: 0.8rem;
932
+ padding: 4px 12px;
933
+ }
934
+
935
+ .pagination-info {
936
+ font-size: 0.8rem;
937
+ color: var(--text-tertiary);
938
+ }
939
+
940
+ /* --- Animations --- */
941
+ @keyframes fadeIn {
942
+ from { opacity: 0; transform: translateY(8px); }
943
+ to { opacity: 1; transform: translateY(0); }
944
+ }
945
+
946
+ .animate-in {
947
+ animation: fadeIn var(--transition-slow) ease-out;
948
+ }
949
+
950
+ /* --- Empty state body (for HTML content) --- */
951
+ .empty-state-body {
952
+ font-size: 0.85rem;
953
+ text-align: left;
954
+ display: inline-block;
955
+ max-width: 480px;
956
+ }
957
+
958
+ .empty-state-body p {
959
+ margin-bottom: 8px;
960
+ color: var(--text-tertiary);
961
+ }
962
+
963
+ .empty-state-body ol,
964
+ .empty-state-body ul {
965
+ margin: 8px 0;
966
+ padding-left: 20px;
967
+ color: var(--text-secondary);
968
+ }
969
+
970
+ .empty-state-body li {
971
+ margin-bottom: 4px;
972
+ }
973
+
974
+ .empty-state-body code {
975
+ font-family: var(--font-mono);
976
+ font-size: 0.8rem;
977
+ background: var(--bg-tertiary);
978
+ padding: 1px 6px;
979
+ border-radius: var(--radius-sm);
980
+ border: 1px solid var(--border-default);
981
+ color: var(--accent-primary-hover);
982
+ }
983
+
984
+ .getting-started-steps {
985
+ text-align: left;
986
+ }
987
+
988
+ /* --- Mobile Menu --- */
989
+ .mobile-menu-btn {
990
+ display: none;
991
+ }
992
+
993
+ /* --- Responsive --- */
994
+ @media (max-width: 768px) {
995
+ .sidebar {
996
+ display: none;
997
+ }
998
+
999
+ .sidebar.open {
1000
+ display: flex;
1001
+ position: fixed;
1002
+ z-index: 100;
1003
+ height: 100vh;
1004
+ top: 0;
1005
+ left: 0;
1006
+ }
1007
+
1008
+ .mobile-menu-btn {
1009
+ display: inline-flex;
1010
+ }
1011
+
1012
+ .stats-grid {
1013
+ grid-template-columns: repeat(2, 1fr);
1014
+ }
1015
+
1016
+ .roi-grid {
1017
+ grid-template-columns: 1fr;
1018
+ }
1019
+ }