@symerian/symi 3.5.0 → 3.5.2

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 (62) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/bundled/boot-md/handler.js +4 -4
  3. package/dist/bundled/session-memory/handler.js +4 -4
  4. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  5. package/dist/{chrome-C_I81hbq.js → chrome-B7-rO4i9.js} +4 -4
  6. package/dist/{chrome-BKUACyeO.js → chrome-DPjznJQ-.js} +4 -4
  7. package/dist/control-ui/css/revert-red-theme.md +141 -0
  8. package/dist/control-ui/css/style.css +5843 -0
  9. package/dist/control-ui/css/style.css.backup-2026-03-03-162525 +3546 -0
  10. package/dist/control-ui/css/style.css.backup-before-red-2026-03-03-162525 +3546 -0
  11. package/dist/control-ui/css/style.css.backup-before-red-theme-2026-03-03-162530 +3546 -0
  12. package/dist/control-ui/css/style.css.pre-2row +2165 -0
  13. package/dist/control-ui/css/style.css.pre-brand +1776 -0
  14. package/dist/control-ui/css/style.css.pre-history +1974 -0
  15. package/dist/control-ui/css/style.css.pre-nav +2264 -0
  16. package/dist/control-ui/css/style.css.pre-newsession +1898 -0
  17. package/dist/control-ui/css/style.css.pre-queue +2195 -0
  18. package/dist/control-ui/css/style.css.pre-red-prompt +2524 -0
  19. package/dist/control-ui/css/style.css.pre-stop +2239 -0
  20. package/dist/control-ui/css/style.css.pre-textarea +2184 -0
  21. package/dist/control-ui/css/style.css.pre-watchdog +1848 -0
  22. package/dist/control-ui/css/style.css.red-theme +2999 -0
  23. package/dist/control-ui/index.html +1049 -0
  24. package/dist/control-ui/js/app.js +1304 -0
  25. package/dist/control-ui/js/app.js.pre-2row +463 -0
  26. package/dist/control-ui/js/app.js.pre-heartbeat-filter +595 -0
  27. package/dist/control-ui/js/app.js.pre-newsession +408 -0
  28. package/dist/control-ui/js/app.js.pre-queue +476 -0
  29. package/dist/control-ui/js/app.js.pre-stop +564 -0
  30. package/dist/control-ui/js/app.js.pre-textarea +467 -0
  31. package/dist/control-ui/js/app.js.pre-watchdog +293 -0
  32. package/dist/control-ui/js/connections.js +438 -0
  33. package/dist/control-ui/js/gateway.js +233 -0
  34. package/dist/control-ui/js/gateway.js.pre-stop +110 -0
  35. package/dist/control-ui/js/history.js +732 -0
  36. package/dist/control-ui/js/logs.js +238 -0
  37. package/dist/control-ui/js/menu.js +232 -0
  38. package/dist/control-ui/js/menu.js.pre-nav +66 -0
  39. package/dist/control-ui/js/metrics.js +53 -0
  40. package/dist/control-ui/js/models.js +138 -0
  41. package/dist/control-ui/js/render.js +882 -0
  42. package/dist/control-ui/js/render.test.js +112 -0
  43. package/dist/control-ui/js/scheduling.js +461 -0
  44. package/dist/control-ui/js/settings.js +910 -0
  45. package/dist/control-ui/js/slash-autocomplete.js +168 -0
  46. package/dist/control-ui/js/subagents.js +560 -0
  47. package/dist/control-ui/js/utils.js +29 -0
  48. package/dist/control-ui/vendor/highlight.min.js +2518 -0
  49. package/dist/control-ui/vendor/marked.min.js +69 -0
  50. package/dist/{deliver-DyO3QD8O.js → deliver-DTRkeYm3.js} +4 -4
  51. package/dist/{deliver-Cjyb6h4g.js → deliver-oWGJwzFf.js} +4 -4
  52. package/dist/extensionAPI.js +4 -4
  53. package/dist/llm-slug-generator.js +4 -4
  54. package/dist/{manager-rvtFoeFT.js → manager-CFenq_aO.js} +1 -1
  55. package/dist/{manager-PTSjHNVq.js → manager-CsxTf96V.js} +1 -1
  56. package/dist/{pi-embedded-BPuUM-gD.js → pi-embedded-Cdub5Vs9.js} +10 -10
  57. package/dist/{pw-ai-BFS9ezWe.js → pw-ai-BOOB8qoi.js} +1 -1
  58. package/dist/{pw-ai-Cx-Ko_FL.js → pw-ai-D2pEVS5n.js} +1 -1
  59. package/dist/{synthesis-7UL3pCpj.js → synthesis-Be9nYyDd.js} +4 -4
  60. package/dist/{synthesis-fD8J2vag.js → synthesis-CBIT6Vnk.js} +4 -4
  61. package/dist/{unified-runner-BIiKFnNF.js → unified-runner-BVvvnjXW.js} +10 -10
  62. package/package.json +3 -3
