openclaw-multi-auto 1.3.6 → 1.3.8

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 (328) hide show
  1. package/dist/{audio-preflight-5FEeDooz.js → audio-preflight-DDBLZBdb.js} +4 -4
  2. package/dist/{audio-transcription-runner-B-UvoDjZ.js → audio-transcription-runner-DZbSWT9E.js} +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  5. package/dist/{chrome-D45SyhQL.js → chrome-CMU2WVFh.js} +8 -8
  6. package/dist/{deliver-B9cys0EZ.js → deliver-BXVcFIHL.js} +1 -1
  7. package/dist/{deliver-runtime-DhaQJ0pI.js → deliver-runtime-DTaIS-1i.js} +3 -3
  8. package/dist/{deps-send-whatsapp.runtime-DvTL2tzN.js → deps-send-whatsapp.runtime-CIZqFAqb.js} +7 -7
  9. package/dist/extensionAPI.js +6 -6
  10. package/dist/{image-DAOPwVXi.js → image-BCVLo0qw.js} +1 -1
  11. package/dist/{image-runtime-wlCLVvVv.js → image-runtime-DtCKpMPZ.js} +3 -3
  12. package/dist/{pi-embedded-DYU79yGe.js → pi-embedded-CgQ_W6Xs.js} +24 -24
  13. package/dist/{pi-embedded-helpers-uTRAmQ4n.js → pi-embedded-helpers-CwuBTKza.js} +3 -3
  14. package/dist/plugin-sdk/{accounts-DyFCXtHv.js → accounts-BslAlVYS.js} +2 -2
  15. package/dist/plugin-sdk/{accounts-BJAXxY46.js → accounts-C3m65--E.js} +2 -2
  16. package/dist/plugin-sdk/{accounts-C1j7HSL0.js → accounts-CNCCkdEF.js} +3 -3
  17. package/dist/plugin-sdk/{active-listener-CftX5jLD.js → active-listener-CkPnMUkB.js} +2 -2
  18. package/dist/plugin-sdk/{api-key-rotation-8nyyt1kx.js → api-key-rotation-BXnNsojA.js} +2 -2
  19. package/dist/plugin-sdk/{audio-preflight-C_aSAPR1.js → audio-preflight-CtO4fFvp.js} +26 -26
  20. package/dist/plugin-sdk/{audio-transcription-runner-CB53F7_7.js → audio-transcription-runner-DnxvOS1-.js} +11 -11
  21. package/dist/plugin-sdk/{audit-membership-runtime-BXndI4LG.js → audit-membership-runtime-BpfoSk8M.js} +2 -2
  22. package/dist/plugin-sdk/{channel-activity-C5y8AgAV.js → channel-activity-WJYxcJ3S.js} +3 -3
  23. package/dist/plugin-sdk/{channel-web-DBTRO03V.js → channel-web-dO5k3ubM.js} +18 -18
  24. package/dist/plugin-sdk/{chrome-f00sZkDX.js → chrome-CjNTuJML.js} +6 -6
  25. package/dist/plugin-sdk/{commands-registry-BJ_NxG2F.js → commands-registry-CdYjoI0i.js} +4 -4
  26. package/dist/plugin-sdk/{common-Cf27Jwxu.js → common-oYc5vPFl.js} +2 -2
  27. package/dist/plugin-sdk/{config-CHQrpx-Q.js → config-B1z-UxQ3.js} +7 -7
  28. package/dist/plugin-sdk/{deliver-DNEuetST.js → deliver-D5_6T567.js} +10 -10
  29. package/dist/plugin-sdk/deliver-runtime-C5dgvvga.js +32 -0
  30. package/dist/plugin-sdk/deps-send-discord.runtime-Dg4N7PHJ.js +23 -0
  31. package/dist/plugin-sdk/deps-send-imessage.runtime-0OEwzMQm.js +22 -0
  32. package/dist/plugin-sdk/deps-send-signal.runtime-BM1jRt3G.js +21 -0
  33. package/dist/plugin-sdk/deps-send-slack.runtime-1E3BYRdF.js +19 -0
  34. package/dist/plugin-sdk/deps-send-telegram.runtime-DNCxIflA.js +24 -0
  35. package/dist/plugin-sdk/deps-send-whatsapp.runtime-OLwr-9c8.js +57 -0
  36. package/dist/plugin-sdk/{diagnostic-LYUUmjJ5.js → diagnostic-Bxxu0ig-.js} +2 -2
  37. package/dist/plugin-sdk/{errors-CtMWwS2Z.js → errors-B3cHyZZA.js} +1 -1
  38. package/dist/plugin-sdk/{fetch-guard-CxYB5Kg6.js → fetch-guard-Dcgod0tg.js} +2 -2
  39. package/dist/plugin-sdk/{fs-safe-DtfhxbrI.js → fs-safe-BaKqI3G4.js} +3 -3
  40. package/dist/plugin-sdk/{image-BwjYjRHx.js → image-B2mQW9Rb.js} +6 -6
  41. package/dist/plugin-sdk/{image-ops-BnZKcbd6.js → image-ops-Cbzr4U9l.js} +2 -2
  42. package/dist/plugin-sdk/image-runtime-BFm45j49.js +25 -0
  43. package/dist/plugin-sdk/{ir-Z4hX67TJ.js → ir-ZEmrTr4J.js} +7 -7
  44. package/dist/plugin-sdk/{local-roots-KhjQw04O.js → local-roots-CIPRxA-4.js} +4 -4
  45. package/dist/plugin-sdk/{logger-DHIIvMxj.js → logger-CvPFVOgT.js} +2 -2
  46. package/dist/plugin-sdk/{login-C31642Ld.js → login-CCTew9bt.js} +4 -4
  47. package/dist/plugin-sdk/{login-qr--y2SG_Ue.js → login-qr-BI3Vi_wJ.js} +5 -5
  48. package/dist/plugin-sdk/{manager-2UZBMCc7.js → manager-BEoYPn7R.js} +8 -8
  49. package/dist/plugin-sdk/manager-runtime-DxclHQ4U.js +15 -0
  50. package/dist/plugin-sdk/{outbound-Ba0QUI5h.js → outbound-ByOw1K6W.js} +5 -5
  51. package/dist/plugin-sdk/{outbound-attachment-B1Laso-8.js → outbound-attachment-BzVhxRRw.js} +2 -2
  52. package/dist/plugin-sdk/{path-alias-guards-C7Vm5DZ1.js → path-alias-guards-sWayacde.js} +1 -1
  53. package/dist/plugin-sdk/{paths-DopV9PQG.js → paths-Dpg3qxcl.js} +1 -1
  54. package/dist/plugin-sdk/{pi-embedded-helpers-DnA_OCzP.js → pi-embedded-helpers-DIxXkGJf.js} +16 -16
  55. package/dist/plugin-sdk/{pi-model-discovery-DdPqXk8f.js → pi-model-discovery-DM_2uFtj.js} +1 -1
  56. package/dist/plugin-sdk/pi-model-discovery-runtime-BuzvkvNR.js +8 -0
  57. package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-DxFHiLUE.js → pi-tools.before-tool-call.runtime-w1dqL_ty.js} +4 -4
  58. package/dist/plugin-sdk/{plugins-CbCt4osF.js → plugins-C4USiH29.js} +4 -4
  59. package/dist/plugin-sdk/{proxy-env-C63mMdas.js → proxy-env-ET-rp8eg.js} +1 -1
  60. package/dist/plugin-sdk/{proxy-fetch-Ch95c_Y2.js → proxy-fetch-uDXGKG3Z.js} +1 -1
  61. package/dist/plugin-sdk/{pw-ai-DpJk62D4.js → pw-ai-CyOt3RDA.js} +9 -9
  62. package/dist/plugin-sdk/{qmd-manager-Ca-iSfEE.js → qmd-manager-BySdoVR7.js} +7 -7
  63. package/dist/plugin-sdk/{query-expansion-B_Xe41Ab.js → query-expansion-C6uS-7lj.js} +4 -4
  64. package/dist/plugin-sdk/{redact-hp9TOulW.js → redact-Bvxt1T_Q.js} +1 -1
  65. package/dist/plugin-sdk/{reply-CovBlFea.js → reply-CTCSeQqW.js} +73 -73
  66. package/dist/plugin-sdk/{resolve-outbound-target-BbrHgyUk.js → resolve-outbound-target-Bw8YNANu.js} +2 -2
  67. package/dist/plugin-sdk/{run-with-concurrency-BR1DXa8T.js → run-with-concurrency-C_KCHwvf.js} +1 -1
  68. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-BxgRDkhc.js +10 -0
  69. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-elOqrkfg.js +19 -0
  70. package/dist/plugin-sdk/{send-BvAtLLPl.js → send-BZ6nYFZr.js} +5 -5
  71. package/dist/plugin-sdk/{send-BTztm3D2.js → send-C0w6xP2x.js} +6 -6
  72. package/dist/plugin-sdk/{send-CWJUuG0i.js → send-CFf-1V89.js} +8 -8
  73. package/dist/plugin-sdk/{send-EcglC4cG.js → send-CY-Qfwia.js} +7 -7
  74. package/dist/plugin-sdk/{send-BXpXBwM_.js → send-qPyNGSe4.js} +13 -13
  75. package/dist/plugin-sdk/{session-k256LJZT.js → session-COrvpvUQ.js} +3 -3
  76. package/dist/plugin-sdk/signal.js +2 -2
  77. package/dist/plugin-sdk/{skill-commands-DoRqLzxm.js → skill-commands-DZqhtmiv.js} +4 -4
  78. package/dist/plugin-sdk/{skills-QudILG6e.js → skills-Cw_vXEJb.js} +6 -6
  79. package/dist/plugin-sdk/slash-commands.runtime-D67JLweo.js +13 -0
  80. package/dist/plugin-sdk/slash-dispatch.runtime-DvcpvCJ0.js +52 -0
  81. package/dist/plugin-sdk/slash-skill-commands.runtime-BM1x3azR.js +16 -0
  82. package/dist/plugin-sdk/{store-BbDQw3g6.js → store-CMHj6IIw.js} +2 -2
  83. package/dist/plugin-sdk/subagent-registry-runtime-1lbDyRzz.js +52 -0
  84. package/dist/plugin-sdk/{tables-BhvloMKN.js → tables-CSqrHsKL.js} +1 -1
  85. package/dist/plugin-sdk/{thinking-URzkT-3p.js → thinking-DOnsR_A8.js} +7 -7
  86. package/dist/plugin-sdk/{tokens-B1PW5Ayy.js → tokens-BDr0Z9o3.js} +1 -1
  87. package/dist/plugin-sdk/{tool-images-xpqbP6RR.js → tool-images-eEfOVkzf.js} +2 -2
  88. package/dist/plugin-sdk/web-BLyT64pW.js +56 -0
  89. package/dist/plugin-sdk/{whatsapp-actions-RcZ6vp61.js → whatsapp-actions-xcleMoMv.js} +17 -17
  90. package/dist/plugin-sdk/whatsapp.js +50 -50
  91. package/dist/{pw-ai-GcYO6HPE.js → pw-ai-CmphSzHx.js} +1 -1
  92. package/dist/{slash-dispatch.runtime-Dh053pQK.js → slash-dispatch.runtime-131yup2e.js} +6 -6
  93. package/dist/{subagent-registry-runtime-DSi5mnCQ.js → subagent-registry-runtime-DbSf_Je6.js} +6 -6
  94. package/dist/{web-1hWJDzNA.js → web-MR9d7KyB.js} +6 -6
  95. package/package.json +5 -2
  96. package/scripts/create-instance.sh +44 -19
  97. package/scripts/install-maca.sh +39 -28
  98. package/scripts/npm_publish.sh +8 -6
  99. package/ui/index.html +16 -0
  100. package/ui/node_modules/.bin/jiti +21 -0
  101. package/ui/node_modules/.bin/lessc +21 -0
  102. package/ui/node_modules/.bin/marked +21 -0
  103. package/ui/node_modules/.bin/playwright +21 -0
  104. package/ui/node_modules/.bin/sass +21 -0
  105. package/ui/node_modules/.bin/tsx +21 -0
  106. package/ui/node_modules/.bin/vite +21 -0
  107. package/ui/node_modules/.bin/vitest +21 -0
  108. package/ui/node_modules/.bin/yaml +21 -0
  109. package/ui/package.json +27 -0
  110. package/ui/public/apple-touch-icon.png +0 -0
  111. package/ui/public/favicon-32.png +0 -0
  112. package/ui/public/favicon.ico +0 -0
  113. package/ui/public/favicon.svg +22 -0
  114. package/ui/src/css.d.ts +1 -0
  115. package/ui/src/i18n/index.ts +3 -0
  116. package/ui/src/i18n/lib/lit-controller.ts +22 -0
  117. package/ui/src/i18n/lib/registry.ts +64 -0
  118. package/ui/src/i18n/lib/translate.ts +123 -0
  119. package/ui/src/i18n/lib/types.ts +9 -0
  120. package/ui/src/i18n/locales/de.ts +129 -0
  121. package/ui/src/i18n/locales/en.ts +337 -0
  122. package/ui/src/i18n/locales/pt-BR.ts +128 -0
  123. package/ui/src/i18n/locales/zh-CN.ts +330 -0
  124. package/ui/src/i18n/locales/zh-TW.ts +125 -0
  125. package/ui/src/i18n/test/translate.test.ts +56 -0
  126. package/ui/src/main.ts +2 -0
  127. package/ui/src/styles/base.css +385 -0
  128. package/ui/src/styles/chat/grouped.css +300 -0
  129. package/ui/src/styles/chat/layout.css +481 -0
  130. package/ui/src/styles/chat/sidebar.css +117 -0
  131. package/ui/src/styles/chat/text.css +146 -0
  132. package/ui/src/styles/chat/tool-cards.css +202 -0
  133. package/ui/src/styles/chat.css +5 -0
  134. package/ui/src/styles/components.css +2612 -0
  135. package/ui/src/styles/config.css +1658 -0
  136. package/ui/src/styles/layout.css +621 -0
  137. package/ui/src/styles/layout.mobile.css +374 -0
  138. package/ui/src/styles.css +5 -0
  139. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-flags-unsupported-unions-1.png +0 -0
  140. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-inputs-and-patches-values-1.png +0 -0
  141. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-union-literals-as-select-options-1.png +0 -0
  142. package/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png +0 -0
  143. package/ui/src/ui/app-channels.ts +279 -0
  144. package/ui/src/ui/app-chat.ts +266 -0
  145. package/ui/src/ui/app-defaults.ts +50 -0
  146. package/ui/src/ui/app-events.ts +5 -0
  147. package/ui/src/ui/app-gateway.node.test.ts +229 -0
  148. package/ui/src/ui/app-gateway.ts +349 -0
  149. package/ui/src/ui/app-lifecycle.node.test.ts +44 -0
  150. package/ui/src/ui/app-lifecycle.ts +109 -0
  151. package/ui/src/ui/app-polling.ts +69 -0
  152. package/ui/src/ui/app-render-usage-tab.ts +273 -0
  153. package/ui/src/ui/app-render.helpers.node.test.ts +286 -0
  154. package/ui/src/ui/app-render.helpers.ts +574 -0
  155. package/ui/src/ui/app-render.ts +1168 -0
  156. package/ui/src/ui/app-scroll.test.ts +275 -0
  157. package/ui/src/ui/app-scroll.ts +179 -0
  158. package/ui/src/ui/app-settings.test.ts +70 -0
  159. package/ui/src/ui/app-settings.ts +440 -0
  160. package/ui/src/ui/app-tool-stream.node.test.ts +139 -0
  161. package/ui/src/ui/app-tool-stream.ts +455 -0
  162. package/ui/src/ui/app-view-state.ts +321 -0
  163. package/ui/src/ui/app.ts +621 -0
  164. package/ui/src/ui/assistant-identity.ts +23 -0
  165. package/ui/src/ui/chat/constants.ts +12 -0
  166. package/ui/src/ui/chat/copy-as-markdown.ts +97 -0
  167. package/ui/src/ui/chat/grouped-render.ts +287 -0
  168. package/ui/src/ui/chat/message-extract.test.ts +64 -0
  169. package/ui/src/ui/chat/message-extract.ts +122 -0
  170. package/ui/src/ui/chat/message-normalizer.test.ts +179 -0
  171. package/ui/src/ui/chat/message-normalizer.ts +101 -0
  172. package/ui/src/ui/chat/tool-cards.ts +156 -0
  173. package/ui/src/ui/chat/tool-helpers.test.ts +141 -0
  174. package/ui/src/ui/chat/tool-helpers.ts +37 -0
  175. package/ui/src/ui/chat-event-reload.test.ts +47 -0
  176. package/ui/src/ui/chat-event-reload.ts +16 -0
  177. package/ui/src/ui/chat-markdown.browser.test.ts +37 -0
  178. package/ui/src/ui/components/resizable-divider.ts +110 -0
  179. package/ui/src/ui/config-form.browser.test.ts +443 -0
  180. package/ui/src/ui/controllers/agent-files.ts +126 -0
  181. package/ui/src/ui/controllers/agent-identity.ts +59 -0
  182. package/ui/src/ui/controllers/agent-skills.ts +33 -0
  183. package/ui/src/ui/controllers/agents.test.ts +61 -0
  184. package/ui/src/ui/controllers/agents.ts +64 -0
  185. package/ui/src/ui/controllers/assistant-identity.ts +34 -0
  186. package/ui/src/ui/controllers/channels.ts +94 -0
  187. package/ui/src/ui/controllers/channels.types.ts +15 -0
  188. package/ui/src/ui/controllers/chat.test.ts +568 -0
  189. package/ui/src/ui/controllers/chat.ts +318 -0
  190. package/ui/src/ui/controllers/config/form-coerce.ts +160 -0
  191. package/ui/src/ui/controllers/config/form-utils.node.test.ts +455 -0
  192. package/ui/src/ui/controllers/config/form-utils.ts +90 -0
  193. package/ui/src/ui/controllers/config.test.ts +289 -0
  194. package/ui/src/ui/controllers/config.ts +219 -0
  195. package/ui/src/ui/controllers/control-ui-bootstrap.test.ts +82 -0
  196. package/ui/src/ui/controllers/control-ui-bootstrap.ts +49 -0
  197. package/ui/src/ui/controllers/cron-filters.test.ts +81 -0
  198. package/ui/src/ui/controllers/cron.test.ts +1070 -0
  199. package/ui/src/ui/controllers/cron.ts +921 -0
  200. package/ui/src/ui/controllers/debug.ts +60 -0
  201. package/ui/src/ui/controllers/devices.ts +159 -0
  202. package/ui/src/ui/controllers/exec-approval.ts +100 -0
  203. package/ui/src/ui/controllers/exec-approvals.ts +170 -0
  204. package/ui/src/ui/controllers/logs.ts +147 -0
  205. package/ui/src/ui/controllers/nodes.ts +32 -0
  206. package/ui/src/ui/controllers/presence.ts +37 -0
  207. package/ui/src/ui/controllers/sessions.test.ts +104 -0
  208. package/ui/src/ui/controllers/sessions.ts +127 -0
  209. package/ui/src/ui/controllers/skills.ts +157 -0
  210. package/ui/src/ui/controllers/usage.node.test.ts +181 -0
  211. package/ui/src/ui/controllers/usage.ts +315 -0
  212. package/ui/src/ui/data/moonshot-kimi-k2.ts +45 -0
  213. package/ui/src/ui/device-auth.ts +73 -0
  214. package/ui/src/ui/device-identity.ts +112 -0
  215. package/ui/src/ui/external-link.test.ts +18 -0
  216. package/ui/src/ui/external-link.ts +19 -0
  217. package/ui/src/ui/focus-mode.browser.test.ts +39 -0
  218. package/ui/src/ui/format.test.ts +101 -0
  219. package/ui/src/ui/format.ts +60 -0
  220. package/ui/src/ui/gateway.ts +360 -0
  221. package/ui/src/ui/icons.ts +256 -0
  222. package/ui/src/ui/markdown.test.ts +85 -0
  223. package/ui/src/ui/markdown.ts +139 -0
  224. package/ui/src/ui/navigation.browser.test.ts +188 -0
  225. package/ui/src/ui/navigation.test.ts +189 -0
  226. package/ui/src/ui/navigation.ts +165 -0
  227. package/ui/src/ui/open-external-url.test.ts +108 -0
  228. package/ui/src/ui/open-external-url.ts +73 -0
  229. package/ui/src/ui/presenter.ts +85 -0
  230. package/ui/src/ui/storage.node.test.ts +63 -0
  231. package/ui/src/ui/storage.ts +99 -0
  232. package/ui/src/ui/test-helpers/app-mount.ts +27 -0
  233. package/ui/src/ui/text-direction.test.ts +24 -0
  234. package/ui/src/ui/text-direction.ts +30 -0
  235. package/ui/src/ui/theme-transition.ts +109 -0
  236. package/ui/src/ui/theme.ts +16 -0
  237. package/ui/src/ui/tool-display.ts +159 -0
  238. package/ui/src/ui/types/chat-types.ts +44 -0
  239. package/ui/src/ui/types.ts +627 -0
  240. package/ui/src/ui/ui-types.ts +54 -0
  241. package/ui/src/ui/usage-helpers.node.test.ts +43 -0
  242. package/ui/src/ui/usage-helpers.ts +321 -0
  243. package/ui/src/ui/usage-types.ts +22 -0
  244. package/ui/src/ui/uuid.test.ts +41 -0
  245. package/ui/src/ui/uuid.ts +57 -0
  246. package/ui/src/ui/views/agents-panels-status-files.ts +461 -0
  247. package/ui/src/ui/views/agents-panels-tools-skills.browser.test.ts +102 -0
  248. package/ui/src/ui/views/agents-panels-tools-skills.ts +537 -0
  249. package/ui/src/ui/views/agents-utils.test.ts +100 -0
  250. package/ui/src/ui/views/agents-utils.ts +502 -0
  251. package/ui/src/ui/views/agents.ts +499 -0
  252. package/ui/src/ui/views/channel-config-extras.ts +49 -0
  253. package/ui/src/ui/views/channels.config.ts +155 -0
  254. package/ui/src/ui/views/channels.discord.ts +65 -0
  255. package/ui/src/ui/views/channels.googlechat.ts +79 -0
  256. package/ui/src/ui/views/channels.imessage.ts +65 -0
  257. package/ui/src/ui/views/channels.nostr-profile-form.ts +321 -0
  258. package/ui/src/ui/views/channels.nostr.ts +237 -0
  259. package/ui/src/ui/views/channels.shared.ts +38 -0
  260. package/ui/src/ui/views/channels.signal.ts +69 -0
  261. package/ui/src/ui/views/channels.slack.ts +65 -0
  262. package/ui/src/ui/views/channels.telegram.ts +120 -0
  263. package/ui/src/ui/views/channels.ts +325 -0
  264. package/ui/src/ui/views/channels.types.ts +62 -0
  265. package/ui/src/ui/views/channels.whatsapp.ts +118 -0
  266. package/ui/src/ui/views/chat-image-open.browser.test.ts +70 -0
  267. package/ui/src/ui/views/chat.test.ts +227 -0
  268. package/ui/src/ui/views/chat.ts +616 -0
  269. package/ui/src/ui/views/config-form.analyze.ts +267 -0
  270. package/ui/src/ui/views/config-form.node.ts +1073 -0
  271. package/ui/src/ui/views/config-form.render.ts +478 -0
  272. package/ui/src/ui/views/config-form.search.node.test.ts +69 -0
  273. package/ui/src/ui/views/config-form.shared.ts +96 -0
  274. package/ui/src/ui/views/config-form.ts +4 -0
  275. package/ui/src/ui/views/config-search.node.test.ts +50 -0
  276. package/ui/src/ui/views/config-search.ts +92 -0
  277. package/ui/src/ui/views/config.browser.test.ts +233 -0
  278. package/ui/src/ui/views/config.ts +820 -0
  279. package/ui/src/ui/views/cron.test.ts +741 -0
  280. package/ui/src/ui/views/cron.ts +1758 -0
  281. package/ui/src/ui/views/debug.ts +151 -0
  282. package/ui/src/ui/views/exec-approval.ts +89 -0
  283. package/ui/src/ui/views/gateway-url-confirmation.ts +40 -0
  284. package/ui/src/ui/views/instances.ts +89 -0
  285. package/ui/src/ui/views/logs.ts +155 -0
  286. package/ui/src/ui/views/markdown-sidebar.ts +40 -0
  287. package/ui/src/ui/views/nodes-exec-approvals.ts +617 -0
  288. package/ui/src/ui/views/nodes-shared.ts +67 -0
  289. package/ui/src/ui/views/nodes.ts +485 -0
  290. package/ui/src/ui/views/overview-hints.ts +16 -0
  291. package/ui/src/ui/views/overview.node.test.ts +39 -0
  292. package/ui/src/ui/views/overview.ts +361 -0
  293. package/ui/src/ui/views/sessions.test.ts +81 -0
  294. package/ui/src/ui/views/sessions.ts +321 -0
  295. package/ui/src/ui/views/skills-grouping.ts +40 -0
  296. package/ui/src/ui/views/skills-shared.ts +52 -0
  297. package/ui/src/ui/views/skills.ts +192 -0
  298. package/ui/src/ui/views/usage-metrics.ts +578 -0
  299. package/ui/src/ui/views/usage-query.ts +277 -0
  300. package/ui/src/ui/views/usage-render-details.test.ts +136 -0
  301. package/ui/src/ui/views/usage-render-details.ts +1083 -0
  302. package/ui/src/ui/views/usage-render-overview.ts +796 -0
  303. package/ui/src/ui/views/usage-styles/usageStyles-part1.ts +701 -0
  304. package/ui/src/ui/views/usage-styles/usageStyles-part2.ts +702 -0
  305. package/ui/src/ui/views/usage-styles/usageStyles-part3.ts +551 -0
  306. package/ui/src/ui/views/usage.ts +836 -0
  307. package/ui/src/ui/views/usageStyles.ts +5 -0
  308. package/ui/src/ui/views/usageTypes.ts +105 -0
  309. package/ui/vite.config.ts +43 -0
  310. package/ui/vitest.config.ts +15 -0
  311. package/ui/vitest.node.config.ts +10 -0
  312. package/dist/plugin-sdk/deliver-runtime-BFdqklJM.js +0 -32
  313. package/dist/plugin-sdk/deps-send-discord.runtime-DuqpYwU0.js +0 -23
  314. package/dist/plugin-sdk/deps-send-imessage.runtime-CZ2rS8Lb.js +0 -22
  315. package/dist/plugin-sdk/deps-send-signal.runtime-BdqiWhIh.js +0 -21
  316. package/dist/plugin-sdk/deps-send-slack.runtime-04s36qiC.js +0 -19
  317. package/dist/plugin-sdk/deps-send-telegram.runtime-LE5tkPvr.js +0 -24
  318. package/dist/plugin-sdk/deps-send-whatsapp.runtime-Bz57lobC.js +0 -57
  319. package/dist/plugin-sdk/image-runtime-B8twoubs.js +0 -25
  320. package/dist/plugin-sdk/manager-runtime-CMeLwose.js +0 -15
  321. package/dist/plugin-sdk/pi-model-discovery-runtime-D8CJhtJY.js +0 -8
  322. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-SkO91TZH.js +0 -10
  323. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-B0VWK5hm.js +0 -19
  324. package/dist/plugin-sdk/slash-commands.runtime-DS6vCNSL.js +0 -13
  325. package/dist/plugin-sdk/slash-dispatch.runtime-BXrxb2wd.js +0 -52
  326. package/dist/plugin-sdk/slash-skill-commands.runtime-Bd6qQ2oT.js +0 -16
  327. package/dist/plugin-sdk/subagent-registry-runtime-1uwQbuXj.js +0 -52
  328. package/dist/plugin-sdk/web-B74yhL2N.js +0 -56
