@symerian/symi 3.4.30 → 3.4.31

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 (177) hide show
  1. package/dist/{agent-O3PihJOY.js → agent-ZFfYdexc.js} +10 -10
  2. package/dist/{agents-C2MpIr16.js → agents-C8naPegc.js} +5 -5
  3. package/dist/{audit-yf3H4Y1h.js → audit-DOfexJi4.js} +8 -8
  4. package/dist/{auth-choice-CyBcsQ9T.js → auth-choice-DxH-c3vK.js} +4 -4
  5. package/dist/{banner-D7__HlM-.js → banner-D7zYLyA8.js} +1 -1
  6. package/dist/{browser-cli-B_6WWHm_.js → browser-cli-MYIql1Ic.js} +3 -3
  7. package/dist/build-info.json +1 -1
  8. package/dist/bundled/boot-md/handler.js +4 -4
  9. package/dist/bundled/session-memory/handler.js +4 -4
  10. package/dist/{call-IfleM0ap.js → call-D9U2Sfhp.js} +1 -1
  11. package/dist/{channel-options-B5974x-7.js → channel-options-9PzSNQLG.js} +1 -1
  12. package/dist/{channels-cli-C6Nv9mzy.js → channels-cli-C3XnNkE5.js} +30 -30
  13. package/dist/{chrome-DT1fIVG1.js → chrome-B4P7ycw5.js} +7 -7
  14. package/dist/{chrome-DJCkCRLf.js → chrome-ClVIwINy.js} +1 -1
  15. package/dist/{cli-DZoms4qg.js → cli-DhTdzhjk.js} +26 -26
  16. package/dist/{command-registry--D98SJ6k.js → command-registry-BOwku-e8.js} +11 -11
  17. package/dist/{completion-cli-CHYvpIPw.js → completion-cli-KZYbGY4H.js} +2 -2
  18. package/dist/{config-BTSBEAnk.js → config-Byd2Y9rr.js} +5 -5
  19. package/dist/{config-cli-DstpcB33.js → config-cli-CJ1CRfG8.js} +5 -5
  20. package/dist/{config-guard-CCJrDmON.js → config-guard-zt0zhFHl.js} +2 -2
  21. package/dist/{config-validation-YCrMlM9Z.js → config-validation-CRazk6Kd.js} +1 -1
  22. package/dist/{configure-B-UvSZZ7.js → configure-CFY_XEps.js} +10 -10
  23. package/dist/{control-service-CwRG4M_O.js → control-service-DN6-IdFk.js} +4 -4
  24. package/dist/{cron-cli-DUETe3Of.js → cron-cli-fmiz43Pz.js} +3 -3
  25. package/dist/{daemon-cli-Dy5eY4M7.js → daemon-cli-BilAL40g.js} +6 -6
  26. package/dist/{daemon-runtime-ChztAKDA.js → daemon-runtime-D4KHzQq2.js} +1 -1
  27. package/dist/{deliver-59sRVaYQ.js → deliver-BkCYBlzi.js} +4 -4
  28. package/dist/{deliver-BHmK4isn.js → deliver-CnsfN7km.js} +1 -1
  29. package/dist/{devices-cli-BCZ2HHjT.js → devices-cli-D7HdOwRI.js} +2 -2
  30. package/dist/{directory-cli-BVGd0l0T.js → directory-cli-ed6QacBC.js} +1 -1
  31. package/dist/{dns-cli-DH-ksmiI.js → dns-cli-RPa1dGTQ.js} +1 -1
  32. package/dist/{docs-cli-BuX8FDdh.js → docs-cli-ZTdS_Gak.js} +2 -2
  33. package/dist/{doctor-completion-C4Sf8CFV.js → doctor-completion-DpGX8dau.js} +1 -1
  34. package/dist/{doctor-config-flow-BhmF6EAq.js → doctor-config-flow-CIrG_yW_.js} +4 -4
  35. package/dist/entry.js +3 -3
  36. package/dist/{exec-approvals-cli-CyXTXgft.js → exec-approvals-cli-65pcsa1y.js} +6 -6
  37. package/dist/{frontmatter-BH3ExkUY.js → frontmatter-B4levtVg.js} +2 -2
  38. package/dist/{gateway-cli-fT43bqlv.js → gateway-cli-CTi7Wl2k.js} +50 -50
  39. package/dist/{gateway-rpc-BEqCo2JK.js → gateway-rpc-2VPLhMhx.js} +1 -1
  40. package/dist/{glass-ui-ws-BfMKuf9v.js → glass-ui-ws-Bah_A-jn.js} +38 -38
  41. package/dist/{gmail-setup-utils-Cz9Tb30q.js → gmail-setup-utils-C9WBC6Cd.js} +1 -1
  42. package/dist/{health-DDxrkioj.js → health-B5rRzhyV.js} +3 -3
  43. package/dist/{hooks-cli-Btgk__9z.js → hooks-cli-CSDCGO-W.js} +29 -29
  44. package/dist/{hooks-status-BaV4_YaJ.js → hooks-status-OorbLcc2.js} +2 -2
  45. package/dist/index.js +0 -0
  46. package/dist/{lifecycle-core-B0tG8ERp.js → lifecycle-core-BRc-XqTk.js} +2 -2
  47. package/dist/llm-slug-generator.js +4 -4
  48. package/dist/{logs-cli-CUhZrDw7.js → logs-cli-D5phVUOT.js} +3 -3
  49. package/dist/{manager-BeNnzSJv.js → manager-BfhHvsI9.js} +1 -1
  50. package/dist/{manager-Di9qtuZF.js → manager-DzBH9uQG.js} +1 -1
  51. package/dist/{memory-BDeydRz3.js → memory-BCj0cj5v.js} +3 -3
  52. package/dist/{memory-cli-D4hZiGr5.js → memory-cli-9WUMBHol.js} +3 -3
  53. package/dist/{model-catalog-DPnCNs5N.js → model-catalog-CD2kTz4V.js} +2 -2
  54. package/dist/{model-picker-DuPommMc.js → model-picker-CVd5UuXV.js} +2 -2
  55. package/dist/{models-cli-CL5K06Wu.js → models-cli-rd4eX_6P.js} +30 -30
  56. package/dist/{models-config-CPlvO1b0.js → models-config-oxaGiRUT.js} +1 -1
  57. package/dist/{models-B0wNKA18.js → models-sbKIrJBG.js} +9 -9
  58. package/dist/{node-cli-CWWMajKF.js → node-cli-ClLXSdFL.js} +9 -9
  59. package/dist/{nodes-cli-YmE7S-JB.js → nodes-cli-DY38p5In.js} +3 -3
  60. package/dist/{onboard-HqUZVKyD.js → onboard-BAyp_UFm.js} +7 -7
  61. package/dist/{onboard-channels-BbF5-N3g.js → onboard-channels-CUpkV_IJ.js} +1 -1
  62. package/dist/{onboard-custom-63SI3jrk.js → onboard-custom-BMgLK-vo.js} +2 -2
  63. package/dist/{onboard-helpers-Cb3WFLl9.js → onboard-helpers-DIQjpQ-s.js} +2 -2
  64. package/dist/{onboard-hooks-DXXg3YH9.js → onboard-hooks-KZKmj5Dk.js} +3 -3
  65. package/dist/{onboard-remote-CqtCrqtm.js → onboard-remote-C-_NUgBl.js} +1 -1
  66. package/dist/{onboard-skills-CS3l5fhH.js → onboard-skills-CwvicFTi.js} +3 -3
  67. package/dist/{onboarding-Be_HJIFA.js → onboarding-BxCNNo75.js} +11 -11
  68. package/dist/{onboarding.finalize-dsCUTKCQ.js → onboarding.finalize-DgMPXTtO.js} +18 -18
  69. package/dist/{onboarding.gateway-config-Ctd1_QW4.js → onboarding.gateway-config-BAaWvPSX.js} +4 -4
  70. package/dist/{outbound-send-deps-DPsU_Xdy.js → outbound-send-deps-qhFaNYAY.js} +1 -1
  71. package/dist/{pairing-cli-PtlNv7Gr.js → pairing-cli-CFkiSx8t.js} +1 -1
  72. package/dist/{pi-embedded-helpers-CVKIHnFv.js → pi-embedded-helpers-CRG5LMS7.js} +1 -1
  73. package/dist/{pi-tools.policy-8_wTu7v2.js → pi-tools.policy-De6xHjVL.js} +2 -2
  74. package/dist/{plugin-registry-BG51uZOA.js → plugin-registry-BNe5jtPK.js} +2 -2
  75. package/dist/plugin-sdk/index.js +6 -6
  76. package/dist/{plugins-cli-B-zVOiQN.js → plugins-cli-CWj33_Hj.js} +27 -27
  77. package/dist/{program-BOh0XGsA.js → program-Z2OLlhsB.js} +33 -33
  78. package/dist/{prompt-select-styled-Bj-hrPCx.js → prompt-select-styled-BNwbBBcH.js} +16 -16
  79. package/dist/{provider-auth-helpers-BK6NFk2Q.js → provider-auth-helpers-5qb15Hje.js} +2 -2
  80. package/dist/{push-apns-CMxk3Hxf.js → push-apns-D6qV5P4h.js} +1 -1
  81. package/dist/{pw-ai-C5MJKzUM.js → pw-ai-BsEf8C15.js} +1 -1
  82. package/dist/{pw-ai-CE2TBGif.js → pw-ai-C7mvVllB.js} +2 -2
  83. package/dist/{qr-cli-BeHlC33g.js → qr-cli-oENcXq8d.js} +1 -1
  84. package/dist/{redact-identifier-B1VHIbnd.js → redact-identifier-ZE8OIUof.js} +1 -1
  85. package/dist/{register.agent-COv5OPLQ.js → register.agent-DpiHPMca.js} +36 -36
  86. package/dist/{register.configure-RhKVlfWH.js → register.configure-DRFaroYF.js} +40 -40
  87. package/dist/{register.maintenance-BAK-DiQY.js → register.maintenance-BGNNTt_1.js} +38 -38
  88. package/dist/{register.message-CCBmn5ja.js → register.message-R4AIHhlU.js} +28 -28
  89. package/dist/{register.onboard-B3jO_Goy.js → register.onboard-Cl-_Suyv.js} +13 -13
  90. package/dist/{register.setup-CYSISTDO.js → register.setup-Dt98v2V3.js} +15 -15
  91. package/dist/{register.status-health-sessions-CGbg9k6d.js → register.status-health-sessions-DiX5lVyr.js} +23 -23
  92. package/dist/{register.subclis-loifbhVx.js → register.subclis-DVObuR_P.js} +28 -28
  93. package/dist/{replies-Dj640LxQ.js → replies-VTJu1jUK.js} +1 -1
  94. package/dist/{routes-B5y-oAKp.js → routes-DOFg6X5M.js} +3 -3
  95. package/dist/{rpc-qWm1bRo5.js → rpc-BIHKXdlN.js} +1 -1
  96. package/dist/{run-main-B7Ria3zD.js → run-main-NAgYKzSu.js} +44 -44
  97. package/dist/{sandbox-BJgHc4Vu.js → sandbox-EB7cFSML.js} +6 -6
  98. package/dist/{sandbox-cli-CSudrHYL.js → sandbox-cli-D4dy6sUK.js} +8 -8
  99. package/dist/{security-cli-B2lCR2xX.js → security-cli-DwCKOrFm.js} +11 -11
  100. package/dist/{send-CY9na-Jw.js → send-CkRtuQbr.js} +1 -1
  101. package/dist/{server-context-DdWWaDf6.js → server-context-ww1jytet.js} +5 -5
  102. package/dist/{server-methods-Dk_EnINI.js → server-methods-BDiZyPvS.js} +23 -23
  103. package/dist/{server-node-events-BHegSgG9.js → server-node-events-9cY40B4m.js} +29 -29
  104. package/dist/{session-utils-CAVPV2Hh.js → session-utils-CStjqGE6.js} +3 -3
  105. package/dist/{sessions-BDM9kNY0.js → sessions-BSRHJH8T.js} +3 -3
  106. package/dist/{sessions-CqLQkkWg.js → sessions-CInbrqsF.js} +1 -1
  107. package/dist/{shared-CpwtQRJB.js → shared-DEAo94kI.js} +1 -1
  108. package/dist/{skill-commands-CRQniaHy.js → skill-commands-BkKfrbHt.js} +2 -2
  109. package/dist/{skills-CTcjFd_F.js → skills-CFLijAZ-.js} +1 -1
  110. package/dist/{skills-cli-9Mlb7VRg.js → skills-cli-BbagnO6p.js} +5 -5
  111. package/dist/{skills-install-D5ikt72d.js → skills-install-dLRO1KGp.js} +2 -2
  112. package/dist/{skills-remote-BASG1Doo.js → skills-remote-DQVB-3Pj.js} +1 -1
  113. package/dist/{skills-status-1iVfuVIG.js → skills-status-HWybfj0K.js} +2 -2
  114. package/dist/{status-Bci6O3aA.js → status-BSrVEUoJ.js} +2 -2
  115. package/dist/{status-D5RhVO0A.js → status-FIp7UKru.js} +12 -12
  116. package/dist/{status.update-D5CachQ_.js → status.update-Cm8Fm8QD.js} +1 -1
  117. package/dist/{subagent-registry-CsXaK_sy.js → subagent-registry-DqryocLT.js} +31 -31
  118. package/dist/{synthesis-dplLmFIP.js → synthesis-CS-lrEGy.js} +4 -4
  119. package/dist/{synthesis-BoZf8BeO.js → synthesis-DKhH0YwU.js} +26 -26
  120. package/dist/{system-cli-D5FffFX5.js → system-cli-DYSI6cIB.js} +3 -3
  121. package/dist/{systemd-hints-CufcSfMk.js → systemd-hints-EIfW5y8K.js} +1 -1
  122. package/dist/{tui-DZ8gksSZ.js → tui-C20rHOeB.js} +4 -4
  123. package/dist/{tui-cli-CyBJYh9u.js → tui-cli-JwlzHCza.js} +11 -11
  124. package/dist/{unified-runner-BFLLzEHE.js → unified-runner-AM9tFC5q.js} +10 -10
  125. package/dist/{update-cli-yW6Xl6fs.js → update-cli-BYfA3RPc.js} +41 -41
  126. package/dist/{update-runner-CIgLduhH.js → update-runner-CBG8p9iG.js} +1 -1
  127. package/dist/{webhooks-cli-4bmyKzwb.js → webhooks-cli-MuG_QGLp.js} +4 -4
  128. package/dist/{with-timeout-bWr6yBeX.js → with-timeout-BvxaeAo6.js} +1 -1
  129. package/dist/{workspace-DxscDsm6.js → workspace-D0d7Gi4-.js} +1 -1
  130. package/extensions/memory-core/node_modules/.bin/symi +0 -0
  131. package/extensions/msteams/node_modules/.bin/symi +0 -0
  132. package/extensions/outlook/node_modules/.bin/symi +0 -0
  133. package/extensions/slack/node_modules/.bin/symi +0 -0
  134. package/package.json +108 -79
  135. package/dist/control-ui/css/revert-red-theme.md +0 -141
  136. package/dist/control-ui/css/style.css +0 -5843
  137. package/dist/control-ui/css/style.css.backup-2026-03-03-162525 +0 -3546
  138. package/dist/control-ui/css/style.css.backup-before-red-2026-03-03-162525 +0 -3546
  139. package/dist/control-ui/css/style.css.backup-before-red-theme-2026-03-03-162530 +0 -3546
  140. package/dist/control-ui/css/style.css.pre-2row +0 -2165
  141. package/dist/control-ui/css/style.css.pre-brand +0 -1776
  142. package/dist/control-ui/css/style.css.pre-history +0 -1974
  143. package/dist/control-ui/css/style.css.pre-nav +0 -2264
  144. package/dist/control-ui/css/style.css.pre-newsession +0 -1898
  145. package/dist/control-ui/css/style.css.pre-queue +0 -2195
  146. package/dist/control-ui/css/style.css.pre-red-prompt +0 -2524
  147. package/dist/control-ui/css/style.css.pre-stop +0 -2239
  148. package/dist/control-ui/css/style.css.pre-textarea +0 -2184
  149. package/dist/control-ui/css/style.css.pre-watchdog +0 -1848
  150. package/dist/control-ui/css/style.css.red-theme +0 -2999
  151. package/dist/control-ui/index.html +0 -1042
  152. package/dist/control-ui/js/app.js +0 -1304
  153. package/dist/control-ui/js/app.js.pre-2row +0 -463
  154. package/dist/control-ui/js/app.js.pre-heartbeat-filter +0 -595
  155. package/dist/control-ui/js/app.js.pre-newsession +0 -408
  156. package/dist/control-ui/js/app.js.pre-queue +0 -476
  157. package/dist/control-ui/js/app.js.pre-stop +0 -564
  158. package/dist/control-ui/js/app.js.pre-textarea +0 -467
  159. package/dist/control-ui/js/app.js.pre-watchdog +0 -293
  160. package/dist/control-ui/js/connections.js +0 -438
  161. package/dist/control-ui/js/gateway.js +0 -233
  162. package/dist/control-ui/js/gateway.js.pre-stop +0 -110
  163. package/dist/control-ui/js/history.js +0 -732
  164. package/dist/control-ui/js/logs.js +0 -238
  165. package/dist/control-ui/js/menu.js +0 -230
  166. package/dist/control-ui/js/menu.js.pre-nav +0 -66
  167. package/dist/control-ui/js/metrics.js +0 -53
  168. package/dist/control-ui/js/models.js +0 -138
  169. package/dist/control-ui/js/render.js +0 -882
  170. package/dist/control-ui/js/render.test.js +0 -112
  171. package/dist/control-ui/js/scheduling.js +0 -461
  172. package/dist/control-ui/js/settings.js +0 -909
  173. package/dist/control-ui/js/slash-autocomplete.js +0 -168
  174. package/dist/control-ui/js/subagents.js +0 -560
  175. package/dist/control-ui/js/utils.js +0 -29
  176. package/dist/control-ui/vendor/highlight.min.js +0 -2518
  177. package/dist/control-ui/vendor/marked.min.js +0 -69
