@pheem49/mint 1.6.3 → 1.7.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.
Files changed (63) hide show
  1. package/Cargo.lock +3 -3
  2. package/Cargo.toml +1 -1
  3. package/README.md +82 -21
  4. package/assets/Mint_CLI.png +0 -0
  5. package/assets/Mint_Desktop.png +0 -0
  6. package/assets/Mint_Web.png +0 -0
  7. package/assets/Mint_WorkSpace.png +0 -0
  8. package/assets/Setting.png +0 -0
  9. package/assets/bridges.svg +4 -0
  10. package/assets/chat.svg +3 -0
  11. package/assets/code.svg +4 -0
  12. package/assets/features.svg +3 -0
  13. package/assets/imagegen.svg +5 -0
  14. package/assets/live2d.svg +6 -0
  15. package/assets/memory.svg +5 -0
  16. package/assets/screencapture.svg +4 -0
  17. package/assets/setup.svg +3 -0
  18. package/assets/tools.svg +4 -0
  19. package/bin/mint +0 -0
  20. package/crates/mint-cli/src/agent.rs +47 -15
  21. package/crates/mint-cli/src/main.rs +534 -7
  22. package/crates/mint-cli/src/onboard.rs +134 -1
  23. package/crates/mint-cli/src/setup.rs +173 -32
  24. package/crates/mint-core/src/api_server.rs +147 -3
  25. package/crates/mint-core/src/config.rs +22 -3
  26. package/crates/mint-core/src/image_gen.rs +895 -0
  27. package/crates/mint-core/src/lib.rs +4 -0
  28. package/crates/mint-core/src/memory.rs +27 -1
  29. package/crates/mint-core/src/orchestration.rs +1 -1
  30. package/crates/mint-core/src/plugins.rs +32 -0
  31. package/crates/mint-core/tests/memory_persistence.rs +28 -0
  32. package/package.json +1 -1
  33. package/src/bin/index.js +0 -0
  34. package/src/renderer/src/agentProgress.ts +39 -0
  35. package/src/renderer/src/components/ChatPanel.tsx +547 -47
  36. package/src/renderer/src/components/DashboardSidebar.tsx +12 -4
  37. package/src/renderer/src/components/ImageStudioPanel.tsx +638 -0
  38. package/src/renderer/src/components/MintDashboard.tsx +84 -31
  39. package/src/renderer/src/components/ModelPanel.tsx +2 -2
  40. package/src/renderer/src/components/PicturesLibrary.tsx +5 -1
  41. package/src/renderer/src/components/SettingsWindow.tsx +29 -20
  42. package/src/renderer/src/components/SpotlightWindow.tsx +8 -8
  43. package/src/renderer/src/components/WorkspacePanel.tsx +1 -1
  44. package/src/renderer/src/css/image-studio.css +722 -0
  45. package/src/renderer/src/css/settings.css +13 -3
  46. package/src/renderer/src/css/styles.css +245 -43
  47. package/src/renderer/src/index.css +152 -0
  48. package/src/renderer/src/tauri.ts +148 -0
  49. package/src/renderer/src-web/App.tsx +16 -1
  50. package/src/renderer/src-web/agentProgress.ts +39 -0
  51. package/src/renderer/src-web/components/ChatPanel.tsx +568 -46
  52. package/src/renderer/src-web/components/DashboardSidebar.tsx +10 -2
  53. package/src/renderer/src-web/components/ImageStudioPanel.tsx +638 -0
  54. package/src/renderer/src-web/components/MintDashboard.tsx +65 -19
  55. package/src/renderer/src-web/components/PicturesLibrary.tsx +5 -1
  56. package/src/renderer/src-web/components/SettingsWindow.tsx +29 -20
  57. package/src/renderer/src-web/css/image-studio.css +722 -0
  58. package/src/renderer/src-web/css/settings.css +14 -4
  59. package/src/renderer/src-web/css/styles.css +292 -44
  60. package/src/renderer/src-web/index.css +152 -0
  61. package/src/renderer/src-web/tauri.ts +149 -0
  62. package/src-tauri/src/lib.rs +65 -5
  63. package/src-tauri/tauri.conf.json +1 -1
@@ -255,7 +255,7 @@ h1 {
255
255
 
256
256
  .web-safe-notice {
257
257
  width: 100%;
258
- max-width: 624px;
258
+ max-width: 1000px;
259
259
  margin: 0 auto 18px;
260
260
  padding: 12px 14px;
261
261
  border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--border));
