crewswarm 0.9.2 → 0.9.3

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 (207) hide show
  1. package/README.md +22 -9
  2. package/apps/dashboard/dist/assets/{chat-core-Cx4sTxDd.js → chat-core-3KirthZA.js} +1 -1
  3. package/apps/dashboard/dist/assets/index-GSWxxEPO.js +2 -0
  4. package/apps/dashboard/dist/assets/{tab-pm-loop-tab-Bfd449B4.js → tab-pm-loop-tab-DiAPTJXu.js} +1 -1
  5. package/apps/dashboard/dist/assets/{tab-projects-tab-DhNWnlzt.js → tab-projects-tab-SFH4E--a.js} +1 -1
  6. package/apps/dashboard/dist/assets/tab-settings-tab-BselH1c0.js +1 -0
  7. package/apps/dashboard/dist/index.html +82 -11
  8. package/apps/vibe/README.md +2 -2
  9. package/apps/vibe/package.json +1 -1
  10. package/apps/vibe/server.mjs +3 -3
  11. package/crew-lead.mjs +34 -4
  12. package/lib/bridges/gateway-ws.mjs +4 -0
  13. package/lib/crew-lead/chat-handler.mjs +34 -0
  14. package/lib/crew-lead/http-server.mjs +55 -14
  15. package/lib/crew-lead/llm-caller.mjs +24 -8
  16. package/lib/crew-lead/prompts.mjs +7 -0
  17. package/lib/crew-lead/wave-dispatcher.mjs +15 -3
  18. package/lib/crew-lead/ws-router.mjs +219 -27
  19. package/lib/engines/engine-registry.mjs +9 -0
  20. package/lib/engines/rt-envelope.mjs +1 -0
  21. package/lib/engines/runners.mjs +5 -2
  22. package/lib/runtime/paths.mjs +12 -8
  23. package/package.json +35 -15
  24. package/scripts/capture-build-flow.mjs +118 -0
  25. package/scripts/coverage-report.mjs +209 -0
  26. package/scripts/coverage-summary.mjs +47 -0
  27. package/scripts/dashboard-validation.mjs +74 -0
  28. package/scripts/dashboard.mjs +560 -70
  29. package/scripts/live-bridge-matrix.mjs +79 -0
  30. package/scripts/live-cli-matrix.mjs +166 -0
  31. package/scripts/live-crewchat-check.mjs +42 -0
  32. package/scripts/live-engine-matrix.mjs +50 -0
  33. package/scripts/live-provider-failover-matrix.mjs +107 -0
  34. package/scripts/live-provider-matrix.mjs +228 -0
  35. package/scripts/restart-all-from-repo.sh +4 -4
  36. package/scripts/smoke-dispatch.mjs +4 -1
  37. package/scripts/test-blast-radius.mjs +204 -0
  38. package/scripts/test-report-summary.mjs +88 -0
  39. package/scripts/test-reporter.mjs +651 -0
  40. package/scripts/test-rerun.mjs +136 -0
  41. package/scripts/tmux-bridge +130 -0
  42. package/apps/dashboard/dist/assets/chat-core-Cx4sTxDd.js.br +0 -0
  43. package/apps/dashboard/dist/assets/cli-process-COMRNPqr.js.br +0 -0
  44. package/apps/dashboard/dist/assets/components-BS9fQjE_.js.br +0 -0
  45. package/apps/dashboard/dist/assets/core-utils-CmOkXgzi.js.br +0 -0
  46. package/apps/dashboard/dist/assets/index-CF0aJRtC.css.br +0 -0
  47. package/apps/dashboard/dist/assets/index-DnClJ1ee.js +0 -2
  48. package/apps/dashboard/dist/assets/index-DnClJ1ee.js.br +0 -0
  49. package/apps/dashboard/dist/assets/orchestration-Ca2DLWN-.js.br +0 -0
  50. package/apps/dashboard/dist/assets/setup-wizard-CA0Or47w.js.br +0 -0
  51. package/apps/dashboard/dist/assets/tab-agents-tab-BgpIsjkw.js.br +0 -0
  52. package/apps/dashboard/dist/assets/tab-comms-tab-kguqTIzD.js.br +0 -0
  53. package/apps/dashboard/dist/assets/tab-contacts-tab-DiOyMYth.js.br +0 -0
  54. package/apps/dashboard/dist/assets/tab-engines-tab-BsdZVvU0.js.br +0 -0
  55. package/apps/dashboard/dist/assets/tab-memory-tab-Cu6u13EQ.js.br +0 -0
  56. package/apps/dashboard/dist/assets/tab-models-tab-BLEjmd19.js.br +0 -0
  57. package/apps/dashboard/dist/assets/tab-pm-loop-tab-Bfd449B4.js.br +0 -0
  58. package/apps/dashboard/dist/assets/tab-projects-tab-DhNWnlzt.js.br +0 -0
  59. package/apps/dashboard/dist/assets/tab-prompts-tab-DVkUNaJd.js.br +0 -0
  60. package/apps/dashboard/dist/assets/tab-services-tab-DU_LH3uG.js.br +0 -0
  61. package/apps/dashboard/dist/assets/tab-settings-tab-Bn4nXtDe.js +0 -1
  62. package/apps/dashboard/dist/assets/tab-settings-tab-Bn4nXtDe.js.br +0 -0
  63. package/apps/dashboard/dist/assets/tab-skills-tab-BpY0uZHW.js.br +0 -0
  64. package/apps/dashboard/dist/assets/tab-spending-tab-DEccQHnt.js.br +0 -0
  65. package/apps/dashboard/dist/assets/tab-swarm-chat-tab-BNrd88-r.js.br +0 -0
  66. package/apps/dashboard/dist/assets/tab-swarm-tab-B1AcjL1W.js.br +0 -0
  67. package/apps/dashboard/dist/assets/tab-usage-tab-BIOOnB-Y.js.br +0 -0
  68. package/apps/dashboard/dist/assets/tab-waves-tab-SaJDkb4x.js.br +0 -0
  69. package/apps/dashboard/dist/assets/tab-workflows-tab-B-soSy1k.js.br +0 -0
  70. package/apps/dashboard/dist/index.html.br +0 -0
  71. package/apps/dashboard/dist/index.html.gz +0 -0
  72. package/apps/dashboard/index.html +0 -6529
  73. package/apps/dashboard/package.json +0 -15
  74. package/apps/dashboard/src/app.js +0 -2828
  75. package/apps/dashboard/src/app.js.br +0 -0
  76. package/apps/dashboard/src/app.js.gz +0 -0
  77. package/apps/dashboard/src/chat/chat-actions.js +0 -1847
  78. package/apps/dashboard/src/chat/chat-actions.js.br +0 -0
  79. package/apps/dashboard/src/chat/unified-messages.js +0 -327
  80. package/apps/dashboard/src/chat/unified-messages.js.br +0 -0
  81. package/apps/dashboard/src/cli-process.js +0 -208
  82. package/apps/dashboard/src/cli-process.js.br +0 -0
  83. package/apps/dashboard/src/cli-process.js.gz +0 -0
  84. package/apps/dashboard/src/components/active-tasks-panel.js +0 -175
  85. package/apps/dashboard/src/components/active-tasks-panel.js.br +0 -0
  86. package/apps/dashboard/src/core/api.js +0 -18
  87. package/apps/dashboard/src/core/api.js.br +0 -0
  88. package/apps/dashboard/src/core/dom.js +0 -228
  89. package/apps/dashboard/src/core/dom.js.br +0 -0
  90. package/apps/dashboard/src/core/state.js +0 -91
  91. package/apps/dashboard/src/core/state.js.br +0 -0
  92. package/apps/dashboard/src/core/task-manager.js +0 -134
  93. package/apps/dashboard/src/core/task-manager.js.br +0 -0
  94. package/apps/dashboard/src/orchestration-status.js +0 -127
  95. package/apps/dashboard/src/orchestration-status.js.br +0 -0
  96. package/apps/dashboard/src/setup-wizard.js +0 -562
  97. package/apps/dashboard/src/setup-wizard.js.br +0 -0
  98. package/apps/dashboard/src/styles.css +0 -2085
  99. package/apps/dashboard/src/styles.css.br +0 -0
  100. package/apps/dashboard/src/styles.css.gz +0 -0
  101. package/apps/dashboard/src/tabs/agents-tab.js +0 -2237
  102. package/apps/dashboard/src/tabs/agents-tab.js.br +0 -0
  103. package/apps/dashboard/src/tabs/benchmarks-tab.js +0 -229
  104. package/apps/dashboard/src/tabs/benchmarks-tab.js.br +0 -0
  105. package/apps/dashboard/src/tabs/comms-tab.js +0 -955
  106. package/apps/dashboard/src/tabs/comms-tab.js.br +0 -0
  107. package/apps/dashboard/src/tabs/contacts-tab.js +0 -654
  108. package/apps/dashboard/src/tabs/contacts-tab.js.br +0 -0
  109. package/apps/dashboard/src/tabs/engines-tab.js +0 -175
  110. package/apps/dashboard/src/tabs/engines-tab.js.br +0 -0
  111. package/apps/dashboard/src/tabs/memory-tab.js +0 -182
  112. package/apps/dashboard/src/tabs/memory-tab.js.br +0 -0
  113. package/apps/dashboard/src/tabs/models-tab.js +0 -450
  114. package/apps/dashboard/src/tabs/models-tab.js.br +0 -0
  115. package/apps/dashboard/src/tabs/pm-loop-tab.js +0 -185
  116. package/apps/dashboard/src/tabs/pm-loop-tab.js.br +0 -0
  117. package/apps/dashboard/src/tabs/projects-tab.js +0 -663
  118. package/apps/dashboard/src/tabs/projects-tab.js.br +0 -0
  119. package/apps/dashboard/src/tabs/projects-tab.js.gz +0 -0
  120. package/apps/dashboard/src/tabs/prompts-tab.js +0 -160
  121. package/apps/dashboard/src/tabs/prompts-tab.js.br +0 -0
  122. package/apps/dashboard/src/tabs/services-tab.js +0 -202
  123. package/apps/dashboard/src/tabs/services-tab.js.br +0 -0
  124. package/apps/dashboard/src/tabs/settings-tab.js +0 -861
  125. package/apps/dashboard/src/tabs/settings-tab.js.br +0 -0
  126. package/apps/dashboard/src/tabs/skills-tab.js +0 -284
  127. package/apps/dashboard/src/tabs/skills-tab.js.br +0 -0
  128. package/apps/dashboard/src/tabs/spending-tab.js +0 -173
  129. package/apps/dashboard/src/tabs/spending-tab.js.br +0 -0
  130. package/apps/dashboard/src/tabs/swarm-chat-tab.js +0 -660
  131. package/apps/dashboard/src/tabs/swarm-chat-tab.js.br +0 -0
  132. package/apps/dashboard/src/tabs/swarm-tab.js +0 -538
  133. package/apps/dashboard/src/tabs/swarm-tab.js.br +0 -0
  134. package/apps/dashboard/src/tabs/usage-tab.js +0 -390
  135. package/apps/dashboard/src/tabs/usage-tab.js.br +0 -0
  136. package/apps/dashboard/src/tabs/waves-tab.js +0 -238
  137. package/apps/dashboard/src/tabs/waves-tab.js.br +0 -0
  138. package/apps/dashboard/src/tabs/workflows-tab.js +0 -747
  139. package/apps/dashboard/src/tabs/workflows-tab.js.br +0 -0
  140. package/apps/vibe/.crew/agent-memory/pipeline.json +0 -304
  141. package/apps/vibe/.crew/cost.json +0 -17
  142. package/apps/vibe/.crew/json-parse-metrics.jsonl +0 -27
  143. package/apps/vibe/.crew/pipeline-metrics.jsonl +0 -27
  144. package/apps/vibe/.crew/pipeline-runs/pipeline-0f90c392-2425-4ae5-850c-bd9d17b1d690.jsonl +0 -5
  145. package/apps/vibe/.crew/pipeline-runs/pipeline-1c269dd9-a63f-4fba-af81-5cf08048ef06.jsonl +0 -5
  146. package/apps/vibe/.crew/pipeline-runs/pipeline-288a7765-da24-4a22-89bc-1f3cc9b0562c.jsonl +0 -5
  147. package/apps/vibe/.crew/pipeline-runs/pipeline-2c78fd22-a657-4bd1-bc49-0679fb384409.jsonl +0 -5
  148. package/apps/vibe/.crew/pipeline-runs/pipeline-3da23550-22ed-4904-9a0a-8e79c1f3024c.jsonl +0 -5
  149. package/apps/vibe/.crew/pipeline-runs/pipeline-3e6fe08d-3264-404a-8df3-aab7efef10e7.jsonl +0 -5
  150. package/apps/vibe/.crew/pipeline-runs/pipeline-42eec610-57fe-4e09-9e7e-b315038495c2.jsonl +0 -5
  151. package/apps/vibe/.crew/pipeline-runs/pipeline-4438eb4c-ae13-42b1-90e2-b043d8983be8.jsonl +0 -5
  152. package/apps/vibe/.crew/pipeline-runs/pipeline-4740a9f5-86e7-44b6-a394-de433e291727.jsonl +0 -5
  153. package/apps/vibe/.crew/pipeline-runs/pipeline-49e1da6a-957e-48fd-9220-415019e4f8e2.jsonl +0 -5
  154. package/apps/vibe/.crew/pipeline-runs/pipeline-4c9251db-be68-427b-a3fc-a264f2b5778d.jsonl +0 -5
  155. package/apps/vibe/.crew/pipeline-runs/pipeline-6413fa33-a802-4b57-a8c0-a9056ad67842.jsonl +0 -5
  156. package/apps/vibe/.crew/pipeline-runs/pipeline-65e29a57-664d-4196-8109-017e364f182e.jsonl +0 -5
  157. package/apps/vibe/.crew/pipeline-runs/pipeline-6aa04bc5-9593-4b1f-b58d-3bf2978cb602.jsonl +0 -5
  158. package/apps/vibe/.crew/pipeline-runs/pipeline-6e1cba53-9b70-457e-99e0-59199149dd21.jsonl +0 -5
  159. package/apps/vibe/.crew/pipeline-runs/pipeline-749f41cc-4dac-4204-be64-873a6080a0d2.jsonl +0 -5
  160. package/apps/vibe/.crew/pipeline-runs/pipeline-74d68121-e181-4864-bd9a-c3211341dfaf.jsonl +0 -5
  161. package/apps/vibe/.crew/pipeline-runs/pipeline-8509bc24-142d-4e07-b44a-a50bf99d1103.jsonl +0 -5
  162. package/apps/vibe/.crew/pipeline-runs/pipeline-960339c6-07ca-43ce-9900-f6e1702b39b9.jsonl +0 -5
  163. package/apps/vibe/.crew/pipeline-runs/pipeline-9bef2dd2-6122-42e5-b3d9-19f4d80f9e40.jsonl +0 -5
  164. package/apps/vibe/.crew/pipeline-runs/pipeline-9c6480a9-7031-4146-b241-825b9a2d1de1.jsonl +0 -5
  165. package/apps/vibe/.crew/pipeline-runs/pipeline-9fd42426-8492-4157-9d5f-e1537c060489.jsonl +0 -2
  166. package/apps/vibe/.crew/pipeline-runs/pipeline-ad6d40a3-2f5e-46a9-a345-47caaccc51aa.jsonl +0 -5
  167. package/apps/vibe/.crew/pipeline-runs/pipeline-bc606133-8d5b-4535-8d85-f1a29cdaa981.jsonl +0 -5
  168. package/apps/vibe/.crew/pipeline-runs/pipeline-c1418f4e-b773-4ca1-84a3-216acf36e2f2.jsonl +0 -5
  169. package/apps/vibe/.crew/pipeline-runs/pipeline-c1a13ccd-634a-4d01-a4a7-1177b8a752ff.jsonl +0 -5
  170. package/apps/vibe/.crew/pipeline-runs/pipeline-c7d27b42-249e-4bd4-8f26-6aa998110b8a.jsonl +0 -5
  171. package/apps/vibe/.crew/pipeline-runs/pipeline-cca2e9b9-4a34-4d25-a311-5c793fa7e91e.jsonl +0 -5
  172. package/apps/vibe/.crew/sandbox.json +0 -7
  173. package/apps/vibe/.crew/session.json +0 -330
  174. package/apps/vibe/.crew/training-data.jsonl +0 -0
  175. package/apps/vibe/.github/workflows/studio-quality.yml +0 -37
  176. package/apps/vibe/.studio-data/project-messages/chuck-norris.jsonl +0 -18
  177. package/apps/vibe/.studio-data/project-messages/general.jsonl +0 -81
  178. package/apps/vibe/.studio-data/project-messages/studio-local.jsonl +0 -18
  179. package/apps/vibe/ARCHITECTURE.md +0 -3393
  180. package/apps/vibe/QUICK-REFERENCE.md +0 -211
  181. package/apps/vibe/ROADMAP.md +0 -41
  182. package/apps/vibe/STUDIO-SETUP-COMPLETE.md +0 -35
  183. package/apps/vibe/VISUAL-GUIDE.md +0 -378
  184. package/apps/vibe/capture-demo.mjs +0 -160
  185. package/apps/vibe/capture-full-demo.mjs +0 -255
  186. package/apps/vibe/capture-quickstart.mjs +0 -256
  187. package/apps/vibe/capture-vibe-assets.mjs +0 -71
  188. package/apps/vibe/capture-vibe-video.mjs +0 -260
  189. package/apps/vibe/check-buttons.js +0 -41
  190. package/apps/vibe/diagnose.html +0 -106
  191. package/apps/vibe/fix-buttons.js +0 -103
  192. package/apps/vibe/index.html +0 -3404
  193. package/apps/vibe/package-lock.json +0 -920
  194. package/apps/vibe/scripts/studio-pty-host.py +0 -117
  195. package/apps/vibe/src/main.js +0 -2940
  196. package/apps/vibe/src/register-all-languages.js +0 -98
  197. package/apps/vibe/start-studio.sh +0 -11
  198. package/apps/vibe/test/accessibility-tests.js +0 -77
  199. package/apps/vibe/test/browser-performance-audit.mjs +0 -205
  200. package/apps/vibe/test/performance-tests.js +0 -120
  201. package/apps/vibe/test/security-tests.js +0 -213
  202. package/apps/vibe/tests/e2e.local.mjs +0 -54
  203. package/apps/vibe/tests/server.smoke.mjs +0 -106
  204. package/apps/vibe/update_website.mjs +0 -74
  205. package/apps/vibe/vite.config.js +0 -19
  206. package/lib/crew-lead/chat-handler.mjs.bak +0 -1274
  207. package/lib/engines/rt-envelope.mjs.backup-current +0 -870