@@ -1,1898 +0,0 @@
1
- /* ── Reset & Base ─────────────────────────────────────────────────── */
2
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
3
-
4
- :root {
5
- --bg: #07070f;
6
- --glass-bg: rgba(255,255,255,0.04);
7
- --glass-bg-hover: rgba(255,255,255,0.07);
8
- --glass-border: rgba(255,255,255,0.08);
9
- --glass-border-strong: rgba(255,255,255,0.14);
10
- --text: rgba(255,255,255,0.92);
11
- --text-muted: rgba(255,255,255,0.45);
12
- --text-dim: rgba(255,255,255,0.25);
13
- --accent-cyan: #00d4ff;
14
- --accent-purple: #8b5cf6;
15
- --accent-pink: #f472b6;
16
- --accent-green: #34d399;
17
- --accent-blue: #60a5fa;
18
- --shadow: 0 8px 32px rgba(0,0,0,0.5);
19
- --blur: blur(24px) saturate(160%);
20
- --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
21
- --font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace;
22
- }
23
-
24
- html, body {
25
- height: 100%;
26
- width: 100%;
27
- overflow: hidden;
28
- background: var(--bg);
29
- color: var(--text);
30
- font-family: var(--font);
31
- font-size: 13px;
32
- line-height: 1.5;
33
- -webkit-font-smoothing: antialiased;
34
- }
35
-
36
- /* ── Background ───────────────────────────────────────────────────── */
37
- .bg-orbs {
38
- position: fixed;
39
- inset: 0;
40
- pointer-events: none;
41
- z-index: 0;
42
- overflow: hidden;
43
- }
44
-
45
- .orb {
46
- position: absolute;
47
- border-radius: 50%;
48
- filter: blur(120px);
49
- opacity: 0.18;
50
- animation: drift 20s ease-in-out infinite alternate;
51
- }
52
-
53
- .orb-1 {
54
- width: 700px; height: 700px;
55
- background: radial-gradient(circle, var(--accent-cyan), transparent 70%);
56
- top: -200px; left: -150px;
57
- animation-duration: 25s;
58
- }
59
-
60
- .orb-2 {
61
- width: 600px; height: 600px;
62
- background: radial-gradient(circle, var(--accent-purple), transparent 70%);
63
- bottom: -100px; right: -100px;
64
- animation-duration: 30s;
65
- animation-delay: -8s;
66
- }
67
-
68
- .orb-3 {
69
- width: 500px; height: 500px;
70
- background: radial-gradient(circle, var(--accent-pink), transparent 70%);
71
- top: 40%; left: 45%;
72
- animation-duration: 22s;
73
- animation-delay: -4s;
74
- opacity: 0.1;
75
- }
76
-
77
- @keyframes drift {
78
- 0% { transform: translate(0, 0) scale(1); }
79
- 33% { transform: translate(60px, -40px) scale(1.05); }
80
- 66% { transform: translate(-40px, 60px) scale(0.95); }
81
- 100% { transform: translate(30px, 20px) scale(1.02); }
82
- }
83
-
84
- .bg-grid {
85
- position: fixed;
86
- inset: 0;
87
- z-index: 0;
88
- pointer-events: none;
89
- background-image:
90
- linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),
91
- linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);
92
- background-size: 48px 48px;
93
- mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 40%, transparent 100%);
94
- }
95
-
96
- /* ── Glass Panel ──────────────────────────────────────────────────── */
97
- .glass-panel {
98
- position: relative;
99
- background: var(--glass-bg);
100
- backdrop-filter: var(--blur);
101
- -webkit-backdrop-filter: var(--blur);
102
- border: 1px solid var(--glass-border);
103
- border-radius: 14px;
104
- padding: 14px;
105
- box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.06);
106
- transition: border-color 0.3s, box-shadow 0.3s;
107
- }
108
-
109
- .glass-panel:hover {
110
- border-color: var(--glass-border-strong);
111
- box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.1), 0 0 0 1px rgba(0,212,255,0.05);
112
- }
113
-
114
- .glass-panel::before {
115
- content: '';
116
- position: absolute;
117
- inset: 0;
118
- border-radius: 16px;
119
- background: linear-gradient(135deg, rgba(255,255,255,0.04) 0%, transparent 60%);
120
- pointer-events: none;
121
- }
122
-
123
- .panel-sm { padding: 10px 12px; }
124
-
125
- .panel-label {
126
- font-size: 10px;
127
- font-family: var(--font-mono);
128
- font-weight: 600;
129
- letter-spacing: 0.18em;
130
- color: var(--accent-cyan);
131
- margin-bottom: 12px;
132
- opacity: 0.9;
133
- }
134
-
135
- /* ── Brand Panel ─────────────────────────────────────────────────── */
136
- .brand-panel {
137
- display: flex;
138
- align-items: center;
139
- gap: 14px;
140
- padding: 14px 16px;
141
- overflow: hidden;
142
- }
143
-
144
- .brand-panel::after {
145
- content: '';
146
- position: absolute;
147
- inset: 0;
148
- border-radius: 14px;
149
- background: linear-gradient(
150
- 120deg,
151
- rgba(0,212,255,0.06) 0%,
152
- rgba(139,92,246,0.06) 50%,
153
- rgba(0,212,255,0.03) 100%
154
- );
155
- pointer-events: none;
156
- }
157
-
158
- .brand-mark {
159
- flex-shrink: 0;
160
- width: 36px;
161
- height: 36px;
162
- border-radius: 10px;
163
- background: linear-gradient(135deg, rgba(0,212,255,0.15), rgba(139,92,246,0.15));
164
- border: 1px solid rgba(0,212,255,0.2);
165
- display: flex;
166
- align-items: center;
167
- justify-content: center;
168
- font-size: 16px;
169
- box-shadow: 0 0 16px rgba(0,212,255,0.1), inset 0 1px 0 rgba(255,255,255,0.1);
170
- }
171
-
172
- .brand-text {
173
- display: flex;
174
- flex-direction: column;
175
- gap: 2px;
176
- min-width: 0;
177
- }
178
-
179
- .brand-name {
180
- font-family: var(--font-mono);
181
- font-size: 18px;
182
- font-weight: 700;
183
- letter-spacing: 0.22em;
184
- background: linear-gradient(90deg, #00d4ff 0%, #a78bfa 60%, #00d4ff 120%);
185
- background-size: 200% auto;
186
- -webkit-background-clip: text;
187
- -webkit-text-fill-color: transparent;
188
- background-clip: text;
189
- animation: brand-shimmer 6s linear infinite;
190
- line-height: 1;
191
- }
192
-
193
- .brand-sub {
194
- font-family: var(--font-mono);
195
- font-size: 9px;
196
- letter-spacing: 0.16em;
197
- color: var(--text-dim);
198
- opacity: 0.6;
199
- text-transform: uppercase;
200
- }
201
-
202
- @keyframes brand-shimmer {
203
- 0% { background-position: 0% center; }
204
- 100% { background-position: 200% center; }
205
- }
206
-
207
- /* ── Metric Rows ──────────────────────────────────────────────────── */
208
- .metric-row {
209
- display: flex;
210
- align-items: center;
211
- gap: 8px;
212
- margin-bottom: 7px;
213
- }
214
-
215
- .metric-row:last-child { margin-bottom: 0; }
216
-
217
- .metric-name {
218
- font-family: var(--font-mono);
219
- font-size: 10px;
220
- color: var(--text-muted);
221
- width: 38px;
222
- flex-shrink: 0;
223
- }
224
-
225
- .metric-bar {
226
- flex: 1;
227
- height: 3px;
228
- background: rgba(255,255,255,0.08);
229
- border-radius: 99px;
230
- overflow: hidden;
231
- }
232
-
233
- .metric-fill {
234
- --accent: var(--accent-cyan);
235
- height: 100%;
236
- width: 0%;
237
- border-radius: 99px;
238
- background: var(--accent);
239
- box-shadow: 0 0 6px var(--accent);
240
- transition: width 1s cubic-bezier(0.4, 0, 0.2, 1);
241
- }
242
-
243
- .metric-val {
244
- font-family: var(--font-mono);
245
- font-size: 10px;
246
- color: var(--text-muted);
247
- width: 40px;
248
- text-align: right;
249
- flex-shrink: 0;
250
- }
251
-
252
- /* ── Network / Status Rows ────────────────────────────────────────── */
253
- .net-row {
254
- display: flex;
255
- align-items: center;
256
- gap: 7px;
257
- margin-bottom: 8px;
258
- min-height: 20px;
259
- }
260
- .net-row:last-child { margin-bottom: 0; }
261
-
262
- .net-name {
263
- font-size: 12px;
264
- color: var(--text);
265
- flex: 1;
266
- }
267
- .net-name.muted { color: var(--text-muted); }
268
-
269
- .net-ip {
270
- font-family: var(--font-mono);
271
- font-size: 11px;
272
- color: var(--text-muted);
273
- }
274
-
275
- .status-dot {
276
- width: 7px; height: 7px;
277
- border-radius: 50%;
278
- flex-shrink: 0;
279
- }
280
- .dot-green { background: var(--accent-green); box-shadow: 0 0 6px var(--accent-green); }
281
- .dot-blue { background: var(--accent-blue); box-shadow: 0 0 6px var(--accent-blue); }
282
- .dot-yellow { background: #fbbf24; box-shadow: 0 0 6px #fbbf24; }
283
-
284
- .pulse {
285
- animation: pulse-glow 2s ease-in-out infinite;
286
- }
287
- @keyframes pulse-glow {
288
- 0%, 100% { opacity: 1; box-shadow: 0 0 6px var(--accent-green); }
289
- 50% { opacity: 0.5; box-shadow: 0 0 12px var(--accent-green), 0 0 24px var(--accent-green); }
290
- }
291
-
292
- .divider {
293
- height: 1px;
294
- background: var(--glass-border);
295
- margin: 8px 0;
296
- }
297
-
298
- .badge {
299
- font-family: var(--font-mono);
300
- font-size: 9px;
301
- font-weight: 700;
302
- letter-spacing: 0.08em;
303
- padding: 2px 7px;
304
- border-radius: 99px;
305
- }
306
- .badge-green { background: rgba(52,211,153,0.12); color: var(--accent-green); border: 1px solid rgba(52,211,153,0.2); }
307
- .badge-blue { background: rgba(96,165,250,0.12); color: var(--accent-blue); border: 1px solid rgba(96,165,250,0.2); }
308
- .badge-cyan { background: rgba(0,212,255,0.10); color: var(--accent-cyan); border: 1px solid rgba(0,212,255,0.2); }
309
-
310
- /* ── Big Stats ────────────────────────────────────────────────────── */
311
- .big-stat {
312
- font-family: var(--font-mono);
313
- font-size: 15px;
314
- font-weight: 600;
315
- color: var(--text);
316
- letter-spacing: 0.02em;
317
- margin: 2px 0 2px;
318
- }
319
- .stat-sub {
320
- font-size: 10px;
321
- color: var(--text-dim);
322
- letter-spacing: 0.05em;
323
- }
324
-
325
- /* ── Model rows ───────────────────────────────────────────────────── */
326
- .model-row {
327
- display: flex;
328
- align-items: center;
329
- gap: 8px;
330
- margin-bottom: 8px;
331
- }
332
- .model-row:last-child { margin-bottom: 0; }
333
-
334
- .model-icon {
335
- font-size: 15px;
336
- color: var(--accent-cyan);
337
- flex-shrink: 0;
338
- text-shadow: 0 0 8px var(--accent-cyan);
339
- }
340
- .model-icon.dim { color: var(--text-dim); text-shadow: none; }
341
-
342
- .model-name {
343
- font-family: var(--font-mono);
344
- font-size: 12px;
345
- color: var(--text);
346
- }
347
- .model-name.dim { color: var(--text-dim); }
348
-
349
- .model-sub {
350
- font-size: 10px;
351
- color: var(--text-dim);
352
- letter-spacing: 0.06em;
353
- margin-top: 2px;
354
- }
355
-
356
- .active-model .model-name { color: var(--accent-cyan); }
357
-
358
- /* ── Agent Status Orb ─────────────────────────────────────────────── */
359
- .agent-status-panel { text-align: center; }
360
-
361
- .aso-orb-wrap {
362
- width: 120px;
363
- height: 120px;
364
- margin: 10px auto 14px;
365
- }
366
-
367
- .aso-svg {
368
- width: 100%;
369
- height: 100%;
370
- overflow: visible;
371
- }
372
-
373
- /* Orbit guide tracks — faint rings */
374
- .aso-track {
375
- fill: none;
376
- stroke: rgba(255,255,255,0.07);
377
- stroke-width: 1;
378
- }
379
-
380
- /* Arc segments */
381
- .aso-arc {
382
- fill: none;
383
- stroke: var(--aso-color);
384
- stroke-width: 1.8;
385
- stroke-linecap: round;
386
- filter: drop-shadow(0 0 3px var(--aso-color));
387
- }
388
- .aso-arc-dim { opacity: 0.5; }
389
-
390
- /* Core halo */
391
- .aso-core-halo {
392
- fill: var(--aso-color);
393
- opacity: 0.12;
394
- filter: blur(6px);
395
- }
396
-
397
- /* Core dot */
398
- .aso-core {
399
- fill: var(--aso-color);
400
- filter: drop-shadow(0 0 5px var(--aso-color));
401
- }
402
-
403
- /* Rotation groups — transform-origin at SVG center (50,50) */
404
- .aso-rot {
405
- transform-box: fill-box;
406
- transform-origin: center;
407
- }
408
-
409
- /* ── State: idle — slow cyan ── */
410
- #agent-status-panel[data-state="idle"] { --aso-color: rgba(0,212,255,0.75); }
411
- #agent-status-panel[data-state="idle"] .aso-rot1 { animation: aso-spin 8s linear infinite; }
412
- #agent-status-panel[data-state="idle"] .aso-rot2 { animation: aso-spin 13s linear infinite reverse; }
413
- #agent-status-panel[data-state="idle"] .aso-rot3 { animation: aso-spin 10s linear infinite; }
414
- #agent-status-panel[data-state="idle"] .aso-rot4 { animation: aso-spin 17s linear infinite reverse; }
415
- #agent-status-panel[data-state="idle"] .aso-rot5 { animation: aso-spin 12s linear infinite; }
416
- #agent-status-panel[data-state="idle"] .aso-core { animation: aso-breathe 3.5s ease-in-out infinite; }
417
-
418
- /* ── State: waiting — amber, a bit faster ── */
419
- #agent-status-panel[data-state="waiting"] { --aso-color: #f59e0b; }
420
- #agent-status-panel[data-state="waiting"] .aso-rot1 { animation: aso-spin 4s linear infinite; }
421
- #agent-status-panel[data-state="waiting"] .aso-rot2 { animation: aso-spin 6s linear infinite reverse; }
422
- #agent-status-panel[data-state="waiting"] .aso-rot3 { animation: aso-spin 5s linear infinite; }
423
- #agent-status-panel[data-state="waiting"] .aso-rot4 { animation: aso-spin 9s linear infinite reverse; }
424
- #agent-status-panel[data-state="waiting"] .aso-rot5 { animation: aso-spin 6s linear infinite; }
425
- #agent-status-panel[data-state="waiting"] .aso-core { animation: aso-pulse 1s ease-in-out infinite; }
426
-
427
- /* ── State: thinking — violet, fast spin ── */
428
- #agent-status-panel[data-state="thinking"] { --aso-color: #a78bfa; }
429
- #agent-status-panel[data-state="thinking"] .aso-rot1 { animation: aso-spin 1.1s linear infinite; }
430
- #agent-status-panel[data-state="thinking"] .aso-rot2 { animation: aso-spin 0.7s linear infinite reverse; }
431
- #agent-status-panel[data-state="thinking"] .aso-rot3 { animation: aso-spin 1.4s linear infinite; }
432
- #agent-status-panel[data-state="thinking"] .aso-rot4 { animation: aso-spin 0.5s linear infinite reverse; }
433
- #agent-status-panel[data-state="thinking"] .aso-rot5 { animation: aso-spin 1.8s linear infinite; }
434
- #agent-status-panel[data-state="thinking"] .aso-core { animation: aso-pulse 0.45s ease-in-out infinite; }
435
-
436
- /* ── State: streaming — green, medium flow ── */
437
- #agent-status-panel[data-state="streaming"] { --aso-color: #34d399; }
438
- #agent-status-panel[data-state="streaming"] .aso-rot1 { animation: aso-spin 2.2s linear infinite; }
439
- #agent-status-panel[data-state="streaming"] .aso-rot2 { animation: aso-spin 3.5s linear infinite reverse; }
440
- #agent-status-panel[data-state="streaming"] .aso-rot3 { animation: aso-spin 2.8s linear infinite; }
441
- #agent-status-panel[data-state="streaming"] .aso-rot4 { animation: aso-spin 4.5s linear infinite reverse; }
442
- #agent-status-panel[data-state="streaming"] .aso-rot5 { animation: aso-spin 3.2s linear infinite; }
443
- #agent-status-panel[data-state="streaming"] .aso-core { animation: aso-pulse 0.7s ease-in-out infinite; }
444
-
445
- /* ── State: done — brief flash, stays green ── */
446
- #agent-status-panel[data-state="done"] { --aso-color: #34d399; }
447
- #agent-status-panel[data-state="done"] .aso-rot1 { animation: aso-spin 0.4s linear infinite; }
448
- #agent-status-panel[data-state="done"] .aso-rot2 { animation: aso-spin 0.3s linear infinite reverse; }
449
- #agent-status-panel[data-state="done"] .aso-rot3 { animation: aso-spin 0.5s linear infinite; }
450
- #agent-status-panel[data-state="done"] .aso-rot4 { animation: aso-spin 0.25s linear infinite reverse; }
451
- #agent-status-panel[data-state="done"] .aso-rot5 { animation: aso-spin 0.6s linear infinite; }
452
- #agent-status-panel[data-state="done"] .aso-core { animation: aso-flash 0.4s ease-out forwards; }
453
-
454
- /* ERROR state — red/pink, irregular erratic pulse to signal distress */
455
- #agent-status-panel[data-state="error"] { --aso-color: #f87171; }
456
- #agent-status-panel[data-state="error"] .aso-rot1 { animation: aso-spin 2.1s linear infinite; }
457
- #agent-status-panel[data-state="error"] .aso-rot2 { animation: aso-spin 1.4s linear infinite reverse; }
458
- #agent-status-panel[data-state="error"] .aso-rot3 { animation: aso-spin 3.3s linear infinite; }
459
- #agent-status-panel[data-state="error"] .aso-rot4 { animation: aso-spin 1.8s linear infinite reverse; }
460
- #agent-status-panel[data-state="error"] .aso-rot5 { animation: aso-spin 2.7s linear infinite; }
461
- #agent-status-panel[data-state="error"] .aso-core { animation: aso-error-pulse 0.6s ease-in-out infinite; }
462
-
463
- @keyframes aso-error-pulse {
464
- 0%, 100% { opacity: 1; transform: scale(1); }
465
- 50% { opacity: 0.4; transform: scale(0.75); }
466
- }
467
-
468
- /* ── Run error bubble (failure message in the feed) ──────────────── */
469
- .run-error-bubble {
470
- display: flex;
471
- align-items: flex-start;
472
- gap: 10px;
473
- background: rgba(248, 113, 113, 0.06) !important;
474
- border-color: rgba(248, 113, 113, 0.25) !important;
475
- }
476
-
477
- .run-error-icon {
478
- font-size: 15px;
479
- flex-shrink: 0;
480
- margin-top: 1px;
481
- color: #f87171;
482
- filter: drop-shadow(0 0 4px rgba(248,113,113,0.5));
483
- }
484
-
485
- .run-error-text {
486
- color: #fca5a5 !important;
487
- font-size: 13px;
488
- line-height: 1.5;
489
- }
490
-
491
- /* Partial/failed stream bubble — dim to indicate incomplete */
492
- .stream-failed {
493
- opacity: 0.6;
494
- border-color: rgba(248,113,113,0.2) !important;
495
- }
496
- .stream-failed::after {
497
- content: ' [incomplete]';
498
- font-size: 11px;
499
- color: #f87171;
500
- font-family: var(--font-mono);
501
- opacity: 0.7;
502
- }
503
-
504
- /* ── Keyframes ── */
505
- @keyframes aso-spin {
506
- from { transform: rotate(0deg); }
507
- to { transform: rotate(360deg); }
508
- }
509
- @keyframes aso-breathe {
510
- 0%, 100% { transform: scale(1); opacity: 0.75; }
511
- 50% { transform: scale(1.45); opacity: 1; }
512
- }
513
- @keyframes aso-pulse {
514
- 0%, 100% { transform: scale(1); }
515
- 50% { transform: scale(1.6); }
516
- }
517
- @keyframes aso-flash {
518
- 0% { transform: scale(2.5); opacity: 1; }
519
- 60% { transform: scale(1.2); opacity: 1; }
520
- 100% { transform: scale(1); opacity: 1; }
521
- }
522
-
523
- /* ── Status label & sub-text ── */
524
- .aso-label {
525
- font-family: var(--font-mono);
526
- font-size: 11px;
527
- font-weight: 700;
528
- letter-spacing: 0.22em;
529
- color: var(--aso-color);
530
- margin-bottom: 5px;
531
- text-shadow: 0 0 8px var(--aso-color);
532
- transition: color 0.4s ease, text-shadow 0.4s ease;
533
- }
534
- .aso-sub {
535
- font-size: 10px;
536
- color: var(--text-dim);
537
- letter-spacing: 0.04em;
538
- }
539
-
540
- /* ── Layout columns ───────────────────────────────────────────────── */
541
- .metrics-col {
542
- position: fixed;
543
- top: 24px;
544
- bottom: 120px;
545
- width: 360px;
546
- display: flex;
547
- flex-direction: column;
548
- gap: 12px;
549
- z-index: 10;
550
- overflow-y: auto;
551
- scrollbar-width: none;
552
- padding-bottom: 8px;
553
- }
554
- .metrics-col::-webkit-scrollbar { display: none; }
555
-
556
- /* Anchor panels adjacent to the centered 740px chat column, 16px gap */
557
- .metrics-left { left: calc(50% - 370px - 16px - 360px); }
558
- .metrics-right { right: calc(50% - 370px - 16px - 360px); }
559
-
560
- /* ── Response Area ────────────────────────────────────────────────── */
561
- .response-area {
562
- position: fixed;
563
- top: 0;
564
- left: calc(50% - 370px);
565
- right: calc(50% - 370px);
566
- bottom: 110px;
567
- z-index: 5;
568
- display: flex;
569
- flex-direction: column;
570
- justify-content: flex-start;
571
- padding: 32px 0 16px;
572
- overflow-y: auto;
573
- overflow-x: hidden;
574
- pointer-events: none;
575
- }
576
-
577
- /* Constrain all response content to a readable column, centered */
578
- .response-area > * {
579
- width: 100%;
580
- max-width: 740px;
581
- margin-left: auto;
582
- margin-right: auto;
583
- flex-shrink: 0;
584
- pointer-events: auto;
585
- }
586
-
587
- /* ── Message Bubbles ──────────────────────────────────────────────── */
588
- .message {
589
- pointer-events: auto;
590
- width: 100%;
591
- max-width: 740px;
592
- margin-bottom: 16px;
593
- animation: waterfall 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
594
- opacity: 0;
595
- transform: translateY(-20px);
596
- /* Allow bubble to fit content — don't impose a forced width on the child */
597
- display: block;
598
- }
599
-
600
- @keyframes waterfall {
601
- to { opacity: 1; transform: translateY(0); }
602
- }
603
-
604
- .message.user-msg .bubble {
605
- background: rgba(0,212,255,0.07);
606
- border: 1px solid rgba(0,212,255,0.18);
607
- border-radius: 12px 12px 4px 12px;
608
- padding: 10px 14px;
609
- display: inline-block;
610
- float: right;
611
- max-width: 75%;
612
- backdrop-filter: blur(12px);
613
- color: var(--text);
614
- font-size: 14.5px;
615
- clear: both;
616
- }
617
-
618
- .message.symi-msg .bubble {
619
- background: var(--glass-bg);
620
- border: 1px solid var(--glass-border);
621
- border-radius: 4px 12px 12px 12px;
622
- padding: 12px 16px;
623
- backdrop-filter: var(--blur);
624
- -webkit-backdrop-filter: var(--blur);
625
- box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.04);
626
- font-size: 14.5px;
627
- line-height: 1.75;
628
- color: var(--text);
629
- position: relative;
630
- clear: both;
631
- display: inline-block;
632
- width: fit-content;
633
- max-width: 100%;
634
- box-sizing: border-box;
635
- overflow: visible;
636
- }
637
-
638
- .message.symi-msg .bubble::before {
639
- content: '';
640
- position: absolute;
641
- top: 0; left: 0; right: 0;
642
- height: 1px;
643
- background: linear-gradient(90deg, transparent, rgba(0,212,255,0.3), transparent);
644
- }
645
-
646
- .message-clearfix { clear: both; }
647
-
648
- .typing-cursor {
649
- display: inline-block;
650
- width: 2px;
651
- height: 1em;
652
- background: var(--accent-cyan);
653
- margin-left: 2px;
654
- vertical-align: text-bottom;
655
- animation: blink 1s step-end infinite;
656
- box-shadow: 0 0 4px var(--accent-cyan);
657
- }
658
- @keyframes blink {
659
- 0%, 100% { opacity: 1; }
660
- 50% { opacity: 0; }
661
- }
662
-
663
- /* ── Floating Prompt Bar ──────────────────────────────────────────── */
664
- .prompt-wrap {
665
- position: fixed;
666
- bottom: 28px;
667
- left: calc(50% - 370px);
668
- right: calc(50% - 370px);
669
- z-index: 20;
670
- display: flex;
671
- justify-content: center;
672
- }
673
-
674
- .prompt-bar {
675
- width: 100%;
676
- max-width: 720px;
677
- display: flex;
678
- align-items: center;
679
- gap: 12px;
680
- background: rgba(255,255,255,0.05);
681
- backdrop-filter: blur(32px) saturate(200%);
682
- -webkit-backdrop-filter: blur(32px) saturate(200%);
683
- border: 1px solid rgba(255,255,255,0.12);
684
- border-radius: 99px;
685
- padding: 12px 16px;
686
- box-shadow:
687
- 0 0 0 1px rgba(0,212,255,0.08),
688
- 0 8px 40px rgba(0,0,0,0.6),
689
- 0 0 60px rgba(0,212,255,0.04),
690
- inset 0 1px 0 rgba(255,255,255,0.08);
691
- transition: border-color 0.3s, box-shadow 0.3s;
692
- cursor: text;
693
- }
694
-
695
- .prompt-bar:focus-within {
696
- border-color: rgba(0,212,255,0.3);
697
- box-shadow:
698
- 0 0 0 1px rgba(0,212,255,0.15),
699
- 0 8px 40px rgba(0,0,0,0.6),
700
- 0 0 80px rgba(0,212,255,0.08),
701
- inset 0 1px 0 rgba(255,255,255,0.1);
702
- }
703
-
704
- .prompt-icon {
705
- color: var(--accent-cyan);
706
- opacity: 0.7;
707
- flex-shrink: 0;
708
- display: flex;
709
- align-items: center;
710
- filter: drop-shadow(0 0 4px var(--accent-cyan));
711
- }
712
-
713
- .prompt-bar input {
714
- flex: 1;
715
- background: transparent;
716
- border: none;
717
- outline: none;
718
- color: var(--text);
719
- font-family: var(--font);
720
- font-size: 14px;
721
- letter-spacing: 0.01em;
722
- caret-color: var(--accent-cyan);
723
- }
724
-
725
- .prompt-bar input::placeholder {
726
- color: var(--text-dim);
727
- }
728
-
729
- .send-btn {
730
- background: rgba(0,212,255,0.12);
731
- border: 1px solid rgba(0,212,255,0.2);
732
- border-radius: 50%;
733
- width: 32px;
734
- height: 32px;
735
- display: flex;
736
- align-items: center;
737
- justify-content: center;
738
- color: var(--accent-cyan);
739
- cursor: pointer;
740
- flex-shrink: 0;
741
- transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
742
- }
743
-
744
- .send-btn:hover {
745
- background: rgba(0,212,255,0.22);
746
- box-shadow: 0 0 16px rgba(0,212,255,0.25);
747
- transform: scale(1.05);
748
- }
749
-
750
- .send-btn:active {
751
- transform: scale(0.95);
752
- }
753
-
754
- /* ── Thinking Bubble ──────────────────────────────────────────────── */
755
- .thinking-bubble {
756
- background: rgba(0,212,255,0.04) !important;
757
- border-color: rgba(0,212,255,0.15) !important;
758
- padding: 10px 16px !important;
759
- }
760
-
761
- .think-header {
762
- display: flex;
763
- align-items: center;
764
- gap: 10px;
765
- margin-bottom: 8px;
766
- }
767
-
768
- .think-badge {
769
- font-family: var(--font-mono);
770
- font-size: 9px;
771
- font-weight: 700;
772
- letter-spacing: 0.15em;
773
- color: var(--accent-cyan);
774
- text-shadow: 0 0 8px var(--accent-cyan);
775
- }
776
-
777
- .think-dots span {
778
- display: inline-block;
779
- color: var(--accent-cyan);
780
- animation: dot-pulse 1.2s ease-in-out infinite;
781
- font-size: 14px;
782
- opacity: 0;
783
- }
784
- .think-dots span:nth-child(1) { animation-delay: 0s; }
785
- .think-dots span:nth-child(2) { animation-delay: 0.2s; }
786
- .think-dots span:nth-child(3) { animation-delay: 0.4s; }
787
-
788
- @keyframes dot-pulse {
789
- 0%, 100% { opacity: 0; transform: translateY(0); }
790
- 50% { opacity: 1; transform: translateY(-3px); }
791
- }
792
-
793
- .think-bar-wrap {
794
- height: 2px;
795
- background: rgba(255,255,255,0.06);
796
- border-radius: 99px;
797
- overflow: hidden;
798
- }
799
-
800
- .think-bar {
801
- height: 100%;
802
- width: 0%;
803
- background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
804
- border-radius: 99px;
805
- animation: think-scan 1s ease-in-out infinite;
806
- }
807
-
808
- @keyframes think-scan {
809
- 0% { width: 0%; margin-left: 0%; opacity: 1; }
810
- 50% { width: 60%; margin-left: 20%; opacity: 1; }
811
- 100% { width: 0%; margin-left: 100%; opacity: 0; }
812
- }
813
-
814
- /* ── Streaming Bubble ─────────────────────────────────────────────── */
815
- .stream-bubble {
816
- position: relative;
817
- }
818
-
819
- .stream-bubble.streaming {
820
- width: 100% !important;
821
- border-color: rgba(0,212,255,0.25) !important;
822
- box-shadow:
823
- 0 8px 32px rgba(0,0,0,0.5),
824
- 0 0 20px rgba(0,212,255,0.06),
825
- inset 0 1px 0 rgba(255,255,255,0.06) !important;
826
- animation: stream-pulse 1.8s ease-in-out infinite;
827
- }
828
-
829
- @keyframes stream-pulse {
830
- 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); }
831
- 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); }
832
- }
833
-
834
- .stream-bubble.streaming::after {
835
- content: '';
836
- position: absolute;
837
- top: 0; left: 0; right: 0;
838
- height: 1px;
839
- background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
840
- opacity: 0.6;
841
- animation: top-scan 2s linear infinite;
842
- }
843
-
844
- @keyframes top-scan {
845
- 0% { transform: scaleX(0); transform-origin: left; opacity: 0.8; }
846
- 50% { transform: scaleX(1); transform-origin: left; opacity: 0.6; }
847
- 100% { transform: scaleX(0); transform-origin: right; opacity: 0; }
848
- }
849
-
850
- .stream-bubble.done {
851
- width: fit-content;
852
- max-width: 100%;
853
- border-color: rgba(255,255,255,0.1) !important;
854
- transition: border-color 0.8s, box-shadow 0.8s, width 0.3s ease;
855
- }
856
-
857
- /* ── Character spawn animation ────────────────────────────────────── */
858
- .char-spawn {
859
- display: inline;
860
- color: transparent;
861
- text-shadow: none;
862
- transition: color 0.12s ease, text-shadow 0.2s ease;
863
- }
864
-
865
- .char-spawn.char-visible {
866
- color: var(--text);
867
- text-shadow: 0 0 8px rgba(0,212,255,0.4);
868
- animation: char-settle 0.4s ease forwards;
869
- }
870
-
871
- @keyframes char-settle {
872
- 0% { color: var(--accent-cyan); text-shadow: 0 0 12px var(--accent-cyan), 0 0 24px rgba(0,212,255,0.3); }
873
- 40% { color: rgba(200,240,255,0.95); text-shadow: 0 0 6px rgba(0,212,255,0.2); }
874
- 100% { color: var(--text); text-shadow: none; }
875
- }
876
-
877
- /* ── Telemetry footer ─────────────────────────────────────────────── */
878
- .telemetry {
879
- display: flex;
880
- align-items: center;
881
- gap: 6px;
882
- margin-top: 10px;
883
- padding-top: 8px;
884
- border-top: 1px solid rgba(255,255,255,0.05);
885
- opacity: 0;
886
- transform: translateY(4px);
887
- transition: opacity 0.5s ease 0.2s, transform 0.5s ease 0.2s;
888
- }
889
-
890
- .telemetry.tele-visible {
891
- opacity: 1;
892
- transform: translateY(0);
893
- }
894
-
895
- .tele-item {
896
- font-family: var(--font-mono);
897
- font-size: 9px;
898
- color: var(--text-dim);
899
- letter-spacing: 0.06em;
900
- }
901
-
902
- .tele-sep {
903
- color: rgba(255,255,255,0.12);
904
- font-size: 9px;
905
- }
906
-
907
- /* ── Send button loading state ────────────────────────────────────── */
908
- .send-btn.btn-loading {
909
- animation: btn-spin 1s linear infinite;
910
- }
911
- @keyframes btn-spin {
912
- to { transform: rotate(360deg); }
913
- }
914
-
915
- /* ── Connection status ────────────────────────────────────────────── */
916
- .conn-status {
917
- position: fixed;
918
- top: 16px;
919
- left: 50%;
920
- transform: translateX(-50%);
921
- z-index: 30;
922
- display: flex;
923
- align-items: center;
924
- gap: 7px;
925
- background: var(--glass-bg);
926
- backdrop-filter: var(--blur);
927
- -webkit-backdrop-filter: var(--blur);
928
- border: 1px solid var(--glass-border);
929
- border-radius: 99px;
930
- padding: 5px 12px;
931
- pointer-events: none;
932
- }
933
-
934
- .conn-label {
935
- font-family: var(--font-mono);
936
- font-size: 9px;
937
- letter-spacing: 0.1em;
938
- color: var(--text-dim);
939
- }
940
-
941
- .dot-red { background: #f87171; box-shadow: 0 0 6px #f87171; }
942
-
943
- /* ── UI Toggle button ─────────────────────────────────────────────── */
944
- .ui-toggle {
945
- position: fixed;
946
- top: 16px;
947
- right: 24px;
948
- z-index: 30;
949
- display: flex;
950
- align-items: center;
951
- gap: 7px;
952
- background: var(--glass-bg);
953
- backdrop-filter: var(--blur);
954
- -webkit-backdrop-filter: var(--blur);
955
- border: 1px solid var(--glass-border);
956
- border-radius: 99px;
957
- padding: 6px 14px;
958
- color: var(--text-muted);
959
- font-size: 11px;
960
- font-family: var(--font-mono);
961
- letter-spacing: 0.05em;
962
- text-decoration: none;
963
- transition: border-color 0.2s, color 0.2s, box-shadow 0.2s;
964
- }
965
-
966
- .ui-toggle:hover {
967
- border-color: var(--glass-border-strong);
968
- color: var(--text);
969
- box-shadow: 0 0 16px rgba(0,212,255,0.08);
970
- }
971
-
972
- /* ── Scrollbar ────────────────────────────────────────────────────── */
973
- .response-area::-webkit-scrollbar { display: none; }
974
- .response-area { scrollbar-width: none; }
975
-
976
- /* ═══════════════════════════════════════════════════════════════════
977
- CONTENT TYPES — Markdown, Thinking, Tool Cards, Code
978
- ═══════════════════════════════════════════════════════════════════ */
979
-
980
- /* ── Markdown prose ────────────────────────────────────────────────── */
981
- .msg-text {
982
- font-size: 14.5px;
983
- line-height: 1.75;
984
- color: var(--text);
985
- word-wrap: break-word;
986
- overflow-wrap: anywhere;
987
- word-break: break-word;
988
- }
989
-
990
- /* Paragraph spacing */
991
- .msg-text :where(p, ul, ol, pre, blockquote, table) { margin: 0; }
992
- .msg-text :where(p + p,
993
- p + ul, p + ol, p + pre, p + blockquote, p + table,
994
- ul + p, ol + p, pre + p, blockquote + p, table + p) { margin-top: 0.75em; }
995
- .msg-text :where(li + li) { margin-top: 0.25em; }
996
-
997
- /* Headings */
998
- .msg-text :where(h1, h2, h3, h4, h5, h6) {
999
- font-weight: 600;
1000
- line-height: 1.3;
1001
- color: rgba(255,255,255,0.96);
1002
- margin: 1.1em 0 0.4em;
1003
- }
1004
- .msg-text :where(h1) { font-size: 1.35em; border-bottom: 1px solid var(--glass-border); padding-bottom: 0.3em; }
1005
- .msg-text :where(h2) { font-size: 1.18em; border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 0.2em; }
1006
- .msg-text :where(h3) { font-size: 1.06em; }
1007
- .msg-text :where(h4, h5, h6) { font-size: 1em; color: rgba(255,255,255,0.8); }
1008
- .msg-text :where(h1, h2, h3, h4, h5, h6):first-child { margin-top: 0.3em; }
1009
-
1010
- /* Lists */
1011
- .msg-text :where(ul, ol) { padding-left: 1.4em; }
1012
- .msg-text :where(ul) { list-style-type: disc; }
1013
- .msg-text :where(ol) { list-style-type: decimal; }
1014
- .msg-text :where(ul ul) { list-style-type: circle; margin-top: 0.25em; }
1015
-
1016
- /* Text formatting */
1017
- .msg-text :where(strong) { font-weight: 600; color: rgba(255,255,255,0.97); }
1018
- .msg-text :where(em) { font-style: italic; color: rgba(255,255,255,0.82); }
1019
- .msg-text :where(del) { text-decoration: line-through; opacity: 0.6; }
1020
- .msg-text :where(mark) { background: rgba(251,191,36,0.2); color: #fbbf24; border-radius: 2px; padding: 0 3px; }
1021
- .msg-text :where(sup) { font-size: 0.75em; vertical-align: super; }
1022
- .msg-text :where(sub) { font-size: 0.75em; vertical-align: sub; }
1023
-
1024
- /* Links */
1025
- .msg-text :where(a) { color: var(--accent-cyan); text-decoration: none; border-bottom: 1px solid rgba(0,212,255,0.3); }
1026
- .msg-text :where(a:hover) { border-bottom-color: var(--accent-cyan); }
1027
-
1028
- /* Horizontal rule */
1029
- .msg-text :where(hr) {
1030
- border: none;
1031
- border-top: 1px solid var(--glass-border);
1032
- margin: 1em 0;
1033
- }
1034
-
1035
- /* Blockquote */
1036
- .msg-text :where(blockquote) {
1037
- border-left: 2px solid rgba(0,212,255,0.3);
1038
- margin: 0.6em 0;
1039
- padding: 6px 14px;
1040
- background: rgba(0,212,255,0.03);
1041
- color: var(--text-muted);
1042
- border-radius: 0 6px 6px 0;
1043
- }
1044
- .msg-text :where(blockquote blockquote) {
1045
- border-left-color: rgba(139,92,246,0.4);
1046
- background: rgba(139,92,246,0.03);
1047
- margin-top: 6px;
1048
- }
1049
-
1050
- /* ── Tables ─────────────────────────────────────────────────────────── */
1051
- .msg-text :where(table) {
1052
- width: 100%;
1053
- border-collapse: collapse;
1054
- font-size: 13px;
1055
- margin-top: 0.75em;
1056
- border: 1px solid var(--glass-border);
1057
- border-radius: 8px;
1058
- overflow: hidden;
1059
- }
1060
-
1061
- .msg-text :where(thead) {
1062
- background: rgba(0,212,255,0.06);
1063
- }
1064
-
1065
- .msg-text :where(th) {
1066
- font-family: var(--font-mono);
1067
- font-size: 10.5px;
1068
- font-weight: 600;
1069
- letter-spacing: 0.08em;
1070
- text-transform: uppercase;
1071
- color: var(--accent-cyan);
1072
- border: 1px solid var(--glass-border);
1073
- padding: 8px 12px;
1074
- text-align: left;
1075
- background: rgba(0,0,0,0.15);
1076
- }
1077
-
1078
- .msg-text :where(td) {
1079
- border: 1px solid var(--glass-border);
1080
- padding: 7px 12px;
1081
- vertical-align: top;
1082
- color: var(--text);
1083
- line-height: 1.5;
1084
- }
1085
-
1086
- .msg-text :where(tr:nth-child(even) td) {
1087
- background: rgba(255,255,255,0.015);
1088
- }
1089
-
1090
- .msg-text :where(tr:hover td) {
1091
- background: rgba(0,212,255,0.03);
1092
- }
1093
-
1094
- /* ── Inline code ────────────────────────────────────────────────────── */
1095
- .inline-code,
1096
- .msg-text :where(:not(pre) > code) {
1097
- font-family: var(--font-mono);
1098
- font-size: 0.875em;
1099
- background: rgba(255,255,255,0.08);
1100
- border: 1px solid rgba(255,255,255,0.1);
1101
- border-radius: 4px;
1102
- padding: 0.1em 0.4em;
1103
- color: var(--accent-cyan);
1104
- }
1105
-
1106
- /* ── Code blocks — full-featured ────────────────────────────────────── */
1107
- .code-block {
1108
- margin: 0.75em 0;
1109
- border: 1px solid var(--glass-border);
1110
- border-radius: 10px;
1111
- overflow: hidden;
1112
- background: rgba(0,0,0,0.45);
1113
- font-family: var(--font-mono);
1114
- }
1115
-
1116
- /* Full-width breakout — code gets the whole column regardless of bubble */
1117
- .code-block-full {
1118
- width: 100%;
1119
- max-width: 100%;
1120
- }
1121
-
1122
- /* ── Header ── */
1123
- .code-header {
1124
- display: flex;
1125
- align-items: center;
1126
- justify-content: space-between;
1127
- padding: 7px 12px;
1128
- background: rgba(255,255,255,0.04);
1129
- border-bottom: 1px solid var(--glass-border);
1130
- gap: 10px;
1131
- }
1132
-
1133
- .code-header-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
1134
- .code-header-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
1135
-
1136
- /* Language badge with per-language color */
1137
- .code-lang-badge {
1138
- font-family: var(--font-mono);
1139
- font-size: 10px;
1140
- font-weight: 700;
1141
- letter-spacing: 0.06em;
1142
- text-transform: uppercase;
1143
- color: var(--lang-color, var(--accent-cyan));
1144
- display: flex;
1145
- align-items: center;
1146
- gap: 2px;
1147
- flex-shrink: 0;
1148
- text-shadow: 0 0 8px var(--lang-color, var(--accent-cyan));
1149
- }
1150
-
1151
- /* Filename */
1152
- .code-filename {
1153
- font-family: var(--font-mono);
1154
- font-size: 11px;
1155
- color: var(--text-muted);
1156
- background: rgba(255,255,255,0.05);
1157
- border: 1px solid var(--glass-border);
1158
- border-radius: 4px;
1159
- padding: 1px 7px;
1160
- white-space: nowrap;
1161
- overflow: hidden;
1162
- text-overflow: ellipsis;
1163
- max-width: 200px;
1164
- }
1165
-
1166
- /* Line count */
1167
- .code-lines-count {
1168
- font-family: var(--font-mono);
1169
- font-size: 9.5px;
1170
- color: var(--text-dim);
1171
- white-space: nowrap;
1172
- }
1173
-
1174
- /* Expand button */
1175
- .code-expand-btn {
1176
- font-size: 14px;
1177
- background: transparent;
1178
- border: none;
1179
- color: var(--text-dim);
1180
- cursor: pointer;
1181
- padding: 0 4px;
1182
- line-height: 1;
1183
- transition: color 0.2s;
1184
- }
1185
- .code-expand-btn:hover { color: var(--text); }
1186
-
1187
- /* Copy button */
1188
- .code-copy {
1189
- display: flex;
1190
- align-items: center;
1191
- gap: 5px;
1192
- font-family: var(--font-mono);
1193
- font-size: 10px;
1194
- color: var(--text-dim);
1195
- background: transparent;
1196
- border: none;
1197
- cursor: pointer;
1198
- padding: 3px 8px;
1199
- border-radius: 4px;
1200
- transition: color 0.2s, background 0.2s;
1201
- white-space: nowrap;
1202
- }
1203
- .code-copy:hover { color: var(--text); background: rgba(255,255,255,0.06); }
1204
- .code-copy.copied { color: var(--accent-green); }
1205
-
1206
- /* ── Code body ── */
1207
- .code-body { overflow: hidden; }
1208
- .code-body-collapsed { max-height: 400px; overflow: hidden; position: relative; }
1209
- .code-body-collapsed::after {
1210
- content: '';
1211
- position: absolute;
1212
- bottom: 0; left: 0; right: 0;
1213
- height: 80px;
1214
- background: linear-gradient(to bottom, transparent, rgba(0,0,0,0.8));
1215
- pointer-events: none;
1216
- }
1217
- .code-expanded .code-body-collapsed { max-height: none; overflow: auto; }
1218
- .code-expanded .code-body-collapsed::after { display: none; }
1219
-
1220
- /* Show more button */
1221
- .code-show-more {
1222
- display: block;
1223
- width: 100%;
1224
- padding: 8px;
1225
- background: rgba(255,255,255,0.03);
1226
- border: none;
1227
- border-top: 1px solid var(--glass-border);
1228
- color: var(--text-dim);
1229
- font-family: var(--font-mono);
1230
- font-size: 10px;
1231
- cursor: pointer;
1232
- letter-spacing: 0.06em;
1233
- transition: background 0.2s, color 0.2s;
1234
- text-align: center;
1235
- }
1236
- .code-show-more:hover { background: rgba(255,255,255,0.06); color: var(--text); }
1237
-
1238
- /* ── Line numbers ── */
1239
- .code-pre {
1240
- margin: 0;
1241
- padding: 12px 0;
1242
- overflow-x: auto;
1243
- font-size: 12.5px;
1244
- line-height: 1.65;
1245
- }
1246
-
1247
- .code-numbered { display: block; }
1248
-
1249
- .code-line {
1250
- display: flex;
1251
- min-height: 1.65em;
1252
- }
1253
-
1254
- .code-line:hover { background: rgba(255,255,255,0.03); }
1255
-
1256
- .line-num {
1257
- display: inline-block;
1258
- min-width: 44px;
1259
- padding: 0 12px 0 14px;
1260
- color: rgba(255,255,255,0.2);
1261
- text-align: right;
1262
- user-select: none;
1263
- border-right: 1px solid rgba(255,255,255,0.06);
1264
- flex-shrink: 0;
1265
- font-size: 11px;
1266
- line-height: inherit;
1267
- }
1268
-
1269
- .line-content {
1270
- display: inline-block;
1271
- padding: 0 16px;
1272
- white-space: pre;
1273
- flex: 1;
1274
- }
1275
-
1276
- .hljs { background: transparent !important; padding: 0 !important; }
1277
-
1278
- /* ── Thinking block ─────────────────────────────────────────────────── */
1279
- .msg-thinking { margin: 4px 0 8px; }
1280
-
1281
- .thinking-toggle {
1282
- display: flex;
1283
- align-items: center;
1284
- gap: 7px;
1285
- background: transparent;
1286
- border: none;
1287
- cursor: pointer;
1288
- padding: 4px 0;
1289
- color: var(--text-dim);
1290
- font-size: 11px;
1291
- font-family: var(--font-mono);
1292
- letter-spacing: 0.05em;
1293
- transition: color 0.2s;
1294
- }
1295
- .thinking-toggle:hover { color: var(--text-muted); }
1296
- .thinking-icon { color: var(--accent-purple); }
1297
- .thinking-chevron { font-size: 9px; transition: transform 0.2s; }
1298
-
1299
- .thinking-body {
1300
- max-height: 0;
1301
- overflow: hidden;
1302
- transition: max-height 0.35s ease;
1303
- }
1304
- .thinking-body.thinking-open { max-height: 600px; overflow-y: auto; }
1305
-
1306
- .thinking-text {
1307
- margin-top: 6px;
1308
- padding: 10px 14px;
1309
- border: 1px dashed rgba(139,92,246,0.25);
1310
- border-radius: 8px;
1311
- background: rgba(139,92,246,0.04);
1312
- font-size: 12px;
1313
- line-height: 1.65;
1314
- color: var(--text-muted);
1315
- white-space: pre-wrap;
1316
- font-family: var(--font-mono);
1317
- }
1318
-
1319
- /* ── Tool call card ─────────────────────────────────────────────────── */
1320
- .msg-tool-card {
1321
- margin: 4px 0;
1322
- border: 1px solid var(--glass-border);
1323
- border-radius: 8px;
1324
- overflow: hidden;
1325
- background: rgba(255,255,255,0.02);
1326
- }
1327
-
1328
- .tool-header {
1329
- display: flex;
1330
- align-items: center;
1331
- gap: 8px;
1332
- width: 100%;
1333
- padding: 8px 12px;
1334
- background: transparent;
1335
- border: none;
1336
- cursor: pointer;
1337
- text-align: left;
1338
- color: var(--text-muted);
1339
- font-size: 12px;
1340
- transition: background 0.2s;
1341
- }
1342
- .tool-header:hover { background: rgba(255,255,255,0.03); }
1343
- .tool-icon { font-size: 13px; flex-shrink: 0; }
1344
- .tool-name { flex: 1; font-family: var(--font-mono); font-size: 11px; color: var(--text); }
1345
- .tool-chevron { font-size: 9px; color: var(--text-dim); }
1346
-
1347
- .tool-body {
1348
- max-height: 0;
1349
- overflow: hidden;
1350
- transition: max-height 0.3s ease;
1351
- border-top: 0 solid var(--glass-border);
1352
- }
1353
- .tool-body.tool-open { max-height: 320px; overflow-y: auto; border-top-width: 1px; }
1354
-
1355
- .tool-input {
1356
- margin: 0;
1357
- padding: 10px 14px;
1358
- font-family: var(--font-mono);
1359
- font-size: 11.5px;
1360
- line-height: 1.5;
1361
- color: var(--text-muted);
1362
- white-space: pre-wrap;
1363
- word-break: break-all;
1364
- background: rgba(0,0,0,0.25);
1365
- }
1366
-
1367
- /* ── Tool result ────────────────────────────────────────────────────── */
1368
- .msg-tool-result {
1369
- margin: 2px 0 6px;
1370
- border: 1px solid rgba(52,211,153,0.14);
1371
- border-radius: 8px;
1372
- overflow: hidden;
1373
- background: rgba(52,211,153,0.02);
1374
- }
1375
-
1376
- .result-header {
1377
- display: flex;
1378
- align-items: center;
1379
- gap: 8px;
1380
- padding: 6px 12px;
1381
- font-size: 11px;
1382
- color: var(--text-dim);
1383
- }
1384
- .result-icon { color: var(--accent-green); font-size: 12px; }
1385
- .result-label { font-family: var(--font-mono); letter-spacing: 0.06em; flex: 1; }
1386
-
1387
- .result-expand {
1388
- font-family: var(--font-mono);
1389
- font-size: 9px;
1390
- background: transparent;
1391
- border: 1px solid var(--glass-border);
1392
- border-radius: 4px;
1393
- color: var(--text-dim);
1394
- cursor: pointer;
1395
- padding: 2px 8px;
1396
- transition: color 0.2s;
1397
- }
1398
- .result-expand:hover { color: var(--text); }
1399
-
1400
- .result-preview { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; border-top: 0 solid rgba(52,211,153,0.14); }
1401
- .result-open { max-height: 260px; overflow-y: auto; border-top-width: 1px; }
1402
-
1403
- .result-text {
1404
- margin: 0;
1405
- padding: 8px 14px;
1406
- font-family: var(--font-mono);
1407
- font-size: 11.5px;
1408
- line-height: 1.5;
1409
- color: var(--text-muted);
1410
- white-space: pre-wrap;
1411
- word-break: break-all;
1412
- background: rgba(0,0,0,0.2);
1413
- }
1414
-
1415
- /* ── Message image ──────────────────────────────────────────────────── */
1416
- .msg-image img {
1417
- max-width: 100%;
1418
- border-radius: 8px;
1419
- border: 1px solid var(--glass-border);
1420
- margin: 4px 0;
1421
- }
1422
-
1423
- /* ── Copy button ────────────────────────────────────────────────────── */
1424
- .msg-copy-btn {
1425
- position: absolute;
1426
- top: 8px;
1427
- right: 8px;
1428
- background: rgba(255,255,255,0.06);
1429
- border: 1px solid var(--glass-border);
1430
- border-radius: 6px;
1431
- color: var(--text-dim);
1432
- cursor: pointer;
1433
- padding: 5px 6px;
1434
- opacity: 0;
1435
- transition: opacity 0.2s, color 0.2s, background 0.2s;
1436
- display: flex;
1437
- align-items: center;
1438
- line-height: 1;
1439
- }
1440
- .stream-bubble:hover .msg-copy-btn,
1441
- .msg-copy-visible { opacity: 1; }
1442
- .msg-copy-btn:hover { color: var(--text); background: rgba(255,255,255,0.1); }
1443
- .msg-copy-btn.copied { color: var(--accent-green); }
1444
-
1445
- /* ── Timestamp ──────────────────────────────────────────────────────── */
1446
- .msg-timestamp {
1447
- font-family: var(--font-mono);
1448
- font-size: 9.5px;
1449
- color: var(--text-dim);
1450
- margin-top: 10px;
1451
- letter-spacing: 0.05em;
1452
- }
1453
-
1454
-
1455
- /* ── Task lists ─────────────────────────────────────────────────────── */
1456
- .msg-text :where(li.task-item) {
1457
- list-style: none;
1458
- margin-left: -1.4em;
1459
- padding-left: 0.2em;
1460
- display: flex;
1461
- align-items: baseline;
1462
- gap: 7px;
1463
- }
1464
-
1465
- .task-cb {
1466
- appearance: none;
1467
- -webkit-appearance: none;
1468
- width: 14px;
1469
- height: 14px;
1470
- border: 1.5px solid var(--glass-border-strong);
1471
- border-radius: 3px;
1472
- background: transparent;
1473
- flex-shrink: 0;
1474
- position: relative;
1475
- top: 2px;
1476
- cursor: default;
1477
- }
1478
-
1479
- .task-cb:checked {
1480
- background: var(--accent-cyan);
1481
- border-color: var(--accent-cyan);
1482
- }
1483
-
1484
- .task-cb:checked::after {
1485
- content: '';
1486
- position: absolute;
1487
- top: 1px; left: 3px;
1488
- width: 5px; height: 8px;
1489
- border: 2px solid #000;
1490
- border-top: none;
1491
- border-left: none;
1492
- transform: rotate(45deg);
1493
- }
1494
-
1495
- .task-done > * { opacity: 0.55; }
1496
- .task-done .task-cb + span,
1497
- .task-done .task-cb ~ * { text-decoration: line-through; }
1498
-
1499
- /* ── Table overflow wrapper ──────────────────────────────────────────── */
1500
- .msg-text :where(table) {
1501
- display: block;
1502
- overflow-x: auto;
1503
- white-space: nowrap;
1504
- }
1505
- /* Allow cells to wrap when content isn't too wide */
1506
- .msg-text :where(th, td) {
1507
- white-space: normal;
1508
- min-width: 80px;
1509
- }
1510
-
1511
- /* ── Details / Summary (collapsible sections) ─────────────────────────── */
1512
- .msg-text :where(details) {
1513
- border: 1px solid var(--glass-border);
1514
- border-radius: 8px;
1515
- padding: 0;
1516
- margin: 0.6em 0;
1517
- overflow: hidden;
1518
- background: rgba(255,255,255,0.02);
1519
- }
1520
-
1521
- .msg-text :where(summary) {
1522
- padding: 8px 14px;
1523
- cursor: pointer;
1524
- font-weight: 600;
1525
- font-size: 13px;
1526
- color: var(--text-muted);
1527
- list-style: none;
1528
- display: flex;
1529
- align-items: center;
1530
- gap: 8px;
1531
- user-select: none;
1532
- transition: background 0.2s;
1533
- }
1534
- .msg-text :where(summary):hover { background: rgba(255,255,255,0.03); }
1535
- .msg-text :where(summary)::before {
1536
- content: '▸';
1537
- font-size: 9px;
1538
- color: var(--accent-cyan);
1539
- transition: transform 0.2s;
1540
- }
1541
- .msg-text :where(details[open] summary)::before {
1542
- transform: rotate(90deg);
1543
- }
1544
- .msg-text :where(details) > *:not(summary) {
1545
- padding: 0 14px 10px;
1546
- }
1547
-
1548
- /* ── Spacing improvements ────────────────────────────────────────────── */
1549
- .bubble-content + .bubble-content { margin-top: 0.5em; }
1550
-
1551
- .msg-text :where(h1 + p, h2 + p, h3 + p) { margin-top: 0.4em; }
1552
- .msg-text :where(p:last-child, ul:last-child, ol:last-child) { margin-bottom: 0; }
1553
-
1554
- /* Separator after heading when followed by block content */
1555
- .msg-text :where(h2, h3) {
1556
- padding-top: 0.3em;
1557
- }
1558
-
1559
- /* Better nested list indent */
1560
- .msg-text :where(ul ul, ol ol, ul ol, ol ul) {
1561
- margin-top: 0.25em;
1562
- margin-bottom: 0.25em;
1563
- padding-left: 1.2em;
1564
- }
1565
-
1566
- /* ── Keyboard shortcut styling ───────────────────────────────────────── */
1567
- .msg-text :where(kbd) {
1568
- font-family: var(--font-mono);
1569
- font-size: 0.8em;
1570
- background: rgba(255,255,255,0.1);
1571
- border: 1px solid rgba(255,255,255,0.2);
1572
- border-bottom: 2px solid rgba(255,255,255,0.15);
1573
- border-radius: 4px;
1574
- padding: 1px 5px;
1575
- color: var(--text);
1576
- }
1577
-
1578
- /* ── Abbr tooltip ────────────────────────────────────────────────────── */
1579
- .msg-text :where(abbr[title]) {
1580
- border-bottom: 1px dotted var(--text-muted);
1581
- cursor: help;
1582
- text-decoration: none;
1583
- }
1584
-
1585
- /* ── Scrollbar ────────────────────────────────────────────────────── */
1586
- .response-area::-webkit-scrollbar { display: none; }
1587
- .response-area { scrollbar-width: none; }
1588
-
1589
- /* ══════════════════════════════════════════════════════════════════════
1590
- COMMAND MENU SYSTEM
1591
- ══════════════════════════════════════════════════════════════════════ */
1592
-
1593
- /* ── Group accent colours ─────────────────────────────────────────── */
1594
- :root {
1595
- --cmd-chat: #00d4ff;
1596
- --cmd-control: #60a5fa;
1597
- --cmd-agent: #a78bfa;
1598
- --cmd-settings: #f59e0b;
1599
- --cmd-resources: #34d399;
1600
- }
1601
-
1602
- /* ── Menu Trigger Button ──────────────────────────────────────────── */
1603
- .menu-trigger {
1604
- position: fixed;
1605
- top: 20px;
1606
- left: 20px;
1607
- z-index: 50;
1608
- width: 38px;
1609
- height: 38px;
1610
- display: flex;
1611
- align-items: center;
1612
- justify-content: center;
1613
- background: var(--glass-bg);
1614
- backdrop-filter: var(--blur);
1615
- -webkit-backdrop-filter: var(--blur);
1616
- border: 1px solid var(--glass-border);
1617
- border-radius: 10px;
1618
- color: var(--text-muted);
1619
- cursor: pointer;
1620
- transition: color 0.2s, border-color 0.2s, box-shadow 0.2s, transform 0.2s;
1621
- }
1622
- .menu-trigger:hover {
1623
- color: var(--accent-cyan);
1624
- border-color: rgba(0,212,255,0.35);
1625
- box-shadow: 0 0 12px rgba(0,212,255,0.15);
1626
- }
1627
- .menu-trigger:active { transform: scale(0.93); }
1628
-
1629
- /* Icon swap: grid → close */
1630
- .menu-icon-close { display: none; }
1631
- .menu-trigger.menu-open .menu-icon-grid { display: none; }
1632
- .menu-trigger.menu-open .menu-icon-close { display: block; color: var(--accent-cyan); }
1633
- .menu-trigger.menu-open {
1634
- color: var(--accent-cyan);
1635
- border-color: rgba(0,212,255,0.4);
1636
- box-shadow: 0 0 16px rgba(0,212,255,0.2);
1637
- }
1638
-
1639
- /* ── Full-Screen Overlay ──────────────────────────────────────────── */
1640
- .cmd-overlay {
1641
- position: fixed;
1642
- inset: 0;
1643
- z-index: 40;
1644
- display: flex;
1645
- align-items: center;
1646
- justify-content: center;
1647
- /* Hidden state */
1648
- opacity: 0;
1649
- pointer-events: none;
1650
- transform: scale(0.97);
1651
- transition: opacity 0.28s ease, transform 0.28s ease;
1652
- }
1653
- .cmd-overlay.open {
1654
- opacity: 1;
1655
- pointer-events: auto;
1656
- transform: scale(1);
1657
- }
1658
-
1659
- /* Dark glass backdrop */
1660
- .cmd-backdrop {
1661
- position: absolute;
1662
- inset: 0;
1663
- background: rgba(6, 8, 14, 0.9);
1664
- backdrop-filter: blur(24px);
1665
- -webkit-backdrop-filter: blur(24px);
1666
- }
1667
-
1668
- /* Shell (content on top of backdrop) */
1669
- .cmd-shell {
1670
- position: relative;
1671
- z-index: 1;
1672
- width: 100%;
1673
- max-width: 1080px;
1674
- padding: 0 32px;
1675
- display: flex;
1676
- flex-direction: column;
1677
- gap: 24px;
1678
- }
1679
-
1680
- /* ── Header Bar ───────────────────────────────────────────────────── */
1681
- .cmd-header {
1682
- display: flex;
1683
- align-items: center;
1684
- justify-content: space-between;
1685
- padding-bottom: 16px;
1686
- border-bottom: 1px solid var(--glass-border);
1687
- }
1688
- .cmd-brand {
1689
- display: flex;
1690
- align-items: center;
1691
- gap: 10px;
1692
- }
1693
- .cmd-brand-glyph {
1694
- font-size: 22px;
1695
- color: var(--accent-cyan);
1696
- text-shadow: 0 0 12px var(--accent-cyan);
1697
- animation: aso-breathe 3s ease-in-out infinite;
1698
- }
1699
- .cmd-brand-name {
1700
- font-family: var(--font-mono);
1701
- font-size: 18px;
1702
- font-weight: 700;
1703
- color: var(--text);
1704
- letter-spacing: 0.15em;
1705
- }
1706
- .cmd-brand-sep {
1707
- font-size: 16px;
1708
- color: var(--text-dim);
1709
- margin: 0 2px;
1710
- }
1711
- .cmd-brand-sub {
1712
- font-family: var(--font-mono);
1713
- font-size: 11px;
1714
- color: var(--text-dim);
1715
- letter-spacing: 0.22em;
1716
- padding-top: 2px;
1717
- }
1718
- .cmd-esc-hint {
1719
- font-size: 11px;
1720
- color: var(--text-dim);
1721
- display: flex;
1722
- align-items: center;
1723
- gap: 5px;
1724
- }
1725
- .cmd-kbd {
1726
- font-family: var(--font-mono);
1727
- font-size: 10px;
1728
- padding: 2px 6px;
1729
- background: rgba(255,255,255,0.07);
1730
- border: 1px solid rgba(255,255,255,0.12);
1731
- border-radius: 4px;
1732
- color: var(--text-muted);
1733
- }
1734
-
1735
- /* ── Command Grid ─────────────────────────────────────────────────── */
1736
- .cmd-grid {
1737
- display: grid;
1738
- grid-template-columns: 200px 1fr 200px;
1739
- grid-template-rows: auto auto;
1740
- gap: 14px;
1741
- width: 100%;
1742
- }
1743
-
1744
- .cmd-group--chat { grid-column: 1; grid-row: 1 / 3; }
1745
- .cmd-group--control { grid-column: 2; grid-row: 1; }
1746
- .cmd-group--agent { grid-column: 3; grid-row: 1; }
1747
- .cmd-group--settings { grid-column: 2; grid-row: 2; }
1748
- .cmd-group--resources { grid-column: 3; grid-row: 2; }
1749
-
1750
- /* ── Group Card ───────────────────────────────────────────────────── */
1751
- .cmd-group {
1752
- background: var(--glass-bg);
1753
- border: 1px solid var(--glass-border);
1754
- border-radius: 16px;
1755
- padding: 18px;
1756
- display: flex;
1757
- flex-direction: column;
1758
- gap: 14px;
1759
- /* Stagger-reveal when overlay opens */
1760
- opacity: 0;
1761
- transform: translateY(14px);
1762
- transition: border-color 0.25s, box-shadow 0.25s;
1763
- }
1764
- .cmd-overlay.open .cmd-group {
1765
- animation: cmd-card-in 0.32s ease forwards;
1766
- }
1767
- .cmd-overlay.open .cmd-group:nth-child(1) { animation-delay: 30ms; }
1768
- .cmd-overlay.open .cmd-group:nth-child(2) { animation-delay: 80ms; }
1769
- .cmd-overlay.open .cmd-group:nth-child(3) { animation-delay: 130ms; }
1770
- .cmd-overlay.open .cmd-group:nth-child(4) { animation-delay: 180ms; }
1771
- .cmd-overlay.open .cmd-group:nth-child(5) { animation-delay: 230ms; }
1772
-
1773
- @keyframes cmd-card-in {
1774
- from { opacity: 0; transform: translateY(14px); }
1775
- to { opacity: 1; transform: translateY(0); }
1776
- }
1777
-
1778
- /* Per-group accent borders & hover glow */
1779
- .cmd-group--chat:hover { border-color: rgba(0,212,255,0.35); box-shadow: 0 0 20px rgba(0,212,255,0.06); }
1780
- .cmd-group--control:hover { border-color: rgba(96,165,250,0.35); box-shadow: 0 0 20px rgba(96,165,250,0.06); }
1781
- .cmd-group--agent:hover { border-color: rgba(167,139,250,0.35); box-shadow: 0 0 20px rgba(167,139,250,0.06); }
1782
- .cmd-group--settings:hover { border-color: rgba(245,158,11,0.35); box-shadow: 0 0 20px rgba(245,158,11,0.06); }
1783
- .cmd-group--resources:hover { border-color: rgba(52,211,153,0.35); box-shadow: 0 0 20px rgba(52,211,153,0.06); }
1784
-
1785
- /* ── Group Header ─────────────────────────────────────────────────── */
1786
- .cmd-group-hd {
1787
- display: flex;
1788
- align-items: center;
1789
- gap: 9px;
1790
- padding-bottom: 10px;
1791
- border-bottom: 1px solid var(--glass-border);
1792
- }
1793
- .cmd-group-svg {
1794
- width: 16px;
1795
- height: 16px;
1796
- flex-shrink: 0;
1797
- }
1798
- .cmd-group-label {
1799
- font-family: var(--font-mono);
1800
- font-size: 10px;
1801
- font-weight: 700;
1802
- letter-spacing: 0.2em;
1803
- }
1804
-
1805
- /* Accent colours on group labels and icons */
1806
- .cmd-group--chat .cmd-group-hd { color: var(--cmd-chat); }
1807
- .cmd-group--control .cmd-group-hd { color: var(--cmd-control); }
1808
- .cmd-group--agent .cmd-group-hd { color: var(--cmd-agent); }
1809
- .cmd-group--settings .cmd-group-hd { color: var(--cmd-settings); }
1810
- .cmd-group--resources .cmd-group-hd { color: var(--cmd-resources); }
1811
-
1812
- /* ── Items List ───────────────────────────────────────────────────── */
1813
- .cmd-items {
1814
- display: flex;
1815
- flex-direction: column;
1816
- gap: 6px;
1817
- flex: 1;
1818
- }
1819
-
1820
- /* 3-column sub-grid for CONTROL (6 items) */
1821
- .cmd-items--grid {
1822
- display: grid;
1823
- grid-template-columns: 1fr 1fr 1fr;
1824
- gap: 8px;
1825
- }
1826
-
1827
- /* ── Individual Item ──────────────────────────────────────────────── */
1828
- .cmd-item {
1829
- display: flex;
1830
- align-items: center;
1831
- gap: 10px;
1832
- padding: 10px 12px;
1833
- border-radius: 10px;
1834
- border: 1px solid transparent;
1835
- background: rgba(255,255,255,0.025);
1836
- text-decoration: none;
1837
- cursor: pointer;
1838
- transition: background 0.18s, border-color 0.18s, transform 0.15s;
1839
- }
1840
- .cmd-item:hover {
1841
- background: rgba(255,255,255,0.06);
1842
- transform: translateY(-1px);
1843
- }
1844
- /* Per-group item hover accent */
1845
- .cmd-group--chat .cmd-item:hover { border-color: rgba(0,212,255,0.3); }
1846
- .cmd-group--control .cmd-item:hover { border-color: rgba(96,165,250,0.3); }
1847
- .cmd-group--agent .cmd-item:hover { border-color: rgba(167,139,250,0.3); }
1848
- .cmd-group--settings .cmd-item:hover { border-color: rgba(245,158,11,0.3); }
1849
- .cmd-group--resources .cmd-item:hover { border-color: rgba(52,211,153,0.3); }
1850
-
1851
- .cmd-item-icon {
1852
- font-size: 16px;
1853
- flex-shrink: 0;
1854
- width: 20px;
1855
- text-align: center;
1856
- opacity: 0.7;
1857
- }
1858
- .cmd-group--chat .cmd-item-icon { color: var(--cmd-chat); }
1859
- .cmd-group--control .cmd-item-icon { color: var(--cmd-control); }
1860
- .cmd-group--agent .cmd-item-icon { color: var(--cmd-agent); }
1861
- .cmd-group--settings .cmd-item-icon { color: var(--cmd-settings); }
1862
- .cmd-group--resources .cmd-item-icon { color: var(--cmd-resources); }
1863
-
1864
- .cmd-item-body {
1865
- display: flex;
1866
- flex-direction: column;
1867
- gap: 2px;
1868
- min-width: 0;
1869
- flex: 1;
1870
- }
1871
- .cmd-item-name {
1872
- font-family: var(--font-mono);
1873
- font-size: 12px;
1874
- font-weight: 600;
1875
- color: var(--text);
1876
- white-space: nowrap;
1877
- overflow: hidden;
1878
- text-overflow: ellipsis;
1879
- }
1880
- .cmd-item-desc {
1881
- font-size: 10px;
1882
- color: var(--text-dim);
1883
- white-space: nowrap;
1884
- overflow: hidden;
1885
- text-overflow: ellipsis;
1886
- }
1887
- .cmd-item-badge {
1888
- font-family: var(--font-mono);
1889
- font-size: 8px;
1890
- font-weight: 700;
1891
- letter-spacing: 0.1em;
1892
- padding: 2px 6px;
1893
- border-radius: 99px;
1894
- background: rgba(0,212,255,0.12);
1895
- color: var(--accent-cyan);
1896
- border: 1px solid rgba(0,212,255,0.25);
1897
- flex-shrink: 0;
1898
- }