claude-plan-viewer 1.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.
package/styles.css ADDED
@@ -0,0 +1,996 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ --bg-primary: #0a0a0a;
9
+ --bg-secondary: #111111;
10
+ --bg-tertiary: #1a1a1a;
11
+ --bg-hover: #1f1f1f;
12
+ --bg-selected: #252525;
13
+ --border: #2a2a2a;
14
+ --border-light: #333333;
15
+ --text-primary: #e5e5e5;
16
+ --text-secondary: #a3a3a3;
17
+ --text-muted: #666666;
18
+ --accent: #6b8acd;
19
+ --accent-dim: #3d5a80;
20
+ --accent-subtle: rgba(107, 138, 205, 0.15);
21
+ --success: #5cb85c;
22
+ --warning: #d4a017;
23
+ --radius-sm: 3px;
24
+ --radius-md: 5px;
25
+ --radius-lg: 7px;
26
+ --spacing-xs: 4px;
27
+ --spacing-sm: 6px;
28
+ --spacing-md: 10px;
29
+ --focus-ring: 0 0 0 2px var(--accent-subtle);
30
+ }
31
+
32
+ body {
33
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
34
+ background: var(--bg-primary);
35
+ color: var(--text-primary);
36
+ min-height: 100vh;
37
+ overflow: hidden;
38
+ font-size: 13px;
39
+ }
40
+
41
+ #app {
42
+ height: 100vh;
43
+ display: flex;
44
+ }
45
+
46
+ .container {
47
+ display: flex;
48
+ width: 100%;
49
+ height: 100%;
50
+ }
51
+
52
+ /* List Panel */
53
+ .list-panel {
54
+ width: 55%;
55
+ min-width: 400px;
56
+ border-right: 1px solid var(--border);
57
+ display: flex;
58
+ flex-direction: column;
59
+ overflow: hidden;
60
+ }
61
+
62
+ /* Header */
63
+ .header {
64
+ padding: 10px 14px;
65
+ border-bottom: 1px solid var(--border);
66
+ background: var(--bg-secondary);
67
+ }
68
+
69
+ .header-row {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 10px;
73
+ }
74
+
75
+ .header h1 {
76
+ font-size: 13px;
77
+ font-weight: 600;
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 5px;
81
+ white-space: nowrap;
82
+ flex-shrink: 0;
83
+ }
84
+
85
+ .header h1 .icon {
86
+ width: 14px;
87
+ height: 14px;
88
+ opacity: 0.8;
89
+ }
90
+
91
+ .header-spacer {
92
+ flex: 1;
93
+ }
94
+
95
+ .search-wrapper {
96
+ position: relative;
97
+ width: 200px;
98
+ }
99
+
100
+ .search-icon {
101
+ position: absolute;
102
+ left: var(--spacing-md);
103
+ top: 50%;
104
+ transform: translateY(-50%);
105
+ width: 14px;
106
+ height: 14px;
107
+ color: var(--text-muted);
108
+ pointer-events: none;
109
+ }
110
+
111
+ .search-kbd {
112
+ position: absolute;
113
+ right: var(--spacing-sm);
114
+ top: 50%;
115
+ transform: translateY(-50%);
116
+ display: inline-flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ padding: 2px 5px;
120
+ background: rgba(255, 255, 255, 0.06);
121
+ border: 1px solid rgba(255, 255, 255, 0.1);
122
+ border-radius: var(--radius-sm);
123
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
124
+ font-size: 10px;
125
+ color: rgba(255, 255, 255, 0.4);
126
+ font-weight: 500;
127
+ pointer-events: none;
128
+ transition: opacity 0.15s;
129
+ }
130
+
131
+ .search-input:focus + .search-kbd,
132
+ .search-input:not(:placeholder-shown) + .search-kbd {
133
+ opacity: 0.3;
134
+ }
135
+
136
+ .search-input {
137
+ width: 100%;
138
+ padding: var(--spacing-sm) 48px var(--spacing-sm) 32px;
139
+ background: var(--bg-tertiary);
140
+ border: 1px solid var(--border);
141
+ border-radius: var(--radius-md);
142
+ color: var(--text-primary);
143
+ font-family: inherit;
144
+ font-size: 12px;
145
+ outline: none;
146
+ transition: border-color 0.15s, box-shadow 0.15s;
147
+ appearance: none;
148
+ -webkit-appearance: none;
149
+ }
150
+
151
+ .search-input::-webkit-search-cancel-button,
152
+ .search-input::-webkit-search-decoration {
153
+ display: none;
154
+ }
155
+
156
+ .search-input:focus {
157
+ border-color: var(--accent);
158
+ box-shadow: var(--focus-ring);
159
+ }
160
+
161
+ .search-input::placeholder {
162
+ color: var(--text-muted);
163
+ }
164
+
165
+ .sort-select {
166
+ padding: var(--spacing-sm) 26px var(--spacing-sm) var(--spacing-md);
167
+ background: var(--bg-tertiary);
168
+ border: 1px solid var(--border);
169
+ border-radius: var(--radius-md);
170
+ color: var(--text-primary);
171
+ font-family: inherit;
172
+ font-size: 11px;
173
+ cursor: pointer;
174
+ outline: none;
175
+ appearance: none;
176
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23666'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'/%3E%3C/svg%3E");
177
+ background-repeat: no-repeat;
178
+ background-position: right 8px center;
179
+ background-size: 12px;
180
+ transition: border-color 0.15s, box-shadow 0.15s;
181
+ }
182
+
183
+ .sort-select:hover {
184
+ border-color: var(--border-light);
185
+ }
186
+
187
+ .sort-select:focus {
188
+ border-color: var(--accent);
189
+ box-shadow: var(--focus-ring);
190
+ }
191
+
192
+ /* Project Dropdown */
193
+ .project-dropdown {
194
+ position: relative;
195
+ }
196
+
197
+ .dropdown-trigger {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ gap: var(--spacing-sm);
201
+ padding: var(--spacing-sm) var(--spacing-md);
202
+ background: var(--bg-tertiary);
203
+ border: 1px solid var(--border);
204
+ border-radius: var(--radius-md);
205
+ color: var(--text-secondary);
206
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
207
+ font-size: 11px;
208
+ cursor: pointer;
209
+ transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
210
+ white-space: nowrap;
211
+ outline: none;
212
+ anchor-name: --project-trigger;
213
+ }
214
+
215
+ .dropdown-trigger:hover {
216
+ background: var(--bg-hover);
217
+ color: var(--text-primary);
218
+ border-color: var(--border-light);
219
+ }
220
+
221
+ .dropdown-trigger:focus {
222
+ border-color: var(--accent);
223
+ box-shadow: var(--focus-ring);
224
+ }
225
+
226
+ .dropdown-trigger.has-selection {
227
+ background: var(--accent-dim);
228
+ border-color: var(--accent);
229
+ color: var(--text-primary);
230
+ }
231
+
232
+ .dropdown-trigger .chevron {
233
+ width: 12px;
234
+ height: 12px;
235
+ opacity: 0.5;
236
+ }
237
+
238
+ .dropdown-trigger .badge {
239
+ background: var(--accent);
240
+ color: white;
241
+ padding: 1px 5px;
242
+ border-radius: 8px;
243
+ font-size: 10px;
244
+ font-weight: 500;
245
+ }
246
+
247
+ .dropdown-menu {
248
+ position: absolute;
249
+ position-anchor: --project-trigger;
250
+ top: anchor(bottom);
251
+ left: anchor(left);
252
+ margin: 0;
253
+ margin-top: var(--spacing-xs);
254
+ padding: var(--spacing-sm);
255
+ background: var(--bg-secondary);
256
+ border: 1px solid var(--border);
257
+ border-radius: var(--radius-lg);
258
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
259
+ min-width: 180px;
260
+ max-height: 280px;
261
+ overflow-y: auto;
262
+ }
263
+
264
+ .dropdown-menu:popover-open {
265
+ display: flex;
266
+ flex-direction: column;
267
+ gap: 2px;
268
+ }
269
+
270
+ .dropdown-item {
271
+ display: flex;
272
+ align-items: center;
273
+ gap: var(--spacing-sm);
274
+ padding: var(--spacing-sm) var(--spacing-sm);
275
+ border-radius: var(--radius-sm);
276
+ cursor: pointer;
277
+ font-size: 12px;
278
+ color: var(--text-primary);
279
+ transition: background 0.1s;
280
+ }
281
+
282
+ .dropdown-item:hover {
283
+ background: var(--bg-hover);
284
+ }
285
+
286
+ /* Custom checkbox styling */
287
+ .dropdown-item input[type="checkbox"] {
288
+ appearance: none;
289
+ -webkit-appearance: none;
290
+ width: 14px;
291
+ height: 14px;
292
+ border: 1px solid var(--border-light);
293
+ border-radius: 3px;
294
+ background: var(--bg-tertiary);
295
+ cursor: pointer;
296
+ position: relative;
297
+ flex-shrink: 0;
298
+ transition: border-color 0.15s, background 0.15s;
299
+ }
300
+
301
+ .dropdown-item input[type="checkbox"]:hover {
302
+ border-color: var(--accent);
303
+ }
304
+
305
+ .dropdown-item input[type="checkbox"]:focus {
306
+ outline: none;
307
+ border-color: var(--accent);
308
+ box-shadow: var(--focus-ring);
309
+ }
310
+
311
+ .dropdown-item input[type="checkbox"]:checked {
312
+ background: var(--accent);
313
+ border-color: var(--accent);
314
+ }
315
+
316
+ .dropdown-item input[type="checkbox"]:checked::after {
317
+ content: '';
318
+ position: absolute;
319
+ left: 4px;
320
+ top: 1px;
321
+ width: 4px;
322
+ height: 8px;
323
+ border: solid white;
324
+ border-width: 0 1.5px 1.5px 0;
325
+ transform: rotate(45deg);
326
+ }
327
+
328
+ .dropdown-item span {
329
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
330
+ font-size: 11px;
331
+ }
332
+
333
+ .dropdown-clear {
334
+ margin-top: var(--spacing-xs);
335
+ padding: var(--spacing-sm);
336
+ background: none;
337
+ border: none;
338
+ border-top: 1px solid var(--border);
339
+ border-radius: 0 0 var(--radius-sm) var(--radius-sm);
340
+ color: var(--text-muted);
341
+ font-family: inherit;
342
+ font-size: 11px;
343
+ cursor: pointer;
344
+ text-align: center;
345
+ transition: color 0.15s, background 0.15s;
346
+ outline: none;
347
+ }
348
+
349
+ .dropdown-clear:hover {
350
+ color: var(--text-primary);
351
+ background: var(--bg-hover);
352
+ }
353
+
354
+ .dropdown-clear:focus {
355
+ color: var(--text-primary);
356
+ background: var(--bg-hover);
357
+ }
358
+
359
+ .stats {
360
+ display: flex;
361
+ flex-direction: column;
362
+ gap: 2px;
363
+ flex-shrink: 0;
364
+ margin-right: auto;
365
+ }
366
+
367
+ .stat {
368
+ display: flex;
369
+ align-items: baseline;
370
+ gap: 6px;
371
+ }
372
+
373
+ .stat-label {
374
+ font-size: 9px;
375
+ color: var(--accent);
376
+ text-transform: uppercase;
377
+ letter-spacing: 0.5px;
378
+ font-weight: 500;
379
+ min-width: 32px;
380
+ }
381
+
382
+ .stat-value {
383
+ font-size: 11px;
384
+ color: var(--text-secondary);
385
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
386
+ font-variant-numeric: tabular-nums;
387
+ }
388
+
389
+ /* Table */
390
+ .table-container {
391
+ flex: 1;
392
+ overflow-y: auto;
393
+ }
394
+
395
+ .table-container::-webkit-scrollbar {
396
+ width: 8px;
397
+ }
398
+
399
+ .table-container::-webkit-scrollbar-track {
400
+ background: transparent;
401
+ }
402
+
403
+ .table-container::-webkit-scrollbar-thumb {
404
+ background: var(--border);
405
+ border-radius: 4px;
406
+ }
407
+
408
+ .table-container::-webkit-scrollbar-thumb:hover {
409
+ background: var(--border-light);
410
+ }
411
+
412
+ table {
413
+ width: 100%;
414
+ border-collapse: collapse;
415
+ font-size: 12px;
416
+ }
417
+
418
+ thead {
419
+ position: sticky;
420
+ top: 0;
421
+ background: var(--bg-secondary);
422
+ z-index: 10;
423
+ }
424
+
425
+ th {
426
+ text-align: left;
427
+ padding: 7px 10px;
428
+ font-weight: 500;
429
+ color: var(--text-secondary);
430
+ border-bottom: 1px solid var(--border);
431
+ cursor: pointer;
432
+ white-space: nowrap;
433
+ user-select: none;
434
+ transition: color 0.1s;
435
+ }
436
+
437
+ th:hover {
438
+ color: var(--text-primary);
439
+ }
440
+
441
+ th.sorted {
442
+ color: var(--accent);
443
+ }
444
+
445
+ th .sort-icon {
446
+ display: inline-block;
447
+ margin-left: 4px;
448
+ opacity: 0.4;
449
+ transition: opacity 0.1s, transform 0.1s;
450
+ }
451
+
452
+ th.sorted .sort-icon {
453
+ opacity: 1;
454
+ }
455
+
456
+ th.sorted.desc .sort-icon {
457
+ transform: rotate(180deg);
458
+ }
459
+
460
+ td {
461
+ padding: 6px 10px;
462
+ border-bottom: 1px solid var(--border);
463
+ white-space: nowrap;
464
+ overflow: hidden;
465
+ text-overflow: ellipsis;
466
+ }
467
+
468
+ tr {
469
+ cursor: pointer;
470
+ transition: background 0.1s;
471
+ }
472
+
473
+ tbody tr:hover {
474
+ background: var(--bg-hover);
475
+ }
476
+
477
+ tr.selected {
478
+ background: var(--bg-selected);
479
+ }
480
+
481
+ tr.selected:hover {
482
+ background: var(--bg-selected);
483
+ }
484
+
485
+ .title-cell {
486
+ max-width: 320px;
487
+ font-weight: 500;
488
+ }
489
+
490
+ .title-btn {
491
+ background: none;
492
+ border: none;
493
+ padding: 0;
494
+ margin: 0;
495
+ color: inherit;
496
+ font: inherit;
497
+ font-weight: 500;
498
+ cursor: pointer;
499
+ text-align: left;
500
+ width: 100%;
501
+ outline: none;
502
+ border-radius: var(--radius-sm);
503
+ transition: color 0.15s;
504
+ }
505
+
506
+ .title-btn:hover {
507
+ color: var(--accent);
508
+ }
509
+
510
+ .title-btn:focus {
511
+ box-shadow: var(--focus-ring);
512
+ color: var(--accent);
513
+ }
514
+
515
+ tr.selected .title-btn {
516
+ color: var(--text-primary);
517
+ }
518
+
519
+ .project-cell {
520
+ color: var(--accent);
521
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
522
+ font-size: 11px;
523
+ max-width: 140px;
524
+ }
525
+
526
+ .meta-cell {
527
+ color: var(--text-secondary);
528
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
529
+ font-size: 11px;
530
+ }
531
+
532
+ .num-col {
533
+ text-align: right;
534
+ }
535
+
536
+ .num-cell {
537
+ color: var(--text-secondary);
538
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
539
+ font-size: 11px;
540
+ text-align: right;
541
+ font-variant-numeric: tabular-nums;
542
+ }
543
+
544
+ /* Detail Panel */
545
+ .detail-panel {
546
+ flex: 1;
547
+ display: flex;
548
+ flex-direction: column;
549
+ overflow: hidden;
550
+ background: var(--bg-primary);
551
+ }
552
+
553
+ .detail-header {
554
+ padding: 12px 16px;
555
+ border-bottom: 1px solid var(--border);
556
+ background: var(--bg-secondary);
557
+ }
558
+
559
+ .detail-header-top {
560
+ display: flex;
561
+ align-items: flex-start;
562
+ justify-content: space-between;
563
+ gap: 12px;
564
+ margin-bottom: 6px;
565
+ }
566
+
567
+ .detail-title {
568
+ font-size: 14px;
569
+ font-weight: 600;
570
+ line-height: 1.4;
571
+ flex: 1;
572
+ }
573
+
574
+ .detail-actions {
575
+ display: flex;
576
+ gap: var(--spacing-xs);
577
+ flex-shrink: 0;
578
+ }
579
+
580
+ .action-btn {
581
+ display: flex;
582
+ align-items: center;
583
+ justify-content: center;
584
+ width: 28px;
585
+ height: 28px;
586
+ background: var(--bg-tertiary);
587
+ border: 1px solid var(--border);
588
+ border-radius: var(--radius-md);
589
+ color: var(--text-secondary);
590
+ cursor: pointer;
591
+ transition: border-color 0.15s, box-shadow 0.15s, background 0.15s, color 0.15s;
592
+ flex-shrink: 0;
593
+ outline: none;
594
+ }
595
+
596
+ .action-btn:hover {
597
+ background: var(--bg-hover);
598
+ color: var(--text-primary);
599
+ border-color: var(--border-light);
600
+ }
601
+
602
+ .action-btn:focus {
603
+ border-color: var(--accent);
604
+ box-shadow: var(--focus-ring);
605
+ }
606
+
607
+ .action-btn.copied {
608
+ background: var(--success);
609
+ border-color: var(--success);
610
+ color: white;
611
+ }
612
+
613
+ .action-btn .icon {
614
+ width: 14px;
615
+ height: 14px;
616
+ }
617
+
618
+ .detail-meta {
619
+ display: flex;
620
+ flex-wrap: wrap;
621
+ gap: 12px;
622
+ font-size: 11px;
623
+ color: var(--text-secondary);
624
+ }
625
+
626
+ .detail-meta span {
627
+ display: flex;
628
+ align-items: center;
629
+ gap: 4px;
630
+ }
631
+
632
+ .detail-meta .icon {
633
+ width: 12px;
634
+ height: 12px;
635
+ opacity: 0.7;
636
+ }
637
+
638
+ .detail-meta .project-tag {
639
+ background: var(--accent-dim);
640
+ color: var(--text-primary);
641
+ padding: 2px 6px;
642
+ border-radius: 4px;
643
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
644
+ font-size: 10px;
645
+ }
646
+
647
+ .detail-content {
648
+ flex: 1;
649
+ overflow-y: auto;
650
+ padding: 20px 24px;
651
+ }
652
+
653
+ .detail-content::-webkit-scrollbar {
654
+ width: 8px;
655
+ }
656
+
657
+ .detail-content::-webkit-scrollbar-track {
658
+ background: transparent;
659
+ }
660
+
661
+ .detail-content::-webkit-scrollbar-thumb {
662
+ background: var(--border);
663
+ border-radius: 4px;
664
+ }
665
+
666
+ /* Markdown Styles */
667
+ .markdown {
668
+ font-size: 13px;
669
+ line-height: 1.6;
670
+ max-width: 800px;
671
+ }
672
+
673
+ .markdown h1,
674
+ .markdown h2,
675
+ .markdown h3,
676
+ .markdown h4 {
677
+ margin-top: 20px;
678
+ margin-bottom: 10px;
679
+ font-weight: 600;
680
+ line-height: 1.3;
681
+ }
682
+
683
+ .markdown h1:first-child,
684
+ .markdown h2:first-child {
685
+ margin-top: 0;
686
+ }
687
+
688
+ .markdown h1 {
689
+ font-size: 18px;
690
+ padding-bottom: 6px;
691
+ border-bottom: 1px solid var(--border);
692
+ }
693
+
694
+ .markdown h2 {
695
+ font-size: 15px;
696
+ color: var(--accent);
697
+ }
698
+
699
+ .markdown h3 {
700
+ font-size: 13px;
701
+ }
702
+
703
+ .markdown h4 {
704
+ font-size: 12px;
705
+ color: var(--text-secondary);
706
+ }
707
+
708
+ .markdown p {
709
+ margin-bottom: 10px;
710
+ }
711
+
712
+ .markdown ul,
713
+ .markdown ol {
714
+ margin-bottom: 12px;
715
+ padding-left: 24px;
716
+ }
717
+
718
+ .markdown ul {
719
+ list-style-type: disc;
720
+ }
721
+
722
+ .markdown ol {
723
+ list-style-type: decimal;
724
+ }
725
+
726
+ .markdown li {
727
+ margin-bottom: 4px;
728
+ padding-left: 4px;
729
+ }
730
+
731
+ .markdown li > ul,
732
+ .markdown li > ol {
733
+ margin-top: 4px;
734
+ margin-bottom: 0;
735
+ }
736
+
737
+ .markdown code {
738
+ background: var(--bg-tertiary);
739
+ padding: 1px 5px;
740
+ border-radius: 4px;
741
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
742
+ font-size: 12px;
743
+ border: 1px solid var(--border);
744
+ }
745
+
746
+ .markdown pre {
747
+ background: var(--bg-tertiary);
748
+ padding: 12px 14px;
749
+ border-radius: 6px;
750
+ overflow-x: auto;
751
+ margin-bottom: 12px;
752
+ border: 1px solid var(--border);
753
+ line-height: 1.4;
754
+ }
755
+
756
+ .markdown pre code {
757
+ background: transparent;
758
+ padding: 0;
759
+ border: none;
760
+ font-size: 11px;
761
+ }
762
+
763
+ .markdown table {
764
+ width: 100%;
765
+ border-collapse: collapse;
766
+ margin-bottom: 12px;
767
+ font-size: 12px;
768
+ }
769
+
770
+ .markdown th,
771
+ .markdown td {
772
+ border: 1px solid var(--border);
773
+ padding: 6px 10px;
774
+ text-align: left;
775
+ }
776
+
777
+ .markdown th {
778
+ background: var(--bg-tertiary);
779
+ font-weight: 500;
780
+ }
781
+
782
+ .markdown blockquote {
783
+ border-left: 2px solid var(--accent);
784
+ margin: 10px 0;
785
+ color: var(--text-secondary);
786
+ background: var(--bg-tertiary);
787
+ border-radius: 0 6px 6px 0;
788
+ padding: 8px 12px;
789
+ }
790
+
791
+ .markdown blockquote p {
792
+ margin: 0;
793
+ }
794
+
795
+ .markdown hr {
796
+ border: none;
797
+ border-top: 1px solid var(--border);
798
+ margin: 16px 0;
799
+ }
800
+
801
+ .markdown a {
802
+ color: var(--accent);
803
+ text-decoration: none;
804
+ }
805
+
806
+ .markdown a:hover {
807
+ text-decoration: underline;
808
+ }
809
+
810
+ .markdown strong {
811
+ font-weight: 600;
812
+ }
813
+
814
+ .markdown img {
815
+ max-width: 100%;
816
+ border-radius: 8px;
817
+ }
818
+
819
+ /* Empty State */
820
+ .empty-state {
821
+ display: flex;
822
+ flex-direction: column;
823
+ align-items: center;
824
+ justify-content: center;
825
+ height: 100%;
826
+ color: var(--text-muted);
827
+ text-align: center;
828
+ padding: 40px;
829
+ }
830
+
831
+ .empty-state .icon {
832
+ width: 56px;
833
+ height: 56px;
834
+ margin-bottom: 18px;
835
+ opacity: 0.4;
836
+ }
837
+
838
+ .empty-state p {
839
+ font-size: 14px;
840
+ margin-bottom: 6px;
841
+ }
842
+
843
+ .empty-state .hint {
844
+ font-size: 12px;
845
+ color: var(--text-muted);
846
+ }
847
+
848
+ /* Loading state */
849
+ .loading {
850
+ display: flex;
851
+ align-items: center;
852
+ justify-content: center;
853
+ height: 100%;
854
+ color: var(--text-muted);
855
+ }
856
+
857
+ /* Responsive */
858
+ @media (max-width: 1000px) {
859
+ .container {
860
+ flex-direction: column;
861
+ }
862
+
863
+ .list-panel {
864
+ width: 100%;
865
+ min-width: auto;
866
+ height: 50%;
867
+ border-right: none;
868
+ border-bottom: 1px solid var(--border);
869
+ }
870
+
871
+ .detail-panel {
872
+ height: 50%;
873
+ }
874
+ }
875
+
876
+ /* Help Modal */
877
+ .modal-backdrop {
878
+ position: fixed;
879
+ inset: 0;
880
+ background: rgba(0, 0, 0, 0.7);
881
+ display: flex;
882
+ align-items: center;
883
+ justify-content: center;
884
+ z-index: 100;
885
+ backdrop-filter: blur(4px);
886
+ }
887
+
888
+ .modal {
889
+ background: var(--bg-secondary);
890
+ border: 1px solid var(--border);
891
+ border-radius: 12px;
892
+ width: 320px;
893
+ max-width: 90vw;
894
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5);
895
+ }
896
+
897
+ .modal-header {
898
+ display: flex;
899
+ align-items: center;
900
+ justify-content: space-between;
901
+ padding: 14px 16px;
902
+ border-bottom: 1px solid var(--border);
903
+ }
904
+
905
+ .modal-header h2 {
906
+ font-size: 14px;
907
+ font-weight: 600;
908
+ }
909
+
910
+ .modal-close {
911
+ display: flex;
912
+ align-items: center;
913
+ justify-content: center;
914
+ width: 28px;
915
+ height: 28px;
916
+ background: var(--bg-tertiary);
917
+ border: 1px solid var(--border);
918
+ border-radius: var(--radius-md);
919
+ color: var(--text-muted);
920
+ font-size: 16px;
921
+ cursor: pointer;
922
+ line-height: 1;
923
+ transition: border-color 0.15s, box-shadow 0.15s, background 0.15s, color 0.15s;
924
+ outline: none;
925
+ }
926
+
927
+ .modal-close:hover {
928
+ background: var(--bg-hover);
929
+ color: var(--text-primary);
930
+ border-color: var(--border-light);
931
+ }
932
+
933
+ .modal-close:focus {
934
+ border-color: var(--accent);
935
+ box-shadow: var(--focus-ring);
936
+ }
937
+
938
+ .modal-body {
939
+ padding: 14px 16px;
940
+ }
941
+
942
+ .shortcut-row {
943
+ display: flex;
944
+ align-items: center;
945
+ gap: 8px;
946
+ padding: 8px 0;
947
+ border-bottom: 1px solid var(--border);
948
+ }
949
+
950
+ .shortcut-row:last-child {
951
+ border-bottom: none;
952
+ }
953
+
954
+ .shortcut-row kbd {
955
+ display: inline-flex;
956
+ align-items: center;
957
+ justify-content: center;
958
+ min-width: 24px;
959
+ padding: var(--spacing-xs) var(--spacing-sm);
960
+ background: var(--bg-tertiary);
961
+ border: 1px solid var(--border);
962
+ border-radius: var(--radius-sm);
963
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
964
+ font-size: 11px;
965
+ color: var(--text-secondary);
966
+ }
967
+
968
+ .shortcut-row span:last-child {
969
+ flex: 1;
970
+ text-align: right;
971
+ color: var(--text-secondary);
972
+ font-size: 12px;
973
+ }
974
+
975
+ /* Search highlighting */
976
+ mark {
977
+ background: rgba(234, 179, 8, 0.4);
978
+ color: var(--text-primary);
979
+ padding: 1px 3px;
980
+ border-radius: 3px;
981
+ }
982
+
983
+ /* Refresh loading animation */
984
+ @keyframes spin {
985
+ from { transform: rotate(0deg); }
986
+ to { transform: rotate(360deg); }
987
+ }
988
+
989
+ .action-btn.loading .icon {
990
+ animation: spin 0.8s linear infinite;
991
+ }
992
+
993
+ .action-btn.loading {
994
+ pointer-events: none;
995
+ opacity: 0.7;
996
+ }