@symerian/symi 2.0.0 → 2.0.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 (383) hide show
  1. package/dist/{accounts-Cd816n6l.js → accounts-DDuIpcln.js} +7 -7
  2. package/dist/{accounts-mN_EcgxC.js → accounts-DyJN4_vR.js} +1 -1
  3. package/dist/{accounts-CokRskCl.js → accounts-bK-Yqdwx.js} +1 -1
  4. package/dist/{acp-cli-o_sLVYUf.js → acp-cli-D54IzOnz.js} +6 -6
  5. package/dist/{agent-scope-BRwEc2pG.js → agent-scope-CgUHAtCo.js} +18 -18
  6. package/dist/{agents-fpLHaNi7.js → agents-DtoHlMPd.js} +4 -4
  7. package/dist/{agents.config-CsSO3wVx.js → agents.config-D42lZLmR.js} +1 -1
  8. package/dist/{agents.config-p7Y2nZHi.js → agents.config-DnUOlYlU.js} +2 -2
  9. package/dist/{api-key-rotation-Dbby3dlf.js → api-key-rotation-Do8JQqVN.js} +1 -1
  10. package/dist/{audio-preflight-79KNH7Tf.js → audio-preflight-CERzpj2b.js} +28 -28
  11. package/dist/{audio-preflight-CUtRpFvu.js → audio-preflight-CfqBC8Jq.js} +4 -4
  12. package/dist/{audit-BUu82PFi.js → audit-D8C59yOo.js} +23 -23
  13. package/dist/{auth-choice-CeNB3tht.js → auth-choice-C9otuJPA.js} +1 -1
  14. package/dist/{auth-choice-C5XKksbt.js → auth-choice-D5BDSGnl.js} +8 -8
  15. package/dist/{auth-token-D4sEkR38.js → auth-token-BszpreVL.js} +1 -1
  16. package/dist/{banner-Cf1EZP4s.js → banner-CF7C3krf.js} +1 -1
  17. package/dist/{bindings-ChzePa8q.js → bindings-DFaVVCsf.js} +1 -1
  18. package/dist/{browser-cli-VNgWKTmy.js → browser-cli-Bys7B4nj.js} +9 -9
  19. package/dist/build-info.json +3 -3
  20. package/dist/bundled/boot-md/handler.js +1 -1
  21. package/dist/bundled/session-memory/handler.js +1 -1
  22. package/dist/{call-DiLX2POZ.js → call-DAcmbtXf.js} +9 -9
  23. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  24. package/dist/{channel-options-cu6Y_a_F.js → channel-options-Csa-TtDi.js} +1 -1
  25. package/dist/{channel-options-B6UQDEaE.js → channel-options-DzhTX3wl.js} +2 -2
  26. package/dist/{channel-selection-DjfBv8kq.js → channel-selection-DuWs0Aak.js} +1 -1
  27. package/dist/{channel-web-Bi-6I1-W.js → channel-web-CjvCBPqU.js} +17 -17
  28. package/dist/{channels-cli-Bd5O4SA9.js → channels-cli-DDN_16Kv.js} +4 -4
  29. package/dist/{channels-cli-JCLUuFxJ.js → channels-cli-KlwkjyCS.js} +75 -75
  30. package/dist/{channels-status-issues-BoH1ZJPN.js → channels-status-issues-B_kBkl_u.js} +1 -1
  31. package/dist/{chrome-BcFyrQA-.js → chrome-CHnAYrZp.js} +7 -7
  32. package/dist/{chrome-CR4GU_ji.js → chrome-w5VRy_4h.js} +2 -2
  33. package/dist/cli/daemon-cli.js +1 -1
  34. package/dist/{cli-CDZec5HA.js → cli-B5hVys4U.js} +62 -62
  35. package/dist/{cli-nHMrloEB.js → cli-DJI_OS4-.js} +1 -1
  36. package/dist/{client-CIYHP9fS.js → client-Cnoh7nRo.js} +1 -1
  37. package/dist/{command-registry-DXb1lS7l.js → command-registry-BCcHr4Zl.js} +9 -9
  38. package/dist/{commands-CtocZ4Lg.js → commands-BNLCWX6e.js} +1 -1
  39. package/dist/{commands-registry-BmO4ALva.js → commands-registry-FQYB6b0c.js} +3 -3
  40. package/dist/{completion-cli-CZ0-L0Nx.js → completion-cli-3qyNZZY8.js} +12 -12
  41. package/dist/{completion-cli-BzDe-5CO.js → completion-cli-CwhsXPDu.js} +2 -2
  42. package/dist/{config-AVc1QpRD.js → config-HatzmzSF.js} +2 -2
  43. package/dist/{config-cli-BfsG-zzV.js → config-cli-BZ9IeSYB.js} +1 -1
  44. package/dist/{config-cli-BIUaw73M.js → config-cli-gykd9rl1.js} +4 -4
  45. package/dist/{config-guard-CPd-_Sug.js → config-guard-B_Oo29C_.js} +12 -12
  46. package/dist/{config-validation-QuKOX6cx.js → config-validation-DWRbfhqx.js} +1 -1
  47. package/dist/{configure-C1JhrX_n.js → configure-DaF95oCr.js} +3 -3
  48. package/dist/{configure-DpG3ItSi.js → configure-awU0fYIM.js} +15 -15
  49. package/dist/{control-service-CT6Tc8zz.js → control-service-su7ltHXJ.js} +4 -4
  50. package/dist/control-ui/css/revert-red-theme.md +141 -0
  51. package/dist/control-ui/css/style.css +23 -54
  52. package/dist/control-ui/css/style.css.backup-2026-03-03-162525 +3546 -0
  53. package/dist/control-ui/css/style.css.backup-before-red-2026-03-03-162525 +3546 -0
  54. package/dist/control-ui/css/style.css.backup-before-red-theme-2026-03-03-162530 +3546 -0
  55. package/dist/control-ui/css/style.css.red-theme +2999 -0
  56. package/dist/control-ui/index.html +5 -18
  57. package/dist/control-ui/js/app.js +1 -1
  58. package/dist/control-ui/js/models.js +35 -108
  59. package/dist/{control-ui-assets-DqGziq7x.js → control-ui-assets-Z947tKLt.js} +1 -1
  60. package/dist/{cron-cli-Dkt9uaVz.js → cron-cli-EwYM3Zhw.js} +10 -10
  61. package/dist/{daemon-cli-CK9BhScf.js → daemon-cli-gSfOKrXx.js} +11 -11
  62. package/dist/{daemon-runtime-CbWCEgFq.js → daemon-runtime-CNFxAJWo.js} +10 -10
  63. package/dist/{deliver-CxgHFI_U.js → deliver-BhapnYkw.js} +1 -1
  64. package/dist/{deliver-BRZABn2h.js → deliver-Dt-RE3Vx.js} +7 -7
  65. package/dist/{devices-cli-Dt2dSPNN.js → devices-cli-B4Ml0nPd.js} +6 -6
  66. package/dist/{diagnostics-D2yUMZN1.js → diagnostics-BAMlsVVX.js} +5 -5
  67. package/dist/{directory-cli-Bd0yqzdX.js → directory-cli-Dr1AuGU_.js} +7 -7
  68. package/dist/{dm-policy-shared-BbBnj9fh.js → dm-policy-shared-B7mF98WG.js} +2 -2
  69. package/dist/{dns-cli-C8-wE4jg.js → dns-cli-BMuYSI5H.js} +3 -3
  70. package/dist/{dock-BYiRZSgZ.js → dock-BhS32F6E.js} +4 -4
  71. package/dist/{docs-cli-BfPfHTDs.js → docs-cli-BpnEOtJi.js} +1 -1
  72. package/dist/{doctor-completion-BUt4HQxm.js → doctor-completion-D3TwE1w4.js} +1 -1
  73. package/dist/{doctor-completion-EiZoSgwZ.js → doctor-completion-DbjMSopv.js} +2 -2
  74. package/dist/{doctor-config-flow-DVeRf3Nb.js → doctor-config-flow-CqkfYH5g.js} +10 -10
  75. package/dist/entry.js +1 -1
  76. package/dist/{exec-approvals-cli-_9YulN2v.js → exec-approvals-cli-Bjc1fnXd.js} +13 -13
  77. package/dist/extensionAPI.js +6 -6
  78. package/dist/{fs-safe-CTDvb1DF.js → fs-safe-CUjO1ca2.js} +6 -6
  79. package/dist/{gateway-cli-CEO3mZTr.js → gateway-cli-BfnBBPhi.js} +14 -11
  80. package/dist/{gateway-cli-BRuCMLHC.js → gateway-cli-Dp5kxNDZ.js} +118 -115
  81. package/dist/{gateway-rpc-CPJvpktM.js → gateway-rpc-fojfvlNM.js} +1 -1
  82. package/dist/{glass-ui-ws-BDGgl8ub.js → glass-ui-ws-D421doEO.js} +7 -7
  83. package/dist/{glass-ui-ws-DZBGtG3l.js → glass-ui-ws-DVJ8Jbb_.js} +82 -82
  84. package/dist/{health-JCH1-7ZC.js → health-6eO44S1z.js} +13 -13
  85. package/dist/{health-DOpwYIk9.js → health-Cg5ISkwP.js} +1 -1
  86. package/dist/{hooks-cli-C_swzA-Q.js → hooks-cli-CSudu0uW.js} +76 -76
  87. package/dist/{hooks-cli-8E0NEcp2.js → hooks-cli-DrJLLgya.js} +2 -2
  88. package/dist/{image-CMI-9eRz.js → image-BCpwZwMs.js} +3 -3
  89. package/dist/{image-BJZzZRo7.js → image-Cu9lUf9J.js} +1 -1
  90. package/dist/{image-ops-DYbDWaIA.js → image-ops-1OJMSAUX.js} +10 -10
  91. package/dist/index.js +72 -72
  92. package/dist/{inspect-ZJkNX0WL.js → inspect-CllGjsWo.js} +4 -4
  93. package/dist/{install-safe-path-Qqr_t_tH.js → install-safe-path-tCLiMpmO.js} +11 -11
  94. package/dist/{installs-O9KlRu9h.js → installs-C1Cebk97.js} +10 -10
  95. package/dist/{ir-Dt4hOzxG.js → ir-DZam9q5M.js} +6 -6
  96. package/dist/{lifecycle-core-DJ99Nuea.js → lifecycle-core-D7yri0lq.js} +5 -5
  97. package/dist/llm-slug-generator.js +1 -1
  98. package/dist/{local-roots-BBeKX7PX.js → local-roots-aAFLQGkY.js} +2 -2
  99. package/dist/{login-BbKZ2DjB.js → login-DPZJ0dn5.js} +3 -3
  100. package/dist/{login-qr-DUMFnnHO.js → login-qr-1SS_KLmy.js} +5 -5
  101. package/dist/{logs-cli-Q9BjHa6r.js → logs-cli-DTv4zx9B.js} +7 -7
  102. package/dist/{manager-CMwIsp1s.js → manager-azRNiI63.js} +13 -13
  103. package/dist/{markdown-tables-ZwP14ydw.js → markdown-tables-CEbN0fEm.js} +1 -1
  104. package/dist/{memory-cli-BmVxmjsP.js → memory-cli-BbOD_MAm.js} +12 -12
  105. package/dist/{model-yOMXet9g.js → model-BqEwE-J2.js} +1 -1
  106. package/dist/{model-catalog-B2O_f8W3.js → model-catalog-DchCrtU_.js} +4 -4
  107. package/dist/{model-picker-Cza4RjM6.js → model-picker-kP9-zhYa.js} +3 -3
  108. package/dist/{model-selection-B7KLlkW9.js → model-selection-Bna6Ea2G.js} +9 -9
  109. package/dist/{models-DiSEm28S.js → models-BTRkvFtl.js} +2 -2
  110. package/dist/{models-cli-BNzrvtSd.js → models-cli-D2fJlrQk.js} +3 -3
  111. package/dist/{models-cli-mXtcSXES.js → models-cli-Dj8cNWRT.js} +72 -72
  112. package/dist/{models-config-BBYpnDiI.js → models-config-ClFXUp6F.js} +7 -7
  113. package/dist/{node-cli-0V_HpLpl.js → node-cli-NQpg02gK.js} +28 -28
  114. package/dist/{node-service-CJygtY5M.js → node-service-Cxz4e-Qd.js} +1 -1
  115. package/dist/{nodes-cli-CCcfRy8f.js → nodes-cli-Bb4xaKGj.js} +10 -10
  116. package/dist/{nodes-screen-C99kfE1u.js → nodes-screen-VBGXKdLk.js} +4 -4
  117. package/dist/{npm-registry-spec-DR_at_Hp.js → npm-registry-spec-C2JDdSZS.js} +9 -9
  118. package/dist/{onboard-L0M0Ovnd.js → onboard-CF18Px6X.js} +2 -2
  119. package/dist/{onboard-t2R-9vg-.js → onboard-DrC9PhAd.js} +13 -13
  120. package/dist/{onboard-channels-DUaPDyrm.js → onboard-channels-DRFYxuUu.js} +1 -1
  121. package/dist/{onboard-channels-C7WU9Iin.js → onboard-channels-wh9lIrOV.js} +5 -5
  122. package/dist/{onboard-custom-DPVbOEea.js → onboard-custom-CRCl78Cb.js} +3 -3
  123. package/dist/{onboard-helpers-KDMJj8FR.js → onboard-helpers-y4rvYrnW.js} +8 -8
  124. package/dist/{onboard-hooks-lsws7g2s.js → onboard-hooks-BAA8CoVv.js} +1 -1
  125. package/dist/{onboard-remote-BlAZ1eIO.js → onboard-remote-Jm1aS7bY.js} +1 -1
  126. package/dist/{onboard-skills-B_rjyFsX.js → onboard-skills-Cs350j4k.js} +4 -4
  127. package/dist/{onboarding-DXwjpA2U.js → onboarding-BxtMkKTW.js} +13 -13
  128. package/dist/{onboarding-B70JwisU.js → onboarding-CoKYMZge.js} +3 -3
  129. package/dist/{onboarding.finalize-7Hj0Ns8P.js → onboarding.finalize-C1zVIEme.js} +6 -6
  130. package/dist/{onboarding.finalize-CfqZ4VMN.js → onboarding.finalize-CLX9F864.js} +74 -74
  131. package/dist/{onboarding.gateway-config-DTociuRL.js → onboarding.gateway-config-BKBdInKw.js} +14 -14
  132. package/dist/{openai-model-default-qa2VGxV5.js → openai-model-default-VfhQkucT.js} +2 -2
  133. package/dist/{outbound-4_NH93LY.js → outbound-Bgf3-Xjf.js} +4 -4
  134. package/dist/{outbound-attachment-D62E0xDI.js → outbound-attachment-D_QuKi8U.js} +2 -2
  135. package/dist/{pairing-cli-BjylEroj.js → pairing-cli-DGZ81nF1.js} +8 -8
  136. package/dist/{pairing-labels-BTnwVbGk.js → pairing-labels-DqKysvKw.js} +1 -1
  137. package/dist/{pairing-store-GiI_Y6RI.js → pairing-store-BCNzdZKM.js} +2 -2
  138. package/dist/{pairing-token-AV-MMfVE.js → pairing-token-CX3NN_qj.js} +7 -7
  139. package/dist/{paths-CT6jsi4E.js → paths-BBm9fwuG.js} +1 -1
  140. package/dist/{pi-auth-json-B1BvsF_W.js → pi-auth-json-CZfGGhvs.js} +3 -3
  141. package/dist/{pi-embedded-D7ha4Og0.js → pi-embedded-4Uw7vlcF.js} +2 -11
  142. package/dist/{pi-embedded-DocZDkTo.js → pi-embedded-CGdznHBp.js} +16 -25
  143. package/dist/{pi-embedded-helpers-MsIbFHV5.js → pi-embedded-helpers-BG2tatxZ.js} +4 -4
  144. package/dist/{pi-embedded-helpers-CwBUNbtz.js → pi-embedded-helpers-DTf21kBI.js} +6 -6
  145. package/dist/{pi-tools.policy-UOvl9TC5.js → pi-tools.policy-DzNBR_23.js} +4 -4
  146. package/dist/{plugin-auto-enable-DDZK_Dlb.js → plugin-auto-enable-DLa2EY7E.js} +2 -2
  147. package/dist/{plugin-registry-CdtWBNpp.js → plugin-registry-BbbgHAaN.js} +1 -1
  148. package/dist/{plugin-registry-CORXKvoW.js → plugin-registry-UAY71aAp.js} +3 -3
  149. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  150. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  151. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  152. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  153. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  154. package/dist/plugin-sdk/{api-key-rotation-BYeOYbFa.js → api-key-rotation-Q2dih0d4.js} +1 -1
  155. package/dist/plugin-sdk/{audio-preflight-ZgYHV7zZ.js → audio-preflight-B3jftH89.js} +24 -24
  156. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  157. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  158. package/dist/plugin-sdk/{channel-web-DMrXbXuB.js → channel-web-cl9GZI67.js} +22 -22
  159. package/dist/plugin-sdk/{chrome-aebG-57z.js → chrome-Dm5lVW6S.js} +3 -3
  160. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  161. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  162. package/dist/plugin-sdk/{commands-registry-C-40_AnX.js → commands-registry-CPpEN9Mp.js} +4 -4
  163. package/dist/plugin-sdk/{config-_mfvrqyn.js → config-BVu4isPG.js} +9 -9
  164. package/dist/plugin-sdk/{deliver-CjfwhaL4.js → deliver-DSY1Ey3q.js} +10 -10
  165. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  166. package/dist/plugin-sdk/{image-BPKGNrho.js → image-GJ7myokS.js} +4 -4
  167. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  168. package/dist/plugin-sdk/index.js +53 -53
  169. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  170. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  171. package/dist/plugin-sdk/{login-D7FDUOk4.js → login-O6IizOR2.js} +7 -7
  172. package/dist/plugin-sdk/{login-qr-T2-V0Xzo.js → login-qr-_OTg1XmP.js} +9 -9
  173. package/dist/plugin-sdk/{manager-BQMAFDKV.js → manager-DBUFLDPF.js} +8 -8
  174. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  175. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  176. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  177. package/dist/plugin-sdk/{model-selection-SoQVut2b.js → model-selection-DltSbjiW.js} +4 -4
  178. package/dist/plugin-sdk/{outbound-D6-dgoHk.js → outbound-CR8e3Z2m.js} +7 -7
  179. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  180. package/dist/plugin-sdk/{pi-auth-json-BcG0RJ5m.js → pi-auth-json-BZWLIjB8.js} +5 -5
  181. package/dist/plugin-sdk/{pi-embedded-helpers-CoCKvCMg.js → pi-embedded-helpers-DP6QavXU.js} +17 -17
  182. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  183. package/dist/plugin-sdk/{pw-ai-BtL_6nSQ.js → pw-ai--FUGpHYZ.js} +8 -8
  184. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  185. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  186. package/dist/plugin-sdk/{replies-DBhVchqS.js → replies-CbaarhX4.js} +3 -3
  187. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  188. package/dist/plugin-sdk/{reply-BAGhI0bM.js → reply-z8of-Etj.js} +78 -87
  189. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  190. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  191. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  192. package/dist/plugin-sdk/{runner-DI-v2QPz.js → runner-AJx8kwC8.js} +9 -9
  193. package/dist/plugin-sdk/{send-BXEvd9GG.js → send-B0ms2T8N.js} +6 -6
  194. package/dist/plugin-sdk/{send-BqfAkEXB.js → send-BqkPr3tk.js} +10 -10
  195. package/dist/plugin-sdk/{send-_NtbikAq.js → send-CQTQU2QA.js} +10 -10
  196. package/dist/plugin-sdk/{send-OeTV33Hw.js → send-CVgqxLOA.js} +6 -6
  197. package/dist/plugin-sdk/{send-BMFLy4AN.js → send-Czife03a.js} +7 -7
  198. package/dist/plugin-sdk/{session-fs4fyz3Q.js → session-Cj83K_4Y.js} +4 -4
  199. package/dist/plugin-sdk/{skill-commands-BHGE8qj7.js → skill-commands-BLr3yT6A.js} +5 -5
  200. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  201. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  202. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  203. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  204. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  205. package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
  206. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  207. package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
  208. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  209. package/dist/plugin-sdk/{tool-loop-detection-edmW8ZiF.js → tool-loop-detection-BVA6fax-.js} +2 -2
  210. package/dist/plugin-sdk/web-C3pizhFX.js +65 -0
  211. package/dist/plugin-sdk/{whatsapp-actions-BYyVUqQU.js → whatsapp-actions-nsnM4jgj.js} +21 -21
  212. package/dist/{plugins-BAyxWQSz.js → plugins-DKDeQZF0.js} +2 -2
  213. package/dist/{plugins-cli-CbYY2c02.js → plugins-cli-EwQ7OW8w.js} +2 -2
  214. package/dist/{plugins-cli-DZ6_6_9N.js → plugins-cli-XdoAm0EH.js} +71 -71
  215. package/dist/{ports-OZQlocB7.js → ports-BOmtxoTv.js} +2 -2
  216. package/dist/{ports-b36gHZbA.js → ports-BX0kKI0g.js} +1 -1
  217. package/dist/{program-C4255SbF.js → program-HBWz0352.js} +7 -7
  218. package/dist/{program-context-CTjApG6i.js → program-context-Dnxa4BRv.js} +39 -39
  219. package/dist/{prompt-select-styled-BwJ6oDuF.js → prompt-select-styled-BPbLHy8u.js} +4 -4
  220. package/dist/{prompt-select-styled-C9kVFhhN.js → prompt-select-styled-QaEE6uFc.js} +38 -38
  221. package/dist/{provider-auth-helpers-BhWko9CW.js → provider-auth-helpers-_5rSLUts.js} +1 -1
  222. package/dist/{provider-auth-helpers-Dh0Y9gRH.js → provider-auth-helpers-tpyE_YMw.js} +5 -5
  223. package/dist/{push-apns-Bc01EVHz.js → push-apns-CIcS3If1.js} +1 -1
  224. package/dist/{push-apns-CKA1Hybl.js → push-apns-zJAWgDEO.js} +4 -4
  225. package/dist/{pw-ai-Bds_uQVw.js → pw-ai-BggM0tBP.js} +1 -1
  226. package/dist/{pw-ai-jDxCE_me.js → pw-ai-hxKJoLPO.js} +7 -7
  227. package/dist/{qmd-manager-BP2r8b1D.js → qmd-manager-D85GJrir.js} +18 -18
  228. package/dist/{qr-cli-CqfILKdq.js → qr-cli-BevlQ0yQ.js} +3 -3
  229. package/dist/{register.agent-CjihKrgr.js → register.agent-DNcdFB4H.js} +81 -81
  230. package/dist/{register.agent-vJQWUB2a.js → register.agent-brAf6Dmv.js} +6 -6
  231. package/dist/register.configure-C76yU3JC.js +147 -0
  232. package/dist/{register.configure-CWkzQGtI.js → register.configure-DoJEj5YT.js} +6 -6
  233. package/dist/{register.maintenance-DSJfxKOM.js → register.maintenance-BWsl_CRR.js} +84 -84
  234. package/dist/{register.maintenance-BIw99tAg.js → register.maintenance-yNdx8TEW.js} +8 -8
  235. package/dist/{register.message-DYzHnVIl.js → register.message-CJZ0ZuHF.js} +2 -2
  236. package/dist/{register.message-Clc--Yw5.js → register.message-syMzQfo-.js} +63 -63
  237. package/dist/{register.onboard-BHtw8kJf.js → register.onboard-D1qJrd_y.js} +4 -4
  238. package/dist/{register.onboard-BfUOVNll.js → register.onboard-ihq83ez3.js} +74 -74
  239. package/dist/{register.setup-GFxvFYnK.js → register.setup-BGXItvC3.js} +77 -77
  240. package/dist/{register.setup-DgSaVc_m.js → register.setup-GL00UiNA.js} +4 -4
  241. package/dist/{register.status-health-sessions-BI-s8t9j.js → register.status-health-sessions-87LTzh7r.js} +3 -3
  242. package/dist/{register.status-health-sessions-D9SHcVWG.js → register.status-health-sessions-CPg2ES9O.js} +75 -75
  243. package/dist/{register.subclis-CY89gBXc.js → register.subclis-CD3QaX57.js} +9 -9
  244. package/dist/{replies-F62kkRDY.js → replies-Bqmvo_Kt.js} +1 -1
  245. package/dist/{reply-3UdAtBno.js → reply-D-tI2-6J.js} +131 -140
  246. package/dist/{reply-prefix-BLOOs1aW.js → reply-prefix-CE2YmmsD.js} +1 -1
  247. package/dist/{resolve-route-BcnaXYvh.js → resolve-route-BMoTaVAH.js} +2 -2
  248. package/dist/{routes-Byuu6IFb.js → routes-BTqP9I0j.js} +8 -8
  249. package/dist/{rpc-W2LE3Gsn.js → rpc-BWLVOOnl.js} +1 -1
  250. package/dist/{run-main-D1u34xwJ.js → run-main-CDmsHQjn.js} +14 -14
  251. package/dist/{runner-BjY_9Mjp.js → runner-5jm68DaT.js} +20 -20
  252. package/dist/{runner--DgD353Z.js → runner-bGQ_Rdjp.js} +1 -1
  253. package/dist/{sandbox-CZNPhRvt.js → sandbox-CI3HOlhZ.js} +18 -18
  254. package/dist/{sandbox-cli-DGr5ZbkP.js → sandbox-cli-XsQ7ytlP.js} +20 -20
  255. package/dist/{security-cli-sPaHQYwq.js → security-cli-CjP-MfW-.js} +36 -36
  256. package/dist/{send-Bq3a_Wnm.js → send-B6F9anOj.js} +6 -6
  257. package/dist/{send-D-WljKDl.js → send-Bdb6djZT.js} +6 -6
  258. package/dist/{send-BOpWKMA3.js → send-C-yyCp3G.js} +4 -4
  259. package/dist/{send-hUOxOHuS.js → send-CRQMds8q.js} +13 -13
  260. package/dist/{send-C-hO5d22.js → send-DCDHTHlP.js} +6 -6
  261. package/dist/{server-context-BvLdcVwk.js → server-context-XZaMhvsO.js} +5 -5
  262. package/dist/{server-methods-BJCrhJnd.js → server-methods-9BRiIiUB.js} +54 -54
  263. package/dist/{server-methods-D6_yT-Bb.js → server-methods-BaOFruL6.js} +7 -7
  264. package/dist/{server-node-events-CykWrHaN.js → server-node-events-CCOXKW9s.js} +63 -63
  265. package/dist/{server-node-events-tdraRFjy.js → server-node-events-DDEX2ugG.js} +2 -2
  266. package/dist/{service--qMN5DPm.js → service-Cl74hx8J.js} +15 -15
  267. package/dist/{session-CkpNcCi1.js → session-pB1anvds.js} +2 -2
  268. package/dist/{sessions-F_WFgwcy.js → sessions-Dg88xE66.js} +13 -13
  269. package/dist/{shared-Dj1vNdZR.js → shared-B811_S8D.js} +3 -3
  270. package/dist/{shared-Jm_QdQJQ.js → shared-BJvwnR5z.js} +1 -1
  271. package/dist/{skill-commands-CWFq0coF.js → skill-commands-D23OFeRU.js} +5 -5
  272. package/dist/{skill-scanner-CXg9eeyc.js → skill-scanner-CLs8u6vQ.js} +5 -5
  273. package/dist/{skills-DqQUtOph.js → skills-6jdJQ5ZL.js} +4 -4
  274. package/dist/{skills-cli-ZvR57mAe.js → skills-cli-Cr0T5ExG.js} +7 -7
  275. package/dist/{skills-install-DjcTy3CT.js → skills-install-D67isO1L.js} +3 -3
  276. package/dist/{skills-status-DS-NZQiq.js → skills-status-CURJKnyY.js} +1 -1
  277. package/dist/{sqlite-BV5ILFtC.js → sqlite-Dx3J_aSE.js} +12 -12
  278. package/dist/{status-P2xe2kB8.js → status-B_fSdR2z.js} +3 -3
  279. package/dist/{status-DpNpFHi8.js → status-Bhj6pODg.js} +2 -2
  280. package/dist/{status-bDX6eJeC.js → status-CHtXaQCL.js} +25 -25
  281. package/dist/{status-UTAzB6AW.js → status-DWYUBGDM.js} +1 -1
  282. package/dist/{status.update-FbG5gTPn.js → status.update-6yjKgcLs.js} +3 -3
  283. package/dist/{store-DvtcmOKj.js → store-r1DJSDq-.js} +5 -5
  284. package/dist/{subagent-registry-DW6V21LB.js → subagent-registry-C-rk8Ynb.js} +2 -11
  285. package/dist/{symi-root-MF6_6SCS.js → symi-root-CrGJbkzf.js} +2 -2
  286. package/dist/{system-cli-B13bcVd7.js → system-cli-D2Gy1uM8.js} +11 -11
  287. package/dist/{systemd-hints-CLsHKdY5.js → systemd-hints-TBjNlcr6.js} +6 -6
  288. package/dist/{systemd-linger-BXwqn1jL.js → systemd-linger-aQ75ZlXY.js} +1 -1
  289. package/dist/{systemd-AhJEsmIk.js → systemd-riq8uNJQ.js} +5 -5
  290. package/dist/{tables-C38rzF6E.js → tables-BEzT0Da4.js} +1 -1
  291. package/dist/{target-errors-CCz79CmV.js → target-errors-7AvoVa10.js} +4 -4
  292. package/dist/{tool-images-B-pqX3nX.js → tool-images-DvUBlqjX.js} +1 -1
  293. package/dist/{tui-9seSCxc3.js → tui-DdPONk1f.js} +7 -7
  294. package/dist/{tui-cli-DN4upjYg.js → tui-cli-BIUejAgV.js} +28 -28
  295. package/dist/{update-check-C0oYCI89.js → update-check-CtckACbb.js} +5 -5
  296. package/dist/{update-cli-BV-ydVs4.js → update-cli-C7JAgS-C.js} +8 -8
  297. package/dist/{update-cli-KxZVK_fV.js → update-cli-CEvG4pzB.js} +94 -94
  298. package/dist/{update-runner-Bk1Dw23-.js → update-runner-Bq1u14RR.js} +1 -1
  299. package/dist/{update-runner-BU1pNjNR.js → update-runner-f9lbrrpe.js} +15 -15
  300. package/dist/{update-Df4sEKtI.js → update-rw7wJwHd.js} +3 -3
  301. package/dist/{web-C9daLT-M.js → web-B-ZZCPiM.js} +1 -1
  302. package/dist/web-BJBlI9ZQ.js +109 -0
  303. package/dist/{web-CqNKJLiq.js → web-BzQURzi7.js} +1 -1
  304. package/dist/{web-CH5VMs5G.js → web-kJbpVasC.js} +6 -6
  305. package/dist/{webhooks-cli-WXHppPGP.js → webhooks-cli-EjU4sMB6.js} +4 -4
  306. package/dist/{whatsapp-actions-CZxAV_jP.js → whatsapp-actions-CXbFvHGB.js} +15 -15
  307. package/dist/{with-timeout-B4dUX-ZK.js → with-timeout-CB59LniF.js} +1 -1
  308. package/dist/{workspace-dirs-DKu48umx.js → workspace-dirs-GpkFi6Kw.js} +1 -1
  309. package/dist/{wsl-BbXxnokd.js → wsl-C4424szg.js} +2 -2
  310. package/extensions/bluebubbles/node_modules/.bin/symi +4 -4
  311. package/extensions/bluebubbles/package.json +1 -1
  312. package/extensions/copilot-proxy/node_modules/.bin/symi +4 -4
  313. package/extensions/copilot-proxy/package.json +1 -1
  314. package/extensions/diagnostics-otel/node_modules/.bin/acorn +2 -2
  315. package/extensions/diagnostics-otel/node_modules/.bin/symi +4 -4
  316. package/extensions/diagnostics-otel/package.json +1 -1
  317. package/extensions/discord/node_modules/.bin/symi +4 -4
  318. package/extensions/discord/package.json +1 -1
  319. package/extensions/feishu/node_modules/.bin/symi +4 -4
  320. package/extensions/feishu/package.json +1 -1
  321. package/extensions/google-antigravity-auth/node_modules/.bin/symi +4 -4
  322. package/extensions/google-antigravity-auth/package.json +1 -1
  323. package/extensions/google-gemini-cli-auth/node_modules/.bin/symi +4 -4
  324. package/extensions/google-gemini-cli-auth/package.json +1 -1
  325. package/extensions/googlechat/node_modules/.bin/symi +4 -4
  326. package/extensions/googlechat/package.json +2 -2
  327. package/extensions/imessage/node_modules/.bin/symi +4 -4
  328. package/extensions/imessage/package.json +1 -1
  329. package/extensions/irc/node_modules/.bin/symi +4 -4
  330. package/extensions/irc/package.json +1 -1
  331. package/extensions/learning-loop/node_modules/.bin/symi +21 -0
  332. package/extensions/learning-loop/package.json +2 -2
  333. package/extensions/line/node_modules/.bin/symi +4 -4
  334. package/extensions/line/package.json +1 -1
  335. package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
  336. package/extensions/matrix/node_modules/.bin/symi +4 -4
  337. package/extensions/matrix/package.json +1 -1
  338. package/extensions/mattermost/node_modules/.bin/symi +4 -4
  339. package/extensions/mattermost/package.json +1 -1
  340. package/extensions/memory-core/node_modules/.bin/symi +4 -4
  341. package/extensions/memory-core/package.json +2 -2
  342. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +2 -2
  343. package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
  344. package/extensions/memory-lancedb/node_modules/.bin/symi +4 -4
  345. package/extensions/memory-lancedb/package.json +1 -1
  346. package/extensions/minimax-portal-auth/node_modules/.bin/symi +4 -4
  347. package/extensions/minimax-portal-auth/package.json +1 -1
  348. package/extensions/msteams/node_modules/.bin/symi +4 -4
  349. package/extensions/msteams/package.json +1 -1
  350. package/extensions/nextcloud-talk/node_modules/.bin/symi +4 -4
  351. package/extensions/nextcloud-talk/package.json +1 -1
  352. package/extensions/nostr/node_modules/.bin/symi +4 -4
  353. package/extensions/nostr/node_modules/.bin/tsc +2 -2
  354. package/extensions/nostr/node_modules/.bin/tsserver +2 -2
  355. package/extensions/nostr/package.json +1 -1
  356. package/extensions/signal/node_modules/.bin/symi +4 -4
  357. package/extensions/signal/package.json +1 -1
  358. package/extensions/slack/node_modules/.bin/symi +4 -4
  359. package/extensions/slack/package.json +1 -1
  360. package/extensions/telegram/node_modules/.bin/symi +4 -4
  361. package/extensions/telegram/package.json +1 -1
  362. package/extensions/tlon/node_modules/.bin/symi +4 -4
  363. package/extensions/tlon/package.json +1 -1
  364. package/extensions/twitch/node_modules/.bin/symi +4 -4
  365. package/extensions/twitch/package.json +1 -1
  366. package/extensions/voice-call/node_modules/.bin/symi +4 -4
  367. package/extensions/voice-call/package.json +1 -1
  368. package/extensions/whatsapp/node_modules/.bin/symi +4 -4
  369. package/extensions/whatsapp/package.json +1 -1
  370. package/extensions/zalo/node_modules/.bin/symi +4 -4
  371. package/extensions/zalo/package.json +1 -1
  372. package/extensions/zalouser/node_modules/.bin/symi +4 -4
  373. package/extensions/zalouser/package.json +1 -1
  374. package/package.json +1 -2
  375. package/CHANGELOG.md +0 -2520
  376. package/LICENSE +0 -21
  377. package/dist/control-ui/vendor/highlight.css +0 -96
  378. package/dist/control-ui/vendor/highlight.min.js +0 -1244
  379. package/dist/control-ui/vendor/marked.min.js +0 -69
  380. package/dist/plugin-sdk/web-CxcoX0Wr.js +0 -65
  381. package/dist/register.configure-Bb7LY0Z4.js +0 -147
  382. package/dist/session-dirs-D3qlvucD.js +0 -18
  383. package/dist/web-BCk_WT8d.js +0 -109
