@rohansguliani/mux-chat-ui 0.3.0 → 0.4.0

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 (802) hide show
  1. package/README.md +47 -55
  2. package/dist/testing.d.ts +17 -13
  3. package/dist/testing.js +72 -58
  4. package/kit/THIRD_PARTY_NOTICES.txt +3696 -0
  5. package/kit/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  6. package/kit/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  7. package/kit/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  8. package/kit/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  9. package/kit/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  10. package/kit/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  11. package/kit/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  12. package/kit/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  13. package/kit/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  14. package/kit/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  15. package/kit/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  16. package/kit/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  17. package/kit/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  18. package/kit/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  19. package/kit/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  20. package/kit/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  21. package/kit/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  22. package/kit/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  23. package/kit/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  24. package/kit/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  25. package/kit/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  26. package/kit/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  27. package/kit/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  28. package/kit/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  29. package/kit/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  30. package/kit/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  31. package/kit/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  32. package/kit/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  33. package/kit/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  34. package/kit/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  35. package/kit/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  36. package/kit/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  37. package/kit/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  38. package/kit/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  39. package/kit/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  40. package/kit/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  41. package/kit/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  42. package/kit/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  43. package/kit/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  44. package/kit/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  45. package/kit/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  46. package/kit/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  47. package/kit/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  48. package/kit/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  49. package/kit/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  50. package/kit/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  51. package/kit/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  52. package/kit/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  53. package/kit/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  54. package/kit/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  55. package/kit/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  56. package/kit/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  57. package/kit/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  58. package/kit/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  59. package/kit/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  60. package/kit/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  61. package/kit/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  62. package/kit/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  63. package/kit/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  64. package/kit/assets/abap-Dg923wIy.js +1 -0
  65. package/kit/assets/actionscript-3-CqOcUQ0w.js +1 -0
  66. package/kit/assets/ada-CTi7YQtL.js +1 -0
  67. package/kit/assets/ahk-BJYYIeOs.js +1 -0
  68. package/kit/assets/ahk2-BLfzmBxo.js +1 -0
  69. package/kit/assets/andromeeda-CT0vplkN.js +1 -0
  70. package/kit/assets/angular-html-DX9ZP5JV.js +1 -0
  71. package/kit/assets/angular-ts-1O2hJJmY.js +1 -0
  72. package/kit/assets/apache-PcO-DBxQ.js +1 -0
  73. package/kit/assets/apex-B4ts4Pdn.js +1 -0
  74. package/kit/assets/apl-Dz5ncP8G.js +1 -0
  75. package/kit/assets/applescript-Ds_W2jPS.js +1 -0
  76. package/kit/assets/ara-C1--7J61.js +1 -0
  77. package/kit/assets/asciidoc-DaaWi4fn.js +1 -0
  78. package/kit/assets/asm-CTFRnVOM.js +1 -0
  79. package/kit/assets/astro-BWgTGUF8.js +1 -0
  80. package/kit/assets/aurora-x-C0VKFdlO.js +1 -0
  81. package/kit/assets/awk-CrWgQKhV.js +1 -0
  82. package/kit/assets/ayu-dark-wZ6ORhBL.js +1 -0
  83. package/kit/assets/ayu-light-xXLJ_Ch1.js +1 -0
  84. package/kit/assets/ayu-mirage-CQckA_sP.js +1 -0
  85. package/kit/assets/ballerina-a0yOSyc5.js +1 -0
  86. package/kit/assets/bat-C1qk1Jq1.js +1 -0
  87. package/kit/assets/beancount-dPJi_gci.js +1 -0
  88. package/kit/assets/berry-CVKoklHx.js +1 -0
  89. package/kit/assets/bibtex-DRcCXNgM.js +1 -0
  90. package/kit/assets/bicep-jWz-hQ8I.js +1 -0
  91. package/kit/assets/bird2-wc5D5_X9.js +1 -0
  92. package/kit/assets/blade-DFktsHST.js +1 -0
  93. package/kit/assets/bsl-BtUDvyR4.js +1 -0
  94. package/kit/assets/c-BG-tZi7o.js +1 -0
  95. package/kit/assets/c3-R-USHpyF.js +1 -0
  96. package/kit/assets/cadence-BuaeHeSu.js +1 -0
  97. package/kit/assets/cairo-BYiDgOF2.js +1 -0
  98. package/kit/assets/catppuccin-frappe-CquLvoVK.js +1 -0
  99. package/kit/assets/catppuccin-latte-G5tdnGFo.js +1 -0
  100. package/kit/assets/catppuccin-macchiato-BZRq1pKO.js +1 -0
  101. package/kit/assets/catppuccin-mocha-Bbf5uIw6.js +1 -0
  102. package/kit/assets/chapel-D6IdCptL.js +1 -0
  103. package/kit/assets/clarity-BJ-KISir.js +1 -0
  104. package/kit/assets/clojure-KnfDkB_V.js +1 -0
  105. package/kit/assets/cmake-bh2MLnkv.js +1 -0
  106. package/kit/assets/cobol-DbURsbuN.js +1 -0
  107. package/kit/assets/codeowners-CtwIM3TN.js +1 -0
  108. package/kit/assets/codeql-D164juXQ.js +1 -0
  109. package/kit/assets/coffee-Bk-z6oI_.js +1 -0
  110. package/kit/assets/common-lisp-DXc9XcIM.js +1 -0
  111. package/kit/assets/coq-BIZj6HM_.js +1 -0
  112. package/kit/assets/cpp-C-tF_bWl.js +1 -0
  113. package/kit/assets/crystal-Dvqzbpz8.js +1 -0
  114. package/kit/assets/csharp-CFxe5pRo.js +1 -0
  115. package/kit/assets/css-Br67jR8j.js +1 -0
  116. package/kit/assets/csv-D5aBhKLr.js +1 -0
  117. package/kit/assets/cue-WCin6O4e.js +1 -0
  118. package/kit/assets/cypher-DYQk2G82.js +1 -0
  119. package/kit/assets/d-DVc-yF-l.js +1 -0
  120. package/kit/assets/dark-plus-DLU5INA3.js +1 -0
  121. package/kit/assets/dart-ByalkS20.js +1 -0
  122. package/kit/assets/dax-oldcCaJg.js +1 -0
  123. package/kit/assets/desktop-DZfyBMgF.js +1 -0
  124. package/kit/assets/diff-jW5kmiru.js +1 -0
  125. package/kit/assets/docker-DG9neUKd.js +1 -0
  126. package/kit/assets/dotenv-Bea-FkXq.js +1 -0
  127. package/kit/assets/dracula-XcYHBZy6.js +1 -0
  128. package/kit/assets/dracula-soft-BPeX9gxW.js +1 -0
  129. package/kit/assets/dream-maker-DAHQwpwp.js +1 -0
  130. package/kit/assets/edge-DTiORMU5.js +1 -0
  131. package/kit/assets/elixir-DnIH90qd.js +1 -0
  132. package/kit/assets/elm-BjIDgKzz.js +1 -0
  133. package/kit/assets/emacs-lisp-Ckw2FTkV.js +1 -0
  134. package/kit/assets/erb-CazEJMPD.js +1 -0
  135. package/kit/assets/erlang-DNeY46SW.js +1 -0
  136. package/kit/assets/everforest-dark-WOub3wle.js +1 -0
  137. package/kit/assets/everforest-light-DCUg8VH8.js +1 -0
  138. package/kit/assets/fennel-DBMsxtrh.js +1 -0
  139. package/kit/assets/fish-BxskpYPN.js +1 -0
  140. package/kit/assets/fluent-Bwo2XpEt.js +1 -0
  141. package/kit/assets/fortran-fixed-form-DFFnVrrY.js +1 -0
  142. package/kit/assets/fortran-free-form-DB5N_DgY.js +1 -0
  143. package/kit/assets/fsharp-DRAF1jsN.js +1 -0
  144. package/kit/assets/gdresource-B0Kp4-ms.js +1 -0
  145. package/kit/assets/gdscript-DKyjuXKv.js +1 -0
  146. package/kit/assets/gdshader-G7X6ysY3.js +1 -0
  147. package/kit/assets/genie-DSsjfZMX.js +1 -0
  148. package/kit/assets/gherkin-Cl2Fw-_0.js +1 -0
  149. package/kit/assets/git-commit-CJPsQObV.js +1 -0
  150. package/kit/assets/git-rebase-DeZqv4fp.js +1 -0
  151. package/kit/assets/github-dark-BQV5ugrc.js +1 -0
  152. package/kit/assets/github-dark-default-DLWDM7FH.js +1 -0
  153. package/kit/assets/github-dark-dimmed-D1FmiR_p.js +1 -0
  154. package/kit/assets/github-dark-high-contrast-BilLoi0o.js +1 -0
  155. package/kit/assets/github-light-Rcb2q3L5.js +1 -0
  156. package/kit/assets/github-light-default-CQ75esMw.js +1 -0
  157. package/kit/assets/github-light-high-contrast-CRF1wyLy.js +1 -0
  158. package/kit/assets/gleam-BeBqoPwE.js +1 -0
  159. package/kit/assets/glimmer-js-F_qk9EQT.js +1 -0
  160. package/kit/assets/glimmer-ts-Dhzi-GJU.js +1 -0
  161. package/kit/assets/glsl-BOG9l2nV.js +1 -0
  162. package/kit/assets/gn-Dxr0sSUf.js +1 -0
  163. package/kit/assets/gnuplot-CtW3R_Hz.js +1 -0
  164. package/kit/assets/go-B7VTfpnm.js +1 -0
  165. package/kit/assets/graphql-B6XHM4uj.js +1 -0
  166. package/kit/assets/groovy-DFxE31Qs.js +1 -0
  167. package/kit/assets/gruvbox-dark-hard-C37G1gbc.js +1 -0
  168. package/kit/assets/gruvbox-dark-medium-C3G9m3TV.js +1 -0
  169. package/kit/assets/gruvbox-dark-soft-eZmcmZ9I.js +1 -0
  170. package/kit/assets/gruvbox-light-hard-BYj-vz_3.js +1 -0
  171. package/kit/assets/gruvbox-light-medium-BdQlDiiF.js +1 -0
  172. package/kit/assets/gruvbox-light-soft-BGNwjiRh.js +1 -0
  173. package/kit/assets/hack-jRhjsWHJ.js +1 -0
  174. package/kit/assets/haml-C4vGXCDX.js +1 -0
  175. package/kit/assets/handlebars-BsldGL5W.js +1 -0
  176. package/kit/assets/haskell-BfdhR_WN.js +1 -0
  177. package/kit/assets/haxe-wmAaY_mP.js +1 -0
  178. package/kit/assets/hcl-B6OePqme.js +1 -0
  179. package/kit/assets/hjson-D2jn7IRw.js +1 -0
  180. package/kit/assets/hlsl-MKeth5V9.js +1 -0
  181. package/kit/assets/horizon-bright-BVMyA0so.js +1 -0
  182. package/kit/assets/horizon-cslQss18.js +1 -0
  183. package/kit/assets/houston-RHIKkNfR.js +1 -0
  184. package/kit/assets/html-BW_6VhB7.js +1 -0
  185. package/kit/assets/html-derivative-BxANmYVz.js +1 -0
  186. package/kit/assets/http-CG3jvXcS.js +1 -0
  187. package/kit/assets/hurl-CxQrh4RI.js +1 -0
  188. package/kit/assets/hxml-In6F2XHE.js +1 -0
  189. package/kit/assets/hy-DI6mCUnw.js +1 -0
  190. package/kit/assets/imba-D-Pk5S0X.js +1 -0
  191. package/kit/assets/index-CN35FGBT.js +2 -0
  192. package/kit/assets/index-CvcU6KJI.js +2 -0
  193. package/kit/assets/index-DKDjvsnq.js +12 -0
  194. package/kit/assets/ini-Dix3pTmg.js +1 -0
  195. package/kit/assets/java-BTDmaRNO.js +1 -0
  196. package/kit/assets/javascript-WyGyM1wV.js +1 -0
  197. package/kit/assets/jinja-CGKoJZuT.js +1 -0
  198. package/kit/assets/jison-B9XHrcYJ.js +1 -0
  199. package/kit/assets/json-B8JryHcM.js +1 -0
  200. package/kit/assets/json5-Cdatmj9n.js +1 -0
  201. package/kit/assets/jsonc-CvUCa1o5.js +1 -0
  202. package/kit/assets/jsonl-9I_GBd5L.js +1 -0
  203. package/kit/assets/jsonnet-XoenQ2oc.js +1 -0
  204. package/kit/assets/jssm-CWE2S0Z5.js +1 -0
  205. package/kit/assets/jsx-8cLv2Six.js +1 -0
  206. package/kit/assets/julia-CHsXSRRi.js +1 -0
  207. package/kit/assets/just-BhMjiL1x.js +1 -0
  208. package/kit/assets/kanagawa-dragon-elpLL9d7.js +1 -0
  209. package/kit/assets/kanagawa-lotus-qwxsXd6N.js +1 -0
  210. package/kit/assets/kanagawa-wave-CmHwPSUq.js +1 -0
  211. package/kit/assets/katex-HP8lGamR.js +257 -0
  212. package/kit/assets/kdl-CMbyIXjQ.js +1 -0
  213. package/kit/assets/kotlin-BQy537ds.js +1 -0
  214. package/kit/assets/kusto-Bh6esMjd.js +1 -0
  215. package/kit/assets/laserwave-si7wuSrt.js +1 -0
  216. package/kit/assets/latex-l4EWm08Q.js +1 -0
  217. package/kit/assets/lean-C4RHkN41.js +1 -0
  218. package/kit/assets/less-XNfgnZC7.js +1 -0
  219. package/kit/assets/light-plus-g_Fi9vkG.js +1 -0
  220. package/kit/assets/liquid-VEiCTF4k.js +1 -0
  221. package/kit/assets/llvm-CQZjIlnZ.js +1 -0
  222. package/kit/assets/log-CcaF_xNv.js +1 -0
  223. package/kit/assets/logo-D9WQLoKQ.js +1 -0
  224. package/kit/assets/lua-8Av-h-ns.js +1 -0
  225. package/kit/assets/luau-CmQFRJk_.js +1 -0
  226. package/kit/assets/make-DXVx14cr.js +1 -0
  227. package/kit/assets/markdown-DX-TNHnc.js +1 -0
  228. package/kit/assets/markdown-parse.worker-D0WrtDJ7.js +59 -0
  229. package/kit/assets/markdown.worker-DQJC0QHv.js +83 -0
  230. package/kit/assets/marko-6XzqJfhW.js +1 -0
  231. package/kit/assets/material-theme-CIJ3cGaW.js +1 -0
  232. package/kit/assets/material-theme-darker-BWg3m1GB.js +1 -0
  233. package/kit/assets/material-theme-lighter-DR8HWMN7.js +1 -0
  234. package/kit/assets/material-theme-ocean-CZf9pk28.js +1 -0
  235. package/kit/assets/material-theme-palenight-BF01YeZy.js +1 -0
  236. package/kit/assets/matlab-DzreyMvm.js +1 -0
  237. package/kit/assets/mdc-DRPSCe6f.js +1 -0
  238. package/kit/assets/mdx-C2fqO2XY.js +1 -0
  239. package/kit/assets/mermaid-B3PwCbv_.js +1 -0
  240. package/kit/assets/min-dark-DhfaepVE.js +1 -0
  241. package/kit/assets/min-light-6xx0uMgm.js +1 -0
  242. package/kit/assets/mipsasm-yE_Aqo9y.js +1 -0
  243. package/kit/assets/mojo-DoyaMtMQ.js +1 -0
  244. package/kit/assets/monokai-CfflZzqd.js +1 -0
  245. package/kit/assets/moonbit-GUn1DCOq.js +1 -0
  246. package/kit/assets/move-DgW29s8x.js +1 -0
  247. package/kit/assets/narrat-DXUZ_ZkW.js +1 -0
  248. package/kit/assets/nextflow-D9i3Mg89.js +1 -0
  249. package/kit/assets/nextflow-groovy-BtKenbWl.js +1 -0
  250. package/kit/assets/nginx-DSXkacNc.js +1 -0
  251. package/kit/assets/night-owl-EdP2Hztp.js +1 -0
  252. package/kit/assets/night-owl-light-Bk-lYVyk.js +1 -0
  253. package/kit/assets/nim-D9lokC5T.js +1 -0
  254. package/kit/assets/nix-Ckjrpg0r.js +1 -0
  255. package/kit/assets/nord-BAu0wM6c.js +1 -0
  256. package/kit/assets/nsis-C1FUr9r5.js +1 -0
  257. package/kit/assets/nushell-D7aJuCS6.js +1 -0
  258. package/kit/assets/objective-c-BoaBTdtz.js +1 -0
  259. package/kit/assets/objective-cpp-DstR8hNy.js +1 -0
  260. package/kit/assets/ocaml-DTbn2Hv7.js +1 -0
  261. package/kit/assets/odin-Bxc4S6Xn.js +1 -0
  262. package/kit/assets/one-dark-pro-utPxbBbJ.js +1 -0
  263. package/kit/assets/one-light-BuCQ22aO.js +1 -0
  264. package/kit/assets/openscad-CXHpNBsb.js +1 -0
  265. package/kit/assets/org-DcqggXXW.js +1 -0
  266. package/kit/assets/pascal-Sr-XLSE6.js +1 -0
  267. package/kit/assets/perl-CP_GSK0L.js +1 -0
  268. package/kit/assets/php-CNeTOyEV.js +1 -0
  269. package/kit/assets/pkl-CRusufhw.js +1 -0
  270. package/kit/assets/plastic-CXnNNlFZ.js +1 -0
  271. package/kit/assets/plsql-Dbm3tV2N.js +1 -0
  272. package/kit/assets/po-LG0lFwH4.js +1 -0
  273. package/kit/assets/poimandres-BrOVMvuE.js +1 -0
  274. package/kit/assets/polar-DjOs3GWb.js +1 -0
  275. package/kit/assets/postcss-GRRkWn2F.js +1 -0
  276. package/kit/assets/powerquery-DHf-dtTS.js +1 -0
  277. package/kit/assets/powershell-CUnxWBRw.js +1 -0
  278. package/kit/assets/prisma-HKDfktb8.js +1 -0
  279. package/kit/assets/prolog-9JcfiY6I.js +1 -0
  280. package/kit/assets/proto-dqx_Sj2i.js +1 -0
  281. package/kit/assets/pug-kUpeg2wB.js +1 -0
  282. package/kit/assets/puppet-Di57VbSS.js +1 -0
  283. package/kit/assets/purescript-BgpM7rDH.js +1 -0
  284. package/kit/assets/python-B6Ihcp-E.js +1 -0
  285. package/kit/assets/qml-DmGQGbca.js +1 -0
  286. package/kit/assets/qmldir-DXd9s5XC.js +1 -0
  287. package/kit/assets/qss-B7NnhfIi.js +1 -0
  288. package/kit/assets/r-C2sK8mqY.js +1 -0
  289. package/kit/assets/racket-CeDx7KO2.js +1 -0
  290. package/kit/assets/raku-BMJwmrCS.js +1 -0
  291. package/kit/assets/razor-C2a5o_rD.js +1 -0
  292. package/kit/assets/rbs-BNdQsBCU.js +1 -0
  293. package/kit/assets/red-D0qvOrrt.js +1 -0
  294. package/kit/assets/reg-Cvyu2Gnx.js +1 -0
  295. package/kit/assets/regexp-DK-WlHNu.js +1 -0
  296. package/kit/assets/rel-BlqNHz8k.js +1 -0
  297. package/kit/assets/riscv-C5dpdlr7.js +1 -0
  298. package/kit/assets/ron-j5NfrB3z.js +1 -0
  299. package/kit/assets/rose-pine-B13eftVv.js +1 -0
  300. package/kit/assets/rose-pine-dawn-BcSoidev.js +1 -0
  301. package/kit/assets/rose-pine-moon-QhZovmiB.js +1 -0
  302. package/kit/assets/rosmsg-ZkSIzPhc.js +1 -0
  303. package/kit/assets/rst-CgFL6KOR.js +1 -0
  304. package/kit/assets/ruby-CoSFdlpl.js +1 -0
  305. package/kit/assets/rust-CxuBE0J8.js +1 -0
  306. package/kit/assets/sas-DPMpzP9X.js +1 -0
  307. package/kit/assets/sass-bfEVHPJ8.js +1 -0
  308. package/kit/assets/scala-DT3kbCHL.js +1 -0
  309. package/kit/assets/scheme-OJppFQF3.js +1 -0
  310. package/kit/assets/scss-n48HZsmL.js +1 -0
  311. package/kit/assets/sdbl-CvZs3G9c.js +1 -0
  312. package/kit/assets/shaderlab-CEJedz68.js +1 -0
  313. package/kit/assets/shellscript-DgJyDXW6.js +1 -0
  314. package/kit/assets/shellsession-DSlzxnCM.js +1 -0
  315. package/kit/assets/slack-dark-CWRQmTmo.js +1 -0
  316. package/kit/assets/slack-ochin-DO_ok7XK.js +1 -0
  317. package/kit/assets/smalltalk-De6KzMWc.js +1 -0
  318. package/kit/assets/smithy-BVTkKWO9.js +1 -0
  319. package/kit/assets/snazzy-light-B5llO_gK.js +1 -0
  320. package/kit/assets/solarized-dark-BWFpDpV1.js +1 -0
  321. package/kit/assets/solarized-light-eZCMDrWD.js +1 -0
  322. package/kit/assets/solidity-SYSxO-p1.js +1 -0
  323. package/kit/assets/soy-DEV4yxgM.js +1 -0
  324. package/kit/assets/sparql-BJh4JEw-.js +1 -0
  325. package/kit/assets/splunk-h-bNAnbk.js +1 -0
  326. package/kit/assets/sprite-Fb-TFjRY.svg +11707 -0
  327. package/kit/assets/sql-Dq2MiB0T.js +1 -0
  328. package/kit/assets/ssh-config-CywOjoXH.js +1 -0
  329. package/kit/assets/stata-BcICKvEt.js +1 -0
  330. package/kit/assets/stylus-CIg617SB.js +1 -0
  331. package/kit/assets/surrealql-CWlK9SzL.js +1 -0
  332. package/kit/assets/svelte-B-Z8GLL9.js +1 -0
  333. package/kit/assets/swift-CGD9CJBj.js +1 -0
  334. package/kit/assets/synthwave-84-DRVv-_m_.js +1 -0
  335. package/kit/assets/system-verilog-CG_VWOG3.js +1 -0
  336. package/kit/assets/systemd-DKMPPZjB.js +1 -0
  337. package/kit/assets/talonscript-eRuyeYHl.js +1 -0
  338. package/kit/assets/tasl-B9CVvjfG.js +1 -0
  339. package/kit/assets/tcl-Bq9dbVAF.js +1 -0
  340. package/kit/assets/templ-W185oS4p.js +1 -0
  341. package/kit/assets/terraform-CAp711iT.js +1 -0
  342. package/kit/assets/tex-DNkCctwf.js +1 -0
  343. package/kit/assets/tokyo-night-BvwC8l2v.js +1 -0
  344. package/kit/assets/toml-Ms459DBw.js +1 -0
  345. package/kit/assets/ts-tags-xUT7JH_c.js +1 -0
  346. package/kit/assets/tsv-BFtm7NXx.js +1 -0
  347. package/kit/assets/tsx-D6116Ycy.js +1 -0
  348. package/kit/assets/turtle-DpRhbQZY.js +1 -0
  349. package/kit/assets/twig-k5g5DPXm.js +1 -0
  350. package/kit/assets/typescript-BqvgUolh.js +1 -0
  351. package/kit/assets/typespec-B09nCZui.js +1 -0
  352. package/kit/assets/typst-Dfd71gQj.js +1 -0
  353. package/kit/assets/v-DUsAht2M.js +1 -0
  354. package/kit/assets/vala-z59IxkFd.js +1 -0
  355. package/kit/assets/vb-A7jYO8Gn.js +1 -0
  356. package/kit/assets/verilog-jqltjd44.js +1 -0
  357. package/kit/assets/vesper-DxfWgk_t.js +1 -0
  358. package/kit/assets/vhdl-DJCsFYgn.js +1 -0
  359. package/kit/assets/viml-pbKHW3Ia.js +1 -0
  360. package/kit/assets/vitesse-black-B_BYPdvp.js +1 -0
  361. package/kit/assets/vitesse-dark-DOSOf2Sz.js +1 -0
  362. package/kit/assets/vitesse-light-gUX51GpB.js +1 -0
  363. package/kit/assets/vue-D2T8AFdP.js +1 -0
  364. package/kit/assets/vue-html-zEfNEgpj.js +1 -0
  365. package/kit/assets/vue-vine-DQRWX4iy.js +1 -0
  366. package/kit/assets/vyper-DpazWNpx.js +1 -0
  367. package/kit/assets/wasm-CFi-k9--.js +1 -0
  368. package/kit/assets/wasm-CG6Dc4jp.js +1 -0
  369. package/kit/assets/wenyan-CYFFG9DK.js +1 -0
  370. package/kit/assets/wgsl-CxjTZs-b.js +1 -0
  371. package/kit/assets/wikitext-Bx2qct8O.js +1 -0
  372. package/kit/assets/wit-DDW3hD69.js +1 -0
  373. package/kit/assets/wolfram-pu21K997.js +1 -0
  374. package/kit/assets/worker-DPHDIlCt.js +156 -0
  375. package/kit/assets/xml-BkAJuBCc.js +1 -0
  376. package/kit/assets/xsl-C6UUWSil.js +1 -0
  377. package/kit/assets/yaml-Bopit2L3.js +1 -0
  378. package/kit/assets/zenscript-BIAKq-aR.js +1 -0
  379. package/kit/assets/zig-bSFrHQ7n.js +1 -0
  380. package/kit/build.json +3 -0
  381. package/kit/chunks/abap-BdImnpbu.js +1 -0
  382. package/kit/chunks/abnfDiagram-VCTEODGH-Ekbmv6AY.js +1 -0
  383. package/kit/chunks/actionscript-3-B3316cI-.js +1 -0
  384. package/kit/chunks/ada-bCR0ucgS.js +1 -0
  385. package/kit/chunks/ahk-CsyLZFj1.js +1 -0
  386. package/kit/chunks/ahk2-8Zs4aa1G.js +1 -0
  387. package/kit/chunks/andromeeda-C4gqWexZ.js +1 -0
  388. package/kit/chunks/angular-html-DA-rfuFy.js +1 -0
  389. package/kit/chunks/angular-ts-BrjP3tb8.js +1 -0
  390. package/kit/chunks/apache-Pmp26Uib.js +1 -0
  391. package/kit/chunks/apex-DhZFqWV2.js +1 -0
  392. package/kit/chunks/apl-CORt7UWP.js +1 -0
  393. package/kit/chunks/app-chat-kit-CmncbKE7.js +885 -0
  394. package/kit/chunks/applescript-Co6uUVPk.js +1 -0
  395. package/kit/chunks/ara-BRHolxvo.js +1 -0
  396. package/kit/chunks/arc-CTvemvxA.js +1 -0
  397. package/kit/chunks/architecture-7GRP2DOG-Ek37_97Z.js +1 -0
  398. package/kit/chunks/architectureDiagram-5GKGNRK7-Dfo6x88c.js +36 -0
  399. package/kit/chunks/asciidoc-CSVQ5wI8.js +1 -0
  400. package/kit/chunks/asm-D_Q5rh1f.js +1 -0
  401. package/kit/chunks/astro-HNnZUWAn.js +1 -0
  402. package/kit/chunks/aurora-x-D-2ljcwZ.js +1 -0
  403. package/kit/chunks/awk-DMzUqQB5.js +1 -0
  404. package/kit/chunks/ayu-dark-DYE7WIF3.js +1 -0
  405. package/kit/chunks/ayu-light-BA47KaF1.js +1 -0
  406. package/kit/chunks/ayu-mirage-32ctXXKs.js +1 -0
  407. package/kit/chunks/ballerina-BFfxhgS-.js +1 -0
  408. package/kit/chunks/bat-CickPsom.js +1 -0
  409. package/kit/chunks/beancount-k_qm7-4y.js +1 -0
  410. package/kit/chunks/berry-uYugtg8r.js +1 -0
  411. package/kit/chunks/bibtex-CHM0blh-.js +1 -0
  412. package/kit/chunks/bicep-Bmn6On1c.js +1 -0
  413. package/kit/chunks/bird2-Bx8U0n9b.js +1 -0
  414. package/kit/chunks/blade-2xfisSek.js +1 -0
  415. package/kit/chunks/blockDiagram-NRAW4CY4-BREhUg_n.js +129 -0
  416. package/kit/chunks/bsl-DlhNcFeZ.js +1 -0
  417. package/kit/chunks/c-BIGW1oBm.js +1 -0
  418. package/kit/chunks/c3-Dp5svz6Z.js +1 -0
  419. package/kit/chunks/c4Diagram-UCG6FXSJ-CAoiRqwq.js +38 -0
  420. package/kit/chunks/cadence-Bv_4Rxtq.js +1 -0
  421. package/kit/chunks/cairo-KRGpt6FW.js +1 -0
  422. package/kit/chunks/catppuccin-frappe-CZL1YF0i.js +1 -0
  423. package/kit/chunks/catppuccin-latte-DH-8KZSZ.js +1 -0
  424. package/kit/chunks/catppuccin-macchiato-B7yYVSCf.js +1 -0
  425. package/kit/chunks/catppuccin-mocha-Ct7hS0mc.js +1 -0
  426. package/kit/chunks/channel-BCuymVz7.js +1 -0
  427. package/kit/chunks/chapel-DTp_pixX.js +1 -0
  428. package/kit/chunks/chunk-2Q5K7J3B-Dfj9NWMK.js +1 -0
  429. package/kit/chunks/chunk-5VM5RSS4-DDPHEz3o.js +15 -0
  430. package/kit/chunks/chunk-F27PBJKO-DjjkcfXV.js +1 -0
  431. package/kit/chunks/chunk-G27WJ6UU-BbKnleUj.js +231 -0
  432. package/kit/chunks/chunk-JWPE2WC7-CTyE03Ky.js +1 -0
  433. package/kit/chunks/chunk-LCL6LL3I-DLCIPv63.js +206 -0
  434. package/kit/chunks/chunk-POPQ4Y6H-vHDe0Ab2.js +1 -0
  435. package/kit/chunks/chunk-RHFEMEQ7-MYjE_XE-.js +168 -0
  436. package/kit/chunks/chunk-SVP7TREG-B-Z53M0l.js +88 -0
  437. package/kit/chunks/chunk-XXDRQBXY-Byur0hqD.js +1 -0
  438. package/kit/chunks/clarity-Dn5IMItf.js +1 -0
  439. package/kit/chunks/classDiagram-DTDB5LWJ-RWAJ513G.js +1 -0
  440. package/kit/chunks/classDiagram-v2-JRS7N3AN-RWAJ513G.js +1 -0
  441. package/kit/chunks/clojure-P80f7IUj.js +1 -0
  442. package/kit/chunks/cmake-D1j8_8rp.js +1 -0
  443. package/kit/chunks/cobol-nBiQ_Alo.js +1 -0
  444. package/kit/chunks/codeowners-Bp6g37R7.js +1 -0
  445. package/kit/chunks/codeql-DsOJ9woJ.js +1 -0
  446. package/kit/chunks/coffee-Ch7k5sss.js +1 -0
  447. package/kit/chunks/common-lisp-Cg-RD9OK.js +1 -0
  448. package/kit/chunks/coq-C7JzOVbR.js +1 -0
  449. package/kit/chunks/cose-bilkent-JH36ORCC-BJBTUpzs.js +1 -0
  450. package/kit/chunks/cpp-BMRokrvK.js +1 -0
  451. package/kit/chunks/crystal-DGywbUpC.js +1 -0
  452. package/kit/chunks/csharp-DSvCPggb.js +1 -0
  453. package/kit/chunks/css-CLj8gQPS.js +1 -0
  454. package/kit/chunks/csv-fuZLfV_i.js +1 -0
  455. package/kit/chunks/cue-D82EKSYY.js +1 -0
  456. package/kit/chunks/cynefin-OW5HDTMX-DximYq9_.js +1 -0
  457. package/kit/chunks/cynefinDiagram-5FMLGOSQ-C_H0NP3V.js +62 -0
  458. package/kit/chunks/cypher-COkxafJQ.js +1 -0
  459. package/kit/chunks/cytoscape.esm-CNiYdHpY.js +331 -0
  460. package/kit/chunks/d-85-TOEBH.js +1 -0
  461. package/kit/chunks/dagre-3AP2YEHR-B40iBpXe.js +4 -0
  462. package/kit/chunks/dark-plus-C3mMm8J8.js +1 -0
  463. package/kit/chunks/dart-bE4Kk8sk.js +1 -0
  464. package/kit/chunks/dax-CEL-wOlO.js +1 -0
  465. package/kit/chunks/defaultLocale-DX6XiGOO.js +1 -0
  466. package/kit/chunks/desktop-BmXAJ9_W.js +1 -0
  467. package/kit/chunks/diagram-S7CK7UJ4-B2xIXmUw.js +30 -0
  468. package/kit/chunks/diagram-UQ7AKVKN-DLWlOhvf.js +41 -0
  469. package/kit/chunks/diagram-VSXAHHWV-CtxWAwpJ.js +3 -0
  470. package/kit/chunks/diagram-VX7I27RA-C0oOsr2R.js +24 -0
  471. package/kit/chunks/diagram-Z3DM3KII-DguGhB-N.js +24 -0
  472. package/kit/chunks/diff-D97Zzqfu.js +1 -0
  473. package/kit/chunks/docker-BcOcwvcX.js +1 -0
  474. package/kit/chunks/dotenv-Da5cRb03.js +1 -0
  475. package/kit/chunks/dracula-BzJJZx-M.js +1 -0
  476. package/kit/chunks/dracula-soft-BXkSAIEj.js +1 -0
  477. package/kit/chunks/dream-maker-BtqSS_iP.js +1 -0
  478. package/kit/chunks/ebnfDiagram-PWID7BFC-CM2jytSc.js +1 -0
  479. package/kit/chunks/edge-FbVlp4U3.js +1 -0
  480. package/kit/chunks/elixir-CkH2-t6x.js +1 -0
  481. package/kit/chunks/elm-DbKCFpqz.js +1 -0
  482. package/kit/chunks/emacs-lisp-C_m_b--Z.js +1 -0
  483. package/kit/chunks/engine-compile-BrcillB_.js +152 -0
  484. package/kit/chunks/erDiagram-SSCWMZ5O-6AVzexk8.js +99 -0
  485. package/kit/chunks/erb-DXfck5VN.js +1 -0
  486. package/kit/chunks/erlang-DsQrWhSR.js +1 -0
  487. package/kit/chunks/eventmodeling-NTZA5JFV-i5VApXqj.js +1 -0
  488. package/kit/chunks/everforest-dark-BgDCqdQA.js +1 -0
  489. package/kit/chunks/everforest-light-C8M2exoo.js +1 -0
  490. package/kit/chunks/fennel-BYunw83y.js +1 -0
  491. package/kit/chunks/file-p1zS5m55.js +1524 -0
  492. package/kit/chunks/fish-BvzEVeQv.js +1 -0
  493. package/kit/chunks/flowDiagram-A5DVABFB-BXMY48By.js +1 -0
  494. package/kit/chunks/fluent-C4IJs8-o.js +1 -0
  495. package/kit/chunks/fortran-fixed-form-CkoXwp7k.js +1 -0
  496. package/kit/chunks/fortran-free-form-BxgE0vQu.js +1 -0
  497. package/kit/chunks/fsharp-CXgrBDvD.js +1 -0
  498. package/kit/chunks/ganttDiagram-EL5Y4UJY-CV7SNBW7.js +292 -0
  499. package/kit/chunks/gdresource-TyuKm33G.js +1 -0
  500. package/kit/chunks/gdscript-DqcFQ5yU.js +1 -0
  501. package/kit/chunks/gdshader-DkwncUOv.js +1 -0
  502. package/kit/chunks/genie-D0YGMca9.js +1 -0
  503. package/kit/chunks/gherkin-DyxjwDmM.js +1 -0
  504. package/kit/chunks/git-commit-F4YmCXRG.js +1 -0
  505. package/kit/chunks/git-rebase-r7XF79zn.js +1 -0
  506. package/kit/chunks/gitGraph-4MIJSDKK-J1V9VTkA.js +1 -0
  507. package/kit/chunks/gitGraphDiagram-WWUBYQGX-BCHc9w_M.js +106 -0
  508. package/kit/chunks/github-dark-DHJKELXO.js +1 -0
  509. package/kit/chunks/github-dark-default-Cuk6v7N8.js +1 -0
  510. package/kit/chunks/github-dark-dimmed-DH5Ifo-i.js +1 -0
  511. package/kit/chunks/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  512. package/kit/chunks/github-light-DAi9KRSo.js +1 -0
  513. package/kit/chunks/github-light-default-D7oLnXFd.js +1 -0
  514. package/kit/chunks/github-light-high-contrast-BfjtVDDH.js +1 -0
  515. package/kit/chunks/gleam-BspZqrRM.js +1 -0
  516. package/kit/chunks/glimmer-js-ByusRIyA.js +1 -0
  517. package/kit/chunks/glimmer-ts-BfAWNZQY.js +1 -0
  518. package/kit/chunks/glsl-DplSGwfg.js +1 -0
  519. package/kit/chunks/gn-n2N0HUVH.js +1 -0
  520. package/kit/chunks/gnuplot-DdkO51Og.js +1 -0
  521. package/kit/chunks/go-C27-OAKa.js +1 -0
  522. package/kit/chunks/graphql-ChdNCCLP.js +1 -0
  523. package/kit/chunks/groovy-gcz8RCvz.js +1 -0
  524. package/kit/chunks/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  525. package/kit/chunks/gruvbox-dark-medium-GsRaNv29.js +1 -0
  526. package/kit/chunks/gruvbox-dark-soft-CVdnzihN.js +1 -0
  527. package/kit/chunks/gruvbox-light-hard-CH1njM8p.js +1 -0
  528. package/kit/chunks/gruvbox-light-medium-DRw_LuNl.js +1 -0
  529. package/kit/chunks/gruvbox-light-soft-hJgmCMqR.js +1 -0
  530. package/kit/chunks/hack-BWmVpMyf.js +1 -0
  531. package/kit/chunks/haml-D5jkg6IW.js +1 -0
  532. package/kit/chunks/handlebars-BpdQsYii.js +1 -0
  533. package/kit/chunks/haskell-Df6bDoY_.js +1 -0
  534. package/kit/chunks/haxe-CfZj7gIn.js +1 -0
  535. package/kit/chunks/hcl-BWvSN4gD.js +1 -0
  536. package/kit/chunks/hjson-D5-asLiD.js +1 -0
  537. package/kit/chunks/hlsl-D3lLCCz7.js +1 -0
  538. package/kit/chunks/horizon-BUw7H-hv.js +1 -0
  539. package/kit/chunks/horizon-bright-CUuTKBJd.js +1 -0
  540. package/kit/chunks/houston-DnULxvSX.js +1 -0
  541. package/kit/chunks/html-derivative-DlHx6ybY.js +1 -0
  542. package/kit/chunks/html-pp8916En.js +1 -0
  543. package/kit/chunks/http-jrhK8wxY.js +1 -0
  544. package/kit/chunks/hurl-irOxFIW8.js +1 -0
  545. package/kit/chunks/hxml-2-FPmUDs.js +1 -0
  546. package/kit/chunks/hy-DFXneXwc.js +1 -0
  547. package/kit/chunks/imba-DGztddWO.js +1 -0
  548. package/kit/chunks/index-CN35FGBT.js +2 -0
  549. package/kit/chunks/index-CvcU6KJI.js +2 -0
  550. package/kit/chunks/index-CzdAxbXm.js +1 -0
  551. package/kit/chunks/index-D-Q6ihx1.js +518 -0
  552. package/kit/chunks/info-A6RAGUB7-Df1RDY9x.js +1 -0
  553. package/kit/chunks/infoDiagram-RXCK75RN-DkViDaAy.js +2 -0
  554. package/kit/chunks/ini-BEwlwnbL.js +1 -0
  555. package/kit/chunks/init-Gi6I4Gst.js +1 -0
  556. package/kit/chunks/ishikawaDiagram-5VMMS53U-DxEqVVmG.js +70 -0
  557. package/kit/chunks/java-CylS5w8V.js +1 -0
  558. package/kit/chunks/javascript-wDzz0qaB.js +1 -0
  559. package/kit/chunks/jinja-f2NsQr07.js +1 -0
  560. package/kit/chunks/jison-wvAkD_A8.js +1 -0
  561. package/kit/chunks/journeyDiagram-EYS64GPL-C6PuEAZM.js +139 -0
  562. package/kit/chunks/json-Cp-IABpG.js +1 -0
  563. package/kit/chunks/json5-C9tS-k6U.js +1 -0
  564. package/kit/chunks/jsonc-Des-eS-w.js +1 -0
  565. package/kit/chunks/jsonl-DcaNXYhu.js +1 -0
  566. package/kit/chunks/jsonnet-DFQXde-d.js +1 -0
  567. package/kit/chunks/jssm-C2t-YnRu.js +1 -0
  568. package/kit/chunks/jsx-g9-lgVsj.js +1 -0
  569. package/kit/chunks/julia-5Bft2YPA.js +1 -0
  570. package/kit/chunks/just-Cwhn7H3k.js +1 -0
  571. package/kit/chunks/kanagawa-dragon-BuwD2xS4.js +1 -0
  572. package/kit/chunks/kanagawa-lotus-C3DzagqV.js +1 -0
  573. package/kit/chunks/kanagawa-wave-DFGoQZhC.js +1 -0
  574. package/kit/chunks/kanban-definition-3QL26DDD-DOTf6YFB.js +89 -0
  575. package/kit/chunks/katex-HP8lGamR.js +257 -0
  576. package/kit/chunks/kdl-DV7GczEv.js +1 -0
  577. package/kit/chunks/kotlin-BdnUsdx6.js +1 -0
  578. package/kit/chunks/kusto-wEQ09or8.js +1 -0
  579. package/kit/chunks/laserwave-DUszq2jm.js +1 -0
  580. package/kit/chunks/latex-D5pSuvFb.js +1 -0
  581. package/kit/chunks/layout-CdSidOqg.js +1 -0
  582. package/kit/chunks/lean-BZvkOJ9d.js +1 -0
  583. package/kit/chunks/less-B1dDrJ26.js +1 -0
  584. package/kit/chunks/light-plus-B7mTdjB0.js +1 -0
  585. package/kit/chunks/linear-2B_RRiLc.js +1 -0
  586. package/kit/chunks/liquid-C0sCDyMI.js +1 -0
  587. package/kit/chunks/llvm-BZoOZj88.js +1 -0
  588. package/kit/chunks/log-2UxHyX5q.js +1 -0
  589. package/kit/chunks/logo-BtOb2qkB.js +1 -0
  590. package/kit/chunks/lua-BaeVxFsk.js +1 -0
  591. package/kit/chunks/luau-BnpPk5vE.js +1 -0
  592. package/kit/chunks/make-CHLpvVh8.js +1 -0
  593. package/kit/chunks/markdown-Cvjx9yec.js +1 -0
  594. package/kit/chunks/markdown-PrvsCtkO.js +7 -0
  595. package/kit/chunks/markdown-code-BP4ED3mK.js +1 -0
  596. package/kit/chunks/markdown-mermaid-C7inlIvD.js +2 -0
  597. package/kit/chunks/marked-parser-ucXGUtxA.js +1 -0
  598. package/kit/chunks/marko-DjSrsDqO.js +1 -0
  599. package/kit/chunks/material-theme-D5KoaKCx.js +1 -0
  600. package/kit/chunks/material-theme-darker-BfHTSMKl.js +1 -0
  601. package/kit/chunks/material-theme-lighter-B0m2ddpp.js +1 -0
  602. package/kit/chunks/material-theme-ocean-CyktbL80.js +1 -0
  603. package/kit/chunks/material-theme-palenight-Csfq5Kiy.js +1 -0
  604. package/kit/chunks/matlab-D7o27uSR.js +1 -0
  605. package/kit/chunks/mdc-D1_yUvq7.js +1 -0
  606. package/kit/chunks/mdx-Cmh6b_Ma.js +1 -0
  607. package/kit/chunks/mermaid-CQcHuHx7.js +1 -0
  608. package/kit/chunks/mermaid-parser.core-mF5sU-Xg.js +178 -0
  609. package/kit/chunks/mermaid.core-xKeJvOaV.js +309 -0
  610. package/kit/chunks/min-dark-CafNBF8u.js +1 -0
  611. package/kit/chunks/min-light-CTRr51gU.js +1 -0
  612. package/kit/chunks/mindmap-definition-FBJOCRG2-YJlqhJDe.js +96 -0
  613. package/kit/chunks/mipsasm-CKIfxQSi.js +1 -0
  614. package/kit/chunks/mojo-Blby8dQK.js +1 -0
  615. package/kit/chunks/monokai-BRVnQi9A.js +1 -0
  616. package/kit/chunks/moonbit-CHtswR0a.js +1 -0
  617. package/kit/chunks/move-el3G9tDJ.js +1 -0
  618. package/kit/chunks/narrat-DRg8JJMk.js +1 -0
  619. package/kit/chunks/nextflow-C-mBbutL.js +1 -0
  620. package/kit/chunks/nextflow-groovy-vE_lwT2v.js +1 -0
  621. package/kit/chunks/nginx-BpAMiNFr.js +1 -0
  622. package/kit/chunks/night-owl-C39BiMTA.js +1 -0
  623. package/kit/chunks/night-owl-light-CMTm3GFP.js +1 -0
  624. package/kit/chunks/nim-BIad80T-.js +1 -0
  625. package/kit/chunks/nix-CwoSXNpI.js +1 -0
  626. package/kit/chunks/nord-Ddv68eIx.js +1 -0
  627. package/kit/chunks/nsis-BlV79W_Q.js +1 -0
  628. package/kit/chunks/nushell-D3jzshHO.js +1 -0
  629. package/kit/chunks/objective-c-DXmwc3jG.js +1 -0
  630. package/kit/chunks/objective-cpp-CLxacb5B.js +1 -0
  631. package/kit/chunks/ocaml-C0hk2d4L.js +1 -0
  632. package/kit/chunks/odin-BBf5iR-q.js +1 -0
  633. package/kit/chunks/one-dark-pro-DVMEJ2y_.js +1 -0
  634. package/kit/chunks/one-light-C3Wv6jpd.js +1 -0
  635. package/kit/chunks/openscad-C4EeE6gA.js +1 -0
  636. package/kit/chunks/ordinal-Cboi1Yqb.js +1 -0
  637. package/kit/chunks/org-DM6o9KBp.js +1 -0
  638. package/kit/chunks/packet-AYTQ26CC-BVWhELL0.js +1 -0
  639. package/kit/chunks/pascal-D93ZcfNL.js +1 -0
  640. package/kit/chunks/pegDiagram-XKGWAZYB-C4MT3RNK.js +1 -0
  641. package/kit/chunks/perl-B9cMNwum.js +1 -0
  642. package/kit/chunks/php-Csjmro_R.js +1 -0
  643. package/kit/chunks/pie-WAS4IAKB-DOImHQUJ.js +1 -0
  644. package/kit/chunks/pieDiagram-E7YTZNPT-Hm0WPgzn.js +39 -0
  645. package/kit/chunks/pierre-dark-CyvmCCZW.js +1 -0
  646. package/kit/chunks/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
  647. package/kit/chunks/pierre-dark-soft-BHGpRqa4.js +1 -0
  648. package/kit/chunks/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
  649. package/kit/chunks/pierre-dark-vibrant-BWBVywrn.js +1 -0
  650. package/kit/chunks/pierre-light-480U9XYS.js +1 -0
  651. package/kit/chunks/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
  652. package/kit/chunks/pierre-light-soft-CVdyfjmI.js +1 -0
  653. package/kit/chunks/pierre-light-tritanopia-B4_gpKOM.js +1 -0
  654. package/kit/chunks/pierre-light-vibrant-DdTDNdfJ.js +1 -0
  655. package/kit/chunks/pkl-u5AG7uiY.js +1 -0
  656. package/kit/chunks/plastic-3e1v2bzS.js +1 -0
  657. package/kit/chunks/plsql-ChMvpjG-.js +1 -0
  658. package/kit/chunks/po-BTJTHyun.js +1 -0
  659. package/kit/chunks/poimandres-CS3Unz2-.js +1 -0
  660. package/kit/chunks/polar-C0HS_06l.js +1 -0
  661. package/kit/chunks/postcss-CXtECtnM.js +1 -0
  662. package/kit/chunks/powerquery-CEu0bR-o.js +1 -0
  663. package/kit/chunks/powershell-BmBUJMz7.js +1 -0
  664. package/kit/chunks/prisma-Vru482bI.js +1 -0
  665. package/kit/chunks/prolog-CbFg5uaA.js +1 -0
  666. package/kit/chunks/proto-C7zT0LnQ.js +1 -0
  667. package/kit/chunks/pug-DKIMFp6K.js +1 -0
  668. package/kit/chunks/puppet-BMWR74SV.js +1 -0
  669. package/kit/chunks/purescript-CklMAg4u.js +1 -0
  670. package/kit/chunks/python-B6aJPvgy.js +1 -0
  671. package/kit/chunks/qml-3beO22l8.js +1 -0
  672. package/kit/chunks/qmldir-C8lEn-DE.js +1 -0
  673. package/kit/chunks/qss-IeuSbFQv.js +1 -0
  674. package/kit/chunks/quadrantDiagram-AXDQQJYC-BZTp7tGN.js +7 -0
  675. package/kit/chunks/r-Cf5RLm7j.js +1 -0
  676. package/kit/chunks/racket-BqYA7rlc.js +1 -0
  677. package/kit/chunks/radar-RG4KPBEZ-KbpEH3G6.js +1 -0
  678. package/kit/chunks/railroad-74A4TZTK-Cy0CCThT.js +1 -0
  679. package/kit/chunks/railroad-abnf-HS5TGJTU-CvknKf9w.js +1 -0
  680. package/kit/chunks/railroad-ebnf-LZEXJU2U-DPsJAhot.js +1 -0
  681. package/kit/chunks/railroad-peg-WCYAUIDC-CAZC7-ro.js +1 -0
  682. package/kit/chunks/railroadDiagram-O6MQD6OU-Cslq_ZZh.js +1 -0
  683. package/kit/chunks/raku-DXvB9xmW.js +1 -0
  684. package/kit/chunks/razor-BjBPvh-w.js +1 -0
  685. package/kit/chunks/rbs-CpoqiR4B.js +1 -0
  686. package/kit/chunks/red-hvxz__6c.js +1 -0
  687. package/kit/chunks/reg-C-SQnVFl.js +1 -0
  688. package/kit/chunks/regexp-CDVJQ6XC.js +1 -0
  689. package/kit/chunks/rel-C3B-1QV4.js +1 -0
  690. package/kit/chunks/requirementDiagram-EFPCY7ZU-CvFiO4QY.js +84 -0
  691. package/kit/chunks/riscv-BM1_JUlF.js +1 -0
  692. package/kit/chunks/ron-D8l8udqQ.js +1 -0
  693. package/kit/chunks/rose-pine-5qJOZa0Y.js +1 -0
  694. package/kit/chunks/rose-pine-dawn-zx0QlTCp.js +1 -0
  695. package/kit/chunks/rose-pine-moon-C9pEdX9L.js +1 -0
  696. package/kit/chunks/rosmsg-BJDFO7_C.js +1 -0
  697. package/kit/chunks/rst-bs7f0vWN.js +1 -0
  698. package/kit/chunks/ruby-C0TQ7zu5.js +1 -0
  699. package/kit/chunks/rust-B1yitclQ.js +1 -0
  700. package/kit/chunks/sankeyDiagram-P5KCCOFB-Da1DpNmD.js +40 -0
  701. package/kit/chunks/sas-DEy46yEz.js +1 -0
  702. package/kit/chunks/sass-Cj5Yp3dK.js +1 -0
  703. package/kit/chunks/scala-CqE71os6.js +1 -0
  704. package/kit/chunks/scheme-C98Dy4si.js +1 -0
  705. package/kit/chunks/scss-D5BDwBP9.js +1 -0
  706. package/kit/chunks/sdbl-DVxCFoDh.js +1 -0
  707. package/kit/chunks/sequenceDiagram-WJ2MYXX4-DxoNyZwj.js +162 -0
  708. package/kit/chunks/shaderlab-Dg9Lc6iA.js +1 -0
  709. package/kit/chunks/shellscript-Yzrsuije.js +1 -0
  710. package/kit/chunks/shellsession-BADoaaVG.js +1 -0
  711. package/kit/chunks/sizeCapture-X5ZJPWSS-BYc4ks_u.js +1 -0
  712. package/kit/chunks/slack-dark-BthQWCQV.js +1 -0
  713. package/kit/chunks/slack-ochin-DqwNpetd.js +1 -0
  714. package/kit/chunks/smalltalk-BOQMe2GC.js +1 -0
  715. package/kit/chunks/smithy-cds9vsN8.js +1 -0
  716. package/kit/chunks/snazzy-light-Bw305WKR.js +1 -0
  717. package/kit/chunks/solarized-dark-CpvCGNkr.js +1 -0
  718. package/kit/chunks/solarized-light-Dlz6yCKv.js +1 -0
  719. package/kit/chunks/solidity-DijEV5ha.js +1 -0
  720. package/kit/chunks/soy-8wufbnw4.js +1 -0
  721. package/kit/chunks/sparql-rVzFXLq3.js +1 -0
  722. package/kit/chunks/splunk-BtCnVYZw.js +1 -0
  723. package/kit/chunks/sql-CRqJ_cUM.js +1 -0
  724. package/kit/chunks/ssh-config-_ykCGR6B.js +1 -0
  725. package/kit/chunks/stata-DI20mbqo.js +1 -0
  726. package/kit/chunks/stateDiagram-HBIQ2CUA-pcNSv_wf.js +1 -0
  727. package/kit/chunks/stateDiagram-v2-4QOOHH4V-BdB1HxLL.js +1 -0
  728. package/kit/chunks/stylus-BEDo0Tqx.js +1 -0
  729. package/kit/chunks/surrealql-Cjom0U5J.js +1 -0
  730. package/kit/chunks/svelte-Cy7k_4gC.js +1 -0
  731. package/kit/chunks/swift-C2oV4EkX.js +1 -0
  732. package/kit/chunks/swimlanes-XN3QIQJK-D7wXTch1.js +1 -0
  733. package/kit/chunks/swimlanesDiagram-VK2B7HYN-BmYbYnek.js +8 -0
  734. package/kit/chunks/synthwave-84-CbfX1IO0.js +1 -0
  735. package/kit/chunks/system-verilog-0hqHdDBg.js +1 -0
  736. package/kit/chunks/systemd-4A_iFExJ.js +1 -0
  737. package/kit/chunks/talonscript-CkByrt1z.js +1 -0
  738. package/kit/chunks/tasl-QIJgUcNo.js +1 -0
  739. package/kit/chunks/tcl-dwOrl1Do.js +1 -0
  740. package/kit/chunks/templ-DhtptRzy.js +1 -0
  741. package/kit/chunks/terraform-BETggiCN.js +1 -0
  742. package/kit/chunks/tex-D96PA37w.js +1 -0
  743. package/kit/chunks/timeline-definition-24CTP7MA-BrPc1tMu.js +120 -0
  744. package/kit/chunks/tokyo-night-hegEt444.js +1 -0
  745. package/kit/chunks/toml-vGWfd6FD.js +1 -0
  746. package/kit/chunks/treeView-Q6P3EWNA-hcKZ8Aqa.js +1 -0
  747. package/kit/chunks/treemap-WGGIJYW6-VledEerh.js +1 -0
  748. package/kit/chunks/ts-tags-D351s5mN.js +1 -0
  749. package/kit/chunks/tsv-B_m7g4N7.js +1 -0
  750. package/kit/chunks/tsx-COt5Ahok.js +1 -0
  751. package/kit/chunks/turtle-BsS91CYL.js +1 -0
  752. package/kit/chunks/twig-27uCiNez.js +1 -0
  753. package/kit/chunks/typescript-BPQ3VLAy.js +1 -0
  754. package/kit/chunks/typespec-CAFt9gP4.js +1 -0
  755. package/kit/chunks/typst-DHCkPAjA.js +1 -0
  756. package/kit/chunks/v-BGw2Nkan.js +1 -0
  757. package/kit/chunks/vala-CsfeWuGM.js +1 -0
  758. package/kit/chunks/vb-Cu-pLBUe.js +1 -0
  759. package/kit/chunks/vennDiagram-4TSXK5OY-CMfntOoF.js +34 -0
  760. package/kit/chunks/verilog-nZwndyjY.js +1 -0
  761. package/kit/chunks/vesper-DRje8inN.js +1 -0
  762. package/kit/chunks/vhdl-CeAyd5Ju.js +1 -0
  763. package/kit/chunks/viml-CJc9bBzg.js +1 -0
  764. package/kit/chunks/vitesse-black-Bkuqu6BP.js +1 -0
  765. package/kit/chunks/vitesse-dark-D0r3Knsf.js +1 -0
  766. package/kit/chunks/vitesse-light-CVO1_9PV.js +1 -0
  767. package/kit/chunks/vue-BqiEGhQt.js +1 -0
  768. package/kit/chunks/vue-html-AaS7Mt5G.js +1 -0
  769. package/kit/chunks/vue-vine-BoDAl6tE.js +1 -0
  770. package/kit/chunks/vyper-CDx5xZoG.js +1 -0
  771. package/kit/chunks/wardley-WFR3VGLG-Bx5FYIM5.js +1 -0
  772. package/kit/chunks/wardleyDiagram-VM6X3IG4-C9foyd_h.js +78 -0
  773. package/kit/chunks/wasm-CG6Dc4jp.js +1 -0
  774. package/kit/chunks/wasm-MzD3tlZU.js +1 -0
  775. package/kit/chunks/wenyan-BV7otONQ.js +1 -0
  776. package/kit/chunks/wgsl-Dx-B1_4e.js +1 -0
  777. package/kit/chunks/wikitext-BhOHFoWU.js +1 -0
  778. package/kit/chunks/wit-5i3qLPDT.js +1 -0
  779. package/kit/chunks/wolfram-lXgVvXCa.js +1 -0
  780. package/kit/chunks/xml-sdJ4AIDG.js +1 -0
  781. package/kit/chunks/xsl-CtQFsRM5.js +1 -0
  782. package/kit/chunks/xychartDiagram-S5SC5T6Z-Bp0MWYj-.js +7 -0
  783. package/kit/chunks/yaml-Buea-lGh.js +1 -0
  784. package/kit/chunks/zenscript-DVFEvuxE.js +1 -0
  785. package/kit/chunks/zig-VOosw3JB.js +1 -0
  786. package/kit/index.d.ts +95 -0
  787. package/kit/index.js +1 -0
  788. package/kit/mux-build.json +1 -0
  789. package/kit/style.css +1 -0
  790. package/package.json +9 -15
  791. package/dist/controller.d.ts +0 -66
  792. package/dist/index.d.ts +0 -2
  793. package/dist/index.js +0 -1237
  794. package/dist/index.js.map +0 -1
  795. package/dist/markdown.d.ts +0 -2
  796. package/dist/model.d.ts +0 -33
  797. package/dist/mount.d.ts +0 -56
  798. package/dist/styles.d.ts +0 -2
  799. package/dist/testing.js.map +0 -1
  800. package/dist/view/Chat.d.ts +0 -26
  801. package/dist/view/parts.d.ts +0 -19
  802. package/dist/view/primitives.d.ts +0 -10
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["theme","animations","iconButton","spinner","collapsible","basicTool","textShimmer","toolStatusTitle","dockSurface","markdown","messagePart","sessionTurn","chat","createEffect","createSignal","onCleanup","SWAP_MS","TextShimmer","props","text","active","offset","run","setRun","timer","ReturnType","setTimeout","clearTimeout","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_$insert","_$effect","_p$","_v$","_v$2","_v$3","_v$4","e","_$setAttribute","t","a","_$setStyleProperty","o","undefined","svg","path","filled","_el$5","_tmpl$2","_el$6","_el$7","ChevronDown","ArrowUp","Stop","Plus","_tmpl$","_tmpl$2","_$setAttribute","_$setStyleProperty","Part","ReasoningPart","TextPart","ToolPart","createMemo","createSignal","Match","Show","Switch","JSX","renderMarkdown","seconds","toolActive","toolDetail","toolSubtitle","toolTitle","ChevronDown","TextShimmer","ActivityRow","props","title","subtitle","active","name","status","children","Element","open","setOpen","expandable","undefined","_el$","_tmpl$3","_el$2","firstChild","_el$3","_el$4","_el$5","_el$6","_el$7","_el$8","_el$9","nextSibling","$$click","_$insert","_$createComponent","text","when","_el$11","_tmpl$4","_el$0","_tmpl$","_el$1","_$memo","_el$10","_tmpl$2","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","e","_$setAttribute","t","a","o","i","n","disabled","ToolRow","part","labels","Record","detail","state","slice","tool","_el$12","_tmpl$5","_el$13","ReasoningRow","live","time","end","duration","start","_el$14","_tmpl$6","_el$15","innerHTML","TextPartView","_el$16","_tmpl$7","_el$17","PartView","type","_$delegateEvents","_tmpl$","_tmpl$2","_tmpl$3","_tmpl$4","_tmpl$5","_tmpl$6","_tmpl$7","_$createComponent","_$memo","_$setAttribute","_$delegateEvents","PermissionRequest","QuestionRequest","Turn","createComputed","createEffect","createMemo","createSignal","For","on","onCleanup","Show","createChatController","ToolResult","sameIDs","visibleParts","ActivityRow","PartView","ArrowUp","ChevronDown","Plus","Stop","ResolvedOptions","url","title","subtitle","placeholder","suggestions","Array","label","prompt","toolLabels","Record","agent","sessionTitle","storageKey","preferredModel","onToolResult","result","ChatAPI","send","text","Promise","focus","newChat","TurnView","props","turn","streaming","labels","message","parts","ids","map","part","id","equals","byID","Map","live","m","role","time","completed","undefined","error","failure","name","data","userText","flatMap","type","synthetic","join","_$createComponent","when","children","fallback","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_$insert","_$effect","_$setAttribute","_el$","_tmpl$","each","get","_$memo","length","active","_el$5","_tmpl$3","_p$","_v$","_v$2","e","t","QuestionDock","request","onAnswer","answers","onSkip","setAnswers","questions","set","index","value","previous","current","i","toggle","multiple","includes","filter","_el$6","_tmpl$4","_el$7","_el$8","_el$9","nextSibling","question","_el$0","_tmpl$7","_el$10","_el$11","header","_el$1","_tmpl$5","options","option","_el$13","_tmpl$9","_el$14","$$click","description","_el$15","_tmpl$8","_v$3","_v$4","custom","_el$12","_tmpl$6","$$input","event","currentTarget","trim","disabled","every","answer","PermissionDock","onReply","response","patterns","Boolean","replied","setReplied","reply","_el$16","_tmpl$1","_el$17","_el$18","_el$19","_el$21","_el$20","_el$23","_el$24","_el$25","_el$26","permission","_el$22","_tmpl$0","_v$5","_v$6","_v$7","a","Chat","api","chat","timeline","HTMLDivElement","input","HTMLTextAreaElement","draft","setDraft","grow","style","height","Math","min","scrollHeight","clear","restore","sendText","submit","ready","waiting","resolve","sent","queue","sendFromHost","push","flush","batch","then","working","lastTurn","messageIDs","awaitingReply","pinned","nearBottom","scrollTop","clientHeight","changes","defer","older","_el$27","_tmpl$17","_el$28","_el$29","_el$30","_el$32","_el$33","_el$34","_el$35","_el$40","_el$42","_el$46","_el$47","_el$48","_el$49","_el$50","_el$51","_el$52","_el$53","_el$54","_el$55","_el$56","_el$57","_el$58","_el$59","_el$31","_tmpl$10","status","addEventListener","_ref$","_$use","_el$36","_tmpl$13","_el$37","_el$38","_tmpl$11","_el$39","_tmpl$12","suggestion","_el$60","_tmpl$18","_el$41","_tmpl$14","permissions","keyed","replyPermission","reject","unconfirmed","_el$43","_tmpl$16","_el$44","_el$45","_tmpl$15","retry","$$keydown","key","shiftKey","isComposing","preventDefault","_ref$2","selectModel","modelGroups","group","_el$61","_tmpl$19","models","model","_el$62","_tmpl$20","selected","modelValue","abort","_v$8","sessionID","_v$9","tone","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","o","n","s","h","r","d","_$delegateEvents","_tmpl$","_$createComponent","_$setAttribute","_$memo","_$use","_$delegateEvents","onCleanup","onMount","JSX","render","ToolResult","styles","Chat","ChatAPI","MuxChatOptions","url","title","subtitle","placeholder","suggestions","Array","label","prompt","toolLabels","Record","preferredModel","onToolResult","result","theme","storageKey","agent","sessionTitle","MuxChatHandle","send","text","Promise","focus","newChat","dispose","mountMuxChat","host","HTMLElement","options","root","shadowRoot","attachShadow","mode","replaceChildren","style","document","createElement","textContent","container","height","append","setAttribute","removeAttribute","api","_$createComponent","value","resolve","MuxChat","props","id","class","CSSProperties","ref","handle","HTMLDivElement","_el$","_tmpl$","_ref$","_$use","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","_$style","undefined","_$createComponent","_$use","_$setAttribute","_$className","_$style"],"sources":["../src/styles/mux/animations.css?inline","../src/styles/mux/basic-tool.css?inline","../src/styles/mux/collapsible.css?inline","../src/styles/mux/dock-surface.css?inline","../src/styles/mux/icon-button.css?inline","../src/styles/mux/markdown.css?inline","../src/styles/mux/message-part.css?inline","../src/styles/mux/session-turn.css?inline","../src/styles/mux/spinner.css?inline","../src/styles/mux/text-shimmer.css?inline","../src/styles/mux/theme.css?inline","../src/styles/mux/tool-status-title.css?inline","../src/styles/chat.css?inline","../src/styles.ts","../src/model.ts","../src/controller.ts","../src/markdown.ts","../src/view/primitives.tsx","../src/view/parts.tsx","../src/view/Chat.tsx","../src/mount.tsx"],"sourcesContent":["/* Synced from Mux frontend/src/ui/styles/animations.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n:host {\n --animate-pulse: pulse-opacity 2s ease-in-out infinite;\n --animate-pulse-scale: pulse-scale 1.2s ease-in-out infinite;\n}\n\n@keyframes pulse-opacity {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes pulse-scale {\n 0%,\n 100% {\n transform: scale(1);\n }\n 50% {\n transform: scale(0.6666667);\n }\n}\n\n@keyframes pulse-opacity-dim {\n 0%,\n 100% {\n opacity: 0.15;\n }\n 50% {\n opacity: 0.35;\n }\n}\n\n@keyframes fadeUp {\n from {\n opacity: 0;\n transform: translateY(5px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.fade-up-text {\n animation: fadeUp 0.4s ease-out forwards;\n opacity: 0;\n\n &:nth-child(1) {\n animation-delay: 0.1s;\n }\n &:nth-child(2) {\n animation-delay: 0.2s;\n }\n &:nth-child(3) {\n animation-delay: 0.3s;\n }\n &:nth-child(4) {\n animation-delay: 0.4s;\n }\n &:nth-child(5) {\n animation-delay: 0.5s;\n }\n &:nth-child(6) {\n animation-delay: 0.6s;\n }\n &:nth-child(7) {\n animation-delay: 0.7s;\n }\n &:nth-child(8) {\n animation-delay: 0.8s;\n }\n &:nth-child(9) {\n animation-delay: 0.9s;\n }\n &:nth-child(10) {\n animation-delay: 1s;\n }\n &:nth-child(11) {\n animation-delay: 1.1s;\n }\n &:nth-child(12) {\n animation-delay: 1.2s;\n }\n &:nth-child(13) {\n animation-delay: 1.3s;\n }\n &:nth-child(14) {\n animation-delay: 1.4s;\n }\n &:nth-child(15) {\n animation-delay: 1.5s;\n }\n &:nth-child(16) {\n animation-delay: 1.6s;\n }\n &:nth-child(17) {\n animation-delay: 1.7s;\n }\n &:nth-child(18) {\n animation-delay: 1.8s;\n }\n &:nth-child(19) {\n animation-delay: 1.9s;\n }\n &:nth-child(20) {\n animation-delay: 2s;\n }\n &:nth-child(21) {\n animation-delay: 2.1s;\n }\n &:nth-child(22) {\n animation-delay: 2.2s;\n }\n &:nth-child(23) {\n animation-delay: 2.3s;\n }\n &:nth-child(24) {\n animation-delay: 2.4s;\n }\n &:nth-child(25) {\n animation-delay: 2.5s;\n }\n &:nth-child(26) {\n animation-delay: 2.6s;\n }\n &:nth-child(27) {\n animation-delay: 2.7s;\n }\n &:nth-child(28) {\n animation-delay: 2.8s;\n }\n &:nth-child(29) {\n animation-delay: 2.9s;\n }\n &:nth-child(30) {\n animation-delay: 3s;\n }\n}\n","/* Synced from Mux frontend/src/ui/components/basic-tool.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n/* [data-component=\"tool-trigger\"] {\n content-visibility: auto;\n} */\n[data-component=\"tool-trigger\"][data-layout=\"activity-row\"] {\n width: fit-content;\n max-width: 100%;\n min-width: 0;\n display: grid;\n grid-template-columns: var(--activity-label-width) minmax(0, auto) auto auto;\n column-gap: 8px;\n align-items: baseline;\n justify-content: start;\n\n [data-slot=\"basic-tool-tool-trigger-content\"],\n [data-slot=\"basic-tool-tool-info\"],\n [data-slot=\"basic-tool-tool-info-structured\"],\n [data-slot=\"basic-tool-tool-info-main\"] {\n display: contents;\n }\n\n [data-slot=\"basic-tool-tool-title\"] {\n grid-column: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n [data-slot=\"basic-tool-tool-detail\"] {\n grid-column: 2;\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n }\n\n [data-slot=\"basic-tool-tool-action\"],\n [data-component=\"tool-action\"] {\n grid-column: 3;\n }\n\n > [data-slot=\"collapsible-arrow\"] {\n grid-column: 3;\n align-self: center;\n }\n\n &:has([data-slot=\"basic-tool-tool-action\"], [data-component=\"tool-action\"])\n > [data-slot=\"collapsible-arrow\"] {\n grid-column: 4;\n }\n\n [data-slot=\"basic-tool-tool-indicator\"] {\n width: 16px;\n height: 16px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n [data-component=\"spinner\"] {\n width: 16px;\n height: 16px;\n }\n }\n\n [data-slot=\"basic-tool-tool-spinner\"] {\n width: 16px;\n height: 16px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--text-weak);\n\n [data-component=\"spinner\"] {\n width: 16px;\n height: 16px;\n }\n }\n\n [data-slot=\"icon-svg\"] {\n flex-shrink: 0;\n }\n\n [data-slot=\"basic-tool-tool-info\"] {\n display: contents;\n font-size: var(--font-size-base);\n }\n\n [data-slot=\"basic-tool-tool-info-structured\"],\n [data-slot=\"basic-tool-tool-info-main\"] {\n display: contents;\n }\n\n [data-slot=\"basic-tool-tool-title\"] {\n flex-shrink: 0;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-base);\n font-style: normal;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n color: var(--text-strong);\n\n &.capitalize {\n text-transform: capitalize;\n }\n\n &.agent-title {\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n }\n }\n\n [data-slot=\"basic-tool-tool-detail\"] {\n display: block;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: ltr;\n unicode-bidi: isolate;\n\n > :not(:first-child) {\n margin-left: 8px;\n }\n }\n\n [data-slot=\"basic-tool-tool-subtitle\"] {\n min-width: 0;\n font-family: var(--font-family-sans);\n font-variant-numeric: tabular-nums;\n font-size: var(--font-size-base);\n font-style: normal;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n color: var(--text-base);\n\n &.webfetch-url {\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--font-size-small);\n }\n\n &.clickable {\n cursor: pointer;\n text-decoration: underline;\n transition: color 0.15s ease;\n\n &:hover {\n color: var(--text-base);\n }\n }\n }\n\n [data-slot=\"basic-tool-tool-arg\"] {\n flex-shrink: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--font-family-sans);\n font-variant-numeric: tabular-nums;\n font-size: var(--font-size-base);\n font-style: normal;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n color: var(--text-base);\n }\n\n [data-slot=\"basic-tool-tool-action\"] {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n }\n}\n\n/* Consecutive tool rows sit flush; a delegation card needs its own breathing room.\n Cards stop short of the full prose width so two short lines are not boxed\n inside a mostly empty frame. */\n[data-component=\"task-supervision\"] {\n width: 100%;\n max-width: 40rem;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-block: 4px;\n}\n\n[data-component=\"task-tool-card\"] {\n width: 100%;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 4px;\n border-radius: 6px;\n border: 1px solid var(--border-weak-base, rgba(255, 255, 255, 0.08));\n background: color-mix(in srgb, var(--background-base) 92%, transparent);\n transition:\n border-color 0.15s ease,\n background-color 0.15s ease,\n color 0.15s ease;\n\n [data-slot=\"task-tool-body\"] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: inherit;\n color: inherit;\n text-decoration: none;\n }\n\n a[data-slot=\"task-tool-body\"] {\n cursor: pointer;\n }\n\n [data-slot=\"task-tool-info\"] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n [data-slot=\"task-tool-heading\"] {\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-base);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n }\n\n [data-slot=\"task-tool-description\"] {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--text-strong);\n font-weight: var(--font-weight-regular);\n }\n\n [data-slot=\"task-tool-meta\"] {\n min-width: 0;\n display: flex;\n align-items: baseline;\n white-space: nowrap;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n color: var(--text-weak);\n\n > * {\n flex-shrink: 0;\n }\n\n > * + *::before {\n content: \"·\";\n margin-inline: 6px;\n color: var(--text-weaker);\n }\n\n /* The model label is last and gives way on narrow layouts. */\n > :last-child:not(:first-child) {\n flex-shrink: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n [data-slot=\"task-tool-state\"]:is([data-state=\"pending\"], [data-state=\"queued\"], [data-state=\"running\"]) {\n color: var(--text-interactive-base);\n }\n\n [data-slot=\"task-tool-state\"][data-state=\"error\"] {\n color: var(--text-danger-base);\n }\n\n [data-component=\"task-tool-spinner\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n [data-component=\"spinner\"] {\n width: 16px;\n height: 16px;\n }\n }\n\n [data-component=\"task-tool-action\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--icon-weak);\n opacity: 0;\n transition:\n opacity 0.15s ease,\n color 0.15s ease;\n }\n\n [data-component=\"task-tool-title\"] {\n flex-shrink: 0;\n font-weight: var(--font-weight-medium);\n text-transform: capitalize;\n }\n\n > [data-component=\"button\"] {\n flex-shrink: 0;\n margin-inline-end: 8px;\n }\n\n &:hover,\n &:focus-within {\n background: color-mix(in srgb, var(--background-stronger) 88%, transparent);\n\n [data-component=\"task-tool-action\"] {\n opacity: 1;\n }\n }\n\n @media (hover: none) {\n [data-component=\"task-tool-action\"] {\n opacity: 1;\n }\n }\n}\n\n[data-component=\"task-supervision\"] > [data-slot=\"task-tool-failure\"] {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n overflow: hidden;\n padding-inline: 12px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n color: var(--text-base);\n}\n\n[data-component=\"task-supervision\"] > [data-slot=\"task-tool-status-error\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-inline: 12px;\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n color: var(--text-weak);\n}\n","/* Synced from Mux frontend/src/ui/components/collapsible.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-slot=\"collapsible-collapse\"] {\n min-height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n [data-component=\"icon-button\"] {\n width: 28px;\n height: 28px;\n\n [data-slot=\"icon-svg\"] {\n transform: rotate(180deg);\n }\n }\n}\n\n[data-component=\"collapsible\"] {\n width: 100%;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n transition: background-color 0.15s ease;\n border-radius: var(--radius-md);\n overflow: visible;\n\n &.tool-collapsible {\n gap: 8px;\n }\n\n [data-slot=\"collapsible-trigger\"]:has(\n > [data-layout=\"activity-row\"]\n ) {\n min-height: 28px;\n height: auto;\n }\n\n [data-slot=\"collapsible-trigger\"] {\n width: 100%;\n display: flex;\n height: 32px;\n padding: 0;\n align-items: center;\n align-self: stretch;\n cursor: default;\n user-select: none;\n color: var(--text-base);\n /* Triggers render as <button>, which still defaults to centered text. */\n text-align: start;\n\n [data-slot=\"collapsible-arrow\"] {\n opacity: 0;\n transition: opacity 0.15s ease;\n will-change: opacity;\n transform: translateZ(0);\n }\n\n [data-slot=\"collapsible-arrow-icon\"] {\n display: inline-flex;\n color: var(--icon-weaker);\n transform: translateZ(0) rotate(-90deg);\n transition: transform 0.15s ease;\n will-change: transform;\n }\n\n &:hover [data-slot=\"collapsible-arrow\"] {\n opacity: 1;\n }\n\n /* text-12-medium */\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n font-style: normal;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large); /* 166.667% */\n letter-spacing: var(--letter-spacing-normal);\n\n /* &:hover { */\n /* background-color: var(--surface-base); */\n /* } */\n &:focus-visible {\n outline: none;\n background-color: var(--surface-raised-base-hover);\n }\n &[data-disabled] {\n cursor: not-allowed;\n }\n\n [data-slot=\"collapsible-arrow\"] {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &[data-size=\"compact\"] {\n width: 16px;\n height: 16px;\n }\n }\n }\n\n [data-slot=\"collapsible-trigger\"][aria-expanded=\"true\"] {\n [data-slot=\"collapsible-arrow\"] {\n opacity: 1;\n }\n\n [data-slot=\"collapsible-arrow-icon\"] {\n transform: translateZ(0) rotate(0deg);\n }\n }\n\n [data-slot=\"collapsible-content\"] {\n overflow: hidden;\n\n &[data-expanded] {\n overflow: visible;\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n border: none;\n\n > [data-slot=\"collapsible-trigger\"] {\n background-color: transparent;\n border: none;\n padding: 0;\n\n /* &:hover { */\n /* color: var(--text-strong); */\n /* } */\n &:focus-visible {\n outline: none;\n background-color: var(--surface-raised-base-hover);\n }\n &[data-disabled] {\n cursor: not-allowed;\n }\n }\n }\n\n &[data-variant=\"ghost\"][data-scope=\"filetree\"] {\n > [data-slot=\"collapsible-trigger\"] {\n height: 24px;\n }\n }\n}\n","/* Synced from Mux frontend/src/ui/components/dock-surface.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-dock-surface=\"shell\"] {\n background-color: var(--surface-raised-stronger-non-alpha);\n box-shadow: var(--shadow-xs-border);\n position: relative;\n z-index: 10;\n border-radius: 12px;\n overflow: clip;\n}\n\n[data-dock-surface=\"tray\"] {\n background-color: var(--background-base);\n border: 1px solid var(--border-weak-base);\n position: relative;\n z-index: 0;\n border-radius: 12px;\n overflow: clip;\n}\n\n[data-dock-surface=\"tray\"][data-dock-attach=\"top\"] {\n margin-top: -0.875rem;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n","/* Synced from Mux frontend/src/ui/components/icon-button.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-component=\"icon-button\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-sm);\n text-decoration: none;\n user-select: none;\n aspect-ratio: 1;\n flex-shrink: 0;\n\n &[data-variant=\"primary\"] {\n background-color: var(--icon-strong-base);\n\n [data-slot=\"icon-svg\"] {\n /* color: var(--icon-weak-base); */\n color: var(--icon-invert-base);\n\n /* &:hover:not(:disabled) { */\n /* color: var(--icon-weak-hover); */\n /* } */\n /* &:active:not(:disabled) { */\n /* color: var(--icon-strong-active); */\n /* } */\n }\n\n @media (hover: hover) {\n &:hover:not(:disabled) {\n background-color: var(--icon-strong-hover);\n }\n }\n &:focus:not(:disabled) {\n background-color: var(--icon-strong-focus);\n }\n &:active:not(:disabled) {\n background-color: var(--icon-strong-active);\n }\n &:disabled {\n background-color: var(--icon-strong-disabled);\n\n [data-slot=\"icon-svg\"] {\n color: var(--icon-invert-base);\n }\n }\n }\n\n &[data-variant=\"secondary\"] {\n border: transparent;\n background-color: var(--button-secondary-base);\n color: var(--text-strong);\n box-shadow: var(--shadow-xs-border-base);\n\n @media (hover: hover) {\n &:hover:not(:disabled) {\n background-color: var(--button-secondary-hover);\n }\n }\n &:focus:not(:disabled) {\n background-color: var(--button-secondary-base);\n }\n &:focus-visible:not(:active) {\n background-color: var(--button-secondary-base);\n box-shadow: var(--shadow-xs-border-focus);\n }\n &:focus-visible:active {\n box-shadow: none;\n }\n &:active:not(:disabled) {\n background-color: var(--button-secondary-base);\n }\n\n [data-slot=\"icon-svg\"] {\n color: var(--icon-strong-base);\n }\n\n &:disabled {\n background-color: var(--icon-strong-disabled);\n color: var(--icon-invert-base);\n cursor: not-allowed;\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n /* color: var(--icon-base); */\n\n [data-slot=\"icon-svg\"] {\n color: var(--icon-base);\n }\n\n @media (hover: hover) {\n &:hover:not(:disabled) {\n background-color: var(--surface-base-hover);\n\n /* [data-slot=\"icon-svg\"] { */\n /* color: var(--icon-hover); */\n /* } */\n }\n }\n &:focus-visible:not(:disabled) {\n background-color: var(--surface-base-hover);\n }\n &:active:not(:disabled) {\n background-color: var(--surface-base-active);\n /* [data-slot=\"icon-svg\"] { */\n /* color: var(--icon-active); */\n /* } */\n }\n &:selected:not(:disabled) {\n background-color: var(--surface-base-active);\n /* [data-slot=\"icon-svg\"] { */\n /* color: var(--icon-selected); */\n /* } */\n }\n &:disabled {\n color: var(--icon-invert-base);\n cursor: not-allowed;\n }\n }\n\n &[data-size=\"normal\"] {\n width: 24px;\n height: 24px;\n\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n gap: calc(var(--spacing) * 0.5);\n }\n\n &[data-size=\"small\"] {\n width: 20px;\n height: 20px;\n }\n\n &[data-size=\"large\"] {\n height: 32px;\n /* padding: 0 8px 0 6px; */\n gap: 8px;\n\n /* text-12-medium */\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n font-style: normal;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large); /* 166.667% */\n letter-spacing: var(--letter-spacing-normal);\n }\n\n &:focus {\n outline: none;\n }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n [data-component=\"icon-button\"][data-icon=\"stop\"] [data-slot=\"icon-svg\"] rect {\n transform-origin: center;\n transform-box: fill-box;\n animation: stop-pulse 1.8s ease-in-out infinite;\n }\n}\n\n@keyframes stop-pulse {\n 0%,\n 100% {\n transform: scale(0.95);\n }\n 50% {\n transform: scale(1.12);\n }\n}\n\n[data-component=\"icon-button\"].titlebar-icon {\n width: 32px;\n height: 24px;\n aspect-ratio: auto;\n}\n\n[data-component=\"icon-button\"].titlebar-icon[data-variant=\"ghost\"][aria-expanded=\"true\"] {\n background-color: var(--surface-raised-base-active);\n}\n\n[data-component=\"icon-button\"].titlebar-icon[data-variant=\"ghost\"][aria-expanded=\"true\"] [data-slot=\"icon-svg\"] {\n color: var(--icon-strong-base);\n}\n\n@media (hover: hover) {\n [data-component=\"icon-button\"].titlebar-icon[data-variant=\"ghost\"][aria-expanded=\"true\"]:hover:not(:disabled) {\n background-color: var(--surface-raised-base-active);\n }\n}\n","/* Synced from Mux frontend/src/ui/components/markdown.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-component=\"markdown\"] {\n /* Reset & Base Typography */\n min-width: 0;\n max-width: 100%;\n overflow-wrap: break-word;\n color: var(--text-strong);\n font-family: var(--font-family-sans);\n font-size: var(--markdown-font-size, var(--font-size-base));\n line-height: 160%;\n /* Contain outer margins, but let margins collapse across streaming wrappers. */\n display: flow-root;\n\n /* Spacing for flow */\n > *:first-child,\n > [data-markdown-block]:first-child > *:first-child {\n margin-top: 0;\n }\n > *:last-child,\n > [data-markdown-block]:last-child > *:last-child {\n margin-bottom: 0;\n }\n\n /* Headings: Same size, distinguished by color and spacing */\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: var(--markdown-font-size, var(--font-size-base));\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n line-height: var(--line-height-large);\n }\n\n /* Emphasis & Strong: Neutral strong color */\n strong,\n b {\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n }\n\n /* Paragraphs */\n p {\n margin-bottom: 0.75rem;\n }\n\n /* Links */\n a {\n color: var(--text-interactive-base);\n text-decoration: none;\n font-weight: inherit;\n }\n\n a:hover {\n text-decoration: underline;\n text-underline-offset: 2px;\n }\n\n /* Lists */\n ul,\n ol {\n margin-top: 0.5rem;\n margin-bottom: 0.75rem;\n margin-left: 0;\n padding-left: 1.5rem;\n list-style-position: outside;\n }\n\n ul {\n list-style-type: disc;\n }\n\n ol {\n list-style-type: decimal;\n padding-left: 2.25rem;\n }\n\n li {\n margin-bottom: 0.5rem;\n }\n\n li > p:first-child {\n display: inline;\n margin: 0;\n }\n\n li > p + p {\n display: block;\n margin-top: 0.5rem;\n }\n\n li::marker {\n color: var(--text-weak);\n }\n\n /* Nested lists spacing */\n li > ul,\n li > ol {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n padding-left: 1rem; /* Minimal indent for nesting only */\n }\n\n li > ol {\n padding-left: 1.75rem;\n }\n\n /* Blockquotes */\n blockquote {\n border-left: 2px solid var(--border-weak-base);\n margin: 1rem 0;\n padding-left: 0.5rem;\n color: var(--text-weak);\n font-style: normal;\n }\n\n /* Horizontal Rule - Invisible spacing only */\n hr {\n border: none;\n height: 0;\n margin: 2rem 0;\n }\n\n .shiki,\n .markdown-code-pending {\n font-size: var(--markdown-font-size, 13px);\n line-height: 1.5;\n padding: 8px 12px;\n border-radius: 6px;\n border: 0.5px solid var(--border-weak-base);\n background: var(--surface-raised-base);\n }\n\n .markdown-code-pending code {\n font-family: var(--font-family-mono);\n font-feature-settings: var(--font-family-mono--font-feature-settings);\n }\n\n [data-component=\"markdown-code\"] {\n position: relative;\n\n [data-slot=\"markdown-copy-button\"] {\n position: absolute;\n right: 4px;\n z-index: 10;\n\n &[data-position=\"top\"] {\n top: 4px;\n }\n\n &[data-position=\"bottom\"] {\n bottom: 4px;\n }\n }\n }\n\n [data-slot=\"markdown-copy-button\"] {\n opacity: 0;\n transition: opacity 0.15s ease;\n\n &::after {\n content: attr(data-tooltip);\n position: absolute;\n left: 50%;\n bottom: calc(100% + 4px);\n transform: translateX(-50%);\n z-index: 1000;\n\n max-width: 320px;\n border-radius: var(--radius-sm);\n background: var(--surface-float-base);\n color: var(--text-invert-strong);\n padding: 2px 8px;\n border: 1px solid var(--border-weak-base, rgba(0, 0, 0, 0.07));\n box-shadow: var(--shadow-md);\n\n pointer-events: none;\n white-space: nowrap;\n\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n font-style: normal;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n }\n\n [data-slot=\"markdown-copy-button\"]:hover::after,\n [data-slot=\"markdown-copy-button\"]:focus-visible::after {\n opacity: 1;\n }\n\n [data-slot=\"markdown-copy-button\"][data-variant=\"secondary\"] {\n box-shadow: none;\n border: 1px solid var(--border-weak-base);\n }\n\n [data-slot=\"markdown-copy-button\"][data-variant=\"secondary\"] [data-slot=\"icon-svg\"] {\n color: var(--icon-base);\n }\n\n [data-component=\"markdown-code\"]:hover [data-slot=\"markdown-copy-button\"],\n [data-component=\"file-viewer\"]:hover [data-slot=\"markdown-copy-button\"] {\n opacity: 1;\n }\n\n [data-slot=\"markdown-copy-button\"] [data-slot=\"check-icon\"] {\n display: none;\n }\n\n [data-slot=\"markdown-copy-button\"][data-copied=\"true\"] [data-slot=\"copy-icon\"] {\n display: none;\n }\n\n [data-slot=\"markdown-copy-button\"][data-copied=\"true\"] [data-slot=\"check-icon\"] {\n display: inline-flex;\n }\n\n pre {\n margin-top: 0.75rem;\n margin-bottom: 1.5rem;\n overflow: auto;\n\n &[data-wrap=\"true\"] {\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n overflow-x: hidden;\n }\n\n &[data-wrap=\"true\"] code,\n &[data-wrap=\"true\"] .line {\n white-space: inherit;\n }\n\n scrollbar-width: none;\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n :not(pre) > code {\n font-family: var(--font-family-mono);\n font-feature-settings: var(--font-family-mono--font-feature-settings);\n color: var(--syntax-string);\n font-weight: var(--font-weight-medium);\n /* font-size: 13px; */\n\n /* padding: 2px 2px; */\n /* margin: 0 1.5px; */\n /* border-radius: 2px; */\n /* background: var(--surface-base); */\n /* box-shadow: 0 0 0 0.5px var(--border-weak-base); */\n }\n\n /* Tables */\n table {\n width: 100%;\n border-collapse: collapse;\n margin: 1.5rem 0;\n font-size: var(--markdown-font-size, var(--font-size-base));\n display: block;\n overflow-x: auto;\n }\n\n th,\n td {\n /* Minimal borders for structure, matching TUI \"lines\" roughly but keeping it web-clean */\n border-bottom: 1px solid var(--border-weaker-base);\n padding: 0.75rem 0.5rem;\n text-align: left;\n vertical-align: top;\n }\n\n th {\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n border-bottom: 1px solid var(--border-weak-base);\n }\n\n /* Images */\n img {\n max-width: 100%;\n height: auto;\n border-radius: 4px;\n margin: 1.5rem 0;\n display: block;\n }\n\n [data-component=\"mermaid\"] {\n margin: 2rem 0;\n overflow: auto;\n border: 0.5px solid var(--border-weak-base);\n border-radius: 6px;\n background: var(--surface-raised-base);\n padding: 16px;\n\n svg {\n display: block;\n width: 100%;\n min-width: 320px;\n height: auto;\n margin: 0 auto;\n }\n }\n\n pre[data-mermaid-status=\"error\"]::after {\n content: attr(data-mermaid-error);\n display: block;\n margin-top: 8px;\n color: var(--text-weak);\n font-family: var(--font-family-sans);\n font-size: 12px;\n white-space: normal;\n }\n}\n\n[data-component=\"markdown\"] a.external-link:hover > code {\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n","/* Synced from Mux frontend/src/pages/session/transcript/renderers/message-part.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n/* [data-component=\"assistant-message\"] {\n content-visibility: auto;\n} */\n[data-component=\"assistant-message\"] {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n\n [data-slot=\"assistant-message-actions\"] {\n min-height: 24px;\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n will-change: opacity;\n }\n\n &:hover [data-slot=\"assistant-message-actions\"],\n &:focus-within [data-slot=\"assistant-message-actions\"] {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n[data-component=\"user-message\"] {\n font-family: var(--font-family-sans);\n font-size: var(--font-size-base);\n font-style: normal;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n color: var(--text-strong);\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n align-self: stretch;\n width: 100%;\n max-width: 100%;\n gap: 0;\n\n [data-slot=\"user-message-attachments\"] {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 8px;\n width: fit-content;\n max-width: min(82%, 64ch);\n margin-left: auto;\n }\n\n [data-slot=\"user-message-attachment\"] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-width: 0;\n border-radius: 6px;\n overflow: hidden;\n background: var(--surface-weak);\n border: 1px solid var(--border-weak-base);\n cursor: default;\n transition:\n border-color 0.15s ease,\n opacity 0.3s ease;\n\n &:hover {\n border-color: var(--border-strong-base);\n }\n\n &[data-clickable] {\n cursor: pointer;\n }\n\n &[data-type=\"image\"] {\n width: 48px;\n height: 48px;\n }\n\n &[data-type=\"file\"] {\n width: min(220px, 100%);\n height: 48px;\n padding: 0 10px;\n }\n }\n\n [data-slot=\"user-message-attachment-image\"] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n [data-slot=\"user-message-attachment-file\"] {\n width: 100%;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n\n [data-component=\"file-icon\"] {\n width: 20px;\n height: 20px;\n flex: none;\n }\n }\n\n [data-slot=\"user-message-attachment-name\"] {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--text-base);\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n }\n\n [data-slot=\"user-message-body\"] {\n width: fit-content;\n max-width: min(82%, 64ch);\n margin-left: auto;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n [data-slot=\"user-message-attachments\"] + [data-slot=\"user-message-body\"] {\n margin-top: 8px;\n }\n\n [data-slot=\"user-message-text\"] {\n display: inline-block;\n white-space: pre-wrap;\n word-break: break-word;\n overflow: hidden;\n background: color-mix(in srgb, var(--surface-weak) 65%, transparent);\n border: 1px solid transparent;\n padding: 8px 12px;\n border-radius: 12px;\n\n [data-highlight=\"file\"] {\n color: var(--syntax-property);\n }\n\n [data-highlight=\"agent\"] {\n color: var(--syntax-type);\n }\n\n max-width: 100%;\n }\n\n [data-slot=\"user-message-copy-wrapper\"] {\n min-height: 24px;\n margin-top: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n width: 100%;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n will-change: opacity;\n\n [data-component=\"tooltip-trigger\"] {\n display: inline-flex;\n width: fit-content;\n }\n }\n\n [data-slot=\"user-message-meta\"] {\n user-select: none;\n text-align: right;\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n [data-slot=\"user-message-meta-wrap\"] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n overflow: hidden;\n gap: 0;\n }\n\n [data-slot=\"user-message-meta-tail\"] {\n user-select: none;\n flex: 0 0 auto;\n white-space: nowrap;\n text-align: right;\n }\n\n &:hover [data-slot=\"user-message-copy-wrapper\"],\n &:focus-within [data-slot=\"user-message-copy-wrapper\"] {\n opacity: 1;\n pointer-events: auto;\n }\n\n .text-text-strong {\n color: var(--text-strong);\n }\n\n .font-medium {\n font-weight: var(--font-weight-medium);\n }\n}\n\n[data-component=\"text-part\"] {\n width: 100%;\n margin-top: 24px;\n container-type: inline-size;\n container-name: text-part;\n\n [data-slot=\"text-part-body\"] {\n margin-top: 0;\n }\n\n [data-slot=\"text-part-copy-wrapper\"] {\n display: none;\n min-height: 24px;\n margin-top: 4px;\n align-items: center;\n justify-content: flex-start;\n gap: 10px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n will-change: opacity;\n\n &[data-active] {\n display: flex;\n }\n\n [data-component=\"tooltip-trigger\"] {\n display: inline-flex;\n width: fit-content;\n }\n }\n\n [data-slot=\"text-part-meta\"] {\n flex: 0 0 auto;\n white-space: nowrap;\n user-select: none;\n\n > span {\n flex: 0 0 auto;\n }\n }\n\n [data-slot=\"text-part-copy-wrapper\"][data-interrupted] {\n width: 100%;\n justify-content: flex-end;\n gap: 12px;\n }\n\n &:hover [data-slot=\"text-part-copy-wrapper\"],\n &:focus-within [data-slot=\"text-part-copy-wrapper\"] {\n opacity: 1;\n pointer-events: auto;\n }\n\n [data-component=\"markdown\"] {\n margin-top: 0;\n }\n}\n\n@container text-part (max-width: 44rem) {\n [data-slot=\"text-part-copy-wrapper\"] {\n gap: 8px;\n }\n\n [data-slot=\"text-part-meta\"] {\n gap: 4px;\n font-size: calc(var(--font-size-base) * 11 / 14);\n }\n}\n\n@container text-part (max-width: 32rem) {\n [data-slot=\"text-part-copy-wrapper\"] {\n gap: 6px;\n }\n\n [data-slot=\"text-part-meta\"] {\n gap: 3px;\n font-size: calc(var(--font-size-base) * 10 / 14);\n }\n}\n\n[data-component=\"compaction-part\"] {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n\n [data-slot=\"compaction-part-divider\"] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 0;\n width: 100%;\n }\n\n [data-slot=\"compaction-part-line\"] {\n flex: 1 1 auto;\n height: 1px;\n background: var(--border-weak-base);\n }\n\n [data-slot=\"compaction-part-label\"] {\n flex: 0 0 auto;\n white-space: nowrap;\n text-align: center;\n }\n\n [data-slot=\"compaction-part-toggle\"] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n min-height: 24px;\n padding: 0 6px;\n border-radius: var(--radius-md);\n color: inherit;\n cursor: pointer;\n user-select: none;\n\n &:hover,\n &:focus-visible {\n outline: none;\n background-color: var(--surface-raised-base-hover);\n color: var(--text-base);\n }\n }\n\n [data-slot=\"compaction-part-summary\"] {\n padding: 4px 0 8px;\n color: var(--text-weak);\n }\n}\n\n[data-component=\"reasoning-part\"] {\n width: 100%;\n color: var(--text-base);\n line-height: var(--line-height-normal);\n\n [data-component=\"markdown\"] {\n margin-top: 24px;\n font-style: normal;\n color: var(--text-weak);\n\n strong,\n b {\n color: var(--text-weak);\n }\n\n p:has(strong) {\n margin-top: 24px;\n margin-bottom: 0;\n\n &:first-child {\n margin-top: 0;\n }\n }\n }\n}\n\n@media (prefers-color-scheme: dark) {\n [data-component=\"reasoning-part\"]\n [data-component=\"markdown\"]\n :not(pre)\n > code {\n opacity: 0.6;\n }\n}\n\n[data-component=\"tool-output\"] {\n white-space: pre;\n padding: 0;\n margin-bottom: 24px;\n height: fit-content;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n [data-component=\"markdown\"] {\n width: 100%;\n min-width: 0;\n\n pre {\n margin: 0;\n padding: 0;\n background-color: transparent !important;\n border: none !important;\n }\n }\n\n pre {\n margin: 0;\n padding: 0;\n background: none;\n }\n\n &[data-scrollable] {\n height: auto;\n max-height: 240px;\n overflow-y: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n [data-component=\"markdown\"] {\n overflow: visible;\n }\n }\n}\n\n[data-component=\"bash-output\"] {\n width: 100%;\n border: 1px solid var(--border-weak-base);\n border-radius: 6px;\n background: transparent;\n position: relative;\n overflow: hidden;\n\n [data-slot=\"bash-copy\"] {\n position: absolute;\n top: 4px;\n right: 4px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n }\n\n &:hover [data-slot=\"bash-copy\"],\n &:focus-within [data-slot=\"bash-copy\"] {\n opacity: 1;\n pointer-events: auto;\n }\n\n [data-slot=\"bash-copy\"]\n [data-component=\"icon-button\"][data-variant=\"secondary\"] {\n box-shadow: none;\n border: 1px solid var(--border-weak-base);\n }\n\n [data-slot=\"bash-copy\"]\n [data-component=\"icon-button\"][data-variant=\"secondary\"]\n [data-slot=\"icon-svg\"] {\n color: var(--icon-base);\n }\n\n [data-slot=\"bash-scroll\"] {\n width: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 240px;\n\n scrollbar-width: none;\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n [data-slot=\"bash-pre\"] {\n margin: 0;\n padding: 12px;\n }\n\n [data-slot=\"bash-pre\"] code {\n font-family: var(--font-family-mono);\n font-feature-settings: var(--font-family-mono--font-feature-settings);\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n }\n}\n\n[data-component=\"tool-trigger\"][data-layout=\"activity-row\"]:has(\n [data-component=\"edit-trigger\"],\n [data-component=\"write-trigger\"]\n) > [data-slot=\"collapsible-arrow\"] {\n grid-column: 4;\n}\n\n[data-component=\"tool-trigger\"][data-layout=\"activity-row\"]:hover\n [data-slot=\"message-part-view-file\"],\n[data-component=\"tool-trigger\"][data-layout=\"activity-row\"]:focus-within\n [data-slot=\"message-part-view-file\"] {\n opacity: 1;\n}\n\n[data-component=\"edit-trigger\"],\n[data-component=\"write-trigger\"] {\n display: contents;\n\n [data-slot=\"message-part-title\"] {\n grid-column: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-base);\n font-style: normal;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n letter-spacing: var(--letter-spacing-normal);\n color: var(--text-base);\n }\n\n [data-slot=\"message-part-path\"] {\n grid-column: 2;\n display: flex;\n min-width: 0;\n overflow: hidden;\n font-weight: var(--font-weight-regular);\n }\n\n [data-slot=\"message-part-actions\"] {\n grid-column: 3;\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: flex-end;\n flex-shrink: 0;\n }\n\n [data-slot=\"message-part-actions\"] [data-component=\"diff-changes\"] {\n gap: 4px;\n\n [data-slot=\"diff-changes-additions\"],\n [data-slot=\"diff-changes-deletions\"] {\n min-width: 2ch;\n font-size: var(--font-size-small);\n }\n }\n\n [data-slot=\"message-part-view-file\"] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1px;\n border-radius: 4px;\n color: var(--text-base);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.15s ease;\n\n &:hover,\n &:focus-visible {\n color: var(--text-strong);\n background: var(--surface-base);\n outline: none;\n }\n }\n\n [data-slot=\"message-part-title-text\"] {\n flex-shrink: 0;\n text-transform: capitalize;\n color: var(--text-strong);\n }\n\n [data-slot=\"message-part-path\"] {\n display: flex;\n min-width: 0;\n overflow: hidden;\n font-weight: var(--font-weight-regular);\n }\n\n [data-slot=\"message-part-directory\"] {\n color: var(--text-weak);\n flex: 0 1 auto;\n min-width: 0;\n direction: rtl;\n text-align: left;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [data-slot=\"message-part-path-separator\"] {\n color: var(--text-weak);\n flex: 0 0 auto;\n }\n\n [data-slot=\"message-part-filename\"] {\n color: var(--text-strong);\n flex: 0 0 auto;\n white-space: nowrap;\n }\n}\n\n[data-component=\"edit-content\"],\n[data-component=\"write-content\"],\n[data-component=\"apply-patch-file-diff\"] {\n border-radius: inherit;\n max-height: calc(var(--session-viewport-height, 100dvh) * 0.6);\n overflow-x: hidden;\n overflow-y: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--border-weak-base) transparent;\n}\n\n[data-component=\"edit-content\"],\n[data-component=\"write-content\"] {\n border-top: 1px solid var(--border-weaker-base);\n}\n\n/* Expanded output belongs to the transcript's vertical scroll in the mobile\n layout, including landscape phones wider than 768px. clip, unlike hidden,\n does not create another scrolling container. */\n:where(html[data-mobile-layout]) [data-mobile-surface=\"session\"] {\n [data-component=\"edit-content\"],\n [data-component=\"write-content\"],\n [data-component=\"apply-patch-file-diff\"],\n [data-component=\"tool-output\"][data-scrollable],\n [data-slot=\"bash-scroll\"] {\n max-height: none;\n overflow-x: clip;\n overflow-y: visible;\n }\n}\n\n[data-component=\"tool-action\"] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n[data-component=\"exa-tool-output\"] {\n width: 100%;\n padding-top: 8px;\n display: flex;\n flex-direction: column;\n}\n\n[data-slot=\"basic-tool-tool-subtitle\"].exa-tool-query {\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n[data-slot=\"exa-tool-links\"] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n[data-slot=\"exa-tool-link\"] {\n display: block;\n max-width: 100%;\n color: var(--text-interactive-base);\n text-decoration: underline;\n text-underline-offset: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover {\n color: var(--text-interactive-base);\n }\n\n &:visited {\n color: var(--text-interactive-base);\n }\n}\n\n[data-slot=\"basic-tool-tool-title\"],\n[data-slot=\"context-tool-group-label\"] {\n min-width: 0;\n}\n\n:is([data-component=\"context-tool-group-trigger\"], [data-component=\"work-tool-group-trigger\"])[data-layout=\"activity-row\"] {\n width: fit-content;\n max-width: 100%;\n min-width: 0;\n min-height: 24px;\n display: grid;\n grid-template-columns: var(--activity-label-width) minmax(0, auto) auto auto;\n align-items: center;\n column-gap: 8px;\n cursor: default;\n\n [data-slot=\"context-tool-group-title\"] {\n display: contents;\n }\n\n [data-slot=\"context-tool-group-label\"] {\n grid-column: 1;\n }\n\n [data-slot=\"context-tool-group-summary\"] {\n grid-column: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n [data-slot=\"context-tool-group-budget\"],\n > [data-component=\"diff-changes\"] {\n grid-column: 3;\n }\n\n > [data-component=\"diff-changes\"] {\n margin-inline-start: 8px;\n gap: 4px;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n }\n\n > [data-slot=\"collapsible-arrow\"] {\n grid-column: 4;\n }\n\n &:not(:has([data-slot=\"context-tool-group-budget\"], [data-component=\"diff-changes\"]))\n > [data-slot=\"collapsible-arrow\"] {\n grid-column: 3;\n }\n\n [data-slot=\"collapsible-arrow\"] {\n color: var(--icon-weaker);\n cursor: pointer;\n }\n}\n\n[data-activity-group] > [data-slot=\"collapsible-content\"] > [data-component=\"context-tool-group-list\"] {\n --activity-label-width: calc(var(--font-size-base) * 72 / 14);\n padding: 4px 0 0 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n > [data-slot=\"context-tool-group-item\"] {\n min-width: 0;\n padding: 0;\n }\n\n > [data-slot=\"context-tool-group-item\"] > [data-component=\"tool-trigger\"] {\n min-height: 28px;\n align-items: center;\n }\n\n}\n\n[data-activity-group=\"single\"] > [data-slot=\"collapsible-content\"] > [data-component=\"context-tool-group-list\"] {\n --activity-label-width: max-content;\n padding: 0;\n gap: 0;\n}\n\n[data-component=\"diagnostics\"] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px 12px;\n background-color: var(--surface-critical-weak);\n border-top: 1px solid var(--border-critical-base);\n\n [data-slot=\"diagnostic\"] {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-family: var(--font-family-mono);\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n }\n}\n\n[data-component=\"user-message\"] [data-slot=\"user-message-text\"],\n[data-component=\"text-part\"],\n[data-component=\"reasoning-part\"],\n[data-component=\"tool-output\"],\n[data-component=\"bash-output\"],\n[data-component=\"edit-content\"],\n[data-component=\"write-content\"],\n[data-component=\"diagnostics\"],\n.error-card {\n -webkit-user-select: text;\n user-select: text;\n}\n\n[data-component=\"tool-part-wrapper\"] {\n width: 100%;\n}\n\n[data-component=\"dock-prompt\"][data-kind=\"permission\"] {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 0;\n min-height: 0;\n max-height: 100dvh;\n\n [data-slot=\"permission-header\"] {\n padding: 0;\n }\n\n [data-slot=\"permission-row\"] {\n display: grid;\n grid-template-columns: 20px 1fr;\n column-gap: 8px;\n align-items: start;\n }\n\n [data-slot=\"permission-row\"][data-variant=\"header\"] {\n align-items: center;\n }\n\n [data-slot=\"permission-icon\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n [data-slot=\"permission-icon\"] [data-component=\"icon\"] {\n color: var(--icon-warning-base);\n }\n\n [data-slot=\"permission-header-title\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n color: var(--text-strong);\n min-width: 0;\n }\n\n [data-slot=\"permission-hint\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n color: var(--text-weak);\n padding: 0;\n }\n\n [data-slot=\"permission-patterns\"] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 8px;\n margin-bottom: 16px;\n padding: 1px 0 8px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n code {\n font-size: 14px;\n line-height: var(--line-height-large);\n }\n }\n\n [data-slot=\"permission-footer\"] {\n display: flex;\n flex-shrink: 0;\n padding: 32px 8px 8px;\n margin-top: -24px;\n }\n\n [data-slot=\"permission-footer-actions\"] {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n gap: 8px;\n\n [data-component=\"button\"] {\n padding-left: 12px;\n padding-right: 12px;\n }\n }\n}\n\n[data-component=\"dock-prompt\"][data-kind=\"question\"] {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 0;\n min-height: 0;\n max-height: var(--question-prompt-max-height, 100dvh);\n\n [data-slot=\"question-header\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 0 10px;\n }\n\n [data-slot=\"question-header-title\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n color: var(--text-strong);\n min-width: 0;\n }\n\n [data-slot=\"question-progress\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n [data-slot=\"question-progress-segment\"] {\n width: 16px;\n height: 16px;\n padding: 0;\n border: 0;\n background: transparent;\n border-radius: 999px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n touch-action: manipulation;\n\n &::after {\n content: \"\";\n width: 16px;\n height: 2px;\n border-radius: 999px;\n background-color: var(--icon-weak-base);\n transition: background-color 0.2s ease;\n }\n\n &[data-active=\"true\"]::after {\n background-color: var(--icon-strong-base);\n }\n\n &[data-answered=\"true\"]::after {\n background-color: var(--icon-interactive-base);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n }\n\n [data-slot=\"question-text\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n color: var(--text-strong);\n padding: 0 10px;\n }\n\n [data-slot=\"question-hint\"] {\n font-family: var(--font-family-sans);\n font-size: 13px;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n color: var(--text-weak);\n padding: 0 10px;\n }\n\n [data-slot=\"question-options\"] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 12px;\n padding: 1px 1px 8px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n [data-slot=\"question-option\"] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 8px 8px 8px 10px;\n background-color: var(--surface-raised-stronger-non-alpha);\n border: 1px solid var(--border-weak-base);\n border-radius: 6px;\n box-shadow: none;\n text-align: left;\n width: 100%;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease,\n box-shadow 0.15s ease;\n\n &:hover:not([data-picked=\"true\"]) {\n background-color: var(--background-base);\n }\n\n &[data-picked=\"true\"] {\n background-color: var(--surface-interactive-weak);\n border-color: transparent;\n box-shadow: var(--shadow-xs-border-hover);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n }\n\n [data-slot=\"question-option-check\"] {\n display: inline-flex;\n transform: translateY(2px);\n }\n\n [data-slot=\"question-option-box\"] {\n width: 16px;\n height: 16px;\n padding: 2px;\n border-radius: var(--radius-sm);\n border: 1px solid var(--border-weak-base);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background-color: transparent;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n\n [data-component=\"icon\"] {\n opacity: 0;\n color: var(--icon-base);\n }\n\n &[data-type=\"radio\"] {\n border-radius: 999px;\n }\n\n [data-slot=\"question-option-radio-dot\"] {\n width: 6px;\n height: 6px;\n border-radius: 999px;\n background-color: var(--background-stronger);\n opacity: 0;\n }\n\n &[data-picked=\"true\"] {\n border-color: var(--icon-interactive-base);\n\n [data-component=\"icon\"] {\n opacity: 1;\n color: var(--icon-invert-base);\n }\n\n &[data-type=\"checkbox\"] {\n background-color: var(--icon-interactive-base);\n }\n\n &[data-type=\"radio\"] {\n background-color: var(--icon-interactive-base);\n [data-slot=\"question-option-radio-dot\"] {\n opacity: 1;\n }\n }\n }\n }\n\n [data-slot=\"question-option-main\"] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n }\n\n [data-slot=\"option-label\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n color: var(--text-strong);\n }\n\n [data-slot=\"option-description\"] {\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n color: var(--text-base);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n [data-slot=\"question-option\"][data-custom=\"true\"] {\n [data-slot=\"option-description\"] {\n overflow: visible;\n text-overflow: clip;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n }\n\n [data-slot=\"question-custom\"] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n [data-slot=\"question-custom-input\"] {\n width: 100%;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n box-shadow: none;\n outline: none;\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n color: var(--text-base);\n min-width: 0;\n cursor: text;\n resize: none;\n overflow: hidden;\n overflow-wrap: anywhere;\n\n &::placeholder {\n color: var(--text-weak);\n }\n\n &:focus-visible {\n outline: 1px solid var(--border-interactive-base);\n outline-offset: 2px;\n border-radius: var(--radius-xs);\n }\n\n &:disabled {\n opacity: 0.6;\n }\n }\n\n [data-slot=\"question-footer\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n padding: 32px 8px 8px;\n margin-top: -24px;\n }\n\n [data-slot=\"question-footer-actions\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n}\n\n[data-component=\"question-answers\"] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 8px 0;\n\n [data-slot=\"question-answer-item\"] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: var(--font-size-small);\n\n [data-slot=\"question-text\"] {\n color: var(--text-weak);\n }\n\n [data-slot=\"answer-text\"] {\n color: var(--text-strong);\n }\n }\n}\n\n[data-component=\"edit-tool\"],\n[data-component=\"write-tool\"],\n[data-component=\"apply-patch-tool\"] {\n > [data-component=\"collapsible\"].tool-collapsible {\n gap: 0px;\n }\n\n > [data-component=\"collapsible\"] > [data-slot=\"collapsible-content\"] {\n border: none;\n background: transparent;\n }\n\n > [data-component=\"collapsible\"] > [data-slot=\"collapsible-trigger\"] {\n min-height: 28px;\n height: auto;\n padding-bottom: 0;\n }\n\n > [data-component=\"collapsible\"]\n > [data-slot=\"collapsible-trigger\"][aria-expanded=\"true\"] {\n z-index: 20;\n background-color: var(--background-stronger);\n }\n}\n\n[data-component=\"accordion\"][data-scope=\"apply-patch\"] {\n [data-slot=\"accordion-trigger\"] {\n background-color: var(--background-stronger) !important;\n }\n\n [data-slot=\"apply-patch-trigger-content\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 20px;\n }\n\n [data-slot=\"apply-patch-file-info\"] {\n flex-grow: 1;\n display: flex;\n align-items: center;\n gap: 20px;\n min-width: 0;\n }\n\n [data-slot=\"apply-patch-file-name-container\"] {\n display: flex;\n flex-grow: 1;\n min-width: 0;\n }\n\n [data-slot=\"apply-patch-directory\"] {\n color: var(--text-base);\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [data-slot=\"apply-patch-filename\"] {\n color: var(--text-strong);\n flex-shrink: 0;\n }\n\n [data-slot=\"apply-patch-trigger-actions\"] {\n flex-shrink: 0;\n display: flex;\n gap: 16px;\n align-items: center;\n justify-content: flex-end;\n }\n\n [data-slot=\"apply-patch-change\"] {\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-medium);\n }\n\n [data-slot=\"apply-patch-change\"][data-type=\"added\"] {\n color: var(--icon-diff-add-base);\n }\n\n [data-slot=\"apply-patch-change\"][data-type=\"removed\"] {\n color: var(--icon-diff-delete-base);\n }\n\n [data-slot=\"apply-patch-change\"][data-type=\"modified\"] {\n color: var(--icon-diff-modified-base);\n }\n}\n\n[data-component=\"tool-loaded-file\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0 4px 28px;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height-large);\n color: var(--text-weak);\n\n [data-component=\"icon\"] {\n flex-shrink: 0;\n color: var(--icon-weak);\n }\n}\n","/* Synced from Mux frontend/src/pages/session/transcript/renderers/session-turn.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n/* Scope the existing typography tokens to transcript rows, not the header,\n composer, file tabs, or portalled menus. Shared renderers inherit this scale. */\n[data-component=\"message-timeline\"] [data-component=\"session-turn\"] {\n --font-size-base: var(--chat-font-size, 14px);\n --font-size-small: calc(var(--font-size-base) * 13 / 14);\n --font-size-large: calc(var(--font-size-base) * 16 / 14);\n --font-size-x-large: calc(var(--font-size-base) * 20 / 14);\n --markdown-font-size: var(--font-size-base);\n --file-font-size: var(--font-size-base);\n font-size: var(--font-size-base);\n}\n\n[data-component=\"session-turn\"] {\n --sticky-header-height: calc(var(--session-title-height, 0px) + 24px);\n height: 100%;\n min-height: 0;\n min-width: 0;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n\n [data-slot=\"session-turn-message-container\"] {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n min-width: 0;\n gap: 18px;\n overflow-anchor: none;\n }\n\n [data-slot=\"session-turn-message-content\"] {\n margin-top: 0;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n }\n\n [data-slot=\"session-turn-compaction\"] {\n width: 100%;\n min-width: 0;\n align-self: stretch;\n }\n\n [data-slot=\"session-turn-thinking\"][data-layout=\"activity-row\"] {\n display: grid;\n grid-template-columns: var(--activity-label-width) minmax(0, 1fr) auto auto;\n align-items: baseline;\n column-gap: 8px;\n width: 100%;\n min-width: 0;\n color: var(--text-weak);\n font-family: var(--font-family-sans);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-large);\n min-height: 20px;\n\n [data-slot=\"activity-row-label\"] {\n grid-column: 1;\n min-width: 0;\n }\n\n .session-turn-thinking-heading {\n grid-column: 2;\n }\n\n [data-component=\"spinner\"] {\n width: 16px;\n height: 16px;\n }\n }\n\n .session-turn-thinking-heading {\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n color: var(--text-weaker);\n font-weight: var(--font-weight-regular);\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .error-card {\n color: var(--text-on-critical-base);\n max-height: 240px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n overflow-y: auto;\n }\n\n [data-slot=\"session-turn-assistant-content\"] {\n width: 100%;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n gap: 12px;\n\n > :first-child > [data-component=\"markdown\"]:first-child {\n margin-top: 0;\n }\n }\n}\n","/* Synced from Mux frontend/src/ui/components/spinner.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-component=\"spinner\"] {\n color: inherit;\n flex-shrink: 0;\n width: 18px;\n aspect-ratio: 1;\n}\n","/* Synced from Mux frontend/src/ui/components/text-shimmer.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-component=\"text-shimmer\"] {\n --text-shimmer-step: 45ms;\n --text-shimmer-duration: 1200ms;\n --text-shimmer-swap: 220ms;\n --text-shimmer-index: 0;\n --text-shimmer-angle: 90deg;\n --text-shimmer-spread: 5.2ch;\n --text-shimmer-size: 360%;\n --text-shimmer-base-color: var(--text-weak);\n --text-shimmer-peak-color: var(--text-strong);\n --text-shimmer-sweep: linear-gradient(\n var(--text-shimmer-angle),\n transparent calc(50% - var(--text-shimmer-spread)),\n var(--text-shimmer-peak-color) 50%,\n transparent calc(50% + var(--text-shimmer-spread))\n );\n --text-shimmer-base: linear-gradient(var(--text-shimmer-base-color), var(--text-shimmer-base-color));\n\n display: inline-flex;\n align-items: baseline;\n font: inherit;\n letter-spacing: inherit;\n line-height: inherit;\n}\n\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char\"] {\n display: inline-grid;\n white-space: pre;\n font: inherit;\n letter-spacing: inherit;\n line-height: inherit;\n}\n\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-base\"],\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n grid-area: 1 / 1;\n white-space: pre;\n transition: opacity var(--text-shimmer-swap) ease-out;\n font: inherit;\n letter-spacing: inherit;\n line-height: inherit;\n}\n\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-base\"] {\n color: inherit;\n opacity: 1;\n}\n\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n color: var(--text-weaker);\n opacity: 0;\n}\n\n[data-component=\"text-shimmer\"][data-active=\"true\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n opacity: 1;\n}\n\n[data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"][data-run=\"true\"] {\n animation-name: text-shimmer-sweep;\n animation-duration: var(--text-shimmer-duration);\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: both;\n animation-delay: calc(var(--text-shimmer-step) * var(--text-shimmer-index) * -1);\n will-change: background-position;\n}\n\n@keyframes text-shimmer-sweep {\n 0% {\n background-position:\n 100% 0,\n 0 0;\n }\n\n 100% {\n background-position:\n 0% 0,\n 0 0;\n }\n}\n\n@supports ((-webkit-background-clip: text) or (background-clip: text)) {\n [data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n color: transparent;\n -webkit-text-fill-color: transparent;\n background-image: var(--text-shimmer-sweep), var(--text-shimmer-base);\n background-size:\n var(--text-shimmer-size) 100%,\n 100% 100%;\n background-position:\n 100% 0,\n 0 0;\n background-repeat: no-repeat;\n -webkit-background-clip: text;\n background-clip: text;\n }\n\n [data-component=\"text-shimmer\"][data-active=\"true\"] [data-slot=\"text-shimmer-char-base\"] {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n [data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-base\"],\n [data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n transition-duration: 0ms;\n }\n\n [data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-shimmer\"] {\n animation: none !important;\n color: inherit;\n -webkit-text-fill-color: currentColor;\n background-image: none;\n }\n\n [data-component=\"text-shimmer\"] [data-slot=\"text-shimmer-char-base\"] {\n opacity: 1 !important;\n }\n}\n","/* Synced from Mux frontend/src/ui/styles/theme.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n:host {\n --font-family-sans: \"Inter\", \"Inter Fallback\";\n --font-family-sans--font-feature-settings: \"ss03\" 1;\n --font-family-mono: \"IBM Plex Mono\", \"IBM Plex Mono Fallback\";\n --font-family-mono--font-feature-settings: \"ss01\" 1;\n\n --font-size-small: 13px;\n --font-size-base: 14px;\n --font-size-large: 16px;\n --font-size-x-large: 20px;\n --font-weight-regular: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --line-height-normal: 130%;\n --line-height-large: 150%;\n --line-height-x-large: 180%;\n --line-height-2x-large: 200%;\n --letter-spacing-normal: 0;\n --letter-spacing-tight: -0.16px;\n --letter-spacing-tightest: -0.32px;\n --paragraph-spacing-base: 0;\n\n --spacing: 0.25rem;\n\n /* Label track for transcript activity rows (tool/thinking/context triggers).\n Content-sized, so each label sits one 8px gap from its detail text.\n Set a fixed length here to align column 2 across rows instead. */\n --activity-label-width: max-content;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.625rem;\n\n --shadow-xs:\n 0 1px 2px -0.5px light-dark(hsl(0 0% 0% / 0.04), hsl(0 0% 0% / 0.06)),\n 0 0.5px 1.5px 0 light-dark(hsl(0 0% 0% / 0.025), hsl(0 0% 0% / 0.08)),\n 0 1px 3px 0 light-dark(hsl(0 0% 0% / 0.05), hsl(0 0% 0% / 0.1));\n --shadow-sm:\n 0 1px 3px 0 light-dark(hsl(0 0% 0% / 0.06), hsl(0 0% 0% / 0.12)),\n 0 1px 2px -1px light-dark(hsl(0 0% 0% / 0.06), hsl(0 0% 0% / 0.12));\n --shadow-md:\n 0 6px 12px -2px light-dark(hsl(0 0% 0% / 0.075), hsl(0 0% 0% / 0.1)),\n 0 4px 8px -2px light-dark(hsl(0 0% 0% / 0.075), hsl(0 0% 0% / 0.15)),\n 0 1px 2px light-dark(hsl(0 0% 0% / 0.1), hsl(0 0% 0% / 0.15));\n --shadow-lg:\n 0 16px 48px -6px light-dark(hsl(0 0% 0% / 0.05), hsl(0 0% 0% / 0.15)),\n 0 6px 12px -2px light-dark(hsl(0 0% 0% / 0.025), hsl(0 0% 0% / 0.1)),\n 0 1px 2.5px light-dark(hsl(0 0% 0% / 0.025), hsl(0 0% 0% / 0.1));\n --shadow-xl:\n 0 24px 64px -12px light-dark(hsl(0 0% 0% / 0.12), hsl(0 0% 0% / 0.4)),\n 0 8px 20px -6px light-dark(hsl(0 0% 0% / 0.06), hsl(0 0% 0% / 0.2));\n --shadow-xxs-border: 0 0 0 0.5px var(--border-weak-base, rgba(0, 0, 0, 0.07));\n --shadow-xs-border:\n 0 0 0 1px var(--border-base, rgba(11, 6, 0, 0.2)), 0 1px 2px -1px rgba(19, 16, 16, 0.04),\n 0 1px 2px 0 rgba(19, 16, 16, 0.06), 0 1px 3px 0 rgba(19, 16, 16, 0.08);\n --shadow-xs-border-base:\n 0 0 0 1px var(--border-weak-base, rgba(17, 0, 0, 0.12)), 0 1px 2px -1px rgba(19, 16, 16, 0.04),\n 0 1px 2px 0 rgba(19, 16, 16, 0.06), 0 1px 3px 0 rgba(19, 16, 16, 0.08);\n --shadow-xs-border-select:\n 0 0 0 3px var(--border-weak-selected, rgba(1, 103, 255, 0.29)),\n 0 0 0 1px var(--border-selected, rgba(0, 74, 255, 0.99)), 0 1px 2px -1px rgba(19, 16, 16, 0.25),\n 0 1px 2px 0 rgba(19, 16, 16, 0.08), 0 1px 3px 0 rgba(19, 16, 16, 0.12);\n --shadow-xs-border-focus:\n 0 0 0 1px var(--border-base, rgba(11, 6, 0, 0.2)), 0 1px 2px -1px rgba(19, 16, 16, 0.25),\n 0 1px 2px 0 rgba(19, 16, 16, 0.08), 0 1px 3px 0 rgba(19, 16, 16, 0.12), 0 0 0 2px var(--background-weak, #f1f0f0),\n 0 0 0 3px var(--border-selected, rgba(0, 74, 255, 0.99));\n --shadow-xs-border-hover:\n 0 0 0 1px var(--border-weak-selected, rgba(0, 112, 255, 0.22)), 0 1px 2px -1px rgba(19, 16, 16, 0.04),\n 0 1px 2px 0 rgba(19, 16, 16, 0.06), 0 1px 3px 0 rgba(19, 16, 16, 0.08);\n --shadow-xs-border-critical-base: 0 0 0 1px var(--border-critical-selected, #fc543a);\n --shadow-xs-border-critical-focus:\n 0 0 0 3px var(--border-critical-weak, rgba(251, 34, 0, 0.18)), 0 0 0 1px var(--border-critical-selected, #fc543a),\n 0 1px 2px -1px rgba(19, 16, 16, 0.25), 0 1px 2px 0 rgba(19, 16, 16, 0.08), 0 1px 3px 0 rgba(19, 16, 16, 0.12);\n --shadow-lg-border-base:\n 0 0 0 1px var(--border-weak-base, rgba(0, 0, 0, 0.07)), 0 36px 80px 0 rgba(0, 0, 0, 0.03),\n 0 13.141px 29.201px 0 rgba(0, 0, 0, 0.04), 0 6.38px 14.177px 0 rgba(0, 0, 0, 0.05),\n 0 3.127px 6.95px 0 rgba(0, 0, 0, 0.06), 0 1.237px 2.748px 0 rgba(0, 0, 0, 0.09);\n\n color-scheme: light;\n --text-mix-blend-mode: multiply;\n\n /* OC-2 fallback variables (light) */\n --background-base: #f8f8f8;\n --background-weak: #f3f3f3;\n --background-strong: #fcfcfc;\n --background-stronger: #fcfcfc;\n --surface-base: rgba(0, 0, 0, 0.031);\n --base: rgba(0, 0, 0, 0.034);\n --surface-base-hover: rgba(0, 0, 0, 0.059);\n --surface-base-active: rgba(0, 0, 0, 0.051);\n --surface-base-interactive-active: rgba(3, 76, 255, 0.09);\n --base2: rgba(0, 0, 0, 0.034);\n --base3: rgba(0, 0, 0, 0.034);\n --surface-inset-base: rgba(0, 0, 0, 0.034);\n --surface-inset-base-hover: rgba(0, 0, 0, 0.055);\n --surface-inset-strong: rgba(0, 0, 0, 0.09);\n --surface-inset-strong-hover: rgba(0, 0, 0, 0.09);\n --surface-raised-base: rgba(0, 0, 0, 0.031);\n --surface-float-base: #161616;\n --surface-float-base-hover: #1c1c1c;\n --surface-raised-base-hover: rgba(0, 0, 0, 0.051);\n --surface-raised-base-active: rgba(0, 0, 0, 0.09);\n --surface-raised-strong: #fcfcfc;\n --surface-raised-strong-hover: #ffffff;\n --surface-raised-stronger: #ffffff;\n --surface-raised-stronger-hover: #ffffff;\n --surface-weak: rgba(0, 0, 0, 0.051);\n --surface-weaker: rgba(0, 0, 0, 0.071);\n --surface-strong: #ffffff;\n --surface-stronger-non-alpha: var(--surface-raised-stronger-non-alpha);\n --surface-raised-stronger-non-alpha: #ffffff;\n --surface-panel: var(--surface-raised-stronger-non-alpha);\n --surface-panel-base: var(--surface-raised-stronger-non-alpha);\n --surface-brand-base: #dcde8d;\n --surface-brand-hover: #d0d283;\n --surface-interactive-base: #ecf3ff;\n --surface-interactive-hover: #e0eaff;\n --surface-interactive-weak: #f7faff;\n --surface-interactive-weak-hover: #ecf3ff;\n --surface-success-base: #dbfed7;\n --surface-success-weak: #f0feee;\n --surface-success-strong: #12c905;\n --surface-warning-base: #fcf3cb;\n --surface-warning-weak: #fdfaec;\n --surface-warning-strong: #fbdd46;\n --surface-critical-base: #fff2f0;\n --surface-critical-weak: #fff8f6;\n --surface-critical-strong: #fc533a;\n --surface-info-base: #fdecfe;\n --surface-info-weak: #fef7ff;\n --surface-info-strong: #a753ae;\n --surface-diff-unchanged-base: #ffffff00;\n --surface-diff-skip-base: #f8f8f8;\n --surface-diff-hidden-base: #eaf4ff;\n --surface-diff-hidden-weak: #f6faff;\n --surface-diff-hidden-weaker: #fbfdff;\n --surface-diff-hidden-strong: #cae3ff;\n --surface-diff-hidden-stronger: #2090f5;\n --surface-diff-add-base: #e3fae1;\n --surface-diff-add-weak: #f4fcf3;\n --surface-diff-add-weaker: #fbfefb;\n --surface-diff-add-strong: #c2eebf;\n --surface-diff-add-stronger: #9ff29a;\n --surface-diff-delete-base: #feefeb;\n --surface-diff-delete-weak: #fff8f6;\n --surface-diff-delete-weaker: #fffcfb;\n --surface-diff-delete-strong: #fdc3b7;\n --surface-diff-delete-stronger: #fc533a;\n --input-base: #fcfcfc;\n --input-hover: #f8f8f8;\n --input-active: #fcfdff;\n --input-selected: #e0eaff;\n --input-focus: #fcfdff;\n --input-disabled: #ededed;\n --text-base: #6f6f6f;\n --text-weak: #8f8f8f;\n --text-weaker: #c7c7c7;\n --text-strong: #171717;\n --text-invert-base: #f8f8f8;\n --text-invert-weak: #f3f3f3;\n --text-invert-weaker: #ededed;\n --text-invert-strong: #fcfcfc;\n --text-interactive-base: #034cff;\n --text-subtle: var(--text-weak);\n --accent: var(--text-interactive-base);\n --accent-base: var(--text-interactive-base);\n --danger-base: #ed4831;\n --danger-muted: rgba(237, 72, 49, 0.12);\n --text-danger-base: var(--danger-base);\n --text-text-danger-base: var(--danger-base);\n --text-on-brand-base: rgba(0, 0, 0, 0.574);\n --text-on-interactive-base: #fcfcfc;\n --text-on-interactive-weak: rgba(0, 0, 0, 0.574);\n --text-on-success-base: #2dba26;\n --text-on-critical-base: #ed4831;\n --text-on-critical-weak: #fe806a;\n --text-on-critical-strong: #601a0f;\n --text-on-warning-base: rgba(0, 0, 0, 0.574);\n --text-on-info-base: rgba(0, 0, 0, 0.574);\n --text-diff-add-base: #3a8437;\n --text-diff-delete-base: #ed4831;\n --text-diff-delete-strong: #601a0f;\n --text-diff-add-strong: #1d3e1c;\n --text-on-info-weak: rgba(0, 0, 0, 0.453);\n --text-on-info-strong: rgba(0, 0, 0, 0.915);\n --text-on-warning-weak: rgba(0, 0, 0, 0.453);\n --text-on-warning-strong: rgba(0, 0, 0, 0.915);\n --text-on-success-weak: #96ec8e;\n --text-on-success-strong: #044202;\n --text-on-brand-weak: rgba(0, 0, 0, 0.453);\n --text-on-brand-weaker: rgba(0, 0, 0, 0.232);\n --text-on-brand-strong: rgba(0, 0, 0, 0.915);\n --button-primary-base: #171717;\n --button-secondary-base: #fcfcfc;\n --button-secondary-hover: #f8f8f8;\n --button-ghost-hover: rgba(0, 0, 0, 0.031);\n --button-ghost-hover2: rgba(0, 0, 0, 0.051);\n --border-base: rgba(0, 0, 0, 0.162);\n --border-hover: rgba(0, 0, 0, 0.236);\n --border-active: rgba(0, 0, 0, 0.46);\n --border-selected: rgba(3, 76, 255, 0.99);\n --border-disabled: rgba(0, 0, 0, 0.236);\n --border-focus: rgba(0, 0, 0, 0.46);\n --border-weak-base: #e5e5e5;\n --border-strong-base: rgba(0, 0, 0, 0.151);\n --border-strong-hover: rgba(0, 0, 0, 0.232);\n --border-strong-active: rgba(0, 0, 0, 0.151);\n --border-strong-selected: rgba(3, 76, 255, 0.31);\n --border-strong-disabled: rgba(0, 0, 0, 0.118);\n --border-strong-focus: rgba(0, 0, 0, 0.151);\n --border-weak-hover: rgba(0, 0, 0, 0.118);\n --border-weak-active: rgba(0, 0, 0, 0.151);\n --border-weak-selected: rgba(3, 76, 255, 0.24);\n --border-weak-disabled: rgba(0, 0, 0, 0.118);\n --border-weak-focus: rgba(0, 0, 0, 0.151);\n --border-weaker-base: #f0f0f0;\n --border-weaker-hover: rgba(0, 0, 0, 0.075);\n --border-weaker-active: rgba(0, 0, 0, 0.118);\n --border-weaker-selected: rgba(3, 76, 255, 0.16);\n --border-weaker-disabled: rgba(0, 0, 0, 0.034);\n --border-weaker-focus: rgba(0, 0, 0, 0.118);\n --border-interactive-base: #a3c1fd;\n --border-interactive-hover: #7ea9ff;\n --border-interactive-active: #034cff;\n --border-interactive-selected: #034cff;\n --border-interactive-disabled: #c7c7c7;\n --border-interactive-focus: #034cff;\n --border-success-base: #96ec8e;\n --border-success-hover: #7add71;\n --border-success-selected: #12c905;\n --border-warning-base: #e8d479;\n --border-warning-hover: #d8c158;\n --border-warning-selected: #fbdd46;\n --border-critical-base: #fdc3b7;\n --border-critical-hover: #ffa796;\n --border-critical-selected: #fc533a;\n --border-info-base: #f4bdf8;\n --border-info-hover: #e6a8ea;\n --border-info-selected: #a753ae;\n --border-color: #ffffff;\n --icon-base: #8f8f8f;\n --icon-hover: #6f6f6f;\n --icon-active: #171717;\n --icon-selected: #171717;\n --icon-disabled: #c7c7c7;\n --icon-focus: #171717;\n --icon-invert-base: #ffffff;\n --icon-weak-base: #dbdbdb;\n --icon-weak-hover: #c7c7c7;\n --icon-weak-active: #8f8f8f;\n --icon-weak-selected: #858585;\n --icon-weak-disabled: #e2e2e2;\n --icon-weak-focus: #8f8f8f;\n --icon-strong-base: #171717;\n --icon-strong-hover: #151313;\n --icon-strong-active: #020202;\n --icon-strong-selected: #020202;\n --icon-strong-disabled: #c7c7c7;\n --icon-strong-focus: #020202;\n --icon-brand-base: #171717;\n --icon-interactive-base: #034cff;\n --icon-success-base: #7add71;\n --icon-success-hover: #4cc944;\n --icon-success-active: #078901;\n --icon-warning-base: #ebb76e;\n --icon-warning-hover: #da9e40;\n --icon-warning-active: #95671b;\n --icon-critical-base: #ed4831;\n --icon-critical-hover: #ca2d17;\n --icon-critical-active: #601a0f;\n --icon-info-base: #e6a8ea;\n --icon-info-hover: #d58cda;\n --icon-info-active: #9b4da1;\n --icon-on-brand-base: rgba(0, 0, 0, 0.574);\n --icon-on-brand-hover: rgba(0, 0, 0, 0.915);\n --icon-on-brand-selected: rgba(0, 0, 0, 0.915);\n --icon-on-interactive-base: #fcfcfc;\n --icon-agent-plan-base: #a753ae;\n --icon-agent-docs-base: #fcb239;\n --icon-agent-ask-base: #2090f5;\n --icon-agent-build-base: #034cff;\n --icon-on-success-base: rgba(18, 201, 5, 0.9);\n --icon-on-success-hover: rgba(45, 186, 38, 0.9);\n --icon-on-success-selected: rgba(7, 137, 1, 0.9);\n --icon-on-warning-base: rgba(252, 178, 57, 0.9);\n --icon-on-warning-hover: rgba(239, 167, 46, 0.9);\n --icon-on-warning-selected: rgba(149, 103, 27, 0.9);\n --icon-on-critical-base: rgba(252, 83, 58, 0.9);\n --icon-on-critical-hover: rgba(237, 72, 49, 0.9);\n --icon-on-critical-selected: rgba(202, 45, 23, 0.9);\n --icon-on-info-base: #a753ae;\n --icon-on-info-hover: rgba(155, 73, 162, 0.9);\n --icon-on-info-selected: rgba(155, 77, 161, 0.9);\n --icon-diff-add-base: #3a8437;\n --icon-diff-add-hover: #1d3e1c;\n --icon-diff-add-active: #1d3e1c;\n --icon-diff-delete-base: #ed4831;\n --icon-diff-delete-hover: #ca2d17;\n --icon-diff-modified-base: #ff8c00;\n --syntax-comment: var(--text-weak);\n --syntax-regexp: var(--text-base);\n --syntax-string: #006656;\n --syntax-keyword: var(--text-weak);\n --syntax-primitive: #fb4804;\n --syntax-operator: var(--text-base);\n --syntax-variable: var(--text-strong);\n --syntax-property: #ed6dc8;\n --syntax-type: #596600;\n --syntax-constant: #007b80;\n --syntax-punctuation: var(--text-base);\n --syntax-object: var(--text-strong);\n --syntax-success: #2dba26;\n --syntax-warning: #efa72e;\n --syntax-critical: #ed4831;\n --syntax-info: #0092a8;\n --syntax-diff-add: #3a8437;\n --syntax-diff-delete: #ca2d17;\n --syntax-diff-unknown: #ff0000;\n --markdown-heading: #d68c27;\n --markdown-text: #1a1a1a;\n --markdown-link: #3b7dd8;\n --markdown-link-text: #318795;\n --markdown-code: #3d9a57;\n --markdown-block-quote: #b0851f;\n --markdown-emph: #b0851f;\n --markdown-strong: #d68c27;\n --markdown-horizontal-rule: #8a8a8a;\n --markdown-list-item: #3b7dd8;\n --markdown-list-enumeration: #318795;\n --markdown-image: #3b7dd8;\n --markdown-image-text: #318795;\n --markdown-code-block: #1a1a1a;\n --avatar-background-pink: #feeef8;\n --avatar-background-mint: #e1fbf4;\n --avatar-background-orange: #fff1e7;\n --avatar-background-purple: #f9f1fe;\n --avatar-background-cyan: #e7f9fb;\n --avatar-background-lime: #eefadc;\n --avatar-text-pink: #cd1d8d;\n --avatar-text-mint: #147d6f;\n --avatar-text-orange: #ed5f00;\n --avatar-text-purple: #8445bc;\n --avatar-text-cyan: #0894b3;\n --avatar-text-lime: #5d770d;\n --text-stronger: #171717;\n\n\n}\n\n@media (prefers-color-scheme: dark) {\n :host(:not([data-theme=\"light\"])) {\n color-scheme: dark;\n --text-mix-blend-mode: plus-lighter;\n\n /* OC-2 fallback variables (dark) */\n --background-base: #101010;\n --background-weak: #1e1e1e;\n --background-strong: #121212;\n --background-stronger: #151515;\n --surface-base: rgba(255, 255, 255, 0.031);\n --base: rgba(255, 255, 255, 0.034);\n --surface-base-hover: rgba(255, 255, 255, 0.039);\n --surface-base-active: rgba(255, 255, 255, 0.059);\n --surface-base-interactive-active: rgba(3, 76, 255, 0.125);\n --base2: rgba(255, 255, 255, 0.034);\n --base3: rgba(255, 255, 255, 0.034);\n --surface-inset-base: rgba(0, 0, 0, 0.5);\n --surface-inset-base-hover: rgba(0, 0, 0, 0.5);\n --surface-inset-strong: rgba(0, 0, 0, 0.8);\n --surface-inset-strong-hover: rgba(0, 0, 0, 0.8);\n --surface-raised-base: rgba(255, 255, 255, 0.059);\n --surface-float-base: #161616;\n --surface-float-base-hover: #1c1c1c;\n --surface-raised-base-hover: rgba(255, 255, 255, 0.078);\n --surface-raised-base-active: rgba(255, 255, 255, 0.102);\n --surface-raised-strong: rgba(255, 255, 255, 0.078);\n --surface-raised-strong-hover: rgba(255, 255, 255, 0.129);\n --surface-raised-stronger: rgba(255, 255, 255, 0.129);\n --surface-raised-stronger-hover: rgba(255, 255, 255, 0.169);\n --surface-weak: rgba(255, 255, 255, 0.078);\n --surface-weaker: rgba(255, 255, 255, 0.102);\n --surface-strong: rgba(255, 255, 255, 0.169);\n --surface-stronger-non-alpha: var(--surface-raised-stronger-non-alpha);\n --surface-raised-stronger-non-alpha: #1c1c1c;\n --surface-panel: var(--surface-raised-stronger-non-alpha);\n --surface-panel-base: var(--surface-raised-stronger-non-alpha);\n --surface-brand-base: #fab283;\n --surface-brand-hover: #eda779;\n --surface-interactive-base: #091f52;\n --surface-interactive-hover: #091f52;\n --surface-interactive-weak: #0b1730;\n --surface-interactive-weak-hover: #ecf3ff;\n --surface-success-base: #062d04;\n --surface-success-weak: #0a1e08;\n --surface-success-strong: #12c905;\n --surface-warning-base: #fdf3cf;\n --surface-warning-weak: #fdfaed;\n --surface-warning-strong: #fcd53a;\n --surface-critical-base: #1f0603;\n --surface-critical-weak: #28110c;\n --surface-critical-strong: #fc533a;\n --surface-info-base: #feecfe;\n --surface-info-weak: #fdf7fe;\n --surface-info-strong: #edb2f1;\n --surface-diff-unchanged-base: #161616;\n --surface-diff-skip-base: #00000000;\n --surface-diff-hidden-base: #0c1928;\n --surface-diff-hidden-weak: #09131d;\n --surface-diff-hidden-weaker: #082542;\n --surface-diff-hidden-strong: #073966;\n --surface-diff-hidden-stronger: #8ec2fc;\n --surface-diff-add-base: #1a2919;\n --surface-diff-add-weak: #1f351e;\n --surface-diff-add-weaker: #1a2919;\n --surface-diff-add-strong: #264024;\n --surface-diff-add-stronger: #9bcd97;\n --surface-diff-delete-base: #42120b;\n --surface-diff-delete-weak: #580f06;\n --surface-diff-delete-weaker: #42120b;\n --surface-diff-delete-strong: #6a1206;\n --surface-diff-delete-stronger: #faa494;\n --input-base: #1c1c1c;\n --input-hover: #1c1c1c;\n --input-active: #091123;\n --input-selected: #0b1730;\n --input-focus: #091123;\n --input-disabled: #282828;\n --text-base: rgba(255, 255, 255, 0.618);\n --text-weak: rgba(255, 255, 255, 0.422);\n --text-weaker: rgba(255, 255, 255, 0.284);\n --text-strong: rgba(255, 255, 255, 0.936);\n --text-invert-base: #a0a0a0;\n --text-invert-weak: #707070;\n --text-invert-weaker: #505050;\n --text-invert-strong: #ededed;\n --text-interactive-base: #9dbefe;\n --text-subtle: var(--text-weak);\n --accent: var(--text-interactive-base);\n --accent-base: var(--text-interactive-base);\n --danger-base: #fc533a;\n --danger-muted: rgba(252, 83, 58, 0.16);\n --text-danger-base: var(--danger-base);\n --text-text-danger-base: var(--danger-base);\n --text-on-brand-base: rgba(255, 255, 255, 0.603);\n --text-on-interactive-base: #ededed;\n --text-on-interactive-weak: rgba(255, 255, 255, 0.603);\n --text-on-success-base: #12c905;\n --text-on-critical-base: #fc533a;\n --text-on-critical-weak: #b72d1a;\n --text-on-critical-strong: #ffe0da;\n --text-on-warning-base: rgba(255, 255, 255, 0.603);\n --text-on-info-base: rgba(255, 255, 255, 0.603);\n --text-diff-add-base: #9bcd97;\n --text-diff-delete-base: #fc533a;\n --text-diff-delete-strong: #ffe0da;\n --text-diff-add-strong: #4a7348;\n --text-on-info-weak: rgba(255, 255, 255, 0.404);\n --text-on-info-strong: rgba(255, 255, 255, 0.928);\n --text-on-warning-weak: rgba(255, 255, 255, 0.404);\n --text-on-warning-strong: rgba(255, 255, 255, 0.928);\n --text-on-success-weak: #127d0d;\n --text-on-success-strong: #bafdb3;\n --text-on-brand-weak: rgba(255, 255, 255, 0.404);\n --text-on-brand-weaker: rgba(255, 255, 255, 0.266);\n --text-on-brand-strong: rgba(255, 255, 255, 0.928);\n --button-primary-base: #ededed;\n --button-secondary-base: #1c1c1c;\n --button-secondary-hover: rgba(255, 255, 255, 0.039);\n --button-ghost-hover: rgba(255, 255, 255, 0.031);\n --button-ghost-hover2: rgba(255, 255, 255, 0.059);\n --border-base: rgba(255, 255, 255, 0.195);\n --border-hover: rgba(255, 255, 255, 0.284);\n --border-active: rgba(255, 255, 255, 0.418);\n --border-selected: #9dbefe;\n --border-disabled: rgba(255, 255, 255, 0.284);\n --border-focus: rgba(255, 255, 255, 0.418);\n --border-weak-base: #282828;\n --border-strong-base: rgba(255, 255, 255, 0.266);\n --border-strong-hover: rgba(255, 255, 255, 0.266);\n --border-strong-active: rgba(255, 255, 255, 0.266);\n --border-strong-selected: rgba(3, 76, 255, 0.62);\n --border-strong-disabled: rgba(255, 255, 255, 0.138);\n --border-strong-focus: rgba(255, 255, 255, 0.266);\n --border-weak-hover: rgba(255, 255, 255, 0.181);\n --border-weak-active: rgba(255, 255, 255, 0.266);\n --border-weak-selected: rgba(3, 76, 255, 0.62);\n --border-weak-disabled: rgba(255, 255, 255, 0.138);\n --border-weak-focus: rgba(255, 255, 255, 0.266);\n --border-weaker-base: #202020;\n --border-weaker-hover: rgba(255, 255, 255, 0.084);\n --border-weaker-active: rgba(255, 255, 255, 0.138);\n --border-weaker-selected: rgba(3, 76, 255, 0.32);\n --border-weaker-disabled: rgba(255, 255, 255, 0.034);\n --border-weaker-focus: rgba(255, 255, 255, 0.138);\n --border-interactive-base: #a3c1fd;\n --border-interactive-hover: #7ea9ff;\n --border-interactive-active: #034cff;\n --border-interactive-selected: #034cff;\n --border-interactive-disabled: #505050;\n --border-interactive-focus: #034cff;\n --border-success-base: #96ec8e;\n --border-success-hover: #7add71;\n --border-success-selected: #12c905;\n --border-warning-base: #e9d282;\n --border-warning-hover: #dac063;\n --border-warning-selected: #fcd53a;\n --border-critical-base: #6a1206;\n --border-critical-hover: #952414;\n --border-critical-selected: #fc533a;\n --border-info-base: #eac5ec;\n --border-info-hover: #dab1dd;\n --border-info-selected: #edb2f1;\n --border-color: #ffffff;\n --icon-base: #7e7e7e;\n --icon-hover: #a0a0a0;\n --icon-active: #ededed;\n --icon-selected: #ededed;\n --icon-disabled: #3e3e3e;\n --icon-focus: #ededed;\n --icon-invert-base: #161616;\n --icon-weak-base: #343434;\n --icon-weak-hover: #d9d9d9;\n --icon-weak-active: #c8c8c8;\n --icon-weak-selected: #707070;\n --icon-weak-disabled: #ededed;\n --icon-weak-focus: #707070;\n --icon-strong-base: #ededed;\n --icon-strong-hover: #f6f3f3;\n --icon-strong-active: #fcfcfc;\n --icon-strong-selected: #fdfcfc;\n --icon-strong-disabled: #3e3e3e;\n --icon-strong-focus: #fdfcfc;\n --icon-brand-base: #ffffff;\n --icon-interactive-base: #034cff;\n --icon-success-base: #12c905;\n --icon-success-hover: #35c02d;\n --icon-success-active: #4de144;\n --icon-warning-base: #fbb73c;\n --icon-warning-hover: #885e08;\n --icon-warning-active: #f1b13f;\n --icon-critical-base: #fc533a;\n --icon-critical-hover: #faa494;\n --icon-critical-active: #ffe0da;\n --icon-info-base: #68446b;\n --icon-info-hover: #815484;\n --icon-info-active: #dfa7e3;\n --icon-on-brand-base: rgba(255, 255, 255, 0.603);\n --icon-on-brand-hover: rgba(255, 255, 255, 0.928);\n --icon-on-brand-selected: rgba(255, 255, 255, 0.928);\n --icon-on-interactive-base: #ededed;\n --icon-agent-plan-base: #edb2f1;\n --icon-agent-docs-base: #fbb73c;\n --icon-agent-ask-base: #2090f5;\n --icon-agent-build-base: #9dbefe;\n --icon-on-success-base: rgba(18, 201, 5, 0.9);\n --icon-on-success-hover: rgba(53, 192, 45, 0.9);\n --icon-on-success-selected: rgba(77, 225, 68, 0.9);\n --icon-on-warning-base: rgba(251, 183, 60, 0.9);\n --icon-on-warning-hover: rgba(245, 178, 56, 0.9);\n --icon-on-warning-selected: rgba(241, 177, 63, 0.9);\n --icon-on-critical-base: rgba(252, 83, 58, 0.9);\n --icon-on-critical-hover: rgba(245, 79, 54, 0.9);\n --icon-on-critical-selected: rgba(250, 164, 148, 0.9);\n --icon-on-info-base: #edb2f1;\n --icon-on-info-hover: rgba(231, 173, 235, 0.9);\n --icon-on-info-selected: rgba(223, 167, 227, 0.9);\n --icon-diff-add-base: #9bcd97;\n --icon-diff-add-hover: #c3f9bf;\n --icon-diff-add-active: #9bcd97;\n --icon-diff-delete-base: #fc533a;\n --icon-diff-delete-hover: #f54f36;\n --icon-diff-modified-base: #ffba92;\n --syntax-comment: var(--text-weak);\n --syntax-regexp: var(--text-base);\n --syntax-string: #00ceb9;\n --syntax-keyword: var(--text-weak);\n --syntax-primitive: #ffba92;\n --syntax-operator: var(--text-weak);\n --syntax-variable: var(--text-strong);\n --syntax-property: #ff9ae2;\n --syntax-type: #ecf58c;\n --syntax-constant: #93e9f6;\n --syntax-punctuation: var(--text-weak);\n --syntax-object: var(--text-strong);\n --syntax-success: #35c02d;\n --syntax-warning: #f5b238;\n --syntax-critical: #f54f36;\n --syntax-info: #93e9f6;\n --syntax-diff-add: #9bcd97;\n --syntax-diff-delete: #faa494;\n --syntax-diff-unknown: #ff0000;\n --markdown-heading: #9d7cd8;\n --markdown-text: #eeeeee;\n --markdown-link: #fab283;\n --markdown-link-text: #56b6c2;\n --markdown-code: #7fd88f;\n --markdown-block-quote: #e5c07b;\n --markdown-emph: #e5c07b;\n --markdown-strong: #f5a742;\n --markdown-horizontal-rule: #808080;\n --markdown-list-item: #fab283;\n --markdown-list-enumeration: #56b6c2;\n --markdown-image: #fab283;\n --markdown-image-text: #56b6c2;\n --markdown-code-block: #eeeeee;\n --avatar-background-pink: #501b3f;\n --avatar-background-mint: #033a34;\n --avatar-background-orange: #5f2a06;\n --avatar-background-purple: #432155;\n --avatar-background-cyan: #0f3058;\n --avatar-background-lime: #2b3711;\n --avatar-text-pink: #e34ba9;\n --avatar-text-mint: #95f3d9;\n --avatar-text-orange: #ff802b;\n --avatar-text-purple: #9d5bd2;\n --avatar-text-cyan: #369eff;\n --avatar-text-lime: #c4f042;\n --text-stronger: rgba(255, 255, 255, 0.936);\n }\n}\n:host([data-theme=\"dark\"]) {\n color-scheme: dark;\n --text-mix-blend-mode: plus-lighter;\n\n /* OC-2 fallback variables (dark) */\n --background-base: #101010;\n --background-weak: #1e1e1e;\n --background-strong: #121212;\n --background-stronger: #151515;\n --surface-base: rgba(255, 255, 255, 0.031);\n --base: rgba(255, 255, 255, 0.034);\n --surface-base-hover: rgba(255, 255, 255, 0.039);\n --surface-base-active: rgba(255, 255, 255, 0.059);\n --surface-base-interactive-active: rgba(3, 76, 255, 0.125);\n --base2: rgba(255, 255, 255, 0.034);\n --base3: rgba(255, 255, 255, 0.034);\n --surface-inset-base: rgba(0, 0, 0, 0.5);\n --surface-inset-base-hover: rgba(0, 0, 0, 0.5);\n --surface-inset-strong: rgba(0, 0, 0, 0.8);\n --surface-inset-strong-hover: rgba(0, 0, 0, 0.8);\n --surface-raised-base: rgba(255, 255, 255, 0.059);\n --surface-float-base: #161616;\n --surface-float-base-hover: #1c1c1c;\n --surface-raised-base-hover: rgba(255, 255, 255, 0.078);\n --surface-raised-base-active: rgba(255, 255, 255, 0.102);\n --surface-raised-strong: rgba(255, 255, 255, 0.078);\n --surface-raised-strong-hover: rgba(255, 255, 255, 0.129);\n --surface-raised-stronger: rgba(255, 255, 255, 0.129);\n --surface-raised-stronger-hover: rgba(255, 255, 255, 0.169);\n --surface-weak: rgba(255, 255, 255, 0.078);\n --surface-weaker: rgba(255, 255, 255, 0.102);\n --surface-strong: rgba(255, 255, 255, 0.169);\n --surface-stronger-non-alpha: var(--surface-raised-stronger-non-alpha);\n --surface-raised-stronger-non-alpha: #1c1c1c;\n --surface-panel: var(--surface-raised-stronger-non-alpha);\n --surface-panel-base: var(--surface-raised-stronger-non-alpha);\n --surface-brand-base: #fab283;\n --surface-brand-hover: #eda779;\n --surface-interactive-base: #091f52;\n --surface-interactive-hover: #091f52;\n --surface-interactive-weak: #0b1730;\n --surface-interactive-weak-hover: #ecf3ff;\n --surface-success-base: #062d04;\n --surface-success-weak: #0a1e08;\n --surface-success-strong: #12c905;\n --surface-warning-base: #fdf3cf;\n --surface-warning-weak: #fdfaed;\n --surface-warning-strong: #fcd53a;\n --surface-critical-base: #1f0603;\n --surface-critical-weak: #28110c;\n --surface-critical-strong: #fc533a;\n --surface-info-base: #feecfe;\n --surface-info-weak: #fdf7fe;\n --surface-info-strong: #edb2f1;\n --surface-diff-unchanged-base: #161616;\n --surface-diff-skip-base: #00000000;\n --surface-diff-hidden-base: #0c1928;\n --surface-diff-hidden-weak: #09131d;\n --surface-diff-hidden-weaker: #082542;\n --surface-diff-hidden-strong: #073966;\n --surface-diff-hidden-stronger: #8ec2fc;\n --surface-diff-add-base: #1a2919;\n --surface-diff-add-weak: #1f351e;\n --surface-diff-add-weaker: #1a2919;\n --surface-diff-add-strong: #264024;\n --surface-diff-add-stronger: #9bcd97;\n --surface-diff-delete-base: #42120b;\n --surface-diff-delete-weak: #580f06;\n --surface-diff-delete-weaker: #42120b;\n --surface-diff-delete-strong: #6a1206;\n --surface-diff-delete-stronger: #faa494;\n --input-base: #1c1c1c;\n --input-hover: #1c1c1c;\n --input-active: #091123;\n --input-selected: #0b1730;\n --input-focus: #091123;\n --input-disabled: #282828;\n --text-base: rgba(255, 255, 255, 0.618);\n --text-weak: rgba(255, 255, 255, 0.422);\n --text-weaker: rgba(255, 255, 255, 0.284);\n --text-strong: rgba(255, 255, 255, 0.936);\n --text-invert-base: #a0a0a0;\n --text-invert-weak: #707070;\n --text-invert-weaker: #505050;\n --text-invert-strong: #ededed;\n --text-interactive-base: #9dbefe;\n --text-subtle: var(--text-weak);\n --accent: var(--text-interactive-base);\n --accent-base: var(--text-interactive-base);\n --danger-base: #fc533a;\n --danger-muted: rgba(252, 83, 58, 0.16);\n --text-danger-base: var(--danger-base);\n --text-text-danger-base: var(--danger-base);\n --text-on-brand-base: rgba(255, 255, 255, 0.603);\n --text-on-interactive-base: #ededed;\n --text-on-interactive-weak: rgba(255, 255, 255, 0.603);\n --text-on-success-base: #12c905;\n --text-on-critical-base: #fc533a;\n --text-on-critical-weak: #b72d1a;\n --text-on-critical-strong: #ffe0da;\n --text-on-warning-base: rgba(255, 255, 255, 0.603);\n --text-on-info-base: rgba(255, 255, 255, 0.603);\n --text-diff-add-base: #9bcd97;\n --text-diff-delete-base: #fc533a;\n --text-diff-delete-strong: #ffe0da;\n --text-diff-add-strong: #4a7348;\n --text-on-info-weak: rgba(255, 255, 255, 0.404);\n --text-on-info-strong: rgba(255, 255, 255, 0.928);\n --text-on-warning-weak: rgba(255, 255, 255, 0.404);\n --text-on-warning-strong: rgba(255, 255, 255, 0.928);\n --text-on-success-weak: #127d0d;\n --text-on-success-strong: #bafdb3;\n --text-on-brand-weak: rgba(255, 255, 255, 0.404);\n --text-on-brand-weaker: rgba(255, 255, 255, 0.266);\n --text-on-brand-strong: rgba(255, 255, 255, 0.928);\n --button-primary-base: #ededed;\n --button-secondary-base: #1c1c1c;\n --button-secondary-hover: rgba(255, 255, 255, 0.039);\n --button-ghost-hover: rgba(255, 255, 255, 0.031);\n --button-ghost-hover2: rgba(255, 255, 255, 0.059);\n --border-base: rgba(255, 255, 255, 0.195);\n --border-hover: rgba(255, 255, 255, 0.284);\n --border-active: rgba(255, 255, 255, 0.418);\n --border-selected: #9dbefe;\n --border-disabled: rgba(255, 255, 255, 0.284);\n --border-focus: rgba(255, 255, 255, 0.418);\n --border-weak-base: #282828;\n --border-strong-base: rgba(255, 255, 255, 0.266);\n --border-strong-hover: rgba(255, 255, 255, 0.266);\n --border-strong-active: rgba(255, 255, 255, 0.266);\n --border-strong-selected: rgba(3, 76, 255, 0.62);\n --border-strong-disabled: rgba(255, 255, 255, 0.138);\n --border-strong-focus: rgba(255, 255, 255, 0.266);\n --border-weak-hover: rgba(255, 255, 255, 0.181);\n --border-weak-active: rgba(255, 255, 255, 0.266);\n --border-weak-selected: rgba(3, 76, 255, 0.62);\n --border-weak-disabled: rgba(255, 255, 255, 0.138);\n --border-weak-focus: rgba(255, 255, 255, 0.266);\n --border-weaker-base: #202020;\n --border-weaker-hover: rgba(255, 255, 255, 0.084);\n --border-weaker-active: rgba(255, 255, 255, 0.138);\n --border-weaker-selected: rgba(3, 76, 255, 0.32);\n --border-weaker-disabled: rgba(255, 255, 255, 0.034);\n --border-weaker-focus: rgba(255, 255, 255, 0.138);\n --border-interactive-base: #a3c1fd;\n --border-interactive-hover: #7ea9ff;\n --border-interactive-active: #034cff;\n --border-interactive-selected: #034cff;\n --border-interactive-disabled: #505050;\n --border-interactive-focus: #034cff;\n --border-success-base: #96ec8e;\n --border-success-hover: #7add71;\n --border-success-selected: #12c905;\n --border-warning-base: #e9d282;\n --border-warning-hover: #dac063;\n --border-warning-selected: #fcd53a;\n --border-critical-base: #6a1206;\n --border-critical-hover: #952414;\n --border-critical-selected: #fc533a;\n --border-info-base: #eac5ec;\n --border-info-hover: #dab1dd;\n --border-info-selected: #edb2f1;\n --border-color: #ffffff;\n --icon-base: #7e7e7e;\n --icon-hover: #a0a0a0;\n --icon-active: #ededed;\n --icon-selected: #ededed;\n --icon-disabled: #3e3e3e;\n --icon-focus: #ededed;\n --icon-invert-base: #161616;\n --icon-weak-base: #343434;\n --icon-weak-hover: #d9d9d9;\n --icon-weak-active: #c8c8c8;\n --icon-weak-selected: #707070;\n --icon-weak-disabled: #ededed;\n --icon-weak-focus: #707070;\n --icon-strong-base: #ededed;\n --icon-strong-hover: #f6f3f3;\n --icon-strong-active: #fcfcfc;\n --icon-strong-selected: #fdfcfc;\n --icon-strong-disabled: #3e3e3e;\n --icon-strong-focus: #fdfcfc;\n --icon-brand-base: #ffffff;\n --icon-interactive-base: #034cff;\n --icon-success-base: #12c905;\n --icon-success-hover: #35c02d;\n --icon-success-active: #4de144;\n --icon-warning-base: #fbb73c;\n --icon-warning-hover: #885e08;\n --icon-warning-active: #f1b13f;\n --icon-critical-base: #fc533a;\n --icon-critical-hover: #faa494;\n --icon-critical-active: #ffe0da;\n --icon-info-base: #68446b;\n --icon-info-hover: #815484;\n --icon-info-active: #dfa7e3;\n --icon-on-brand-base: rgba(255, 255, 255, 0.603);\n --icon-on-brand-hover: rgba(255, 255, 255, 0.928);\n --icon-on-brand-selected: rgba(255, 255, 255, 0.928);\n --icon-on-interactive-base: #ededed;\n --icon-agent-plan-base: #edb2f1;\n --icon-agent-docs-base: #fbb73c;\n --icon-agent-ask-base: #2090f5;\n --icon-agent-build-base: #9dbefe;\n --icon-on-success-base: rgba(18, 201, 5, 0.9);\n --icon-on-success-hover: rgba(53, 192, 45, 0.9);\n --icon-on-success-selected: rgba(77, 225, 68, 0.9);\n --icon-on-warning-base: rgba(251, 183, 60, 0.9);\n --icon-on-warning-hover: rgba(245, 178, 56, 0.9);\n --icon-on-warning-selected: rgba(241, 177, 63, 0.9);\n --icon-on-critical-base: rgba(252, 83, 58, 0.9);\n --icon-on-critical-hover: rgba(245, 79, 54, 0.9);\n --icon-on-critical-selected: rgba(250, 164, 148, 0.9);\n --icon-on-info-base: #edb2f1;\n --icon-on-info-hover: rgba(231, 173, 235, 0.9);\n --icon-on-info-selected: rgba(223, 167, 227, 0.9);\n --icon-diff-add-base: #9bcd97;\n --icon-diff-add-hover: #c3f9bf;\n --icon-diff-add-active: #9bcd97;\n --icon-diff-delete-base: #fc533a;\n --icon-diff-delete-hover: #f54f36;\n --icon-diff-modified-base: #ffba92;\n --syntax-comment: var(--text-weak);\n --syntax-regexp: var(--text-base);\n --syntax-string: #00ceb9;\n --syntax-keyword: var(--text-weak);\n --syntax-primitive: #ffba92;\n --syntax-operator: var(--text-weak);\n --syntax-variable: var(--text-strong);\n --syntax-property: #ff9ae2;\n --syntax-type: #ecf58c;\n --syntax-constant: #93e9f6;\n --syntax-punctuation: var(--text-weak);\n --syntax-object: var(--text-strong);\n --syntax-success: #35c02d;\n --syntax-warning: #f5b238;\n --syntax-critical: #f54f36;\n --syntax-info: #93e9f6;\n --syntax-diff-add: #9bcd97;\n --syntax-diff-delete: #faa494;\n --syntax-diff-unknown: #ff0000;\n --markdown-heading: #9d7cd8;\n --markdown-text: #eeeeee;\n --markdown-link: #fab283;\n --markdown-link-text: #56b6c2;\n --markdown-code: #7fd88f;\n --markdown-block-quote: #e5c07b;\n --markdown-emph: #e5c07b;\n --markdown-strong: #f5a742;\n --markdown-horizontal-rule: #808080;\n --markdown-list-item: #fab283;\n --markdown-list-enumeration: #56b6c2;\n --markdown-image: #fab283;\n --markdown-image-text: #56b6c2;\n --markdown-code-block: #eeeeee;\n --avatar-background-pink: #501b3f;\n --avatar-background-mint: #033a34;\n --avatar-background-orange: #5f2a06;\n --avatar-background-purple: #432155;\n --avatar-background-cyan: #0f3058;\n --avatar-background-lime: #2b3711;\n --avatar-text-pink: #e34ba9;\n --avatar-text-mint: #95f3d9;\n --avatar-text-orange: #ff802b;\n --avatar-text-purple: #9d5bd2;\n --avatar-text-cyan: #369eff;\n --avatar-text-lime: #c4f042;\n --text-stronger: rgba(255, 255, 255, 0.936);\n }\n","/* Synced from Mux frontend/src/ui/components/tool-status-title.css @ 37d6096b450cb33dfe9d7112e9d4ff75975d20b2. Do not edit; run npm run sync-styles. */\n[data-component=\"tool-status-title\"] {\n display: inline-flex;\n align-items: baseline;\n white-space: nowrap;\n text-align: start;\n\n [data-slot=\"tool-status-suffix\"] {\n display: inline-flex;\n align-items: baseline;\n white-space: nowrap;\n }\n\n [data-slot=\"tool-status-prefix\"] {\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n [data-slot=\"tool-status-swap\"],\n [data-slot=\"tool-status-tail\"] {\n display: inline-grid;\n overflow: hidden;\n justify-items: start;\n transition: width var(--tool-motion-spring-ms, 480ms) var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1));\n }\n\n [data-slot=\"tool-status-active\"],\n [data-slot=\"tool-status-done\"] {\n grid-area: 1 / 1;\n white-space: nowrap;\n justify-self: start;\n text-align: start;\n transition-property: opacity, filter, transform;\n transition-duration:\n var(--tool-motion-fade-ms, 240ms), calc(var(--tool-motion-fade-ms, 240ms) * 0.8),\n calc(var(--tool-motion-fade-ms, 240ms) * 0.8);\n transition-timing-function: ease-out, ease-out, ease-out;\n }\n\n &[data-ready=\"false\"] {\n [data-slot=\"tool-status-swap\"],\n [data-slot=\"tool-status-tail\"] {\n transition-duration: 0ms;\n }\n\n [data-slot=\"tool-status-active\"],\n [data-slot=\"tool-status-done\"] {\n transition-duration: 0ms;\n }\n }\n\n [data-slot=\"tool-status-active\"] {\n opacity: 0;\n filter: blur(calc(var(--tool-motion-blur, 2px) * 0.45));\n transform: translateY(0.03em);\n }\n\n [data-slot=\"tool-status-done\"] {\n color: var(--text-strong);\n opacity: 1;\n filter: blur(0);\n transform: translateY(0);\n }\n\n &[data-active=\"true\"] {\n [data-slot=\"tool-status-active\"] {\n opacity: 1;\n filter: blur(0);\n transform: translateY(0);\n }\n\n [data-slot=\"tool-status-done\"] {\n opacity: 0;\n filter: blur(calc(var(--tool-motion-blur, 2px) * 0.45));\n transform: translateY(0.03em);\n }\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n [data-component=\"tool-status-title\"] [data-slot=\"tool-status-swap\"],\n [data-component=\"tool-status-title\"] [data-slot=\"tool-status-tail\"] {\n transition-duration: 0ms;\n }\n\n [data-component=\"tool-status-title\"] [data-slot=\"tool-status-active\"],\n [data-component=\"tool-status-title\"] [data-slot=\"tool-status-done\"] {\n transition-duration: 0ms;\n }\n}\n","/* The embed's own layout, plus the timeline and composer rules Mux keeps in\n frontend/src/index.css or writes as Tailwind classes (composer-view.tsx).\n Values mirror Mux's; everything else comes from the synced stylesheets. */\n\n:host {\n display: block;\n height: 100%;\n min-height: 0;\n /* Mux ships Inter and IBM Plex Mono; fall back to system faces when the host page lacks them. */\n --font-family-sans: \"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --font-family-mono: \"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n font: inherit;\n color: inherit;\n margin: 0;\n}\n\nbutton {\n background: none;\n border: 0;\n padding: 0;\n cursor: pointer;\n}\n\nbutton:disabled {\n cursor: default;\n}\n\n[data-component=\"icon\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n[data-component=\"mux-chat\"] {\n height: 100%;\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: var(--background-stronger);\n color: var(--text-base);\n font-family: var(--font-family-sans);\n font-feature-settings: var(--font-family-sans--font-feature-settings);\n font-size: var(--font-size-base);\n line-height: var(--line-height-large);\n -webkit-font-smoothing: antialiased;\n}\n\n/* ---------------------------------------------------------------- header */\n\n[data-slot=\"mux-chat-header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 44px;\n padding: 8px 10px 8px 18px;\n border-bottom: 1px solid var(--border-weaker-base);\n}\n\n[data-slot=\"mux-chat-heading\"] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n[data-slot=\"mux-chat-title\"] {\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n line-height: 20px;\n}\n\n[data-slot=\"mux-chat-subtitle\"] {\n color: var(--text-weak);\n font-size: 12px;\n line-height: 16px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n[data-slot=\"mux-chat-status\"] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: none;\n color: var(--text-weak);\n font-size: 12px;\n line-height: 16px;\n\n &::before {\n content: \"\";\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--icon-weak-base);\n }\n\n &[data-tone=\"ok\"]::before {\n background: var(--icon-success-base);\n }\n\n &[data-tone=\"bad\"]::before {\n background: var(--icon-critical-base);\n }\n\n &[data-tone=\"ok\"] [data-slot=\"mux-chat-status-text\"] {\n display: none;\n }\n}\n\n[data-action=\"new-chat\"] {\n width: 28px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n/* -------------------------------------------------------------- timeline */\n\n[data-component=\"message-timeline\"] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overflow-anchor: auto;\n display: flex;\n flex-direction: column;\n padding: 16px 0;\n scrollbar-width: thin;\n}\n\n[data-component=\"message-timeline\"] [data-slot=\"session-turn-message-container\"] {\n display: flex;\n flex-direction: column;\n gap: 14px;\n padding-inline: 18px;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"assistant-message\"] {\n gap: 8px;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"user-message\"] {\n line-height: var(--line-height-large);\n}\n\n[data-component=\"message-timeline\"] [data-slot=\"user-message-text\"] {\n padding: 6px 9px;\n white-space: pre-wrap;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"text-part\"] {\n width: 100%;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"text-part\"] [data-component=\"markdown\"] {\n line-height: 1.5625;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] p {\n margin-bottom: 0.75rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] :is(h1, h2, h3, h4, h5, h6) {\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] :is(ul, ol) {\n margin-top: 0.375rem;\n margin-bottom: 0.75rem;\n padding-left: 1.25rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] ol {\n padding-left: 1.75rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] li {\n margin-bottom: 0.25rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] :is(blockquote, pre) {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] hr {\n margin-block: 1.5rem;\n}\n\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] > :last-child {\n margin-bottom: 0;\n}\n\n/* Tables scroll inside a narrow sidebar instead of overflowing it. */\n[data-component=\"message-timeline\"] [data-component=\"markdown\"] table {\n display: block;\n max-width: 100%;\n overflow-x: auto;\n}\n\n[data-slot=\"mux-tool-output\"] {\n padding: 8px 4px 4px;\n\n pre {\n margin: 0;\n max-height: 320px;\n overflow: auto;\n padding: 8px 12px;\n border: 1px solid var(--border-weak-base);\n border-radius: var(--radius-lg);\n background: var(--surface-raised-base);\n color: var(--text-base);\n font-family: var(--font-family-mono);\n font-size: 12px;\n line-height: 18px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n }\n\n pre[data-status=\"error\"] {\n color: var(--text-critical-base, var(--icon-critical-base));\n }\n}\n\n[data-slot=\"mux-chat-error\"],\n[data-slot=\"mux-chat-notice\"] {\n color: var(--text-critical-base, var(--icon-critical-base));\n font-size: var(--font-size-small);\n line-height: var(--line-height-large);\n}\n\n[data-slot=\"mux-chat-notice\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 8px;\n\n > span {\n flex: 1;\n min-width: 0;\n }\n\n [data-action=\"retry\"] {\n flex: none;\n color: var(--text-strong);\n }\n}\n\n/* ----------------------------------------------------------- empty state */\n\n[data-slot=\"mux-chat-empty\"] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-block: auto;\n padding: 24px 18px;\n}\n\n[data-slot=\"mux-chat-empty-title\"] {\n color: var(--text-strong);\n font-size: var(--font-size-large);\n font-weight: var(--font-weight-medium);\n line-height: 24px;\n}\n\n[data-slot=\"mux-chat-empty-subtitle\"] {\n color: var(--text-weak);\n}\n\n[data-slot=\"mux-chat-suggestions\"] {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n margin-top: 10px;\n}\n\n[data-slot=\"mux-chat-suggestion\"] {\n max-width: 100%;\n padding: 6px 12px;\n border: 1px solid var(--border-weak-base);\n border-radius: 9999px;\n background: var(--surface-raised-base);\n color: var(--text-base);\n font-size: var(--font-size-small);\n line-height: 20px;\n text-align: start;\n transition: background-color 0.15s ease, border-color 0.15s ease;\n\n &:hover {\n background: var(--surface-raised-base-hover);\n border-color: var(--border-base);\n }\n}\n\n/* --------------------------------------------------------- dock/composer */\n\n[data-slot=\"mux-chat-dock\"] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 0 8px;\n}\n\n[data-component=\"prompt-composer-surface\"] {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: clip;\n border: 1px solid var(--border-weak-base);\n border-bottom-width: 0;\n border-radius: 16px 16px 0 0;\n --prompt-composer-fill: var(--surface-raised-stronger-non-alpha);\n background: var(--prompt-composer-fill);\n\n &:focus-within {\n border-color: var(--border-base);\n }\n\n &[aria-busy=\"true\"] {\n pointer-events: none;\n }\n\n > [data-dock-surface=\"shell\"] {\n border-radius: 0;\n box-shadow: none;\n background: transparent;\n }\n\n > [data-component=\"prompt-controls\"] {\n margin-top: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n }\n}\n\n[data-component=\"prompt-input-shell\"] {\n flex: none;\n min-height: 32px;\n}\n\n[data-component=\"prompt-input-scroll\"] {\n position: relative;\n max-height: 240px;\n overflow-y: auto;\n scrollbar-width: none;\n}\n\n[data-component=\"prompt-input\"] {\n display: block;\n width: 100%;\n min-height: 30px;\n resize: none;\n border: 0;\n outline: none;\n background: transparent;\n padding: 8px 16px var(--prompt-inset);\n color: var(--text-strong);\n font-size: 13px;\n line-height: 20px;\n\n &::placeholder {\n color: var(--text-weaker);\n }\n}\n\n[data-component=\"prompt-controls-inner\"] {\n padding: 1px 10px;\n}\n\n[data-component=\"prompt-control-row\"] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n min-height: 36px;\n}\n\n[data-component=\"prompt-control-left\"] {\n display: flex;\n align-items: center;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n[data-component=\"prompt-control-right\"] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: none;\n margin-left: auto;\n}\n\n[data-component=\"prompt-model-control\"] {\n position: relative;\n min-width: 0;\n max-width: 14rem;\n display: flex;\n align-items: center;\n}\n\n[data-action=\"prompt-model\"] {\n appearance: none;\n field-sizing: content;\n height: 28px;\n min-width: 0;\n max-width: 100%;\n padding: 0 22px 0 8px;\n border: 0;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--text-base);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-medium);\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background-color 0.15s ease;\n\n &:hover:not(:disabled) {\n background: var(--surface-base-hover);\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--shadow-xs-border-focus);\n }\n\n option,\n optgroup {\n background: var(--background-stronger);\n color: var(--text-base);\n }\n}\n\n[data-slot=\"prompt-model-chevron\"] {\n position: absolute;\n right: 6px;\n display: inline-flex;\n color: var(--icon-weak-base);\n pointer-events: none;\n}\n\n[data-component=\"prompt-submit-control\"] {\n display: flex;\n width: 28px;\n height: 28px;\n flex: none;\n align-items: center;\n justify-content: center;\n}\n\n[data-action=\"prompt-submit\"] {\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n}\n\n/* ---------------------------------------------------------- question dock */\n\n[data-component=\"mux-question\"],\n[data-component=\"mux-permission\"] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n border: 1px solid var(--border-weak-base);\n border-radius: 12px;\n background: var(--surface-raised-stronger-non-alpha);\n}\n\n[data-component=\"mux-permission\"] {\n gap: 8px;\n}\n\n[data-slot=\"mux-permission-patterns\"] {\n max-height: 96px;\n overflow: auto;\n padding: 6px 8px;\n border-radius: var(--radius-md);\n background: var(--surface-inset-base);\n color: var(--text-base);\n font-family: var(--font-family-mono);\n font-size: 12px;\n line-height: 18px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n[data-slot=\"mux-question-item\"] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n[data-slot=\"mux-question-header\"] {\n color: var(--text-weak);\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n\n[data-slot=\"mux-question-text\"] {\n color: var(--text-strong);\n font-weight: var(--font-weight-medium);\n}\n\n[data-slot=\"mux-question-options\"] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n[data-slot=\"mux-question-option\"] {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n padding: 8px 10px;\n border: 1px solid var(--border-weak-base);\n border-radius: var(--radius-lg);\n text-align: start;\n transition: background-color 0.15s ease, border-color 0.15s ease;\n\n &:hover {\n background: var(--surface-base-hover);\n }\n\n &[aria-checked=\"true\"] {\n border-color: var(--border-selected);\n background: var(--surface-base-interactive-active);\n }\n}\n\n[data-slot=\"mux-question-option-description\"] {\n color: var(--text-weak);\n font-size: var(--font-size-small);\n}\n\n[data-slot=\"mux-question-custom\"] {\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--border-weak-base);\n border-radius: var(--radius-lg);\n background: transparent;\n outline: none;\n\n &:focus {\n border-color: var(--border-base);\n }\n}\n\n[data-slot=\"mux-question-actions\"] {\n display: flex;\n justify-content: flex-end;\n gap: 6px;\n}\n\n[data-slot=\"mux-button\"] {\n height: 30px;\n padding: 0 12px;\n border-radius: var(--radius-md);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-medium);\n\n &[data-variant=\"ghost\"]:hover {\n background: var(--surface-base-hover);\n }\n\n &[data-variant=\"primary\"] {\n background: var(--icon-strong-base);\n color: var(--icon-invert-base);\n }\n\n &[data-variant=\"primary\"]:disabled {\n background: var(--icon-strong-disabled);\n }\n}\n","import animations from \"./styles/mux/animations.css?inline\"\nimport basicTool from \"./styles/mux/basic-tool.css?inline\"\nimport collapsible from \"./styles/mux/collapsible.css?inline\"\nimport dockSurface from \"./styles/mux/dock-surface.css?inline\"\nimport iconButton from \"./styles/mux/icon-button.css?inline\"\nimport markdown from \"./styles/mux/markdown.css?inline\"\nimport messagePart from \"./styles/mux/message-part.css?inline\"\nimport sessionTurn from \"./styles/mux/session-turn.css?inline\"\nimport spinner from \"./styles/mux/spinner.css?inline\"\nimport textShimmer from \"./styles/mux/text-shimmer.css?inline\"\nimport theme from \"./styles/mux/theme.css?inline\"\nimport toolStatusTitle from \"./styles/mux/tool-status-title.css?inline\"\nimport chat from \"./styles/chat.css?inline\"\n\n/** Mux's stylesheets in its cascade order, then the embed's layout on top. */\nexport const styles = [theme, animations, iconButton, spinner, collapsible, basicTool, textShimmer, toolStatusTitle, dockSurface, markdown, messagePart, sessionTurn, chat].join(\"\\n\")\n","// Pure view-model rules for the chat UI: which parts render, how tool rows\n// are titled, and which model is selected. Kept free of Solid and the DOM.\nimport type { Part, ProviderInventory, ToolPart, ToolState } from \"@rohansguliani/mux-chat-core\"\n\nexport type ModelOption = { value: string; label: string }\nexport type ModelGroup = { id: string; label: string; models: ModelOption[] }\n\n/** Connected providers and their models, in runtime order. */\nexport function modelGroups(inventory: ProviderInventory): ModelGroup[] {\n return inventory.all\n .filter((provider) => inventory.connected.includes(provider.id))\n .map((provider) => ({\n id: provider.id,\n label: provider.name || provider.id,\n models: Object.values(provider.models).map((model) => ({ value: `${provider.id}/${model.id}`, label: model.name || model.id })),\n }))\n .filter((group) => group.models.length > 0)\n}\n\n/**\n * The model to use: the user's stored pick, else the app's preference, else a\n * connected provider's default, else the first available. `undefined` when\n * nothing is available.\n */\nexport function chooseModel(groups: ModelGroup[], inventory: ProviderInventory, stored?: string, preferred?: string): string | undefined {\n const available = new Set(groups.flatMap((group) => group.models.map((model) => model.value)))\n const defaults = inventory.connected.map((id) => (inventory.default[id] ? `${id}/${inventory.default[id]}` : \"\"))\n return [stored, preferred, ...defaults, groups[0]?.models[0]?.value].find((value): value is string => !!value && available.has(value))\n}\n\nexport function parseModel(value: string | undefined) {\n const slash = value?.indexOf(\"/\") ?? -1\n return value && slash > 0 ? { providerID: value.slice(0, slash), modelID: value.slice(slash + 1) } : undefined\n}\n\n/** Parts a reader sees, in order: text, non-empty reasoning, and tool calls. */\nexport function visibleParts(parts: readonly Part[]): Part[] {\n return parts.filter((part) =>\n (part.type === \"text\" && !part.synthetic && !part.ignored && part.text.trim() !== \"\") ||\n (part.type === \"reasoning\" && part.text.trim() !== \"\") ||\n part.type === \"tool\")\n}\n\nconst BUILTIN_TOOLS: Record<string, string> = { websearch: \"Searching the web\", webfetch: \"Reading page\", question: \"Question\" }\n\n/** \"add_to_watchlist\" → \"Add to watchlist\". */\nexport const humanize = (name: string) => {\n const words = name.replace(/[_-]+/g, \" \").trim()\n return words ? words[0]!.toUpperCase() + words.slice(1) : name\n}\n\nexport function toolTitle(tool: string, labels: Record<string, string> = {}): string {\n return labels[tool] ?? BUILTIN_TOOLS[tool] ?? humanize(tool)\n}\n\nconst INPUT_KEYS = [\"description\", \"query\", \"url\", \"name\", \"symbol\", \"watchlist\", \"path\", \"pattern\"]\n\n/** One line under the tool name: the tool's own title once it has one, else its most telling input. */\nexport function toolSubtitle(state: ToolState): string {\n if ((state.status === \"completed\" || state.status === \"running\") && state.title) return state.title\n const input = state.input ?? {}\n for (const key of INPUT_KEYS) {\n const value = input[key]\n if (typeof value === \"string\" && value) return value\n }\n for (const value of Object.values(input)) {\n if (typeof value === \"string\" && value) return value\n if (Array.isArray(value) && value.length && value.every((item) => typeof item === \"string\")) return value.join(\", \")\n }\n return \"\"\n}\n\nexport const toolActive = (part: ToolPart) => part.state.status === \"pending\" || part.state.status === \"running\"\n\nexport function toolDetail(state: ToolState): string {\n if (state.status === \"error\") return state.error\n if (state.status === \"completed\") return state.output\n if (state.status === \"running\") return state.output ?? \"\"\n return \"\"\n}\n\nexport const seconds = (start: number, end: number) => `${Math.max(0, (end - start) / 1000).toFixed(1)}s`\n\nexport const sameIDs = (a: readonly string[], b: readonly string[]) => a.length === b.length && a.every((id, index) => id === b[index])\n","// The chat's state and actions as Solid signals, on top of chat-core. It owns\n// the grant lifecycle, the session (resume, new chat), the model choice, and\n// the tool-result callback; the views only render what it exposes.\nimport {\n createAppClient,\n createChatSession,\n createMemoryStore,\n createRuntimeTransport,\n isSessionStreaming,\n sessionPermissions,\n sessionQuestions,\n sessionTurns,\n textSubmission,\n type ChatSessionView,\n type ChatState,\n type ChatTool,\n type PermissionRequest,\n type ProviderInventory,\n type QuestionRequest,\n type Turn,\n} from \"@rohansguliani/mux-chat-core\"\nimport { batch, createEffect, createMemo, createSignal, on, onCleanup, untrack } from \"solid-js\"\nimport { chooseModel, modelGroups, parseModel, sameIDs, type ModelGroup } from \"./model.js\"\n\nexport type { ChatGrant, ChatTool } from \"@rohansguliani/mux-chat-core\"\n\n/**\n * A tool call that finished while the chat was open. `readOnly` comes from\n * the app's tool definitions (built-in tools such as web search are read-only),\n * so `!readOnly` means the call may have changed app data.\n */\nexport type ToolResult = { tool: string; title?: string; input: Record<string, unknown>; output: string; sessionID: string; readOnly: boolean }\n\nexport type ControllerOptions = {\n /** Where the app mounts `mux.handle`. */\n url: string\n agent: string\n sessionTitle: string\n storageKey: string\n preferredModel?: string\n onToolResult?: (result: ToolResult) => void\n}\n\nexport type Status = { tone: \"ok\" | \"busy\" | \"bad\"; text: string }\n\n/**\n * What happened to a message: delivered; shown but unconfirmed (it stays in\n * the transcript and `retry()` completes it); or not delivered at all, so the\n * caller still owns the text.\n */\nexport type SendResult = \"sent\" | \"unconfirmed\" | \"failed\"\n\nconst idle: ChatSessionView = { connected: false, ready: false, historyLoading: false, historyError: \"\", snapshotError: \"\", error: \"\", ended: false }\n\nconst storage = {\n get(key: string) {\n try { return localStorage.getItem(key) ?? undefined } catch { return undefined }\n },\n set(key: string, value: string | undefined) {\n try { if (value === undefined) localStorage.removeItem(key); else localStorage.setItem(key, value) } catch { /* storage disabled */ }\n },\n}\n\nexport function createChatController(options: ControllerOptions) {\n let disposed = false\n const app = createAppClient({ url: options.url })\n const { client } = app\n const store = createMemoryStore()\n const [state, setState] = createSignal<ChatState>(store.state())\n const [view, setView] = createSignal<ChatSessionView>(idle)\n const [sessionID, setSessionID] = createSignal<string>()\n const [notice, setNotice] = createSignal<string>()\n const [grantError, setGrantError] = createSignal<string>()\n const [tools, setTools] = createSignal<ReadonlyMap<string, ChatTool>>(new Map())\n const [inventory, setInventory] = createSignal<ProviderInventory>()\n const [offline, setOffline] = createSignal(false)\n const [delivering, setDelivering] = createSignal(false)\n const describe = (error: unknown) => (error instanceof Error ? error.message : String(error))\n const report = (error: unknown) => setNotice(describe(error))\n\n const connect = (workspaceID: string) => createChatSession({ store, transport: createRuntimeTransport(client, { workspaceID }) })\n let session: ReturnType<typeof connect> | undefined\n // Streaming deltas can outpace the display; publish at most once per frame.\n let frame: number | undefined\n const publish = () => {\n if (frame !== undefined || disposed) return\n frame = requestAnimationFrame(() => {\n frame = undefined\n batch(() => {\n setState(store.state())\n setView(session ? session.view() : idle)\n })\n })\n }\n const unsubscribe = store.subscribe(publish)\n\n const timers = new Map<string, ReturnType<typeof setTimeout>>()\n const schedule = (name: string, ms: number, run: () => void) => {\n clearTimeout(timers.get(name))\n timers.set(name, setTimeout(() => { timers.delete(name); if (!disposed) run() }, ms))\n }\n onCleanup(() => {\n disposed = true\n for (const timer of timers.values()) clearTimeout(timer)\n if (frame !== undefined) cancelAnimationFrame(frame)\n unsubscribe()\n session?.dispose()\n })\n\n const fetchGrant = async () => {\n const next = await app.refreshGrant()\n if (!next?.token || !next.workspaceID) throw new Error(\"Chat is unavailable (invalid grant)\")\n setTools(new Map((next.tools ?? []).map((tool) => [tool.name, tool])))\n setGrantError(undefined)\n // Renew at 80% of its life; the event stream reconnects with the new grant.\n schedule(\"grant\", Math.max(10_000, (next.expiresAt - Date.now()) * 0.8), () => void renew(0))\n }\n // Keeps trying through an outage (backing off to a minute), so the chat is\n // never left holding an expired grant.\n const renew = async (attempt: number) => {\n try {\n await fetchGrant()\n } catch (error) {\n setGrantError(describe(error))\n schedule(\"grant\", Math.min(60_000, 15_000 * 2 ** attempt), () => void renew(attempt + 1))\n }\n }\n\n const sessionKey = () => `${options.storageKey}:session:${app.grant()?.workspaceID}`\n const modelKey = `${options.storageKey}:model`\n\n const open = async (resume: string | undefined) => {\n const opened = await client.openSession({ workspaceID: app.grant()!.workspaceID, sessionID: resume, title: options.sessionTitle })\n if (disposed) return\n storage.set(sessionKey(), opened.session.id)\n session?.dispose()\n session = connect(opened.workspaceID)\n session.subscribe(publish)\n setSessionID(opened.session.id)\n session.start(opened.session.id)\n publish()\n }\n\n const loadModels = async () => {\n try {\n setInventory(await client.providers())\n setOffline(false)\n } catch (error) {\n console.warn(\"[mux-chat]\", error)\n setOffline(true)\n schedule(\"models\", 15_000, () => void loadModels())\n }\n }\n\n const boot = async () => {\n try {\n await fetchGrant()\n } catch (error) {\n setGrantError(describe(error))\n schedule(\"boot\", 15_000, () => void boot())\n return\n }\n try {\n await open(storage.get(sessionKey()))\n setNotice(undefined)\n void loadModels()\n } catch (error) {\n report(error)\n schedule(\"boot\", 15_000, () => void boot())\n }\n }\n void boot()\n\n const turns = createMemo<Turn[]>(() => { const id = sessionID(); return id ? sessionTurns(state(), id) : [] })\n const turnsByID = createMemo(() => new Map(turns().map((turn) => [turn.message.id, turn])))\n const messageIDs = createMemo(() => turns().map((turn) => turn.message.id), [] as string[], { equals: sameIDs })\n const streaming = createMemo(() => { const id = sessionID(); return !!id && isSessionStreaming(state(), id) })\n const questions = createMemo<readonly QuestionRequest[]>(() => { const id = sessionID(); return id ? sessionQuestions(state(), id) : [] })\n const permissions = createMemo<readonly PermissionRequest[]>(() => { const id = sessionID(); return id ? sessionPermissions(state(), id) : [] })\n\n // Report tool calls that finish while the chat is open; history loaded on\n // open is marked seen without reporting.\n const seen = new Set<string>()\n let live = false\n createEffect(on(turns, (current) => {\n for (const turn of current) {\n for (const part of turn.parts) {\n if (part.type !== \"tool\" || part.state.status !== \"completed\" || seen.has(part.id)) continue\n seen.add(part.id)\n if (live) {\n options.onToolResult?.({\n tool: part.tool,\n title: part.state.title,\n input: part.state.input,\n output: part.state.output,\n sessionID: part.sessionID,\n // Tools the app did not define are the runtime's own (web search and the like).\n readOnly: tools().get(part.tool)?.readOnly ?? true,\n })\n }\n }\n }\n if (untrack(view).ready) live = true\n }))\n\n const [modelValue, setModelValue] = createSignal(storage.get(modelKey) ?? \"\")\n const selectModel = (value: string) => {\n setModelValue(value)\n storage.set(modelKey, value)\n }\n const groups = createMemo<ModelGroup[]>(() => { const inv = inventory(); return inv ? modelGroups(inv) : [] })\n createEffect(on(groups, (current) => {\n const inv = inventory()\n if (!inv || !current.length) return\n const choice = chooseModel(current, inv, untrack(modelValue), options.preferredModel)\n if (choice && choice !== untrack(modelValue)) selectModel(choice)\n }))\n\n const status = createMemo<Status>(() => {\n if (offline()) return { tone: \"bad\", text: \"Offline\" }\n if (inventory() && !groups().length) return { tone: \"bad\", text: \"No models available\" }\n const current = view()\n if (current.connected) return { tone: \"ok\", text: \"Connected\" }\n return current.ready ? { tone: \"bad\", text: \"Reconnecting…\" } : { tone: \"busy\", text: \"Connecting…\" }\n })\n\n const withSession = (action: (id: string) => Promise<unknown>) => async () => {\n const id = sessionID()\n if (!id) return\n try { await action(id) } catch (error) { report(error) }\n }\n type Submission = Parameters<NonNullable<typeof session>[\"send\"]>[0]\n const deliver = async (target: NonNullable<typeof session>, submission: Submission) => {\n setDelivering(true)\n try { return await target.send(submission) } finally { setDelivering(false) }\n }\n\n return {\n /** Changes once per rendered frame while the transcript updates. */\n changes: state,\n sessionID,\n /** Labels from the app's tool definitions. */\n toolLabels: createMemo(() => Object.fromEntries([...tools()].flatMap(([name, tool]) => (tool.label ? [[name, tool.label]] : [])))) as () => Record<string, string>,\n messageIDs,\n turn: (id: string) => turnsByID().get(id),\n questions,\n permissions,\n streaming,\n ready: () => view().ready,\n view,\n status,\n error: () => view().error || view().snapshotError || grantError() || notice() || \"\",\n /** A message is shown but its delivery was not confirmed; `retry()` completes it. */\n unconfirmed: () => !!view().pending && !delivering(),\n modelGroups: groups,\n modelValue,\n selectModel,\n async send(text: string): Promise<SendResult> {\n const target = session\n const id = sessionID()\n const trimmed = text.trim()\n if (!target || !id || !trimmed || !view().ready) return \"failed\"\n setNotice(undefined)\n // An unconfirmed message goes first, so it is neither lost nor overtaken.\n const pending = target.view().pending\n if (pending && !(await deliver(target, pending))) return \"failed\"\n const submission = textSubmission({ sessionID: id, text: trimmed, agent: options.agent, model: parseModel(modelValue()) })\n if (await deliver(target, submission)) return \"sent\"\n return target.view().pending === submission ? \"unconfirmed\" : \"failed\"\n },\n async retry() {\n const target = session\n const pending = target?.view().pending\n if (target && pending && !delivering()) await deliver(target, pending)\n },\n abort: withSession((id) => client.abort(id)),\n answer: (requestID: string, answers: string[][]) => withSession(() => client.answerQuestion(requestID, answers))(),\n reject: (requestID: string) => withSession(() => client.rejectQuestion(requestID))(),\n replyPermission: (requestID: string, response: \"once\" | \"always\" | \"reject\") => withSession((id) => client.replyPermission(id, requestID, response))(),\n /** Loads the next older page of history, if any. */\n older: () => { if (view().cursor && !view().historyLoading) void session?.older() },\n async newChat() {\n if (!app.grant()) return\n try {\n session?.dispose()\n session = undefined\n setSessionID(undefined)\n setView(idle)\n await open(undefined)\n } catch (error) { report(error) }\n },\n }\n}\n\nexport type ChatController = ReturnType<typeof createChatController>\n","import createDOMPurify from \"dompurify\"\nimport { Marked } from \"marked\"\n\n// Private instances: the host app's own marked/DOMPurify configuration and\n// hooks are neither used nor changed.\nconst marked = new Marked({ gfm: true, breaks: false })\nlet purify: ReturnType<typeof createDOMPurify> | undefined\n\nfunction sanitizer() {\n if (!purify) {\n purify = createDOMPurify(window)\n purify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.getAttribute(\"href\")) {\n node.setAttribute(\"target\", \"_blank\")\n node.setAttribute(\"rel\", \"noopener noreferrer\")\n }\n })\n }\n return purify\n}\n\n/** Model output as sanitized HTML. */\nexport function renderMarkdown(text: string): string {\n return sanitizer().sanitize(marked.parse(text, { async: false }) as string)\n}\n","import { createEffect, createSignal, onCleanup } from \"solid-js\"\n\nconst SWAP_MS = 220\n\n/** Mux's text shimmer (ui/components/text-shimmer): an animated sweep while `active`. */\nexport function TextShimmer(props: { text: string; active: boolean; offset?: number }) {\n const [run, setRun] = createSignal(props.active)\n let timer: ReturnType<typeof setTimeout> | undefined\n createEffect(() => {\n clearTimeout(timer)\n if (props.active) setRun(true)\n else timer = setTimeout(() => setRun(false), SWAP_MS)\n })\n onCleanup(() => clearTimeout(timer))\n return (\n <span\n data-component=\"text-shimmer\"\n data-active={props.active ? \"true\" : \"false\"}\n aria-label={props.text}\n style={{ \"--text-shimmer-swap\": `${SWAP_MS}ms`, \"--text-shimmer-index\": `${props.offset ?? 0}` }}\n >\n <span data-slot=\"text-shimmer-char\">\n <span data-slot=\"text-shimmer-char-base\" aria-hidden=\"true\">{props.text}</span>\n <span data-slot=\"text-shimmer-char-shimmer\" data-run={run() ? \"true\" : \"false\"} aria-hidden=\"true\">{props.text}</span>\n </span>\n </span>\n )\n}\n\nconst svg = (path: string, filled = false) => () => (\n <span data-component=\"icon\" data-size=\"small\">\n <svg data-slot=\"icon-svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill={filled ? \"currentColor\" : \"none\"} stroke={filled ? \"none\" : \"currentColor\"} stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d={path} />\n </svg>\n </span>\n)\n\nexport const ChevronDown = svg(\"M4 6l4 4 4-4\")\nexport const ArrowUp = svg(\"M8 13V3.5M3.5 8 8 3.5 12.5 8\")\nexport const Stop = svg(\"M4.5 4.5h7v7h-7z\", true)\nexport const Plus = svg(\"M8 3v10M3 8h10\")\n","// Transcript parts with Mux's markup, so Mux's own stylesheets render them:\n// text and reasoning parts (message-part.css, markdown.css) and tool calls as\n// activity rows (ui/components/basic-tool + collapsible).\nimport type { Part, ReasoningPart, TextPart, ToolPart } from \"@rohansguliani/mux-chat-core\"\nimport { createMemo, createSignal, Match, Show, Switch, type JSX } from \"solid-js\"\nimport { renderMarkdown } from \"../markdown.js\"\nimport { seconds, toolActive, toolDetail, toolSubtitle, toolTitle } from \"../model.js\"\nimport { ChevronDown, TextShimmer } from \"./primitives.jsx\"\n\n/** One collapsible activity row (Mux BasicTool). */\nexport function ActivityRow(props: { title: string; subtitle?: string; active: boolean; name?: string; status?: string; children?: JSX.Element }) {\n const [open, setOpen] = createSignal(false)\n const expandable = () => props.children !== undefined\n return (\n <div\n data-component=\"collapsible\"\n data-variant=\"normal\"\n class=\"tool-collapsible\"\n data-tool={props.name}\n data-status={props.status}\n data-expanded={open() ? \"\" : undefined}\n data-closed={open() ? undefined : \"\"}\n >\n <button type=\"button\" data-slot=\"collapsible-trigger\" aria-expanded={open()} disabled={!expandable()} onClick={() => setOpen(!open())}>\n <div data-component=\"tool-trigger\" data-layout=\"activity-row\">\n <div data-slot=\"basic-tool-tool-trigger-content\">\n <div data-slot=\"basic-tool-tool-info\">\n <div data-slot=\"basic-tool-tool-info-structured\">\n <div data-slot=\"basic-tool-tool-info-main\">\n <span data-slot=\"basic-tool-tool-title\"><TextShimmer text={props.title} active={props.active} /></span>\n <span data-slot=\"basic-tool-tool-detail\" dir=\"ltr\">\n <Show when={props.subtitle}>{(subtitle) => <span data-slot=\"basic-tool-tool-subtitle\">{subtitle()}</span>}</Show>\n </span>\n </div>\n </div>\n </div>\n </div>\n <Show when={expandable()}>\n <div data-slot=\"collapsible-arrow\" data-size=\"compact\"><span data-slot=\"collapsible-arrow-icon\"><ChevronDown /></span></div>\n </Show>\n </div>\n </button>\n <Show when={open() && expandable()}>\n <div data-slot=\"collapsible-content\" data-expanded=\"\">{props.children}</div>\n </Show>\n </div>\n )\n}\n\nfunction ToolRow(props: { part: ToolPart; labels: Record<string, string> }) {\n const detail = createMemo(() => toolDetail(props.part.state).slice(0, 20_000))\n return (\n <ActivityRow title={toolTitle(props.part.tool, props.labels)} subtitle={toolSubtitle(props.part.state)} active={toolActive(props.part)} name={props.part.tool} status={props.part.state.status}>\n {detail() ? (\n <div data-slot=\"mux-tool-output\">\n <pre data-status={props.part.state.status}>{detail()}</pre>\n </div>\n ) : undefined}\n </ActivityRow>\n )\n}\n\nfunction ReasoningRow(props: { part: ReasoningPart; live: boolean }) {\n const active = () => props.live && props.part.time?.end === undefined\n const duration = () => (props.part.time?.end ? seconds(props.part.time.start, props.part.time.end) : undefined)\n return (\n <ActivityRow title={active() ? \"Thinking\" : \"Thought\"} subtitle={duration()} active={active()} name=\"reasoning\">\n <div data-component=\"reasoning-part\">\n <div data-component=\"markdown\" innerHTML={renderMarkdown(props.part.text)} />\n </div>\n </ActivityRow>\n )\n}\n\nexport function TextPartView(props: { part: TextPart }) {\n return (\n <div data-component=\"text-part\">\n <div data-component=\"markdown\" innerHTML={renderMarkdown(props.part.text)} />\n </div>\n )\n}\n\nexport function PartView(props: { part: Part; live: boolean; labels: Record<string, string> }) {\n return (\n <Switch>\n <Match when={props.part.type === \"text\" && (props.part as TextPart)}>{(part) => <TextPartView part={part()} />}</Match>\n <Match when={props.part.type === \"reasoning\" && (props.part as ReasoningPart)}>{(part) => <ReasoningRow part={part()} live={props.live} />}</Match>\n <Match when={props.part.type === \"tool\" && (props.part as ToolPart)}>{(part) => <ToolRow part={part()} labels={props.labels} />}</Match>\n </Switch>\n )\n}\n","import type { PermissionRequest, QuestionRequest, Turn } from \"@rohansguliani/mux-chat-core\"\nimport { createComputed, createEffect, createMemo, createSignal, For, on, onCleanup, Show } from \"solid-js\"\nimport { createChatController, type ToolResult } from \"../controller.js\"\nimport { sameIDs, visibleParts } from \"../model.js\"\nimport { ActivityRow, PartView } from \"./parts.jsx\"\nimport { ArrowUp, ChevronDown, Plus, Stop } from \"./primitives.jsx\"\n\nexport type ResolvedOptions = {\n url: string\n title: string\n subtitle?: string\n placeholder: string\n suggestions: Array<{ label: string; prompt: string }>\n toolLabels: Record<string, string>\n agent: string\n sessionTitle: string\n storageKey: string\n preferredModel?: string\n onToolResult?: (result: ToolResult) => void\n}\n\nexport type ChatAPI = { send(text: string): Promise<boolean>; focus(): void; newChat(): Promise<void> }\n\nfunction TurnView(props: { turn: () => Turn | undefined; streaming: () => boolean; labels: Record<string, string> }) {\n const message = () => props.turn()?.message\n const parts = createMemo(() => visibleParts(props.turn()?.parts ?? []))\n const ids = createMemo(() => parts().map((part) => part.id), [] as string[], { equals: sameIDs })\n const byID = createMemo(() => new Map(parts().map((part) => [part.id, part])))\n const live = createMemo(() => { const m = message(); return m?.role === \"assistant\" && m.time.completed === undefined && props.streaming() })\n const error = () => {\n const m = message()\n const failure = m?.role === \"assistant\" ? m.error : undefined\n return failure && failure.name !== \"MessageAbortedError\" ? failure.data?.message ?? failure.name : undefined\n }\n const userText = () => (props.turn()?.parts ?? []).flatMap((part) => (part.type === \"text\" && !part.synthetic ? [part.text] : [])).join(\"\\n\")\n return (\n <Show when={message()}>\n {(m) => (\n <Show\n when={m().role === \"assistant\"}\n fallback={\n <div data-component=\"user-message\" data-message-id={m().id}>\n <div data-slot=\"user-message-body\"><div data-slot=\"user-message-text\">{userText()}</div></div>\n </div>\n }\n >\n <div data-component=\"assistant-message\" data-message-id={m().id} data-live={live() ? \"\" : undefined}>\n <For each={ids()}>{(id) => <Show when={byID().get(id)}>{(part) => <PartView part={part()} live={live()} labels={props.labels} />}</Show>}</For>\n <Show when={live() && !ids().length}><ActivityRow title=\"Thinking\" active={true} name=\"thinking\" /></Show>\n <Show when={error()}>{(text) => <div data-slot=\"mux-chat-error\" role=\"alert\">{text()}</div>}</Show>\n </div>\n </Show>\n )}\n </Show>\n )\n}\n\nfunction QuestionDock(props: { request: QuestionRequest; onAnswer: (answers: string[][]) => void; onSkip: () => void }) {\n const [answers, setAnswers] = createSignal<string[][]>(props.request.questions.map(() => []))\n const set = (index: number, value: string[]) => setAnswers((previous) => previous.map((current, i) => (i === index ? value : current)))\n const toggle = (index: number, label: string, multiple: boolean) => {\n const current = answers()[index] ?? []\n set(index, multiple ? (current.includes(label) ? current.filter((value) => value !== label) : [...current, label]) : [label])\n }\n return (\n <div data-component=\"mux-question\" data-dock-surface=\"shell\" role=\"group\" aria-label=\"Question from the assistant\">\n <For each={props.request.questions}>\n {(question, index) => (\n <div data-slot=\"mux-question-item\">\n <Show when={question.header}><div data-slot=\"mux-question-header\">{question.header}</div></Show>\n <div data-slot=\"mux-question-text\">{question.question}</div>\n <div data-slot=\"mux-question-options\" role={question.multiple ? \"group\" : \"radiogroup\"}>\n <For each={question.options}>\n {(option) => (\n <button\n type=\"button\"\n data-slot=\"mux-question-option\"\n role={question.multiple ? \"checkbox\" : \"radio\"}\n aria-checked={answers()[index()]?.includes(option.label) ?? false}\n onClick={() => toggle(index(), option.label, !!question.multiple)}\n >\n <span data-slot=\"mux-question-option-label\">{option.label}</span>\n <Show when={option.description}><span data-slot=\"mux-question-option-description\">{option.description}</span></Show>\n </button>\n )}\n </For>\n </div>\n <Show when={question.custom !== false}>\n <input data-slot=\"mux-question-custom\" placeholder=\"Or type your own answer\" onInput={(event) => set(index(), event.currentTarget.value.trim() ? [event.currentTarget.value.trim()] : [])} />\n </Show>\n </div>\n )}\n </For>\n <div data-slot=\"mux-question-actions\">\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"ghost\" onClick={() => props.onSkip()}>Skip</button>\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"primary\" disabled={!answers().every((answer) => answer.length > 0)} onClick={() => props.onAnswer(answers())}>Answer</button>\n </div>\n </div>\n )\n}\n\nfunction PermissionDock(props: { request: PermissionRequest; onReply: (response: \"once\" | \"always\" | \"reject\") => void }) {\n const patterns = () => (props.request.patterns ?? []).filter(Boolean)\n // One answer per request; the dock goes away when the runtime confirms it.\n const [replied, setReplied] = createSignal(false)\n const reply = (response: \"once\" | \"always\" | \"reject\") => {\n if (replied()) return\n setReplied(true)\n props.onReply(response)\n }\n return (\n <div data-component=\"mux-permission\" data-dock-surface=\"shell\" role=\"group\" aria-label=\"Permission request from the assistant\">\n <div data-slot=\"mux-question-header\">Permission</div>\n <div data-slot=\"mux-question-text\">The assistant wants to use {props.request.permission ?? \"a tool\"}.</div>\n <Show when={patterns().length}><div data-slot=\"mux-permission-patterns\">{patterns().join(\"\\n\")}</div></Show>\n <div data-slot=\"mux-question-actions\">\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"ghost\" data-reply=\"reject\" disabled={replied()} onClick={() => reply(\"reject\")}>Deny</button>\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"ghost\" data-reply=\"always\" disabled={replied()} onClick={() => reply(\"always\")}>Always allow</button>\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"primary\" data-reply=\"once\" disabled={replied()} onClick={() => reply(\"once\")}>Allow once</button>\n </div>\n </div>\n )\n}\n\nexport function Chat(props: { options: ResolvedOptions; api: (api: ChatAPI) => void }) {\n const options = props.options\n const chat = createChatController({\n url: options.url,\n agent: options.agent,\n sessionTitle: options.sessionTitle,\n storageKey: options.storageKey,\n preferredModel: options.preferredModel,\n onToolResult: options.onToolResult,\n })\n let timeline!: HTMLDivElement\n let input!: HTMLTextAreaElement\n const [draft, setDraft] = createSignal(\"\")\n // Tool names in the transcript: the app's tool definitions, overridable per mount.\n const labels = createMemo(() => ({ ...chat.toolLabels(), ...options.toolLabels }))\n\n const grow = () => {\n input.style.height = \"auto\"\n input.style.height = `${Math.min(input.scrollHeight, 240)}px`\n }\n const clear = () => {\n input.value = \"\"\n setDraft(\"\")\n grow()\n }\n const restore = (text: string) => {\n input.value = text\n setDraft(text)\n grow()\n }\n /** Sends `text`; text that was not delivered (and is not shown as pending) goes back into an empty composer. */\n const sendText = async (text: string) => {\n const result = await chat.send(text)\n if (result === \"failed\" && !draft()) restore(text)\n return result === \"sent\"\n }\n const submit = async () => {\n const text = draft()\n if (!text.trim() || !chat.ready()) return\n clear()\n await sendText(text)\n }\n\n // Messages sent from outside (handle.send) before the chat is ready wait for\n // it, then go out in order.\n let waiting: Array<{ text: string; resolve: (sent: boolean) => void }> = []\n let queue = Promise.resolve()\n const sendFromHost = (text: string) =>\n new Promise<boolean>((resolve) => {\n waiting.push({ text, resolve })\n if (chat.ready()) flush()\n })\n const flush = () => {\n const batch = waiting\n waiting = []\n for (const { text, resolve } of batch) queue = queue.then(() => sendText(text).then(resolve, () => resolve(false)))\n }\n createEffect(on(chat.ready, (ready) => { if (ready) flush() }))\n onCleanup(() => { for (const { resolve } of waiting) resolve(false) })\n const working = () => chat.streaming() && !draft().trim()\n const lastTurn = () => { const ids = chat.messageIDs(); return ids.length ? chat.turn(ids[ids.length - 1]!) : undefined }\n const awaitingReply = () => chat.streaming() && lastTurn()?.message.role === \"user\"\n\n // Stay pinned to the newest message while the reader is already there: the\n // computed samples the position before the DOM updates, the effect restores it.\n let pinned = true\n const nearBottom = () => !timeline || timeline.scrollHeight - timeline.scrollTop - timeline.clientHeight < 80\n createComputed(on(chat.changes, () => { pinned = nearBottom() }, { defer: true }))\n createEffect(on(chat.changes, () => {\n if (pinned) timeline.scrollTop = timeline.scrollHeight\n // Short transcripts cannot scroll, so fetch older history until they can.\n if (timeline.scrollHeight <= timeline.clientHeight + 120) chat.older()\n }, { defer: true }))\n\n props.api({ send: sendFromHost, focus: () => input?.focus(), newChat: () => chat.newChat() })\n\n return (\n <div data-component=\"mux-chat\" data-session-id={chat.sessionID() ?? \"\"}>\n <header data-slot=\"mux-chat-header\">\n <div data-slot=\"mux-chat-heading\">\n <span data-slot=\"mux-chat-title\">{options.title}</span>\n <Show when={options.subtitle}><span data-slot=\"mux-chat-subtitle\">{options.subtitle}</span></Show>\n </div>\n <span data-slot=\"mux-chat-status\" data-tone={chat.status().tone} title={chat.status().text}>\n <span data-slot=\"mux-chat-status-text\">{chat.status().text}</span>\n </span>\n <button type=\"button\" data-component=\"icon-button\" data-variant=\"ghost\" data-size=\"normal\" data-action=\"new-chat\" aria-label=\"New chat\" title=\"New chat\" onClick={() => { void chat.newChat(); input.focus() }}>\n <Plus />\n </button>\n </header>\n\n <div data-component=\"message-timeline\" ref={timeline} onScroll={() => { if (timeline.scrollTop < 200) chat.older() }}>\n <Show when={chat.messageIDs().length === 0 && chat.ready()}>\n <div data-slot=\"mux-chat-empty\">\n <div data-slot=\"mux-chat-empty-title\">{options.title}</div>\n <Show when={options.subtitle}><div data-slot=\"mux-chat-empty-subtitle\">{options.subtitle}</div></Show>\n <Show when={options.suggestions.length}>\n <div data-slot=\"mux-chat-suggestions\">\n <For each={options.suggestions}>\n {(suggestion) => <button type=\"button\" data-slot=\"mux-chat-suggestion\" onClick={() => void sendText(suggestion.prompt)}>{suggestion.label}</button>}\n </For>\n </div>\n </Show>\n </div>\n </Show>\n <div data-slot=\"session-turn-message-container\">\n <For each={chat.messageIDs()}>{(id) => <TurnView turn={() => chat.turn(id)} streaming={chat.streaming} labels={labels()} />}</For>\n <Show when={awaitingReply()}>\n <div data-component=\"assistant-message\" data-live=\"\"><ActivityRow title=\"Thinking\" active={true} name=\"thinking\" /></div>\n </Show>\n </div>\n </div>\n\n <div data-slot=\"mux-chat-dock\">\n <Show when={chat.permissions()[0]} keyed>\n {(request) => <PermissionDock request={request} onReply={(response) => void chat.replyPermission(request.id, response)} />}\n </Show>\n <Show when={chat.questions()[0]} keyed>\n {(request) => <QuestionDock request={request} onAnswer={(answers) => void chat.answer(request.id, answers)} onSkip={() => void chat.reject(request.id)} />}\n </Show>\n <Show when={chat.error() || chat.unconfirmed()}>\n <div data-slot=\"mux-chat-notice\" role=\"status\">\n <span>{chat.error() || \"Your last message may not have been delivered.\"}</span>\n <Show when={chat.unconfirmed()}>\n <button type=\"button\" data-slot=\"mux-button\" data-variant=\"ghost\" data-action=\"retry\" onClick={() => void chat.retry()}>Retry</button>\n </Show>\n </div>\n </Show>\n <div data-component=\"prompt-composer-surface\" aria-busy={!chat.ready()}>\n <div data-dock-surface=\"shell\" data-component=\"prompt-input-shell\" style={{ \"--prompt-inset\": \"2px\" }}>\n <div data-component=\"prompt-input-scroll\">\n <textarea\n ref={input}\n data-component=\"prompt-input\"\n rows={1}\n placeholder={options.placeholder}\n aria-label={options.placeholder}\n onInput={(event) => { setDraft(event.currentTarget.value); grow() }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.isComposing) {\n event.preventDefault()\n void submit()\n }\n }}\n />\n </div>\n </div>\n <div data-dock-surface=\"tray\" data-dock-attach=\"top\" data-component=\"prompt-controls\">\n <div data-component=\"prompt-controls-inner\">\n <div data-component=\"prompt-control-row\">\n <div data-component=\"prompt-control-left\">\n <div data-component=\"prompt-model-control\">\n <select data-action=\"prompt-model\" aria-label=\"Model\" disabled={!chat.modelGroups().length} onChange={(event) => chat.selectModel(event.currentTarget.value)}>\n <For each={chat.modelGroups()}>\n {(group) => (\n <optgroup label={group.label}>\n <For each={group.models}>{(model) => <option value={model.value} selected={model.value === chat.modelValue()}>{model.label}</option>}</For>\n </optgroup>\n )}\n </For>\n </select>\n <span data-slot=\"prompt-model-chevron\"><ChevronDown /></span>\n </div>\n </div>\n <div data-component=\"prompt-control-right\">\n <div data-component=\"prompt-submit-control\">\n <button\n type=\"button\"\n data-component=\"icon-button\"\n data-variant=\"primary\"\n data-size=\"normal\"\n data-icon-size=\"small\"\n data-action=\"prompt-submit\"\n data-working={working() ? \"\" : undefined}\n aria-label={working() ? \"Stop\" : \"Send\"}\n disabled={working() ? false : !chat.ready() || !draft().trim()}\n onClick={() => (working() ? void chat.abort() : void submit())}\n >\n <Show when={working()} fallback={<ArrowUp />}><Stop /></Show>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { onCleanup, onMount, type JSX } from \"solid-js\"\nimport { render } from \"solid-js/web\"\nimport type { ToolResult } from \"./controller.js\"\nimport { styles } from \"./styles.js\"\nimport { Chat, type ChatAPI } from \"./view/Chat.jsx\"\n\nexport type MuxChatOptions = {\n /** Where the app mounts `mux.handle` (@rohansguliani/mux-chat-runtime). Default `/api/mux`. */\n url?: string\n /** Header and empty-state title. Default \"Assistant\". */\n title?: string\n subtitle?: string\n placeholder?: string\n /** Starter prompts shown in an empty chat. */\n suggestions?: Array<{ label: string; prompt: string }>\n /** Overrides tool names in the transcript; by default they come from each tool's `label`. */\n toolLabels?: Record<string, string>\n /** Model to select when the user has not picked one, as `provider/model`. */\n preferredModel?: string\n /**\n * Called when a tool call finishes while the chat is open. `readOnly` is\n * false when the tool may have changed app data: refresh it then.\n */\n onToolResult?: (result: ToolResult) => void\n /** Default follows the operating system. */\n theme?: \"light\" | \"dark\" | \"system\"\n /** Prefix for the browser storage that remembers the open chat and model. Default `mux-chat`. */\n storageKey?: string\n /** Agent that answers; embed grants force `assistant`. */\n agent?: string\n /** Title of sessions the chat creates. */\n sessionTitle?: string\n}\n\nexport type MuxChatHandle = {\n /**\n * Sends a message as the user, waiting for the chat to be ready if it is not\n * yet. Resolves true once delivered; false otherwise (a refused message is\n * put back into an empty composer).\n */\n send(text: string): Promise<boolean>\n focus(): void\n /** Starts a new, empty chat. */\n newChat(): Promise<void>\n dispose(): void\n}\n\n/**\n * Renders the Mux chat into `host` (inside its shadow root, with Mux's\n * styles). Give `host` a height, e.g. a sidebar column.\n */\nexport function mountMuxChat(host: HTMLElement, options: MuxChatOptions = {}): MuxChatHandle {\n const root = host.shadowRoot ?? host.attachShadow({ mode: \"open\" })\n root.replaceChildren()\n const style = document.createElement(\"style\")\n style.textContent = styles\n const container = document.createElement(\"div\")\n container.style.height = \"100%\"\n root.append(style, container)\n if (options.theme === \"light\" || options.theme === \"dark\") host.setAttribute(\"data-theme\", options.theme)\n else host.removeAttribute(\"data-theme\")\n\n let api: ChatAPI | undefined\n const dispose = render(() => (\n <Chat\n api={(value) => (api = value)}\n options={{\n url: options.url ?? \"/api/mux\",\n title: options.title ?? \"Assistant\",\n subtitle: options.subtitle,\n placeholder: options.placeholder ?? \"Ask anything…\",\n suggestions: options.suggestions ?? [],\n toolLabels: options.toolLabels ?? {},\n agent: options.agent ?? \"assistant\",\n sessionTitle: options.sessionTitle ?? \"Chat\",\n storageKey: options.storageKey ?? \"mux-chat\",\n preferredModel: options.preferredModel,\n onToolResult: options.onToolResult,\n }}\n />\n ), container)\n\n return {\n send: (text) => api?.send(text) ?? Promise.resolve(false),\n focus: () => api?.focus(),\n newChat: () => api?.newChat() ?? Promise.resolve(),\n dispose: () => {\n dispose()\n root.replaceChildren()\n },\n }\n}\n\n/** Solid wrapper around `mountMuxChat`. Options are read once, at mount. */\nexport function MuxChat(props: MuxChatOptions & { id?: string; class?: string; style?: JSX.CSSProperties | string; ref?: (handle: MuxChatHandle) => void }) {\n let host!: HTMLDivElement\n onMount(() => {\n const handle = mountMuxChat(host, props)\n props.ref?.(handle)\n onCleanup(() => handle.dispose())\n })\n return <div ref={host} id={props.id} class={props.class} style={props.style} />\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- /** Model output as sanitized HTML. */
2
- export declare function renderMarkdown(text: string): string;
package/dist/model.d.ts DELETED
@@ -1,33 +0,0 @@
1
- import type { Part, ProviderInventory, ToolPart, ToolState } from "@rohansguliani/mux-chat-core";
2
- export type ModelOption = {
3
- value: string;
4
- label: string;
5
- };
6
- export type ModelGroup = {
7
- id: string;
8
- label: string;
9
- models: ModelOption[];
10
- };
11
- /** Connected providers and their models, in runtime order. */
12
- export declare function modelGroups(inventory: ProviderInventory): ModelGroup[];
13
- /**
14
- * The model to use: the user's stored pick, else the app's preference, else a
15
- * connected provider's default, else the first available. `undefined` when
16
- * nothing is available.
17
- */
18
- export declare function chooseModel(groups: ModelGroup[], inventory: ProviderInventory, stored?: string, preferred?: string): string | undefined;
19
- export declare function parseModel(value: string | undefined): {
20
- providerID: string;
21
- modelID: string;
22
- } | undefined;
23
- /** Parts a reader sees, in order: text, non-empty reasoning, and tool calls. */
24
- export declare function visibleParts(parts: readonly Part[]): Part[];
25
- /** "add_to_watchlist" → "Add to watchlist". */
26
- export declare const humanize: (name: string) => string;
27
- export declare function toolTitle(tool: string, labels?: Record<string, string>): string;
28
- /** One line under the tool name: the tool's own title once it has one, else its most telling input. */
29
- export declare function toolSubtitle(state: ToolState): string;
30
- export declare const toolActive: (part: ToolPart) => boolean;
31
- export declare function toolDetail(state: ToolState): string;
32
- export declare const seconds: (start: number, end: number) => string;
33
- export declare const sameIDs: (a: readonly string[], b: readonly string[]) => boolean;
package/dist/mount.d.ts DELETED
@@ -1,56 +0,0 @@
1
- import { type JSX } from "solid-js";
2
- import type { ToolResult } from "./controller.js";
3
- export type MuxChatOptions = {
4
- /** Where the app mounts `mux.handle` (@rohansguliani/mux-chat-runtime). Default `/api/mux`. */
5
- url?: string;
6
- /** Header and empty-state title. Default "Assistant". */
7
- title?: string;
8
- subtitle?: string;
9
- placeholder?: string;
10
- /** Starter prompts shown in an empty chat. */
11
- suggestions?: Array<{
12
- label: string;
13
- prompt: string;
14
- }>;
15
- /** Overrides tool names in the transcript; by default they come from each tool's `label`. */
16
- toolLabels?: Record<string, string>;
17
- /** Model to select when the user has not picked one, as `provider/model`. */
18
- preferredModel?: string;
19
- /**
20
- * Called when a tool call finishes while the chat is open. `readOnly` is
21
- * false when the tool may have changed app data: refresh it then.
22
- */
23
- onToolResult?: (result: ToolResult) => void;
24
- /** Default follows the operating system. */
25
- theme?: "light" | "dark" | "system";
26
- /** Prefix for the browser storage that remembers the open chat and model. Default `mux-chat`. */
27
- storageKey?: string;
28
- /** Agent that answers; embed grants force `assistant`. */
29
- agent?: string;
30
- /** Title of sessions the chat creates. */
31
- sessionTitle?: string;
32
- };
33
- export type MuxChatHandle = {
34
- /**
35
- * Sends a message as the user, waiting for the chat to be ready if it is not
36
- * yet. Resolves true once delivered; false otherwise (a refused message is
37
- * put back into an empty composer).
38
- */
39
- send(text: string): Promise<boolean>;
40
- focus(): void;
41
- /** Starts a new, empty chat. */
42
- newChat(): Promise<void>;
43
- dispose(): void;
44
- };
45
- /**
46
- * Renders the Mux chat into `host` (inside its shadow root, with Mux's
47
- * styles). Give `host` a height, e.g. a sidebar column.
48
- */
49
- export declare function mountMuxChat(host: HTMLElement, options?: MuxChatOptions): MuxChatHandle;
50
- /** Solid wrapper around `mountMuxChat`. Options are read once, at mount. */
51
- export declare function MuxChat(props: MuxChatOptions & {
52
- id?: string;
53
- class?: string;
54
- style?: JSX.CSSProperties | string;
55
- ref?: (handle: MuxChatHandle) => void;
56
- }): JSX.Element;