@@ -297,7 +297,7 @@ h1 {
297
297
  flex-direction: column;
298
298
  gap: 18px;
299
299
  width: 100%;
300
- max-width: 624px;
300
+ max-width: 1000px;
301
301
  margin: 0 auto;
302
302
  animation: fadeTab 0.18s ease;
303
303
  }
@@ -369,7 +369,7 @@ h1 {
369
369
 
370
370
  .form-grid.single {
371
371
  grid-template-columns: minmax(0, 1fr);
372
- max-width: 540px;
372
+ max-width: 100%;
373
373
  }
374
374
 
375
375
  .setting-row {
@@ -623,7 +623,7 @@ input:checked + .toggle-slider::before {
623
623
  .slider-stack {
624
624
  display: grid;
625
625
  gap: 16px;
626
- max-width: 660px;
626
+ max-width: 100%;
627
627
  }
628
628
 
629
629
  .slider-group {
@@ -1098,3 +1098,13 @@ kbd {
1098
1098
  grid-template-columns: minmax(0, 1fr);
1099
1099
  }
1100
1100
  }
1101
+
1102
+ .memory-field-container {
1103
+ display: flex;
1104
+ flex-direction: column;
1105
+ gap: 8px;
1106
+ width: 100%;
1107
+ align-items: flex-start;
1108
+ }
1109
+
1110
+
@@ -18,6 +18,16 @@
18
18
  --border-light: rgba(255, 255, 255, 0.11);
19
19
  --shadow: none;
20
20
  --glass-blur: none;
21
+ --status-listening: #7dd3fc;
22
+ --status-thinking: var(--accent);
23
+ --status-speaking: #22c55e;
24
+ --status-error: #ef4444;
25
+ --hover-delete: #fca5a5;
26
+ --hover-delete-bg: rgba(248, 113, 113, 0.12);
27
+ --hover-edit: #c7d2fe;
28
+ --hover-edit-bg: rgba(99, 102, 241, 0.12);
29
+ --close-btn-hover-bg: #3a2020;
30
+ --close-btn-hover-color: #ff8a8a;
21
31
  }
22
32
 
23
33
  [data-theme="light"] {
@@ -37,6 +47,16 @@
37
47
  --border: rgba(0, 0, 0, 0.06);
38
48
  --border-light: rgba(255, 255, 255, 0.6);
39
49
  --shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
50
+ --status-listening: #0284c7;
51
+ --status-thinking: var(--accent);
52
+ --status-speaking: #16a34a;
53
+ --status-error: #dc2626;
54
+ --hover-delete: #dc2626;
55
+ --hover-delete-bg: rgba(220, 38, 38, 0.08);
56
+ --hover-edit: #4f46e5;
57
+ --hover-edit-bg: rgba(79, 70, 229, 0.08);
58
+ --close-btn-hover-bg: #fee2e2;
59
+ --close-btn-hover-color: #dc2626;
40
60
  }
41
61
 
42
62
  [data-theme="midnight"] {
@@ -56,6 +76,16 @@
56
76
  --border: rgba(99, 102, 241, 0.16);
57
77
  --border-light: rgba(99, 102, 241, 0.26);
58
78
  --shadow: none;
79
+ --status-listening: #7dd3fc;
80
+ --status-thinking: var(--accent);
81
+ --status-speaking: #22c55e;
82
+ --status-error: #fca5a5;
83
+ --hover-delete: #fca5a5;
84
+ --hover-delete-bg: rgba(248, 113, 113, 0.12);
85
+ --hover-edit: #c7d2fe;
86
+ --hover-edit-bg: rgba(99, 102, 241, 0.12);
87
+ --close-btn-hover-bg: #3a2020;
88
+ --close-btn-hover-color: #ff8a8a;
59
89
  }
60
90
 
61
91
  * {
@@ -107,7 +137,6 @@ body {
107
137
 
108
138
  /* Header - Drag Region */
109
139
  .drag-region {
110
- app-region: no-drag;
111
140
  -webkit-app-region: no-drag;
112
141
  min-height: 34px;
113
142
  padding: 0 8px;
@@ -124,7 +153,6 @@ body {
124
153
  }
125
154
 
126
155
  .header-content {
127
- app-region: drag;
128
156
  -webkit-app-region: drag;
129
157
  display: flex;
130
158
  align-items: center;
@@ -134,7 +162,6 @@ body {
134
162
  }
135
163
 
136
164
  .titlebar-drag-space {
137
- app-region: drag;
138
165
  -webkit-app-region: drag;
139
166
  align-self: stretch;
140
167
  min-width: 0;
@@ -165,7 +192,6 @@ h1 {
165
192
  .header-actions,
166
193
  .header-utility,
167
194
  .window-controls {
168
- app-region: no-drag;
169
195
  -webkit-app-region: no-drag;
170
196
  display: flex;
171
197
  align-items: center;
@@ -197,7 +223,6 @@ h1 {
197
223
  .clear-btn,
198
224
  .settings-btn {
199
225
  -webkit-app-region: no-drag;
200
- app-region: no-drag;
201
226
  min-width: 0;
202
227
  height: 28px;
203
228
  border: 1px solid transparent;
@@ -231,7 +256,6 @@ h1 {
231
256
  .maximize-btn,
232
257
  .minimize-btn {
233
258
  -webkit-app-region: no-drag;
234
- app-region: no-drag;
235
259
  background: transparent;
236
260
  border: none;
237
261
  color: var(--text-muted);
@@ -382,7 +406,27 @@ h1 {
382
406
  .interaction-guide-btn.active {
383
407
  background: rgba(34, 211, 238, 0.22);
384
408
  border-color: rgba(34, 211, 238, 0.34);
385
- color: #67e8f9;
409
+ }
410
+
411
+ .picture-refresh-btn {
412
+ height: 28px;
413
+ min-width: 0;
414
+ padding: 0 8px;
415
+ display: inline-flex;
416
+ align-items: center;
417
+ justify-content: center;
418
+ gap: 8px;
419
+ border-radius: 6px;
420
+ background: transparent;
421
+ color: var(--text-muted);
422
+ border: 1px solid transparent;
423
+ cursor: pointer;
424
+ }
425
+
426
+ .picture-refresh-btn:hover {
427
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
428
+ border-color: color-mix(in srgb, var(--accent) 16%, transparent);
429
+ color: var(--accent);
386
430
  }
387
431
 
388
432
  .maximize-btn:hover {
@@ -805,6 +849,41 @@ h1 {
805
849
  transform: scaleX(1.2);
806
850
  }
807
851
 
852
+ /* Settings modal overlay (web) */
853
+ .settings-modal-overlay {
854
+ position: fixed;
855
+ inset: 0;
856
+ display: flex;
857
+ align-items: center;
858
+ justify-content: center;
859
+ background: rgba(0,0,0,0.45);
860
+ z-index: 80;
861
+ padding: 24px;
862
+ }
863
+
864
+ .settings-modal {
865
+ width: min(920px, 96vw);
866
+ max-height: 92vh;
867
+ overflow: hidden;
868
+ border-radius: 12px;
869
+ box-shadow: 0 30px 80px rgba(0,0,0,0.6);
870
+ }
871
+
872
+ /* When rendered inside modal, make settings-container adapt to modal size */
873
+ .settings-modal .settings-container {
874
+ height: auto !important;
875
+ width: 100% !important;
876
+ max-height: 92vh !important;
877
+ overflow: hidden !important;
878
+ border-radius: 12px !important;
879
+ }
880
+
881
+ /* Make settings content scroll internally */
882
+ .settings-modal .settings-content {
883
+ max-height: calc(92vh - 160px);
884
+ overflow-y: auto;
885
+ }
886
+
808
887
  @keyframes modelFloat {
809
888
  0%,
810
889
  100% {
@@ -817,8 +896,9 @@ h1 {
817
896
  }
818
897
 
819
898
  .conversation-panel {
820
- flex: 0 1 460px;
821
- min-width: 400px;
899
+ /* Make conversation panel wider by default */
900
+ flex: 0 1 720px;
901
+ min-width: 600px;
822
902
  display: flex;
823
903
  flex-direction: column;
824
904
  min-height: 0;
@@ -865,7 +945,7 @@ h1 {
865
945
 
866
946
  .message {
867
947
  display: flex;
868
- max-width: 85%;
948
+ max-width: 95%;
869
949
  animation: messagePopIn 0.5s cubic-bezier(0.2, 0.9, 0.3, 1.2) forwards;
870
950
  opacity: 0;
871
951
  transform: translateY(15px) scale(0.95);
@@ -873,6 +953,21 @@ h1 {
873
953
  transition: all 0.3s ease;
874
954
  }
875
955
 
956
+ /* Allow selecting text inside the main chat and settings areas despite global user-select:none */
957
+ .chat-container,
958
+ .chat-container *,
959
+ .message-bubble,
960
+ .message-bubble *,
961
+ .bubble-wrapper,
962
+ .bubble-wrapper *,
963
+ .settings-content,
964
+ .settings-content * {
965
+ -webkit-user-select: text !important;
966
+ -moz-user-select: text !important;
967
+ -ms-user-select: text !important;
968
+ user-select: text !important;
969
+ }
970
+
876
971
  .bubble-wrapper {
877
972
  display: flex;
878
973
  flex-direction: column;
@@ -1054,24 +1149,26 @@ h1 {
1054
1149
  }
1055
1150
 
1056
1151
  .ai-message .message-bubble {
1057
- background: var(--panel-bg);
1058
- backdrop-filter: var(--glass-blur);
1059
- -webkit-backdrop-filter: var(--glass-blur);
1060
- border: 1px solid var(--border);
1061
- border-top: 1px solid var(--border-light);
1062
- border-left: 1px solid var(--border-light);
1063
- border-bottom-left-radius: 4px;
1064
- box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
1152
+ /* Render AI replies without a framed bubble — plain inline text */
1153
+ background: transparent;
1154
+ backdrop-filter: none;
1155
+ -webkit-backdrop-filter: none;
1156
+ border: none;
1157
+ border-radius: 0;
1158
+ box-shadow: none;
1065
1159
  color: var(--text-main);
1160
+ padding: 0; /* keep spacing handled by wrapper */
1066
1161
  }
1067
1162
 
1068
1163
  .message.ai-message.thinking-message .message-bubble {
1069
- background: color-mix(in srgb, var(--panel-bg) 75%, #000000) !important;
1070
- border-color: color-mix(in srgb, var(--accent) 30%, var(--border-light)) !important;
1071
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.25) !important;
1164
+ /* Keep thinking state unframed too */
1165
+ background: transparent !important;
1166
+ border: none !important;
1167
+ box-shadow: none !important;
1072
1168
  color: var(--text-muted) !important;
1073
1169
  backdrop-filter: none !important;
1074
1170
  -webkit-backdrop-filter: none !important;
1171
+ padding: 0 !important;
1075
1172
  }
1076
1173
 
1077
1174
 
@@ -1282,8 +1379,8 @@ h1 {
1282
1379
  .approval-card {
1283
1380
  align-items: stretch;
1284
1381
  flex-direction: column;
1285
- background: rgba(245, 158, 11, 0.12);
1286
- border-color: rgba(245, 158, 11, 0.38);
1382
+ background: transparent;
1383
+ border-color: transparent;
1287
1384
  }
1288
1385
 
1289
1386
  .approval-card[data-tier="dangerous"] {
@@ -1690,6 +1787,146 @@ h1 {
1690
1787
  line-height: 1;
1691
1788
  }
1692
1789
 
1790
+ /* ── Thinking Block ─────────────────────────────────────── */
1791
+ .thinking-block {
1792
+ margin-bottom: 6px;
1793
+ border-radius: 8px;
1794
+ border: 1px solid rgba(148, 163, 184, 0.18);
1795
+ background: rgba(148, 163, 184, 0.04);
1796
+ overflow: hidden;
1797
+ animation: agent-activity-slide-up-fade 0.25s cubic-bezier(0.16, 1, 0.3, 1) forwards;
1798
+ }
1799
+
1800
+ .thinking-block-header {
1801
+ display: flex;
1802
+ align-items: center;
1803
+ gap: 7px;
1804
+ width: 100%;
1805
+ padding: 6px 10px;
1806
+ background: transparent;
1807
+ border: 0;
1808
+ color: #94a3b8;
1809
+ font-size: 0.76rem;
1810
+ font-weight: 500;
1811
+ cursor: pointer;
1812
+ text-align: left;
1813
+ transition: background 0.15s ease, color 0.15s ease;
1814
+ user-select: none;
1815
+ }
1816
+
1817
+ .thinking-block-header:hover {
1818
+ background: rgba(148, 163, 184, 0.08);
1819
+ color: #cbd5e1;
1820
+ }
1821
+
1822
+ .thinking-block-label {
1823
+ flex: 1;
1824
+ min-width: 0;
1825
+ }
1826
+
1827
+ .thinking-block-live-dot {
1828
+ width: 6px;
1829
+ height: 6px;
1830
+ border-radius: 50%;
1831
+ background: #94a3b8;
1832
+ flex-shrink: 0;
1833
+ animation: thinkingDotPulse 1.4s ease-in-out infinite;
1834
+ }
1835
+
1836
+ @keyframes thinkingDotPulse {
1837
+ 0%, 100% {
1838
+ opacity: 0.4;
1839
+ transform: scale(0.85);
1840
+ }
1841
+ 50% {
1842
+ opacity: 1;
1843
+ transform: scale(1.1);
1844
+ }
1845
+ }
1846
+
1847
+ .thinking-block-chevron {
1848
+ color: rgba(148, 163, 184, 0.6);
1849
+ flex-shrink: 0;
1850
+ display: inline-flex;
1851
+ align-items: center;
1852
+ transition: transform 0.2s ease;
1853
+ }
1854
+
1855
+ .thinking-block-chevron.is-open {
1856
+ transform: rotate(90deg);
1857
+ }
1858
+
1859
+ .thinking-block-body {
1860
+ border-top: 1px solid rgba(148, 163, 184, 0.12);
1861
+ animation: thinkingBodyIn 0.18s ease;
1862
+ }
1863
+
1864
+ @keyframes thinkingBodyIn {
1865
+ from {
1866
+ opacity: 0;
1867
+ transform: translateY(-4px);
1868
+ }
1869
+ to {
1870
+ opacity: 1;
1871
+ transform: translateY(0);
1872
+ }
1873
+ }
1874
+
1875
+ .thinking-block-content {
1876
+ padding: 8px 12px 10px;
1877
+ font-size: 0.76rem;
1878
+ line-height: 1.6;
1879
+ color: #64748b;
1880
+ white-space: pre-wrap;
1881
+ max-height: 260px;
1882
+ overflow-y: auto;
1883
+ user-select: text;
1884
+ }
1885
+
1886
+ .thinking-block-step + .thinking-block-step {
1887
+ margin-top: 10px;
1888
+ padding-top: 10px;
1889
+ border-top: 1px dashed rgba(148, 163, 184, 0.16);
1890
+ }
1891
+
1892
+ .thinking-block-step-label {
1893
+ font-size: 0.68rem;
1894
+ font-weight: 600;
1895
+ letter-spacing: 0.02em;
1896
+ color: #94a3b8;
1897
+ margin-bottom: 4px;
1898
+ font-style: normal;
1899
+ }
1900
+
1901
+ .thinking-block-step-body {
1902
+ font-style: italic;
1903
+ }
1904
+
1905
+ .thinking-block-empty-state {
1906
+ padding: 6px 10px;
1907
+ }
1908
+
1909
+ .thinking-block-empty {
1910
+ display: block;
1911
+ font-size: 0.74rem;
1912
+ line-height: 1.5;
1913
+ color: #64748b;
1914
+ font-style: italic;
1915
+ }
1916
+
1917
+ .thinking-block-content::-webkit-scrollbar {
1918
+ width: 3px;
1919
+ }
1920
+
1921
+ .thinking-block-content::-webkit-scrollbar-track {
1922
+ background: transparent;
1923
+ }
1924
+
1925
+ .thinking-block-content::-webkit-scrollbar-thumb {
1926
+ background: rgba(148, 163, 184, 0.22);
1927
+ border-radius: 2px;
1928
+ }
1929
+
1693
1930
  /* Smart Context Toggle */
1694
1931
  .smart-context-bar {
1695
1932
  display: flex;
@@ -2190,13 +2427,13 @@ input:checked + .slider:before {
2190
2427
  }
2191
2428
 
2192
2429
  .sidebar-chat-delete:hover {
2193
- color: #fca5a5;
2194
- background: rgba(248, 113, 113, 0.12);
2430
+ color: var(--hover-delete);
2431
+ background: var(--hover-delete-bg);
2195
2432
  }
2196
2433
 
2197
2434
  .sidebar-chat-edit:hover {
2198
- color: #c7d2fe;
2199
- background: rgba(99, 102, 241, 0.12);
2435
+ color: var(--hover-edit);
2436
+ background: var(--hover-edit-bg);
2200
2437
  }
2201
2438
 
2202
2439
  .sidebar-chat-rename-input {
@@ -2288,49 +2525,49 @@ input:checked + .slider:before {
2288
2525
 
2289
2526
  .mint-status-pill[data-state="listening"],
2290
2527
  .model-activity-badge[data-state="listening"] {
2291
- color: #7dd3fc;
2528
+ color: var(--status-listening);
2292
2529
  }
2293
2530
 
2294
2531
  .mint-status-pill[data-state="listening"] .mint-status-dot,
2295
2532
  .model-activity-badge[data-state="listening"] .mint-status-dot {
2296
- background: #38bdf8;
2297
- box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.16);
2533
+ background: var(--status-listening);
2534
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--status-listening) 16%, transparent);
2298
2535
  animation: mintStatusPulse 1.2s ease-in-out infinite;
2299
2536
  }
2300
2537
 
2301
2538
  .mint-status-pill[data-state="thinking"],
2302
2539
  .model-activity-badge[data-state="thinking"] {
2303
- color: #a7f3d0;
2540
+ color: var(--status-thinking);
2304
2541
  }
2305
2542
 
2306
2543
  .mint-status-pill[data-state="thinking"] .mint-status-dot,
2307
2544
  .model-activity-badge[data-state="thinking"] .mint-status-dot {
2308
- background: var(--accent);
2309
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);
2545
+ background: var(--status-thinking);
2546
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--status-thinking) 20%, transparent);
2310
2547
  animation: mintStatusPulse 1s ease-in-out infinite;
2311
2548
  }
2312
2549
 
2313
2550
  .mint-status-pill[data-state="speaking"],
2314
2551
  .model-activity-badge[data-state="speaking"] {
2315
- color: #86efac;
2552
+ color: var(--status-speaking);
2316
2553
  }
2317
2554
 
2318
2555
  .mint-status-pill[data-state="speaking"] .mint-status-dot,
2319
2556
  .model-activity-badge[data-state="speaking"] .mint-status-dot {
2320
- background: #22c55e;
2321
- box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.16);
2557
+ background: var(--status-speaking);
2558
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--status-speaking) 16%, transparent);
2322
2559
  animation: mintStatusPulse 0.9s ease-in-out infinite;
2323
2560
  }
2324
2561
 
2325
2562
  .mint-status-pill[data-state="error"],
2326
2563
  .model-activity-badge[data-state="error"] {
2327
- color: #fca5a5;
2564
+ color: var(--status-error);
2328
2565
  }
2329
2566
 
2330
2567
  .mint-status-pill[data-state="error"] .mint-status-dot,
2331
2568
  .model-activity-badge[data-state="error"] .mint-status-dot {
2332
- background: #ef4444;
2333
- box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.16);
2569
+ background: var(--status-error);
2570
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--status-error) 16%, transparent);
2334
2571
  }
2335
2572
 
2336
2573
  @keyframes mintStatusPulse {
@@ -2872,13 +3109,15 @@ input:checked + .slider:before {
2872
3109
 
2873
3110
  .ai-message .message-bubble,
2874
3111
  .typing-indicator {
2875
- background: var(--surface-bg);
2876
- border: 1px solid var(--border);
2877
- border-radius: 8px;
3112
+ /* Keep AI messages unframed here as well */
3113
+ background: transparent;
3114
+ border: none;
3115
+ border-radius: 0;
2878
3116
  color: var(--text-main);
2879
3117
  backdrop-filter: none;
2880
3118
  -webkit-backdrop-filter: none;
2881
3119
  box-shadow: none;
3120
+ padding: 0; /* spacing handled by wrapper */
2882
3121
  }
2883
3122
 
2884
3123
  .user-message .message-bubble {
@@ -2893,6 +3132,15 @@ input:checked + .slider:before {
2893
3132
  color: var(--accent-hover);
2894
3133
  }
2895
3134
 
3135
+ /* Force AI replies to render as plain inline text (no bubble/frame). */
3136
+ .message.ai-message .message-bubble {
3137
+ background: transparent !important;
3138
+ border: none !important;
3139
+ box-shadow: none !important;
3140
+ border-radius: 0 !important;
3141
+ padding: 0 !important;
3142
+ }
3143
+
2896
3144
  .input-area {
2897
3145
  flex: 0 0 auto;
2898
3146
  padding: 0;
@@ -3319,8 +3567,8 @@ input:checked + .slider:before {
3319
3567
  }
3320
3568
 
3321
3569
  .close-btn:hover {
3322
- background: #3a2020;
3323
- color: #ff8a8a;
3570
+ background: var(--close-btn-hover-bg);
3571
+ color: var(--close-btn-hover-color);
3324
3572
  }
3325
3573
 
3326
3574
  .assistant-workspace.layout-horizontal {