@@ -1,2085 +0,0 @@
1
- :root {
2
- /* Backgrounds */
3
- --bg: #060a10;
4
- --bg-0: #040810;
5
- --bg-1: #0d1420; /* alias: --bg-card */
6
- --bg-2: #111827; /* alias: --bg-card2 */
7
- --bg-card: #0d1420;
8
- --bg-card2: #111827;
9
- --bg-hover: #141e2e;
10
- --surface-2: #16202e;
11
-
12
- /* Borders */
13
- --border: rgba(255, 255, 255, 0.07);
14
- --border-hi: rgba(56, 189, 248, 0.35);
15
-
16
- /* Text */
17
- --text: #f0f6ff;
18
- --text-1: #f0f6ff; /* alias: --text */
19
- --text-2: #a0b3cc; /* Improved contrast from #8b9db3 for WCAG AA */
20
- --text-3: #7a8a9f; /* Improved contrast from #4a5568 for WCAG AA */
21
-
22
- /* Accent */
23
- --accent: #38bdf8;
24
- --accent2: #818cf8;
25
- --purple: #818cf8; /* alias: --accent2 */
26
-
27
- /* Semantic colors — muted (for backgrounds/borders) */
28
- --green: #34d399;
29
- --red: #f87171;
30
- --yellow: #fbbf24;
31
- --amber: #f59e0b;
32
-
33
- /* Semantic colors — vivid (for text labels, badges) */
34
- --green-hi: #22c55e;
35
- --red-hi: #ef4444;
36
- --sky: #38bdf8;
37
-
38
- --blue: #4a7ab5; /* links, project paths */
39
- --teal: #0f766e; /* provider model buttons */
40
- --warning: #f59e0b;
41
- --radius: 10px;
42
- }
43
- *,
44
- *::before,
45
- *::after {
46
- box-sizing: border-box;
47
- margin: 0;
48
- padding: 0;
49
- }
50
- body {
51
- font-family:
52
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
53
- sans-serif;
54
- background: var(--bg);
55
- color: var(--text);
56
- display: flex;
57
- height: 100vh;
58
- overflow: hidden;
59
- font-size: 14px;
60
- touch-action: manipulation;
61
- }
62
-
63
- /* ── Accessibility ── */
64
- /* Skip link for keyboard navigation */
65
- .skip-link {
66
- position: absolute;
67
- top: -40px;
68
- left: 0;
69
- background: var(--accent);
70
- color: #000;
71
- padding: 8px 16px;
72
- text-decoration: none;
73
- font-weight: 600;
74
- border-radius: 0 0 4px 0;
75
- z-index: 9999;
76
- }
77
- .skip-link:focus {
78
- top: 0;
79
- }
80
-
81
- /* Focus visible styles for keyboard navigation */
82
- *:focus-visible {
83
- outline: 3px solid var(--accent);
84
- outline-offset: 2px;
85
- }
86
-
87
- /* Override for buttons and inputs to have better contrast */
88
- button:focus-visible,
89
- a:focus-visible,
90
- input:focus-visible,
91
- select:focus-visible,
92
- textarea:focus-visible {
93
- outline: 3px solid var(--accent);
94
- outline-offset: 2px;
95
- }
96
-
97
- /* ── Sidebar ── */
98
- .sidebar {
99
- width: 216px;
100
- min-width: 216px;
101
- background: var(--bg-card);
102
- border-right: 1px solid var(--border);
103
- display: flex;
104
- flex-direction: column;
105
- overflow-y: auto;
106
- }
107
- .sidebar-brand {
108
- display: flex;
109
- align-items: center;
110
- gap: 10px;
111
- padding: 18px 16px 14px;
112
- border-bottom: 1px solid var(--border);
113
- text-decoration: none;
114
- }
115
- .brand-icon {
116
- width: 24px;
117
- height: 24px;
118
- object-fit: contain;
119
- display: block;
120
- }
121
- .brand-name {
122
- font-size: 15px;
123
- font-weight: 800;
124
- color: var(--text);
125
- letter-spacing: 0.06em;
126
- text-transform: uppercase;
127
- }
128
- .brand-name span {
129
- color: var(--accent);
130
- }
131
- .sidebar-status {
132
- display: flex;
133
- align-items: center;
134
- gap: 8px;
135
- padding: 10px 16px;
136
- border-bottom: 1px solid var(--border);
137
- }
138
- .status-dot {
139
- width: 7px;
140
- height: 7px;
141
- border-radius: 50%;
142
- background: var(--text-3);
143
- flex-shrink: 0;
144
- }
145
- .status-dot.online {
146
- background: var(--green);
147
- box-shadow: 0 0 6px var(--green);
148
- }
149
- .status-dot.error {
150
- background: var(--red);
151
- }
152
- #status {
153
- font-size: 12px;
154
- color: var(--text-2);
155
- }
156
- .nav-section {
157
- padding: 12px 8px 4px;
158
- }
159
- .nav-label {
160
- font-size: 10px;
161
- font-weight: 600;
162
- color: var(--text-3);
163
- letter-spacing: 0.08em;
164
- text-transform: uppercase;
165
- padding: 0 8px 6px;
166
- }
167
- .nav-item {
168
- display: flex;
169
- align-items: center;
170
- gap: 9px;
171
- width: 100%;
172
- padding: 8px 10px;
173
- border-radius: 7px;
174
- border: none;
175
- background: transparent;
176
- color: var(--text-2);
177
- font-size: 13px;
178
- font-weight: 500;
179
- cursor: pointer;
180
- text-align: left;
181
- transition:
182
- background 0.12s,
183
- color 0.12s;
184
- font-family: inherit;
185
- }
186
- .stab {
187
- padding: 7px 16px;
188
- border: none;
189
- background: transparent;
190
- color: var(--text-2);
191
- font-size: 13px;
192
- font-weight: 500;
193
- cursor: pointer;
194
- border-bottom: 2px solid transparent;
195
- margin-bottom: -1px;
196
- font-family: inherit;
197
- transition:
198
- color 0.12s,
199
- border-color 0.12s;
200
- white-space: nowrap;
201
- }
202
- .stab:hover {
203
- color: var(--text-1);
204
- }
205
- .stab.active {
206
- color: var(--accent);
207
- border-bottom-color: var(--accent);
208
- }
209
- .nav-item:hover {
210
- background: var(--bg-hover);
211
- color: var(--text);
212
- }
213
- .nav-item.active {
214
- background: rgba(56, 189, 248, 0.1);
215
- color: var(--accent);
216
- }
217
- .nav-item .nav-icon {
218
- font-size: 15px;
219
- width: 18px;
220
- text-align: center;
221
- }
222
- .nav-badge {
223
- margin-left: auto;
224
- background: var(--red);
225
- color: #fff;
226
- font-size: 10px;
227
- font-weight: 700;
228
- padding: 1px 6px;
229
- border-radius: 999px;
230
- min-width: 18px;
231
- text-align: center;
232
- }
233
- .nav-badge.hidden {
234
- display: none;
235
- }
236
- .sidebar-bottom {
237
- margin-top: auto;
238
- padding: 12px 8px;
239
- border-top: 1px solid var(--border);
240
- }
241
-
242
- /* ── Main wrap ── */
243
- .main-wrap {
244
- flex: 1;
245
- display: flex;
246
- flex-direction: column;
247
- overflow: hidden;
248
- }
249
- .view {
250
- display: none;
251
- flex: 1;
252
- overflow-y: auto;
253
- padding: 24px;
254
- }
255
- .view.active {
256
- display: block;
257
- }
258
- .view-sessions {
259
- display: none;
260
- flex: 1;
261
- overflow: hidden;
262
- }
263
- .view-sessions.active {
264
- display: grid;
265
- grid-template-columns: 34% 66%;
266
- }
267
- .view-sessions > section {
268
- padding: 16px;
269
- overflow-y: auto;
270
- }
271
- .view-sessions > section + section {
272
- border-left: 1px solid var(--border);
273
- }
274
-
275
- /* ── Msg bar ── */
276
- .msg-bar {
277
- padding: 10px 16px;
278
- border-top: 1px solid var(--border);
279
- background: var(--bg-card);
280
- display: flex;
281
- gap: 8px;
282
- align-items: center;
283
- flex-shrink: 0;
284
- }
285
-
286
- /* ── Cards / content ── */
287
- .card {
288
- background: var(--bg-card);
289
- border: 1px solid var(--border);
290
- border-radius: var(--radius);
291
- padding: 16px;
292
- margin-bottom: 12px;
293
- }
294
- .card-title {
295
- font-size: 15px;
296
- font-weight: 600;
297
- margin-bottom: 4px;
298
- }
299
- .status-badge {
300
- display: inline-flex;
301
- align-items: center;
302
- gap: 5px;
303
- font-size: 12px;
304
- font-weight: 600;
305
- padding: 4px 10px;
306
- border-radius: 20px;
307
- letter-spacing: 0.02em;
308
- }
309
- .status-active {
310
- background: rgba(34, 197, 94, 0.15);
311
- color: var(--green-hi);
312
- border: 1px solid rgba(34, 197, 94, 0.3);
313
- }
314
- .status-running {
315
- background: rgba(34, 197, 94, 0.15);
316
- color: var(--green-hi);
317
- border: 1px solid rgba(34, 197, 94, 0.3);
318
- }
319
- .status-stopped {
320
- background: rgba(239, 68, 68, 0.12);
321
- color: var(--red-hi);
322
- border: 1px solid rgba(239, 68, 68, 0.25);
323
- }
324
- .meta {
325
- font-size: 12px;
326
- color: var(--text-2);
327
- }
328
- .page-header {
329
- display: flex;
330
- justify-content: space-between;
331
- align-items: flex-start;
332
- margin-bottom: 20px;
333
- }
334
- .page-title {
335
- font-size: 18px;
336
- font-weight: 700;
337
- letter-spacing: -0.3px;
338
- }
339
- .page-sub {
340
- font-size: 13px;
341
- color: var(--text-2);
342
- margin-top: 3px;
343
- }
344
- h3 {
345
- font-size: 14px;
346
- font-weight: 600;
347
- margin-bottom: 8px;
348
- }
349
-
350
- /* ── Messages ── */
351
- .msg {
352
- border: 1px solid var(--border);
353
- border-radius: var(--radius);
354
- padding: 10px 12px;
355
- margin-bottom: 8px;
356
- background: var(--bg-card);
357
- }
358
- .msg.u {
359
- border-left: 3px solid var(--accent);
360
- background: rgba(56, 189, 248, 0.07);
361
- margin-left: 40px;
362
- }
363
- .msg.a {
364
- border-left: 3px solid var(--green);
365
- background: rgba(52, 211, 153, 0.04);
366
- }
367
- .dlq-item {
368
- border-left: 3px solid var(--red) !important;
369
- }
370
- .t {
371
- white-space: pre-wrap;
372
- font-size: 13px;
373
- line-height: 1.5;
374
- font-family: "SF Mono", "Fira Code", monospace;
375
- }
376
-
377
- /* ── Chat Bubbles (streaming + final) ── */
378
- .chat-bubble {
379
- background: var(--surface-2);
380
- border-radius: 10px;
381
- padding: 12px 14px;
382
- font-size: 14px;
383
- line-height: 1.6;
384
- white-space: pre-wrap;
385
- word-break: break-word;
386
- max-width: 85%;
387
- will-change: contents;
388
- contain: layout style paint;
389
- }
390
- .chat-bubble.user {
391
- background: rgba(56, 189, 248, 0.1);
392
- border: 1px solid rgba(56, 189, 248, 0.2);
393
- margin-left: auto;
394
- }
395
- .chat-bubble.assistant {
396
- background: var(--bg-card);
397
- border: 1px solid var(--border);
398
- }
399
-
400
- /* ── Project Tabs ── */
401
- #chatProjectTabs {
402
- scrollbar-width: thin;
403
- scrollbar-color: var(--border) transparent;
404
- }
405
- #chatProjectTabs::-webkit-scrollbar {
406
- height: 4px;
407
- }
408
- #chatProjectTabs::-webkit-scrollbar-track {
409
- background: transparent;
410
- }
411
- #chatProjectTabs::-webkit-scrollbar-thumb {
412
- background: var(--border);
413
- border-radius: 2px;
414
- }
415
- .project-tab {
416
- padding: 6px 14px;
417
- border-radius: 6px;
418
- font-size: 12px;
419
- white-space: nowrap;
420
- cursor: pointer;
421
- border: none;
422
- background: rgba(255, 255, 255, 0.04);
423
- color: var(--text-2);
424
- font-weight: 500;
425
- transition: all 0.2s;
426
- font-family: inherit;
427
- }
428
- .project-tab:hover {
429
- background: rgba(255, 255, 255, 0.08);
430
- }
431
- .project-tab.active {
432
- background: var(--accent);
433
- color: var(--bg);
434
- font-weight: 600;
435
- }
436
- .row {
437
- padding: 10px 12px;
438
- border: 1px solid var(--border);
439
- border-radius: var(--radius);
440
- margin-bottom: 8px;
441
- cursor: pointer;
442
- background: var(--bg-card);
443
- transition:
444
- border-color 0.12s,
445
- background 0.12s;
446
- }
447
- .row:hover {
448
- background: var(--bg-hover);
449
- }
450
- .row.active {
451
- border-color: var(--accent);
452
- background: rgba(56, 189, 248, 0.06);
453
- }
454
-
455
- /* ── Buttons ── */
456
- button {
457
- background: var(--accent);
458
- color: #000;
459
- border: none;
460
- border-radius: 7px;
461
- padding: 7px 14px;
462
- cursor: pointer;
463
- font-weight: 600;
464
- font-size: 13px;
465
- font-family: inherit;
466
- transition: opacity 0.12s;
467
- }
468
- button:hover {
469
- opacity: 0.85;
470
- }
471
- .btn-ghost {
472
- background: transparent;
473
- color: var(--text-2);
474
- border: 1px solid var(--border);
475
- }
476
- .btn-ghost:hover {
477
- background: var(--bg-hover);
478
- color: var(--text);
479
- }
480
- .btn-green {
481
- background: var(--green);
482
- color: #000;
483
- }
484
- .btn-sky {
485
- background: #0ea5e9;
486
- color: #000;
487
- border: 1px solid #0ea5e9;
488
- }
489
- .btn-sky:hover {
490
- background: var(--accent);
491
- }
492
- .btn-red {
493
- background: var(--red);
494
- color: #fff;
495
- }
496
- .btn-yellow {
497
- background: var(--yellow);
498
- color: #000;
499
- }
500
- .btn-purple {
501
- background: var(--accent2);
502
- color: #fff;
503
- }
504
- .btn-muted {
505
- background: var(--bg-card2);
506
- color: var(--text-2);
507
- border: 1px solid var(--border);
508
- }
509
- .reply-btn {
510
- font-size: 11px;
511
- padding: 3px 8px;
512
- background: var(--accent2);
513
- color: #fff;
514
- margin-left: 8px;
515
- }
516
- .replay-btn {
517
- font-size: 11px;
518
- padding: 3px 8px;
519
- background: var(--yellow);
520
- color: #000;
521
- margin-left: 8px;
522
- }
523
- .send-btn {
524
- background: var(--green);
525
- color: #000;
526
- }
527
- /* ── Emoji picker ── */
528
- .emoji-btn {
529
- width: 46px;
530
- height: 46px;
531
- font-size: 22px;
532
- background: rgba(255, 255, 255, 0.04);
533
- border: 1px solid rgba(255, 255, 255, 0.1);
534
- border-radius: var(--radius);
535
- cursor: pointer;
536
- display: flex;
537
- align-items: center;
538
- justify-content: center;
539
- flex-shrink: 0;
540
- transition:
541
- border-color 0.15s,
542
- background 0.15s;
543
- color: inherit;
544
- }
545
- .emoji-btn:hover {
546
- border-color: var(--accent);
547
- background: rgba(56, 189, 248, 0.08);
548
- }
549
- .emoji-picker-wrap {
550
- position: relative;
551
- flex-shrink: 0;
552
- }
553
- .emoji-picker-panel {
554
- display: none;
555
- position: absolute;
556
- top: 50px;
557
- right: 0;
558
- z-index: 200;
559
- background: var(--bg-card);
560
- border: 1px solid var(--border-hi);
561
- border-radius: var(--radius);
562
- padding: 10px;
563
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
564
- width: 260px;
565
- }
566
- .emoji-picker-panel.open {
567
- display: block;
568
- }
569
- .emoji-grid {
570
- display: grid;
571
- grid-template-columns: repeat(6, 1fr);
572
- gap: 6px;
573
- }
574
- .emoji-opt {
575
- font-size: 22px;
576
- width: 36px;
577
- height: 36px;
578
- display: flex;
579
- align-items: center;
580
- justify-content: center;
581
- cursor: pointer;
582
- border-radius: 6px;
583
- transition: background 0.1s;
584
- }
585
- .emoji-opt:hover {
586
- background: rgba(56, 189, 248, 0.15);
587
- }
588
-
589
- /* Files view */
590
- .file-row {
591
- display: flex;
592
- align-items: center;
593
- gap: 10px;
594
- padding: 8px 12px;
595
- background: var(--bg-card);
596
- border: 1px solid var(--border);
597
- border-radius: 6px;
598
- transition: border-color 0.15s;
599
- }
600
- .file-row:hover {
601
- border-color: var(--accent);
602
- }
603
- .file-info {
604
- flex: 1;
605
- min-width: 0;
606
- }
607
- .file-name {
608
- display: block;
609
- font-size: 13px;
610
- color: var(--text);
611
- font-family: "SF Mono", "Fira Code", monospace;
612
- white-space: nowrap;
613
- overflow: hidden;
614
- text-overflow: ellipsis;
615
- }
616
- .file-meta {
617
- font-size: 11px;
618
- color: var(--text-2);
619
- }
620
- .file-actions {
621
- display: flex;
622
- gap: 5px;
623
- flex-shrink: 0;
624
- }
625
- .file-btn {
626
- font-size: 11px;
627
- padding: 3px 8px;
628
- border-radius: 4px;
629
- border: 1px solid var(--border);
630
- background: var(--bg-card2);
631
- color: var(--text-2);
632
- cursor: pointer;
633
- text-decoration: none;
634
- transition: all 0.15s;
635
- white-space: nowrap;
636
- }
637
- .file-btn:hover {
638
- color: var(--text);
639
- border-color: var(--accent);
640
- }
641
- .file-btn-cursor {
642
- border-color: rgba(99, 102, 241, 0.4);
643
- color: #818cf8;
644
- }
645
- .file-btn-cursor:hover {
646
- background: rgba(99, 102, 241, 0.15);
647
- }
648
- .file-btn-opencode {
649
- border-color: rgba(52, 211, 153, 0.4);
650
- color: #34d399;
651
- }
652
- .file-btn-opencode:hover {
653
- background: rgba(52, 211, 153, 0.1);
654
- }
655
-
656
- /* ── Form inputs — single source of truth ── */
657
- select,
658
- input[type="text"],
659
- input[type="password"],
660
- input[type="number"],
661
- input[type="email"],
662
- input:not([type]),
663
- textarea {
664
- background: var(--bg-1);
665
- color: var(--text-1);
666
- border: 1px solid var(--border);
667
- border-radius: 6px;
668
- padding: 6px 10px;
669
- font-size: 13px;
670
- font-family: inherit;
671
- outline: none;
672
- transition:
673
- border-color 0.15s,
674
- background 0.15s,
675
- box-shadow 0.15s;
676
- width: 100%;
677
- box-sizing: border-box;
678
- }
679
- select:focus,
680
- input:not([type]):focus,
681
- input[type="text"]:focus,
682
- input[type="password"]:focus,
683
- input[type="number"]:focus,
684
- input[type="email"]:focus,
685
- textarea:focus {
686
- border-color: var(--accent);
687
- background: rgba(56, 189, 248, 0.04);
688
- box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.08);
689
- }
690
- select {
691
- cursor: pointer;
692
- }
693
- ::placeholder {
694
- color: var(--text-3);
695
- opacity: 1;
696
- }
697
- input[type="text"] {
698
- flex: 1;
699
- }
700
- textarea {
701
- resize: vertical;
702
- width: 100%;
703
- }
704
- input,
705
- textarea,
706
- select {
707
- user-select: text;
708
- -webkit-user-select: text;
709
- cursor: text;
710
- }
711
-
712
- /* ── Input size variants — use instead of inline styles ── */
713
- /* .inp-sm — compact rows (env vars, config tables) */
714
- .inp-sm {
715
- padding: 5px 8px !important;
716
- font-size: 12px !important;
717
- }
718
- /* .inp-xs — very tight rows (number spinners, short codes) */
719
- .inp-xs {
720
- padding: 3px 6px !important;
721
- font-size: 12px !important;
722
- width: auto !important;
723
- }
724
- /* .inp-mono — monospace content (keys, paths, code) */
725
- .inp-mono {
726
- font-family: "SF Mono", "Fira Code", ui-monospace, monospace !important;
727
- }
728
- /* .inp-flex — takes remaining row width */
729
- .inp-flex {
730
- flex: 1;
731
- width: auto !important;
732
- }
733
-
734
- /* ── Notification ── */
735
- .notification {
736
- position: fixed;
737
- top: 20px;
738
- right: 20px;
739
- background: var(--green);
740
- color: #000;
741
- padding: 12px 20px;
742
- border-radius: 8px;
743
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
744
- z-index: 1000;
745
- animation: slideIn 0.25s ease;
746
- font-weight: 600;
747
- font-size: 13px;
748
- }
749
- .notification.error {
750
- background: var(--red);
751
- color: #fff;
752
- }
753
- .notification.warning {
754
- background: var(--amber);
755
- color: #000;
756
- }
757
- @keyframes slideIn {
758
- from {
759
- transform: translateX(120%);
760
- opacity: 0;
761
- }
762
- to {
763
- transform: translateX(0);
764
- opacity: 1;
765
- }
766
- }
767
- @keyframes pulse {
768
- 0%,
769
- 100% {
770
- opacity: 0.3;
771
- transform: scale(0.85);
772
- }
773
- 50% {
774
- opacity: 1;
775
- transform: scale(1.15);
776
- }
777
- }
778
-
779
- /* ── Terminal / log blocks ── */
780
- .log-block {
781
- background: var(--bg);
782
- border: 1px solid var(--border);
783
- border-radius: var(--radius);
784
- padding: 12px;
785
- font-family: "SF Mono", "Fira Code", monospace;
786
- font-size: 12px;
787
- color: var(--accent);
788
- max-height: 220px;
789
- overflow-y: auto;
790
- white-space: pre-wrap;
791
- line-height: 1.5;
792
- }
793
- .rm-textarea {
794
- width: 100%;
795
- font-family: "SF Mono", "Fira Code", monospace;
796
- font-size: 12px;
797
- background: var(--bg);
798
- color: var(--text-2);
799
- border: 1px solid var(--border);
800
- border-radius: 8px;
801
- padding: 12px;
802
- line-height: 1.6;
803
- resize: vertical;
804
- box-sizing: border-box;
805
- }
806
- .log-block.green {
807
- color: var(--green);
808
- border-color: rgba(52, 211, 153, 0.2);
809
- }
810
- .log-block.mono {
811
- color: var(--text-2);
812
- }
813
-
814
- /* ── Provider cards ── */
815
- .provider-card {
816
- background: var(--bg-card);
817
- border: 1px solid var(--border);
818
- border-radius: var(--radius);
819
- overflow: hidden;
820
- margin-bottom: 10px;
821
- }
822
- .provider-header {
823
- display: flex;
824
- align-items: center;
825
- gap: 12px;
826
- padding: 13px 16px;
827
- cursor: pointer;
828
- user-select: none;
829
- transition: background 0.12s;
830
- }
831
- .provider-header:hover {
832
- background: var(--bg-hover);
833
- }
834
- .provider-badge {
835
- font-size: 11px;
836
- padding: 2px 8px;
837
- border-radius: 999px;
838
- font-weight: 600;
839
- }
840
- .provider-body {
841
- display: none;
842
- padding: 16px;
843
- border-top: 1px solid var(--border);
844
- background: var(--bg);
845
- }
846
- .provider-body.open {
847
- display: block;
848
- }
849
- .key-row {
850
- display: flex;
851
- gap: 8px;
852
- align-items: center;
853
- margin-bottom: 12px;
854
- }
855
- .key-input {
856
- flex: 1;
857
- font-family: "SF Mono", "Fira Code", ui-monospace, monospace;
858
- }
859
- .model-tag {
860
- display: inline-block;
861
- background: var(--bg-card2);
862
- border: 1px solid var(--border);
863
- border-radius: 5px;
864
- padding: 2px 8px;
865
- font-size: 11px;
866
- margin: 2px;
867
- font-family: "SF Mono", monospace;
868
- color: var(--text-2);
869
- }
870
- .test-ok {
871
- color: var(--green);
872
- font-size: 12px;
873
- margin-left: 8px;
874
- font-weight: 600;
875
- }
876
- .test-err {
877
- color: var(--red);
878
- font-size: 12px;
879
- margin-left: 8px;
880
- }
881
-
882
- /* ── PM badge ── */
883
- .pm-badge {
884
- font-size: 11px;
885
- padding: 2px 10px;
886
- border-radius: 999px;
887
- font-weight: 600;
888
- margin-left: 10px;
889
- background: var(--bg-card2);
890
- color: var(--text-2);
891
- border: 1px solid var(--border);
892
- }
893
- .pm-badge.running {
894
- background: rgba(52, 211, 153, 0.1);
895
- color: var(--green);
896
- border-color: rgba(52, 211, 153, 0.3);
897
- }
898
-
899
- /* ── Progress bar ── */
900
- .prog-bar {
901
- height: 4px;
902
- background: var(--bg-card2);
903
- border-radius: 2px;
904
- overflow: hidden;
905
- margin: 8px 0;
906
- }
907
- .prog-fill {
908
- height: 100%;
909
- border-radius: 2px;
910
- transition: width 0.3s;
911
- }
912
-
913
- /* ── Divider ── */
914
- .divider {
915
- border: none;
916
- border-top: 1px solid var(--border);
917
- margin: 20px 0;
918
- }
919
-
920
- /* ── Agent cards ── */
921
- .agent-card {
922
- background: var(--bg-card);
923
- border: 1px solid var(--border);
924
- border-radius: var(--radius);
925
- overflow: hidden;
926
- }
927
- .agent-card-header {
928
- display: flex;
929
- align-items: center;
930
- gap: 12px;
931
- padding: 14px 16px;
932
- }
933
- .agent-avatar {
934
- width: 38px;
935
- height: 38px;
936
- border-radius: 10px;
937
- background: var(--bg-card2);
938
- border: 1px solid var(--border);
939
- display: flex;
940
- align-items: center;
941
- justify-content: center;
942
- font-size: 18px;
943
- flex-shrink: 0;
944
- }
945
- .agent-meta {
946
- flex: 1;
947
- min-width: 0;
948
- }
949
- .agent-id {
950
- font-weight: 700;
951
- font-size: 14px;
952
- }
953
- .agent-model {
954
- font-size: 12px;
955
- color: var(--text-2);
956
- font-family: "SF Mono", monospace;
957
- margin-top: 2px;
958
- white-space: nowrap;
959
- overflow: hidden;
960
- text-overflow: ellipsis;
961
- }
962
- .agent-body {
963
- border-top: 1px solid var(--border);
964
- padding: 14px 16px;
965
- background: var(--bg);
966
- display: grid;
967
- gap: 12px;
968
- }
969
- .agent-row {
970
- display: grid;
971
- grid-template-columns: 110px 1fr auto auto;
972
- gap: 8px;
973
- align-items: center;
974
- }
975
- .agent-row label {
976
- font-size: 12px;
977
- color: var(--text-2);
978
- font-weight: 500;
979
- }
980
- .agent-badge {
981
- font-size: 11px;
982
- padding: 2px 8px;
983
- border-radius: 999px;
984
- background: rgba(56, 189, 248, 0.1);
985
- color: var(--accent);
986
- border: 1px solid rgba(56, 189, 248, 0.2);
987
- font-weight: 600;
988
- }
989
- .agent-badge.online {
990
- background: rgba(52, 211, 153, 0.1);
991
- color: var(--green);
992
- border-color: rgba(52, 211, 153, 0.3);
993
- }
994
- .field-label {
995
- font-size: 11px;
996
- font-weight: 600;
997
- color: var(--text-2);
998
- margin-bottom: 5px;
999
- text-transform: uppercase;
1000
- letter-spacing: 0.05em;
1001
- }
1002
- .tool-profile-opt {
1003
- cursor: pointer;
1004
- }
1005
- .tool-profile-opt input[type="radio"] {
1006
- display: none;
1007
- }
1008
- .tp-card {
1009
- border: 1px solid var(--border);
1010
- border-radius: 8px;
1011
- padding: 10px 12px;
1012
- transition:
1013
- border-color 0.12s,
1014
- background 0.12s;
1015
- }
1016
- .tool-profile-opt:hover .tp-card {
1017
- border-color: var(--accent);
1018
- background: var(--bg-hover);
1019
- }
1020
- .tool-profile-opt input:checked + .tp-card {
1021
- border-color: var(--accent);
1022
- background: rgba(56, 189, 248, 0.07);
1023
- }
1024
- .tp-name {
1025
- font-size: 13px;
1026
- font-weight: 700;
1027
- margin-bottom: 4px;
1028
- color: var(--text);
1029
- font-family: "SF Mono", monospace;
1030
- }
1031
- .tp-desc {
1032
- font-size: 11px;
1033
- color: var(--text-2);
1034
- line-height: 1.4;
1035
- }
1036
-
1037
- /* ── Scrollbar ── */
1038
- ::-webkit-scrollbar {
1039
- width: 5px;
1040
- height: 5px;
1041
- }
1042
- ::-webkit-scrollbar-track {
1043
- background: transparent;
1044
- }
1045
- ::-webkit-scrollbar-thumb {
1046
- background: var(--border);
1047
- border-radius: 3px;
1048
- }
1049
- #rtView::-webkit-scrollbar {
1050
- width: 8px;
1051
- }
1052
- #rtView::-webkit-scrollbar-track {
1053
- background: var(--bg-card);
1054
- border-radius: 4px;
1055
- }
1056
- #rtView::-webkit-scrollbar-thumb {
1057
- background: var(--accent);
1058
- border-radius: 4px;
1059
- opacity: 0.7;
1060
- }
1061
- #rtView::-webkit-scrollbar-thumb:hover {
1062
- background: var(--accent);
1063
- opacity: 1;
1064
- }
1065
- #rtView {
1066
- scrollbar-width: thin;
1067
- scrollbar-color: var(--accent) var(--bg-card);
1068
- }
1069
-
1070
- /* ── Responsive / Mobile ─────────────────────────────────────────── */
1071
- @media (max-width: 1100px) {
1072
- body {
1073
- flex-direction: column;
1074
- }
1075
- .sidebar {
1076
- width: 100% !important;
1077
- min-width: 0 !important;
1078
- flex-direction: row;
1079
- flex-wrap: wrap;
1080
- padding: 8px 12px;
1081
- gap: 4px;
1082
- border-right: none;
1083
- border-bottom: 1px solid var(--border);
1084
- }
1085
- .sidebar .nav-item {
1086
- padding: 6px 10px;
1087
- font-size: 12px;
1088
- }
1089
- .sidebar .nav-section {
1090
- display: flex;
1091
- flex-wrap: wrap;
1092
- padding: 0;
1093
- gap: 4px;
1094
- }
1095
- .sidebar .nav-label {
1096
- display: none;
1097
- }
1098
- .sidebar .sidebar-bottom {
1099
- display: none;
1100
- }
1101
- .main-wrap {
1102
- min-width: 0;
1103
- }
1104
- }
1105
-
1106
- @media (max-width: 768px) {
1107
- .sidebar .nav-label {
1108
- display: none;
1109
- }
1110
- .sidebar .nav-item {
1111
- padding: 8px;
1112
- min-width: 36px;
1113
- justify-content: center;
1114
- }
1115
- #servicesGrid,
1116
- #agentsList,
1117
- #projectsList,
1118
- #runSkillsGrid {
1119
- grid-template-columns: 1fr !important;
1120
- }
1121
- .chat-input-row {
1122
- flex-wrap: wrap;
1123
- gap: 6px;
1124
- }
1125
- .chat-input-row button {
1126
- height: 44px;
1127
- }
1128
- #chatInput {
1129
- min-height: 44px;
1130
- }
1131
- .page-header {
1132
- flex-direction: column;
1133
- align-items: flex-start;
1134
- gap: 8px;
1135
- }
1136
- .page-header .actions {
1137
- flex-wrap: wrap;
1138
- }
1139
- /* Mobile responsive containers */
1140
- .container,
1141
- .dashboard-grid,
1142
- .view,
1143
- .card {
1144
- width: 100%;
1145
- max-width: 100%;
1146
- padding: 1rem;
1147
- }
1148
- /* Responsive images and videos */
1149
- img,
1150
- video {
1151
- max-width: 100%;
1152
- height: auto;
1153
- }
1154
- /* Ensure all interactive elements meet touch target size */
1155
- button,
1156
- a,
1157
- .nav-item,
1158
- input,
1159
- select,
1160
- textarea {
1161
- min-height: 44px;
1162
- }
1163
- }
1164
-
1165
- @media (max-width: 480px) {
1166
- body {
1167
- font-size: 13px;
1168
- }
1169
- .card {
1170
- padding: 12px;
1171
- }
1172
- .card-title {
1173
- font-size: 14px;
1174
- }
1175
- .page-title {
1176
- font-size: 18px;
1177
- }
1178
- .tab-bar {
1179
- flex-wrap: wrap;
1180
- gap: 4px;
1181
- }
1182
- .stab {
1183
- padding: 4px 10px;
1184
- font-size: 11px;
1185
- }
1186
- /* Touch-friendly buttons and inputs */
1187
- button {
1188
- min-height: 44px;
1189
- font-size: 16px;
1190
- padding: 8px 16px;
1191
- }
1192
- input,
1193
- select,
1194
- textarea {
1195
- font-size: 16px;
1196
- min-height: 44px;
1197
- }
1198
- /* Prevent zoom on input focus */
1199
- input:focus,
1200
- select:focus,
1201
- textarea:focus {
1202
- font-size: 16px;
1203
- }
1204
- }
1205
-
1206
- /* ── Prompts Tab ── */
1207
- .prompt-card {
1208
- background: var(--bg-card);
1209
- border: 1px solid var(--border);
1210
- border-radius: var(--radius);
1211
- padding: 16px;
1212
- transition: all 0.2s;
1213
- }
1214
- .prompt-card:hover {
1215
- border-color: var(--border-hi);
1216
- background: var(--bg-hover);
1217
- }
1218
- .prompt-header {
1219
- display: flex;
1220
- justify-content: space-between;
1221
- align-items: flex-start;
1222
- margin-bottom: 12px;
1223
- gap: 12px;
1224
- }
1225
- .prompt-preview {
1226
- font-size: 12px;
1227
- color: var(--text-2);
1228
- line-height: 1.5;
1229
- font-family: "SF Mono", Monaco, monospace;
1230
- white-space: pre-wrap;
1231
- word-break: break-word;
1232
- }
1233
- .prompt-edit-btn {
1234
- flex-shrink: 0;
1235
- }
1236
-
1237
- /* ── Agent Chat Tab ── */
1238
- .agent-info-card {
1239
- background: var(--bg-card);
1240
- border: 1px solid var(--border);
1241
- border-radius: 8px;
1242
- padding: 16px;
1243
- }
1244
-
1245
- .agent-info-header {
1246
- display: flex;
1247
- justify-content: space-between;
1248
- align-items: center;
1249
- margin-bottom: 12px;
1250
- }
1251
-
1252
- .agent-info-header h4 {
1253
- margin: 0;
1254
- font-size: 16px;
1255
- font-weight: 600;
1256
- }
1257
-
1258
- .agent-status {
1259
- padding: 4px 10px;
1260
- border-radius: 12px;
1261
- font-size: 11px;
1262
- font-weight: 600;
1263
- text-transform: uppercase;
1264
- letter-spacing: 0.05em;
1265
- }
1266
-
1267
- .agent-status.active {
1268
- background: var(--green-hi);
1269
- color: #000;
1270
- }
1271
-
1272
- .agent-status.idle {
1273
- background: var(--bg-card2);
1274
- color: var(--text-3);
1275
- }
1276
-
1277
- .agent-info-details {
1278
- display: flex;
1279
- flex-direction: column;
1280
- gap: 8px;
1281
- }
1282
-
1283
- .detail-row {
1284
- display: flex;
1285
- justify-content: space-between;
1286
- font-size: 13px;
1287
- align-items: center;
1288
- }
1289
-
1290
- .detail-row .label {
1291
- color: var(--text-3);
1292
- font-weight: 600;
1293
- }
1294
-
1295
- .detail-row .value {
1296
- color: var(--text-1);
1297
- font-family: "SF Mono", Monaco, monospace;
1298
- font-size: 12px;
1299
- }
1300
-
1301
- #agentChatMessages {
1302
- display: flex;
1303
- flex-direction: column;
1304
- gap: 12px;
1305
- }
1306
-
1307
- .user-message,
1308
- .agent-message {
1309
- padding: 12px 16px;
1310
- border-radius: 12px;
1311
- max-width: 75%;
1312
- word-wrap: break-word;
1313
- }
1314
-
1315
- .user-message {
1316
- background: var(--accent);
1317
- color: #fff;
1318
- align-self: flex-end;
1319
- border-bottom-right-radius: 4px;
1320
- }
1321
-
1322
- .agent-message {
1323
- background: var(--bg-card);
1324
- border: 1px solid var(--border);
1325
- align-self: flex-start;
1326
- border-bottom-left-radius: 4px;
1327
- }
1328
-
1329
- .message-header {
1330
- display: flex;
1331
- justify-content: space-between;
1332
- margin-bottom: 6px;
1333
- font-size: 11px;
1334
- font-weight: 600;
1335
- text-transform: uppercase;
1336
- letter-spacing: 0.05em;
1337
- opacity: 0.8;
1338
- }
1339
-
1340
- .message-time {
1341
- color: var(--text-3);
1342
- font-size: 10px;
1343
- font-weight: 400;
1344
- text-transform: none;
1345
- letter-spacing: 0;
1346
- }
1347
-
1348
- .message-content {
1349
- font-size: 14px;
1350
- line-height: 1.6;
1351
- }
1352
-
1353
- .message-content code {
1354
- background: rgba(0, 0, 0, 0.3);
1355
- padding: 2px 6px;
1356
- border-radius: 4px;
1357
- font-family: "SF Mono", Monaco, monospace;
1358
- font-size: 13px;
1359
- }
1360
-
1361
- .message-content pre {
1362
- background: rgba(0, 0, 0, 0.4);
1363
- padding: 12px;
1364
- border-radius: 6px;
1365
- overflow-x: auto;
1366
- margin: 8px 0;
1367
- border: 1px solid var(--border);
1368
- }
1369
-
1370
- .message-content pre code {
1371
- background: none;
1372
- padding: 0;
1373
- }
1374
-
1375
- .message-content a {
1376
- color: var(--accent);
1377
- text-decoration: none;
1378
- }
1379
-
1380
- .message-content a:hover {
1381
- text-decoration: underline;
1382
- }
1383
-
1384
- .process-card {
1385
- background: var(--bg-card);
1386
- padding: 12px;
1387
- border-radius: 8px;
1388
- margin-bottom: 8px;
1389
- }
1390
-
1391
- .process-header {
1392
- display: flex;
1393
- justify-content: space-between;
1394
- align-items: center;
1395
- margin-bottom: 8px;
1396
- }
1397
-
1398
- .process-cli {
1399
- font-weight: 600;
1400
- font-family: "SF Mono", Monaco, monospace;
1401
- font-size: 13px;
1402
- }
1403
-
1404
- .process-status {
1405
- text-transform: uppercase;
1406
- font-size: 11px;
1407
- font-weight: 700;
1408
- color: var(--text-3);
1409
- letter-spacing: 0.05em;
1410
- }
1411
-
1412
- .process-details {
1413
- font-size: 12px;
1414
- color: var(--text-2);
1415
- line-height: 1.6;
1416
- font-family: "SF Mono", Monaco, monospace;
1417
- }
1418
-
1419
- .empty-state {
1420
- text-align: center;
1421
- padding: 60px 20px;
1422
- color: var(--text-3);
1423
- font-size: 14px;
1424
- }
1425
-
1426
- .process-status-empty {
1427
- padding: 12px;
1428
- text-align: center;
1429
- color: var(--text-3);
1430
- font-size: 12px;
1431
- font-style: italic;
1432
- }
1433
-
1434
- #workflowsLayout {
1435
- display: grid;
1436
- grid-template-columns: minmax(260px, 340px) minmax(420px, 1fr);
1437
- gap: 16px;
1438
- align-items: start;
1439
- }
1440
-
1441
- @media (max-width: 980px) {
1442
- #workflowsLayout {
1443
- grid-template-columns: 1fr;
1444
- }
1445
- }
1446
-
1447
- /* ── Setup Wizard Overlay ──────────────────────────────────────────────────── */
1448
-
1449
- .setup-wizard-overlay {
1450
- position: fixed;
1451
- inset: 0;
1452
- z-index: 9999;
1453
- display: flex;
1454
- align-items: center;
1455
- justify-content: center;
1456
- background: rgba(4, 8, 16, 0.92);
1457
- backdrop-filter: blur(12px);
1458
- -webkit-backdrop-filter: blur(12px);
1459
- opacity: 0;
1460
- transition: opacity 260ms ease;
1461
- }
1462
-
1463
- .setup-wizard-overlay.visible {
1464
- opacity: 1;
1465
- }
1466
-
1467
- .setup-wizard-overlay.dismissing {
1468
- opacity: 0;
1469
- }
1470
-
1471
- .setup-wizard-card {
1472
- width: 100%;
1473
- max-width: 520px;
1474
- margin: 0 16px;
1475
- background: var(--bg-card);
1476
- border: 1px solid var(--border);
1477
- border-radius: 16px;
1478
- padding: 40px 36px 32px;
1479
- box-shadow:
1480
- 0 0 0 1px rgba(255, 255, 255, 0.04),
1481
- 0 24px 64px rgba(0, 0, 0, 0.5);
1482
- transform: translateY(12px) scale(0.98);
1483
- opacity: 0;
1484
- transition:
1485
- transform 300ms cubic-bezier(0.16, 1, 0.3, 1),
1486
- opacity 300ms ease;
1487
- }
1488
-
1489
- .setup-wizard-card.visible {
1490
- transform: translateY(0) scale(1);
1491
- opacity: 1;
1492
- }
1493
-
1494
- /* ── Step indicator ── */
1495
-
1496
- .setup-wizard-steps {
1497
- display: flex;
1498
- align-items: center;
1499
- justify-content: center;
1500
- gap: 0;
1501
- margin-bottom: 32px;
1502
- }
1503
-
1504
- .setup-wizard-step {
1505
- display: flex;
1506
- flex-direction: column;
1507
- align-items: center;
1508
- gap: 6px;
1509
- }
1510
-
1511
- .setup-wizard-step-dot {
1512
- width: 10px;
1513
- height: 10px;
1514
- border-radius: 50%;
1515
- border: 2px solid var(--text-3);
1516
- background: transparent;
1517
- padding: 0;
1518
- cursor: default;
1519
- transition:
1520
- background 200ms ease,
1521
- border-color 200ms ease,
1522
- box-shadow 200ms ease;
1523
- }
1524
-
1525
- .setup-wizard-step-dot.active {
1526
- border-color: var(--accent);
1527
- background: var(--accent);
1528
- box-shadow: 0 0 8px rgba(56, 189, 248, 0.4);
1529
- }
1530
-
1531
- .setup-wizard-step-dot.completed {
1532
- border-color: var(--green);
1533
- background: var(--green);
1534
- }
1535
-
1536
- .setup-wizard-step-label {
1537
- font-size: 11px;
1538
- color: var(--text-3);
1539
- font-weight: 500;
1540
- letter-spacing: 0.02em;
1541
- }
1542
-
1543
- .setup-wizard-step .active ~ .setup-wizard-step-label,
1544
- .setup-wizard-step-dot.active + .setup-wizard-step-label {
1545
- color: var(--accent);
1546
- }
1547
-
1548
- .setup-wizard-step-dot.completed + .setup-wizard-step-label {
1549
- color: var(--green);
1550
- }
1551
-
1552
- .setup-wizard-step-line {
1553
- width: 48px;
1554
- height: 2px;
1555
- background: var(--text-3);
1556
- margin: 0 12px;
1557
- margin-bottom: 18px;
1558
- border-radius: 1px;
1559
- transition: background 200ms ease;
1560
- }
1561
-
1562
- .setup-wizard-step-line.completed {
1563
- background: var(--green);
1564
- }
1565
-
1566
- /* ── Content area ── */
1567
-
1568
- .setup-wizard-content {
1569
- display: flex;
1570
- flex-direction: column;
1571
- }
1572
-
1573
- /* ── Step 1: Welcome hero ── */
1574
-
1575
- .setup-wizard-hero {
1576
- text-align: center;
1577
- margin-bottom: 28px;
1578
- }
1579
-
1580
- .setup-wizard-logo-ring {
1581
- display: inline-flex;
1582
- align-items: center;
1583
- justify-content: center;
1584
- width: 64px;
1585
- height: 64px;
1586
- border-radius: 16px;
1587
- background: var(--bg-card2);
1588
- border: 1px solid var(--border);
1589
- margin-bottom: 20px;
1590
- }
1591
-
1592
- .setup-wizard-logo {
1593
- width: 36px;
1594
- height: 36px;
1595
- }
1596
-
1597
- .setup-wizard-title {
1598
- font-size: 24px;
1599
- font-weight: 700;
1600
- color: var(--text);
1601
- line-height: 1.2;
1602
- margin-bottom: 8px;
1603
- letter-spacing: -0.02em;
1604
- }
1605
-
1606
- .setup-wizard-subtitle {
1607
- font-size: 15px;
1608
- color: var(--text-2);
1609
- line-height: 1.5;
1610
- }
1611
-
1612
- .setup-wizard-checklist {
1613
- display: flex;
1614
- flex-direction: column;
1615
- gap: 10px;
1616
- padding: 16px 20px;
1617
- background: var(--bg-card2);
1618
- border: 1px solid var(--border);
1619
- border-radius: 10px;
1620
- margin-bottom: 28px;
1621
- }
1622
-
1623
- .setup-wizard-check-item {
1624
- display: flex;
1625
- align-items: center;
1626
- gap: 10px;
1627
- font-size: 14px;
1628
- color: var(--text-2);
1629
- }
1630
-
1631
- .setup-wizard-check-icon {
1632
- width: 20px;
1633
- height: 20px;
1634
- display: flex;
1635
- align-items: center;
1636
- justify-content: center;
1637
- border-radius: 50%;
1638
- font-size: 12px;
1639
- flex-shrink: 0;
1640
- }
1641
-
1642
- .setup-wizard-check-icon.done {
1643
- background: rgba(52, 211, 153, 0.15);
1644
- color: var(--green);
1645
- border: 1px solid rgba(52, 211, 153, 0.3);
1646
- }
1647
-
1648
- .setup-wizard-check-icon.pending {
1649
- background: var(--bg-card);
1650
- color: var(--text-3);
1651
- border: 1px solid var(--border);
1652
- font-size: 8px;
1653
- }
1654
-
1655
- /* ── Step 2: Provider list ── */
1656
-
1657
- .setup-wizard-section-header {
1658
- margin-bottom: 20px;
1659
- }
1660
-
1661
- .setup-wizard-section-title {
1662
- font-size: 20px;
1663
- font-weight: 700;
1664
- color: var(--text);
1665
- line-height: 1.2;
1666
- margin-bottom: 6px;
1667
- letter-spacing: -0.01em;
1668
- }
1669
-
1670
- .setup-wizard-section-desc {
1671
- font-size: 14px;
1672
- color: var(--text-2);
1673
- line-height: 1.5;
1674
- }
1675
-
1676
- .setup-wizard-provider-list {
1677
- display: flex;
1678
- flex-direction: column;
1679
- gap: 8px;
1680
- margin-bottom: 20px;
1681
- max-height: 360px;
1682
- overflow-y: auto;
1683
- }
1684
-
1685
- .setup-wizard-provider-row {
1686
- display: flex;
1687
- flex-direction: column;
1688
- gap: 6px;
1689
- padding: 12px 14px;
1690
- background: var(--bg-card2);
1691
- border: 1px solid var(--border);
1692
- border-radius: 10px;
1693
- transition:
1694
- border-color 200ms ease,
1695
- background 200ms ease;
1696
- }
1697
-
1698
- .setup-wizard-provider-row.has-key {
1699
- border-color: rgba(52, 211, 153, 0.3);
1700
- background: rgba(52, 211, 153, 0.04);
1701
- }
1702
-
1703
- .setup-wizard-provider-label {
1704
- display: flex;
1705
- align-items: center;
1706
- gap: 8px;
1707
- }
1708
-
1709
- .setup-wizard-provider-icon {
1710
- font-size: 16px;
1711
- width: 22px;
1712
- text-align: center;
1713
- flex-shrink: 0;
1714
- }
1715
-
1716
- .setup-wizard-provider-name {
1717
- font-size: 14px;
1718
- font-weight: 600;
1719
- color: var(--text);
1720
- }
1721
-
1722
- .setup-wizard-provider-link {
1723
- margin-left: auto;
1724
- font-size: 12px;
1725
- color: var(--accent);
1726
- text-decoration: none;
1727
- opacity: 0.7;
1728
- transition: opacity 150ms ease;
1729
- }
1730
-
1731
- .setup-wizard-provider-link:hover {
1732
- opacity: 1;
1733
- text-decoration: underline;
1734
- }
1735
-
1736
- .setup-wizard-provider-input-wrap {
1737
- display: flex;
1738
- align-items: center;
1739
- gap: 6px;
1740
- }
1741
-
1742
- .setup-wizard-provider-input {
1743
- flex: 1;
1744
- background: var(--bg);
1745
- border: 1px solid var(--border);
1746
- border-radius: 7px;
1747
- padding: 8px 10px;
1748
- color: var(--text);
1749
- font-size: 13px;
1750
- font-family: inherit;
1751
- outline: none;
1752
- transition: border-color 200ms ease;
1753
- }
1754
-
1755
- .setup-wizard-provider-input::placeholder {
1756
- color: var(--text-3);
1757
- }
1758
-
1759
- .setup-wizard-provider-input:focus {
1760
- border-color: var(--accent);
1761
- }
1762
-
1763
- .setup-wizard-toggle-vis {
1764
- background: transparent;
1765
- border: 1px solid var(--border);
1766
- border-radius: 6px;
1767
- padding: 6px 8px;
1768
- font-size: 14px;
1769
- cursor: pointer;
1770
- color: var(--text-3);
1771
- transition: color 150ms ease;
1772
- }
1773
-
1774
- .setup-wizard-toggle-vis:hover {
1775
- color: var(--text);
1776
- }
1777
-
1778
- /* ── Step 3: Engine cards ── */
1779
-
1780
- .setup-wizard-engine-grid {
1781
- display: grid;
1782
- grid-template-columns: repeat(2, 1fr);
1783
- gap: 12px;
1784
- margin-bottom: 16px;
1785
- }
1786
-
1787
- .setup-wizard-engine-card {
1788
- background: var(--bg);
1789
- border: 1px solid var(--border);
1790
- border-radius: 10px;
1791
- padding: 16px;
1792
- display: flex;
1793
- flex-direction: column;
1794
- gap: 6px;
1795
- transition: border-color 150ms ease, background 150ms ease;
1796
- }
1797
-
1798
- .setup-wizard-engine-card.available {
1799
- border-color: rgba(52, 211, 153, 0.3);
1800
- background: rgba(52, 211, 153, 0.03);
1801
- }
1802
-
1803
- .setup-wizard-engine-card:not(.available) {
1804
- opacity: 0.7;
1805
- }
1806
-
1807
- .setup-wizard-engine-badge {
1808
- font-size: 11px;
1809
- font-weight: 600;
1810
- text-transform: uppercase;
1811
- letter-spacing: 0.05em;
1812
- }
1813
-
1814
- .setup-wizard-engine-badge.installed {
1815
- color: var(--green, #34d399);
1816
- }
1817
-
1818
- .setup-wizard-engine-badge.missing {
1819
- color: var(--text-3, #666);
1820
- }
1821
-
1822
- .setup-wizard-engine-title {
1823
- font-size: 15px;
1824
- font-weight: 600;
1825
- color: var(--text);
1826
- }
1827
-
1828
- .setup-wizard-engine-cmd {
1829
- font-size: 12px;
1830
- color: var(--text-3);
1831
- background: var(--bg-card);
1832
- padding: 2px 8px;
1833
- border-radius: 4px;
1834
- display: inline-block;
1835
- width: fit-content;
1836
- font-family: var(--font-mono, monospace);
1837
- }
1838
-
1839
- .setup-wizard-engine-desc {
1840
- font-size: 12px;
1841
- color: var(--text-2);
1842
- line-height: 1.4;
1843
- margin: 4px 0 8px;
1844
- }
1845
-
1846
- .setup-wizard-engine-action {
1847
- margin-top: auto;
1848
- display: flex;
1849
- align-items: center;
1850
- gap: 6px;
1851
- font-size: 12px;
1852
- }
1853
-
1854
- .setup-wizard-engine-auth-label {
1855
- color: var(--text-3);
1856
- }
1857
-
1858
- .setup-wizard-engine-auth-cmd {
1859
- font-size: 11px;
1860
- color: var(--accent);
1861
- background: rgba(99, 102, 241, 0.1);
1862
- padding: 3px 8px;
1863
- border-radius: 4px;
1864
- font-family: var(--font-mono, monospace);
1865
- }
1866
-
1867
- .setup-wizard-engine-key-note {
1868
- font-size: 12px;
1869
- }
1870
-
1871
- .setup-wizard-engine-key-note.key-ok {
1872
- color: var(--green, #34d399);
1873
- }
1874
-
1875
- .setup-wizard-engine-key-note.key-missing {
1876
- color: var(--yellow, #fbbf24);
1877
- }
1878
-
1879
- .setup-wizard-engine-install-btn {
1880
- font-size: 12px;
1881
- color: var(--accent);
1882
- text-decoration: none;
1883
- font-weight: 500;
1884
- padding: 4px 12px;
1885
- border: 1px solid var(--accent);
1886
- border-radius: 6px;
1887
- transition: background 150ms ease;
1888
- }
1889
-
1890
- .setup-wizard-engine-install-btn:hover {
1891
- background: rgba(99, 102, 241, 0.1);
1892
- }
1893
-
1894
- .setup-wizard-engine-hint {
1895
- font-size: 13px;
1896
- color: var(--text-2);
1897
- text-align: center;
1898
- margin: 8px 0;
1899
- }
1900
-
1901
- .setup-wizard-provider-icon {
1902
- font-size: 16px;
1903
- width: 24px;
1904
- text-align: center;
1905
- flex-shrink: 0;
1906
- }
1907
-
1908
- /* ── Legacy preset grid (kept for backwards compat) ── */
1909
-
1910
- .setup-wizard-preset-grid {
1911
- display: grid;
1912
- grid-template-columns: repeat(3, 1fr);
1913
- gap: 10px;
1914
- margin-bottom: 24px;
1915
- }
1916
-
1917
- .setup-wizard-preset-card {
1918
- display: flex;
1919
- flex-direction: column;
1920
- align-items: center;
1921
- text-align: center;
1922
- padding: 20px 12px;
1923
- background: var(--bg-card2);
1924
- border: 2px solid var(--border);
1925
- border-radius: 12px;
1926
- cursor: pointer;
1927
- transition:
1928
- border-color 200ms ease,
1929
- background 200ms ease,
1930
- transform 150ms ease;
1931
- }
1932
-
1933
- .setup-wizard-preset-card:hover {
1934
- background: var(--bg-hover);
1935
- transform: translateY(-1px);
1936
- }
1937
-
1938
- .setup-wizard-preset-card.selected {
1939
- border-color: var(--accent);
1940
- background: rgba(56, 189, 248, 0.06);
1941
- }
1942
-
1943
- .setup-wizard-preset-icon {
1944
- font-size: 28px;
1945
- margin-bottom: 10px;
1946
- line-height: 1;
1947
- }
1948
-
1949
- .setup-wizard-preset-label {
1950
- font-size: 15px;
1951
- font-weight: 700;
1952
- color: var(--text);
1953
- margin-bottom: 6px;
1954
- letter-spacing: -0.01em;
1955
- }
1956
-
1957
- .setup-wizard-preset-desc {
1958
- font-size: 12px;
1959
- color: var(--text-2);
1960
- line-height: 1.4;
1961
- }
1962
-
1963
- /* ── Wizard buttons ── */
1964
-
1965
- .setup-wizard-actions {
1966
- display: flex;
1967
- justify-content: flex-end;
1968
- gap: 10px;
1969
- margin-top: 8px;
1970
- }
1971
-
1972
- .setup-wizard-btn-primary {
1973
- background: var(--accent);
1974
- color: #000;
1975
- border: none;
1976
- border-radius: 8px;
1977
- padding: 10px 24px;
1978
- font-size: 14px;
1979
- font-weight: 600;
1980
- font-family: inherit;
1981
- cursor: pointer;
1982
- transition:
1983
- opacity 150ms ease,
1984
- transform 100ms ease;
1985
- }
1986
-
1987
- .setup-wizard-btn-primary:hover {
1988
- opacity: 0.9;
1989
- }
1990
-
1991
- .setup-wizard-btn-primary:active {
1992
- transform: scale(0.98);
1993
- }
1994
-
1995
- .setup-wizard-btn-primary:disabled {
1996
- opacity: 0.4;
1997
- cursor: not-allowed;
1998
- }
1999
-
2000
- .setup-wizard-btn-ghost {
2001
- background: transparent;
2002
- color: var(--text-2);
2003
- border: 1px solid var(--border);
2004
- border-radius: 8px;
2005
- padding: 10px 20px;
2006
- font-size: 14px;
2007
- font-weight: 500;
2008
- font-family: inherit;
2009
- cursor: pointer;
2010
- transition:
2011
- background 150ms ease,
2012
- color 150ms ease;
2013
- }
2014
-
2015
- .setup-wizard-btn-ghost:hover {
2016
- background: var(--bg-hover);
2017
- color: var(--text);
2018
- }
2019
-
2020
- /* ── Error state ── */
2021
-
2022
- .setup-wizard-error {
2023
- padding: 10px 14px;
2024
- background: rgba(248, 113, 113, 0.1);
2025
- border: 1px solid rgba(248, 113, 113, 0.25);
2026
- border-radius: 8px;
2027
- color: var(--red);
2028
- font-size: 13px;
2029
- margin-bottom: 12px;
2030
- }
2031
-
2032
- .setup-wizard-error.hidden {
2033
- display: none;
2034
- }
2035
-
2036
- /* ── Responsive ── */
2037
-
2038
- @media (max-width: 640px) {
2039
- .setup-wizard-card {
2040
- padding: 28px 20px 24px;
2041
- margin: 0 12px;
2042
- border-radius: 12px;
2043
- }
2044
-
2045
- .setup-wizard-engine-grid {
2046
- grid-template-columns: 1fr;
2047
- gap: 8px;
2048
- }
2049
-
2050
- .setup-wizard-preset-grid {
2051
- grid-template-columns: 1fr;
2052
- gap: 8px;
2053
- }
2054
-
2055
- .setup-wizard-preset-card {
2056
- flex-direction: row;
2057
- text-align: left;
2058
- gap: 12px;
2059
- padding: 14px 16px;
2060
- }
2061
-
2062
- .setup-wizard-preset-icon {
2063
- font-size: 22px;
2064
- margin-bottom: 0;
2065
- }
2066
-
2067
- .setup-wizard-preset-label {
2068
- margin-bottom: 2px;
2069
- }
2070
-
2071
- .setup-wizard-step-line {
2072
- width: 28px;
2073
- margin: 0 6px;
2074
- }
2075
-
2076
- .setup-wizard-actions {
2077
- flex-direction: column-reverse;
2078
- }
2079
-
2080
- .setup-wizard-btn-primary,
2081
- .setup-wizard-btn-ghost {
2082
- width: 100%;
2083
- text-align: center;
2084
- }
2085
- }