@sean.holung/minicode 0.2.3 → 0.3.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,922 @@
1
+ *, *::before, *::after {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ --bg: #1a1b26;
9
+ --bg-surface: #222336;
10
+ --bg-hover: #2a2b3d;
11
+ --text: #c0caf5;
12
+ --text-dim: #565f89;
13
+ --accent: #7aa2f7;
14
+ --accent-dim: #3d59a1;
15
+ --green: #9ece6a;
16
+ --yellow: #e0af68;
17
+ --red: #f7768e;
18
+ --border: #33354a;
19
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, monospace;
20
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
21
+ }
22
+
23
+ html, body {
24
+ height: 100%;
25
+ background: var(--bg);
26
+ color: var(--text);
27
+ font-family: var(--font-mono);
28
+ font-size: 14px;
29
+ line-height: 1.6;
30
+ }
31
+
32
+ #app {
33
+ display: flex;
34
+ flex-direction: column;
35
+ height: 100vh;
36
+ }
37
+
38
+ /* Header */
39
+ header {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ padding: 12px 16px;
44
+ border-bottom: 1px solid var(--border);
45
+ flex-shrink: 0;
46
+ }
47
+
48
+ .header-left {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 12px;
52
+ }
53
+
54
+ h1 {
55
+ font-size: 16px;
56
+ font-weight: 600;
57
+ color: var(--accent);
58
+ }
59
+
60
+ .header-right {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 12px;
64
+ }
65
+
66
+ #model-info {
67
+ font-size: 12px;
68
+ color: var(--text-dim);
69
+ }
70
+
71
+ /* Session menu */
72
+ .session-menu {
73
+ position: relative;
74
+ }
75
+
76
+ .header-btn {
77
+ background: var(--bg-surface);
78
+ border: 1px solid var(--border);
79
+ color: var(--text-dim);
80
+ font-family: var(--font-mono);
81
+ font-size: 12px;
82
+ padding: 4px 10px;
83
+ border-radius: 4px;
84
+ cursor: pointer;
85
+ transition: color 0.15s, border-color 0.15s;
86
+ }
87
+
88
+ .header-btn:hover {
89
+ color: var(--text);
90
+ border-color: var(--accent-dim);
91
+ }
92
+
93
+ .dropdown {
94
+ position: absolute;
95
+ top: calc(100% + 6px);
96
+ right: 0;
97
+ min-width: 260px;
98
+ background: var(--bg-surface);
99
+ border: 1px solid var(--border);
100
+ border-radius: 6px;
101
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
102
+ z-index: 100;
103
+ overflow: hidden;
104
+ }
105
+
106
+ .dropdown-section {
107
+ padding: 8px;
108
+ }
109
+
110
+ .dropdown-divider {
111
+ height: 1px;
112
+ background: var(--border);
113
+ }
114
+
115
+ .dropdown-row {
116
+ display: flex;
117
+ gap: 6px;
118
+ }
119
+
120
+ .dropdown-row input {
121
+ flex: 1;
122
+ background: var(--bg);
123
+ border: 1px solid var(--border);
124
+ border-radius: 4px;
125
+ color: var(--text);
126
+ font-family: var(--font-mono);
127
+ font-size: 12px;
128
+ padding: 5px 8px;
129
+ }
130
+
131
+ .dropdown-row input:focus {
132
+ outline: none;
133
+ border-color: var(--accent-dim);
134
+ }
135
+
136
+ .dropdown-action {
137
+ background: var(--accent-dim);
138
+ border: none;
139
+ color: var(--text);
140
+ font-family: var(--font-mono);
141
+ font-size: 12px;
142
+ padding: 5px 12px;
143
+ border-radius: 4px;
144
+ cursor: pointer;
145
+ flex-shrink: 0;
146
+ }
147
+
148
+ .dropdown-action:hover {
149
+ background: var(--accent);
150
+ color: var(--bg);
151
+ }
152
+
153
+ .dropdown-empty {
154
+ font-size: 12px;
155
+ color: var(--text-dim);
156
+ text-align: center;
157
+ padding: 8px;
158
+ }
159
+
160
+ .session-item {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: space-between;
164
+ padding: 6px 8px;
165
+ border-radius: 4px;
166
+ cursor: pointer;
167
+ font-size: 12px;
168
+ transition: background 0.15s;
169
+ }
170
+
171
+ .session-item:hover {
172
+ background: var(--bg-hover);
173
+ }
174
+
175
+ .session-label {
176
+ color: var(--text);
177
+ overflow: hidden;
178
+ text-overflow: ellipsis;
179
+ white-space: nowrap;
180
+ }
181
+
182
+ .session-meta {
183
+ color: var(--text-dim);
184
+ font-size: 11px;
185
+ flex-shrink: 0;
186
+ margin-left: 8px;
187
+ }
188
+
189
+ .badge {
190
+ font-size: 11px;
191
+ padding: 2px 8px;
192
+ border-radius: 10px;
193
+ font-weight: 500;
194
+ }
195
+
196
+ .badge.ready {
197
+ background: rgba(158, 206, 106, 0.15);
198
+ color: var(--green);
199
+ }
200
+
201
+ .badge.busy {
202
+ background: rgba(224, 175, 104, 0.15);
203
+ color: var(--yellow);
204
+ }
205
+
206
+ .badge.error {
207
+ background: rgba(247, 118, 142, 0.15);
208
+ color: var(--red);
209
+ }
210
+
211
+ /* ── Workspace: side-by-side chat + graph ── */
212
+
213
+ #workspace {
214
+ display: flex;
215
+ flex: 1;
216
+ min-height: 0;
217
+ }
218
+
219
+ /* Chat pane (left, default ~33%) */
220
+ #chat-pane {
221
+ display: flex;
222
+ flex-direction: column;
223
+ width: 33%;
224
+ min-width: 280px;
225
+ }
226
+
227
+ /* Pane divider (draggable) */
228
+ #pane-divider {
229
+ width: 1px;
230
+ cursor: col-resize;
231
+ background: var(--border);
232
+ flex-shrink: 0;
233
+ transition: background 0.15s, width 0.15s;
234
+ z-index: 10;
235
+ position: relative;
236
+ }
237
+
238
+ #pane-divider::after {
239
+ content: '';
240
+ position: absolute;
241
+ top: 0;
242
+ left: -3px;
243
+ width: 7px;
244
+ height: 100%;
245
+ }
246
+
247
+ #pane-divider:hover,
248
+ #pane-divider.dragging {
249
+ width: 3px;
250
+ background: var(--accent-dim);
251
+ }
252
+
253
+ /* Graph pane (right, takes remaining space) */
254
+ #graph-pane {
255
+ display: flex;
256
+ flex-direction: column;
257
+ flex: 1;
258
+ min-width: 300px;
259
+ position: relative;
260
+ }
261
+
262
+ /* Chat-only mode: hide graph, expand chat full-width */
263
+ #workspace.chat-only #graph-pane,
264
+ #workspace.chat-only #pane-divider {
265
+ display: none;
266
+ }
267
+
268
+ #workspace.chat-only #chat-pane {
269
+ width: 100%;
270
+ max-width: 900px;
271
+ margin: 0 auto;
272
+ }
273
+
274
+ #graph-toggle.active {
275
+ background: var(--accent);
276
+ color: var(--bg);
277
+ border-color: var(--accent);
278
+ }
279
+
280
+ /* Messages */
281
+ main {
282
+ flex: 1;
283
+ overflow-y: auto;
284
+ padding: 16px;
285
+ display: flex;
286
+ flex-direction: column;
287
+ gap: 10px;
288
+ }
289
+
290
+ .message {
291
+ padding: 10px 14px;
292
+ border-radius: 8px;
293
+ max-width: 100%;
294
+ word-wrap: break-word;
295
+ white-space: pre-wrap;
296
+ }
297
+
298
+ .message.user {
299
+ background: var(--accent-dim);
300
+ color: #fff;
301
+ align-self: flex-end;
302
+ max-width: 90%;
303
+ border-radius: 8px 8px 2px 8px;
304
+ }
305
+
306
+ .message.assistant {
307
+ background: var(--bg-surface);
308
+ border: 1px solid var(--border);
309
+ border-radius: 8px 8px 8px 2px;
310
+ white-space: normal;
311
+ }
312
+
313
+ /* Markdown content inside assistant messages and explain */
314
+ .message.assistant p,
315
+ .detail-explain-content p {
316
+ margin: 0 0 8px 0;
317
+ }
318
+
319
+ .message.assistant p:last-child,
320
+ .detail-explain-content p:last-child {
321
+ margin-bottom: 0;
322
+ }
323
+
324
+ .message.assistant pre,
325
+ .detail-explain-content pre {
326
+ background: var(--bg) !important;
327
+ border: 1px solid var(--border);
328
+ border-radius: 4px;
329
+ padding: 8px 10px !important;
330
+ margin: 8px 0;
331
+ overflow-x: auto;
332
+ font-size: 12px;
333
+ line-height: 1.5;
334
+ }
335
+
336
+ .message.assistant code,
337
+ .detail-explain-content code {
338
+ font-family: var(--font-mono);
339
+ font-size: 0.9em;
340
+ }
341
+
342
+ .message.assistant :not(pre) > code,
343
+ .detail-explain-content :not(pre) > code {
344
+ background: rgba(122, 162, 247, 0.1);
345
+ padding: 1px 5px;
346
+ border-radius: 3px;
347
+ color: var(--accent);
348
+ }
349
+
350
+ .message.assistant ul,
351
+ .message.assistant ol,
352
+ .detail-explain-content ul,
353
+ .detail-explain-content ol {
354
+ margin: 6px 0;
355
+ padding-left: 20px;
356
+ }
357
+
358
+ .message.assistant li,
359
+ .detail-explain-content li {
360
+ margin-bottom: 3px;
361
+ }
362
+
363
+ .message.assistant h1,
364
+ .message.assistant h2,
365
+ .message.assistant h3,
366
+ .detail-explain-content h1,
367
+ .detail-explain-content h2,
368
+ .detail-explain-content h3 {
369
+ font-size: 13px;
370
+ font-weight: 600;
371
+ margin: 10px 0 4px 0;
372
+ color: var(--text);
373
+ }
374
+
375
+ .message.assistant h1 { font-size: 15px; }
376
+ .message.assistant h2 { font-size: 14px; }
377
+
378
+ .message.assistant strong,
379
+ .detail-explain-content strong {
380
+ color: var(--text);
381
+ }
382
+
383
+ .message.assistant blockquote,
384
+ .detail-explain-content blockquote {
385
+ border-left: 3px solid var(--border);
386
+ padding-left: 10px;
387
+ margin: 6px 0;
388
+ color: var(--text-dim);
389
+ }
390
+
391
+ .message.error {
392
+ background: rgba(247, 118, 142, 0.1);
393
+ border: 1px solid rgba(247, 118, 142, 0.3);
394
+ color: var(--red);
395
+ }
396
+
397
+ .message.thinking {
398
+ color: var(--text-dim);
399
+ font-style: italic;
400
+ font-size: 13px;
401
+ padding: 6px 14px;
402
+ }
403
+
404
+ /* Tool call group — clusters consecutive tool calls */
405
+ .tool-group {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 2px;
409
+ margin: 2px 0;
410
+ }
411
+
412
+ /* Tool calls — compact inline pills */
413
+ .tool-call {
414
+ font-size: 12px;
415
+ padding: 4px 10px;
416
+ border-radius: 4px;
417
+ color: var(--text-dim);
418
+ cursor: pointer;
419
+ transition: background 0.15s;
420
+ line-height: 1.4;
421
+ }
422
+
423
+ .tool-call:hover {
424
+ background: rgba(122, 162, 247, 0.08);
425
+ }
426
+
427
+ .tool-call .tool-header {
428
+ display: flex;
429
+ align-items: baseline;
430
+ gap: 6px;
431
+ }
432
+
433
+ .tool-call .tool-name {
434
+ color: var(--accent);
435
+ font-weight: 600;
436
+ flex-shrink: 0;
437
+ }
438
+
439
+ .tool-call .tool-arg {
440
+ color: var(--text-dim);
441
+ overflow: hidden;
442
+ text-overflow: ellipsis;
443
+ white-space: nowrap;
444
+ }
445
+
446
+ .tool-call .tool-time {
447
+ color: var(--text-dim);
448
+ margin-left: auto;
449
+ flex-shrink: 0;
450
+ font-size: 11px;
451
+ opacity: 0.7;
452
+ }
453
+
454
+ .tool-call .tool-result {
455
+ display: none;
456
+ margin-top: 6px;
457
+ padding: 6px 8px;
458
+ border-radius: 3px;
459
+ background: rgba(0, 0, 0, 0.2);
460
+ white-space: pre-wrap;
461
+ max-height: 200px;
462
+ overflow-y: auto;
463
+ font-size: 11px;
464
+ color: var(--text-dim);
465
+ }
466
+
467
+ .tool-call.expanded .tool-result {
468
+ display: block;
469
+ }
470
+
471
+ /* Streaming cursor */
472
+ .streaming-cursor::after {
473
+ content: '\25CC';
474
+ animation: blink 0.8s step-end infinite;
475
+ color: var(--accent);
476
+ }
477
+
478
+ @keyframes blink {
479
+ 50% { opacity: 0; }
480
+ }
481
+
482
+ /* Usage info */
483
+ .usage-info {
484
+ font-size: 11px;
485
+ color: var(--text-dim);
486
+ opacity: 0.6;
487
+ text-align: right;
488
+ padding: 2px 4px;
489
+ }
490
+
491
+ /* Footer / Input */
492
+ footer {
493
+ padding: 12px 16px;
494
+ border-top: 1px solid var(--border);
495
+ flex-shrink: 0;
496
+ }
497
+
498
+ #chat-form {
499
+ display: flex;
500
+ gap: 8px;
501
+ align-items: flex-end;
502
+ }
503
+
504
+ #chat-input {
505
+ flex: 1;
506
+ background: var(--bg-surface);
507
+ border: 1px solid var(--border);
508
+ border-radius: 6px;
509
+ color: var(--text);
510
+ font-family: var(--font-mono);
511
+ font-size: 14px;
512
+ padding: 10px 12px;
513
+ resize: none;
514
+ max-height: 150px;
515
+ line-height: 1.5;
516
+ }
517
+
518
+ #chat-input:focus {
519
+ outline: none;
520
+ border-color: var(--accent);
521
+ }
522
+
523
+ #send-btn, #cancel-btn {
524
+ padding: 10px 18px;
525
+ border: none;
526
+ border-radius: 6px;
527
+ font-family: var(--font-mono);
528
+ font-size: 13px;
529
+ font-weight: 600;
530
+ cursor: pointer;
531
+ }
532
+
533
+ #send-btn {
534
+ background: var(--accent);
535
+ color: var(--bg);
536
+ }
537
+
538
+ #send-btn:hover {
539
+ opacity: 0.9;
540
+ }
541
+
542
+ #send-btn:disabled {
543
+ opacity: 0.4;
544
+ cursor: not-allowed;
545
+ }
546
+
547
+ #cancel-btn {
548
+ background: var(--red);
549
+ color: #fff;
550
+ }
551
+
552
+ .hidden {
553
+ display: none !important;
554
+ }
555
+
556
+ /* Scrollbar */
557
+ main::-webkit-scrollbar {
558
+ width: 6px;
559
+ }
560
+
561
+ main::-webkit-scrollbar-track {
562
+ background: transparent;
563
+ }
564
+
565
+ main::-webkit-scrollbar-thumb {
566
+ background: var(--border);
567
+ border-radius: 3px;
568
+ }
569
+
570
+ /* ── Graph pane ── */
571
+
572
+ #graph-toolbar {
573
+ display: flex;
574
+ align-items: center;
575
+ gap: 10px;
576
+ padding: 8px 16px;
577
+ border-bottom: 1px solid var(--border);
578
+ flex-shrink: 0;
579
+ flex-wrap: wrap;
580
+ }
581
+
582
+ #graph-search {
583
+ background: var(--bg-surface);
584
+ border: 1px solid var(--border);
585
+ border-radius: 4px;
586
+ color: var(--text);
587
+ font-family: var(--font-mono);
588
+ font-size: 12px;
589
+ padding: 5px 10px;
590
+ width: 200px;
591
+ }
592
+
593
+ #graph-search:focus {
594
+ outline: none;
595
+ border-color: var(--accent);
596
+ }
597
+
598
+ /* Search dropdown */
599
+ .search-dropdown {
600
+ position: absolute;
601
+ top: 100%;
602
+ left: 0;
603
+ width: 300px;
604
+ max-height: 320px;
605
+ overflow-y: auto;
606
+ background: var(--bg-surface);
607
+ border: 1px solid var(--border);
608
+ border-radius: 6px;
609
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
610
+ z-index: 200;
611
+ margin-top: 4px;
612
+ }
613
+
614
+ .search-result {
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: space-between;
618
+ padding: 6px 10px;
619
+ cursor: pointer;
620
+ font-size: 12px;
621
+ transition: background 0.1s;
622
+ }
623
+
624
+ .search-result:hover {
625
+ background: var(--bg-hover);
626
+ }
627
+
628
+ .search-result-name {
629
+ color: var(--text);
630
+ font-weight: 500;
631
+ }
632
+
633
+ .search-result-kind {
634
+ font-size: 11px;
635
+ opacity: 0.7;
636
+ }
637
+
638
+ #cy {
639
+ flex: 1;
640
+ min-height: 0;
641
+ background: var(--bg);
642
+ }
643
+
644
+ .graph-empty {
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ height: 100%;
649
+ color: var(--text-dim);
650
+ font-size: 14px;
651
+ padding: 40px;
652
+ text-align: center;
653
+ }
654
+
655
+ /* Symbol detail panel */
656
+ #symbol-detail {
657
+ position: absolute;
658
+ top: 0;
659
+ right: 0;
660
+ width: 320px;
661
+ min-width: 200px;
662
+ max-width: 80%;
663
+ height: 100%;
664
+ background: var(--bg-surface);
665
+ border-left: 1px solid var(--border);
666
+ overflow-y: auto;
667
+ padding: 16px;
668
+ z-index: 50;
669
+ box-shadow: -4px 0 16px rgba(0, 0, 0, 0.3);
670
+ }
671
+
672
+ #symbol-detail .resize-handle {
673
+ position: absolute;
674
+ top: 0;
675
+ left: 0;
676
+ width: 5px;
677
+ height: 100%;
678
+ cursor: col-resize;
679
+ background: transparent;
680
+ z-index: 51;
681
+ }
682
+
683
+ #symbol-detail .resize-handle:hover,
684
+ #symbol-detail .resize-handle.dragging {
685
+ background: var(--accent-dim);
686
+ }
687
+
688
+ .detail-header {
689
+ display: flex;
690
+ align-items: center;
691
+ gap: 8px;
692
+ margin-bottom: 8px;
693
+ }
694
+
695
+ .detail-name {
696
+ font-size: 15px;
697
+ font-weight: 600;
698
+ color: var(--text);
699
+ word-break: break-all;
700
+ }
701
+
702
+ .detail-kind-badge {
703
+ font-size: 11px;
704
+ padding: 2px 8px;
705
+ border-radius: 10px;
706
+ font-weight: 500;
707
+ flex-shrink: 0;
708
+ }
709
+
710
+ .detail-file {
711
+ font-size: 12px;
712
+ color: var(--text-dim);
713
+ margin-bottom: 12px;
714
+ }
715
+
716
+ .detail-signature {
717
+ background: var(--bg);
718
+ border: 1px solid var(--border);
719
+ border-radius: 4px;
720
+ padding: 8px 10px;
721
+ font-size: 12px;
722
+ color: var(--text);
723
+ overflow-x: auto;
724
+ white-space: pre-wrap;
725
+ margin-bottom: 12px;
726
+ font-family: var(--font-mono);
727
+ }
728
+
729
+ .detail-code {
730
+ background: var(--bg) !important;
731
+ border: 1px solid var(--border);
732
+ border-radius: 4px;
733
+ padding: 10px 12px !important;
734
+ font-size: 11px;
735
+ line-height: 1.5;
736
+ color: var(--text);
737
+ overflow: auto;
738
+ max-height: 300px;
739
+ white-space: pre;
740
+ margin-bottom: 12px;
741
+ font-family: var(--font-mono);
742
+ tab-size: 2;
743
+ }
744
+
745
+ .detail-actions {
746
+ display: flex;
747
+ gap: 8px;
748
+ margin-bottom: 16px;
749
+ }
750
+
751
+ .detail-actions .header-btn {
752
+ flex: 1;
753
+ text-align: center;
754
+ }
755
+
756
+ .detail-section {
757
+ margin-bottom: 14px;
758
+ }
759
+
760
+ .detail-section-title {
761
+ font-size: 11px;
762
+ color: var(--text-dim);
763
+ text-transform: uppercase;
764
+ letter-spacing: 0.5px;
765
+ margin-bottom: 6px;
766
+ font-weight: 600;
767
+ }
768
+
769
+ .detail-section-list {
770
+ display: flex;
771
+ flex-direction: column;
772
+ gap: 2px;
773
+ font-size: 12px;
774
+ }
775
+
776
+ .detail-link {
777
+ color: var(--accent);
778
+ cursor: pointer;
779
+ padding: 3px 6px;
780
+ border-radius: 3px;
781
+ transition: background 0.15s;
782
+ }
783
+
784
+ .detail-link:hover {
785
+ background: var(--bg-hover);
786
+ }
787
+
788
+ .detail-empty {
789
+ color: var(--text-dim);
790
+ font-style: italic;
791
+ }
792
+
793
+ /* Agent pulse animation */
794
+ @keyframes agent-pulse {
795
+ 0%, 100% { border-color: #ff9e64; }
796
+ 50% { border-color: #e0af68; }
797
+ }
798
+
799
+ #symbol-detail::-webkit-scrollbar {
800
+ width: 5px;
801
+ }
802
+
803
+ #symbol-detail::-webkit-scrollbar-track {
804
+ background: transparent;
805
+ }
806
+
807
+ #symbol-detail::-webkit-scrollbar-thumb {
808
+ background: var(--border);
809
+ border-radius: 3px;
810
+ }
811
+
812
+ /* Annotation items */
813
+ .detail-annotation-item {
814
+ display: flex;
815
+ align-items: flex-start;
816
+ gap: 6px;
817
+ padding: 4px 6px;
818
+ border-radius: 3px;
819
+ font-size: 12px;
820
+ color: var(--text);
821
+ background: var(--bg);
822
+ margin-bottom: 4px;
823
+ }
824
+
825
+ .detail-annotation-item .annotation-text {
826
+ flex: 1;
827
+ word-break: break-word;
828
+ }
829
+
830
+ .detail-annotation-item .annotation-remove {
831
+ background: none;
832
+ border: none;
833
+ color: var(--text-dim);
834
+ cursor: pointer;
835
+ font-size: 14px;
836
+ padding: 0 2px;
837
+ line-height: 1;
838
+ flex-shrink: 0;
839
+ }
840
+
841
+ .detail-annotation-item .annotation-remove:hover {
842
+ color: var(--red);
843
+ }
844
+
845
+ .detail-annotation-input {
846
+ display: flex;
847
+ gap: 6px;
848
+ margin-top: 6px;
849
+ }
850
+
851
+ .detail-annotation-textarea {
852
+ flex: 1;
853
+ background: var(--bg);
854
+ border: 1px solid var(--border);
855
+ border-radius: 4px;
856
+ color: var(--text);
857
+ font-family: var(--font-mono);
858
+ font-size: 12px;
859
+ padding: 5px 8px;
860
+ resize: none;
861
+ min-height: 28px;
862
+ max-height: 80px;
863
+ }
864
+
865
+ .detail-annotation-textarea:focus {
866
+ outline: none;
867
+ border-color: var(--accent-dim);
868
+ }
869
+
870
+ .detail-annotation-input .dropdown-action {
871
+ align-self: flex-end;
872
+ }
873
+
874
+ /* Explain output area */
875
+ .detail-explain-content {
876
+ white-space: pre-wrap;
877
+ background: var(--bg);
878
+ border: 1px solid var(--border);
879
+ border-radius: 4px;
880
+ padding: 10px 12px;
881
+ font-size: 12px;
882
+ line-height: 1.5;
883
+ color: var(--text);
884
+ max-height: 400px;
885
+ overflow-y: auto;
886
+ font-family: var(--font-mono);
887
+ }
888
+
889
+ .detail-explain-content::-webkit-scrollbar {
890
+ width: 5px;
891
+ }
892
+
893
+ .detail-explain-content::-webkit-scrollbar-track {
894
+ background: transparent;
895
+ }
896
+
897
+ .detail-explain-content::-webkit-scrollbar-thumb {
898
+ background: var(--border);
899
+ border-radius: 3px;
900
+ }
901
+
902
+ .explain-status {
903
+ display: flex;
904
+ align-items: center;
905
+ gap: 8px;
906
+ color: var(--text-dim);
907
+ font-size: 12px;
908
+ }
909
+
910
+ .explain-spinner {
911
+ width: 12px;
912
+ height: 12px;
913
+ border: 2px solid var(--border);
914
+ border-top-color: var(--accent);
915
+ border-radius: 50%;
916
+ animation: spin 0.8s linear infinite;
917
+ flex-shrink: 0;
918
+ }
919
+
920
+ @keyframes spin {
921
+ to { transform: rotate(360deg); }
922
+ }