@pheem49/mint 1.5.2 → 1.5.4

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.
Files changed (40) hide show
  1. package/GUIDE_TH.md +23 -11
  2. package/README.md +148 -66
  3. package/assets/Agent_Mint.png +0 -0
  4. package/assets/Settings.png +0 -0
  5. package/install.ps1 +64 -0
  6. package/install.sh +54 -0
  7. package/main.js +12 -0
  8. package/package.json +5 -3
  9. package/preload.js +4 -0
  10. package/scripts/install_linux_desktop_entry.js +48 -0
  11. package/src/AI_Brain/Gemini_API.js +231 -498
  12. package/src/AI_Brain/autonomous_brain.js +46 -19
  13. package/src/AI_Brain/headless_agent.js +21 -2
  14. package/src/AI_Brain/provider_adapter.js +358 -0
  15. package/src/Automation_Layer/file_operations.js +17 -5
  16. package/src/CLI/approval_handler.js +5 -0
  17. package/src/CLI/chat_router.js +7 -0
  18. package/src/CLI/chat_ui.js +397 -76
  19. package/src/CLI/cli_colors.js +86 -3
  20. package/src/CLI/cli_formatters.js +6 -1
  21. package/src/CLI/code_agent.js +706 -273
  22. package/src/CLI/interactive_chat.js +311 -149
  23. package/src/CLI/slash_command_handler.js +2 -2
  24. package/src/CLI/updater.js +21 -1
  25. package/src/System/config_manager.js +5 -1
  26. package/src/System/ipc_handlers.js +95 -1
  27. package/src/System/picture_store.js +109 -0
  28. package/src/System/smart_context.js +227 -0
  29. package/src/System/task_manager.js +127 -0
  30. package/src/System/tool_registry.js +13 -0
  31. package/src/System/window_manager.js +16 -8
  32. package/src/UI/live2d_manager.js +42 -8
  33. package/src/UI/preload-spotlight.js +1 -0
  34. package/src/UI/renderer.js +837 -63
  35. package/src/UI/settings.css +160 -96
  36. package/src/UI/settings.html +9 -0
  37. package/src/UI/settings.js +35 -2
  38. package/src/UI/spotlight.js +13 -9
  39. package/src/UI/styles.css +1592 -165
  40. package/privacy.txt +0 -1