@@ -0,0 +1,3546 @@
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
+ /* ── Model Select Dropdown ──────────────────────────────────────────── */
359
+ .model-select-wrap {
360
+ margin: 6px 0 4px;
361
+ }
362
+ .model-select {
363
+ width: 100%;
364
+ background: rgba(255,255,255,0.04);
365
+ border: 1px solid var(--glass-border);
366
+ border-radius: 6px;
367
+ color: var(--text);
368
+ font-family: var(--font-mono);
369
+ font-size: 11px;
370
+ padding: 5px 8px;
371
+ cursor: pointer;
372
+ outline: none;
373
+ appearance: none;
374
+ -webkit-appearance: none;
375
+ }
376
+ .model-select:hover {
377
+ border-color: var(--accent-cyan);
378
+ }
379
+ .model-select:focus {
380
+ border-color: var(--accent-cyan);
381
+ box-shadow: 0 0 6px rgba(0,212,255,0.15);
382
+ }
383
+ .model-select optgroup {
384
+ font-weight: 600;
385
+ color: var(--text-muted);
386
+ }
387
+ .model-select option {
388
+ background: #1a1a2e;
389
+ color: var(--text);
390
+ padding: 4px;
391
+ }
392
+
393
+ /* ── Agent Status Orb ─────────────────────────────────────────────── */
394
+ .agent-status-panel { text-align: center; }
395
+
396
+ .aso-orb-wrap {
397
+ width: 120px;
398
+ height: 120px;
399
+ margin: 10px auto 14px;
400
+ }
401
+
402
+ .aso-svg {
403
+ width: 100%;
404
+ height: 100%;
405
+ overflow: visible;
406
+ }
407
+
408
+ /* Orbit guide tracks — faint rings */
409
+ .aso-track {
410
+ fill: none;
411
+ stroke: rgba(255,255,255,0.07);
412
+ stroke-width: 1;
413
+ }
414
+
415
+ /* Arc segments */
416
+ .aso-arc {
417
+ fill: none;
418
+ stroke: var(--aso-color);
419
+ stroke-width: 1.8;
420
+ stroke-linecap: round;
421
+ filter: drop-shadow(0 0 3px var(--aso-color));
422
+ }
423
+ .aso-arc-dim { opacity: 0.5; }
424
+
425
+ /* Core halo */
426
+ .aso-core-halo {
427
+ fill: var(--aso-color);
428
+ opacity: 0.12;
429
+ filter: blur(6px);
430
+ }
431
+
432
+ /* Core dot */
433
+ .aso-core {
434
+ fill: var(--aso-color);
435
+ filter: drop-shadow(0 0 5px var(--aso-color));
436
+ }
437
+
438
+ /* Rotation groups — transform-origin at SVG center (50,50) */
439
+ .aso-rot {
440
+ transform-box: fill-box;
441
+ transform-origin: center;
442
+ }
443
+
444
+ /* ── State: idle — slow cyan ── */
445
+ #agent-status-panel[data-state="idle"] { --aso-color: rgba(0,212,255,0.75); }
446
+ #agent-status-panel[data-state="idle"] .aso-rot1 { animation: aso-spin 8s linear infinite; }
447
+ #agent-status-panel[data-state="idle"] .aso-rot2 { animation: aso-spin 13s linear infinite reverse; }
448
+ #agent-status-panel[data-state="idle"] .aso-rot3 { animation: aso-spin 10s linear infinite; }
449
+ #agent-status-panel[data-state="idle"] .aso-rot4 { animation: aso-spin 17s linear infinite reverse; }
450
+ #agent-status-panel[data-state="idle"] .aso-rot5 { animation: aso-spin 12s linear infinite; }
451
+ #agent-status-panel[data-state="idle"] .aso-core { animation: aso-breathe 3.5s ease-in-out infinite; }
452
+
453
+ /* ── State: waiting — amber, a bit faster ── */
454
+ #agent-status-panel[data-state="waiting"] { --aso-color: #f59e0b; }
455
+ #agent-status-panel[data-state="waiting"] .aso-rot1 { animation: aso-spin 4s linear infinite; }
456
+ #agent-status-panel[data-state="waiting"] .aso-rot2 { animation: aso-spin 6s linear infinite reverse; }
457
+ #agent-status-panel[data-state="waiting"] .aso-rot3 { animation: aso-spin 5s linear infinite; }
458
+ #agent-status-panel[data-state="waiting"] .aso-rot4 { animation: aso-spin 9s linear infinite reverse; }
459
+ #agent-status-panel[data-state="waiting"] .aso-rot5 { animation: aso-spin 6s linear infinite; }
460
+ #agent-status-panel[data-state="waiting"] .aso-core { animation: aso-pulse 1s ease-in-out infinite; }
461
+
462
+ /* ── State: thinking — violet, fast spin ── */
463
+ #agent-status-panel[data-state="thinking"] { --aso-color: #a78bfa; }
464
+ #agent-status-panel[data-state="thinking"] .aso-rot1 { animation: aso-spin 1.1s linear infinite; }
465
+ #agent-status-panel[data-state="thinking"] .aso-rot2 { animation: aso-spin 0.7s linear infinite reverse; }
466
+ #agent-status-panel[data-state="thinking"] .aso-rot3 { animation: aso-spin 1.4s linear infinite; }
467
+ #agent-status-panel[data-state="thinking"] .aso-rot4 { animation: aso-spin 0.5s linear infinite reverse; }
468
+ #agent-status-panel[data-state="thinking"] .aso-rot5 { animation: aso-spin 1.8s linear infinite; }
469
+ #agent-status-panel[data-state="thinking"] .aso-core { animation: aso-pulse 0.45s ease-in-out infinite; }
470
+
471
+ /* ── State: streaming — green, medium flow ── */
472
+ #agent-status-panel[data-state="streaming"] { --aso-color: #34d399; }
473
+ #agent-status-panel[data-state="streaming"] .aso-rot1 { animation: aso-spin 2.2s linear infinite; }
474
+ #agent-status-panel[data-state="streaming"] .aso-rot2 { animation: aso-spin 3.5s linear infinite reverse; }
475
+ #agent-status-panel[data-state="streaming"] .aso-rot3 { animation: aso-spin 2.8s linear infinite; }
476
+ #agent-status-panel[data-state="streaming"] .aso-rot4 { animation: aso-spin 4.5s linear infinite reverse; }
477
+ #agent-status-panel[data-state="streaming"] .aso-rot5 { animation: aso-spin 3.2s linear infinite; }
478
+ #agent-status-panel[data-state="streaming"] .aso-core { animation: aso-pulse 0.7s ease-in-out infinite; }
479
+
480
+ /* ── State: done — brief flash, stays green ── */
481
+ #agent-status-panel[data-state="done"] { --aso-color: #34d399; }
482
+ #agent-status-panel[data-state="done"] .aso-rot1 { animation: aso-spin 0.4s linear infinite; }
483
+ #agent-status-panel[data-state="done"] .aso-rot2 { animation: aso-spin 0.3s linear infinite reverse; }
484
+ #agent-status-panel[data-state="done"] .aso-rot3 { animation: aso-spin 0.5s linear infinite; }
485
+ #agent-status-panel[data-state="done"] .aso-rot4 { animation: aso-spin 0.25s linear infinite reverse; }
486
+ #agent-status-panel[data-state="done"] .aso-rot5 { animation: aso-spin 0.6s linear infinite; }
487
+ #agent-status-panel[data-state="done"] .aso-core { animation: aso-flash 0.4s ease-out forwards; }
488
+
489
+ /* ERROR state — red/pink, irregular erratic pulse to signal distress */
490
+ #agent-status-panel[data-state="error"] { --aso-color: #f87171; }
491
+ #agent-status-panel[data-state="error"] .aso-rot1 { animation: aso-spin 2.1s linear infinite; }
492
+ #agent-status-panel[data-state="error"] .aso-rot2 { animation: aso-spin 1.4s linear infinite reverse; }
493
+ #agent-status-panel[data-state="error"] .aso-rot3 { animation: aso-spin 3.3s linear infinite; }
494
+ #agent-status-panel[data-state="error"] .aso-rot4 { animation: aso-spin 1.8s linear infinite reverse; }
495
+ #agent-status-panel[data-state="error"] .aso-rot5 { animation: aso-spin 2.7s linear infinite; }
496
+ #agent-status-panel[data-state="error"] .aso-core { animation: aso-error-pulse 0.6s ease-in-out infinite; }
497
+
498
+ @keyframes aso-error-pulse {
499
+ 0%, 100% { opacity: 1; transform: scale(1); }
500
+ 50% { opacity: 0.4; transform: scale(0.75); }
501
+ }
502
+
503
+ /* ── Run error bubble (failure message in the feed) ──────────────── */
504
+ .run-error-bubble {
505
+ display: flex;
506
+ align-items: flex-start;
507
+ gap: 10px;
508
+ background: rgba(248, 113, 113, 0.06) !important;
509
+ border-color: rgba(248, 113, 113, 0.25) !important;
510
+ }
511
+
512
+ .run-error-icon {
513
+ font-size: 15px;
514
+ flex-shrink: 0;
515
+ margin-top: 1px;
516
+ color: #f87171;
517
+ filter: drop-shadow(0 0 4px rgba(248,113,113,0.5));
518
+ }
519
+
520
+ .run-error-text {
521
+ color: #fca5a5 !important;
522
+ font-size: 13px;
523
+ line-height: 1.5;
524
+ }
525
+
526
+ /* Partial/failed stream bubble — dim to indicate incomplete */
527
+ .stream-failed {
528
+ opacity: 0.6;
529
+ border-color: rgba(248,113,113,0.2) !important;
530
+ }
531
+ .stream-failed::after {
532
+ content: ' [incomplete]';
533
+ font-size: 11px;
534
+ color: #f87171;
535
+ font-family: var(--font-mono);
536
+ opacity: 0.7;
537
+ }
538
+
539
+ /* ── Keyframes ── */
540
+ @keyframes aso-spin {
541
+ from { transform: rotate(0deg); }
542
+ to { transform: rotate(360deg); }
543
+ }
544
+ @keyframes aso-breathe {
545
+ 0%, 100% { transform: scale(1); opacity: 0.75; }
546
+ 50% { transform: scale(1.45); opacity: 1; }
547
+ }
548
+ @keyframes aso-pulse {
549
+ 0%, 100% { transform: scale(1); }
550
+ 50% { transform: scale(1.6); }
551
+ }
552
+ @keyframes aso-flash {
553
+ 0% { transform: scale(2.5); opacity: 1; }
554
+ 60% { transform: scale(1.2); opacity: 1; }
555
+ 100% { transform: scale(1); opacity: 1; }
556
+ }
557
+
558
+ /* ── Status label & sub-text ── */
559
+ .aso-label {
560
+ font-family: var(--font-mono);
561
+ font-size: 11px;
562
+ font-weight: 700;
563
+ letter-spacing: 0.22em;
564
+ color: var(--aso-color);
565
+ margin-bottom: 5px;
566
+ text-shadow: 0 0 8px var(--aso-color);
567
+ transition: color 0.4s ease, text-shadow 0.4s ease;
568
+ }
569
+ .aso-sub {
570
+ font-size: 10px;
571
+ color: var(--text-dim);
572
+ letter-spacing: 0.04em;
573
+ }
574
+
575
+ /* ── Layout columns ───────────────────────────────────────────────── */
576
+ .metrics-col {
577
+ position: fixed;
578
+ top: 24px;
579
+ bottom: 120px;
580
+ width: 360px;
581
+ display: flex;
582
+ flex-direction: column;
583
+ gap: 12px;
584
+ z-index: 10;
585
+ overflow-y: auto;
586
+ scrollbar-width: none;
587
+ padding-bottom: 8px;
588
+ }
589
+ .metrics-col::-webkit-scrollbar { display: none; }
590
+
591
+ /* Anchor panels adjacent to the centered 740px chat column, 16px gap */
592
+ .metrics-left { left: calc(50% - 370px - 16px - 360px); }
593
+ .metrics-right { right: calc(50% - 370px - 16px - 360px); }
594
+
595
+ /* ── Response Area ────────────────────────────────────────────────── */
596
+ .response-area {
597
+ position: fixed;
598
+ top: 0;
599
+ left: calc(50% - 370px);
600
+ right: calc(50% - 370px);
601
+ bottom: 150px;
602
+ z-index: 5;
603
+ display: flex;
604
+ flex-direction: column;
605
+ justify-content: flex-start;
606
+ padding: 32px 0 16px;
607
+ overflow-y: auto;
608
+ overflow-x: hidden;
609
+ pointer-events: none;
610
+ }
611
+
612
+ /* Constrain all response content to a readable column, centered */
613
+ .response-area > * {
614
+ width: 100%;
615
+ max-width: 740px;
616
+ margin-left: auto;
617
+ margin-right: auto;
618
+ flex-shrink: 0;
619
+ pointer-events: auto;
620
+ }
621
+
622
+ /* ── Message Bubbles ──────────────────────────────────────────────── */
623
+ .message {
624
+ pointer-events: auto;
625
+ width: 100%;
626
+ max-width: 740px;
627
+ margin-bottom: 16px;
628
+ animation: waterfall 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
629
+ opacity: 0;
630
+ transform: translateY(-20px);
631
+ /* Allow bubble to fit content — don't impose a forced width on the child */
632
+ display: block;
633
+ }
634
+
635
+ @keyframes waterfall {
636
+ to { opacity: 1; transform: translateY(0); }
637
+ }
638
+
639
+ .message.user-msg .bubble {
640
+ background: rgba(0,212,255,0.07);
641
+ border: 1px solid rgba(0,212,255,0.18);
642
+ border-radius: 12px 12px 4px 12px;
643
+ padding: 10px 14px;
644
+ display: inline-block;
645
+ float: right;
646
+ max-width: 75%;
647
+ backdrop-filter: blur(12px);
648
+ color: var(--text);
649
+ font-size: 14.5px;
650
+ clear: both;
651
+ }
652
+
653
+ .message.symi-msg .bubble {
654
+ background: var(--glass-bg);
655
+ border: 1px solid var(--glass-border);
656
+ border-radius: 4px 12px 12px 12px;
657
+ padding: 12px 16px;
658
+ backdrop-filter: var(--blur);
659
+ -webkit-backdrop-filter: var(--blur);
660
+ box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.04);
661
+ font-size: 14.5px;
662
+ line-height: 1.75;
663
+ color: var(--text);
664
+ position: relative;
665
+ clear: both;
666
+ display: inline-block;
667
+ width: fit-content;
668
+ max-width: 100%;
669
+ box-sizing: border-box;
670
+ overflow: visible;
671
+ }
672
+
673
+ .message.symi-msg .bubble::before {
674
+ content: '';
675
+ position: absolute;
676
+ top: 0; left: 0; right: 0;
677
+ height: 1px;
678
+ background: linear-gradient(90deg, transparent, rgba(0,212,255,0.3), transparent);
679
+ }
680
+
681
+ .message-clearfix { clear: both; }
682
+
683
+ .typing-cursor {
684
+ display: inline-block;
685
+ width: 2px;
686
+ height: 1em;
687
+ background: var(--accent-cyan);
688
+ margin-left: 2px;
689
+ vertical-align: text-bottom;
690
+ animation: blink 1s step-end infinite;
691
+ box-shadow: 0 0 4px var(--accent-cyan);
692
+ }
693
+ @keyframes blink {
694
+ 0%, 100% { opacity: 1; }
695
+ 50% { opacity: 0; }
696
+ }
697
+
698
+ /* ── Floating Prompt Bar ──────────────────────────────────────────── */
699
+ .prompt-wrap {
700
+ position: fixed;
701
+ bottom: 28px;
702
+ left: calc(50% - 370px);
703
+ right: calc(50% - 370px);
704
+ z-index: 20;
705
+ display: flex;
706
+ justify-content: center;
707
+ }
708
+
709
+ .prompt-bar {
710
+ width: 100%;
711
+ max-width: 720px;
712
+ display: flex;
713
+ flex-direction: column;
714
+ gap: 10px;
715
+ background: rgba(255,255,255,0.05);
716
+ backdrop-filter: blur(32px) saturate(200%);
717
+ -webkit-backdrop-filter: blur(32px) saturate(200%);
718
+ border: 1px solid rgba(255,255,255,0.12);
719
+ border-radius: 20px;
720
+ padding: 14px 16px 12px;
721
+ box-shadow:
722
+ 0 0 0 1px rgba(0,212,255,0.08),
723
+ 0 8px 40px rgba(0,0,0,0.6),
724
+ 0 0 60px rgba(0,212,255,0.04),
725
+ inset 0 1px 0 rgba(255,255,255,0.08);
726
+ transition: border-color 0.3s, box-shadow 0.3s;
727
+ cursor: text;
728
+ }
729
+
730
+ /* ── Prompt rows ──────────────────────────────────────────────────── */
731
+ .prompt-row-main {
732
+ display: flex;
733
+ align-items: center;
734
+ gap: 12px;
735
+ width: 100%;
736
+ }
737
+
738
+ .prompt-row-actions {
739
+ display: flex;
740
+ align-items: center;
741
+ justify-content: flex-end;
742
+ gap: 8px;
743
+ width: 100%;
744
+ padding-top: 2px;
745
+ border-top: 1px solid rgba(255,255,255,0.05);
746
+ }
747
+
748
+ .prompt-bar:focus-within {
749
+ border-color: rgba(0,212,255,0.3);
750
+ box-shadow:
751
+ 0 0 0 1px rgba(0,212,255,0.15),
752
+ 0 8px 40px rgba(0,0,0,0.6),
753
+ 0 0 80px rgba(0,212,255,0.08),
754
+ inset 0 1px 0 rgba(255,255,255,0.1);
755
+ }
756
+
757
+ .prompt-icon {
758
+ color: var(--accent-cyan);
759
+ opacity: 0.7;
760
+ flex-shrink: 0;
761
+ display: flex;
762
+ align-items: center;
763
+ filter: drop-shadow(0 0 4px var(--accent-cyan));
764
+ }
765
+
766
+ .prompt-bar textarea {
767
+ flex: 1;
768
+ background: transparent;
769
+ border: none;
770
+ outline: none;
771
+ color: var(--text);
772
+ font-family: var(--font);
773
+ font-size: 14px;
774
+ line-height: 1.55;
775
+ letter-spacing: 0.01em;
776
+ caret-color: var(--accent-cyan);
777
+ resize: none;
778
+ overflow-y: hidden;
779
+ min-height: 22px;
780
+ max-height: calc(3 * 1.55 * 14px); /* 3 lines */
781
+ padding: 0;
782
+ margin: 0;
783
+ display: block;
784
+ scrollbar-width: none;
785
+ }
786
+
787
+ .prompt-bar textarea::-webkit-scrollbar { display: none; }
788
+
789
+ .prompt-bar textarea::placeholder {
790
+ color: var(--text-dim);
791
+ }
792
+
793
+ .send-btn {
794
+ background: rgba(0,212,255,0.12);
795
+ border: 1px solid rgba(0,212,255,0.2);
796
+ border-radius: 50%;
797
+ width: 32px;
798
+ height: 32px;
799
+ display: flex;
800
+ align-items: center;
801
+ justify-content: center;
802
+ color: var(--accent-cyan);
803
+ cursor: pointer;
804
+ flex-shrink: 0;
805
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
806
+ }
807
+
808
+ .send-btn:hover {
809
+ background: rgba(0,212,255,0.22);
810
+ box-shadow: 0 0 16px rgba(0,212,255,0.25);
811
+ transform: scale(1.05);
812
+ }
813
+
814
+ .send-btn:active {
815
+ transform: scale(0.95);
816
+ }
817
+
818
+ /* ── New Session Button ───────────────────────────────────────────── */
819
+ .prompt-divider {
820
+ width: 1px;
821
+ height: 18px;
822
+ background: rgba(255,255,255,0.08);
823
+ flex-shrink: 0;
824
+ }
825
+
826
+ .new-session-btn {
827
+ display: flex;
828
+ align-items: center;
829
+ gap: 5px;
830
+ background: rgba(139,92,246,0.1);
831
+ border: 1px solid rgba(139,92,246,0.2);
832
+ border-radius: 8px;
833
+ padding: 0 11px;
834
+ height: 28px;
835
+ color: rgba(139,92,246,0.85);
836
+ cursor: pointer;
837
+ flex-shrink: 0;
838
+ transition: background 0.2s, box-shadow 0.2s, transform 0.15s, opacity 0.2s;
839
+ }
840
+
841
+ .new-session-btn:hover {
842
+ background: rgba(139,92,246,0.2);
843
+ box-shadow: 0 0 16px rgba(139,92,246,0.2);
844
+ transform: scale(1.03);
845
+ }
846
+
847
+ .new-session-btn:active {
848
+ transform: scale(0.96);
849
+ }
850
+
851
+ .new-session-btn:disabled {
852
+ opacity: 0.3;
853
+ cursor: not-allowed;
854
+ transform: none;
855
+ }
856
+
857
+ .new-session-label {
858
+ font-family: var(--font-mono);
859
+ font-size: 11px;
860
+ letter-spacing: 0.08em;
861
+ font-weight: 600;
862
+ }
863
+
864
+ /* ── New Session Cleared State ───────────────────────────────────── */
865
+ .session-cleared {
866
+ display: flex;
867
+ flex-direction: column;
868
+ align-items: center;
869
+ justify-content: center;
870
+ gap: 10px;
871
+ padding: 60px 20px;
872
+ opacity: 0;
873
+ animation: session-cleared-in 0.5s ease forwards;
874
+ }
875
+
876
+ .session-cleared-icon {
877
+ font-size: 28px;
878
+ opacity: 0.3;
879
+ }
880
+
881
+ .session-cleared-text {
882
+ font-family: var(--font-mono);
883
+ font-size: 12px;
884
+ letter-spacing: 0.12em;
885
+ color: var(--text-dim);
886
+ opacity: 0.5;
887
+ }
888
+
889
+ @keyframes session-cleared-in {
890
+ from { opacity: 0; transform: translateY(8px); }
891
+ to { opacity: 1; transform: translateY(0); }
892
+ }
893
+
894
+ /* ── Thinking Bubble ──────────────────────────────────────────────── */
895
+ .thinking-bubble {
896
+ background: rgba(0,212,255,0.04) !important;
897
+ border-color: rgba(0,212,255,0.15) !important;
898
+ padding: 10px 16px !important;
899
+ }
900
+
901
+ .think-header {
902
+ display: flex;
903
+ align-items: center;
904
+ gap: 10px;
905
+ margin-bottom: 8px;
906
+ }
907
+
908
+ .think-badge {
909
+ font-family: var(--font-mono);
910
+ font-size: 9px;
911
+ font-weight: 700;
912
+ letter-spacing: 0.15em;
913
+ color: var(--accent-cyan);
914
+ text-shadow: 0 0 8px var(--accent-cyan);
915
+ }
916
+
917
+ .think-dots span {
918
+ display: inline-block;
919
+ color: var(--accent-cyan);
920
+ animation: dot-pulse 1.2s ease-in-out infinite;
921
+ font-size: 14px;
922
+ opacity: 0;
923
+ }
924
+ .think-dots span:nth-child(1) { animation-delay: 0s; }
925
+ .think-dots span:nth-child(2) { animation-delay: 0.2s; }
926
+ .think-dots span:nth-child(3) { animation-delay: 0.4s; }
927
+
928
+ @keyframes dot-pulse {
929
+ 0%, 100% { opacity: 0; transform: translateY(0); }
930
+ 50% { opacity: 1; transform: translateY(-3px); }
931
+ }
932
+
933
+ .think-bar-wrap {
934
+ height: 2px;
935
+ background: rgba(255,255,255,0.06);
936
+ border-radius: 99px;
937
+ overflow: hidden;
938
+ }
939
+
940
+ .think-bar {
941
+ height: 100%;
942
+ width: 0%;
943
+ background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
944
+ border-radius: 99px;
945
+ animation: think-scan 1s ease-in-out infinite;
946
+ }
947
+
948
+ @keyframes think-scan {
949
+ 0% { width: 0%; margin-left: 0%; opacity: 1; }
950
+ 50% { width: 60%; margin-left: 20%; opacity: 1; }
951
+ 100% { width: 0%; margin-left: 100%; opacity: 0; }
952
+ }
953
+
954
+ /* ── Streaming Bubble ─────────────────────────────────────────────── */
955
+ .stream-bubble {
956
+ position: relative;
957
+ }
958
+
959
+ .stream-bubble.streaming {
960
+ width: 100% !important;
961
+ border-color: rgba(0,212,255,0.25) !important;
962
+ box-shadow:
963
+ 0 8px 32px rgba(0,0,0,0.5),
964
+ 0 0 20px rgba(0,212,255,0.06),
965
+ inset 0 1px 0 rgba(255,255,255,0.06) !important;
966
+ animation: stream-pulse 1.8s ease-in-out infinite;
967
+ }
968
+
969
+ @keyframes stream-pulse {
970
+ 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); }
971
+ 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); }
972
+ }
973
+
974
+ .stream-bubble.streaming::after {
975
+ content: '';
976
+ position: absolute;
977
+ top: 0; left: 0; right: 0;
978
+ height: 1px;
979
+ background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
980
+ opacity: 0.6;
981
+ animation: top-scan 2s linear infinite;
982
+ }
983
+
984
+ @keyframes top-scan {
985
+ 0% { transform: scaleX(0); transform-origin: left; opacity: 0.8; }
986
+ 50% { transform: scaleX(1); transform-origin: left; opacity: 0.6; }
987
+ 100% { transform: scaleX(0); transform-origin: right; opacity: 0; }
988
+ }
989
+
990
+ .stream-bubble.done {
991
+ width: fit-content;
992
+ max-width: 100%;
993
+ border-color: rgba(255,255,255,0.1) !important;
994
+ transition: border-color 0.8s, box-shadow 0.8s, width 0.3s ease;
995
+ }
996
+
997
+ /* ── Character spawn animation ────────────────────────────────────── */
998
+ .char-spawn {
999
+ display: inline;
1000
+ color: transparent;
1001
+ text-shadow: none;
1002
+ transition: color 0.12s ease, text-shadow 0.2s ease;
1003
+ }
1004
+
1005
+ .char-spawn.char-visible {
1006
+ color: var(--text);
1007
+ text-shadow: 0 0 8px rgba(0,212,255,0.4);
1008
+ animation: char-settle 0.4s ease forwards;
1009
+ }
1010
+
1011
+ @keyframes char-settle {
1012
+ 0% { color: var(--accent-cyan); text-shadow: 0 0 12px var(--accent-cyan), 0 0 24px rgba(0,212,255,0.3); }
1013
+ 40% { color: rgba(200,240,255,0.95); text-shadow: 0 0 6px rgba(0,212,255,0.2); }
1014
+ 100% { color: var(--text); text-shadow: none; }
1015
+ }
1016
+
1017
+ /* ── Telemetry footer ─────────────────────────────────────────────── */
1018
+ .telemetry {
1019
+ display: flex;
1020
+ align-items: center;
1021
+ gap: 6px;
1022
+ margin-top: 10px;
1023
+ padding-top: 8px;
1024
+ border-top: 1px solid rgba(255,255,255,0.05);
1025
+ opacity: 0;
1026
+ transform: translateY(4px);
1027
+ transition: opacity 0.5s ease 0.2s, transform 0.5s ease 0.2s;
1028
+ }
1029
+
1030
+ .telemetry.tele-visible {
1031
+ opacity: 1;
1032
+ transform: translateY(0);
1033
+ }
1034
+
1035
+ .tele-item {
1036
+ font-family: var(--font-mono);
1037
+ font-size: 9px;
1038
+ color: var(--text-dim);
1039
+ letter-spacing: 0.06em;
1040
+ }
1041
+
1042
+ .tele-sep {
1043
+ color: rgba(255,255,255,0.12);
1044
+ font-size: 9px;
1045
+ }
1046
+
1047
+ /* ── Send button loading state ────────────────────────────────────── */
1048
+ .send-btn.btn-loading {
1049
+ animation: btn-spin 1s linear infinite;
1050
+ }
1051
+ @keyframes btn-spin {
1052
+ to { transform: rotate(360deg); }
1053
+ }
1054
+
1055
+ /* ── Connection status ────────────────────────────────────────────── */
1056
+ .conn-status {
1057
+ position: fixed;
1058
+ top: 16px;
1059
+ left: 50%;
1060
+ transform: translateX(-50%);
1061
+ z-index: 30;
1062
+ display: flex;
1063
+ align-items: center;
1064
+ gap: 7px;
1065
+ background: var(--glass-bg);
1066
+ backdrop-filter: var(--blur);
1067
+ -webkit-backdrop-filter: var(--blur);
1068
+ border: 1px solid var(--glass-border);
1069
+ border-radius: 99px;
1070
+ padding: 5px 12px;
1071
+ pointer-events: none;
1072
+ }
1073
+
1074
+ .conn-label {
1075
+ font-family: var(--font-mono);
1076
+ font-size: 9px;
1077
+ letter-spacing: 0.1em;
1078
+ color: var(--text-dim);
1079
+ }
1080
+
1081
+ .dot-red { background: #f87171; box-shadow: 0 0 6px #f87171; }
1082
+
1083
+ /* ── UI Toggle button ─────────────────────────────────────────────── */
1084
+ .ui-toggle {
1085
+ position: fixed;
1086
+ top: 16px;
1087
+ right: 24px;
1088
+ z-index: 30;
1089
+ display: flex;
1090
+ align-items: center;
1091
+ gap: 7px;
1092
+ background: var(--glass-bg);
1093
+ backdrop-filter: var(--blur);
1094
+ -webkit-backdrop-filter: var(--blur);
1095
+ border: 1px solid var(--glass-border);
1096
+ border-radius: 99px;
1097
+ padding: 6px 14px;
1098
+ color: var(--text-muted);
1099
+ font-size: 11px;
1100
+ font-family: var(--font-mono);
1101
+ letter-spacing: 0.05em;
1102
+ text-decoration: none;
1103
+ transition: border-color 0.2s, color 0.2s, box-shadow 0.2s;
1104
+ }
1105
+
1106
+ .ui-toggle:hover {
1107
+ border-color: var(--glass-border-strong);
1108
+ color: var(--text);
1109
+ box-shadow: 0 0 16px rgba(0,212,255,0.08);
1110
+ }
1111
+
1112
+ /* ── Scrollbar ────────────────────────────────────────────────────── */
1113
+ .response-area::-webkit-scrollbar { display: none; }
1114
+ .response-area { scrollbar-width: none; }
1115
+
1116
+ /* ═══════════════════════════════════════════════════════════════════
1117
+ CONTENT TYPES — Markdown, Thinking, Tool Cards, Code
1118
+ ═══════════════════════════════════════════════════════════════════ */
1119
+
1120
+ /* ── Markdown prose ────────────────────────────────────────────────── */
1121
+ .msg-text {
1122
+ font-size: 14.5px;
1123
+ line-height: 1.75;
1124
+ color: var(--text);
1125
+ word-wrap: break-word;
1126
+ overflow-wrap: anywhere;
1127
+ word-break: break-word;
1128
+ }
1129
+
1130
+ /* Paragraph spacing */
1131
+ .msg-text :where(p, ul, ol, pre, blockquote, table) { margin: 0; }
1132
+ .msg-text :where(p + p,
1133
+ p + ul, p + ol, p + pre, p + blockquote, p + table,
1134
+ ul + p, ol + p, pre + p, blockquote + p, table + p) { margin-top: 0.75em; }
1135
+ .msg-text :where(li + li) { margin-top: 0.25em; }
1136
+
1137
+ /* Headings */
1138
+ .msg-text :where(h1, h2, h3, h4, h5, h6) {
1139
+ font-weight: 600;
1140
+ line-height: 1.3;
1141
+ color: rgba(255,255,255,0.96);
1142
+ margin: 1.1em 0 0.4em;
1143
+ }
1144
+ .msg-text :where(h1) { font-size: 1.35em; border-bottom: 1px solid var(--glass-border); padding-bottom: 0.3em; }
1145
+ .msg-text :where(h2) { font-size: 1.18em; border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 0.2em; }
1146
+ .msg-text :where(h3) { font-size: 1.06em; }
1147
+ .msg-text :where(h4, h5, h6) { font-size: 1em; color: rgba(255,255,255,0.8); }
1148
+ .msg-text :where(h1, h2, h3, h4, h5, h6):first-child { margin-top: 0.3em; }
1149
+
1150
+ /* Lists */
1151
+ .msg-text :where(ul, ol) { padding-left: 1.4em; }
1152
+ .msg-text :where(ul) { list-style-type: disc; }
1153
+ .msg-text :where(ol) { list-style-type: decimal; }
1154
+ .msg-text :where(ul ul) { list-style-type: circle; margin-top: 0.25em; }
1155
+
1156
+ /* Text formatting */
1157
+ .msg-text :where(strong) { font-weight: 600; color: rgba(255,255,255,0.97); }
1158
+ .msg-text :where(em) { font-style: italic; color: rgba(255,255,255,0.82); }
1159
+ .msg-text :where(del) { text-decoration: line-through; opacity: 0.6; }
1160
+ .msg-text :where(mark) { background: rgba(251,191,36,0.2); color: #fbbf24; border-radius: 2px; padding: 0 3px; }
1161
+ .msg-text :where(sup) { font-size: 0.75em; vertical-align: super; }
1162
+ .msg-text :where(sub) { font-size: 0.75em; vertical-align: sub; }
1163
+
1164
+ /* Links */
1165
+ .msg-text :where(a) { color: var(--accent-cyan); text-decoration: none; border-bottom: 1px solid rgba(0,212,255,0.3); }
1166
+ .msg-text :where(a:hover) { border-bottom-color: var(--accent-cyan); }
1167
+
1168
+ /* Horizontal rule */
1169
+ .msg-text :where(hr) {
1170
+ border: none;
1171
+ border-top: 1px solid var(--glass-border);
1172
+ margin: 1em 0;
1173
+ }
1174
+
1175
+ /* Blockquote */
1176
+ .msg-text :where(blockquote) {
1177
+ border-left: 2px solid rgba(0,212,255,0.3);
1178
+ margin: 0.6em 0;
1179
+ padding: 6px 14px;
1180
+ background: rgba(0,212,255,0.03);
1181
+ color: var(--text-muted);
1182
+ border-radius: 0 6px 6px 0;
1183
+ }
1184
+ .msg-text :where(blockquote blockquote) {
1185
+ border-left-color: rgba(139,92,246,0.4);
1186
+ background: rgba(139,92,246,0.03);
1187
+ margin-top: 6px;
1188
+ }
1189
+
1190
+ /* ── Tables ─────────────────────────────────────────────────────────── */
1191
+ .msg-text :where(table) {
1192
+ width: 100%;
1193
+ border-collapse: collapse;
1194
+ font-size: 13px;
1195
+ margin-top: 0.75em;
1196
+ border: 1px solid var(--glass-border);
1197
+ border-radius: 8px;
1198
+ overflow: hidden;
1199
+ }
1200
+
1201
+ .msg-text :where(thead) {
1202
+ background: rgba(0,212,255,0.06);
1203
+ }
1204
+
1205
+ .msg-text :where(th) {
1206
+ font-family: var(--font-mono);
1207
+ font-size: 10.5px;
1208
+ font-weight: 600;
1209
+ letter-spacing: 0.08em;
1210
+ text-transform: uppercase;
1211
+ color: var(--accent-cyan);
1212
+ border: 1px solid var(--glass-border);
1213
+ padding: 8px 12px;
1214
+ text-align: left;
1215
+ background: rgba(0,0,0,0.15);
1216
+ }
1217
+
1218
+ .msg-text :where(td) {
1219
+ border: 1px solid var(--glass-border);
1220
+ padding: 7px 12px;
1221
+ vertical-align: top;
1222
+ color: var(--text);
1223
+ line-height: 1.5;
1224
+ }
1225
+
1226
+ .msg-text :where(tr:nth-child(even) td) {
1227
+ background: rgba(255,255,255,0.015);
1228
+ }
1229
+
1230
+ .msg-text :where(tr:hover td) {
1231
+ background: rgba(0,212,255,0.03);
1232
+ }
1233
+
1234
+ /* ── Inline code ────────────────────────────────────────────────────── */
1235
+ .inline-code,
1236
+ .msg-text :where(:not(pre) > code) {
1237
+ font-family: var(--font-mono);
1238
+ font-size: 0.875em;
1239
+ background: rgba(255,255,255,0.08);
1240
+ border: 1px solid rgba(255,255,255,0.1);
1241
+ border-radius: 4px;
1242
+ padding: 0.1em 0.4em;
1243
+ color: var(--accent-cyan);
1244
+ }
1245
+
1246
+ /* ── Code blocks — full-featured ────────────────────────────────────── */
1247
+ .code-block {
1248
+ margin: 0.75em 0;
1249
+ border: 1px solid var(--glass-border);
1250
+ border-radius: 10px;
1251
+ overflow: hidden;
1252
+ background: rgba(0,0,0,0.45);
1253
+ font-family: var(--font-mono);
1254
+ }
1255
+
1256
+ /* Full-width breakout — code gets the whole column regardless of bubble */
1257
+ .code-block-full {
1258
+ width: 100%;
1259
+ max-width: 100%;
1260
+ }
1261
+
1262
+ /* ── Header ── */
1263
+ .code-header {
1264
+ display: flex;
1265
+ align-items: center;
1266
+ justify-content: space-between;
1267
+ padding: 7px 12px;
1268
+ background: rgba(255,255,255,0.04);
1269
+ border-bottom: 1px solid var(--glass-border);
1270
+ gap: 10px;
1271
+ }
1272
+
1273
+ .code-header-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
1274
+ .code-header-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
1275
+
1276
+ /* Language badge with per-language color */
1277
+ .code-lang-badge {
1278
+ font-family: var(--font-mono);
1279
+ font-size: 10px;
1280
+ font-weight: 700;
1281
+ letter-spacing: 0.06em;
1282
+ text-transform: uppercase;
1283
+ color: var(--lang-color, var(--accent-cyan));
1284
+ display: flex;
1285
+ align-items: center;
1286
+ gap: 2px;
1287
+ flex-shrink: 0;
1288
+ text-shadow: 0 0 8px var(--lang-color, var(--accent-cyan));
1289
+ }
1290
+
1291
+ /* Filename */
1292
+ .code-filename {
1293
+ font-family: var(--font-mono);
1294
+ font-size: 11px;
1295
+ color: var(--text-muted);
1296
+ background: rgba(255,255,255,0.05);
1297
+ border: 1px solid var(--glass-border);
1298
+ border-radius: 4px;
1299
+ padding: 1px 7px;
1300
+ white-space: nowrap;
1301
+ overflow: hidden;
1302
+ text-overflow: ellipsis;
1303
+ max-width: 200px;
1304
+ }
1305
+
1306
+ /* Line count */
1307
+ .code-lines-count {
1308
+ font-family: var(--font-mono);
1309
+ font-size: 9.5px;
1310
+ color: var(--text-dim);
1311
+ white-space: nowrap;
1312
+ }
1313
+
1314
+ /* Expand button */
1315
+ .code-expand-btn {
1316
+ font-size: 14px;
1317
+ background: transparent;
1318
+ border: none;
1319
+ color: var(--text-dim);
1320
+ cursor: pointer;
1321
+ padding: 0 4px;
1322
+ line-height: 1;
1323
+ transition: color 0.2s;
1324
+ }
1325
+ .code-expand-btn:hover { color: var(--text); }
1326
+
1327
+ /* Copy button */
1328
+ .code-copy {
1329
+ display: flex;
1330
+ align-items: center;
1331
+ gap: 5px;
1332
+ font-family: var(--font-mono);
1333
+ font-size: 10px;
1334
+ color: var(--text-dim);
1335
+ background: transparent;
1336
+ border: none;
1337
+ cursor: pointer;
1338
+ padding: 3px 8px;
1339
+ border-radius: 4px;
1340
+ transition: color 0.2s, background 0.2s;
1341
+ white-space: nowrap;
1342
+ }
1343
+ .code-copy:hover { color: var(--text); background: rgba(255,255,255,0.06); }
1344
+ .code-copy.copied { color: var(--accent-green); }
1345
+
1346
+ /* ── Code body ── */
1347
+ .code-body { overflow: hidden; }
1348
+ .code-body-collapsed { max-height: 400px; overflow: hidden; position: relative; }
1349
+ .code-body-collapsed::after {
1350
+ content: '';
1351
+ position: absolute;
1352
+ bottom: 0; left: 0; right: 0;
1353
+ height: 80px;
1354
+ background: linear-gradient(to bottom, transparent, rgba(0,0,0,0.8));
1355
+ pointer-events: none;
1356
+ }
1357
+ .code-expanded .code-body-collapsed { max-height: none; overflow: auto; }
1358
+ .code-expanded .code-body-collapsed::after { display: none; }
1359
+
1360
+ /* Show more button */
1361
+ .code-show-more {
1362
+ display: block;
1363
+ width: 100%;
1364
+ padding: 8px;
1365
+ background: rgba(255,255,255,0.03);
1366
+ border: none;
1367
+ border-top: 1px solid var(--glass-border);
1368
+ color: var(--text-dim);
1369
+ font-family: var(--font-mono);
1370
+ font-size: 10px;
1371
+ cursor: pointer;
1372
+ letter-spacing: 0.06em;
1373
+ transition: background 0.2s, color 0.2s;
1374
+ text-align: center;
1375
+ }
1376
+ .code-show-more:hover { background: rgba(255,255,255,0.06); color: var(--text); }
1377
+
1378
+ /* ── Line numbers ── */
1379
+ .code-pre {
1380
+ margin: 0;
1381
+ padding: 12px 0;
1382
+ overflow-x: auto;
1383
+ font-size: 12.5px;
1384
+ line-height: 1.65;
1385
+ }
1386
+
1387
+ .code-numbered { display: block; }
1388
+
1389
+ .code-line {
1390
+ display: flex;
1391
+ min-height: 1.65em;
1392
+ }
1393
+
1394
+ .code-line:hover { background: rgba(255,255,255,0.03); }
1395
+
1396
+ .line-num {
1397
+ display: inline-block;
1398
+ min-width: 44px;
1399
+ padding: 0 12px 0 14px;
1400
+ color: rgba(255,255,255,0.2);
1401
+ text-align: right;
1402
+ user-select: none;
1403
+ border-right: 1px solid rgba(255,255,255,0.06);
1404
+ flex-shrink: 0;
1405
+ font-size: 11px;
1406
+ line-height: inherit;
1407
+ }
1408
+
1409
+ .line-content {
1410
+ display: inline-block;
1411
+ padding: 0 16px;
1412
+ white-space: pre;
1413
+ flex: 1;
1414
+ }
1415
+
1416
+ .hljs { background: transparent !important; padding: 0 !important; }
1417
+
1418
+ /* ── Thinking block ─────────────────────────────────────────────────── */
1419
+ .msg-thinking { margin: 4px 0 8px; }
1420
+
1421
+ .thinking-toggle {
1422
+ display: flex;
1423
+ align-items: center;
1424
+ gap: 7px;
1425
+ background: transparent;
1426
+ border: none;
1427
+ cursor: pointer;
1428
+ padding: 4px 0;
1429
+ color: var(--text-dim);
1430
+ font-size: 11px;
1431
+ font-family: var(--font-mono);
1432
+ letter-spacing: 0.05em;
1433
+ transition: color 0.2s;
1434
+ }
1435
+ .thinking-toggle:hover { color: var(--text-muted); }
1436
+ .thinking-icon { color: var(--accent-purple); }
1437
+ .thinking-chevron { font-size: 9px; transition: transform 0.2s; }
1438
+
1439
+ .thinking-body {
1440
+ max-height: 0;
1441
+ overflow: hidden;
1442
+ transition: max-height 0.35s ease;
1443
+ }
1444
+ .thinking-body.thinking-open { max-height: 600px; overflow-y: auto; }
1445
+
1446
+ .thinking-text {
1447
+ margin-top: 6px;
1448
+ padding: 10px 14px;
1449
+ border: 1px dashed rgba(139,92,246,0.25);
1450
+ border-radius: 8px;
1451
+ background: rgba(139,92,246,0.04);
1452
+ font-size: 12px;
1453
+ line-height: 1.65;
1454
+ color: var(--text-muted);
1455
+ white-space: pre-wrap;
1456
+ font-family: var(--font-mono);
1457
+ }
1458
+
1459
+ /* ── Tool call card ─────────────────────────────────────────────────── */
1460
+ .msg-tool-card {
1461
+ margin: 4px 0;
1462
+ border: 1px solid var(--glass-border);
1463
+ border-radius: 8px;
1464
+ overflow: hidden;
1465
+ background: rgba(255,255,255,0.02);
1466
+ }
1467
+
1468
+ .tool-header {
1469
+ display: flex;
1470
+ align-items: center;
1471
+ gap: 8px;
1472
+ width: 100%;
1473
+ padding: 8px 12px;
1474
+ background: transparent;
1475
+ border: none;
1476
+ cursor: pointer;
1477
+ text-align: left;
1478
+ color: var(--text-muted);
1479
+ font-size: 12px;
1480
+ transition: background 0.2s;
1481
+ }
1482
+ .tool-header:hover { background: rgba(255,255,255,0.03); }
1483
+ .tool-icon { font-size: 13px; flex-shrink: 0; }
1484
+ .tool-name { flex: 1; font-family: var(--font-mono); font-size: 11px; color: var(--text); }
1485
+ .tool-chevron { font-size: 9px; color: var(--text-dim); }
1486
+
1487
+ .tool-body {
1488
+ max-height: 0;
1489
+ overflow: hidden;
1490
+ transition: max-height 0.3s ease;
1491
+ border-top: 0 solid var(--glass-border);
1492
+ }
1493
+ .tool-body.tool-open { max-height: 320px; overflow-y: auto; border-top-width: 1px; }
1494
+
1495
+ .tool-input {
1496
+ margin: 0;
1497
+ padding: 10px 14px;
1498
+ font-family: var(--font-mono);
1499
+ font-size: 11.5px;
1500
+ line-height: 1.5;
1501
+ color: var(--text-muted);
1502
+ white-space: pre-wrap;
1503
+ word-break: break-all;
1504
+ background: rgba(0,0,0,0.25);
1505
+ }
1506
+
1507
+ /* ── Tool result ────────────────────────────────────────────────────── */
1508
+ .msg-tool-result {
1509
+ margin: 2px 0 6px;
1510
+ border: 1px solid rgba(52,211,153,0.14);
1511
+ border-radius: 8px;
1512
+ overflow: hidden;
1513
+ background: rgba(52,211,153,0.02);
1514
+ }
1515
+
1516
+ .result-header {
1517
+ display: flex;
1518
+ align-items: center;
1519
+ gap: 8px;
1520
+ padding: 6px 12px;
1521
+ font-size: 11px;
1522
+ color: var(--text-dim);
1523
+ }
1524
+ .result-icon { color: var(--accent-green); font-size: 12px; }
1525
+ .result-label { font-family: var(--font-mono); letter-spacing: 0.06em; flex: 1; }
1526
+
1527
+ .result-expand {
1528
+ font-family: var(--font-mono);
1529
+ font-size: 9px;
1530
+ background: transparent;
1531
+ border: 1px solid var(--glass-border);
1532
+ border-radius: 4px;
1533
+ color: var(--text-dim);
1534
+ cursor: pointer;
1535
+ padding: 2px 8px;
1536
+ transition: color 0.2s;
1537
+ }
1538
+ .result-expand:hover { color: var(--text); }
1539
+
1540
+ .result-preview { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; border-top: 0 solid rgba(52,211,153,0.14); }
1541
+ .result-open { max-height: 260px; overflow-y: auto; border-top-width: 1px; }
1542
+
1543
+ .result-text {
1544
+ margin: 0;
1545
+ padding: 8px 14px;
1546
+ font-family: var(--font-mono);
1547
+ font-size: 11.5px;
1548
+ line-height: 1.5;
1549
+ color: var(--text-muted);
1550
+ white-space: pre-wrap;
1551
+ word-break: break-all;
1552
+ background: rgba(0,0,0,0.2);
1553
+ }
1554
+
1555
+ /* ── Message image ──────────────────────────────────────────────────── */
1556
+ .msg-image img {
1557
+ max-width: 100%;
1558
+ border-radius: 8px;
1559
+ border: 1px solid var(--glass-border);
1560
+ margin: 4px 0;
1561
+ }
1562
+
1563
+ /* ── Copy button ────────────────────────────────────────────────────── */
1564
+ .msg-copy-btn {
1565
+ position: absolute;
1566
+ top: 8px;
1567
+ right: 8px;
1568
+ background: rgba(255,255,255,0.06);
1569
+ border: 1px solid var(--glass-border);
1570
+ border-radius: 6px;
1571
+ color: var(--text-dim);
1572
+ cursor: pointer;
1573
+ padding: 5px 6px;
1574
+ opacity: 0;
1575
+ transition: opacity 0.2s, color 0.2s, background 0.2s;
1576
+ display: flex;
1577
+ align-items: center;
1578
+ line-height: 1;
1579
+ }
1580
+ .stream-bubble:hover .msg-copy-btn,
1581
+ .msg-copy-visible { opacity: 1; }
1582
+ .msg-copy-btn:hover { color: var(--text); background: rgba(255,255,255,0.1); }
1583
+ .msg-copy-btn.copied { color: var(--accent-green); }
1584
+
1585
+ /* ── Timestamp ──────────────────────────────────────────────────────── */
1586
+ .msg-timestamp {
1587
+ font-family: var(--font-mono);
1588
+ font-size: 9.5px;
1589
+ color: var(--text-dim);
1590
+ margin-top: 10px;
1591
+ letter-spacing: 0.05em;
1592
+ }
1593
+
1594
+
1595
+ /* ── Task lists ─────────────────────────────────────────────────────── */
1596
+ .msg-text :where(li.task-item) {
1597
+ list-style: none;
1598
+ margin-left: -1.4em;
1599
+ padding-left: 0.2em;
1600
+ display: flex;
1601
+ align-items: baseline;
1602
+ gap: 7px;
1603
+ }
1604
+
1605
+ .task-cb {
1606
+ appearance: none;
1607
+ -webkit-appearance: none;
1608
+ width: 14px;
1609
+ height: 14px;
1610
+ border: 1.5px solid var(--glass-border-strong);
1611
+ border-radius: 3px;
1612
+ background: transparent;
1613
+ flex-shrink: 0;
1614
+ position: relative;
1615
+ top: 2px;
1616
+ cursor: default;
1617
+ }
1618
+
1619
+ .task-cb:checked {
1620
+ background: var(--accent-cyan);
1621
+ border-color: var(--accent-cyan);
1622
+ }
1623
+
1624
+ .task-cb:checked::after {
1625
+ content: '';
1626
+ position: absolute;
1627
+ top: 1px; left: 3px;
1628
+ width: 5px; height: 8px;
1629
+ border: 2px solid #000;
1630
+ border-top: none;
1631
+ border-left: none;
1632
+ transform: rotate(45deg);
1633
+ }
1634
+
1635
+ .task-done > * { opacity: 0.55; }
1636
+ .task-done .task-cb + span,
1637
+ .task-done .task-cb ~ * { text-decoration: line-through; }
1638
+
1639
+ /* ── Table overflow wrapper ──────────────────────────────────────────── */
1640
+ .msg-text :where(table) {
1641
+ display: block;
1642
+ overflow-x: auto;
1643
+ white-space: nowrap;
1644
+ }
1645
+ /* Allow cells to wrap when content isn't too wide */
1646
+ .msg-text :where(th, td) {
1647
+ white-space: normal;
1648
+ min-width: 80px;
1649
+ }
1650
+
1651
+ /* ── Details / Summary (collapsible sections) ─────────────────────────── */
1652
+ .msg-text :where(details) {
1653
+ border: 1px solid var(--glass-border);
1654
+ border-radius: 8px;
1655
+ padding: 0;
1656
+ margin: 0.6em 0;
1657
+ overflow: hidden;
1658
+ background: rgba(255,255,255,0.02);
1659
+ }
1660
+
1661
+ .msg-text :where(summary) {
1662
+ padding: 8px 14px;
1663
+ cursor: pointer;
1664
+ font-weight: 600;
1665
+ font-size: 13px;
1666
+ color: var(--text-muted);
1667
+ list-style: none;
1668
+ display: flex;
1669
+ align-items: center;
1670
+ gap: 8px;
1671
+ user-select: none;
1672
+ transition: background 0.2s;
1673
+ }
1674
+ .msg-text :where(summary):hover { background: rgba(255,255,255,0.03); }
1675
+ .msg-text :where(summary)::before {
1676
+ content: '▸';
1677
+ font-size: 9px;
1678
+ color: var(--accent-cyan);
1679
+ transition: transform 0.2s;
1680
+ }
1681
+ .msg-text :where(details[open] summary)::before {
1682
+ transform: rotate(90deg);
1683
+ }
1684
+ .msg-text :where(details) > *:not(summary) {
1685
+ padding: 0 14px 10px;
1686
+ }
1687
+
1688
+ /* ── Spacing improvements ────────────────────────────────────────────── */
1689
+ .bubble-content + .bubble-content { margin-top: 0.5em; }
1690
+
1691
+ .msg-text :where(h1 + p, h2 + p, h3 + p) { margin-top: 0.4em; }
1692
+ .msg-text :where(p:last-child, ul:last-child, ol:last-child) { margin-bottom: 0; }
1693
+
1694
+ /* Separator after heading when followed by block content */
1695
+ .msg-text :where(h2, h3) {
1696
+ padding-top: 0.3em;
1697
+ }
1698
+
1699
+ /* Better nested list indent */
1700
+ .msg-text :where(ul ul, ol ol, ul ol, ol ul) {
1701
+ margin-top: 0.25em;
1702
+ margin-bottom: 0.25em;
1703
+ padding-left: 1.2em;
1704
+ }
1705
+
1706
+ /* ── Keyboard shortcut styling ───────────────────────────────────────── */
1707
+ .msg-text :where(kbd) {
1708
+ font-family: var(--font-mono);
1709
+ font-size: 0.8em;
1710
+ background: rgba(255,255,255,0.1);
1711
+ border: 1px solid rgba(255,255,255,0.2);
1712
+ border-bottom: 2px solid rgba(255,255,255,0.15);
1713
+ border-radius: 4px;
1714
+ padding: 1px 5px;
1715
+ color: var(--text);
1716
+ }
1717
+
1718
+ /* ── Abbr tooltip ────────────────────────────────────────────────────── */
1719
+ .msg-text :where(abbr[title]) {
1720
+ border-bottom: 1px dotted var(--text-muted);
1721
+ cursor: help;
1722
+ text-decoration: none;
1723
+ }
1724
+
1725
+ /* ── Scrollbar ────────────────────────────────────────────────────── */
1726
+ .response-area::-webkit-scrollbar { display: none; }
1727
+ .response-area { scrollbar-width: none; }
1728
+
1729
+ /* ══════════════════════════════════════════════════════════════════════
1730
+ COMMAND MENU SYSTEM
1731
+ ══════════════════════════════════════════════════════════════════════ */
1732
+
1733
+ /* ── Group accent colours ─────────────────────────────────────────── */
1734
+ :root {
1735
+ --cmd-chat: #00d4ff;
1736
+ --cmd-control: #60a5fa;
1737
+ --cmd-agent: #a78bfa;
1738
+ --cmd-settings: #f59e0b;
1739
+ --cmd-resources: #34d399;
1740
+ }
1741
+
1742
+ /* ── Menu Trigger Button ──────────────────────────────────────────── */
1743
+ .menu-trigger {
1744
+ position: fixed;
1745
+ top: 20px;
1746
+ left: 20px;
1747
+ z-index: 50;
1748
+ width: 38px;
1749
+ height: 38px;
1750
+ display: flex;
1751
+ align-items: center;
1752
+ justify-content: center;
1753
+ background: var(--glass-bg);
1754
+ backdrop-filter: var(--blur);
1755
+ -webkit-backdrop-filter: var(--blur);
1756
+ border: 1px solid var(--glass-border);
1757
+ border-radius: 10px;
1758
+ color: var(--text-muted);
1759
+ cursor: pointer;
1760
+ transition: color 0.2s, border-color 0.2s, box-shadow 0.2s, transform 0.2s;
1761
+ }
1762
+ .menu-trigger:hover {
1763
+ color: var(--accent-cyan);
1764
+ border-color: rgba(0,212,255,0.35);
1765
+ box-shadow: 0 0 12px rgba(0,212,255,0.15);
1766
+ }
1767
+ .menu-trigger:active { transform: scale(0.93); }
1768
+
1769
+ /* Icon swap: grid → close */
1770
+ .menu-icon-close { display: none; }
1771
+ .menu-trigger.menu-open .menu-icon-grid { display: none; }
1772
+ .menu-trigger.menu-open .menu-icon-close { display: block; color: var(--accent-cyan); }
1773
+ .menu-trigger.menu-open {
1774
+ color: var(--accent-cyan);
1775
+ border-color: rgba(0,212,255,0.4);
1776
+ box-shadow: 0 0 16px rgba(0,212,255,0.2);
1777
+ }
1778
+
1779
+ /* ── Full-Screen Overlay ──────────────────────────────────────────── */
1780
+ .cmd-overlay {
1781
+ position: fixed;
1782
+ inset: 0;
1783
+ z-index: 40;
1784
+ display: flex;
1785
+ align-items: center;
1786
+ justify-content: center;
1787
+ /* Hidden state */
1788
+ opacity: 0;
1789
+ pointer-events: none;
1790
+ transform: scale(0.97);
1791
+ transition: opacity 0.28s ease, transform 0.28s ease;
1792
+ }
1793
+ .cmd-overlay.open {
1794
+ opacity: 1;
1795
+ pointer-events: auto;
1796
+ transform: scale(1);
1797
+ }
1798
+
1799
+ /* Dark glass backdrop */
1800
+ .cmd-backdrop {
1801
+ position: absolute;
1802
+ inset: 0;
1803
+ background: rgba(6, 8, 14, 0.9);
1804
+ backdrop-filter: blur(24px);
1805
+ -webkit-backdrop-filter: blur(24px);
1806
+ }
1807
+
1808
+ /* Shell (content on top of backdrop) */
1809
+ .cmd-shell {
1810
+ position: relative;
1811
+ z-index: 1;
1812
+ width: 100%;
1813
+ max-width: 1080px;
1814
+ padding: 0 32px;
1815
+ display: flex;
1816
+ flex-direction: column;
1817
+ gap: 24px;
1818
+ }
1819
+
1820
+ /* ── Header Bar ───────────────────────────────────────────────────── */
1821
+ .cmd-header {
1822
+ display: flex;
1823
+ align-items: center;
1824
+ justify-content: space-between;
1825
+ padding-bottom: 16px;
1826
+ border-bottom: 1px solid var(--glass-border);
1827
+ }
1828
+ .cmd-brand {
1829
+ display: flex;
1830
+ align-items: center;
1831
+ gap: 10px;
1832
+ }
1833
+ .cmd-brand-glyph {
1834
+ font-size: 22px;
1835
+ color: var(--accent-cyan);
1836
+ text-shadow: 0 0 12px var(--accent-cyan);
1837
+ animation: aso-breathe 3s ease-in-out infinite;
1838
+ }
1839
+ .cmd-brand-name {
1840
+ font-family: var(--font-mono);
1841
+ font-size: 18px;
1842
+ font-weight: 700;
1843
+ color: var(--text);
1844
+ letter-spacing: 0.15em;
1845
+ }
1846
+ .cmd-brand-sep {
1847
+ font-size: 16px;
1848
+ color: var(--text-dim);
1849
+ margin: 0 2px;
1850
+ }
1851
+ .cmd-brand-sub {
1852
+ font-family: var(--font-mono);
1853
+ font-size: 11px;
1854
+ color: var(--text-dim);
1855
+ letter-spacing: 0.22em;
1856
+ padding-top: 2px;
1857
+ }
1858
+ .cmd-esc-hint {
1859
+ font-size: 11px;
1860
+ color: var(--text-dim);
1861
+ display: flex;
1862
+ align-items: center;
1863
+ gap: 5px;
1864
+ }
1865
+ .cmd-kbd {
1866
+ font-family: var(--font-mono);
1867
+ font-size: 10px;
1868
+ padding: 2px 6px;
1869
+ background: rgba(255,255,255,0.07);
1870
+ border: 1px solid rgba(255,255,255,0.12);
1871
+ border-radius: 4px;
1872
+ color: var(--text-muted);
1873
+ }
1874
+
1875
+ /* ── Command Grid ─────────────────────────────────────────────────── */
1876
+ .cmd-grid {
1877
+ display: grid;
1878
+ grid-template-columns: 200px 1fr 200px;
1879
+ grid-template-rows: auto auto;
1880
+ gap: 14px;
1881
+ width: 100%;
1882
+ }
1883
+
1884
+ .cmd-group--chat { grid-column: 1; grid-row: 1 / 3; }
1885
+ .cmd-group--control { grid-column: 2; grid-row: 1; }
1886
+ .cmd-group--agent { grid-column: 3; grid-row: 1; }
1887
+ .cmd-group--settings { grid-column: 2; grid-row: 2; }
1888
+ .cmd-group--resources { grid-column: 3; grid-row: 2; }
1889
+
1890
+ /* ── Group Card ───────────────────────────────────────────────────── */
1891
+ .cmd-group {
1892
+ background: var(--glass-bg);
1893
+ border: 1px solid var(--glass-border);
1894
+ border-radius: 16px;
1895
+ padding: 18px;
1896
+ display: flex;
1897
+ flex-direction: column;
1898
+ gap: 14px;
1899
+ /* Stagger-reveal when overlay opens */
1900
+ opacity: 0;
1901
+ transform: translateY(14px);
1902
+ transition: border-color 0.25s, box-shadow 0.25s;
1903
+ }
1904
+ .cmd-overlay.open .cmd-group {
1905
+ animation: cmd-card-in 0.32s ease forwards;
1906
+ }
1907
+ .cmd-overlay.open .cmd-group:nth-child(1) { animation-delay: 30ms; }
1908
+ .cmd-overlay.open .cmd-group:nth-child(2) { animation-delay: 80ms; }
1909
+ .cmd-overlay.open .cmd-group:nth-child(3) { animation-delay: 130ms; }
1910
+ .cmd-overlay.open .cmd-group:nth-child(4) { animation-delay: 180ms; }
1911
+ .cmd-overlay.open .cmd-group:nth-child(5) { animation-delay: 230ms; }
1912
+
1913
+ @keyframes cmd-card-in {
1914
+ from { opacity: 0; transform: translateY(14px); }
1915
+ to { opacity: 1; transform: translateY(0); }
1916
+ }
1917
+
1918
+ /* Per-group accent borders & hover glow */
1919
+ .cmd-group--chat:hover { border-color: rgba(0,212,255,0.35); box-shadow: 0 0 20px rgba(0,212,255,0.06); }
1920
+ .cmd-group--control:hover { border-color: rgba(96,165,250,0.35); box-shadow: 0 0 20px rgba(96,165,250,0.06); }
1921
+ .cmd-group--agent:hover { border-color: rgba(167,139,250,0.35); box-shadow: 0 0 20px rgba(167,139,250,0.06); }
1922
+ .cmd-group--settings:hover { border-color: rgba(245,158,11,0.35); box-shadow: 0 0 20px rgba(245,158,11,0.06); }
1923
+ .cmd-group--resources:hover { border-color: rgba(52,211,153,0.35); box-shadow: 0 0 20px rgba(52,211,153,0.06); }
1924
+
1925
+ /* ── Group Header ─────────────────────────────────────────────────── */
1926
+ .cmd-group-hd {
1927
+ display: flex;
1928
+ align-items: center;
1929
+ gap: 9px;
1930
+ padding-bottom: 10px;
1931
+ border-bottom: 1px solid var(--glass-border);
1932
+ }
1933
+ .cmd-group-svg {
1934
+ width: 16px;
1935
+ height: 16px;
1936
+ flex-shrink: 0;
1937
+ }
1938
+ .cmd-group-label {
1939
+ font-family: var(--font-mono);
1940
+ font-size: 10px;
1941
+ font-weight: 700;
1942
+ letter-spacing: 0.2em;
1943
+ }
1944
+
1945
+ /* Accent colours on group labels and icons */
1946
+ .cmd-group--chat .cmd-group-hd { color: var(--cmd-chat); }
1947
+ .cmd-group--control .cmd-group-hd { color: var(--cmd-control); }
1948
+ .cmd-group--agent .cmd-group-hd { color: var(--cmd-agent); }
1949
+ .cmd-group--settings .cmd-group-hd { color: var(--cmd-settings); }
1950
+ .cmd-group--resources .cmd-group-hd { color: var(--cmd-resources); }
1951
+
1952
+ /* ── Items List ───────────────────────────────────────────────────── */
1953
+ .cmd-items {
1954
+ display: flex;
1955
+ flex-direction: column;
1956
+ gap: 6px;
1957
+ flex: 1;
1958
+ }
1959
+
1960
+ /* 3-column sub-grid for CONTROL (6 items) */
1961
+ .cmd-items--grid {
1962
+ display: grid;
1963
+ grid-template-columns: 1fr 1fr 1fr;
1964
+ gap: 8px;
1965
+ }
1966
+
1967
+ /* ── Individual Item ──────────────────────────────────────────────── */
1968
+ .cmd-item {
1969
+ display: flex;
1970
+ align-items: center;
1971
+ gap: 10px;
1972
+ padding: 10px 12px;
1973
+ border-radius: 10px;
1974
+ border: 1px solid transparent;
1975
+ background: rgba(255,255,255,0.025);
1976
+ text-decoration: none;
1977
+ cursor: pointer;
1978
+ transition: background 0.18s, border-color 0.18s, transform 0.15s;
1979
+ }
1980
+ .cmd-item:hover {
1981
+ background: rgba(255,255,255,0.06);
1982
+ transform: translateY(-1px);
1983
+ }
1984
+ /* Per-group item hover accent */
1985
+ .cmd-group--chat .cmd-item:hover { border-color: rgba(0,212,255,0.3); }
1986
+ .cmd-group--control .cmd-item:hover { border-color: rgba(96,165,250,0.3); }
1987
+ .cmd-group--agent .cmd-item:hover { border-color: rgba(167,139,250,0.3); }
1988
+ .cmd-group--settings .cmd-item:hover { border-color: rgba(245,158,11,0.3); }
1989
+ .cmd-group--resources .cmd-item:hover { border-color: rgba(52,211,153,0.3); }
1990
+
1991
+ .cmd-item-icon {
1992
+ font-size: 16px;
1993
+ flex-shrink: 0;
1994
+ width: 20px;
1995
+ text-align: center;
1996
+ opacity: 0.7;
1997
+ }
1998
+ .cmd-group--chat .cmd-item-icon { color: var(--cmd-chat); }
1999
+ .cmd-group--control .cmd-item-icon { color: var(--cmd-control); }
2000
+ .cmd-group--agent .cmd-item-icon { color: var(--cmd-agent); }
2001
+ .cmd-group--settings .cmd-item-icon { color: var(--cmd-settings); }
2002
+ .cmd-group--resources .cmd-item-icon { color: var(--cmd-resources); }
2003
+
2004
+ .cmd-item-body {
2005
+ display: flex;
2006
+ flex-direction: column;
2007
+ gap: 2px;
2008
+ min-width: 0;
2009
+ flex: 1;
2010
+ }
2011
+ .cmd-item-name {
2012
+ font-family: var(--font-mono);
2013
+ font-size: 12px;
2014
+ font-weight: 600;
2015
+ color: var(--text);
2016
+ white-space: nowrap;
2017
+ overflow: hidden;
2018
+ text-overflow: ellipsis;
2019
+ }
2020
+ .cmd-item-desc {
2021
+ font-size: 10px;
2022
+ color: var(--text-dim);
2023
+ white-space: nowrap;
2024
+ overflow: hidden;
2025
+ text-overflow: ellipsis;
2026
+ }
2027
+ .cmd-item-badge {
2028
+ font-family: var(--font-mono);
2029
+ font-size: 8px;
2030
+ font-weight: 700;
2031
+ letter-spacing: 0.1em;
2032
+ padding: 2px 6px;
2033
+ border-radius: 99px;
2034
+ background: rgba(0,212,255,0.12);
2035
+ color: var(--accent-cyan);
2036
+ border: 1px solid rgba(0,212,255,0.25);
2037
+ flex-shrink: 0;
2038
+ }
2039
+
2040
+ /* ── History button ─────────────────────────────────────────────────── */
2041
+ .history-btn {
2042
+ display: flex; align-items: center; gap: 5px;
2043
+ padding: 5px 11px;
2044
+ height: 28px;
2045
+ background: rgba(139,92,246,0.08);
2046
+ border: 1px solid rgba(139,92,246,0.2);
2047
+ border-radius: 8px;
2048
+ color: rgba(139,92,246,0.85);
2049
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
2050
+ cursor: pointer; transition: all 0.2s; white-space: nowrap; flex-shrink: 0;
2051
+ }
2052
+ .history-btn:hover {
2053
+ background: rgba(139,92,246,0.16);
2054
+ border-color: rgba(139,92,246,0.4);
2055
+ box-shadow: 0 0 12px rgba(139,92,246,0.12);
2056
+ }
2057
+ .history-btn-label { font-size: 10px; }
2058
+
2059
+ /* ── History overlay + drawer ───────────────────────────────────────── */
2060
+ .history-overlay {
2061
+ position: fixed; inset: 0; z-index: 1100;
2062
+ background: rgba(0,0,0,0.55);
2063
+ backdrop-filter: blur(4px);
2064
+ opacity: 0; pointer-events: none;
2065
+ transition: opacity 0.25s ease;
2066
+ }
2067
+ .history-overlay.open { opacity: 1; pointer-events: auto; }
2068
+
2069
+ .history-drawer {
2070
+ position: fixed; top: 0; right: -440px; height: 100vh; width: 420px;
2071
+ z-index: 1101;
2072
+ background: rgba(10,12,20,0.97);
2073
+ border-left: 1px solid rgba(139,92,246,0.25);
2074
+ box-shadow: -20px 0 60px rgba(0,0,0,0.6);
2075
+ display: flex; flex-direction: column;
2076
+ transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2077
+ }
2078
+ .history-drawer.open { right: 0; }
2079
+
2080
+ .history-drawer-header {
2081
+ display: flex; align-items: center; justify-content: space-between;
2082
+ padding: 16px 18px 14px;
2083
+ border-bottom: 1px solid rgba(139,92,246,0.15);
2084
+ flex-shrink: 0;
2085
+ }
2086
+ .history-drawer-title {
2087
+ display: flex; align-items: center; gap: 7px;
2088
+ font-family: var(--font-mono); font-size: 11px; font-weight: 700;
2089
+ letter-spacing: 0.14em; color: rgba(139,92,246,0.9);
2090
+ }
2091
+ .history-close-btn {
2092
+ background: none; border: none; color: var(--text-dim);
2093
+ font-size: 13px; cursor: pointer; padding: 4px 6px; border-radius: 4px;
2094
+ transition: color 0.15s, background 0.15s;
2095
+ }
2096
+ .history-close-btn:hover { color: var(--text-primary); background: rgba(255,255,255,0.06); }
2097
+
2098
+ .history-drawer-body {
2099
+ flex: 1; overflow-y: auto; padding: 12px 0;
2100
+ }
2101
+ .history-drawer-body::-webkit-scrollbar { width: 4px; }
2102
+ .history-drawer-body::-webkit-scrollbar-track { background: transparent; }
2103
+ .history-drawer-body::-webkit-scrollbar-thumb { background: rgba(139,92,246,0.3); border-radius: 2px; }
2104
+
2105
+ .history-loading {
2106
+ padding: 24px 18px;
2107
+ color: var(--text-dim);
2108
+ font-size: 12px; font-family: var(--font-mono);
2109
+ text-align: center;
2110
+ }
2111
+
2112
+ /* ── Session list items ─────────────────────────────────────────────── */
2113
+ .history-session-item {
2114
+ padding: 12px 18px;
2115
+ cursor: pointer;
2116
+ border-bottom: 1px solid rgba(255,255,255,0.04);
2117
+ transition: background 0.15s;
2118
+ position: relative;
2119
+ }
2120
+ .history-session-item:hover { background: rgba(139,92,246,0.07); }
2121
+ .history-session-item:last-child { border-bottom: none; }
2122
+
2123
+ .history-session-meta {
2124
+ display: flex; align-items: center; justify-content: space-between;
2125
+ margin-bottom: 5px;
2126
+ }
2127
+ .history-session-date {
2128
+ font-family: var(--font-mono); font-size: 10px; font-weight: 600;
2129
+ color: rgba(139,92,246,0.8); letter-spacing: 0.06em;
2130
+ }
2131
+ .history-session-count {
2132
+ font-family: var(--font-mono); font-size: 9px;
2133
+ color: var(--text-dim); letter-spacing: 0.05em;
2134
+ }
2135
+ .history-session-preview {
2136
+ font-size: 12px; color: var(--text-secondary);
2137
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
2138
+ line-height: 1.4;
2139
+ }
2140
+ .history-session-badge {
2141
+ display: inline-block; margin-bottom: 4px;
2142
+ font-family: var(--font-mono); font-size: 9px; font-weight: 700;
2143
+ letter-spacing: 0.1em; padding: 2px 6px; border-radius: 99px;
2144
+ }
2145
+ .history-session-badge.live {
2146
+ background: rgba(0,212,255,0.12); color: var(--accent-cyan);
2147
+ border: 1px solid rgba(0,212,255,0.25);
2148
+ }
2149
+ .history-session-badge.archived {
2150
+ background: rgba(139,92,246,0.1); color: rgba(139,92,246,0.7);
2151
+ border: 1px solid rgba(139,92,246,0.2);
2152
+ }
2153
+
2154
+ /* ── Archive viewer banner ──────────────────────────────────────────── */
2155
+ .archive-banner {
2156
+ display: flex; align-items: center; justify-content: space-between;
2157
+ padding: 10px 14px; margin: 0 0 8px;
2158
+ background: rgba(139,92,246,0.1);
2159
+ border-bottom: 1px solid rgba(139,92,246,0.2);
2160
+ flex-shrink: 0;
2161
+ }
2162
+ .archive-banner-label {
2163
+ font-family: var(--font-mono); font-size: 10px;
2164
+ color: rgba(139,92,246,0.8); letter-spacing: 0.08em;
2165
+ }
2166
+ .archive-banner-back {
2167
+ font-family: var(--font-mono); font-size: 10px; font-weight: 600;
2168
+ color: rgba(139,92,246,0.9); cursor: pointer;
2169
+ background: none; border: none; padding: 3px 8px;
2170
+ border: 1px solid rgba(139,92,246,0.3); border-radius: 6px;
2171
+ transition: all 0.15s;
2172
+ }
2173
+ .archive-banner-back:hover { background: rgba(139,92,246,0.15); }
2174
+
2175
+ .history-transcript {
2176
+ flex: 1; overflow-y: auto; padding: 8px 12px;
2177
+ }
2178
+ .history-transcript::-webkit-scrollbar { width: 4px; }
2179
+ .history-transcript::-webkit-scrollbar-thumb { background: rgba(139,92,246,0.3); border-radius: 2px; }
2180
+
2181
+ .history-msg {
2182
+ margin-bottom: 12px; font-size: 12.5px; line-height: 1.5;
2183
+ }
2184
+ .history-msg-role {
2185
+ font-family: var(--font-mono); font-size: 9px; font-weight: 700;
2186
+ letter-spacing: 0.1em; margin-bottom: 3px;
2187
+ }
2188
+ .history-msg-role.user { color: var(--accent-cyan); }
2189
+ .history-msg-role.assistant { color: rgba(139,92,246,0.8); }
2190
+ .history-msg-text {
2191
+ color: var(--text-secondary); padding: 6px 10px;
2192
+ background: rgba(255,255,255,0.025);
2193
+ border-radius: 6px; border-left: 2px solid rgba(255,255,255,0.08);
2194
+ white-space: pre-wrap; word-break: break-word;
2195
+ }
2196
+ .history-msg.assistant .history-msg-text {
2197
+ border-left-color: rgba(139,92,246,0.3);
2198
+ }
2199
+ .history-msg.user .history-msg-text {
2200
+ border-left-color: rgba(0,212,255,0.25);
2201
+ }
2202
+
2203
+ .history-empty {
2204
+ padding: 32px 18px; text-align: center;
2205
+ color: var(--text-dim); font-size: 12px; font-family: var(--font-mono);
2206
+ }
2207
+
2208
+ /* ── Archive toast ──────────────────────────────────────────────────── */
2209
+ .session-archive-toast {
2210
+ position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%) translateY(20px);
2211
+ z-index: 1200;
2212
+ display: flex; align-items: center; gap: 7px;
2213
+ padding: 8px 16px;
2214
+ background: rgba(15,17,28,0.95);
2215
+ border: 1px solid rgba(139,92,246,0.35);
2216
+ border-radius: 99px;
2217
+ font-size: 11.5px; font-family: var(--font-mono); color: var(--text-secondary);
2218
+ box-shadow: 0 4px 24px rgba(0,0,0,0.5), 0 0 20px rgba(139,92,246,0.08);
2219
+ opacity: 0; pointer-events: none;
2220
+ transition: opacity 0.25s ease, transform 0.25s ease;
2221
+ white-space: nowrap;
2222
+ }
2223
+ .session-archive-toast.show {
2224
+ opacity: 1; pointer-events: auto; transform: translateX(-50%) translateY(0);
2225
+ }
2226
+ #session-archive-link {
2227
+ color: rgba(139,92,246,0.9); cursor: pointer; font-weight: 600;
2228
+ text-decoration: underline; text-underline-offset: 2px;
2229
+ }
2230
+ #session-archive-link:hover { color: rgba(139,92,246,1); }
2231
+
2232
+ /* ── Queue button ───────────────────────────────────────────────────── */
2233
+ .queue-btn {
2234
+ display: none; /* hidden until streaming starts */
2235
+ align-items: center;
2236
+ gap: 5px;
2237
+ padding: 0 11px;
2238
+ height: 28px;
2239
+ background: rgba(0,212,255,0.08);
2240
+ border: 1px solid rgba(0,212,255,0.2);
2241
+ border-radius: 8px;
2242
+ color: rgba(0,212,255,0.8);
2243
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
2244
+ cursor: pointer; flex-shrink: 0;
2245
+ transition: background 0.2s, border-color 0.2s, box-shadow 0.2s;
2246
+ white-space: nowrap;
2247
+ }
2248
+ .queue-btn.visible { display: flex; }
2249
+ .queue-btn:hover {
2250
+ background: rgba(0,212,255,0.15);
2251
+ border-color: rgba(0,212,255,0.4);
2252
+ box-shadow: 0 0 12px rgba(0,212,255,0.12);
2253
+ }
2254
+
2255
+ /* Active state — item is queued */
2256
+ .queue-btn.has-queue {
2257
+ background: rgba(0,212,255,0.14);
2258
+ border-color: rgba(0,212,255,0.45);
2259
+ color: var(--accent-cyan);
2260
+ box-shadow: 0 0 14px rgba(0,212,255,0.1);
2261
+ }
2262
+
2263
+ .queue-cancel-x {
2264
+ display: none;
2265
+ margin-left: 2px;
2266
+ font-size: 10px;
2267
+ opacity: 0.6;
2268
+ line-height: 1;
2269
+ padding: 1px 3px;
2270
+ border-radius: 3px;
2271
+ transition: opacity 0.15s, background 0.15s;
2272
+ }
2273
+ .queue-btn.has-queue .queue-cancel-x { display: inline; }
2274
+ .queue-cancel-x:hover { opacity: 1; background: rgba(255,255,255,0.1); }
2275
+
2276
+ /* ── Stop button ────────────────────────────────────────────────────── */
2277
+ .stop-btn {
2278
+ display: none; /* hidden until streaming starts */
2279
+ align-items: center;
2280
+ gap: 5px;
2281
+ padding: 0 11px;
2282
+ height: 28px;
2283
+ background: rgba(239,68,68,0.08);
2284
+ border: 1px solid rgba(239,68,68,0.22);
2285
+ border-radius: 8px;
2286
+ color: rgba(239,68,68,0.85);
2287
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.08em; font-weight: 600;
2288
+ cursor: pointer; flex-shrink: 0;
2289
+ transition: background 0.2s, border-color 0.2s, box-shadow 0.2s;
2290
+ white-space: nowrap;
2291
+ }
2292
+ .stop-btn.visible { display: flex; }
2293
+ .stop-btn:hover {
2294
+ background: rgba(239,68,68,0.18);
2295
+ border-color: rgba(239,68,68,0.5);
2296
+ box-shadow: 0 0 14px rgba(239,68,68,0.14);
2297
+ color: rgba(239,68,68,1);
2298
+ }
2299
+ .stop-btn-label { font-size: 10px; }
2300
+
2301
+ /* ── Page Navigation Overlay ────────────────────────────────────────── */
2302
+ .page-overlay {
2303
+ position: fixed;
2304
+ inset: 0;
2305
+ z-index: 1050;
2306
+ display: flex;
2307
+ flex-direction: column;
2308
+ background: rgba(8, 10, 18, 0.98);
2309
+ backdrop-filter: blur(24px);
2310
+ opacity: 0;
2311
+ pointer-events: none;
2312
+ transform: translateY(12px);
2313
+ transition: opacity 0.22s ease, transform 0.22s ease;
2314
+ }
2315
+ .page-overlay.open {
2316
+ opacity: 1;
2317
+ pointer-events: auto;
2318
+ transform: translateY(0);
2319
+ }
2320
+
2321
+ .page-overlay-header {
2322
+ display: flex;
2323
+ align-items: center;
2324
+ gap: 12px;
2325
+ padding: 10px 16px;
2326
+ border-bottom: 1px solid rgba(139,92,246,0.18);
2327
+ background: rgba(10,12,20,0.95);
2328
+ flex-shrink: 0;
2329
+ height: 46px;
2330
+ }
2331
+
2332
+ .page-back-btn {
2333
+ display: flex; align-items: center; gap: 6px;
2334
+ padding: 5px 12px; height: 28px;
2335
+ background: rgba(139,92,246,0.1);
2336
+ border: 1px solid rgba(139,92,246,0.25);
2337
+ border-radius: 8px;
2338
+ color: rgba(139,92,246,0.9);
2339
+ font-size: 11px; font-family: var(--font-mono); font-weight: 600; letter-spacing: 0.07em;
2340
+ cursor: pointer; white-space: nowrap; flex-shrink: 0;
2341
+ transition: all 0.15s;
2342
+ }
2343
+ .page-back-btn:hover {
2344
+ background: rgba(139,92,246,0.2);
2345
+ border-color: rgba(139,92,246,0.45);
2346
+ }
2347
+
2348
+ .page-overlay-title {
2349
+ flex: 1;
2350
+ font-family: var(--font-mono);
2351
+ font-size: 11px; font-weight: 700; letter-spacing: 0.14em;
2352
+ color: rgba(255,255,255,0.6);
2353
+ text-align: center;
2354
+ }
2355
+
2356
+ .page-popout-btn {
2357
+ display: flex; align-items: center; gap: 5px;
2358
+ padding: 5px 11px; height: 28px;
2359
+ background: rgba(0,212,255,0.06);
2360
+ border: 1px solid rgba(0,212,255,0.15);
2361
+ border-radius: 8px;
2362
+ color: rgba(0,212,255,0.6);
2363
+ font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.07em;
2364
+ cursor: pointer; text-decoration: none; flex-shrink: 0;
2365
+ transition: all 0.15s;
2366
+ }
2367
+ .page-popout-btn:hover {
2368
+ background: rgba(0,212,255,0.12);
2369
+ border-color: rgba(0,212,255,0.35);
2370
+ color: rgba(0,212,255,0.9);
2371
+ }
2372
+
2373
+ .page-overlay-frame {
2374
+ flex: 1;
2375
+ border: none;
2376
+ width: 100%;
2377
+ background: transparent;
2378
+ }
2379
+
2380
+ /* ══════════════════════════════════════════════════════════════════════════
2381
+ CONNECTIONS PANEL
2382
+ ══════════════════════════════════════════════════════════════════════════ */
2383
+
2384
+ .connections-panel {
2385
+ display: flex;
2386
+ flex-direction: column;
2387
+ gap: 8px;
2388
+ }
2389
+
2390
+ .conn-btn {
2391
+ position: relative;
2392
+ display: flex;
2393
+ align-items: center;
2394
+ gap: 12px;
2395
+ width: 100%;
2396
+ padding: 10px 12px;
2397
+ background: rgba(255,255,255,0.02);
2398
+ border: 1px solid rgba(255,255,255,0.06);
2399
+ border-radius: 10px;
2400
+ cursor: pointer;
2401
+ transition: all 0.25s ease;
2402
+ text-align: left;
2403
+ color: var(--text);
2404
+ font-family: inherit;
2405
+ }
2406
+ .conn-btn:hover {
2407
+ background: rgba(255,255,255,0.05);
2408
+ border-color: rgba(255,255,255,0.12);
2409
+ transform: translateX(2px);
2410
+ }
2411
+ .conn-btn:active {
2412
+ transform: translateX(2px) scale(0.99);
2413
+ }
2414
+
2415
+ .conn-btn[data-state="connected"] {
2416
+ border-color: rgba(52, 211, 153, 0.25);
2417
+ background: rgba(52, 211, 153, 0.04);
2418
+ }
2419
+ .conn-btn[data-state="connected"]:hover {
2420
+ border-color: rgba(52, 211, 153, 0.4);
2421
+ background: rgba(52, 211, 153, 0.08);
2422
+ }
2423
+ .conn-btn[data-state="error"] {
2424
+ border-color: rgba(248, 113, 113, 0.25);
2425
+ background: rgba(248, 113, 113, 0.04);
2426
+ }
2427
+ .conn-btn[data-state="pending"] {
2428
+ border-color: rgba(251, 191, 36, 0.25);
2429
+ background: rgba(251, 191, 36, 0.04);
2430
+ }
2431
+
2432
+ .conn-icon {
2433
+ flex-shrink: 0;
2434
+ width: 32px;
2435
+ height: 32px;
2436
+ border-radius: 8px;
2437
+ display: flex;
2438
+ align-items: center;
2439
+ justify-content: center;
2440
+ transition: all 0.25s ease;
2441
+ }
2442
+ .conn-icon svg {
2443
+ width: 18px;
2444
+ height: 18px;
2445
+ }
2446
+
2447
+ .conn-icon-slack {
2448
+ background: linear-gradient(135deg, rgba(74, 21, 75, 0.3), rgba(54, 197, 171, 0.2));
2449
+ border: 1px solid rgba(224, 30, 90, 0.2);
2450
+ color: #E01E5A;
2451
+ }
2452
+ .conn-btn[data-state="connected"] .conn-icon-slack {
2453
+ box-shadow: 0 0 12px rgba(224, 30, 90, 0.2);
2454
+ }
2455
+
2456
+ .conn-icon-email {
2457
+ background: linear-gradient(135deg, rgba(96, 165, 250, 0.2), rgba(139, 92, 246, 0.2));
2458
+ border: 1px solid rgba(96, 165, 250, 0.2);
2459
+ color: var(--accent-blue);
2460
+ }
2461
+ .conn-btn[data-state="connected"] .conn-icon-email {
2462
+ box-shadow: 0 0 12px rgba(96, 165, 250, 0.2);
2463
+ }
2464
+
2465
+ .conn-icon-teams {
2466
+ background: linear-gradient(135deg, rgba(98, 100, 167, 0.3), rgba(139, 92, 246, 0.2));
2467
+ border: 1px solid rgba(98, 100, 167, 0.25);
2468
+ color: #6264A7;
2469
+ }
2470
+ .conn-btn[data-state="connected"] .conn-icon-teams {
2471
+ box-shadow: 0 0 12px rgba(98, 100, 167, 0.2);
2472
+ }
2473
+
2474
+ .conn-info {
2475
+ flex: 1;
2476
+ min-width: 0;
2477
+ display: flex;
2478
+ flex-direction: column;
2479
+ gap: 2px;
2480
+ }
2481
+ .conn-name {
2482
+ font-size: 12px;
2483
+ font-weight: 600;
2484
+ color: var(--text);
2485
+ letter-spacing: 0.02em;
2486
+ }
2487
+ .conn-btn-status {
2488
+ font-size: 10px;
2489
+ font-family: var(--font-mono);
2490
+ font-weight: 500;
2491
+ color: var(--text-muted);
2492
+ letter-spacing: 0.03em;
2493
+ }
2494
+ .conn-btn[data-state="connected"] .conn-btn-status {
2495
+ color: var(--accent-green);
2496
+ }
2497
+ .conn-btn[data-state="error"] .conn-btn-status {
2498
+ color: #f87171;
2499
+ }
2500
+ .conn-btn[data-state="pending"] .conn-btn-status {
2501
+ color: #fbbf24;
2502
+ }
2503
+
2504
+ .conn-state {
2505
+ flex-shrink: 0;
2506
+ width: 24px;
2507
+ display: flex;
2508
+ align-items: center;
2509
+ justify-content: center;
2510
+ }
2511
+ .conn-state .conn-dot {
2512
+ width: 8px;
2513
+ height: 8px;
2514
+ border-radius: 50%;
2515
+ background: var(--text-dim);
2516
+ transition: all 0.3s ease;
2517
+ }
2518
+ .conn-btn[data-state="connected"] .conn-state .conn-dot {
2519
+ background: var(--accent-green);
2520
+ box-shadow: 0 0 8px rgba(52, 211, 153, 0.5);
2521
+ animation: conn-pulse 2s ease-in-out infinite;
2522
+ }
2523
+ .conn-btn[data-state="error"] .conn-state .conn-dot {
2524
+ background: #f87171;
2525
+ box-shadow: 0 0 8px rgba(248, 113, 113, 0.4);
2526
+ }
2527
+ .conn-btn[data-state="pending"] .conn-state .conn-dot {
2528
+ background: #fbbf24;
2529
+ animation: conn-blink 1s ease-in-out infinite;
2530
+ }
2531
+
2532
+ @keyframes conn-pulse {
2533
+ 0%, 100% { opacity: 1; transform: scale(1); }
2534
+ 50% { opacity: 0.7; transform: scale(0.9); }
2535
+ }
2536
+ @keyframes conn-blink {
2537
+ 0%, 100% { opacity: 1; }
2538
+ 50% { opacity: 0.4; }
2539
+ }
2540
+
2541
+ .conn-notif {
2542
+ position: absolute;
2543
+ top: -4px;
2544
+ right: -4px;
2545
+ min-width: 18px;
2546
+ height: 18px;
2547
+ padding: 0 5px;
2548
+ background: linear-gradient(135deg, #f43f5e, #ec4899);
2549
+ border-radius: 9px;
2550
+ font-size: 10px;
2551
+ font-weight: 700;
2552
+ color: white;
2553
+ display: none;
2554
+ align-items: center;
2555
+ justify-content: center;
2556
+ box-shadow: 0 2px 8px rgba(244, 63, 94, 0.4);
2557
+ animation: notif-bounce 0.4s ease;
2558
+ }
2559
+ .conn-notif:not(:empty) {
2560
+ display: flex;
2561
+ }
2562
+ @keyframes notif-bounce {
2563
+ 0% { transform: scale(0); }
2564
+ 50% { transform: scale(1.2); }
2565
+ 100% { transform: scale(1); }
2566
+ }
2567
+
2568
+ /* ── Connection Modal ────────────────────────────────────────────────── */
2569
+ .conn-modal-overlay {
2570
+ position: fixed;
2571
+ inset: 0;
2572
+ z-index: 9000;
2573
+ display: flex;
2574
+ align-items: center;
2575
+ justify-content: center;
2576
+ background: rgba(0, 0, 0, 0.7);
2577
+ backdrop-filter: blur(8px);
2578
+ opacity: 0;
2579
+ visibility: hidden;
2580
+ transition: opacity 0.25s ease, visibility 0.25s ease;
2581
+ }
2582
+ .conn-modal-overlay.open {
2583
+ opacity: 1;
2584
+ visibility: visible;
2585
+ }
2586
+
2587
+ .conn-modal {
2588
+ position: relative;
2589
+ width: 90%;
2590
+ max-width: 420px;
2591
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
2592
+ border: 1px solid rgba(255, 255, 255, 0.1);
2593
+ border-radius: 16px;
2594
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
2595
+ transform: scale(0.95) translateY(10px);
2596
+ transition: transform 0.25s ease;
2597
+ overflow: hidden;
2598
+ }
2599
+ .conn-modal-overlay.open .conn-modal {
2600
+ transform: scale(1) translateY(0);
2601
+ }
2602
+
2603
+ .conn-modal-header {
2604
+ display: flex;
2605
+ align-items: center;
2606
+ gap: 14px;
2607
+ padding: 20px 20px 16px;
2608
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2609
+ }
2610
+ .conn-modal-icon {
2611
+ width: 44px;
2612
+ height: 44px;
2613
+ border-radius: 12px;
2614
+ display: flex;
2615
+ align-items: center;
2616
+ justify-content: center;
2617
+ }
2618
+ .conn-modal-icon svg {
2619
+ width: 24px;
2620
+ height: 24px;
2621
+ }
2622
+ .conn-modal-icon.slack {
2623
+ background: linear-gradient(135deg, rgba(74, 21, 75, 0.4), rgba(54, 197, 171, 0.3));
2624
+ border: 1px solid rgba(224, 30, 90, 0.3);
2625
+ color: #E01E5A;
2626
+ }
2627
+ .conn-modal-icon.email {
2628
+ background: linear-gradient(135deg, rgba(96, 165, 250, 0.3), rgba(139, 92, 246, 0.3));
2629
+ border: 1px solid rgba(96, 165, 250, 0.3);
2630
+ color: var(--accent-blue);
2631
+ }
2632
+ .conn-modal-icon.msteams {
2633
+ background: linear-gradient(135deg, rgba(98, 100, 167, 0.4), rgba(139, 92, 246, 0.3));
2634
+ border: 1px solid rgba(98, 100, 167, 0.35);
2635
+ color: #6264A7;
2636
+ }
2637
+ .conn-modal-title {
2638
+ flex: 1;
2639
+ font-size: 18px;
2640
+ font-weight: 600;
2641
+ color: var(--text);
2642
+ letter-spacing: 0.02em;
2643
+ }
2644
+ .conn-modal-close {
2645
+ width: 32px;
2646
+ height: 32px;
2647
+ border: none;
2648
+ background: rgba(255, 255, 255, 0.05);
2649
+ border-radius: 8px;
2650
+ color: var(--text-muted);
2651
+ cursor: pointer;
2652
+ display: flex;
2653
+ align-items: center;
2654
+ justify-content: center;
2655
+ transition: all 0.2s ease;
2656
+ }
2657
+ .conn-modal-close:hover {
2658
+ background: rgba(255, 255, 255, 0.1);
2659
+ color: var(--text);
2660
+ }
2661
+ .conn-modal-body {
2662
+ padding: 20px;
2663
+ }
2664
+ .conn-modal-status {
2665
+ display: flex;
2666
+ align-items: center;
2667
+ gap: 12px;
2668
+ padding: 14px 16px;
2669
+ background: rgba(255, 255, 255, 0.03);
2670
+ border: 1px solid rgba(255, 255, 255, 0.06);
2671
+ border-radius: 10px;
2672
+ margin-bottom: 16px;
2673
+ }
2674
+ .conn-modal-status-dot {
2675
+ width: 10px;
2676
+ height: 10px;
2677
+ border-radius: 50%;
2678
+ background: var(--text-dim);
2679
+ }
2680
+ .conn-modal-status.connected .conn-modal-status-dot {
2681
+ background: var(--accent-green);
2682
+ box-shadow: 0 0 10px rgba(52, 211, 153, 0.5);
2683
+ }
2684
+ .conn-modal-status.disconnected .conn-modal-status-dot {
2685
+ background: var(--text-dim);
2686
+ }
2687
+ .conn-modal-status-text {
2688
+ flex: 1;
2689
+ font-size: 13px;
2690
+ color: var(--text);
2691
+ }
2692
+ .conn-modal-status-badge {
2693
+ font-size: 10px;
2694
+ font-family: var(--font-mono);
2695
+ font-weight: 600;
2696
+ padding: 4px 10px;
2697
+ border-radius: 20px;
2698
+ letter-spacing: 0.08em;
2699
+ }
2700
+ .conn-modal-status.connected .conn-modal-status-badge {
2701
+ background: rgba(52, 211, 153, 0.15);
2702
+ color: var(--accent-green);
2703
+ }
2704
+ .conn-modal-status.disconnected .conn-modal-status-badge {
2705
+ background: rgba(255, 255, 255, 0.08);
2706
+ color: var(--text-muted);
2707
+ }
2708
+ .conn-modal-info {
2709
+ font-size: 13px;
2710
+ line-height: 1.6;
2711
+ color: var(--text-muted);
2712
+ margin-bottom: 16px;
2713
+ }
2714
+ .conn-modal-info code {
2715
+ background: rgba(255, 255, 255, 0.08);
2716
+ padding: 2px 6px;
2717
+ border-radius: 4px;
2718
+ font-family: var(--font-mono);
2719
+ font-size: 12px;
2720
+ color: var(--accent-cyan);
2721
+ }
2722
+ .conn-modal-config {
2723
+ background: rgba(0, 0, 0, 0.3);
2724
+ border: 1px solid rgba(255, 255, 255, 0.06);
2725
+ border-radius: 8px;
2726
+ padding: 12px 14px;
2727
+ font-family: var(--font-mono);
2728
+ font-size: 11px;
2729
+ color: var(--text-muted);
2730
+ overflow-x: auto;
2731
+ white-space: pre;
2732
+ }
2733
+ .conn-modal-footer {
2734
+ padding: 16px 20px 20px;
2735
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2736
+ display: flex;
2737
+ justify-content: flex-end;
2738
+ }
2739
+ .conn-modal-docs {
2740
+ display: flex;
2741
+ align-items: center;
2742
+ gap: 8px;
2743
+ font-size: 12px;
2744
+ font-weight: 500;
2745
+ color: var(--accent-cyan);
2746
+ text-decoration: none;
2747
+ padding: 8px 14px;
2748
+ background: rgba(0, 212, 255, 0.1);
2749
+ border: 1px solid rgba(0, 212, 255, 0.2);
2750
+ border-radius: 8px;
2751
+ transition: all 0.2s ease;
2752
+ }
2753
+ .conn-modal-docs:hover {
2754
+ background: rgba(0, 212, 255, 0.15);
2755
+ border-color: rgba(0, 212, 255, 0.35);
2756
+ }
2757
+
2758
+
2759
+ /* ══════════════════════════════════════════════════════════════════════════
2760
+ SUBAGENTS PANEL
2761
+ ══════════════════════════════════════════════════════════════════════════ */
2762
+
2763
+ .subagents-panel {
2764
+ display: flex;
2765
+ flex-direction: column;
2766
+ gap: 0;
2767
+ }
2768
+
2769
+ .subagents-count {
2770
+ font-size: 10px;
2771
+ font-family: var(--font-mono);
2772
+ color: var(--accent-cyan);
2773
+ margin-left: 6px;
2774
+ font-weight: 600;
2775
+ }
2776
+
2777
+ /* Quick Deploy */
2778
+ .quick-deploy-section {
2779
+ margin-bottom: 10px;
2780
+ }
2781
+ .quick-deploy-label {
2782
+ font-size: 9px;
2783
+ font-family: var(--font-mono);
2784
+ font-weight: 700;
2785
+ letter-spacing: 0.12em;
2786
+ color: var(--text-muted);
2787
+ margin-bottom: 8px;
2788
+ }
2789
+ .quick-deploy-grid {
2790
+ display: grid;
2791
+ grid-template-columns: 1fr 1fr;
2792
+ gap: 6px;
2793
+ }
2794
+ .quick-deploy-btn {
2795
+ display: flex;
2796
+ align-items: center;
2797
+ gap: 6px;
2798
+ padding: 7px 10px;
2799
+ background: rgba(255,255,255,0.02);
2800
+ border: 1px solid rgba(255,255,255,0.06);
2801
+ border-radius: 8px;
2802
+ color: var(--text);
2803
+ font-size: 12px;
2804
+ font-weight: 500;
2805
+ font-family: inherit;
2806
+ cursor: pointer;
2807
+ transition: all 0.2s ease;
2808
+ }
2809
+ .quick-deploy-btn svg {
2810
+ width: 14px;
2811
+ height: 14px;
2812
+ flex-shrink: 0;
2813
+ opacity: 0.7;
2814
+ }
2815
+ .quick-deploy-btn:hover {
2816
+ background: rgba(0, 212, 255, 0.06);
2817
+ border-color: rgba(0, 212, 255, 0.2);
2818
+ color: var(--accent-cyan);
2819
+ }
2820
+ .quick-deploy-btn:hover svg {
2821
+ opacity: 1;
2822
+ }
2823
+ .quick-deploy-btn.selected {
2824
+ background: rgba(0, 212, 255, 0.1);
2825
+ border-color: rgba(0, 212, 255, 0.3);
2826
+ color: var(--accent-cyan);
2827
+ }
2828
+ .quick-deploy-btn.selected svg {
2829
+ opacity: 1;
2830
+ }
2831
+
2832
+ /* Staging Box */
2833
+ .staging-box {
2834
+ display: flex;
2835
+ align-items: center;
2836
+ gap: 8px;
2837
+ padding: 8px 10px;
2838
+ background: rgba(255,255,255,0.015);
2839
+ border: 1px solid rgba(255,255,255,0.05);
2840
+ border-radius: 8px;
2841
+ margin-bottom: 12px;
2842
+ min-height: 38px;
2843
+ }
2844
+ .staging-chips {
2845
+ flex: 1;
2846
+ display: flex;
2847
+ flex-wrap: wrap;
2848
+ gap: 4px;
2849
+ min-height: 22px;
2850
+ align-items: center;
2851
+ }
2852
+ .staging-empty {
2853
+ font-size: 10px;
2854
+ color: var(--text-muted);
2855
+ font-family: var(--font-mono);
2856
+ letter-spacing: 0.04em;
2857
+ }
2858
+ .staging-chip {
2859
+ display: inline-flex;
2860
+ align-items: center;
2861
+ gap: 4px;
2862
+ padding: 3px 8px;
2863
+ background: rgba(0, 212, 255, 0.1);
2864
+ border: 1px solid rgba(0, 212, 255, 0.2);
2865
+ border-radius: 12px;
2866
+ font-size: 10px;
2867
+ font-family: var(--font-mono);
2868
+ color: var(--accent-cyan);
2869
+ cursor: default;
2870
+ }
2871
+ .staging-chip-remove {
2872
+ cursor: pointer;
2873
+ opacity: 0.6;
2874
+ font-size: 12px;
2875
+ line-height: 1;
2876
+ }
2877
+ .staging-chip-remove:hover {
2878
+ opacity: 1;
2879
+ }
2880
+ .staging-deploy-btn {
2881
+ display: flex;
2882
+ align-items: center;
2883
+ gap: 5px;
2884
+ padding: 6px 12px;
2885
+ background: rgba(0, 212, 255, 0.12);
2886
+ border: 1px solid rgba(0, 212, 255, 0.25);
2887
+ border-radius: 8px;
2888
+ color: var(--accent-cyan);
2889
+ font-size: 11px;
2890
+ font-weight: 600;
2891
+ font-family: inherit;
2892
+ cursor: pointer;
2893
+ transition: all 0.2s ease;
2894
+ white-space: nowrap;
2895
+ }
2896
+ .staging-deploy-btn svg {
2897
+ width: 13px;
2898
+ height: 13px;
2899
+ }
2900
+ .staging-deploy-btn:disabled {
2901
+ opacity: 0.35;
2902
+ cursor: not-allowed;
2903
+ }
2904
+ .staging-deploy-btn:not(:disabled):hover {
2905
+ background: rgba(0, 212, 255, 0.2);
2906
+ border-color: rgba(0, 212, 255, 0.4);
2907
+ }
2908
+
2909
+ /* Active subagents */
2910
+ .subagents-active-label {
2911
+ font-size: 9px;
2912
+ font-family: var(--font-mono);
2913
+ font-weight: 700;
2914
+ letter-spacing: 0.12em;
2915
+ color: var(--text-muted);
2916
+ margin-bottom: 6px;
2917
+ }
2918
+ .subagents-list {
2919
+ display: flex;
2920
+ flex-direction: column;
2921
+ gap: 4px;
2922
+ margin-bottom: 10px;
2923
+ max-height: 240px;
2924
+ overflow-y: auto;
2925
+ }
2926
+ .subagents-empty {
2927
+ display: flex;
2928
+ flex-direction: column;
2929
+ align-items: center;
2930
+ gap: 6px;
2931
+ padding: 16px 0;
2932
+ }
2933
+ .subagents-empty-icon {
2934
+ width: 32px;
2935
+ height: 32px;
2936
+ display: flex;
2937
+ align-items: center;
2938
+ justify-content: center;
2939
+ opacity: 0.35;
2940
+ }
2941
+ .subagents-empty-icon svg {
2942
+ width: 24px;
2943
+ height: 24px;
2944
+ }
2945
+ .subagents-empty-text {
2946
+ font-size: 11px;
2947
+ font-family: var(--font-mono);
2948
+ color: var(--text-muted);
2949
+ letter-spacing: 0.04em;
2950
+ }
2951
+
2952
+ /* Individual subagent item */
2953
+ .subagent-item {
2954
+ display: flex;
2955
+ align-items: center;
2956
+ gap: 10px;
2957
+ padding: 8px 10px;
2958
+ background: rgba(255,255,255,0.02);
2959
+ border: 1px solid rgba(255,255,255,0.05);
2960
+ border-radius: 8px;
2961
+ cursor: pointer;
2962
+ transition: all 0.2s ease;
2963
+ }
2964
+ .subagent-item:hover {
2965
+ background: rgba(255,255,255,0.04);
2966
+ border-color: rgba(255,255,255,0.1);
2967
+ }
2968
+ .subagent-item[data-status="running"] {
2969
+ border-color: rgba(0, 212, 255, 0.2);
2970
+ background: rgba(0, 212, 255, 0.03);
2971
+ }
2972
+ .subagent-item[data-status="completed"] {
2973
+ border-color: rgba(52, 211, 153, 0.15);
2974
+ }
2975
+ .subagent-item[data-status="error"] {
2976
+ border-color: rgba(248, 113, 113, 0.2);
2977
+ }
2978
+
2979
+ .subagent-icon {
2980
+ flex-shrink: 0;
2981
+ width: 20px;
2982
+ height: 20px;
2983
+ display: flex;
2984
+ align-items: center;
2985
+ justify-content: center;
2986
+ font-size: 14px;
2987
+ }
2988
+ .subagent-info {
2989
+ flex: 1;
2990
+ min-width: 0;
2991
+ display: flex;
2992
+ flex-direction: column;
2993
+ gap: 1px;
2994
+ }
2995
+ .subagent-label {
2996
+ font-size: 12px;
2997
+ font-weight: 600;
2998
+ color: var(--text);
2999
+ white-space: nowrap;
3000
+ overflow: hidden;
3001
+ text-overflow: ellipsis;
3002
+ }
3003
+ .subagent-task {
3004
+ font-size: 10px;
3005
+ font-family: var(--font-mono);
3006
+ color: var(--text-muted);
3007
+ white-space: nowrap;
3008
+ overflow: hidden;
3009
+ text-overflow: ellipsis;
3010
+ }
3011
+ .subagent-runtime {
3012
+ flex-shrink: 0;
3013
+ font-size: 10px;
3014
+ font-family: var(--font-mono);
3015
+ color: var(--text-muted);
3016
+ letter-spacing: 0.04em;
3017
+ }
3018
+
3019
+ /* Spawn button */
3020
+ .subagent-spawn-btn {
3021
+ display: flex;
3022
+ align-items: center;
3023
+ justify-content: center;
3024
+ gap: 6px;
3025
+ width: 100%;
3026
+ padding: 8px;
3027
+ background: rgba(139, 92, 246, 0.08);
3028
+ border: 1px dashed rgba(139, 92, 246, 0.25);
3029
+ border-radius: 8px;
3030
+ color: rgba(139, 92, 246, 0.85);
3031
+ font-size: 12px;
3032
+ font-weight: 600;
3033
+ font-family: inherit;
3034
+ cursor: pointer;
3035
+ transition: all 0.2s ease;
3036
+ }
3037
+ .subagent-spawn-btn svg {
3038
+ width: 14px;
3039
+ height: 14px;
3040
+ }
3041
+ .subagent-spawn-btn:hover {
3042
+ background: rgba(139, 92, 246, 0.12);
3043
+ border-color: rgba(139, 92, 246, 0.35);
3044
+ color: var(--accent-purple);
3045
+ }
3046
+
3047
+ /* ── Subagent Modal ──────────────────────────────────────────────────── */
3048
+ .subagent-modal-overlay {
3049
+ position: fixed;
3050
+ inset: 0;
3051
+ z-index: 9000;
3052
+ display: flex;
3053
+ align-items: center;
3054
+ justify-content: center;
3055
+ background: rgba(0, 0, 0, 0.7);
3056
+ backdrop-filter: blur(8px);
3057
+ opacity: 0;
3058
+ visibility: hidden;
3059
+ transition: opacity 0.25s ease, visibility 0.25s ease;
3060
+ }
3061
+ .subagent-modal-overlay.open {
3062
+ opacity: 1;
3063
+ visibility: visible;
3064
+ }
3065
+
3066
+ .subagent-modal {
3067
+ position: relative;
3068
+ width: 90%;
3069
+ max-width: 460px;
3070
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
3071
+ border: 1px solid rgba(255, 255, 255, 0.1);
3072
+ border-radius: 16px;
3073
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
3074
+ transform: scale(0.95) translateY(10px);
3075
+ transition: transform 0.25s ease;
3076
+ overflow: hidden;
3077
+ }
3078
+ .subagent-modal-overlay.open .subagent-modal {
3079
+ transform: scale(1) translateY(0);
3080
+ }
3081
+
3082
+ .subagent-modal-header {
3083
+ display: flex;
3084
+ align-items: center;
3085
+ justify-content: space-between;
3086
+ padding: 18px 20px 14px;
3087
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
3088
+ }
3089
+ .subagent-modal-title {
3090
+ font-size: 16px;
3091
+ font-weight: 600;
3092
+ color: var(--text);
3093
+ letter-spacing: 0.02em;
3094
+ }
3095
+ .subagent-modal-close {
3096
+ width: 32px;
3097
+ height: 32px;
3098
+ border: none;
3099
+ background: rgba(255, 255, 255, 0.05);
3100
+ border-radius: 8px;
3101
+ color: var(--text-muted);
3102
+ cursor: pointer;
3103
+ display: flex;
3104
+ align-items: center;
3105
+ justify-content: center;
3106
+ transition: all 0.2s ease;
3107
+ }
3108
+ .subagent-modal-close:hover {
3109
+ background: rgba(255, 255, 255, 0.1);
3110
+ color: var(--text);
3111
+ }
3112
+
3113
+ .subagent-modal-body {
3114
+ padding: 20px;
3115
+ display: flex;
3116
+ flex-direction: column;
3117
+ gap: 14px;
3118
+ }
3119
+
3120
+ .subagent-form-group {
3121
+ display: flex;
3122
+ flex-direction: column;
3123
+ gap: 5px;
3124
+ }
3125
+ .subagent-form-label {
3126
+ font-size: 10px;
3127
+ font-family: var(--font-mono);
3128
+ font-weight: 600;
3129
+ letter-spacing: 0.1em;
3130
+ color: var(--text-muted);
3131
+ text-transform: uppercase;
3132
+ }
3133
+ .subagent-form-input,
3134
+ .subagent-form-select,
3135
+ .subagent-form-textarea {
3136
+ width: 100%;
3137
+ padding: 9px 12px;
3138
+ background: rgba(255, 255, 255, 0.04);
3139
+ border: 1px solid rgba(255, 255, 255, 0.08);
3140
+ border-radius: 8px;
3141
+ color: var(--text);
3142
+ font-size: 13px;
3143
+ font-family: inherit;
3144
+ outline: none;
3145
+ transition: border-color 0.2s ease;
3146
+ }
3147
+ .subagent-form-input:focus,
3148
+ .subagent-form-select:focus,
3149
+ .subagent-form-textarea:focus {
3150
+ border-color: rgba(139, 92, 246, 0.4);
3151
+ }
3152
+ .subagent-form-textarea {
3153
+ min-height: 80px;
3154
+ resize: vertical;
3155
+ font-family: var(--font-mono);
3156
+ font-size: 12px;
3157
+ }
3158
+ .subagent-form-select {
3159
+ appearance: none;
3160
+ 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");
3161
+ background-repeat: no-repeat;
3162
+ background-position: right 12px center;
3163
+ padding-right: 32px;
3164
+ }
3165
+ .subagent-form-select option {
3166
+ background: #0f0f19;
3167
+ color: var(--text);
3168
+ }
3169
+
3170
+ .subagent-modal-footer {
3171
+ padding: 14px 20px 18px;
3172
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
3173
+ display: flex;
3174
+ justify-content: flex-end;
3175
+ gap: 10px;
3176
+ }
3177
+ .subagent-modal-cancel {
3178
+ padding: 8px 16px;
3179
+ background: rgba(255, 255, 255, 0.05);
3180
+ border: 1px solid rgba(255, 255, 255, 0.08);
3181
+ border-radius: 8px;
3182
+ color: var(--text-muted);
3183
+ font-size: 12px;
3184
+ font-weight: 500;
3185
+ font-family: inherit;
3186
+ cursor: pointer;
3187
+ transition: all 0.2s ease;
3188
+ }
3189
+ .subagent-modal-cancel:hover {
3190
+ background: rgba(255, 255, 255, 0.08);
3191
+ color: var(--text);
3192
+ }
3193
+ .subagent-modal-spawn {
3194
+ padding: 8px 18px;
3195
+ background: rgba(139, 92, 246, 0.15);
3196
+ border: 1px solid rgba(139, 92, 246, 0.3);
3197
+ border-radius: 8px;
3198
+ color: var(--accent-purple);
3199
+ font-size: 12px;
3200
+ font-weight: 600;
3201
+ font-family: inherit;
3202
+ cursor: pointer;
3203
+ transition: all 0.2s ease;
3204
+ }
3205
+ .subagent-modal-spawn:hover {
3206
+ background: rgba(139, 92, 246, 0.25);
3207
+ border-color: rgba(139, 92, 246, 0.5);
3208
+ }
3209
+
3210
+
3211
+ /* ══════════════════════════════════════════════════════════════════════════
3212
+ SCHEDULING PANEL
3213
+ ══════════════════════════════════════════════════════════════════════════ */
3214
+
3215
+ .scheduling-panel {
3216
+ display: flex;
3217
+ flex-direction: column;
3218
+ gap: 0;
3219
+ }
3220
+
3221
+ .schedule-count {
3222
+ font-size: 10px;
3223
+ font-family: var(--font-mono);
3224
+ color: var(--accent-green);
3225
+ margin-left: 6px;
3226
+ font-weight: 600;
3227
+ }
3228
+
3229
+ .schedule-list {
3230
+ display: flex;
3231
+ flex-direction: column;
3232
+ gap: 4px;
3233
+ margin-bottom: 10px;
3234
+ max-height: 260px;
3235
+ overflow-y: auto;
3236
+ }
3237
+
3238
+ /* Empty state */
3239
+ .schedule-empty {
3240
+ display: flex;
3241
+ flex-direction: column;
3242
+ align-items: center;
3243
+ gap: 6px;
3244
+ padding: 16px 0;
3245
+ }
3246
+ .schedule-empty-icon {
3247
+ width: 32px;
3248
+ height: 32px;
3249
+ display: flex;
3250
+ align-items: center;
3251
+ justify-content: center;
3252
+ opacity: 0.35;
3253
+ }
3254
+ .schedule-empty-icon svg {
3255
+ width: 24px;
3256
+ height: 24px;
3257
+ }
3258
+ .schedule-empty-text {
3259
+ font-size: 11px;
3260
+ font-family: var(--font-mono);
3261
+ color: var(--text-muted);
3262
+ letter-spacing: 0.04em;
3263
+ }
3264
+
3265
+ /* Schedule items */
3266
+ .schedule-item {
3267
+ display: flex;
3268
+ align-items: center;
3269
+ gap: 10px;
3270
+ padding: 8px 10px;
3271
+ background: rgba(255,255,255,0.02);
3272
+ border: 1px solid rgba(255,255,255,0.05);
3273
+ border-radius: 8px;
3274
+ cursor: pointer;
3275
+ transition: all 0.2s ease;
3276
+ }
3277
+ .schedule-item:hover {
3278
+ background: rgba(255,255,255,0.04);
3279
+ border-color: rgba(255,255,255,0.1);
3280
+ }
3281
+ .schedule-item[data-active="true"] {
3282
+ border-color: rgba(52, 211, 153, 0.15);
3283
+ }
3284
+ .schedule-item[data-active="false"] {
3285
+ opacity: 0.5;
3286
+ }
3287
+
3288
+ /* Toggle dot */
3289
+ .schedule-toggle {
3290
+ flex-shrink: 0;
3291
+ width: 12px;
3292
+ height: 12px;
3293
+ border-radius: 50%;
3294
+ background: var(--text-dim);
3295
+ border: 2px solid rgba(255,255,255,0.1);
3296
+ transition: all 0.2s ease;
3297
+ cursor: pointer;
3298
+ }
3299
+ .schedule-item[data-active="true"] .schedule-toggle {
3300
+ background: var(--accent-green);
3301
+ border-color: rgba(52, 211, 153, 0.3);
3302
+ box-shadow: 0 0 6px rgba(52, 211, 153, 0.3);
3303
+ }
3304
+ .schedule-toggle:hover {
3305
+ border-color: rgba(255,255,255,0.3);
3306
+ }
3307
+
3308
+ .schedule-info {
3309
+ flex: 1;
3310
+ min-width: 0;
3311
+ display: flex;
3312
+ flex-direction: column;
3313
+ gap: 1px;
3314
+ }
3315
+ .schedule-name {
3316
+ font-size: 12px;
3317
+ font-weight: 600;
3318
+ color: var(--text);
3319
+ white-space: nowrap;
3320
+ overflow: hidden;
3321
+ text-overflow: ellipsis;
3322
+ }
3323
+ .schedule-next {
3324
+ font-size: 10px;
3325
+ font-family: var(--font-mono);
3326
+ color: var(--text-muted);
3327
+ white-space: nowrap;
3328
+ overflow: hidden;
3329
+ text-overflow: ellipsis;
3330
+ }
3331
+ .schedule-interval {
3332
+ flex-shrink: 0;
3333
+ font-size: 10px;
3334
+ font-family: var(--font-mono);
3335
+ color: var(--text-muted);
3336
+ letter-spacing: 0.04em;
3337
+ padding: 3px 8px;
3338
+ background: rgba(255,255,255,0.03);
3339
+ border-radius: 6px;
3340
+ }
3341
+
3342
+ /* Add schedule button */
3343
+ .schedule-add-btn {
3344
+ display: flex;
3345
+ align-items: center;
3346
+ justify-content: center;
3347
+ gap: 6px;
3348
+ width: 100%;
3349
+ padding: 8px;
3350
+ background: rgba(52, 211, 153, 0.08);
3351
+ border: 1px dashed rgba(52, 211, 153, 0.25);
3352
+ border-radius: 8px;
3353
+ color: rgba(52, 211, 153, 0.85);
3354
+ font-size: 12px;
3355
+ font-weight: 600;
3356
+ font-family: inherit;
3357
+ cursor: pointer;
3358
+ transition: all 0.2s ease;
3359
+ }
3360
+ .schedule-add-btn svg {
3361
+ width: 14px;
3362
+ height: 14px;
3363
+ }
3364
+ .schedule-add-btn:hover {
3365
+ background: rgba(52, 211, 153, 0.12);
3366
+ border-color: rgba(52, 211, 153, 0.35);
3367
+ color: var(--accent-green);
3368
+ }
3369
+
3370
+ /* ── Schedule Modal ──────────────────────────────────────────────────── */
3371
+ .schedule-modal-overlay {
3372
+ position: fixed;
3373
+ inset: 0;
3374
+ z-index: 9000;
3375
+ display: flex;
3376
+ align-items: center;
3377
+ justify-content: center;
3378
+ background: rgba(0, 0, 0, 0.7);
3379
+ backdrop-filter: blur(8px);
3380
+ opacity: 0;
3381
+ visibility: hidden;
3382
+ transition: opacity 0.25s ease, visibility 0.25s ease;
3383
+ }
3384
+ .schedule-modal-overlay.open {
3385
+ opacity: 1;
3386
+ visibility: visible;
3387
+ }
3388
+
3389
+ .schedule-modal {
3390
+ position: relative;
3391
+ width: 90%;
3392
+ max-width: 460px;
3393
+ background: linear-gradient(135deg, rgba(15, 15, 25, 0.98), rgba(10, 10, 18, 0.98));
3394
+ border: 1px solid rgba(255, 255, 255, 0.1);
3395
+ border-radius: 16px;
3396
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.1);
3397
+ transform: scale(0.95) translateY(10px);
3398
+ transition: transform 0.25s ease;
3399
+ overflow: hidden;
3400
+ }
3401
+ .schedule-modal-overlay.open .schedule-modal {
3402
+ transform: scale(1) translateY(0);
3403
+ }
3404
+
3405
+ .schedule-modal-header {
3406
+ display: flex;
3407
+ align-items: center;
3408
+ justify-content: space-between;
3409
+ padding: 18px 20px 14px;
3410
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
3411
+ }
3412
+ .schedule-modal-title {
3413
+ font-size: 16px;
3414
+ font-weight: 600;
3415
+ color: var(--text);
3416
+ letter-spacing: 0.02em;
3417
+ }
3418
+ .schedule-modal-close {
3419
+ width: 32px;
3420
+ height: 32px;
3421
+ border: none;
3422
+ background: rgba(255, 255, 255, 0.05);
3423
+ border-radius: 8px;
3424
+ color: var(--text-muted);
3425
+ cursor: pointer;
3426
+ display: flex;
3427
+ align-items: center;
3428
+ justify-content: center;
3429
+ transition: all 0.2s ease;
3430
+ }
3431
+ .schedule-modal-close:hover {
3432
+ background: rgba(255, 255, 255, 0.1);
3433
+ color: var(--text);
3434
+ }
3435
+
3436
+ .schedule-modal-body {
3437
+ padding: 20px;
3438
+ display: flex;
3439
+ flex-direction: column;
3440
+ gap: 14px;
3441
+ }
3442
+
3443
+ .schedule-form-group {
3444
+ display: flex;
3445
+ flex-direction: column;
3446
+ gap: 5px;
3447
+ }
3448
+ .schedule-form-label {
3449
+ font-size: 10px;
3450
+ font-family: var(--font-mono);
3451
+ font-weight: 600;
3452
+ letter-spacing: 0.1em;
3453
+ color: var(--text-muted);
3454
+ text-transform: uppercase;
3455
+ }
3456
+ .schedule-form-input,
3457
+ .schedule-form-textarea {
3458
+ width: 100%;
3459
+ padding: 9px 12px;
3460
+ background: rgba(255, 255, 255, 0.04);
3461
+ border: 1px solid rgba(255, 255, 255, 0.08);
3462
+ border-radius: 8px;
3463
+ color: var(--text);
3464
+ font-size: 13px;
3465
+ font-family: inherit;
3466
+ outline: none;
3467
+ transition: border-color 0.2s ease;
3468
+ }
3469
+ .schedule-form-input:focus,
3470
+ .schedule-form-textarea:focus {
3471
+ border-color: rgba(52, 211, 153, 0.4);
3472
+ }
3473
+ .schedule-form-textarea {
3474
+ min-height: 70px;
3475
+ resize: vertical;
3476
+ font-family: var(--font-mono);
3477
+ font-size: 12px;
3478
+ }
3479
+
3480
+ /* Interval presets */
3481
+ .schedule-interval-presets {
3482
+ display: flex;
3483
+ flex-wrap: wrap;
3484
+ gap: 6px;
3485
+ }
3486
+ .schedule-interval-btn {
3487
+ padding: 6px 12px;
3488
+ background: rgba(255,255,255,0.04);
3489
+ border: 1px solid rgba(255,255,255,0.08);
3490
+ border-radius: 8px;
3491
+ color: var(--text-muted);
3492
+ font-size: 11px;
3493
+ font-family: var(--font-mono);
3494
+ cursor: pointer;
3495
+ transition: all 0.2s ease;
3496
+ }
3497
+ .schedule-interval-btn:hover {
3498
+ background: rgba(52, 211, 153, 0.08);
3499
+ border-color: rgba(52, 211, 153, 0.2);
3500
+ color: var(--accent-green);
3501
+ }
3502
+ .schedule-interval-btn.selected {
3503
+ background: rgba(52, 211, 153, 0.12);
3504
+ border-color: rgba(52, 211, 153, 0.3);
3505
+ color: var(--accent-green);
3506
+ }
3507
+
3508
+ .schedule-modal-footer {
3509
+ padding: 14px 20px 18px;
3510
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
3511
+ display: flex;
3512
+ justify-content: flex-end;
3513
+ gap: 10px;
3514
+ }
3515
+ .schedule-modal-cancel {
3516
+ padding: 8px 16px;
3517
+ background: rgba(255, 255, 255, 0.05);
3518
+ border: 1px solid rgba(255, 255, 255, 0.08);
3519
+ border-radius: 8px;
3520
+ color: var(--text-muted);
3521
+ font-size: 12px;
3522
+ font-weight: 500;
3523
+ font-family: inherit;
3524
+ cursor: pointer;
3525
+ transition: all 0.2s ease;
3526
+ }
3527
+ .schedule-modal-cancel:hover {
3528
+ background: rgba(255, 255, 255, 0.08);
3529
+ color: var(--text);
3530
+ }
3531
+ .schedule-modal-save {
3532
+ padding: 8px 18px;
3533
+ background: rgba(52, 211, 153, 0.15);
3534
+ border: 1px solid rgba(52, 211, 153, 0.3);
3535
+ border-radius: 8px;
3536
+ color: var(--accent-green);
3537
+ font-size: 12px;
3538
+ font-weight: 600;
3539
+ font-family: inherit;
3540
+ cursor: pointer;
3541
+ transition: all 0.2s ease;
3542
+ }
3543
+ .schedule-modal-save:hover {
3544
+ background: rgba(52, 211, 153, 0.25);
3545
+ border-color: rgba(52, 211, 153, 0.5);
3546
+ }