@@ -0,0 +1,2999 @@
1
+ /* ── Floating Prompt Bar ─────────────────────────────────────────── */
2
+ .prompt-wrap {
3
+ position: fixed;
4
+ bottom: 28px;
5
+ left: calc(50% - 370px);
6
+ right: calc(50% - 370px);
7
+ z-index: 20;
8
+ display: flex;
9
+ justify-content: center;
10
+ }
11
+
12
+ .prompt-bar {
13
+ width: 100%;
14
+ max-width: 720px;
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: 10px;
18
+ background: rgba(255,0,0,0.05);
19
+ backdrop-filter: blur(32px) saturate(200%);
20
+ -webkit-backdrop-filter: blur(32px) saturate(200%);
21
+ border: 1px solid rgba(255,0,0,0.12);
22
+ border-radius: 20px;
23
+ padding: 14px 16px 12px;
24
+ box-shadow:
25
+ 0 0 0 1px rgba(255,0,0,0.08),
26
+ 0 8px 40px rgba(0,0,0,0.6),
27
+ 0 0 60px rgba(255,0,0,0.04),
28
+ inset 0 1px 0 rgba(255,255,255,0.08);
29
+ transition: border-color 0.3s, box-shadow 0.3s;
30
+ cursor: text;
31
+ }
32
+
33
+ /* ── Prompt rows ──────────────────────────────────────────────────── */
34
+ .prompt-row-main {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 12px;
38
+ width: 100%;
39
+ }
40
+
41
+ .prompt-row-actions {
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: flex-end;
45
+ gap: 8px;
46
+ width: 100%;
47
+ padding-top: 2px;
48
+ border-top: 1px solid rgba(255,255,255,0.05);
49
+ }
50
+
51
+ .prompt-bar:focus-within {
52
+ border-color: rgba(255,0,0,0.3);
53
+ box-shadow:
54
+ 0 0 0 1px rgba(255,0,0,0.15),
55
+ 0 8px 40px rgba(0,0,0,0.6),
56
+ 0 0 80px rgba(255,0,0,0.08),
57
+ inset 0 1px 0 rgba(255,255,255,0.1);
58
+ }
59
+
60
+ .prompt-icon {
61
+ color: rgba(255,0,0,0.85);
62
+ opacity: 0.8;
63
+ flex-shrink: 0;
64
+ display: flex;
65
+ align-items: center;
66
+ filter: drop-shadow(0 0 4px rgba(255,0,0,0.6));
67
+ }
68
+
69
+ .prompt-bar textarea {
70
+ flex: 1;
71
+ background: transparent;
72
+ border: none;
73
+ outline: none;
74
+ color: var(--text);
75
+ font-family: var(--font);
76
+ font-size: 14px;
77
+ line-height: 1.55;
78
+ letter-spacing: 0.01em;
79
+ caret-color: rgba(255,0,0,0.85);
80
+ resize: none;
81
+ overflow-y: hidden;
82
+ min-height: 22px;
83
+ max-height: calc(3 * 1.55 * 14px); /* 3 lines */
84
+ padding: 0;
85
+ margin: 0;
86
+ display: block;
87
+ scrollbar-width: none;
88
+ }
89
+
90
+ .prompt-bar textarea::-webkit-scrollbar { display: none; }
91
+
92
+ .prompt-bar textarea::placeholder {
93
+ color: var(--text-dim);
94
+ }
95
+
96
+ .send-btn {
97
+ background: rgba(255,0,0,0.12);
98
+ border: 1px solid rgba(255,0,0,0.2);
99
+ border-radius: 50%;
100
+ width: 32px;
101
+ height: 32px;
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ color: rgba(255,0,0,0.85);
106
+ cursor: pointer;
107
+ flex-shrink: 0;
108
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
109
+ }
110
+
111
+ .send-btn:hover {
112
+ background: rgba(255,0,0,0.22);
113
+ box-shadow: 0 0 16px rgba(255,0,0,0.25);
114
+ transform: scale(1.05);
115
+ }
116
+
117
+ .send-btn:active {
118
+ transform: scale(0.95);
119
+ }
120
+
121
+ /* ── New Session Button ───────────────────────────────────────────── */
122
+ .prompt-divider {
123
+ width: 1px;
124
+ height: 18px;
125
+ background: rgba(255,255,255,0.08);
126
+ flex-shrink: 0;
127
+ }
128
+
129
+ .new-session-btn {
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 5px;
133
+ background: rgba(139,92,246,0.1);
134
+ border: 1px solid rgba(139,92,246,0.2);
135
+ border-radius: 8px;
136
+ padding: 0 11px;
137
+ height: 28px;
138
+ color: rgba(139,92,246,0.85);
139
+ cursor: pointer;
140
+ flex-shrink: 0;
141
+ transition: background 0.2s, box-shadow 0.2s, transform 0.15s, opacity 0.2s;
142
+ }
143
+
144
+ .new-session-btn:hover {
145
+ background: rgba(139,92,246,0.2);
146
+ box-shadow: 0 0 16px rgba(139,92,246,0.2);
147
+ transform: scale(1.03);
148
+ }
149
+
150
+ .new-session-btn:active {
151
+ transform: scale(0.96);
152
+ }
153
+
154
+ .new-session-btn:disabled {
155
+ opacity: 0.3;
156
+ cursor: not-allowed;
157
+ transform: none;
158
+ }
159
+
160
+ .new-session-label {
161
+ font-family: var(--font-mono);
162
+ font-size: 11px;
163
+ letter-spacing: 0.08em;
164
+ font-weight: 600;
165
+ }
166
+
167
+ /* ── New Session Cleared State ───────────────────────────────────── */
168
+ .session-cleared {
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: center;
172
+ justify-content: center;
173
+ gap: 10px;
174
+ padding: 60px 20px;
175
+ opacity: 0;
176
+ animation: session-cleared-in 0.5s ease forwards;
177
+ }
178
+
179
+ .session-cleared-icon {
180
+ font-size: 28px;
181
+ opacity: 0.3;
182
+ }
183
+
184
+ .session-cleared-text {
185
+ font-family: var(--font-mono);
186
+ font-size: 12px;
187
+ letter-spacing: 0.12em;
188
+ color: var(--text-dim);
189
+ opacity: 0.5;
190
+ }
191
+
192
+ @keyframes session-cleared-in {
193
+ from { opacity: 0; transform: translateY(8px); }
194
+ to { opacity: 1; transform: translateY(0); }
195
+ }
196
+
197
+ /* ── Thinking Bubble ──────────────────────────────────────────────── */
198
+ .thinking-bubble {
199
+ background: rgba(255,0,0,0.04) !important;
200
+ border-color: rgba(255,0,0,0.15) !important;
201
+ padding: 10px 16px !important;
202
+ }
203
+
204
+ .think-header {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 10px;
208
+ margin-bottom: 8px;
209
+ }
210
+
211
+ .think-badge {
212
+ font-family: var(--font-mono);
213
+ font-size: 9px;
214
+ font-weight: 700;
215
+ letter-spacing: 0.15em;
216
+ color: rgba(255,0,0,0.85);
217
+ text-shadow: 0 0 8px rgba(255,0,0,0.6);
218
+ }
219
+
220
+ .think-dots span {
221
+ display: inline-block;
222
+ color: rgba(255,0,0,0.85);
223
+ animation: dot-pulse 1.2s ease-in-out infinite;
224
+ font-size: 14px;
225
+ opacity: 0;
226
+ }
227
+ .think-dots span:nth-child(1) { animation-delay: 0s; }
228
+ .think-dots span:nth-child(2) { animation-delay: 0.2s; }
229
+ .think-dots span:nth-child(3) { animation-delay: 0.4s; }
230
+
231
+ @keyframes dot-pulse {
232
+ 0%, 100% { opacity: 0; transform: translateY(0); }
233
+ 50% { opacity: 1; transform: translateY(-3px); }
234
+ }
235
+
236
+ .think-bar-wrap {
237
+ height: 2px;
238
+ background: rgba(255,255,255,0.06);
239
+ border-radius: 99px;
240
+ overflow: hidden;
241
+ }
242
+
243
+ .think-bar {
244
+ height: 100%;
245
+ width: 0%;
246
+ background: linear-gradient(90deg, transparent, rgba(255,0,0,0.85), transparent);
247
+ border-radius: 99px;
248
+ border: 1px solid rgba(0,212,255,0.2);
249
+ border-radius: 50%;
250
+ width: 32px;
251
+ height: 32px;
252
+ display: flex;
253
+ align-items: center;
254
+ justify-content: center;
255
+ color: var(--accent-cyan);
256
+ cursor: pointer;
257
+ flex-shrink: 0;
258
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
259
+ }
260
+
261
+ .send-btn:hover {
262
+ background: rgba(0,212,255,0.22);
263
+ box-shadow: 0 0 16px rgba(0,212,255,0.25);
264
+ transform: scale(1.05);
265
+ }
266
+
267
+ .send-btn:active {
268
+ transform: scale(0.95);
269
+ }
270
+
271
+ /* ── New Session Button ───────────────────────────────────────────── */
272
+ .prompt-divider {
273
+ width: 1px;
274
+ height: 18px;
275
+ background: rgba(255,255,255,0.08);
276
+ flex-shrink: 0;
277
+ }
278
+
279
+ .new-session-btn {
280
+ display: flex;
281
+ align-items: center;
282
+ gap: 5px;
283
+ background: rgba(139,92,246,0.1);
284
+ border: 1px solid rgba(139,92,246,0.2);
285
+ border-radius: 8px;
286
+ padding: 0 11px;
287
+ height: 28px;
288
+ color: rgba(139,92,246,0.85);
289
+ cursor: pointer;
290
+ flex-shrink: 0;
291
+ transition: background 0.2s, box-shadow 0.2s, transform 0.15s, opacity 0.2s;
292
+ }
293
+
294
+ .new-session-btn:hover {
295
+ background: rgba(139,92,246,0.2);
296
+ box-shadow: 0 0 16px rgba(139,92,246,0.2);
297
+ transform: scale(1.03);
298
+ }
299
+
300
+ .new-session-btn:active {
301
+ transform: scale(0.96);
302
+ }
303
+
304
+ .new-session-btn:disabled {
305
+ opacity: 0.3;
306
+ cursor: not-allowed;
307
+ transform: none;
308
+ }
309
+
310
+ .new-session-label {
311
+ font-family: var(--font-mono);
312
+ font-size: 11px;
313
+ letter-spacing: 0.08em;
314
+ font-weight: 600;
315
+ }
316
+
317
+ /* ── New Session Cleared State ───────────────────────────────────── */
318
+ .session-cleared {
319
+ display: flex;
320
+ flex-direction: column;
321
+ align-items: center;
322
+ justify-content: center;
323
+ gap: 10px;
324
+ padding: 60px 20px;
325
+ opacity: 0;
326
+ animation: session-cleared-in 0.5s ease forwards;
327
+ }
328
+
329
+ .session-cleared-icon {
330
+ font-size: 28px;
331
+ opacity: 0.3;
332
+ }
333
+
334
+ .session-cleared-text {
335
+ font-family: var(--font-mono);
336
+ font-size: 12px;
337
+ letter-spacing: 0.12em;
338
+ color: var(--text-dim);
339
+ opacity: 0.5;
340
+ }
341
+
342
+ @keyframes session-cleared-in {
343
+ from { opacity: 0; transform: translateY(8px); }
344
+ to { opacity: 1; transform: translateY(0); }
345
+ }
346
+
347
+ /* ── Thinking Bubble ──────────────────────────────────────────────── */
348
+ .thinking-bubble {
349
+ background: rgba(0,212,255,0.04) !important;
350
+ border-color: rgba(0,212,255,0.15) !important;
351
+ padding: 10px 16px !important;
352
+ }
353
+
354
+ .think-header {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 10px;
358
+ margin-bottom: 8px;
359
+ }
360
+
361
+ .think-badge {
362
+ font-family: var(--font-mono);
363
+ font-size: 9px;
364
+ font-weight: 700;
365
+ letter-spacing: 0.15em;
366
+ color: var(--accent-cyan);
367
+ text-shadow: 0 0 8px var(--accent-cyan);
368
+ }
369
+
370
+ .think-dots span {
371
+ display: inline-block;
372
+ color: var(--accent-cyan);
373
+ animation: dot-pulse 1.2s ease-in-out infinite;
374
+ font-size: 14px;
375
+ opacity: 0;
376
+ }
377
+ .think-dots span:nth-child(1) { animation-delay: 0s; }
378
+ .think-dots span:nth-child(2) { animation-delay: 0.2s; }
379
+ .think-dots span:nth-child(3) { animation-delay: 0.4s; }
380
+
381
+ @keyframes dot-pulse {
382
+ 0%, 100% { opacity: 0; transform: translateY(0); }
383
+ 50% { opacity: 1; transform: translateY(-3px); }
384
+ }
385
+
386
+ .think-bar-wrap {
387
+ height: 2px;
388
+ background: rgba(255,255,255,0.06);
389
+ border-radius: 99px;
390
+ overflow: hidden;
391
+ }
392
+
393
+ .think-bar {
394
+ height: 100%;
395
+ width: 0%;
396
+ background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
397
+ border-radius: 99px;
398
+ animation: think-scan 1s ease-in-out infinite;
399
+ }
400
+
401
+ @keyframes think-scan {
402
+ 0% { width: 0%; margin-left: 0%; opacity: 1; }
403
+ 50% { width: 60%; margin-left: 20%; opacity: 1; }
404
+ 100% { width: 0%; margin-left: 100%; opacity: 0; }
405
+ }
406
+
407
+ /* ── Streaming Bubble ─────────────────────────────────────────────── */
408
+ .stream-bubble {
409
+ position: relative;
410
+ }
411
+
412
+ .stream-bubble.streaming {
413
+ width: 100% !important;
414
+ border-color: rgba(0,212,255,0.25) !important;
415
+ box-shadow:
416
+ 0 8px 32px rgba(0,0,0,0.5),
417
+ 0 0 20px rgba(0,212,255,0.06),
418
+ inset 0 1px 0 rgba(255,255,255,0.06) !important;
419
+ animation: stream-pulse 1.8s ease-in-out infinite;
420
+ }
421
+
422
+ @keyframes stream-pulse {
423
+ 0%, 100% { box-shadow: 0 8px 32px rgba(0,0,0,0.5), 0 0 20px rgba(0,212,255,0.06), inset 0 1px 0 rgba(255,255,255,0.06); }
424
+ 50% { box-shadow: 0 8px 32px rgba(0,0,0,0.5), 0 0 40px rgba(0,212,255,0.12), inset 0 1px 0 rgba(255,255,255,0.06); }
425
+ }
426
+
427
+ .stream-bubble.streaming::after {
428
+ content: '';
429
+ position: absolute;
430
+ top: 0; left: 0; right: 0;
431
+ height: 1px;
432
+ background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
433
+ opacity: 0.6;
434
+ animation: top-scan 2s linear infinite;
435
+ }
436
+
437
+ @keyframes top-scan {
438
+ 0% { transform: scaleX(0); transform-origin: left; opacity: 0.8; }
439
+ 50% { transform: scaleX(1); transform-origin: left; opacity: 0.6; }
440
+ 100% { transform: scaleX(0); transform-origin: right; opacity: 0; }
441
+ }
442
+
443
+ .stream-bubble.done {
444
+ width: fit-content;
445
+ max-width: 100%;
446
+ border-color: rgba(255,255,255,0.1) !important;
447
+ transition: border-color 0.8s, box-shadow 0.8s, width 0.3s ease;
448
+ }
449
+
450
+ /* ── Character spawn animation ────────────────────────────────────── */
451
+ .char-spawn {
452
+ display: inline;
453
+ color: transparent;
454
+ text-shadow: none;
455
+ transition: color 0.12s ease, text-shadow 0.2s ease;
456
+ }
457
+
458
+ .char-spawn.char-visible {
459
+ color: var(--text);
460
+ text-shadow: 0 0 8px rgba(0,212,255,0.4);
461
+ animation: char-settle 0.4s ease forwards;
462
+ }
463
+
464
+ @keyframes char-settle {
465
+ 0% { color: var(--accent-cyan); text-shadow: 0 0 12px var(--accent-cyan), 0 0 24px rgba(0,212,255,0.3); }
466
+ 40% { color: rgba(200,240,255,0.95); text-shadow: 0 0 6px rgba(0,212,255,0.2); }
467
+ 100% { color: var(--text); text-shadow: none; }
468
+ }
469
+
470
+ /* ── Telemetry footer ─────────────────────────────────────────────── */
471
+ .telemetry {
472
+ display: flex;
473
+ align-items: center;
474
+ gap: 6px;
475
+ margin-top: 10px;
476
+ padding-top: 8px;
477
+ border-top: 1px solid rgba(255,255,255,0.05);
478
+ opacity: 0;
479
+ transform: translateY(4px);
480
+ transition: opacity 0.5s ease 0.2s, transform 0.5s ease 0.2s;
481
+ }
482
+
483
+ .telemetry.tele-visible {
484
+ opacity: 1;
485
+ transform: translateY(0);
486
+ }
487
+
488
+ .tele-item {
489
+ font-family: var(--font-mono);
490
+ font-size: 9px;
491
+ color: var(--text-dim);
492
+ letter-spacing: 0.06em;
493
+ }
494
+
495
+ .tele-sep {
496
+ color: rgba(255,255,255,0.12);
497
+ font-size: 9px;
498
+ }
499
+
500
+ /* ── Send button loading state ────────────────────────────────────── */
501
+ .send-btn.btn-loading {
502
+ animation: btn-spin 1s linear infinite;
503
+ }
504
+ @keyframes btn-spin {
505
+ to { transform: rotate(360deg); }
506
+ }
507
+
508
+ /* ── Connection status ────────────────────────────────────────────── */
509
+ .conn-status {
510
+ position: fixed;
511
+ top: 16px;
512
+ left: 50%;
513
+ transform: translateX(-50%);
514
+ z-index: 30;
515
+ display: flex;
516
+ align-items: center;
517
+ gap: 7px;
518
+ background: var(--glass-bg);
519
+ backdrop-filter: var(--blur);
520
+ -webkit-backdrop-filter: var(--blur);
521
+ border: 1px solid var(--glass-border);
522
+ border-radius: 99px;
523
+ padding: 5px 12px;
524
+ pointer-events: none;
525
+ }
526
+
527
+ .conn-label {
528
+ font-family: var(--font-mono);
529
+ font-size: 9px;
530
+ letter-spacing: 0.1em;
531
+ color: var(--text-dim);
532
+ }
533
+
534
+ .dot-red { background: #f87171; box-shadow: 0 0 6px #f87171; }
535
+
536
+ /* ── UI Toggle button ─────────────────────────────────────────────── */
537
+ .ui-toggle {
538
+ position: fixed;
539
+ top: 16px;
540
+ right: 24px;
541
+ z-index: 30;
542
+ display: flex;
543
+ align-items: center;
544
+ gap: 7px;
545
+ background: var(--glass-bg);
546
+ backdrop-filter: var(--blur);
547
+ -webkit-backdrop-filter: var(--blur);
548
+ border: 1px solid var(--glass-border);
549
+ border-radius: 99px;
550
+ padding: 6px 14px;
551
+ color: var(--text-muted);
552
+ font-size: 11px;
553
+ font-family: var(--font-mono);
554
+ letter-spacing: 0.05em;
555
+ text-decoration: none;
556
+ transition: border-color 0.2s, color 0.2s, box-shadow 0.2s;
557
+ }
558
+
559
+ .ui-toggle:hover {
560
+ border-color: var(--glass-border-strong);
561
+ color: var(--text);
562
+ box-shadow: 0 0 16px rgba(0,212,255,0.08);
563
+ }
564
+
565
+ /* ── Scrollbar ────────────────────────────────────────────────────── */
566
+ .response-area::-webkit-scrollbar { display: none; }
567
+ .response-area { scrollbar-width: none; }
568
+
569
+ /* ═══════════════════════════════════════════════════════════════════
570
+ CONTENT TYPES — Markdown, Thinking, Tool Cards, Code
571
+ ═══════════════════════════════════════════════════════════════════ */
572
+
573
+ /* ── Markdown prose ────────────────────────────────────────────────── */
574
+ .msg-text {
575
+ font-size: 14.5px;
576
+ line-height: 1.75;
577
+ color: var(--text);
578
+ word-wrap: break-word;
579
+ overflow-wrap: anywhere;
580
+ word-break: break-word;
581
+ }
582
+
583
+ /* Paragraph spacing */
584
+ .msg-text :where(p, ul, ol, pre, blockquote, table) { margin: 0; }
585
+ .msg-text :where(p + p,
586
+ p + ul, p + ol, p + pre, p + blockquote, p + table,
587
+ ul + p, ol + p, pre + p, blockquote + p, table + p) { margin-top: 0.75em; }
588
+ .msg-text :where(li + li) { margin-top: 0.25em; }
589
+
590
+ /* Headings */
591
+ .msg-text :where(h1, h2, h3, h4, h5, h6) {
592
+ font-weight: 600;
593
+ line-height: 1.3;
594
+ color: rgba(255,255,255,0.96);
595
+ margin: 1.1em 0 0.4em;
596
+ }
597
+ .msg-text :where(h1) { font-size: 1.35em; border-bottom: 1px solid var(--glass-border); padding-bottom: 0.3em; }
598
+ .msg-text :where(h2) { font-size: 1.18em; border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 0.2em; }
599
+ .msg-text :where(h3) { font-size: 1.06em; }
600
+ .msg-text :where(h4, h5, h6) { font-size: 1em; color: rgba(255,255,255,0.8); }
601
+ .msg-text :where(h1, h2, h3, h4, h5, h6):first-child { margin-top: 0.3em; }
602
+
603
+ /* Lists */
604
+ .msg-text :where(ul, ol) { padding-left: 1.4em; }
605
+ .msg-text :where(ul) { list-style-type: disc; }
606
+ .msg-text :where(ol) { list-style-type: decimal; }
607
+ .msg-text :where(ul ul) { list-style-type: circle; margin-top: 0.25em; }
608
+
609
+ /* Text formatting */
610
+ .msg-text :where(strong) { font-weight: 600; color: rgba(255,255,255,0.97); }
611
+ .msg-text :where(em) { font-style: italic; color: rgba(255,255,255,0.82); }
612
+ .msg-text :where(del) { text-decoration: line-through; opacity: 0.6; }
613
+ .msg-text :where(mark) { background: rgba(251,191,36,0.2); color: #fbbf24; border-radius: 2px; padding: 0 3px; }
614
+ .msg-text :where(sup) { font-size: 0.75em; vertical-align: super; }
615
+ .msg-text :where(sub) { font-size: 0.75em; vertical-align: sub; }
616
+
617
+ /* Links */
618
+ .msg-text :where(a) { color: var(--accent-cyan); text-decoration: none; border-bottom: 1px solid rgba(0,212,255,0.3); }
619
+ .msg-text :where(a:hover) { border-bottom-color: var(--accent-cyan); }
620
+
621
+ /* Horizontal rule */
622
+ .msg-text :where(hr) {
623
+ border: none;
624
+ border-top: 1px solid var(--glass-border);
625
+ margin: 1em 0;
626
+ }
627
+
628
+ /* Blockquote */
629
+ .msg-text :where(blockquote) {
630
+ border-left: 2px solid rgba(0,212,255,0.3);
631
+ margin: 0.6em 0;
632
+ padding: 6px 14px;
633
+ background: rgba(0,212,255,0.03);
634
+ color: var(--text-muted);
635
+ border-radius: 0 6px 6px 0;
636
+ }
637
+ .msg-text :where(blockquote blockquote) {
638
+ border-left-color: rgba(139,92,246,0.4);
639
+ background: rgba(139,92,246,0.03);
640
+ margin-top: 6px;
641
+ }
642
+
643
+ /* ── Tables ─────────────────────────────────────────────────────────── */
644
+ .msg-text :where(table) {
645
+ width: 100%;
646
+ border-collapse: collapse;
647
+ font-size: 13px;
648
+ margin-top: 0.75em;
649
+ border: 1px solid var(--glass-border);
650
+ border-radius: 8px;
651
+ overflow: hidden;
652
+ }
653
+
654
+ .msg-text :where(thead) {
655
+ background: rgba(0,212,255,0.06);
656
+ }
657
+
658
+ .msg-text :where(th) {
659
+ font-family: var(--font-mono);
660
+ font-size: 10.5px;
661
+ font-weight: 600;
662
+ letter-spacing: 0.08em;
663
+ text-transform: uppercase;
664
+ color: var(--accent-cyan);
665
+ border: 1px solid var(--glass-border);
666
+ padding: 8px 12px;
667
+ text-align: left;
668
+ background: rgba(0,0,0,0.15);
669
+ }
670
+
671
+ .msg-text :where(td) {
672
+ border: 1px solid var(--glass-border);
673
+ padding: 7px 12px;
674
+ vertical-align: top;
675
+ color: var(--text);
676
+ line-height: 1.5;
677
+ }
678
+
679
+ .msg-text :where(tr:nth-child(even) td) {
680
+ background: rgba(255,255,255,0.015);
681
+ }
682
+
683
+ .msg-text :where(tr:hover td) {
684
+ background: rgba(0,212,255,0.03);
685
+ }
686
+
687
+ /* ── Inline code ────────────────────────────────────────────────────── */
688
+ .inline-code,
689
+ .msg-text :where(:not(pre) > code) {
690
+ font-family: var(--font-mono);
691
+ font-size: 0.875em;
692
+ background: rgba(255,255,255,0.08);
693
+ border: 1px solid rgba(255,255,255,0.1);
694
+ border-radius: 4px;
695
+ padding: 0.1em 0.4em;
696
+ color: var(--accent-cyan);
697
+ }
698
+
699
+ /* ── Code blocks — full-featured ────────────────────────────────────── */
700
+ .code-block {
701
+ margin: 0.75em 0;
702
+ border: 1px solid var(--glass-border);
703
+ border-radius: 10px;
704
+ overflow: hidden;
705
+ background: rgba(0,0,0,0.45);
706
+ font-family: var(--font-mono);
707
+ }
708
+
709
+ /* Full-width breakout — code gets the whole column regardless of bubble */
710
+ .code-block-full {
711
+ width: 100%;
712
+ max-width: 100%;
713
+ }
714
+
715
+ /* ── Header ── */
716
+ .code-header {
717
+ display: flex;
718
+ align-items: center;
719
+ justify-content: space-between;
720
+ padding: 7px 12px;
721
+ background: rgba(255,255,255,0.04);
722
+ border-bottom: 1px solid var(--glass-border);
723
+ gap: 10px;
724
+ }
725
+
726
+ .code-header-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
727
+ .code-header-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
728
+
729
+ /* Language badge with per-language color */
730
+ .code-lang-badge {
731
+ font-family: var(--font-mono);
732
+ font-size: 10px;
733
+ font-weight: 700;
734
+ letter-spacing: 0.06em;
735
+ text-transform: uppercase;
736
+ color: var(--lang-color, var(--accent-cyan));
737
+ display: flex;
738
+ align-items: center;
739
+ gap: 2px;
740
+ flex-shrink: 0;
741
+ text-shadow: 0 0 8px var(--lang-color, var(--accent-cyan));
742
+ }
743
+
744
+ /* Filename */
745
+ .code-filename {
746
+ font-family: var(--font-mono);
747
+ font-size: 11px;
748
+ color: var(--text-muted);
749
+ background: rgba(255,255,255,0.05);
750
+ border: 1px solid var(--glass-border);
751
+ border-radius: 4px;
752
+ padding: 1px 7px;
753
+ white-space: nowrap;
754
+ overflow: hidden;
755
+ text-overflow: ellipsis;
756
+ max-width: 200px;
757
+ }
758
+
759
+ /* Line count */
760
+ .code-lines-count {
761
+ font-family: var(--font-mono);
762
+ font-size: 9.5px;
763
+ color: var(--text-dim);
764
+ white-space: nowrap;
765
+ }
766
+
767
+ /* Expand button */
768
+ .code-expand-btn {
769
+ font-size: 14px;
770
+ background: transparent;
771
+ border: none;
772
+ color: var(--text-dim);
773
+ cursor: pointer;
774
+ padding: 0 4px;
775
+ line-height: 1;
776
+ transition: color 0.2s;
777
+ }
778
+ .code-expand-btn:hover { color: var(--text); }
779
+
780
+ /* Copy button */
781
+ .code-copy {
782
+ display: flex;
783
+ align-items: center;
784
+ gap: 5px;
785
+ font-family: var(--font-mono);
786
+ font-size: 10px;
787
+ color: var(--text-dim);
788
+ background: transparent;
789
+ border: none;
790
+ cursor: pointer;
791
+ padding: 3px 8px;
792
+ border-radius: 4px;
793
+ transition: color 0.2s, background 0.2s;
794
+ white-space: nowrap;
795
+ }
796
+ .code-copy:hover { color: var(--text); background: rgba(255,255,255,0.06); }
797
+ .code-copy.copied { color: var(--accent-green); }
798
+
799
+ /* ── Code body ── */
800
+ .code-body { overflow: hidden; }
801
+ .code-body-collapsed { max-height: 400px; overflow: hidden; position: relative; }
802
+ .code-body-collapsed::after {
803
+ content: '';
804
+ position: absolute;
805
+ bottom: 0; left: 0; right: 0;
806
+ height: 80px;
807
+ background: linear-gradient(to bottom, transparent, rgba(0,0,0,0.8));
808
+ pointer-events: none;
809
+ }
810
+ .code-expanded .code-body-collapsed { max-height: none; overflow: auto; }
811
+ .code-expanded .code-body-collapsed::after { display: none; }
812
+
813
+ /* Show more button */
814
+ .code-show-more {
815
+ display: block;
816
+ width: 100%;
817
+ padding: 8px;
818
+ background: rgba(255,255,255,0.03);
819
+ border: none;
820
+ border-top: 1px solid var(--glass-border);
821
+ color: var(--text-dim);
822
+ font-family: var(--font-mono);
823
+ font-size: 10px;
824
+ cursor: pointer;
825
+ letter-spacing: 0.06em;
826
+ transition: background 0.2s, color 0.2s;
827
+ text-align: center;
828
+ }
829
+ .code-show-more:hover { background: rgba(255,255,255,0.06); color: var(--text); }
830
+
831
+ /* ── Line numbers ── */
832
+ .code-pre {
833
+ margin: 0;
834
+ padding: 12px 0;
835
+ overflow-x: auto;
836
+ font-size: 12.5px;
837
+ line-height: 1.65;
838
+ }
839
+
840
+ .code-numbered { display: block; }
841
+
842
+ .code-line {
843
+ display: flex;
844
+ min-height: 1.65em;
845
+ }
846
+
847
+ .code-line:hover { background: rgba(255,255,255,0.03); }
848
+
849
+ .line-num {
850
+ display: inline-block;
851
+ min-width: 44px;
852
+ padding: 0 12px 0 14px;
853
+ color: rgba(255,255,255,0.2);
854
+ text-align: right;
855
+ user-select: none;
856
+ border-right: 1px solid rgba(255,255,255,0.06);
857
+ flex-shrink: 0;
858
+ font-size: 11px;
859
+ line-height: inherit;
860
+ }
861
+
862
+ .line-content {
863
+ display: inline-block;
864
+ padding: 0 16px;
865
+ white-space: pre;
866
+ flex: 1;
867
+ }
868
+
869
+ .hljs { background: transparent !important; padding: 0 !important; }
870
+
871
+ /* ── Thinking block ─────────────────────────────────────────────────── */
872
+ .msg-thinking { margin: 4px 0 8px; }
873
+
874
+ .thinking-toggle {
875
+ display: flex;
876
+ align-items: center;
877
+ gap: 7px;
878
+ background: transparent;
879
+ border: none;
880
+ cursor: pointer;
881
+ padding: 4px 0;
882
+ color: var(--text-dim);
883
+ font-size: 11px;
884
+ font-family: var(--font-mono);
885
+ letter-spacing: 0.05em;
886
+ transition: color 0.2s;
887
+ }
888
+ .thinking-toggle:hover { color: var(--text-muted); }
889
+ .thinking-icon { color: var(--accent-purple); }
890
+ .thinking-chevron { font-size: 9px; transition: transform 0.2s; }
891
+
892
+ .thinking-body {
893
+ max-height: 0;
894
+ overflow: hidden;
895
+ transition: max-height 0.35s ease;
896
+ }
897
+ .thinking-body.thinking-open { max-height: 600px; overflow-y: auto; }
898
+
899
+ .thinking-text {
900
+ margin-top: 6px;
901
+ padding: 10px 14px;
902
+ border: 1px dashed rgba(139,92,246,0.25);
903
+ border-radius: 8px;
904
+ background: rgba(139,92,246,0.04);
905
+ font-size: 12px;
906
+ line-height: 1.65;
907
+ color: var(--text-muted);
908
+ white-space: pre-wrap;
909
+ font-family: var(--font-mono);
910
+ }
911
+
912
+ /* ── Tool call card ─────────────────────────────────────────────────── */
913
+ .msg-tool-card {
914
+ margin: 4px 0;
915
+ border: 1px solid var(--glass-border);
916
+ border-radius: 8px;
917
+ overflow: hidden;
918
+ background: rgba(255,255,255,0.02);
919
+ }
920
+
921
+ .tool-header {
922
+ display: flex;
923
+ align-items: center;
924
+ gap: 8px;
925
+ width: 100%;
926
+ padding: 8px 12px;
927
+ background: transparent;
928
+ border: none;
929
+ cursor: pointer;
930
+ text-align: left;
931
+ color: var(--text-muted);
932
+ font-size: 12px;
933
+ transition: background 0.2s;
934
+ }
935
+ .tool-header:hover { background: rgba(255,255,255,0.03); }
936
+ .tool-icon { font-size: 13px; flex-shrink: 0; }
937
+ .tool-name { flex: 1; font-family: var(--font-mono); font-size: 11px; color: var(--text); }
938
+ .tool-chevron { font-size: 9px; color: var(--text-dim); }
939
+
940
+ .tool-body {
941
+ max-height: 0;
942
+ overflow: hidden;
943
+ transition: max-height 0.3s ease;
944
+ border-top: 0 solid var(--glass-border);
945
+ }
946
+ .tool-body.tool-open { max-height: 320px; overflow-y: auto; border-top-width: 1px; }
947
+
948
+ .tool-input {
949
+ margin: 0;
950
+ padding: 10px 14px;
951
+ font-family: var(--font-mono);
952
+ font-size: 11.5px;
953
+ line-height: 1.5;
954
+ color: var(--text-muted);
955
+ white-space: pre-wrap;
956
+ word-break: break-all;
957
+ background: rgba(0,0,0,0.25);
958
+ }
959
+
960
+ /* ── Tool result ────────────────────────────────────────────────────── */
961
+ .msg-tool-result {
962
+ margin: 2px 0 6px;
963
+ border: 1px solid rgba(52,211,153,0.14);
964
+ border-radius: 8px;
965
+ overflow: hidden;
966
+ background: rgba(52,211,153,0.02);
967
+ }
968
+
969
+ .result-header {
970
+ display: flex;
971
+ align-items: center;
972
+ gap: 8px;
973
+ padding: 6px 12px;
974
+ font-size: 11px;
975
+ color: var(--text-dim);
976
+ }
977
+ .result-icon { color: var(--accent-green); font-size: 12px; }
978
+ .result-label { font-family: var(--font-mono); letter-spacing: 0.06em; flex: 1; }
979
+
980
+ .result-expand {
981
+ font-family: var(--font-mono);
982
+ font-size: 9px;
983
+ background: transparent;
984
+ border: 1px solid var(--glass-border);
985
+ border-radius: 4px;
986
+ color: var(--text-dim);
987
+ cursor: pointer;
988
+ padding: 2px 8px;
989
+ transition: color 0.2s;
990
+ }
991
+ .result-expand:hover { color: var(--text); }
992
+
993
+ .result-preview { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; border-top: 0 solid rgba(52,211,153,0.14); }
994
+ .result-open { max-height: 260px; overflow-y: auto; border-top-width: 1px; }
995
+
996
+ .result-text {
997
+ margin: 0;
998
+ padding: 8px 14px;
999
+ font-family: var(--font-mono);
1000
+ font-size: 11.5px;
1001
+ line-height: 1.5;
1002
+ color: var(--text-muted);
1003
+ white-space: pre-wrap;
1004
+ word-break: break-all;
1005
+ background: rgba(0,0,0,0.2);
1006
+ }
1007
+
1008
+ /* ── Message image ──────────────────────────────────────────────────── */
1009
+ .msg-image img {
1010
+ max-width: 100%;
1011
+ border-radius: 8px;
1012
+ border: 1px solid var(--glass-border);
1013
+ margin: 4px 0;
1014
+ }
1015
+
1016
+ /* ── Copy button ────────────────────────────────────────────────────── */
1017
+ .msg-copy-btn {
1018
+ position: absolute;
1019
+ top: 8px;
1020
+ right: 8px;
1021
+ background: rgba(255,255,255,0.06);
1022
+ border: 1px solid var(--glass-border);
1023
+ border-radius: 6px;
1024
+ color: var(--text-dim);
1025
+ cursor: pointer;
1026
+ padding: 5px 6px;
1027
+ opacity: 0;
1028
+ transition: opacity 0.2s, color 0.2s, background 0.2s;
1029
+ display: flex;
1030
+ align-items: center;
1031
+ line-height: 1;
1032
+ }
1033
+ .stream-bubble:hover .msg-copy-btn,
1034
+ .msg-copy-visible { opacity: 1; }
1035
+ .msg-copy-btn:hover { color: var(--text); background: rgba(255,255,255,0.1); }
1036
+ .msg-copy-btn.copied { color: var(--accent-green); }
1037
+
1038
+ /* ── Timestamp ──────────────────────────────────────────────────────── */
1039
+ .msg-timestamp {
1040
+ font-family: var(--font-mono);
1041
+ font-size: 9.5px;
1042
+ color: var(--text-dim);
1043
+ margin-top: 10px;
1044
+ letter-spacing: 0.05em;
1045
+ }
1046
+
1047
+
1048
+ /* ── Task lists ─────────────────────────────────────────────────────── */
1049
+ .msg-text :where(li.task-item) {
1050
+ list-style: none;
1051
+ margin-left: -1.4em;
1052
+ padding-left: 0.2em;
1053
+ display: flex;
1054
+ align-items: baseline;
1055
+ gap: 7px;
1056
+ }
1057
+
1058
+ .task-cb {
1059
+ appearance: none;
1060
+ -webkit-appearance: none;
1061
+ width: 14px;
1062
+ height: 14px;
1063
+ border: 1.5px solid var(--glass-border-strong);
1064
+ border-radius: 3px;
1065
+ background: transparent;
1066
+ flex-shrink: 0;
1067
+ position: relative;
1068
+ top: 2px;
1069
+ cursor: default;
1070
+ }
1071
+
1072
+ .task-cb:checked {
1073
+ background: var(--accent-cyan);
1074
+ border-color: var(--accent-cyan);
1075
+ }
1076
+
1077
+ .task-cb:checked::after {
1078
+ content: '';
1079
+ position: absolute;
1080
+ top: 1px; left: 3px;
1081
+ width: 5px; height: 8px;
1082
+ border: 2px solid #000;
1083
+ border-top: none;
1084
+ border-left: none;
1085
+ transform: rotate(45deg);
1086
+ }
1087
+
1088
+ .task-done > * { opacity: 0.55; }
1089
+ .task-done .task-cb + span,
1090
+ .task-done .task-cb ~ * { text-decoration: line-through; }
1091
+
1092
+ /* ── Table overflow wrapper ──────────────────────────────────────────── */
1093
+ .msg-text :where(table) {
1094
+ display: block;
1095
+ overflow-x: auto;
1096
+ white-space: nowrap;
1097
+ }
1098
+ /* Allow cells to wrap when content isn't too wide */
1099
+ .msg-text :where(th, td) {
1100
+ white-space: normal;
1101
+ min-width: 80px;
1102
+ }
1103
+
1104
+ /* ── Details / Summary (collapsible sections) ─────────────────────────── */
1105
+ .msg-text :where(details) {
1106
+ border: 1px solid var(--glass-border);
1107
+ border-radius: 8px;
1108
+ padding: 0;
1109
+ margin: 0.6em 0;
1110
+ overflow: hidden;
1111
+ background: rgba(255,255,255,0.02);
1112
+ }
1113
+
1114
+ .msg-text :where(summary) {
1115
+ padding: 8px 14px;
1116
+ cursor: pointer;
1117
+ font-weight: 600;
1118
+ font-size: 13px;
1119
+ color: var(--text-muted);
1120
+ list-style: none;
1121
+ display: flex;
1122
+ align-items: center;
1123
+ gap: 8px;
1124
+ user-select: none;
1125
+ transition: background 0.2s;
1126
+ }
1127
+ .msg-text :where(summary):hover { background: rgba(255,255,255,0.03); }
1128
+ .msg-text :where(summary)::before {
1129
+ content: '▸';
1130
+ font-size: 9px;
1131
+ color: var(--accent-cyan);
1132
+ transition: transform 0.2s;
1133
+ }
1134
+ .msg-text :where(details[open] summary)::before {
1135
+ transform: rotate(90deg);
1136
+ }
1137
+ .msg-text :where(details) > *:not(summary) {
1138
+ padding: 0 14px 10px;
1139
+ }
1140
+
1141
+ /* ── Spacing improvements ────────────────────────────────────────────── */
1142
+ .bubble-content + .bubble-content { margin-top: 0.5em; }
1143
+
1144
+ .msg-text :where(h1 + p, h2 + p, h3 + p) { margin-top: 0.4em; }
1145
+ .msg-text :where(p:last-child, ul:last-child, ol:last-child) { margin-bottom: 0; }
1146
+
1147
+ /* Separator after heading when followed by block content */
1148
+ .msg-text :where(h2, h3) {
1149
+ padding-top: 0.3em;
1150
+ }
1151
+
1152
+ /* Better nested list indent */
1153
+ .msg-text :where(ul ul, ol ol, ul ol, ol ul) {
1154
+ margin-top: 0.25em;
1155
+ margin-bottom: 0.25em;
1156
+ padding-left: 1.2em;
1157
+ }
1158
+
1159
+ /* ── Keyboard shortcut styling ───────────────────────────────────────── */
1160
+ .msg-text :where(kbd) {
1161
+ font-family: var(--font-mono);
1162
+ font-size: 0.8em;
1163
+ background: rgba(255,255,255,0.1);
1164
+ border: 1px solid rgba(255,255,255,0.2);
1165
+ border-bottom: 2px solid rgba(255,255,255,0.15);
1166
+ border-radius: 4px;
1167
+ padding: 1px 5px;
1168
+ color: var(--text);
1169
+ }
1170
+
1171
+ /* ── Abbr tooltip ────────────────────────────────────────────────────── */
1172
+ .msg-text :where(abbr[title]) {
1173
+ border-bottom: 1px dotted var(--text-muted);
1174
+ cursor: help;
1175
+ text-decoration: none;
1176
+ }
1177
+
1178
+ /* ── Scrollbar ────────────────────────────────────────────────────── */
1179
+ .response-area::-webkit-scrollbar { display: none; }
1180
+ .response-area { scrollbar-width: none; }
1181
+
1182
+ /* ══════════════════════════════════════════════════════════════════════
1183
+ COMMAND MENU SYSTEM
1184
+ ══════════════════════════════════════════════════════════════════════ */
1185
+
1186
+ /* ── Group accent colours ─────────────────────────────────────────── */
1187
+ :root {
1188
+ --cmd-chat: #00d4ff;
1189
+ --cmd-control: #60a5fa;
1190
+ --cmd-agent: #a78bfa;
1191
+ --cmd-settings: #f59e0b;
1192
+ --cmd-resources: #34d399;
1193
+ }
1194
+
1195
+ /* ── Menu Trigger Button ──────────────────────────────────────────── */
1196
+ .menu-trigger {
1197
+ position: fixed;
1198
+ top: 20px;
1199
+ left: 20px;
1200
+ z-index: 50;
1201
+ width: 38px;
1202
+ height: 38px;
1203
+ display: flex;
1204
+ align-items: center;
1205
+ justify-content: center;
1206
+ background: var(--glass-bg);
1207
+ backdrop-filter: var(--blur);
1208
+ -webkit-backdrop-filter: var(--blur);
1209
+ border: 1px solid var(--glass-border);
1210
+ border-radius: 10px;
1211
+ color: var(--text-muted);
1212
+ cursor: pointer;
1213
+ transition: color 0.2s, border-color 0.2s, box-shadow 0.2s, transform 0.2s;
1214
+ }
1215
+ .menu-trigger:hover {
1216
+ color: var(--accent-cyan);
1217
+ border-color: rgba(0,212,255,0.35);
1218
+ box-shadow: 0 0 12px rgba(0,212,255,0.15);
1219
+ }
1220
+ .menu-trigger:active { transform: scale(0.93); }
1221
+
1222
+ /* Icon swap: grid → close */
1223
+ .menu-icon-close { display: none; }
1224
+ .menu-trigger.menu-open .menu-icon-grid { display: none; }
1225
+ .menu-trigger.menu-open .menu-icon-close { display: block; color: var(--accent-cyan); }
1226
+ .menu-trigger.menu-open {
1227
+ color: var(--accent-cyan);
1228
+ border-color: rgba(0,212,255,0.4);
1229
+ box-shadow: 0 0 16px rgba(0,212,255,0.2);
1230
+ }
1231
+
1232
+ /* ── Full-Screen Overlay ──────────────────────────────────────────── */
1233
+ .cmd-overlay {
1234
+ position: fixed;
1235
+ inset: 0;
1236
+ z-index: 40;
1237
+ display: flex;
1238
+ align-items: center;
1239
+ justify-content: center;
1240
+ /* Hidden state */
1241
+ opacity: 0;
1242
+ pointer-events: none;
1243
+ transform: scale(0.97);
1244
+ transition: opacity 0.28s ease, transform 0.28s ease;
1245
+ }
1246
+ .cmd-overlay.open {
1247
+ opacity: 1;
1248
+ pointer-events: auto;
1249
+ transform: scale(1);
1250
+ }
1251
+
1252
+ /* Dark glass backdrop */
1253
+ .cmd-backdrop {
1254
+ position: absolute;
1255
+ inset: 0;
1256
+ background: rgba(6, 8, 14, 0.9);
1257
+ backdrop-filter: blur(24px);
1258
+ -webkit-backdrop-filter: blur(24px);
1259
+ }
1260
+
1261
+ /* Shell (content on top of backdrop) */
1262
+ .cmd-shell {
1263
+ position: relative;
1264
+ z-index: 1;
1265
+ width: 100%;
1266
+ max-width: 1080px;
1267
+ padding: 0 32px;
1268
+ display: flex;
1269
+ flex-direction: column;
1270
+ gap: 24px;
1271
+ }
1272
+
1273
+ /* ── Header Bar ───────────────────────────────────────────────────── */
1274
+ .cmd-header {
1275
+ display: flex;
1276
+ align-items: center;
1277
+ justify-content: space-between;
1278
+ padding-bottom: 16px;
1279
+ border-bottom: 1px solid var(--glass-border);
1280
+ }
1281
+ .cmd-brand {
1282
+ display: flex;
1283
+ align-items: center;
1284
+ gap: 10px;
1285
+ }
1286
+ .cmd-brand-glyph {
1287
+ font-size: 22px;
1288
+ color: var(--accent-cyan);
1289
+ text-shadow: 0 0 12px var(--accent-cyan);
1290
+ animation: aso-breathe 3s ease-in-out infinite;
1291
+ }
1292
+ .cmd-brand-name {
1293
+ font-family: var(--font-mono);
1294
+ font-size: 18px;
1295
+ font-weight: 700;
1296
+ color: var(--text);
1297
+ letter-spacing: 0.15em;
1298
+ }
1299
+ .cmd-brand-sep {
1300
+ font-size: 16px;
1301
+ color: var(--text-dim);
1302
+ margin: 0 2px;
1303
+ }
1304
+ .cmd-brand-sub {
1305
+ font-family: var(--font-mono);
1306
+ font-size: 11px;
1307
+ color: var(--text-dim);
1308
+ letter-spacing: 0.22em;
1309
+ padding-top: 2px;
1310
+ }
1311
+ .cmd-esc-hint {
1312
+ font-size: 11px;
1313
+ color: var(--text-dim);
1314
+ display: flex;
1315
+ align-items: center;
1316
+ gap: 5px;
1317
+ }
1318
+ .cmd-kbd {
1319
+ font-family: var(--font-mono);
1320
+ font-size: 10px;
1321
+ padding: 2px 6px;
1322
+ background: rgba(255,255,255,0.07);
1323
+ border: 1px solid rgba(255,255,255,0.12);
1324
+ border-radius: 4px;
1325
+ color: var(--text-muted);
1326
+ }
1327
+
1328
+ /* ── Command Grid ─────────────────────────────────────────────────── */
1329
+ .cmd-grid {
1330
+ display: grid;
1331
+ grid-template-columns: 200px 1fr 200px;
1332
+ grid-template-rows: auto auto;
1333
+ gap: 14px;
1334
+ width: 100%;
1335
+ }
1336
+
1337
+ .cmd-group--chat { grid-column: 1; grid-row: 1 / 3; }
1338
+ .cmd-group--control { grid-column: 2; grid-row: 1; }
1339
+ .cmd-group--agent { grid-column: 3; grid-row: 1; }
1340
+ .cmd-group--settings { grid-column: 2; grid-row: 2; }
1341
+ .cmd-group--resources { grid-column: 3; grid-row: 2; }
1342
+
1343
+ /* ── Group Card ───────────────────────────────────────────────────── */
1344
+ .cmd-group {
1345
+ background: var(--glass-bg);
1346
+ border: 1px solid var(--glass-border);
1347
+ border-radius: 16px;
1348
+ padding: 18px;
1349
+ display: flex;
1350
+ flex-direction: column;
1351
+ gap: 14px;
1352
+ /* Stagger-reveal when overlay opens */
1353
+ opacity: 0;
1354
+ transform: translateY(14px);
1355
+ transition: border-color 0.25s, box-shadow 0.25s;
1356
+ }
1357
+ .cmd-overlay.open .cmd-group {
1358
+ animation: cmd-card-in 0.32s ease forwards;
1359
+ }
1360
+ .cmd-overlay.open .cmd-group:nth-child(1) { animation-delay: 30ms; }
1361
+ .cmd-overlay.open .cmd-group:nth-child(2) { animation-delay: 80ms; }
1362
+ .cmd-overlay.open .cmd-group:nth-child(3) { animation-delay: 130ms; }
1363
+ .cmd-overlay.open .cmd-group:nth-child(4) { animation-delay: 180ms; }
1364
+ .cmd-overlay.open .cmd-group:nth-child(5) { animation-delay: 230ms; }
1365
+
1366
+ @keyframes cmd-card-in {
1367
+ from { opacity: 0; transform: translateY(14px); }
1368
+ to { opacity: 1; transform: translateY(0); }
1369
+ }
1370
+
1371
+ /* Per-group accent borders & hover glow */
1372
+ .cmd-group--chat:hover { border-color: rgba(0,212,255,0.35); box-shadow: 0 0 20px rgba(0,212,255,0.06); }
1373
+ .cmd-group--control:hover { border-color: rgba(96,165,250,0.35); box-shadow: 0 0 20px rgba(96,165,250,0.06); }
1374
+ .cmd-group--agent:hover { border-color: rgba(167,139,250,0.35); box-shadow: 0 0 20px rgba(167,139,250,0.06); }
1375
+ .cmd-group--settings:hover { border-color: rgba(245,158,11,0.35); box-shadow: 0 0 20px rgba(245,158,11,0.06); }
1376
+ .cmd-group--resources:hover { border-color: rgba(52,211,153,0.35); box-shadow: 0 0 20px rgba(52,211,153,0.06); }
1377
+
1378
+ /* ── Group Header ─────────────────────────────────────────────────── */
1379
+ .cmd-group-hd {
1380
+ display: flex;
1381
+ align-items: center;
1382
+ gap: 9px;
1383
+ padding-bottom: 10px;
1384
+ border-bottom: 1px solid var(--glass-border);
1385
+ }
1386
+ .cmd-group-svg {
1387
+ width: 16px;
1388
+ height: 16px;
1389
+ flex-shrink: 0;
1390
+ }
1391
+ .cmd-group-label {
1392
+ font-family: var(--font-mono);
1393
+ font-size: 10px;
1394
+ font-weight: 700;
1395
+ letter-spacing: 0.2em;
1396
+ }
1397
+
1398
+ /* Accent colours on group labels and icons */
1399
+ .cmd-group--chat .cmd-group-hd { color: var(--cmd-chat); }
1400
+ .cmd-group--control .cmd-group-hd { color: var(--cmd-control); }
1401
+ .cmd-group--agent .cmd-group-hd { color: var(--cmd-agent); }
1402
+ .cmd-group--settings .cmd-group-hd { color: var(--cmd-settings); }
1403
+ .cmd-group--resources .cmd-group-hd { color: var(--cmd-resources); }
1404
+
1405
+ /* ── Items List ───────────────────────────────────────────────────── */
1406
+ .cmd-items {
1407
+ display: flex;
1408
+ flex-direction: column;
1409
+ gap: 6px;
1410
+ flex: 1;
1411
+ }
1412
+
1413
+ /* 3-column sub-grid for CONTROL (6 items) */
1414
+ .cmd-items--grid {
1415
+ display: grid;
1416
+ grid-template-columns: 1fr 1fr 1fr;
1417
+ gap: 8px;
1418
+ }
1419
+
1420
+ /* ── Individual Item ──────────────────────────────────────────────── */
1421
+ .cmd-item {
1422
+ display: flex;
1423
+ align-items: center;
1424
+ gap: 10px;
1425
+ padding: 10px 12px;
1426
+ border-radius: 10px;
1427
+ border: 1px solid transparent;
1428
+ background: rgba(255,255,255,0.025);
1429
+ text-decoration: none;
1430
+ cursor: pointer;
1431
+ transition: background 0.18s, border-color 0.18s, transform 0.15s;
1432
+ }
1433
+ .cmd-item:hover {
1434
+ background: rgba(255,255,255,0.06);
1435
+ transform: translateY(-1px);
1436
+ }
1437
+ /* Per-group item hover accent */
1438
+ .cmd-group--chat .cmd-item:hover { border-color: rgba(0,212,255,0.3); }
1439
+ .cmd-group--control .cmd-item:hover { border-color: rgba(96,165,250,0.3); }
1440
+ .cmd-group--agent .cmd-item:hover { border-color: rgba(167,139,250,0.3); }
1441
+ .cmd-group--settings .cmd-item:hover { border-color: rgba(245,158,11,0.3); }
1442
+ .cmd-group--resources .cmd-item:hover { border-color: rgba(52,211,153,0.3); }
1443
+
1444
+ .cmd-item-icon {
1445
+ font-size: 16px;
1446
+ flex-shrink: 0;
1447
+ width: 20px;
1448
+ text-align: center;
1449
+ opacity: 0.7;
1450
+ }
1451
+ .cmd-group--chat .cmd-item-icon { color: var(--cmd-chat); }
1452
+ .cmd-group--control .cmd-item-icon { color: var(--cmd-control); }
1453
+ .cmd-group--agent .cmd-item-icon { color: var(--cmd-agent); }
1454
+ .cmd-group--settings .cmd-item-icon { color: var(--cmd-settings); }
1455
+ .cmd-group--resources .cmd-item-icon { color: var(--cmd-resources); }
1456
+
1457
+ .cmd-item-body {
1458
+ display: flex;
1459
+ flex-direction: column;
1460
+ gap: 2px;
1461
+ min-width: 0;
1462
+ flex: 1;
1463
+ }
1464
+ .cmd-item-name {
1465
+ font-family: var(--font-mono);
1466
+ font-size: 12px;
1467
+ font-weight: 600;
1468
+ color: var(--text);
1469
+ white-space: nowrap;
1470
+ overflow: hidden;
1471
+ text-overflow: ellipsis;
1472
+ }
1473
+ .cmd-item-desc {
1474
+ font-size: 10px;
1475
+ color: var(--text-dim);
1476
+ white-space: nowrap;
1477
+ overflow: hidden;
1478
+ text-overflow: ellipsis;
1479
+ }
1480
+ .cmd-item-badge {
1481
+ font-family: var(--font-mono);
1482
+ font-size: 8px;
1483
+ font-weight: 700;
1484
+ letter-spacing: 0.1em;
1485
+ padding: 2px 6px;
1486
+ border-radius: 99px;
1487
+ background: rgba(0,212,255,0.12);
1488
+ color: var(--accent-cyan);
1489
+ border: 1px solid rgba(0,212,255,0.25);
1490
+ flex-shrink: 0;
1491
+ }
1492
+
1493
+ /* ── History button ─────────────────────────────────────────────────── */
1494
+ .history-btn {
1495
+ display: flex; align-items: center; gap: 5px;
1496
+ padding: 5px 11px;
1497
+ height: 28px;
1498
+ background: rgba(139,92,246,0.08);
1499
+ border: 1px solid rgba(139,92,246,0.2);
1500
+ border-radius: 8px;
1501
+ color: rgba(139,92,246,0.85);
1502
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
1503
+ cursor: pointer; transition: all 0.2s; white-space: nowrap; flex-shrink: 0;
1504
+ }
1505
+ .history-btn:hover {
1506
+ background: rgba(139,92,246,0.16);
1507
+ border-color: rgba(139,92,246,0.4);
1508
+ box-shadow: 0 0 12px rgba(139,92,246,0.12);
1509
+ }
1510
+ .history-btn-label { font-size: 10px; }
1511
+
1512
+ /* ── History overlay + drawer ───────────────────────────────────────── */
1513
+ .history-overlay {
1514
+ position: fixed; inset: 0; z-index: 1100;
1515
+ background: rgba(0,0,0,0.55);
1516
+ backdrop-filter: blur(4px);
1517
+ opacity: 0; pointer-events: none;
1518
+ transition: opacity 0.25s ease;
1519
+ }
1520
+ .history-overlay.open { opacity: 1; pointer-events: auto; }
1521
+
1522
+ .history-drawer {
1523
+ position: fixed; top: 0; right: -440px; height: 100vh; width: 420px;
1524
+ z-index: 1101;
1525
+ background: rgba(10,12,20,0.97);
1526
+ border-left: 1px solid rgba(139,92,246,0.25);
1527
+ box-shadow: -20px 0 60px rgba(0,0,0,0.6);
1528
+ display: flex; flex-direction: column;
1529
+ transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1530
+ }
1531
+ .history-drawer.open { right: 0; }
1532
+
1533
+ .history-drawer-header {
1534
+ display: flex; align-items: center; justify-content: space-between;
1535
+ padding: 16px 18px 14px;
1536
+ border-bottom: 1px solid rgba(139,92,246,0.15);
1537
+ flex-shrink: 0;
1538
+ }
1539
+ .history-drawer-title {
1540
+ display: flex; align-items: center; gap: 7px;
1541
+ font-family: var(--font-mono); font-size: 11px; font-weight: 700;
1542
+ letter-spacing: 0.14em; color: rgba(139,92,246,0.9);
1543
+ }
1544
+ .history-close-btn {
1545
+ background: none; border: none; color: var(--text-dim);
1546
+ font-size: 13px; cursor: pointer; padding: 4px 6px; border-radius: 4px;
1547
+ transition: color 0.15s, background 0.15s;
1548
+ }
1549
+ .history-close-btn:hover { color: var(--text-primary); background: rgba(255,255,255,0.06); }
1550
+
1551
+ .history-drawer-body {
1552
+ flex: 1; overflow-y: auto; padding: 12px 0;
1553
+ }
1554
+ .history-drawer-body::-webkit-scrollbar { width: 4px; }
1555
+ .history-drawer-body::-webkit-scrollbar-track { background: transparent; }
1556
+ .history-drawer-body::-webkit-scrollbar-thumb { background: rgba(139,92,246,0.3); border-radius: 2px; }
1557
+
1558
+ .history-loading {
1559
+ padding: 24px 18px;
1560
+ color: var(--text-dim);
1561
+ font-size: 12px; font-family: var(--font-mono);
1562
+ text-align: center;
1563
+ }
1564
+
1565
+ /* ── Session list items ─────────────────────────────────────────────── */
1566
+ .history-session-item {
1567
+ padding: 12px 18px;
1568
+ cursor: pointer;
1569
+ border-bottom: 1px solid rgba(255,255,255,0.04);
1570
+ transition: background 0.15s;
1571
+ position: relative;
1572
+ }
1573
+ .history-session-item:hover { background: rgba(139,92,246,0.07); }
1574
+ .history-session-item:last-child { border-bottom: none; }
1575
+
1576
+ .history-session-meta {
1577
+ display: flex; align-items: center; justify-content: space-between;
1578
+ margin-bottom: 5px;
1579
+ }
1580
+ .history-session-date {
1581
+ font-family: var(--font-mono); font-size: 10px; font-weight: 600;
1582
+ color: rgba(139,92,246,0.8); letter-spacing: 0.06em;
1583
+ }
1584
+ .history-session-count {
1585
+ font-family: var(--font-mono); font-size: 9px;
1586
+ color: var(--text-dim); letter-spacing: 0.05em;
1587
+ }
1588
+ .history-session-preview {
1589
+ font-size: 12px; color: var(--text-secondary);
1590
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
1591
+ line-height: 1.4;
1592
+ }
1593
+ .history-session-badge {
1594
+ display: inline-block; margin-bottom: 4px;
1595
+ font-family: var(--font-mono); font-size: 9px; font-weight: 700;
1596
+ letter-spacing: 0.1em; padding: 2px 6px; border-radius: 99px;
1597
+ }
1598
+ .history-session-badge.live {
1599
+ background: rgba(0,212,255,0.12); color: var(--accent-cyan);
1600
+ border: 1px solid rgba(0,212,255,0.25);
1601
+ }
1602
+ .history-session-badge.archived {
1603
+ background: rgba(139,92,246,0.1); color: rgba(139,92,246,0.7);
1604
+ border: 1px solid rgba(139,92,246,0.2);
1605
+ }
1606
+
1607
+ /* ── Archive viewer banner ──────────────────────────────────────────── */
1608
+ .archive-banner {
1609
+ display: flex; align-items: center; justify-content: space-between;
1610
+ padding: 10px 14px; margin: 0 0 8px;
1611
+ background: rgba(139,92,246,0.1);
1612
+ border-bottom: 1px solid rgba(139,92,246,0.2);
1613
+ flex-shrink: 0;
1614
+ }
1615
+ .archive-banner-label {
1616
+ font-family: var(--font-mono); font-size: 10px;
1617
+ color: rgba(139,92,246,0.8); letter-spacing: 0.08em;
1618
+ }
1619
+ .archive-banner-back {
1620
+ font-family: var(--font-mono); font-size: 10px; font-weight: 600;
1621
+ color: rgba(139,92,246,0.9); cursor: pointer;
1622
+ background: none; border: none; padding: 3px 8px;
1623
+ border: 1px solid rgba(139,92,246,0.3); border-radius: 6px;
1624
+ transition: all 0.15s;
1625
+ }
1626
+ .archive-banner-back:hover { background: rgba(139,92,246,0.15); }
1627
+
1628
+ .history-transcript {
1629
+ flex: 1; overflow-y: auto; padding: 8px 12px;
1630
+ }
1631
+ .history-transcript::-webkit-scrollbar { width: 4px; }
1632
+ .history-transcript::-webkit-scrollbar-thumb { background: rgba(139,92,246,0.3); border-radius: 2px; }
1633
+
1634
+ .history-msg {
1635
+ margin-bottom: 12px; font-size: 12.5px; line-height: 1.5;
1636
+ }
1637
+ .history-msg-role {
1638
+ font-family: var(--font-mono); font-size: 9px; font-weight: 700;
1639
+ letter-spacing: 0.1em; margin-bottom: 3px;
1640
+ }
1641
+ .history-msg-role.user { color: var(--accent-cyan); }
1642
+ .history-msg-role.assistant { color: rgba(139,92,246,0.8); }
1643
+ .history-msg-text {
1644
+ color: var(--text-secondary); padding: 6px 10px;
1645
+ background: rgba(255,255,255,0.025);
1646
+ border-radius: 6px; border-left: 2px solid rgba(255,255,255,0.08);
1647
+ white-space: pre-wrap; word-break: break-word;
1648
+ }
1649
+ .history-msg.assistant .history-msg-text {
1650
+ border-left-color: rgba(139,92,246,0.3);
1651
+ }
1652
+ .history-msg.user .history-msg-text {
1653
+ border-left-color: rgba(0,212,255,0.25);
1654
+ }
1655
+
1656
+ .history-empty {
1657
+ padding: 32px 18px; text-align: center;
1658
+ color: var(--text-dim); font-size: 12px; font-family: var(--font-mono);
1659
+ }
1660
+
1661
+ /* ── Archive toast ──────────────────────────────────────────────────── */
1662
+ .session-archive-toast {
1663
+ position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%) translateY(20px);
1664
+ z-index: 1200;
1665
+ display: flex; align-items: center; gap: 7px;
1666
+ padding: 8px 16px;
1667
+ background: rgba(15,17,28,0.95);
1668
+ border: 1px solid rgba(139,92,246,0.35);
1669
+ border-radius: 99px;
1670
+ font-size: 11.5px; font-family: var(--font-mono); color: var(--text-secondary);
1671
+ box-shadow: 0 4px 24px rgba(0,0,0,0.5), 0 0 20px rgba(139,92,246,0.08);
1672
+ opacity: 0; pointer-events: none;
1673
+ transition: opacity 0.25s ease, transform 0.25s ease;
1674
+ white-space: nowrap;
1675
+ }
1676
+ .session-archive-toast.show {
1677
+ opacity: 1; pointer-events: auto; transform: translateX(-50%) translateY(0);
1678
+ }
1679
+ #session-archive-link {
1680
+ color: rgba(139,92,246,0.9); cursor: pointer; font-weight: 600;
1681
+ text-decoration: underline; text-underline-offset: 2px;
1682
+ }
1683
+ #session-archive-link:hover { color: rgba(139,92,246,1); }
1684
+
1685
+ /* ── Queue button ───────────────────────────────────────────────────── */
1686
+ .queue-btn {
1687
+ display: none; /* hidden until streaming starts */
1688
+ align-items: center;
1689
+ gap: 5px;
1690
+ padding: 0 11px;
1691
+ height: 28px;
1692
+ background: rgba(0,212,255,0.08);
1693
+ border: 1px solid rgba(0,212,255,0.2);
1694
+ border-radius: 8px;
1695
+ color: rgba(0,212,255,0.8);
1696
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
1697
+ cursor: pointer; flex-shrink: 0;
1698
+ transition: background 0.2s, border-color 0.2s, box-shadow 0.2s;
1699
+ white-space: nowrap;
1700
+ }
1701
+ .queue-btn.visible { display: flex; }
1702
+ .queue-btn:hover {
1703
+ background: rgba(0,212,255,0.15);
1704
+ border-color: rgba(0,212,255,0.4);
1705
+ box-shadow: 0 0 12px rgba(0,212,255,0.12);
1706
+ }
1707
+
1708
+ /* Active state — item is queued */
1709
+ .queue-btn.has-queue {
1710
+ background: rgba(0,212,255,0.14);
1711
+ border-color: rgba(0,212,255,0.45);
1712
+ color: var(--accent-cyan);
1713
+ box-shadow: 0 0 14px rgba(0,212,255,0.1);
1714
+ }
1715
+
1716
+ .queue-cancel-x {
1717
+ display: none;
1718
+ margin-left: 2px;
1719
+ font-size: 10px;
1720
+ opacity: 0.6;
1721
+ line-height: 1;
1722
+ padding: 1px 3px;
1723
+ border-radius: 3px;
1724
+ transition: opacity 0.15s, background 0.15s;
1725
+ }
1726
+ .queue-btn.has-queue .queue-cancel-x { display: inline; }
1727
+ .queue-cancel-x:hover { opacity: 1; background: rgba(255,255,255,0.1); }
1728
+
1729
+ /* ── Stop button ────────────────────────────────────────────────────── */
1730
+ .stop-btn {
1731
+ display: none; /* hidden until streaming starts */
1732
+ align-items: center;
1733
+ gap: 5px;
1734
+ padding: 0 11px;
1735
+ height: 28px;
1736
+ background: rgba(239,68,68,0.08);
1737
+ border: 1px solid rgba(239,68,68,0.22);
1738
+ border-radius: 8px;
1739
+ color: rgba(239,68,68,0.85);
1740
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
1741
+ cursor: pointer; flex-shrink: 0;
1742
+ transition: background 0.2s, border-color 0.2s, box-shadow 0.2s;
1743
+ white-space: nowrap;
1744
+ }
1745
+ .stop-btn.visible { display: flex; }
1746
+ .stop-btn:hover {
1747
+ background: rgba(239,68,68,0.18);
1748
+ border-color: rgba(239,68,68,0.5);
1749
+ box-shadow: 0 0 14px rgba(239,68,68,0.14);
1750
+ color: rgba(239,68,68,1);
1751
+ }
1752
+ .stop-btn-label { font-size: 10px; }
1753
+
1754
+ /* ── Page Navigation Overlay ────────────────────────────────────────── */
1755
+ .page-overlay {
1756
+ position: fixed;
1757
+ inset: 0;
1758
+ z-index: 1050;
1759
+ display: flex;
1760
+ flex-direction: column;
1761
+ background: rgba(8, 10, 18, 0.98);
1762
+ backdrop-filter: blur(24px);
1763
+ opacity: 0;
1764
+ pointer-events: none;
1765
+ transform: translateY(12px);
1766
+ transition: opacity 0.22s ease, transform 0.22s ease;
1767
+ }
1768
+ .page-overlay.open {
1769
+ opacity: 1;
1770
+ pointer-events: auto;
1771
+ transform: translateY(0);
1772
+ }
1773
+
1774
+ .page-overlay-header {
1775
+ display: flex;
1776
+ align-items: center;
1777
+ gap: 12px;
1778
+ padding: 10px 16px;
1779
+ border-bottom: 1px solid rgba(139,92,246,0.18);
1780
+ background: rgba(10,12,20,0.95);
1781
+ flex-shrink: 0;
1782
+ height: 46px;
1783
+ }
1784
+
1785
+ .page-back-btn {
1786
+ display: flex; align-items: center; gap: 6px;
1787
+ padding: 5px 12px; height: 28px;
1788
+ background: rgba(139,92,246,0.1);
1789
+ border: 1px solid rgba(139,92,246,0.25);
1790
+ border-radius: 8px;
1791
+ color: rgba(139,92,246,0.9);
1792
+ font-size: 11px; font-family: var(--font-mono); font-weight: 600; letter-spacing: 0.07em;
1793
+ cursor: pointer; white-space: nowrap; flex-shrink: 0;
1794
+ transition: all 0.15s;
1795
+ }
1796
+ .page-back-btn:hover {
1797
+ background: rgba(139,92,246,0.2);
1798
+ border-color: rgba(139,92,246,0.45);
1799
+ }
1800
+
1801
+ .page-overlay-title {
1802
+ flex: 1;
1803
+ font-family: var(--font-mono);
1804
+ font-size: 11px; font-weight: 700; letter-spacing: 0.14em;
1805
+ color: rgba(255,255,255,0.6);
1806
+ text-align: center;
1807
+ }
1808
+
1809
+ .page-popout-btn {
1810
+ display: flex; align-items: center; gap: 5px;
1811
+ padding: 5px 11px; height: 28px;
1812
+ background: rgba(0,212,255,0.06);
1813
+ border: 1px solid rgba(0,212,255,0.15);
1814
+ border-radius: 8px;
1815
+ color: rgba(0,212,255,0.6);
1816
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.07em;
1817
+ cursor: pointer; text-decoration: none; flex-shrink: 0;
1818
+ transition: all 0.15s;
1819
+ }
1820
+ .page-popout-btn:hover {
1821
+ background: rgba(0,212,255,0.12);
1822
+ border-color: rgba(0,212,255,0.35);
1823
+ color: rgba(0,212,255,0.9);
1824
+ }
1825
+
1826
+ .page-overlay-frame {
1827
+ flex: 1;
1828
+ border: none;
1829
+ width: 100%;
1830
+ background: transparent;
1831
+ }
1832
+
1833
+ /* ══════════════════════════════════════════════════════════════════════════
1834
+ CONNECTIONS PANEL
1835
+ ══════════════════════════════════════════════════════════════════════════ */
1836
+
1837
+ .connections-panel {
1838
+ display: flex;
1839
+ flex-direction: column;
1840
+ gap: 8px;
1841
+ }
1842
+
1843
+ .conn-btn {
1844
+ position: relative;
1845
+ display: flex;
1846
+ align-items: center;
1847
+ gap: 12px;
1848
+ width: 100%;
1849
+ padding: 10px 12px;
1850
+ background: rgba(255,255,255,0.02);
1851
+ border: 1px solid rgba(255,255,255,0.06);
1852
+ border-radius: 10px;
1853
+ cursor: pointer;
1854
+ transition: all 0.25s ease;
1855
+ text-align: left;
1856
+ color: var(--text);
1857
+ font-family: inherit;
1858
+ }
1859
+ .conn-btn:hover {
1860
+ background: rgba(255,255,255,0.05);
1861
+ border-color: rgba(255,255,255,0.12);
1862
+ transform: translateX(2px);
1863
+ }
1864
+ .conn-btn:active {
1865
+ transform: translateX(2px) scale(0.99);
1866
+ }
1867
+
1868
+ .conn-btn[data-state="connected"] {
1869
+ border-color: rgba(52, 211, 153, 0.25);
1870
+ background: rgba(52, 211, 153, 0.04);
1871
+ }
1872
+ .conn-btn[data-state="connected"]:hover {
1873
+ border-color: rgba(52, 211, 153, 0.4);
1874
+ background: rgba(52, 211, 153, 0.08);
1875
+ }
1876
+ .conn-btn[data-state="error"] {
1877
+ border-color: rgba(248, 113, 113, 0.25);
1878
+ background: rgba(248, 113, 113, 0.04);
1879
+ }
1880
+ .conn-btn[data-state="pending"] {
1881
+ border-color: rgba(251, 191, 36, 0.25);
1882
+ background: rgba(251, 191, 36, 0.04);
1883
+ }
1884
+
1885
+ .conn-icon {
1886
+ flex-shrink: 0;
1887
+ width: 32px;
1888
+ height: 32px;
1889
+ border-radius: 8px;
1890
+ display: flex;
1891
+ align-items: center;
1892
+ justify-content: center;
1893
+ transition: all 0.25s ease;
1894
+ }
1895
+ .conn-icon svg {
1896
+ width: 18px;
1897
+ height: 18px;
1898
+ }
1899
+
1900
+ .conn-icon-slack {
1901
+ background: linear-gradient(135deg, rgba(74, 21, 75, 0.3), rgba(54, 197, 171, 0.2));
1902
+ border: 1px solid rgba(224, 30, 90, 0.2);
1903
+ color: #E01E5A;
1904
+ }
1905
+ .conn-btn[data-state="connected"] .conn-icon-slack {
1906
+ box-shadow: 0 0 12px rgba(224, 30, 90, 0.2);
1907
+ }
1908
+
1909
+ .conn-icon-email {
1910
+ background: linear-gradient(135deg, rgba(96, 165, 250, 0.2), rgba(139, 92, 246, 0.2));
1911
+ border: 1px solid rgba(96, 165, 250, 0.2);
1912
+ color: var(--accent-blue);
1913
+ }
1914
+ .conn-btn[data-state="connected"] .conn-icon-email {
1915
+ box-shadow: 0 0 12px rgba(96, 165, 250, 0.2);
1916
+ }
1917
+
1918
+ .conn-icon-teams {
1919
+ background: linear-gradient(135deg, rgba(98, 100, 167, 0.3), rgba(139, 92, 246, 0.2));
1920
+ border: 1px solid rgba(98, 100, 167, 0.25);
1921
+ color: #6264A7;
1922
+ }
1923
+ .conn-btn[data-state="connected"] .conn-icon-teams {
1924
+ box-shadow: 0 0 12px rgba(98, 100, 167, 0.2);
1925
+ }
1926
+
1927
+ .conn-info {
1928
+ flex: 1;
1929
+ min-width: 0;
1930
+ display: flex;
1931
+ flex-direction: column;
1932
+ gap: 2px;
1933
+ }
1934
+ .conn-name {
1935
+ font-size: 12px;
1936
+ font-weight: 600;
1937
+ color: var(--text);
1938
+ letter-spacing: 0.02em;
1939
+ }
1940
+ .conn-btn-status {
1941
+ font-size: 10px;
1942
+ font-family: var(--font-mono);
1943
+ font-weight: 500;
1944
+ color: var(--text-muted);
1945
+ letter-spacing: 0.03em;
1946
+ }
1947
+ .conn-btn[data-state="connected"] .conn-btn-status {
1948
+ color: var(--accent-green);
1949
+ }
1950
+ .conn-btn[data-state="error"] .conn-btn-status {
1951
+ color: #f87171;
1952
+ }
1953
+ .conn-btn[data-state="pending"] .conn-btn-status {
1954
+ color: #fbbf24;
1955
+ }
1956
+
1957
+ .conn-state {
1958
+ flex-shrink: 0;
1959
+ width: 24px;
1960
+ display: flex;
1961
+ align-items: center;
1962
+ justify-content: center;
1963
+ }
1964
+ .conn-state .conn-dot {
1965
+ width: 8px;
1966
+ height: 8px;
1967
+ border-radius: 50%;
1968
+ background: var(--text-dim);
1969
+ transition: all 0.3s ease;
1970
+ }
1971
+ .conn-btn[data-state="connected"] .conn-state .conn-dot {
1972
+ background: var(--accent-green);
1973
+ box-shadow: 0 0 8px rgba(52, 211, 153, 0.5);
1974
+ animation: conn-pulse 2s ease-in-out infinite;
1975
+ }
1976
+ .conn-btn[data-state="error"] .conn-state .conn-dot {
1977
+ background: #f87171;
1978
+ box-shadow: 0 0 8px rgba(248, 113, 113, 0.4);
1979
+ }
1980
+ .conn-btn[data-state="pending"] .conn-state .conn-dot {
1981
+ background: #fbbf24;
1982
+ animation: conn-blink 1s ease-in-out infinite;
1983
+ }
1984
+
1985
+ @keyframes conn-pulse {
1986
+ 0%, 100% { opacity: 1; transform: scale(1); }
1987
+ 50% { opacity: 0.7; transform: scale(0.9); }
1988
+ }
1989
+ @keyframes conn-blink {
1990
+ 0%, 100% { opacity: 1; }
1991
+ 50% { opacity: 0.4; }
1992
+ }
1993
+
1994
+ .conn-notif {
1995
+ position: absolute;
1996
+ top: -4px;
1997
+ right: -4px;
1998
+ min-width: 18px;
1999
+ height: 18px;
2000
+ padding: 0 5px;
2001
+ background: linear-gradient(135deg, #f43f5e, #ec4899);
2002
+ border-radius: 9px;
2003
+ font-size: 10px;
2004
+ font-weight: 700;
2005
+ color: white;
2006
+ display: none;
2007
+ align-items: center;
2008
+ justify-content: center;
2009
+ box-shadow: 0 2px 8px rgba(244, 63, 94, 0.4);
2010
+ animation: notif-bounce 0.4s ease;
2011
+ }
2012
+ .conn-notif:not(:empty) {
2013
+ display: flex;
2014
+ }
2015
+ @keyframes notif-bounce {
2016
+ 0% { transform: scale(0); }
2017
+ 50% { transform: scale(1.2); }
2018
+ 100% { transform: scale(1); }
2019
+ }
2020
+
2021
+ /* ── Connection Modal ────────────────────────────────────────────────── */
2022
+ .conn-modal-overlay {
2023
+ position: fixed;
2024
+ inset: 0;
2025
+ z-index: 9000;
2026
+ display: flex;
2027
+ align-items: center;
2028
+ justify-content: center;
2029
+ background: rgba(0, 0, 0, 0.7);
2030
+ backdrop-filter: blur(8px);
2031
+ opacity: 0;
2032
+ visibility: hidden;
2033
+ transition: opacity 0.25s ease, visibility 0.25s ease;
2034
+ }
2035
+ .conn-modal-overlay.open {
2036
+ opacity: 1;
2037
+ visibility: visible;
2038
+ }
2039
+
2040
+ .conn-modal {
2041
+ position: relative;
2042
+ width: 90%;
2043
+ max-width: 420px;
2044
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
2045
+ border: 1px solid rgba(255, 255, 255, 0.1);
2046
+ border-radius: 16px;
2047
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
2048
+ transform: scale(0.95) translateY(10px);
2049
+ transition: transform 0.25s ease;
2050
+ overflow: hidden;
2051
+ }
2052
+ .conn-modal-overlay.open .conn-modal {
2053
+ transform: scale(1) translateY(0);
2054
+ }
2055
+
2056
+ .conn-modal-header {
2057
+ display: flex;
2058
+ align-items: center;
2059
+ gap: 14px;
2060
+ padding: 20px 20px 16px;
2061
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2062
+ }
2063
+ .conn-modal-icon {
2064
+ width: 44px;
2065
+ height: 44px;
2066
+ border-radius: 12px;
2067
+ display: flex;
2068
+ align-items: center;
2069
+ justify-content: center;
2070
+ }
2071
+ .conn-modal-icon svg {
2072
+ width: 24px;
2073
+ height: 24px;
2074
+ }
2075
+ .conn-modal-icon.slack {
2076
+ background: linear-gradient(135deg, rgba(74, 21, 75, 0.4), rgba(54, 197, 171, 0.3));
2077
+ border: 1px solid rgba(224, 30, 90, 0.3);
2078
+ color: #E01E5A;
2079
+ }
2080
+ .conn-modal-icon.email {
2081
+ background: linear-gradient(135deg, rgba(96, 165, 250, 0.3), rgba(139, 92, 246, 0.3));
2082
+ border: 1px solid rgba(96, 165, 250, 0.3);
2083
+ color: var(--accent-blue);
2084
+ }
2085
+ .conn-modal-icon.msteams {
2086
+ background: linear-gradient(135deg, rgba(98, 100, 167, 0.4), rgba(139, 92, 246, 0.3));
2087
+ border: 1px solid rgba(98, 100, 167, 0.35);
2088
+ color: #6264A7;
2089
+ }
2090
+ .conn-modal-title {
2091
+ flex: 1;
2092
+ font-size: 18px;
2093
+ font-weight: 600;
2094
+ color: var(--text);
2095
+ letter-spacing: 0.02em;
2096
+ }
2097
+ .conn-modal-close {
2098
+ width: 32px;
2099
+ height: 32px;
2100
+ border: none;
2101
+ background: rgba(255, 255, 255, 0.05);
2102
+ border-radius: 8px;
2103
+ color: var(--text-muted);
2104
+ cursor: pointer;
2105
+ display: flex;
2106
+ align-items: center;
2107
+ justify-content: center;
2108
+ transition: all 0.2s ease;
2109
+ }
2110
+ .conn-modal-close:hover {
2111
+ background: rgba(255, 255, 255, 0.1);
2112
+ color: var(--text);
2113
+ }
2114
+ .conn-modal-body {
2115
+ padding: 20px;
2116
+ }
2117
+ .conn-modal-status {
2118
+ display: flex;
2119
+ align-items: center;
2120
+ gap: 12px;
2121
+ padding: 14px 16px;
2122
+ background: rgba(255, 255, 255, 0.03);
2123
+ border: 1px solid rgba(255, 255, 255, 0.06);
2124
+ border-radius: 10px;
2125
+ margin-bottom: 16px;
2126
+ }
2127
+ .conn-modal-status-dot {
2128
+ width: 10px;
2129
+ height: 10px;
2130
+ border-radius: 50%;
2131
+ background: var(--text-dim);
2132
+ }
2133
+ .conn-modal-status.connected .conn-modal-status-dot {
2134
+ background: var(--accent-green);
2135
+ box-shadow: 0 0 10px rgba(52, 211, 153, 0.5);
2136
+ }
2137
+ .conn-modal-status.disconnected .conn-modal-status-dot {
2138
+ background: var(--text-dim);
2139
+ }
2140
+ .conn-modal-status-text {
2141
+ flex: 1;
2142
+ font-size: 13px;
2143
+ color: var(--text);
2144
+ }
2145
+ .conn-modal-status-badge {
2146
+ font-size: 10px;
2147
+ font-family: var(--font-mono);
2148
+ font-weight: 600;
2149
+ padding: 4px 10px;
2150
+ border-radius: 20px;
2151
+ letter-spacing: 0.08em;
2152
+ }
2153
+ .conn-modal-status.connected .conn-modal-status-badge {
2154
+ background: rgba(52, 211, 153, 0.15);
2155
+ color: var(--accent-green);
2156
+ }
2157
+ .conn-modal-status.disconnected .conn-modal-status-badge {
2158
+ background: rgba(255, 255, 255, 0.08);
2159
+ color: var(--text-muted);
2160
+ }
2161
+ .conn-modal-info {
2162
+ font-size: 13px;
2163
+ line-height: 1.6;
2164
+ color: var(--text-muted);
2165
+ margin-bottom: 16px;
2166
+ }
2167
+ .conn-modal-info code {
2168
+ background: rgba(255, 255, 255, 0.08);
2169
+ padding: 2px 6px;
2170
+ border-radius: 4px;
2171
+ font-family: var(--font-mono);
2172
+ font-size: 12px;
2173
+ color: var(--accent-cyan);
2174
+ }
2175
+ .conn-modal-config {
2176
+ background: rgba(0, 0, 0, 0.3);
2177
+ border: 1px solid rgba(255, 255, 255, 0.06);
2178
+ border-radius: 8px;
2179
+ padding: 12px 14px;
2180
+ font-family: var(--font-mono);
2181
+ font-size: 11px;
2182
+ color: var(--text-muted);
2183
+ overflow-x: auto;
2184
+ white-space: pre;
2185
+ }
2186
+ .conn-modal-footer {
2187
+ padding: 16px 20px 20px;
2188
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2189
+ display: flex;
2190
+ justify-content: flex-end;
2191
+ }
2192
+ .conn-modal-docs {
2193
+ display: flex;
2194
+ align-items: center;
2195
+ gap: 8px;
2196
+ font-size: 12px;
2197
+ font-weight: 500;
2198
+ color: var(--accent-cyan);
2199
+ text-decoration: none;
2200
+ padding: 8px 14px;
2201
+ background: rgba(0, 212, 255, 0.1);
2202
+ border: 1px solid rgba(0, 212, 255, 0.2);
2203
+ border-radius: 8px;
2204
+ transition: all 0.2s ease;
2205
+ }
2206
+ .conn-modal-docs:hover {
2207
+ background: rgba(0, 212, 255, 0.15);
2208
+ border-color: rgba(0, 212, 255, 0.35);
2209
+ }
2210
+
2211
+
2212
+ /* ══════════════════════════════════════════════════════════════════════════
2213
+ SUBAGENTS PANEL
2214
+ ══════════════════════════════════════════════════════════════════════════ */
2215
+
2216
+ .subagents-panel {
2217
+ display: flex;
2218
+ flex-direction: column;
2219
+ gap: 0;
2220
+ }
2221
+
2222
+ .subagents-count {
2223
+ font-size: 10px;
2224
+ font-family: var(--font-mono);
2225
+ color: var(--accent-cyan);
2226
+ margin-left: 6px;
2227
+ font-weight: 600;
2228
+ }
2229
+
2230
+ /* Quick Deploy */
2231
+ .quick-deploy-section {
2232
+ margin-bottom: 10px;
2233
+ }
2234
+ .quick-deploy-label {
2235
+ font-size: 9px;
2236
+ font-family: var(--font-mono);
2237
+ font-weight: 700;
2238
+ letter-spacing: 0.12em;
2239
+ color: var(--text-muted);
2240
+ margin-bottom: 8px;
2241
+ }
2242
+ .quick-deploy-grid {
2243
+ display: grid;
2244
+ grid-template-columns: 1fr 1fr;
2245
+ gap: 6px;
2246
+ }
2247
+ .quick-deploy-btn {
2248
+ display: flex;
2249
+ align-items: center;
2250
+ gap: 6px;
2251
+ padding: 7px 10px;
2252
+ background: rgba(255,255,255,0.02);
2253
+ border: 1px solid rgba(255,255,255,0.06);
2254
+ border-radius: 8px;
2255
+ color: var(--text);
2256
+ font-size: 12px;
2257
+ font-weight: 500;
2258
+ font-family: inherit;
2259
+ cursor: pointer;
2260
+ transition: all 0.2s ease;
2261
+ }
2262
+ .quick-deploy-btn svg {
2263
+ width: 14px;
2264
+ height: 14px;
2265
+ flex-shrink: 0;
2266
+ opacity: 0.7;
2267
+ }
2268
+ .quick-deploy-btn:hover {
2269
+ background: rgba(0, 212, 255, 0.06);
2270
+ border-color: rgba(0, 212, 255, 0.2);
2271
+ color: var(--accent-cyan);
2272
+ }
2273
+ .quick-deploy-btn:hover svg {
2274
+ opacity: 1;
2275
+ }
2276
+ .quick-deploy-btn.selected {
2277
+ background: rgba(0, 212, 255, 0.1);
2278
+ border-color: rgba(0, 212, 255, 0.3);
2279
+ color: var(--accent-cyan);
2280
+ }
2281
+ .quick-deploy-btn.selected svg {
2282
+ opacity: 1;
2283
+ }
2284
+
2285
+ /* Staging Box */
2286
+ .staging-box {
2287
+ display: flex;
2288
+ align-items: center;
2289
+ gap: 8px;
2290
+ padding: 8px 10px;
2291
+ background: rgba(255,255,255,0.015);
2292
+ border: 1px solid rgba(255,255,255,0.05);
2293
+ border-radius: 8px;
2294
+ margin-bottom: 12px;
2295
+ min-height: 38px;
2296
+ }
2297
+ .staging-chips {
2298
+ flex: 1;
2299
+ display: flex;
2300
+ flex-wrap: wrap;
2301
+ gap: 4px;
2302
+ min-height: 22px;
2303
+ align-items: center;
2304
+ }
2305
+ .staging-empty {
2306
+ font-size: 10px;
2307
+ color: var(--text-muted);
2308
+ font-family: var(--font-mono);
2309
+ letter-spacing: 0.04em;
2310
+ }
2311
+ .staging-chip {
2312
+ display: inline-flex;
2313
+ align-items: center;
2314
+ gap: 4px;
2315
+ padding: 3px 8px;
2316
+ background: rgba(0, 212, 255, 0.1);
2317
+ border: 1px solid rgba(0, 212, 255, 0.2);
2318
+ border-radius: 12px;
2319
+ font-size: 10px;
2320
+ font-family: var(--font-mono);
2321
+ color: var(--accent-cyan);
2322
+ cursor: default;
2323
+ }
2324
+ .staging-chip-remove {
2325
+ cursor: pointer;
2326
+ opacity: 0.6;
2327
+ font-size: 12px;
2328
+ line-height: 1;
2329
+ }
2330
+ .staging-chip-remove:hover {
2331
+ opacity: 1;
2332
+ }
2333
+ .staging-deploy-btn {
2334
+ display: flex;
2335
+ align-items: center;
2336
+ gap: 5px;
2337
+ padding: 6px 12px;
2338
+ background: rgba(0, 212, 255, 0.12);
2339
+ border: 1px solid rgba(0, 212, 255, 0.25);
2340
+ border-radius: 8px;
2341
+ color: var(--accent-cyan);
2342
+ font-size: 11px;
2343
+ font-weight: 600;
2344
+ font-family: inherit;
2345
+ cursor: pointer;
2346
+ transition: all 0.2s ease;
2347
+ white-space: nowrap;
2348
+ }
2349
+ .staging-deploy-btn svg {
2350
+ width: 13px;
2351
+ height: 13px;
2352
+ }
2353
+ .staging-deploy-btn:disabled {
2354
+ opacity: 0.35;
2355
+ cursor: not-allowed;
2356
+ }
2357
+ .staging-deploy-btn:not(:disabled):hover {
2358
+ background: rgba(0, 212, 255, 0.2);
2359
+ border-color: rgba(0, 212, 255, 0.4);
2360
+ }
2361
+
2362
+ /* Active subagents */
2363
+ .subagents-active-label {
2364
+ font-size: 9px;
2365
+ font-family: var(--font-mono);
2366
+ font-weight: 700;
2367
+ letter-spacing: 0.12em;
2368
+ color: var(--text-muted);
2369
+ margin-bottom: 6px;
2370
+ }
2371
+ .subagents-list {
2372
+ display: flex;
2373
+ flex-direction: column;
2374
+ gap: 4px;
2375
+ margin-bottom: 10px;
2376
+ max-height: 240px;
2377
+ overflow-y: auto;
2378
+ }
2379
+ .subagents-empty {
2380
+ display: flex;
2381
+ flex-direction: column;
2382
+ align-items: center;
2383
+ gap: 6px;
2384
+ padding: 16px 0;
2385
+ }
2386
+ .subagents-empty-icon {
2387
+ width: 32px;
2388
+ height: 32px;
2389
+ display: flex;
2390
+ align-items: center;
2391
+ justify-content: center;
2392
+ opacity: 0.35;
2393
+ }
2394
+ .subagents-empty-icon svg {
2395
+ width: 24px;
2396
+ height: 24px;
2397
+ }
2398
+ .subagents-empty-text {
2399
+ font-size: 11px;
2400
+ font-family: var(--font-mono);
2401
+ color: var(--text-muted);
2402
+ letter-spacing: 0.04em;
2403
+ }
2404
+
2405
+ /* Individual subagent item */
2406
+ .subagent-item {
2407
+ display: flex;
2408
+ align-items: center;
2409
+ gap: 10px;
2410
+ padding: 8px 10px;
2411
+ background: rgba(255,255,255,0.02);
2412
+ border: 1px solid rgba(255,255,255,0.05);
2413
+ border-radius: 8px;
2414
+ cursor: pointer;
2415
+ transition: all 0.2s ease;
2416
+ }
2417
+ .subagent-item:hover {
2418
+ background: rgba(255,255,255,0.04);
2419
+ border-color: rgba(255,255,255,0.1);
2420
+ }
2421
+ .subagent-item[data-status="running"] {
2422
+ border-color: rgba(0, 212, 255, 0.2);
2423
+ background: rgba(0, 212, 255, 0.03);
2424
+ }
2425
+ .subagent-item[data-status="completed"] {
2426
+ border-color: rgba(52, 211, 153, 0.15);
2427
+ }
2428
+ .subagent-item[data-status="error"] {
2429
+ border-color: rgba(248, 113, 113, 0.2);
2430
+ }
2431
+
2432
+ .subagent-icon {
2433
+ flex-shrink: 0;
2434
+ width: 20px;
2435
+ height: 20px;
2436
+ display: flex;
2437
+ align-items: center;
2438
+ justify-content: center;
2439
+ font-size: 14px;
2440
+ }
2441
+ .subagent-info {
2442
+ flex: 1;
2443
+ min-width: 0;
2444
+ display: flex;
2445
+ flex-direction: column;
2446
+ gap: 1px;
2447
+ }
2448
+ .subagent-label {
2449
+ font-size: 12px;
2450
+ font-weight: 600;
2451
+ color: var(--text);
2452
+ white-space: nowrap;
2453
+ overflow: hidden;
2454
+ text-overflow: ellipsis;
2455
+ }
2456
+ .subagent-task {
2457
+ font-size: 10px;
2458
+ font-family: var(--font-mono);
2459
+ color: var(--text-muted);
2460
+ white-space: nowrap;
2461
+ overflow: hidden;
2462
+ text-overflow: ellipsis;
2463
+ }
2464
+ .subagent-runtime {
2465
+ flex-shrink: 0;
2466
+ font-size: 10px;
2467
+ font-family: var(--font-mono);
2468
+ color: var(--text-muted);
2469
+ letter-spacing: 0.04em;
2470
+ }
2471
+
2472
+ /* Spawn button */
2473
+ .subagent-spawn-btn {
2474
+ display: flex;
2475
+ align-items: center;
2476
+ justify-content: center;
2477
+ gap: 6px;
2478
+ width: 100%;
2479
+ padding: 8px;
2480
+ background: rgba(139, 92, 246, 0.08);
2481
+ border: 1px dashed rgba(139, 92, 246, 0.25);
2482
+ border-radius: 8px;
2483
+ color: rgba(139, 92, 246, 0.85);
2484
+ font-size: 12px;
2485
+ font-weight: 600;
2486
+ font-family: inherit;
2487
+ cursor: pointer;
2488
+ transition: all 0.2s ease;
2489
+ }
2490
+ .subagent-spawn-btn svg {
2491
+ width: 14px;
2492
+ height: 14px;
2493
+ }
2494
+ .subagent-spawn-btn:hover {
2495
+ background: rgba(139, 92, 246, 0.12);
2496
+ border-color: rgba(139, 92, 246, 0.35);
2497
+ color: var(--accent-purple);
2498
+ }
2499
+
2500
+ /* ── Subagent Modal ──────────────────────────────────────────────────── */
2501
+ .subagent-modal-overlay {
2502
+ position: fixed;
2503
+ inset: 0;
2504
+ z-index: 9000;
2505
+ display: flex;
2506
+ align-items: center;
2507
+ justify-content: center;
2508
+ background: rgba(0, 0, 0, 0.7);
2509
+ backdrop-filter: blur(8px);
2510
+ opacity: 0;
2511
+ visibility: hidden;
2512
+ transition: opacity 0.25s ease, visibility 0.25s ease;
2513
+ }
2514
+ .subagent-modal-overlay.open {
2515
+ opacity: 1;
2516
+ visibility: visible;
2517
+ }
2518
+
2519
+ .subagent-modal {
2520
+ position: relative;
2521
+ width: 90%;
2522
+ max-width: 460px;
2523
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
2524
+ border: 1px solid rgba(255, 255, 255, 0.1);
2525
+ border-radius: 16px;
2526
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
2527
+ transform: scale(0.95) translateY(10px);
2528
+ transition: transform 0.25s ease;
2529
+ overflow: hidden;
2530
+ }
2531
+ .subagent-modal-overlay.open .subagent-modal {
2532
+ transform: scale(1) translateY(0);
2533
+ }
2534
+
2535
+ .subagent-modal-header {
2536
+ display: flex;
2537
+ align-items: center;
2538
+ justify-content: space-between;
2539
+ padding: 18px 20px 14px;
2540
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2541
+ }
2542
+ .subagent-modal-title {
2543
+ font-size: 16px;
2544
+ font-weight: 600;
2545
+ color: var(--text);
2546
+ letter-spacing: 0.02em;
2547
+ }
2548
+ .subagent-modal-close {
2549
+ width: 32px;
2550
+ height: 32px;
2551
+ border: none;
2552
+ background: rgba(255, 255, 255, 0.05);
2553
+ border-radius: 8px;
2554
+ color: var(--text-muted);
2555
+ cursor: pointer;
2556
+ display: flex;
2557
+ align-items: center;
2558
+ justify-content: center;
2559
+ transition: all 0.2s ease;
2560
+ }
2561
+ .subagent-modal-close:hover {
2562
+ background: rgba(255, 255, 255, 0.1);
2563
+ color: var(--text);
2564
+ }
2565
+
2566
+ .subagent-modal-body {
2567
+ padding: 20px;
2568
+ display: flex;
2569
+ flex-direction: column;
2570
+ gap: 14px;
2571
+ }
2572
+
2573
+ .subagent-form-group {
2574
+ display: flex;
2575
+ flex-direction: column;
2576
+ gap: 5px;
2577
+ }
2578
+ .subagent-form-label {
2579
+ font-size: 10px;
2580
+ font-family: var(--font-mono);
2581
+ font-weight: 600;
2582
+ letter-spacing: 0.1em;
2583
+ color: var(--text-muted);
2584
+ text-transform: uppercase;
2585
+ }
2586
+ .subagent-form-input,
2587
+ .subagent-form-select,
2588
+ .subagent-form-textarea {
2589
+ width: 100%;
2590
+ padding: 9px 12px;
2591
+ background: rgba(255, 255, 255, 0.04);
2592
+ border: 1px solid rgba(255, 255, 255, 0.08);
2593
+ border-radius: 8px;
2594
+ color: var(--text);
2595
+ font-size: 13px;
2596
+ font-family: inherit;
2597
+ outline: none;
2598
+ transition: border-color 0.2s ease;
2599
+ }
2600
+ .subagent-form-input:focus,
2601
+ .subagent-form-select:focus,
2602
+ .subagent-form-textarea:focus {
2603
+ border-color: rgba(139, 92, 246, 0.4);
2604
+ }
2605
+ .subagent-form-textarea {
2606
+ min-height: 80px;
2607
+ resize: vertical;
2608
+ font-family: var(--font-mono);
2609
+ font-size: 12px;
2610
+ }
2611
+ .subagent-form-select {
2612
+ appearance: none;
2613
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='rgba(255,255,255,0.4)' viewBox='0 0 16 16'%3E%3Cpath d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
2614
+ background-repeat: no-repeat;
2615
+ background-position: right 12px center;
2616
+ padding-right: 32px;
2617
+ }
2618
+ .subagent-form-select option {
2619
+ background: #0f0f19;
2620
+ color: var(--text);
2621
+ }
2622
+
2623
+ .subagent-modal-footer {
2624
+ padding: 14px 20px 18px;
2625
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2626
+ display: flex;
2627
+ justify-content: flex-end;
2628
+ gap: 10px;
2629
+ }
2630
+ .subagent-modal-cancel {
2631
+ padding: 8px 16px;
2632
+ background: rgba(255, 255, 255, 0.05);
2633
+ border: 1px solid rgba(255, 255, 255, 0.08);
2634
+ border-radius: 8px;
2635
+ color: var(--text-muted);
2636
+ font-size: 12px;
2637
+ font-weight: 500;
2638
+ font-family: inherit;
2639
+ cursor: pointer;
2640
+ transition: all 0.2s ease;
2641
+ }
2642
+ .subagent-modal-cancel:hover {
2643
+ background: rgba(255, 255, 255, 0.08);
2644
+ color: var(--text);
2645
+ }
2646
+ .subagent-modal-spawn {
2647
+ padding: 8px 18px;
2648
+ background: rgba(139, 92, 246, 0.15);
2649
+ border: 1px solid rgba(139, 92, 246, 0.3);
2650
+ border-radius: 8px;
2651
+ color: var(--accent-purple);
2652
+ font-size: 12px;
2653
+ font-weight: 600;
2654
+ font-family: inherit;
2655
+ cursor: pointer;
2656
+ transition: all 0.2s ease;
2657
+ }
2658
+ .subagent-modal-spawn:hover {
2659
+ background: rgba(139, 92, 246, 0.25);
2660
+ border-color: rgba(139, 92, 246, 0.5);
2661
+ }
2662
+
2663
+
2664
+ /* ══════════════════════════════════════════════════════════════════════════
2665
+ SCHEDULING PANEL
2666
+ ══════════════════════════════════════════════════════════════════════════ */
2667
+
2668
+ .scheduling-panel {
2669
+ display: flex;
2670
+ flex-direction: column;
2671
+ gap: 0;
2672
+ }
2673
+
2674
+ .schedule-count {
2675
+ font-size: 10px;
2676
+ font-family: var(--font-mono);
2677
+ color: var(--accent-green);
2678
+ margin-left: 6px;
2679
+ font-weight: 600;
2680
+ }
2681
+
2682
+ .schedule-list {
2683
+ display: flex;
2684
+ flex-direction: column;
2685
+ gap: 4px;
2686
+ margin-bottom: 10px;
2687
+ max-height: 260px;
2688
+ overflow-y: auto;
2689
+ }
2690
+
2691
+ /* Empty state */
2692
+ .schedule-empty {
2693
+ display: flex;
2694
+ flex-direction: column;
2695
+ align-items: center;
2696
+ gap: 6px;
2697
+ padding: 16px 0;
2698
+ }
2699
+ .schedule-empty-icon {
2700
+ width: 32px;
2701
+ height: 32px;
2702
+ display: flex;
2703
+ align-items: center;
2704
+ justify-content: center;
2705
+ opacity: 0.35;
2706
+ }
2707
+ .schedule-empty-icon svg {
2708
+ width: 24px;
2709
+ height: 24px;
2710
+ }
2711
+ .schedule-empty-text {
2712
+ font-size: 11px;
2713
+ font-family: var(--font-mono);
2714
+ color: var(--text-muted);
2715
+ letter-spacing: 0.04em;
2716
+ }
2717
+
2718
+ /* Schedule items */
2719
+ .schedule-item {
2720
+ display: flex;
2721
+ align-items: center;
2722
+ gap: 10px;
2723
+ padding: 8px 10px;
2724
+ background: rgba(255,255,255,0.02);
2725
+ border: 1px solid rgba(255,255,255,0.05);
2726
+ border-radius: 8px;
2727
+ cursor: pointer;
2728
+ transition: all 0.2s ease;
2729
+ }
2730
+ .schedule-item:hover {
2731
+ background: rgba(255,255,255,0.04);
2732
+ border-color: rgba(255,255,255,0.1);
2733
+ }
2734
+ .schedule-item[data-active="true"] {
2735
+ border-color: rgba(52, 211, 153, 0.15);
2736
+ }
2737
+ .schedule-item[data-active="false"] {
2738
+ opacity: 0.5;
2739
+ }
2740
+
2741
+ /* Toggle dot */
2742
+ .schedule-toggle {
2743
+ flex-shrink: 0;
2744
+ width: 12px;
2745
+ height: 12px;
2746
+ border-radius: 50%;
2747
+ background: var(--text-dim);
2748
+ border: 2px solid rgba(255,255,255,0.1);
2749
+ transition: all 0.2s ease;
2750
+ cursor: pointer;
2751
+ }
2752
+ .schedule-item[data-active="true"] .schedule-toggle {
2753
+ background: var(--accent-green);
2754
+ border-color: rgba(52, 211, 153, 0.3);
2755
+ box-shadow: 0 0 6px rgba(52, 211, 153, 0.3);
2756
+ }
2757
+ .schedule-toggle:hover {
2758
+ border-color: rgba(255,255,255,0.3);
2759
+ }
2760
+
2761
+ .schedule-info {
2762
+ flex: 1;
2763
+ min-width: 0;
2764
+ display: flex;
2765
+ flex-direction: column;
2766
+ gap: 1px;
2767
+ }
2768
+ .schedule-name {
2769
+ font-size: 12px;
2770
+ font-weight: 600;
2771
+ color: var(--text);
2772
+ white-space: nowrap;
2773
+ overflow: hidden;
2774
+ text-overflow: ellipsis;
2775
+ }
2776
+ .schedule-next {
2777
+ font-size: 10px;
2778
+ font-family: var(--font-mono);
2779
+ color: var(--text-muted);
2780
+ white-space: nowrap;
2781
+ overflow: hidden;
2782
+ text-overflow: ellipsis;
2783
+ }
2784
+ .schedule-interval {
2785
+ flex-shrink: 0;
2786
+ font-size: 10px;
2787
+ font-family: var(--font-mono);
2788
+ color: var(--text-muted);
2789
+ letter-spacing: 0.04em;
2790
+ padding: 3px 8px;
2791
+ background: rgba(255,255,255,0.03);
2792
+ border-radius: 6px;
2793
+ }
2794
+
2795
+ /* Add schedule button */
2796
+ .schedule-add-btn {
2797
+ display: flex;
2798
+ align-items: center;
2799
+ justify-content: center;
2800
+ gap: 6px;
2801
+ width: 100%;
2802
+ padding: 8px;
2803
+ background: rgba(52, 211, 153, 0.08);
2804
+ border: 1px dashed rgba(52, 211, 153, 0.25);
2805
+ border-radius: 8px;
2806
+ color: rgba(52, 211, 153, 0.85);
2807
+ font-size: 12px;
2808
+ font-weight: 600;
2809
+ font-family: inherit;
2810
+ cursor: pointer;
2811
+ transition: all 0.2s ease;
2812
+ }
2813
+ .schedule-add-btn svg {
2814
+ width: 14px;
2815
+ height: 14px;
2816
+ }
2817
+ .schedule-add-btn:hover {
2818
+ background: rgba(52, 211, 153, 0.12);
2819
+ border-color: rgba(52, 211, 153, 0.35);
2820
+ color: var(--accent-green);
2821
+ }
2822
+
2823
+ /* ── Schedule Modal ──────────────────────────────────────────────────── */
2824
+ .schedule-modal-overlay {
2825
+ position: fixed;
2826
+ inset: 0;
2827
+ z-index: 9000;
2828
+ display: flex;
2829
+ align-items: center;
2830
+ justify-content: center;
2831
+ background: rgba(0, 0, 0, 0.7);
2832
+ backdrop-filter: blur(8px);
2833
+ opacity: 0;
2834
+ visibility: hidden;
2835
+ transition: opacity 0.25s ease, visibility 0.25s ease;
2836
+ }
2837
+ .schedule-modal-overlay.open {
2838
+ opacity: 1;
2839
+ visibility: visible;
2840
+ }
2841
+
2842
+ .schedule-modal {
2843
+ position: relative;
2844
+ width: 90%;
2845
+ max-width: 460px;
2846
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
2847
+ border: 1px solid rgba(255, 255, 255, 0.1);
2848
+ border-radius: 16px;
2849
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
2850
+ transform: scale(0.95) translateY(10px);
2851
+ transition: transform 0.25s ease;
2852
+ overflow: hidden;
2853
+ }
2854
+ .schedule-modal-overlay.open .schedule-modal {
2855
+ transform: scale(1) translateY(0);
2856
+ }
2857
+
2858
+ .schedule-modal-header {
2859
+ display: flex;
2860
+ align-items: center;
2861
+ justify-content: space-between;
2862
+ padding: 18px 20px 14px;
2863
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2864
+ }
2865
+ .schedule-modal-title {
2866
+ font-size: 16px;
2867
+ font-weight: 600;
2868
+ color: var(--text);
2869
+ letter-spacing: 0.02em;
2870
+ }
2871
+ .schedule-modal-close {
2872
+ width: 32px;
2873
+ height: 32px;
2874
+ border: none;
2875
+ background: rgba(255, 255, 255, 0.05);
2876
+ border-radius: 8px;
2877
+ color: var(--text-muted);
2878
+ cursor: pointer;
2879
+ display: flex;
2880
+ align-items: center;
2881
+ justify-content: center;
2882
+ transition: all 0.2s ease;
2883
+ }
2884
+ .schedule-modal-close:hover {
2885
+ background: rgba(255, 255, 255, 0.1);
2886
+ color: var(--text);
2887
+ }
2888
+
2889
+ .schedule-modal-body {
2890
+ padding: 20px;
2891
+ display: flex;
2892
+ flex-direction: column;
2893
+ gap: 14px;
2894
+ }
2895
+
2896
+ .schedule-form-group {
2897
+ display: flex;
2898
+ flex-direction: column;
2899
+ gap: 5px;
2900
+ }
2901
+ .schedule-form-label {
2902
+ font-size: 10px;
2903
+ font-family: var(--font-mono);
2904
+ font-weight: 600;
2905
+ letter-spacing: 0.1em;
2906
+ color: var(--text-muted);
2907
+ text-transform: uppercase;
2908
+ }
2909
+ .schedule-form-input,
2910
+ .schedule-form-textarea {
2911
+ width: 100%;
2912
+ padding: 9px 12px;
2913
+ background: rgba(255, 255, 255, 0.04);
2914
+ border: 1px solid rgba(255, 255, 255, 0.08);
2915
+ border-radius: 8px;
2916
+ color: var(--text);
2917
+ font-size: 13px;
2918
+ font-family: inherit;
2919
+ outline: none;
2920
+ transition: border-color 0.2s ease;
2921
+ }
2922
+ .schedule-form-input:focus,
2923
+ .schedule-form-textarea:focus {
2924
+ border-color: rgba(52, 211, 153, 0.4);
2925
+ }
2926
+ .schedule-form-textarea {
2927
+ min-height: 70px;
2928
+ resize: vertical;
2929
+ font-family: var(--font-mono);
2930
+ font-size: 12px;
2931
+ }
2932
+
2933
+ /* Interval presets */
2934
+ .schedule-interval-presets {
2935
+ display: flex;
2936
+ flex-wrap: wrap;
2937
+ gap: 6px;
2938
+ }
2939
+ .schedule-interval-btn {
2940
+ padding: 6px 12px;
2941
+ background: rgba(255,255,255,0.04);
2942
+ border: 1px solid rgba(255,255,255,0.08);
2943
+ border-radius: 8px;
2944
+ color: var(--text-muted);
2945
+ font-size: 11px;
2946
+ font-family: var(--font-mono);
2947
+ cursor: pointer;
2948
+ transition: all 0.2s ease;
2949
+ }
2950
+ .schedule-interval-btn:hover {
2951
+ background: rgba(52, 211, 153, 0.08);
2952
+ border-color: rgba(52, 211, 153, 0.2);
2953
+ color: var(--accent-green);
2954
+ }
2955
+ .schedule-interval-btn.selected {
2956
+ background: rgba(52, 211, 153, 0.12);
2957
+ border-color: rgba(52, 211, 153, 0.3);
2958
+ color: var(--accent-green);
2959
+ }
2960
+
2961
+ .schedule-modal-footer {
2962
+ padding: 14px 20px 18px;
2963
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2964
+ display: flex;
2965
+ justify-content: flex-end;
2966
+ gap: 10px;
2967
+ }
2968
+ .schedule-modal-cancel {
2969
+ padding: 8px 16px;
2970
+ background: rgba(255, 255, 255, 0.05);
2971
+ border: 1px solid rgba(255, 255, 255, 0.08);
2972
+ border-radius: 8px;
2973
+ color: var(--text-muted);
2974
+ font-size: 12px;
2975
+ font-weight: 500;
2976
+ font-family: inherit;
2977
+ cursor: pointer;
2978
+ transition: all 0.2s ease;
2979
+ }
2980
+ .schedule-modal-cancel:hover {
2981
+ background: rgba(255, 255, 255, 0.08);
2982
+ color: var(--text);
2983
+ }
2984
+ .schedule-modal-save {
2985
+ padding: 8px 18px;
2986
+ background: rgba(52, 211, 153, 0.15);
2987
+ border: 1px solid rgba(52, 211, 153, 0.3);
2988
+ border-radius: 8px;
2989
+ color: var(--accent-green);
2990
+ font-size: 12px;
2991
+ font-weight: 600;
2992
+ font-family: inherit;
2993
+ cursor: pointer;
2994
+ transition: all 0.2s ease;
2995
+ }
2996
+ .schedule-modal-save:hover {
2997
+ background: rgba(52, 211, 153, 0.25);
2998
+ border-color: rgba(52, 211, 153, 0.5);
2999
+ }