package/src/UI/styles.css CHANGED
@@ -1,35 +1,61 @@
1
1
  :root {
2
- --bg-color: #0f172a;
3
- --bg-gradient: linear-gradient(135deg, #090e17 0%, #1e1b4b 100%);
4
- --panel-bg: rgba(20, 28, 43, 0.65);
5
- --text-main: #f8fafc;
6
- --text-muted: #94a3b8;
7
- --accent: #8b5cf6;
8
- --accent-hover: #a78bfa;
9
- --border: rgba(255, 255, 255, 0.08);
10
- --border-light: rgba(255, 255, 255, 0.15);
11
- --shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
12
- --glass-blur: blur(16px);
2
+ --bg-color: #0b0b0c;
3
+ --bg-gradient: #0b0b0c;
4
+ --panel-bg: #1d1d1f;
5
+ --panel-raised: #242426;
6
+ --panel-soft: #151516;
7
+ --chrome-bg: #171718;
8
+ --surface-bg: #1f1f21;
9
+ --surface-strong: #333335;
10
+ --input-bg: #242425;
11
+ --text-main: #e8e8ea;
12
+ --text-muted: #8f8f94;
13
+ --text-soft: #d1d1d4;
14
+ --placeholder: #818187;
15
+ --accent: #8f6cf5;
16
+ --accent-hover: #a98cff;
17
+ --border: rgba(255, 255, 255, 0.075);
18
+ --border-light: rgba(255, 255, 255, 0.11);
19
+ --shadow: none;
20
+ --glass-blur: none;
13
21
  }
14
22
 
15
23
  [data-theme="light"] {
24
+ --bg-color: #f8fafc;
16
25
  --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
17
26
  --panel-bg: rgba(255, 255, 255, 0.75);
27
+ --panel-raised: #ffffff;
28
+ --panel-soft: #eef2f7;
29
+ --chrome-bg: rgba(255, 255, 255, 0.88);
30
+ --surface-bg: #ffffff;
31
+ --surface-strong: #e2e8f0;
32
+ --input-bg: #f8fafc;
18
33
  --text-main: #0f172a;
19
34
  --text-muted: #64748b;
35
+ --text-soft: #334155;
36
+ --placeholder: #8590a2;
20
37
  --border: rgba(0, 0, 0, 0.06);
21
38
  --border-light: rgba(255, 255, 255, 0.6);
22
39
  --shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
23
40
  }
24
41
 
25
42
  [data-theme="midnight"] {
26
- --bg-gradient: linear-gradient(135deg, #02040a 0%, #08061f 100%);
27
- --panel-bg: rgba(8, 8, 25, 0.7);
43
+ --bg-color: #020617;
44
+ --bg-gradient: linear-gradient(135deg, #020617 0%, #080a22 55%, #120828 100%);
45
+ --panel-bg: rgba(5, 8, 24, 0.94);
46
+ --panel-raised: rgba(99, 102, 241, 0.085);
47
+ --panel-soft: rgba(99, 102, 241, 0.055);
48
+ --chrome-bg: rgba(2, 6, 23, 0.88);
49
+ --surface-bg: rgba(5, 8, 24, 0.88);
50
+ --surface-strong: rgba(99, 102, 241, 0.16);
51
+ --input-bg: rgba(0, 0, 0, 0.46);
28
52
  --text-main: #e2e8f0;
29
- --text-muted: #64748b;
30
- --border: rgba(99, 102, 241, 0.15);
31
- --border-light: rgba(99, 102, 241, 0.3);
32
- --shadow: 0 8px 32px rgba(0, 0, 0, 0.6);
53
+ --text-muted: #74809a;
54
+ --text-soft: #bac4d6;
55
+ --placeholder: #68708a;
56
+ --border: rgba(99, 102, 241, 0.16);
57
+ --border-light: rgba(99, 102, 241, 0.26);
58
+ --shadow: none;
33
59
  }
34
60
 
35
61
  * {
@@ -39,7 +65,7 @@
39
65
  }
40
66
 
41
67
  body {
42
- font-family: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
68
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
43
69
  background: transparent;
44
70
  color: var(--text-main);
45
71
  height: 100vh;
@@ -52,13 +78,18 @@ body {
52
78
  display: flex;
53
79
  flex-direction: column;
54
80
  background: var(--bg-gradient);
55
- border-radius: 16px;
56
- border: 1px solid rgba(255, 255, 255, 0.15);
81
+ border-radius: 0;
82
+ border: 1px solid rgba(255, 255, 255, 0.045);
57
83
  box-shadow: var(--shadow);
58
84
  overflow: hidden;
59
85
  position: relative;
60
- animation: appEntrance 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
86
+ opacity: 1;
87
+ }
88
+
89
+ .app-container.is-loading > :not(.drag-region):not(.startup-loading) {
61
90
  opacity: 0;
91
+ visibility: hidden;
92
+ pointer-events: none;
62
93
  }
63
94
 
64
95
  @keyframes appEntrance {
@@ -76,64 +107,65 @@ body {
76
107
 
77
108
  /* Header - Drag Region */
78
109
  .drag-region {
79
- -webkit-app-region: drag;
80
- min-height: 66px;
81
- padding: 10px 14px 10px 18px;
110
+ app-region: no-drag;
111
+ -webkit-app-region: no-drag;
112
+ min-height: 34px;
113
+ padding: 0 8px;
82
114
  display: grid;
83
- grid-template-columns: minmax(150px, 1fr) auto minmax(220px, 1fr) auto;
84
- gap: 14px;
115
+ grid-template-columns: 248px minmax(0, 1fr) auto;
116
+ gap: 8px;
85
117
  align-items: center;
86
- background: rgba(9, 14, 28, 0.76);
118
+ background: var(--chrome-bg);
87
119
  backdrop-filter: var(--glass-blur);
88
120
  -webkit-backdrop-filter: var(--glass-blur);
89
121
  border-bottom: 1px solid var(--border);
90
- box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
122
+ box-shadow: none;
91
123
  z-index: 10;
92
124
  }
93
125
 
94
126
  .header-content {
127
+ app-region: drag;
128
+ -webkit-app-region: drag;
95
129
  display: flex;
96
130
  align-items: center;
97
- gap: 12px;
131
+ gap: 8px;
98
132
  min-width: 0;
133
+ height: 100%;
99
134
  }
100
135
 
101
- .status-indicator {
102
- width: 10px;
103
- height: 10px;
104
- border-radius: 50%;
105
- background: #10b981;
106
- box-shadow: 0 0 8px #10b981;
107
- animation: pulse 2s infinite;
136
+ .titlebar-drag-space {
137
+ app-region: drag;
138
+ -webkit-app-region: drag;
139
+ align-self: stretch;
140
+ min-width: 0;
108
141
  }
109
142
 
110
- @keyframes pulse {
111
- 0% {
112
- box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4);
113
- }
114
-
115
- 70% {
116
- box-shadow: 0 0 0 6px rgba(16, 185, 129, 0);
117
- }
118
-
119
- 100% {
120
- box-shadow: 0 0 0 0 rgba(16, 185, 129, 0);
121
- }
143
+ .app-logo {
144
+ width: 22px;
145
+ height: 22px;
146
+ flex: 0 0 22px;
147
+ object-fit: contain;
148
+ border-radius: 6px;
149
+ user-select: none;
150
+ -webkit-user-drag: none;
151
+ filter: none;
122
152
  }
123
153
 
124
154
  h1 {
125
- font-size: 1.1rem;
155
+ color: var(--text-main);
156
+ font-size: 0.82rem;
126
157
  font-weight: 500;
127
- letter-spacing: 0.5px;
128
- background: linear-gradient(90deg, #e2e8f0, #8b5cf6);
129
- background-clip: text;
130
- -webkit-background-clip: text;
131
- -webkit-text-fill-color: transparent;
158
+ letter-spacing: 0;
159
+ background: none;
160
+ background-clip: initial;
161
+ -webkit-background-clip: initial;
162
+ -webkit-text-fill-color: currentColor;
132
163
  }
133
164
 
134
165
  .header-actions,
135
166
  .header-utility,
136
167
  .window-controls {
168
+ app-region: no-drag;
137
169
  -webkit-app-region: no-drag;
138
170
  display: flex;
139
171
  align-items: center;
@@ -142,10 +174,10 @@ h1 {
142
174
 
143
175
  .header-actions {
144
176
  justify-content: center;
145
- padding: 4px;
146
- border: 1px solid rgba(255, 255, 255, 0.08);
147
- border-radius: 14px;
148
- background: rgba(255, 255, 255, 0.035);
177
+ padding: 0;
178
+ border: 0;
179
+ border-radius: 0;
180
+ background: transparent;
149
181
  }
150
182
 
151
183
  .header-utility {
@@ -165,20 +197,21 @@ h1 {
165
197
  .clear-btn,
166
198
  .settings-btn {
167
199
  -webkit-app-region: no-drag;
200
+ app-region: no-drag;
168
201
  min-width: 0;
169
- height: 36px;
202
+ height: 28px;
170
203
  border: 1px solid transparent;
171
204
  background: transparent;
172
205
  color: var(--text-muted);
173
206
  cursor: pointer;
174
- border-radius: 10px;
207
+ border-radius: 6px;
175
208
  display: inline-flex;
176
209
  align-items: center;
177
210
  justify-content: center;
178
- gap: 7px;
179
- padding: 0 11px;
180
- font-size: 0.78rem;
181
- font-weight: 600;
211
+ gap: 6px;
212
+ padding: 0 8px;
213
+ font-size: 0.72rem;
214
+ font-weight: 500;
182
215
  line-height: 1;
183
216
  white-space: nowrap;
184
217
  transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease;
@@ -198,14 +231,15 @@ h1 {
198
231
  .maximize-btn,
199
232
  .minimize-btn {
200
233
  -webkit-app-region: no-drag;
234
+ app-region: no-drag;
201
235
  background: transparent;
202
236
  border: none;
203
237
  color: var(--text-muted);
204
238
  cursor: pointer;
205
239
  width: 34px;
206
- height: 34px;
240
+ height: 28px;
207
241
  padding: 0;
208
- border-radius: 9px;
242
+ border-radius: 4px;
209
243
  display: flex;
210
244
  align-items: center;
211
245
  justify-content: center;
@@ -222,6 +256,73 @@ h1 {
222
256
  color: #ef4444;
223
257
  }
224
258
 
259
+ .startup-loading {
260
+ position: absolute;
261
+ inset: 34px 0 0;
262
+ z-index: 100;
263
+ display: grid;
264
+ place-items: center;
265
+ background: var(--bg-gradient);
266
+ color: var(--text-muted);
267
+ opacity: 1;
268
+ visibility: visible;
269
+ transition: opacity 0.32s ease, visibility 0.32s ease;
270
+ }
271
+
272
+ .startup-loading.is-hidden {
273
+ opacity: 0;
274
+ visibility: hidden;
275
+ pointer-events: none;
276
+ }
277
+
278
+ .startup-loading-content {
279
+ display: grid;
280
+ justify-items: center;
281
+ gap: 16px;
282
+ transform: translateY(-10px);
283
+ }
284
+
285
+ .startup-loading-dots {
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 9px;
289
+ }
290
+
291
+ .startup-loading-dots span {
292
+ width: 8px;
293
+ height: 8px;
294
+ border-radius: 50%;
295
+ background: var(--accent);
296
+ opacity: 0.35;
297
+ animation: startupDotPulse 1.15s ease-in-out infinite;
298
+ }
299
+
300
+ .startup-loading-dots span:nth-child(2) {
301
+ animation-delay: 0.16s;
302
+ }
303
+
304
+ .startup-loading-dots span:nth-child(3) {
305
+ animation-delay: 0.32s;
306
+ }
307
+
308
+ .startup-loading-text {
309
+ font-size: 0.82rem;
310
+ letter-spacing: 0.02em;
311
+ }
312
+
313
+ @keyframes startupDotPulse {
314
+ 0%,
315
+ 100% {
316
+ opacity: 0.28;
317
+ transform: scale(0.86);
318
+ }
319
+
320
+ 45% {
321
+ opacity: 1;
322
+ transform: scale(1.06);
323
+ }
324
+ }
325
+
225
326
  .toggle-model-btn:hover {
226
327
  background: rgba(139, 92, 246, 0.15);
227
328
  border-color: rgba(139, 92, 246, 0.2);
@@ -410,7 +511,9 @@ h1 {
410
511
  z-index: 3;
411
512
  pointer-events: none;
412
513
  opacity: 0;
413
- transition: opacity 0.2s ease;
514
+ transform: scale(var(--model-zone-scale, 1));
515
+ transform-origin: 50% 58%;
516
+ transition: opacity 0.2s ease, transform 0.16s ease;
414
517
  }
415
518
 
416
519
  .model-shell.show-interaction-guide .interaction-guide {
@@ -443,51 +546,51 @@ h1 {
443
546
 
444
547
  .zone-head {
445
548
  left: 34%;
446
- top: 25.5%;
549
+ top: 20.5%;
447
550
  width: 32%;
448
- height: 15%;
551
+ height: 15.5%;
449
552
  border-radius: 48% 48% 42% 42%;
450
553
  }
451
554
 
452
555
  .zone-face {
453
- left: 38%;
454
- top: 40%;
455
- width: 24%;
456
- height: 11.5%;
556
+ left: 36%;
557
+ top: 37.5%;
558
+ width: 28%;
559
+ height: 12%;
457
560
  border-radius: 50%;
458
561
  background: rgba(244, 114, 182, 0.1);
459
562
  border-color: rgba(244, 114, 182, 0.5);
460
563
  }
461
564
 
462
565
  .zone-left-hand {
463
- left: 22%;
464
- top: 68%;
465
- width: 20%;
566
+ left: 14%;
567
+ top: 70%;
568
+ width: 22%;
466
569
  height: 16%;
467
570
  border-radius: 48% 42% 56% 44%;
468
571
  }
469
572
 
470
573
  .zone-right-hand {
471
- left: 61%;
472
- top: 68%;
473
- width: 19%;
474
- height: 16%;
574
+ left: 65%;
575
+ top: 69%;
576
+ width: 23%;
577
+ height: 17%;
475
578
  border-radius: 42% 54% 44% 56%;
476
579
  }
477
580
 
478
581
  .zone-body {
479
- left: 37%;
480
- top: 55.5%;
582
+ left: 36%;
583
+ top: 53%;
481
584
  width: 29%;
482
- height: 14%;
585
+ height: 14.5%;
483
586
  border-radius: 38% 38% 48% 48%;
484
587
  }
485
588
 
486
589
  .zone-lower {
487
- left: 38%;
488
- top: 77%;
590
+ left: 34%;
591
+ top: 74%;
489
592
  width: 30%;
490
- height: 23%;
593
+ height: 24%;
491
594
  border-radius: 46% 46% 24% 24%;
492
595
  background: rgba(251, 191, 36, 0.08);
493
596
  border-color: rgba(251, 191, 36, 0.45);
@@ -502,6 +605,141 @@ h1 {
502
605
  transition: opacity 0.6s ease-out;
503
606
  }
504
607
 
608
+ .model-activity-badge {
609
+ position: absolute;
610
+ top: 14px;
611
+ right: 14px;
612
+ z-index: 4;
613
+ height: 28px;
614
+ display: inline-flex;
615
+ align-items: center;
616
+ gap: 7px;
617
+ padding: 0 10px;
618
+ border: 1px solid rgba(255, 255, 255, 0.08);
619
+ border-radius: 999px;
620
+ background: rgba(18, 18, 22, 0.72);
621
+ color: var(--text-main);
622
+ font-size: 0.72rem;
623
+ line-height: 1;
624
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.18);
625
+ backdrop-filter: blur(12px);
626
+ pointer-events: none;
627
+ }
628
+
629
+ .model-panel-controls {
630
+ position: absolute;
631
+ left: 14px;
632
+ top: 14px;
633
+ z-index: 5;
634
+ display: flex;
635
+ align-items: center;
636
+ gap: 6px;
637
+ padding: 5px;
638
+ border: 1px solid rgba(255, 255, 255, 0.08);
639
+ border-radius: 8px;
640
+ background: rgba(18, 18, 22, 0.68);
641
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.16);
642
+ backdrop-filter: blur(12px);
643
+ }
644
+
645
+ .model-panel-control {
646
+ width: 28px;
647
+ height: 28px;
648
+ display: inline-flex;
649
+ align-items: center;
650
+ justify-content: center;
651
+ border: 0;
652
+ border-radius: 6px;
653
+ background: transparent;
654
+ color: var(--text-soft);
655
+ cursor: pointer;
656
+ -webkit-app-region: no-drag;
657
+ transition: background 0.16s ease, color 0.16s ease;
658
+ }
659
+
660
+ .model-panel-control:hover,
661
+ .model-panel-control.is-active {
662
+ background: var(--surface-strong);
663
+ color: var(--text-main);
664
+ }
665
+
666
+ .model-scale-control {
667
+ height: 28px;
668
+ display: inline-flex;
669
+ align-items: center;
670
+ gap: 7px;
671
+ padding: 0 6px;
672
+ color: var(--text-soft);
673
+ border-radius: 6px;
674
+ }
675
+
676
+ .model-scale-control:hover {
677
+ background: rgba(255, 255, 255, 0.045);
678
+ color: var(--text-main);
679
+ }
680
+
681
+ .model-scale-control input {
682
+ width: 84px;
683
+ accent-color: var(--accent);
684
+ }
685
+
686
+ .model-scale-value {
687
+ min-width: 38px;
688
+ color: var(--text-main);
689
+ font-size: 0.68rem;
690
+ line-height: 1;
691
+ text-align: right;
692
+ font-variant-numeric: tabular-nums;
693
+ }
694
+
695
+ .model-scale-reset {
696
+ width: 22px;
697
+ height: 22px;
698
+ display: inline-flex;
699
+ align-items: center;
700
+ justify-content: center;
701
+ border: 0;
702
+ border-radius: 5px;
703
+ background: transparent;
704
+ color: var(--text-soft);
705
+ cursor: pointer;
706
+ }
707
+
708
+ .model-scale-reset:hover {
709
+ background: var(--surface-strong);
710
+ color: var(--text-main);
711
+ }
712
+
713
+ .layout-preset-group {
714
+ display: inline-flex;
715
+ align-items: center;
716
+ gap: 2px;
717
+ margin-left: 2px;
718
+ padding-left: 6px;
719
+ border-left: 1px solid rgba(255, 255, 255, 0.08);
720
+ }
721
+
722
+ .layout-preset-btn {
723
+ width: 26px;
724
+ height: 26px;
725
+ display: inline-flex;
726
+ align-items: center;
727
+ justify-content: center;
728
+ border: 0;
729
+ border-radius: 6px;
730
+ background: transparent;
731
+ color: var(--text-muted);
732
+ cursor: pointer;
733
+ -webkit-app-region: no-drag;
734
+ transition: background 0.16s ease, color 0.16s ease;
735
+ }
736
+
737
+ .layout-preset-btn:hover,
738
+ .layout-preset-btn.is-active {
739
+ background: var(--surface-strong);
740
+ color: var(--text-main);
741
+ }
742
+
505
743
  .model-shell.is-live2d-ready .model-placeholder {
506
744
  opacity: 0 !important;
507
745
  pointer-events: none;
@@ -664,6 +902,7 @@ h1 {
664
902
  align-items: center;
665
903
  gap: 8px;
666
904
  flex-wrap: wrap;
905
+ position: relative;
667
906
  }
668
907
 
669
908
  .provider-badge {
@@ -671,8 +910,79 @@ h1 {
671
910
  overflow: hidden;
672
911
  text-overflow: ellipsis;
673
912
  white-space: nowrap;
913
+ border: 0;
914
+ background: transparent;
674
915
  color: var(--accent);
675
916
  font-weight: 600;
917
+ font: inherit;
918
+ line-height: 1.2;
919
+ padding: 0;
920
+ cursor: pointer;
921
+ }
922
+
923
+ .provider-badge:hover,
924
+ .provider-badge.is-open {
925
+ color: var(--accent-hover);
926
+ text-decoration: underline;
927
+ text-underline-offset: 2px;
928
+ }
929
+
930
+ .provider-popover {
931
+ position: absolute;
932
+ left: 6px;
933
+ top: 20px;
934
+ z-index: 20;
935
+ width: min(280px, calc(100vw - 48px));
936
+ padding: 10px;
937
+ border: 1px solid var(--border);
938
+ border-radius: 8px;
939
+ background: var(--panel-raised);
940
+ color: var(--text-main);
941
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.32);
942
+ backdrop-filter: var(--glass-blur);
943
+ -webkit-backdrop-filter: var(--glass-blur);
944
+ opacity: 1;
945
+ }
946
+
947
+ .provider-popover-title {
948
+ color: var(--text-main);
949
+ font-size: 0.78rem;
950
+ font-weight: 700;
951
+ margin-bottom: 8px;
952
+ }
953
+
954
+ .provider-popover-row {
955
+ display: flex;
956
+ justify-content: space-between;
957
+ gap: 14px;
958
+ padding: 5px 0;
959
+ color: var(--text-muted);
960
+ font-size: 0.72rem;
961
+ line-height: 1.25;
962
+ }
963
+
964
+ .provider-popover-row strong {
965
+ color: var(--text-main);
966
+ font-weight: 600;
967
+ text-align: right;
968
+ overflow-wrap: anywhere;
969
+ }
970
+
971
+ .provider-popover-action {
972
+ width: 100%;
973
+ height: 30px;
974
+ margin-top: 8px;
975
+ border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent);
976
+ border-radius: 6px;
977
+ background: color-mix(in srgb, var(--accent) 14%, transparent);
978
+ color: var(--text-main);
979
+ font: inherit;
980
+ font-size: 0.74rem;
981
+ cursor: pointer;
982
+ }
983
+
984
+ .provider-popover-action:hover {
985
+ background: color-mix(in srgb, var(--accent) 24%, transparent);
676
986
  }
677
987
 
678
988
  @keyframes messagePopIn {
@@ -915,59 +1225,250 @@ h1 {
915
1225
  gap: 8px;
916
1226
  }
917
1227
 
918
- /* Smart Context Toggle */
919
- .smart-context-bar {
920
- display: flex;
1228
+ .action-card-icon {
921
1229
  align-items: center;
922
- gap: 8px;
923
- padding: 4px 6px;
924
- margin-bottom: 8px;
1230
+ display: inline-flex;
1231
+ flex: 0 0 22px;
1232
+ font-size: 1rem;
1233
+ justify-content: center;
1234
+ line-height: 1;
925
1235
  }
926
1236
 
927
- .smart-context-label {
928
- font-size: 0.85rem;
929
- color: var(--text-main);
930
- opacity: 0.9;
931
- font-weight: 500;
1237
+ .action-card-content {
1238
+ display: grid;
1239
+ gap: 2px;
1240
+ min-width: 0;
932
1241
  }
933
1242
 
934
- .toggle-switch {
935
- position: relative;
936
- display: inline-block;
937
- width: 34px;
938
- height: 20px;
1243
+ .action-card-title {
1244
+ color: var(--text-main);
1245
+ font-weight: 700;
939
1246
  }
940
1247
 
941
- .toggle-switch input {
942
- opacity: 0;
943
- width: 0;
944
- height: 0;
1248
+ .action-card-detail {
1249
+ color: var(--text-muted);
1250
+ font-size: 0.78rem;
1251
+ overflow-wrap: anywhere;
945
1252
  }
946
1253
 
947
- .slider {
948
- position: absolute;
949
- cursor: pointer;
950
- top: 0; left: 0; right: 0; bottom: 0;
951
- background-color: rgba(255, 255, 255, 0.2);
952
- transition: .4s;
1254
+ .approval-card {
1255
+ align-items: stretch;
1256
+ flex-direction: column;
1257
+ background: rgba(245, 158, 11, 0.12);
1258
+ border-color: rgba(245, 158, 11, 0.38);
953
1259
  }
954
1260
 
955
- .slider:before {
956
- position: absolute;
957
- content: "";
958
- height: 14px;
959
- width: 14px;
960
- left: 3px;
961
- bottom: 3px;
962
- background-color: white;
963
- transition: .4s;
1261
+ .approval-card[data-tier="dangerous"] {
1262
+ background: rgba(239, 68, 68, 0.12);
1263
+ border-color: rgba(239, 68, 68, 0.42);
964
1264
  }
965
1265
 
966
- input:checked + .slider {
967
- background-color: var(--accent);
1266
+ .approval-card-content {
1267
+ display: grid;
1268
+ gap: 4px;
968
1269
  }
969
1270
 
970
- input:checked + .slider:before {
1271
+ .approval-card-title {
1272
+ color: var(--text-main);
1273
+ font-weight: 700;
1274
+ }
1275
+
1276
+ .approval-card-body {
1277
+ color: var(--text-main);
1278
+ overflow-wrap: anywhere;
1279
+ }
1280
+
1281
+ .approval-card-reason {
1282
+ color: var(--text-muted);
1283
+ font-size: 0.78rem;
1284
+ }
1285
+
1286
+ .approval-card-actions {
1287
+ display: flex;
1288
+ flex-wrap: wrap;
1289
+ gap: 8px;
1290
+ margin-top: 6px;
1291
+ }
1292
+
1293
+ .approval-btn {
1294
+ border: 1px solid rgba(255, 255, 255, 0.14);
1295
+ border-radius: 6px;
1296
+ color: var(--text-main);
1297
+ cursor: pointer;
1298
+ font-size: 0.82rem;
1299
+ font-weight: 700;
1300
+ padding: 7px 10px;
1301
+ }
1302
+
1303
+ .approval-btn:disabled {
1304
+ cursor: default;
1305
+ opacity: 0.6;
1306
+ }
1307
+
1308
+ .approval-btn-approve {
1309
+ background: rgba(245, 158, 11, 0.28);
1310
+ }
1311
+
1312
+ .approval-card[data-tier="dangerous"] .approval-btn-approve {
1313
+ background: rgba(239, 68, 68, 0.28);
1314
+ }
1315
+
1316
+ .approval-btn-cancel {
1317
+ background: rgba(255, 255, 255, 0.08);
1318
+ }
1319
+
1320
+ .agent-activity-message {
1321
+ margin-top: -2px;
1322
+ }
1323
+
1324
+ .agent-activity-card {
1325
+ background: rgba(15, 23, 42, 0.46);
1326
+ border: 1px solid rgba(148, 163, 184, 0.18);
1327
+ border-radius: 8px;
1328
+ color: var(--text-main);
1329
+ max-width: min(520px, 100%);
1330
+ padding: 10px 12px;
1331
+ }
1332
+
1333
+ .agent-activity-header {
1334
+ align-items: center;
1335
+ display: flex;
1336
+ font-size: 0.78rem;
1337
+ font-weight: 700;
1338
+ justify-content: space-between;
1339
+ margin-bottom: 8px;
1340
+ }
1341
+
1342
+ .agent-activity-status {
1343
+ border: 1px solid rgba(139, 92, 246, 0.28);
1344
+ border-radius: 999px;
1345
+ color: var(--accent);
1346
+ font-size: 0.68rem;
1347
+ padding: 2px 7px;
1348
+ }
1349
+
1350
+ .agent-activity-status[data-state="done"] {
1351
+ border-color: rgba(16, 185, 129, 0.3);
1352
+ color: #34d399;
1353
+ }
1354
+
1355
+ .agent-activity-status[data-state="error"] {
1356
+ border-color: rgba(239, 68, 68, 0.34);
1357
+ color: #f87171;
1358
+ }
1359
+
1360
+ .agent-activity-status[data-state="cancelled"] {
1361
+ border-color: rgba(148, 163, 184, 0.28);
1362
+ color: var(--text-muted);
1363
+ }
1364
+
1365
+ .agent-activity-list {
1366
+ display: grid;
1367
+ gap: 6px;
1368
+ }
1369
+
1370
+ .agent-activity-item {
1371
+ align-items: start;
1372
+ color: var(--text-soft);
1373
+ display: grid;
1374
+ font-size: 0.76rem;
1375
+ gap: 8px;
1376
+ grid-template-columns: 9px minmax(0, 1fr);
1377
+ }
1378
+
1379
+ .agent-activity-dot {
1380
+ background: var(--accent);
1381
+ border-radius: 50%;
1382
+ height: 7px;
1383
+ margin-top: 5px;
1384
+ width: 7px;
1385
+ }
1386
+
1387
+ .agent-activity-item[data-state="done"] .agent-activity-dot {
1388
+ background: #34d399;
1389
+ }
1390
+
1391
+ .agent-activity-item[data-state="error"] .agent-activity-dot {
1392
+ background: #f87171;
1393
+ }
1394
+
1395
+ .agent-activity-item[data-state="skipped"] .agent-activity-dot,
1396
+ .agent-activity-item[data-state="cancelled"] .agent-activity-dot {
1397
+ background: rgba(148, 163, 184, 0.8);
1398
+ }
1399
+
1400
+ .agent-activity-item[data-state="approval"] .agent-activity-dot {
1401
+ background: #f59e0b;
1402
+ }
1403
+
1404
+ .agent-activity-text {
1405
+ overflow-wrap: anywhere;
1406
+ }
1407
+
1408
+ /* Smart Context Toggle */
1409
+ .smart-context-bar {
1410
+ display: flex;
1411
+ align-items: center;
1412
+ flex-wrap: wrap;
1413
+ gap: 12px;
1414
+ padding: 4px 6px;
1415
+ margin-bottom: 8px;
1416
+ }
1417
+
1418
+ .smart-context-control {
1419
+ align-items: center;
1420
+ display: inline-flex;
1421
+ gap: 8px;
1422
+ }
1423
+
1424
+ .smart-context-control.is-active .smart-context-label {
1425
+ color: var(--accent);
1426
+ }
1427
+
1428
+ .smart-context-label {
1429
+ font-size: 0.85rem;
1430
+ color: var(--text-main);
1431
+ opacity: 0.9;
1432
+ font-weight: 500;
1433
+ }
1434
+
1435
+ .toggle-switch {
1436
+ position: relative;
1437
+ display: inline-block;
1438
+ width: 34px;
1439
+ height: 20px;
1440
+ }
1441
+
1442
+ .toggle-switch input {
1443
+ opacity: 0;
1444
+ width: 0;
1445
+ height: 0;
1446
+ }
1447
+
1448
+ .slider {
1449
+ position: absolute;
1450
+ cursor: pointer;
1451
+ top: 0; left: 0; right: 0; bottom: 0;
1452
+ background-color: rgba(255, 255, 255, 0.2);
1453
+ transition: .4s;
1454
+ }
1455
+
1456
+ .slider:before {
1457
+ position: absolute;
1458
+ content: "";
1459
+ height: 14px;
1460
+ width: 14px;
1461
+ left: 3px;
1462
+ bottom: 3px;
1463
+ background-color: white;
1464
+ transition: .4s;
1465
+ }
1466
+
1467
+ input:checked + .slider {
1468
+ background-color: var(--accent);
1469
+ }
1470
+
1471
+ input:checked + .slider:before {
971
1472
  transform: translateX(14px);
972
1473
  }
973
1474
 
@@ -1096,54 +1597,980 @@ input:checked + .slider:before {
1096
1597
  transform: scale(0.97);
1097
1598
  }
1098
1599
 
1099
- @media (max-width: 760px) {
1100
- .drag-region {
1101
- grid-template-columns: auto 1fr auto;
1102
- gap: 8px;
1103
- padding: 9px 10px 9px 12px;
1104
- }
1600
+ /* Antigravity-inspired main shell */
1601
+ .app-body {
1602
+ --sidebar-expanded-width: 264px;
1603
+ --sidebar-collapsed-width: 56px;
1604
+ --sidebar-content-gap: 10px;
1605
+ flex: 1;
1606
+ min-height: 0;
1607
+ display: grid;
1608
+ grid-template-columns: minmax(0, 1fr);
1609
+ background: var(--bg-gradient);
1610
+ position: relative;
1611
+ }
1105
1612
 
1106
- .header-content h1 {
1107
- display: none;
1108
- }
1613
+ .sidebar-toggle {
1614
+ position: absolute;
1615
+ top: 10px;
1616
+ left: 214px;
1617
+ z-index: 12;
1618
+ width: 40px;
1619
+ height: 34px;
1620
+ display: flex;
1621
+ align-items: center;
1622
+ justify-content: center;
1623
+ border: 1px solid var(--border-light);
1624
+ border-radius: 6px;
1625
+ background: var(--panel-raised);
1626
+ color: var(--text-soft);
1627
+ cursor: pointer;
1628
+ -webkit-app-region: no-drag;
1629
+ transition: left 0.22s ease, background 0.16s ease, color 0.16s ease, border-color 0.16s ease;
1630
+ }
1109
1631
 
1110
- .header-actions {
1111
- justify-content: flex-start;
1112
- overflow: hidden;
1113
- }
1632
+ .sidebar-toggle:hover {
1633
+ background: var(--surface-strong);
1634
+ color: var(--text-main);
1635
+ border-color: rgba(255, 255, 255, 0.16);
1636
+ }
1114
1637
 
1115
- .header-utility {
1116
- display: none;
1117
- }
1638
+ .app-body.sidebar-collapsed .sidebar-toggle {
1639
+ left: 8px;
1640
+ }
1118
1641
 
1119
- .toggle-model-btn,
1120
- .change-expression-btn,
1121
- .accessory-cycle-btn,
1122
- .toggle-interaction-btn,
1123
- .interaction-guide-btn {
1124
- width: 34px;
1125
- padding: 0;
1126
- }
1642
+ .app-body.sidebar-collapsed .sidebar-toggle-icon {
1643
+ transform: rotate(180deg);
1644
+ }
1127
1645
 
1128
- .toggle-model-btn span,
1129
- .change-expression-btn span,
1130
- .accessory-cycle-btn span,
1131
- .toggle-interaction-btn span,
1132
- .interaction-guide-btn span {
1133
- display: none;
1134
- }
1646
+ .workspace-sidebar {
1647
+ position: absolute;
1648
+ inset: 0 auto 0 0;
1649
+ z-index: 11;
1650
+ width: 264px;
1651
+ display: flex;
1652
+ flex-direction: column;
1653
+ min-width: 0;
1654
+ padding: 52px 10px 12px 14px;
1655
+ background: var(--chrome-bg);
1656
+ backdrop-filter: var(--glass-blur);
1657
+ -webkit-backdrop-filter: var(--glass-blur);
1658
+ border-right: 1px solid var(--border);
1659
+ color: var(--text-muted);
1660
+ overflow: hidden;
1661
+ transition: width 0.22s ease, padding 0.22s ease, opacity 0.18s ease, transform 0.22s ease;
1662
+ }
1135
1663
 
1136
- .assistant-workspace {
1137
- padding: 12px;
1138
- gap: 12px;
1139
- }
1664
+ .app-body.sidebar-collapsed .workspace-sidebar {
1665
+ width: 56px;
1666
+ padding: 52px 8px 12px;
1667
+ opacity: 1;
1668
+ pointer-events: auto;
1669
+ transform: translateX(0);
1670
+ }
1140
1671
 
1141
- .model-stage {
1142
- display: none;
1143
- }
1672
+ .workspace-sidebar button {
1673
+ font: inherit;
1674
+ -webkit-app-region: no-drag;
1675
+ }
1144
1676
 
1145
- .conversation-panel {
1146
- flex: 1;
1147
- min-width: 0;
1677
+ .sidebar-new-chat,
1678
+ .sidebar-top-action,
1679
+ .sidebar-settings,
1680
+ .sidebar-bottom-actions .clear-btn,
1681
+ .sidebar-bottom-actions .settings-btn {
1682
+ width: 100%;
1683
+ min-width: 0;
1684
+ max-width: none;
1685
+ height: 32px;
1686
+ display: flex;
1687
+ align-items: center;
1688
+ justify-content: flex-start;
1689
+ gap: 9px;
1690
+ border: 0;
1691
+ border-radius: 6px;
1692
+ background: transparent;
1693
+ color: var(--text-soft);
1694
+ cursor: pointer;
1695
+ padding: 0 10px;
1696
+ text-align: left;
1697
+ transition: background 0.16s ease, color 0.16s ease;
1698
+ }
1699
+
1700
+ .sidebar-new-chat {
1701
+ background: var(--surface-strong);
1702
+ color: var(--text-main);
1703
+ margin-bottom: 4px;
1704
+ border: 1px solid var(--border);
1705
+ }
1706
+
1707
+ .sidebar-new-chat:hover,
1708
+ .sidebar-chat-btn:hover,
1709
+ .sidebar-chat-btn.is-active,
1710
+ .sidebar-top-action:hover,
1711
+ .sidebar-top-action.is-active,
1712
+ .sidebar-settings:hover,
1713
+ .sidebar-bottom-actions .clear-btn:hover,
1714
+ .sidebar-bottom-actions .settings-btn:hover {
1715
+ background: var(--surface-strong);
1716
+ color: var(--text-main);
1717
+ }
1718
+
1719
+ .sidebar-top-action {
1720
+ margin-bottom: 4px;
1721
+ }
1722
+
1723
+ .sidebar-top-action:last-of-type {
1724
+ margin-bottom: 12px;
1725
+ }
1726
+
1727
+ .sidebar-model-controls {
1728
+ display: grid;
1729
+ width: 100%;
1730
+ align-items: stretch;
1731
+ justify-items: stretch;
1732
+ justify-content: stretch;
1733
+ gap: 2px;
1734
+ padding: 10px 0 18px;
1735
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
1736
+ border-bottom: 1px solid rgba(255, 255, 255, 0.035);
1737
+ margin-bottom: 6px;
1738
+ }
1739
+
1740
+ .workspace-sidebar .toggle-model-btn,
1741
+ .workspace-sidebar .change-expression-btn,
1742
+ .workspace-sidebar .accessory-cycle-btn,
1743
+ .workspace-sidebar .toggle-interaction-btn,
1744
+ .workspace-sidebar .interaction-guide-btn {
1745
+ width: 100%;
1746
+ min-width: 0;
1747
+ max-width: none;
1748
+ height: 32px;
1749
+ justify-content: flex-start;
1750
+ padding: 0 10px;
1751
+ color: var(--text-soft);
1752
+ font-size: 1rem;
1753
+ font-weight: 400;
1754
+ gap: 9px;
1755
+ }
1756
+
1757
+ .workspace-sidebar .toggle-model-btn:hover,
1758
+ .workspace-sidebar .toggle-model-btn.active,
1759
+ .workspace-sidebar .change-expression-btn:hover,
1760
+ .workspace-sidebar .accessory-cycle-btn:hover,
1761
+ .workspace-sidebar .accessory-cycle-btn.active,
1762
+ .workspace-sidebar .toggle-interaction-btn:hover,
1763
+ .workspace-sidebar .toggle-interaction-btn.active,
1764
+ .workspace-sidebar .interaction-guide-btn:hover,
1765
+ .workspace-sidebar .interaction-guide-btn.active {
1766
+ background: var(--surface-strong);
1767
+ border-color: transparent;
1768
+ color: var(--text-main);
1769
+ }
1770
+
1771
+ .sidebar-section {
1772
+ flex: 1;
1773
+ min-height: 0;
1774
+ overflow: hidden;
1775
+ padding-top: 6px;
1776
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
1777
+ }
1778
+
1779
+ .sidebar-section-title {
1780
+ padding: 0 8px 12px;
1781
+ color: var(--text-muted);
1782
+ font-size: 0.72rem;
1783
+ }
1784
+
1785
+ .sidebar-project {
1786
+ height: 32px;
1787
+ display: flex;
1788
+ align-items: center;
1789
+ gap: 8px;
1790
+ padding: 0 8px;
1791
+ color: var(--text-muted);
1792
+ border-radius: 6px;
1793
+ font-size: 0.84rem;
1794
+ white-space: nowrap;
1795
+ overflow: hidden;
1796
+ text-overflow: ellipsis;
1797
+ border: 0;
1798
+ background: transparent;
1799
+ width: 100%;
1800
+ cursor: default;
1801
+ text-align: left;
1802
+ }
1803
+
1804
+ .app-body.sidebar-collapsed .sidebar-new-chat,
1805
+ .app-body.sidebar-collapsed .sidebar-top-action,
1806
+ .app-body.sidebar-collapsed .sidebar-settings,
1807
+ .app-body.sidebar-collapsed .sidebar-bottom-actions .clear-btn,
1808
+ .app-body.sidebar-collapsed .sidebar-bottom-actions .settings-btn,
1809
+ .app-body.sidebar-collapsed .workspace-sidebar .toggle-model-btn,
1810
+ .app-body.sidebar-collapsed .workspace-sidebar .change-expression-btn,
1811
+ .app-body.sidebar-collapsed .workspace-sidebar .accessory-cycle-btn,
1812
+ .app-body.sidebar-collapsed .workspace-sidebar .toggle-interaction-btn,
1813
+ .app-body.sidebar-collapsed .workspace-sidebar .interaction-guide-btn,
1814
+ .app-body.sidebar-collapsed .sidebar-project {
1815
+ width: 40px;
1816
+ height: 34px;
1817
+ justify-content: center;
1818
+ gap: 0;
1819
+ padding: 0;
1820
+ }
1821
+
1822
+ .app-body.sidebar-collapsed .sidebar-model-controls,
1823
+ .app-body.sidebar-collapsed .sidebar-bottom-actions {
1824
+ justify-items: center;
1825
+ }
1826
+
1827
+ .app-body.sidebar-collapsed .sidebar-section-title,
1828
+ .app-body.sidebar-collapsed .workspace-sidebar button > span:not([aria-hidden="true"]),
1829
+ .app-body.sidebar-collapsed .sidebar-project > span:not([aria-hidden="true"]):not(.mint-status-pill),
1830
+ .app-body.sidebar-collapsed .mint-status-label {
1831
+ display: none;
1832
+ }
1833
+
1834
+ .app-body.sidebar-collapsed .mint-status-pill {
1835
+ margin-left: 3px;
1836
+ padding: 0;
1837
+ background: transparent;
1838
+ }
1839
+
1840
+ .app-body.sidebar-collapsed .sidebar-project.active {
1841
+ gap: 4px;
1842
+ }
1843
+
1844
+ .mint-status-pill {
1845
+ margin-left: auto;
1846
+ min-width: 0;
1847
+ display: inline-flex;
1848
+ align-items: center;
1849
+ gap: 6px;
1850
+ padding: 3px 7px;
1851
+ border-radius: 999px;
1852
+ background: rgba(255, 255, 255, 0.055);
1853
+ color: var(--text-muted);
1854
+ font-size: 0.68rem;
1855
+ line-height: 1;
1856
+ flex-shrink: 0;
1857
+ }
1858
+
1859
+ .mint-status-dot {
1860
+ width: 7px;
1861
+ height: 7px;
1862
+ border-radius: 50%;
1863
+ background: #94a3b8;
1864
+ box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.12);
1865
+ flex: 0 0 auto;
1866
+ }
1867
+
1868
+ .mint-status-pill[data-state="listening"],
1869
+ .model-activity-badge[data-state="listening"] {
1870
+ color: #7dd3fc;
1871
+ }
1872
+
1873
+ .mint-status-pill[data-state="listening"] .mint-status-dot,
1874
+ .model-activity-badge[data-state="listening"] .mint-status-dot {
1875
+ background: #38bdf8;
1876
+ box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.16);
1877
+ animation: mintStatusPulse 1.2s ease-in-out infinite;
1878
+ }
1879
+
1880
+ .mint-status-pill[data-state="thinking"],
1881
+ .model-activity-badge[data-state="thinking"] {
1882
+ color: #c4b5fd;
1883
+ }
1884
+
1885
+ .mint-status-pill[data-state="thinking"] .mint-status-dot,
1886
+ .model-activity-badge[data-state="thinking"] .mint-status-dot {
1887
+ background: var(--accent);
1888
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);
1889
+ animation: mintStatusPulse 1s ease-in-out infinite;
1890
+ }
1891
+
1892
+ .mint-status-pill[data-state="speaking"],
1893
+ .model-activity-badge[data-state="speaking"] {
1894
+ color: #86efac;
1895
+ }
1896
+
1897
+ .mint-status-pill[data-state="speaking"] .mint-status-dot,
1898
+ .model-activity-badge[data-state="speaking"] .mint-status-dot {
1899
+ background: #22c55e;
1900
+ box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.16);
1901
+ animation: mintStatusPulse 0.9s ease-in-out infinite;
1902
+ }
1903
+
1904
+ .mint-status-pill[data-state="error"],
1905
+ .model-activity-badge[data-state="error"] {
1906
+ color: #fca5a5;
1907
+ }
1908
+
1909
+ .mint-status-pill[data-state="error"] .mint-status-dot,
1910
+ .model-activity-badge[data-state="error"] .mint-status-dot {
1911
+ background: #ef4444;
1912
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.16);
1913
+ }
1914
+
1915
+ @keyframes mintStatusPulse {
1916
+ 0%, 100% {
1917
+ transform: scale(1);
1918
+ opacity: 0.8;
1919
+ }
1920
+ 50% {
1921
+ transform: scale(1.35);
1922
+ opacity: 1;
1923
+ }
1924
+ }
1925
+
1926
+ .sidebar-project.active,
1927
+ .sidebar-project.is-active {
1928
+ background: color-mix(in srgb, var(--accent) 13%, transparent);
1929
+ color: var(--text-main);
1930
+ }
1931
+
1932
+ .sidebar-pictures-btn {
1933
+ cursor: pointer;
1934
+ }
1935
+
1936
+ .sidebar-pictures-btn:hover {
1937
+ background: var(--surface-strong);
1938
+ color: var(--text-main);
1939
+ }
1940
+
1941
+ .sidebar-settings {
1942
+ margin-top: auto;
1943
+ }
1944
+
1945
+ .sidebar-bottom-actions {
1946
+ display: grid;
1947
+ width: 100%;
1948
+ align-items: stretch;
1949
+ justify-items: stretch;
1950
+ gap: 2px;
1951
+ margin-top: auto;
1952
+ padding-top: 10px;
1953
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
1954
+ }
1955
+
1956
+ .assistant-workspace {
1957
+ display: grid;
1958
+ grid-template-columns: minmax(320px, 1fr) minmax(360px, 520px);
1959
+ gap: 18px;
1960
+ margin-left: var(--sidebar-expanded-width);
1961
+ padding: 0;
1962
+ background: var(--bg-gradient);
1963
+ position: relative;
1964
+ overflow: hidden;
1965
+ transition: grid-template-columns 0.58s cubic-bezier(0.16, 1, 0.3, 1),
1966
+ gap 0.58s cubic-bezier(0.16, 1, 0.3, 1),
1967
+ margin-left 0.22s ease,
1968
+ opacity 0.22s ease,
1969
+ transform 0.22s ease;
1970
+ }
1971
+
1972
+ .assistant-workspace.layout-chat {
1973
+ grid-template-columns: minmax(280px, 0.72fr) minmax(460px, 1.18fr);
1974
+ }
1975
+
1976
+ .app-body.sidebar-collapsed .assistant-workspace {
1977
+ margin-left: calc(var(--sidebar-collapsed-width) + var(--sidebar-content-gap));
1978
+ }
1979
+
1980
+ .app-body.pictures-open .assistant-workspace {
1981
+ opacity: 0;
1982
+ pointer-events: none;
1983
+ transform: translateY(8px) scale(0.995);
1984
+ }
1985
+
1986
+ .pictures-library {
1987
+ position: absolute;
1988
+ inset: 0;
1989
+ z-index: 5;
1990
+ min-height: 0;
1991
+ padding: 56px clamp(28px, 6vw, 92px) 34px;
1992
+ overflow: auto;
1993
+ background: var(--bg-gradient);
1994
+ color: var(--text-main);
1995
+ opacity: 0;
1996
+ pointer-events: none;
1997
+ transform: translateY(10px);
1998
+ transition: opacity 0.24s ease, transform 0.24s ease;
1999
+ }
2000
+
2001
+ .app-body.pictures-open .pictures-library {
2002
+ opacity: 1;
2003
+ pointer-events: auto;
2004
+ transform: translateY(0);
2005
+ }
2006
+
2007
+ .pictures-library[hidden] {
2008
+ display: block;
2009
+ opacity: 0;
2010
+ pointer-events: none;
2011
+ transform: translateY(10px);
2012
+ }
2013
+
2014
+ .pictures-header {
2015
+ display: flex;
2016
+ align-items: center;
2017
+ justify-content: space-between;
2018
+ gap: 18px;
2019
+ max-width: 1120px;
2020
+ margin: 0 auto 24px;
2021
+ padding-bottom: 18px;
2022
+ border-bottom: 1px solid var(--border);
2023
+ }
2024
+
2025
+ .pictures-kicker {
2026
+ color: var(--accent-hover);
2027
+ font-size: 0.72rem;
2028
+ font-weight: 600;
2029
+ letter-spacing: 0.08em;
2030
+ text-transform: uppercase;
2031
+ }
2032
+
2033
+ .pictures-header h2 {
2034
+ margin-top: 4px;
2035
+ font-size: 1.55rem;
2036
+ font-weight: 600;
2037
+ }
2038
+
2039
+ .pictures-close-btn {
2040
+ height: 34px;
2041
+ padding: 0 14px;
2042
+ border: 1px solid var(--border);
2043
+ border-radius: 8px;
2044
+ background: var(--surface-strong);
2045
+ color: var(--text-main);
2046
+ cursor: pointer;
2047
+ }
2048
+
2049
+ .pictures-grid {
2050
+ max-width: 1120px;
2051
+ margin: 0 auto;
2052
+ display: grid;
2053
+ grid-template-columns: repeat(auto-fill, minmax(174px, 1fr));
2054
+ gap: 14px;
2055
+ animation: picturesGridIn 0.28s ease both;
2056
+ }
2057
+
2058
+ .picture-card {
2059
+ position: relative;
2060
+ min-width: 0;
2061
+ overflow: hidden;
2062
+ border: 1px solid var(--border);
2063
+ border-radius: 10px;
2064
+ background: var(--surface-bg);
2065
+ box-shadow: 0 14px 36px rgba(0, 0, 0, 0.16);
2066
+ transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
2067
+ }
2068
+
2069
+ .picture-card:hover {
2070
+ transform: translateY(-2px);
2071
+ border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
2072
+ box-shadow: 0 20px 48px rgba(0, 0, 0, 0.22);
2073
+ }
2074
+
2075
+ .picture-card img {
2076
+ display: block;
2077
+ width: 100%;
2078
+ aspect-ratio: 4 / 3;
2079
+ object-fit: cover;
2080
+ background: var(--panel-soft);
2081
+ }
2082
+
2083
+ .picture-card-meta {
2084
+ min-height: 42px;
2085
+ padding: 9px 10px;
2086
+ color: var(--text-soft);
2087
+ font-size: 0.76rem;
2088
+ line-height: 1.35;
2089
+ white-space: nowrap;
2090
+ overflow: hidden;
2091
+ text-overflow: ellipsis;
2092
+ }
2093
+
2094
+ .pictures-empty {
2095
+ max-width: 360px;
2096
+ margin: 18vh auto 0;
2097
+ display: grid;
2098
+ justify-items: center;
2099
+ gap: 8px;
2100
+ color: var(--text-muted);
2101
+ text-align: center;
2102
+ }
2103
+
2104
+ @keyframes picturesGridIn {
2105
+ from {
2106
+ opacity: 0;
2107
+ transform: translateY(8px);
2108
+ }
2109
+ to {
2110
+ opacity: 1;
2111
+ transform: translateY(0);
2112
+ }
2113
+ }
2114
+
2115
+ .pictures-empty.is-hidden {
2116
+ display: none;
2117
+ }
2118
+
2119
+ .pictures-empty-icon {
2120
+ display: grid;
2121
+ place-items: center;
2122
+ width: 48px;
2123
+ height: 48px;
2124
+ border: 1px solid var(--border);
2125
+ border-radius: 12px;
2126
+ background: var(--surface-bg);
2127
+ color: var(--accent-hover);
2128
+ font-size: 1.2rem;
2129
+ }
2130
+
2131
+ .pictures-empty p {
2132
+ color: var(--text-main);
2133
+ font-weight: 600;
2134
+ }
2135
+
2136
+ .pictures-empty span {
2137
+ font-size: 0.82rem;
2138
+ line-height: 1.45;
2139
+ }
2140
+
2141
+ .assistant-workspace.model-hidden {
2142
+ grid-template-columns: minmax(0, 0fr) minmax(0, 1fr);
2143
+ gap: 0;
2144
+ padding: 0;
2145
+ }
2146
+
2147
+ .model-stage {
2148
+ min-width: 0;
2149
+ flex: 1 1 auto;
2150
+ padding: 44px 0 28px 28px;
2151
+ align-items: center;
2152
+ justify-content: center;
2153
+ overflow: hidden;
2154
+ opacity: 1;
2155
+ transform: translateX(0) scale(1);
2156
+ transition: opacity 0.42s ease,
2157
+ transform 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2158
+ padding 0.58s cubic-bezier(0.16, 1, 0.3, 1);
2159
+ }
2160
+
2161
+ .assistant-workspace.model-hidden .model-stage {
2162
+ opacity: 0;
2163
+ pointer-events: none;
2164
+ transform: translateX(-28px) scale(0.985);
2165
+ padding-left: 0;
2166
+ margin-right: 0;
2167
+ }
2168
+
2169
+ .model-shell {
2170
+ min-height: 0;
2171
+ width: 100%;
2172
+ height: 100%;
2173
+ background: var(--panel-soft);
2174
+ border: 1px solid rgba(255, 255, 255, 0.09);
2175
+ border-radius: 8px;
2176
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.025), 0 18px 52px rgba(0, 0, 0, 0.16);
2177
+ backdrop-filter: var(--glass-blur);
2178
+ -webkit-backdrop-filter: var(--glass-blur);
2179
+ }
2180
+
2181
+ .model-shell.model-bg-clear {
2182
+ background: rgba(0, 0, 0, 0.06);
2183
+ }
2184
+
2185
+ .model-shell.model-bg-grid {
2186
+ background:
2187
+ linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px),
2188
+ linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px),
2189
+ var(--panel-soft);
2190
+ background-size: 28px 28px;
2191
+ }
2192
+
2193
+ .model-shell.model-bg-stage {
2194
+ background:
2195
+ radial-gradient(circle at 50% 38%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 42%),
2196
+ linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(0, 0, 0, 0.08)),
2197
+ var(--panel-soft);
2198
+ }
2199
+
2200
+ .model-glow,
2201
+ .model-shadow {
2202
+ display: none;
2203
+ }
2204
+
2205
+ .conversation-panel {
2206
+ position: static;
2207
+ align-self: stretch;
2208
+ width: auto;
2209
+ min-width: 0;
2210
+ max-height: none;
2211
+ transform: none;
2212
+ flex: none;
2213
+ display: flex;
2214
+ flex-direction: column;
2215
+ padding: 44px 28px 24px 0;
2216
+ background: transparent;
2217
+ border: 0;
2218
+ border-radius: 0;
2219
+ box-shadow: none;
2220
+ backdrop-filter: none;
2221
+ -webkit-backdrop-filter: none;
2222
+ pointer-events: auto;
2223
+ transition: width 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2224
+ padding 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2225
+ transform 0.58s cubic-bezier(0.16, 1, 0.3, 1);
2226
+ }
2227
+
2228
+ .assistant-workspace.model-hidden .conversation-panel {
2229
+ position: relative;
2230
+ display: grid;
2231
+ grid-template-rows: minmax(0, 1fr) auto;
2232
+ width: min(640px, calc(100% - 48px));
2233
+ height: 100%;
2234
+ max-width: none;
2235
+ margin: 0 auto;
2236
+ padding: 56px 0 28px;
2237
+ grid-column: 1 / -1;
2238
+ }
2239
+
2240
+ .assistant-workspace.model-hidden .chat-container {
2241
+ padding: 0 8px 18px;
2242
+ overflow-y: auto;
2243
+ }
2244
+
2245
+ .assistant-workspace.model-hidden .message {
2246
+ max-width: 100%;
2247
+ }
2248
+
2249
+ .assistant-workspace.model-hidden .input-area {
2250
+ width: 100%;
2251
+ }
2252
+
2253
+ .chat-container {
2254
+ flex: 1;
2255
+ min-height: 0;
2256
+ max-height: none;
2257
+ padding: 0 4px 16px;
2258
+ gap: 10px;
2259
+ pointer-events: auto;
2260
+ }
2261
+
2262
+ .message {
2263
+ max-width: min(100%, 620px);
2264
+ animation: messagePopIn 0.22s ease forwards;
2265
+ }
2266
+
2267
+ .message-bubble {
2268
+ padding: 10px 12px;
2269
+ border-radius: 8px;
2270
+ font-size: 0.9rem;
2271
+ line-height: 1.48;
2272
+ box-shadow: none;
2273
+ backdrop-filter: var(--glass-blur);
2274
+ -webkit-backdrop-filter: var(--glass-blur);
2275
+ }
2276
+
2277
+ .ai-message .message-bubble,
2278
+ .typing-indicator {
2279
+ background: var(--surface-bg);
2280
+ border: 1px solid var(--border);
2281
+ border-radius: 8px;
2282
+ color: var(--text-main);
2283
+ backdrop-filter: none;
2284
+ -webkit-backdrop-filter: none;
2285
+ box-shadow: none;
2286
+ }
2287
+
2288
+ .user-message .message-bubble {
2289
+ background: linear-gradient(135deg, var(--surface-strong), color-mix(in srgb, var(--accent) 16%, var(--surface-strong)));
2290
+ border: 1px solid rgba(255, 255, 255, 0.08);
2291
+ border-radius: 8px;
2292
+ color: var(--text-main);
2293
+ box-shadow: none;
2294
+ }
2295
+
2296
+ .provider-badge {
2297
+ color: var(--accent-hover);
2298
+ }
2299
+
2300
+ .input-area {
2301
+ flex: 0 0 auto;
2302
+ padding: 0;
2303
+ background: transparent;
2304
+ border: 0;
2305
+ box-shadow: none;
2306
+ pointer-events: auto;
2307
+ }
2308
+
2309
+ .smart-context-bar {
2310
+ min-height: 24px;
2311
+ padding: 3px 10px 3px 14px;
2312
+ margin: 0;
2313
+ background: var(--input-bg);
2314
+ border: 1px solid var(--border);
2315
+ border-bottom: 0;
2316
+ border-radius: 14px 14px 0 0;
2317
+ display: flex;
2318
+ flex-wrap: wrap;
2319
+ gap: 10px;
2320
+ }
2321
+
2322
+ .smart-context-label {
2323
+ color: var(--text-soft);
2324
+ font-size: 0.76rem;
2325
+ font-weight: 400;
2326
+ }
2327
+
2328
+ .smart-context-label span {
2329
+ color: var(--text-muted);
2330
+ font-size: 0.68rem;
2331
+ }
2332
+
2333
+ .toggle-switch {
2334
+ width: 32px;
2335
+ height: 18px;
2336
+ }
2337
+
2338
+ .slider {
2339
+ background-color: var(--surface-strong);
2340
+ }
2341
+
2342
+ .slider:before {
2343
+ height: 14px;
2344
+ width: 14px;
2345
+ left: 2px;
2346
+ bottom: 2px;
2347
+ }
2348
+
2349
+ input:checked + .slider:before {
2350
+ transform: translateX(14px);
2351
+ }
2352
+
2353
+ #chat-form {
2354
+ min-height: 76px;
2355
+ display: grid;
2356
+ grid-template-columns: 36px minmax(0, 1fr) 36px 36px;
2357
+ grid-template-rows: minmax(28px, auto) 36px;
2358
+ align-items: end;
2359
+ gap: 8px;
2360
+ padding: 12px;
2361
+ background: var(--input-bg);
2362
+ border: 1px solid var(--border);
2363
+ border-radius: 14px;
2364
+ box-shadow: none;
2365
+ backdrop-filter: var(--glass-blur);
2366
+ -webkit-backdrop-filter: var(--glass-blur);
2367
+ }
2368
+
2369
+ .smart-context-bar + #chat-form {
2370
+ border-top-left-radius: 0;
2371
+ border-top-right-radius: 0;
2372
+ }
2373
+
2374
+ #chat-form:focus-within {
2375
+ border-color: rgba(255, 255, 255, 0.16);
2376
+ box-shadow: none;
2377
+ transform: none;
2378
+ }
2379
+
2380
+ #chat-input {
2381
+ grid-column: 1 / -1;
2382
+ grid-row: 1;
2383
+ align-self: start;
2384
+ padding: 8px 0;
2385
+ color: var(--text-main);
2386
+ font-size: 0.88rem;
2387
+ }
2388
+
2389
+ #chat-input::placeholder {
2390
+ color: var(--placeholder);
2391
+ opacity: 1;
2392
+ }
2393
+
2394
+ #send-btn,
2395
+ #mic-btn,
2396
+ #vision-btn {
2397
+ width: 36px;
2398
+ height: 36px;
2399
+ border-radius: 18px;
2400
+ background: var(--surface-strong);
2401
+ color: var(--text-soft);
2402
+ }
2403
+
2404
+ #vision-btn {
2405
+ grid-column: 1;
2406
+ grid-row: 2;
2407
+ }
2408
+
2409
+ .chat-provider-select {
2410
+ grid-column: 2;
2411
+ grid-row: 2;
2412
+ min-width: 0;
2413
+ width: fit-content;
2414
+ max-width: 100%;
2415
+ height: 36px;
2416
+ padding: 0 24px 0 6px;
2417
+ background: transparent;
2418
+ border: 0;
2419
+ border-radius: 8px;
2420
+ color: var(--text-soft);
2421
+ cursor: pointer;
2422
+ font-family: inherit;
2423
+ font-size: 0.78rem;
2424
+ outline: none;
2425
+ overflow: hidden;
2426
+ text-overflow: ellipsis;
2427
+ white-space: nowrap;
2428
+ -webkit-app-region: no-drag;
2429
+ }
2430
+
2431
+ .chat-provider-select:hover,
2432
+ .chat-provider-select:focus {
2433
+ background: var(--surface-strong);
2434
+ color: var(--text-main);
2435
+ }
2436
+
2437
+ .chat-provider-select:disabled {
2438
+ cursor: wait;
2439
+ opacity: 0.65;
2440
+ }
2441
+
2442
+ #mic-btn {
2443
+ grid-column: 3;
2444
+ grid-row: 2;
2445
+ }
2446
+
2447
+ #send-btn {
2448
+ grid-column: 4;
2449
+ grid-row: 2;
2450
+ }
2451
+
2452
+ #send-btn {
2453
+ background: linear-gradient(135deg, var(--accent), var(--accent-hover));
2454
+ color: white;
2455
+ box-shadow: 0 8px 18px color-mix(in srgb, var(--accent) 28%, transparent);
2456
+ }
2457
+
2458
+ #send-btn:hover,
2459
+ #mic-btn:hover,
2460
+ #vision-btn:hover {
2461
+ background: var(--panel-raised);
2462
+ transform: none;
2463
+ }
2464
+
2465
+ #send-btn:hover {
2466
+ background: var(--accent-hover);
2467
+ }
2468
+
2469
+ #vision-btn {
2470
+ border: 1px solid rgba(255, 255, 255, 0.08);
2471
+ }
2472
+
2473
+ .toggle-model-btn:hover,
2474
+ .toggle-model-btn.active,
2475
+ .change-expression-btn:hover,
2476
+ .accessory-cycle-btn:hover,
2477
+ .accessory-cycle-btn.active,
2478
+ .toggle-interaction-btn:hover,
2479
+ .toggle-interaction-btn.active,
2480
+ .interaction-guide-btn:hover,
2481
+ .interaction-guide-btn.active,
2482
+ .clear-btn:hover,
2483
+ .settings-btn:hover,
2484
+ .minimize-btn:hover,
2485
+ .maximize-btn:hover {
2486
+ background: var(--surface-strong);
2487
+ border-color: transparent;
2488
+ color: var(--text-main);
2489
+ }
2490
+
2491
+ .toggle-interaction-btn:not(.active) {
2492
+ color: #ff7b7b;
2493
+ }
2494
+
2495
+ .close-btn:hover {
2496
+ background: #3a2020;
2497
+ color: #ff8a8a;
2498
+ }
2499
+
2500
+ @media (max-width: 760px) {
2501
+ .drag-region {
2502
+ grid-template-columns: auto 1fr auto;
2503
+ gap: 8px;
2504
+ padding: 9px 10px 9px 12px;
2505
+ }
2506
+
2507
+ .header-content h1 {
2508
+ display: none;
2509
+ }
2510
+
2511
+ .header-actions {
2512
+ justify-content: flex-start;
2513
+ overflow: hidden;
2514
+ }
2515
+
2516
+ .header-utility {
2517
+ display: none;
2518
+ }
2519
+
2520
+ .toggle-model-btn,
2521
+ .change-expression-btn,
2522
+ .accessory-cycle-btn,
2523
+ .toggle-interaction-btn,
2524
+ .interaction-guide-btn {
2525
+ width: 34px;
2526
+ padding: 0;
2527
+ }
2528
+
2529
+ .toggle-model-btn span,
2530
+ .change-expression-btn span,
2531
+ .accessory-cycle-btn span,
2532
+ .toggle-interaction-btn span,
2533
+ .interaction-guide-btn span {
2534
+ display: none;
2535
+ }
2536
+
2537
+ .assistant-workspace {
2538
+ display: flex;
2539
+ margin-left: 0;
2540
+ padding: 12px;
2541
+ gap: 12px;
2542
+ }
2543
+
2544
+ .assistant-workspace.layout-chat {
2545
+ grid-template-columns: none;
2546
+ }
2547
+
2548
+ .app-body {
2549
+ grid-template-columns: 1fr;
2550
+ }
2551
+
2552
+ .sidebar-toggle {
2553
+ display: none;
2554
+ }
2555
+
2556
+ .workspace-sidebar {
2557
+ display: none;
2558
+ }
2559
+
2560
+ .model-stage {
2561
+ display: none;
2562
+ }
2563
+
2564
+ .conversation-panel {
2565
+ position: static;
2566
+ width: 100%;
2567
+ max-height: none;
2568
+ transform: none;
2569
+ flex: 1;
2570
+ min-width: 0;
2571
+ }
2572
+
2573
+ .chat-container {
2574
+ max-height: none;
1148
2575
  }
1149
2576
  }