@pheem49/mint 1.5.5 → 1.6.1

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 (222) hide show
  1. package/.codex +0 -0
  2. package/.github/FUNDING.yml +2 -0
  3. package/.github/workflows/ci.yml +45 -0
  4. package/.github/workflows/release.yml +79 -0
  5. package/Cargo.lock +5792 -0
  6. package/Cargo.toml +32 -0
  7. package/README.md +387 -353
  8. package/assets/icon.png +0 -0
  9. package/bin/mint +0 -0
  10. package/crates/mint-cli/Cargo.toml +23 -0
  11. package/crates/mint-cli/src/agent.rs +851 -0
  12. package/crates/mint-cli/src/gmail.rs +216 -0
  13. package/crates/mint-cli/src/image.rs +142 -0
  14. package/crates/mint-cli/src/main.rs +2837 -0
  15. package/crates/mint-cli/src/mcp.rs +63 -0
  16. package/crates/mint-cli/src/onboard.rs +1149 -0
  17. package/crates/mint-cli/src/setup.rs +390 -0
  18. package/crates/mint-cli/src/skills.rs +8 -0
  19. package/crates/mint-cli/src/updater.rs +279 -0
  20. package/crates/mint-core/Cargo.toml +22 -0
  21. package/crates/mint-core/src/agent_loop.rs +94 -0
  22. package/crates/mint-core/src/api_server.rs +991 -0
  23. package/crates/mint-core/src/channels.rs +248 -0
  24. package/crates/mint-core/src/chat.rs +895 -0
  25. package/crates/mint-core/src/code_tools.rs +729 -0
  26. package/crates/mint-core/src/config.rs +368 -0
  27. package/crates/mint-core/src/files.rs +159 -0
  28. package/crates/mint-core/src/knowledge.rs +541 -0
  29. package/crates/mint-core/src/lib.rs +84 -0
  30. package/crates/mint-core/src/mcp.rs +273 -0
  31. package/crates/mint-core/src/memory.rs +673 -0
  32. package/crates/mint-core/src/orchestration.rs +2157 -0
  33. package/crates/mint-core/src/pictures.rs +314 -0
  34. package/crates/mint-core/src/plugins.rs +727 -0
  35. package/crates/mint-core/src/safety.rs +416 -0
  36. package/crates/mint-core/src/semantic.rs +254 -0
  37. package/crates/mint-core/src/shell.rs +317 -0
  38. package/crates/mint-core/src/skills.rs +71 -0
  39. package/crates/mint-core/src/symbols.rs +157 -0
  40. package/crates/mint-core/src/tasks.rs +308 -0
  41. package/crates/mint-core/src/tts.rs +92 -0
  42. package/crates/mint-core/src/weather.rs +93 -0
  43. package/crates/mint-core/src/web_search.rs +200 -0
  44. package/crates/mint-core/src/workflows.rs +81 -0
  45. package/crates/mint-core/tests/mcp_stdio.rs +45 -0
  46. package/crates/mint-core/tests/memory_persistence.rs +172 -0
  47. package/crates/mint-core/tests/pictures_storage.rs +14 -0
  48. package/crates/mint-core/tests/task_lifecycle.rs +87 -0
  49. package/package.json +35 -99
  50. package/src/bin/index.js +16 -0
  51. package/src/renderer/index-web.html +17 -0
  52. package/src/renderer/index.html +17 -0
  53. package/src/renderer/public/Live2DCubismCore.js +9 -0
  54. package/src/renderer/public/assets/icon.png +0 -0
  55. package/src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.model3.json +36 -0
  56. package/src/renderer/src/App.tsx +33 -0
  57. package/src/renderer/src/calculator.ts +47 -0
  58. package/src/renderer/src/components/ChatPanel.tsx +1598 -0
  59. package/src/renderer/src/components/DashboardSidebar.tsx +358 -0
  60. package/src/renderer/src/components/Live2DStage.tsx +374 -0
  61. package/src/renderer/src/components/MintDashboard.tsx +950 -0
  62. package/src/renderer/src/components/ModelPanel.tsx +154 -0
  63. package/src/renderer/src/components/PicturesLibrary.tsx +46 -0
  64. package/src/renderer/src/components/ProactiveGlow.tsx +19 -0
  65. package/src/renderer/src/components/ScreenPicker.tsx +579 -0
  66. package/src/renderer/src/components/SettingsWindow.tsx +1467 -0
  67. package/src/renderer/src/components/SpotlightWindow.tsx +280 -0
  68. package/src/renderer/src/components/WidgetWindow.tsx +36 -0
  69. package/src/renderer/src/components/WorkspacePanel.tsx +268 -0
  70. package/src/{UI → renderer/src/css}/settings.css +69 -16
  71. package/src/renderer/src/css/spotlight.css +113 -0
  72. package/src/renderer/src/css/styles.css +3722 -0
  73. package/src/renderer/src/css/widget.css +185 -0
  74. package/src/renderer/src/env.d.ts +116 -0
  75. package/src/renderer/src/index.css +379 -0
  76. package/src/renderer/src/main.tsx +13 -0
  77. package/src/renderer/src/tauri.ts +996 -0
  78. package/src/renderer/src-web/App.tsx +25 -0
  79. package/src/renderer/src-web/calculator.ts +47 -0
  80. package/src/renderer/src-web/components/ChatPanel.tsx +1662 -0
  81. package/src/renderer/src-web/components/DashboardSidebar.tsx +242 -0
  82. package/src/renderer/src-web/components/MintDashboard.tsx +763 -0
  83. package/src/renderer/src-web/components/PicturesLibrary.tsx +73 -0
  84. package/src/renderer/src-web/components/SettingsWindow.tsx +1500 -0
  85. package/src/renderer/src-web/css/settings.css +1100 -0
  86. package/src/{UI → renderer/src-web/css}/spotlight.css +4 -4
  87. package/src/{UI → renderer/src-web/css}/styles.css +1055 -159
  88. package/src/{UI → renderer/src-web/css}/widget.css +2 -2
  89. package/src/renderer/src-web/env.d.ts +107 -0
  90. package/src/renderer/src-web/index.css +379 -0
  91. package/src/renderer/src-web/main.tsx +13 -0
  92. package/src/renderer/src-web/tauri.ts +983 -0
  93. package/tsconfig.json +30 -0
  94. package/vite.config.ts +33 -0
  95. package/vite.config.web.ts +51 -0
  96. package/GUIDE_TH.md +0 -125
  97. package/assets/Agent_Mint.png +0 -0
  98. package/assets/CLI_Screen.png +0 -0
  99. package/assets/Settings.png +0 -0
  100. package/benchmark_ai.js +0 -71
  101. package/install.ps1 +0 -64
  102. package/install.sh +0 -54
  103. package/main.js +0 -139
  104. package/mint-cli-logic.js +0 -3
  105. package/mint-cli.js +0 -410
  106. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.model3.json +0 -47
  107. package/models/Shiroko_Model/Shiroko//342/232/241/351/253/230/344/272/256/342/232/241/344/275/277/347/224/250/346/225/231/347/250/213/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.txt +0 -23
  108. package/preload-picker.js +0 -11
  109. package/preload-settings.js +0 -11
  110. package/preload.js +0 -41
  111. package/scripts/install_linux_desktop_entry.js +0 -48
  112. package/src/AI_Brain/Gemini_API.js +0 -813
  113. package/src/AI_Brain/agent_orchestrator.js +0 -73
  114. package/src/AI_Brain/autonomous_brain.js +0 -179
  115. package/src/AI_Brain/behavior_memory.js +0 -135
  116. package/src/AI_Brain/headless_agent.js +0 -143
  117. package/src/AI_Brain/knowledge_base.js +0 -349
  118. package/src/AI_Brain/memory_store.js +0 -662
  119. package/src/AI_Brain/proactive_engine.js +0 -172
  120. package/src/AI_Brain/provider_adapter.js +0 -365
  121. package/src/Automation_Layer/browser_automation.js +0 -149
  122. package/src/Automation_Layer/file_operations.js +0 -286
  123. package/src/Automation_Layer/open_app.js +0 -85
  124. package/src/Automation_Layer/open_website.js +0 -38
  125. package/src/CLI/approval_handler.js +0 -47
  126. package/src/CLI/chat_router.js +0 -247
  127. package/src/CLI/chat_ui.js +0 -1159
  128. package/src/CLI/cli_colors.js +0 -115
  129. package/src/CLI/cli_formatters.js +0 -94
  130. package/src/CLI/code_agent.js +0 -1667
  131. package/src/CLI/code_session_memory.js +0 -62
  132. package/src/CLI/gmail_auth.js +0 -210
  133. package/src/CLI/image_input.js +0 -90
  134. package/src/CLI/intent_detectors.js +0 -181
  135. package/src/CLI/interactive_chat.js +0 -658
  136. package/src/CLI/list_features.js +0 -64
  137. package/src/CLI/onboarding.js +0 -416
  138. package/src/CLI/repo_summarizer.js +0 -282
  139. package/src/CLI/semantic_code_search.js +0 -312
  140. package/src/CLI/skill_manager.js +0 -41
  141. package/src/CLI/slash_command_handler.js +0 -418
  142. package/src/CLI/symbol_indexer.js +0 -231
  143. package/src/CLI/updater.js +0 -230
  144. package/src/CLI/workspace_manager.js +0 -90
  145. package/src/Channels/brave_search_bridge.js +0 -35
  146. package/src/Channels/discord_bridge.js +0 -66
  147. package/src/Channels/google_search_bridge.js +0 -38
  148. package/src/Channels/line_bridge.js +0 -60
  149. package/src/Channels/slack_bridge.js +0 -48
  150. package/src/Channels/telegram_bridge.js +0 -41
  151. package/src/Channels/whatsapp_bridge.js +0 -57
  152. package/src/Command_Parser/parser.js +0 -45
  153. package/src/Plugins/dev_tools.js +0 -41
  154. package/src/Plugins/discord.js +0 -20
  155. package/src/Plugins/docker.js +0 -47
  156. package/src/Plugins/gmail.js +0 -251
  157. package/src/Plugins/google_calendar.js +0 -252
  158. package/src/Plugins/mcp_manager.js +0 -95
  159. package/src/Plugins/notion.js +0 -256
  160. package/src/Plugins/obsidian.js +0 -54
  161. package/src/Plugins/plugin_manager.js +0 -81
  162. package/src/Plugins/spotify.js +0 -173
  163. package/src/Plugins/system_metrics.js +0 -31
  164. package/src/Plugins/system_monitor.js +0 -72
  165. package/src/System/action_executor.js +0 -178
  166. package/src/System/bridge_manager.js +0 -76
  167. package/src/System/chat_history_manager.js +0 -83
  168. package/src/System/config_manager.js +0 -194
  169. package/src/System/custom_workflows.js +0 -163
  170. package/src/System/daemon_manager.js +0 -67
  171. package/src/System/google_tts_urls.js +0 -51
  172. package/src/System/granular_automation.js +0 -157
  173. package/src/System/ipc_handlers.js +0 -332
  174. package/src/System/notifications.js +0 -23
  175. package/src/System/optional_require.js +0 -23
  176. package/src/System/picture_store.js +0 -109
  177. package/src/System/proactive_loop.js +0 -153
  178. package/src/System/safety_manager.js +0 -273
  179. package/src/System/sandbox_runner.js +0 -182
  180. package/src/System/screen_capture.js +0 -175
  181. package/src/System/smart_context.js +0 -227
  182. package/src/System/system_automation.js +0 -162
  183. package/src/System/system_events.js +0 -79
  184. package/src/System/system_info.js +0 -125
  185. package/src/System/task_manager.js +0 -222
  186. package/src/System/tool_registry.js +0 -293
  187. package/src/System/window_manager.js +0 -220
  188. package/src/UI/floating.css +0 -80
  189. package/src/UI/floating.html +0 -17
  190. package/src/UI/floating.js +0 -67
  191. package/src/UI/live2d_manager.js +0 -600
  192. package/src/UI/preload-floating.js +0 -7
  193. package/src/UI/preload-spotlight.js +0 -11
  194. package/src/UI/preload-widget.js +0 -5
  195. package/src/UI/proactive-glow.html +0 -42
  196. package/src/UI/renderer.js +0 -2127
  197. package/src/UI/screenPicker.html +0 -214
  198. package/src/UI/screenPicker.js +0 -262
  199. package/src/UI/settings.html +0 -577
  200. package/src/UI/settings.js +0 -770
  201. package/src/UI/spotlight.html +0 -23
  202. package/src/UI/spotlight.js +0 -185
  203. package/src/UI/widget.html +0 -29
  204. package/src/UI/widget.js +0 -10
  205. /package/{models → src/renderer/public/models}/Shiroko_Model/Shiroko/Shiroko_Core/72d86db84cfa9730b894c241fd24c0db.png +0 -0
  206. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/233/264/350/243/231.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/apron.exp3.json} +0 -0
  207. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/214/253/345/222/252/346/273/244/351/225/234.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/catfilter.exp3.json} +0 -0
  208. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/202/271/344/270/200/344/270/213.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/click.exp3.json} +0 -0
  209. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/dazed.exp3.json} +0 -0
  210. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253/347/234/274/347/217/240/346/221/207/346/231/203.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/dazedeyes.exp3.json} +0 -0
  211. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/234/274/351/225/234.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/glasses.exp3.json} +0 -0
  212. /package/{models → src/renderer/public/models}/Shiroko_Model/Shiroko/Shiroko_Core/items_pinned_to_model.json +0 -0
  213. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/277/347/254/224.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/pen.exp3.json} +0 -0
  214. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/215/347/205/247.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/photo.exp3.json} +0 -0
  215. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_00.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_00.png} +0 -0
  216. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_01.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_01.png} +0 -0
  217. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_02.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_02.png} +0 -0
  218. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_03.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_03.png} +0 -0
  219. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.cdi3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.cdi3.json} +0 -0
  220. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.moc3" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.moc3} +0 -0
  221. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.physics3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.physics3.json} +0 -0
  222. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.vtube.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.vtube.json} +0 -0