@@ -0,0 +1,2612 @@
1
+ @import "./chat.css";
2
+
3
+ /* ===========================================
4
+ Update Banner
5
+ =========================================== */
6
+
7
+ .update-banner {
8
+ position: sticky;
9
+ top: 0;
10
+ z-index: 10;
11
+ margin: 0 calc(-1 * var(--shell-pad)) 0;
12
+ border-radius: 0;
13
+ border-left: none;
14
+ border-right: none;
15
+ text-align: center;
16
+ font-weight: 500;
17
+ padding: 10px 16px;
18
+ }
19
+
20
+ .update-banner__btn {
21
+ margin-left: 8px;
22
+ border-color: var(--danger);
23
+ color: var(--danger);
24
+ font-size: 12px;
25
+ padding: 4px 12px;
26
+ }
27
+
28
+ .update-banner__btn:hover:not(:disabled) {
29
+ background: rgba(239, 68, 68, 0.15);
30
+ }
31
+
32
+ /* ===========================================
33
+ Cards - Refined with depth
34
+ =========================================== */
35
+
36
+ .card {
37
+ border: 1px solid var(--border);
38
+ background: var(--card);
39
+ border-radius: var(--radius-lg);
40
+ padding: 20px;
41
+ animation: rise 0.35s var(--ease-out) backwards;
42
+ transition:
43
+ border-color var(--duration-normal) var(--ease-out),
44
+ box-shadow var(--duration-normal) var(--ease-out),
45
+ transform var(--duration-normal) var(--ease-out);
46
+ box-shadow:
47
+ var(--shadow-sm),
48
+ inset 0 1px 0 var(--card-highlight);
49
+ }
50
+
51
+ .card:hover {
52
+ border-color: var(--border-strong);
53
+ box-shadow:
54
+ var(--shadow-md),
55
+ inset 0 1px 0 var(--card-highlight);
56
+ }
57
+
58
+ .card-title {
59
+ font-size: 15px;
60
+ font-weight: 600;
61
+ letter-spacing: -0.02em;
62
+ color: var(--text-strong);
63
+ }
64
+
65
+ .card-sub {
66
+ color: var(--muted);
67
+ font-size: 13px;
68
+ margin-top: 6px;
69
+ line-height: 1.5;
70
+ }
71
+
72
+ /* ===========================================
73
+ Stats - Bold values, subtle labels
74
+ =========================================== */
75
+
76
+ .stat {
77
+ background: var(--card);
78
+ border-radius: var(--radius-md);
79
+ padding: 14px 16px;
80
+ border: 1px solid var(--border);
81
+ transition:
82
+ border-color var(--duration-normal) var(--ease-out),
83
+ box-shadow var(--duration-normal) var(--ease-out);
84
+ box-shadow: inset 0 1px 0 var(--card-highlight);
85
+ }
86
+
87
+ .stat:hover {
88
+ border-color: var(--border-strong);
89
+ box-shadow:
90
+ var(--shadow-sm),
91
+ inset 0 1px 0 var(--card-highlight);
92
+ }
93
+
94
+ .stat-label {
95
+ color: var(--muted);
96
+ font-size: 11px;
97
+ font-weight: 500;
98
+ text-transform: uppercase;
99
+ letter-spacing: 0.04em;
100
+ }
101
+
102
+ .stat-value {
103
+ font-size: 24px;
104
+ font-weight: 700;
105
+ margin-top: 6px;
106
+ letter-spacing: -0.03em;
107
+ line-height: 1.1;
108
+ }
109
+
110
+ .stat-value.ok {
111
+ color: var(--ok);
112
+ }
113
+
114
+ .stat-value.warn {
115
+ color: var(--warn);
116
+ }
117
+
118
+ .stat-card {
119
+ display: grid;
120
+ gap: 6px;
121
+ }
122
+
123
+ .note-title {
124
+ font-weight: 600;
125
+ letter-spacing: -0.01em;
126
+ }
127
+
128
+ /* ===========================================
129
+ Status List
130
+ =========================================== */
131
+
132
+ .status-list {
133
+ display: grid;
134
+ gap: 8px;
135
+ }
136
+
137
+ .status-list div {
138
+ display: flex;
139
+ justify-content: space-between;
140
+ gap: 12px;
141
+ padding: 8px 0;
142
+ border-bottom: 1px solid var(--border);
143
+ }
144
+
145
+ .status-list div:last-child {
146
+ border-bottom: none;
147
+ }
148
+
149
+ .account-count {
150
+ margin-top: 10px;
151
+ font-size: 12px;
152
+ font-weight: 500;
153
+ color: var(--muted);
154
+ }
155
+
156
+ .account-card-list {
157
+ margin-top: 16px;
158
+ display: grid;
159
+ gap: 12px;
160
+ }
161
+
162
+ .account-card {
163
+ border: 1px solid var(--border);
164
+ border-radius: var(--radius-md);
165
+ padding: 12px;
166
+ background: var(--bg-elevated);
167
+ transition: border-color var(--duration-fast) ease;
168
+ }
169
+
170
+ .account-card:hover {
171
+ border-color: var(--border-strong);
172
+ }
173
+
174
+ .account-card-header {
175
+ display: flex;
176
+ justify-content: space-between;
177
+ align-items: baseline;
178
+ gap: 12px;
179
+ }
180
+
181
+ .account-card-title {
182
+ font-weight: 500;
183
+ }
184
+
185
+ .account-card-id {
186
+ font-family: var(--mono);
187
+ font-size: 12px;
188
+ color: var(--muted);
189
+ }
190
+
191
+ .account-card-status {
192
+ margin-top: 10px;
193
+ font-size: 13px;
194
+ }
195
+
196
+ .account-card-status div {
197
+ padding: 4px 0;
198
+ }
199
+
200
+ .account-card-error {
201
+ margin-top: 8px;
202
+ color: var(--danger);
203
+ font-size: 12px;
204
+ }
205
+
206
+ /* ===========================================
207
+ Labels & Pills
208
+ =========================================== */
209
+
210
+ .label {
211
+ color: var(--muted);
212
+ font-size: 12px;
213
+ font-weight: 500;
214
+ }
215
+
216
+ .pill {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ gap: 6px;
220
+ border: 1px solid var(--border);
221
+ padding: 6px 12px;
222
+ border-radius: var(--radius-full);
223
+ background: var(--secondary);
224
+ font-size: 13px;
225
+ font-weight: 500;
226
+ transition: border-color var(--duration-fast) ease;
227
+ }
228
+
229
+ .pill:hover {
230
+ border-color: var(--border-strong);
231
+ }
232
+
233
+ .pill.danger {
234
+ border-color: var(--danger-subtle);
235
+ background: var(--danger-subtle);
236
+ color: var(--danger);
237
+ }
238
+
239
+ /* ===========================================
240
+ Theme Toggle
241
+ =========================================== */
242
+
243
+ .theme-toggle {
244
+ --theme-item: 28px;
245
+ --theme-gap: 2px;
246
+ --theme-pad: 4px;
247
+ position: relative;
248
+ }
249
+
250
+ .theme-toggle__track {
251
+ position: relative;
252
+ display: grid;
253
+ grid-template-columns: repeat(3, var(--theme-item));
254
+ gap: var(--theme-gap);
255
+ padding: var(--theme-pad);
256
+ border-radius: var(--radius-full);
257
+ border: 1px solid var(--border);
258
+ background: var(--secondary);
259
+ }
260
+
261
+ .theme-toggle__indicator {
262
+ position: absolute;
263
+ top: 50%;
264
+ left: var(--theme-pad);
265
+ width: var(--theme-item);
266
+ height: var(--theme-item);
267
+ border-radius: var(--radius-full);
268
+ transform: translateY(-50%)
269
+ translateX(calc(var(--theme-index, 0) * (var(--theme-item) + var(--theme-gap))));
270
+ background: var(--accent);
271
+ transition: transform var(--duration-normal) var(--ease-out);
272
+ z-index: 0;
273
+ }
274
+
275
+ .theme-toggle__button {
276
+ height: var(--theme-item);
277
+ width: var(--theme-item);
278
+ display: grid;
279
+ place-items: center;
280
+ border: 0;
281
+ border-radius: var(--radius-full);
282
+ background: transparent;
283
+ color: var(--muted);
284
+ cursor: pointer;
285
+ position: relative;
286
+ z-index: 1;
287
+ transition: color var(--duration-fast) ease;
288
+ }
289
+
290
+ .theme-toggle__button:hover {
291
+ color: var(--text);
292
+ }
293
+
294
+ .theme-toggle__button.active {
295
+ color: var(--accent-foreground);
296
+ }
297
+
298
+ .theme-toggle__button.active .theme-icon {
299
+ stroke: var(--accent-foreground);
300
+ }
301
+
302
+ .theme-icon {
303
+ width: 14px;
304
+ height: 14px;
305
+ stroke: currentColor;
306
+ fill: none;
307
+ stroke-width: 1.5px;
308
+ stroke-linecap: round;
309
+ stroke-linejoin: round;
310
+ }
311
+
312
+ /* ===========================================
313
+ Status Dot - With glow for emphasis
314
+ =========================================== */
315
+
316
+ .statusDot {
317
+ width: 8px;
318
+ height: 8px;
319
+ border-radius: var(--radius-full);
320
+ background: var(--danger);
321
+ box-shadow: 0 0 8px rgba(239, 68, 68, 0.5);
322
+ animation: pulse-subtle 2s ease-in-out infinite;
323
+ }
324
+
325
+ .statusDot.ok {
326
+ background: var(--ok);
327
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.5);
328
+ animation: none;
329
+ }
330
+
331
+ .statusDot.warn {
332
+ background: var(--warn);
333
+ box-shadow: 0 0 8px rgba(245, 158, 11, 0.5);
334
+ animation: none;
335
+ }
336
+
337
+ /* ===========================================
338
+ Buttons - Tactile with personality
339
+ =========================================== */
340
+
341
+ .btn {
342
+ display: inline-flex;
343
+ align-items: center;
344
+ justify-content: center;
345
+ gap: 8px;
346
+ border: 1px solid var(--border);
347
+ background: var(--bg-elevated);
348
+ padding: 9px 16px;
349
+ border-radius: var(--radius-md);
350
+ font-size: 13px;
351
+ font-weight: 500;
352
+ letter-spacing: -0.01em;
353
+ cursor: pointer;
354
+ transition:
355
+ border-color var(--duration-fast) var(--ease-out),
356
+ background var(--duration-fast) var(--ease-out),
357
+ box-shadow var(--duration-fast) var(--ease-out),
358
+ transform var(--duration-fast) var(--ease-out);
359
+ }
360
+
361
+ .btn:hover {
362
+ background: var(--bg-hover);
363
+ border-color: var(--border-strong);
364
+ transform: translateY(-1px);
365
+ box-shadow: var(--shadow-sm);
366
+ }
367
+
368
+ .btn:active {
369
+ background: var(--secondary);
370
+ transform: translateY(0);
371
+ box-shadow: none;
372
+ }
373
+
374
+ .btn svg {
375
+ width: 16px;
376
+ height: 16px;
377
+ stroke: currentColor;
378
+ fill: none;
379
+ stroke-width: 1.5px;
380
+ stroke-linecap: round;
381
+ stroke-linejoin: round;
382
+ flex-shrink: 0;
383
+ }
384
+
385
+ .btn.primary {
386
+ border-color: var(--accent);
387
+ background: var(--accent);
388
+ color: var(--primary-foreground);
389
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
390
+ }
391
+
392
+ .btn.primary:hover {
393
+ background: var(--accent-hover);
394
+ border-color: var(--accent-hover);
395
+ box-shadow:
396
+ var(--shadow-md),
397
+ 0 0 20px var(--accent-glow);
398
+ }
399
+
400
+ /* Keyboard shortcut badge (shadcn style) */
401
+ .btn-kbd {
402
+ display: inline-flex;
403
+ align-items: center;
404
+ justify-content: center;
405
+ margin-left: 6px;
406
+ padding: 2px 5px;
407
+ font-family: var(--mono);
408
+ font-size: 11px;
409
+ font-weight: 500;
410
+ line-height: 1;
411
+ border-radius: 4px;
412
+ background: rgba(255, 255, 255, 0.15);
413
+ color: inherit;
414
+ opacity: 0.8;
415
+ }
416
+
417
+ .btn.primary .btn-kbd {
418
+ background: rgba(255, 255, 255, 0.2);
419
+ }
420
+
421
+ :root[data-theme="light"] .btn-kbd {
422
+ background: rgba(0, 0, 0, 0.08);
423
+ }
424
+
425
+ :root[data-theme="light"] .btn.primary .btn-kbd {
426
+ background: rgba(255, 255, 255, 0.25);
427
+ }
428
+
429
+ .btn.active {
430
+ border-color: var(--accent);
431
+ background: var(--accent-subtle);
432
+ color: var(--accent);
433
+ }
434
+
435
+ .btn.danger {
436
+ border-color: transparent;
437
+ background: var(--danger-subtle);
438
+ color: var(--danger);
439
+ }
440
+
441
+ .btn.danger:hover {
442
+ background: rgba(239, 68, 68, 0.15);
443
+ }
444
+
445
+ .btn--sm {
446
+ padding: 6px 10px;
447
+ font-size: 12px;
448
+ }
449
+
450
+ .btn:disabled {
451
+ opacity: 0.5;
452
+ cursor: not-allowed;
453
+ }
454
+
455
+ /* ===========================================
456
+ Form Fields
457
+ =========================================== */
458
+
459
+ .field {
460
+ display: grid;
461
+ gap: 6px;
462
+ }
463
+
464
+ .field.full {
465
+ grid-column: 1 / -1;
466
+ }
467
+
468
+ .field span {
469
+ color: var(--muted);
470
+ font-size: 13px;
471
+ font-weight: 500;
472
+ }
473
+
474
+ .field input,
475
+ .field textarea,
476
+ .field select {
477
+ border: 1px solid var(--input);
478
+ background: var(--card);
479
+ border-radius: var(--radius-md);
480
+ padding: 8px 12px;
481
+ outline: none;
482
+ box-shadow: inset 0 1px 0 var(--card-highlight);
483
+ transition:
484
+ border-color var(--duration-fast) ease,
485
+ box-shadow var(--duration-fast) ease;
486
+ }
487
+
488
+ .field input:focus,
489
+ .field textarea:focus,
490
+ .field select:focus {
491
+ border-color: var(--ring);
492
+ box-shadow: var(--focus-ring);
493
+ }
494
+
495
+ .field select {
496
+ appearance: none;
497
+ padding-right: 36px;
498
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
499
+ background-repeat: no-repeat;
500
+ background-position: right 10px center;
501
+ cursor: pointer;
502
+ }
503
+
504
+ .field textarea {
505
+ font-family: var(--mono);
506
+ min-height: 160px;
507
+ resize: vertical;
508
+ white-space: pre;
509
+ line-height: 1.5;
510
+ }
511
+
512
+ .field.checkbox {
513
+ grid-template-columns: auto 1fr;
514
+ align-items: center;
515
+ }
516
+
517
+ .config-form .field.checkbox {
518
+ grid-template-columns: 18px minmax(0, 1fr);
519
+ column-gap: 10px;
520
+ }
521
+
522
+ .config-form .field.checkbox input[type="checkbox"] {
523
+ margin: 0;
524
+ width: 16px;
525
+ height: 16px;
526
+ accent-color: var(--accent);
527
+ }
528
+
529
+ .form-grid {
530
+ display: grid;
531
+ gap: 12px;
532
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
533
+ }
534
+
535
+ /* ===========================================
536
+ Cron Form
537
+ =========================================== */
538
+
539
+ .cron-summary-strip {
540
+ display: flex;
541
+ justify-content: space-between;
542
+ align-items: flex-start;
543
+ gap: 12px 18px;
544
+ padding: 14px 16px;
545
+ }
546
+
547
+ .cron-summary-strip__left {
548
+ display: grid;
549
+ gap: 8px 14px;
550
+ grid-template-columns: repeat(3, minmax(0, 1fr));
551
+ flex: 1 1 auto;
552
+ min-width: 0;
553
+ }
554
+
555
+ .cron-summary-item {
556
+ border: 1px solid var(--border);
557
+ border-radius: var(--radius-md);
558
+ background: var(--bg-elevated);
559
+ padding: 10px 12px;
560
+ min-height: 62px;
561
+ display: grid;
562
+ gap: 6px;
563
+ }
564
+
565
+ .cron-summary-item--wide {
566
+ grid-column: span 1;
567
+ }
568
+
569
+ .cron-summary-label {
570
+ color: var(--muted);
571
+ font-size: 11px;
572
+ font-weight: 600;
573
+ text-transform: uppercase;
574
+ letter-spacing: 0.04em;
575
+ }
576
+
577
+ .cron-summary-value {
578
+ color: var(--text-strong);
579
+ font-size: 15px;
580
+ font-weight: 600;
581
+ line-height: 1.3;
582
+ display: flex;
583
+ align-items: center;
584
+ gap: 8px;
585
+ }
586
+
587
+ .cron-summary-strip__actions {
588
+ display: flex;
589
+ align-items: center;
590
+ justify-content: flex-end;
591
+ gap: 10px;
592
+ min-width: 0;
593
+ }
594
+
595
+ .cron-workspace {
596
+ margin-top: 16px;
597
+ display: grid;
598
+ grid-template-columns: minmax(0, 1.2fr) minmax(340px, 0.8fr);
599
+ gap: 16px;
600
+ align-items: start;
601
+ }
602
+
603
+ .cron-workspace-main {
604
+ display: grid;
605
+ gap: 16px;
606
+ }
607
+
608
+ .cron-workspace-form {
609
+ position: sticky;
610
+ top: 74px;
611
+ max-height: calc(100vh - 74px - 32px);
612
+ overflow-y: auto;
613
+ }
614
+
615
+ .cron-form {
616
+ margin-top: 16px;
617
+ display: grid;
618
+ gap: 14px;
619
+ }
620
+
621
+ .cron-form-section {
622
+ border: 1px solid var(--border);
623
+ border-radius: var(--radius-md);
624
+ padding: 14px;
625
+ background: var(--bg-elevated);
626
+ display: grid;
627
+ gap: 12px;
628
+ }
629
+
630
+ .cron-form-section__title {
631
+ font-size: 13px;
632
+ font-weight: 600;
633
+ letter-spacing: -0.01em;
634
+ color: var(--text-strong);
635
+ }
636
+
637
+ .cron-form-section__sub {
638
+ color: var(--muted);
639
+ font-size: 12px;
640
+ line-height: 1.45;
641
+ }
642
+
643
+ .cron-form-grid {
644
+ grid-template-columns: repeat(2, minmax(0, 1fr));
645
+ gap: 14px 16px;
646
+ }
647
+
648
+ .cron-help {
649
+ color: var(--muted);
650
+ font-size: 12px;
651
+ line-height: 1.45;
652
+ margin-top: 2px;
653
+ }
654
+
655
+ .cron-error {
656
+ color: var(--danger-color);
657
+ }
658
+
659
+ .cron-required-legend {
660
+ color: var(--muted);
661
+ font-size: 12px;
662
+ line-height: 1.4;
663
+ }
664
+
665
+ .cron-required-marker {
666
+ color: var(--danger-color);
667
+ font-weight: 700;
668
+ margin-left: 3px;
669
+ }
670
+
671
+ .cron-required-sr {
672
+ position: absolute;
673
+ width: 1px;
674
+ height: 1px;
675
+ padding: 0;
676
+ margin: -1px;
677
+ overflow: hidden;
678
+ clip: rect(0, 0, 0, 0);
679
+ white-space: nowrap;
680
+ border: 0;
681
+ }
682
+
683
+ .field input[aria-invalid="true"],
684
+ .field textarea[aria-invalid="true"],
685
+ .field select[aria-invalid="true"] {
686
+ border-color: var(--danger);
687
+ box-shadow:
688
+ inset 0 1px 0 var(--card-highlight),
689
+ 0 0 0 1px rgba(239, 68, 68, 0.2);
690
+ }
691
+
692
+ .cron-form-status {
693
+ margin-top: 4px;
694
+ border: 1px solid var(--danger-subtle);
695
+ background: var(--danger-subtle);
696
+ border-radius: var(--radius-md);
697
+ padding: 10px 12px;
698
+ }
699
+
700
+ .cron-form-status__title {
701
+ color: var(--text-strong);
702
+ font-size: 13px;
703
+ font-weight: 600;
704
+ margin-bottom: 6px;
705
+ }
706
+
707
+ .cron-form-status__list {
708
+ margin: 8px 0 0;
709
+ padding: 0;
710
+ list-style: none;
711
+ display: grid;
712
+ gap: 6px;
713
+ }
714
+
715
+ .cron-form-status__link {
716
+ border: 0;
717
+ background: transparent;
718
+ color: var(--text);
719
+ cursor: pointer;
720
+ font-size: 12px;
721
+ line-height: 1.4;
722
+ padding: 0;
723
+ text-align: left;
724
+ text-decoration: underline;
725
+ text-underline-offset: 2px;
726
+ }
727
+
728
+ .cron-form-status__link:hover {
729
+ color: var(--text-strong);
730
+ }
731
+
732
+ .cron-span-2 {
733
+ grid-column: 1 / -1;
734
+ }
735
+
736
+ .cron-checkbox {
737
+ align-items: center;
738
+ grid-template-columns: 16px minmax(0, 1fr);
739
+ column-gap: 10px;
740
+ }
741
+
742
+ .cron-checkbox input[type="checkbox"] {
743
+ margin: 2px 0 0;
744
+ width: 16px;
745
+ height: 16px;
746
+ accent-color: var(--accent);
747
+ }
748
+
749
+ .cron-checkbox .field-checkbox__label {
750
+ color: var(--text-strong);
751
+ font-size: 13px;
752
+ font-weight: 500;
753
+ }
754
+
755
+ .cron-checkbox .cron-help {
756
+ grid-column: 2;
757
+ }
758
+
759
+ .cron-checkbox-inline {
760
+ align-content: start;
761
+ align-items: start;
762
+ padding-top: 28px;
763
+ }
764
+
765
+ .cron-advanced {
766
+ border: 1px solid var(--border);
767
+ border-radius: var(--radius-md);
768
+ padding: 12px;
769
+ background: var(--bg-elevated);
770
+ display: grid;
771
+ gap: 10px;
772
+ }
773
+
774
+ .cron-advanced__summary {
775
+ cursor: pointer;
776
+ color: var(--muted);
777
+ font-size: 13px;
778
+ font-weight: 500;
779
+ }
780
+
781
+ .cron-stagger-group {
782
+ display: grid;
783
+ grid-template-columns: minmax(0, 1fr) 180px;
784
+ gap: 14px 16px;
785
+ align-items: start;
786
+ }
787
+
788
+ .cron-form-actions {
789
+ margin-top: 14px;
790
+ justify-content: flex-start;
791
+ align-items: center;
792
+ gap: 10px 14px;
793
+ flex-wrap: wrap;
794
+ }
795
+
796
+ .cron-submit-reason {
797
+ color: var(--muted);
798
+ font-size: 12px;
799
+ line-height: 1.4;
800
+ }
801
+
802
+ .cron-filter-search {
803
+ flex: 1 1 320px;
804
+ min-width: 280px;
805
+ }
806
+
807
+ .cron-workspace .filters .field {
808
+ min-width: 160px;
809
+ }
810
+
811
+ .cron-run-filters {
812
+ margin-top: 12px;
813
+ display: grid;
814
+ gap: 12px;
815
+ }
816
+
817
+ .cron-run-filters__row {
818
+ display: grid;
819
+ gap: 12px;
820
+ }
821
+
822
+ .cron-run-filters__row--primary {
823
+ grid-template-columns: minmax(160px, 220px) minmax(240px, 1fr) minmax(160px, 220px);
824
+ }
825
+
826
+ .cron-run-filters__row--secondary {
827
+ grid-template-columns: repeat(2, minmax(220px, 1fr));
828
+ }
829
+
830
+ .cron-run-filter-search {
831
+ min-width: 0;
832
+ }
833
+
834
+ .cron-filter-dropdown {
835
+ min-width: 0;
836
+ }
837
+
838
+ .cron-filter-dropdown__details {
839
+ position: relative;
840
+ }
841
+
842
+ .cron-filter-dropdown__details > summary {
843
+ list-style: none;
844
+ }
845
+
846
+ .cron-filter-dropdown__details > summary::-webkit-details-marker {
847
+ display: none;
848
+ }
849
+
850
+ .cron-filter-dropdown__trigger {
851
+ width: 100%;
852
+ justify-content: space-between;
853
+ text-align: left;
854
+ }
855
+
856
+ .cron-filter-dropdown__panel {
857
+ position: absolute;
858
+ z-index: 30;
859
+ top: calc(100% + 8px);
860
+ left: 0;
861
+ width: min(360px, calc(100vw - 48px));
862
+ border: 1px solid var(--border);
863
+ border-radius: var(--radius-md);
864
+ background: var(--bg-elevated);
865
+ padding: 10px;
866
+ display: grid;
867
+ gap: 10px;
868
+ box-shadow: var(--shadow-card);
869
+ }
870
+
871
+ .cron-filter-dropdown__list {
872
+ display: grid;
873
+ gap: 6px;
874
+ }
875
+
876
+ .cron-filter-dropdown__option {
877
+ display: grid;
878
+ grid-template-columns: 16px minmax(0, 1fr);
879
+ gap: 8px;
880
+ align-items: center;
881
+ color: var(--text);
882
+ font-size: 13px;
883
+ }
884
+
885
+ .cron-filter-dropdown__option input[type="checkbox"] {
886
+ width: 16px;
887
+ height: 16px;
888
+ margin: 0;
889
+ accent-color: var(--accent);
890
+ }
891
+
892
+ .cron-run-entry {
893
+ align-items: start;
894
+ }
895
+
896
+ .cron-run-entry__meta {
897
+ text-align: right;
898
+ min-width: 220px;
899
+ }
900
+
901
+ .cron-run-entry__summary {
902
+ white-space: pre-wrap;
903
+ line-height: 1.45;
904
+ }
905
+
906
+ @media (max-width: 1100px) {
907
+ .cron-summary-strip {
908
+ flex-direction: column;
909
+ }
910
+
911
+ .cron-summary-strip__left {
912
+ grid-template-columns: repeat(2, minmax(0, 1fr));
913
+ width: 100%;
914
+ }
915
+
916
+ .cron-summary-strip__actions {
917
+ width: 100%;
918
+ justify-content: flex-start;
919
+ flex-wrap: wrap;
920
+ }
921
+
922
+ .cron-workspace {
923
+ grid-template-columns: 1fr;
924
+ }
925
+
926
+ .cron-workspace-form {
927
+ position: static;
928
+ order: -1;
929
+ }
930
+
931
+ .cron-form-grid {
932
+ grid-template-columns: 1fr;
933
+ gap: 12px;
934
+ }
935
+
936
+ .cron-span-2 {
937
+ grid-column: auto;
938
+ }
939
+
940
+ .cron-checkbox-inline {
941
+ padding-top: 0;
942
+ }
943
+
944
+ .cron-stagger-group {
945
+ grid-template-columns: 1fr;
946
+ gap: 12px;
947
+ }
948
+
949
+ .cron-filter-search {
950
+ min-width: 0;
951
+ flex: 1 1 100%;
952
+ }
953
+
954
+ .cron-run-filters__row--primary,
955
+ .cron-run-filters__row--secondary {
956
+ grid-template-columns: 1fr;
957
+ }
958
+
959
+ .cron-filter-dropdown__panel {
960
+ width: 100%;
961
+ max-width: none;
962
+ position: static;
963
+ margin-top: 8px;
964
+ }
965
+
966
+ .cron-run-entry__meta {
967
+ min-width: 0;
968
+ text-align: left;
969
+ }
970
+ }
971
+
972
+ :root[data-theme="light"] .field input,
973
+ :root[data-theme="light"] .field textarea,
974
+ :root[data-theme="light"] .field select {
975
+ background: var(--card);
976
+ border-color: var(--input);
977
+ }
978
+
979
+ :root[data-theme="light"] .btn {
980
+ background: var(--bg);
981
+ border-color: var(--input);
982
+ }
983
+
984
+ :root[data-theme="light"] .btn:hover {
985
+ background: var(--bg-hover);
986
+ }
987
+
988
+ :root[data-theme="light"] .btn.active {
989
+ border-color: var(--accent);
990
+ background: var(--accent-subtle);
991
+ color: var(--accent);
992
+ }
993
+
994
+ :root[data-theme="light"] .btn.primary {
995
+ background: var(--accent);
996
+ border-color: var(--accent);
997
+ }
998
+
999
+ /* ===========================================
1000
+ Utilities
1001
+ =========================================== */
1002
+
1003
+ .muted {
1004
+ color: var(--muted);
1005
+ }
1006
+
1007
+ .mono {
1008
+ font-family: var(--mono);
1009
+ }
1010
+
1011
+ /* ===========================================
1012
+ Callouts - Informative with subtle depth
1013
+ =========================================== */
1014
+
1015
+ .callout {
1016
+ padding: 14px 16px;
1017
+ border-radius: var(--radius-md);
1018
+ background: var(--secondary);
1019
+ border: 1px solid var(--border);
1020
+ font-size: 13px;
1021
+ line-height: 1.5;
1022
+ position: relative;
1023
+ }
1024
+
1025
+ .callout.danger {
1026
+ border-color: rgba(239, 68, 68, 0.25);
1027
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.08) 0%, rgba(239, 68, 68, 0.04) 100%);
1028
+ color: var(--danger);
1029
+ }
1030
+
1031
+ .callout.info {
1032
+ border-color: rgba(59, 130, 246, 0.25);
1033
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.08) 0%, rgba(59, 130, 246, 0.04) 100%);
1034
+ color: var(--info);
1035
+ }
1036
+
1037
+ .callout.success {
1038
+ border-color: rgba(34, 197, 94, 0.25);
1039
+ background: linear-gradient(135deg, rgba(34, 197, 94, 0.08) 0%, rgba(34, 197, 94, 0.04) 100%);
1040
+ color: var(--ok);
1041
+ }
1042
+
1043
+ /* Compaction indicator */
1044
+ .compaction-indicator {
1045
+ align-self: center;
1046
+ display: inline-flex;
1047
+ align-items: center;
1048
+ gap: 6px;
1049
+ font-size: 13px;
1050
+ line-height: 1.2;
1051
+ padding: 6px 14px;
1052
+ margin-bottom: 8px;
1053
+ border-radius: 999px;
1054
+ border: 1px solid var(--border);
1055
+ background: var(--panel-strong);
1056
+ color: var(--text);
1057
+ white-space: nowrap;
1058
+ user-select: none;
1059
+ animation: fade-in 0.2s var(--ease-out);
1060
+ }
1061
+
1062
+ .compaction-indicator svg {
1063
+ width: 16px;
1064
+ height: 16px;
1065
+ stroke: currentColor;
1066
+ fill: none;
1067
+ stroke-width: 1.5px;
1068
+ stroke-linecap: round;
1069
+ stroke-linejoin: round;
1070
+ flex-shrink: 0;
1071
+ }
1072
+
1073
+ .compaction-indicator--active {
1074
+ color: var(--info);
1075
+ border-color: rgba(59, 130, 246, 0.35);
1076
+ }
1077
+
1078
+ .compaction-indicator--active svg {
1079
+ animation: compaction-spin 1s linear infinite;
1080
+ }
1081
+
1082
+ .compaction-indicator--complete {
1083
+ color: var(--ok);
1084
+ border-color: rgba(34, 197, 94, 0.35);
1085
+ }
1086
+
1087
+ .compaction-indicator--fallback {
1088
+ color: #d97706;
1089
+ border-color: rgba(217, 119, 6, 0.35);
1090
+ }
1091
+
1092
+ .compaction-indicator--fallback-cleared {
1093
+ color: var(--ok);
1094
+ border-color: rgba(34, 197, 94, 0.35);
1095
+ }
1096
+
1097
+ @keyframes compaction-spin {
1098
+ to {
1099
+ transform: rotate(360deg);
1100
+ }
1101
+ }
1102
+
1103
+ /* ===========================================
1104
+ Code Blocks
1105
+ =========================================== */
1106
+
1107
+ .code-block {
1108
+ font-family: var(--mono);
1109
+ font-size: 13px;
1110
+ line-height: 1.5;
1111
+ background: var(--secondary);
1112
+ padding: 12px;
1113
+ border-radius: var(--radius-md);
1114
+ border: 1px solid var(--border);
1115
+ max-height: 360px;
1116
+ overflow: auto;
1117
+ max-width: 100%;
1118
+ }
1119
+
1120
+ :root[data-theme="light"] .code-block,
1121
+ :root[data-theme="light"] .list-item,
1122
+ :root[data-theme="light"] .table-row,
1123
+ :root[data-theme="light"] .chip {
1124
+ background: var(--bg);
1125
+ }
1126
+
1127
+ /* ===========================================
1128
+ Lists
1129
+ =========================================== */
1130
+
1131
+ .list {
1132
+ display: grid;
1133
+ gap: 8px;
1134
+ container-type: inline-size;
1135
+ }
1136
+
1137
+ .list-item {
1138
+ display: grid;
1139
+ grid-template-columns: minmax(0, 1fr) minmax(200px, 260px);
1140
+ gap: 16px;
1141
+ align-items: start;
1142
+ border: 1px solid var(--border);
1143
+ border-radius: var(--radius-md);
1144
+ padding: 12px;
1145
+ background: var(--card);
1146
+ transition: border-color var(--duration-fast) ease;
1147
+ }
1148
+
1149
+ .list-item-clickable {
1150
+ cursor: pointer;
1151
+ }
1152
+
1153
+ .list-item-clickable:hover {
1154
+ border-color: var(--border-strong);
1155
+ }
1156
+
1157
+ .list-item-selected {
1158
+ border-color: var(--accent);
1159
+ box-shadow: var(--focus-ring);
1160
+ }
1161
+
1162
+ .list-main {
1163
+ display: grid;
1164
+ gap: 4px;
1165
+ min-width: 0;
1166
+ }
1167
+
1168
+ .list-title {
1169
+ font-weight: 500;
1170
+ }
1171
+
1172
+ .list-sub {
1173
+ color: var(--muted);
1174
+ font-size: 12px;
1175
+ }
1176
+
1177
+ .list-meta {
1178
+ text-align: right;
1179
+ color: var(--muted);
1180
+ font-size: 12px;
1181
+ display: grid;
1182
+ gap: 4px;
1183
+ min-width: 200px;
1184
+ }
1185
+
1186
+ .list-meta .btn {
1187
+ padding: 6px 10px;
1188
+ }
1189
+
1190
+ .list-meta .field input,
1191
+ .list-meta .field textarea,
1192
+ .list-meta .field select {
1193
+ width: 100%;
1194
+ }
1195
+
1196
+ /* Debug event log payloads should use full width like other debug sections. */
1197
+ .debug-event-log__item {
1198
+ grid-template-columns: minmax(0, 1fr);
1199
+ }
1200
+
1201
+ .debug-event-log__meta {
1202
+ min-width: 0;
1203
+ text-align: left;
1204
+ }
1205
+
1206
+ .debug-event-log__payload {
1207
+ margin: 0;
1208
+ max-width: 100%;
1209
+ }
1210
+
1211
+ /* Cron jobs: allow long payload/state text and keep action buttons inside the card. */
1212
+ .cron-job-payload,
1213
+ .cron-job-agent,
1214
+ .cron-job-state {
1215
+ overflow-wrap: anywhere;
1216
+ word-break: break-word;
1217
+ }
1218
+
1219
+ .cron-job .list-title {
1220
+ font-weight: 600;
1221
+ font-size: 15px;
1222
+ letter-spacing: -0.015em;
1223
+ }
1224
+
1225
+ .cron-job {
1226
+ grid-template-columns: minmax(0, 1fr) minmax(240px, 300px);
1227
+ grid-template-areas:
1228
+ "main meta"
1229
+ "footer footer";
1230
+ row-gap: 10px;
1231
+ }
1232
+
1233
+ .cron-job .list-main {
1234
+ grid-area: main;
1235
+ }
1236
+
1237
+ .cron-job .list-meta {
1238
+ grid-area: meta;
1239
+ min-width: 240px;
1240
+ gap: 8px;
1241
+ }
1242
+
1243
+ .cron-job-footer {
1244
+ grid-area: footer;
1245
+ display: flex;
1246
+ justify-content: space-between;
1247
+ align-items: center;
1248
+ gap: 12px;
1249
+ border-top: 1px solid var(--border);
1250
+ padding-top: 10px;
1251
+ }
1252
+
1253
+ .cron-job-chips {
1254
+ flex: 1 1 auto;
1255
+ }
1256
+
1257
+ .cron-job-detail {
1258
+ display: grid;
1259
+ gap: 3px;
1260
+ margin-top: 2px;
1261
+ }
1262
+
1263
+ .cron-job-detail-label {
1264
+ color: var(--muted);
1265
+ font-size: 11px;
1266
+ font-weight: 600;
1267
+ letter-spacing: 0.03em;
1268
+ text-transform: uppercase;
1269
+ }
1270
+
1271
+ .cron-job-detail-value {
1272
+ font-size: 13px;
1273
+ line-height: 1.35;
1274
+ }
1275
+
1276
+ .cron-job-state {
1277
+ display: grid;
1278
+ gap: 4px;
1279
+ }
1280
+
1281
+ .cron-job-state-row {
1282
+ display: flex;
1283
+ justify-content: space-between;
1284
+ align-items: baseline;
1285
+ gap: 10px;
1286
+ }
1287
+
1288
+ .cron-job-state-key {
1289
+ color: var(--muted);
1290
+ font-size: 10px;
1291
+ font-weight: 600;
1292
+ letter-spacing: 0.05em;
1293
+ text-transform: uppercase;
1294
+ }
1295
+
1296
+ .cron-job-state-value {
1297
+ color: var(--text);
1298
+ font-size: 12px;
1299
+ white-space: nowrap;
1300
+ }
1301
+
1302
+ .cron-job-status-pill {
1303
+ font-size: 11px;
1304
+ font-weight: 600;
1305
+ border: 1px solid var(--border);
1306
+ border-radius: var(--radius-full);
1307
+ padding: 2px 8px;
1308
+ text-transform: lowercase;
1309
+ }
1310
+
1311
+ .cron-job-status-ok {
1312
+ color: var(--ok);
1313
+ border-color: rgba(34, 197, 94, 0.35);
1314
+ background: var(--ok-subtle);
1315
+ }
1316
+
1317
+ .cron-job-status-error {
1318
+ color: var(--danger);
1319
+ border-color: rgba(239, 68, 68, 0.35);
1320
+ background: var(--danger-subtle);
1321
+ }
1322
+
1323
+ .cron-job-status-skipped {
1324
+ color: var(--warn);
1325
+ border-color: rgba(245, 158, 11, 0.35);
1326
+ background: var(--warn-subtle);
1327
+ }
1328
+
1329
+ .cron-job-status-na {
1330
+ color: var(--muted);
1331
+ }
1332
+
1333
+ .cron-job-actions {
1334
+ flex-wrap: wrap;
1335
+ justify-content: flex-end;
1336
+ margin-top: 0;
1337
+ }
1338
+
1339
+ .cron-job-actions .btn {
1340
+ flex: 0 0 auto;
1341
+ }
1342
+
1343
+ @container (max-width: 560px) {
1344
+ .list-item {
1345
+ grid-template-columns: 1fr;
1346
+ }
1347
+
1348
+ .list-meta {
1349
+ min-width: 0;
1350
+ text-align: left;
1351
+ }
1352
+
1353
+ .cron-job-actions {
1354
+ justify-content: flex-start;
1355
+ }
1356
+
1357
+ .cron-job {
1358
+ grid-template-columns: 1fr;
1359
+ grid-template-areas:
1360
+ "main"
1361
+ "meta"
1362
+ "footer";
1363
+ }
1364
+
1365
+ .cron-job-footer {
1366
+ flex-direction: column;
1367
+ align-items: stretch;
1368
+ }
1369
+ }
1370
+
1371
+ /* ===========================================
1372
+ Chips - Compact and punchy
1373
+ =========================================== */
1374
+
1375
+ .chip-row {
1376
+ display: flex;
1377
+ flex-wrap: wrap;
1378
+ gap: 8px;
1379
+ }
1380
+
1381
+ .chip {
1382
+ font-size: 12px;
1383
+ font-weight: 500;
1384
+ border: 1px solid var(--border);
1385
+ border-radius: var(--radius-full);
1386
+ padding: 5px 12px;
1387
+ color: var(--muted);
1388
+ background: var(--secondary);
1389
+ transition:
1390
+ border-color var(--duration-fast) var(--ease-out),
1391
+ background var(--duration-fast) var(--ease-out),
1392
+ transform var(--duration-fast) var(--ease-out);
1393
+ }
1394
+
1395
+ .chip:hover {
1396
+ border-color: var(--border-strong);
1397
+ transform: translateY(-1px);
1398
+ }
1399
+
1400
+ .chip input {
1401
+ margin-right: 6px;
1402
+ }
1403
+
1404
+ .chip-ok {
1405
+ color: var(--ok);
1406
+ border-color: rgba(34, 197, 94, 0.3);
1407
+ background: var(--ok-subtle);
1408
+ }
1409
+
1410
+ .chip-warn {
1411
+ color: var(--warn);
1412
+ border-color: rgba(245, 158, 11, 0.3);
1413
+ background: var(--warn-subtle);
1414
+ }
1415
+
1416
+ .chip-danger {
1417
+ color: var(--danger);
1418
+ border-color: rgba(239, 68, 68, 0.3);
1419
+ background: var(--danger-subtle);
1420
+ }
1421
+
1422
+ /* ===========================================
1423
+ Tables
1424
+ =========================================== */
1425
+
1426
+ .table {
1427
+ display: grid;
1428
+ gap: 6px;
1429
+ }
1430
+
1431
+ .table-head,
1432
+ .table-row {
1433
+ display: grid;
1434
+ grid-template-columns: 1.4fr 1fr 0.8fr 0.7fr 0.8fr 0.8fr 0.8fr 0.8fr 0.6fr;
1435
+ gap: 12px;
1436
+ align-items: center;
1437
+ }
1438
+
1439
+ .table-head {
1440
+ font-size: 12px;
1441
+ font-weight: 500;
1442
+ color: var(--muted);
1443
+ padding: 0 12px;
1444
+ }
1445
+
1446
+ .table-row {
1447
+ border: 1px solid var(--border);
1448
+ padding: 10px 12px;
1449
+ border-radius: var(--radius-md);
1450
+ background: var(--card);
1451
+ transition: border-color var(--duration-fast) ease;
1452
+ }
1453
+
1454
+ .table-row:hover {
1455
+ border-color: var(--border-strong);
1456
+ }
1457
+
1458
+ .session-link {
1459
+ text-decoration: none;
1460
+ color: var(--accent);
1461
+ font-weight: 500;
1462
+ }
1463
+
1464
+ .session-link:hover {
1465
+ text-decoration: underline;
1466
+ }
1467
+
1468
+ .session-key-cell {
1469
+ display: grid;
1470
+ gap: 4px;
1471
+ min-width: 0;
1472
+ }
1473
+
1474
+ .session-key-cell .session-link,
1475
+ .session-key-display-name {
1476
+ overflow-wrap: anywhere;
1477
+ word-break: break-word;
1478
+ }
1479
+
1480
+ .session-key-display-name {
1481
+ font-size: 11px;
1482
+ }
1483
+
1484
+ /* ===========================================
1485
+ Log Stream
1486
+ =========================================== */
1487
+
1488
+ .log-stream {
1489
+ border: 1px solid var(--border);
1490
+ border-radius: var(--radius-md);
1491
+ background: var(--card);
1492
+ max-height: 500px;
1493
+ overflow: auto;
1494
+ container-type: inline-size;
1495
+ }
1496
+
1497
+ .log-row {
1498
+ display: grid;
1499
+ grid-template-columns: 90px 70px minmax(140px, 200px) minmax(0, 1fr);
1500
+ gap: 12px;
1501
+ align-items: start;
1502
+ padding: 8px 12px;
1503
+ border-bottom: 1px solid var(--border);
1504
+ font-size: 12px;
1505
+ transition: background var(--duration-fast) ease;
1506
+ }
1507
+
1508
+ .log-row:hover {
1509
+ background: var(--bg-hover);
1510
+ }
1511
+
1512
+ .log-row:last-child {
1513
+ border-bottom: none;
1514
+ }
1515
+
1516
+ .log-time {
1517
+ color: var(--muted);
1518
+ font-family: var(--mono);
1519
+ }
1520
+
1521
+ .log-level {
1522
+ font-size: 11px;
1523
+ font-weight: 500;
1524
+ border: 1px solid var(--border);
1525
+ border-radius: var(--radius-sm);
1526
+ padding: 2px 6px;
1527
+ width: fit-content;
1528
+ }
1529
+
1530
+ .log-level.trace,
1531
+ .log-level.debug {
1532
+ color: var(--muted);
1533
+ }
1534
+
1535
+ .log-level.info {
1536
+ color: var(--info);
1537
+ border-color: rgba(59, 130, 246, 0.3);
1538
+ }
1539
+
1540
+ .log-level.warn {
1541
+ color: var(--warn);
1542
+ border-color: var(--warn-subtle);
1543
+ }
1544
+
1545
+ .log-level.error,
1546
+ .log-level.fatal {
1547
+ color: var(--danger);
1548
+ border-color: var(--danger-subtle);
1549
+ }
1550
+
1551
+ .log-chip.trace,
1552
+ .log-chip.debug {
1553
+ color: var(--muted);
1554
+ }
1555
+
1556
+ .log-chip.info {
1557
+ color: var(--info);
1558
+ border-color: rgba(59, 130, 246, 0.3);
1559
+ }
1560
+
1561
+ .log-chip.warn {
1562
+ color: var(--warn);
1563
+ border-color: var(--warn-subtle);
1564
+ }
1565
+
1566
+ .log-chip.error,
1567
+ .log-chip.fatal {
1568
+ color: var(--danger);
1569
+ border-color: var(--danger-subtle);
1570
+ }
1571
+
1572
+ .log-subsystem {
1573
+ color: var(--muted);
1574
+ font-family: var(--mono);
1575
+ }
1576
+
1577
+ .log-message {
1578
+ white-space: pre-wrap;
1579
+ word-break: break-word;
1580
+ font-family: var(--mono);
1581
+ }
1582
+
1583
+ @container (max-width: 620px) {
1584
+ .log-row {
1585
+ grid-template-columns: 70px 60px minmax(0, 1fr);
1586
+ }
1587
+
1588
+ .log-subsystem {
1589
+ display: none;
1590
+ }
1591
+ }
1592
+
1593
+ /* ===========================================
1594
+ Chat
1595
+ =========================================== */
1596
+
1597
+ .chat {
1598
+ display: flex;
1599
+ flex-direction: column;
1600
+ min-height: 0;
1601
+ }
1602
+
1603
+ .shell--chat .chat {
1604
+ flex: 1;
1605
+ }
1606
+
1607
+ .chat-header {
1608
+ display: flex;
1609
+ justify-content: space-between;
1610
+ align-items: flex-end;
1611
+ gap: 16px;
1612
+ flex-wrap: wrap;
1613
+ }
1614
+
1615
+ .chat-header__left {
1616
+ display: flex;
1617
+ align-items: flex-end;
1618
+ gap: 12px;
1619
+ flex-wrap: wrap;
1620
+ min-width: 0;
1621
+ }
1622
+
1623
+ .chat-header__right {
1624
+ display: flex;
1625
+ align-items: center;
1626
+ gap: 8px;
1627
+ }
1628
+
1629
+ .chat-session {
1630
+ min-width: 240px;
1631
+ }
1632
+
1633
+ .chat-thread {
1634
+ margin-top: 16px;
1635
+ display: flex;
1636
+ flex-direction: column;
1637
+ gap: 12px;
1638
+ flex: 1;
1639
+ min-height: 0;
1640
+ overflow-y: auto;
1641
+ overflow-x: hidden;
1642
+ padding: 16px 12px;
1643
+ min-width: 0;
1644
+ border-radius: 0;
1645
+ border: none;
1646
+ background: transparent;
1647
+ }
1648
+
1649
+ /* Chat queue */
1650
+ .chat-queue {
1651
+ margin-top: 12px;
1652
+ padding: 12px;
1653
+ border-radius: var(--radius-lg);
1654
+ border: 1px solid var(--border);
1655
+ background: var(--card);
1656
+ display: grid;
1657
+ gap: 8px;
1658
+ }
1659
+
1660
+ .chat-queue__title {
1661
+ font-family: var(--mono);
1662
+ font-size: 12px;
1663
+ font-weight: 500;
1664
+ color: var(--muted);
1665
+ }
1666
+
1667
+ .chat-queue__list {
1668
+ display: grid;
1669
+ gap: 8px;
1670
+ }
1671
+
1672
+ .chat-queue__item {
1673
+ display: grid;
1674
+ grid-template-columns: minmax(0, 1fr) auto;
1675
+ align-items: start;
1676
+ gap: 12px;
1677
+ padding: 10px 12px;
1678
+ border-radius: var(--radius-md);
1679
+ border: 1px dashed var(--border-strong);
1680
+ background: var(--secondary);
1681
+ }
1682
+
1683
+ .chat-queue__text {
1684
+ color: var(--chat-text);
1685
+ font-size: 13px;
1686
+ line-height: 1.45;
1687
+ white-space: pre-wrap;
1688
+ overflow: hidden;
1689
+ display: -webkit-box;
1690
+ line-clamp: 3;
1691
+ -webkit-line-clamp: 3;
1692
+ -webkit-box-orient: vertical;
1693
+ }
1694
+
1695
+ .chat-queue__remove {
1696
+ align-self: start;
1697
+ padding: 4px 10px;
1698
+ font-size: 12px;
1699
+ line-height: 1;
1700
+ }
1701
+
1702
+ /* New messages indicator */
1703
+ .chat-new-messages {
1704
+ align-self: center;
1705
+ margin: 8px auto 0;
1706
+ border-radius: 999px;
1707
+ padding: 6px 12px;
1708
+ font-size: 12px;
1709
+ line-height: 1;
1710
+ }
1711
+
1712
+ /* Chat lines */
1713
+ .chat-line {
1714
+ display: flex;
1715
+ }
1716
+
1717
+ .chat-line.user {
1718
+ justify-content: flex-end;
1719
+ }
1720
+
1721
+ .chat-line.assistant,
1722
+ .chat-line.other {
1723
+ justify-content: flex-start;
1724
+ }
1725
+
1726
+ .chat-msg {
1727
+ display: grid;
1728
+ gap: 6px;
1729
+ max-width: min(700px, 82%);
1730
+ }
1731
+
1732
+ .chat-line.user .chat-msg {
1733
+ justify-items: end;
1734
+ }
1735
+
1736
+ /* Chat bubbles */
1737
+ .chat-bubble {
1738
+ border: 1px solid transparent;
1739
+ background: var(--card);
1740
+ border-radius: var(--radius-lg);
1741
+ padding: 10px 14px;
1742
+ min-width: 0;
1743
+ }
1744
+
1745
+ :root[data-theme="light"] .chat-bubble {
1746
+ border-color: var(--border);
1747
+ background: var(--bg);
1748
+ }
1749
+
1750
+ .chat-line.user .chat-bubble {
1751
+ border-color: transparent;
1752
+ background: var(--accent-subtle);
1753
+ }
1754
+
1755
+ :root[data-theme="light"] .chat-line.user .chat-bubble {
1756
+ border-color: rgba(234, 88, 12, 0.2);
1757
+ background: rgba(251, 146, 60, 0.12);
1758
+ }
1759
+
1760
+ .chat-line.assistant .chat-bubble {
1761
+ border-color: transparent;
1762
+ background: var(--secondary);
1763
+ }
1764
+
1765
+ :root[data-theme="light"] .chat-line.assistant .chat-bubble {
1766
+ border-color: var(--border);
1767
+ background: var(--bg-muted);
1768
+ }
1769
+
1770
+ @keyframes chatStreamPulse {
1771
+ 0%,
1772
+ 100% {
1773
+ border-color: var(--border);
1774
+ }
1775
+ 50% {
1776
+ border-color: var(--accent);
1777
+ }
1778
+ }
1779
+
1780
+ .chat-bubble.streaming {
1781
+ animation: chatStreamPulse 1.5s ease-in-out infinite;
1782
+ }
1783
+
1784
+ @media (prefers-reduced-motion: reduce) {
1785
+ .chat-bubble.streaming {
1786
+ animation: none;
1787
+ border-color: var(--accent);
1788
+ }
1789
+ }
1790
+
1791
+ /* Reading indicator */
1792
+ .chat-bubble.chat-reading-indicator {
1793
+ width: fit-content;
1794
+ padding: 10px 16px;
1795
+ }
1796
+
1797
+ .chat-reading-indicator__dots {
1798
+ display: inline-flex;
1799
+ align-items: center;
1800
+ gap: 4px;
1801
+ height: 12px;
1802
+ }
1803
+
1804
+ .chat-reading-indicator__dots > span {
1805
+ display: inline-block;
1806
+ width: 6px;
1807
+ height: 6px;
1808
+ border-radius: var(--radius-full);
1809
+ background: var(--muted);
1810
+ opacity: 0.6;
1811
+ transform: translateY(0);
1812
+ animation: chatReadingDot 1.2s ease-in-out infinite;
1813
+ will-change: transform, opacity;
1814
+ }
1815
+
1816
+ .chat-reading-indicator__dots > span:nth-child(2) {
1817
+ animation-delay: 0.15s;
1818
+ }
1819
+
1820
+ .chat-reading-indicator__dots > span:nth-child(3) {
1821
+ animation-delay: 0.3s;
1822
+ }
1823
+
1824
+ @keyframes chatReadingDot {
1825
+ 0%,
1826
+ 80%,
1827
+ 100% {
1828
+ opacity: 0.4;
1829
+ transform: translateY(0);
1830
+ }
1831
+ 40% {
1832
+ opacity: 1;
1833
+ transform: translateY(-3px);
1834
+ }
1835
+ }
1836
+
1837
+ @media (prefers-reduced-motion: reduce) {
1838
+ .chat-reading-indicator__dots > span {
1839
+ animation: none;
1840
+ opacity: 0.6;
1841
+ }
1842
+ }
1843
+
1844
+ /* Chat text */
1845
+ .chat-text {
1846
+ overflow-wrap: anywhere;
1847
+ word-break: break-word;
1848
+ color: var(--chat-text);
1849
+ line-height: 1.5;
1850
+ }
1851
+
1852
+ .chat-text :where(p, ul, ol, pre, blockquote, table) {
1853
+ margin: 0;
1854
+ }
1855
+
1856
+ .chat-text :where(p + p, p + ul, p + ol, p + pre, p + blockquote, p + table) {
1857
+ margin-top: 0.75em;
1858
+ }
1859
+
1860
+ .chat-text :where(ul, ol) {
1861
+ padding-left: 1.2em;
1862
+ }
1863
+
1864
+ .chat-text :where(li + li) {
1865
+ margin-top: 0.25em;
1866
+ }
1867
+
1868
+ .chat-text :where(a) {
1869
+ color: var(--accent);
1870
+ }
1871
+
1872
+ .chat-text :where(a:hover) {
1873
+ text-decoration: underline;
1874
+ }
1875
+
1876
+ .chat-text :where(blockquote) {
1877
+ border-left: 2px solid var(--border-strong);
1878
+ padding-left: 12px;
1879
+ color: var(--muted);
1880
+ }
1881
+
1882
+ .chat-text :where(hr) {
1883
+ border: 0;
1884
+ border-top: 1px solid var(--border);
1885
+ margin: 1em 0;
1886
+ }
1887
+
1888
+ .chat-text :where(code) {
1889
+ font-family: var(--mono);
1890
+ font-size: 0.9em;
1891
+ }
1892
+
1893
+ .chat-text :where(:not(pre) > code) {
1894
+ padding: 0.15em 0.35em;
1895
+ border-radius: var(--radius-sm);
1896
+ border: 1px solid var(--border);
1897
+ background: var(--secondary);
1898
+ }
1899
+
1900
+ :root[data-theme="light"] .chat-text :where(:not(pre) > code) {
1901
+ background: var(--bg-muted);
1902
+ }
1903
+
1904
+ .chat-text :where(pre) {
1905
+ margin-top: 0.75em;
1906
+ padding: 10px 12px;
1907
+ border-radius: var(--radius-md);
1908
+ border: 1px solid var(--border);
1909
+ background: var(--secondary);
1910
+ overflow: auto;
1911
+ }
1912
+
1913
+ :root[data-theme="light"] .chat-text :where(pre) {
1914
+ background: var(--bg-muted);
1915
+ }
1916
+
1917
+ .chat-text :where(pre code) {
1918
+ font-size: 12px;
1919
+ white-space: pre;
1920
+ }
1921
+
1922
+ .chat-text :where(table) {
1923
+ margin-top: 0.75em;
1924
+ border-collapse: collapse;
1925
+ width: 100%;
1926
+ max-width: 100%;
1927
+ font-size: 13px;
1928
+ display: block;
1929
+ overflow-x: auto;
1930
+ }
1931
+
1932
+ .chat-text :where(th, td) {
1933
+ border: 1px solid var(--border);
1934
+ padding: 6px 10px;
1935
+ vertical-align: top;
1936
+ }
1937
+
1938
+ .chat-text :where(th) {
1939
+ font-family: var(--mono);
1940
+ font-weight: 500;
1941
+ color: var(--muted);
1942
+ background: var(--secondary);
1943
+ }
1944
+
1945
+ /* Tool cards */
1946
+ .chat-tool-card {
1947
+ margin-top: 8px;
1948
+ padding: 10px 12px;
1949
+ border-radius: var(--radius-md);
1950
+ border: 1px solid var(--border);
1951
+ background: var(--secondary);
1952
+ display: grid;
1953
+ gap: 4px;
1954
+ }
1955
+
1956
+ :root[data-theme="light"] .chat-tool-card {
1957
+ background: var(--bg-muted);
1958
+ }
1959
+
1960
+ .chat-tool-card__title {
1961
+ font-family: var(--mono);
1962
+ font-size: 12px;
1963
+ font-weight: 500;
1964
+ color: var(--text);
1965
+ }
1966
+
1967
+ .chat-tool-card__detail {
1968
+ font-family: var(--mono);
1969
+ font-size: 11px;
1970
+ color: var(--muted);
1971
+ }
1972
+
1973
+ .chat-tool-card__details {
1974
+ margin-top: 6px;
1975
+ }
1976
+
1977
+ .chat-tool-card__summary {
1978
+ font-family: var(--mono);
1979
+ font-size: 11px;
1980
+ color: var(--muted);
1981
+ cursor: pointer;
1982
+ list-style: none;
1983
+ display: inline-flex;
1984
+ align-items: center;
1985
+ gap: 6px;
1986
+ }
1987
+
1988
+ .chat-tool-card__summary::-webkit-details-marker {
1989
+ display: none;
1990
+ }
1991
+
1992
+ .chat-tool-card__summary-meta {
1993
+ color: var(--muted);
1994
+ opacity: 0.7;
1995
+ }
1996
+
1997
+ .chat-tool-card__details[open] .chat-tool-card__summary {
1998
+ color: var(--text);
1999
+ }
2000
+
2001
+ .chat-tool-card__output {
2002
+ margin-top: 8px;
2003
+ font-family: var(--mono);
2004
+ font-size: 11px;
2005
+ line-height: 1.5;
2006
+ white-space: pre-wrap;
2007
+ color: var(--chat-text);
2008
+ padding: 8px 10px;
2009
+ border-radius: var(--radius-md);
2010
+ border: 1px solid var(--border);
2011
+ background: var(--card);
2012
+ }
2013
+
2014
+ :root[data-theme="light"] .chat-tool-card__output {
2015
+ background: var(--bg);
2016
+ }
2017
+
2018
+ .chat-stamp {
2019
+ font-size: 11px;
2020
+ color: var(--muted);
2021
+ }
2022
+
2023
+ .chat-line.user .chat-stamp {
2024
+ text-align: right;
2025
+ }
2026
+
2027
+ /* Chat compose */
2028
+ .chat-compose {
2029
+ margin-top: 12px;
2030
+ display: flex;
2031
+ flex-direction: column;
2032
+ gap: 10px;
2033
+ }
2034
+
2035
+ .shell--chat .chat-compose {
2036
+ position: sticky;
2037
+ bottom: 0;
2038
+ z-index: 5;
2039
+ margin-top: 0;
2040
+ padding-top: 12px;
2041
+ background: linear-gradient(180deg, transparent 0%, var(--bg) 40%);
2042
+ }
2043
+
2044
+ .shell--chat-focus .chat-compose {
2045
+ bottom: calc(var(--shell-pad) + 8px);
2046
+ padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
2047
+ border-bottom-left-radius: var(--radius-lg);
2048
+ border-bottom-right-radius: var(--radius-lg);
2049
+ }
2050
+
2051
+ .chat-compose__field {
2052
+ gap: 4px;
2053
+ }
2054
+
2055
+ .chat-compose__field textarea {
2056
+ min-height: 72px;
2057
+ padding: 10px 14px;
2058
+ border-radius: var(--radius-lg);
2059
+ resize: vertical;
2060
+ white-space: pre-wrap;
2061
+ font-family: var(--font-body);
2062
+ line-height: 1.5;
2063
+ border: 1px solid var(--input);
2064
+ background: var(--card);
2065
+ box-shadow: inset 0 1px 0 var(--card-highlight);
2066
+ transition:
2067
+ border-color var(--duration-fast) ease,
2068
+ box-shadow var(--duration-fast) ease;
2069
+ }
2070
+
2071
+ .chat-compose__field textarea:focus {
2072
+ border-color: var(--ring);
2073
+ box-shadow: var(--focus-ring);
2074
+ }
2075
+
2076
+ .chat-compose__field textarea:disabled {
2077
+ opacity: 0.5;
2078
+ cursor: not-allowed;
2079
+ }
2080
+
2081
+ .chat-compose__actions {
2082
+ justify-content: flex-end;
2083
+ align-self: end;
2084
+ }
2085
+
2086
+ @media (max-width: 900px) {
2087
+ .chat-session {
2088
+ min-width: 180px;
2089
+ }
2090
+
2091
+ .chat-compose {
2092
+ grid-template-columns: 1fr;
2093
+ }
2094
+ }
2095
+
2096
+ /* ===========================================
2097
+ QR Code
2098
+ =========================================== */
2099
+
2100
+ .qr-wrap {
2101
+ margin-top: 16px;
2102
+ border-radius: var(--radius-md);
2103
+ background: var(--card);
2104
+ border: 1px dashed var(--border-strong);
2105
+ padding: 16px;
2106
+ display: inline-flex;
2107
+ }
2108
+
2109
+ .qr-wrap img {
2110
+ width: 160px;
2111
+ height: 160px;
2112
+ border-radius: var(--radius-sm);
2113
+ image-rendering: pixelated;
2114
+ }
2115
+
2116
+ /* ===========================================
2117
+ Exec Approval Modal
2118
+ =========================================== */
2119
+
2120
+ .exec-approval-overlay {
2121
+ position: fixed;
2122
+ inset: 0;
2123
+ background: rgba(0, 0, 0, 0.8);
2124
+ backdrop-filter: blur(4px);
2125
+ display: flex;
2126
+ align-items: center;
2127
+ justify-content: center;
2128
+ padding: 24px;
2129
+ z-index: 200;
2130
+ }
2131
+
2132
+ .exec-approval-card {
2133
+ width: min(540px, 100%);
2134
+ background: var(--card);
2135
+ border: 1px solid var(--border);
2136
+ border-radius: var(--radius-lg);
2137
+ padding: 20px;
2138
+ animation: scale-in 0.2s var(--ease-out);
2139
+ }
2140
+
2141
+ .exec-approval-header {
2142
+ display: flex;
2143
+ align-items: center;
2144
+ justify-content: space-between;
2145
+ gap: 16px;
2146
+ }
2147
+
2148
+ .exec-approval-title {
2149
+ font-size: 14px;
2150
+ font-weight: 600;
2151
+ }
2152
+
2153
+ .exec-approval-sub {
2154
+ color: var(--muted);
2155
+ font-size: 13px;
2156
+ margin-top: 4px;
2157
+ }
2158
+
2159
+ .exec-approval-queue {
2160
+ font-size: 11px;
2161
+ font-weight: 500;
2162
+ color: var(--muted);
2163
+ border: 1px solid var(--border);
2164
+ border-radius: var(--radius-full);
2165
+ padding: 4px 10px;
2166
+ }
2167
+
2168
+ .exec-approval-command {
2169
+ margin-top: 12px;
2170
+ padding: 10px 12px;
2171
+ background: var(--secondary);
2172
+ border: 1px solid var(--border);
2173
+ border-radius: var(--radius-md);
2174
+ word-break: break-word;
2175
+ white-space: pre-wrap;
2176
+ font-family: var(--mono);
2177
+ font-size: 13px;
2178
+ }
2179
+
2180
+ .exec-approval-meta {
2181
+ margin-top: 12px;
2182
+ display: grid;
2183
+ gap: 6px;
2184
+ font-size: 13px;
2185
+ color: var(--muted);
2186
+ }
2187
+
2188
+ .exec-approval-meta-row {
2189
+ display: flex;
2190
+ justify-content: space-between;
2191
+ gap: 12px;
2192
+ }
2193
+
2194
+ .exec-approval-meta-row span:last-child {
2195
+ color: var(--text);
2196
+ font-family: var(--mono);
2197
+ }
2198
+
2199
+ .exec-approval-error {
2200
+ margin-top: 10px;
2201
+ font-size: 13px;
2202
+ color: var(--danger);
2203
+ }
2204
+
2205
+ .exec-approval-actions {
2206
+ margin-top: 16px;
2207
+ display: flex;
2208
+ flex-wrap: wrap;
2209
+ gap: 8px;
2210
+ }
2211
+
2212
+ /* ===========================================
2213
+ Agents
2214
+ =========================================== */
2215
+
2216
+ .agents-layout {
2217
+ display: grid;
2218
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
2219
+ gap: 16px;
2220
+ }
2221
+
2222
+ .agents-sidebar {
2223
+ display: grid;
2224
+ gap: 12px;
2225
+ align-self: start;
2226
+ }
2227
+
2228
+ .agents-main {
2229
+ display: grid;
2230
+ gap: 16px;
2231
+ }
2232
+
2233
+ .agent-list {
2234
+ display: grid;
2235
+ gap: 8px;
2236
+ }
2237
+
2238
+ .agent-row {
2239
+ display: grid;
2240
+ grid-template-columns: auto minmax(0, 1fr) auto;
2241
+ align-items: center;
2242
+ gap: 12px;
2243
+ width: 100%;
2244
+ text-align: left;
2245
+ border: 1px solid var(--border);
2246
+ border-radius: var(--radius-md);
2247
+ background: var(--card);
2248
+ padding: 10px 12px;
2249
+ cursor: pointer;
2250
+ transition: border-color var(--duration-fast) ease;
2251
+ }
2252
+
2253
+ .agent-row:hover {
2254
+ border-color: var(--border-strong);
2255
+ }
2256
+
2257
+ .agent-row.active {
2258
+ border-color: var(--accent);
2259
+ box-shadow: var(--focus-ring);
2260
+ }
2261
+
2262
+ .agent-avatar {
2263
+ width: 32px;
2264
+ height: 32px;
2265
+ border-radius: 50%;
2266
+ background: var(--secondary);
2267
+ display: grid;
2268
+ place-items: center;
2269
+ font-weight: 600;
2270
+ }
2271
+
2272
+ .agent-avatar--lg {
2273
+ width: 48px;
2274
+ height: 48px;
2275
+ font-size: 20px;
2276
+ }
2277
+
2278
+ .agent-info {
2279
+ display: grid;
2280
+ gap: 2px;
2281
+ min-width: 0;
2282
+ }
2283
+
2284
+ .agent-title {
2285
+ font-weight: 600;
2286
+ }
2287
+
2288
+ .agent-sub {
2289
+ color: var(--muted);
2290
+ font-size: 12px;
2291
+ }
2292
+
2293
+ .agent-pill {
2294
+ border: 1px solid var(--border);
2295
+ border-radius: var(--radius-full);
2296
+ padding: 4px 10px;
2297
+ font-size: 11px;
2298
+ color: var(--muted);
2299
+ background: var(--secondary);
2300
+ text-transform: uppercase;
2301
+ letter-spacing: 0.04em;
2302
+ }
2303
+
2304
+ .agent-pill.warn {
2305
+ color: var(--warn);
2306
+ border-color: var(--warn);
2307
+ }
2308
+
2309
+ .agent-header {
2310
+ display: grid;
2311
+ grid-template-columns: minmax(0, 1fr) auto;
2312
+ gap: 16px;
2313
+ align-items: center;
2314
+ }
2315
+
2316
+ .agent-header-main {
2317
+ display: flex;
2318
+ gap: 16px;
2319
+ align-items: center;
2320
+ }
2321
+
2322
+ .agent-header-meta {
2323
+ display: grid;
2324
+ justify-items: end;
2325
+ gap: 6px;
2326
+ color: var(--muted);
2327
+ }
2328
+
2329
+ .agent-tabs {
2330
+ display: flex;
2331
+ gap: 8px;
2332
+ flex-wrap: wrap;
2333
+ }
2334
+
2335
+ .agent-tab {
2336
+ border: 1px solid var(--border);
2337
+ border-radius: var(--radius-full);
2338
+ padding: 6px 14px;
2339
+ font-size: 12px;
2340
+ font-weight: 600;
2341
+ background: var(--secondary);
2342
+ cursor: pointer;
2343
+ transition:
2344
+ border-color var(--duration-fast) ease,
2345
+ background var(--duration-fast) ease;
2346
+ }
2347
+
2348
+ .agent-tab.active {
2349
+ background: var(--accent);
2350
+ border-color: var(--accent);
2351
+ color: white;
2352
+ }
2353
+
2354
+ .agents-overview-grid {
2355
+ display: grid;
2356
+ gap: 14px;
2357
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2358
+ }
2359
+
2360
+ .agent-kv {
2361
+ display: grid;
2362
+ gap: 6px;
2363
+ min-width: 0;
2364
+ }
2365
+
2366
+ .agent-kv > div {
2367
+ min-width: 0;
2368
+ overflow-wrap: anywhere;
2369
+ word-break: break-word;
2370
+ }
2371
+
2372
+ .agent-kv-sub {
2373
+ font-size: 12px;
2374
+ }
2375
+
2376
+ .agent-model-select {
2377
+ display: grid;
2378
+ gap: 12px;
2379
+ }
2380
+
2381
+ .agent-model-meta {
2382
+ display: grid;
2383
+ gap: 6px;
2384
+ min-width: 200px;
2385
+ }
2386
+
2387
+ .agent-files-grid {
2388
+ display: grid;
2389
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
2390
+ gap: 16px;
2391
+ }
2392
+
2393
+ .agent-files-list {
2394
+ display: grid;
2395
+ gap: 8px;
2396
+ }
2397
+
2398
+ .agent-file-row {
2399
+ display: flex;
2400
+ justify-content: space-between;
2401
+ align-items: center;
2402
+ gap: 12px;
2403
+ width: 100%;
2404
+ text-align: left;
2405
+ border: 1px solid var(--border);
2406
+ border-radius: var(--radius-md);
2407
+ background: var(--card);
2408
+ padding: 10px 12px;
2409
+ cursor: pointer;
2410
+ transition: border-color var(--duration-fast) ease;
2411
+ }
2412
+
2413
+ .agent-file-row:hover {
2414
+ border-color: var(--border-strong);
2415
+ }
2416
+
2417
+ .agent-file-row.active {
2418
+ border-color: var(--accent);
2419
+ box-shadow: var(--focus-ring);
2420
+ }
2421
+
2422
+ .agent-file-name {
2423
+ font-weight: 600;
2424
+ }
2425
+
2426
+ .agent-file-meta {
2427
+ color: var(--muted);
2428
+ font-size: 12px;
2429
+ margin-top: 4px;
2430
+ }
2431
+
2432
+ .agent-files-editor {
2433
+ border: 1px solid var(--border);
2434
+ border-radius: var(--radius-lg);
2435
+ padding: 16px;
2436
+ background: var(--card);
2437
+ }
2438
+
2439
+ .agent-file-header {
2440
+ display: flex;
2441
+ justify-content: space-between;
2442
+ align-items: center;
2443
+ gap: 12px;
2444
+ flex-wrap: wrap;
2445
+ }
2446
+
2447
+ .agent-file-title {
2448
+ font-weight: 600;
2449
+ }
2450
+
2451
+ .agent-file-sub {
2452
+ color: var(--muted);
2453
+ font-size: 12px;
2454
+ margin-top: 4px;
2455
+ }
2456
+
2457
+ .agent-file-actions {
2458
+ display: flex;
2459
+ gap: 8px;
2460
+ }
2461
+
2462
+ .agent-tools-meta {
2463
+ display: grid;
2464
+ gap: 12px;
2465
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
2466
+ }
2467
+
2468
+ .agent-tools-buttons {
2469
+ display: flex;
2470
+ gap: 8px;
2471
+ flex-wrap: wrap;
2472
+ margin-top: 8px;
2473
+ }
2474
+
2475
+ .agent-tools-grid {
2476
+ display: grid;
2477
+ gap: 16px;
2478
+ }
2479
+
2480
+ .agent-tools-section {
2481
+ border: 1px solid var(--border);
2482
+ border-radius: var(--radius-md);
2483
+ padding: 10px;
2484
+ background: var(--bg-elevated);
2485
+ }
2486
+
2487
+ .agent-tools-header {
2488
+ font-weight: 600;
2489
+ margin-bottom: 10px;
2490
+ }
2491
+
2492
+ .agent-tools-list {
2493
+ display: grid;
2494
+ gap: 8px 12px;
2495
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
2496
+ }
2497
+
2498
+ .agent-tool-row {
2499
+ display: flex;
2500
+ justify-content: space-between;
2501
+ align-items: center;
2502
+ gap: 12px;
2503
+ padding: 6px 8px;
2504
+ border: 1px solid var(--border);
2505
+ border-radius: var(--radius-md);
2506
+ background: var(--card);
2507
+ }
2508
+
2509
+ .agent-tool-title {
2510
+ font-weight: 600;
2511
+ font-size: 13px;
2512
+ }
2513
+
2514
+ .agent-tool-sub {
2515
+ color: var(--muted);
2516
+ font-size: 11px;
2517
+ margin-top: 2px;
2518
+ }
2519
+
2520
+ .agent-skills-groups {
2521
+ display: grid;
2522
+ gap: 16px;
2523
+ }
2524
+
2525
+ .agent-skills-group {
2526
+ display: grid;
2527
+ gap: 10px;
2528
+ }
2529
+
2530
+ .agent-skills-group summary {
2531
+ list-style: none;
2532
+ }
2533
+
2534
+ .agent-skills-header {
2535
+ display: flex;
2536
+ align-items: center;
2537
+ font-weight: 600;
2538
+ font-size: 13px;
2539
+ text-transform: uppercase;
2540
+ letter-spacing: 0.04em;
2541
+ color: var(--muted);
2542
+ cursor: pointer;
2543
+ gap: 8px;
2544
+ }
2545
+
2546
+ .agent-skills-header > span:last-child {
2547
+ margin-left: auto;
2548
+ }
2549
+
2550
+ .agent-skills-group summary::-webkit-details-marker {
2551
+ display: none;
2552
+ }
2553
+
2554
+ .agent-skills-group summary::marker {
2555
+ content: "";
2556
+ }
2557
+
2558
+ .agent-skills-header::after {
2559
+ content: "▸";
2560
+ font-size: 12px;
2561
+ color: var(--muted);
2562
+ transition: transform var(--duration-fast) ease;
2563
+ margin-left: 8px;
2564
+ }
2565
+
2566
+ .agent-skills-group[open] .agent-skills-header::after {
2567
+ transform: rotate(90deg);
2568
+ }
2569
+
2570
+ .agent-skill-row {
2571
+ align-items: flex-start;
2572
+ gap: 18px;
2573
+ }
2574
+
2575
+ .agent-skill-row .list-meta {
2576
+ display: flex;
2577
+ align-items: flex-start;
2578
+ justify-content: flex-end;
2579
+ min-width: auto;
2580
+ }
2581
+
2582
+ .skills-grid {
2583
+ grid-template-columns: 1fr;
2584
+ }
2585
+
2586
+ @container (min-width: 900px) {
2587
+ .skills-grid {
2588
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2589
+ }
2590
+ }
2591
+
2592
+ @media (max-width: 980px) {
2593
+ .agents-layout {
2594
+ grid-template-columns: 1fr;
2595
+ }
2596
+
2597
+ .agent-header {
2598
+ grid-template-columns: 1fr;
2599
+ }
2600
+
2601
+ .agent-header-meta {
2602
+ justify-items: start;
2603
+ }
2604
+
2605
+ .agent-files-grid {
2606
+ grid-template-columns: 1fr;
2607
+ }
2608
+
2609
+ .agent-tools-list {
2610
+ grid-template-columns: 1fr;
2611
+ }
2612
+ }