pi-inspect 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,1443 @@
1
+ /* === VARIABLES (from cck) === */
2
+
3
+ :root {
4
+ --bg-deep: #101114;
5
+ --bg-surface: #16181c;
6
+ --bg-elevated: #1e2025;
7
+ --bg-hover: #282a30;
8
+ --border: #363840;
9
+ --text-primary: #f0f1f3;
10
+ --text-secondary: #c2c4c9;
11
+ --text-tertiary: #9a9da5;
12
+ --text-muted: #7d808a;
13
+ --accent: #e86f33;
14
+ --accent-text: #f0a070;
15
+ --accent-dim: rgba(232, 111, 51, 0.22);
16
+ --accent-glow: rgba(232, 111, 51, 0.55);
17
+ --success: #3ecf8e;
18
+ --success-dim: rgba(62, 207, 142, 0.18);
19
+ --warning: #f0b429;
20
+ --warning-dim: rgba(240, 180, 41, 0.18);
21
+ --error: #ef4444;
22
+ --error-dim: rgba(239, 68, 68, 0.18);
23
+ --team: #c4956a;
24
+ --team-dim: rgba(196, 149, 106, 0.18);
25
+ --plan: #86a886;
26
+ --plan-dim: rgba(134, 168, 134, 0.18);
27
+ --mono: 'IBM Plex Mono', monospace;
28
+ --serif: 'Playfair Display', serif;
29
+
30
+ --scope-user: #c4956a;
31
+ --scope-user-dim: rgba(196, 149, 106, 0.18);
32
+ --scope-project: #7ab5a0;
33
+ --scope-project-dim: rgba(122, 181, 160, 0.18);
34
+ --scope-local: #8a9bb5;
35
+ --scope-local-dim: rgba(138, 155, 181, 0.18);
36
+ }
37
+
38
+ body.light {
39
+ --bg-deep: #e8e6e3;
40
+ --bg-surface: #f4f3f1;
41
+ --bg-elevated: #dddbd8;
42
+ --bg-hover: #d2d0cc;
43
+ --border: #a09b94;
44
+ --text-primary: #0a0a0a;
45
+ --text-secondary: #333333;
46
+ --text-tertiary: #555555;
47
+ --text-muted: #777777;
48
+ --accent-text: #b85a20;
49
+ --accent-dim: rgba(232, 111, 51, 0.18);
50
+ --accent-glow: rgba(232, 111, 51, 0.5);
51
+ --success: #1a8a5a;
52
+ --success-dim: rgba(26, 138, 90, 0.15);
53
+ --warning: #b07d0a;
54
+ --warning-dim: rgba(176, 125, 10, 0.15);
55
+ --error: #c53030;
56
+ --error-dim: rgba(197, 48, 48, 0.15);
57
+ --plan: #5a7a5a;
58
+ --plan-dim: rgba(90, 122, 90, 0.15);
59
+
60
+ --scope-user: #8a7055;
61
+ --scope-user-dim: rgba(138, 112, 85, 0.12);
62
+ --scope-project: #4d8a72;
63
+ --scope-project-dim: rgba(77, 138, 114, 0.15);
64
+ --scope-local: #6b7d96;
65
+ --scope-local-dim: rgba(107, 125, 150, 0.12);
66
+ }
67
+
68
+ /* === RESET === */
69
+
70
+ * {
71
+ box-sizing: border-box;
72
+ margin: 0;
73
+ padding: 0;
74
+ }
75
+
76
+ body {
77
+ font-family: var(--mono);
78
+ font-size: 13px;
79
+ background: var(--bg-deep);
80
+ color: var(--text-primary);
81
+ line-height: 1.5;
82
+ height: 100vh;
83
+ display: flex;
84
+ flex-direction: column;
85
+ overflow: hidden;
86
+ -webkit-font-smoothing: antialiased;
87
+ }
88
+
89
+ /* === SCROLLBAR === */
90
+
91
+ ::-webkit-scrollbar {
92
+ width: 6px;
93
+ height: 6px;
94
+ }
95
+ ::-webkit-scrollbar-track {
96
+ background: transparent;
97
+ }
98
+ ::-webkit-scrollbar-thumb {
99
+ background: var(--border);
100
+ border-radius: 3px;
101
+ }
102
+ ::-webkit-scrollbar-thumb:hover {
103
+ background: var(--text-muted);
104
+ }
105
+
106
+ /* === TOPBAR === */
107
+
108
+ .topbar {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 12px;
112
+ padding: 10px 16px;
113
+ background: var(--bg-surface);
114
+ border-bottom: 1px solid var(--border);
115
+ flex-shrink: 0;
116
+ z-index: 10;
117
+ }
118
+
119
+ .topbar-logo {
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 10px;
123
+ }
124
+
125
+ .topbar-logo .logo-mark {
126
+ width: 24px;
127
+ height: 24px;
128
+ background: var(--accent);
129
+ border-radius: 6px;
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ }
134
+
135
+ .topbar-logo .logo-mark svg {
136
+ width: 14px;
137
+ height: 14px;
138
+ color: white;
139
+ }
140
+
141
+ .topbar-logo .logo-text {
142
+ font-family: var(--serif);
143
+ font-size: 17px;
144
+ font-weight: 500;
145
+ letter-spacing: -0.02em;
146
+ }
147
+
148
+ .accent {
149
+ color: var(--accent);
150
+ }
151
+ .spacer {
152
+ flex: 1;
153
+ }
154
+
155
+ .topbar-search {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 6px;
159
+ background: var(--bg-elevated);
160
+ border: 1px solid var(--border);
161
+ border-radius: 6px;
162
+ padding: 6px 10px;
163
+ transition: border-color 0.15s ease;
164
+ }
165
+ .topbar-search:focus-within {
166
+ border-color: var(--accent);
167
+ }
168
+ .topbar-search svg {
169
+ color: var(--text-muted);
170
+ flex-shrink: 0;
171
+ }
172
+ .topbar-search input {
173
+ background: none;
174
+ border: none;
175
+ color: var(--text-primary);
176
+ font-size: 12px;
177
+ font-family: var(--mono);
178
+ outline: none;
179
+ width: 200px;
180
+ }
181
+ .topbar-search input::placeholder {
182
+ color: var(--text-muted);
183
+ }
184
+
185
+ .topbar-select {
186
+ background: var(--bg-elevated);
187
+ border: 1px solid var(--border);
188
+ border-radius: 6px;
189
+ color: var(--text-secondary);
190
+ font-family: var(--mono);
191
+ font-size: 11px;
192
+ padding: 4px 8px;
193
+ outline: none;
194
+ cursor: pointer;
195
+ }
196
+ .topbar-select:focus {
197
+ border-color: var(--accent);
198
+ }
199
+ .topbar-select option {
200
+ background: var(--bg-surface);
201
+ color: var(--text-primary);
202
+ }
203
+
204
+ .topbar-project {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 6px;
208
+ font-size: 11px;
209
+ color: var(--text-tertiary);
210
+ background: var(--bg-elevated);
211
+ padding: 6px 10px;
212
+ border-radius: 6px;
213
+ cursor: pointer;
214
+ border: 1px solid var(--border);
215
+ max-width: 300px;
216
+ transition: all 0.15s ease;
217
+ }
218
+ .topbar-project:hover {
219
+ border-color: var(--accent);
220
+ color: var(--text-secondary);
221
+ }
222
+ .topbar-project svg {
223
+ color: var(--text-muted);
224
+ flex-shrink: 0;
225
+ }
226
+ .topbar-project span {
227
+ overflow: hidden;
228
+ text-overflow: ellipsis;
229
+ white-space: nowrap;
230
+ }
231
+
232
+ .topbar-btn {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 5px;
236
+ padding: 6px 10px;
237
+ border-radius: 6px;
238
+ font-size: 11px;
239
+ font-weight: 500;
240
+ cursor: pointer;
241
+ border: 1px solid var(--border);
242
+ background: var(--bg-elevated);
243
+ color: var(--text-tertiary);
244
+ font-family: var(--mono);
245
+ transition: all 0.15s ease;
246
+ white-space: nowrap;
247
+ text-transform: uppercase;
248
+ letter-spacing: 0.03em;
249
+ }
250
+ .topbar-btn:hover {
251
+ border-color: var(--accent);
252
+ color: var(--text-secondary);
253
+ }
254
+ .topbar-btn svg {
255
+ color: var(--text-muted);
256
+ }
257
+ .topbar-btn.loading svg {
258
+ animation: spin 1s linear infinite;
259
+ }
260
+ @keyframes spin {
261
+ from {
262
+ transform: rotate(0deg);
263
+ }
264
+ to {
265
+ transform: rotate(360deg);
266
+ }
267
+ }
268
+
269
+ /* === MAIN LAYOUT === */
270
+
271
+ .main-layout {
272
+ display: flex;
273
+ flex: 1;
274
+ min-height: 0;
275
+ overflow: hidden;
276
+ }
277
+
278
+ /* === TREE PANEL === */
279
+
280
+ .tree-panel {
281
+ flex: 0 0 var(--sidebar-w, 60%);
282
+ display: flex;
283
+ flex-direction: column;
284
+ overflow: hidden;
285
+ min-width: 200px;
286
+ }
287
+
288
+ .resize-handle {
289
+ width: 4px;
290
+ flex-shrink: 0;
291
+ cursor: col-resize;
292
+ background: transparent;
293
+ transition: background 0.15s;
294
+ position: relative;
295
+ z-index: 1;
296
+ }
297
+ .resize-handle:hover,
298
+ .resize-handle.is-dragging {
299
+ background: var(--accent);
300
+ }
301
+
302
+ .tree-expand-toggle {
303
+ padding: 4px 12px;
304
+ font-size: 10px;
305
+ color: var(--text-muted);
306
+ cursor: pointer;
307
+ text-transform: uppercase;
308
+ letter-spacing: 0.5px;
309
+ font-family: var(--mono);
310
+ }
311
+ .tree-expand-toggle:hover {
312
+ color: var(--accent);
313
+ }
314
+
315
+ .tree-container {
316
+ flex: 1;
317
+ min-height: 0;
318
+ overflow-y: auto;
319
+ overflow-x: hidden;
320
+ }
321
+
322
+ .loading {
323
+ display: flex;
324
+ align-items: center;
325
+ justify-content: center;
326
+ height: 100%;
327
+ color: var(--text-muted);
328
+ font-size: 12px;
329
+ }
330
+
331
+ /* === TREE ROWS === */
332
+
333
+ .tree-row {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: 6px;
337
+ padding: 7px 12px;
338
+ font-size: 13px;
339
+ cursor: pointer;
340
+ transition: background 0.1s ease;
341
+ min-height: 38px;
342
+ flex-wrap: nowrap;
343
+ border-left: 2px solid transparent;
344
+ }
345
+ .tree-row:hover {
346
+ background: var(--bg-hover);
347
+ }
348
+ .tree-row.selected {
349
+ background: var(--bg-hover);
350
+ border-left-color: var(--accent);
351
+ }
352
+ .tree-row.focused {
353
+ outline: 1px solid var(--accent);
354
+ outline-offset: -1px;
355
+ background: var(--bg-hover);
356
+ }
357
+ .tree-row.marketplace-row {
358
+ background: var(--bg-surface);
359
+ border-bottom: 1px solid var(--border);
360
+ position: sticky;
361
+ top: 0;
362
+ z-index: 2;
363
+ font-size: 12px;
364
+ text-transform: uppercase;
365
+ letter-spacing: 0.04em;
366
+ padding: 8px 12px;
367
+ }
368
+ .tree-row.marketplace-row.virtual .tree-icon {
369
+ color: var(--plan);
370
+ }
371
+
372
+ .tree-indent {
373
+ flex-shrink: 0;
374
+ }
375
+ .tree-chevron {
376
+ width: 16px;
377
+ height: 16px;
378
+ display: flex;
379
+ align-items: center;
380
+ justify-content: center;
381
+ color: var(--text-muted);
382
+ font-size: 9px;
383
+ transition: transform 0.15s ease;
384
+ flex-shrink: 0;
385
+ }
386
+ .tree-chevron.expanded {
387
+ transform: rotate(90deg);
388
+ }
389
+ .tree-icon {
390
+ flex-shrink: 0;
391
+ width: 18px;
392
+ display: flex;
393
+ align-items: center;
394
+ justify-content: center;
395
+ opacity: 0.45;
396
+ }
397
+ .tree-icon svg {
398
+ width: 15px;
399
+ height: 15px;
400
+ }
401
+ .tree-label {
402
+ flex-shrink: 0;
403
+ white-space: nowrap;
404
+ text-overflow: ellipsis;
405
+ color: var(--text-secondary);
406
+ }
407
+ .version {
408
+ font-size: 11px;
409
+ color: var(--accent);
410
+ background: var(--accent-dim);
411
+ padding: 1px 5px;
412
+ border-radius: 3px;
413
+ margin-left: 6px;
414
+ font-family: var(--mono);
415
+ letter-spacing: 0.02em;
416
+ white-space: nowrap;
417
+ flex-shrink: 0;
418
+ }
419
+ .tree-label .mkt-name {
420
+ font-weight: 600;
421
+ color: var(--text-primary);
422
+ }
423
+ .tree-subgroup-label {
424
+ font-size: 11px;
425
+ color: var(--text-muted);
426
+ text-transform: uppercase;
427
+ letter-spacing: 0.05em;
428
+ }
429
+ .tree-subgroup .mkt-name {
430
+ font-size: 11px;
431
+ font-weight: 600;
432
+ }
433
+ .tree-subgroup .tree-icon { width: 14px; height: 14px; }
434
+ .tree-subgroup .tree-icon svg { width: 14px; height: 14px; }
435
+ .tree-meta {
436
+ font-size: 10px;
437
+ color: var(--text-muted);
438
+ flex-shrink: 0;
439
+ white-space: nowrap;
440
+ }
441
+
442
+ /* === SCOPE TOGGLE BOXES === */
443
+
444
+ .scope-toggles {
445
+ display: flex;
446
+ gap: 3px;
447
+ flex-shrink: 0;
448
+ }
449
+ .scope-toggle {
450
+ width: 20px;
451
+ height: 16px;
452
+ border-radius: 3px;
453
+ font-size: 9px;
454
+ font-weight: 700;
455
+ display: flex;
456
+ align-items: center;
457
+ justify-content: center;
458
+ cursor: pointer;
459
+ transition: all 0.15s ease;
460
+ border: 1px solid;
461
+ font-family: var(--mono);
462
+ }
463
+ .scope-toggle:hover {
464
+ transform: scale(1.15);
465
+ }
466
+
467
+ .scope-toggle.user {
468
+ border-color: rgba(196, 149, 106, 0.4);
469
+ color: rgba(196, 149, 106, 0.5);
470
+ }
471
+ .scope-toggle.user.active {
472
+ background: var(--scope-user-dim);
473
+ color: var(--scope-user);
474
+ border-color: var(--scope-user);
475
+ }
476
+ .scope-toggle.user.disabled {
477
+ background: transparent;
478
+ color: var(--scope-user);
479
+ border-color: var(--scope-user);
480
+ }
481
+
482
+ .scope-toggle.project {
483
+ border-color: rgba(122, 181, 160, 0.4);
484
+ color: rgba(122, 181, 160, 0.5);
485
+ }
486
+ .scope-toggle.project.active {
487
+ background: var(--scope-project-dim);
488
+ color: var(--scope-project);
489
+ border-color: var(--scope-project);
490
+ }
491
+ .scope-toggle.project.disabled {
492
+ background: transparent;
493
+ color: var(--scope-project);
494
+ border-color: var(--scope-project);
495
+ }
496
+
497
+ .scope-toggle.local {
498
+ border-color: rgba(138, 155, 181, 0.4);
499
+ color: rgba(138, 155, 181, 0.5);
500
+ }
501
+ .scope-toggle.local.active {
502
+ background: var(--scope-local-dim);
503
+ color: var(--scope-local);
504
+ border-color: var(--scope-local);
505
+ }
506
+ .scope-toggle.local.disabled {
507
+ background: transparent;
508
+ color: var(--scope-local);
509
+ border-color: var(--scope-local);
510
+ }
511
+ .scope-toggle.disabled {
512
+ text-decoration: line-through;
513
+ text-decoration-thickness: 1px;
514
+ opacity: 0.75;
515
+ }
516
+
517
+ /* Light theme: boost inactive scope contrast further */
518
+ body.light .scope-toggle.user {
519
+ border-color: rgba(138, 112, 85, 0.4);
520
+ color: rgba(138, 112, 85, 0.5);
521
+ }
522
+ body.light .scope-toggle.project {
523
+ border-color: rgba(77, 138, 114, 0.5);
524
+ color: rgba(77, 138, 114, 0.6);
525
+ }
526
+ body.light .scope-toggle.local {
527
+ border-color: rgba(107, 125, 150, 0.4);
528
+ color: rgba(107, 125, 150, 0.5);
529
+ }
530
+
531
+ /* === BADGES === */
532
+
533
+ .badge {
534
+ padding: 1px 7px;
535
+ border-radius: 4px;
536
+ font-size: 10px;
537
+ font-weight: 500;
538
+ flex-shrink: 0;
539
+ text-transform: uppercase;
540
+ letter-spacing: 0.03em;
541
+ }
542
+ .badge-github {
543
+ background: var(--accent-dim);
544
+ color: var(--accent-text);
545
+ display: inline-flex;
546
+ align-items: center;
547
+ gap: 3px;
548
+ }
549
+ .badge-directory {
550
+ background: var(--warning-dim);
551
+ color: var(--warning);
552
+ }
553
+ .badge-git {
554
+ background: var(--team-dim);
555
+ color: var(--team);
556
+ }
557
+ .badge-virtual {
558
+ background: var(--plan-dim);
559
+ color: var(--plan);
560
+ }
561
+
562
+ /* === UPDATE INDICATORS === */
563
+
564
+ .update-indicator {
565
+ color: var(--success);
566
+ font-weight: 700;
567
+ font-size: 12px;
568
+ margin-left: 4px;
569
+ }
570
+
571
+ .update-badge {
572
+ font-size: 10px;
573
+ color: var(--success);
574
+ background: var(--success-dim);
575
+ padding: 1px 6px;
576
+ border-radius: 3px;
577
+ flex-shrink: 0;
578
+ font-weight: 500;
579
+ }
580
+
581
+ .update-banner {
582
+ display: flex;
583
+ align-items: center;
584
+ justify-content: space-between;
585
+ gap: 12px;
586
+ padding: 10px 12px;
587
+ margin-bottom: 16px;
588
+ background: var(--success-dim);
589
+ border: 1px solid rgba(62, 207, 142, 0.3);
590
+ border-radius: 6px;
591
+ font-size: 12px;
592
+ color: var(--success);
593
+ }
594
+
595
+ .badge-count {
596
+ font-size: 10px;
597
+ color: var(--text-muted);
598
+ flex-shrink: 0;
599
+ }
600
+
601
+ .mkt-info-btn {
602
+ background: none;
603
+ border: none;
604
+ outline: none;
605
+ color: var(--text-muted);
606
+ cursor: pointer;
607
+ padding: 4px;
608
+ margin-left: auto;
609
+ border-radius: 4px;
610
+ display: flex;
611
+ align-items: center;
612
+ flex-shrink: 0;
613
+ }
614
+ .mkt-info-btn:hover {
615
+ color: var(--accent);
616
+ }
617
+
618
+ .detail-meta-grid {
619
+ display: grid;
620
+ grid-template-columns: auto 1fr;
621
+ gap: 6px 12px;
622
+ font-size: 12px;
623
+ }
624
+ .meta-label {
625
+ color: var(--text-muted);
626
+ white-space: nowrap;
627
+ }
628
+ .meta-value {
629
+ color: var(--text-secondary);
630
+ }
631
+
632
+ .mkt-actions {
633
+ display: flex;
634
+ gap: 8px;
635
+ }
636
+
637
+ .mkt-plugin-item {
638
+ display: flex;
639
+ justify-content: space-between;
640
+ padding: 5px 8px;
641
+ font-size: 12px;
642
+ color: var(--text-secondary);
643
+ border-radius: 4px;
644
+ cursor: pointer;
645
+ transition: background 0.1s;
646
+ }
647
+ .mkt-plugin-item:hover {
648
+ background: var(--bg-hover);
649
+ }
650
+
651
+ /* === TREE CHILDREN === */
652
+
653
+ .tree-children {
654
+ display: none;
655
+ }
656
+ .tree-children.open {
657
+ display: block;
658
+ }
659
+
660
+ .tree-desc-inline {
661
+ font-size: 12px;
662
+ color: var(--text-tertiary);
663
+ opacity: 1;
664
+ white-space: nowrap;
665
+ overflow: hidden;
666
+ text-overflow: ellipsis;
667
+ min-width: 0;
668
+ flex: 1 1 0;
669
+ }
670
+
671
+ /* === COMPONENT ROWS === */
672
+
673
+ .comp-row {
674
+ display: flex;
675
+ align-items: center;
676
+ gap: 6px;
677
+ padding: 3px 12px 3px 76px;
678
+ font-size: 11px;
679
+ color: var(--text-tertiary);
680
+ min-height: 26px;
681
+ }
682
+ .comp-row:hover {
683
+ background: var(--bg-hover);
684
+ cursor: pointer;
685
+ }
686
+ .comp-icon {
687
+ width: 16px;
688
+ display: flex;
689
+ align-items: center;
690
+ justify-content: center;
691
+ flex-shrink: 0;
692
+ opacity: 0.5;
693
+ }
694
+ .comp-icon svg {
695
+ width: 12px;
696
+ height: 12px;
697
+ }
698
+ .comp-count {
699
+ margin-left: auto;
700
+ font-size: 10px;
701
+ color: var(--text-muted);
702
+ font-family: var(--mono);
703
+ background: var(--bg-elevated);
704
+ padding: 0 5px;
705
+ border-radius: 3px;
706
+ }
707
+
708
+ /* === DETAIL PANEL === */
709
+
710
+ .detail-panel {
711
+ flex: 1;
712
+ min-width: 300px;
713
+ background: var(--bg-surface);
714
+ border-left: 1px solid var(--border);
715
+ display: flex;
716
+ flex-direction: column;
717
+ overflow: hidden;
718
+ }
719
+
720
+ .detail-empty {
721
+ display: flex;
722
+ flex-direction: column;
723
+ align-items: center;
724
+ justify-content: center;
725
+ height: 100%;
726
+ color: var(--text-muted);
727
+ gap: 12px;
728
+ font-size: 12px;
729
+ }
730
+
731
+ .detail-header {
732
+ padding: 14px 16px;
733
+ border-bottom: 1px solid var(--border);
734
+ display: flex;
735
+ align-items: center;
736
+ justify-content: space-between;
737
+ flex-shrink: 0;
738
+ background-image: linear-gradient(to right, transparent, var(--border), transparent);
739
+ background-size: 100% 1px;
740
+ background-repeat: no-repeat;
741
+ background-position: bottom;
742
+ border-bottom: none;
743
+ }
744
+ .detail-header h3 {
745
+ font-size: 14px;
746
+ font-weight: 600;
747
+ color: var(--text-primary);
748
+ display: flex;
749
+ align-items: center;
750
+ gap: 8px;
751
+ }
752
+ .detail-header h3 svg {
753
+ width: 16px;
754
+ height: 16px;
755
+ opacity: 0.5;
756
+ }
757
+ .detail-header h3 .version {
758
+ font-size: 11px;
759
+ font-weight: 400;
760
+ }
761
+ .detail-header-actions,
762
+ .modal-header-actions {
763
+ display: flex;
764
+ align-items: center;
765
+ gap: 4px;
766
+ }
767
+ .detail-close {
768
+ background: transparent;
769
+ border: 1px solid transparent;
770
+ border-radius: 6px;
771
+ color: var(--text-muted);
772
+ cursor: pointer;
773
+ font-size: 15px;
774
+ padding: 4px 8px;
775
+ transition: all 0.15s ease;
776
+ }
777
+ .detail-close:hover {
778
+ background: var(--bg-hover);
779
+ border-color: var(--border);
780
+ color: var(--text-secondary);
781
+ }
782
+ .detail-action {
783
+ background: transparent;
784
+ border: 1px solid transparent;
785
+ border-radius: 6px;
786
+ color: var(--text-muted);
787
+ cursor: pointer;
788
+ padding: 4px 6px;
789
+ display: inline-flex;
790
+ align-items: center;
791
+ transition: all 0.15s ease;
792
+ }
793
+ .detail-action svg { display: block; }
794
+ .detail-action:hover {
795
+ background: var(--bg-hover);
796
+ color: var(--text-primary);
797
+ }
798
+
799
+ .detail-body {
800
+ flex: 1;
801
+ overflow-y: auto;
802
+ padding: 16px;
803
+ }
804
+
805
+ .detail-section {
806
+ margin-bottom: 20px;
807
+ }
808
+ .detail-section h4 {
809
+ font-size: 10px;
810
+ text-transform: uppercase;
811
+ letter-spacing: 0.08em;
812
+ color: var(--text-muted);
813
+ margin-bottom: 8px;
814
+ font-weight: 600;
815
+ }
816
+
817
+ .detail-desc {
818
+ font-size: 12px;
819
+ line-height: 1.6;
820
+ color: var(--text-secondary);
821
+ margin-bottom: 10px;
822
+ }
823
+
824
+ .detail-meta-row {
825
+ display: flex;
826
+ gap: 8px;
827
+ align-items: center;
828
+ flex-wrap: wrap;
829
+ margin-bottom: 4px;
830
+ }
831
+ .detail-meta-item {
832
+ font-size: 10px;
833
+ color: var(--text-muted);
834
+ text-transform: uppercase;
835
+ letter-spacing: 0.03em;
836
+ }
837
+
838
+ .plugin-meta-bar {
839
+ display: flex;
840
+ align-items: center;
841
+ gap: 6px;
842
+ flex-wrap: wrap;
843
+ margin-top: 8px;
844
+ }
845
+ .meta-tag {
846
+ font-size: 9px;
847
+ padding: 2px 8px;
848
+ border-radius: 10px;
849
+ border: 1px solid var(--border);
850
+ color: var(--text-muted);
851
+ letter-spacing: 0.02em;
852
+ }
853
+ .meta-chip {
854
+ font-size: 10px;
855
+ color: var(--text-muted);
856
+ }
857
+ .meta-link {
858
+ font-size: 10px;
859
+ color: var(--text-muted);
860
+ text-decoration: none;
861
+ overflow: hidden;
862
+ text-overflow: ellipsis;
863
+ white-space: nowrap;
864
+ max-width: 260px;
865
+ }
866
+ .meta-link:hover {
867
+ color: var(--accent);
868
+ text-decoration: underline;
869
+ }
870
+
871
+ /* === SCOPE MATRIX === */
872
+
873
+ .scope-matrix {
874
+ display: flex;
875
+ flex-direction: column;
876
+ gap: 4px;
877
+ }
878
+ .scope-matrix-row {
879
+ display: flex;
880
+ align-items: center;
881
+ gap: 10px;
882
+ padding: 8px 10px;
883
+ background: var(--bg-elevated);
884
+ border-radius: 6px;
885
+ font-size: 12px;
886
+ border: 1px solid var(--border);
887
+ transition: border-color 0.15s ease;
888
+ }
889
+ .scope-matrix-row:hover {
890
+ border-color: var(--accent-dim);
891
+ }
892
+ .scope-matrix-label {
893
+ width: 60px;
894
+ font-weight: 700;
895
+ font-size: 10px;
896
+ text-transform: uppercase;
897
+ letter-spacing: 0.05em;
898
+ flex-shrink: 0;
899
+ }
900
+ .scope-matrix-label.user {
901
+ color: var(--scope-user);
902
+ }
903
+ .scope-matrix-label.project {
904
+ color: var(--scope-project);
905
+ }
906
+ .scope-matrix-label.local {
907
+ color: var(--scope-local);
908
+ }
909
+ .scope-matrix-status {
910
+ flex: 1;
911
+ color: var(--text-tertiary);
912
+ font-size: 11px;
913
+ }
914
+ .scope-matrix-actions {
915
+ display: flex;
916
+ gap: 4px;
917
+ flex-shrink: 0;
918
+ }
919
+
920
+ /* === ACTION BUTTONS === */
921
+
922
+ .action-btn {
923
+ padding: 4px 10px;
924
+ border-radius: 4px;
925
+ font-size: 10px;
926
+ font-weight: 500;
927
+ cursor: pointer;
928
+ border: 1px solid var(--border);
929
+ background: var(--bg-elevated);
930
+ color: var(--text-tertiary);
931
+ font-family: var(--mono);
932
+ transition: all 0.15s ease;
933
+ white-space: nowrap;
934
+ text-transform: uppercase;
935
+ letter-spacing: 0.03em;
936
+ }
937
+ .action-btn:hover {
938
+ border-color: var(--accent);
939
+ color: var(--text-secondary);
940
+ }
941
+ .action-btn:disabled {
942
+ opacity: 0.35;
943
+ cursor: not-allowed;
944
+ }
945
+ .action-btn.primary {
946
+ background: var(--accent);
947
+ border-color: var(--accent);
948
+ color: #fff;
949
+ }
950
+ .action-btn.primary:hover {
951
+ background: var(--accent-glow);
952
+ }
953
+ .action-btn.danger {
954
+ color: var(--error);
955
+ }
956
+ .action-btn.danger:hover {
957
+ border-color: var(--error);
958
+ }
959
+
960
+ /* === DETAIL COMPONENT ROWS === */
961
+
962
+ .detail-comp-group {
963
+ margin-bottom: 8px;
964
+ }
965
+ .detail-comp-header {
966
+ display: flex;
967
+ align-items: center;
968
+ gap: 8px;
969
+ padding: 7px 10px;
970
+ border-radius: 6px 6px 0 0;
971
+ font-size: 12px;
972
+ font-weight: 600;
973
+ color: var(--text-secondary);
974
+ background: var(--bg-elevated);
975
+ border: 1px solid var(--border);
976
+ }
977
+ .detail-comp-header .count {
978
+ margin-left: auto;
979
+ color: var(--text-muted);
980
+ font-family: var(--mono);
981
+ font-size: 10px;
982
+ background: var(--bg-deep);
983
+ padding: 0 5px;
984
+ border-radius: 3px;
985
+ }
986
+ .detail-comp-items {
987
+ border: 1px solid var(--border);
988
+ border-top: none;
989
+ border-radius: 0 0 6px 6px;
990
+ overflow: hidden;
991
+ }
992
+ .detail-comp-item {
993
+ display: flex;
994
+ align-items: center;
995
+ gap: 8px;
996
+ padding: 5px 10px 5px 28px;
997
+ font-size: 12px;
998
+ color: var(--text-tertiary);
999
+ cursor: pointer;
1000
+ transition: background 0.12s;
1001
+ }
1002
+ .detail-comp-item:hover {
1003
+ background: var(--bg-hover);
1004
+ color: var(--text-secondary);
1005
+ }
1006
+ .detail-comp-item .icon {
1007
+ width: 14px;
1008
+ display: flex;
1009
+ align-items: center;
1010
+ opacity: 0.5;
1011
+ }
1012
+ .detail-comp-item .icon svg {
1013
+ width: 12px;
1014
+ height: 12px;
1015
+ }
1016
+ .detail-comp-item.disabled {
1017
+ cursor: default;
1018
+ opacity: 0.5;
1019
+ }
1020
+ .detail-comp-item.disabled:hover {
1021
+ background: none;
1022
+ color: var(--text-tertiary);
1023
+ }
1024
+ .readme-comp-item {
1025
+ display: flex;
1026
+ align-items: center;
1027
+ gap: 8px;
1028
+ padding: 6px 10px;
1029
+ font-size: 12px;
1030
+ color: var(--accent);
1031
+ cursor: pointer;
1032
+ border: 1px dashed var(--border);
1033
+ border-radius: 6px;
1034
+ background: var(--bg-deep);
1035
+ transition:
1036
+ background 0.12s,
1037
+ border-color 0.12s;
1038
+ margin-bottom: 8px;
1039
+ }
1040
+ .readme-comp-item:hover {
1041
+ background: var(--bg-hover);
1042
+ border-color: var(--accent);
1043
+ }
1044
+ .readme-comp-item svg {
1045
+ width: 14px;
1046
+ height: 14px;
1047
+ opacity: 0.7;
1048
+ }
1049
+
1050
+ /* === TOAST === */
1051
+
1052
+ .toast-container {
1053
+ position: fixed;
1054
+ bottom: 16px;
1055
+ right: 16px;
1056
+ z-index: 100;
1057
+ }
1058
+
1059
+ .toast {
1060
+ background: var(--bg-elevated);
1061
+ border: 1px solid var(--border);
1062
+ border-radius: 6px;
1063
+ padding: 8px 14px;
1064
+ font-size: 11px;
1065
+ color: var(--text-secondary);
1066
+ animation: slideIn 0.2s ease;
1067
+ }
1068
+
1069
+ .toast.toast-success {
1070
+ border-color: #2ea043;
1071
+ color: #2ea043;
1072
+ }
1073
+
1074
+ .toast.toast-error {
1075
+ border-color: #f85149;
1076
+ color: #f85149;
1077
+ }
1078
+
1079
+ .toast.toast-info {
1080
+ border-color: var(--accent);
1081
+ color: var(--accent);
1082
+ }
1083
+
1084
+ @keyframes slideIn {
1085
+ from {
1086
+ opacity: 0;
1087
+ transform: translateY(10px);
1088
+ }
1089
+ to {
1090
+ opacity: 1;
1091
+ transform: translateY(0);
1092
+ }
1093
+ }
1094
+
1095
+ /* === MODAL === */
1096
+
1097
+ .modal-overlay {
1098
+ position: fixed;
1099
+ inset: 0;
1100
+ background: rgba(0, 0, 0, 0.6);
1101
+ display: none;
1102
+ align-items: center;
1103
+ justify-content: center;
1104
+ z-index: 100;
1105
+ }
1106
+ .modal-overlay.open {
1107
+ display: flex;
1108
+ }
1109
+ .modal {
1110
+ background: var(--bg-surface);
1111
+ border: 1px solid var(--border);
1112
+ border-radius: 8px;
1113
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4);
1114
+ min-width: 360px;
1115
+ max-width: 500px;
1116
+ }
1117
+ .modal-header {
1118
+ display: flex;
1119
+ align-items: center;
1120
+ justify-content: space-between;
1121
+ padding: 14px 16px;
1122
+ border-bottom: 1px solid var(--border);
1123
+ }
1124
+ .modal-header h3 {
1125
+ font-size: 13px;
1126
+ font-weight: 600;
1127
+ }
1128
+ .modal-action-btn {
1129
+ background: none;
1130
+ border: none;
1131
+ color: var(--text-muted);
1132
+ cursor: pointer;
1133
+ padding: 4px;
1134
+ display: flex;
1135
+ align-items: center;
1136
+ border-radius: 4px;
1137
+ }
1138
+ .modal-action-btn:hover {
1139
+ color: var(--accent);
1140
+ background: var(--hover);
1141
+ }
1142
+ .modal-action-btn.copy-success {
1143
+ color: var(--success, #22c55e);
1144
+ animation: copy-flash 0.3s ease;
1145
+ }
1146
+ @keyframes copy-flash {
1147
+ 0% {
1148
+ transform: scale(1);
1149
+ }
1150
+ 50% {
1151
+ transform: scale(1.3);
1152
+ }
1153
+ 100% {
1154
+ transform: scale(1);
1155
+ }
1156
+ }
1157
+ .modal-close {
1158
+ background: none;
1159
+ border: none;
1160
+ color: var(--text-muted);
1161
+ cursor: pointer;
1162
+ font-size: 16px;
1163
+ padding: 4px;
1164
+ display: flex;
1165
+ align-items: center;
1166
+ justify-content: center;
1167
+ line-height: 1;
1168
+ }
1169
+ .modal-body {
1170
+ padding: 16px;
1171
+ }
1172
+ .modal-body .scope-option {
1173
+ display: flex;
1174
+ align-items: center;
1175
+ gap: 10px;
1176
+ padding: 10px 12px;
1177
+ margin-bottom: 6px;
1178
+ border-radius: 6px;
1179
+ border: 1px solid var(--border);
1180
+ cursor: pointer;
1181
+ transition: all 0.15s ease;
1182
+ }
1183
+ .modal-body .scope-option:hover {
1184
+ border-color: var(--accent);
1185
+ background: var(--bg-hover);
1186
+ }
1187
+ .modal-body .scope-option .dot {
1188
+ width: 10px;
1189
+ height: 10px;
1190
+ border-radius: 3px;
1191
+ flex-shrink: 0;
1192
+ }
1193
+ .modal-field {
1194
+ margin-bottom: 16px;
1195
+ }
1196
+ .modal-field label {
1197
+ display: block;
1198
+ font-size: 10px;
1199
+ text-transform: uppercase;
1200
+ letter-spacing: 0.08em;
1201
+ color: var(--text-muted);
1202
+ margin-bottom: 6px;
1203
+ font-weight: 600;
1204
+ }
1205
+ .modal-field input[type='text'] {
1206
+ width: 100%;
1207
+ padding: 8px 10px;
1208
+ background: var(--bg-elevated);
1209
+ border: 1px solid var(--border);
1210
+ border-radius: 6px;
1211
+ color: var(--text-primary);
1212
+ font-family: var(--mono);
1213
+ font-size: 12px;
1214
+ outline: none;
1215
+ transition: border-color 0.15s ease;
1216
+ }
1217
+ .modal-field input[type='text']:focus {
1218
+ border-color: var(--accent);
1219
+ }
1220
+ .modal-field input[type='text']::placeholder {
1221
+ color: var(--text-muted);
1222
+ }
1223
+ .modal-hint {
1224
+ display: block;
1225
+ font-size: 10px;
1226
+ color: var(--text-muted);
1227
+ margin-top: 4px;
1228
+ }
1229
+ .modal-actions {
1230
+ display: flex;
1231
+ justify-content: flex-end;
1232
+ gap: 6px;
1233
+ margin-top: 16px;
1234
+ }
1235
+
1236
+ /* === RECENT PROJECTS === */
1237
+
1238
+ .recent-projects-label {
1239
+ font-size: 11px;
1240
+ color: var(--text-muted);
1241
+ margin-bottom: 6px;
1242
+ text-transform: uppercase;
1243
+ letter-spacing: 0.5px;
1244
+ }
1245
+
1246
+ .recent-project-item {
1247
+ display: flex;
1248
+ align-items: center;
1249
+ gap: 8px;
1250
+ padding: 6px 8px;
1251
+ border-radius: 4px;
1252
+ cursor: pointer;
1253
+ font-size: 13px;
1254
+ color: var(--text-secondary);
1255
+ font-family: var(--font-mono);
1256
+ }
1257
+
1258
+ .recent-project-item:hover {
1259
+ background: var(--hover-bg);
1260
+ color: var(--text-primary);
1261
+ }
1262
+
1263
+ .recent-project-remove {
1264
+ margin-left: auto;
1265
+ opacity: 0;
1266
+ background: none;
1267
+ border: none;
1268
+ color: var(--text-muted);
1269
+ cursor: pointer;
1270
+ font-size: 14px;
1271
+ padding: 0 4px;
1272
+ }
1273
+
1274
+ .recent-project-item:hover .recent-project-remove {
1275
+ opacity: 1;
1276
+ }
1277
+
1278
+ .recent-project-remove:hover {
1279
+ color: var(--danger);
1280
+ }
1281
+
1282
+ /* === HELP MODAL === */
1283
+
1284
+ .help-modal {
1285
+ min-width: 420px;
1286
+ max-width: 520px;
1287
+ }
1288
+ .help-sections {
1289
+ display: grid;
1290
+ gap: 16px;
1291
+ }
1292
+ .help-section h4 {
1293
+ margin: 0 0 8px;
1294
+ font-size: 10px;
1295
+ text-transform: uppercase;
1296
+ letter-spacing: 0.08em;
1297
+ color: var(--text-muted);
1298
+ font-weight: 600;
1299
+ }
1300
+ .help-section table {
1301
+ width: 100%;
1302
+ font-size: 12px;
1303
+ border-collapse: collapse;
1304
+ }
1305
+ .help-section td {
1306
+ padding: 4px 0;
1307
+ }
1308
+ .help-section td:first-child {
1309
+ color: var(--text-secondary);
1310
+ white-space: nowrap;
1311
+ width: 130px;
1312
+ }
1313
+ .help-section td:last-child {
1314
+ color: var(--text-tertiary);
1315
+ }
1316
+
1317
+ kbd {
1318
+ background: var(--bg-hover);
1319
+ border: 1px solid var(--border);
1320
+ padding: 2px 6px;
1321
+ border-radius: 4px;
1322
+ font-family: var(--mono);
1323
+ font-size: 11px;
1324
+ color: var(--text-secondary);
1325
+ white-space: nowrap;
1326
+ }
1327
+
1328
+ /* === CONTENT MODAL === */
1329
+
1330
+ .content-modal {
1331
+ min-width: unset;
1332
+ max-width: unset;
1333
+ width: 70vw;
1334
+ height: 70vh;
1335
+ display: flex;
1336
+ flex-direction: column;
1337
+ }
1338
+ .content-modal-body {
1339
+ display: flex;
1340
+ flex: 1;
1341
+ overflow: hidden;
1342
+ }
1343
+ .content-tree {
1344
+ width: 220px;
1345
+ min-width: 180px;
1346
+ border-right: 1px solid var(--border);
1347
+ overflow-y: auto;
1348
+ padding: 8px 0;
1349
+ }
1350
+ .content-tree-item {
1351
+ display: flex;
1352
+ align-items: center;
1353
+ gap: 6px;
1354
+ padding: 4px 12px;
1355
+ font-size: 11px;
1356
+ color: var(--text-tertiary);
1357
+ cursor: pointer;
1358
+ white-space: nowrap;
1359
+ transition: background 0.1s ease;
1360
+ }
1361
+ .content-tree-item:hover {
1362
+ background: var(--bg-hover);
1363
+ color: var(--text-secondary);
1364
+ }
1365
+ .content-tree-item.active {
1366
+ background: var(--bg-hover);
1367
+ color: var(--accent);
1368
+ }
1369
+ .content-tree-item .icon {
1370
+ width: 16px;
1371
+ display: flex;
1372
+ align-items: center;
1373
+ flex-shrink: 0;
1374
+ opacity: 0.5;
1375
+ }
1376
+ .content-tree-item .icon svg {
1377
+ width: 12px;
1378
+ height: 12px;
1379
+ }
1380
+ .content-viewer {
1381
+ flex: 1;
1382
+ display: flex;
1383
+ flex-direction: column;
1384
+ overflow: hidden;
1385
+ }
1386
+ .content-viewer-path {
1387
+ padding: 6px 12px;
1388
+ font-size: 10px;
1389
+ color: var(--text-muted);
1390
+ border-bottom: 1px solid var(--border);
1391
+ font-family: var(--mono);
1392
+ flex-shrink: 0;
1393
+ }
1394
+ .content-viewer-code {
1395
+ flex: 1;
1396
+ margin: 0;
1397
+ padding: 12px 16px;
1398
+ overflow: auto;
1399
+ font-family: var(--mono);
1400
+ font-size: 11px;
1401
+ line-height: 1.6;
1402
+ color: var(--text-secondary);
1403
+ background: var(--bg-deep);
1404
+ white-space: pre-wrap;
1405
+ word-break: break-word;
1406
+ }
1407
+ .content-viewer-code code {
1408
+ font-family: inherit;
1409
+ font-size: inherit;
1410
+ background: none;
1411
+ }
1412
+ .content-viewer-code .hljs {
1413
+ background: transparent;
1414
+ padding: 0;
1415
+ }
1416
+ .content-viewer-code .hl-frontmatter {
1417
+ color: var(--text-muted);
1418
+ opacity: 0.6;
1419
+ }
1420
+ .content-viewer-code code.json { color: var(--text-primary); }
1421
+ .content-viewer-code code.md .md-h { color: var(--accent); font-weight: 600; }
1422
+ .content-viewer-code code.md .md-code { color: #98c379; }
1423
+ .content-viewer-code code.md .md-icode { color: #d19a66; }
1424
+ .content-viewer-code code.md .md-bold { color: var(--text-primary); font-weight: 600; }
1425
+ .content-viewer-code code.md .md-bullet { color: var(--accent); }
1426
+ body.light .content-viewer-code code.md .md-code { color: #50a14f; }
1427
+ body.light .content-viewer-code code.md .md-icode { color: #986801; }
1428
+ .content-viewer-code .jk-key { color: var(--accent); }
1429
+ .content-viewer-code .jk-str { color: #98c379; }
1430
+ .content-viewer-code .jk-num { color: #d19a66; }
1431
+ .content-viewer-code .jk-bool { color: #c678dd; }
1432
+ .content-viewer-code .jk-null { color: #c678dd; opacity: 0.8; }
1433
+ body.light .content-viewer-code .jk-str { color: #50a14f; }
1434
+ body.light .content-viewer-code .jk-num { color: #986801; }
1435
+ body.light .content-viewer-code .jk-bool { color: #a626a4; }
1436
+ body.light .content-viewer-code .jk-null { color: #a626a4; }
1437
+
1438
+ .detail-comp-group.view-only {
1439
+ opacity: 0.55;
1440
+ }
1441
+ .detail-comp-group.view-only:hover {
1442
+ opacity: 0.85;
1443
+ }