claude-relay 1.0.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,1211 @@
1
+ /* --- Reset & Variables --- */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ -webkit-tap-highlight-color: transparent;
7
+ }
8
+
9
+ :root {
10
+ --bg: #191919;
11
+ --text: #d4d4d4;
12
+ --text-muted: #8b8b8b;
13
+ --text-dimmer: #555;
14
+ --accent: #d4a574;
15
+ --code-bg: #0d1117;
16
+ --border: #2a2a2a;
17
+ --input-bg: #2a2a2a;
18
+ --user-bubble: #2a2a2a;
19
+ --error: #e55;
20
+ --success: #4a9;
21
+ --sidebar-bg: #141414;
22
+ --safe-top: env(safe-area-inset-top, 0px);
23
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
24
+ }
25
+
26
+ html, body {
27
+ height: 100%;
28
+ background: var(--bg);
29
+ color: var(--text);
30
+ font-family: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
31
+ font-size: 15px;
32
+ line-height: 1.6;
33
+ overflow: hidden;
34
+ }
35
+
36
+ /* --- Lucide icon defaults --- */
37
+ .lucide {
38
+ vertical-align: middle;
39
+ flex-shrink: 0;
40
+ }
41
+
42
+ .icon-spin {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ }
47
+
48
+ .icon-spin .lucide {
49
+ animation: spin 0.8s linear infinite;
50
+ }
51
+
52
+ /* --- Layout --- */
53
+ #layout {
54
+ display: flex;
55
+ height: 100%;
56
+ height: 100dvh;
57
+ }
58
+
59
+ /* --- Sidebar --- */
60
+ #sidebar {
61
+ width: 260px;
62
+ flex-shrink: 0;
63
+ background: var(--sidebar-bg);
64
+ border-right: 1px solid var(--border);
65
+ display: flex;
66
+ flex-direction: column;
67
+ overflow: hidden;
68
+ }
69
+
70
+ #sidebar-header {
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: space-between;
74
+ padding: 16px;
75
+ border-bottom: 1px solid var(--border);
76
+ }
77
+
78
+ .sidebar-title {
79
+ font-weight: 600;
80
+ font-size: 14px;
81
+ }
82
+
83
+ #new-session-btn {
84
+ width: 28px;
85
+ height: 28px;
86
+ border-radius: 6px;
87
+ border: 1px solid var(--border);
88
+ background: transparent;
89
+ color: var(--text);
90
+ cursor: pointer;
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: center;
94
+ transition: background 0.15s;
95
+ }
96
+
97
+ #new-session-btn .lucide {
98
+ width: 16px;
99
+ height: 16px;
100
+ }
101
+
102
+ #new-session-btn:hover {
103
+ background: rgba(255,255,255,0.06);
104
+ }
105
+
106
+ #session-list {
107
+ flex: 1;
108
+ overflow-y: auto;
109
+ padding: 8px;
110
+ }
111
+
112
+ .session-item {
113
+ padding: 10px 12px;
114
+ border-radius: 8px;
115
+ cursor: pointer;
116
+ font-size: 13px;
117
+ color: var(--text-muted);
118
+ overflow: hidden;
119
+ text-overflow: ellipsis;
120
+ white-space: nowrap;
121
+ margin-bottom: 2px;
122
+ transition: background 0.15s;
123
+ }
124
+
125
+ .session-item:hover { background: rgba(255,255,255,0.05); }
126
+ .session-item.active {
127
+ background: rgba(255,255,255,0.08);
128
+ color: var(--text);
129
+ }
130
+
131
+ .session-item .session-processing {
132
+ display: inline-block;
133
+ width: 6px;
134
+ height: 6px;
135
+ border-radius: 50%;
136
+ background: var(--accent);
137
+ animation: pulse 1.2s infinite;
138
+ margin-right: 6px;
139
+ vertical-align: middle;
140
+ }
141
+
142
+ /* --- Sidebar overlay (mobile) --- */
143
+ #sidebar-overlay {
144
+ display: none;
145
+ position: fixed;
146
+ inset: 0;
147
+ background: rgba(0,0,0,0.5);
148
+ z-index: 99;
149
+ }
150
+
151
+ #sidebar-overlay.visible { display: block; }
152
+
153
+ /* --- Hamburger button --- */
154
+ #hamburger-btn {
155
+ display: none;
156
+ background: none;
157
+ border: none;
158
+ color: var(--text);
159
+ cursor: pointer;
160
+ padding: 4px;
161
+ margin-right: 10px;
162
+ flex-shrink: 0;
163
+ }
164
+
165
+ #hamburger-btn .lucide {
166
+ width: 20px;
167
+ height: 20px;
168
+ }
169
+
170
+ /* --- Main app area --- */
171
+ #app {
172
+ flex: 1;
173
+ display: flex;
174
+ flex-direction: column;
175
+ min-width: 0;
176
+ }
177
+
178
+ /* --- Header --- */
179
+ #header {
180
+ flex-shrink: 0;
181
+ display: flex;
182
+ align-items: center;
183
+ justify-content: space-between;
184
+ padding: calc(var(--safe-top) + 10px) 20px 10px;
185
+ border-bottom: 1px solid var(--border);
186
+ min-height: 44px;
187
+ }
188
+
189
+ #header-left {
190
+ display: flex;
191
+ align-items: center;
192
+ overflow: hidden;
193
+ min-width: 0;
194
+ }
195
+
196
+ .project-name {
197
+ font-weight: 600;
198
+ font-size: 14px;
199
+ color: var(--text);
200
+ overflow: hidden;
201
+ text-overflow: ellipsis;
202
+ white-space: nowrap;
203
+ }
204
+
205
+ .status {
206
+ display: flex;
207
+ align-items: center;
208
+ gap: 6px;
209
+ font-size: 12px;
210
+ color: var(--text-muted);
211
+ flex-shrink: 0;
212
+ }
213
+
214
+ .status-dot {
215
+ width: 7px;
216
+ height: 7px;
217
+ border-radius: 50%;
218
+ background: var(--error);
219
+ transition: background 0.3s;
220
+ }
221
+
222
+ .status-dot.connected { background: var(--success); }
223
+ .status-dot.processing {
224
+ background: var(--accent);
225
+ animation: pulse 1.2s infinite;
226
+ }
227
+
228
+ /* --- Messages area --- */
229
+ #messages {
230
+ flex: 1;
231
+ overflow-y: auto;
232
+ -webkit-overflow-scrolling: touch;
233
+ padding: 16px 0 8px;
234
+ }
235
+
236
+ /* --- User message --- */
237
+ .msg-user {
238
+ display: flex;
239
+ justify-content: flex-end;
240
+ max-width: 800px;
241
+ margin: 0 auto 14px;
242
+ padding: 0 20px;
243
+ }
244
+
245
+ .msg-user .bubble {
246
+ background: var(--user-bubble);
247
+ border-radius: 18px;
248
+ padding: 10px 16px;
249
+ max-width: 85%;
250
+ font-size: 15px;
251
+ line-height: 1.5;
252
+ word-break: break-word;
253
+ white-space: pre-wrap;
254
+ }
255
+
256
+ /* --- Assistant message --- */
257
+ .msg-assistant {
258
+ max-width: 800px;
259
+ margin: 0 auto 8px;
260
+ padding: 0 20px;
261
+ }
262
+
263
+ /* --- Markdown content --- */
264
+ .md-content {
265
+ font-size: 15px;
266
+ line-height: 1.65;
267
+ word-break: break-word;
268
+ }
269
+
270
+ .md-content p { margin-bottom: 12px; }
271
+ .md-content p:last-child { margin-bottom: 0; }
272
+
273
+ .md-content h1, .md-content h2, .md-content h3,
274
+ .md-content h4, .md-content h5, .md-content h6 {
275
+ margin: 20px 0 10px;
276
+ font-weight: 600;
277
+ line-height: 1.3;
278
+ }
279
+ .md-content h1 { font-size: 1.4em; }
280
+ .md-content h2 { font-size: 1.2em; }
281
+ .md-content h3 { font-size: 1.1em; }
282
+
283
+ .md-content code {
284
+ background: rgba(255,255,255,0.06);
285
+ padding: 2px 6px;
286
+ border-radius: 4px;
287
+ font-family: "SF Mono", Menlo, Monaco, "Cascadia Code", monospace;
288
+ font-size: 0.88em;
289
+ }
290
+
291
+ .md-content pre {
292
+ background: var(--code-bg);
293
+ border: 1px solid var(--border);
294
+ border-radius: 8px;
295
+ margin: 12px 0;
296
+ overflow: hidden;
297
+ }
298
+
299
+ .md-content pre code {
300
+ display: block;
301
+ padding: 14px 16px;
302
+ overflow-x: auto;
303
+ font-size: 13px;
304
+ line-height: 1.5;
305
+ background: none;
306
+ border-radius: 0;
307
+ }
308
+
309
+ .md-content strong { font-weight: 600; }
310
+ .md-content em { font-style: italic; }
311
+
312
+ .md-content a {
313
+ color: var(--accent);
314
+ text-decoration: none;
315
+ }
316
+ .md-content a:hover { text-decoration: underline; }
317
+
318
+ .md-content ul, .md-content ol {
319
+ padding-left: 24px;
320
+ margin: 8px 0;
321
+ }
322
+ .md-content li { margin-bottom: 4px; }
323
+
324
+ .md-content blockquote {
325
+ border-left: 3px solid var(--border);
326
+ padding-left: 14px;
327
+ color: var(--text-muted);
328
+ margin: 10px 0;
329
+ }
330
+
331
+ .md-content hr {
332
+ border: none;
333
+ border-top: 1px solid var(--border);
334
+ margin: 16px 0;
335
+ }
336
+
337
+ .md-content table {
338
+ border-collapse: collapse;
339
+ margin: 12px 0;
340
+ width: 100%;
341
+ font-size: 14px;
342
+ }
343
+ .md-content th, .md-content td {
344
+ border: 1px solid var(--border);
345
+ padding: 6px 10px;
346
+ text-align: left;
347
+ }
348
+ .md-content th {
349
+ background: rgba(255,255,255,0.04);
350
+ font-weight: 600;
351
+ }
352
+
353
+ /* --- Thinking --- */
354
+ .thinking-item {
355
+ max-width: 800px;
356
+ margin: 4px auto;
357
+ padding: 0 20px;
358
+ }
359
+
360
+ .thinking-header {
361
+ display: flex;
362
+ align-items: center;
363
+ gap: 6px;
364
+ cursor: pointer;
365
+ padding: 6px 0;
366
+ user-select: none;
367
+ }
368
+
369
+ .thinking-chevron {
370
+ color: var(--text-dimmer);
371
+ transition: transform 0.2s;
372
+ display: inline-flex;
373
+ flex-shrink: 0;
374
+ }
375
+
376
+ .thinking-chevron .lucide {
377
+ width: 14px;
378
+ height: 14px;
379
+ }
380
+
381
+ .thinking-item.expanded .thinking-chevron {
382
+ transform: rotate(90deg);
383
+ }
384
+
385
+ .thinking-label {
386
+ font-size: 13px;
387
+ color: var(--text-muted);
388
+ font-style: italic;
389
+ }
390
+
391
+ .thinking-duration {
392
+ font-style: normal;
393
+ color: var(--text-dimmer);
394
+ font-size: 12px;
395
+ }
396
+
397
+ .thinking-spinner {
398
+ flex-shrink: 0;
399
+ color: var(--text-muted);
400
+ }
401
+
402
+ .thinking-spinner .lucide {
403
+ width: 14px;
404
+ height: 14px;
405
+ }
406
+
407
+ .thinking-item.done .thinking-spinner { display: none; }
408
+
409
+ .thinking-content {
410
+ display: none;
411
+ padding: 4px 0 8px 18px;
412
+ font-size: 13px;
413
+ line-height: 1.5;
414
+ color: var(--text-muted);
415
+ white-space: pre-wrap;
416
+ word-break: break-word;
417
+ max-height: 300px;
418
+ overflow-y: auto;
419
+ }
420
+
421
+ .thinking-item.expanded .thinking-content { display: block; }
422
+
423
+ /* --- Tool items --- */
424
+ .tool-item {
425
+ max-width: 800px;
426
+ margin: 2px auto;
427
+ padding: 0 20px;
428
+ }
429
+
430
+ .tool-header {
431
+ display: flex;
432
+ align-items: center;
433
+ gap: 8px;
434
+ padding: 5px 0;
435
+ cursor: pointer;
436
+ user-select: none;
437
+ }
438
+
439
+ .tool-bullet {
440
+ width: 6px;
441
+ height: 6px;
442
+ border-radius: 50%;
443
+ background: var(--accent);
444
+ flex-shrink: 0;
445
+ animation: pulse 1.2s infinite;
446
+ }
447
+
448
+ .tool-item.done .tool-bullet {
449
+ background: var(--success);
450
+ animation: none;
451
+ }
452
+
453
+ .tool-item.error .tool-bullet {
454
+ background: var(--error);
455
+ animation: none;
456
+ }
457
+
458
+ .tool-name {
459
+ font-weight: 600;
460
+ font-size: 13px;
461
+ color: var(--accent);
462
+ flex-shrink: 0;
463
+ }
464
+
465
+ .tool-desc {
466
+ flex: 1;
467
+ font-size: 13px;
468
+ color: var(--text-muted);
469
+ font-family: "SF Mono", Menlo, Monaco, monospace;
470
+ overflow: hidden;
471
+ text-overflow: ellipsis;
472
+ white-space: nowrap;
473
+ }
474
+
475
+ .tool-status-icon {
476
+ flex-shrink: 0;
477
+ width: 16px;
478
+ text-align: center;
479
+ font-size: 12px;
480
+ display: inline-flex;
481
+ align-items: center;
482
+ justify-content: center;
483
+ }
484
+
485
+ .tool-status-icon .lucide {
486
+ width: 14px;
487
+ height: 14px;
488
+ }
489
+
490
+ .tool-status-icon .icon-spin .lucide {
491
+ width: 14px;
492
+ height: 14px;
493
+ color: var(--accent);
494
+ }
495
+
496
+ .tool-status-icon .check { color: var(--success); }
497
+ .tool-status-icon .err-icon { color: var(--error); }
498
+
499
+ .tool-subtitle {
500
+ display: flex;
501
+ gap: 6px;
502
+ padding: 0 0 4px 14px;
503
+ font-size: 12px;
504
+ color: var(--text-dimmer);
505
+ font-style: italic;
506
+ align-items: flex-start;
507
+ }
508
+
509
+ .tool-subtitle .tool-connector {
510
+ font-family: "SF Mono", Menlo, Monaco, monospace;
511
+ font-style: normal;
512
+ flex-shrink: 0;
513
+ line-height: 1.4;
514
+ }
515
+
516
+ .tool-result-block {
517
+ margin: 4px 0 8px 0;
518
+ background: var(--code-bg);
519
+ border: 1px solid var(--border);
520
+ border-radius: 8px;
521
+ overflow: hidden;
522
+ cursor: pointer;
523
+ }
524
+
525
+ .tool-result-block.collapsed {
526
+ display: none;
527
+ }
528
+
529
+ .tool-result-block pre {
530
+ padding: 12px 14px;
531
+ font-family: "SF Mono", Menlo, Monaco, monospace;
532
+ font-size: 12px;
533
+ line-height: 1.5;
534
+ color: var(--text-muted);
535
+ white-space: pre-wrap;
536
+ word-break: break-all;
537
+ margin: 0;
538
+ max-height: 300px;
539
+ overflow-y: auto;
540
+ }
541
+
542
+ .tool-result-block pre.is-error {
543
+ color: var(--error);
544
+ }
545
+
546
+ /* --- Plan mode --- */
547
+ .plan-banner {
548
+ max-width: 800px;
549
+ margin: 8px auto;
550
+ padding: 0 20px;
551
+ }
552
+
553
+ .plan-banner > * {
554
+ vertical-align: middle;
555
+ }
556
+
557
+ .plan-banner .plan-banner-icon {
558
+ display: inline-flex;
559
+ align-items: center;
560
+ margin-right: 8px;
561
+ }
562
+
563
+ .plan-banner .plan-banner-icon .lucide {
564
+ width: 16px;
565
+ height: 16px;
566
+ }
567
+
568
+ .plan-banner.plan-enter {
569
+ color: var(--accent);
570
+ }
571
+
572
+ .plan-banner.plan-enter .plan-banner-icon { color: var(--accent); }
573
+
574
+ .plan-banner .plan-banner-text {
575
+ font-size: 13px;
576
+ font-weight: 600;
577
+ }
578
+
579
+ .plan-banner .plan-banner-hint {
580
+ font-size: 12px;
581
+ color: var(--text-muted);
582
+ font-style: italic;
583
+ margin-left: 8px;
584
+ }
585
+
586
+ .plan-banner.plan-exit {
587
+ color: var(--success);
588
+ }
589
+
590
+ .plan-banner.plan-exit .plan-banner-icon { color: var(--success); }
591
+
592
+ /* Plan card */
593
+ .plan-card {
594
+ max-width: 800px;
595
+ margin: 8px auto;
596
+ padding: 0 20px;
597
+ }
598
+
599
+ .plan-card-header {
600
+ display: flex;
601
+ align-items: center;
602
+ gap: 8px;
603
+ padding: 10px 14px;
604
+ background: rgba(212, 165, 116, 0.08);
605
+ border: 1px solid rgba(212, 165, 116, 0.2);
606
+ border-radius: 10px 10px 0 0;
607
+ cursor: pointer;
608
+ user-select: none;
609
+ }
610
+
611
+ .plan-card.collapsed .plan-card-header {
612
+ border-radius: 10px;
613
+ }
614
+
615
+ .plan-card-icon {
616
+ display: inline-flex;
617
+ color: var(--accent);
618
+ }
619
+
620
+ .plan-card-icon .lucide {
621
+ width: 16px;
622
+ height: 16px;
623
+ }
624
+
625
+ .plan-card-title {
626
+ font-size: 13px;
627
+ font-weight: 600;
628
+ color: var(--accent);
629
+ flex: 1;
630
+ }
631
+
632
+ .plan-card-chevron {
633
+ display: inline-flex;
634
+ color: var(--text-muted);
635
+ transition: transform 0.2s;
636
+ }
637
+
638
+ .plan-card-chevron .lucide {
639
+ width: 14px;
640
+ height: 14px;
641
+ }
642
+
643
+ .plan-card.collapsed .plan-card-chevron {
644
+ transform: rotate(-90deg);
645
+ }
646
+
647
+ .plan-card-body {
648
+ padding: 14px 16px;
649
+ background: rgba(255, 255, 255, 0.02);
650
+ border: 1px solid var(--border);
651
+ border-top: none;
652
+ border-radius: 0 0 10px 10px;
653
+ font-size: 14px;
654
+ line-height: 1.6;
655
+ max-height: 500px;
656
+ overflow-y: auto;
657
+ }
658
+
659
+ .plan-card.collapsed .plan-card-body {
660
+ display: none;
661
+ }
662
+
663
+ /* Inherit markdown styles in plan card */
664
+ .plan-card-body p { margin-bottom: 10px; }
665
+ .plan-card-body p:last-child { margin-bottom: 0; }
666
+ .plan-card-body h1, .plan-card-body h2, .plan-card-body h3 {
667
+ margin: 14px 0 8px;
668
+ font-weight: 600;
669
+ line-height: 1.3;
670
+ }
671
+ .plan-card-body h1 { font-size: 1.3em; }
672
+ .plan-card-body h2 { font-size: 1.15em; }
673
+ .plan-card-body h3 { font-size: 1.05em; }
674
+ .plan-card-body code {
675
+ background: rgba(255,255,255,0.06);
676
+ padding: 2px 6px;
677
+ border-radius: 4px;
678
+ font-family: "SF Mono", Menlo, Monaco, monospace;
679
+ font-size: 0.88em;
680
+ }
681
+ .plan-card-body pre {
682
+ background: var(--code-bg);
683
+ border: 1px solid var(--border);
684
+ border-radius: 6px;
685
+ margin: 8px 0;
686
+ }
687
+ .plan-card-body pre code {
688
+ display: block;
689
+ padding: 10px 12px;
690
+ overflow-x: auto;
691
+ font-size: 12px;
692
+ line-height: 1.5;
693
+ background: none;
694
+ border-radius: 0;
695
+ }
696
+ .plan-card-body ul, .plan-card-body ol {
697
+ padding-left: 22px;
698
+ margin: 6px 0;
699
+ }
700
+ .plan-card-body li { margin-bottom: 3px; }
701
+ .plan-card-body strong { font-weight: 600; }
702
+ .plan-card-body blockquote {
703
+ border-left: 3px solid var(--border);
704
+ padding-left: 12px;
705
+ color: var(--text-muted);
706
+ margin: 8px 0;
707
+ }
708
+
709
+ /* --- Todo widget --- */
710
+ .todo-widget {
711
+ max-width: 800px;
712
+ margin: 10px auto;
713
+ padding: 0 20px;
714
+ }
715
+
716
+ .todo-header {
717
+ display: flex;
718
+ align-items: center;
719
+ gap: 8px;
720
+ padding: 8px 14px;
721
+ background: rgba(255, 255, 255, 0.03);
722
+ border: 1px solid var(--border);
723
+ border-radius: 10px 10px 0 0;
724
+ }
725
+
726
+ .todo-header-icon {
727
+ display: inline-flex;
728
+ color: var(--accent);
729
+ }
730
+
731
+ .todo-header-icon .lucide {
732
+ width: 16px;
733
+ height: 16px;
734
+ }
735
+
736
+ .todo-header-title {
737
+ font-size: 13px;
738
+ font-weight: 600;
739
+ color: var(--text);
740
+ flex: 1;
741
+ }
742
+
743
+ .todo-header-count {
744
+ font-size: 12px;
745
+ color: var(--text-muted);
746
+ font-family: "SF Mono", Menlo, Monaco, monospace;
747
+ }
748
+
749
+ .todo-progress {
750
+ height: 2px;
751
+ background: var(--border);
752
+ border-left: 1px solid var(--border);
753
+ border-right: 1px solid var(--border);
754
+ }
755
+
756
+ .todo-progress-bar {
757
+ height: 100%;
758
+ background: var(--success);
759
+ transition: width 0.3s ease;
760
+ }
761
+
762
+ .todo-items {
763
+ border: 1px solid var(--border);
764
+ border-top: none;
765
+ border-radius: 0 0 10px 10px;
766
+ overflow: hidden;
767
+ }
768
+
769
+ .todo-item {
770
+ display: flex;
771
+ align-items: center;
772
+ gap: 10px;
773
+ padding: 8px 14px;
774
+ font-size: 13px;
775
+ border-bottom: 1px solid rgba(255, 255, 255, 0.03);
776
+ }
777
+
778
+ .todo-item:last-child {
779
+ border-bottom: none;
780
+ }
781
+
782
+ .todo-item-icon {
783
+ display: inline-flex;
784
+ flex-shrink: 0;
785
+ }
786
+
787
+ .todo-item-icon .lucide {
788
+ width: 16px;
789
+ height: 16px;
790
+ }
791
+
792
+ .todo-item.pending .todo-item-icon { color: var(--text-dimmer); }
793
+ .todo-item.in-progress .todo-item-icon { color: var(--accent); }
794
+ .todo-item.completed .todo-item-icon { color: var(--success); }
795
+
796
+ .todo-item-text {
797
+ flex: 1;
798
+ line-height: 1.4;
799
+ }
800
+
801
+ .todo-item.pending .todo-item-text { color: var(--text-muted); }
802
+ .todo-item.in-progress .todo-item-text { color: var(--text); }
803
+ .todo-item.completed .todo-item-text {
804
+ color: var(--text-dimmer);
805
+ text-decoration: line-through;
806
+ }
807
+
808
+ /* --- Turn metadata --- */
809
+ .turn-meta {
810
+ max-width: 800px;
811
+ margin: 4px auto 16px;
812
+ padding: 0 20px;
813
+ font-size: 12px;
814
+ color: var(--text-dimmer);
815
+ }
816
+
817
+ /* --- System messages --- */
818
+ .sys-msg {
819
+ max-width: 800px;
820
+ margin: 4px auto;
821
+ padding: 0 20px;
822
+ text-align: center;
823
+ }
824
+
825
+ .sys-msg .sys-text {
826
+ font-size: 12px;
827
+ color: var(--text-dimmer);
828
+ font-style: italic;
829
+ }
830
+
831
+ .sys-msg.error .sys-text { color: var(--error); }
832
+
833
+ /* --- Inline activity indicator --- */
834
+ .activity-inline {
835
+ max-width: 800px;
836
+ margin: 8px auto;
837
+ padding: 0 20px;
838
+ display: flex;
839
+ align-items: center;
840
+ gap: 8px;
841
+ font-size: 14px;
842
+ color: var(--accent);
843
+ }
844
+
845
+ .activity-inline .activity-icon {
846
+ display: inline-flex;
847
+ animation: sparkle 2s ease-in-out infinite;
848
+ flex-shrink: 0;
849
+ }
850
+
851
+ .activity-inline .activity-icon .lucide {
852
+ width: 16px;
853
+ height: 16px;
854
+ }
855
+
856
+ .activity-inline .activity-text {
857
+ overflow: hidden;
858
+ text-overflow: ellipsis;
859
+ white-space: nowrap;
860
+ }
861
+
862
+ /* --- AskUserQuestion --- */
863
+ .ask-user-container {
864
+ max-width: 800px;
865
+ margin: 8px auto;
866
+ padding: 0 20px;
867
+ }
868
+
869
+ .ask-user-question {
870
+ margin-bottom: 12px;
871
+ }
872
+
873
+ .ask-user-question-text {
874
+ font-size: 14px;
875
+ font-weight: 500;
876
+ color: var(--text);
877
+ margin-bottom: 8px;
878
+ }
879
+
880
+ .ask-user-options {
881
+ display: flex;
882
+ flex-wrap: wrap;
883
+ gap: 8px;
884
+ margin-bottom: 8px;
885
+ }
886
+
887
+ .ask-user-option {
888
+ background: var(--input-bg);
889
+ border: 1px solid var(--border);
890
+ border-radius: 10px;
891
+ padding: 8px 14px;
892
+ cursor: pointer;
893
+ transition: background 0.15s, border-color 0.15s;
894
+ text-align: left;
895
+ max-width: 100%;
896
+ color: inherit;
897
+ font-family: inherit;
898
+ }
899
+
900
+ .ask-user-option:hover {
901
+ background: rgba(255,255,255,0.08);
902
+ border-color: var(--accent);
903
+ }
904
+
905
+ .ask-user-option .option-label {
906
+ font-size: 14px;
907
+ font-weight: 500;
908
+ color: var(--text);
909
+ }
910
+
911
+ .ask-user-option .option-desc {
912
+ font-size: 12px;
913
+ color: var(--text-muted);
914
+ margin-top: 2px;
915
+ }
916
+
917
+ .ask-user-option.selected {
918
+ border-color: var(--accent);
919
+ background: rgba(212, 165, 116, 0.1);
920
+ }
921
+
922
+ .ask-user-other {
923
+ display: flex;
924
+ gap: 8px;
925
+ align-items: center;
926
+ }
927
+
928
+ .ask-user-other input {
929
+ flex: 1;
930
+ background: var(--input-bg);
931
+ border: 1px solid var(--border);
932
+ border-radius: 8px;
933
+ color: var(--text);
934
+ font-size: 14px;
935
+ font-family: inherit;
936
+ padding: 8px 12px;
937
+ outline: none;
938
+ transition: border-color 0.2s;
939
+ }
940
+
941
+ .ask-user-other input:focus {
942
+ border-color: #444;
943
+ }
944
+
945
+ .ask-user-other input::placeholder {
946
+ color: var(--text-muted);
947
+ }
948
+
949
+ .ask-user-submit {
950
+ background: var(--accent);
951
+ color: var(--bg);
952
+ border: none;
953
+ border-radius: 8px;
954
+ padding: 8px 16px;
955
+ font-size: 13px;
956
+ font-weight: 600;
957
+ cursor: pointer;
958
+ flex-shrink: 0;
959
+ transition: opacity 0.15s;
960
+ }
961
+
962
+ .ask-user-submit:hover {
963
+ opacity: 0.85;
964
+ }
965
+
966
+ .ask-user-submit:disabled {
967
+ opacity: 0.4;
968
+ cursor: default;
969
+ }
970
+
971
+ .ask-user-container.answered .ask-user-option {
972
+ cursor: default;
973
+ opacity: 0.5;
974
+ }
975
+
976
+ .ask-user-container.answered .ask-user-option.selected {
977
+ opacity: 1;
978
+ }
979
+
980
+ .ask-user-container.answered .ask-user-other input {
981
+ opacity: 0.5;
982
+ pointer-events: none;
983
+ }
984
+
985
+ .ask-user-container.answered .ask-user-submit {
986
+ display: none;
987
+ }
988
+
989
+ /* --- Images in user bubbles --- */
990
+ .bubble-images {
991
+ display: flex;
992
+ flex-wrap: wrap;
993
+ gap: 6px;
994
+ margin-bottom: 8px;
995
+ }
996
+
997
+ .bubble-images:last-child {
998
+ margin-bottom: 0;
999
+ }
1000
+
1001
+ .bubble-img {
1002
+ max-width: 240px;
1003
+ max-height: 180px;
1004
+ border-radius: 10px;
1005
+ object-fit: cover;
1006
+ cursor: pointer;
1007
+ }
1008
+
1009
+ .bubble-img:hover {
1010
+ opacity: 0.85;
1011
+ }
1012
+
1013
+ /* --- Image preview bar --- */
1014
+ #image-preview-bar {
1015
+ display: none;
1016
+ padding: 8px 16px 0;
1017
+ max-width: 800px;
1018
+ margin: 0 auto;
1019
+ }
1020
+
1021
+ #image-preview-bar.visible {
1022
+ display: flex;
1023
+ flex-wrap: wrap;
1024
+ gap: 8px;
1025
+ }
1026
+
1027
+ .image-preview-thumb {
1028
+ position: relative;
1029
+ display: inline-block;
1030
+ }
1031
+
1032
+ .image-preview-thumb img {
1033
+ width: 64px;
1034
+ height: 64px;
1035
+ object-fit: cover;
1036
+ border-radius: 8px;
1037
+ border: 1px solid var(--border);
1038
+ }
1039
+
1040
+ .image-preview-remove {
1041
+ position: absolute;
1042
+ top: -6px;
1043
+ right: -6px;
1044
+ width: 20px;
1045
+ height: 20px;
1046
+ border-radius: 50%;
1047
+ border: none;
1048
+ background: var(--bg);
1049
+ border: 1px solid var(--border);
1050
+ color: var(--text-muted);
1051
+ cursor: pointer;
1052
+ display: flex;
1053
+ align-items: center;
1054
+ justify-content: center;
1055
+ padding: 0;
1056
+ }
1057
+
1058
+ .image-preview-remove .lucide {
1059
+ width: 12px;
1060
+ height: 12px;
1061
+ }
1062
+
1063
+ .image-preview-remove:hover {
1064
+ background: var(--error);
1065
+ color: white;
1066
+ border-color: var(--error);
1067
+ }
1068
+
1069
+ /* --- Input area --- */
1070
+ #input-area {
1071
+ flex-shrink: 0;
1072
+ border-top: 1px solid var(--border);
1073
+ padding: 10px 16px calc(var(--safe-bottom) + 10px);
1074
+ }
1075
+
1076
+ #input-row {
1077
+ display: flex;
1078
+ align-items: flex-end;
1079
+ gap: 8px;
1080
+ max-width: 800px;
1081
+ margin: 0 auto;
1082
+ }
1083
+
1084
+ #input {
1085
+ flex: 1;
1086
+ background: var(--input-bg);
1087
+ border: 1px solid var(--border);
1088
+ border-radius: 12px;
1089
+ color: var(--text);
1090
+ font-size: 16px;
1091
+ font-family: inherit;
1092
+ line-height: 1.4;
1093
+ padding: 10px 16px;
1094
+ resize: none;
1095
+ outline: none;
1096
+ min-height: 42px;
1097
+ max-height: 120px;
1098
+ overflow-y: auto;
1099
+ transition: border-color 0.2s;
1100
+ }
1101
+
1102
+ #input:focus { border-color: #444; }
1103
+ #input::placeholder { color: var(--text-muted); }
1104
+
1105
+ #send-btn {
1106
+ flex-shrink: 0;
1107
+ width: 36px;
1108
+ height: 36px;
1109
+ border-radius: 50%;
1110
+ border: none;
1111
+ background: var(--accent);
1112
+ color: var(--bg);
1113
+ cursor: pointer;
1114
+ display: flex;
1115
+ align-items: center;
1116
+ justify-content: center;
1117
+ transition: opacity 0.2s;
1118
+ }
1119
+
1120
+ #send-btn .lucide {
1121
+ width: 18px;
1122
+ height: 18px;
1123
+ }
1124
+
1125
+ #send-btn:disabled { opacity: 0.3; cursor: default; }
1126
+ #send-btn:active:not(:disabled) { opacity: 0.7; }
1127
+
1128
+ /* --- Slash command autocomplete --- */
1129
+ #slash-menu {
1130
+ display: none;
1131
+ position: absolute;
1132
+ bottom: 100%;
1133
+ left: 0;
1134
+ right: 0;
1135
+ max-height: 240px;
1136
+ overflow-y: auto;
1137
+ background: #252525;
1138
+ border: 1px solid var(--border);
1139
+ border-radius: 10px;
1140
+ margin-bottom: 8px;
1141
+ box-shadow: 0 -4px 20px rgba(0,0,0,0.4);
1142
+ z-index: 10;
1143
+ }
1144
+
1145
+ #slash-menu.visible { display: block; }
1146
+
1147
+ .slash-item {
1148
+ display: flex;
1149
+ align-items: center;
1150
+ padding: 10px 14px;
1151
+ cursor: pointer;
1152
+ gap: 10px;
1153
+ border-bottom: 1px solid rgba(255,255,255,0.04);
1154
+ }
1155
+
1156
+ .slash-item:last-child { border-bottom: none; }
1157
+
1158
+ .slash-item:hover,
1159
+ .slash-item.active {
1160
+ background: rgba(255,255,255,0.06);
1161
+ }
1162
+
1163
+ .slash-item .slash-cmd {
1164
+ color: var(--accent);
1165
+ font-weight: 600;
1166
+ font-size: 14px;
1167
+ font-family: "SF Mono", Menlo, Monaco, monospace;
1168
+ }
1169
+
1170
+ .slash-item .slash-desc {
1171
+ color: var(--text-muted);
1172
+ font-size: 13px;
1173
+ }
1174
+
1175
+ /* --- Animations --- */
1176
+ @keyframes pulse {
1177
+ 0%, 100% { opacity: 1; }
1178
+ 50% { opacity: 0.3; }
1179
+ }
1180
+
1181
+ @keyframes spin {
1182
+ to { transform: rotate(360deg); }
1183
+ }
1184
+
1185
+ @keyframes sparkle {
1186
+ 0%, 100% { opacity: 1; transform: scale(1); }
1187
+ 50% { opacity: 0.5; transform: scale(0.85); }
1188
+ }
1189
+
1190
+ /* --- Mobile responsive --- */
1191
+ @media (max-width: 768px) {
1192
+ #sidebar {
1193
+ position: fixed;
1194
+ left: 0;
1195
+ top: 0;
1196
+ bottom: 0;
1197
+ z-index: 100;
1198
+ transform: translateX(-100%);
1199
+ transition: transform 0.25s ease;
1200
+ }
1201
+
1202
+ #sidebar.open {
1203
+ transform: translateX(0);
1204
+ }
1205
+
1206
+ #hamburger-btn {
1207
+ display: flex;
1208
+ align-items: center;
1209
+ justify-content: center;
1210
+ }
1211
+ }