@@ -0,0 +1,3722 @@
1
+ :root {
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: #10b981;
16
+ --accent-hover: #34d399;
17
+ --border: rgba(255, 255, 255, 0.075);
18
+ --border-light: rgba(255, 255, 255, 0.11);
19
+ --shadow: none;
20
+ --glass-blur: none;
21
+ }
22
+
23
+ [data-theme="light"] {
24
+ --bg-color: #f8fafc;
25
+ --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
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;
33
+ --text-main: #0f172a;
34
+ --text-muted: #64748b;
35
+ --text-soft: #334155;
36
+ --placeholder: #8590a2;
37
+ --border: rgba(0, 0, 0, 0.06);
38
+ --border-light: rgba(255, 255, 255, 0.6);
39
+ --shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
40
+ }
41
+
42
+ [data-theme="midnight"] {
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);
52
+ --text-main: #e2e8f0;
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;
59
+ }
60
+
61
+ * {
62
+ box-sizing: border-box;
63
+ margin: 0;
64
+ padding: 0;
65
+ }
66
+
67
+ body {
68
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
69
+ background: transparent;
70
+ color: var(--text-main);
71
+ height: 100vh;
72
+ overflow: hidden;
73
+ user-select: none;
74
+ }
75
+
76
+ .app-container {
77
+ height: 100vh;
78
+ display: flex;
79
+ flex-direction: column;
80
+ background: var(--bg-gradient);
81
+ border-radius: 0;
82
+ border: 1px solid rgba(255, 255, 255, 0.045);
83
+ box-shadow: var(--shadow);
84
+ overflow: hidden;
85
+ position: relative;
86
+ opacity: 1;
87
+ }
88
+
89
+ .app-container.is-loading > :not(.drag-region):not(.startup-loading) {
90
+ opacity: 0;
91
+ visibility: hidden;
92
+ pointer-events: none;
93
+ }
94
+
95
+ @keyframes appEntrance {
96
+ from {
97
+ opacity: 0;
98
+ transform: scale(0.96) translateY(10px);
99
+ filter: blur(10px);
100
+ }
101
+ to {
102
+ opacity: 1;
103
+ transform: scale(1) translateY(0);
104
+ filter: blur(0);
105
+ }
106
+ }
107
+
108
+ /* Header - Drag Region */
109
+ .drag-region {
110
+ app-region: no-drag;
111
+ -webkit-app-region: no-drag;
112
+ min-height: 34px;
113
+ padding: 0 8px;
114
+ display: grid;
115
+ grid-template-columns: 248px minmax(0, 1fr) auto;
116
+ gap: 8px;
117
+ align-items: center;
118
+ background: var(--chrome-bg);
119
+ backdrop-filter: var(--glass-blur);
120
+ -webkit-backdrop-filter: var(--glass-blur);
121
+ border-bottom: 1px solid var(--border);
122
+ box-shadow: none;
123
+ z-index: 10;
124
+ }
125
+
126
+ .header-content {
127
+ app-region: drag;
128
+ -webkit-app-region: drag;
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 8px;
132
+ min-width: 0;
133
+ height: 100%;
134
+ }
135
+
136
+ .titlebar-drag-space {
137
+ app-region: drag;
138
+ -webkit-app-region: drag;
139
+ align-self: stretch;
140
+ min-width: 0;
141
+ }
142
+
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;
152
+ }
153
+
154
+ h1 {
155
+ color: var(--text-main);
156
+ font-size: 0.82rem;
157
+ font-weight: 500;
158
+ letter-spacing: 0;
159
+ background: none;
160
+ background-clip: initial;
161
+ -webkit-background-clip: initial;
162
+ -webkit-text-fill-color: currentColor;
163
+ }
164
+
165
+ .header-actions,
166
+ .header-utility,
167
+ .window-controls {
168
+ app-region: no-drag;
169
+ -webkit-app-region: no-drag;
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 8px;
173
+ }
174
+
175
+ .header-actions {
176
+ justify-content: center;
177
+ padding: 0;
178
+ border: 0;
179
+ border-radius: 0;
180
+ background: transparent;
181
+ }
182
+
183
+ .header-utility {
184
+ justify-content: flex-end;
185
+ }
186
+
187
+ .window-controls {
188
+ justify-content: flex-end;
189
+ gap: 4px;
190
+ }
191
+
192
+ .toggle-model-btn,
193
+ .change-expression-btn,
194
+ .accessory-cycle-btn,
195
+ .toggle-interaction-btn,
196
+ .interaction-guide-btn,
197
+ .clear-btn,
198
+ .settings-btn {
199
+ -webkit-app-region: no-drag;
200
+ app-region: no-drag;
201
+ min-width: 0;
202
+ height: 28px;
203
+ border: 1px solid transparent;
204
+ background: transparent;
205
+ color: var(--text-muted);
206
+ cursor: pointer;
207
+ border-radius: 6px;
208
+ display: inline-flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ gap: 6px;
212
+ padding: 0 8px;
213
+ font-size: 0.72rem;
214
+ font-weight: 500;
215
+ line-height: 1;
216
+ white-space: nowrap;
217
+ transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease;
218
+ }
219
+
220
+ .toggle-model-btn svg,
221
+ .change-expression-btn svg,
222
+ .accessory-cycle-btn svg,
223
+ .toggle-interaction-btn svg,
224
+ .interaction-guide-btn svg,
225
+ .clear-btn svg,
226
+ .settings-btn svg {
227
+ flex: 0 0 auto;
228
+ }
229
+
230
+ .close-btn,
231
+ .maximize-btn,
232
+ .minimize-btn {
233
+ -webkit-app-region: no-drag;
234
+ app-region: no-drag;
235
+ background: transparent;
236
+ border: none;
237
+ color: var(--text-muted);
238
+ cursor: pointer;
239
+ width: 34px;
240
+ height: 28px;
241
+ padding: 0;
242
+ border-radius: 4px;
243
+ display: flex;
244
+ align-items: center;
245
+ justify-content: center;
246
+ transition: all 0.2s ease;
247
+ }
248
+
249
+ .minimize-btn:hover {
250
+ background: rgba(255, 255, 255, 0.1);
251
+ color: var(--text-main);
252
+ }
253
+
254
+ .close-btn:hover {
255
+ background: rgba(239, 68, 68, 0.2);
256
+ color: #ef4444;
257
+ }
258
+
259
+ .startup-loading {
260
+ position: absolute;
261
+ inset: 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
+
326
+ .toggle-model-btn:hover {
327
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
328
+ border-color: color-mix(in srgb, var(--accent) 20%, transparent);
329
+ color: var(--accent);
330
+ }
331
+
332
+ .toggle-model-btn.active {
333
+ background: color-mix(in srgb, var(--accent) 26%, transparent);
334
+ border-color: color-mix(in srgb, var(--accent) 42%, transparent);
335
+ color: white;
336
+ }
337
+
338
+ .change-expression-btn:hover {
339
+ background: rgba(251, 191, 36, 0.15);
340
+ border-color: rgba(251, 191, 36, 0.2);
341
+ color: #fbbf24;
342
+ }
343
+
344
+ .accessory-cycle-btn:hover,
345
+ .accessory-cycle-btn.active {
346
+ background: rgba(16, 185, 129, 0.14);
347
+ border-color: rgba(16, 185, 129, 0.24);
348
+ color: #a7f3d0;
349
+ }
350
+
351
+ .toggle-interaction-btn:hover,
352
+ .toggle-interaction-btn.active {
353
+ background: rgba(34, 197, 94, 0.14);
354
+ border-color: rgba(34, 197, 94, 0.24);
355
+ color: #86efac;
356
+ }
357
+
358
+ .toggle-interaction-btn:not(.active) {
359
+ color: #f87171;
360
+ }
361
+
362
+ .toggle-interaction-btn:not(.active):hover {
363
+ background: rgba(248, 113, 113, 0.14);
364
+ border-color: rgba(248, 113, 113, 0.22);
365
+ color: #f87171;
366
+ }
367
+
368
+ .toggle-interaction-btn .interaction-off-mark {
369
+ opacity: 0;
370
+ }
371
+
372
+ .toggle-interaction-btn:not(.active) .interaction-off-mark {
373
+ opacity: 1;
374
+ }
375
+
376
+ .interaction-guide-btn:hover {
377
+ background: rgba(34, 211, 238, 0.14);
378
+ border-color: rgba(34, 211, 238, 0.2);
379
+ color: #67e8f9;
380
+ }
381
+
382
+ .interaction-guide-btn.active {
383
+ background: rgba(34, 211, 238, 0.22);
384
+ border-color: rgba(34, 211, 238, 0.34);
385
+ color: #67e8f9;
386
+ }
387
+
388
+ .maximize-btn:hover {
389
+ background: rgba(255, 255, 255, 0.1);
390
+ color: var(--text-color);
391
+ }
392
+
393
+ .clear-btn:hover {
394
+ background: rgba(251, 191, 36, 0.15);
395
+ border-color: rgba(251, 191, 36, 0.2);
396
+ color: #fbbf24;
397
+ }
398
+
399
+ .settings-btn:hover {
400
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
401
+ border-color: color-mix(in srgb, var(--accent) 20%, transparent);
402
+ color: var(--accent);
403
+ }
404
+
405
+ /* Chat Area */
406
+ .assistant-workspace {
407
+ flex: 1;
408
+ min-height: 0;
409
+ display: flex;
410
+ gap: 22px;
411
+ padding: 22px;
412
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
413
+ }
414
+
415
+ .assistant-workspace.model-hidden {
416
+ padding: 22px 120px;
417
+ }
418
+
419
+ .model-stage {
420
+ flex: 1 1 54%;
421
+ min-width: 420px;
422
+ display: flex;
423
+ align-items: center;
424
+ justify-content: center;
425
+ position: relative;
426
+ overflow: hidden;
427
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
428
+ opacity: 1;
429
+ transform: scale(1);
430
+ }
431
+
432
+ .assistant-workspace.model-hidden .model-stage {
433
+ flex: 0 0 0;
434
+ min-width: 0;
435
+ opacity: 0;
436
+ pointer-events: none;
437
+ transform: scale(0.9);
438
+ margin-right: -22px;
439
+ }
440
+
441
+ .model-shell {
442
+ width: 100%;
443
+ height: 100%;
444
+ max-width: none;
445
+ max-height: none;
446
+ min-height: 480px;
447
+ display: grid;
448
+ place-items: center;
449
+ position: relative;
450
+ background: rgba(0, 0, 0, 0.2);
451
+ border-radius: 24px;
452
+ border: 1px solid rgba(255, 255, 255, 0.06);
453
+ box-shadow: inset 0 0 40px rgba(0, 0, 0, 0.2);
454
+ overflow: hidden;
455
+ }
456
+
457
+ .model-glow {
458
+ position: absolute;
459
+ width: 85%;
460
+ aspect-ratio: 1;
461
+ border-radius: 50%;
462
+ background: radial-gradient(circle, color-mix(in srgb, var(--accent) 12%, transparent), color-mix(in srgb, var(--accent) 2%, transparent) 48%, transparent 72%);
463
+ filter: blur(20px);
464
+ transform: translateY(2%);
465
+ }
466
+
467
+ .model-mount {
468
+ width: 100%;
469
+ height: 100%;
470
+ position: relative;
471
+ z-index: 1;
472
+ }
473
+
474
+ .model-mount canvas {
475
+ position: absolute;
476
+ inset: 0;
477
+ width: 100%;
478
+ height: 100%;
479
+ }
480
+
481
+ .expression-toast {
482
+ position: absolute;
483
+ left: 50%;
484
+ top: 18px;
485
+ z-index: 4;
486
+ transform: translate(-50%, -8px);
487
+ opacity: 0;
488
+ pointer-events: none;
489
+ padding: 7px 12px;
490
+ border-radius: 999px;
491
+ background: rgba(15, 23, 42, 0.72);
492
+ border: 1px solid rgba(255, 255, 255, 0.12);
493
+ color: #f8fafc;
494
+ font-size: 0.76rem;
495
+ font-weight: 600;
496
+ line-height: 1;
497
+ white-space: nowrap;
498
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28);
499
+ backdrop-filter: blur(10px);
500
+ transition: opacity 0.18s ease, transform 0.18s ease;
501
+ }
502
+
503
+ .expression-toast.is-visible {
504
+ opacity: 1;
505
+ transform: translate(-50%, 0);
506
+ }
507
+
508
+ .interaction-guide {
509
+ position: absolute;
510
+ inset: 0;
511
+ z-index: 3;
512
+ pointer-events: none;
513
+ opacity: 0;
514
+ transform: scale(var(--model-zone-scale, 1));
515
+ transform-origin: 50% 58%;
516
+ transition: opacity 0.2s ease, transform 0.16s ease;
517
+ }
518
+
519
+ .model-shell.show-interaction-guide .interaction-guide {
520
+ opacity: 1;
521
+ }
522
+
523
+ .model-shell.interaction-enabled .interaction-zone {
524
+ pointer-events: auto;
525
+ }
526
+
527
+ .interaction-zone {
528
+ position: absolute;
529
+ pointer-events: none;
530
+ cursor: pointer;
531
+ border: 1px solid rgba(103, 232, 249, 0.46);
532
+ background: rgba(14, 165, 233, 0.08);
533
+ box-shadow: 0 0 18px rgba(34, 211, 238, 0.12), inset 0 0 18px rgba(255, 255, 255, 0.04);
534
+ }
535
+
536
+ .interaction-zone span {
537
+ position: absolute;
538
+ left: 50%;
539
+ top: 50%;
540
+ transform: translate(-50%, -50%);
541
+ padding: 4px 8px;
542
+ border-radius: 999px;
543
+ background: rgba(3, 7, 18, 0.72);
544
+ border: 1px solid rgba(255, 255, 255, 0.12);
545
+ color: #e0f2fe;
546
+ font-size: 0.68rem;
547
+ font-weight: 600;
548
+ line-height: 1;
549
+ white-space: nowrap;
550
+ text-shadow: 0 1px 8px rgba(0, 0, 0, 0.65);
551
+ }
552
+
553
+ .zone-head {
554
+ left: 34%;
555
+ top: 20.5%;
556
+ width: 32%;
557
+ height: 15.5%;
558
+ border-radius: 48% 48% 42% 42%;
559
+ }
560
+
561
+ .zone-face {
562
+ left: 36%;
563
+ top: 37.5%;
564
+ width: 28%;
565
+ height: 12%;
566
+ border-radius: 50%;
567
+ background: rgba(244, 114, 182, 0.1);
568
+ border-color: rgba(244, 114, 182, 0.5);
569
+ }
570
+
571
+ .zone-left-hand {
572
+ left: 14%;
573
+ top: 70%;
574
+ width: 22%;
575
+ height: 16%;
576
+ border-radius: 48% 42% 56% 44%;
577
+ }
578
+
579
+ .zone-right-hand {
580
+ left: 65%;
581
+ top: 69%;
582
+ width: 23%;
583
+ height: 17%;
584
+ border-radius: 42% 54% 44% 56%;
585
+ }
586
+
587
+ .zone-body {
588
+ left: 36%;
589
+ top: 53%;
590
+ width: 29%;
591
+ height: 14.5%;
592
+ border-radius: 38% 38% 48% 48%;
593
+ }
594
+
595
+ .zone-lower {
596
+ left: 34%;
597
+ top: 74%;
598
+ width: 30%;
599
+ height: 24%;
600
+ border-radius: 46% 46% 24% 24%;
601
+ background: rgba(251, 191, 36, 0.08);
602
+ border-color: rgba(251, 191, 36, 0.45);
603
+ }
604
+
605
+ .model-placeholder {
606
+ width: 100%;
607
+ max-height: 100%;
608
+ object-fit: contain;
609
+ filter: drop-shadow(0 14px 22px rgba(0, 0, 0, 0.2));
610
+ transition: opacity 0.6s ease-out;
611
+ }
612
+
613
+ .model-activity-badge {
614
+ position: absolute;
615
+ top: 14px;
616
+ right: 14px;
617
+ z-index: 4;
618
+ height: 28px;
619
+ display: inline-flex;
620
+ align-items: center;
621
+ gap: 7px;
622
+ padding: 0 10px;
623
+ border: 1px solid rgba(255, 255, 255, 0.08);
624
+ border-radius: 999px;
625
+ background: rgba(18, 18, 22, 0.72);
626
+ color: var(--text-main);
627
+ font-size: 0.72rem;
628
+ line-height: 1;
629
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.18);
630
+ backdrop-filter: blur(12px);
631
+ pointer-events: none;
632
+ }
633
+
634
+ .model-panel-controls {
635
+ position: absolute;
636
+ left: 14px;
637
+ top: 14px;
638
+ z-index: 5;
639
+ display: flex;
640
+ align-items: center;
641
+ gap: 6px;
642
+ padding: 5px;
643
+ border: 1px solid rgba(255, 255, 255, 0.08);
644
+ border-radius: 8px;
645
+ background: rgba(18, 18, 22, 0.68);
646
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.16);
647
+ backdrop-filter: blur(12px);
648
+ }
649
+
650
+ .model-panel-control {
651
+ width: 28px;
652
+ height: 28px;
653
+ display: inline-flex;
654
+ align-items: center;
655
+ justify-content: center;
656
+ border: 0;
657
+ border-radius: 6px;
658
+ background: transparent;
659
+ color: var(--text-soft);
660
+ cursor: pointer;
661
+ -webkit-app-region: no-drag;
662
+ transition: background 0.16s ease, color 0.16s ease;
663
+ }
664
+
665
+ .model-panel-control:hover,
666
+ .model-panel-control.is-active {
667
+ background: var(--surface-strong);
668
+ color: var(--text-main);
669
+ }
670
+
671
+ .model-scale-control {
672
+ height: 28px;
673
+ display: inline-flex;
674
+ align-items: center;
675
+ gap: 7px;
676
+ padding: 0 6px;
677
+ color: var(--text-soft);
678
+ border-radius: 6px;
679
+ }
680
+
681
+ .model-scale-control:hover {
682
+ background: rgba(255, 255, 255, 0.045);
683
+ color: var(--text-main);
684
+ }
685
+
686
+ .model-scale-control input {
687
+ width: 84px;
688
+ accent-color: var(--accent);
689
+ }
690
+
691
+ .model-scale-value {
692
+ min-width: 38px;
693
+ color: var(--text-main);
694
+ font-size: 0.68rem;
695
+ line-height: 1;
696
+ text-align: right;
697
+ font-variant-numeric: tabular-nums;
698
+ }
699
+
700
+ .model-scale-reset {
701
+ width: 22px;
702
+ height: 22px;
703
+ display: inline-flex;
704
+ align-items: center;
705
+ justify-content: center;
706
+ border: 0;
707
+ border-radius: 5px;
708
+ background: transparent;
709
+ color: var(--text-soft);
710
+ cursor: pointer;
711
+ }
712
+
713
+ .model-scale-reset:hover {
714
+ background: var(--surface-strong);
715
+ color: var(--text-main);
716
+ }
717
+
718
+ .layout-preset-group {
719
+ display: inline-flex;
720
+ align-items: center;
721
+ gap: 2px;
722
+ margin-left: 2px;
723
+ padding-left: 6px;
724
+ border-left: 1px solid rgba(255, 255, 255, 0.08);
725
+ }
726
+
727
+ .layout-preset-btn {
728
+ width: 26px;
729
+ height: 26px;
730
+ display: inline-flex;
731
+ align-items: center;
732
+ justify-content: center;
733
+ border: 0;
734
+ border-radius: 6px;
735
+ background: transparent;
736
+ color: var(--text-muted);
737
+ cursor: pointer;
738
+ -webkit-app-region: no-drag;
739
+ transition: background 0.16s ease, color 0.16s ease;
740
+ }
741
+
742
+ .layout-preset-btn:hover,
743
+ .layout-preset-btn.is-active {
744
+ background: var(--surface-strong);
745
+ color: var(--text-main);
746
+ }
747
+
748
+ .model-status {
749
+ position: absolute;
750
+ left: 50%;
751
+ bottom: 24px;
752
+ max-width: min(88%, 460px);
753
+ transform: translateX(-50%);
754
+ color: var(--text-muted);
755
+ font-size: 0.78rem;
756
+ line-height: 1.35;
757
+ text-align: center;
758
+ user-select: text;
759
+ z-index: 2;
760
+ display: flex;
761
+ flex-direction: column;
762
+ align-items: center;
763
+ gap: 8px;
764
+ }
765
+
766
+ .model-status.is-error {
767
+ color: #fca5a5;
768
+ display: block;
769
+ }
770
+
771
+ .loader-dots {
772
+ display: flex;
773
+ gap: 6px;
774
+ justify-content: center;
775
+ align-items: center;
776
+ margin-bottom: 4px;
777
+ }
778
+
779
+ .loader-dots span {
780
+ width: 8px;
781
+ height: 8px;
782
+ background-color: var(--accent);
783
+ border-radius: 50%;
784
+ display: inline-block;
785
+ animation: dot-pulse 1.4s infinite ease-in-out both;
786
+ }
787
+
788
+ .loader-dots span:nth-child(1) { animation-delay: -0.32s; }
789
+ .loader-dots span:nth-child(2) { animation-delay: -0.16s; }
790
+
791
+ @keyframes dot-pulse {
792
+ 0%, 80%, 100% { transform: scale(0); opacity: 0.3; }
793
+ 40% { transform: scale(1.0); opacity: 1; }
794
+ }
795
+
796
+ .model-shadow {
797
+ position: absolute;
798
+ bottom: 12%;
799
+ width: 44%;
800
+ height: 22px;
801
+ border-radius: 50%;
802
+ background: rgba(0, 0, 0, 0.24);
803
+ filter: blur(6px);
804
+ transform: scaleX(1.2);
805
+ }
806
+
807
+ .conversation-panel {
808
+ flex: 0 1 460px;
809
+ min-width: 400px;
810
+ display: flex;
811
+ flex-direction: column;
812
+ min-height: 0;
813
+ overflow: hidden;
814
+ background: var(--panel-bg);
815
+ backdrop-filter: var(--glass-blur);
816
+ -webkit-backdrop-filter: var(--glass-blur);
817
+ border: 1px solid var(--border);
818
+ border-top-color: var(--border-light);
819
+ border-left-color: var(--border-light);
820
+ border-radius: 16px;
821
+ box-shadow: 0 20px 52px rgba(0, 0, 0, 0.24);
822
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
823
+ }
824
+
825
+ .assistant-workspace.model-hidden .conversation-panel {
826
+ flex: 1;
827
+ max-width: 900px;
828
+ margin: 0 auto;
829
+ }
830
+
831
+ .chat-container {
832
+ flex: 1;
833
+ padding: 20px;
834
+ overflow-y: auto;
835
+ display: flex;
836
+ flex-direction: column;
837
+ gap: 16px;
838
+ user-select: text;
839
+ }
840
+
841
+ .chat-container::-webkit-scrollbar {
842
+ width: 6px;
843
+ }
844
+
845
+ .chat-container::-webkit-scrollbar-track {
846
+ background: transparent;
847
+ }
848
+
849
+ .chat-container::-webkit-scrollbar-thumb {
850
+ background: rgba(255, 255, 255, 0.1);
851
+ border-radius: 10px;
852
+ }
853
+
854
+ .message {
855
+ display: flex;
856
+ max-width: 85%;
857
+ animation: messagePopIn 0.5s cubic-bezier(0.2, 0.9, 0.3, 1.2) forwards;
858
+ opacity: 0;
859
+ transform: translateY(15px) scale(0.95);
860
+ transform-origin: bottom center;
861
+ transition: all 0.3s ease;
862
+ }
863
+
864
+ .bubble-wrapper {
865
+ display: flex;
866
+ flex-direction: column;
867
+ max-width: 100%;
868
+ }
869
+
870
+ .user-message .bubble-wrapper {
871
+ align-items: flex-end;
872
+ }
873
+
874
+ .ai-message .bubble-wrapper {
875
+ align-items: flex-start;
876
+ }
877
+
878
+ .message-time {
879
+ font-size: 0.72rem;
880
+ color: var(--text-muted);
881
+ margin-top: 4px;
882
+ margin-bottom: 2px;
883
+ padding: 0 6px;
884
+ opacity: 0.7;
885
+ font-weight: 400;
886
+ display: flex;
887
+ align-items: center;
888
+ gap: 8px;
889
+ flex-wrap: wrap;
890
+ position: relative;
891
+ }
892
+
893
+ .provider-badge {
894
+ max-width: min(320px, 70vw);
895
+ overflow: hidden;
896
+ text-overflow: ellipsis;
897
+ white-space: nowrap;
898
+ border: 0;
899
+ background: transparent;
900
+ color: var(--accent);
901
+ font-weight: 600;
902
+ font: inherit;
903
+ line-height: 1.2;
904
+ padding: 0;
905
+ cursor: pointer;
906
+ }
907
+
908
+ .provider-badge:hover,
909
+ .provider-badge.is-open {
910
+ color: var(--accent-hover);
911
+ text-decoration: underline;
912
+ text-underline-offset: 2px;
913
+ }
914
+
915
+ .provider-fallback-notice {
916
+ max-width: min(520px, 82vw);
917
+ color: var(--warning, #fbbf24);
918
+ font-weight: 500;
919
+ line-height: 1.35;
920
+ }
921
+
922
+ .provider-popover {
923
+ position: absolute;
924
+ left: 6px;
925
+ top: 20px;
926
+ z-index: 20;
927
+ width: min(280px, calc(100vw - 48px));
928
+ padding: 10px;
929
+ border: 1px solid var(--border);
930
+ border-radius: 8px;
931
+ background: var(--panel-raised);
932
+ color: var(--text-main);
933
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.32);
934
+ backdrop-filter: var(--glass-blur);
935
+ -webkit-backdrop-filter: var(--glass-blur);
936
+ opacity: 1;
937
+ }
938
+
939
+ .provider-popover-title {
940
+ color: var(--text-main);
941
+ font-size: 0.78rem;
942
+ font-weight: 700;
943
+ margin-bottom: 8px;
944
+ }
945
+
946
+ .provider-popover-row {
947
+ display: flex;
948
+ justify-content: space-between;
949
+ gap: 14px;
950
+ padding: 5px 0;
951
+ color: var(--text-muted);
952
+ font-size: 0.72rem;
953
+ line-height: 1.25;
954
+ }
955
+
956
+ .provider-popover-row strong {
957
+ color: var(--text-main);
958
+ font-weight: 600;
959
+ text-align: right;
960
+ overflow-wrap: anywhere;
961
+ }
962
+
963
+ .provider-popover-action {
964
+ width: 100%;
965
+ height: 30px;
966
+ margin-top: 8px;
967
+ border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent);
968
+ border-radius: 6px;
969
+ background: color-mix(in srgb, var(--accent) 14%, transparent);
970
+ color: var(--text-main);
971
+ font: inherit;
972
+ font-size: 0.74rem;
973
+ cursor: pointer;
974
+ }
975
+
976
+ .provider-popover-action:hover {
977
+ background: color-mix(in srgb, var(--accent) 24%, transparent);
978
+ }
979
+
980
+ @keyframes messagePopIn {
981
+ to {
982
+ opacity: 1;
983
+ transform: translateY(0) scale(1);
984
+ }
985
+ }
986
+
987
+ .user-message {
988
+ align-self: flex-end;
989
+ }
990
+
991
+ .ai-message {
992
+ align-self: flex-start;
993
+ }
994
+
995
+ .message-bubble {
996
+ padding: 14px 18px;
997
+ border-radius: 18px;
998
+ font-size: 0.95rem;
999
+ line-height: 1.5;
1000
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
1001
+ word-wrap: break-word;
1002
+ position: relative;
1003
+ }
1004
+
1005
+ .formatted-ai-text {
1006
+ display: flex;
1007
+ flex-direction: column;
1008
+ gap: 10px;
1009
+ white-space: normal;
1010
+ }
1011
+
1012
+ .ai-paragraph {
1013
+ margin: 0;
1014
+ }
1015
+
1016
+ .ai-list-item {
1017
+ display: grid;
1018
+ grid-template-columns: 18px minmax(0, 1fr);
1019
+ gap: 8px;
1020
+ align-items: start;
1021
+ }
1022
+
1023
+ .ai-list-bullet {
1024
+ color: var(--accent-hover);
1025
+ font-weight: 700;
1026
+ line-height: 1.5;
1027
+ }
1028
+
1029
+ .user-message {
1030
+ transform-origin: bottom right;
1031
+ }
1032
+
1033
+ .user-message .message-bubble {
1034
+ background: linear-gradient(135deg, var(--accent) 0%, color-mix(in srgb, var(--accent) 70%, #000000) 100%);
1035
+ color: white;
1036
+ border-bottom-right-radius: 4px;
1037
+ box-shadow: 0 6px 20px color-mix(in srgb, var(--accent) 25%, transparent), inset 1px 1px 0 rgba(255, 255, 255, 0.2);
1038
+ }
1039
+
1040
+ .ai-message {
1041
+ transform-origin: bottom left;
1042
+ }
1043
+
1044
+ .ai-message .message-bubble {
1045
+ background: var(--panel-bg);
1046
+ backdrop-filter: var(--glass-blur);
1047
+ -webkit-backdrop-filter: var(--glass-blur);
1048
+ border: 1px solid var(--border);
1049
+ border-top: 1px solid var(--border-light);
1050
+ border-left: 1px solid var(--border-light);
1051
+ border-bottom-left-radius: 4px;
1052
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
1053
+ color: var(--text-main);
1054
+ }
1055
+
1056
+ .message.ai-message.thinking-message .message-bubble {
1057
+ background: color-mix(in srgb, var(--panel-bg) 75%, #000000) !important;
1058
+ border-color: color-mix(in srgb, var(--accent) 30%, var(--border-light)) !important;
1059
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.25) !important;
1060
+ color: var(--text-muted) !important;
1061
+ backdrop-filter: none !important;
1062
+ -webkit-backdrop-filter: none !important;
1063
+ }
1064
+
1065
+
1066
+ /* Typing Indicator */
1067
+ .typing-indicator {
1068
+ display: flex;
1069
+ gap: 4px;
1070
+ padding: 14px 18px;
1071
+ background: var(--panel-bg);
1072
+ backdrop-filter: var(--glass-blur);
1073
+ border: 1px solid var(--border);
1074
+ border-radius: 16px;
1075
+ border-bottom-left-radius: 4px;
1076
+ align-self: flex-start;
1077
+ max-width: fit-content;
1078
+ }
1079
+
1080
+ .dot {
1081
+ width: 6px;
1082
+ height: 6px;
1083
+ background: var(--text-muted);
1084
+ border-radius: 50%;
1085
+ animation: bounce 1.4s infinite ease-in-out both;
1086
+ }
1087
+
1088
+ .dot:nth-child(1) {
1089
+ animation-delay: -0.32s;
1090
+ }
1091
+
1092
+ .dot:nth-child(2) {
1093
+ animation-delay: -0.16s;
1094
+ }
1095
+
1096
+ @keyframes bounce {
1097
+
1098
+ 0%,
1099
+ 80%,
1100
+ 100% {
1101
+ transform: scale(0);
1102
+ }
1103
+
1104
+ 40% {
1105
+ transform: scale(1);
1106
+ }
1107
+ }
1108
+
1109
+ /* Input Area */
1110
+ .input-area {
1111
+ padding: 16px 20px;
1112
+ background: color-mix(in srgb, var(--panel-bg) 60%, transparent);
1113
+ backdrop-filter: var(--glass-blur);
1114
+ -webkit-backdrop-filter: var(--glass-blur);
1115
+ border-top: 1px solid var(--border);
1116
+ box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.1);
1117
+ }
1118
+
1119
+ #chat-form {
1120
+ display: flex;
1121
+ gap: 12px;
1122
+ background: rgba(0, 0, 0, 0.15);
1123
+ border-radius: 14px;
1124
+ padding: 6px;
1125
+ border: 1px solid var(--border);
1126
+ border-top: 1px solid var(--border-light);
1127
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1128
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
1129
+ }
1130
+
1131
+ #chat-form:focus-within {
1132
+ border-color: transparent;
1133
+ outline: none;
1134
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
1135
+ transform: none;
1136
+ }
1137
+
1138
+ #chat-input {
1139
+ flex: 1;
1140
+ background: transparent;
1141
+ border: none;
1142
+ outline: none;
1143
+ color: var(--text-main);
1144
+ padding: 8px 12px;
1145
+ font-family: inherit;
1146
+ font-size: 0.95rem;
1147
+ }
1148
+
1149
+ #chat-input:focus,
1150
+ #chat-input:focus-visible,
1151
+ #chat-input:-moz-focusring {
1152
+ border: 0 !important;
1153
+ outline: none !important;
1154
+ box-shadow: none !important;
1155
+ }
1156
+
1157
+ #chat-input::placeholder {
1158
+ color: var(--text-main);
1159
+ opacity: 0.6;
1160
+ }
1161
+
1162
+ #send-btn,
1163
+ #mic-btn,
1164
+ #chat-tool-btn,
1165
+ #screen-capture-btn {
1166
+ background: var(--accent);
1167
+ color: white;
1168
+ border: none;
1169
+ width: 44px;
1170
+ height: 40px;
1171
+ border-radius: 10px;
1172
+ display: flex;
1173
+ align-items: center;
1174
+ justify-content: center;
1175
+ cursor: pointer;
1176
+ transition: all 0.2s ease;
1177
+ -webkit-app-region: no-drag;
1178
+ }
1179
+
1180
+ #send-btn:hover,
1181
+ #mic-btn:hover,
1182
+ #chat-tool-btn:hover,
1183
+ #screen-capture-btn:hover {
1184
+ background: var(--accent-hover);
1185
+ transform: scale(1.05);
1186
+ }
1187
+
1188
+ #send-btn:active,
1189
+ #mic-btn:active,
1190
+ #chat-tool-btn:active,
1191
+ #screen-capture-btn:active {
1192
+ transform: scale(0.95);
1193
+ }
1194
+
1195
+ #mic-btn.listening {
1196
+ background: #ef4444;
1197
+ /* Red color when listening */
1198
+ animation: pulse-mic 1.5s infinite;
1199
+ }
1200
+
1201
+ #chat-tool-btn,
1202
+ #screen-capture-btn {
1203
+ background: transparent;
1204
+ color: var(--text-muted);
1205
+ border: 1px solid var(--border);
1206
+ }
1207
+
1208
+ #chat-tool-btn:hover,
1209
+ #screen-capture-btn:hover {
1210
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
1211
+ color: var(--accent);
1212
+ border-color: color-mix(in srgb, var(--accent) 40%, transparent);
1213
+ }
1214
+
1215
+ @keyframes pulse-mic {
1216
+ 0% {
1217
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4);
1218
+ transform: scale(1);
1219
+ }
1220
+
1221
+ 50% {
1222
+ box-shadow: 0 0 0 6px rgba(239, 68, 68, 0);
1223
+ transform: scale(1.05);
1224
+ }
1225
+
1226
+ 100% {
1227
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0);
1228
+ transform: scale(1);
1229
+ }
1230
+ }
1231
+
1232
+ .action-card {
1233
+ margin-top: 8px;
1234
+ padding: 10px;
1235
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
1236
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
1237
+ border-radius: 8px;
1238
+ font-size: 0.85rem;
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: 8px;
1242
+ }
1243
+
1244
+ .action-card-icon {
1245
+ align-items: center;
1246
+ display: inline-flex;
1247
+ flex: 0 0 22px;
1248
+ font-size: 1rem;
1249
+ justify-content: center;
1250
+ line-height: 1;
1251
+ }
1252
+
1253
+ .action-card-content {
1254
+ display: grid;
1255
+ gap: 2px;
1256
+ min-width: 0;
1257
+ }
1258
+
1259
+ .action-card-title {
1260
+ color: var(--text-main);
1261
+ font-weight: 700;
1262
+ }
1263
+
1264
+ .action-card-detail {
1265
+ color: var(--text-muted);
1266
+ font-size: 0.78rem;
1267
+ overflow-wrap: anywhere;
1268
+ }
1269
+
1270
+ .approval-card {
1271
+ align-items: stretch;
1272
+ flex-direction: column;
1273
+ background: rgba(245, 158, 11, 0.12);
1274
+ border-color: rgba(245, 158, 11, 0.38);
1275
+ }
1276
+
1277
+ .approval-card[data-tier="dangerous"] {
1278
+ background: rgba(239, 68, 68, 0.12);
1279
+ border-color: rgba(239, 68, 68, 0.42);
1280
+ }
1281
+
1282
+ .approval-card-content {
1283
+ display: grid;
1284
+ gap: 4px;
1285
+ }
1286
+
1287
+ .approval-card-title {
1288
+ color: var(--text-main);
1289
+ font-weight: 700;
1290
+ }
1291
+
1292
+ .approval-card-body {
1293
+ color: var(--text-main);
1294
+ overflow-wrap: anywhere;
1295
+ }
1296
+
1297
+ .approval-card-reason {
1298
+ color: var(--text-muted);
1299
+ font-size: 0.78rem;
1300
+ }
1301
+
1302
+ .approval-card-actions {
1303
+ display: flex;
1304
+ flex-wrap: wrap;
1305
+ gap: 8px;
1306
+ margin-top: 6px;
1307
+ }
1308
+
1309
+ .approval-btn {
1310
+ border: 1px solid rgba(255, 255, 255, 0.14);
1311
+ border-radius: 6px;
1312
+ color: var(--text-main);
1313
+ cursor: pointer;
1314
+ font-size: 0.82rem;
1315
+ font-weight: 700;
1316
+ padding: 7px 10px;
1317
+ }
1318
+
1319
+ .approval-btn:disabled {
1320
+ cursor: default;
1321
+ opacity: 0.6;
1322
+ }
1323
+
1324
+ .approval-btn-approve {
1325
+ background: rgba(245, 158, 11, 0.28);
1326
+ }
1327
+
1328
+ .approval-card[data-tier="dangerous"] .approval-btn-approve {
1329
+ background: rgba(239, 68, 68, 0.28);
1330
+ }
1331
+
1332
+ .approval-btn-cancel {
1333
+ background: rgba(255, 255, 255, 0.08);
1334
+ }
1335
+
1336
+ @keyframes agent-activity-slide-up-fade {
1337
+ from {
1338
+ opacity: 0;
1339
+ transform: translateY(10px) scale(0.98);
1340
+ }
1341
+ to {
1342
+ opacity: 1;
1343
+ transform: translateY(0) scale(1);
1344
+ }
1345
+ }
1346
+
1347
+ @keyframes pulse-ring {
1348
+ 0% {
1349
+ box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.6);
1350
+ }
1351
+ 70% {
1352
+ box-shadow: 0 0 0 8px rgba(99, 102, 241, 0);
1353
+ }
1354
+ 100% {
1355
+ box-shadow: 0 0 0 0 rgba(99, 102, 241, 0);
1356
+ }
1357
+ }
1358
+
1359
+ @keyframes pulse-ring-amber {
1360
+ 0% {
1361
+ box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.6);
1362
+ }
1363
+ 70% {
1364
+ box-shadow: 0 0 0 8px rgba(245, 158, 11, 0);
1365
+ }
1366
+ 100% {
1367
+ box-shadow: 0 0 0 0 rgba(245, 158, 11, 0);
1368
+ }
1369
+ }
1370
+
1371
+ .agent-activity-message {
1372
+ margin-top: -2px;
1373
+ }
1374
+
1375
+ .agent-activity-history {
1376
+ display: grid;
1377
+ gap: 8px;
1378
+ margin-bottom: 8px;
1379
+ margin-top: 0;
1380
+ max-width: min(680px, 100%);
1381
+ }
1382
+
1383
+ .agent-activity-toggle {
1384
+ align-items: center;
1385
+ align-self: start;
1386
+ background: transparent;
1387
+ border: 0;
1388
+ color: var(--text-muted);
1389
+ cursor: pointer;
1390
+ display: inline-flex;
1391
+ font: inherit;
1392
+ font-size: 0.8rem;
1393
+ gap: 8px;
1394
+ justify-content: flex-start;
1395
+ line-height: 1.2;
1396
+ padding: 2px 0;
1397
+ text-align: left;
1398
+ width: fit-content;
1399
+ }
1400
+
1401
+ .agent-activity-toggle:hover {
1402
+ color: var(--text-soft);
1403
+ }
1404
+
1405
+ .agent-activity-toggle:focus-visible {
1406
+ outline: 1px solid var(--border-light);
1407
+ outline-offset: 3px;
1408
+ }
1409
+
1410
+ .agent-activity-card {
1411
+ background: transparent;
1412
+ border: 0;
1413
+ border-radius: 0;
1414
+ color: var(--text-main);
1415
+ width: min(680px, 100%);
1416
+ max-width: 100%;
1417
+ padding: 4px 0;
1418
+ box-shadow: none;
1419
+ animation: agent-activity-slide-up-fade 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
1420
+ }
1421
+
1422
+ .agent-activity-card-history {
1423
+ padding-top: 0;
1424
+ }
1425
+
1426
+ .agent-activity-header {
1427
+ align-items: center;
1428
+ display: flex;
1429
+ gap: 12px;
1430
+ font-size: 0.8rem;
1431
+ font-weight: 650;
1432
+ justify-content: space-between;
1433
+ margin-bottom: 8px;
1434
+ letter-spacing: 0;
1435
+ color: var(--text-muted);
1436
+ opacity: 0.9;
1437
+ }
1438
+
1439
+ .agent-activity-status {
1440
+ border: 1px solid var(--border);
1441
+ border-radius: 999px;
1442
+ color: var(--text-muted);
1443
+ font-size: 0.7rem;
1444
+ font-weight: 600;
1445
+ padding: 2px 9px;
1446
+ background: transparent;
1447
+ display: inline-flex;
1448
+ align-items: center;
1449
+ gap: 6px;
1450
+ }
1451
+
1452
+ .agent-activity-status::before {
1453
+ content: "";
1454
+ display: inline-block;
1455
+ width: 6px;
1456
+ height: 6px;
1457
+ border-radius: 50%;
1458
+ background: var(--text-muted);
1459
+ box-shadow: none;
1460
+ }
1461
+
1462
+ .agent-activity-status[data-state="active"] {
1463
+ border-color: var(--border);
1464
+ color: var(--text-soft);
1465
+ background: transparent;
1466
+ }
1467
+
1468
+ .agent-activity-status[data-state="active"]::before {
1469
+ background: var(--accent);
1470
+ animation: pulse-ring 1.8s infinite;
1471
+ }
1472
+
1473
+ .agent-activity-status[data-state="done"] {
1474
+ border-color: rgba(16, 185, 129, 0.35);
1475
+ color: #34d399;
1476
+ background: rgba(16, 185, 129, 0.08);
1477
+ }
1478
+
1479
+ .agent-activity-status[data-state="done"]::before {
1480
+ background: #34d399;
1481
+ box-shadow: 0 0 6px #34d399;
1482
+ }
1483
+
1484
+ .agent-activity-status[data-state="error"] {
1485
+ border-color: rgba(239, 68, 68, 0.35);
1486
+ color: #f87171;
1487
+ background: rgba(239, 68, 68, 0.08);
1488
+ }
1489
+
1490
+ .agent-activity-status[data-state="error"]::before {
1491
+ background: #f87171;
1492
+ box-shadow: 0 0 6px #f87171;
1493
+ }
1494
+
1495
+ .agent-activity-status[data-state="cancelled"] {
1496
+ border-color: rgba(148, 163, 184, 0.28);
1497
+ color: var(--text-muted);
1498
+ background: rgba(148, 163, 184, 0.05);
1499
+ }
1500
+
1501
+ .agent-activity-status[data-state="cancelled"]::before {
1502
+ background: var(--text-muted);
1503
+ }
1504
+
1505
+ .agent-activity-status[data-state="approval"] {
1506
+ border-color: rgba(245, 158, 11, 0.4);
1507
+ color: #fbbf24;
1508
+ background: rgba(245, 158, 11, 0.12);
1509
+ }
1510
+
1511
+ .agent-activity-status[data-state="approval"]::before {
1512
+ background: #fbbf24;
1513
+ animation: pulse-ring-amber 1.8s infinite;
1514
+ }
1515
+
1516
+ .agent-activity-list {
1517
+ display: grid;
1518
+ border: 1px solid var(--border);
1519
+ border-radius: 8px;
1520
+ gap: 0;
1521
+ overflow: hidden;
1522
+ }
1523
+
1524
+ .agent-activity-table-head {
1525
+ align-items: center;
1526
+ background: color-mix(in srgb, var(--panel-soft) 62%, transparent);
1527
+ border-bottom: 1px solid var(--border);
1528
+ color: var(--text-muted);
1529
+ display: grid;
1530
+ font-size: 0.68rem;
1531
+ font-weight: 650;
1532
+ gap: 10px;
1533
+ grid-template-columns: minmax(132px, 160px) 16px minmax(0, 1fr) 14px;
1534
+ min-height: 28px;
1535
+ padding: 5px 12px;
1536
+ text-transform: uppercase;
1537
+ }
1538
+
1539
+ .agent-activity-item {
1540
+ align-items: center;
1541
+ border-bottom: 1px solid var(--border);
1542
+ color: var(--text-soft);
1543
+ display: grid;
1544
+ font-size: 0.86rem;
1545
+ gap: 10px;
1546
+ grid-template-columns: minmax(132px, 160px) 16px minmax(0, 1fr) 14px;
1547
+ min-height: 34px;
1548
+ padding: 7px 12px;
1549
+ transition: background 0.2s ease, color 0.2s ease;
1550
+ }
1551
+
1552
+ .agent-activity-item:last-child {
1553
+ border-bottom: 0;
1554
+ }
1555
+
1556
+ .agent-activity-item:hover {
1557
+ background: var(--panel-soft);
1558
+ color: var(--text-main);
1559
+ }
1560
+
1561
+ .agent-activity-label {
1562
+ color: var(--text-muted);
1563
+ font-size: 0.8rem;
1564
+ line-height: 1;
1565
+ overflow: hidden;
1566
+ text-overflow: ellipsis;
1567
+ white-space: nowrap;
1568
+ }
1569
+
1570
+ .agent-activity-icon {
1571
+ display: inline-block;
1572
+ height: 14px;
1573
+ position: relative;
1574
+ width: 15px;
1575
+ }
1576
+
1577
+ .agent-activity-icon::before,
1578
+ .agent-activity-icon::after {
1579
+ content: "";
1580
+ position: absolute;
1581
+ }
1582
+
1583
+ .agent-activity-item[data-kind="folder"] .agent-activity-icon::before {
1584
+ background: var(--text-muted);
1585
+ border-radius: 2px 2px 1px 1px;
1586
+ height: 4px;
1587
+ left: 1px;
1588
+ top: 1px;
1589
+ width: 7px;
1590
+ }
1591
+
1592
+ .agent-activity-item[data-kind="folder"] .agent-activity-icon::after {
1593
+ background: color-mix(in srgb, var(--text-muted) 34%, transparent);
1594
+ border: 1px solid var(--text-muted);
1595
+ border-radius: 2px;
1596
+ height: 8px;
1597
+ left: 0;
1598
+ top: 4px;
1599
+ width: 13px;
1600
+ }
1601
+
1602
+ .agent-activity-item[data-kind="file"] .agent-activity-icon::before,
1603
+ .agent-activity-item[data-kind="tool"] .agent-activity-icon::before {
1604
+ border: 1.5px solid var(--text-muted);
1605
+ border-radius: 2px;
1606
+ height: 11px;
1607
+ left: 2px;
1608
+ top: 0;
1609
+ width: 9px;
1610
+ }
1611
+
1612
+ .agent-activity-item[data-kind="file"] .agent-activity-icon::after,
1613
+ .agent-activity-item[data-kind="tool"] .agent-activity-icon::after {
1614
+ border-right: 1.5px solid var(--text-muted);
1615
+ border-top: 1.5px solid var(--text-muted);
1616
+ height: 4px;
1617
+ right: 1px;
1618
+ top: 0;
1619
+ width: 4px;
1620
+ }
1621
+
1622
+ .agent-activity-item[data-kind="search"] .agent-activity-icon::before {
1623
+ border: 1.7px solid var(--text-muted);
1624
+ border-radius: 50%;
1625
+ height: 7px;
1626
+ left: 1px;
1627
+ top: 1px;
1628
+ width: 7px;
1629
+ }
1630
+
1631
+ .agent-activity-item[data-kind="search"] .agent-activity-icon::after {
1632
+ background: var(--text-muted);
1633
+ border-radius: 1px;
1634
+ height: 6px;
1635
+ left: 9px;
1636
+ top: 8px;
1637
+ transform: rotate(-45deg);
1638
+ width: 2px;
1639
+ }
1640
+
1641
+ .agent-activity-item[data-kind="terminal"] .agent-activity-icon::before {
1642
+ border: 1.5px solid var(--text-muted);
1643
+ border-radius: 3px;
1644
+ height: 10px;
1645
+ left: 0;
1646
+ top: 1px;
1647
+ width: 13px;
1648
+ }
1649
+
1650
+ .agent-activity-item[data-kind="terminal"] .agent-activity-icon::after {
1651
+ background: var(--text-muted);
1652
+ box-shadow: 4px 0 0 var(--text-muted);
1653
+ height: 1.5px;
1654
+ left: 4px;
1655
+ top: 7px;
1656
+ width: 3px;
1657
+ }
1658
+
1659
+ .agent-activity-item[data-state="active"] .agent-activity-label {
1660
+ color: var(--text-soft);
1661
+ }
1662
+
1663
+ .agent-activity-item[data-state="error"] .agent-activity-label {
1664
+ color: #f87171;
1665
+ }
1666
+
1667
+ .agent-activity-text {
1668
+ min-width: 0;
1669
+ overflow: hidden;
1670
+ text-overflow: ellipsis;
1671
+ white-space: nowrap;
1672
+ line-height: 1.35;
1673
+ }
1674
+
1675
+ .agent-activity-chevron {
1676
+ color: var(--text-muted);
1677
+ font-size: 1rem;
1678
+ line-height: 1;
1679
+ }
1680
+
1681
+ /* Smart Context Toggle */
1682
+ .smart-context-bar {
1683
+ display: flex;
1684
+ align-items: center;
1685
+ flex-wrap: wrap;
1686
+ gap: 12px;
1687
+ padding: 4px 6px;
1688
+ margin-bottom: 8px;
1689
+ }
1690
+
1691
+ .smart-context-control {
1692
+ align-items: center;
1693
+ display: inline-flex;
1694
+ gap: 8px;
1695
+ }
1696
+
1697
+ .smart-context-control.is-active .smart-context-label {
1698
+ color: var(--accent);
1699
+ }
1700
+
1701
+ .smart-context-label {
1702
+ font-size: 0.85rem;
1703
+ color: var(--text-main);
1704
+ opacity: 0.9;
1705
+ font-weight: 500;
1706
+ }
1707
+
1708
+ .toggle-switch {
1709
+ position: relative;
1710
+ display: inline-block;
1711
+ width: 34px;
1712
+ height: 20px;
1713
+ }
1714
+
1715
+ .toggle-switch input {
1716
+ opacity: 0;
1717
+ width: 0;
1718
+ height: 0;
1719
+ }
1720
+
1721
+ .slider {
1722
+ position: absolute;
1723
+ cursor: pointer;
1724
+ top: 0; left: 0; right: 0; bottom: 0;
1725
+ background-color: rgba(255, 255, 255, 0.2);
1726
+ transition: .4s;
1727
+ }
1728
+
1729
+ .slider:before {
1730
+ position: absolute;
1731
+ content: "";
1732
+ height: 14px;
1733
+ width: 14px;
1734
+ left: 3px;
1735
+ bottom: 3px;
1736
+ background-color: white;
1737
+ transition: .4s;
1738
+ }
1739
+
1740
+ input:checked + .slider {
1741
+ background-color: var(--accent);
1742
+ }
1743
+
1744
+ input:checked + .slider:before {
1745
+ transform: translateX(14px);
1746
+ }
1747
+
1748
+ .slider.round {
1749
+ border-radius: 20px;
1750
+ }
1751
+
1752
+ .slider.round:before {
1753
+ border-radius: 50%;
1754
+ }
1755
+
1756
+ /* ========================
1757
+ Proactive Smart Suggestion Engine
1758
+ ======================== */
1759
+
1760
+ .proactive-bar {
1761
+ animation: proactiveSlideDown 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
1762
+ background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 15%, transparent), color-mix(in srgb, var(--accent) 5%, transparent));
1763
+ backdrop-filter: var(--glass-blur);
1764
+ -webkit-backdrop-filter: var(--glass-blur);
1765
+ border-bottom: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
1766
+ border-top: 1px solid color-mix(in srgb, var(--accent) 20%, transparent);
1767
+ padding: 12px 16px 14px;
1768
+ position: relative;
1769
+ z-index: 5;
1770
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
1771
+ }
1772
+
1773
+ .proactive-bar::before {
1774
+ content: '';
1775
+ position: absolute;
1776
+ inset: 0;
1777
+ border-left: 3px solid var(--accent);
1778
+ pointer-events: none;
1779
+ box-shadow: 3px 0 12px color-mix(in srgb, var(--accent) 25%, transparent) inset;
1780
+ }
1781
+
1782
+ @keyframes proactiveSlideDown {
1783
+ from { opacity: 0; transform: translateY(-100%) scaleY(0.9); }
1784
+ to { opacity: 1; transform: translateY(0) scaleY(1); }
1785
+ }
1786
+
1787
+ /* Header row: icon + message + dismiss */
1788
+ .proactive-header {
1789
+ display: flex;
1790
+ align-items: center;
1791
+ gap: 8px;
1792
+ margin-bottom: 8px;
1793
+ }
1794
+
1795
+ .proactive-icon {
1796
+ font-size: 0.95rem;
1797
+ flex-shrink: 0;
1798
+ }
1799
+
1800
+ .proactive-message {
1801
+ flex: 1;
1802
+ font-size: 0.85rem;
1803
+ color: var(--text-main);
1804
+ opacity: 0.9;
1805
+ line-height: 1.4;
1806
+ }
1807
+
1808
+ .proactive-dismiss-btn {
1809
+ -webkit-app-region: no-drag;
1810
+ background: transparent;
1811
+ border: none;
1812
+ color: var(--text-muted);
1813
+ cursor: pointer;
1814
+ font-size: 0.85rem;
1815
+ padding: 2px 6px;
1816
+ border-radius: 6px;
1817
+ transition: all 0.2s;
1818
+ flex-shrink: 0;
1819
+ }
1820
+
1821
+ .proactive-dismiss-btn:hover {
1822
+ background: rgba(239, 68, 68, 0.15);
1823
+ color: #ef4444;
1824
+ }
1825
+
1826
+ /* Chips row */
1827
+ .proactive-chips {
1828
+ display: flex;
1829
+ flex-wrap: wrap;
1830
+ gap: 7px;
1831
+ }
1832
+
1833
+ .suggestion-chip {
1834
+ -webkit-app-region: no-drag;
1835
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
1836
+ border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
1837
+ border-radius: 20px;
1838
+ color: var(--text-main);
1839
+ cursor: pointer;
1840
+ font-family: inherit;
1841
+ font-size: 0.85rem;
1842
+ font-weight: 500;
1843
+ padding: 6px 16px;
1844
+ transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
1845
+ animation: chipPop 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
1846
+ opacity: 0;
1847
+ transform: scale(0.8);
1848
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1849
+ }
1850
+
1851
+ @keyframes chipPop {
1852
+ to { opacity: 1; transform: scale(1); }
1853
+ }
1854
+
1855
+ .suggestion-chip:hover {
1856
+ background: linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 70%, #000000));
1857
+ border-color: rgba(255, 255, 255, 0.3);
1858
+ color: white;
1859
+ box-shadow: 0 6px 15px color-mix(in srgb, var(--accent) 40%, transparent), inset 0 1px 1px rgba(255, 255, 255, 0.2);
1860
+ transform: translateY(-3px) scale(1.05);
1861
+ }
1862
+
1863
+ .suggestion-chip:active {
1864
+ transform: scale(0.97);
1865
+ }
1866
+
1867
+ /* Antigravity-inspired main shell */
1868
+ .app-body {
1869
+ --sidebar-expanded-width: 264px;
1870
+ --sidebar-collapsed-width: 56px;
1871
+ --sidebar-content-gap: 10px;
1872
+ flex: 1;
1873
+ min-height: 0;
1874
+ display: grid;
1875
+ grid-template-columns: minmax(0, 1fr);
1876
+ background: var(--bg-gradient);
1877
+ position: relative;
1878
+ }
1879
+
1880
+ .sidebar-toggle {
1881
+ display: none !important;
1882
+ }
1883
+
1884
+ .workspace-sidebar {
1885
+ position: absolute;
1886
+ inset: 0 auto 0 0;
1887
+ z-index: 11;
1888
+ width: 264px;
1889
+ display: flex;
1890
+ flex-direction: column;
1891
+ min-width: 0;
1892
+ padding: 20px 10px 12px 14px;
1893
+ background: var(--chrome-bg);
1894
+ backdrop-filter: var(--glass-blur);
1895
+ -webkit-backdrop-filter: var(--glass-blur);
1896
+ border-right: 1px solid var(--border);
1897
+ color: var(--text-muted);
1898
+ overflow: hidden;
1899
+ transition: width 0.22s ease, padding 0.22s ease, opacity 0.18s ease, transform 0.22s ease;
1900
+ }
1901
+
1902
+ .sidebar-brand {
1903
+ display: flex;
1904
+ align-items: center;
1905
+ gap: 10px;
1906
+ padding: 0 8px 16px 2px;
1907
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
1908
+ margin-bottom: 14px;
1909
+ overflow: hidden;
1910
+ transition: all 0.22s ease;
1911
+ }
1912
+
1913
+ .sidebar-brand.clickable {
1914
+ cursor: pointer;
1915
+ user-select: none;
1916
+ -webkit-app-region: no-drag;
1917
+ outline: none;
1918
+ }
1919
+
1920
+ .sidebar-brand.clickable:hover .sidebar-brand-name {
1921
+ color: var(--accent-hover);
1922
+ }
1923
+
1924
+ .sidebar-brand.clickable:hover .sidebar-logo {
1925
+ filter: brightness(1.15);
1926
+ transform: scale(1.05);
1927
+ }
1928
+
1929
+ .sidebar-logo {
1930
+ width: 32px;
1931
+ height: 32px;
1932
+ object-fit: contain;
1933
+ flex-shrink: 0;
1934
+ border-radius: 6px;
1935
+ transition: transform 0.2s ease, filter 0.2s ease;
1936
+ }
1937
+
1938
+ .sidebar-brand-name {
1939
+ font-size: 0.95rem;
1940
+ font-weight: 600;
1941
+ color: var(--text-main);
1942
+ white-space: nowrap;
1943
+ opacity: 1;
1944
+ transition: opacity 0.15s ease;
1945
+ }
1946
+
1947
+ /* Collapsed state styling */
1948
+ .app-body.sidebar-collapsed .sidebar-brand {
1949
+ padding: 0 0 12px 0;
1950
+ justify-content: center;
1951
+ gap: 0;
1952
+ border-bottom-color: transparent;
1953
+ }
1954
+
1955
+ .app-body.sidebar-collapsed .sidebar-brand-name {
1956
+ opacity: 0;
1957
+ width: 0;
1958
+ pointer-events: none;
1959
+ display: none;
1960
+ }
1961
+
1962
+ .app-body.sidebar-collapsed .workspace-sidebar {
1963
+ width: 56px;
1964
+ padding: 20px 8px 12px;
1965
+ opacity: 1;
1966
+ pointer-events: auto;
1967
+ transform: translateX(0);
1968
+ }
1969
+
1970
+ .workspace-sidebar button {
1971
+ font: inherit;
1972
+ font-size: 0.9rem;
1973
+ -webkit-app-region: no-drag;
1974
+ }
1975
+
1976
+ .sidebar-new-chat,
1977
+ .sidebar-top-action,
1978
+ .sidebar-settings,
1979
+ .sidebar-bottom-actions .clear-btn,
1980
+ .sidebar-bottom-actions .settings-btn {
1981
+ width: 100%;
1982
+ min-width: 0;
1983
+ max-width: none;
1984
+ height: 32px;
1985
+ display: flex;
1986
+ align-items: center;
1987
+ justify-content: flex-start;
1988
+ gap: 9px;
1989
+ border: 0;
1990
+ border-radius: 6px;
1991
+ background: transparent;
1992
+ color: var(--text-soft);
1993
+ cursor: pointer;
1994
+ padding: 0 10px;
1995
+ text-align: left;
1996
+ transition: background 0.16s ease, color 0.16s ease;
1997
+ }
1998
+
1999
+ .sidebar-new-chat {
2000
+ background: var(--surface-strong);
2001
+ color: var(--text-main);
2002
+ margin-bottom: 4px;
2003
+ border: 1px solid var(--border);
2004
+ }
2005
+
2006
+ .sidebar-new-chat:hover,
2007
+ .sidebar-chat-btn:hover,
2008
+ .sidebar-chat-btn.is-active,
2009
+ .sidebar-top-action:hover,
2010
+ .sidebar-top-action.is-active,
2011
+ .sidebar-settings:hover,
2012
+ .sidebar-bottom-actions .clear-btn:hover,
2013
+ .sidebar-bottom-actions .settings-btn:hover {
2014
+ background: var(--surface-strong);
2015
+ color: var(--text-main);
2016
+ }
2017
+
2018
+ .sidebar-top-action {
2019
+ margin-bottom: 4px;
2020
+ }
2021
+
2022
+ .sidebar-top-action:last-of-type {
2023
+ margin-bottom: 12px;
2024
+ }
2025
+
2026
+ .sidebar-model-controls {
2027
+ display: grid;
2028
+ width: 100%;
2029
+ align-items: stretch;
2030
+ justify-items: stretch;
2031
+ justify-content: stretch;
2032
+ gap: 2px;
2033
+ padding: 10px 0 18px;
2034
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
2035
+ border-bottom: 1px solid rgba(255, 255, 255, 0.035);
2036
+ margin-bottom: 6px;
2037
+ }
2038
+
2039
+ .workspace-sidebar .toggle-model-btn,
2040
+ .workspace-sidebar .change-expression-btn,
2041
+ .workspace-sidebar .accessory-cycle-btn,
2042
+ .workspace-sidebar .toggle-interaction-btn,
2043
+ .workspace-sidebar .interaction-guide-btn {
2044
+ width: 100%;
2045
+ min-width: 0;
2046
+ max-width: none;
2047
+ height: 32px;
2048
+ justify-content: flex-start;
2049
+ padding: 0 10px;
2050
+ color: var(--text-soft);
2051
+ font-weight: 400;
2052
+ gap: 9px;
2053
+ }
2054
+
2055
+ .workspace-sidebar .toggle-model-btn:hover,
2056
+ .workspace-sidebar .toggle-model-btn.active,
2057
+ .workspace-sidebar .change-expression-btn:hover,
2058
+ .workspace-sidebar .accessory-cycle-btn:hover,
2059
+ .workspace-sidebar .accessory-cycle-btn.active,
2060
+ .workspace-sidebar .toggle-interaction-btn:hover,
2061
+ .workspace-sidebar .toggle-interaction-btn.active,
2062
+ .workspace-sidebar .interaction-guide-btn:hover,
2063
+ .workspace-sidebar .interaction-guide-btn.active {
2064
+ background: var(--surface-strong);
2065
+ border-color: transparent;
2066
+ color: var(--text-main);
2067
+ }
2068
+
2069
+ .sidebar-section {
2070
+ flex: 1;
2071
+ min-height: 0;
2072
+ overflow: hidden;
2073
+ padding-top: 6px;
2074
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
2075
+ }
2076
+
2077
+ .sidebar-section-title {
2078
+ padding: 0 10px 12px;
2079
+ color: var(--text-muted);
2080
+ font-size: 0.9rem;
2081
+ }
2082
+
2083
+ .sidebar-subsection-title {
2084
+ padding-top: 14px;
2085
+ padding-bottom: 8px;
2086
+ }
2087
+
2088
+ .sidebar-section-title.clickable {
2089
+ cursor: pointer;
2090
+ user-select: none;
2091
+ transition: color 0.16s ease;
2092
+ }
2093
+
2094
+ .sidebar-section-title.clickable:hover {
2095
+ color: var(--text-main);
2096
+ }
2097
+
2098
+ .sidebar-project {
2099
+ height: 32px;
2100
+ display: flex;
2101
+ align-items: center;
2102
+ gap: 9px;
2103
+ padding: 0 10px;
2104
+ color: var(--text-muted);
2105
+ border-radius: 6px;
2106
+ white-space: nowrap;
2107
+ overflow: hidden;
2108
+ text-overflow: ellipsis;
2109
+ border: 0;
2110
+ background: transparent;
2111
+ width: 100%;
2112
+ cursor: default;
2113
+ text-align: left;
2114
+ }
2115
+
2116
+ .sidebar-chat-list {
2117
+ display: grid;
2118
+ gap: 2px;
2119
+ max-height: min(360px, 42vh);
2120
+ overflow-y: auto;
2121
+ padding-right: 2px;
2122
+ }
2123
+
2124
+ .sidebar-chat-item {
2125
+ cursor: pointer;
2126
+ }
2127
+
2128
+ .sidebar-chat-item:hover {
2129
+ background: var(--surface-strong);
2130
+ color: var(--text-main);
2131
+ }
2132
+
2133
+ .sidebar-chat-title {
2134
+ min-width: 0;
2135
+ flex: 1;
2136
+ overflow: hidden;
2137
+ text-overflow: ellipsis;
2138
+ white-space: nowrap;
2139
+ }
2140
+
2141
+ .sidebar-chat-delete {
2142
+ width: 24px;
2143
+ height: 24px;
2144
+ margin-left: 2px;
2145
+ display: inline-flex;
2146
+ align-items: center;
2147
+ justify-content: center;
2148
+ border-radius: 5px;
2149
+ color: var(--text-muted);
2150
+ opacity: 0;
2151
+ flex: 0 0 auto;
2152
+ }
2153
+
2154
+ .sidebar-chat-edit {
2155
+ width: 24px;
2156
+ height: 24px;
2157
+ margin-left: auto;
2158
+ display: inline-flex;
2159
+ align-items: center;
2160
+ justify-content: center;
2161
+ border-radius: 5px;
2162
+ color: var(--text-muted);
2163
+ opacity: 0;
2164
+ flex: 0 0 auto;
2165
+ }
2166
+
2167
+ .sidebar-chat-item:hover .sidebar-chat-delete,
2168
+ .sidebar-chat-delete:focus-visible,
2169
+ .sidebar-chat-item:hover .sidebar-chat-edit,
2170
+ .sidebar-chat-edit:focus-visible {
2171
+ opacity: 1;
2172
+ }
2173
+
2174
+ .sidebar-chat-delete:hover {
2175
+ color: #fca5a5;
2176
+ background: rgba(248, 113, 113, 0.12);
2177
+ }
2178
+
2179
+ .sidebar-chat-edit:hover {
2180
+ color: #c7d2fe;
2181
+ background: rgba(99, 102, 241, 0.12);
2182
+ }
2183
+
2184
+ .sidebar-chat-rename-input {
2185
+ background: rgba(255, 255, 255, 0.08);
2186
+ border: 1px solid rgba(255, 255, 255, 0.16);
2187
+ border-radius: 4px;
2188
+ color: var(--text-main);
2189
+ font-family: inherit;
2190
+ font-size: 0.82rem;
2191
+ padding: 2px 6px;
2192
+ width: 100%;
2193
+ box-sizing: border-box;
2194
+ outline: none;
2195
+ margin-right: 4px;
2196
+ }
2197
+
2198
+ .sidebar-chat-rename-input:focus {
2199
+ border-color: var(--accent);
2200
+ background: rgba(255, 255, 255, 0.12);
2201
+ }
2202
+
2203
+ .sidebar-chat-item.active:hover .mint-status-pill {
2204
+ display: none;
2205
+ }
2206
+
2207
+ .app-body.sidebar-collapsed .sidebar-new-chat,
2208
+ .app-body.sidebar-collapsed .sidebar-top-action,
2209
+ .app-body.sidebar-collapsed .sidebar-settings,
2210
+ .app-body.sidebar-collapsed .sidebar-bottom-actions .clear-btn,
2211
+ .app-body.sidebar-collapsed .sidebar-bottom-actions .settings-btn,
2212
+ .app-body.sidebar-collapsed .workspace-sidebar .toggle-model-btn,
2213
+ .app-body.sidebar-collapsed .workspace-sidebar .change-expression-btn,
2214
+ .app-body.sidebar-collapsed .workspace-sidebar .accessory-cycle-btn,
2215
+ .app-body.sidebar-collapsed .workspace-sidebar .toggle-interaction-btn,
2216
+ .app-body.sidebar-collapsed .workspace-sidebar .interaction-guide-btn,
2217
+ .app-body.sidebar-collapsed .sidebar-project {
2218
+ width: 40px;
2219
+ height: 34px;
2220
+ justify-content: center;
2221
+ gap: 0;
2222
+ padding: 0;
2223
+ }
2224
+
2225
+ .app-body.sidebar-collapsed .sidebar-model-controls,
2226
+ .app-body.sidebar-collapsed .sidebar-bottom-actions {
2227
+ justify-items: center;
2228
+ }
2229
+
2230
+ .app-body.sidebar-collapsed .sidebar-section-title,
2231
+ .app-body.sidebar-collapsed .workspace-sidebar button > span:not([aria-hidden="true"]),
2232
+ .app-body.sidebar-collapsed .sidebar-project > span:not([aria-hidden="true"]):not(.mint-status-pill),
2233
+ .app-body.sidebar-collapsed .mint-status-label {
2234
+ display: none;
2235
+ }
2236
+
2237
+ .app-body.sidebar-collapsed .mint-status-pill {
2238
+ margin-left: 3px;
2239
+ padding: 0;
2240
+ background: transparent;
2241
+ }
2242
+
2243
+ .app-body.sidebar-collapsed .sidebar-project.active {
2244
+ gap: 4px;
2245
+ }
2246
+
2247
+ .mint-status-pill {
2248
+ margin-left: auto;
2249
+ min-width: 0;
2250
+ display: inline-flex;
2251
+ align-items: center;
2252
+ gap: 6px;
2253
+ padding: 3px 7px;
2254
+ border-radius: 999px;
2255
+ background: rgba(255, 255, 255, 0.055);
2256
+ color: var(--text-muted);
2257
+ font-size: 0.68rem;
2258
+ line-height: 1;
2259
+ flex-shrink: 0;
2260
+ }
2261
+
2262
+ .mint-status-dot {
2263
+ width: 7px;
2264
+ height: 7px;
2265
+ border-radius: 50%;
2266
+ background: #94a3b8;
2267
+ box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.12);
2268
+ flex: 0 0 auto;
2269
+ }
2270
+
2271
+ .mint-status-pill[data-state="listening"],
2272
+ .model-activity-badge[data-state="listening"] {
2273
+ color: #7dd3fc;
2274
+ }
2275
+
2276
+ .mint-status-pill[data-state="listening"] .mint-status-dot,
2277
+ .model-activity-badge[data-state="listening"] .mint-status-dot {
2278
+ background: #38bdf8;
2279
+ box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.16);
2280
+ animation: mintStatusPulse 1.2s ease-in-out infinite;
2281
+ }
2282
+
2283
+ .mint-status-pill[data-state="thinking"],
2284
+ .model-activity-badge[data-state="thinking"] {
2285
+ color: #a7f3d0;
2286
+ }
2287
+
2288
+ .mint-status-pill[data-state="thinking"] .mint-status-dot,
2289
+ .model-activity-badge[data-state="thinking"] .mint-status-dot {
2290
+ background: var(--accent);
2291
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);
2292
+ animation: mintStatusPulse 1s ease-in-out infinite;
2293
+ }
2294
+
2295
+ .mint-status-pill[data-state="speaking"],
2296
+ .model-activity-badge[data-state="speaking"] {
2297
+ color: #86efac;
2298
+ }
2299
+
2300
+ .mint-status-pill[data-state="speaking"] .mint-status-dot,
2301
+ .model-activity-badge[data-state="speaking"] .mint-status-dot {
2302
+ background: #22c55e;
2303
+ box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.16);
2304
+ animation: mintStatusPulse 0.9s ease-in-out infinite;
2305
+ }
2306
+
2307
+ .mint-status-pill[data-state="error"],
2308
+ .model-activity-badge[data-state="error"] {
2309
+ color: #fca5a5;
2310
+ }
2311
+
2312
+ .mint-status-pill[data-state="error"] .mint-status-dot,
2313
+ .model-activity-badge[data-state="error"] .mint-status-dot {
2314
+ background: #ef4444;
2315
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.16);
2316
+ }
2317
+
2318
+ @keyframes mintStatusPulse {
2319
+ 0%, 100% {
2320
+ transform: scale(1);
2321
+ opacity: 0.8;
2322
+ }
2323
+ 50% {
2324
+ transform: scale(1.35);
2325
+ opacity: 1;
2326
+ }
2327
+ }
2328
+
2329
+ .sidebar-project.active,
2330
+ .sidebar-project.is-active {
2331
+ background: color-mix(in srgb, var(--accent) 13%, transparent);
2332
+ color: var(--text-main);
2333
+ }
2334
+
2335
+ .sidebar-pictures-btn {
2336
+ cursor: pointer;
2337
+ }
2338
+
2339
+ .sidebar-pictures-btn:hover {
2340
+ background: var(--surface-strong);
2341
+ color: var(--text-main);
2342
+ }
2343
+
2344
+ .sidebar-settings {
2345
+ margin-top: auto;
2346
+ }
2347
+
2348
+ .sidebar-bottom-actions {
2349
+ display: grid;
2350
+ width: 100%;
2351
+ align-items: stretch;
2352
+ justify-items: stretch;
2353
+ gap: 2px;
2354
+ margin-top: auto;
2355
+ padding-top: 10px;
2356
+ border-top: 1px solid rgba(255, 255, 255, 0.035);
2357
+ }
2358
+
2359
+ .assistant-workspace {
2360
+ display: grid;
2361
+ grid-template-columns: minmax(320px, 1fr) minmax(360px, 520px);
2362
+ gap: 18px;
2363
+ margin-left: var(--sidebar-expanded-width);
2364
+ padding: 0;
2365
+ background: var(--bg-gradient);
2366
+ position: relative;
2367
+ overflow: hidden;
2368
+ transition: grid-template-columns 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2369
+ gap 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2370
+ margin-left 0.22s ease,
2371
+ opacity 0.22s ease,
2372
+ transform 0.22s ease;
2373
+ }
2374
+
2375
+ .assistant-workspace.layout-chat-wide {
2376
+ grid-template-columns: minmax(280px, 0.72fr) minmax(460px, 1.18fr);
2377
+ }
2378
+
2379
+ .assistant-workspace.layout-model-wide {
2380
+ grid-template-columns: minmax(420px, 1.18fr) minmax(360px, 0.72fr);
2381
+ }
2382
+
2383
+
2384
+ .app-body.sidebar-collapsed .assistant-workspace {
2385
+ margin-left: calc(var(--sidebar-collapsed-width) + var(--sidebar-content-gap));
2386
+ }
2387
+
2388
+ .app-body.pictures-open .assistant-workspace {
2389
+ opacity: 0;
2390
+ pointer-events: none;
2391
+ }
2392
+
2393
+ .assistant-workspace.workspace-open {
2394
+ grid-template-columns: minmax(360px, 520px) minmax(460px, 1fr);
2395
+ }
2396
+
2397
+ .assistant-workspace.workspace-open .model-stage {
2398
+ display: none;
2399
+ }
2400
+
2401
+ .workspace-panel {
2402
+ min-width: 0;
2403
+ min-height: 0;
2404
+ height: 100%;
2405
+ display: grid;
2406
+ grid-template-rows: auto auto minmax(0, 1fr);
2407
+ padding: 16px 0 16px 14px;
2408
+ color: var(--text-main);
2409
+ }
2410
+
2411
+ .workspace-panel-header {
2412
+ display: flex;
2413
+ align-items: center;
2414
+ justify-content: space-between;
2415
+ gap: 12px;
2416
+ padding: 0 10px 12px 0;
2417
+ }
2418
+
2419
+ .workspace-kicker {
2420
+ display: block;
2421
+ margin-bottom: 4px;
2422
+ color: var(--accent-hover);
2423
+ font-size: 0.68rem;
2424
+ font-weight: 700;
2425
+ letter-spacing: 0.08em;
2426
+ text-transform: uppercase;
2427
+ }
2428
+
2429
+ .workspace-panel-header h2 {
2430
+ font-size: 1.05rem;
2431
+ font-weight: 650;
2432
+ }
2433
+
2434
+ .workspace-agent-pill {
2435
+ display: inline-flex;
2436
+ align-items: center;
2437
+ height: 24px;
2438
+ padding: 0 8px;
2439
+ border: 1px solid var(--border);
2440
+ border-radius: 999px;
2441
+ background: var(--surface-bg);
2442
+ color: var(--text-muted);
2443
+ font-size: 0.68rem;
2444
+ white-space: nowrap;
2445
+ }
2446
+
2447
+ .workspace-agent-pill[data-state="agent"],
2448
+ .workspace-agent-pill[data-state="thinking"] {
2449
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--border));
2450
+ color: var(--accent-hover);
2451
+ }
2452
+
2453
+ .workspace-panel-actions {
2454
+ display: grid;
2455
+ grid-template-columns: 1fr 1fr;
2456
+ gap: 8px;
2457
+ padding: 0 10px 12px 0;
2458
+ }
2459
+
2460
+ .workspace-panel-actions button {
2461
+ height: 31px;
2462
+ border: 1px solid var(--border);
2463
+ border-radius: 7px;
2464
+ background: linear-gradient(180deg, color-mix(in srgb, var(--surface-bg) 92%, #ffffff 4%), var(--surface-bg));
2465
+ color: var(--text-main);
2466
+ font-size: 0.75rem;
2467
+ font-weight: 650;
2468
+ cursor: pointer;
2469
+ }
2470
+
2471
+ .workspace-panel-actions button:hover {
2472
+ border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
2473
+ background: color-mix(in srgb, var(--accent) 12%, var(--surface-bg));
2474
+ }
2475
+
2476
+ .workspace-panel-actions button:disabled {
2477
+ opacity: 0.45;
2478
+ cursor: not-allowed;
2479
+ }
2480
+
2481
+ .workspace-panel-actions button:disabled:hover {
2482
+ border-color: var(--border);
2483
+ background: var(--surface-bg);
2484
+ }
2485
+
2486
+ .workspace-tree-shell {
2487
+ min-height: 0;
2488
+ overflow: auto;
2489
+ border: 1px solid color-mix(in srgb, var(--border) 86%, #ffffff 4%);
2490
+ border-radius: 7px;
2491
+ background:
2492
+ linear-gradient(90deg, transparent calc(100% - 1px), color-mix(in srgb, var(--border) 72%, transparent) calc(100% - 1px)),
2493
+ color-mix(in srgb, var(--surface-bg) 80%, #060708 20%);
2494
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025);
2495
+ scrollbar-color: color-mix(in srgb, var(--text-muted) 38%, transparent) transparent;
2496
+ scrollbar-width: thin;
2497
+ }
2498
+
2499
+ .workspace-tree-shell::-webkit-scrollbar {
2500
+ width: 10px;
2501
+ height: 10px;
2502
+ }
2503
+
2504
+ .workspace-tree-shell::-webkit-scrollbar-thumb {
2505
+ border: 3px solid transparent;
2506
+ border-radius: 999px;
2507
+ background: color-mix(in srgb, var(--text-muted) 38%, transparent);
2508
+ background-clip: padding-box;
2509
+ }
2510
+
2511
+ .workspace-root-row,
2512
+ .workspace-tree-row {
2513
+ width: 100%;
2514
+ min-width: 0;
2515
+ height: 24px;
2516
+ display: grid;
2517
+ grid-template-columns: 14px 18px minmax(0, 1fr);
2518
+ align-items: center;
2519
+ gap: 3px;
2520
+ border: 0;
2521
+ background: transparent;
2522
+ color: var(--text-soft);
2523
+ font: inherit;
2524
+ font-size: 0.8rem;
2525
+ line-height: 1;
2526
+ text-align: left;
2527
+ }
2528
+
2529
+ .workspace-root-row {
2530
+ position: sticky;
2531
+ top: 0;
2532
+ z-index: 1;
2533
+ height: 27px;
2534
+ padding: 0 8px 0 10px;
2535
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
2536
+ background: color-mix(in srgb, var(--surface-strong) 88%, #ffffff 3%);
2537
+ color: var(--text-main);
2538
+ font-weight: 650;
2539
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.18);
2540
+ }
2541
+
2542
+ .workspace-tree-row {
2543
+ position: relative;
2544
+ cursor: default;
2545
+ padding-right: 8px;
2546
+ }
2547
+
2548
+ .workspace-tree-row.is-directory {
2549
+ color: var(--text-main);
2550
+ cursor: grab;
2551
+ }
2552
+
2553
+ .workspace-tree-row.is-file {
2554
+ cursor: grab;
2555
+ }
2556
+
2557
+ .workspace-tree-row:active {
2558
+ cursor: grabbing;
2559
+ }
2560
+
2561
+ .workspace-tree-row:hover {
2562
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
2563
+ }
2564
+
2565
+ .workspace-tree-row:hover::before {
2566
+ content: "";
2567
+ position: absolute;
2568
+ inset: 0 auto 0 0;
2569
+ width: 2px;
2570
+ background: color-mix(in srgb, var(--accent) 74%, transparent);
2571
+ }
2572
+
2573
+ .workspace-tree-chevron {
2574
+ position: relative;
2575
+ width: 14px;
2576
+ height: 14px;
2577
+ color: var(--text-muted);
2578
+ }
2579
+
2580
+ .workspace-tree-chevron::before {
2581
+ content: "";
2582
+ position: absolute;
2583
+ top: 3px;
2584
+ left: 4px;
2585
+ width: 0;
2586
+ height: 0;
2587
+ border-top: 4px solid transparent;
2588
+ border-bottom: 4px solid transparent;
2589
+ border-left: 5px solid currentColor;
2590
+ opacity: 0.82;
2591
+ transform-origin: 45% 50%;
2592
+ }
2593
+
2594
+ .workspace-tree-chevron[data-open="true"]::before {
2595
+ transform: rotate(90deg);
2596
+ }
2597
+
2598
+ .workspace-tree-chevron.is-spacer::before {
2599
+ display: none;
2600
+ }
2601
+
2602
+ .workspace-tree-icon {
2603
+ position: relative;
2604
+ width: 18px;
2605
+ height: 18px;
2606
+ display: inline-grid;
2607
+ place-items: center;
2608
+ overflow: hidden;
2609
+ color: #94a3b8;
2610
+ font-size: 0.54rem;
2611
+ font-weight: 800;
2612
+ letter-spacing: 0;
2613
+ text-align: center;
2614
+ white-space: nowrap;
2615
+ }
2616
+
2617
+ .workspace-tree-icon.material-icon {
2618
+ overflow: visible;
2619
+ color: inherit;
2620
+ }
2621
+
2622
+ .workspace-tree-icon.material-icon::before,
2623
+ .workspace-tree-icon.material-icon::after {
2624
+ display: none;
2625
+ }
2626
+
2627
+ .workspace-tree-icon.material-icon img {
2628
+ width: 17px;
2629
+ height: 17px;
2630
+ display: block;
2631
+ object-fit: contain;
2632
+ flex: 0 0 auto;
2633
+ filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.18));
2634
+ pointer-events: none;
2635
+ user-select: none;
2636
+ }
2637
+
2638
+ .workspace-tree-icon.folder {
2639
+ color: #7ee787;
2640
+ }
2641
+
2642
+ .workspace-tree-icon.folder::before {
2643
+ content: "";
2644
+ position: absolute;
2645
+ left: 2px;
2646
+ right: 2px;
2647
+ bottom: 4px;
2648
+ height: 9px;
2649
+ border-radius: 2px;
2650
+ background: currentColor;
2651
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.24);
2652
+ }
2653
+
2654
+ .workspace-tree-icon.folder::after {
2655
+ content: "";
2656
+ position: absolute;
2657
+ left: 3px;
2658
+ top: 4px;
2659
+ width: 7px;
2660
+ height: 4px;
2661
+ border-radius: 2px 2px 0 0;
2662
+ background: currentColor;
2663
+ }
2664
+
2665
+ .workspace-tree-icon.ts,
2666
+ .workspace-tree-icon.tsx {
2667
+ color: #58a6ff;
2668
+ }
2669
+
2670
+ .workspace-tree-icon.js,
2671
+ .workspace-tree-icon.json {
2672
+ color: #f2cc60;
2673
+ }
2674
+
2675
+ .workspace-tree-icon.css {
2676
+ color: #c297ff;
2677
+ }
2678
+
2679
+ .workspace-tree-icon.html,
2680
+ .workspace-tree-icon.md {
2681
+ color: #7aa2f7;
2682
+ }
2683
+
2684
+ .workspace-tree-icon.rs {
2685
+ color: #ffab70;
2686
+ }
2687
+
2688
+ .workspace-tree-icon.file::before,
2689
+ .workspace-tree-icon.css::before,
2690
+ .workspace-tree-icon.html::before,
2691
+ .workspace-tree-icon.js::before,
2692
+ .workspace-tree-icon.json::before,
2693
+ .workspace-tree-icon.md::before,
2694
+ .workspace-tree-icon.rs::before,
2695
+ .workspace-tree-icon.ts::before,
2696
+ .workspace-tree-icon.tsx::before {
2697
+ content: "";
2698
+ position: absolute;
2699
+ inset: 2px 3px;
2700
+ border: 1px solid currentColor;
2701
+ border-radius: 2px;
2702
+ background: color-mix(in srgb, currentColor 13%, transparent);
2703
+ opacity: 0.84;
2704
+ }
2705
+
2706
+ .workspace-tree-name {
2707
+ min-width: 0;
2708
+ overflow: hidden;
2709
+ text-overflow: ellipsis;
2710
+ white-space: nowrap;
2711
+ }
2712
+
2713
+ .workspace-tree-empty {
2714
+ padding: 18px;
2715
+ color: var(--text-muted);
2716
+ font-size: 0.82rem;
2717
+ }
2718
+
2719
+ .pictures-library {
2720
+ position: absolute;
2721
+ inset: 0;
2722
+ z-index: 5;
2723
+ min-height: 0;
2724
+ padding: 56px clamp(28px, 6vw, 92px) 34px;
2725
+ overflow: auto;
2726
+ background: var(--bg-gradient);
2727
+ color: var(--text-main);
2728
+ opacity: 0;
2729
+ pointer-events: none;
2730
+ }
2731
+
2732
+ .app-body.pictures-open .pictures-library {
2733
+ opacity: 1;
2734
+ pointer-events: auto;
2735
+ }
2736
+
2737
+ .pictures-library[hidden] {
2738
+ display: block;
2739
+ opacity: 0;
2740
+ pointer-events: none;
2741
+ }
2742
+
2743
+ .pictures-header {
2744
+ display: flex;
2745
+ align-items: center;
2746
+ justify-content: space-between;
2747
+ gap: 18px;
2748
+ max-width: 1120px;
2749
+ margin: 0 auto 24px;
2750
+ padding-bottom: 18px;
2751
+ border-bottom: 1px solid var(--border);
2752
+ }
2753
+
2754
+ .pictures-kicker {
2755
+ color: var(--accent-hover);
2756
+ font-size: 0.72rem;
2757
+ font-weight: 600;
2758
+ letter-spacing: 0.08em;
2759
+ text-transform: uppercase;
2760
+ }
2761
+
2762
+ .pictures-header h2 {
2763
+ margin-top: 4px;
2764
+ font-size: 1.55rem;
2765
+ font-weight: 600;
2766
+ }
2767
+
2768
+ .pictures-header-actions {
2769
+ display: grid;
2770
+ gap: 8px;
2771
+ width: 130px;
2772
+ }
2773
+
2774
+ .pictures-close-btn {
2775
+ height: 34px;
2776
+ padding: 0 14px;
2777
+ border: 1px solid var(--border);
2778
+ border-radius: 8px;
2779
+ background: var(--surface-strong);
2780
+ color: var(--text-main);
2781
+ cursor: pointer;
2782
+ }
2783
+
2784
+ .pictures-grid {
2785
+ max-width: 1120px;
2786
+ margin: 0 auto;
2787
+ display: grid;
2788
+ grid-template-columns: repeat(auto-fill, minmax(174px, 1fr));
2789
+ gap: 14px;
2790
+ }
2791
+
2792
+ .picture-card {
2793
+ position: relative;
2794
+ min-width: 0;
2795
+ overflow: hidden;
2796
+ contain: layout paint style;
2797
+ content-visibility: auto;
2798
+ contain-intrinsic-size: 220px 210px;
2799
+ color: inherit;
2800
+ border: 1px solid var(--border);
2801
+ border-radius: 10px;
2802
+ background: var(--surface-bg);
2803
+ }
2804
+
2805
+ .picture-card:hover {
2806
+ border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
2807
+ }
2808
+
2809
+ .picture-card img {
2810
+ display: block;
2811
+ width: 100%;
2812
+ aspect-ratio: 4 / 3;
2813
+ object-fit: cover;
2814
+ background: var(--panel-soft);
2815
+ }
2816
+
2817
+ .picture-card-meta {
2818
+ min-height: 42px;
2819
+ padding: 9px 10px;
2820
+ color: var(--text-soft);
2821
+ font-size: 0.76rem;
2822
+ line-height: 1.35;
2823
+ }
2824
+
2825
+ .picture-card-meta span {
2826
+ white-space: nowrap;
2827
+ overflow: hidden;
2828
+ text-overflow: ellipsis;
2829
+ }
2830
+
2831
+ .picture-folder-btn {
2832
+ width: 100%;
2833
+ height: 34px;
2834
+ border: 1px solid var(--border);
2835
+ border-radius: 8px;
2836
+ background: var(--panel-soft);
2837
+ color: var(--text);
2838
+ font-size: 0.75rem;
2839
+ font-weight: 700;
2840
+ cursor: pointer;
2841
+ }
2842
+
2843
+ .picture-folder-btn:hover {
2844
+ border-color: color-mix(in srgb, var(--accent) 48%, var(--border));
2845
+ background: color-mix(in srgb, var(--accent) 12%, var(--panel-soft));
2846
+ }
2847
+
2848
+ .picture-folder-btn:disabled {
2849
+ opacity: 0.45;
2850
+ cursor: not-allowed;
2851
+ }
2852
+
2853
+ .pictures-empty {
2854
+ max-width: 360px;
2855
+ margin: 18vh auto 0;
2856
+ display: grid;
2857
+ justify-items: center;
2858
+ gap: 8px;
2859
+ color: var(--text-muted);
2860
+ text-align: center;
2861
+ }
2862
+
2863
+ .pictures-empty.is-hidden {
2864
+ display: none;
2865
+ }
2866
+
2867
+ .pictures-empty-icon {
2868
+ display: grid;
2869
+ place-items: center;
2870
+ width: 48px;
2871
+ height: 48px;
2872
+ border: 1px solid var(--border);
2873
+ border-radius: 12px;
2874
+ background: var(--surface-bg);
2875
+ color: var(--accent-hover);
2876
+ font-size: 1.2rem;
2877
+ }
2878
+
2879
+ .pictures-empty p {
2880
+ color: var(--text-main);
2881
+ font-weight: 600;
2882
+ }
2883
+
2884
+ .pictures-empty span {
2885
+ font-size: 0.82rem;
2886
+ line-height: 1.45;
2887
+ }
2888
+
2889
+ .assistant-workspace.model-hidden {
2890
+ grid-template-columns: minmax(0, 0fr) minmax(0, 1fr);
2891
+ gap: 0;
2892
+ padding: 0;
2893
+ position: relative;
2894
+ }
2895
+
2896
+ .assistant-workspace.model-hidden::before {
2897
+ content: none;
2898
+ }
2899
+
2900
+ .assistant-workspace.model-hidden::after {
2901
+ content: none;
2902
+ }
2903
+
2904
+ /* Welcome Suggestions Styling */
2905
+ .welcome-bubble {
2906
+ max-width: 100% !important;
2907
+ }
2908
+
2909
+ .initial-suggestions {
2910
+ display: grid;
2911
+ grid-template-columns: repeat(2, 1fr);
2912
+ gap: 14px;
2913
+ width: 100%;
2914
+ max-width: 760px;
2915
+ margin-top: 12px;
2916
+ z-index: 2;
2917
+ pointer-events: auto;
2918
+ }
2919
+
2920
+ @media (max-width: 640px) {
2921
+ .initial-suggestions {
2922
+ grid-template-columns: 1fr;
2923
+ }
2924
+ }
2925
+
2926
+ .suggestion-card {
2927
+ background: var(--panel-bg);
2928
+ border: 1px solid var(--border);
2929
+ border-radius: 14px;
2930
+ padding: 16px 20px;
2931
+ cursor: pointer;
2932
+ display: flex;
2933
+ align-items: center;
2934
+ gap: 16px;
2935
+ transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
2936
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
2937
+ }
2938
+
2939
+ .suggestion-card:hover {
2940
+ background: rgba(143, 108, 245, 0.08);
2941
+ border-color: var(--accent);
2942
+ transform: translateY(-3px);
2943
+ box-shadow: 0 10px 25px rgba(143, 108, 245, 0.15);
2944
+ }
2945
+
2946
+ [data-theme="light"] .suggestion-card:hover {
2947
+ background: rgba(143, 108, 245, 0.05);
2948
+ }
2949
+
2950
+ .suggestion-icon {
2951
+ font-size: 1.6rem;
2952
+ display: inline-flex;
2953
+ align-items: center;
2954
+ justify-content: center;
2955
+ }
2956
+
2957
+ .suggestion-text {
2958
+ font-size: 0.92rem;
2959
+ font-weight: 500;
2960
+ color: var(--text-soft);
2961
+ transition: color 0.25s ease;
2962
+ }
2963
+
2964
+ .suggestion-card:hover .suggestion-text {
2965
+ color: var(--text-main);
2966
+ }
2967
+
2968
+ .model-stage {
2969
+ min-width: 0;
2970
+ flex: 1 1 auto;
2971
+ padding: 44px 0 28px 28px;
2972
+ align-items: center;
2973
+ justify-content: center;
2974
+ overflow: hidden;
2975
+ opacity: 1;
2976
+ transform: translateX(0) scale(1);
2977
+ transition: opacity 0.42s ease,
2978
+ transform 0.58s cubic-bezier(0.16, 1, 0.3, 1),
2979
+ padding 0.58s cubic-bezier(0.16, 1, 0.3, 1);
2980
+ }
2981
+
2982
+ .assistant-workspace.model-hidden .model-stage {
2983
+ opacity: 0;
2984
+ pointer-events: none;
2985
+ transform: translateX(-28px) scale(0.985);
2986
+ padding-left: 0;
2987
+ margin-right: 0;
2988
+ }
2989
+
2990
+ .model-shell {
2991
+ min-height: 0;
2992
+ width: 100%;
2993
+ height: 100%;
2994
+ background: var(--panel-soft);
2995
+ border: 1px solid rgba(255, 255, 255, 0.09);
2996
+ border-radius: 8px;
2997
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.025), 0 18px 52px rgba(0, 0, 0, 0.16);
2998
+ backdrop-filter: var(--glass-blur);
2999
+ -webkit-backdrop-filter: var(--glass-blur);
3000
+ }
3001
+
3002
+ .model-shell.model-bg-clear {
3003
+ background: rgba(0, 0, 0, 0.06);
3004
+ }
3005
+
3006
+ .model-shell.model-bg-grid {
3007
+ background:
3008
+ linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px),
3009
+ linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px),
3010
+ var(--panel-soft);
3011
+ background-size: 28px 28px;
3012
+ }
3013
+
3014
+ .model-shell.model-bg-stage {
3015
+ background:
3016
+ radial-gradient(circle at 50% 38%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 42%),
3017
+ linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(0, 0, 0, 0.08)),
3018
+ var(--panel-soft);
3019
+ }
3020
+
3021
+ .model-glow,
3022
+ .model-shadow {
3023
+ display: none;
3024
+ }
3025
+
3026
+ .conversation-panel {
3027
+ position: static;
3028
+ align-self: stretch;
3029
+ width: auto;
3030
+ min-width: 0;
3031
+ max-height: none;
3032
+ transform: none;
3033
+ flex: none;
3034
+ display: flex;
3035
+ flex-direction: column;
3036
+ padding: 44px 28px 24px 0;
3037
+ background: transparent;
3038
+ border: 0;
3039
+ border-radius: 0;
3040
+ box-shadow: none;
3041
+ backdrop-filter: none;
3042
+ -webkit-backdrop-filter: none;
3043
+ pointer-events: auto;
3044
+ transition: width 0.58s cubic-bezier(0.16, 1, 0.3, 1),
3045
+ padding 0.58s cubic-bezier(0.16, 1, 0.3, 1),
3046
+ transform 0.58s cubic-bezier(0.16, 1, 0.3, 1);
3047
+ }
3048
+
3049
+ .assistant-workspace.model-hidden .conversation-panel {
3050
+ position: relative;
3051
+ display: grid;
3052
+ grid-template-rows: minmax(0, 1fr) auto;
3053
+ width: min(840px, calc(100% - 64px));
3054
+ height: 100%;
3055
+ max-width: none;
3056
+ margin: 0 auto;
3057
+ padding: 56px 0 28px;
3058
+ grid-column: 1 / -1;
3059
+ z-index: 1;
3060
+ }
3061
+
3062
+ .assistant-workspace.model-hidden .chat-container {
3063
+ padding: 0 8px 18px;
3064
+ overflow-y: auto;
3065
+ }
3066
+
3067
+ .assistant-workspace.model-hidden .message {
3068
+ max-width: 100%;
3069
+ }
3070
+
3071
+ .assistant-workspace.model-hidden .input-area {
3072
+ width: 100%;
3073
+ }
3074
+
3075
+ .conversation-panel.is-empty {
3076
+ justify-content: center;
3077
+ }
3078
+
3079
+ .assistant-workspace.model-hidden .conversation-panel.is-empty {
3080
+ grid-template-rows: minmax(0, 1fr);
3081
+ align-content: center;
3082
+ justify-content: stretch;
3083
+ width: min(840px, calc(100% - 64px));
3084
+ margin: 0 auto;
3085
+ padding-top: 0;
3086
+ padding-bottom: 0;
3087
+ }
3088
+
3089
+ .conversation-panel.is-empty .chat-container {
3090
+ display: none;
3091
+ }
3092
+
3093
+ .conversation-panel.is-empty .input-area {
3094
+ width: 100%;
3095
+ margin: auto 0;
3096
+ transform: translateY(-7vh);
3097
+ }
3098
+
3099
+ .empty-chat-prompt {
3100
+ margin: 0 0 28px;
3101
+ color: var(--text-main);
3102
+ font-size: clamp(2rem, 4vw, 3.15rem);
3103
+ font-weight: 500;
3104
+ line-height: 1.18;
3105
+ text-align: center;
3106
+ }
3107
+
3108
+ .chat-container {
3109
+ flex: 1;
3110
+ min-height: 0;
3111
+ max-height: none;
3112
+ padding: 0 4px 16px;
3113
+ gap: 10px;
3114
+ pointer-events: auto;
3115
+ }
3116
+
3117
+ .message {
3118
+ max-width: min(100%, 620px);
3119
+ animation: messagePopIn 0.22s ease forwards;
3120
+ }
3121
+
3122
+ .message-bubble {
3123
+ padding: 10px 12px;
3124
+ border-radius: 8px;
3125
+ font-size: 0.9rem;
3126
+ line-height: 1.48;
3127
+ box-shadow: none;
3128
+ backdrop-filter: var(--glass-blur);
3129
+ -webkit-backdrop-filter: var(--glass-blur);
3130
+ }
3131
+
3132
+ .ai-message .message-bubble,
3133
+ .typing-indicator {
3134
+ background: var(--surface-bg);
3135
+ border: 1px solid var(--border);
3136
+ border-radius: 8px;
3137
+ color: var(--text-main);
3138
+ backdrop-filter: none;
3139
+ -webkit-backdrop-filter: none;
3140
+ box-shadow: none;
3141
+ }
3142
+
3143
+ .user-message .message-bubble {
3144
+ background: linear-gradient(135deg, var(--surface-strong), color-mix(in srgb, var(--accent) 16%, var(--surface-strong)));
3145
+ border: 1px solid rgba(255, 255, 255, 0.08);
3146
+ border-radius: 8px;
3147
+ color: var(--text-main);
3148
+ box-shadow: none;
3149
+ }
3150
+
3151
+ .provider-badge {
3152
+ color: var(--accent-hover);
3153
+ }
3154
+
3155
+ .input-area {
3156
+ flex: 0 0 auto;
3157
+ padding: 0;
3158
+ background: transparent;
3159
+ border: 0;
3160
+ box-shadow: none;
3161
+ pointer-events: auto;
3162
+ }
3163
+
3164
+ .workspace-select-btn {
3165
+ width: fit-content;
3166
+ max-width: min(100%, 360px);
3167
+ min-height: 34px;
3168
+ display: inline-flex;
3169
+ align-items: center;
3170
+ gap: 8px;
3171
+ margin: 0 0 8px 2px;
3172
+ padding: 0 12px;
3173
+ border: 1px solid var(--border);
3174
+ border-radius: 8px;
3175
+ background: var(--input-bg);
3176
+ color: var(--text-soft);
3177
+ font-size: 0.86rem;
3178
+ font-weight: 650;
3179
+ cursor: pointer;
3180
+ }
3181
+
3182
+ .workspace-select-btn:hover {
3183
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--border));
3184
+ background: color-mix(in srgb, var(--accent) 8%, var(--input-bg));
3185
+ color: var(--text-main);
3186
+ }
3187
+
3188
+ .workspace-select-btn span:nth-child(2) {
3189
+ min-width: 0;
3190
+ overflow: hidden;
3191
+ text-overflow: ellipsis;
3192
+ white-space: nowrap;
3193
+ }
3194
+
3195
+ .smart-context-bar {
3196
+ min-height: 24px;
3197
+ padding: 3px 10px 3px 14px;
3198
+ margin: 0;
3199
+ background: var(--input-bg);
3200
+ border: 1px solid var(--border);
3201
+ border-bottom: 0;
3202
+ border-radius: 14px 14px 0 0;
3203
+ display: flex;
3204
+ flex-wrap: wrap;
3205
+ gap: 10px;
3206
+ }
3207
+
3208
+ .smart-context-label {
3209
+ color: var(--text-soft);
3210
+ font-size: 0.76rem;
3211
+ font-weight: 400;
3212
+ }
3213
+
3214
+ .smart-context-label span {
3215
+ color: var(--text-muted);
3216
+ font-size: 0.68rem;
3217
+ }
3218
+
3219
+ .voice-mode-bar {
3220
+ min-height: 30px;
3221
+ display: flex;
3222
+ align-items: center;
3223
+ gap: 8px;
3224
+ padding: 4px 12px;
3225
+ background: color-mix(in srgb, var(--accent) 10%, var(--input-bg));
3226
+ border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border));
3227
+ border-bottom: 0;
3228
+ color: var(--text-main);
3229
+ font-size: 0.75rem;
3230
+ }
3231
+
3232
+ .voice-mode-dot {
3233
+ width: 8px;
3234
+ height: 8px;
3235
+ flex: 0 0 auto;
3236
+ border-radius: 999px;
3237
+ background: var(--accent);
3238
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 16%, transparent);
3239
+ }
3240
+
3241
+ .voice-mode-bar[data-state="listening"] .voice-mode-dot,
3242
+ .voice-mode-bar[data-state="speaking"] .voice-mode-dot {
3243
+ animation: pulse-mic 1.2s infinite;
3244
+ }
3245
+
3246
+ .voice-mode-transcript {
3247
+ min-width: 0;
3248
+ overflow: hidden;
3249
+ color: var(--text-muted);
3250
+ text-overflow: ellipsis;
3251
+ white-space: nowrap;
3252
+ }
3253
+
3254
+ .toggle-switch {
3255
+ width: 32px;
3256
+ height: 18px;
3257
+ }
3258
+
3259
+ .slider {
3260
+ background-color: var(--surface-strong);
3261
+ }
3262
+
3263
+ .slider:before {
3264
+ height: 14px;
3265
+ width: 14px;
3266
+ left: 2px;
3267
+ bottom: 2px;
3268
+ }
3269
+
3270
+ input:checked + .slider:before {
3271
+ transform: translateX(14px);
3272
+ }
3273
+
3274
+ #chat-form {
3275
+ min-height: 88px;
3276
+ display: grid;
3277
+ grid-template-columns: 32px 32px minmax(0, 1fr) 32px 32px;
3278
+ grid-template-rows: auto minmax(48px, auto) 32px;
3279
+ align-items: end;
3280
+ gap: 6px;
3281
+ padding: 8px;
3282
+ background: var(--input-bg);
3283
+ border: 1px solid var(--border);
3284
+ border-radius: 14px;
3285
+ box-shadow: none;
3286
+ backdrop-filter: var(--glass-blur);
3287
+ -webkit-backdrop-filter: var(--glass-blur);
3288
+ }
3289
+
3290
+ .smart-context-bar + #chat-form {
3291
+ border-top-left-radius: 0;
3292
+ border-top-right-radius: 0;
3293
+ }
3294
+
3295
+ #chat-form:focus-within {
3296
+ border-color: transparent;
3297
+ outline: none;
3298
+ box-shadow: none;
3299
+ transform: none;
3300
+ }
3301
+
3302
+ .mint-attachment {
3303
+ grid-column: 1 / -1;
3304
+ grid-row: 1;
3305
+ display: flex;
3306
+ align-items: flex-start;
3307
+ gap: 8px;
3308
+ flex-wrap: wrap;
3309
+ min-height: 0;
3310
+ max-height: 220px;
3311
+ margin-bottom: 6px;
3312
+ overflow: auto;
3313
+ scrollbar-width: thin;
3314
+ }
3315
+
3316
+ .mint-image-attachment {
3317
+ position: relative;
3318
+ display: inline-flex;
3319
+ width: auto;
3320
+ height: auto;
3321
+ max-width: min(360px, 72vw);
3322
+ max-height: 196px;
3323
+ overflow: hidden;
3324
+ border: 1px solid var(--border);
3325
+ border-radius: 8px;
3326
+ background: color-mix(in srgb, var(--surface-strong) 78%, rgba(0, 0, 0, 0.22));
3327
+ }
3328
+
3329
+ .mint-image-preview {
3330
+ width: auto;
3331
+ height: auto;
3332
+ max-width: min(360px, 72vw);
3333
+ max-height: 196px;
3334
+ display: block;
3335
+ }
3336
+
3337
+ .mint-attachment-remove {
3338
+ position: absolute;
3339
+ top: 4px;
3340
+ right: 4px;
3341
+ width: 20px;
3342
+ height: 20px;
3343
+ display: flex;
3344
+ align-items: center;
3345
+ justify-content: center;
3346
+ border: 0;
3347
+ border-radius: 50%;
3348
+ background: #ef4444;
3349
+ color: #ffffff;
3350
+ font-size: 0.95rem;
3351
+ line-height: 1;
3352
+ cursor: pointer;
3353
+ }
3354
+
3355
+ #chat-form:not(:has(.mint-attachment)) {
3356
+ grid-template-rows: minmax(48px, auto) 32px;
3357
+ }
3358
+
3359
+ #chat-form:not(:has(.mint-attachment)) #chat-input {
3360
+ grid-row: 1;
3361
+ }
3362
+
3363
+ #chat-form:not(:has(.mint-attachment)) .chat-tool-menu-wrap,
3364
+ #chat-form:not(:has(.mint-attachment)) #screen-capture-btn,
3365
+ #chat-form:not(:has(.mint-attachment)) .chat-provider-select,
3366
+ #chat-form:not(:has(.mint-attachment)) #mic-btn,
3367
+ #chat-form:not(:has(.mint-attachment)) #send-btn {
3368
+ grid-row: 2;
3369
+ }
3370
+
3371
+ #chat-input {
3372
+ grid-column: 1 / -1;
3373
+ grid-row: 2;
3374
+ align-self: start;
3375
+ min-height: 48px;
3376
+ max-height: 120px;
3377
+ padding: 12px 0;
3378
+ color: var(--text-main);
3379
+ font-size: 1rem;
3380
+ line-height: 1.5;
3381
+ resize: none;
3382
+ overflow-y: auto;
3383
+ border: 0;
3384
+ outline: none;
3385
+ background: transparent;
3386
+ }
3387
+
3388
+ #chat-input:focus,
3389
+ #chat-input:focus-visible,
3390
+ #chat-input:-moz-focusring {
3391
+ border: 0 !important;
3392
+ outline: none !important;
3393
+ box-shadow: none !important;
3394
+ }
3395
+
3396
+ #chat-input::placeholder {
3397
+ color: var(--placeholder);
3398
+ opacity: 1;
3399
+ }
3400
+
3401
+ #send-btn,
3402
+ #mic-btn,
3403
+ #chat-tool-btn,
3404
+ #screen-capture-btn {
3405
+ width: 32px;
3406
+ height: 32px;
3407
+ border-radius: 16px;
3408
+ background: var(--surface-strong);
3409
+ color: var(--text-soft);
3410
+ }
3411
+
3412
+ .chat-tool-menu-wrap {
3413
+ grid-column: 1;
3414
+ grid-row: 3;
3415
+ position: relative;
3416
+ width: 32px;
3417
+ height: 32px;
3418
+ }
3419
+
3420
+ #chat-tool-btn {
3421
+ display: flex;
3422
+ align-items: center;
3423
+ justify-content: center;
3424
+ border: 0;
3425
+ font-size: 1.35rem;
3426
+ line-height: 1;
3427
+ cursor: pointer;
3428
+ }
3429
+
3430
+ #screen-capture-btn {
3431
+ grid-column: 2;
3432
+ grid-row: 3;
3433
+ border: 0;
3434
+ cursor: pointer;
3435
+ }
3436
+
3437
+ .screen-capture-eye {
3438
+ position: relative;
3439
+ width: 18px;
3440
+ height: 11px;
3441
+ border: 1.6px solid currentColor;
3442
+ border-radius: 50% / 58%;
3443
+ background: transparent;
3444
+ }
3445
+
3446
+ .screen-capture-eye::after {
3447
+ content: '';
3448
+ position: absolute;
3449
+ width: 4px;
3450
+ height: 4px;
3451
+ left: 50%;
3452
+ top: 50%;
3453
+ border: 1.6px solid currentColor;
3454
+ border-radius: 50%;
3455
+ background: transparent;
3456
+ transform: translate(-50%, -50%);
3457
+ }
3458
+
3459
+ #chat-tool-btn[aria-expanded='true'] {
3460
+ background: var(--panel-raised);
3461
+ color: var(--text-main);
3462
+ }
3463
+
3464
+ .chat-tool-menu {
3465
+ position: absolute;
3466
+ left: 0;
3467
+ bottom: calc(100% + 10px);
3468
+ z-index: 20;
3469
+ width: min(260px, calc(100vw - 40px));
3470
+ padding: 8px;
3471
+ background: color-mix(in srgb, var(--panel-raised) 92%, #000 8%);
3472
+ border: 1px solid var(--border);
3473
+ border-radius: 16px;
3474
+ box-shadow: 0 18px 50px rgba(0, 0, 0, 0.28);
3475
+ backdrop-filter: var(--glass-blur);
3476
+ -webkit-backdrop-filter: var(--glass-blur);
3477
+ }
3478
+
3479
+ .chat-tool-menu button {
3480
+ width: 100%;
3481
+ min-height: 42px;
3482
+ display: grid;
3483
+ grid-template-columns: 28px minmax(0, 1fr);
3484
+ align-items: center;
3485
+ gap: 8px;
3486
+ padding: 0 10px;
3487
+ border: 0;
3488
+ border-radius: 10px;
3489
+ background: transparent;
3490
+ color: var(--text-main);
3491
+ font: inherit;
3492
+ font-size: 0.92rem;
3493
+ text-align: left;
3494
+ cursor: pointer;
3495
+ }
3496
+
3497
+ .chat-tool-menu button:hover {
3498
+ background: var(--surface-strong);
3499
+ }
3500
+
3501
+ .chat-tool-menu button span:first-child {
3502
+ display: flex;
3503
+ justify-content: center;
3504
+ color: var(--text-soft);
3505
+ font-size: 1rem;
3506
+ }
3507
+
3508
+ .chat-provider-select {
3509
+ grid-column: 3;
3510
+ grid-row: 3;
3511
+ min-width: 0;
3512
+ width: fit-content;
3513
+ max-width: 100%;
3514
+ height: 32px;
3515
+ padding: 0 24px 0 6px;
3516
+ background: transparent;
3517
+ border: 0;
3518
+ border-radius: 8px;
3519
+ color: var(--text-soft);
3520
+ cursor: pointer;
3521
+ font-family: inherit;
3522
+ font-size: 0.78rem;
3523
+ outline: none;
3524
+ overflow: hidden;
3525
+ text-overflow: ellipsis;
3526
+ white-space: nowrap;
3527
+ -webkit-app-region: no-drag;
3528
+ }
3529
+
3530
+ .chat-provider-select:hover,
3531
+ .chat-provider-select:focus {
3532
+ background: var(--surface-strong);
3533
+ color: var(--text-main);
3534
+ }
3535
+
3536
+ .chat-provider-select:disabled {
3537
+ cursor: wait;
3538
+ opacity: 0.65;
3539
+ }
3540
+
3541
+ .chat-provider-select option {
3542
+ background: var(--input-bg, #1a1a1a);
3543
+ color: var(--text-main);
3544
+ }
3545
+
3546
+ .chat-provider-select option:checked {
3547
+ background: linear-gradient(var(--accent), var(--accent));
3548
+ color: #ffffff;
3549
+ }
3550
+
3551
+ #mic-btn {
3552
+ grid-column: 4;
3553
+ grid-row: 3;
3554
+ }
3555
+
3556
+ #mic-btn.voice-mode-active {
3557
+ background: color-mix(in srgb, var(--accent) 18%, var(--surface-strong));
3558
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
3559
+ color: var(--accent-hover);
3560
+ }
3561
+
3562
+ #send-btn {
3563
+ grid-column: 5;
3564
+ grid-row: 3;
3565
+ }
3566
+
3567
+ #send-btn {
3568
+ background: linear-gradient(135deg, var(--accent), var(--accent-hover));
3569
+ color: white;
3570
+ box-shadow: 0 8px 18px color-mix(in srgb, var(--accent) 28%, transparent);
3571
+ }
3572
+
3573
+ #send-btn:hover,
3574
+ #mic-btn:hover,
3575
+ #chat-tool-btn:hover,
3576
+ #screen-capture-btn:hover {
3577
+ background: var(--panel-raised);
3578
+ transform: none;
3579
+ }
3580
+
3581
+ #send-btn:hover {
3582
+ background: var(--accent-hover);
3583
+ }
3584
+
3585
+ #chat-tool-btn {
3586
+ border: 1px solid rgba(255, 255, 255, 0.08);
3587
+ }
3588
+
3589
+ .toggle-model-btn:hover,
3590
+ .toggle-model-btn.active,
3591
+ .change-expression-btn:hover,
3592
+ .accessory-cycle-btn:hover,
3593
+ .accessory-cycle-btn.active,
3594
+ .toggle-interaction-btn:hover,
3595
+ .toggle-interaction-btn.active,
3596
+ .interaction-guide-btn:hover,
3597
+ .interaction-guide-btn.active,
3598
+ .clear-btn:hover,
3599
+ .settings-btn:hover,
3600
+ .minimize-btn:hover,
3601
+ .maximize-btn:hover {
3602
+ background: var(--surface-strong);
3603
+ border-color: transparent;
3604
+ color: var(--text-main);
3605
+ }
3606
+
3607
+ .toggle-interaction-btn:not(.active) {
3608
+ color: #ff7b7b;
3609
+ }
3610
+
3611
+ .close-btn:hover {
3612
+ background: #3a2020;
3613
+ color: #ff8a8a;
3614
+ }
3615
+
3616
+ .assistant-workspace.layout-horizontal {
3617
+ grid-template-columns: 1fr;
3618
+ grid-template-rows: minmax(0, 1.1fr) minmax(0, 0.9fr);
3619
+ gap: 12px;
3620
+ }
3621
+
3622
+ .assistant-workspace.layout-horizontal .model-stage {
3623
+ min-width: 0;
3624
+ max-width: 100%;
3625
+ }
3626
+
3627
+ .assistant-workspace.layout-horizontal .conversation-panel {
3628
+ min-width: 0;
3629
+ max-width: 100%;
3630
+ }
3631
+
3632
+ @media (max-width: 760px) {
3633
+ .drag-region {
3634
+ grid-template-columns: auto 1fr auto;
3635
+ gap: 8px;
3636
+ padding: 9px 10px 9px 12px;
3637
+ }
3638
+
3639
+ .header-content h1 {
3640
+ display: none;
3641
+ }
3642
+
3643
+ .header-actions {
3644
+ justify-content: flex-start;
3645
+ overflow: hidden;
3646
+ }
3647
+
3648
+ .header-utility {
3649
+ display: none;
3650
+ }
3651
+
3652
+ .toggle-model-btn,
3653
+ .change-expression-btn,
3654
+ .accessory-cycle-btn,
3655
+ .toggle-interaction-btn,
3656
+ .interaction-guide-btn {
3657
+ width: 34px;
3658
+ padding: 0;
3659
+ }
3660
+
3661
+ .toggle-model-btn span,
3662
+ .change-expression-btn span,
3663
+ .accessory-cycle-btn span,
3664
+ .toggle-interaction-btn span,
3665
+ .interaction-guide-btn span {
3666
+ display: none;
3667
+ }
3668
+
3669
+ .assistant-workspace {
3670
+ display: flex;
3671
+ margin-left: 0;
3672
+ padding: 12px;
3673
+ gap: 12px;
3674
+ }
3675
+
3676
+ .assistant-workspace.layout-chat {
3677
+ grid-template-columns: none;
3678
+ }
3679
+
3680
+ .app-body {
3681
+ grid-template-columns: 1fr;
3682
+ }
3683
+
3684
+ .sidebar-toggle {
3685
+ display: none;
3686
+ }
3687
+
3688
+ .workspace-sidebar {
3689
+ display: none;
3690
+ }
3691
+
3692
+ .model-stage {
3693
+ display: none;
3694
+ }
3695
+
3696
+ .conversation-panel {
3697
+ position: static;
3698
+ width: 100%;
3699
+ max-height: none;
3700
+ transform: none;
3701
+ flex: 1;
3702
+ min-width: 0;
3703
+ }
3704
+
3705
+ .chat-container {
3706
+ max-height: none;
3707
+ }
3708
+ }
3709
+
3710
+ /* Chat Bold Highlight styling */
3711
+ .chat-bold-highlight {
3712
+ color: #38bdf8; /* Soft blue (sky-400) for default/dark theme */
3713
+ font-weight: 600;
3714
+ }
3715
+
3716
+ [data-theme="light"] .chat-bold-highlight {
3717
+ color: #0284c7; /* Sky-600 for light theme */
3718
+ }
3719
+
3720
+ [data-theme="midnight"] .chat-bold-highlight {
3721
+ color: #38bdf8; /* Sky-400 for midnight theme */
3722
+ }