@viren/claude-code-dashboard 0.0.4 → 0.0.5

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,1251 @@
1
+ :root {
2
+ --bg: #0a0a0a;
3
+ --surface: #111;
4
+ --surface2: #1a1a1a;
5
+ --border: #262626;
6
+ --text: #e5e5e5;
7
+ --text-dim: #777;
8
+ --accent: #c4956a;
9
+ --accent-dim: #8b6a4a;
10
+ --green: #4ade80;
11
+ --blue: #60a5fa;
12
+ --purple: #a78bfa;
13
+ --yellow: #fbbf24;
14
+ --red: #f87171;
15
+ }
16
+ [data-theme="light"] {
17
+ --bg: #f5f5f5;
18
+ --surface: #fff;
19
+ --surface2: #f0f0f0;
20
+ --border: #e0e0e0;
21
+ --text: #1a1a1a;
22
+ --text-dim: #666;
23
+ --accent: #9b6b47;
24
+ --accent-dim: #b8956e;
25
+ --green: #16a34a;
26
+ --blue: #2563eb;
27
+ --purple: #7c3aed;
28
+ --yellow: #ca8a04;
29
+ --red: #dc2626;
30
+ }
31
+ * {
32
+ margin: 0;
33
+ padding: 0;
34
+ box-sizing: border-box;
35
+ }
36
+ body {
37
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", sans-serif;
38
+ background: var(--bg);
39
+ color: var(--text);
40
+ padding: 2.5rem 2rem;
41
+ line-height: 1.5;
42
+ max-width: 1200px;
43
+ margin: 0 auto;
44
+ }
45
+ code,
46
+ .cmd-name {
47
+ font-family: "SF Mono", "Fira Code", "JetBrains Mono", monospace;
48
+ }
49
+ h1 {
50
+ font-size: 1.4rem;
51
+ font-weight: 600;
52
+ color: var(--accent);
53
+ margin-bottom: 0.2rem;
54
+ }
55
+ .sub {
56
+ color: var(--text-dim);
57
+ font-size: 0.78rem;
58
+ margin-bottom: 1rem;
59
+ }
60
+ kbd {
61
+ background: var(--surface2);
62
+ border: 1px solid var(--border);
63
+ border-radius: 3px;
64
+ padding: 0.05rem 0.3rem;
65
+ font-size: 0.7rem;
66
+ font-family: inherit;
67
+ }
68
+
69
+ /* ── Tabs ─────────────────────────────────────────────────── */
70
+ .tab-nav {
71
+ display: flex;
72
+ gap: 0;
73
+ border-bottom: 1px solid var(--border);
74
+ margin-bottom: 1.5rem;
75
+ overflow-x: auto;
76
+ }
77
+ .tab-btn {
78
+ padding: 0.6rem 1.2rem;
79
+ font-size: 0.78rem;
80
+ font-weight: 500;
81
+ color: var(--text-dim);
82
+ background: none;
83
+ border: none;
84
+ border-bottom: 2px solid transparent;
85
+ cursor: pointer;
86
+ white-space: nowrap;
87
+ font-family: inherit;
88
+ transition:
89
+ color 0.15s,
90
+ border-color 0.15s;
91
+ }
92
+ .tab-btn:hover {
93
+ color: var(--text);
94
+ }
95
+ .tab-btn.active {
96
+ color: var(--accent);
97
+ border-bottom-color: var(--accent);
98
+ }
99
+ .tab-content {
100
+ display: none;
101
+ }
102
+ .tab-content.active {
103
+ display: block;
104
+ }
105
+
106
+ /* ── Cards ────────────────────────────────────────────────── */
107
+ .top-grid {
108
+ display: grid;
109
+ grid-template-columns: 1fr 1fr;
110
+ gap: 1.25rem;
111
+ margin-bottom: 1.25rem;
112
+ }
113
+ .top-grid > .card {
114
+ margin-bottom: 0;
115
+ }
116
+ @media (max-width: 900px) {
117
+ .top-grid {
118
+ grid-template-columns: 1fr;
119
+ }
120
+ }
121
+
122
+ .card {
123
+ background: var(--surface);
124
+ border: 1px solid var(--border);
125
+ border-radius: 10px;
126
+ padding: 1.25rem;
127
+ overflow: hidden;
128
+ margin-bottom: 1.25rem;
129
+ }
130
+ .card:last-child {
131
+ margin-bottom: 0;
132
+ }
133
+ .card h2 {
134
+ font-size: 0.7rem;
135
+ font-weight: 700;
136
+ text-transform: uppercase;
137
+ letter-spacing: 0.08em;
138
+ color: var(--text-dim);
139
+ margin-bottom: 0.75rem;
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 0.5rem;
143
+ }
144
+ .card h2 .n {
145
+ background: var(--surface2);
146
+ border: 1px solid var(--border);
147
+ border-radius: 4px;
148
+ padding: 0.05rem 0.35rem;
149
+ font-size: 0.65rem;
150
+ color: var(--accent);
151
+ }
152
+
153
+ .cmd-row,
154
+ details.cmd-detail > summary {
155
+ display: flex;
156
+ align-items: baseline;
157
+ padding: 0.35rem 0.25rem;
158
+ gap: 0.75rem;
159
+ border-bottom: 1px solid var(--border);
160
+ font-size: 0.82rem;
161
+ }
162
+ .cmd-row:last-child,
163
+ details.cmd-detail:last-child:not([open]) > summary {
164
+ border-bottom: none;
165
+ }
166
+ .cmd-name {
167
+ font-weight: 600;
168
+ color: var(--green);
169
+ white-space: nowrap;
170
+ font-size: 0.8rem;
171
+ flex-shrink: 0;
172
+ }
173
+ .cmd-desc {
174
+ color: var(--text-dim);
175
+ font-size: 0.75rem;
176
+ text-align: right;
177
+ flex: 1;
178
+ min-width: 0;
179
+ overflow: hidden;
180
+ text-overflow: ellipsis;
181
+ white-space: nowrap;
182
+ }
183
+
184
+ details.cmd-detail {
185
+ border-bottom: 1px solid var(--border);
186
+ }
187
+ details.cmd-detail:last-child {
188
+ border-bottom: none;
189
+ }
190
+ details.cmd-detail > summary {
191
+ cursor: pointer;
192
+ list-style: none;
193
+ border-radius: 4px;
194
+ transition: background 0.1s;
195
+ }
196
+ details.cmd-detail[open] > summary,
197
+ details.cmd-detail > summary:hover {
198
+ background: var(--surface2);
199
+ }
200
+ details.cmd-detail > summary::-webkit-details-marker {
201
+ display: none;
202
+ }
203
+ .detail-body {
204
+ padding: 0.6rem 0.5rem 0.6rem 1rem;
205
+ background: var(--surface2);
206
+ border-radius: 0 0 6px 6px;
207
+ margin-bottom: 0.15rem;
208
+ }
209
+ .detail-section {
210
+ color: var(--blue);
211
+ font-size: 0.72rem;
212
+ font-weight: 600;
213
+ margin-top: 0.35rem;
214
+ }
215
+ .detail-section:first-child {
216
+ margin-top: 0;
217
+ }
218
+ .detail-step,
219
+ .detail-key {
220
+ font-size: 0.7rem;
221
+ padding: 0.1rem 0 0.1rem 0.9rem;
222
+ position: relative;
223
+ }
224
+ .detail-step {
225
+ color: var(--text);
226
+ }
227
+ .detail-step::before {
228
+ content: "\2192";
229
+ position: absolute;
230
+ left: 0;
231
+ color: var(--accent-dim);
232
+ font-size: 0.65rem;
233
+ }
234
+ .detail-key {
235
+ color: var(--yellow);
236
+ }
237
+ .detail-key::before {
238
+ content: "\2022";
239
+ position: absolute;
240
+ left: 0.15rem;
241
+ color: var(--accent-dim);
242
+ }
243
+
244
+ .label {
245
+ color: var(--text-dim);
246
+ font-size: 0.65rem;
247
+ font-weight: 700;
248
+ text-transform: uppercase;
249
+ letter-spacing: 0.06em;
250
+ margin: 0.85rem 0 0.35rem;
251
+ }
252
+ .label:first-child {
253
+ margin-top: 0;
254
+ }
255
+
256
+ .agent-section {
257
+ border-bottom: 1px solid var(--border);
258
+ }
259
+ .agent-section:last-child {
260
+ border-bottom: none;
261
+ }
262
+ .agent-section > summary {
263
+ cursor: pointer;
264
+ list-style: none;
265
+ display: flex;
266
+ align-items: baseline;
267
+ padding: 0.3rem 0.25rem;
268
+ font-size: 0.78rem;
269
+ font-weight: 500;
270
+ color: var(--text);
271
+ border-radius: 4px;
272
+ transition: background 0.1s;
273
+ }
274
+ .agent-section > summary::-webkit-details-marker {
275
+ display: none;
276
+ }
277
+ .agent-section > summary:hover,
278
+ .agent-section[open] > summary {
279
+ background: var(--surface2);
280
+ }
281
+ .agent-section[open] > summary {
282
+ color: var(--blue);
283
+ }
284
+ .agent-section-preview {
285
+ padding: 0.3rem 0.4rem 0.5rem 1rem;
286
+ background: var(--surface2);
287
+ border-radius: 0 0 4px 4px;
288
+ margin-bottom: 0.1rem;
289
+ }
290
+ .agent-section-preview .line {
291
+ color: var(--text-dim);
292
+ font-size: 0.68rem;
293
+ line-height: 1.5;
294
+ padding: 0.05rem 0;
295
+ }
296
+
297
+ .chain {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 0.5rem;
301
+ flex-wrap: wrap;
302
+ padding: 0.65rem 0.75rem;
303
+ background: var(--surface2);
304
+ border-radius: 6px;
305
+ margin-top: 0.4rem;
306
+ }
307
+ .chain:first-child {
308
+ margin-top: 0;
309
+ }
310
+ .chain-node {
311
+ background: var(--surface);
312
+ border: 1px solid var(--accent-dim);
313
+ border-radius: 5px;
314
+ padding: 0.25rem 0.55rem;
315
+ font-size: 0.75rem;
316
+ font-weight: 500;
317
+ color: var(--accent);
318
+ }
319
+ .chain-arrow {
320
+ color: var(--text-dim);
321
+ font-size: 0.85rem;
322
+ }
323
+
324
+ .stats {
325
+ display: grid;
326
+ grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
327
+ gap: 0.65rem;
328
+ margin-bottom: 1.5rem;
329
+ }
330
+ .stat {
331
+ text-align: center;
332
+ padding: 0.65rem 0.5rem;
333
+ background: var(--surface);
334
+ border: 1px solid var(--border);
335
+ border-radius: 8px;
336
+ cursor: pointer;
337
+ transition:
338
+ border-color 0.15s,
339
+ transform 0.1s;
340
+ }
341
+ .stat:hover {
342
+ border-color: var(--accent-dim);
343
+ transform: translateY(-1px);
344
+ }
345
+ .stat b {
346
+ display: block;
347
+ font-size: 1.4rem;
348
+ color: var(--accent);
349
+ }
350
+ .stat span {
351
+ font-size: 0.6rem;
352
+ color: var(--text-dim);
353
+ text-transform: uppercase;
354
+ letter-spacing: 0.06em;
355
+ }
356
+ .stat.coverage b {
357
+ color: var(--coverage-color, var(--accent));
358
+ }
359
+
360
+ .search-bar {
361
+ margin-bottom: 1rem;
362
+ position: relative;
363
+ }
364
+ .search-bar input {
365
+ width: 100%;
366
+ padding: 0.6rem 0.9rem;
367
+ padding-right: 4rem;
368
+ font-size: 0.82rem;
369
+ background: var(--surface);
370
+ border: 1px solid var(--border);
371
+ border-radius: 8px;
372
+ color: var(--text);
373
+ outline: none;
374
+ transition: border-color 0.15s;
375
+ font-family: inherit;
376
+ }
377
+ .search-bar input::placeholder {
378
+ color: var(--text-dim);
379
+ }
380
+ .search-bar input:focus {
381
+ border-color: var(--accent-dim);
382
+ }
383
+ .search-hint {
384
+ position: absolute;
385
+ right: 0.75rem;
386
+ top: 50%;
387
+ transform: translateY(-50%);
388
+ pointer-events: none;
389
+ }
390
+
391
+ .repo-grid {
392
+ display: grid;
393
+ grid-template-columns: repeat(3, 1fr);
394
+ gap: 0.75rem;
395
+ margin-bottom: 1.25rem;
396
+ }
397
+ @media (max-width: 1000px) {
398
+ .repo-grid {
399
+ grid-template-columns: 1fr 1fr;
400
+ }
401
+ }
402
+ @media (max-width: 600px) {
403
+ .repo-grid {
404
+ grid-template-columns: 1fr;
405
+ }
406
+ }
407
+
408
+ .repo-card {
409
+ background: var(--surface);
410
+ border: 1px solid var(--border);
411
+ border-radius: 10px;
412
+ overflow: hidden;
413
+ transition: border-color 0.15s;
414
+ }
415
+ .repo-card[open] {
416
+ grid-column: 1 / -1;
417
+ border-color: var(--accent-dim);
418
+ }
419
+ .repo-card > summary {
420
+ cursor: pointer;
421
+ list-style: none;
422
+ padding: 0.85rem 1rem;
423
+ display: flex;
424
+ flex-direction: column;
425
+ gap: 0.3rem;
426
+ min-height: 7.5rem;
427
+ justify-content: center;
428
+ }
429
+ .repo-card > summary::-webkit-details-marker {
430
+ display: none;
431
+ }
432
+ .repo-card > summary:hover {
433
+ background: var(--surface2);
434
+ }
435
+ .repo-header {
436
+ display: flex;
437
+ align-items: center;
438
+ justify-content: space-between;
439
+ }
440
+ .repo-card .repo-name {
441
+ font-size: 0.88rem;
442
+ font-weight: 600;
443
+ color: var(--text);
444
+ display: flex;
445
+ align-items: center;
446
+ gap: 0.4rem;
447
+ }
448
+ .repo-card .repo-preview {
449
+ font-size: 0.7rem;
450
+ color: var(--text-dim);
451
+ line-height: 1.4;
452
+ display: -webkit-box;
453
+ -webkit-line-clamp: 2;
454
+ -webkit-box-orient: vertical;
455
+ overflow: hidden;
456
+ }
457
+ .repo-card .badges {
458
+ display: flex;
459
+ gap: 0.3rem;
460
+ margin-top: 0.2rem;
461
+ flex-wrap: wrap;
462
+ }
463
+ .badge {
464
+ font-size: 0.58rem;
465
+ font-weight: 600;
466
+ text-transform: uppercase;
467
+ letter-spacing: 0.04em;
468
+ padding: 0.12rem 0.4rem;
469
+ border-radius: 3px;
470
+ border: 1px solid;
471
+ }
472
+ .badge.cmds {
473
+ color: var(--green);
474
+ border-color: #4ade8033;
475
+ background: #4ade8010;
476
+ }
477
+ .badge.rules {
478
+ color: var(--purple);
479
+ border-color: #a78bfa33;
480
+ background: #a78bfa10;
481
+ }
482
+ .badge.agent {
483
+ color: var(--blue);
484
+ border-color: #60a5fa33;
485
+ background: #60a5fa10;
486
+ }
487
+ .badge.skills {
488
+ color: var(--yellow);
489
+ border-color: #fbbf2433;
490
+ background: #fbbf2410;
491
+ }
492
+ .badge.source {
493
+ font-size: 0.5rem;
494
+ padding: 0.08rem 0.3rem;
495
+ margin-left: 0.4rem;
496
+ text-transform: none;
497
+ letter-spacing: 0.02em;
498
+ flex-shrink: 0;
499
+ }
500
+ .badge.source.superpowers {
501
+ color: var(--purple);
502
+ border-color: #a78bfa33;
503
+ background: #a78bfa10;
504
+ }
505
+ .badge.source.skillssh {
506
+ color: var(--blue);
507
+ border-color: #60a5fa33;
508
+ background: #60a5fa10;
509
+ }
510
+ .badge.source.custom {
511
+ color: var(--text-dim);
512
+ border-color: var(--border);
513
+ background: var(--surface2);
514
+ }
515
+ .skill-name {
516
+ color: var(--yellow) !important;
517
+ }
518
+ .skill-category {
519
+ margin-top: 0.75rem;
520
+ }
521
+ .skill-category:first-child {
522
+ margin-top: 0;
523
+ }
524
+ .skill-category-label {
525
+ font-size: 0.6rem;
526
+ font-weight: 700;
527
+ text-transform: uppercase;
528
+ letter-spacing: 0.06em;
529
+ color: var(--text-dim);
530
+ padding: 0.3rem 0;
531
+ margin-bottom: 0.25rem;
532
+ border-bottom: 1px solid var(--border);
533
+ display: flex;
534
+ align-items: center;
535
+ gap: 0.4rem;
536
+ }
537
+ .skill-category-label .cat-n {
538
+ font-size: 0.55rem;
539
+ color: var(--accent-dim);
540
+ }
541
+
542
+ .mcp-row {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 0.5rem;
546
+ padding: 0.3rem 0.25rem;
547
+ border-bottom: 1px solid var(--border);
548
+ font-size: 0.8rem;
549
+ flex-wrap: wrap;
550
+ }
551
+ .mcp-row:last-child {
552
+ border-bottom: none;
553
+ }
554
+ .mcp-row.mcp-disabled {
555
+ opacity: 0.5;
556
+ }
557
+ .mcp-disabled-hint {
558
+ font-size: 0.6rem;
559
+ color: var(--red);
560
+ opacity: 0.8;
561
+ }
562
+ .mcp-name {
563
+ font-family: "SF Mono", "Fira Code", "JetBrains Mono", monospace;
564
+ font-weight: 600;
565
+ color: var(--text);
566
+ font-size: 0.78rem;
567
+ }
568
+ .mcp-projects {
569
+ font-size: 0.65rem;
570
+ color: var(--text-dim);
571
+ margin-left: auto;
572
+ }
573
+ .badge.mcp-global {
574
+ color: var(--green);
575
+ border-color: #4ade8033;
576
+ background: #4ade8010;
577
+ }
578
+ .badge.mcp-project {
579
+ color: var(--blue);
580
+ border-color: #60a5fa33;
581
+ background: #60a5fa10;
582
+ }
583
+ .badge.mcp-recent {
584
+ color: var(--yellow);
585
+ border-color: #fbbf2433;
586
+ background: #fbbf2410;
587
+ }
588
+ .badge.mcp-type {
589
+ color: var(--text-dim);
590
+ border-color: var(--border);
591
+ background: var(--surface2);
592
+ text-transform: none;
593
+ font-size: 0.5rem;
594
+ }
595
+ .mcp-promote {
596
+ font-size: 0.72rem;
597
+ color: var(--text-dim);
598
+ padding: 0.4rem 0.5rem;
599
+ background: rgba(251, 191, 36, 0.05);
600
+ border: 1px solid rgba(251, 191, 36, 0.15);
601
+ border-radius: 6px;
602
+ margin-top: 0.3rem;
603
+ }
604
+ .mcp-promote .mcp-name {
605
+ color: var(--yellow);
606
+ }
607
+ .mcp-promote code {
608
+ font-size: 0.65rem;
609
+ color: var(--accent);
610
+ }
611
+
612
+ .insight-card {
613
+ margin-bottom: 1.25rem;
614
+ }
615
+ .insight-row {
616
+ display: flex;
617
+ align-items: flex-start;
618
+ gap: 0.6rem;
619
+ padding: 0.5rem 0.6rem;
620
+ border-radius: 6px;
621
+ margin-bottom: 0.35rem;
622
+ font-size: 0.78rem;
623
+ line-height: 1.4;
624
+ }
625
+ .insight-row:last-child {
626
+ margin-bottom: 0;
627
+ }
628
+ .insight-icon {
629
+ flex-shrink: 0;
630
+ font-size: 0.85rem;
631
+ line-height: 1;
632
+ margin-top: 0.1rem;
633
+ }
634
+ .insight-body {
635
+ flex: 1;
636
+ min-width: 0;
637
+ }
638
+ .insight-title {
639
+ font-weight: 600;
640
+ color: var(--text);
641
+ }
642
+ .insight-detail {
643
+ color: var(--text-dim);
644
+ font-size: 0.72rem;
645
+ margin-top: 0.15rem;
646
+ }
647
+ .insight-action {
648
+ color: var(--accent-dim);
649
+ font-size: 0.68rem;
650
+ font-style: italic;
651
+ margin-top: 0.15rem;
652
+ }
653
+ .insight-row.warning {
654
+ background: rgba(251, 191, 36, 0.06);
655
+ border: 1px solid rgba(251, 191, 36, 0.15);
656
+ }
657
+ .insight-row.info {
658
+ background: rgba(96, 165, 250, 0.06);
659
+ border: 1px solid rgba(96, 165, 250, 0.15);
660
+ }
661
+ .insight-row.tip {
662
+ background: rgba(74, 222, 128, 0.06);
663
+ border: 1px solid rgba(74, 222, 128, 0.15);
664
+ }
665
+ .insight-row.promote {
666
+ background: rgba(192, 132, 252, 0.06);
667
+ border: 1px solid rgba(192, 132, 252, 0.15);
668
+ }
669
+
670
+ .report-card {
671
+ margin-bottom: 1.25rem;
672
+ }
673
+ .report-subtitle {
674
+ font-size: 0.72rem;
675
+ color: var(--text-dim);
676
+ margin-bottom: 0.75rem;
677
+ }
678
+ .report-stats {
679
+ display: flex;
680
+ flex-wrap: wrap;
681
+ gap: 0.5rem;
682
+ margin-bottom: 0.75rem;
683
+ }
684
+ .report-stat {
685
+ background: var(--bg);
686
+ border: 1px solid var(--border);
687
+ border-radius: 6px;
688
+ padding: 0.4rem 0.6rem;
689
+ text-align: center;
690
+ min-width: 70px;
691
+ }
692
+ .report-stat b {
693
+ display: block;
694
+ font-size: 1rem;
695
+ color: var(--accent);
696
+ }
697
+ .report-stat span {
698
+ font-size: 0.55rem;
699
+ color: var(--text-dim);
700
+ text-transform: uppercase;
701
+ letter-spacing: 0.04em;
702
+ }
703
+ .report-glance {
704
+ display: flex;
705
+ flex-direction: column;
706
+ gap: 0.5rem;
707
+ margin-bottom: 0.75rem;
708
+ }
709
+ .report-glance-item {
710
+ font-size: 0.75rem;
711
+ line-height: 1.5;
712
+ color: var(--text-dim);
713
+ padding: 0.5rem 0.6rem;
714
+ background: var(--bg);
715
+ border-radius: 6px;
716
+ border: 1px solid var(--border);
717
+ }
718
+ .report-glance-item strong {
719
+ color: var(--text);
720
+ font-weight: 600;
721
+ }
722
+ .report-link {
723
+ display: inline-block;
724
+ margin-top: 0.5rem;
725
+ font-size: 0.72rem;
726
+ color: var(--accent);
727
+ text-decoration: none;
728
+ }
729
+ .report-link:hover {
730
+ text-decoration: underline;
731
+ }
732
+ .mcp-former {
733
+ opacity: 0.4;
734
+ }
735
+ .badge.mcp-former-badge {
736
+ color: var(--text-dim);
737
+ border-color: var(--border);
738
+ background: var(--surface2);
739
+ font-style: italic;
740
+ }
741
+
742
+ .usage-bar-row {
743
+ display: flex;
744
+ align-items: center;
745
+ gap: 0.5rem;
746
+ padding: 0.25rem 0;
747
+ font-size: 0.75rem;
748
+ }
749
+ .usage-bar-label {
750
+ width: 100px;
751
+ flex-shrink: 0;
752
+ color: var(--text);
753
+ font-weight: 500;
754
+ font-size: 0.72rem;
755
+ }
756
+ .usage-bar-track {
757
+ flex: 1;
758
+ height: 8px;
759
+ background: var(--surface2);
760
+ border-radius: 4px;
761
+ overflow: hidden;
762
+ }
763
+ .usage-bar-fill {
764
+ height: 100%;
765
+ border-radius: 4px;
766
+ transition: width 0.3s;
767
+ }
768
+ .usage-bar-tool {
769
+ background: linear-gradient(90deg, var(--blue), var(--green));
770
+ }
771
+ .usage-bar-lang {
772
+ background: linear-gradient(90deg, var(--green), var(--accent));
773
+ }
774
+ .usage-bar-error {
775
+ background: linear-gradient(90deg, var(--red), var(--yellow));
776
+ }
777
+ .usage-bar-count {
778
+ font-size: 0.65rem;
779
+ color: var(--text-dim);
780
+ min-width: 40px;
781
+ text-align: right;
782
+ font-variant-numeric: tabular-nums;
783
+ }
784
+
785
+ .heatmap {
786
+ display: grid;
787
+ grid-template-rows: repeat(7, 10px);
788
+ grid-auto-flow: column;
789
+ grid-auto-columns: 10px;
790
+ gap: 3px;
791
+ overflow-x: auto;
792
+ width: fit-content;
793
+ max-width: 100%;
794
+ }
795
+ .heatmap-cell {
796
+ border-radius: 2px;
797
+ background: var(--surface2);
798
+ width: 10px;
799
+ height: 10px;
800
+ }
801
+ .heatmap-cell.l1 {
802
+ background: #0e4429;
803
+ }
804
+ .heatmap-cell.l2 {
805
+ background: #006d32;
806
+ }
807
+ .heatmap-cell.l3 {
808
+ background: #26a641;
809
+ }
810
+ .heatmap-cell.l4 {
811
+ background: #39d353;
812
+ }
813
+ [data-theme="light"] .heatmap-cell.l1 {
814
+ background: #9be9a8;
815
+ }
816
+ [data-theme="light"] .heatmap-cell.l2 {
817
+ background: #40c463;
818
+ }
819
+ [data-theme="light"] .heatmap-cell.l3 {
820
+ background: #30a14e;
821
+ }
822
+ [data-theme="light"] .heatmap-cell.l4 {
823
+ background: #216e39;
824
+ }
825
+
826
+ .heatmap-months {
827
+ display: flex;
828
+ font-size: 0.5rem;
829
+ color: var(--text-dim);
830
+ margin-bottom: 0.2rem;
831
+ }
832
+ .heatmap-month {
833
+ flex: 1;
834
+ }
835
+
836
+ .chart-tooltip {
837
+ position: fixed;
838
+ pointer-events: none;
839
+ background: var(--surface);
840
+ color: var(--text);
841
+ border: 1px solid var(--border);
842
+ border-radius: 6px;
843
+ padding: 0.3rem 0.5rem;
844
+ font-size: 0.7rem;
845
+ white-space: nowrap;
846
+ z-index: 999;
847
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
848
+ opacity: 0;
849
+ transition: opacity 0.1s;
850
+ }
851
+ .chart-tooltip.visible {
852
+ opacity: 1;
853
+ }
854
+
855
+ .peak-hours {
856
+ display: flex;
857
+ align-items: flex-end;
858
+ gap: 2px;
859
+ height: 40px;
860
+ }
861
+ .peak-bar {
862
+ flex: 1;
863
+ background: var(--purple);
864
+ border-radius: 2px 2px 0 0;
865
+ min-width: 4px;
866
+ opacity: 0.7;
867
+ }
868
+ .peak-labels {
869
+ display: flex;
870
+ gap: 2px;
871
+ font-size: 0.45rem;
872
+ color: var(--text-dim);
873
+ }
874
+ .peak-label {
875
+ flex: 1;
876
+ text-align: center;
877
+ min-width: 4px;
878
+ }
879
+
880
+ .model-row {
881
+ display: flex;
882
+ justify-content: space-between;
883
+ padding: 0.2rem 0;
884
+ font-size: 0.72rem;
885
+ border-bottom: 1px solid var(--border);
886
+ }
887
+ .model-row:last-child {
888
+ border-bottom: none;
889
+ }
890
+ .model-name {
891
+ color: var(--text);
892
+ font-weight: 500;
893
+ }
894
+ .model-tokens {
895
+ color: var(--text-dim);
896
+ font-variant-numeric: tabular-nums;
897
+ }
898
+ .token-breakdown {
899
+ margin-top: 0.25rem;
900
+ }
901
+ .tb-row {
902
+ display: flex;
903
+ justify-content: space-between;
904
+ padding: 0.15rem 0;
905
+ font-size: 0.68rem;
906
+ }
907
+ .tb-label {
908
+ color: var(--text-dim);
909
+ }
910
+ .tb-val {
911
+ color: var(--text);
912
+ font-variant-numeric: tabular-nums;
913
+ font-weight: 500;
914
+ }
915
+
916
+ .health-bar {
917
+ height: 4px;
918
+ background: var(--surface2);
919
+ border-radius: 2px;
920
+ margin: 0.4rem 0 0.5rem;
921
+ position: relative;
922
+ overflow: hidden;
923
+ }
924
+ .health-fill {
925
+ height: 100%;
926
+ border-radius: 2px;
927
+ transition: width 0.3s;
928
+ }
929
+ .health-label {
930
+ position: absolute;
931
+ right: 0;
932
+ top: -14px;
933
+ font-size: 0.55rem;
934
+ color: var(--text-dim);
935
+ }
936
+ .badge.stack {
937
+ color: var(--accent);
938
+ border-color: var(--accent-dim);
939
+ background: rgba(196, 149, 106, 0.08);
940
+ text-transform: none;
941
+ }
942
+ .drift {
943
+ font-size: 0.58rem;
944
+ margin-left: 0.4rem;
945
+ font-weight: 600;
946
+ }
947
+ .drift-low {
948
+ color: var(--text-dim);
949
+ }
950
+ .drift-medium {
951
+ color: var(--yellow);
952
+ }
953
+ .drift-high {
954
+ color: var(--red);
955
+ }
956
+ .quick-wins {
957
+ display: flex;
958
+ flex-wrap: wrap;
959
+ gap: 0.3rem;
960
+ margin-bottom: 0.5rem;
961
+ }
962
+ .quick-win {
963
+ font-size: 0.6rem;
964
+ padding: 0.15rem 0.4rem;
965
+ border-radius: 3px;
966
+ background: rgba(251, 191, 36, 0.08);
967
+ border: 1px solid rgba(251, 191, 36, 0.2);
968
+ color: var(--yellow);
969
+ }
970
+ .matched-skills {
971
+ display: flex;
972
+ flex-wrap: wrap;
973
+ gap: 0.3rem;
974
+ margin-bottom: 0.5rem;
975
+ }
976
+ .matched-skill {
977
+ font-size: 0.6rem;
978
+ padding: 0.12rem 0.4rem;
979
+ border-radius: 3px;
980
+ background: rgba(251, 191, 36, 0.08);
981
+ border: 1px solid rgba(251, 191, 36, 0.2);
982
+ color: var(--yellow);
983
+ font-family: "SF Mono", monospace;
984
+ }
985
+ .similar-repos {
986
+ display: flex;
987
+ flex-wrap: wrap;
988
+ gap: 0.3rem;
989
+ margin-bottom: 0.5rem;
990
+ }
991
+ .similar-repo {
992
+ font-size: 0.6rem;
993
+ padding: 0.12rem 0.4rem;
994
+ border-radius: 3px;
995
+ background: rgba(99, 179, 237, 0.08);
996
+ border: 1px solid rgba(99, 179, 237, 0.2);
997
+ color: var(--blue);
998
+ font-family: "SF Mono", monospace;
999
+ }
1000
+ .similar-repo small {
1001
+ opacity: 0.6;
1002
+ }
1003
+ .consolidation-hint {
1004
+ padding: 0.45rem 0.6rem;
1005
+ background: var(--surface2);
1006
+ border-radius: 6px;
1007
+ margin-top: 0.4rem;
1008
+ display: flex;
1009
+ align-items: baseline;
1010
+ gap: 0.5rem;
1011
+ }
1012
+ .consolidation-hint:first-child {
1013
+ margin-top: 0;
1014
+ }
1015
+ .consolidation-stack {
1016
+ font-size: 0.7rem;
1017
+ font-weight: 600;
1018
+ color: var(--accent);
1019
+ white-space: nowrap;
1020
+ }
1021
+ .consolidation-text {
1022
+ font-size: 0.7rem;
1023
+ color: var(--text-dim);
1024
+ }
1025
+
1026
+ .unconfigured-item .stack-tag {
1027
+ font-size: 0.5rem;
1028
+ color: var(--accent-dim);
1029
+ margin-left: 0.3rem;
1030
+ }
1031
+
1032
+ .freshness-dot {
1033
+ display: inline-block;
1034
+ width: 6px;
1035
+ height: 6px;
1036
+ border-radius: 50%;
1037
+ }
1038
+ .freshness-dot.fresh {
1039
+ background: var(--green);
1040
+ }
1041
+ .freshness-dot.aging {
1042
+ background: var(--yellow);
1043
+ }
1044
+ .freshness-dot.stale {
1045
+ background: var(--red);
1046
+ }
1047
+
1048
+ .repo-body {
1049
+ padding: 0 1rem 1rem;
1050
+ }
1051
+ .repo-meta {
1052
+ display: flex;
1053
+ justify-content: space-between;
1054
+ align-items: center;
1055
+ margin-bottom: 0.5rem;
1056
+ padding-bottom: 0.4rem;
1057
+ border-bottom: 1px solid var(--border);
1058
+ }
1059
+ .repo-path {
1060
+ font-size: 0.68rem;
1061
+ color: var(--text-dim);
1062
+ font-family: "SF Mono", monospace;
1063
+ }
1064
+ .freshness {
1065
+ font-size: 0.65rem;
1066
+ font-weight: 500;
1067
+ }
1068
+ .freshness.fresh {
1069
+ color: var(--green);
1070
+ }
1071
+ .freshness.aging {
1072
+ color: var(--yellow);
1073
+ }
1074
+ .freshness.stale {
1075
+ color: var(--red);
1076
+ }
1077
+ .repo-desc {
1078
+ color: var(--text-dim);
1079
+ font-size: 0.75rem;
1080
+ line-height: 1.45;
1081
+ margin-bottom: 0.75rem;
1082
+ padding-bottom: 0.6rem;
1083
+ border-bottom: 1px solid var(--border);
1084
+ }
1085
+
1086
+ .unconfigured-grid {
1087
+ display: grid;
1088
+ grid-template-columns: repeat(4, 1fr);
1089
+ gap: 0.4rem;
1090
+ }
1091
+ @media (max-width: 900px) {
1092
+ .unconfigured-grid {
1093
+ grid-template-columns: repeat(2, 1fr);
1094
+ }
1095
+ }
1096
+ .unconfigured-item {
1097
+ font-size: 0.72rem;
1098
+ padding: 0.3rem 0.5rem;
1099
+ border-radius: 4px;
1100
+ background: var(--surface2);
1101
+ color: var(--text-dim);
1102
+ }
1103
+ .unconfigured-item .upath {
1104
+ font-size: 0.6rem;
1105
+ color: #555;
1106
+ display: block;
1107
+ overflow: hidden;
1108
+ text-overflow: ellipsis;
1109
+ white-space: nowrap;
1110
+ }
1111
+ .suggestion-hints {
1112
+ display: flex;
1113
+ flex-wrap: wrap;
1114
+ gap: 0.2rem;
1115
+ margin-top: 0.25rem;
1116
+ }
1117
+ .suggestion-hint {
1118
+ font-size: 0.5rem;
1119
+ padding: 0.08rem 0.3rem;
1120
+ border-radius: 2px;
1121
+ background: rgba(96, 165, 250, 0.08);
1122
+ border: 1px solid rgba(96, 165, 250, 0.15);
1123
+ color: var(--blue);
1124
+ }
1125
+
1126
+ .ts {
1127
+ text-align: center;
1128
+ color: var(--text-dim);
1129
+ font-size: 0.65rem;
1130
+ margin-top: 2rem;
1131
+ padding-top: 1rem;
1132
+ border-top: 1px solid var(--border);
1133
+ }
1134
+
1135
+ .theme-toggle {
1136
+ position: fixed;
1137
+ top: 1rem;
1138
+ right: 1rem;
1139
+ z-index: 100;
1140
+ background: var(--surface);
1141
+ border: 1px solid var(--border);
1142
+ border-radius: 8px;
1143
+ padding: 0.4rem 0.6rem;
1144
+ cursor: pointer;
1145
+ color: var(--text-dim);
1146
+ font-size: 0.75rem;
1147
+ transition:
1148
+ background 0.15s,
1149
+ border-color 0.15s;
1150
+ }
1151
+ .theme-toggle:hover {
1152
+ border-color: var(--accent-dim);
1153
+ }
1154
+ .theme-icon::before {
1155
+ content: "\263E";
1156
+ }
1157
+ [data-theme="light"] .theme-icon::before {
1158
+ content: "\2600";
1159
+ }
1160
+
1161
+ .ref-grid {
1162
+ display: grid;
1163
+ grid-template-columns: 1fr 1fr;
1164
+ gap: 1.25rem;
1165
+ }
1166
+ @media (max-width: 700px) {
1167
+ .ref-grid {
1168
+ grid-template-columns: 1fr;
1169
+ }
1170
+ }
1171
+ .ref-row {
1172
+ display: flex;
1173
+ align-items: baseline;
1174
+ gap: 0.5rem;
1175
+ padding: 0.2rem 0;
1176
+ font-size: 0.72rem;
1177
+ }
1178
+ .ref-cmd {
1179
+ font-size: 0.7rem;
1180
+ color: var(--green);
1181
+ white-space: nowrap;
1182
+ min-width: 100px;
1183
+ }
1184
+ .ref-key {
1185
+ min-width: 90px;
1186
+ font-size: 0.65rem;
1187
+ }
1188
+ .ref-desc {
1189
+ color: var(--text-dim);
1190
+ font-size: 0.68rem;
1191
+ }
1192
+
1193
+ details.skill-category > summary {
1194
+ cursor: pointer;
1195
+ list-style: none;
1196
+ }
1197
+ details.skill-category > summary::-webkit-details-marker {
1198
+ display: none;
1199
+ }
1200
+ details.skill-category > summary:hover {
1201
+ color: var(--accent);
1202
+ }
1203
+ details.skill-category[open] > summary {
1204
+ color: var(--blue);
1205
+ }
1206
+
1207
+ .group-controls {
1208
+ display: flex;
1209
+ align-items: center;
1210
+ gap: 0.5rem;
1211
+ margin-bottom: 1rem;
1212
+ }
1213
+ .group-label {
1214
+ font-size: 0.7rem;
1215
+ color: var(--text-dim);
1216
+ text-transform: uppercase;
1217
+ letter-spacing: 0.06em;
1218
+ }
1219
+ .group-select {
1220
+ font-size: 0.75rem;
1221
+ padding: 0.3rem 0.5rem;
1222
+ background: var(--surface);
1223
+ color: var(--text);
1224
+ border: 1px solid var(--border);
1225
+ border-radius: 6px;
1226
+ outline: none;
1227
+ font-family: inherit;
1228
+ }
1229
+ .group-select:focus {
1230
+ border-color: var(--accent-dim);
1231
+ }
1232
+ .group-heading {
1233
+ font-size: 0.75rem;
1234
+ font-weight: 700;
1235
+ text-transform: uppercase;
1236
+ letter-spacing: 0.06em;
1237
+ color: var(--accent);
1238
+ padding: 0.5rem 0 0.25rem;
1239
+ margin-top: 0.75rem;
1240
+ border-bottom: 1px solid var(--border);
1241
+ grid-column: 1 / -1;
1242
+ }
1243
+
1244
+ .repo-card[open] .repo-preview {
1245
+ display: none;
1246
+ }
1247
+ details.cmd-detail[open] .cmd-desc {
1248
+ white-space: normal;
1249
+ text-overflow: unset;
1250
+ overflow: visible;
1251
+ }