@co0ontty/wand 0.2.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,4018 @@
1
+ :root {
2
+ --bg-primary: #f6f1e8;
3
+ --bg-secondary: rgba(255, 251, 245, 0.88);
4
+ --bg-tertiary: #f0e5d7;
5
+ --bg-elevated: #fffaf2;
6
+ --bg-terminal: #1f1b17;
7
+ --border-subtle: rgba(150, 118, 85, 0.14);
8
+ --border-default: rgba(125, 91, 57, 0.3);
9
+ --text-primary: #2a1f16;
10
+ --text-secondary: #5a4535;
11
+ --text-muted: #8c735f;
12
+ --accent: #c5653d;
13
+ --accent-hover: #af5330;
14
+ --accent-soft: #e8c5ae;
15
+ --accent-muted: rgba(197, 101, 61, 0.12);
16
+ --success: #4f7a58;
17
+ --success-muted: rgba(79, 122, 88, 0.14);
18
+ --warning: #a96a2f;
19
+ --warning-muted: rgba(169, 106, 47, 0.14);
20
+ --danger: #b24f45;
21
+ --danger-muted: rgba(178, 79, 69, 0.14);
22
+ --shadow-soft: 0 20px 50px rgba(89, 58, 32, 0.12);
23
+ --shadow-elevated: 0 8px 24px rgba(89, 58, 32, 0.08);
24
+ --radius-sm: 10px;
25
+ --radius-md: 16px;
26
+ --radius-lg: 24px;
27
+ --font-sans: "Inter", "Helvetica Neue", "PingFang SC", "Noto Sans SC", sans-serif;
28
+ --font-mono: "Geist Mono", "SF Mono", "Fira Code", monospace;
29
+ --transition-fast: 0.15s ease;
30
+ --transition-normal: 0.25s ease;
31
+ }
32
+
33
+ * { box-sizing: border-box; margin: 0; padding: 0; }
34
+
35
+ html {
36
+ font-size: 14px;
37
+ -webkit-font-smoothing: antialiased;
38
+ min-height: 100%;
39
+ height: 100%;
40
+ }
41
+
42
+ body {
43
+ font-family: var(--font-sans);
44
+ background:
45
+ radial-gradient(circle at top left, rgba(208, 138, 92, 0.22), transparent 28%),
46
+ radial-gradient(circle at bottom right, rgba(148, 107, 74, 0.12), transparent 32%),
47
+ linear-gradient(180deg, #fbf7f1 0%, #f6f1e8 100%);
48
+ color: var(--text-primary);
49
+ min-height: 100vh;
50
+ min-height: 100dvh;
51
+ line-height: 1.5;
52
+ overflow: hidden;
53
+ }
54
+
55
+ .app-container {
56
+ display: flex;
57
+ flex-direction: column;
58
+ min-height: 100vh;
59
+ min-height: 100dvh;
60
+ height: 100vh;
61
+ height: 100dvh;
62
+ overflow: hidden;
63
+ }
64
+
65
+ /* 顶栏优化:简洁三列布局 */
66
+ .topbar {
67
+ display: grid;
68
+ grid-template-columns: 1fr auto 1fr;
69
+ align-items: center;
70
+ gap: 12px;
71
+ min-height: 52px;
72
+ padding: 0 20px;
73
+ background: rgba(255, 251, 245, 0.92);
74
+ border-bottom: 1px solid var(--border-subtle);
75
+ backdrop-filter: blur(20px);
76
+ flex-shrink: 0;
77
+ position: sticky;
78
+ z-index: 30;
79
+ }
80
+
81
+ .topbar-left { display: flex; align-items: center; gap: 10px; min-width: 0; }
82
+ .topbar-actions { display: flex; align-items: center; gap: 6px; }
83
+
84
+ /* Hamburger toggle — uses topbar-btn.square for consistent 36×36px */
85
+ .sidebar-toggle-btn {
86
+ position: relative;
87
+ width: 34px;
88
+ height: 34px;
89
+ padding: 0 !important;
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: center;
93
+ background: rgba(150, 118, 85, 0.06) !important;
94
+ border: 1px solid var(--border-subtle) !important;
95
+ border-radius: 10px !important;
96
+ }
97
+ .sidebar-toggle-btn:hover {
98
+ background: rgba(150, 118, 85, 0.12) !important;
99
+ border-color: var(--accent-soft) !important;
100
+ }
101
+ .sidebar-toggle-btn.active {
102
+ background: rgba(197, 101, 61, 0.1) !important;
103
+ border-color: var(--accent-soft) !important;
104
+ }
105
+ .hamburger-icon {
106
+ width: 16px;
107
+ height: 12px;
108
+ position: relative;
109
+ display: flex;
110
+ flex-direction: column;
111
+ justify-content: space-between;
112
+ }
113
+ .hamburger-icon span {
114
+ display: block;
115
+ width: 100%;
116
+ height: 1.5px;
117
+ background: var(--text-secondary);
118
+ border-radius: 1.5px;
119
+ transition: transform 0.25s ease, opacity 0.2s ease, background 0.15s ease;
120
+ transform-origin: center;
121
+ }
122
+ .sidebar-toggle-btn:hover .hamburger-icon span { background: var(--text-primary); }
123
+ .sidebar-toggle-btn.active .hamburger-icon span:nth-child(1) {
124
+ transform: translateY(5.25px) rotate(45deg);
125
+ }
126
+ .sidebar-toggle-btn.active .hamburger-icon span:nth-child(2) {
127
+ opacity: 0;
128
+ transform: scaleX(0);
129
+ }
130
+ .sidebar-toggle-btn.active .hamburger-icon span:nth-child(3) {
131
+ transform: translateY(-5.25px) rotate(-45deg);
132
+ }
133
+
134
+ /* Center area — brand logo */
135
+ .logo-wrap {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: center;
139
+ gap: 10px;
140
+ min-width: 0;
141
+ }
142
+ .logo {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 10px;
146
+ font-weight: 700;
147
+ font-size: 1rem;
148
+ color: var(--text-primary);
149
+ letter-spacing: -0.02em;
150
+ }
151
+ .logo-icon {
152
+ width: 30px;
153
+ height: 30px;
154
+ background: linear-gradient(145deg, #d4785a 0%, #b8573a 50%, #a04a2e 100%);
155
+ border-radius: 9px;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ font-size: 12px;
160
+ color: white;
161
+ font-weight: 800;
162
+ box-shadow:
163
+ 0 2px 8px rgba(184, 92, 55, 0.3),
164
+ 0 1px 0 rgba(255, 255, 255, 0.2) inset;
165
+ letter-spacing: -0.02em;
166
+ flex-shrink: 0;
167
+ }
168
+ .logo-text {
169
+ font-weight: 700;
170
+ color: var(--text-primary);
171
+ letter-spacing: -0.03em;
172
+ }
173
+ .logo-divider {
174
+ width: 1px;
175
+ height: 18px;
176
+ background: var(--border-subtle);
177
+ margin: 0 2px;
178
+ }
179
+ .logo-tagline {
180
+ font-size: 0.75rem;
181
+ font-weight: 400;
182
+ color: var(--text-muted);
183
+ letter-spacing: 0;
184
+ display: none;
185
+ }
186
+
187
+ .brand-meta { display: none; }
188
+ .status-badge { display: none; }
189
+
190
+ .status-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--text-muted); }
191
+ .status-dot.active { background: var(--success); box-shadow: 0 0 8px var(--success); }
192
+
193
+ /* Topbar center — session info */
194
+ .topbar-center {
195
+ min-width: 0;
196
+ display: flex;
197
+ justify-content: center;
198
+ overflow: hidden;
199
+ }
200
+
201
+ .session-summary {
202
+ min-width: 0;
203
+ display: flex;
204
+ align-items: center;
205
+ gap: 6px;
206
+ text-align: center;
207
+ background: rgba(150, 118, 85, 0.06);
208
+ padding: 5px 12px;
209
+ border-radius: 20px;
210
+ max-width: 360px;
211
+ border: 1px solid var(--border-subtle);
212
+ }
213
+
214
+ .session-summary-label { display: none; }
215
+
216
+ .session-summary-value {
217
+ max-width: 300px;
218
+ font-family: var(--font-mono);
219
+ font-size: 0.7rem;
220
+ color: var(--text-secondary);
221
+ white-space: nowrap;
222
+ overflow: hidden;
223
+ text-overflow: ellipsis;
224
+ font-weight: 500;
225
+ letter-spacing: 0.01em;
226
+ }
227
+
228
+ .topbar-right {
229
+ display: flex;
230
+ align-items: center;
231
+ justify-content: flex-end;
232
+ gap: 8px;
233
+ }
234
+ .config-path { display: none; }
235
+ .protocol-note { display: none; }
236
+
237
+ /* Topbar action buttons — new design */
238
+ .topbar-new-btn {
239
+ display: inline-flex;
240
+ align-items: center;
241
+ gap: 6px;
242
+ font-family: var(--font-sans);
243
+ font-size: 0.78rem;
244
+ font-weight: 600;
245
+ color: white;
246
+ background: linear-gradient(145deg, #d4785a 0%, #b8573a 50%, #a04a2e 100%);
247
+ border: none;
248
+ border-radius: 20px;
249
+ padding: 0 16px;
250
+ height: 34px;
251
+ cursor: pointer;
252
+ transition: all var(--transition-fast);
253
+ box-shadow: 0 2px 8px rgba(184, 92, 55, 0.25);
254
+ white-space: nowrap;
255
+ letter-spacing: 0.01em;
256
+ }
257
+ .topbar-new-btn:hover {
258
+ background: linear-gradient(145deg, #c96d47 0%, #a94c30 50%, #904025 100%);
259
+ box-shadow: 0 4px 12px rgba(184, 92, 55, 0.35);
260
+ transform: translateY(-1px);
261
+ }
262
+ .topbar-new-btn:active {
263
+ transform: translateY(0);
264
+ box-shadow: 0 1px 4px rgba(184, 92, 55, 0.2);
265
+ }
266
+ .topbar-new-btn svg {
267
+ width: 14px;
268
+ height: 14px;
269
+ flex-shrink: 0;
270
+ }
271
+
272
+ .topbar-logout-btn {
273
+ display: inline-flex;
274
+ align-items: center;
275
+ gap: 5px;
276
+ font-family: var(--font-sans);
277
+ font-size: 0.75rem;
278
+ font-weight: 500;
279
+ color: var(--text-secondary);
280
+ background: transparent;
281
+ border: 1px solid var(--border-subtle);
282
+ border-radius: 20px;
283
+ padding: 0 14px;
284
+ height: 34px;
285
+ cursor: pointer;
286
+ transition: all var(--transition-fast);
287
+ white-space: nowrap;
288
+ }
289
+ .topbar-logout-btn:hover {
290
+ color: var(--danger);
291
+ background: var(--danger-muted);
292
+ border-color: rgba(178, 79, 69, 0.25);
293
+ }
294
+ .topbar-logout-btn svg {
295
+ width: 13px;
296
+ height: 13px;
297
+ flex-shrink: 0;
298
+ opacity: 0.7;
299
+ }
300
+ .topbar-logout-btn:hover svg { opacity: 1; }
301
+
302
+ .main-layout {
303
+ display: flex;
304
+ flex: 1;
305
+ min-height: 0;
306
+ overflow: hidden;
307
+ padding-left: 300px;
308
+ transition: padding-left var(--transition-normal);
309
+ }
310
+ .main-layout:not(.sidebar-open) {
311
+ padding-left: 0;
312
+ }
313
+
314
+ .drawer-backdrop {
315
+ position: fixed;
316
+ top: 52px;
317
+ left: 0;
318
+ right: 0;
319
+ bottom: 0;
320
+ z-index: 24;
321
+ background: rgba(42, 28, 18, 0.18);
322
+ opacity: 0;
323
+ pointer-events: none;
324
+ transition: opacity var(--transition-normal);
325
+ }
326
+
327
+ .drawer-backdrop.open {
328
+ opacity: 1;
329
+ pointer-events: auto;
330
+ }
331
+
332
+ .sidebar {
333
+ position: fixed;
334
+ top: 52px;
335
+ left: 0;
336
+ bottom: 0;
337
+ z-index: 25;
338
+ width: min(300px, calc(100vw - 20px));
339
+ background: rgba(255, 251, 245, 0.97);
340
+ border-right: 1px solid var(--border-subtle);
341
+ display: flex;
342
+ flex-direction: column;
343
+ min-height: 0;
344
+ backdrop-filter: blur(18px);
345
+ box-shadow: 4px 0 24px rgba(89, 58, 32, 0.08);
346
+ transform: translateX(-100%);
347
+ transition: transform var(--transition-normal);
348
+ }
349
+
350
+ .sidebar.open {
351
+ transform: translateX(0);
352
+ box-shadow: 4px 0 32px rgba(89, 58, 32, 0.14);
353
+ }
354
+
355
+ /* 侧边栏头部优化 */
356
+ .sidebar-header {
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: space-between;
360
+ padding: 12px 14px;
361
+ border-bottom: 1px solid var(--border-subtle);
362
+ background: rgba(255, 251, 245, 0.7);
363
+ flex-shrink: 0;
364
+ min-height: 52px;
365
+ }
366
+
367
+ .sidebar-header-main {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 8px;
371
+ min-width: 0;
372
+ }
373
+
374
+ .sidebar-title {
375
+ font-size: 0.8125rem;
376
+ font-weight: 600;
377
+ color: var(--text-secondary);
378
+ }
379
+
380
+ .session-count {
381
+ font-size: 0.6875rem;
382
+ color: var(--text-muted);
383
+ background: rgba(240, 229, 215, 0.9);
384
+ padding: 3px 8px;
385
+ border-radius: 10px;
386
+ font-weight: 600;
387
+ }
388
+
389
+ .sidebar-close { flex-shrink: 0; }
390
+
391
+ .file-explorer { flex: 1; overflow-y: auto; padding: 8px 0; min-height: 0; }
392
+ .file-explorer.empty {
393
+ display: flex;
394
+ align-items: center;
395
+ justify-content: center;
396
+ padding: 24px;
397
+ color: var(--text-muted);
398
+ font-size: 0.8125rem;
399
+ text-align: center;
400
+ }
401
+
402
+ .file-tree { font-size: 0.8125rem; }
403
+
404
+ .tree-item {
405
+ display: flex;
406
+ align-items: center;
407
+ gap: 4px;
408
+ padding: 4px 12px;
409
+ cursor: pointer;
410
+ border-radius: 6px;
411
+ transition: background var(--transition-fast);
412
+ user-select: none;
413
+ white-space: nowrap;
414
+ overflow: hidden;
415
+ text-overflow: ellipsis;
416
+ }
417
+
418
+ .tree-item:hover { background: var(--bg-tertiary); }
419
+ .tree-item.active { background: var(--accent-muted); color: var(--accent); }
420
+
421
+ .tree-toggle {
422
+ flex-shrink: 0;
423
+ width: 16px;
424
+ height: 16px;
425
+ display: flex;
426
+ align-items: center;
427
+ justify-content: center;
428
+ font-size: 0.625rem;
429
+ color: var(--text-muted);
430
+ transition: transform var(--transition-fast);
431
+ }
432
+
433
+ .tree-toggle.open { transform: rotate(90deg); }
434
+ .tree-toggle.empty { visibility: hidden; }
435
+
436
+ .tree-icon {
437
+ flex-shrink: 0;
438
+ font-size: 1rem;
439
+ margin-right: 6px;
440
+ display: flex;
441
+ align-items: center;
442
+ }
443
+
444
+ .tree-name {
445
+ overflow: hidden;
446
+ text-overflow: ellipsis;
447
+ flex: 1;
448
+ min-width: 0;
449
+ }
450
+
451
+ .tree-children { display: none; }
452
+ .tree-children.open { display: block; }
453
+
454
+ .file-explorer-header {
455
+ padding: 10px 14px 8px;
456
+ display: flex;
457
+ align-items: center;
458
+ gap: 8px;
459
+ flex-shrink: 0;
460
+ }
461
+
462
+ .file-explorer-path {
463
+ font-size: 0.75rem;
464
+ color: var(--text-muted);
465
+ font-family: var(--font-mono);
466
+ overflow: hidden;
467
+ text-overflow: ellipsis;
468
+ white-space: nowrap;
469
+ flex: 1;
470
+ min-width: 0;
471
+ font-weight: 500;
472
+ }
473
+
474
+ .file-explorer-actions { display: flex; gap: 4px; margin-left: auto; flex-shrink: 0; }
475
+
476
+ .file-explorer-refresh {
477
+ background: none;
478
+ border: none;
479
+ cursor: pointer;
480
+ font-size: 1rem;
481
+ padding: 4px;
482
+ border-radius: 4px;
483
+ color: var(--text-muted);
484
+ display: flex;
485
+ align-items: center;
486
+ justify-content: center;
487
+ transition: all var(--transition-fast);
488
+ }
489
+
490
+ .file-explorer-refresh:hover { background: var(--bg-tertiary); color: var(--text-secondary); transform: rotate(90deg); }
491
+
492
+ /* File side panel */
493
+ .file-side-panel {
494
+ position: fixed;
495
+ right: -320px;
496
+ top: 0;
497
+ bottom: 0;
498
+ width: 320px;
499
+ background: var(--bg-primary);
500
+ border-left: 1px solid var(--border);
501
+ z-index: 35;
502
+ transition: right 0.25s cubic-bezier(0.4, 0, 0.2, 1);
503
+ display: flex;
504
+ flex-direction: column;
505
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.1);
506
+ }
507
+
508
+ .file-side-panel.open {
509
+ right: 0;
510
+ }
511
+
512
+ .file-side-panel-header {
513
+ display: flex;
514
+ align-items: center;
515
+ justify-content: space-between;
516
+ padding: 12px 16px;
517
+ border-bottom: 1px solid var(--border);
518
+ flex-shrink: 0;
519
+ }
520
+
521
+ .file-side-panel-title {
522
+ font-size: 0.875rem;
523
+ font-weight: 600;
524
+ color: var(--text-primary);
525
+ }
526
+
527
+ .file-side-panel-body {
528
+ flex: 1;
529
+ min-height: 0;
530
+ display: flex;
531
+ flex-direction: column;
532
+ overflow: hidden;
533
+ }
534
+
535
+ .file-panel-toggle {
536
+ display: flex;
537
+ align-items: center;
538
+ gap: 4px;
539
+ }
540
+
541
+ .main-content.file-panel-open {
542
+ margin-right: 320px;
543
+ transition: margin-right 0.25s cubic-bezier(0.4, 0, 0.2, 1);
544
+ }
545
+
546
+ /* Git status badges */
547
+ .git-status-badge {
548
+ flex-shrink: 0;
549
+ font-size: 0.6875rem;
550
+ font-weight: 600;
551
+ padding: 1px 5px;
552
+ border-radius: 3px;
553
+ min-width: 18px;
554
+ text-align: center;
555
+ font-family: var(--font-mono);
556
+ }
557
+
558
+ .git-added {
559
+ background: rgba(34, 139, 34, 0.15);
560
+ color: #228b22;
561
+ }
562
+
563
+ .git-modified {
564
+ background: rgba(255, 165, 0, 0.15);
565
+ color: #ffa500;
566
+ }
567
+
568
+ .git-deleted {
569
+ background: rgba(220, 20, 60, 0.15);
570
+ color: #dc143c;
571
+ }
572
+
573
+ .git-renamed {
574
+ background: rgba(70, 130, 180, 0.15);
575
+ color: #4682b4;
576
+ }
577
+
578
+ .git-unstaged {
579
+ background: rgba(255, 140, 0, 0.15);
580
+ color: #ff8c00;
581
+ }
582
+
583
+ .git-unstaged-deleted {
584
+ background: rgba(220, 20, 60, 0.15);
585
+ color: #dc143c;
586
+ }
587
+
588
+ .git-untracked {
589
+ background: rgba(128, 128, 128, 0.15);
590
+ color: #808080;
591
+ }
592
+
593
+ .file-search-box {
594
+ padding: 8px 12px;
595
+ display: flex;
596
+ align-items: center;
597
+ gap: 8px;
598
+ border-bottom: 1px solid var(--border-subtle);
599
+ flex-shrink: 0;
600
+ }
601
+
602
+ .file-search-input {
603
+ flex: 1;
604
+ padding: 6px 10px;
605
+ border: 1px solid var(--border);
606
+ border-radius: 6px;
607
+ font-size: 0.8125rem;
608
+ font-family: var(--font-sans);
609
+ background: var(--bg-secondary);
610
+ color: var(--text-primary);
611
+ outline: none;
612
+ transition: border-color 0.15s ease;
613
+ }
614
+
615
+ .file-search-input:focus {
616
+ border-color: var(--accent);
617
+ background: var(--bg-primary);
618
+ }
619
+
620
+ .file-search-input::placeholder {
621
+ color: var(--text-muted);
622
+ }
623
+
624
+ .file-search-clear {
625
+ background: none;
626
+ border: none;
627
+ cursor: pointer;
628
+ font-size: 1rem;
629
+ padding: 4px;
630
+ border-radius: 4px;
631
+ color: var(--text-muted);
632
+ display: none;
633
+ align-items: center;
634
+ justify-content: center;
635
+ }
636
+
637
+ .file-search-clear.visible {
638
+ display: flex;
639
+ }
640
+
641
+ .file-search-clear:hover {
642
+ background: var(--bg-tertiary);
643
+ color: var(--text-secondary);
644
+ }
645
+
646
+ .sidebar-body {
647
+ display: flex;
648
+ flex-direction: column;
649
+ flex: 1;
650
+ min-height: 0;
651
+ overflow-y: auto;
652
+ position: relative;
653
+ }
654
+
655
+ .sidebar-intro {
656
+ padding: 12px 14px 0;
657
+ font-size: 0.75rem;
658
+ color: var(--text-secondary);
659
+ flex-shrink: 0;
660
+ }
661
+
662
+ .sessions-list { flex: 1; min-height: 0; overflow-y: auto; padding: 10px; }
663
+ .session-group { margin-bottom: 18px; }
664
+ .session-group:last-child { margin-bottom: 0; }
665
+ .session-group-title {
666
+ padding: 4px 6px 10px;
667
+ font-size: 0.6875rem;
668
+ font-weight: 600;
669
+ letter-spacing: 0.04em;
670
+ text-transform: uppercase;
671
+ color: var(--text-muted);
672
+ }
673
+
674
+ .session-item {
675
+ width: 100%;
676
+ text-align: left;
677
+ background: rgba(255, 250, 244, 0.8);
678
+ border: 1px solid rgba(150, 118, 85, 0.12);
679
+ border-radius: var(--radius-lg);
680
+ color: var(--text-primary);
681
+ padding: 12px 14px;
682
+ cursor: pointer;
683
+ transition: all var(--transition-fast);
684
+ font-family: var(--font-sans);
685
+ margin-bottom: 8px;
686
+ box-shadow: 0 4px 12px rgba(89, 58, 32, 0.04);
687
+ }
688
+
689
+ .session-item-row {
690
+ display: flex;
691
+ align-items: center;
692
+ justify-content: space-between;
693
+ gap: 10px;
694
+ }
695
+
696
+ .session-main {
697
+ min-width: 0;
698
+ flex: 1;
699
+ display: flex;
700
+ flex-direction: column;
701
+ gap: 4px;
702
+ }
703
+
704
+ .session-actions {
705
+ display: inline-flex;
706
+ align-items: center;
707
+ gap: 6px;
708
+ flex-shrink: 0;
709
+ }
710
+
711
+ .session-action-btn {
712
+ width: 30px;
713
+ height: 30px;
714
+ min-height: 30px;
715
+ min-width: 30px;
716
+ padding: 0;
717
+ border-radius: 50%;
718
+ display: flex;
719
+ align-items: center;
720
+ justify-content: center;
721
+ font-size: 0.875rem;
722
+ background: rgba(255, 255, 255, 0.7);
723
+ border: 1px solid var(--border-subtle);
724
+ transition: all var(--transition-fast);
725
+ }
726
+ .session-action-btn:hover {
727
+ background: var(--accent-muted);
728
+ border-color: var(--accent);
729
+ transform: scale(1.05);
730
+ }
731
+
732
+ .session-item:hover { background: rgba(255, 248, 240, 0.96); border-color: var(--accent-soft); transform: translateY(-2px); box-shadow: 0 8px 20px rgba(89, 58, 32, 0.08); }
733
+ .session-item.active { background: linear-gradient(180deg, rgba(241, 214, 194, 0.7), rgba(255, 247, 239, 0.96)); border-color: rgba(197, 101, 61, 0.42); }
734
+
735
+ .session-command {
736
+ font-weight: 600;
737
+ font-size: 0.8125rem;
738
+ white-space: nowrap;
739
+ overflow: hidden;
740
+ text-overflow: ellipsis;
741
+ font-family: var(--font-mono);
742
+ color: var(--text-primary);
743
+ }
744
+
745
+ .session-meta {
746
+ display: flex;
747
+ align-items: center;
748
+ gap: 6px;
749
+ font-size: 0.6875rem;
750
+ color: var(--text-muted);
751
+ flex-wrap: wrap;
752
+ }
753
+
754
+ .session-status {
755
+ display: inline-flex;
756
+ align-items: center;
757
+ gap: 3px;
758
+ padding: 2px 7px;
759
+ border-radius: 6px;
760
+ font-weight: 600;
761
+ font-size: 0.6875rem;
762
+ }
763
+
764
+ .session-status-dot {
765
+ width: 5px;
766
+ height: 5px;
767
+ border-radius: 50%;
768
+ background: currentColor;
769
+ }
770
+ .session-status.running .session-status-dot { background: var(--success); box-shadow: 0 0 6px var(--success); }
771
+ .session-status.exited .session-status-dot { background: var(--text-muted); }
772
+ .session-status.failed .session-status-dot { background: var(--danger); }
773
+ .session-status.stopped .session-status-dot { background: var(--warning); }
774
+
775
+ .session-status.running { background: var(--success-muted); color: var(--success); }
776
+ .session-status.exited { background: rgba(150, 118, 85, 0.12); color: var(--text-muted); }
777
+ .session-status.failed { background: var(--danger-muted); color: var(--danger); }
778
+ .session-status.stopped { background: var(--warning-muted); color: var(--warning); }
779
+ .session-status.archived { background: rgba(95, 74, 57, 0.1); color: var(--text-secondary); }
780
+
781
+ .session-id {
782
+ font-family: var(--font-mono);
783
+ font-size: 0.625rem;
784
+ color: var(--text-muted);
785
+ background: rgba(150, 118, 85, 0.12);
786
+ padding: 2px 6px;
787
+ border-radius: 4px;
788
+ font-weight: 500;
789
+ }
790
+
791
+ .sidebar-footer {
792
+ padding: 14px;
793
+ border-top: 1px solid var(--border-subtle);
794
+ display: flex;
795
+ flex-direction: column;
796
+ gap: 10px;
797
+ background: rgba(255, 251, 245, 0.7);
798
+ }
799
+
800
+ .sidebar-meta {
801
+ display: flex;
802
+ flex-direction: row;
803
+ align-items: center;
804
+ gap: 8px;
805
+ flex-wrap: wrap;
806
+ }
807
+
808
+ /* Unified topbar button base — all topbar/icon buttons share the same 36px height */
809
+ .topbar-btn {
810
+ display: inline-flex;
811
+ align-items: center;
812
+ justify-content: center;
813
+ gap: 6px;
814
+ font-family: var(--font-sans);
815
+ font-size: 0.8125rem;
816
+ font-weight: 500;
817
+ padding: 8px 14px;
818
+ border-radius: var(--radius-md);
819
+ border: 1px solid transparent;
820
+ cursor: pointer;
821
+ transition: all var(--transition-fast);
822
+ height: 36px;
823
+ min-height: 36px;
824
+ white-space: nowrap;
825
+ box-sizing: border-box;
826
+ line-height: 1;
827
+ }
828
+
829
+ /* Square icon variant — exactly 36×36px */
830
+ .topbar-btn.square {
831
+ width: 36px;
832
+ padding: 0;
833
+ font-size: 1rem;
834
+ }
835
+
836
+ .btn {
837
+ display: inline-flex;
838
+ align-items: center;
839
+ justify-content: center;
840
+ gap: 6px;
841
+ font-family: var(--font-sans);
842
+ font-size: 0.8125rem;
843
+ font-weight: 500;
844
+ padding: 8px 14px;
845
+ border-radius: var(--radius-md);
846
+ border: 1px solid transparent;
847
+ cursor: pointer;
848
+ transition: all var(--transition-fast);
849
+ min-height: 38px;
850
+ white-space: nowrap;
851
+ }
852
+
853
+ .btn-primary { background: linear-gradient(180deg, #cf754d 0%, #b85c37 100%); color: white; box-shadow: 0 4px 12px rgba(184, 92, 55, 0.22); }
854
+ .btn-primary:hover { background: linear-gradient(180deg, #c96b44 0%, #a94d2b 100%); transform: translateY(-1px); box-shadow: 0 6px 16px rgba(184, 92, 55, 0.28); }
855
+ .btn-primary:active { transform: translateY(0); box-shadow: 0 2px 8px rgba(184, 92, 55, 0.2); }
856
+ .btn-secondary { background: rgba(255, 250, 244, 0.95); color: var(--text-secondary); border-color: var(--border-subtle); }
857
+ .btn-secondary:hover { background: var(--bg-elevated); color: var(--text-primary); border-color: var(--accent-soft); }
858
+ .btn-secondary:active { transform: translateY(0); }
859
+ .btn-ghost { background: transparent; color: var(--text-secondary); }
860
+ .btn-ghost:hover { background: rgba(240, 229, 215, 0.72); color: var(--text-primary); }
861
+ .btn-ghost:active { background: rgba(240, 229, 215, 0.9); }
862
+ .btn-danger { background: var(--danger-muted); color: var(--danger); }
863
+ .btn-danger:hover { background: var(--danger); color: white; }
864
+ .btn-danger:active { transform: translateY(0); }
865
+ .btn-block { width: 100%; }
866
+
867
+ /* .btn-sm uses topbar-btn height (36px) for consistency across topbar */
868
+ .btn-sm {
869
+ font-size: 0.75rem;
870
+ padding: 0 12px;
871
+ height: 36px;
872
+ min-height: 36px;
873
+ }
874
+
875
+ /* .btn-icon uses topbar-btn square for consistent 36×36px */
876
+ .btn-icon { padding: 0; width: 36px; height: 36px; min-height: 36px; font-size: 1rem; border-radius: 10px; }
877
+
878
+ .main-content {
879
+ flex: 1;
880
+ display: flex;
881
+ flex-direction: column;
882
+ min-height: 0;
883
+ overflow: hidden;
884
+ background: transparent;
885
+ position: relative;
886
+ }
887
+
888
+ .terminal-header {
889
+ display: flex;
890
+ align-items: center;
891
+ justify-content: space-between;
892
+ padding: 10px 18px;
893
+ background: rgba(255, 251, 245, 0.72);
894
+ border-bottom: 1px solid var(--border-subtle);
895
+ backdrop-filter: blur(12px);
896
+ flex-shrink: 0;
897
+ min-height: 50px;
898
+ }
899
+
900
+ .terminal-title { display: flex; align-items: center; gap: 10px; font-size: 0.8125rem; min-width: 0; }
901
+ .terminal-title-text { font-family: var(--font-mono); color: var(--accent); font-weight: 600; font-size: 0.875rem; }
902
+ .terminal-info { font-size: 0.7rem; color: var(--text-muted); font-weight: 500; }
903
+ .terminal-header-actions { display: flex; align-items: center; gap: 10px; }
904
+
905
+ .terminal-container {
906
+ flex: 1;
907
+ display: none;
908
+ background:
909
+ radial-gradient(circle at top right, rgba(91, 58, 34, 0.16), transparent 28%),
910
+ linear-gradient(180deg, #221d18 0%, #1b1714 100%);
911
+ padding: 14px;
912
+ overflow: hidden;
913
+ min-height: 0;
914
+ margin: 0 14px 14px;
915
+ border-radius: var(--radius-lg);
916
+ border: 1px solid rgba(122, 91, 64, 0.35);
917
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), var(--shadow-soft);
918
+ position: sticky;
919
+ }
920
+
921
+ .terminal-container.active { display: flex; }
922
+ .terminal-container .xterm { position: absolute; top: 0; left: 0; right: 0; bottom: 0; padding: 4px; }
923
+ .terminal-container .xterm-viewport { background: transparent !important; }
924
+
925
+ /* Chat View — matches topbar-btn height (36px) */
926
+ .view-toggle {
927
+ display: flex;
928
+ align-items: center;
929
+ gap: 3px;
930
+ background: rgba(240, 229, 215, 0.6);
931
+ border: 1px solid var(--border-subtle);
932
+ border-radius: var(--radius-md);
933
+ padding: 3px;
934
+ flex-shrink: 0;
935
+ height: 36px;
936
+ box-sizing: border-box;
937
+ }
938
+
939
+ .view-toggle-btn {
940
+ display: flex;
941
+ align-items: center;
942
+ justify-content: center;
943
+ gap: 6px;
944
+ padding: 0 14px;
945
+ border-radius: var(--radius-sm);
946
+ border: none;
947
+ background: transparent;
948
+ color: var(--text-muted);
949
+ font-size: 0.8125rem;
950
+ font-weight: 500;
951
+ cursor: pointer;
952
+ transition: all var(--transition-fast);
953
+ font-family: var(--font-sans);
954
+ height: 30px;
955
+ min-height: 30px;
956
+ white-space: nowrap;
957
+ }
958
+
959
+ .view-toggle-btn:hover { color: var(--text-secondary); background: rgba(255, 255, 255, 0.6); }
960
+ .view-toggle-btn.active { background: white; color: var(--text-primary); box-shadow: 0 1px 4px rgba(89, 58, 32, 0.12); font-weight: 600; }
961
+
962
+ .chat-container {
963
+ flex: 1;
964
+ display: none;
965
+ flex-direction: column;
966
+ min-height: 0;
967
+ overflow: hidden;
968
+ padding: 0 18px 14px;
969
+ }
970
+
971
+ .chat-container.active { display: flex; }
972
+
973
+ .chat-messages {
974
+ flex: 1;
975
+ overflow-y: auto;
976
+ display: flex;
977
+ flex-direction: column-reverse;
978
+ gap: 12px;
979
+ padding: 16px 0 8px;
980
+ min-height: 0;
981
+ }
982
+
983
+ @keyframes messageSlide {
984
+ from { opacity: 0; transform: translateY(8px); }
985
+ to { opacity: 1; transform: translateY(0); }
986
+ }
987
+
988
+ .chat-message {
989
+ display: flex;
990
+ flex-direction: column;
991
+ max-width: 80%;
992
+ margin: 3px 0;
993
+ transition: opacity 0.15s ease;
994
+ }
995
+
996
+ .chat-message.user {
997
+ align-self: flex-end;
998
+ }
999
+
1000
+ .chat-message.assistant {
1001
+ align-self: flex-start;
1002
+ }
1003
+
1004
+ .chat-message.animate-in {
1005
+ animation: messageSlide 0.3s ease;
1006
+ will-change: opacity, transform;
1007
+ }
1008
+
1009
+ .chat-message-avatar {
1010
+ width: 28px;
1011
+ height: 28px;
1012
+ border-radius: 50%;
1013
+ display: flex;
1014
+ align-items: center;
1015
+ justify-content: center;
1016
+ font-size: 13px;
1017
+ font-weight: 600;
1018
+ margin-bottom: 4px;
1019
+ flex-shrink: 0;
1020
+ }
1021
+
1022
+ .chat-message.user .chat-message-avatar {
1023
+ display: none;
1024
+ }
1025
+
1026
+ .chat-message.assistant .chat-message-avatar {
1027
+ background: linear-gradient(135deg, #c5653d 0%, #a95130 100%);
1028
+ color: white;
1029
+ }
1030
+
1031
+ .chat-message-bubble {
1032
+ padding: 10px 14px;
1033
+ border-radius: var(--radius-md);
1034
+ font-size: 0.875rem;
1035
+ line-height: 1.65;
1036
+ word-wrap: break-word;
1037
+ white-space: pre-wrap;
1038
+ box-shadow: 0 2px 8px rgba(89, 58, 32, 0.06);
1039
+ }
1040
+
1041
+ .chat-message.user .chat-message-bubble {
1042
+ background: linear-gradient(135deg, #c5653d 0%, #a95130 100%);
1043
+ color: white;
1044
+ border-radius: 14px 14px 4px 14px;
1045
+ font-family: var(--font-mono);
1046
+ font-size: 0.8125rem;
1047
+ max-width: 100%;
1048
+ overflow-wrap: break-word;
1049
+ word-break: break-word;
1050
+ box-shadow: 0 4px 12px rgba(197, 101, 61, 0.25);
1051
+ }
1052
+
1053
+ .chat-message.user {
1054
+ max-width: 90%;
1055
+ }
1056
+
1057
+ .chat-message.assistant .chat-message-bubble {
1058
+ background: rgba(255, 251, 245, 0.7);
1059
+ color: var(--text-primary);
1060
+ padding: 10px 14px;
1061
+ max-width: 100%;
1062
+ white-space: pre-wrap;
1063
+ word-wrap: break-word;
1064
+ box-shadow: 0 2px 10px rgba(89, 58, 32, 0.06);
1065
+ }
1066
+
1067
+ .message-usage {
1068
+ margin-top: 10px;
1069
+ padding-top: 8px;
1070
+ border-top: 1px solid var(--border-subtle);
1071
+ font-family: var(--font-mono);
1072
+ font-size: 0.6875rem;
1073
+ color: var(--text-muted);
1074
+ display: flex;
1075
+ gap: 10px;
1076
+ align-items: center;
1077
+ flex-wrap: wrap;
1078
+ }
1079
+
1080
+ /* Thinking Card (Deep Thought) */
1081
+ .chat-message.thinking {
1082
+ align-self: flex-start;
1083
+ max-width: 85%;
1084
+ margin: 4px 0;
1085
+ }
1086
+
1087
+ /* Legacy thinking-card (kept for fallback) */
1088
+ .thinking-card {
1089
+ display: flex;
1090
+ align-items: center;
1091
+ gap: 10px;
1092
+ padding: 10px 14px;
1093
+ background: linear-gradient(135deg, rgba(138, 108, 178, 0.08) 0%, rgba(138, 108, 178, 0.03) 100%);
1094
+ border: 1px solid rgba(138, 108, 178, 0.15);
1095
+ border-radius: var(--radius-md);
1096
+ }
1097
+
1098
+ .thinking-icon {
1099
+ font-size: 1.125rem;
1100
+ opacity: 0.85;
1101
+ }
1102
+
1103
+ .thinking-icon.spinning {
1104
+ display: inline-block;
1105
+ animation: iconPulse 2s ease-in-out infinite;
1106
+ }
1107
+
1108
+ @keyframes iconPulse {
1109
+ 0%, 100% { transform: scale(1); opacity: 0.7; }
1110
+ 50% { transform: scale(1.1); opacity: 1; }
1111
+ }
1112
+
1113
+ .thinking-content {
1114
+ font-size: 0.8125rem;
1115
+ color: rgba(138, 108, 178, 0.85);
1116
+ font-weight: 500;
1117
+ }
1118
+
1119
+ /* Prompt Suggestion Card (Pulsing) */
1120
+ .chat-message.prompt {
1121
+ align-self: center;
1122
+ max-width: 85%;
1123
+ margin: 4px 0;
1124
+ }
1125
+
1126
+ .prompt-card {
1127
+ display: flex;
1128
+ align-items: center;
1129
+ gap: 6px;
1130
+ padding: 4px 8px;
1131
+ border-radius: var(--radius-sm);
1132
+ cursor: default;
1133
+ font-size: 0.75rem;
1134
+ color: var(--text-muted);
1135
+ }
1136
+
1137
+ .prompt-icon {
1138
+ font-size: 0.875rem;
1139
+ }
1140
+
1141
+ .prompt-content {
1142
+ font-size: 0.75rem;
1143
+ color: var(--text-muted);
1144
+ font-style: italic;
1145
+ }
1146
+
1147
+ .prompt-text {
1148
+ font-family: var(--font-mono);
1149
+ color: rgba(197, 101, 61, 0.8);
1150
+ font-weight: 500;
1151
+ }
1152
+
1153
+ /* Typing indicator for empty assistant messages (streaming placeholder) */
1154
+ .typing-indicator {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ gap: 5px;
1158
+ padding: 6px 0;
1159
+ }
1160
+ .typing-indicator span {
1161
+ display: inline-block;
1162
+ width: 7px;
1163
+ height: 7px;
1164
+ border-radius: 50%;
1165
+ background: var(--accent-soft);
1166
+ animation: typingBounce 1.2s ease-in-out infinite;
1167
+ }
1168
+ .typing-indicator span:nth-child(2) { animation-delay: 0.15s; }
1169
+ .typing-indicator span:nth-child(3) { animation-delay: 0.3s; }
1170
+ @keyframes typingBounce {
1171
+ 0%, 60%, 100% { opacity: 0.35; transform: translateY(0); }
1172
+ 30% { opacity: 1; transform: translateY(-5px); }
1173
+ }
1174
+
1175
+ /* Inline Thinking (inside structured messages) */
1176
+ .inline-thinking {
1177
+ margin: 8px 0;
1178
+ animation: none;
1179
+ }
1180
+ .inline-thinking details summary {
1181
+ cursor: pointer;
1182
+ user-select: none;
1183
+ font-size: 0.8125rem;
1184
+ color: var(--text-muted);
1185
+ }
1186
+ .thinking-text {
1187
+ margin-top: 8px;
1188
+ font-size: 0.75rem;
1189
+ color: var(--text-muted);
1190
+ white-space: pre-wrap;
1191
+ max-height: 300px;
1192
+ overflow-y: auto;
1193
+ }
1194
+
1195
+ /* Tool Use Card */
1196
+ .tool-use-card {
1197
+ margin: 6px 0;
1198
+ border: 1px solid var(--border-subtle);
1199
+ border-radius: var(--radius-sm);
1200
+ overflow: hidden;
1201
+ width: 100%;
1202
+ box-sizing: border-box;
1203
+ background: var(--bg-secondary);
1204
+ transition: border-color var(--transition-fast);
1205
+ }
1206
+ .tool-use-card:hover {
1207
+ border-color: rgba(79, 122, 88, 0.3);
1208
+ }
1209
+ .tool-use-card.loading {
1210
+ border-color: rgba(79, 122, 88, 0.4);
1211
+ }
1212
+ .tool-use-card.success {
1213
+ border-color: rgba(79, 122, 88, 0.5);
1214
+ }
1215
+ .tool-use-card.error {
1216
+ border-color: rgba(178, 79, 69, 0.5);
1217
+ }
1218
+ .tool-use-header {
1219
+ display: flex;
1220
+ align-items: center;
1221
+ gap: 8px;
1222
+ padding: 10px 12px;
1223
+ background: rgba(79, 122, 88, 0.06);
1224
+ cursor: pointer;
1225
+ font-size: 0.8125rem;
1226
+ user-select: none;
1227
+ -webkit-user-select: none;
1228
+ -webkit-tap-highlight-color: transparent;
1229
+ touch-action: manipulation;
1230
+ transition: background var(--transition-fast);
1231
+ min-height: 44px;
1232
+ flex-wrap: nowrap;
1233
+ }
1234
+ .tool-use-header:hover {
1235
+ background: rgba(79, 122, 88, 0.1);
1236
+ }
1237
+ .tool-use-card.loading .tool-use-header {
1238
+ background: rgba(79, 122, 88, 0.08);
1239
+ }
1240
+ .tool-use-card.success .tool-use-header {
1241
+ background: rgba(79, 122, 88, 0.12);
1242
+ }
1243
+ .tool-use-card.error .tool-use-header {
1244
+ background: rgba(178, 79, 69, 0.1);
1245
+ }
1246
+ .tool-use-icon {
1247
+ font-size: 1.1rem;
1248
+ flex-shrink: 0;
1249
+ display: flex;
1250
+ align-items: center;
1251
+ justify-content: center;
1252
+ min-width: 20px;
1253
+ }
1254
+ .tool-use-spinner {
1255
+ display: inline-block;
1256
+ width: 16px;
1257
+ height: 16px;
1258
+ border: 2px solid rgba(79, 122, 88, 0.2);
1259
+ border-top-color: var(--success);
1260
+ border-radius: 50%;
1261
+ animation: tool-spin 0.8s linear infinite;
1262
+ }
1263
+ @keyframes tool-spin {
1264
+ to { transform: rotate(360deg); }
1265
+ }
1266
+ .tool-use-name {
1267
+ font-family: var(--font-sans);
1268
+ font-weight: 600;
1269
+ font-size: 0.8125rem;
1270
+ color: var(--text-primary);
1271
+ flex: 0 1 auto;
1272
+ min-width: 0;
1273
+ overflow: hidden;
1274
+ text-overflow: ellipsis;
1275
+ white-space: nowrap;
1276
+ }
1277
+ .tool-use-file {
1278
+ font-size: 0.75rem;
1279
+ font-family: var(--font-mono);
1280
+ color: var(--text-muted);
1281
+ max-width: 300px;
1282
+ overflow: hidden;
1283
+ text-overflow: ellipsis;
1284
+ white-space: nowrap;
1285
+ flex: 0 1 auto;
1286
+ min-width: 0;
1287
+ }
1288
+ .tool-use-summary {
1289
+ font-size: 0.75rem;
1290
+ color: var(--text-secondary);
1291
+ flex: 0 1 auto;
1292
+ min-width: 0;
1293
+ overflow: hidden;
1294
+ text-overflow: ellipsis;
1295
+ white-space: nowrap;
1296
+ margin-left: 4px;
1297
+ }
1298
+ .tool-use-status {
1299
+ font-size: 0.75rem;
1300
+ padding: 2px 8px;
1301
+ border-radius: 4px;
1302
+ flex-shrink: 0;
1303
+ margin-left: 4px;
1304
+ }
1305
+ .tool-use-card.success .tool-use-status {
1306
+ background: rgba(79, 122, 88, 0.15);
1307
+ color: var(--success);
1308
+ }
1309
+ .tool-use-card.error .tool-use-status {
1310
+ background: rgba(178, 79, 69, 0.15);
1311
+ color: var(--danger);
1312
+ }
1313
+ .tool-use-toggle {
1314
+ font-size: 0.75rem;
1315
+ color: var(--text-muted);
1316
+ transition: transform var(--transition-fast);
1317
+ flex-shrink: 0;
1318
+ display: flex;
1319
+ align-items: center;
1320
+ }
1321
+ .tool-use-card.collapsed .tool-use-toggle {
1322
+ transform: rotate(-90deg);
1323
+ }
1324
+ .tool-use-body {
1325
+ padding: 10px 12px;
1326
+ background: var(--bg-elevated);
1327
+ border-top: 1px solid var(--border-subtle);
1328
+ max-height: 600px;
1329
+ overflow: hidden;
1330
+ transition: max-height 0.25s ease, padding 0.25s ease, opacity 0.2s ease;
1331
+ opacity: 1;
1332
+ }
1333
+ .tool-use-card.collapsed .tool-use-body {
1334
+ max-height: 0;
1335
+ padding-top: 0;
1336
+ padding-bottom: 0;
1337
+ opacity: 0;
1338
+ }
1339
+ .tool-use-content {
1340
+ margin: 0;
1341
+ font-size: 0.75rem;
1342
+ font-family: var(--font-mono);
1343
+ color: var(--text-secondary);
1344
+ white-space: pre-wrap;
1345
+ overflow-wrap: break-word;
1346
+ max-height: 400px;
1347
+ overflow-y: auto;
1348
+ line-height: 1.5;
1349
+ }
1350
+ .tool-use-result {
1351
+ margin-top: 8px;
1352
+ padding-top: 8px;
1353
+ border-top: 1px dashed var(--border-subtle);
1354
+ }
1355
+ .tool-use-result-content {
1356
+ margin: 0;
1357
+ font-size: 0.75rem;
1358
+ font-family: var(--font-mono);
1359
+ color: var(--text-secondary);
1360
+ white-space: pre-wrap;
1361
+ overflow-wrap: break-word;
1362
+ max-height: 300px;
1363
+ overflow-y: auto;
1364
+ line-height: 1.5;
1365
+ }
1366
+ .tool-use-result-empty {
1367
+ font-size: 0.75rem;
1368
+ color: var(--text-muted);
1369
+ font-style: italic;
1370
+ }
1371
+ .tool-use-meta {
1372
+ font-size: 0.75rem;
1373
+ color: var(--text-muted);
1374
+ font-family: var(--font-mono);
1375
+ margin-bottom: 6px;
1376
+ padding-bottom: 6px;
1377
+ border-bottom: 1px dashed var(--border-subtle);
1378
+ }
1379
+ .tool-use-meta-label {
1380
+ color: var(--text-secondary);
1381
+ }
1382
+ /* AskUserQuestion - simplified */
1383
+ .tool-use-card.ask-user {
1384
+ border-color: rgba(197, 101, 61, 0.3);
1385
+ background: rgba(197, 101, 61, 0.04);
1386
+ }
1387
+ .tool-use-card.ask-user .tool-use-header {
1388
+ background: rgba(197, 101, 61, 0.08);
1389
+ }
1390
+ .ask-user-body {
1391
+ padding: 10px 12px;
1392
+ }
1393
+ .ask-user-title {
1394
+ font-size: 0.875rem;
1395
+ font-weight: 500;
1396
+ color: var(--text-primary);
1397
+ margin-bottom: 10px;
1398
+ }
1399
+ .ask-user-options {
1400
+ display: flex;
1401
+ flex-direction: column;
1402
+ gap: 6px;
1403
+ }
1404
+ .ask-user-option {
1405
+ display: flex;
1406
+ align-items: flex-start;
1407
+ gap: 8px;
1408
+ padding: 8px 12px;
1409
+ border: 1px solid var(--border-default);
1410
+ border-radius: var(--radius-sm);
1411
+ background: var(--bg-secondary);
1412
+ cursor: pointer;
1413
+ transition: all var(--transition-fast);
1414
+ text-align: left;
1415
+ }
1416
+ .ask-user-option:hover {
1417
+ border-color: var(--accent);
1418
+ background: rgba(197, 101, 61, 0.06);
1419
+ }
1420
+ .ask-user-option-label {
1421
+ font-size: 0.8125rem;
1422
+ font-weight: 500;
1423
+ color: var(--text-primary);
1424
+ }
1425
+ .ask-user-answer-sent {
1426
+ padding: 8px 12px;
1427
+ background: rgba(79, 122, 88, 0.08);
1428
+ border-radius: var(--radius-sm);
1429
+ color: var(--success);
1430
+ font-size: 0.8125rem;
1431
+ }
1432
+
1433
+ /* Enhanced Thinking Card */
1434
+ overflow-y: auto;
1435
+ }
1436
+ .tool-result-empty {
1437
+ font-size: 0.8125rem;
1438
+ color: var(--text-muted);
1439
+ font-style: italic;
1440
+ }
1441
+
1442
+ /* Enhanced Thinking Card */
1443
+ /* 简化版内联思考展示 */
1444
+ .thinking-inline {
1445
+ display: flex;
1446
+ align-items: baseline;
1447
+ gap: 6px;
1448
+ margin: 8px 0;
1449
+ padding: 6px 10px;
1450
+ border-radius: var(--radius-sm);
1451
+ background: rgba(138, 108, 178, 0.05);
1452
+ cursor: pointer;
1453
+ font-size: 0.8125rem;
1454
+ line-height: 1.5;
1455
+ color: rgba(138, 108, 178, 0.7);
1456
+ transition: background var(--transition-fast), color var(--transition-fast);
1457
+ word-break: break-word;
1458
+ overflow-wrap: break-word;
1459
+ }
1460
+ .thinking-inline:hover {
1461
+ background: rgba(138, 108, 178, 0.1);
1462
+ color: rgba(138, 108, 178, 0.9);
1463
+ }
1464
+ .thinking-inline.expanded {
1465
+ color: var(--text-secondary);
1466
+ white-space: pre-wrap;
1467
+ line-height: 1.6;
1468
+ }
1469
+ .thinking-inline-icon {
1470
+ flex-shrink: 0;
1471
+ font-size: 0.875rem;
1472
+ }
1473
+ .thinking-inline-preview {
1474
+ flex: 1;
1475
+ min-width: 0;
1476
+ overflow: hidden;
1477
+ text-overflow: ellipsis;
1478
+ white-space: nowrap;
1479
+ }
1480
+ .thinking-inline.expanded .thinking-inline-preview {
1481
+ white-space: pre-wrap;
1482
+ overflow-wrap: break-word;
1483
+ }
1484
+ .thinking-inline-action {
1485
+ flex-shrink: 0;
1486
+ font-size: 0.75rem;
1487
+ color: rgba(138, 108, 178, 0.5);
1488
+ padding: 1px 6px;
1489
+ border-radius: 3px;
1490
+ background: rgba(138, 108, 178, 0.1);
1491
+ margin-left: auto;
1492
+ }
1493
+ .thinking-inline:hover .thinking-inline-action {
1494
+ color: rgba(138, 108, 178, 0.8);
1495
+ }
1496
+ .thinking-inline.thinking-pty {
1497
+ background: rgba(138, 108, 178, 0.05);
1498
+ }
1499
+
1500
+ /* Streaming thinking: 3-line scrollable area during thinking */
1501
+ .thinking-streaming {
1502
+ display: flex;
1503
+ align-items: flex-start;
1504
+ gap: 6px;
1505
+ margin: 8px 0;
1506
+ padding: 6px 10px;
1507
+ border-radius: var(--radius-sm);
1508
+ background: rgba(138, 108, 178, 0.06);
1509
+ cursor: default;
1510
+ font-size: 0.8125rem;
1511
+ line-height: 1.5;
1512
+ color: rgba(138, 108, 178, 0.7);
1513
+ }
1514
+ .thinking-streaming-inner {
1515
+ display: flex;
1516
+ align-items: flex-start;
1517
+ gap: 6px;
1518
+ width: 100%;
1519
+ }
1520
+ .thinking-streaming-icon {
1521
+ font-size: 0.875rem;
1522
+ flex-shrink: 0;
1523
+ margin-top: 1px;
1524
+ }
1525
+ .thinking-streaming-text {
1526
+ flex: 1;
1527
+ min-width: 0;
1528
+ font-family: var(--font-mono);
1529
+ font-size: 0.75rem;
1530
+ line-height: 1.5;
1531
+ color: rgba(138, 108, 178, 0.8);
1532
+ white-space: pre-wrap;
1533
+ word-break: break-word;
1534
+ max-height: 4.5em; /* ~3 lines */
1535
+ overflow-y: auto;
1536
+ scrollbar-width: thin;
1537
+ scrollbar-color: rgba(138, 108, 178, 0.3) transparent;
1538
+ }
1539
+ .thinking-streaming-text::-webkit-scrollbar {
1540
+ width: 4px;
1541
+ }
1542
+ .thinking-streaming-text::-webkit-scrollbar-thumb {
1543
+ background: rgba(138, 108, 178, 0.3);
1544
+ border-radius: 2px;
1545
+ }
1546
+
1547
+ /* ── Inline Tool Display (Read, Glob, Grep, WebFetch, WebSearch, TodoRead) ── */
1548
+ .inline-tool {
1549
+ display: flex;
1550
+ flex-direction: column;
1551
+ margin: 4px 0;
1552
+ border-radius: var(--radius-sm);
1553
+ cursor: pointer;
1554
+ transition: background var(--transition-fast);
1555
+ }
1556
+ .inline-tool-row {
1557
+ display: flex;
1558
+ align-items: center;
1559
+ gap: 6px;
1560
+ padding: 4px 8px;
1561
+ font-size: 0.8125rem;
1562
+ color: var(--text-muted);
1563
+ font-family: var(--font-mono);
1564
+ line-height: 1.5;
1565
+ }
1566
+ .inline-tool:hover .inline-tool-row {
1567
+ background: rgba(0, 0, 0, 0.03);
1568
+ border-radius: var(--radius-sm);
1569
+ }
1570
+ .inline-tool-status {
1571
+ font-size: 0.75rem;
1572
+ flex-shrink: 0;
1573
+ }
1574
+ .inline-tool-icon {
1575
+ flex-shrink: 0;
1576
+ color: var(--text-muted);
1577
+ margin: 0 2px;
1578
+ }
1579
+ .inline-tool-title {
1580
+ flex: 1;
1581
+ min-width: 0;
1582
+ overflow: hidden;
1583
+ text-overflow: ellipsis;
1584
+ white-space: nowrap;
1585
+ color: var(--text-secondary);
1586
+ }
1587
+ .inline-tool-meta {
1588
+ flex-shrink: 0;
1589
+ font-size: 0.7rem;
1590
+ color: var(--text-muted);
1591
+ opacity: 0.7;
1592
+ max-width: 200px;
1593
+ overflow: hidden;
1594
+ text-overflow: ellipsis;
1595
+ white-space: nowrap;
1596
+ }
1597
+ .inline-tool-expanded {
1598
+ display: none;
1599
+ padding: 0 8px 6px 8px;
1600
+ }
1601
+ .inline-tool-open .inline-tool-expanded {
1602
+ display: block;
1603
+ }
1604
+ .inline-tool-result {
1605
+ background: rgba(0, 0, 0, 0.03);
1606
+ border-radius: var(--radius-sm);
1607
+ padding: 8px;
1608
+ margin-top: 4px;
1609
+ max-height: 300px;
1610
+ overflow-y: auto;
1611
+ scrollbar-width: thin;
1612
+ scrollbar-color: rgba(0, 0, 0, 0.15) transparent;
1613
+ }
1614
+ .inline-tool-result::-webkit-scrollbar {
1615
+ width: 4px;
1616
+ }
1617
+ .inline-tool-result::-webkit-scrollbar-thumb {
1618
+ background: rgba(0, 0, 0, 0.15);
1619
+ border-radius: 2px;
1620
+ }
1621
+ .inline-tool-result-text {
1622
+ font-family: var(--font-mono);
1623
+ font-size: 0.75rem;
1624
+ line-height: 1.5;
1625
+ color: var(--text-secondary);
1626
+ white-space: pre-wrap;
1627
+ word-break: break-all;
1628
+ margin: 0;
1629
+ }
1630
+ .inline-tool-error-inline {
1631
+ border-left: 2px solid rgba(178, 79, 69, 0.4);
1632
+ }
1633
+ .inline-tool-error-inline .inline-tool-row {
1634
+ color: rgba(178, 79, 69, 0.7);
1635
+ }
1636
+ .inline-tool-result.inline-tool-error {
1637
+ color: rgba(178, 79, 69, 0.8);
1638
+ font-family: var(--font-mono);
1639
+ font-size: 0.75rem;
1640
+ background: rgba(178, 79, 69, 0.05);
1641
+ }
1642
+ .inline-tool-loading {
1643
+ font-size: 0.75rem;
1644
+ color: var(--text-muted);
1645
+ font-style: italic;
1646
+ padding: 4px 0;
1647
+ }
1648
+ .inline-tool-empty {
1649
+ font-size: 0.75rem;
1650
+ color: var(--text-muted);
1651
+ font-style: italic;
1652
+ }
1653
+
1654
+ /* ── Inline Terminal Display (Bash) ── */
1655
+ .inline-terminal {
1656
+ margin: 6px 0;
1657
+ border: 1px solid rgba(255, 255, 255, 0.06);
1658
+ border-radius: var(--radius-sm);
1659
+ background: #1a1714;
1660
+ overflow: hidden;
1661
+ }
1662
+ .term-header {
1663
+ display: flex;
1664
+ align-items: center;
1665
+ gap: 6px;
1666
+ padding: 6px 10px;
1667
+ background: rgba(255, 255, 255, 0.03);
1668
+ font-size: 0.75rem;
1669
+ cursor: pointer;
1670
+ user-select: none;
1671
+ }
1672
+ .term-status-dot {
1673
+ width: 6px;
1674
+ height: 6px;
1675
+ border-radius: 50%;
1676
+ flex-shrink: 0;
1677
+ }
1678
+ .term-status-dot.term-success { background: #6ee09a; }
1679
+ .term-status-dot.term-error { background: #f07178; }
1680
+ .term-status-dot.term-warn { background: #f0a500; }
1681
+ .term-status-dot.term-running { background: #6b7280; animation: term-pulse 1s ease-in-out infinite; }
1682
+ @keyframes term-pulse {
1683
+ 0%, 100% { opacity: 1; }
1684
+ 50% { opacity: 0.4; }
1685
+ }
1686
+ .term-title {
1687
+ flex: 1;
1688
+ font-family: var(--font-mono);
1689
+ font-size: 0.75rem;
1690
+ color: rgba(255, 255, 255, 0.3);
1691
+ }
1692
+ .term-toggle-icon {
1693
+ font-size: 0.625rem;
1694
+ color: rgba(255, 255, 255, 0.3);
1695
+ transition: transform var(--transition-fast);
1696
+ }
1697
+ .term-body {
1698
+ padding: 8px 10px;
1699
+ }
1700
+ .term-command {
1701
+ font-family: var(--font-mono);
1702
+ font-size: 0.8125rem;
1703
+ color: #e8dcc8;
1704
+ line-height: 1.5;
1705
+ margin-bottom: 4px;
1706
+ }
1707
+ .term-prompt {
1708
+ color: #6ee09a;
1709
+ font-weight: 600;
1710
+ margin-right: 4px;
1711
+ }
1712
+ .term-output {
1713
+ margin-top: 4px;
1714
+ padding-top: 4px;
1715
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
1716
+ }
1717
+ .term-line {
1718
+ font-family: var(--font-mono);
1719
+ font-size: 0.8125rem;
1720
+ color: #c8b89a;
1721
+ line-height: 1.6;
1722
+ white-space: pre-wrap;
1723
+ word-break: break-all;
1724
+ }
1725
+ .term-exit {
1726
+ margin-top: 6px;
1727
+ padding-top: 4px;
1728
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
1729
+ font-family: var(--font-mono);
1730
+ font-size: 0.7rem;
1731
+ line-height: 1.5;
1732
+ }
1733
+ .term-exit-success { color: rgba(110, 224, 154, 0.7); }
1734
+ .term-exit-error { color: rgba(240, 113, 120, 0.7); }
1735
+
1736
+ /* ── Inline Diff Display (Edit, Write, MultiEdit) ── */
1737
+ .inline-diff {
1738
+ margin: 6px 0;
1739
+ border: 1px solid rgba(0, 0, 0, 0.08);
1740
+ border-radius: var(--radius-sm);
1741
+ overflow: hidden;
1742
+ background: var(--bg-secondary);
1743
+ }
1744
+ .diff-header {
1745
+ display: flex;
1746
+ align-items: center;
1747
+ gap: 6px;
1748
+ padding: 6px 10px;
1749
+ background: rgba(0, 0, 0, 0.03);
1750
+ font-size: 0.75rem;
1751
+ }
1752
+ .diff-file-icon {
1753
+ flex-shrink: 0;
1754
+ font-size: 0.875rem;
1755
+ }
1756
+ .diff-file-name {
1757
+ font-family: var(--font-mono);
1758
+ font-weight: 600;
1759
+ color: var(--text-primary);
1760
+ flex-shrink: 0;
1761
+ }
1762
+ .diff-path {
1763
+ font-family: var(--font-mono);
1764
+ color: var(--text-muted);
1765
+ flex: 1;
1766
+ min-width: 0;
1767
+ overflow: hidden;
1768
+ text-overflow: ellipsis;
1769
+ white-space: nowrap;
1770
+ font-size: 0.7rem;
1771
+ }
1772
+ .diff-status {
1773
+ flex-shrink: 0;
1774
+ font-size: 0.7rem;
1775
+ padding: 2px 8px;
1776
+ border-radius: 3px;
1777
+ }
1778
+ .diff-status.diff-success {
1779
+ background: rgba(79, 122, 88, 0.12);
1780
+ color: var(--success);
1781
+ }
1782
+ .diff-status.diff-error {
1783
+ background: rgba(178, 79, 69, 0.12);
1784
+ color: var(--danger);
1785
+ }
1786
+ .diff-status.diff-pending {
1787
+ background: rgba(0, 0, 0, 0.06);
1788
+ color: var(--text-muted);
1789
+ }
1790
+ .diff-body {
1791
+ overflow: hidden;
1792
+ }
1793
+ .diff-columns {
1794
+ display: flex;
1795
+ gap: 1px;
1796
+ background: rgba(0, 0, 0, 0.04);
1797
+ }
1798
+ .diff-col {
1799
+ flex: 1;
1800
+ min-width: 0;
1801
+ }
1802
+ .diff-col-half {
1803
+ flex: 1;
1804
+ }
1805
+ .diff-col-full {
1806
+ flex: none;
1807
+ width: 100%;
1808
+ }
1809
+ .diff-col-label {
1810
+ font-family: var(--font-mono);
1811
+ font-size: 0.65rem;
1812
+ font-weight: 700;
1813
+ padding: 2px 10px;
1814
+ color: var(--text-muted);
1815
+ text-transform: uppercase;
1816
+ letter-spacing: 0.05em;
1817
+ background: rgba(0, 0, 0, 0.02);
1818
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
1819
+ }
1820
+ .diff-line {
1821
+ padding: 2px 10px;
1822
+ font-family: var(--font-mono);
1823
+ font-size: 0.75rem;
1824
+ line-height: 1.5;
1825
+ white-space: pre-wrap;
1826
+ word-break: break-all;
1827
+ }
1828
+ .diff-add {
1829
+ background: rgba(40, 167, 69, 0.08);
1830
+ color: #155724;
1831
+ }
1832
+ .diff-remove {
1833
+ background: rgba(178, 79, 69, 0.06);
1834
+ color: #792620;
1835
+ }
1836
+
1837
+ /* 旧版卡片式思考(保留作为 fallback) */
1838
+ .thinking-card.enhanced {
1839
+ margin: 10px 0;
1840
+ border-radius: var(--radius-md);
1841
+ border: 1px solid rgba(138, 108, 178, 0.15);
1842
+ background: linear-gradient(135deg, rgba(138, 108, 178, 0.06) 0%, rgba(138, 108, 178, 0.02) 100%);
1843
+ display: block;
1844
+ width: 100%;
1845
+ box-sizing: border-box;
1846
+ }
1847
+ .thinking-card.enhanced[open] {
1848
+ background: linear-gradient(135deg, rgba(138, 108, 178, 0.1) 0%, rgba(138, 108, 178, 0.04) 100%);
1849
+ }
1850
+ .thinking-header {
1851
+ display: flex;
1852
+ align-items: center;
1853
+ gap: 10px;
1854
+ padding: 10px 14px;
1855
+ cursor: pointer;
1856
+ list-style: none;
1857
+ width: 100%;
1858
+ box-sizing: border-box;
1859
+ }
1860
+ .thinking-header::-webkit-details-marker {
1861
+ display: none;
1862
+ }
1863
+ .thinking-icon-wrap {
1864
+ display: flex;
1865
+ align-items: center;
1866
+ justify-content: center;
1867
+ width: 28px;
1868
+ height: 28px;
1869
+ background: rgba(138, 108, 178, 0.12);
1870
+ border-radius: 6px;
1871
+ }
1872
+ .thinking-spin {
1873
+ font-size: 0.875rem;
1874
+ }
1875
+ .thinking-label {
1876
+ font-size: 0.8125rem;
1877
+ font-weight: 600;
1878
+ color: rgba(138, 108, 178, 0.85);
1879
+ }
1880
+ .thinking-toggle {
1881
+ font-size: 0.6875rem;
1882
+ color: rgba(138, 108, 178, 0.5);
1883
+ margin-left: auto;
1884
+ }
1885
+ .thinking-card.enhanced[open] .thinking-toggle {
1886
+ display: none;
1887
+ }
1888
+ .thinking-body {
1889
+ padding: 10px 14px;
1890
+ background: rgba(255, 255, 255, 0.25);
1891
+ border-top: 1px solid rgba(138, 108, 178, 0.08);
1892
+ width: 100%;
1893
+ box-sizing: border-box;
1894
+ }
1895
+ .thinking-card.enhanced .thinking-text {
1896
+ font-size: 0.8125rem;
1897
+ line-height: 1.6;
1898
+ color: var(--text-secondary);
1899
+ white-space: pre-wrap;
1900
+ overflow-wrap: break-word;
1901
+ word-break: break-word;
1902
+ }
1903
+ .tool-result-error .tool-result-header {
1904
+ background: rgba(178, 79, 69, 0.08);
1905
+ }
1906
+ .tool-result-body {
1907
+ padding: 8px 12px;
1908
+ background: var(--bg-elevated);
1909
+ }
1910
+ .tool-result-content {
1911
+ margin: 0;
1912
+ font-size: 0.7rem;
1913
+ max-height: 600px;
1914
+ overflow-y: auto;
1915
+ }
1916
+ .tool-result-content code {
1917
+ font-family: var(--font-mono);
1918
+ white-space: pre-wrap;
1919
+ word-break: break-all;
1920
+ }
1921
+
1922
+ /* Markdown Content */
1923
+ .markdown-content { color: inherit; }
1924
+ .markdown-content p { margin: 0 0 8px 0; }
1925
+ .markdown-content p:last-child { margin-bottom: 0; }
1926
+ .markdown-content strong { font-weight: 600; }
1927
+ .markdown-content em { font-style: italic; }
1928
+ .markdown-content ul, .markdown-content ol { margin: 8px 0; padding-left: 20px; }
1929
+ .markdown-content li { margin: 4px 0; }
1930
+ .markdown-content h1, .markdown-content h2, .markdown-content h3 { margin: 16px 0 8px 0; font-weight: 600; }
1931
+ .markdown-content h1 { font-size: 1.25rem; }
1932
+ .markdown-content h2 { font-size: 1.1rem; }
1933
+ .markdown-content h3 { font-size: 1rem; }
1934
+ .markdown-content blockquote {
1935
+ margin: 8px 0;
1936
+ padding: 8px 12px;
1937
+ border-left: 3px solid var(--accent);
1938
+ background: rgba(197, 101, 61, 0.06);
1939
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
1940
+ }
1941
+ .markdown-content code:not(.code-block):not(.code-inline) {
1942
+ font-family: var(--font-mono);
1943
+ font-size: 0.8125rem;
1944
+ background: rgba(150, 118, 85, 0.12);
1945
+ padding: 2px 5px;
1946
+ border-radius: 4px;
1947
+ }
1948
+
1949
+ .markdown-content code.code-inline {
1950
+ font-family: var(--font-mono);
1951
+ font-size: 0.8125rem;
1952
+ background: rgba(150, 118, 85, 0.12);
1953
+ padding: 2px 5px;
1954
+ border-radius: 4px;
1955
+ }
1956
+ .markdown-content .code-block {
1957
+ margin: 12px 0;
1958
+ border-radius: var(--radius-md);
1959
+ overflow: hidden;
1960
+ background: #1f1b17;
1961
+ border: 1px solid rgba(122, 91, 64, 0.35);
1962
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
1963
+ }
1964
+ .markdown-content .code-block-header {
1965
+ display: flex;
1966
+ align-items: center;
1967
+ justify-content: space-between;
1968
+ padding: 6px 12px;
1969
+ background: rgba(122, 91, 64, 0.2);
1970
+ border-bottom: 1px solid rgba(122, 91, 64, 0.2);
1971
+ gap: 8px;
1972
+ }
1973
+ .markdown-content .code-lang {
1974
+ font-family: var(--font-mono);
1975
+ font-size: 0.7rem;
1976
+ color: #8c735f;
1977
+ text-transform: lowercase;
1978
+ white-space: nowrap;
1979
+ overflow: hidden;
1980
+ text-overflow: ellipsis;
1981
+ }
1982
+ .markdown-content .code-copy {
1983
+ font-family: var(--font-sans);
1984
+ font-size: 0.7rem;
1985
+ padding: 4px 10px;
1986
+ border-radius: 6px;
1987
+ border: 1px solid rgba(255, 255, 255, 0.15);
1988
+ background: rgba(255, 255, 255, 0.1);
1989
+ color: #d9c4b0;
1990
+ cursor: pointer;
1991
+ transition: all var(--transition-fast);
1992
+ white-space: nowrap;
1993
+ flex-shrink: 0;
1994
+ }
1995
+ .markdown-content .code-copy:hover {
1996
+ background: rgba(255, 255, 255, 0.18);
1997
+ color: white;
1998
+ border-color: rgba(255, 255, 255, 0.25);
1999
+ }
2000
+ .markdown-content .code-copy.copied {
2001
+ color: #7fa36f;
2002
+ border-color: rgba(127, 163, 111, 0.5);
2003
+ background: rgba(127, 163, 111, 0.15);
2004
+ }
2005
+ .markdown-content pre {
2006
+ margin: 0;
2007
+ padding: 12px;
2008
+ overflow-x: auto;
2009
+ }
2010
+ .markdown-content pre code {
2011
+ font-family: var(--font-mono);
2012
+ font-size: 0.8125rem;
2013
+ line-height: 1.5;
2014
+ color: #f5eadc;
2015
+ background: transparent;
2016
+ padding: 0;
2017
+ }
2018
+
2019
+ /* Syntax Highlighting */
2020
+ .token-comment { color: #625347; }
2021
+ .token-keyword { color: #c595c7; }
2022
+ .token-string { color: #7fa36f; }
2023
+ .token-number { color: #d5a35b; }
2024
+ .token-function { color: #87a9d9; }
2025
+ .token-operator { color: #d27766; }
2026
+ .token-class { color: #7fb3b1; }
2027
+ .token-variable { color: #f5eadc; }
2028
+ .token-type { color: #d5a35b; }
2029
+
2030
+ .input-panel {
2031
+ padding: 10px 16px;
2032
+ flex-shrink: 0;
2033
+ z-index: 15;
2034
+ }
2035
+
2036
+ .token-usage-display {
2037
+ margin-top: 8px;
2038
+ padding: 6px 10px;
2039
+ background: rgba(255, 255, 255, 0.5);
2040
+ border-radius: var(--radius-sm);
2041
+ font-size: 0.6875rem;
2042
+ color: var(--text-muted);
2043
+ font-family: var(--font-mono);
2044
+ transition: opacity var(--transition-fast);
2045
+ }
2046
+ .token-usage-display.hidden { display: none; }
2047
+ .token-usage-display #token-usage-text {
2048
+ opacity: 0.8;
2049
+ }
2050
+
2051
+ .input-composer {
2052
+ background: rgba(255, 255, 255, 0.85);
2053
+ border: 1px solid var(--border-default);
2054
+ border-radius: 20px;
2055
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
2056
+ overflow: hidden;
2057
+ }
2058
+ .input-composer:focus-within {
2059
+ border-color: var(--accent);
2060
+ box-shadow: 0 0 0 3px var(--accent-muted), 0 0 24px rgba(197, 101, 61, 0.1);
2061
+ background: rgba(255, 255, 255, 0.98);
2062
+ }
2063
+ .input-composer-bar {
2064
+ display: flex;
2065
+ align-items: center;
2066
+ justify-content: space-between;
2067
+ padding: 4px 6px 6px 10px;
2068
+ gap: 8px;
2069
+ }
2070
+ .input-composer-left {
2071
+ display: flex;
2072
+ align-items: center;
2073
+ gap: 6px;
2074
+ }
2075
+ .input-composer-right {
2076
+ display: flex;
2077
+ align-items: center;
2078
+ gap: 8px;
2079
+ }
2080
+ .queue-counter {
2081
+ font-size: 0.6875rem;
2082
+ color: var(--accent);
2083
+ background: var(--accent-muted);
2084
+ padding: 2px 8px;
2085
+ border-radius: 10px;
2086
+ white-space: nowrap;
2087
+ font-weight: 600;
2088
+ animation: queuePulse 1.5s ease-in-out infinite;
2089
+ }
2090
+ .queue-counter.hidden { display: none; }
2091
+ @keyframes queuePulse {
2092
+ 0%, 100% { opacity: 1; }
2093
+ 50% { opacity: 0.7; }
2094
+ }
2095
+
2096
+ .input-hint {
2097
+ font-size: 0.6875rem;
2098
+ color: var(--text-muted);
2099
+ white-space: nowrap;
2100
+ user-select: none;
2101
+ }
2102
+
2103
+ .input-row { display: flex; gap: 10px; align-items: flex-end; max-width: 100%; }
2104
+ .input-field { flex: 1; display: flex; flex-direction: column; gap: 6px; min-width: 0; max-width: 100%; }
2105
+ .input-label { font-size: 0.6875rem; color: var(--text-muted); font-weight: 500; }
2106
+ .input-textarea-wrap { position: relative; width: 100%; }
2107
+
2108
+ /* Todo progress bar */
2109
+ .todo-progress {
2110
+ margin-bottom: 6px;
2111
+ background: transparent;
2112
+ overflow: hidden;
2113
+ transition: all var(--transition-fast);
2114
+ }
2115
+ .todo-progress.hidden { display: none; }
2116
+ .todo-progress-header {
2117
+ display: flex;
2118
+ align-items: center;
2119
+ justify-content: space-between;
2120
+ padding: 4px 8px;
2121
+ cursor: pointer;
2122
+ user-select: none;
2123
+ gap: 8px;
2124
+ border-radius: 10px;
2125
+ transition: background var(--transition-fast);
2126
+ }
2127
+ .todo-progress-header:hover {
2128
+ background: rgba(197, 101, 61, 0.08);
2129
+ }
2130
+ .todo-progress-left {
2131
+ display: flex;
2132
+ align-items: center;
2133
+ gap: 8px;
2134
+ min-width: 0;
2135
+ flex: 1;
2136
+ }
2137
+ .todo-progress-spinner {
2138
+ width: 14px;
2139
+ height: 14px;
2140
+ min-width: 14px;
2141
+ border: 2px solid var(--accent-muted);
2142
+ border-top-color: var(--accent);
2143
+ border-radius: 50%;
2144
+ animation: spin 0.8s linear infinite;
2145
+ }
2146
+ .todo-progress.all-done .todo-progress-spinner {
2147
+ display: none;
2148
+ }
2149
+ .todo-progress.all-done .todo-progress-left::before {
2150
+ content: "✓";
2151
+ font-size: 0.8125rem;
2152
+ font-weight: 700;
2153
+ color: #4a7a4f;
2154
+ width: 14px;
2155
+ text-align: center;
2156
+ }
2157
+ .todo-progress-counter {
2158
+ font-size: 0.75rem;
2159
+ font-weight: 600;
2160
+ color: var(--text-primary);
2161
+ white-space: nowrap;
2162
+ }
2163
+ .todo-progress-task {
2164
+ font-size: 0.75rem;
2165
+ color: var(--text-secondary);
2166
+ overflow: hidden;
2167
+ text-overflow: ellipsis;
2168
+ white-space: nowrap;
2169
+ }
2170
+ .todo-progress-chevron {
2171
+ color: var(--text-muted);
2172
+ flex-shrink: 0;
2173
+ transition: transform 0.2s ease;
2174
+ }
2175
+ .todo-progress.expanded .todo-progress-chevron {
2176
+ transform: rotate(180deg);
2177
+ }
2178
+ .todo-progress-body {
2179
+ border-top: 1px solid var(--border-subtle);
2180
+ padding: 6px 10px 8px;
2181
+ }
2182
+ .todo-progress-body.hidden { display: none; }
2183
+ .todo-progress-list {
2184
+ list-style: none;
2185
+ margin: 0;
2186
+ padding: 0;
2187
+ display: flex;
2188
+ flex-direction: column;
2189
+ gap: 3px;
2190
+ }
2191
+ .todo-progress-item {
2192
+ display: flex;
2193
+ align-items: center;
2194
+ gap: 8px;
2195
+ padding: 3px 4px;
2196
+ border-radius: 6px;
2197
+ font-size: 0.75rem;
2198
+ color: var(--text-secondary);
2199
+ transition: background var(--transition-fast);
2200
+ }
2201
+ .todo-progress-item.active {
2202
+ color: var(--text-primary);
2203
+ font-weight: 500;
2204
+ background: rgba(197, 101, 61, 0.06);
2205
+ }
2206
+ .todo-progress-item.done {
2207
+ color: var(--text-muted);
2208
+ text-decoration: line-through;
2209
+ text-decoration-color: var(--text-muted);
2210
+ }
2211
+ .todo-item-icon {
2212
+ width: 16px;
2213
+ min-width: 16px;
2214
+ text-align: center;
2215
+ font-size: 0.6875rem;
2216
+ }
2217
+ .todo-item-icon.pending { color: var(--text-muted); }
2218
+ .todo-item-icon.active { color: var(--accent); }
2219
+ .todo-item-icon.done { color: #4a7a4f; }
2220
+
2221
+ /* Recent actions key points section */
2222
+ .recent-actions {
2223
+ margin-top: 8px;
2224
+ padding-top: 8px;
2225
+ border-top: 1px solid var(--border-subtle);
2226
+ }
2227
+ .recent-actions-label {
2228
+ font-size: 0.6875rem;
2229
+ font-weight: 600;
2230
+ color: var(--text-muted);
2231
+ text-transform: uppercase;
2232
+ letter-spacing: 0.03em;
2233
+ margin-bottom: 6px;
2234
+ }
2235
+ .recent-actions-list {
2236
+ display: flex;
2237
+ flex-wrap: wrap;
2238
+ gap: 4px;
2239
+ }
2240
+ .recent-action-pill {
2241
+ display: inline-flex;
2242
+ align-items: center;
2243
+ gap: 3px;
2244
+ padding: 3px 8px;
2245
+ font-size: 0.6875rem;
2246
+ color: var(--text-secondary);
2247
+ background: rgba(79, 122, 88, 0.08);
2248
+ border-radius: 10px;
2249
+ white-space: nowrap;
2250
+ max-width: 220px;
2251
+ overflow: hidden;
2252
+ text-overflow: ellipsis;
2253
+ }
2254
+
2255
+ @keyframes spin {
2256
+ to { transform: rotate(360deg); }
2257
+ }
2258
+
2259
+ .folder-picker-container {
2260
+ margin-bottom: 8px;
2261
+ }
2262
+ .folder-picker-quick-paths {
2263
+ display: flex;
2264
+ gap: 6px;
2265
+ margin-bottom: 6px;
2266
+ flex-wrap: wrap;
2267
+ }
2268
+ .folder-picker-quick-btn {
2269
+ display: flex;
2270
+ align-items: center;
2271
+ gap: 4px;
2272
+ padding: 4px 8px;
2273
+ background: rgba(255, 255, 255, 0.6);
2274
+ border: 1px solid var(--border-subtle);
2275
+ border-radius: var(--radius-sm);
2276
+ font-size: 0.75rem;
2277
+ color: var(--text-secondary);
2278
+ cursor: pointer;
2279
+ transition: all var(--transition-fast);
2280
+ }
2281
+ .folder-picker-quick-btn:hover {
2282
+ background: rgba(255, 255, 255, 0.9);
2283
+ border-color: var(--accent);
2284
+ color: var(--accent);
2285
+ }
2286
+ .folder-breadcrumb {
2287
+ display: flex;
2288
+ align-items: center;
2289
+ flex-wrap: wrap;
2290
+ gap: 2px;
2291
+ padding: 4px 8px;
2292
+ background: rgba(255, 255, 255, 0.4);
2293
+ border-radius: 6px;
2294
+ font-size: 0.6875rem;
2295
+ font-family: var(--font-mono);
2296
+ margin-bottom: 4px;
2297
+ }
2298
+ .folder-breadcrumb-item {
2299
+ display: flex;
2300
+ align-items: center;
2301
+ gap: 2px;
2302
+ color: var(--text-muted);
2303
+ cursor: pointer;
2304
+ padding: 2px 4px;
2305
+ border-radius: 3px;
2306
+ transition: all var(--transition-fast);
2307
+ }
2308
+ .folder-breadcrumb-item:hover {
2309
+ color: var(--accent);
2310
+ background: var(--accent-muted);
2311
+ }
2312
+ .folder-breadcrumb-item.current {
2313
+ color: var(--text-primary);
2314
+ font-weight: 500;
2315
+ }
2316
+ .folder-breadcrumb-separator {
2317
+ color: var(--text-muted);
2318
+ margin: 0 1px;
2319
+ }
2320
+ .folder-picker {
2321
+ display: flex;
2322
+ align-items: center;
2323
+ gap: 6px;
2324
+ padding: 6px 8px;
2325
+ background: rgba(255, 255, 255, 0.5);
2326
+ border: 1px solid var(--border-subtle);
2327
+ border-radius: var(--radius-sm);
2328
+ }
2329
+ .folder-picker-icon {
2330
+ font-size: 1rem;
2331
+ color: var(--text-muted);
2332
+ flex-shrink: 0;
2333
+ }
2334
+ .folder-picker-input {
2335
+ flex: 1;
2336
+ border: none;
2337
+ background: transparent;
2338
+ font-family: var(--font-mono);
2339
+ font-size: 0.8125rem;
2340
+ color: var(--text-primary);
2341
+ outline: none;
2342
+ padding: 4px;
2343
+ }
2344
+ .folder-picker-input:focus {
2345
+ background: rgba(255, 255, 255, 0.8);
2346
+ border-radius: 4px;
2347
+ }
2348
+ .folder-picker-dropdown {
2349
+ position: absolute;
2350
+ top: 100%;
2351
+ left: 0;
2352
+ right: 0;
2353
+ background: var(--bg-secondary);
2354
+ border: 1px solid var(--border-default);
2355
+ border-radius: var(--radius-sm);
2356
+ box-shadow: var(--shadow-elevated);
2357
+ z-index: 50;
2358
+ max-height: 240px;
2359
+ overflow-y: auto;
2360
+ margin-top: 4px;
2361
+ }
2362
+ .folder-picker-item {
2363
+ display: flex;
2364
+ align-items: center;
2365
+ gap: 8px;
2366
+ padding: 8px 10px;
2367
+ cursor: pointer;
2368
+ font-size: 0.8125rem;
2369
+ transition: background var(--transition-fast);
2370
+ }
2371
+ .folder-picker-item:hover {
2372
+ background: var(--bg-tertiary);
2373
+ }
2374
+ .folder-picker-item.active {
2375
+ background: var(--accent-muted);
2376
+ }
2377
+ .folder-picker-item-icon {
2378
+ font-size: 0.875rem;
2379
+ color: var(--text-muted);
2380
+ }
2381
+ .folder-picker-loading {
2382
+ padding: 8px 10px;
2383
+ text-align: center;
2384
+ color: var(--text-muted);
2385
+ font-size: 0.75rem;
2386
+ }
2387
+ .folder-picker-error {
2388
+ padding: 8px 10px;
2389
+ color: var(--danger);
2390
+ font-size: 0.75rem;
2391
+ background: var(--danger-muted);
2392
+ border-radius: 4px;
2393
+ margin: 4px 8px;
2394
+ }
2395
+ .folder-picker-container.drag-over {
2396
+ background: var(--accent-muted);
2397
+ border-radius: var(--radius-sm);
2398
+ }
2399
+ .folder-picker-container.drag-over .folder-picker {
2400
+ border-color: var(--accent);
2401
+ }
2402
+ .folder-recent-section {
2403
+ padding: 4px 8px;
2404
+ border-bottom: 1px solid var(--border-subtle);
2405
+ margin-bottom: 4px;
2406
+ }
2407
+ .folder-recent-title {
2408
+ font-size: 0.6875rem;
2409
+ text-transform: uppercase;
2410
+ letter-spacing: 0.05em;
2411
+ color: var(--text-muted);
2412
+ margin-bottom: 4px;
2413
+ }
2414
+ .folder-recent-item {
2415
+ display: flex;
2416
+ align-items: center;
2417
+ gap: 6px;
2418
+ padding: 6px 8px;
2419
+ cursor: pointer;
2420
+ font-size: 0.75rem;
2421
+ border-radius: 4px;
2422
+ transition: background var(--transition-fast);
2423
+ }
2424
+ .folder-recent-item:hover {
2425
+ background: var(--bg-tertiary);
2426
+ }
2427
+ .folder-recent-item-icon {
2428
+ color: var(--text-muted);
2429
+ }
2430
+ .folder-recent-item-path {
2431
+ flex: 1;
2432
+ overflow: hidden;
2433
+ text-overflow: ellipsis;
2434
+ white-space: nowrap;
2435
+ font-family: var(--font-mono);
2436
+ }
2437
+ .folder-picker-input.invalid {
2438
+ border-color: var(--danger);
2439
+ background: rgba(178, 79, 69, 0.08);
2440
+ }
2441
+ .folder-picker-input.invalid:focus {
2442
+ box-shadow: 0 0 0 2px rgba(178, 79, 69, 0.2);
2443
+ }
2444
+ .folder-picker-validation {
2445
+ font-size: 0.6875rem;
2446
+ color: var(--danger);
2447
+ padding: 2px 4px;
2448
+ margin-top: 2px;
2449
+ display: none;
2450
+ }
2451
+ .folder-picker-validation.visible {
2452
+ display: block;
2453
+ }
2454
+
2455
+ /* Simplified compact folder picker for new sessions */
2456
+ .folder-picker-compact {
2457
+ position: sticky;
2458
+ margin-bottom: 8px;
2459
+ }
2460
+ .folder-picker-compact-row {
2461
+ display: flex;
2462
+ align-items: center;
2463
+ gap: 6px;
2464
+ padding: 6px 10px;
2465
+ background: rgba(255, 255, 255, 0.5);
2466
+ border: 1px solid var(--border-subtle);
2467
+ border-radius: var(--radius-sm);
2468
+ transition: all var(--transition-fast);
2469
+ }
2470
+ .folder-picker-compact-row:focus-within {
2471
+ background: rgba(255, 255, 255, 0.8);
2472
+ border-color: var(--accent);
2473
+ }
2474
+ .folder-picker-compact-icon {
2475
+ font-size: 0.875rem;
2476
+ color: var(--text-muted);
2477
+ flex-shrink: 0;
2478
+ }
2479
+ .folder-picker-compact-input {
2480
+ flex: 1;
2481
+ border: none;
2482
+ background: transparent;
2483
+ font-family: var(--font-mono);
2484
+ font-size: 0.8125rem;
2485
+ color: var(--text-primary);
2486
+ outline: none;
2487
+ padding: 2px 0;
2488
+ min-width: 0;
2489
+ }
2490
+ .folder-picker-compact-input::placeholder {
2491
+ color: var(--text-muted);
2492
+ }
2493
+ .folder-picker-toggle {
2494
+ background: none;
2495
+ border: none;
2496
+ padding: 4px 6px;
2497
+ font-size: 0.625rem;
2498
+ color: var(--text-muted);
2499
+ cursor: pointer;
2500
+ border-radius: 4px;
2501
+ transition: all var(--transition-fast);
2502
+ }
2503
+ .folder-picker-toggle:hover {
2504
+ background: var(--bg-tertiary);
2505
+ color: var(--text-secondary);
2506
+ }
2507
+ .folder-picker-toggle.open {
2508
+ transform: rotate(180deg);
2509
+ }
2510
+ .folder-picker-quick-row {
2511
+ display: flex;
2512
+ gap: 6px;
2513
+ padding: 6px 8px;
2514
+ border-bottom: 1px solid var(--border-subtle);
2515
+ }
2516
+ .folder-picker-quick-row .folder-picker-quick-btn {
2517
+ flex: 1;
2518
+ padding: 4px 8px;
2519
+ font-size: 0.6875rem;
2520
+ }
2521
+
2522
+ /* Working directory indicator embedded in input box */
2523
+ .working-dir-indicator {
2524
+ position: absolute;
2525
+ left: 10px;
2526
+ bottom: 5px;
2527
+ display: inline-flex;
2528
+ align-items: center;
2529
+ gap: 4px;
2530
+ padding: 2px 6px;
2531
+ background: rgba(197, 101, 61, 0.08);
2532
+ border-radius: 4px;
2533
+ font-size: 0.65rem;
2534
+ font-family: var(--font-mono);
2535
+ color: var(--text-muted);
2536
+ cursor: pointer;
2537
+ transition: all var(--transition-fast);
2538
+ max-width: 180px;
2539
+ z-index: 2;
2540
+ pointer-events: auto;
2541
+ }
2542
+ .working-dir-indicator:hover {
2543
+ background: var(--accent-muted);
2544
+ color: var(--accent);
2545
+ }
2546
+ .working-dir-indicator-icon {
2547
+ font-size: 0.75rem;
2548
+ flex-shrink: 0;
2549
+ }
2550
+ .working-dir-indicator-path {
2551
+ overflow: hidden;
2552
+ text-overflow: ellipsis;
2553
+ white-space: nowrap;
2554
+ }
2555
+
2556
+ .input-textarea {
2557
+ font-family: var(--font-mono);
2558
+ font-size: 0.875rem;
2559
+ background: transparent;
2560
+ border: none;
2561
+ color: var(--text-primary);
2562
+ padding: 12px 14px 4px;
2563
+ outline: none;
2564
+ resize: none;
2565
+ min-height: 40px;
2566
+ max-height: 140px;
2567
+ width: 100%;
2568
+ overflow-y: hidden;
2569
+ transition: height 0.18s cubic-bezier(0.25, 0.46, 0.45, 0.94), padding-bottom 0.18s ease;
2570
+ box-sizing: border-box;
2571
+ line-height: 1.45;
2572
+ }
2573
+
2574
+ .input-textarea:focus {
2575
+ outline: none;
2576
+ }
2577
+ .input-textarea::placeholder { color: var(--text-muted); }
2578
+ .input-textarea.has-dir-indicator {
2579
+ padding-bottom: 28px;
2580
+ min-height: 60px;
2581
+ }
2582
+
2583
+ .input-inline-controls {
2584
+ }
2585
+
2586
+ /* Chat mode select pill */
2587
+ .chat-mode-select {
2588
+ font-family: var(--font-sans);
2589
+ font-size: 0.6875rem;
2590
+ font-weight: 500;
2591
+ padding: 2px 8px;
2592
+ border-radius: 12px;
2593
+ border: 1px solid var(--border-subtle);
2594
+ background: rgba(246, 241, 232, 0.7);
2595
+ color: var(--text-secondary);
2596
+ cursor: pointer;
2597
+ transition: all var(--transition-fast);
2598
+ min-height: 24px;
2599
+ max-width: 100px;
2600
+ overflow: hidden;
2601
+ text-overflow: ellipsis;
2602
+ white-space: nowrap;
2603
+ appearance: none;
2604
+ -webkit-appearance: none;
2605
+ padding-right: 18px;
2606
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%239a8e82' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
2607
+ background-repeat: no-repeat;
2608
+ background-position: right 5px center;
2609
+ }
2610
+ .chat-mode-select:hover {
2611
+ border-color: var(--accent);
2612
+ background-color: rgba(246, 241, 232, 1);
2613
+ }
2614
+ .chat-mode-select:focus {
2615
+ border-color: var(--accent);
2616
+ box-shadow: 0 0 0 2px var(--accent-muted);
2617
+ outline: none;
2618
+ }
2619
+
2620
+ /* Circular action buttons */
2621
+ .btn-circle {
2622
+ width: 34px;
2623
+ height: 34px;
2624
+ min-width: 34px;
2625
+ border-radius: 50%;
2626
+ border: none;
2627
+ display: inline-flex;
2628
+ align-items: center;
2629
+ justify-content: center;
2630
+ cursor: pointer;
2631
+ transition: all var(--transition-fast);
2632
+ flex-shrink: 0;
2633
+ padding: 0;
2634
+ }
2635
+ .btn-circle-send {
2636
+ background: linear-gradient(180deg, var(--accent) 0%, #a8522f 100%);
2637
+ color: white;
2638
+ box-shadow: 0 2px 8px rgba(197, 101, 61, 0.3);
2639
+ }
2640
+ .btn-circle-send:hover {
2641
+ transform: scale(1.08);
2642
+ box-shadow: 0 4px 12px rgba(197, 101, 61, 0.4);
2643
+ }
2644
+ .btn-circle-send:active {
2645
+ transform: scale(0.95);
2646
+ }
2647
+ .btn-circle-stop {
2648
+ background: rgba(178, 79, 69, 0.12);
2649
+ color: var(--danger);
2650
+ }
2651
+ .btn-circle-stop:hover {
2652
+ background: var(--danger);
2653
+ color: white;
2654
+ transform: scale(1.08);
2655
+ }
2656
+ .btn-circle-stop:active {
2657
+ transform: scale(0.95);
2658
+ }
2659
+
2660
+ .keyboard-aware {
2661
+ position: fixed;
2662
+ bottom: 0;
2663
+ left: 0;
2664
+ right: 0;
2665
+ z-index: 30;
2666
+ background: var(--bg-secondary);
2667
+ border-top: 1px solid var(--border-subtle);
2668
+ padding: 12px 14px;
2669
+ padding-bottom: max(12px, env(keyboard-inset-bottom, 0px));
2670
+ transform: translateY(0);
2671
+ transition: transform 0.2s ease;
2672
+ }
2673
+
2674
+ .keyboard-aware.hidden { transform: translateY(100%); }
2675
+
2676
+ /* Folder icon button in input row */
2677
+ .folder-icon-btn {
2678
+ width: 46px;
2679
+ height: 46px;
2680
+ min-width: 46px;
2681
+ flex-shrink: 0;
2682
+ display: flex;
2683
+ align-items: center;
2684
+ justify-content: center;
2685
+ background: rgba(255, 255, 255, 0.65);
2686
+ border: 1px solid var(--border-subtle);
2687
+ border-radius: var(--radius-sm);
2688
+ font-size: 1.25rem;
2689
+ cursor: pointer;
2690
+ transition: all var(--transition-fast);
2691
+ align-self: flex-end;
2692
+ }
2693
+ .folder-icon-btn:hover {
2694
+ background: var(--accent-muted);
2695
+ border-color: var(--accent);
2696
+ transform: scale(1.05);
2697
+ }
2698
+ .folder-icon-btn:active {
2699
+ transform: scale(0.95);
2700
+ }
2701
+
2702
+ /* Folder picker modal */
2703
+ .folder-picker-modal {
2704
+ max-width: 480px;
2705
+ }
2706
+ .folder-picker-modal .modal-body {
2707
+ padding: 16px;
2708
+ }
2709
+
2710
+ .input-actions {
2711
+ display: flex;
2712
+ gap: 8px;
2713
+ flex-shrink: 0;
2714
+ align-items: center;
2715
+ margin-bottom: 0;
2716
+ }
2717
+ .input-actions .btn {
2718
+ min-width: 70px;
2719
+ padding: 10px 16px;
2720
+ font-weight: 600;
2721
+ white-space: nowrap;
2722
+ height: 42px;
2723
+ display: inline-flex;
2724
+ align-items: center;
2725
+ justify-content: center;
2726
+ }
2727
+ .input-actions-spacer { flex: 1; }
2728
+
2729
+ .quick-input {
2730
+ font-family: var(--font-mono);
2731
+ font-weight: 500;
2732
+ }
2733
+
2734
+ .btn-yes {
2735
+ background: var(--success-muted);
2736
+ color: var(--success);
2737
+ }
2738
+ .btn-yes:hover {
2739
+ background: var(--success);
2740
+ color: white;
2741
+ }
2742
+
2743
+ .btn-no {
2744
+ background: var(--danger-muted);
2745
+ color: var(--danger);
2746
+ }
2747
+ .btn-no:hover {
2748
+ background: var(--danger);
2749
+ color: white;
2750
+ }
2751
+
2752
+ .login-container {
2753
+ display: flex;
2754
+ align-items: center;
2755
+ justify-content: center;
2756
+ min-height: 100vh;
2757
+ min-height: 100dvh;
2758
+ padding: 24px;
2759
+ }
2760
+
2761
+ .login-card {
2762
+ width: 100%;
2763
+ max-width: 380px;
2764
+ background: rgba(255, 251, 245, 0.92);
2765
+ border: 1px solid rgba(150, 118, 85, 0.16);
2766
+ border-radius: var(--radius-lg);
2767
+ overflow: hidden;
2768
+ box-shadow: var(--shadow-soft);
2769
+ }
2770
+
2771
+ .login-header {
2772
+ padding: 28px 24px 22px;
2773
+ text-align: center;
2774
+ border-bottom: 1px solid var(--border-subtle);
2775
+ background:
2776
+ radial-gradient(circle at top, rgba(214, 144, 100, 0.26), transparent 45%),
2777
+ linear-gradient(180deg, rgba(255, 246, 235, 0.85), rgba(255, 251, 245, 0.85));
2778
+ }
2779
+
2780
+ .login-logo { display: flex; align-items: center; justify-content: center; gap: 10px; margin-bottom: 8px; }
2781
+
2782
+ .login-logo-icon {
2783
+ width: 42px; height: 42px;
2784
+ background: linear-gradient(135deg, #d67b52 0%, #ab522e 100%);
2785
+ border-radius: var(--radius-md);
2786
+ display: flex; align-items: center; justify-content: center;
2787
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
2788
+ font-size: 18px; color: white; font-weight: 700;
2789
+ }
2790
+
2791
+ .login-logo-text { font-size: 1.6rem; font-weight: 600; letter-spacing: -0.02em; }
2792
+ .login-subtitle { color: var(--text-muted); font-size: 0.875rem; }
2793
+ .login-body { padding: 24px; }
2794
+ .login-hint { font-size: 0.8125rem; color: var(--text-secondary); margin-bottom: 20px; line-height: 1.6; }
2795
+ .login-tip {
2796
+ font-size: 0.75rem;
2797
+ color: var(--warning);
2798
+ background: rgba(255, 244, 230, 0.92);
2799
+ border: 1px solid rgba(169, 106, 47, 0.18);
2800
+ border-radius: var(--radius-md);
2801
+ padding: 10px 12px;
2802
+ margin-bottom: 18px;
2803
+ }
2804
+
2805
+ .field { margin-bottom: 18px; }
2806
+ .field-label { display: block; font-size: 0.8125rem; font-weight: 600; color: var(--text-secondary); margin-bottom: 8px; }
2807
+
2808
+ .field-input {
2809
+ width: 100%;
2810
+ font-family: var(--font-mono);
2811
+ font-size: 0.875rem;
2812
+ background: rgba(255, 255, 255, 0.75);
2813
+ border: 1px solid rgba(125, 91, 57, 0.22);
2814
+ border-radius: 12px;
2815
+ color: var(--text-primary);
2816
+ padding: 12px 14px;
2817
+ outline: none;
2818
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
2819
+ min-height: 44px;
2820
+ }
2821
+
2822
+ .field-input:focus {
2823
+ border-color: var(--accent);
2824
+ box-shadow: 0 0 0 3px var(--accent-muted), 0 0 20px rgba(197, 101, 61, 0.08);
2825
+ background: rgba(255, 255, 255, 0.9);
2826
+ }
2827
+ .field-input::placeholder { color: var(--text-muted); }
2828
+
2829
+ .modal-backdrop {
2830
+ position: fixed;
2831
+ inset: 0;
2832
+ z-index: 100;
2833
+ background: rgba(42, 28, 18, 0.52);
2834
+ backdrop-filter: blur(12px);
2835
+ -webkit-backdrop-filter: blur(12px);
2836
+ display: flex;
2837
+ align-items: center;
2838
+ justify-content: center;
2839
+ padding: 24px;
2840
+ animation: modalFadeIn 0.2s ease;
2841
+ }
2842
+
2843
+ @keyframes modalFadeIn {
2844
+ from { opacity: 0; }
2845
+ to { opacity: 1; }
2846
+ }
2847
+
2848
+ .modal {
2849
+ width: 100%;
2850
+ max-width: 460px;
2851
+ background: rgba(255, 251, 245, 0.98);
2852
+ border: 1px solid rgba(150, 118, 85, 0.22);
2853
+ border-radius: 20px;
2854
+ overflow: hidden;
2855
+ box-shadow: 0 32px 64px rgba(89, 58, 32, 0.18), 0 4px 16px rgba(89, 58, 32, 0.08);
2856
+ animation: modalSlideIn 0.22s cubic-bezier(0.34, 1.3, 0.64, 1);
2857
+ }
2858
+
2859
+ @keyframes modalSlideIn {
2860
+ from { opacity: 0; transform: scale(0.94) translateY(12px); }
2861
+ to { opacity: 1; transform: scale(1) translateY(0); }
2862
+ }
2863
+
2864
+ .modal-header {
2865
+ display: flex;
2866
+ align-items: center;
2867
+ justify-content: space-between;
2868
+ padding: 18px 22px 16px;
2869
+ border-bottom: 1px solid var(--border-subtle);
2870
+ flex-shrink: 0;
2871
+ min-height: 56px;
2872
+ }
2873
+
2874
+ .modal-title { font-size: 1.0625rem; font-weight: 600; color: var(--text-primary); letter-spacing: -0.01em; }
2875
+ .modal-body { padding: 22px; overflow: hidden; }
2876
+ .modal-body .field { margin-bottom: 18px; }
2877
+ .modal-body .field:last-of-type { margin-bottom: 20px; }
2878
+ .field-hint {
2879
+ margin-top: 6px;
2880
+ font-size: 0.75rem;
2881
+ color: var(--text-muted);
2882
+ line-height: 1.5;
2883
+ }
2884
+ .tool-picker {
2885
+ display: grid;
2886
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2887
+ gap: 10px;
2888
+ }
2889
+ .tool-card {
2890
+ width: 100%;
2891
+ text-align: left;
2892
+ border: 1px solid rgba(125, 91, 57, 0.2);
2893
+ border-radius: 14px;
2894
+ background: rgba(255, 255, 255, 0.65);
2895
+ padding: 14px;
2896
+ cursor: pointer;
2897
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast), background var(--transition-fast);
2898
+ }
2899
+ .tool-card:hover {
2900
+ border-color: var(--accent-soft);
2901
+ transform: translateY(-2px);
2902
+ box-shadow: 0 8px 24px rgba(89, 58, 32, 0.1);
2903
+ background: rgba(255, 255, 255, 0.85);
2904
+ }
2905
+ .tool-card.active {
2906
+ border-color: var(--accent);
2907
+ background: rgba(255, 247, 239, 0.98);
2908
+ box-shadow: 0 0 0 2px var(--accent-muted), 0 6px 20px rgba(89, 58, 32, 0.08);
2909
+ }
2910
+ .tool-card-title {
2911
+ display: flex;
2912
+ align-items: center;
2913
+ justify-content: space-between;
2914
+ gap: 8px;
2915
+ font-size: 0.9375rem;
2916
+ font-weight: 600;
2917
+ margin-bottom: 6px;
2918
+ color: var(--text-primary);
2919
+ }
2920
+ .tool-card-desc {
2921
+ font-size: 0.75rem;
2922
+ color: var(--text-secondary);
2923
+ line-height: 1.5;
2924
+ }
2925
+ .tool-chip {
2926
+ flex-shrink: 0;
2927
+ padding: 2px 8px;
2928
+ border-radius: 999px;
2929
+ font-size: 0.6875rem;
2930
+ color: var(--accent);
2931
+ background: rgba(197, 101, 61, 0.1);
2932
+ }
2933
+ .command-preview {
2934
+ display: block;
2935
+ margin-top: 8px;
2936
+ padding: 10px 12px;
2937
+ border-radius: var(--radius-md);
2938
+ border: 1px dashed var(--border-default);
2939
+ background: rgba(255, 255, 255, 0.48);
2940
+ font-size: 0.75rem;
2941
+ color: var(--text-secondary);
2942
+ font-family: var(--font-mono);
2943
+ white-space: nowrap;
2944
+ overflow: hidden;
2945
+ text-overflow: ellipsis;
2946
+ }
2947
+
2948
+ select.field-input {
2949
+ appearance: none;
2950
+ -webkit-appearance: none;
2951
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238c735f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
2952
+ background-repeat: no-repeat;
2953
+ background-position: right 14px center;
2954
+ padding-right: 40px;
2955
+ cursor: pointer;
2956
+ }
2957
+
2958
+ .suggestions-wrap { position: sticky; }
2959
+
2960
+ .suggestions {
2961
+ position: absolute;
2962
+ top: calc(100% + 4px);
2963
+ left: 0; right: 0;
2964
+ z-index: 50;
2965
+ background: rgba(255, 250, 244, 0.98);
2966
+ border: 1px solid var(--border-default);
2967
+ border-radius: var(--radius-md);
2968
+ max-height: 200px;
2969
+ overflow-y: auto;
2970
+ }
2971
+
2972
+ .suggestion-item {
2973
+ width: 100%;
2974
+ text-align: left;
2975
+ padding: 10px 12px;
2976
+ background: transparent;
2977
+ border: none;
2978
+ color: var(--text-primary);
2979
+ cursor: pointer;
2980
+ font-family: var(--font-mono);
2981
+ font-size: 0.8125rem;
2982
+ transition: background var(--transition-fast);
2983
+ }
2984
+
2985
+ .suggestion-item:hover { background: rgba(232, 197, 174, 0.34); }
2986
+ .suggestion-item small { display: block; font-size: 0.6875rem; color: var(--text-muted); margin-top: 2px; }
2987
+
2988
+ .error-message {
2989
+ font-size: 0.75rem;
2990
+ color: var(--danger);
2991
+ padding: 10px 12px;
2992
+ background: var(--danger-muted);
2993
+ border-radius: var(--radius-md);
2994
+ margin-top: 12px;
2995
+ animation: shake 0.3s ease;
2996
+ }
2997
+
2998
+ @keyframes shake {
2999
+ 0%, 100% { transform: translateX(0); }
3000
+ 25% { transform: translateX(-4px); }
3001
+ 75% { transform: translateX(4px); }
3002
+ }
3003
+
3004
+ .field-input[data-error="true"] {
3005
+ border-color: var(--danger);
3006
+ box-shadow: 0 0 0 3px var(--danger-muted);
3007
+ }
3008
+
3009
+ .hint { font-size: 0.6875rem; color: var(--text-muted); margin-top: 12px; }
3010
+ .empty-state { text-align: center; padding: 40px 20px; color: var(--text-muted); font-size: 0.8125rem; }
3011
+ .empty-state strong { display: block; color: var(--text-secondary); font-size: 0.95rem; margin-bottom: 8px; font-weight: 600; }
3012
+ .hidden { display: none !important; }
3013
+
3014
+ .offline-banner {
3015
+ position: fixed;
3016
+ bottom: 80px;
3017
+ left: 50%;
3018
+ transform: translateX(-50%);
3019
+ background: var(--warning);
3020
+ color: white;
3021
+ padding: 8px 16px;
3022
+ border-radius: var(--radius-md);
3023
+ font-size: 0.8125rem;
3024
+ font-weight: 500;
3025
+ z-index: 100;
3026
+ box-shadow: var(--shadow-elevated);
3027
+ animation: slideUp 0.3s ease;
3028
+ }
3029
+
3030
+ @keyframes slideUp {
3031
+ from { opacity: 0; transform: translateX(-50%) translateY(20px); }
3032
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
3033
+ }
3034
+
3035
+ .pwa-install-prompt {
3036
+ position: fixed;
3037
+ bottom: 24px;
3038
+ left: 24px;
3039
+ right: 24px;
3040
+ max-width: 400px;
3041
+ background: var(--bg-elevated);
3042
+ border: 1px solid var(--border-default);
3043
+ border-radius: var(--radius-lg);
3044
+ padding: 16px;
3045
+ box-shadow: var(--shadow-soft);
3046
+ z-index: 100;
3047
+ display: flex;
3048
+ align-items: center;
3049
+ gap: 12px;
3050
+ }
3051
+
3052
+ .pwa-install-prompt .prompt-icon {
3053
+ width: 48px;
3054
+ height: 48px;
3055
+ background: linear-gradient(135deg, #d77a52 0%, #a95130 100%);
3056
+ border-radius: 12px;
3057
+ display: flex;
3058
+ align-items: center;
3059
+ justify-content: center;
3060
+ color: white;
3061
+ font-weight: 700;
3062
+ font-size: 20px;
3063
+ flex-shrink: 0;
3064
+ }
3065
+
3066
+ .pwa-install-prompt .prompt-content {
3067
+ flex: 1;
3068
+ min-width: 0;
3069
+ }
3070
+
3071
+ .pwa-install-prompt .prompt-title {
3072
+ font-weight: 600;
3073
+ font-size: 0.9375rem;
3074
+ margin-bottom: 2px;
3075
+ }
3076
+
3077
+ .pwa-install-prompt .prompt-desc {
3078
+ font-size: 0.75rem;
3079
+ color: var(--text-muted);
3080
+ }
3081
+
3082
+ .pwa-install-prompt .prompt-actions {
3083
+ display: flex;
3084
+ gap: 8px;
3085
+ }
3086
+
3087
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
3088
+ ::-webkit-scrollbar-track { background: transparent; }
3089
+ ::-webkit-scrollbar-thumb { background: rgba(150, 118, 85, 0.3); border-radius: 3px; }
3090
+ ::-webkit-scrollbar-thumb:hover { background: rgba(150, 118, 85, 0.5); }
3091
+
3092
+ .sessions-list::-webkit-scrollbar { width: 4px; }
3093
+ .sessions-list::-webkit-scrollbar-track { background: transparent; }
3094
+ .sessions-list::-webkit-scrollbar-thumb { background: rgba(150, 118, 85, 0.25); border-radius: 2px; }
3095
+ .sessions-list::-webkit-scrollbar-thumb:hover { background: rgba(150, 118, 85, 0.4); }
3096
+
3097
+ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3098
+ button:focus-visible { outline-offset: 0; }
3099
+
3100
+ /* 平板适配 */
3101
+ @media (max-width: 768px) {
3102
+ .topbar {
3103
+ grid-template-columns: auto 1fr auto;
3104
+ padding: 6px 12px;
3105
+ min-height: 50px;
3106
+ gap: 8px;
3107
+ }
3108
+ .topbar-center { display: none; }
3109
+ .sidebar { width: min(300px, calc(100vw - 20px)); top: 50px; }
3110
+ .terminal-container { margin: 0 12px 12px; min-height: 0; }
3111
+ .btn { min-height: 40px; }
3112
+ .btn-sm { min-height: 36px; padding: 0 10px; font-size: 0.75rem; height: 36px; }
3113
+ .btn-icon { width: 36px; height: 36px; min-height: 36px; }
3114
+ .view-toggle { height: 36px; }
3115
+ .view-toggle-btn { padding: 0 12px; font-size: 0.75rem; height: 30px; min-height: 30px; }
3116
+ .chat-container { padding: 0 12px 12px; }
3117
+ .chat-message { max-width: 90%; }
3118
+ .thinking-card { padding: 10px 14px; }
3119
+ .thinking-content { font-size: 0.8125rem; }
3120
+ .tool-picker { grid-template-columns: 1fr; }
3121
+ /* 平板触摸优化 - 44px触摸区域 */
3122
+ .session-item { min-height: 52px; padding: 11px 12px; }
3123
+ .session-action-btn { width: 34px; height: 34px; min-width: 34px; min-height: 34px; }
3124
+ .tree-item { min-height: 44px; padding: 8px 12px; }
3125
+ .folder-picker-item { min-height: 44px; }
3126
+ }
3127
+
3128
+ @media (min-width: 769px) {
3129
+ .drawer-backdrop {
3130
+ display: none;
3131
+ }
3132
+ }
3133
+
3134
+ /* 移动端适配 */
3135
+ @media (max-width: 640px) {
3136
+ html, body {
3137
+ min-height: 100dvh;
3138
+ height: auto;
3139
+ }
3140
+
3141
+ body {
3142
+ overflow-x: hidden;
3143
+ overflow-y: auto;
3144
+ -webkit-overflow-scrolling: touch;
3145
+ }
3146
+
3147
+ .app-container {
3148
+ min-height: 100dvh;
3149
+ height: auto;
3150
+ overflow: visible;
3151
+ }
3152
+
3153
+ /* 移动端顶栏 */
3154
+ .topbar {
3155
+ position: sticky;
3156
+ top: 0;
3157
+ z-index: 30;
3158
+ grid-template-columns: auto 1fr auto;
3159
+ grid-template-areas: "menu logo actions";
3160
+ align-items: center;
3161
+ gap: 6px;
3162
+ min-height: 44px;
3163
+ padding: 6px 10px;
3164
+ padding-top: max(6px, env(safe-area-inset-top, 0px));
3165
+ }
3166
+
3167
+ .topbar-left { grid-area: menu; display: flex; gap: 6px; }
3168
+ .topbar-center { display: none; }
3169
+ .topbar-right { grid-area: actions; display: flex; gap: 6px; }
3170
+ .topbar-actions { display: contents; }
3171
+
3172
+ /* 移动端logo */
3173
+ .logo-wrap { display: flex; align-items: center; gap: 6px; grid-area: logo; justify-content: center; }
3174
+ .logo { gap: 6px; font-size: 0.8125rem; }
3175
+ .logo-icon { width: 24px; height: 24px; font-size: 10px; border-radius: 7px; }
3176
+ .session-summary { display: none; }
3177
+
3178
+ /* 移动端按钮统一为 44px 触摸区域 */
3179
+ .topbar .btn-sm,
3180
+ .topbar .topbar-btn {
3181
+ height: 40px;
3182
+ min-height: 40px;
3183
+ min-width: 44px;
3184
+ padding: 0 12px;
3185
+ font-size: 0.75rem;
3186
+ }
3187
+ .topbar .btn-icon,
3188
+ .topbar .topbar-btn.square {
3189
+ width: 40px;
3190
+ height: 40px;
3191
+ min-width: 40px;
3192
+ min-height: 40px;
3193
+ padding: 0;
3194
+ }
3195
+ .sidebar-toggle-btn { width: 40px; height: 40px; min-width: 40px; min-height: 40px; }
3196
+
3197
+ /* 移动端终端顶栏按钮统一 */
3198
+ .terminal-header { padding: 8px 10px; min-height: 44px; }
3199
+ .terminal-header-actions .btn-sm,
3200
+ .terminal-header-actions .btn-icon,
3201
+ .terminal-header-actions .topbar-btn {
3202
+ height: 40px;
3203
+ min-height: 40px;
3204
+ min-width: 40px;
3205
+ }
3206
+ .view-toggle { height: 40px; }
3207
+ .view-toggle-btn { height: 34px; min-height: 34px; }
3208
+
3209
+ .main-layout {
3210
+ flex-direction: column;
3211
+ flex: none;
3212
+ overflow: visible;
3213
+ padding-left: 0;
3214
+ }
3215
+
3216
+ .sidebar {
3217
+ top: 44px;
3218
+ width: min(280px, calc(100vw - 16px));
3219
+ max-height: none;
3220
+ border-bottom: none;
3221
+ }
3222
+
3223
+ .sessions-list {
3224
+ display: block;
3225
+ flex: 1;
3226
+ min-height: 0;
3227
+ overflow-x: hidden;
3228
+ overflow-y: auto;
3229
+ padding: 6px;
3230
+ -webkit-overflow-scrolling: touch;
3231
+ }
3232
+
3233
+ /* 移动端会话项 - 触摸优化 */
3234
+ .session-item {
3235
+ width: 100%;
3236
+ max-width: none;
3237
+ margin-bottom: 6px;
3238
+ padding: 12px;
3239
+ min-height: 56px;
3240
+ }
3241
+
3242
+ .session-action-btn {
3243
+ width: 40px;
3244
+ height: 40px;
3245
+ min-height: 40px;
3246
+ min-width: 40px;
3247
+ }
3248
+
3249
+ .main-content {
3250
+ display: flex;
3251
+ flex-direction: column;
3252
+ overflow: hidden;
3253
+ }
3254
+
3255
+ /* 移动端终端 */
3256
+ .terminal-header {
3257
+ padding: 8px 10px;
3258
+ align-items: center;
3259
+ gap: 6px;
3260
+ flex-shrink: 0;
3261
+ min-height: 44px;
3262
+ }
3263
+ .terminal-title {
3264
+ flex-direction: row;
3265
+ align-items: center;
3266
+ gap: 6px;
3267
+ font-size: 0.75rem;
3268
+ }
3269
+ .terminal-info { font-size: 0.625rem; }
3270
+ /* terminal-header-actions buttons handled by unified section above */
3271
+
3272
+ .terminal-container {
3273
+ flex: 1;
3274
+ min-height: 0;
3275
+ margin: 0 6px 6px;
3276
+ padding: 8px;
3277
+ border-radius: var(--radius-md);
3278
+ overflow: hidden;
3279
+ }
3280
+
3281
+ /* 移动端输入面板 - 虚拟键盘优化 */
3282
+ .input-panel {
3283
+ z-index: 30;
3284
+ padding: 8px 10px;
3285
+ padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
3286
+ flex-shrink: 0;
3287
+ }
3288
+
3289
+ .input-row { flex-direction: column; align-items: stretch; gap: 8px; max-width: 100%; }
3290
+ .input-field { gap: 6px; min-width: 0; max-width: 100%; }
3291
+ .input-label { font-size: 0.625rem; }
3292
+
3293
+ /* 移动端输入按钮 - 44px触摸区域 */
3294
+ .input-actions {
3295
+ width: 100%;
3296
+ display: flex;
3297
+ flex-wrap: nowrap;
3298
+ gap: 8px;
3299
+ align-items: stretch;
3300
+ }
3301
+ .input-actions .chat-mode-select {
3302
+ flex-shrink: 0;
3303
+ width: 90px;
3304
+ font-size: 0.75rem;
3305
+ }
3306
+ .input-actions .btn {
3307
+ flex: 1;
3308
+ min-width: 0;
3309
+ min-height: 44px;
3310
+ font-size: 0.8125rem;
3311
+ font-weight: 600;
3312
+ }
3313
+ .floating-toggle {
3314
+ flex: 0 0 auto;
3315
+ min-width: 44px;
3316
+ min-height: 44px;
3317
+ border-radius: var(--radius-md);
3318
+ }
3319
+
3320
+ /* 防止iOS自动缩放 */
3321
+ .input-textarea,
3322
+ .field-input {
3323
+ font-size: 16px;
3324
+ }
3325
+
3326
+ .input-textarea {
3327
+ min-height: 44px;
3328
+ padding: 10px;
3329
+ font-size: 16px;
3330
+ }
3331
+
3332
+ .input-inline-controls {
3333
+ }
3334
+
3335
+ .chat-mode-select {
3336
+ max-width: 90px;
3337
+ font-size: 0.6875rem;
3338
+ }
3339
+ .input-hint {
3340
+ display: none;
3341
+ }
3342
+
3343
+ .floating-pad {
3344
+ right: 0;
3345
+ bottom: calc(100% + 8px);
3346
+ width: min(200px, calc(100vw - 20px));
3347
+ padding: 8px 10px;
3348
+ }
3349
+
3350
+ /* 浮动面板按钮 - 触摸优化 */
3351
+ .floating-pad-grid .btn {
3352
+ min-height: 44px;
3353
+ font-size: 0.8125rem;
3354
+ }
3355
+
3356
+ .chat-container {
3357
+ min-height: 0;
3358
+ flex: 1;
3359
+ display: none;
3360
+ flex-direction: column;
3361
+ }
3362
+ .chat-container.active { display: flex; }
3363
+
3364
+ .terminal-container {
3365
+ flex: 1;
3366
+ min-height: 0;
3367
+ }
3368
+
3369
+ /* 目录选择器移动端优化 */
3370
+ .folder-picker-container {
3371
+ margin-bottom: 6px;
3372
+ }
3373
+
3374
+ .folder-picker-quick-paths {
3375
+ flex-wrap: wrap;
3376
+ gap: 6px;
3377
+ }
3378
+
3379
+ .folder-picker-quick-btn {
3380
+ min-height: 40px;
3381
+ padding: 8px 12px;
3382
+ font-size: 0.8125rem;
3383
+ }
3384
+
3385
+ .folder-breadcrumb {
3386
+ padding: 6px 8px;
3387
+ font-size: 0.625rem;
3388
+ margin-bottom: 4px;
3389
+ overflow-x: auto;
3390
+ -webkit-overflow-scrolling: touch;
3391
+ white-space: nowrap;
3392
+ flex-wrap: nowrap;
3393
+ }
3394
+
3395
+ .folder-breadcrumb-item {
3396
+ padding: 6px 8px;
3397
+ min-height: 36px;
3398
+ display: inline-flex;
3399
+ }
3400
+
3401
+ .folder-picker {
3402
+ padding: 10px 12px;
3403
+ min-height: 44px;
3404
+ }
3405
+
3406
+ .folder-picker-input {
3407
+ font-size: 16px;
3408
+ padding: 8px;
3409
+ }
3410
+
3411
+ .folder-picker-dropdown {
3412
+ max-height: 220px;
3413
+ }
3414
+
3415
+ .folder-picker-item {
3416
+ padding: 12px;
3417
+ min-height: 44px;
3418
+ }
3419
+
3420
+ .folder-recent-item {
3421
+ padding: 10px 12px;
3422
+ min-height: 44px;
3423
+ }
3424
+
3425
+ .folder-picker-compact-row {
3426
+ padding: 8px;
3427
+ }
3428
+ .folder-picker-compact-input {
3429
+ font-size: 0.75rem;
3430
+ }
3431
+
3432
+ .working-dir-indicator {
3433
+ font-size: 0.625rem;
3434
+ padding: 2px 6px;
3435
+ max-width: 150px;
3436
+ }
3437
+ .input-textarea.has-dir-indicator {
3438
+ padding-bottom: 26px;
3439
+ min-height: 56px;
3440
+ }
3441
+
3442
+ .login-container {
3443
+ min-height: 100dvh;
3444
+ align-items: flex-start;
3445
+ padding: 12px 10px calc(12px + env(safe-area-inset-bottom, 0px));
3446
+ }
3447
+
3448
+ .login-card {
3449
+ margin-top: max(10px, env(safe-area-inset-top, 0px));
3450
+ }
3451
+
3452
+ .login-header { padding: 18px 16px 14px; }
3453
+ .login-body { padding: 16px; }
3454
+ .btn { min-height: 48px; }
3455
+ .btn-sm { min-height: 40px; }
3456
+
3457
+ .chat-message-bubble { padding: 10px 14px; font-size: 0.8125rem; }
3458
+ .chat-message-avatar { width: 28px; height: 28px; font-size: 13px; }
3459
+
3460
+ /* 模态框移动端优化 */
3461
+ .modal-backdrop {
3462
+ padding: 12px;
3463
+ align-items: flex-end;
3464
+ }
3465
+
3466
+ .modal {
3467
+ max-width: 100%;
3468
+ max-height: 90vh;
3469
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
3470
+ margin-bottom: env(safe-area-inset-bottom, 0px);
3471
+ }
3472
+
3473
+ .tool-card {
3474
+ padding: 14px;
3475
+ min-height: 44px;
3476
+ }
3477
+ }
3478
+
3479
+ /* iPhone 14/15 等标准屏幕 (390px - 420px) */
3480
+ @media (min-width: 391px) and (max-width: 420px) {
3481
+ .topbar {
3482
+ padding: 6px 10px;
3483
+ min-height: 44px;
3484
+ gap: 6px;
3485
+ }
3486
+
3487
+ .topbar-left,
3488
+ .topbar-right {
3489
+ gap: 6px;
3490
+ }
3491
+
3492
+ .logo-icon { width: 24px; height: 24px; font-size: 10px; }
3493
+ /* topbar buttons handled by parent max-width: 640px */
3494
+
3495
+ .terminal-header { padding: 8px 10px; }
3496
+ .terminal-title-text { font-size: 0.8125rem; }
3497
+
3498
+ .terminal-container {
3499
+ min-height: 40vh;
3500
+ max-height: 55vh;
3501
+ margin: 8px;
3502
+ padding: 8px 10px;
3503
+ }
3504
+
3505
+ .input-panel {
3506
+ padding: 8px 10px;
3507
+ padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
3508
+ }
3509
+
3510
+ .input-actions { gap: 8px; }
3511
+ .input-actions .btn { min-height: 48px; font-size: 0.8125rem; }
3512
+ .floating-toggle { min-width: 48px; min-height: 48px; }
3513
+
3514
+ .floating-pad {
3515
+ width: calc(100vw - 20px);
3516
+ right: 10px;
3517
+ padding: 8px 10px;
3518
+ }
3519
+
3520
+ .floating-pad-grid .btn { min-height: 48px; font-size: 0.8125rem; }
3521
+
3522
+ .session-item { padding: 12px; min-height: 56px; }
3523
+ .session-command { font-size: 0.8125rem; }
3524
+ .session-meta { font-size: 0.6875rem; }
3525
+
3526
+ .sidebar-footer {
3527
+ padding: 12px 14px 14px;
3528
+ }
3529
+
3530
+ .sidebar-meta {
3531
+ flex-direction: column;
3532
+ align-items: flex-start;
3533
+ gap: 6px;
3534
+ }
3535
+
3536
+ .modal-body { padding: 18px; }
3537
+ .modal-header { padding: 14px 18px; }
3538
+ .modal-title { font-size: 1rem; }
3539
+
3540
+ .btn { min-height: 48px; }
3541
+ .btn-sm { min-height: 40px; }
3542
+ }
3543
+
3544
+ /* iPhone SE 等小屏幕 (<= 390px) */
3545
+ @media (max-width: 390px) {
3546
+ .topbar {
3547
+ padding: 4px 8px;
3548
+ min-height: 46px;
3549
+ gap: 4px;
3550
+ }
3551
+
3552
+ .topbar-left,
3553
+ .topbar-right {
3554
+ gap: 4px;
3555
+ }
3556
+
3557
+ .logo-icon { width: 22px; height: 22px; font-size: 9px; border-radius: 6px; }
3558
+ .logo { font-size: 0.75rem; gap: 4px; }
3559
+
3560
+ /* 小屏幕按钮 - 保持 40px 触摸区域 */
3561
+ .topbar .btn-sm,
3562
+ .topbar .topbar-btn {
3563
+ height: 36px;
3564
+ min-height: 36px;
3565
+ min-width: 40px;
3566
+ padding: 0 8px;
3567
+ font-size: 0.6875rem;
3568
+ }
3569
+ .topbar .btn-icon,
3570
+ .topbar .topbar-btn.square {
3571
+ width: 36px;
3572
+ height: 36px;
3573
+ min-width: 36px;
3574
+ min-height: 36px;
3575
+ padding: 0;
3576
+ }
3577
+ .sidebar-toggle-btn { width: 34px; height: 34px; min-width: 34px; min-height: 34px; }
3578
+ .view-toggle { height: 36px; }
3579
+ .view-toggle-btn { height: 30px; min-height: 30px; font-size: 0.75rem; }
3580
+ .topbar-new-btn { height: 32px; padding: 0 10px; font-size: 0.7rem; }
3581
+ .topbar-new-btn svg { width: 11px; height: 11px; }
3582
+ .topbar-logout-btn { height: 32px; padding: 0 10px; font-size: 0.7rem; }
3583
+ .topbar-logout-btn svg { width: 11px; height: 11px; }
3584
+ .logo-icon { width: 26px; height: 26px; font-size: 11px; }
3585
+ .logo { font-size: 0.875rem; gap: 6px; }
3586
+ .logo-text { font-size: 0.875rem; }
3587
+ .session-summary { max-width: 160px; padding: 4px 8px; }
3588
+ .session-summary-value { max-width: 130px; font-size: 0.65rem; }
3589
+
3590
+ .terminal-header { padding: 6px 8px; }
3591
+ .terminal-title-text { font-size: 0.75rem; }
3592
+ .terminal-info { display: none; }
3593
+
3594
+ .terminal-container {
3595
+ min-height: 35vh;
3596
+ max-height: 45vh;
3597
+ margin: 6px;
3598
+ padding: 8px;
3599
+ border-radius: var(--radius-sm);
3600
+ }
3601
+
3602
+ .input-panel {
3603
+ padding: 8px;
3604
+ padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
3605
+ }
3606
+
3607
+ .input-row { gap: 6px; }
3608
+
3609
+ .input-actions { gap: 6px; }
3610
+ .input-actions .btn {
3611
+ min-height: 44px;
3612
+ font-size: 0.75rem;
3613
+ padding: 10px 12px;
3614
+ }
3615
+ .floating-toggle {
3616
+ min-width: 44px;
3617
+ min-height: 44px;
3618
+ font-size: 1.1rem;
3619
+ }
3620
+
3621
+ .floating-pad {
3622
+ width: calc(100vw - 16px);
3623
+ right: 8px;
3624
+ padding: 8px 10px;
3625
+ bottom: calc(100% + 6px);
3626
+ }
3627
+
3628
+ .floating-pad-grid .btn {
3629
+ min-height: 44px;
3630
+ font-size: 0.75rem;
3631
+ }
3632
+
3633
+ .session-item {
3634
+ padding: 10px 12px;
3635
+ min-height: 52px;
3636
+ }
3637
+ .session-command { font-size: 0.75rem; }
3638
+ .session-meta { font-size: 0.625rem; gap: 4px; }
3639
+ .session-status { padding: 2px 6px; font-size: 0.625rem; }
3640
+
3641
+ .sidebar-header { padding: 10px 12px; }
3642
+ .sidebar-footer { padding: 10px 12px; }
3643
+ .sidebar-title { font-size: 0.75rem; }
3644
+
3645
+ .sidebar-meta {
3646
+ flex-direction: column;
3647
+ align-items: flex-start;
3648
+ gap: 6px;
3649
+ }
3650
+
3651
+ .modal-body { padding: 14px; }
3652
+ .modal-header { padding: 12px 14px; }
3653
+ .modal-title { font-size: 0.9375rem; }
3654
+
3655
+ .btn { min-height: 44px; padding: 10px 14px; }
3656
+ .btn-sm { min-height: 36px; padding: 6px 10px; }
3657
+
3658
+ .tool-picker { gap: 6px; }
3659
+ .tool-card { padding: 10px; }
3660
+ .tool-card-title { font-size: 0.8125rem; }
3661
+ .tool-card-desc { font-size: 0.6875rem; }
3662
+
3663
+ /* 目录选择器小屏幕适配 */
3664
+ .folder-picker-quick-btn {
3665
+ padding: 5px 8px;
3666
+ font-size: 0.6875rem;
3667
+ min-height: 32px;
3668
+ }
3669
+
3670
+ .folder-breadcrumb {
3671
+ font-size: 0.5625rem;
3672
+ padding: 4px 6px;
3673
+ }
3674
+
3675
+ .folder-picker-compact-row {
3676
+ padding: 6px 8px;
3677
+ }
3678
+ .folder-picker-compact-input {
3679
+ font-size: 0.6875rem;
3680
+ }
3681
+
3682
+ .working-dir-indicator {
3683
+ font-size: 0.5625rem;
3684
+ padding: 1px 5px;
3685
+ max-width: 120px;
3686
+ }
3687
+ .input-textarea.has-dir-indicator {
3688
+ padding-bottom: 24px;
3689
+ min-height: 52px;
3690
+ }
3691
+
3692
+ /* Chat 模式优化 */
3693
+ .chat-message { max-width: 92%; }
3694
+ .chat-message-bubble { padding: 6px 8px; font-size: 0.6875rem; }
3695
+ .thinking-card { padding: 6px 10px; gap: 8px; }
3696
+ .thinking-content { font-size: 0.6875rem; }
3697
+ .prompt-card { padding: 5px 10px; }
3698
+ .prompt-content { font-size: 0.6875rem; }
3699
+ }
3700
+
3701
+ /* iPad Mini 等平板 (641px - 768px) */
3702
+ @media (min-width: 641px) and (max-width: 768px) {
3703
+ .topbar {
3704
+ min-height: 52px;
3705
+ padding: 8px 14px;
3706
+ }
3707
+
3708
+ .sidebar {
3709
+ top: 52px;
3710
+ width: min(320px, calc(100vw - 40px));
3711
+ }
3712
+
3713
+ .session-item {
3714
+ min-height: 56px;
3715
+ padding: 12px;
3716
+ }
3717
+ .session-action-btn { width: 36px; height: 36px; min-width: 36px; min-height: 36px; }
3718
+
3719
+ .btn { min-height: 42px; }
3720
+ .btn-sm { min-height: 36px; }
3721
+
3722
+ .input-actions .btn { min-height: 44px; }
3723
+ .floating-toggle { min-width: 48px; min-height: 48px; }
3724
+ }
3725
+
3726
+ /* 横屏模式优化 */
3727
+ @media (max-height: 420px) and (orientation: landscape) {
3728
+ .topbar {
3729
+ min-height: 40px;
3730
+ padding: 6px 10px;
3731
+ }
3732
+
3733
+ .sidebar { top: 40px; }
3734
+
3735
+ .logo-icon { width: 20px; height: 20px; font-size: 9px; }
3736
+ .logo { font-size: 0.8125rem; }
3737
+ .logo-text { font-size: 0.8125rem; }
3738
+ .topbar-new-btn { height: 30px; padding: 0 12px; font-size: 0.72rem; }
3739
+ .topbar-logout-btn { height: 30px; padding: 0 10px; font-size: 0.7rem; }
3740
+
3741
+ .terminal-container {
3742
+ min-height: 55vh;
3743
+ margin: 6px;
3744
+ padding: 8px;
3745
+ }
3746
+
3747
+ .chat-container {
3748
+ padding: 0 10px 8px;
3749
+ }
3750
+
3751
+ .input-panel {
3752
+ padding: 8px;
3753
+ padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
3754
+ }
3755
+
3756
+ .input-row { flex-direction: row; gap: 8px; }
3757
+ .input-actions { width: auto; }
3758
+
3759
+ .floating-pad {
3760
+ bottom: 70px;
3761
+ width: min(180px, calc(100vw - 24px));
3762
+ }
3763
+ }
3764
+
3765
+ /* Blank chat mobile optimization */
3766
+ @media (max-width: 640px) {
3767
+ .blank-chat {
3768
+ padding: 16px 12px;
3769
+ align-items: flex-start;
3770
+ }
3771
+
3772
+ .blank-chat-inner {
3773
+ max-width: 100%;
3774
+ }
3775
+
3776
+ .blank-chat-logo {
3777
+ width: 48px;
3778
+ height: 48px;
3779
+ font-size: 24px;
3780
+ border-radius: 12px;
3781
+ margin-bottom: 10px;
3782
+ }
3783
+
3784
+ .blank-chat-title {
3785
+ font-size: 1.125rem;
3786
+ }
3787
+
3788
+ .blank-chat-subtitle {
3789
+ font-size: 0.75rem;
3790
+ margin-bottom: 16px;
3791
+ }
3792
+
3793
+ .blank-chat-input-wrap {
3794
+ margin-bottom: 12px;
3795
+ }
3796
+
3797
+ .blank-chat-input {
3798
+ padding: 10px 60px 10px 12px;
3799
+ font-size: 16px; /* Prevent iOS zoom */
3800
+ border-radius: 10px;
3801
+ }
3802
+
3803
+ .blank-chat-send-btn {
3804
+ padding: 6px 12px;
3805
+ font-size: 0.75rem;
3806
+ right: 5px;
3807
+ }
3808
+
3809
+ .blank-chat-tools {
3810
+ gap: 4px;
3811
+ margin-bottom: 8px;
3812
+ }
3813
+
3814
+ .blank-chat-tool-btn {
3815
+ padding: 6px 10px;
3816
+ font-size: 0.75rem;
3817
+ min-height: 44px;
3818
+ }
3819
+
3820
+ .blank-chat-hint {
3821
+ font-size: 0.6875rem;
3822
+ }
3823
+
3824
+ .mode-btn-group {
3825
+ gap: 4px;
3826
+ margin-top: 8px;
3827
+ }
3828
+
3829
+ .mode-btn {
3830
+ padding: 5px 10px;
3831
+ font-size: 0.6875rem;
3832
+ min-height: 36px;
3833
+ }
3834
+ }
3835
+
3836
+ .blank-chat {
3837
+ display: flex;
3838
+ align-items: center;
3839
+ justify-content: center;
3840
+ flex: 1;
3841
+ padding: 20px 16px;
3842
+ min-height: 0;
3843
+ overflow: auto;
3844
+ }
3845
+ .blank-chat-inner {
3846
+ width: 100%;
3847
+ max-width: 560px;
3848
+ text-align: center;
3849
+ }
3850
+ .blank-chat-logo {
3851
+ width: 56px;
3852
+ height: 56px;
3853
+ background: linear-gradient(135deg, #d77a52, #a95130);
3854
+ border-radius: 16px;
3855
+ display: flex;
3856
+ align-items: center;
3857
+ justify-content: center;
3858
+ font-size: 28px;
3859
+ font-weight: 700;
3860
+ color: white;
3861
+ margin: 0 auto 14px;
3862
+ box-shadow: 0 4px 16px rgba(197, 101, 61, 0.22);
3863
+ }
3864
+ .blank-chat-title {
3865
+ font-size: 1.375rem;
3866
+ font-weight: 600;
3867
+ color: var(--text-primary);
3868
+ margin: 0 0 6px;
3869
+ }
3870
+ .blank-chat-subtitle {
3871
+ font-size: 0.8125rem;
3872
+ color: var(--text-muted);
3873
+ margin: 0 0 20px;
3874
+ }
3875
+ .blank-chat-input-wrap {
3876
+ position: sticky;
3877
+ margin-bottom: 14px;
3878
+ }
3879
+ .blank-chat-input {
3880
+ width: 100%;
3881
+ padding: 12px 70px 12px 16px;
3882
+ border: 1.5px solid var(--border-default);
3883
+ border-radius: 12px;
3884
+ background: rgba(255, 255, 255, 0.8);
3885
+ color: var(--text-primary);
3886
+ font-size: 0.9375rem;
3887
+ font-family: var(--font-sans);
3888
+ outline: none;
3889
+ box-shadow: 0 2px 8px rgba(89, 58, 32, 0.04);
3890
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
3891
+ box-sizing: border-box;
3892
+ }
3893
+ .blank-chat-input:focus {
3894
+ border-color: var(--accent);
3895
+ box-shadow: 0 0 0 3px var(--accent-muted), 0 2px 8px rgba(89, 58, 32, 0.04);
3896
+ }
3897
+ .blank-chat-input::placeholder { color: var(--text-muted); }
3898
+ .blank-chat-send-btn {
3899
+ position: absolute;
3900
+ right: 6px;
3901
+ top: 50%;
3902
+ transform: translateY(-50%);
3903
+ padding: 6px 14px;
3904
+ background: var(--accent);
3905
+ color: white;
3906
+ border: none;
3907
+ border-radius: 8px;
3908
+ font-size: 0.8125rem;
3909
+ font-weight: 500;
3910
+ font-family: inherit;
3911
+ cursor: pointer;
3912
+ transition: background var(--transition-fast);
3913
+ }
3914
+ .blank-chat-send-btn:hover { background: var(--accent-hover); }
3915
+ .blank-chat-tools {
3916
+ display: flex;
3917
+ gap: 8px;
3918
+ justify-content: center;
3919
+ margin-bottom: 12px;
3920
+ flex-wrap: wrap;
3921
+ }
3922
+ .blank-chat-tool-btn {
3923
+ padding: 8px 14px;
3924
+ border: 1.5px solid var(--border-default);
3925
+ border-radius: 10px;
3926
+ background: rgba(255, 255, 255, 0.7);
3927
+ color: var(--text-secondary);
3928
+ font-size: 0.875rem;
3929
+ font-weight: 500;
3930
+ font-family: inherit;
3931
+ cursor: pointer;
3932
+ transition: all var(--transition-fast);
3933
+ display: flex;
3934
+ align-items: center;
3935
+ gap: 6px;
3936
+ min-height: 40px;
3937
+ }
3938
+ .blank-chat-tool-btn:hover {
3939
+ background: var(--accent-muted);
3940
+ border-color: var(--accent);
3941
+ color: var(--accent);
3942
+ transform: translateY(-1px);
3943
+ box-shadow: 0 4px 12px rgba(89, 58, 32, 0.08);
3944
+ }
3945
+ .blank-chat-tool-btn .tool-icon {
3946
+ font-size: 1.125rem;
3947
+ }
3948
+ .blank-chat-hint {
3949
+ font-size: 0.8125rem;
3950
+ color: var(--text-muted);
3951
+ margin: 0;
3952
+ font-weight: 500;
3953
+ }
3954
+ .mode-btn-group {
3955
+ display: flex;
3956
+ gap: 4px;
3957
+ margin-top: 10px;
3958
+ flex-wrap: wrap;
3959
+ }
3960
+ .mode-btn {
3961
+ padding: 5px 12px;
3962
+ border-radius: var(--radius-sm);
3963
+ border: 1px solid var(--border-default);
3964
+ background: rgba(255, 255, 255, 0.5);
3965
+ color: var(--text-secondary);
3966
+ font-size: 0.75rem;
3967
+ font-family: inherit;
3968
+ cursor: pointer;
3969
+ transition: all var(--transition-fast);
3970
+ }
3971
+ .mode-btn:hover {
3972
+ background: rgba(255, 255, 255, 0.8);
3973
+ border-color: var(--accent);
3974
+ color: var(--accent);
3975
+ }
3976
+ .mode-btn.active {
3977
+ background: var(--accent);
3978
+ border-color: var(--accent);
3979
+ color: white;
3980
+ }
3981
+ .mode-selector-wrap {
3982
+ display: flex;
3983
+ align-items: center;
3984
+ gap: 6px;
3985
+ }
3986
+ .chat-mode-select {
3987
+ font-size: 0.6875rem;
3988
+ font-family: inherit;
3989
+ cursor: pointer;
3990
+ outline: none;
3991
+ max-width: 96px;
3992
+ }
3993
+ .chat-mode-select:focus {
3994
+ border-color: var(--accent);
3995
+ }
3996
+ .input-field-full {
3997
+ flex: 1;
3998
+ min-width: 0;
3999
+ }
4000
+ .toast-message {
4001
+ position: fixed;
4002
+ bottom: 24px;
4003
+ left: 50%;
4004
+ transform: translateX(-50%);
4005
+ padding: 10px 20px;
4006
+ border-radius: var(--radius-md);
4007
+ font-size: 0.875rem;
4008
+ z-index: 9999;
4009
+ animation: toast-in 0.2s ease;
4010
+ }
4011
+ .toast-error {
4012
+ background: var(--danger);
4013
+ color: white;
4014
+ }
4015
+ @keyframes toast-in {
4016
+ from { opacity: 0; transform: translateX(-50%) translateY(8px); }
4017
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
4018
+ }