openclaw-multi-auto 1.3.7 → 1.3.9

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 (414) hide show
  1. package/dist/{accounts-L9ByEpnP.js → accounts-C9HcPI9h.js} +2 -2
  2. package/dist/{accounts-BOzyfwW4.js → accounts-C_lW3Ag9.js} +2 -2
  3. package/dist/{accounts-yfBeCZtS.js → accounts-Tgelvk0C.js} +17 -17
  4. package/dist/{active-listener-D1yqT1cw.js → active-listener-BEdprTkn.js} +2 -2
  5. package/dist/{api-key-rotation-DtsNS2Nb.js → api-key-rotation-BJpKWXy0.js} +2 -2
  6. package/dist/{audio-preflight-DpxQCpsA.js → audio-preflight-BMvgEQ5j.js} +32 -32
  7. package/dist/{audio-transcription-runner-28fcRNNi.js → audio-transcription-runner-gLFfz8fr.js} +12 -12
  8. package/dist/{audit-membership-runtime-DWyHWAHM.js → audit-membership-runtime-Dntemq07.js} +4 -4
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +51 -51
  11. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  12. package/dist/bundled/command-logger/handler.js +2 -2
  13. package/dist/bundled/session-memory/handler.js +51 -51
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/{channel-activity-xHOMiarp.js → channel-activity-BDnjYF7B.js} +3 -3
  16. package/dist/{chrome-DwizpzOC.js → chrome-DxxEKrY7.js} +18 -18
  17. package/dist/{commands-registry-V1zZ5pPC.js → commands-registry-D5qXbFJn.js} +4 -4
  18. package/dist/control-ui/apple-touch-icon.png +0 -0
  19. package/dist/control-ui/assets/de-Bm0iuKxz.js +2 -0
  20. package/dist/control-ui/assets/de-Bm0iuKxz.js.map +1 -0
  21. package/dist/control-ui/assets/index-7XbUBC_m.js +8380 -0
  22. package/dist/control-ui/assets/index-7XbUBC_m.js.map +1 -0
  23. package/dist/control-ui/assets/index-E0j6Tkrc.css +1 -0
  24. package/dist/control-ui/assets/pt-BR-C2uaHesk.js +2 -0
  25. package/dist/control-ui/assets/pt-BR-C2uaHesk.js.map +1 -0
  26. package/dist/control-ui/assets/zh-CN-CqPGpAps.js +2 -0
  27. package/dist/control-ui/assets/zh-CN-CqPGpAps.js.map +1 -0
  28. package/dist/control-ui/assets/zh-TW-Cyl5GDQh.js +2 -0
  29. package/dist/control-ui/assets/zh-TW-Cyl5GDQh.js.map +1 -0
  30. package/dist/control-ui/favicon-32.png +0 -0
  31. package/dist/control-ui/favicon.ico +0 -0
  32. package/dist/control-ui/favicon.svg +22 -0
  33. package/dist/control-ui/index.html +17 -0
  34. package/dist/{deliver-D4o6VIur.js → deliver-DbdywYJE.js} +21 -21
  35. package/dist/deliver-runtime-BFs7iAZF.js +36 -0
  36. package/dist/deps-send-discord.runtime-DZUccI6Z.js +26 -0
  37. package/dist/deps-send-imessage.runtime-CF3OpoqY.js +25 -0
  38. package/dist/deps-send-signal.runtime-Cw4-ozeO.js +24 -0
  39. package/dist/deps-send-slack.runtime-BDsDhS1P.js +22 -0
  40. package/dist/deps-send-telegram.runtime-D_4xVasO.js +27 -0
  41. package/dist/deps-send-whatsapp.runtime-DK8jqd14.js +60 -0
  42. package/dist/{diagnostic-Bn4PZjMZ.js → diagnostic-Co6Kghr-.js} +2 -2
  43. package/dist/{errors-CCLeFWAg.js → errors-xt401nuk.js} +1 -1
  44. package/dist/{fetch-BlJWzEP6.js → fetch-DuraYswo.js} +5 -5
  45. package/dist/{fetch-guard-ChYBwfiy.js → fetch-guard-DWr0d00H.js} +2 -2
  46. package/dist/{frontmatter-CvaMP376.js → frontmatter-BkTfEZ93.js} +3 -3
  47. package/dist/{fs-safe-0jAo_Whb.js → fs-safe-CTYUrIgQ.js} +4 -4
  48. package/dist/{github-copilot-token-D13V9YBz.js → github-copilot-token-BDioPmd6.js} +7 -7
  49. package/dist/{image-Bbn53mzj.js → image-eT7Y-nP5.js} +6 -6
  50. package/dist/{image-ops-CehkHxmW.js → image-ops-BuUnEOE0.js} +2 -2
  51. package/dist/image-runtime-BcAK3n8a.js +29 -0
  52. package/dist/{ir-DAP-B-Xw.js → ir-B83looB-.js} +8 -8
  53. package/dist/{legacy-names-TyzbVqa_.js → legacy-names-DOC03BkU.js} +1 -1
  54. package/dist/llm-slug-generator.js +51 -51
  55. package/dist/{logger-DMZQQtxK.js → logger-BfjWMCSD.js} +7 -7
  56. package/dist/{login-DiCctRo1.js → login-CrIwcrVI.js} +5 -5
  57. package/dist/{login-qr-MUbXgjtd.js → login-qr-BpPDZdl_.js} +10 -10
  58. package/dist/{manager-BW_NSIMl.js → manager-1bvuGrNR.js} +13 -13
  59. package/dist/manager-runtime-FO1Sx3W8.js +18 -0
  60. package/dist/{model-selection-idoqPmw0.js → model-selection-Dna0Gz1k.js} +43 -43
  61. package/dist/{outbound-C2kanETZ.js → outbound-ChDjtuD6.js} +6 -6
  62. package/dist/{outbound-attachment-DBrYWX8h.js → outbound-attachment-DqHlD21U.js} +2 -2
  63. package/dist/{path-alias-guards-DqXRZmsL.js → path-alias-guards-BzvdLvTI.js} +1 -1
  64. package/dist/{paths-CCxysrzL.js → paths-Bkr-BCxW.js} +4 -4
  65. package/dist/{paths-C6TxBCvO.js → paths-Cvc9EM8Y.js} +5 -5
  66. package/dist/{pi-embedded-BaGj07T0.js → pi-embedded-BQQa91aA.js} +158 -158
  67. package/dist/{pi-embedded-helpers-wy0DZvx1.js → pi-embedded-helpers-CLXm10bV.js} +52 -52
  68. package/dist/{plugin-sdk/pi-model-discovery-v-XPUOOf.js → pi-model-discovery-Dymwdjt0.js} +2 -2
  69. package/dist/pi-model-discovery-runtime-BeY4EUPp.js +11 -0
  70. package/dist/{pi-tools.before-tool-call.runtime-BuLxSyx9.js → pi-tools.before-tool-call.runtime-Cwab_5W1.js} +9 -9
  71. package/dist/plugin-sdk/index.js +50 -50
  72. package/dist/plugin-sdk/mattermost.js +3 -3
  73. package/dist/plugin-sdk/signal.js +2 -2
  74. package/dist/plugin-sdk/zalo.js +2 -2
  75. package/dist/{plugins-CWkRQYDj.js → plugins-4Rj4OjLY.js} +11 -11
  76. package/dist/{proxy-env-Cq5gdrbj.js → proxy-env-DlmzDx8x.js} +1 -1
  77. package/dist/{proxy-fetch-CCjEYbFm.js → proxy-fetch-B2pEfjbR.js} +1 -1
  78. package/dist/{pw-ai-Cl1Lc7RC.js → pw-ai-DNMjFMqH.js} +14 -14
  79. package/dist/{qmd-manager-BsYsO9Ii.js → qmd-manager-BtIKUaO9.js} +10 -10
  80. package/dist/{query-expansion-DtLc3wjL.js → query-expansion-CX-1fS52.js} +6 -6
  81. package/dist/{plugin-sdk/redact-DjVX-1N3.js → redact-COik8ET1.js} +1 -1
  82. package/dist/{run-with-concurrency-D_ZpbgEG.js → run-with-concurrency-BgYfgkXT.js} +4 -4
  83. package/dist/runtime-whatsapp-login.runtime-DUb55byQ.js +13 -0
  84. package/dist/runtime-whatsapp-outbound.runtime-Bii_xSfI.js +22 -0
  85. package/dist/{send-Dx2RkUOZ.js → send-6lz6rNVP.js} +6 -6
  86. package/dist/{send-vmONuVgL.js → send-BHTiZcH3.js} +26 -26
  87. package/dist/{send-Bj776ESJ.js → send-L7gRiwyd.js} +7 -7
  88. package/dist/{send-DcxmcFi_.js → send-PE6cwoTe.js} +8 -8
  89. package/dist/{send-BQERFNyo.js → send-dfu6_rgf.js} +5 -5
  90. package/dist/{session-A4QhBRvH.js → session-D8ImowSs.js} +8 -8
  91. package/dist/{skill-commands-CMzBZKG2.js → skill-commands-DNqJ-kwn.js} +9 -9
  92. package/dist/{skills-CE_iqvM5.js → skills-7ODkHQYp.js} +22 -22
  93. package/dist/slash-commands.runtime-CVw6566g.js +16 -0
  94. package/dist/slash-dispatch.runtime-B9Ygtzi4.js +56 -0
  95. package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +20 -0
  96. package/dist/{store--eR1R_UX.js → store-D89wDcz9.js} +2 -2
  97. package/dist/subagent-registry-runtime-DL1Wv7nA.js +56 -0
  98. package/dist/{subsystem-Di1z8l0Z.js → subsystem-B45WV3qB.js} +14 -14
  99. package/dist/{tables-d739Y1xW.js → tables-mE4cJBN2.js} +1 -1
  100. package/dist/{plugin-sdk/target-errors-Blia4S69.js → target-errors-mnlwhAjP.js} +2 -2
  101. package/dist/{thinking-DXYisHiZ.js → thinking-BeGmb5k6.js} +7 -7
  102. package/dist/{tokens-DxnY9ui_.js → tokens-q32vI39c.js} +1 -1
  103. package/dist/{tool-images-2cBx1W8h.js → tool-images-RZdHiZcG.js} +2 -2
  104. package/dist/{web-CzWRVmFt.js → web-Btj-e8kN.js} +55 -55
  105. package/dist/{whatsapp-actions-iEArE_Ez.js → whatsapp-actions-BHbJJyqw.js} +21 -21
  106. package/dist/{workspace-CUVC6GX1.js → workspace-U-DyR64O.js} +20 -20
  107. package/package.json +7 -5
  108. package/scripts/create-instance.sh +66 -27
  109. package/scripts/install-maca.sh +1 -1
  110. package/scripts/npm_publish.sh +5 -1
  111. package/ui/index.html +16 -0
  112. package/ui/node_modules/.bin/jiti +21 -0
  113. package/ui/node_modules/.bin/lessc +21 -0
  114. package/ui/node_modules/.bin/marked +21 -0
  115. package/ui/node_modules/.bin/playwright +21 -0
  116. package/ui/node_modules/.bin/sass +21 -0
  117. package/ui/node_modules/.bin/tsx +21 -0
  118. package/ui/node_modules/.bin/vite +21 -0
  119. package/ui/node_modules/.bin/vitest +21 -0
  120. package/ui/node_modules/.bin/yaml +21 -0
  121. package/ui/package.json +27 -0
  122. package/ui/public/apple-touch-icon.png +0 -0
  123. package/ui/public/favicon-32.png +0 -0
  124. package/ui/public/favicon.ico +0 -0
  125. package/ui/public/favicon.svg +22 -0
  126. package/ui/src/css.d.ts +1 -0
  127. package/ui/src/i18n/index.ts +3 -0
  128. package/ui/src/i18n/lib/lit-controller.ts +22 -0
  129. package/ui/src/i18n/lib/registry.ts +64 -0
  130. package/ui/src/i18n/lib/translate.ts +123 -0
  131. package/ui/src/i18n/lib/types.ts +9 -0
  132. package/ui/src/i18n/locales/de.ts +129 -0
  133. package/ui/src/i18n/locales/en.ts +337 -0
  134. package/ui/src/i18n/locales/pt-BR.ts +128 -0
  135. package/ui/src/i18n/locales/zh-CN.ts +330 -0
  136. package/ui/src/i18n/locales/zh-TW.ts +125 -0
  137. package/ui/src/i18n/test/translate.test.ts +56 -0
  138. package/ui/src/main.ts +2 -0
  139. package/ui/src/styles/base.css +385 -0
  140. package/ui/src/styles/chat/grouped.css +300 -0
  141. package/ui/src/styles/chat/layout.css +481 -0
  142. package/ui/src/styles/chat/sidebar.css +117 -0
  143. package/ui/src/styles/chat/text.css +146 -0
  144. package/ui/src/styles/chat/tool-cards.css +202 -0
  145. package/ui/src/styles/chat.css +5 -0
  146. package/ui/src/styles/components.css +2612 -0
  147. package/ui/src/styles/config.css +1658 -0
  148. package/ui/src/styles/layout.css +621 -0
  149. package/ui/src/styles/layout.mobile.css +374 -0
  150. package/ui/src/styles.css +5 -0
  151. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-flags-unsupported-unions-1.png +0 -0
  152. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-inputs-and-patches-values-1.png +0 -0
  153. package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-union-literals-as-select-options-1.png +0 -0
  154. package/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png +0 -0
  155. package/ui/src/ui/app-channels.ts +279 -0
  156. package/ui/src/ui/app-chat.ts +266 -0
  157. package/ui/src/ui/app-defaults.ts +50 -0
  158. package/ui/src/ui/app-events.ts +5 -0
  159. package/ui/src/ui/app-gateway.node.test.ts +229 -0
  160. package/ui/src/ui/app-gateway.ts +349 -0
  161. package/ui/src/ui/app-lifecycle.node.test.ts +44 -0
  162. package/ui/src/ui/app-lifecycle.ts +109 -0
  163. package/ui/src/ui/app-polling.ts +69 -0
  164. package/ui/src/ui/app-render-usage-tab.ts +273 -0
  165. package/ui/src/ui/app-render.helpers.node.test.ts +286 -0
  166. package/ui/src/ui/app-render.helpers.ts +574 -0
  167. package/ui/src/ui/app-render.ts +1168 -0
  168. package/ui/src/ui/app-scroll.test.ts +275 -0
  169. package/ui/src/ui/app-scroll.ts +179 -0
  170. package/ui/src/ui/app-settings.test.ts +70 -0
  171. package/ui/src/ui/app-settings.ts +440 -0
  172. package/ui/src/ui/app-tool-stream.node.test.ts +139 -0
  173. package/ui/src/ui/app-tool-stream.ts +455 -0
  174. package/ui/src/ui/app-view-state.ts +321 -0
  175. package/ui/src/ui/app.ts +621 -0
  176. package/ui/src/ui/assistant-identity.ts +23 -0
  177. package/ui/src/ui/chat/constants.ts +12 -0
  178. package/ui/src/ui/chat/copy-as-markdown.ts +97 -0
  179. package/ui/src/ui/chat/grouped-render.ts +287 -0
  180. package/ui/src/ui/chat/message-extract.test.ts +64 -0
  181. package/ui/src/ui/chat/message-extract.ts +122 -0
  182. package/ui/src/ui/chat/message-normalizer.test.ts +179 -0
  183. package/ui/src/ui/chat/message-normalizer.ts +101 -0
  184. package/ui/src/ui/chat/tool-cards.ts +156 -0
  185. package/ui/src/ui/chat/tool-helpers.test.ts +141 -0
  186. package/ui/src/ui/chat/tool-helpers.ts +37 -0
  187. package/ui/src/ui/chat-event-reload.test.ts +47 -0
  188. package/ui/src/ui/chat-event-reload.ts +16 -0
  189. package/ui/src/ui/chat-markdown.browser.test.ts +37 -0
  190. package/ui/src/ui/components/resizable-divider.ts +110 -0
  191. package/ui/src/ui/config-form.browser.test.ts +443 -0
  192. package/ui/src/ui/controllers/agent-files.ts +126 -0
  193. package/ui/src/ui/controllers/agent-identity.ts +59 -0
  194. package/ui/src/ui/controllers/agent-skills.ts +33 -0
  195. package/ui/src/ui/controllers/agents.test.ts +61 -0
  196. package/ui/src/ui/controllers/agents.ts +64 -0
  197. package/ui/src/ui/controllers/assistant-identity.ts +34 -0
  198. package/ui/src/ui/controllers/channels.ts +94 -0
  199. package/ui/src/ui/controllers/channels.types.ts +15 -0
  200. package/ui/src/ui/controllers/chat.test.ts +568 -0
  201. package/ui/src/ui/controllers/chat.ts +318 -0
  202. package/ui/src/ui/controllers/config/form-coerce.ts +160 -0
  203. package/ui/src/ui/controllers/config/form-utils.node.test.ts +455 -0
  204. package/ui/src/ui/controllers/config/form-utils.ts +90 -0
  205. package/ui/src/ui/controllers/config.test.ts +289 -0
  206. package/ui/src/ui/controllers/config.ts +219 -0
  207. package/ui/src/ui/controllers/control-ui-bootstrap.test.ts +82 -0
  208. package/ui/src/ui/controllers/control-ui-bootstrap.ts +49 -0
  209. package/ui/src/ui/controllers/cron-filters.test.ts +81 -0
  210. package/ui/src/ui/controllers/cron.test.ts +1070 -0
  211. package/ui/src/ui/controllers/cron.ts +921 -0
  212. package/ui/src/ui/controllers/debug.ts +60 -0
  213. package/ui/src/ui/controllers/devices.ts +159 -0
  214. package/ui/src/ui/controllers/exec-approval.ts +100 -0
  215. package/ui/src/ui/controllers/exec-approvals.ts +170 -0
  216. package/ui/src/ui/controllers/logs.ts +147 -0
  217. package/ui/src/ui/controllers/nodes.ts +32 -0
  218. package/ui/src/ui/controllers/presence.ts +37 -0
  219. package/ui/src/ui/controllers/sessions.test.ts +104 -0
  220. package/ui/src/ui/controllers/sessions.ts +127 -0
  221. package/ui/src/ui/controllers/skills.ts +157 -0
  222. package/ui/src/ui/controllers/usage.node.test.ts +181 -0
  223. package/ui/src/ui/controllers/usage.ts +315 -0
  224. package/ui/src/ui/data/moonshot-kimi-k2.ts +45 -0
  225. package/ui/src/ui/device-auth.ts +73 -0
  226. package/ui/src/ui/device-identity.ts +112 -0
  227. package/ui/src/ui/external-link.test.ts +18 -0
  228. package/ui/src/ui/external-link.ts +19 -0
  229. package/ui/src/ui/focus-mode.browser.test.ts +39 -0
  230. package/ui/src/ui/format.test.ts +101 -0
  231. package/ui/src/ui/format.ts +60 -0
  232. package/ui/src/ui/gateway.ts +360 -0
  233. package/ui/src/ui/icons.ts +256 -0
  234. package/ui/src/ui/markdown.test.ts +85 -0
  235. package/ui/src/ui/markdown.ts +139 -0
  236. package/ui/src/ui/navigation.browser.test.ts +188 -0
  237. package/ui/src/ui/navigation.test.ts +189 -0
  238. package/ui/src/ui/navigation.ts +165 -0
  239. package/ui/src/ui/open-external-url.test.ts +108 -0
  240. package/ui/src/ui/open-external-url.ts +73 -0
  241. package/ui/src/ui/presenter.ts +85 -0
  242. package/ui/src/ui/storage.node.test.ts +63 -0
  243. package/ui/src/ui/storage.ts +99 -0
  244. package/ui/src/ui/test-helpers/app-mount.ts +27 -0
  245. package/ui/src/ui/text-direction.test.ts +24 -0
  246. package/ui/src/ui/text-direction.ts +30 -0
  247. package/ui/src/ui/theme-transition.ts +109 -0
  248. package/ui/src/ui/theme.ts +16 -0
  249. package/ui/src/ui/tool-display.ts +159 -0
  250. package/ui/src/ui/types/chat-types.ts +44 -0
  251. package/ui/src/ui/types.ts +627 -0
  252. package/ui/src/ui/ui-types.ts +54 -0
  253. package/ui/src/ui/usage-helpers.node.test.ts +43 -0
  254. package/ui/src/ui/usage-helpers.ts +321 -0
  255. package/ui/src/ui/usage-types.ts +22 -0
  256. package/ui/src/ui/uuid.test.ts +41 -0
  257. package/ui/src/ui/uuid.ts +57 -0
  258. package/ui/src/ui/views/agents-panels-status-files.ts +461 -0
  259. package/ui/src/ui/views/agents-panels-tools-skills.browser.test.ts +102 -0
  260. package/ui/src/ui/views/agents-panels-tools-skills.ts +537 -0
  261. package/ui/src/ui/views/agents-utils.test.ts +100 -0
  262. package/ui/src/ui/views/agents-utils.ts +502 -0
  263. package/ui/src/ui/views/agents.ts +499 -0
  264. package/ui/src/ui/views/channel-config-extras.ts +49 -0
  265. package/ui/src/ui/views/channels.config.ts +155 -0
  266. package/ui/src/ui/views/channels.discord.ts +65 -0
  267. package/ui/src/ui/views/channels.googlechat.ts +79 -0
  268. package/ui/src/ui/views/channels.imessage.ts +65 -0
  269. package/ui/src/ui/views/channels.nostr-profile-form.ts +321 -0
  270. package/ui/src/ui/views/channels.nostr.ts +237 -0
  271. package/ui/src/ui/views/channels.shared.ts +38 -0
  272. package/ui/src/ui/views/channels.signal.ts +69 -0
  273. package/ui/src/ui/views/channels.slack.ts +65 -0
  274. package/ui/src/ui/views/channels.telegram.ts +120 -0
  275. package/ui/src/ui/views/channels.ts +325 -0
  276. package/ui/src/ui/views/channels.types.ts +62 -0
  277. package/ui/src/ui/views/channels.whatsapp.ts +118 -0
  278. package/ui/src/ui/views/chat-image-open.browser.test.ts +70 -0
  279. package/ui/src/ui/views/chat.test.ts +227 -0
  280. package/ui/src/ui/views/chat.ts +616 -0
  281. package/ui/src/ui/views/config-form.analyze.ts +267 -0
  282. package/ui/src/ui/views/config-form.node.ts +1073 -0
  283. package/ui/src/ui/views/config-form.render.ts +478 -0
  284. package/ui/src/ui/views/config-form.search.node.test.ts +69 -0
  285. package/ui/src/ui/views/config-form.shared.ts +96 -0
  286. package/ui/src/ui/views/config-form.ts +4 -0
  287. package/ui/src/ui/views/config-search.node.test.ts +50 -0
  288. package/ui/src/ui/views/config-search.ts +92 -0
  289. package/ui/src/ui/views/config.browser.test.ts +233 -0
  290. package/ui/src/ui/views/config.ts +820 -0
  291. package/ui/src/ui/views/cron.test.ts +741 -0
  292. package/ui/src/ui/views/cron.ts +1758 -0
  293. package/ui/src/ui/views/debug.ts +151 -0
  294. package/ui/src/ui/views/exec-approval.ts +89 -0
  295. package/ui/src/ui/views/gateway-url-confirmation.ts +40 -0
  296. package/ui/src/ui/views/instances.ts +89 -0
  297. package/ui/src/ui/views/logs.ts +155 -0
  298. package/ui/src/ui/views/markdown-sidebar.ts +40 -0
  299. package/ui/src/ui/views/nodes-exec-approvals.ts +617 -0
  300. package/ui/src/ui/views/nodes-shared.ts +67 -0
  301. package/ui/src/ui/views/nodes.ts +485 -0
  302. package/ui/src/ui/views/overview-hints.ts +16 -0
  303. package/ui/src/ui/views/overview.node.test.ts +39 -0
  304. package/ui/src/ui/views/overview.ts +361 -0
  305. package/ui/src/ui/views/sessions.test.ts +81 -0
  306. package/ui/src/ui/views/sessions.ts +321 -0
  307. package/ui/src/ui/views/skills-grouping.ts +40 -0
  308. package/ui/src/ui/views/skills-shared.ts +52 -0
  309. package/ui/src/ui/views/skills.ts +192 -0
  310. package/ui/src/ui/views/usage-metrics.ts +578 -0
  311. package/ui/src/ui/views/usage-query.ts +277 -0
  312. package/ui/src/ui/views/usage-render-details.test.ts +136 -0
  313. package/ui/src/ui/views/usage-render-details.ts +1083 -0
  314. package/ui/src/ui/views/usage-render-overview.ts +796 -0
  315. package/ui/src/ui/views/usage-styles/usageStyles-part1.ts +701 -0
  316. package/ui/src/ui/views/usage-styles/usageStyles-part2.ts +702 -0
  317. package/ui/src/ui/views/usage-styles/usageStyles-part3.ts +551 -0
  318. package/ui/src/ui/views/usage.ts +836 -0
  319. package/ui/src/ui/views/usageStyles.ts +5 -0
  320. package/ui/src/ui/views/usageTypes.ts +105 -0
  321. package/ui/vite.config.ts +43 -0
  322. package/ui/vitest.config.ts +15 -0
  323. package/ui/vitest.node.config.ts +10 -0
  324. package/dist/deliver-runtime-P-G3bPjW.js +0 -36
  325. package/dist/deps-send-discord.runtime-DnbhTFX9.js +0 -26
  326. package/dist/deps-send-imessage.runtime-BOiQ6mDx.js +0 -25
  327. package/dist/deps-send-signal.runtime-CTcl388M.js +0 -24
  328. package/dist/deps-send-slack.runtime-CCqBz4Kg.js +0 -22
  329. package/dist/deps-send-telegram.runtime-DGSKTCpH.js +0 -27
  330. package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +0 -60
  331. package/dist/image-runtime-CVv2ra9J.js +0 -29
  332. package/dist/manager-runtime-BN6VevdC.js +0 -18
  333. package/dist/pi-model-discovery-BGgOlX8N.js +0 -134
  334. package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +0 -11
  335. package/dist/plugin-sdk/accounts-CJWOBzwB.js +0 -35
  336. package/dist/plugin-sdk/accounts-DP1-L-QS.js +0 -288
  337. package/dist/plugin-sdk/accounts-DZhWlEg3.js +0 -46
  338. package/dist/plugin-sdk/active-listener-B_sLJTXM.js +0 -50
  339. package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +0 -181
  340. package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +0 -69
  341. package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +0 -2176
  342. package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +0 -58
  343. package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +0 -94
  344. package/dist/plugin-sdk/channel-web-QF7EpjeP.js +0 -2256
  345. package/dist/plugin-sdk/chrome-BXoCyCkY.js +0 -2415
  346. package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +0 -1125
  347. package/dist/plugin-sdk/config-BkEnz2Po.js +0 -17913
  348. package/dist/plugin-sdk/deliver-B6AG_l67.js +0 -1694
  349. package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +0 -32
  350. package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +0 -23
  351. package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +0 -22
  352. package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +0 -21
  353. package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +0 -19
  354. package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +0 -24
  355. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +0 -57
  356. package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +0 -319
  357. package/dist/plugin-sdk/errors-DaiAM-yU.js +0 -54
  358. package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +0 -156
  359. package/dist/plugin-sdk/fs-safe-B8y811FR.js +0 -352
  360. package/dist/plugin-sdk/image-DjTEkYZE.js +0 -2310
  361. package/dist/plugin-sdk/image-ops-BSiMpAw4.js +0 -584
  362. package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +0 -25
  363. package/dist/plugin-sdk/ir-DQ7_HbvK.js +0 -1296
  364. package/dist/plugin-sdk/local-roots-BUP4YBmR.js +0 -186
  365. package/dist/plugin-sdk/logger-CZY9KIoY.js +0 -1163
  366. package/dist/plugin-sdk/login-BxEKLlCo.js +0 -57
  367. package/dist/plugin-sdk/login-qr-BQIpMPr9.js +0 -320
  368. package/dist/plugin-sdk/manager-I6KbPihW.js +0 -3917
  369. package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +0 -15
  370. package/dist/plugin-sdk/outbound-NS6UHnB6.js +0 -212
  371. package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +0 -19
  372. package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +0 -43
  373. package/dist/plugin-sdk/paths-vTM3Lh3X.js +0 -166
  374. package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +0 -9627
  375. package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +0 -8
  376. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +0 -354
  377. package/dist/plugin-sdk/plugins-DeBZB9l_.js +0 -864
  378. package/dist/plugin-sdk/proxy-fetch-ChxOhWF4.js +0 -38
  379. package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +0 -1938
  380. package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +0 -1448
  381. package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +0 -1011
  382. package/dist/plugin-sdk/reply-DAo_Jt8K.js +0 -97916
  383. package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +0 -40
  384. package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +0 -1994
  385. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +0 -10
  386. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +0 -19
  387. package/dist/plugin-sdk/send-CQpMudwO.js +0 -2587
  388. package/dist/plugin-sdk/send-DQHLzVyO.js +0 -414
  389. package/dist/plugin-sdk/send-DTB24bEF.js +0 -3135
  390. package/dist/plugin-sdk/send-DfHadjZ_.js +0 -503
  391. package/dist/plugin-sdk/send-XXlW2iny.js +0 -540
  392. package/dist/plugin-sdk/session-6TF6MyaC.js +0 -169
  393. package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +0 -342
  394. package/dist/plugin-sdk/skills-CBkHBYPq.js +0 -1428
  395. package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +0 -13
  396. package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +0 -52
  397. package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +0 -16
  398. package/dist/plugin-sdk/ssrf-cFtplYtS.js +0 -202
  399. package/dist/plugin-sdk/store-5nyxY3WU.js +0 -81
  400. package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +0 -52
  401. package/dist/plugin-sdk/tables-C47P4GTN.js +0 -55
  402. package/dist/plugin-sdk/thinking-Bo2eosVa.js +0 -1206
  403. package/dist/plugin-sdk/tokens-DgNRBwIg.js +0 -52
  404. package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +0 -274
  405. package/dist/plugin-sdk/web-CVxZbXyH.js +0 -56
  406. package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +0 -80
  407. package/dist/redact-ClbcYG1J.js +0 -319
  408. package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +0 -13
  409. package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +0 -22
  410. package/dist/slash-commands.runtime-Cpn2tYW4.js +0 -16
  411. package/dist/slash-dispatch.runtime-DoBAQBU5.js +0 -56
  412. package/dist/slash-skill-commands.runtime-DKMvvdDW.js +0 -20
  413. package/dist/subagent-registry-runtime-ppWS3tVu.js +0 -56
  414. package/dist/target-errors-CBI2Ga0y.js +0 -195
@@ -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
+ }