claude-code-memory-explorer 0.10.0 → 0.11.1

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/public/style.css CHANGED
@@ -23,12 +23,17 @@
23
23
  --scope-project: #7ab5a0;
24
24
  --scope-local: #8a9bb5;
25
25
  --scope-rule: #a89bc4;
26
+ --scope-skill: #7a9bc4;
26
27
  --scope-memory: #c4a06a;
27
28
  --scope-agent-memory: #8aa8a3;
28
29
  --scope-policy: #b58a8a;
29
30
  --font-mono: 'IBM Plex Mono', monospace;
30
31
  --font-serif: 'Playfair Display', serif;
31
32
  --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
33
+ /* elevation: shadow-1 for resting cards, shadow-2 for floating layers (popovers, modals, toasts) */
34
+ --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.15);
35
+ --shadow-2: 0 8px 24px rgba(0, 0, 0, 0.35);
36
+ --shadow-inset: inset 0 1px 3px rgba(0, 0, 0, 0.35);
32
37
  }
33
38
  /* #endregion VARIABLES */
34
39
 
@@ -39,6 +44,8 @@
39
44
  box-sizing: border-box;
40
45
  }
41
46
  body {
47
+ /* native widgets (select popups, form controls) follow color-scheme, not CSS vars */
48
+ color-scheme: dark;
42
49
  background: var(--bg-deep);
43
50
  color: var(--text-primary);
44
51
  font-family: var(--font-sans);
@@ -176,7 +183,7 @@ body {
176
183
  background: var(--bg-elevated);
177
184
  border: 1px solid var(--border);
178
185
  border-radius: 8px;
179
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
186
+ box-shadow: var(--shadow-2);
180
187
  }
181
188
  .theme-menu.open {
182
189
  display: block;
@@ -236,23 +243,38 @@ body {
236
243
  .budget-bar {
237
244
  background: var(--bg-surface);
238
245
  border-bottom: 1px solid var(--border);
239
- padding: 6px 16px 8px;
246
+ padding: 4px 16px 6px;
240
247
  flex-shrink: 0;
248
+ cursor: pointer;
249
+ }
250
+ .budget-bar:hover .budget-label {
251
+ color: var(--text-secondary);
252
+ }
253
+ body.fp-mode .budget-bar {
254
+ border-bottom-color: var(--accent);
255
+ }
256
+ /* Footprint highlight: fade everything that costs nothing, mark what loads */
257
+ body.fp-mode .tree-item:not(.fp-hit) {
258
+ opacity: 0.35;
259
+ }
260
+ body.fp-mode .tree-item.fp-hit {
261
+ box-shadow: inset 2px 0 0 var(--accent);
241
262
  }
242
263
  .budget-label {
243
264
  display: flex;
244
265
  justify-content: space-between;
245
- font-size: 10px;
266
+ font-size: 9px;
246
267
  color: var(--text-muted);
247
- margin-bottom: 4px;
268
+ margin-bottom: 3px;
248
269
  text-transform: uppercase;
249
270
  letter-spacing: 0.3px;
250
271
  }
251
272
  .budget-track {
252
- height: 6px;
273
+ height: 4px;
253
274
  background: var(--bg-elevated);
254
275
  border-radius: 3px;
255
276
  overflow: hidden;
277
+ box-shadow: var(--shadow-inset);
256
278
  }
257
279
  .budget-segments {
258
280
  display: flex;
@@ -260,8 +282,17 @@ body {
260
282
  }
261
283
  .budget-segment {
262
284
  height: 100%;
263
- transition: width 0.3s;
285
+ transition:
286
+ width 0.3s,
287
+ opacity 0.15s;
264
288
  position: relative;
289
+ cursor: pointer;
290
+ }
291
+ .budget-segment:hover {
292
+ filter: brightness(1.2);
293
+ }
294
+ .budget-segment.seg-dim {
295
+ opacity: 0.3;
265
296
  }
266
297
  .budget-segment:first-child {
267
298
  border-radius: 3px 0 0 3px;
@@ -321,16 +352,28 @@ body {
321
352
  /* #endregion MAIN_LAYOUT */
322
353
 
323
354
  /* #region TREE */
355
+ /* filled sticky section bars — same depth language as the marketplace tree headers */
324
356
  .tree-group-header {
325
- padding: 8px 12px 4px;
357
+ padding: 7px 12px;
326
358
  font-size: 10px;
327
359
  font-weight: 600;
328
360
  text-transform: uppercase;
329
361
  letter-spacing: 0.5px;
330
- color: var(--text-muted);
362
+ color: var(--text-tertiary);
331
363
  display: flex;
332
364
  align-items: center;
333
365
  gap: 6px;
366
+ background: var(--bg-elevated);
367
+ border-top: 1px solid var(--border);
368
+ border-bottom: 1px solid var(--border);
369
+ position: sticky;
370
+ top: 0;
371
+ z-index: 2;
372
+ margin-top: -1px;
373
+ }
374
+ .tree-content > .tree-group-header:first-child {
375
+ border-top: none;
376
+ margin-top: 0;
334
377
  }
335
378
  .tree-subgroup-header {
336
379
  padding: 6px 12px 2px 20px;
@@ -391,6 +434,7 @@ body.light .tree-agent-item .file-name {
391
434
  .tree-item.selected {
392
435
  background: var(--accent-dim);
393
436
  color: var(--accent);
437
+ box-shadow: inset 2px 0 0 var(--accent);
394
438
  }
395
439
  .tree-item .tree-chevron,
396
440
  .tree-item .tree-chevron-spacer {
@@ -429,6 +473,8 @@ body.light .tree-agent-item .file-name {
429
473
  font-size: 10px;
430
474
  color: var(--text-muted);
431
475
  font-family: var(--font-mono);
476
+ font-variant-numeric: tabular-nums;
477
+ opacity: 0.7;
432
478
  flex-shrink: 0;
433
479
  }
434
480
  .tree-child .file-name {
@@ -456,40 +502,75 @@ body.light .tree-conditional .file-name {
456
502
  }
457
503
  .preview-title .file-path {
458
504
  font-family: var(--font-mono);
459
- font-size: 12px;
460
- color: var(--text-tertiary);
505
+ font-size: 15px;
506
+ font-weight: 600;
507
+ color: var(--text-primary);
461
508
  overflow: hidden;
462
509
  text-overflow: ellipsis;
463
510
  }
511
+ .preview-desc {
512
+ font-size: 12px;
513
+ color: var(--text-secondary);
514
+ line-height: 1.5;
515
+ max-width: 90ch;
516
+ margin: 0 0 8px;
517
+ display: -webkit-box;
518
+ -webkit-line-clamp: 3;
519
+ -webkit-box-orient: vertical;
520
+ overflow: hidden;
521
+ cursor: default;
522
+ }
523
+ .preview-desc.expanded {
524
+ -webkit-line-clamp: unset;
525
+ }
464
526
  .preview-badges {
465
527
  display: flex;
466
528
  gap: 6px;
467
529
  flex-wrap: wrap;
530
+ align-items: center;
468
531
  }
469
532
  .preview-imports {
470
533
  display: flex;
471
- gap: 8px;
534
+ gap: 6px;
472
535
  flex-wrap: wrap;
473
- margin-top: 6px;
536
+ margin-top: 8px;
537
+ }
538
+ .preview-imports .import-link {
539
+ display: inline-flex;
540
+ align-items: center;
541
+ padding: 2px 9px;
542
+ background: var(--bg-elevated);
543
+ border: 1px solid var(--border);
544
+ border-radius: 10px;
545
+ font-family: var(--font-mono);
546
+ font-size: 11px;
547
+ color: var(--accent-text);
548
+ text-decoration: none;
549
+ }
550
+ .preview-imports .import-link:hover {
551
+ border-color: var(--accent);
552
+ text-decoration: none;
553
+ }
554
+ .preview-imports .import-link.unresolved {
555
+ background: transparent;
556
+ border-style: dashed;
474
557
  }
475
558
  .preview-filepath {
476
- padding: 5px 16px;
559
+ margin-top: 8px;
477
560
  font-family: var(--font-mono);
478
- font-size: 12px;
479
- color: var(--text-tertiary);
480
- background: var(--bg-deep);
481
- border-bottom: 1px solid var(--border);
561
+ font-size: 11px;
562
+ color: var(--text-muted);
482
563
  overflow: hidden;
483
564
  text-overflow: ellipsis;
484
565
  white-space: nowrap;
485
566
  }
486
567
  .preview-code {
487
568
  font-family: var(--font-mono);
488
- font-size: 13px;
569
+ font-size: 14px;
489
570
  line-height: 1.6;
490
571
  color: var(--text-primary);
491
- white-space: pre-wrap;
492
- word-break: break-word;
572
+ /* pre (not pre-wrap): keeps markdown tables and code aligned; long lines scroll horizontally */
573
+ white-space: pre;
493
574
  padding: 12px 16px;
494
575
  margin: 0;
495
576
  overflow: auto;
@@ -510,6 +591,17 @@ body.light .tree-conditional .file-name {
510
591
  color: var(--text-muted);
511
592
  opacity: 0.6;
512
593
  }
594
+ .hl-fm-block {
595
+ display: inline-block;
596
+ min-width: 100%;
597
+ width: max-content;
598
+ padding: 4px 10px;
599
+ margin-bottom: 16px;
600
+ background: var(--bg-elevated);
601
+ border-left: 2px solid var(--accent);
602
+ border-radius: 0 4px 4px 0;
603
+ opacity: 0.85;
604
+ }
513
605
  .import-link {
514
606
  color: var(--accent);
515
607
  cursor: pointer;
@@ -620,6 +712,10 @@ body.light .tree-conditional .file-name {
620
712
  background: rgba(168, 155, 196, 0.18);
621
713
  color: var(--scope-rule);
622
714
  }
715
+ .scope-skill {
716
+ background: rgba(122, 155, 196, 0.18);
717
+ color: var(--scope-skill);
718
+ }
623
719
  .scope-memory {
624
720
  background: rgba(196, 149, 106, 0.18);
625
721
  color: var(--scope-memory);
@@ -642,13 +738,21 @@ body.light .tree-conditional .file-name {
642
738
  }
643
739
  .tag-badge {
644
740
  display: inline-block;
645
- font-size: 9px;
646
- padding: 1px 5px;
741
+ font-size: 10px;
742
+ padding: 1px 6px;
647
743
  background: var(--bg-elevated);
744
+ border: 1px solid var(--border);
648
745
  border-radius: 3px;
649
746
  color: var(--text-tertiary);
650
747
  font-family: var(--font-mono);
651
748
  }
749
+ .tag-badge .tag-k {
750
+ color: var(--text-muted);
751
+ margin-right: 5px;
752
+ }
753
+ .tag-badge .tag-k::after {
754
+ content: ':';
755
+ }
652
756
  /* #endregion BADGES */
653
757
 
654
758
  /* #region SUMMARY_BAR */
@@ -695,11 +799,15 @@ body.light .tree-conditional .file-name {
695
799
  background: var(--bg-surface);
696
800
  border: 1px solid var(--border);
697
801
  border-radius: 8px;
802
+ box-shadow: var(--shadow-2);
698
803
  width: 440px;
699
804
  max-width: 90vw;
700
805
  max-height: 80vh;
701
806
  overflow-y: auto;
702
807
  }
808
+ .modal.modal-wide {
809
+ width: 1140px;
810
+ }
703
811
  .modal-header {
704
812
  display: flex;
705
813
  align-items: center;
@@ -785,17 +893,29 @@ body.light .tree-conditional .file-name {
785
893
  .modal-close-btn:hover {
786
894
  background: var(--bg-hover);
787
895
  }
896
+ /* matches the marketplace app's action-btn look */
788
897
  .action-btn {
789
- padding: 6px 14px;
898
+ padding: 4px 10px;
790
899
  border-radius: 4px;
900
+ font-size: 10px;
901
+ font-weight: 500;
902
+ cursor: pointer;
791
903
  border: 1px solid var(--border);
792
904
  background: var(--bg-elevated);
793
- color: var(--text-secondary);
794
- cursor: pointer;
795
- font-size: 12px;
905
+ color: var(--text-tertiary);
906
+ font-family: var(--font-mono);
907
+ transition: all 0.15s ease;
908
+ white-space: nowrap;
909
+ text-transform: uppercase;
910
+ letter-spacing: 0.03em;
796
911
  }
797
912
  .action-btn:hover {
798
- background: var(--bg-hover);
913
+ border-color: var(--accent);
914
+ color: var(--text-secondary);
915
+ }
916
+ .action-btn:disabled {
917
+ opacity: 0.35;
918
+ cursor: not-allowed;
799
919
  }
800
920
  .action-btn.primary {
801
921
  background: var(--accent);
@@ -806,12 +926,10 @@ body.light .tree-conditional .file-name {
806
926
  filter: brightness(1.1);
807
927
  }
808
928
  .action-btn.danger {
809
- background: var(--error);
810
- border-color: var(--error);
811
- color: #fff;
929
+ color: var(--error);
812
930
  }
813
931
  .action-btn.danger:hover {
814
- filter: brightness(1.1);
932
+ border-color: var(--error);
815
933
  }
816
934
  .modal-filepath {
817
935
  font-family: 'IBM Plex Mono', monospace;
@@ -823,6 +941,7 @@ body.light .tree-conditional .file-name {
823
941
  padding: 6px 8px;
824
942
  margin: 8px 0 12px;
825
943
  word-break: break-all;
944
+ box-shadow: var(--shadow-inset);
826
945
  }
827
946
  .preview-actions {
828
947
  margin-left: auto;
@@ -857,13 +976,18 @@ body.light .tree-conditional .file-name {
857
976
  padding-right: 12px;
858
977
  }
859
978
  kbd {
860
- background: var(--bg-elevated);
979
+ background: var(--bg-hover);
861
980
  border: 1px solid var(--border);
862
- border-radius: 3px;
863
- padding: 1px 5px;
981
+ border-radius: 4px;
982
+ padding: 2px 6px;
864
983
  font-family: var(--font-mono);
865
- font-size: 10px;
984
+ font-size: 11px;
866
985
  color: var(--text-secondary);
986
+ white-space: nowrap;
987
+ }
988
+ .topbar-btn kbd {
989
+ font-size: 10px;
990
+ line-height: 1;
867
991
  }
868
992
  .recent-projects-label {
869
993
  font-size: 11px;
@@ -939,6 +1063,7 @@ kbd {
939
1063
  background: var(--bg-elevated);
940
1064
  border: 1px solid var(--border);
941
1065
  border-radius: 6px;
1066
+ box-shadow: var(--shadow-2);
942
1067
  padding: 8px 14px;
943
1068
  font-size: 12px;
944
1069
  color: var(--text-secondary);
@@ -967,9 +1092,10 @@ kbd {
967
1092
 
968
1093
  /* #region LIGHT_THEME */
969
1094
  body.light {
1095
+ color-scheme: light;
970
1096
  --bg-deep: #e8e6e3;
971
1097
  --bg-surface: #efede9;
972
- --bg-elevated: #fbfaf9;
1098
+ --bg-elevated: #f7f4f0;
973
1099
  --bg-hover: #d2d0cc;
974
1100
  --border: #cfcbc4;
975
1101
  --text-primary: #0a0a0a;
@@ -980,6 +1106,9 @@ body.light {
980
1106
  --accent-dim: rgba(232, 111, 51, 0.18);
981
1107
  --accent-glow: rgba(232, 111, 51, 0.5);
982
1108
  --success: #1a8a5a;
1109
+ --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.08), 0 1px 4px rgba(0, 0, 0, 0.05);
1110
+ --shadow-2: 0 8px 24px rgba(0, 0, 0, 0.15);
1111
+ --shadow-inset: inset 0 1px 3px rgba(0, 0, 0, 0.1);
983
1112
  }
984
1113
  /* #endregion LIGHT_THEME */
985
1114
 
@@ -1007,3 +1136,854 @@ body.light {
1007
1136
  }
1008
1137
  }
1009
1138
  /* #endregion RESPONSIVE */
1139
+
1140
+ /* #region ANALYZER */
1141
+ .analysis-box {
1142
+ margin: 12px 16px 0;
1143
+ border: 1px solid var(--border);
1144
+ border-radius: 8px;
1145
+ background: var(--bg-surface);
1146
+ padding: 12px 14px;
1147
+ font-family: var(--font-mono);
1148
+ box-shadow: var(--shadow-1);
1149
+ }
1150
+ .analysis-head {
1151
+ display: flex;
1152
+ align-items: center;
1153
+ gap: 10px;
1154
+ }
1155
+ .analysis-title {
1156
+ font-family: var(--font-serif);
1157
+ font-size: 15px;
1158
+ color: var(--text-primary);
1159
+ }
1160
+ .analysis-meta {
1161
+ flex: 1;
1162
+ font-size: 11px;
1163
+ color: var(--text-muted);
1164
+ }
1165
+ .analysis-summary {
1166
+ margin-top: 8px;
1167
+ font-size: 12px;
1168
+ color: var(--text-secondary);
1169
+ line-height: 1.5;
1170
+ }
1171
+ .analysis-empty {
1172
+ margin-top: 10px;
1173
+ font-size: 12px;
1174
+ color: var(--success);
1175
+ }
1176
+ .analysis-status {
1177
+ display: flex;
1178
+ align-items: center;
1179
+ gap: 8px;
1180
+ font-size: 12px;
1181
+ color: var(--text-secondary);
1182
+ }
1183
+ .analysis-status-error {
1184
+ color: var(--error);
1185
+ }
1186
+ .analysis-stalled {
1187
+ color: var(--text-muted);
1188
+ font-style: italic;
1189
+ }
1190
+ .analysis-spinner {
1191
+ width: 12px;
1192
+ height: 12px;
1193
+ border: 2px solid var(--border);
1194
+ border-top-color: var(--accent);
1195
+ border-radius: 50%;
1196
+ flex-shrink: 0;
1197
+ animation: spin 0.9s linear infinite;
1198
+ }
1199
+ .analysis-card {
1200
+ margin-top: 10px;
1201
+ padding: 10px 12px;
1202
+ border: 1px solid var(--border);
1203
+ border-radius: 6px;
1204
+ background: var(--bg-elevated);
1205
+ box-shadow: var(--shadow-1);
1206
+ overflow: hidden;
1207
+ transition:
1208
+ opacity 0.25s,
1209
+ transform 0.25s,
1210
+ max-height 0.3s,
1211
+ margin 0.3s,
1212
+ padding 0.3s,
1213
+ border-color 0.15s;
1214
+ }
1215
+ .analysis-card:hover {
1216
+ border-color: var(--accent-dim);
1217
+ }
1218
+ .analysis-card.leaving {
1219
+ opacity: 0;
1220
+ transform: translateX(24px);
1221
+ max-height: 0;
1222
+ margin-top: 0;
1223
+ padding-top: 0;
1224
+ padding-bottom: 0;
1225
+ border-width: 0;
1226
+ }
1227
+ /* severity marker: same dot language as the filter pills and dashboard tiles */
1228
+ .analysis-card-head::before {
1229
+ content: '';
1230
+ width: 8px;
1231
+ height: 8px;
1232
+ border-radius: 50%;
1233
+ flex-shrink: 0;
1234
+ background: var(--text-tertiary);
1235
+ }
1236
+ .analysis-card.sev-high .analysis-card-head::before {
1237
+ background: var(--error);
1238
+ }
1239
+ .analysis-card.sev-med .analysis-card-head::before {
1240
+ background: var(--warning);
1241
+ }
1242
+ .analysis-card-head {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: 8px;
1246
+ }
1247
+ .analysis-card-title {
1248
+ font-size: 12px;
1249
+ font-weight: 600;
1250
+ color: var(--text-primary);
1251
+ }
1252
+ .analysis-card-detail {
1253
+ margin-top: 6px;
1254
+ font-size: 12px;
1255
+ color: var(--text-secondary);
1256
+ line-height: 1.5;
1257
+ }
1258
+ .analysis-card-suggestion {
1259
+ margin-top: 6px;
1260
+ font-size: 12px;
1261
+ color: var(--accent-text);
1262
+ line-height: 1.5;
1263
+ }
1264
+ .analysis-card-suggestion::before {
1265
+ content: 'fix: ';
1266
+ color: var(--text-muted);
1267
+ }
1268
+ .analysis-card-files {
1269
+ margin-top: 8px;
1270
+ display: flex;
1271
+ flex-wrap: wrap;
1272
+ gap: 6px;
1273
+ }
1274
+ .kind-badge {
1275
+ font-size: 10px;
1276
+ text-transform: uppercase;
1277
+ letter-spacing: 0.5px;
1278
+ padding: 1px 6px;
1279
+ border-radius: 4px;
1280
+ background: var(--bg-hover);
1281
+ color: var(--text-tertiary);
1282
+ flex-shrink: 0;
1283
+ }
1284
+ .kind-badge.kind-contradiction,
1285
+ .kind-badge.kind-invalidate {
1286
+ background: var(--error-dim);
1287
+ color: var(--error);
1288
+ }
1289
+ .kind-badge.kind-duplicate,
1290
+ .kind-badge.kind-merge {
1291
+ background: var(--warning-dim);
1292
+ color: var(--warning);
1293
+ }
1294
+ .kind-badge.kind-promote {
1295
+ background: var(--success-dim);
1296
+ color: var(--success);
1297
+ }
1298
+ .analysis-card-title {
1299
+ flex: 1;
1300
+ }
1301
+ .action-btn.primary {
1302
+ background: var(--accent-dim);
1303
+ border-color: var(--accent);
1304
+ color: var(--accent-text);
1305
+ }
1306
+ .action-btn.primary:disabled {
1307
+ opacity: 0.4;
1308
+ cursor: default;
1309
+ }
1310
+
1311
+ /* per-card actions — appear on hover */
1312
+ .card-actions {
1313
+ display: flex;
1314
+ gap: 6px;
1315
+ opacity: 0;
1316
+ transition: opacity 0.15s;
1317
+ flex-shrink: 0;
1318
+ }
1319
+ .analysis-card:hover .card-actions {
1320
+ opacity: 1;
1321
+ }
1322
+ .card-btn {
1323
+ display: inline-flex;
1324
+ align-items: center;
1325
+ gap: 4px;
1326
+ background: var(--bg-surface);
1327
+ border: 1px solid var(--border);
1328
+ border-radius: 6px;
1329
+ color: var(--text-tertiary);
1330
+ font-family: var(--font-mono);
1331
+ font-size: 10px;
1332
+ padding: 2px 8px;
1333
+ cursor: pointer;
1334
+ white-space: nowrap;
1335
+ }
1336
+ .card-btn:hover {
1337
+ border-color: var(--accent);
1338
+ color: var(--accent-text);
1339
+ }
1340
+ .card-btn svg {
1341
+ width: 11px;
1342
+ height: 11px;
1343
+ }
1344
+
1345
+ /* file chips — under the title, scope-tagged */
1346
+ .file-chip {
1347
+ display: inline-flex;
1348
+ align-items: center;
1349
+ gap: 5px;
1350
+ padding: 1px 9px;
1351
+ background: var(--bg-surface);
1352
+ border: 1px solid var(--border);
1353
+ border-radius: 10px;
1354
+ font-family: var(--font-mono);
1355
+ font-size: 11px;
1356
+ color: var(--accent-text);
1357
+ text-decoration: none;
1358
+ }
1359
+ .file-chip svg {
1360
+ width: 10px;
1361
+ height: 10px;
1362
+ opacity: 0.7;
1363
+ }
1364
+ a.file-chip:hover {
1365
+ border-color: var(--accent);
1366
+ }
1367
+ .file-chip .fscope {
1368
+ font-size: 8px;
1369
+ text-transform: uppercase;
1370
+ letter-spacing: 0.5px;
1371
+ opacity: 0.85;
1372
+ }
1373
+ .file-chip .fscope-memory {
1374
+ color: var(--scope-memory);
1375
+ }
1376
+ .file-chip .fscope-skill {
1377
+ color: var(--scope-skill);
1378
+ }
1379
+ .file-chip .fscope-agent {
1380
+ color: var(--scope-agent-memory);
1381
+ }
1382
+ .file-chip .fscope-user {
1383
+ color: var(--scope-user);
1384
+ }
1385
+ .file-chip .fscope-project {
1386
+ color: var(--scope-project);
1387
+ }
1388
+ .file-chip .fscope-local {
1389
+ color: var(--scope-local);
1390
+ }
1391
+ .no-files {
1392
+ font-size: 10px;
1393
+ color: var(--text-muted);
1394
+ font-style: italic;
1395
+ }
1396
+
1397
+ /* severity filter strip */
1398
+ .runs-strip {
1399
+ display: flex;
1400
+ gap: 6px;
1401
+ align-items: center;
1402
+ margin-top: 8px;
1403
+ flex-wrap: wrap;
1404
+ }
1405
+ .runs-label {
1406
+ font-family: var(--font-mono);
1407
+ font-size: 10px;
1408
+ text-transform: uppercase;
1409
+ letter-spacing: 0.08em;
1410
+ color: var(--text-muted);
1411
+ margin-right: 2px;
1412
+ }
1413
+ .run-chip {
1414
+ display: inline-flex;
1415
+ align-items: center;
1416
+ gap: 6px;
1417
+ font-family: var(--font-mono);
1418
+ font-size: 11px;
1419
+ padding: 3px 10px;
1420
+ border-radius: 5px;
1421
+ border: 1px solid var(--border);
1422
+ color: var(--text-tertiary);
1423
+ cursor: pointer;
1424
+ background: var(--bg-elevated);
1425
+ user-select: none;
1426
+ }
1427
+ .run-chip:hover {
1428
+ border-color: var(--accent);
1429
+ color: var(--text-primary);
1430
+ }
1431
+ .run-chip-x {
1432
+ border: none;
1433
+ background: transparent;
1434
+ color: var(--text-muted);
1435
+ font-size: 13px;
1436
+ line-height: 1;
1437
+ padding: 0;
1438
+ margin-right: -4px;
1439
+ cursor: pointer;
1440
+ }
1441
+ .run-chip-x:hover {
1442
+ color: var(--error);
1443
+ }
1444
+ .run-chip.active {
1445
+ border-color: var(--accent);
1446
+ color: var(--accent-text);
1447
+ background: var(--accent-dim);
1448
+ }
1449
+ /* user-scope runs are shared across projects — tint the chip to set them apart */
1450
+ .run-chip-user {
1451
+ border-color: rgba(192, 128, 80, 0.45);
1452
+ }
1453
+ .run-chip-user.active {
1454
+ border-color: var(--scope-user);
1455
+ color: var(--scope-user);
1456
+ background: rgba(192, 128, 80, 0.12);
1457
+ }
1458
+ .sev-strip {
1459
+ display: flex;
1460
+ gap: 8px;
1461
+ align-items: center;
1462
+ margin-top: 10px;
1463
+ flex-wrap: wrap;
1464
+ }
1465
+ .sev-pill {
1466
+ font-family: var(--font-mono);
1467
+ font-size: 11px;
1468
+ padding: 2px 10px;
1469
+ border-radius: 20px;
1470
+ border: 1px solid var(--border);
1471
+ color: var(--text-tertiary);
1472
+ cursor: pointer;
1473
+ background: var(--bg-elevated);
1474
+ display: inline-flex;
1475
+ align-items: center;
1476
+ gap: 6px;
1477
+ }
1478
+ .sev-pill .dot {
1479
+ width: 7px;
1480
+ height: 7px;
1481
+ border-radius: 50%;
1482
+ }
1483
+ .sev-pill[data-sev='high'] .dot {
1484
+ background: var(--error);
1485
+ }
1486
+ .sev-pill[data-sev='med'] .dot {
1487
+ background: var(--warning);
1488
+ }
1489
+ .sev-pill[data-sev='low'] .dot {
1490
+ background: var(--text-muted);
1491
+ }
1492
+ .sev-pill.active {
1493
+ border-color: var(--accent);
1494
+ color: var(--text-primary);
1495
+ background: var(--accent-dim);
1496
+ }
1497
+ .sev-pill:hover {
1498
+ border-color: var(--accent);
1499
+ }
1500
+ .dismissed-note {
1501
+ font-size: 11px;
1502
+ color: var(--text-muted);
1503
+ margin-left: auto;
1504
+ }
1505
+ .dismissed-note a {
1506
+ color: var(--accent-text);
1507
+ cursor: pointer;
1508
+ text-decoration: none;
1509
+ }
1510
+ .dismissed-note a:hover {
1511
+ text-decoration: underline;
1512
+ }
1513
+
1514
+ /* scope picker */
1515
+ .scope-panel {
1516
+ background: var(--bg-elevated);
1517
+ border: 1px solid var(--border);
1518
+ border-radius: 8px;
1519
+ padding: 12px 14px;
1520
+ margin-top: 10px;
1521
+ box-shadow: var(--shadow-1);
1522
+ }
1523
+ .scope-panel-title {
1524
+ font-size: 11px;
1525
+ text-transform: uppercase;
1526
+ letter-spacing: 1px;
1527
+ color: var(--text-muted);
1528
+ margin-bottom: 8px;
1529
+ }
1530
+ .scope-tree {
1531
+ font-size: 12px;
1532
+ }
1533
+ .scope-group {
1534
+ margin-bottom: 6px;
1535
+ }
1536
+ .scope-row {
1537
+ display: flex;
1538
+ align-items: center;
1539
+ gap: 8px;
1540
+ padding: 3px 4px;
1541
+ border-radius: 5px;
1542
+ cursor: pointer;
1543
+ user-select: none;
1544
+ }
1545
+ .scope-row:hover {
1546
+ background: var(--bg-hover);
1547
+ }
1548
+ .scope-row input {
1549
+ accent-color: var(--accent);
1550
+ cursor: pointer;
1551
+ pointer-events: none;
1552
+ }
1553
+ .scope-tag {
1554
+ font-size: 9px;
1555
+ text-transform: uppercase;
1556
+ letter-spacing: 0.5px;
1557
+ padding: 0 6px;
1558
+ border-radius: 3px;
1559
+ flex-shrink: 0;
1560
+ }
1561
+ .scope-tag.t-memory {
1562
+ background: rgba(196, 160, 106, 0.18);
1563
+ color: var(--scope-memory);
1564
+ }
1565
+ .scope-tag.t-skill {
1566
+ background: rgba(122, 155, 196, 0.18);
1567
+ color: var(--scope-skill);
1568
+ }
1569
+ .scope-tag.t-agent {
1570
+ background: rgba(138, 168, 163, 0.18);
1571
+ color: var(--scope-agent-memory);
1572
+ }
1573
+ .scope-tag.t-claudemd {
1574
+ background: rgba(122, 181, 160, 0.18);
1575
+ color: var(--scope-project);
1576
+ }
1577
+ .scope-tag.t-user {
1578
+ background: rgba(192, 128, 80, 0.18);
1579
+ color: var(--scope-user);
1580
+ }
1581
+ .scope-tag.t-cross {
1582
+ background: rgba(155, 130, 190, 0.18);
1583
+ color: var(--scope-rule);
1584
+ }
1585
+ .scope-meta {
1586
+ color: var(--text-muted);
1587
+ font-size: 10px;
1588
+ margin-left: auto;
1589
+ }
1590
+ .scope-children {
1591
+ margin-left: 26px;
1592
+ border-left: 1px solid var(--border);
1593
+ padding-left: 10px;
1594
+ }
1595
+ .scope-caret {
1596
+ width: 14px;
1597
+ text-align: center;
1598
+ color: var(--text-muted);
1599
+ cursor: pointer;
1600
+ flex-shrink: 0;
1601
+ }
1602
+ .scope-group.collapsed .scope-children {
1603
+ display: none;
1604
+ }
1605
+ /* keep the footer (count + model + run) visible: the tree scrolls, not the modal */
1606
+ .scope-tree {
1607
+ max-height: 48vh;
1608
+ overflow-y: auto;
1609
+ }
1610
+ .scope-footer {
1611
+ display: flex;
1612
+ align-items: center;
1613
+ gap: 10px;
1614
+ margin-top: 10px;
1615
+ padding-top: 10px;
1616
+ border-top: 1px solid var(--border);
1617
+ }
1618
+ .scope-hint {
1619
+ font-size: 11px;
1620
+ color: var(--text-muted);
1621
+ flex: 1;
1622
+ }
1623
+ /* segmented model toggle — a native <select> popup ignores the page theme on
1624
+ some platforms, so the options are plain buttons */
1625
+ .scope-model {
1626
+ display: inline-flex;
1627
+ border: 1px solid var(--border);
1628
+ border-radius: 5px;
1629
+ overflow: hidden;
1630
+ }
1631
+ .scope-model-opt {
1632
+ background: transparent;
1633
+ color: var(--text-muted);
1634
+ border: none;
1635
+ border-right: 1px solid var(--border);
1636
+ font-family: inherit;
1637
+ font-size: 11px;
1638
+ line-height: 1;
1639
+ padding: 6px 10px;
1640
+ cursor: pointer;
1641
+ }
1642
+ .scope-model-opt:last-child {
1643
+ border-right: none;
1644
+ }
1645
+ .scope-model-opt:hover {
1646
+ color: var(--text-primary);
1647
+ background: var(--bg-hover);
1648
+ }
1649
+ .scope-model-opt.active {
1650
+ background: var(--bg-tertiary);
1651
+ color: var(--accent);
1652
+ }
1653
+ /* #endregion ANALYZER */
1654
+
1655
+ /* #region HEALTH */
1656
+ .topbar-btn.active {
1657
+ border-color: var(--accent);
1658
+ color: var(--accent-text);
1659
+ background: var(--accent-dim);
1660
+ }
1661
+ .health-view {
1662
+ padding: 4px 0 24px;
1663
+ }
1664
+
1665
+ /* tree annotations — counts from the latest run */
1666
+ .tree-health {
1667
+ flex-shrink: 0;
1668
+ font-size: 10px;
1669
+ font-weight: 600;
1670
+ font-family: var(--font-mono);
1671
+ line-height: 1;
1672
+ min-width: 16px;
1673
+ padding: 2px 5px;
1674
+ border-radius: 9px;
1675
+ text-align: center;
1676
+ }
1677
+ .tree-health.th-high {
1678
+ background: var(--error-dim);
1679
+ color: var(--error);
1680
+ }
1681
+ .tree-health.th-med {
1682
+ background: var(--warning-dim);
1683
+ color: var(--warning);
1684
+ }
1685
+ .tree-health.th-low {
1686
+ background: var(--bg-hover);
1687
+ color: var(--text-tertiary);
1688
+ }
1689
+ .tree-health.th-clean {
1690
+ min-width: 0;
1691
+ width: 7px;
1692
+ height: 7px;
1693
+ padding: 0;
1694
+ border-radius: 50%;
1695
+ border: 1px solid var(--success);
1696
+ opacity: 0.7;
1697
+ }
1698
+
1699
+ /* dashboard tiles */
1700
+ .hv-tiles {
1701
+ display: grid;
1702
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
1703
+ gap: 10px;
1704
+ margin-top: 14px;
1705
+ }
1706
+ .hv-tile {
1707
+ border: 1px solid var(--border);
1708
+ border-radius: 8px;
1709
+ background: var(--bg-elevated);
1710
+ box-shadow: var(--shadow-1);
1711
+ padding: 12px 14px;
1712
+ display: flex;
1713
+ flex-direction: column;
1714
+ gap: 6px;
1715
+ min-width: 0;
1716
+ }
1717
+ .hv-tile.hv-ring-tile {
1718
+ flex-direction: row;
1719
+ align-items: center;
1720
+ gap: 12px;
1721
+ }
1722
+ .hv-ring {
1723
+ position: relative;
1724
+ width: 68px;
1725
+ height: 68px;
1726
+ flex-shrink: 0;
1727
+ }
1728
+ .hv-ring svg {
1729
+ width: 100%;
1730
+ height: 100%;
1731
+ }
1732
+ .hv-ring-val {
1733
+ position: absolute;
1734
+ inset: 0;
1735
+ display: flex;
1736
+ align-items: center;
1737
+ justify-content: center;
1738
+ font-size: 19px;
1739
+ font-weight: 600;
1740
+ font-family: var(--font-mono);
1741
+ }
1742
+ .hv-tile-txt {
1743
+ display: flex;
1744
+ flex-direction: column;
1745
+ gap: 4px;
1746
+ min-width: 0;
1747
+ }
1748
+ .hv-lbl {
1749
+ display: flex;
1750
+ align-items: center;
1751
+ gap: 6px;
1752
+ font-size: 11px;
1753
+ text-transform: uppercase;
1754
+ letter-spacing: 0.7px;
1755
+ color: var(--text-tertiary);
1756
+ }
1757
+ .hv-lbl .dot {
1758
+ width: 8px;
1759
+ height: 8px;
1760
+ border-radius: 50%;
1761
+ flex-shrink: 0;
1762
+ }
1763
+ .dot.sev-dot-high {
1764
+ background: var(--error);
1765
+ }
1766
+ .dot.sev-dot-med {
1767
+ background: var(--warning);
1768
+ }
1769
+ .dot.sev-dot-low {
1770
+ background: var(--text-muted);
1771
+ }
1772
+ .hv-sub {
1773
+ font-size: 11px;
1774
+ color: var(--text-tertiary);
1775
+ white-space: nowrap;
1776
+ overflow: hidden;
1777
+ text-overflow: ellipsis;
1778
+ }
1779
+ .hv-num {
1780
+ font-size: 26px;
1781
+ font-weight: 600;
1782
+ font-family: var(--font-mono);
1783
+ color: var(--text-primary);
1784
+ line-height: 1.1;
1785
+ }
1786
+ .hv-num i {
1787
+ font-style: normal;
1788
+ font-size: 13px;
1789
+ color: var(--text-tertiary);
1790
+ }
1791
+ .hv-num-high {
1792
+ color: var(--error);
1793
+ }
1794
+ .hv-num-med {
1795
+ color: var(--warning);
1796
+ }
1797
+ .hv-num-low {
1798
+ color: var(--text-tertiary);
1799
+ }
1800
+ .hv-num-clean {
1801
+ color: var(--success);
1802
+ }
1803
+
1804
+ /* run trend — stacked mini-columns, oldest → newest */
1805
+ .hv-trend-tile {
1806
+ min-width: 120px;
1807
+ }
1808
+ .hv-trend {
1809
+ display: flex;
1810
+ align-items: flex-end;
1811
+ gap: 5px;
1812
+ height: 44px;
1813
+ margin-top: auto;
1814
+ }
1815
+ .hv-trun {
1816
+ display: flex;
1817
+ flex-direction: column-reverse;
1818
+ width: 16px;
1819
+ cursor: pointer;
1820
+ border-radius: 3px 3px 0 0;
1821
+ overflow: hidden;
1822
+ opacity: 0.75;
1823
+ }
1824
+ .hv-trun:hover,
1825
+ .hv-trun.cur {
1826
+ opacity: 1;
1827
+ }
1828
+ .hv-trun.cur {
1829
+ outline: 1px solid var(--accent);
1830
+ outline-offset: 1px;
1831
+ }
1832
+ .hv-trun i {
1833
+ display: block;
1834
+ }
1835
+ .hv-trun .th {
1836
+ background: var(--error);
1837
+ }
1838
+ .hv-trun .tm {
1839
+ background: var(--warning);
1840
+ }
1841
+ .hv-trun .tl {
1842
+ background: var(--text-muted);
1843
+ }
1844
+ .hv-trun .tz {
1845
+ height: 3px;
1846
+ background: var(--success);
1847
+ }
1848
+
1849
+ /* memory map — audited files sized by lines, colored by worst finding */
1850
+ /* filled section bar — mirrors the marketplace detail-panel component headers */
1851
+ .hv-map-label {
1852
+ margin-top: 18px;
1853
+ display: flex;
1854
+ align-items: center;
1855
+ gap: 10px;
1856
+ font-size: 11px;
1857
+ text-transform: uppercase;
1858
+ letter-spacing: 0.7px;
1859
+ color: var(--text-tertiary);
1860
+ background: var(--bg-surface);
1861
+ border: 1px solid var(--border);
1862
+ border-radius: 6px;
1863
+ padding: 6px 10px;
1864
+ }
1865
+ .hv-map {
1866
+ display: grid;
1867
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
1868
+ gap: 6px;
1869
+ margin-top: 10px;
1870
+ }
1871
+ .hv-cell {
1872
+ position: relative;
1873
+ min-height: 56px;
1874
+ border-radius: 6px;
1875
+ border: 1px solid var(--border);
1876
+ box-shadow: var(--shadow-1);
1877
+ padding: 8px 30px 8px 10px;
1878
+ cursor: pointer;
1879
+ display: flex;
1880
+ flex-direction: column;
1881
+ justify-content: space-between;
1882
+ gap: 4px;
1883
+ min-width: 0;
1884
+ overflow: hidden;
1885
+ transition: filter 0.15s;
1886
+ }
1887
+ .hv-cell:hover {
1888
+ filter: brightness(1.25);
1889
+ }
1890
+ .hv-cell.active {
1891
+ outline: 1px solid var(--accent);
1892
+ outline-offset: 1px;
1893
+ }
1894
+ .hv-cell.hv-clean {
1895
+ background: var(--bg-elevated);
1896
+ }
1897
+ .hv-cell.hv-low {
1898
+ background: var(--bg-hover);
1899
+ }
1900
+ .hv-cell.hv-med {
1901
+ background: var(--warning-dim);
1902
+ border-color: var(--warning);
1903
+ }
1904
+ .hv-cell.hv-high {
1905
+ background: var(--error-dim);
1906
+ border-color: var(--error);
1907
+ }
1908
+ .hv-cell-name {
1909
+ font-size: 12px;
1910
+ color: var(--text-primary);
1911
+ white-space: nowrap;
1912
+ overflow: hidden;
1913
+ text-overflow: ellipsis;
1914
+ }
1915
+ .hv-cell-meta {
1916
+ font-size: 10px;
1917
+ font-family: var(--font-mono);
1918
+ color: var(--text-tertiary);
1919
+ }
1920
+ .hv-cell-n {
1921
+ position: absolute;
1922
+ top: 6px;
1923
+ right: 6px;
1924
+ font-size: 10px;
1925
+ font-weight: 600;
1926
+ font-family: var(--font-mono);
1927
+ min-width: 16px;
1928
+ text-align: center;
1929
+ padding: 2px 4px;
1930
+ border-radius: 8px;
1931
+ background: var(--bg-deep);
1932
+ }
1933
+ .hv-cn-high {
1934
+ color: var(--error);
1935
+ }
1936
+ .hv-cn-med {
1937
+ color: var(--warning);
1938
+ }
1939
+ .hv-cn-low {
1940
+ color: var(--text-tertiary);
1941
+ }
1942
+
1943
+ /* per-file findings inside the file preview — compact rows, click to expand */
1944
+ .preview-findings {
1945
+ margin: 12px 16px 0;
1946
+ max-width: 50%;
1947
+ min-width: 420px;
1948
+ }
1949
+ .pf-card {
1950
+ margin-top: 6px;
1951
+ padding: 6px 10px;
1952
+ }
1953
+ .pf-card .analysis-card-head {
1954
+ cursor: pointer;
1955
+ }
1956
+ .pf-card:not(.expanded) .analysis-card-detail,
1957
+ .pf-card:not(.expanded) .analysis-card-suggestion {
1958
+ display: none;
1959
+ }
1960
+ .pf-label {
1961
+ display: flex;
1962
+ align-items: center;
1963
+ gap: 10px;
1964
+ font-size: 11px;
1965
+ text-transform: uppercase;
1966
+ letter-spacing: 0.7px;
1967
+ color: var(--text-tertiary);
1968
+ font-family: var(--font-mono);
1969
+ background: var(--bg-surface);
1970
+ border: 1px solid var(--border);
1971
+ border-radius: 6px;
1972
+ padding: 6px 10px;
1973
+ }
1974
+
1975
+ /* fix queue */
1976
+ .fix-check {
1977
+ accent-color: var(--accent);
1978
+ width: 13px;
1979
+ height: 13px;
1980
+ flex-shrink: 0;
1981
+ cursor: pointer;
1982
+ margin: 0;
1983
+ }
1984
+ .fix-plan-btn {
1985
+ border-color: var(--accent);
1986
+ color: var(--accent-text);
1987
+ background: var(--accent-dim);
1988
+ }
1989
+ /* #endregion HEALTH */