@runfusion/fusion 0.58.0 → 0.59.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 (138) hide show
  1. package/README.md +2 -3
  2. package/dist/bin.js +16894 -14563
  3. package/dist/client/.vite/manifest.json +247 -244
  4. package/dist/client/assets/AgentDetailView-UmilJU0C.js +18 -0
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-3x5cc2cp.js → AgentPermissionPolicyEditor-DqYOX1kN.js} +1 -1
  6. package/dist/client/assets/{AgentsView-B77vHi_7.js → AgentsView-Dt0nKyx7.js} +4 -4
  7. package/dist/client/assets/ChatView-C7trV16u.js +6 -0
  8. package/dist/client/assets/CommandCenter-DSrIaOro.css +1 -0
  9. package/dist/client/assets/CommandCenter-Dsg16_mK.js +99 -0
  10. package/dist/client/assets/{DevServerView-BXmkO05R.js → DevServerView-DnpnAU_g.js} +1 -1
  11. package/dist/client/assets/{DirectoryPicker-CZ3EXSE5.js → DirectoryPicker-BzpWdpTC.js} +1 -1
  12. package/dist/client/assets/{DocumentsView-BSWFgTsC.css → DocumentsView-BSC7wh2B.css} +1 -1
  13. package/dist/client/assets/{DocumentsView-GlAyW64J.js → DocumentsView-C2jRDIo6.js} +2 -2
  14. package/dist/client/assets/{EvalsView-BLmcsNNf.js → EvalsView-M1nIXx-S.js} +1 -1
  15. package/dist/client/assets/ExperimentalAgentOnboardingModal-5Kg2iQtB.js +1 -0
  16. package/dist/client/assets/{GoalsView-BRfZ4qGe.js → GoalsView-7bFpy-lr.js} +1 -1
  17. package/dist/client/assets/InsightsView-D0HPy3RP.js +11 -0
  18. package/dist/client/assets/{MemoryView-ChkuBpUf.js → MemoryView-CNzJcoPi.js} +2 -2
  19. package/dist/client/assets/{PiExtensionsManager-DXwQdB7b.js → PiExtensionsManager-D0a8Q47c.js} +1 -1
  20. package/dist/client/assets/{PluginManager-B8zAjhqf.js → PluginManager-N2Ne57i_.js} +1 -1
  21. package/dist/client/assets/{PullRequestView-DL1E1ixh.js → PullRequestView-Be4GM2H5.js} +2 -2
  22. package/dist/client/assets/{ResearchView-BCYCHiyQ.js → ResearchView-DYW9ViMl.js} +1 -1
  23. package/dist/client/assets/SecretsView-B3jEFeGp.js +1 -0
  24. package/dist/client/assets/{SessionTerminal-BvK8A98c.css → SessionTerminal-CDTiqrd7.css} +1 -1
  25. package/dist/client/assets/SessionTerminal-DGFADOH4.js +2 -0
  26. package/dist/client/assets/SettingsModal-CtOCCZEj.js +21 -0
  27. package/dist/client/assets/{SettingsModal-U7ma-5OU.js → SettingsModal-Lw0RmeRd.js} +1 -1
  28. package/dist/client/assets/{SetupWizardModal-BCDoA33s.js → SetupWizardModal-BifMmJIa.js} +2 -2
  29. package/dist/client/assets/{ShadcnColorPicker-EVU2cXpo.js → ShadcnColorPicker-B1UClHqm.js} +2 -2
  30. package/dist/client/assets/{SkillsView-V48VsthB.js → SkillsView--U-5lH1V.js} +1 -1
  31. package/dist/client/assets/TodoView-BwxNdIXm.js +6 -0
  32. package/dist/client/assets/TodoView-CUD4xw3T.css +1 -0
  33. package/dist/client/assets/WorkflowNodeEditor-BmTZR0i8.js +8 -0
  34. package/dist/client/assets/{agentSkills-B-QDeW2q.js → agentSkills-PqEK0Uf_.js} +1 -1
  35. package/dist/client/assets/{app-SucmTDhV.js → app-BlgX3hw4.js} +3 -3
  36. package/dist/client/assets/{app-RIK4I745.js → app-C7eDKtXM.js} +3 -3
  37. package/dist/client/assets/{app-SHNioZxk.js → app-CL1Ik1qS.js} +3 -3
  38. package/dist/client/assets/{app-De_pkbYi.js → app-Ckb9wA3K.js} +3 -3
  39. package/dist/client/assets/{app-cZgmPvs6.js → app-Den3D7oy.js} +3 -3
  40. package/dist/client/assets/{app--U62_ZWS.js → app-nAsTBQMW.js} +3 -3
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DvR35aCH.js → architectureDiagram-3BPJPVTR-DxAKryer.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-ciQdpSqc.js → blockDiagram-GPEHLZMM-BfPC7WG4.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-CV0Z6UEL.js → c4Diagram-AAUBKEIU-DnVJBAB1.js} +1 -1
  44. package/dist/client/assets/channel-D23u9xEh.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-CkAQRX3g.js → chunk-2J33WTMH-2LaGYtnx.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-CJXvYVcN.js → chunk-4BX2VUAB-C7xxOb1T.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-DOv0lN1u.js → chunk-55IACEB6-CAxHAFXx.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-tRsHXz7i.js → chunk-727SXJPM-CnZuaU-I.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-CfzOMXn9.js → chunk-AQP2D5EJ-DutKSMk1.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-BKvUZ2cn.js → chunk-FMBD7UC4-C7PQ58jc.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-FqiVnW7u.js → chunk-ND2GUHAM-BQ0UHfJw.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-BAJDyCpZ.js → chunk-QZHKN3VN-BadmXu1v.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-BMIDIijD.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BMIDIijD.js +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-DYizdcNp.js → cose-bilkent-S5V4N54A-37z9Hx7d.js} +1 -1
  56. package/dist/client/assets/{dagre-BM42HDAG-BDWwvXJx.js → dagre-BM42HDAG-B70rt1ZW.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-BYn_jRw9.js → dashboard-view-DdAL0vfN.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-DmfIFCV-.js → dashboard-view-GT7dDNd7.js} +1 -1
  59. package/dist/client/assets/{diagram-2AECGRRQ-C8ic2E9q.js → diagram-2AECGRRQ-se4pabEk.js} +1 -1
  60. package/dist/client/assets/{diagram-5GNKFQAL-H5IDcv9E.js → diagram-5GNKFQAL-ijyxpVgX.js} +1 -1
  61. package/dist/client/assets/{diagram-KO2AKTUF-DkczJXd6.js → diagram-KO2AKTUF-DUGQ8jXI.js} +1 -1
  62. package/dist/client/assets/{diagram-LMA3HP47-P1vh7RIU.js → diagram-LMA3HP47-BYydC37K.js} +1 -1
  63. package/dist/client/assets/{diagram-OG6HWLK6-CgeybA5t.js → diagram-OG6HWLK6-DlUn5jkD.js} +1 -1
  64. package/dist/client/assets/{erDiagram-TEJ5UH35-DSJa4zRQ.js → erDiagram-TEJ5UH35-ChYKGDIc.js} +1 -1
  65. package/dist/client/assets/{flowDiagram-I6XJVG4X-DG91ZWS9.js → flowDiagram-I6XJVG4X-CoQKr6ba.js} +1 -1
  66. package/dist/client/assets/{folder-open-iGyAYoN-.js → folder-open-YuIEuDwd.js} +1 -1
  67. package/dist/client/assets/{ganttDiagram-6RSMTGT7-dkOQjOK8.js → ganttDiagram-6RSMTGT7-Cff6URun.js} +1 -1
  68. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-GqrJtmDT.js → gitGraphDiagram-PVQCEYII-CnlZVE6T.js} +1 -1
  69. package/dist/client/assets/index-C2HFa2A-.css +1 -0
  70. package/dist/client/assets/index-aBQwNV_I.js +2540 -0
  71. package/dist/client/assets/{infoDiagram-5YYISTIA-BfFhhqbU.js → infoDiagram-5YYISTIA-DYLBAKrj.js} +1 -1
  72. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DBBV-PIS.js → ishikawaDiagram-YF4QCWOH-7xSxQNhn.js} +1 -1
  73. package/dist/client/assets/{journeyDiagram-JHISSGLW-xZisXOgZ.js → journeyDiagram-JHISSGLW-DREqJGeQ.js} +1 -1
  74. package/dist/client/assets/{kanban-definition-UN3LZRKU-CbOJloOw.js → kanban-definition-UN3LZRKU-_lzeYhpL.js} +1 -1
  75. package/dist/client/assets/{mermaid.core-DKBiVV3q.js → mermaid.core-DNTJMy0V.js} +4 -4
  76. package/dist/client/assets/{mindmap-definition-RKZ34NQL-Bf9V63ac.js → mindmap-definition-RKZ34NQL-DR9UulDp.js} +1 -1
  77. package/dist/client/assets/{pieDiagram-4H26LBE5-0ukMaTVl.js → pieDiagram-4H26LBE5-DD1LCdSp.js} +1 -1
  78. package/dist/client/assets/{puzzle-BvEf9PLH.js → puzzle-DaVSYDOd.js} +1 -1
  79. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CwXZAtYI.js → quadrantDiagram-W4KKPZXB-iLEGylFT.js} +1 -1
  80. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DVsu9t-w.js → requirementDiagram-4Y6WPE33-D7IX9UbY.js} +1 -1
  81. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DOJUnv7J.js → sankeyDiagram-5OEKKPKP-DC30taEV.js} +1 -1
  82. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B67g0g9m.js → sequenceDiagram-3UESZ5HK-DjMKbjmL.js} +1 -1
  83. package/dist/client/assets/{shield-alert-4FPCIFZ2.js → shield-alert-BcyPZs5t.js} +1 -1
  84. package/dist/client/assets/{stateDiagram-AJRCARHV-CPPa0bHh.js → stateDiagram-AJRCARHV-DJSnSkUL.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Dyj14elw.js → stateDiagram-v2-BHNVJYJU-KC2rSU3J.js} +1 -1
  86. package/dist/client/assets/{timeline-definition-PNZ67QCA-UVWf2E8M.js → timeline-definition-PNZ67QCA-5DyrH8WZ.js} +1 -1
  87. package/dist/client/assets/{upload-BkgVjwwc.js → upload-C_8IHSzk.js} +1 -1
  88. package/dist/client/assets/{users-9nCT4liw.js → users-DfGiwmqG.js} +1 -1
  89. package/dist/client/assets/{vennDiagram-CIIHVFJN-CqGrv1wQ.js → vennDiagram-CIIHVFJN-Bh5X-uVf.js} +1 -1
  90. package/dist/client/assets/{wardley-L42UT6IY-aA0pos_F.js → wardley-L42UT6IY-ZIwV-wIZ.js} +1 -1
  91. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-C-O5tD1L.js → wardleyDiagram-YWT4CUSO-DI92L1jA.js} +1 -1
  92. package/dist/client/assets/{xychartDiagram-2RQKCTM6-qoIF674C.js → xychartDiagram-2RQKCTM6-B6RjJCM8.js} +1 -1
  93. package/dist/client/index.html +2 -2
  94. package/dist/client/version.json +1 -1
  95. package/dist/droid-cli/package.json +1 -1
  96. package/dist/extension.js +12961 -11668
  97. package/dist/pi-claude-cli/package.json +1 -1
  98. package/dist/plugin-sdk/index.d.ts +20 -1
  99. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +4 -1
  100. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  101. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  102. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +4 -1
  107. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-reports/src/dashboard/components/ShareBlocksPanel.tsx +4 -1
  114. package/dist/plugins/fusion-plugin-reports/src/dashboard/components/__tests__/ShareBlocksPanel.test.tsx +41 -2
  115. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  117. package/package.json +1 -1
  118. package/skill/fusion/SKILL.md +1 -1
  119. package/skill/fusion/references/engine-tools.md +1 -0
  120. package/skill/fusion/references/extension-tools.md +10 -0
  121. package/skill/fusion/references/fusion-capabilities.md +1 -0
  122. package/dist/client/assets/AgentDetailView-whCXABbu.js +0 -18
  123. package/dist/client/assets/ChatView-CninsTIm.js +0 -6
  124. package/dist/client/assets/CommandCenter-B9q-zM9p.css +0 -1
  125. package/dist/client/assets/CommandCenter-C6LmdUin.js +0 -71
  126. package/dist/client/assets/ExperimentalAgentOnboardingModal-DvDix9pH.js +0 -1
  127. package/dist/client/assets/InsightsView-X4RlcgrU.js +0 -11
  128. package/dist/client/assets/SecretsView-B48BIZKw.js +0 -1
  129. package/dist/client/assets/SessionTerminal-CUyYlq16.js +0 -2
  130. package/dist/client/assets/SettingsModal-DbjBoUYD.js +0 -21
  131. package/dist/client/assets/TodoView-DmpJmxu7.css +0 -1
  132. package/dist/client/assets/TodoView-MZ9Pfl65.js +0 -6
  133. package/dist/client/assets/WorkflowNodeEditor-B95Dvf-O.js +0 -8
  134. package/dist/client/assets/channel-Y_Uhrtqx.js +0 -1
  135. package/dist/client/assets/classDiagram-4FO5ZUOK-DhicwSPE.js +0 -1
  136. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DhicwSPE.js +0 -1
  137. package/dist/client/assets/index-Bg8SMXUs.css +0 -1
  138. package/dist/client/assets/index-DO9Ch72Y.js +0 -2544
@@ -1,6 +0,0 @@
1
- import{r as s,j as t,b as Ja}from"./vendor-react-SZ_qB27O.js";import{c as Za,aC as ot,aA as Ye,dS as Xs,dT as ds,bI as Pt,dU as Kn,aF as re,dV as Lt,dE as Mt,dW as Qs,dX as Ft,dY as er,dF as gn,dR as Ct,dZ as tr,d_ as Ys,d$ as nr,e0 as sr,e1 as ar,e2 as rr,e3 as or,ak as ka,e4 as ir,aB as as,bp as Js,e5 as cr,e6 as lr,e7 as Vn,e8 as dr,e9 as ur,ea as mr,eb as hr,ec as fr,ed as gr,a8 as pn,ee as pr,ef as br,bi as vr,an as yr,a_ as hn,K as wr,bQ as xr,eg as Cr,f as Sr,eh as Ra,ei as Mr,dC as kr,D as Rr,ej as Ar,ek as Nr,el as Er,em as Zs,p as Tr,q as jr,dz as Gn,bo as rs,C as rn,s as Wn,P as yt,V as Dr,bm as ea,dn as ta,dm as Fr,X as Ir,bS as Lr,u as qn,bC as Pr,en as Xn,eo as na,ep as Qn,eq as sa,er as aa,es as _r,et as $r,bA as ra,bD as Or}from"./index-DO9Ch72Y.js";import{u as it}from"./vendor-i18n-GF3RlKbq.js";import{SessionTerminal as oa}from"./SessionTerminal-CUyYlq16.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-xterm-BNq00GSj.js";import"./shield-alert-4FPCIFZ2.js";/**
2
- * @license lucide-react v1.7.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const Br=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],Aa=Za("hash",Br);function ia(n){const{sessionId:r,tempUserMessageId:i,initialText:m,initialThinking:c,initialToolCalls:d,setStreamingText:b,setStreamingThinking:h,setStreamingToolCalls:S,cancelStreamingFlushesRef:o,addToast:f,onDone:I,onError:x,onFallbackSession:P}=n;let L=m??"",j=c??"",T=d?[...d]:[],te,R=null,oe=null;const Y=()=>{R=null,b(L)},fe=()=>{oe=null,h(j)},N=()=>{R!==null&&(cancelAnimationFrame(R),R=null),oe!==null&&(cancelAnimationFrame(oe),oe=null)};return o.current=N,{handlers:{onThinking:z=>{j+=z,oe===null&&(oe=requestAnimationFrame(fe))},onText:z=>{L+=z,R===null&&(R=requestAnimationFrame(Y))},onToolStart:z=>{T=[...T,{toolName:z.toolName,args:z.args,isError:!1,status:"running"}],S(T)},onToolEnd:z=>{const ae=[...T];for(let B=ae.length-1;B>=0;B--){const G=ae[B];if(G?.toolName===z.toolName&&G.status==="running"){ae[B]={...G,status:"completed",isError:z.isError,result:z.result},T=ae,S(ae);return}}T=[...ae,{toolName:z.toolName,isError:z.isError,result:z.result,status:"completed"}],S(T)},onFallback:z=>{te=z,P?.(z,r),f?.(`Primary model unavailable. Switched to fallback ${z.fallbackModel}.`,"warning")},onDone:z=>{N(),I({messageId:z.messageId,message:z.message,accumulated:{text:L,thinking:j,toolCalls:T,fallbackInfo:te}})},onError:(z,ae)=>{N(),x(z,i,ae)}},cancelFlushes:N}}const zr="fusion:chat-pending:";function us(n){return n?`${zr}${n}`:null}function Hr(n){const r=us(n);if(!r||typeof window>"u")return[];try{const i=localStorage.getItem(r);if(!i)return[];try{const c=JSON.parse(i);if(Array.isArray(c))return c.filter(d=>typeof d=="string"&&d.trim().length>0)}catch{}const m=i.trim();return m?[m]:[]}catch{return[]}}function Yn(n,r){const i=us(n);if(!(!i||typeof window>"u"))try{const m=r.filter(c=>c.trim().length>0);if(m.length===0){localStorage.removeItem(i);return}localStorage.setItem(i,JSON.stringify(m))}catch{}}function on(n){const r=us(n);if(!(!r||typeof window>"u"))try{localStorage.removeItem(r)}catch{}}const Jn="kb-chat-active-session",Ur="task-planner:";function os(n){return n.agentId.startsWith(Ur)}function Kr(n){return os(n)&&!n.lastMessageAt&&!n.lastMessagePreview}function ca(n){const r=typeof n=="string"?n.trim():"",i=r.indexOf("/");return!r||i<=0||i>=r.length-1?{}:{modelProvider:r.slice(0,i),modelId:r.slice(i+1)}}function Vr(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const i=r.map(m=>{if(!m||typeof m!="object")return null;const c=m,d=typeof c.toolName=="string"?c.toolName:"";if(!d)return null;const b=c.args;return{toolName:d,...b&&typeof b=="object"?{args:b}:{},isError:!!c.isError,result:c.result,status:"completed"}}).filter(m=>m!==null);return i.length>0?i:void 0}function Gr(n){const r=n?.fallback;if(!r||typeof r!="object")return;const i=r,m=typeof i.primaryModel=="string"?i.primaryModel:"",c=typeof i.fallbackModel=="string"?i.fallbackModel:"",d=i.triggerPoint;if(!(!m||!c||d!=="session-creation"&&d!=="prompt-time"))return{primaryModel:m,fallbackModel:c,triggerPoint:d}}function Wr(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const i=r,m=typeof i.summary=="string"?i.summary.trim():"";if(!m)return;const c=(()=>{const d=i.reference;if(!d||typeof d!="object")return;const b=d,h=typeof b.kind=="string"?b.kind.trim():"",S=typeof b.id=="string"?b.id.trim():"";if(!(!h||!S))return{kind:h,id:S,...typeof b.label=="string"&&b.label.trim()?{label:b.label.trim()}:{}}})();return{summary:m,...typeof i.errorClass=="string"&&i.errorClass.trim()?{errorClass:i.errorClass.trim()}:{},...typeof i.code=="string"&&i.code.trim()?{code:i.code.trim()}:{},...typeof i.detail=="string"&&i.detail.trim()?{detail:i.detail.trim()}:{},...c?{reference:c}:{}}}function la(n,r){const i="Failed to get response";return typeof n=="string"?{summary:n.trim()||i}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():i,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...n.reference?{reference:n.reference}:{}}}function cn(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Vr(n.metadata),fallbackInfo:Gr(n.metadata),failureInfo:Wr(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function da(n,r){if(n.some(c=>c.id===r.id))return n;const i=n.findIndex(c=>c.role==="user"&&c.id.startsWith("temp-")&&c.sessionId===r.sessionId&&c.content.trim()===r.content.trim());if(i<0)return[...n,r];const m=[...n];return m[i]=r,m}function qr(n,r){const i=s.useCallback(u=>u?`${ot.CHAT_SESSIONS_PREFIX}${u}`:null,[]),m=s.useCallback((u,g)=>u&&g?`${ot.CHAT_MESSAGES_PREFIX}${u}:${g}`:null,[]),c=s.useCallback(u=>{const g=i(u);return g?(Ye(g,{maxAgeMs:Xs})??[]).filter(A=>!os(A)):[]},[i]),[d,b]=s.useState(()=>c(n)),[h,S]=s.useState(null),[o,f]=s.useState(()=>c(n).length===0),[I,x]=s.useState([]),[P,L]=s.useState(!1),[j,T]=s.useState(!1),[te,R]=s.useState(""),[oe,Y]=s.useState(""),[fe,N]=s.useState([]),[ne,z]=s.useState([]),[ae,B]=s.useState(""),[G,D]=s.useState(new Map),V=s.useRef(0),[Q,le]=s.useState(!1),{agentsMap:M}=ds(n),w=s.useRef(null),E=s.useRef(null),v=s.useRef(!1),F=s.useRef([]),k=s.useRef(()=>!1),J=s.useRef(null),C=s.useRef(d),U=s.useRef(h),ie=s.useRef(I),_=s.useRef(j);C.current=d,U.current=h,ie.current=I,_.current=j,s.useEffect(()=>{F.current=ne},[ne]);const de=s.useRef(new Set),ge=s.useRef(0),xe=s.useRef(n);xe.current!==n&&(Pt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:xe.current??null}}),xe.current=n,ge.current++);const Se=s.useCallback(async()=>{C.current.length===0&&f(!0);try{const g=[...(await Kn(n)).sessions].sort((A,H)=>new Date(H.updatedAt).getTime()-new Date(A.updatedAt).getTime());b(g);const p=i(n);p&&re(p,g,{maxBytes:5e5})}catch{const u=c(n);if(C.current.length===0&&u.length===0){const g=i(n);g&&Lt(g)}}finally{f(!1)}},[i,n]);s.useEffect(()=>{const u=c(n);b(u),f(u.length===0)},[n,c]),s.useEffect(()=>{Se()},[Se,n]);const Je=s.useRef(()=>{}),Le=s.useRef(!1);s.useEffect(()=>{Le.current=!1,E.current=null},[n]),s.useEffect(()=>{if(o||Le.current||U.current)return;const u=Mt(Jn,n);if(!u){Le.current=!0;return}const g=d.find(p=>p.id===u);if(g){Le.current=!0,Je.current(u,g);return}Le.current=!0},[o,d,n]);const Ke=s.useCallback((u,g)=>{const p=m(u,g);return p?Ye(p,{maxAgeMs:Xs})??[]:[]},[m]),Ze=s.useCallback((u,g)=>{const p=Ke(n,u);return p.length>0?(x(p),L(!1),!0):(g?.clearOnMiss!==!1&&x([]),!1)},[n,Ke]),ve=s.useCallback(async(u,g)=>{const p=typeof g?.offset=="number"&&g.offset>0||typeof g?.before=="string",A=m(n,u),H=p?[]:Ke(n,u),$=H.length>0;!p&&$?(x(H),L(!1)):L(!0);try{const W=await Qs(u,{limit:50,order:"desc",...g},n),q=W.messages.slice().reverse().map(cn),ee=U.current?.id===u||g?.commitForStreamingAttach===!0&&E.current?.sessionId===u;p?ee&&(x(ue=>[...q,...ue]),le(W.messages.length>=50)):ee&&(x(q),le(W.messages.length>=50),A&&re(A,q,{maxBytes:5e5}))}catch{!p&&ie.current.length===0&&$&&(x(H),L(!1))}finally{L(!1)}},[m,n,Ke]),et=s.useCallback(()=>{J.current?.(),J.current=null,F.current=[],z([]),R(""),Y(""),N([]),T(!1)},[]),ct=s.useCallback(u=>{const g=U.current?.id;if(typeof u=="number"){const p=F.current.filter((A,H)=>H!==u);F.current=p,z(p),Yn(g,p);return}on(g),F.current=[],z([])},[]),be=s.useCallback(()=>{const[u,...g]=F.current,p=u?.trim();if(!p)return;const A=U.current?.id;F.current=g,z(g),Yn(A,g),kt.current(p)},[]),je=s.useCallback(async(u,g)=>{try{const{session:p}=await Ft(u,n);if(U.current?.id!==u||F.current.length===0)return;if(p.isGenerating||p.inFlightGeneration){k.current(u,p.inFlightGeneration,{silent:g?.silent,priorThreadLoadAlreadyStarted:!0});return}be()}catch{}},[be,n]),pe=s.useCallback((u,g,p)=>{if(w.current||!u)return!0;v.current=!1;const A=ie.current,H=A.length===0||A[0]?.sessionId!==u;E.current={sessionId:u,replayFromEventId:typeof g?.replayFromEventId=="number"?g.replayFromEventId:null},H&&!p?.priorThreadLoadAlreadyStarted&&(Ze(u,{clearOnMiss:!1}),ve(u,{commitForStreamingAttach:!0})),g&&(R(g.streamingText),Y(g.streamingThinking),N(g.toolCalls)),T(!0);const{handlers:$}=ia({sessionId:u,tempUserMessageId:"",initialText:g?.streamingText,initialThinking:g?.streamingThinking,initialToolCalls:g?.toolCalls,setStreamingText:R,setStreamingThinking:Y,setStreamingToolCalls:N,cancelStreamingFlushesRef:J,addToast:p?.silent?void 0:r,onFallbackSession:(q,ee)=>{const ue=ca(q.fallbackModel);b(X=>X.map(K=>K.id===ee?{...K,...ue}:K)),S(X=>X&&X.id===ee?{...X,...ue}:X)},onDone:()=>{R(""),Y(""),N([]),T(!1),_.current=!1,w.current=null,E.current=null,ve(u),be()},onError:q=>{R(""),Y(""),N([]),T(!1),_.current=!1,w.current=null,E.current=null;const ee=la(q);p?.silent||r?.(ee.summary,"error"),ve(u),je(u,{silent:p?.silent})}});Pt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof g?.replayFromEventId=="number",replayFromEventId:g?.replayFromEventId??null,lastEventId:g?.replayFromEventId??null});const W=er(u,$,n,{...typeof g?.replayFromEventId=="number"?{lastEventId:g.replayFromEventId}:{}});return w.current=W,!0},[r,be,je,Ze,ve,n]);k.current=pe;const Ve=s.useCallback((u,g)=>{const p=U.current?.id??null;if(u&&p===u&&!g)return;w.current&&(w.current.close(),w.current=null),E.current=null;const A=g??d.find(H=>H.id===u);S(A||null),U.current=A||null,u&&Ft(u,n).then(({session:H})=>{H.isGenerating&&U.current?.id===u&&(S($=>!$||$.id!==u?$:{...$,...H}),w.current||pe(u,H.inFlightGeneration,{silent:!0}))}).catch(()=>{}),et(),le(!1),u?(Ze(u),ve(u)):x([]),A?.isGenerating&&pe(A.id,A.inFlightGeneration,{priorThreadLoadAlreadyStarted:!0}),u?gn(Jn,u,n):Ct(Jn,n)},[pe,Ze,d,ve,n,et]);Je.current=Ve,s.useEffect(()=>{const u=h?.id;if(!u)return;const g=Hr(u);if(g.length===0)return;F.current=g,z(g);let p=!1;return Ft(u,n).then(({session:A})=>{if(!(p||U.current?.id!==u||F.current.length===0)){if(A.isGenerating){w.current||pe(u,A.inFlightGeneration);return}!_.current&&!w.current&&be()}}).catch(()=>{}),()=>{p=!0}},[h?.id,pe,be,n]);const bn=s.useCallback(async u=>{const g=U.current?.id,p=await tr(u,n);w.current&&(w.current.close(),w.current=null),E.current=null;const A={id:p.session.id,title:p.session.title,agentId:p.session.agentId,status:p.session.status,modelProvider:p.session.modelProvider,modelId:p.session.modelId,thinkingLevel:p.session.thinkingLevel,createdAt:p.session.createdAt,updatedAt:p.session.updatedAt};return b(H=>H.some($=>$.id===A.id)?H:[A,...H]),on(g),et(),Ve(A.id,A),A},[n,et,Ve]),lt=s.useCallback(async u=>{on(u),await Ys(u,{status:"archived"},n),b(g=>g.filter(p=>p.id!==u)),h?.id===u&&(E.current=null,S(null),x([]))},[h,n]),_t=s.useCallback(async(u,g)=>{const p=g.trim()||null,A=d,H=h;b($=>$.map(W=>W.id===u?{...W,title:p}:W)),S($=>$?.id===u?{...$,title:p}:$);try{const W=(await Ys(u,{title:p},n)).session;b(q=>q.map(ee=>ee.id===u?{...ee,title:W.title,updatedAt:W.updatedAt}:ee)),S(q=>q?.id===u?{...q,title:W.title,updatedAt:W.updatedAt}:q)}catch($){throw b(A),S(H),r?.("Failed to rename conversation","error"),$}},[h,r,n,d]),Te=s.useCallback(async u=>{on(u),h?.id===u&&w.current&&(w.current.close(),w.current=null),h?.id===u&&(E.current=null),await nr(u,n);const g=m(n,u);g&&Lt(g),b(p=>p.filter(A=>A.id!==u)),h?.id===u&&(S(null),x([]))},[h,m,n]),$t=s.useCallback(async()=>{if(!h||!Q)return;const u=ie.current[0]?.createdAt;u&&await ve(h.id,{before:u})},[h,Q,ve]),Ot=s.useCallback(()=>{h&&(v.current=!0,J.current?.(),J.current=null,w.current?.close(),w.current=null,E.current=null,sr(h.id,n).catch(()=>{}),T(!1),_.current=!1,R(""),Y(""),N([]),be())},[h,n,be]),kt=s.useRef(()=>{}),dt=ar(),ut=s.useCallback(async u=>{try{await Se();const g=await Ft(u,n);U.current?.id===u&&S(p=>!p||p.id!==u?p:{...p,...g.session}),g.session.isGenerating?(R(""),Y(""),N([]),T(!0),_.current=!0,pe(u,g.session.inFlightGeneration,{silent:!0})):(R(""),Y(""),N([]),T(!1),_.current=!1,await ve(u))}catch{}},[pe,ve,n,Se]),mt=s.useCallback((u,g)=>{if(!h)return;if(_.current){const $=u.trim();if(!$)return;const W=[...F.current,$];F.current=W,z(W),Yn(h.id,W);return}v.current=!1,w.current&&(w.current.close(),w.current=null),E.current=null;const p=`temp-${Date.now()}`,A={id:p,sessionId:h.id,role:"user",content:u,createdAt:new Date().toISOString()};x($=>[...$,A]),R(""),Y(""),N([]),T(!0),_.current=!0;const{handlers:H}=ia({sessionId:h.id,tempUserMessageId:p,setStreamingText:R,setStreamingThinking:Y,setStreamingToolCalls:N,cancelStreamingFlushesRef:J,addToast:r,onFallbackSession:($,W)=>{const q=ca($.fallbackModel);b(ee=>ee.map(ue=>ue.id===W?{...ue,...q}:ue)),S(ee=>ee&&ee.id===W?{...ee,...q}:ee)},onDone:({messageId:$,message:W,accumulated:q})=>{const ee=W?{...cn(W),...q.text.length>0?{content:q.text}:{}}:{id:$||`msg-${Date.now()}`,sessionId:h.id,role:"assistant",content:q.text,thinkingOutput:q.thinking,toolCalls:q.toolCalls.length>0?q.toolCalls:void 0,fallbackInfo:q.fallbackInfo,createdAt:new Date().toISOString()};de.current.add(ee.id),x(ue=>[...ue,ee]),R(""),Y(""),N([]),T(!1),_.current=!1,w.current=null,E.current=null,setTimeout(()=>{de.current.delete(ee.id)},1e3),Se(),be()},onError:($,W,q)=>{const ee=la($),ue=typeof $=="string"?$:ee.summary,X=ir(ue),K=q?.requestAccepted===!0;x(me=>{const Me=K?me:me.filter(De=>De.id!==W);return X?Me:[...Me,{id:`error-${Date.now()}`,sessionId:h.id,role:"assistant",content:ee.summary,failureInfo:ee,createdAt:new Date().toISOString()}]}),R(""),Y(""),N([]),T(!1),_.current=!1,w.current=null,E.current=null,console.error("[useChat] Stream error:",$),X?(console.info("[useChat] Suppressed tab-suspension stream error:",$),h?.id&&(R(""),Y(""),N([]),T(!0),_.current=!0,ut(h.id))):(r?.(ee.summary,"error"),K&&Qs(h.id,{limit:50,order:"desc"},n).then(me=>{if(U.current?.id!==h.id)return;const Me=me.messages.slice().reverse().map(cn);x(De=>Me.reduce(da,De))}).catch(()=>{}),Se()),v.current||be()}});w.current=rr(h.id,u,H,g,n)},[h,n,Se,r,pe,ut,be]);kt.current=mt;const Ge=s.useCallback(async(u,g)=>{if(_.current||!h)return;const p=g.trim();if(!p)return;const A=h.id,H=ie.current,$=H.findIndex(q=>q.id===u);if($===-1)return;x(H.slice(0,$));try{await or(A,u,p,n)}catch(q){console.error("[useChat] Failed to edit message:",q),r?.("Failed to edit message","error"),await ve(A);return}const W=m(n,A);W&&Lt(W),mt(p)},[h,n,r,ve,m,mt]),Ae=ae.trim();s.useEffect(()=>{if(!Ae){V.current++,D(new Map);return}const u=++V.current,g=setTimeout(()=>{(async()=>{try{const p=await Kn(n,void 0,{q:Ae,titleOnly:!1});if(V.current!==u)return;const A=new Map;for(const H of p.sessions)H.matchedMessagePreview&&A.set(H.id,H.matchedMessagePreview);D(A)}catch{V.current===u&&D(new Map)}})()},300);return()=>clearTimeout(g)},[Ae,n]);const tt=(()=>{if(!Ae)return d;const u=Ae.toLowerCase(),g=d.filter(A=>A.title?.toLowerCase().includes(u)||A.agentId.toLowerCase().includes(u));if(G.size===0)return g;const p=new Map;for(const A of g)p.set(A.id,A);for(const A of d){const H=G.get(A.id);if(H===void 0)continue;const $=p.get(A.id);p.set(A.id,{...$??A,matchedMessagePreview:H})}return Array.from(p.values()).sort((A,H)=>new Date(H.updatedAt).getTime()-new Date(A.updatedAt).getTime())})();return s.useEffect(()=>{if(!h?.id||h.isGenerating!==!0||w.current)return;const u=typeof h.inFlightGeneration?.replayFromEventId=="number"?h.inFlightGeneration.replayFromEventId:null,g=E.current;g?.sessionId===h.id&&g.replayFromEventId===u||pe(h.id,h.inFlightGeneration,{silent:!0})},[h?.id,h?.isGenerating,h?.inFlightGeneration,pe]),s.useEffect(()=>{if(!U.current?.isGenerating||(w.current||pe(U.current.id,U.current.inFlightGeneration),!_.current||w.current||!U.current))return;const u=setInterval(async()=>{if(!_.current||w.current||!U.current){clearInterval(u);return}try{(await Kn(n)).sessions.find(A=>A.id===U.current?.id)?.isGenerating||(clearInterval(u),await ve(U.current.id),R(""),Y(""),N([]),T(!1),_.current=!1,be())}catch{}},3e3);return()=>clearInterval(u)},[pe,ve,n,h,be]),s.useEffect(()=>dt.onBecameVisible(()=>{const g=U.current;if(!g||w.current)return;const p=ge.current;Ft(g.id,n).then(A=>{if(!(ge.current!==p||w.current)){if(A.session.isGenerating){R(""),Y(""),N([]),T(!0),_.current=!0,pe(g.id,A.session.inFlightGeneration,{silent:!0});return}_.current&&(R(""),Y(""),N([]),T(!1),_.current=!1,be(),ve(g.id))}}).catch(()=>{})}),[pe,ve,n,dt,be]),s.useEffect(()=>{const u=ge.current,g=n?`?projectId=${encodeURIComponent(n)}`:"",p=()=>ge.current!==u,A=ue=>{if(p())return;const X=JSON.parse(ue.data);if(os(X)){Kr(X)||Se();return}b(K=>K.some(me=>me.id===X.id)?K:[X,...K])},H=ue=>{if(p())return;const X=JSON.parse(ue.data);b(K=>[...K.map(Me=>Me.id===X.id?X:Me)]),U.current?.id===X.id&&(S(X),X.isGenerating&&!w.current&&pe(X.id,X.inFlightGeneration))},$=ue=>{if(p())return;const{id:X}=JSON.parse(ue.data);b(me=>me.filter(Me=>Me.id!==X));const K=m(n,X);K&&Lt(K),U.current?.id===X&&(S(null),x([]))},W=ue=>{if(p())return;const X=JSON.parse(ue.data),K=cn(X);if(C.current.some(me=>me.id===K.sessionId)||Se(),!de.current.has(K.id)){if(U.current?.id===K.sessionId&&_.current&&!w.current&&K.role==="assistant"){x(me=>me.some(Me=>Me.id===K.id)?me:[...me,K]),R(""),Y(""),N([]),T(!1),_.current=!1,be();return}U.current?.id===K.sessionId&&!_.current&&x(me=>me.some(Me=>Me.id===K.id)?me:K.role==="user"?da(me,K):[...me,K])}},q=ue=>{if(p())return;const{id:X}=JSON.parse(ue.data);x(K=>K.filter(me=>me.id!==X))};return ka(`/api/events${g}`,{events:{"chat:session:created":A,"chat:session:updated":H,"chat:session:deleted":$,"chat:message:added":W,"chat:message:deleted":q}})},[pe,m,n,be,Se]),s.useEffect(()=>()=>{w.current&&(w.current.close(),w.current=null),E.current=null},[]),{sessions:d,activeSession:h,sessionsLoading:o,messages:I,messagesLoading:P,isStreaming:j,streamingText:te,streamingThinking:oe,streamingToolCalls:fe,pendingMessages:ne,selectSession:Ve,createSession:bn,archiveSession:lt,renameSession:_t,deleteSession:Te,sendMessage:mt,editMessageAndResend:Ge,stopStreaming:Ot,clearPendingMessage:ct,loadMoreMessages:$t,hasMoreMessages:Q,searchQuery:ae,setSearchQuery:B,filteredSessions:tt,refreshSessions:Se,agentsMap:M}}function ln(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}function Xr(){try{typeof import.meta<"u"}catch{}try{if(typeof localStorage<"u")return localStorage.getItem("kb-debug-room-open")==="1"}catch{}return!1}function Zn(n,r){const i=Xr(),m=r?.warm===!0,c=ln(),d=new Map;let b=!1,h=!1;return{mark(o){b||h||!i||d.has(o)||d.set(o,ln())},complete:o=>{if(!i||b||h){b=!0;return}b=!0,d.set("complete",ln());const f=Array.from(d.entries()).sort((L,j)=>L[1]-j[1]);let I=c;const x={};for(const[L,j]of f)x[L]=Math.max(0,j-I),I=j;const P=Math.max(0,ln()-c);try{console.debug("[room-open]",{roomId:n,warm:m,totalMs:P,phases:x,...o??{}})}catch{}},cancel(){h=!0,b=!0}}}const Qe="fusion:chat-active-room";class Na extends Error{roomId;constructor(r,i){super(r),this.name="RoomMessageDeliveredButReplyFailedError",this.roomId=i}}function is(n){return[...n].sort((r,i)=>new Date(i.updatedAt).getTime()-new Date(r.updatedAt).getTime())}function wt(n,r){const i=n.findIndex(c=>c.id===r.id);if(i===-1)return is([r,...n]);const m=[...n];return m[i]=r,is(m)}function Ue(n){try{return JSON.parse(n.data)}catch{return null}}function Qr(n,r,i){return{id:`temp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,roomId:n,role:"user",content:r,thinkingOutput:null,metadata:null,senderAgentId:null,mentions:[],...i?.length?{attachments:i}:{},createdAt:new Date().toISOString()}}function ua(n,r,i){if(n.some(c=>c.id===r.id))return n;const m=i?n.findIndex(c=>c.id===i):-1;if(m>=0){const c=[...n];return c[m]=r,c}if(r.role==="user"){const c=n.findIndex(d=>d.role==="user"&&d.id.startsWith("temp-")&&d.content.trim()===r.content.trim());if(c>=0){const d=[...n];return d[c]=r,d}}return[...n,r]}function Yr(n,r){const{t:i}=it("app"),m=`${ot.CHAT_ROOMS}:${n??"global"}`,c=`${ot.ACTIVE_CHAT_ROOM_ID}:${n??"global"}`,d=s.useCallback(M=>`${ot.CHAT_ROOM_MESSAGES_PREFIX}${n??"global"}:${M}`,[n]),b=s.useCallback(M=>`${ot.CHAT_ROOM_MEMBERS_PREFIX}${n??"global"}:${M}`,[n]),[h,S]=s.useState(()=>{const M=Ye(m,{maxAgeMs:as});return Array.isArray(M)?M:[]}),[o,f]=s.useState(()=>h.length===0),[I,x]=s.useState(null),[P,L]=s.useState(()=>{const M=Ye(c,{maxAgeMs:Js});return M?h.find(w=>w.id===M)??null:null}),[j,T]=s.useState([]),[te,R]=s.useState([]),[oe,Y]=s.useState(!1),fe=s.useRef(h),N=s.useRef(P),ne=s.useRef(0),z=s.useRef(n);fe.current=h,N.current=P,z.current!==n&&(z.current=n,ne.current+=1);const ae=s.useCallback(async M=>{if(!M){T([]),R([]),Y(!1);return}const w=Zn(M.id,{warm:!1});w.mark("select");const E=Ye(d(M.id),{maxAgeMs:cr}),v=Ye(b(M.id),{maxAgeMs:as}),F=Array.isArray(E)&&E.length>0,k=Array.isArray(v)&&v.length>0;F||k?(w.mark("cache-hit"),F&&(R(E),w.mark("hydrate")),k&&T(v),Y(!1)):(R([]),Y(!0));try{const[J,C]=await Promise.all([lr(M.id,n),Vn(M.id,{limit:100,order:"desc"},n)]);w.mark("members-fetch"),w.mark("messages-fetch"),re(b(M.id),J.members,{maxBytes:5e5}),re(d(M.id),C.messages,{maxBytes:5e5}),N.current?.id===M.id&&(T(J.members),R(C.messages),w.mark("hydrate"))}catch{!F&&!k&&(T([]),R([]))}finally{Y(!1),w.complete({warm:F,membersCached:k})}},[b,d,n]),B=s.useCallback(async()=>{fe.current.length===0&&f(!0);try{const M=await dr({},n),w=is(M.rooms);S(w),re(m,w,{maxBytes:5e5}),x(null);const E=Ye(c,{maxAgeMs:Js})??Mt(Qe,n);if(E){const v=w.find(F=>F.id===E)??null;v?(L(v),ae(v)):(Ct(Qe,n),re(c,"",{maxBytes:5e5}))}}catch(M){const w=M instanceof Error?M.message:i("chatRooms.error.failedToLoad","Failed to load chat rooms");x(w),r?.(w,"error")}finally{f(!1)}},[c,r,ae,n,m]),G=s.useCallback(M=>{if(!M){N.current=null,L(null),Ct(Qe,n),re(c,"",{maxBytes:5e5}),ae(null);return}const w=fe.current.find(E=>E.id===M)??null;N.current=w,L(w),w&&(gn(Qe,w.id,n),re(c,w.id,{maxBytes:5e5}),ae(w))},[c,ae,n]),D=s.useCallback(async M=>{const E=(await ur({name:M.name,memberAgentIds:M.memberAgentIds},n)).room;return S(v=>wt(v,E)),N.current=E,L(E),gn(Qe,E.id,n),re(c,E.id,{maxBytes:5e5}),await ae(E),E},[c,ae,n]),V=s.useCallback(async M=>{await mr(M,n),S(w=>w.filter(E=>E.id!==M)),re(d(M),[],{maxBytes:5e5}),re(b(M),[],{maxBytes:5e5}),N.current?.id===M&&(N.current=null,L(null),T([]),R([]),Ct(Qe,n),re(c,"",{maxBytes:5e5}))},[c,b,d,n]),Q=s.useCallback(async(M,w)=>{const E=N.current,v=E?.id;if(!v)throw new Error(i("chatRooms.error.selectRoomFirst","Select a room before sending a message"));const F=Zn(v,{warm:!1}),k=w?.files?.map(U=>({id:`upload-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,filename:U.name,originalName:U.name,mimeType:U.type||"application/octet-stream",size:U.size,createdAt:new Date().toISOString()})),J=Qr(v,M,k?.length?k:w?.attachments);N.current?.id===v&&R(U=>{const ie=[...U,J];return re(d(v),ie,{maxBytes:5e5}),ie});let C=!1;try{const U=[];if(w?.files?.length)for(const ge of w.files)try{const xe=await hr(v,ge,n);U.push(xe.attachment)}catch{throw new Error(i("chatRooms.error.failedToUpload","Failed to upload attachment: {{filename}}",{filename:ge.name}))}const ie=[...w?.attachments??[],...U],_=await fr(v,{content:M,...ie.length?{attachments:ie}:{}},n);C=!0,_.message?.createdAt&&E&&S(ge=>wt(ge,{...E,updatedAt:_.message.createdAt})),N.current?.id===v&&R(ge=>{const xe=ua(ge,_.message,J.id);return re(d(v),xe,{maxBytes:5e5}),xe});const de=await Vn(v,{limit:100,order:"desc"},n);if(re(d(v),de.messages,{maxBytes:5e5}),N.current?.id!==v)return;R(de.messages),F.mark("hydrate")}catch(U){let ie=null;try{const de=await Vn(v,{limit:100,order:"desc"},n);ie=de.messages,re(d(v),de.messages,{maxBytes:5e5}),N.current?.id===v&&(R(de.messages),F.mark("hydrate"))}catch{!C&&N.current?.id===v&&R(de=>{const ge=de.filter(xe=>xe.id!==J.id);return re(d(v),ge,{maxBytes:5e5}),ge})}const _=ie?.some(de=>de.role==="user"&&de.content.trim()===J.content.trim());if(C||_){const de=U instanceof Error&&U.message.trim()?U.message:i("chatRooms.error.deliveredButRefreshFailed","Message delivered, but failed to refresh room replies");throw new Na(de,v)}throw U}finally{F.complete({source:"send-room-message"})}},[d,n]),le=s.useCallback(async M=>{!M||!fe.current.some(w=>w.id===M)||(await gr(M,n),re(d(M),[],{maxBytes:5e5}),N.current?.id===M&&R([]))},[d,n]);return s.useEffect(()=>{B()},[B]),s.useEffect(()=>{const M=ne.current,w=n?`/api/events?projectId=${encodeURIComponent(n)}`:"/api/events";return ka(w,{onReconnect:()=>{Pt({view:"useChatRooms",trigger:"sse-reconnect",projectId:n,replayAttempted:!1});const E=N.current?.id;if(E){const v=Zn(E,{warm:!0});v.mark("sse-reconnect-refresh"),B().finally(()=>v.complete({source:"sse-reconnect"}));return}B()},events:{"chat:room:created":E=>{if(ne.current!==M)return;const v=Ue(E);v&&S(F=>wt(F,v))},"chat:room:updated":E=>{if(ne.current!==M)return;const v=Ue(E);v&&(S(F=>wt(F,v)),N.current?.id===v.id&&L(v))},"chat:room:deleted":E=>{if(ne.current!==M)return;const v=Ue(E);v?.id&&(S(F=>F.filter(k=>k.id!==v.id)),re(d(v.id),[],{maxBytes:5e5}),re(b(v.id),[],{maxBytes:5e5}),N.current?.id===v.id&&(N.current=null,L(null),T([]),R([]),Ct(Qe,n),re(c,"",{maxBytes:5e5})))},"chat:room:member:added":E=>{if(ne.current!==M)return;const v=Ue(E);!v||N.current?.id!==v.roomId||T(F=>{if(F.some(J=>J.agentId===v.agentId))return F;const k=[...F,v];return re(b(v.roomId),k,{maxBytes:5e5}),k})},"chat:room:member:removed":E=>{if(ne.current!==M)return;const v=Ue(E);!v||N.current?.id!==v.roomId||T(F=>{const k=F.filter(J=>J.agentId!==v.agentId);return re(b(v.roomId),k,{maxBytes:5e5}),k})},"chat:room:message:added":E=>{if(ne.current!==M)return;const v=Ue(E);v&&(S(F=>{const k=F.find(J=>J.id===v.roomId);return k?wt(F,{...k,updatedAt:v.createdAt}):F}),N.current?.id===v.roomId&&R(F=>{const k=ua(F,v);return k===F?F:(re(d(v.roomId),k,{maxBytes:5e5}),k)}))},"chat:room:message:updated":E=>{if(ne.current!==M)return;const v=Ue(E);!v||N.current?.id!==v.roomId||R(F=>{const k=F.map(J=>J.id===v.id?v:J);return re(d(v.roomId),k,{maxBytes:5e5}),k})},"chat:room:message:deleted":E=>{if(ne.current!==M)return;const v=Ue(E);v?.id&&R(F=>{const k=F.filter(C=>C.id!==v.id),J=N.current?.id;return J&&re(d(J),k,{maxBytes:5e5}),k})},"chat:room:messages:cleared":E=>{if(ne.current!==M)return;const v=Ue(E);v?.roomId&&(re(d(v.roomId),[],{maxBytes:5e5}),N.current?.id===v.roomId&&R([]),S(F=>{const k=F.find(J=>J.id===v.roomId);return k?wt(F,{...k,updatedAt:new Date().toISOString()}):F}))}}})},[c,b,d,n,B]),s.useEffect(()=>{P&&(h.some(M=>M.id===P.id)||(N.current=null,L(null),T([]),R([]),Ct(Qe,n),re(c,"",{maxBytes:5e5})))},[P,c,n,h]),{rooms:h,roomsLoading:o,roomsError:I,activeRoom:P,activeRoomMembers:j,messages:te,messagesLoading:oe,selectRoom:G,createRoom:D,deleteRoom:V,sendRoomMessage:Q,clearRoom:le,refreshRooms:B}}const It={direct:"fusion:chat-unread:direct",room:"fusion:chat-unread:rooms"},ma=200;function cs(n){if(!n)return null;const r=new Date(n).getTime();return Number.isFinite(r)?r:null}function Ea(n){const r=Object.entries(n);if(r.length<=ma)return n;const i=r.map(([m,c])=>({id:m,timestamp:c,value:cs(c)??0})).sort((m,c)=>c.value-m.value).slice(0,ma);return Object.fromEntries(i.map(({id:m,timestamp:c})=>[m,c]))}function dn(n){if(!n)return{};try{const r=JSON.parse(n);if(!r||typeof r!="object")return{};const i={};for(const[m,c]of Object.entries(r))typeof m=="string"&&typeof c=="string"&&(i[m]=c);return Ea(i)}catch{return{}}}function Jr(n){const[r,i]=s.useState(()=>{try{return dn(Mt(It.direct,n))}catch{return{}}}),[m,c]=s.useState(()=>{try{return dn(Mt(It.room,n))}catch{return{}}});s.useEffect(()=>{try{i(dn(Mt(It.direct,n)))}catch{i({})}try{c(dn(Mt(It.room,n)))}catch{c({})}},[n]);const d=s.useMemo(()=>({direct:r,room:m}),[r,m]),b=s.useCallback((I,x)=>{const P=Ea(x);try{gn(It[I],JSON.stringify(P),n)}catch{}return P},[n]),h=s.useCallback((I,x)=>{if(I==="direct"){i(P=>b(I,x(P)));return}c(P=>b(I,x(P)))},[b]),S=s.useCallback((I,x,P)=>{const L=cs(P);if(L===null)return!1;const j=d[I][x],T=cs(j);return T===null?!0:L>T},[d]),o=s.useCallback((I,x,P)=>{if(!x)return;const L=P??new Date().toISOString();h(I,j=>({...j,[x]:L}))},[h]),f=s.useCallback((I,x)=>{x.length!==0&&h(I,P=>{const L={...P};for(const j of x)j.id&&(L[j.id]=j.lastActivityAt??new Date().toISOString());return L})},[h]);return{isUnread:S,markRead:o,markAllRead:f}}function ha(n){return n.trim().toLowerCase().replace(/[\s-]+/g,"_").replace(/_+/g,"_")}function Ta(n,r){const i=r.trim();if(!i)return!0;const m=ha(i);return ha(n).includes(m)||n.toLowerCase().includes(i.toLowerCase())}function fa({agents:n,filter:r,highlightedIndex:i,visible:m,onSelect:c,position:d="below",roomMemberIds:b,roomName:h}){const{t:S}=it("app"),o=s.useMemo(()=>n.filter(j=>Ta(j.name,r)),[n,r]),f=!!b,I=f&&r.trim().length>0,x=s.useMemo(()=>f?o.filter(j=>b?.has(j.id)):o,[o,b,f]),P=s.useMemo(()=>f?o.filter(j=>!b?.has(j.id)):[],[o,b,f]),L=I?[...x,...P]:x;return m?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${d}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":S("agentMention.suggestionsLabel","Agent mention suggestions"),children:L.length===0?t.jsx("div",{className:"agent-mention-empty",children:S("agentMention.noAgentsFound","No agents found")}):t.jsxs(t.Fragment,{children:[f&&t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-members-header",children:h?S("agentMention.membersOf","Members of #{{roomName}}",{roomName:h}):S("agentMention.roomMembers","Room members")}),x.map((j,T)=>t.jsxs("button",{type:"button",className:`agent-mention-item${T===i?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${j.id}`,onMouseDown:te=>te.preventDefault(),onClick:()=>c(j),role:"option","aria-selected":T===i,children:[t.jsx(pn,{agent:j,size:20}),f&&t.jsx("span",{className:"status-dot agent-mention-member-dot","aria-label":S("agentMention.roomMemberBadge","Room member")}),t.jsx("span",{className:"agent-mention-name",children:j.name}),t.jsx("span",{className:"agent-mention-role",children:j.role})]},j.id)),f&&!I&&P.length>0&&t.jsx("div",{className:"agent-mention-hint","data-testid":"agent-mention-other-hint",children:S("agentMention.typeToSearch","Type to search other agents")}),f&&I&&P.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-others-header",children:S("agentMention.otherAgents","Other agents")}),P.map((j,T)=>{const te=x.length+T;return t.jsxs("button",{type:"button",className:`agent-mention-item${te===i?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${j.id}`,onMouseDown:R=>R.preventDefault(),onClick:()=>c(j),role:"option","aria-selected":te===i,children:[t.jsx(pn,{agent:j,size:20}),t.jsx("span",{className:"agent-mention-name",children:j.name}),t.jsx("span",{className:"agent-mention-role",children:j.role})]},j.id)})]})]})}):null}function Zr(n,r){return n+r}function eo({visible:n,position:r,tasks:i,files:m,selectedIndex:c,onSelectTask:d,onSelectFile:b,loading:h}){const{t:S}=it("app");if(!n)return null;const o=i.length>0,f=m.length>0;return t.jsxs("div",{className:"file-mention-popup",style:{top:r.top,left:r.left},"data-testid":"file-mention-popup",onMouseDown:I=>{I.preventDefault()},children:[h&&t.jsx("div",{className:"file-mention-popup-loading","data-testid":"file-mention-loading",children:t.jsx("span",{className:"spinner"})}),!h&&!o&&!f&&t.jsx("div",{className:"file-mention-popup-empty","data-testid":"file-mention-empty",children:S("fileMention.empty","No tasks or files found")}),!h&&(o||f)&&t.jsxs("div",{className:"file-mention-popup-groups",children:[o&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:S("fileMention.taskHeader","Tasks")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":S("fileMention.taskMatches","Task matches"),children:i.map((I,x)=>{const P=x;return t.jsxs("li",{className:`file-mention-popup-item${P===c?" file-mention-popup-item--selected":""}`,onClick:()=>d(I),role:"option","aria-selected":P===c,"data-testid":`task-mention-item-${P}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(Aa,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsxs("div",{className:"file-mention-popup-task-row",children:[t.jsx("span",{className:"file-mention-popup-task-id",children:I.id}),t.jsx("span",{className:`file-mention-popup-column-badge file-mention-popup-column-badge--${I.column}`,children:I.column})]}),t.jsx("span",{className:"file-mention-popup-item-path",children:I.title})]})]},I.id)})})]}),f&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:S("fileMention.fileHeader","Files")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":S("fileMention.fileMatches","File matches"),children:m.map((I,x)=>{const P=Zr(i.length,x),L=pr(I.path);return t.jsxs("li",{className:`file-mention-popup-item${P===c?" file-mention-popup-item--selected":""}`,onClick:()=>b(I),role:"option","aria-selected":P===c,"data-testid":`file-mention-item-${P}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(br,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:I.name}),L&&t.jsx("span",{className:"file-mention-popup-item-path",children:L})]})]},I.path)})})]})]})]})}function to(n,r=[],i){const m=n.trim().replace(/^#/,""),c=(b,h)=>i?i(b,h):h;if(!m)return{ok:!1,error:c("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(m))return{ok:!1,error:c("createRoom.lowercase","Use lowercase letters only.")};const d=m.toLowerCase();return d.length>80?{ok:!1,error:c("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(d)?/^[-_]|[-_]$/.test(d)?{ok:!1,error:c("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(b=>b.toLowerCase()===d)?{ok:!1,error:c("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:d}:{ok:!1,error:c("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function no({isOpen:n,onClose:r,onCreate:i,projectId:m,existingRoomNames:c=[]}){const{t:d}=it("app"),[b,h]=s.useState(""),[S,o]=s.useState([]),[f,I]=s.useState(""),[x,P]=s.useState([]),[L,j]=s.useState(!1),[T,te]=s.useState(null),[R,oe]=s.useState(!1),Y=s.useRef(null),fe=s.useRef(null);s.useEffect(()=>{n&&(fe.current=document.activeElement instanceof HTMLElement?document.activeElement:null,j(!0),te(null),vr(void 0,m).then(D=>o(D)).catch(()=>{o([]),te(d("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>j(!1)))},[n,m]),s.useEffect(()=>{if(!n){h(""),I(""),P([]),te(null),oe(!1);return}const D=window.requestAnimationFrame(()=>Y.current?.focus());return()=>window.cancelAnimationFrame(D)},[n]),s.useEffect(()=>{if(!n)return;const D=V=>{V.key==="Escape"&&r()};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[n,r]),s.useEffect(()=>{n||fe.current?.focus()},[n]);const N=s.useMemo(()=>to(b,c,d),[b,c,d]),ne=s.useMemo(()=>{const D=f.trim().toLowerCase();return D?S.filter(V=>V.name.toLowerCase().includes(D)):S},[S,f]),z=s.useMemo(()=>S.filter(D=>x.includes(D.id)),[S,x]),ae=N.ok&&x.length>0&&!R&&!L;if(!n)return null;const B=D=>{R||P(V=>V.includes(D)?V.filter(Q=>Q!==D):[...V,D])},G=async()=>{if(!N.ok){te(N.error);return}if(x.length===0){te(d("createRoom.selectMember","Select at least one member."));return}te(null),oe(!0);try{await i({name:N.name,displayName:`#${N.name}`,memberAgentIds:x}),r()}catch(D){te(D instanceof Error?D.message:d("createRoom.failedCreate","Failed to create room."))}finally{oe(!1)}};return Ja.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:D=>D.target===D.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":d("createRoom.title","Create room"),onClick:D=>D.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:d("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":d("actions.close","Close"),onClick:r,children:"×"})]}),t.jsxs("div",{className:"form-group create-room-modal-name-group",children:[t.jsx("label",{htmlFor:"create-room-name",children:d("createRoom.nameLabel","Room name")}),t.jsxs("div",{className:"create-room-modal-name-field",children:[t.jsx("span",{"aria-hidden":"true",className:"create-room-modal-name-hash",children:"#"}),t.jsx("input",{ref:Y,id:"create-room-name",className:"input",value:b,disabled:R,onChange:D=>{const V=D.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();h(V)}})]}),!N.ok&&t.jsx("div",{className:"form-error",children:N.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:d("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:d("createRoom.searchAgents","Search agents"),value:f,disabled:R,onChange:D=>I(D.target.value)})]}),z.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:z.map(D=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>B(D.id),disabled:R,children:[D.name," ×"]},D.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:L?t.jsx("div",{className:"create-room-modal-empty",children:t.jsx(yr,{label:d("createRoom.loadingAgents","Loading agents...")})}):ne.length===0?t.jsx("div",{className:"create-room-modal-empty",children:S.length===0?d("createRoom.noAgents","No agents in this project yet."):d("createRoom.noMatch","No agents match your search.")}):ne.map(D=>{const V=x.includes(D.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${V?" create-room-modal-member-row--selected":""}`,onClick:()=>B(D.id),disabled:R,children:[t.jsx(pn,{agent:D,size:20}),t.jsx("span",{children:D.name}),t.jsx("span",{className:"create-room-modal-member-role",children:D.role})]},D.id)})}),T&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:T})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:R,children:d("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void G(),disabled:!ae,children:R?d("createRoom.creating","Creating..."):d("createRoom.create","Create room")})]})]})}),document.body)}function so({cliSessionId:n,tier:r,projectId:i,renderTranscript:m,renderComposer:c,queuedCount:d=0,terminalProps:b}){const{t:h}=it("app"),S=r==="generic",[o,f]=s.useState(S?"terminal":"transcript");if(S)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(oa,{sessionId:n,projectId:i,...b})});const I=o==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":o,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":h("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!I,className:`cli-chat-surface__tab${I?"":" is-active"}`,onClick:()=>f("transcript"),children:[t.jsx(hn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:h("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":I,className:`cli-chat-surface__tab${I?" is-active":""}`,onClick:()=>f("terminal"),children:[t.jsx(wr,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:h("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:I?t.jsx(oa,{sessionId:n,projectId:i,...b}):m()}),!I&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[d>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:h("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:d})}),c()]})]})}const ao=200,ro=8,oo=8;function ga(){return new DOMException("The operation was aborted.","AbortError")}function pa(n,r){return r.aborted?Promise.reject(ga()):new Promise((i,m)=>{const c=()=>m(ga());r.addEventListener("abort",c,{once:!0}),n.then(d=>{r.removeEventListener("abort",c),i(d)},d=>{r.removeEventListener("abort",c),m(d)})})}function ba(n,r,i){const m=n.slice(0,r),c=n.slice(r+1),d=c.match(/[\s]|$/),b=d?d.index??c.length:c.length,h=c.slice(b);return`${m}${i}${h}`}function io(n={}){const{projectId:r,workspace:i="project"}=n,[m,c]=s.useState(!1),[d,b]=s.useState(""),[h,S]=s.useState(-1),[o,f]=s.useState([]),[I,x]=s.useState([]),[P,L]=s.useState(!1),[j,T]=s.useState(0),te=s.useRef(null),R=s.useRef(null),oe=[...o.map(B=>({kind:"task",task:B})),...I.map(B=>({kind:"file",file:B}))];s.useEffect(()=>()=>{te.current&&clearTimeout(te.current),R.current?.abort()},[]);const Y=s.useCallback((B,G)=>{if(G<0||G>B.length){c(!1);return}const D=V=>/[a-zA-Z0-9/_.-]/.test(V);for(let V=G-1;V>=0;V--){if(B[V]==="#"){if(V===0){const le=B.slice(V+1,G);S(V),b(le),T(0),c(!0);return}const Q=B[V-1];if(/[\s,.;:!?'"()[\]{}]/.test(Q)){const le=B.slice(V+1,G);S(V),b(le),T(0),c(!0);return}c(!1);return}if(!D(B[V])){c(!1);return}}c(!1)},[]),fe=s.useCallback(()=>{R.current?.abort(),c(!1),b(""),S(-1),f([]),x([]),T(0),L(!1)},[]),N=s.useCallback(async B=>{if(!B.trim()){f([]),x([]),L(!1);return}R.current?.abort();const G=new AbortController;R.current=G;try{L(!0);const[D,V]=await Promise.allSettled([pa(xr(20,0,r,B),G.signal),pa(Cr(B,i,r),G.signal)]);if(G.signal.aborted)return;const Q=D.status==="fulfilled"?D.value.slice(0,ro).map(M=>({id:M.id,title:M.title??"",column:M.column})):[],le=V.status==="fulfilled"?V.value.files.slice(0,oo):[];f(Q),x(le),T(0)}catch(D){D.name!=="AbortError"&&(f([]),x([]))}finally{G.signal.aborted||L(!1)}},[i,r]);s.useEffect(()=>{if(m)return te.current&&clearTimeout(te.current),te.current=setTimeout(()=>{N(d)},ao),()=>{te.current&&clearTimeout(te.current)}},[d,m,N]);const ne=s.useCallback((B,G)=>!m||h<0?G:ba(G,h,`#${B.id}`),[m,h]),z=s.useCallback((B,G)=>!m||h<0?G:ba(G,h,`#${B.path}`),[m,h]),ae=s.useCallback((B,G)=>{if(!m||oe.length===0)return!1;switch(B.key){case"ArrowDown":return B.preventDefault(),T(D=>Math.min(D+1,oe.length-1)),!0;case"ArrowUp":return B.preventDefault(),T(D=>Math.max(D-1,0)),!0;case"Enter":case"Tab":return oe[j]?(B.preventDefault(),!0):!1;case"Escape":return B.preventDefault(),fe(),!0;default:return!1}},[m,oe,j,fe]);return{mentionActive:m,tasks:o,files:I,combinedItems:oe,loading:P,mentionQuery:d,selectedIndex:j,setSelectedIndex:T,detectMention:Y,selectTask:ne,selectFile:z,dismissMention:fe,handleKeyDown:ae}}const es=new Map,fn=new Map;function ms(n){return n??"global"}function ls(n){return`${ot.DISCOVERED_SKILLS_PREFIX}${ms(n)}`}function xt(n){return Ye(ls(n),{maxAgeMs:as})}function co(n,r){for(const i of fn.get(n)??[])i(r)}async function lo(n){const r=ms(n),i=es.get(r);if(i)return i;const m=Sr(n).finally(()=>{es.delete(r)});return es.set(r,m),m}function uo(n){const[r,i]=s.useState(()=>xt(n)??[]),[m,c]=s.useState(()=>xt(n)===null),d=s.useRef(xt(n)!==null),b=ms(n);s.useEffect(()=>{const o=xt(n)??[];i(o),c(xt(n)===null),d.current=xt(n)!==null},[n]),s.useEffect(()=>{const o=fn.get(b)??new Set;return o.add(i),fn.set(b,o),()=>{o.delete(i),o.size===0&&fn.delete(b)}},[b]);const h=s.useCallback(async()=>{try{const o=await lo(n);d.current=!0,re(ls(n),o,{maxBytes:5e5}),co(b,o)}catch{d.current||Lt(ls(n))}finally{c(!1)}},[n,b]);s.useEffect(()=>{h()},[h]);const S=s.useCallback(async()=>{c(!0),await h()},[h]);return{skills:r,loading:m,refresh:S}}function mo(n,r){const i=n.reduce((m,c)=>m+(c.content?.length??0),0)+(r?.length??0);return Math.ceil(i/4)}function va(n){if(!Number.isFinite(n)||n<=0)return"0";if(n<1e3)return String(Math.round(n));const r=n/1e3;return r<10?`~${Number(r.toFixed(1))}k`:`${Math.round(r)}k`}const hs=640,ho=200,ya="__SKIP__";let ts=!1;function fo(n,r=hs){return n>r?"auto":"hidden"}function go(n,r=hs){return Math.max(40,Math.min(n,r))}function po(n,r){const i=new Date(n),c=new Date().getTime()-i.getTime(),d=Math.floor(c/1e3),b=Math.floor(d/60),h=Math.floor(b/60),S=Math.floor(h/24);return d<60?r("chat.relativeTimeJustNow","just now"):b<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:b}):h<24?r("chat.relativeTimeHours","{{count}}h ago",{count:h}):S<7?r("chat.relativeTimeDays","{{count}}d ago",{count:S}):i.toLocaleDateString()}const St="__fn_agent__",bo=280,un=180,mn=500,wa="fusion:chat-sidebar-width",ns="fusion:chat-scope",vo="fusion:chat-draft:";function xa(n,r){return n.slice(r+1).find(i=>i.role==="user")?.content}function Ca(n,r){return r?`${vo}${n}:${r}`:null}function Sa(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const yo=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"],ss=_r;function wo(n,r){const i=n.slice(0,r),m=/(^|[\s\n])@([\w-]*)$/.exec(i);if(!m)return null;const c=m[2]??"",d=i.length-c.length-1;return{filter:c,start:d,end:r}}function xo(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const i=Reflect.get(r,"modelProvider"),m=Reflect.get(r,"modelId");return typeof i!="string"||i.trim().length===0||typeof m!="string"||m.trim().length===0?null:{provider:i,modelId:m}}function Ma(n,r,i){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const m=xo(r??void 0);return m||(i.provider&&i.modelId?{provider:i.provider,modelId:i.modelId}:null)}function Co({projectId:n,defaultModel:r,onClose:i,onCreate:m}){const{t:c}=it("app"),[d,b]=s.useState("agent"),{agents:h,loading:S}=ds(n),[o,f]=s.useState(""),{models:I,favoriteProviders:x,favoriteModels:P,loading:L,refresh:j}=Ra(),T=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[te,R]=s.useState(T),[oe,Y]=s.useState(""),[fe,N]=s.useState(x),[ne,z]=s.useState(P);s.useEffect(()=>{N(x)},[x]),s.useEffect(()=>{z(P)},[P]),s.useEffect(()=>{T&&R(Q=>Q||T)},[T]);const ae=s.useCallback(async Q=>{const le=fe,w=le.includes(Q)?le.filter(E=>E!==Q):[Q,...le];N(w);try{await ra({favoriteProviders:w,favoriteModels:ne}),await j()}catch{N(le)}},[fe,ne,j]),B=s.useCallback(async Q=>{const le=ne,w=le.includes(Q)?le.filter(E=>E!==Q):[Q,...le];z(w);try{await ra({favoriteProviders:fe,favoriteModels:w}),await j()}catch{z(le)}},[ne,fe,j]),G=te||T,D=Q=>{if(Q.preventDefault(),d==="agent"){if(!o)return;m({agentId:o});return}if(!G)return;const le=G.indexOf("/");if(le<=0)return;const M=G.slice(0,le),w=G.slice(le+1);m({agentId:St,modelProvider:M,modelId:w,thinkingLevel:oe||void 0})},V=d==="agent"?!o:!G;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:Q=>Q.stopPropagation(),children:[t.jsx("h3",{children:c("chat.newChatTitle","New Chat")}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${d==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{b("agent")},children:c("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${d==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{b("model"),f(""),R(Q=>Q||T)},children:c("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:D,children:[d==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[c("chat.newChatModeAgent","Agent"),S?t.jsx("div",{className:"chat-new-dialog-loading",children:c("chat.loadingAgents","Loading agents...")}):h.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:c("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:h.map(Q=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${o===Q.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>f(Q.id),"data-testid":`agent-option-${Q.id}`,children:[t.jsx(rs,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:Q.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:Q.role})]},Q.id))})]}),d==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:L?t.jsx("div",{className:"chat-new-dialog-loading",children:c("chat.loadingModels","Loading models...")}):t.jsx(Or,{models:I,value:te,onChange:R,label:c("chat.newChatModeModel","Model"),placeholder:c("chat.selectModel","Select a model"),favoriteProviders:fe,onToggleFavorite:ae,favoriteModels:ne,onToggleModelFavorite:B,showThinkingLevel:!0,thinkingLevel:oe,onThinkingLevelChange:Y,defaultThinkingLevel:"off"})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:c("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:V,children:c("chat.create","Create")})]})]})]})})}function jo({projectId:n,addToast:r,floating:i=!1,compactLayout:m=!1,onPopOut:c,onMaximize:d,onMinimize:b,onClose:h,chatCommandContext:S}){const{t:o}=it("app");s.useEffect(()=>(Pt({view:"ChatView",trigger:ts?"route-active":"remount",projectId:n,replayAttempted:!1}),ts=!1,()=>{ts=!0,Pt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:f,sessionsLoading:I,messages:x,messagesLoading:P,isStreaming:L,streamingText:j,streamingThinking:T,streamingToolCalls:te,selectSession:R,createSession:oe,archiveSession:Y,renameSession:fe,deleteSession:N,sendMessage:ne,editMessageAndResend:z,stopStreaming:ae,pendingMessages:B,clearPendingMessage:G,loadMoreMessages:D,hasMoreMessages:V,searchQuery:Q,setSearchQuery:le,filteredSessions:M,agentsMap:w}=qr(n,r),[E,v]=s.useState(!1),F=!0,[k,J]=s.useState(()=>{try{if(localStorage.getItem(ns)==="rooms"&&F)return"rooms"}catch{}return"direct"}),C=Yr(n,r),{isUnread:U,markRead:ie}=Jr(n),[_,de]=s.useState(()=>{const e=Ca(k,k==="rooms"?C.activeRoom?.id:f?.id);return Sa(e)}),[ge,xe]=s.useState(null),[Se,Je]=s.useState(null),[Le,Ke]=s.useState(""),[Ze,ve]=s.useState(null),[et,ct]=s.useState(null),[be,je]=s.useState(!0),[pe,Ve]=s.useState(bo),[bn,lt]=s.useState(!1),{agentsMap:_t}=ds(n),Te=s.useMemo(()=>w.size>0?w:_t,[_t,w]),{models:$t,defaultProvider:Ot,defaultModelId:kt}=Ra(),dt=s.useMemo(()=>({provider:Ot,modelId:kt}),[kt,Ot]),{skills:ut,loading:mt}=uo(n),[Ge,Ae]=s.useState(!1),[tt,u]=s.useState(""),[g,p]=s.useState(0),[A,H]=s.useState(""),[$,W]=s.useState(!1),[q,ee]=s.useState(0),[ue,X]=s.useState(-1),[K,me]=s.useState([]),[Me,De]=s.useState(!1),[fs,Bt]=s.useState(!1),[ht,gs]=s.useState({}),[zt,We]=s.useState(!1),[Ht,Rt]=s.useState(!1),{pushNav:ps}=Mr(),[,Ut]=s.useState(!1),[ja,Da]=s.useState({top:0,left:0}),ce=io({projectId:n}),vn=s.useCallback(e=>{if(!e||!ce.mentionActive)return;const a=e.getBoundingClientRect();Da({top:a.top-260,left:a.left+8})},[ce.mentionActive]),bs=s.useRef(null),vs=s.useRef(null),ys=s.useRef(null),ws=s.useRef(null),ke=s.useRef(!1),Kt=s.useRef(null),xs=s.useRef(null),qe=s.useRef(null),Vt=s.useRef(0),yn=s.useRef(null),At=s.useRef(null),Pe=s.useRef(null),Ne=s.useRef(null),wn=s.useRef(null),Gt=s.useRef(!1),_e=s.useRef(null),$e=s.useRef(null),we=s.useRef(null),Wt=s.useRef(null),Cs=s.useRef([]),ft=s.useRef(0),Nt=s.useRef(new Map),xn=s.useRef(!1),qt=kr(),nt=qt==="mobile",Cn=qt==="tablet",Ss=s.useRef(null),[Fa,Ms]=s.useState(!1);s.useLayoutEffect(()=>{if(!i){Ms(!1);return}const e=Ss.current;if(!e||typeof ResizeObserver>"u")return;const a=()=>{Ms(e.getBoundingClientRect().width<=768)};a();const l=new ResizeObserver(a);return l.observe(e),()=>l.disconnect()},[i]);const se=nt||Fa||m;s.useEffect(()=>{f?.id&&ie("direct",f.id,f.lastMessageAt??f.updatedAt)},[f?.id,f?.lastMessageAt,f?.updatedAt,ie]),s.useEffect(()=>{C.activeRoom?.id&&ie("room",C.activeRoom.id,C.activeRoom.updatedAt)},[C.activeRoom?.id,C.activeRoom?.updatedAt,ie]),s.useEffect(()=>{if(!f?.id||x.length===0)return;const e=x[x.length-1];ie("direct",f.id,e?.createdAt??f.lastMessageAt??f.updatedAt)},[f?.id,f?.lastMessageAt,f?.updatedAt,ie,x]),s.useEffect(()=>{if(!C.activeRoom?.id||C.messages.length===0)return;const e=C.messages[C.messages.length-1];ie("room",C.activeRoom.id,e?.createdAt??C.activeRoom.updatedAt)},[ie,C.activeRoom?.id,C.activeRoom?.updatedAt,C.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(wa);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const l=Math.max(un,Math.min(mn,a));Ve(l)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(ns);if(e==="direct"){J("direct");return}e==="rooms"&&F&&J("rooms")}catch{}},[F]),s.useEffect(()=>{try{localStorage.setItem(ns,k)}catch{}},[F,k]);const Ee=Ca(k,k==="rooms"?C.activeRoom?.id:f?.id),Sn=s.useRef(Ee);s.useEffect(()=>{Ee!==Sn.current&&(Sn.current=Ee,de(Sa(Ee)))},[Ee]),s.useEffect(()=>{if(!(!Ee||Sn.current!==Ee))try{if(_){localStorage.setItem(Ee,_);return}localStorage.removeItem(Ee)}catch{}},[Ee,_]);const ye=k==="rooms"&&!!C.activeRoom,{keyboardOverlap:ks,keyboardOpen:Xt}=Rr({enabled:(se||Cn)&&(!!f||ye),allowNonMobileViewport:Cn}),Et=Cn&&Xt,Qt=s.useMemo(()=>{const e=tt.trim().toLowerCase();return(e?ut.filter(l=>l.name.toLowerCase().includes(e)):ut).slice(0,10)},[ut,tt]),Mn=s.useMemo(()=>S?Ar(tt,aa):[],[S,tt]),Fe=s.useMemo(()=>{const e=Mn.map(l=>({kind:"command",command:l,disabled:!S?.agentRunning})),a=Qt.map(l=>({kind:"skill",skill:l}));return[...e,...a]},[Mn,Qt,S]),gt=s.useMemo(()=>Array.from(Te.values()),[Te]),Oe=s.useMemo(()=>k!=="rooms"||!C.activeRoom?null:{roomId:C.activeRoom.id,roomName:C.activeRoom.name,memberIds:new Set(C.activeRoomMembers.map(e=>e.agentId))},[F,k,C.activeRoom,C.activeRoomMembers]),st=s.useMemo(()=>{const e=gt.filter(y=>Ta(y.name,A));if(!Oe)return e;const a=e.filter(y=>Oe.memberIds.has(y.id));if(A.trim().length===0)return a;const l=e.filter(y=>!Oe.memberIds.has(y.id));return[...a,...l]},[gt,A,Oe]),kn=s.useMemo(()=>{const e=new Map;for(const a of gt)e.set(a.name.toLowerCase(),a);return e},[gt]),Ia=s.useMemo(()=>Qt.map(e=>e.id).join("\0"),[Qt]);s.useEffect(()=>{p(0)},[Ia]),s.useEffect(()=>{ee(0)},[A,$]),s.useEffect(()=>()=>{Pe.current!==null&&window.clearTimeout(Pe.current)},[]),s.useEffect(()=>{const e=vs.current;if(!e||!V||P)return;const a=new IntersectionObserver(l=>{l[0].isIntersecting&&D()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[V,P,D]);const pt=s.useCallback(()=>ye?C.activeRoom?.id??null:f?.id??null,[ye,C.activeRoom?.id,f?.id]),Rs=s.useCallback((e,a)=>typeof CSS<"u"&&typeof CSS.escape=="function"?e.querySelector(`.chat-message[data-message-id="${CSS.escape(a)}"]`):e.querySelector(`.chat-message[data-message-id="${a.replace(/"/g,'\\"')}"]`),[]),Yt=s.useCallback(()=>{const e=Ne.current,a=pt();if(!e||!a)return;const l=e.scrollTop,y=e.querySelectorAll(".chat-message[data-message-id]"),O=Array.from(y).find(Ce=>Ce.offsetTop+Ce.offsetHeight>=l)??y[0]??null,Z=O?.getAttribute("data-message-id")??null,he=O?O.offsetTop-l:0;At.current={threadId:a,scrollTop:l,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:Z,anchorOffset:he,wasPinnedBefore:!ke.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[pt]),As=s.useCallback(()=>{const e=Ne.current;if(!e)return;const l=e.scrollTop+e.clientHeight>=e.scrollHeight-50;Bt(!l),ke.current=!l,Yt()},[Yt]),Be=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&ke.current)return;let l=0,y=0,O=-1;const Z=6,he=()=>{if(e.isConnected&&!(!a?.force&&ke.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===O?y+=1:(y=0,O=e.scrollHeight),l+=1,l>=Z||y>=2){Bt(!1),ke.current=!1;return}window.requestAnimationFrame(he)}};he()},[]),Tt=ye?C.messages:x;s.useLayoutEffect(()=>{const e=Ne.current,a=pt(),l=At.current;if(!e||!a||!l||l.threadId!==a||l.wasPinnedBefore)return;const y=(typeof performance<"u"?performance.now():Date.now())-l.capturedAtMs,O=e.scrollHeight>e.clientHeight,Z=y>3e3,he=l.scrollTop<=0&&l.anchorOffset<=0&&O;if(!ke.current||Z||he){At.current=null;return}let Ce=l.scrollTop;if(l.anchorMessageId){const He=Rs(e,l.anchorMessageId);He?Ce=He.offsetTop-l.anchorOffset:Ce=l.scrollTop+(e.scrollHeight-l.scrollHeight)}else Ce=l.scrollTop+(e.scrollHeight-l.scrollHeight);e.scrollTop=Math.max(0,Ce),ke.current=!0,Bt(!0),At.current=null},[Tt,pt,Rs]);const Rn=s.useCallback(e=>{},[Tt.length,ye]),Ie=s.useCallback(e=>{Rn(e);const a=Ne.current;a&&(At.current=null,ke.current=!1,Be(a))},[Be,Rn]);s.useLayoutEffect(()=>{qe.current!==null&&(window.clearTimeout(qe.current),qe.current=null);const e=ye?C.activeRoom?.id??null:f?.id??null;if(!e){Kt.current=null;return}const a={threadId:e,loaded:ye?!C.messagesLoading:!P,hasMessages:ye?C.messages.length>0:x.length>0},l=Kt.current,y=l?.threadId!==e,O=l?.threadId===e&&!l.loaded&&a.loaded,Z=l?.threadId===e&&!l.hasMessages&&a.hasMessages;if(!(l===null||y||O||Z))return;const Ce=Ne.current;if(Ce)return Rn(y?"thread-change":O?"finished-loading":Z?"first-messages":"mount"),Be(Ce,{force:!0}),ye||(qe.current=window.setTimeout(()=>{if(qe.current=null,ke.current)return;const He=Ne.current;He&&Be(He)},250)),Kt.current=a,()=>{qe.current!==null&&(window.clearTimeout(qe.current),qe.current=null)}},[ye,C.activeRoom?.id,C.messages.length,C.messagesLoading,f?.id,x.length,P,Be]),s.useEffect(()=>{!L||ke.current||Ie("streaming")},[L,j,T,Ie]),s.useEffect(()=>{const e=pt();if(!e){Vt.current=0,yn.current=null;return}if(yn.current!==e){yn.current=e,Vt.current=Tt.length;return}const a=Vt.current,l=Tt.length,y=l>a,O=!ke.current;Vt.current=l,y&&O&&Ie("new-message")},[Tt,pt,Ie]),s.useEffect(()=>{ks<=0||!Ne.current||Ie("keyboard")},[ks,Ie]),Nr(nt&&Xt),s.useLayoutEffect(()=>{if(!nt||!f&&!ye||typeof window>"u")return;const e=wn.current,a=window.visualViewport;if(!e||!a)return;const l=O=>{if(!(O instanceof HTMLElement))return!1;if(O.tagName==="TEXTAREA")return!0;if(O.tagName!=="INPUT")return!1;const Z=O.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(Z)},y=()=>{if(Gt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.setProperty("--chat-keyboard-accessory-clearance","0px"),e.style.transform="",e.style.willChange="";return}const O=Math.max(0,window.innerHeight-a.offsetTop-a.height),Z=a.offsetTop||0;e.style.setProperty("--vv-height",`${a.height}px`),e.style.setProperty("--vv-offset-top",`${Z}px`),e.style.setProperty("--keyboard-overlap",`${O}px`);const he=(O>0||Z>0)&&l(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",he),e.style.setProperty("--chat-keyboard-accessory-clearance",he&&Qn()?"calc(var(--space-2xl) + var(--space-md))":"0px"),he&&Z>0?(e.style.transform=`translateY(${Z}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return y(),a.addEventListener("resize",y),a.addEventListener("scroll",y),document.addEventListener("focusin",y),document.addEventListener("focusout",y),window.addEventListener("pageshow",y),document.addEventListener("visibilitychange",y),()=>{a.removeEventListener("resize",y),a.removeEventListener("scroll",y),document.removeEventListener("focusin",y),document.removeEventListener("focusout",y),window.removeEventListener("pageshow",y),document.removeEventListener("visibilitychange",y),e.classList.remove("chat-thread--keyboard-active"),e.style.setProperty("--chat-keyboard-accessory-clearance","0px"),e.style.transform="",e.style.willChange=""}},[f,nt,ye]),s.useEffect(()=>{const e=()=>xe(null);if(ge)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[ge]),s.useEffect(()=>{if(!nt||!Xt)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[nt,Xt]),s.useEffect(()=>{const e=xs.current;if(xs.current=k,k==="rooms"&&!C.activeRoom){Kt.current=null;return}if(!(k==="direct"&&(e===null||e==="rooms"))&&!(k==="rooms"&&(e===null||e==="direct")))return;const y=Ne.current;y&&(Be(y,{force:!0}),ke.current=!1,Bt(!1))},[k,C.activeRoom,Be]),s.useEffect(()=>{if(!f&&!ye||ye&&!se)return;const e=()=>{const l=!ke.current;Yt(),l&&se&&Ne.current&&Ie("visibility-restore")},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e)}},[se,nt,f,ye,Yt,Ie]),s.useEffect(()=>{if(ye||typeof ResizeObserver>"u")return;const e=Ne.current;if(!e)return;const a=new ResizeObserver(()=>{ke.current||Be(e)});return a.observe(e),()=>{a.disconnect()}},[ye,Be,f?.id,k]),s.useEffect(()=>{Cs.current=K},[K]),s.useEffect(()=>()=>{for(const e of Cs.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of Nt.current.values())window.clearTimeout(e);Nt.current.clear()},[]);const bt=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const l of Array.from(e)){if(!yo.includes(l.type))continue;const y=l.type.startsWith("image/");a.push({file:l,previewUrl:y?URL.createObjectURL(l):""})}a.length>0&&me(l=>[...l,...a])},[]),Ns=s.useCallback(e=>{me(a=>{const l=a[e];return l?.previewUrl&&URL.revokeObjectURL(l.previewUrl),a.filter((y,O)=>O!==e)})},[]),Es=s.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const l=Array.from(a).filter(y=>y.type.startsWith("image/"));l.length!==0&&bt(l)},[bt]),La=s.useCallback(async e=>{try{await oe(e),v(!1),se&&je(!1)}catch{r(o("chat.failedToCreateSession","Failed to create chat session"),"error")}},[oe,r,se]),Re=s.useCallback(e=>{const a=e??we.current;if(!a)return;const l=qt==="tablet"?ho:hs;a.style.height="auto",a.style.height=`${go(a.scrollHeight,l)}px`,a.style.overflowY=fo(a.scrollHeight,l)},[qt]),Ts=s.useCallback(e=>{we.current=e,e&&Re(e)},[Re]);s.useLayoutEffect(()=>{Re()},[k,_,f?.id,C.activeRoom?.id,Re]);const at=s.useCallback(()=>{if(de(""),Ee)try{localStorage.removeItem(Ee)}catch{}Ae(!1),u(""),W(!1),H(""),X(-1),me(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[Ee]),An=s.useCallback(()=>{const e=_.trim(),a=K.map(l=>l.file);if(!(!e&&a.length===0||!f)){if(S){const l=Er(e,aa);if(l){if(!S.agentRunning){r(o("chat.commandNoRunningAgent","No running agent to steer"),"warning");return}if(a.length>0){r(o("chat.commandNoAttachments","Attachments aren't supported with commands — remove them before sending"),"warning");return}at(),l.command.run({taskId:S.taskId,projectId:S.projectId,remainder:l.remainder}).then(()=>{r(o("chat.commandSteerSuccess","Sent to the running agent"),"success")}).catch(y=>{const O=y instanceof Error&&y.message.trim()?y.message:o("chat.commandSteerFailed","Failed to send to the running agent");r(O,"error")});return}}if(e==="/clear"||e==="/new"){at(),G(),ae(),oe({agentId:f.agentId,modelProvider:f.modelProvider??void 0,modelId:f.modelId??void 0,thinkingLevel:f.thinkingLevel??void 0}).catch(()=>{r(o("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}at(),ne(e,a)}},[_,K,f,at,ae,G,oe,r,ne,S,o]),Nn=s.useCallback(async()=>{const e=_.trim(),a=K.map(l=>l.file);if(!(!e&&a.length===0)){if(k==="rooms"){if(!C.activeRoom)return;if(e==="/clear"||e==="/new"){at();try{await C.clearRoom(C.activeRoom.id)}catch{r(o("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(xn.current)return;xn.current=!0;const l=_;at();try{await C.sendRoomMessage(e,{files:a})}catch(y){if(y instanceof Na){const Z=y.message.trim()?y.message:o("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(o("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:Z}),"error");return}de(l);const O=y instanceof Error&&y.message.trim()?y.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(O,"error")}finally{xn.current=!1}return}An()}},[_,K,F,k,C,C.clearRoom,at,r,An]),Jt=s.useCallback(async e=>{if(k==="rooms"){if(!C.activeRoom)return;try{await C.sendRoomMessage(e)}catch(a){const l=a instanceof Error&&a.message.trim()?a.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(l,"error")}return}f&&ne(e)},[f,r,F,k,C,ne,o]),En=s.useCallback(e=>{de(a=>{const l=ss(a);if(!l)return a;const y=`/skill:${e.name} `,O=a.slice(0,l.start)+y+a.slice(l.end);return window.requestAnimationFrame(()=>{we.current&&(Re(we.current),we.current.focus())}),O}),Ae(!1),u(""),p(0)},[Re]),Tn=s.useCallback((e,a)=>{if(a){r(o("chat.commandNoRunningAgent","No running agent to steer"),"warning");return}de(l=>{const y=ss(l);if(!y)return l;const O=`${e.trigger} `,Z=l.slice(0,y.start)+O+l.slice(y.end);return window.requestAnimationFrame(()=>{we.current&&(Re(we.current),we.current.focus())}),Z}),Ae(!1),u(""),p(0)},[Re,r,o]),Zt=s.useCallback(e=>{const a=we.current;if(!a||ue<0)return;const l=a.selectionStart??ft.current,y=a.selectionEnd??l,O=Math.max(l,y),Z=Math.min(ue,O),Ce=`${`@${e.name.replace(/\s+/g,"_")}`} `,He=_.slice(0,Z)+Ce+_.slice(O),vt=Z+Ce.length;de(He),W(!1),H(""),ee(0),X(-1),window.requestAnimationFrame(()=>{we.current&&(Re(we.current),we.current.focus(),we.current.setSelectionRange(vt,vt))})},[ue,_,Re]),jt=s.useCallback((e,a)=>{const y=we.current?.selectionStart??ft.current,O=_.lastIndexOf("#",y),Z=O>=0?O+a.length:e.length;de(e),ce.dismissMention(),Ut(!1),window.requestAnimationFrame(()=>{we.current&&(Re(we.current),we.current.focus(),we.current.setSelectionRange(Z,Z))})},[ce,_,Re]),js=s.useCallback(e=>{if(ft.current=e.currentTarget.selectionStart??ft.current,ce.mentionActive&&ce.combinedItems.length>0){if(ce.handleKeyDown(e,_),e.key==="Enter"||e.key==="Tab"){const a=ce.combinedItems[ce.selectedIndex];a?.kind==="task"?jt(ce.selectTask(a.task,_),`#${a.task.id}`):a?.kind==="file"&&jt(ce.selectFile(a.file,_),`#${a.file.path}`)}return}if($&&e.key==="ArrowDown"){e.preventDefault(),st.length>0&&ee(a=>(a+1)%st.length);return}if($&&e.key==="ArrowUp"){e.preventDefault(),st.length>0&&ee(a=>a===0?st.length-1:a-1);return}if($&&e.key==="Enter"){e.preventDefault();const a=st[q]??st[0];a&&Zt(a);return}if($&&e.key==="Escape"){e.preventDefault(),W(!1),H(""),X(-1);return}if(Ge&&e.key==="ArrowDown"){e.preventDefault(),Fe.length>0&&p(a=>(a+1)%Fe.length);return}if(Ge&&e.key==="ArrowUp"){e.preventDefault(),Fe.length>0&&p(a=>a===0?Fe.length-1:a-1);return}if(Ge&&(e.key==="Enter"||e.key==="Tab")&&Fe.length>0){e.preventDefault();const a=Fe[g]??Fe[0];a?.kind==="skill"?En(a.skill):a?.kind==="command"&&Tn(a.command,a.disabled);return}if(Ge&&e.key==="Escape"){e.preventDefault(),Ae(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Nn())},[$,st,q,Zt,Ge,Fe,g,En,Tn,Nn,ce,jt,_]),en=s.useCallback((e,a)=>{const l=wo(e,a);if(l){W(!0),H(l.filter),X(l.start);return}W(!1),H(""),X(-1)},[]),Ds=s.useCallback(e=>{const a=e.target,l=a.value,y=a.selectionStart??l.length;Re(a),ft.current=y,de(l);const O=ss(l);O?(Ae(!0),u(O.filter)):(Ae(!1),u("")),en(l,y),ce.detectMention(l,y),Ut(ce.mentionActive),ce.mentionActive&&vn(a)},[en,Re]),tn=s.useCallback(e=>{const a=e.currentTarget,l=a.selectionStart??a.value.length;ft.current=l,en(a.value,l),ce.detectMention(a.value,l),Ut(ce.mentionActive),ce.mentionActive&&vn(a)},[en,ce,vn]),Fs=s.useCallback(e=>{e.key!=="Escape"&&tn(e)},[tn]),Is=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(Gt.current=!0,_e.current!==null&&window.clearTimeout(_e.current),_e.current=window.setTimeout(()=>{Gt.current=!1,_e.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),$e.current!==null&&window.clearTimeout($e.current),$e.current=window.setTimeout(()=>{$e.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Pe.current!==null&&window.clearTimeout(Pe.current),Pe.current=window.setTimeout(()=>{Ae(!1),W(!1),H(""),X(-1),Ut(!1),ce.dismissMention(),Pe.current=null},120)},[ce]),Ls=s.useCallback(()=>{Gt.current=!1,_e.current!==null&&(window.clearTimeout(_e.current),_e.current=null),Pe.current!==null&&(window.clearTimeout(Pe.current),Pe.current=null),$e.current!==null&&(window.clearTimeout($e.current),$e.current=null)},[]);s.useEffect(()=>()=>{_e.current!==null&&window.clearTimeout(_e.current),$e.current!==null&&window.clearTimeout($e.current)},[]);const Pa=s.useCallback(async e=>{xe(null);try{await Y(e),r(o("chat.conversationArchived","Conversation archived"),"success")}catch{r(o("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[Y,r]),jn=s.useCallback(e=>{const a=M.find(l=>l.id===e)??(f?.id===e?f:null);xe(null),We(!1),Ke(a?.title??""),Je({sessionId:e,title:a?.title??""})},[f,M]),Ps=s.useCallback(async()=>{if(Se)try{await fe(Se.sessionId,Le),Je(null),Ke(""),r(o("chat.conversationRenamed","Conversation renamed"),"success")}catch{}},[r,Se,fe,Le,o]),_a=s.useCallback(async e=>{ve(null),xe(null);try{await N(e),r(o("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(o("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[N,r]),Dt=s.useCallback(e=>{try{localStorage.setItem(wa,String(e))}catch{}},[]),$a=s.useCallback(e=>{if(se||Et)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const l=e.clientX,y=pe;let O=y;document.body.style.userSelect="none";const Z=Ce=>{const He=Ce.clientX-l,vt=Math.max(un,Math.min(mn,y+He));O=vt,Ve(vt),Dt(vt)},he=Ce=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(Ce.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",Z),document.removeEventListener("pointerup",he),Dt(O)};document.addEventListener("pointermove",Z),document.addEventListener("pointerup",he)},[se,Dt,pe,Et]),Oa=s.useCallback(e=>{if(se||Et||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,l=e.key==="ArrowLeft"?-a:a,y=Math.max(un,Math.min(mn,pe+l));Ve(y),Dt(y)},[se,Dt,pe,Et]),_s=s.useCallback(e=>{const a=M.find(l=>l.id===e);ie("direct",e,a?.lastMessageAt??a?.updatedAt),R(e),We(!1),se&&je(!1)},[M,se,ie,R]),Dn=s.useCallback(()=>{R(""),je(!0),We(!1)},[R]),Fn=s.useCallback(()=>{C.selectRoom(null),je(!0),We(!1)},[C]),Ba=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(hn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:o("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>v(!0),children:[t.jsx(yt,{size:16}),o("chat.newChat","New Chat")]})]}),ze=Ma(f,f?.agentId?Te.get(f.agentId)??null:null,dt),In=s.useMemo(()=>{if(!ze?.provider||!ze.modelId)return null;const e=$t.find(a=>a.provider===ze.provider&&a.id===ze.modelId);return e?.contextWindow?e.contextWindow:null},[ze?.modelId,ze?.provider,$t]),za=s.useMemo(()=>mo(x,L?j:void 0),[L,x,j]),Xe=Zs(ze?.provider,ze?.modelId),rt=ze?.provider??null,Ln=!!(f||L||x.length>0),nn=se&&!be&&(k==="rooms"?ye:Ln),sn=se?nn:k==="rooms"?ye:!!f,$s=s.useRef(sn);s.useEffect(()=>{const e=$s.current;$s.current=sn,se&&(e||!sn||ps({type:"view",revert:k==="rooms"?Fn:Dn}))},[k,Dn,Fn,sn,se,ps]);const Os=f?.agentId===St?Xe??"Fusion":f?.title||Te.get(f?.agentId??"")?.name||f?.agentId||"Chat",Ha=f?.title||o("chat.untitledSession","Untitled"),Ua=!!(Xe&&Xe!==Os),Ka=!se&&Ln&&In!==null,Bs=va(za),an=In!==null?va(In):null,Pn=an?o("chat.contextWindowAria","Estimated {{used}} of {{total}} context tokens",{used:Bs,total:an}):null,Va=nn&&k==="direct"&&!!f,zs=nn&&k==="direct",Hs=nn&&k==="rooms",_n=Te.get(f?.agentId??"")?.name||(f?.agentId===St?Xe??"Fusion":f?.agentId?.slice(0,30)??"Fusion"),$n=!1,On=f?.agentId===St,Ga=e=>e.length>50?`${e.slice(0,50)}…`:e;s.useEffect(()=>{if(!zt)return;const e=a=>{ys.current?.contains(a.target)||We(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[zt]),s.useEffect(()=>{if(!Ht)return;const e=l=>{ws.current?.contains(l.target)||Rt(!1)},a=l=>{l.key==="Escape"&&Rt(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[Ht]),s.useEffect(()=>{(!se||k!=="direct"||be)&&We(!1)},[se,k,be]),s.useEffect(()=>{Rt(!1)},[C.activeRoom?.id]);const Bn=s.useCallback((e,a)=>{const l=Nt.current.get(e);l&&window.clearTimeout(l),gs(O=>({...O,[e]:a}));const y=window.setTimeout(()=>{gs(O=>{const{[e]:Z,...he}=O;return he}),Nt.current.delete(e)},2e3);Nt.current.set(e,y)},[]),Us=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),Bn(e,"success")}catch{Bn(e,"error")}},[Bn]),zn=f?.agentId===St,Hn=s.useCallback((e,a,l)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${ht[e]==="success"?" chat-message-copy-action--success":""}${ht[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":l??`chat-copy-response-${e}`,"aria-label":ht[e]==="success"?o("chat.responseCopied","Response copied"):ht[e]==="error"?o("chat.copyFailed","Copy failed"):o("chat.copyResponse","Copy response"),onClick:()=>{Us(e,a)},children:ht[e]==="success"?t.jsx(Tr,{size:14}):t.jsx(jr,{size:14})}),[ht,Us]),Un=s.useCallback(e=>{const a=Ne.current;if(!a)return;const l=`[data-testid="chat-message-${e}"]`,y=a.querySelector(l);if(!y)return;const O=y.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop,Z=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;a.scrollTo({top:O,behavior:Z?"auto":"smooth"})},[]),Ks=f?.cliExecutorAdapterId??null,Vs=!!Ks,Wa=Ks==="generic"?"generic":"hybrid",qa=f?.cliSessionFile||f?.id||"",Gs=!Vs&&!L,Ws=()=>t.jsxs("div",{className:"chat-messages",ref:Ne,onScroll:As,children:[t.jsx("div",{ref:vs,className:"chat-load-more-sentinel",children:V&&P&&t.jsx("div",{className:"chat-loading-older",children:o("chat.loadingOlderMessages","Loading older messages…")})}),L?t.jsxs(t.Fragment,{children:[x.map((e,a)=>t.jsx(Xn,{message:e,forcePlain:!1,agentName:_n,hideAssistantIdentity:On,showAssistantModelTag:$n,activeModelTag:Xe,activeModelProvider:rt,activeSessionId:f?.id??null,mentionAgentsByName:kn,roomContext:null,copyAction:zn&&e.role==="assistant"?Hn(e.id,e.content):void 0,onScrollToTop:Un,isAwaitingQuestionAnswer:e.role==="assistant"&&a===x.length-1&&!L,submittedQuestionAnswer:xa(x,a),onQuestionSubmit:Jt,canEdit:Gs,onEditMessage:z},e.id)),t.jsx($r,{streamingText:j,streamingThinking:T,streamingToolCalls:te,forcePlain:!1,agentName:_n,hideAssistantIdentity:On,showAssistantModelTag:$n,activeModelTag:Xe,activeModelProvider:rt,copyAction:zn&&j?Hn("__streaming__",j,"chat-copy-response-streaming"):void 0,onQuestionSubmit:Jt})]}):P?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):x.length===0&&!f?Ba():x.length===0&&f?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:x.map((e,a)=>t.jsx(Xn,{message:e,forcePlain:!1,agentName:_n,hideAssistantIdentity:On,showAssistantModelTag:$n,activeModelTag:Xe,activeModelProvider:rt,activeSessionId:f?.id??null,mentionAgentsByName:kn,roomContext:null,copyAction:zn&&e.role==="assistant"?Hn(e.id,e.content):void 0,onScrollToTop:Un,isAwaitingQuestionAnswer:e.role==="assistant"&&a===x.length-1&&!L,submittedQuestionAnswer:xa(x,a),onQuestionSubmit:Jt,canEdit:Gs,onEditMessage:z},e.id))}),t.jsx("div",{ref:bs})]}),qs=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Wt,type:"file","data-testid":"chat-file-input",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{bt(e.target.files),e.target.value=""}}),Ge&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":o("chat.skillSuggestions","Skill suggestions"),children:mt&&Mn.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:o("chat.loadingSkills","Loading skills…")}):Fe.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:tt?o("chat.noSkillsFound","No skills found"):o("chat.noSkillsAvailable","No skills available")}):Fe.map((e,a)=>e.kind==="command"?t.jsxs("button",{type:"button",role:"option","aria-selected":a===g,"aria-disabled":e.disabled,className:`chat-skill-menu-item chat-command-menu-item${a===g?" chat-skill-menu-item--highlighted":""}${e.disabled?" chat-command-menu-item--disabled":""}`,onMouseDown:l=>l.preventDefault(),onMouseEnter:()=>p(a),onClick:()=>Tn(e.command,e.disabled),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.command.trigger}),t.jsx("span",{className:"chat-skill-menu-item-description",children:e.disabled?o("chat.commandNoRunningAgentHint","No running agent to steer"):e.command.description})]},`command-${e.command.trigger}`):t.jsxs("button",{type:"button",role:"option","aria-selected":a===g,className:`chat-skill-menu-item${a===g?" chat-skill-menu-item--highlighted":""}`,onMouseDown:l=>l.preventDefault(),onMouseEnter:()=>p(a),onClick:()=>En(e.skill),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.skill.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.skill.relativePath,children:e.skill.relativePath})]},e.skill.id))}),K.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:K.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Ns(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),B.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-pending-stack","data-testid":"chat-pending-stack",children:B.map((e,a)=>t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:o("chat.queuedMessage","Queued: {{preview}}",{preview:Ga(e)})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":o("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":`chat-pending-dismiss-${a}`,onClick:()=>G(a),children:"×"})]},`${a}-${e}`))}),t.jsx("div",{className:"chat-pending-divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":o("chat.attachFiles","Attach files"),onClick:()=>Wt.current?.click(),children:t.jsx(na,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Me?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),De(!0)},onDragLeave:()=>De(!1),onDrop:e=>{e.preventDefault(),De(!1),bt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ts,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:_,onChange:Ds,onKeyDown:js,onKeyUp:Fs,onClick:tn,onBlur:Is,onFocus:Ls,onPaste:Es,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Qn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(fa,{agents:gt,filter:A,highlightedIndex:q,visible:$,onSelect:Zt,position:"below",roomMemberIds:Oe?.memberIds,roomName:Oe?.roomName}),t.jsx(eo,{visible:ce.mentionActive&&!$,position:ja,tasks:ce.tasks,files:ce.files,selectedIndex:ce.selectedIndex,onSelectTask:e=>{jt(ce.selectTask(e,_),`#${e.id}`)},onSelectFile:e=>{jt(ce.selectFile(e,_),`#${e.path}`)},loading:ce.loading})]}),t.jsx(sa,{isStreaming:L,canSend:!!(_.trim()||K.length>0),onSend:An,onStop:ae})]})]}),Xa=se?void 0:{width:`${pe}px`},Qa=Va?t.jsxs("div",{className:"chat-mobile-session-menu",ref:ys,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":zt,onClick:()=>We(e=>!e),children:[rt?t.jsx(Gn,{provider:rt,size:"md"}):t.jsx(rs,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:Ha}),t.jsx(rn,{size:16,"aria-hidden":"true"})]}),zt&&t.jsxs("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:[M.map(e=>t.jsxs("div",{className:`chat-mobile-session-option-row${f?.id===e.id?" chat-mobile-session-option-row--active":""}`,role:"none",children:[t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${f?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>_s(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||o("chat.untitledSession","Untitled")})}),t.jsx("button",{type:"button",className:"btn-icon chat-mobile-session-rename","data-testid":`chat-mobile-session-rename-${e.id}`,"aria-label":o("chat.renameConversationAria","Rename conversation {{title}}",{title:e.title||o("chat.untitledSession","Untitled")}),onClick:()=>jn(e.id),children:t.jsx(Wn,{size:14})})]},e.id)),t.jsxs("button",{type:"button",role:"menuitem",className:"chat-mobile-session-new","data-testid":"chat-mobile-session-new",onClick:()=>{We(!1),v(!0)},children:[t.jsx(yt,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.newChat","New Chat")})]})]})]}):null,Ya=t.jsxs("div",{className:"chat-sidebar-scope-toggle chat-view-header-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsxs("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${k==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":k==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>J("direct"),children:[t.jsx(hn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.scopeDirect","Direct")})]}),t.jsxs("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${k==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":k==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>J("rooms"),children:[t.jsx(Aa,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.scopeRooms","Rooms")})]})]});return t.jsxs("div",{ref:Ss,className:`chat-view${i?" chat-view--floating":""}${se?" chat-view--narrow":""}${zs?" chat-view--mobile-direct-thread":""}`,children:[t.jsx(Dr,{icon:hn,title:o("chat.title","Chat"),actions:t.jsxs(t.Fragment,{children:[zs?t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn-icon chat-back-btn",onClick:Dn,"data-testid":"chat-back-btn","aria-label":o("chat.backToConversations","Back to conversations"),children:t.jsx(ea,{size:16})}),Qa]}):Ya,se?null:t.jsxs("button",{className:"btn btn-sm btn-primary chat-view-header-new-chat",onClick:()=>v(!0),"data-testid":"chat-new-btn",children:[t.jsx(yt,{size:14}),o("chat.newChat","New Chat")]}),!i&&c?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:c,"aria-label":o("chat.popOut","Pop out chat"),title:o("chat.popOut","Pop out chat"),"data-testid":"chat-pop-out",children:t.jsx(ta,{size:16})}):null,i&&d?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:d,"aria-label":o("chat.maximizeToChatView","Open in Chat view"),title:o("chat.maximizeToChatView","Open in Chat view"),"data-testid":"chat-modal-maximize",children:t.jsx(ta,{size:16})}):null,i&&b?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:b,"aria-label":o("chat.minimizeToQuickChat","Minimize to quick chat"),title:o("chat.minimizeToQuickChat","Minimize to quick chat"),"data-testid":"chat-modal-minimize",children:t.jsx(Fr,{size:16})}):null,i&&h?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:h,"aria-label":o("chat.closeChat","Close chat"),title:o("chat.closeChat","Close chat"),"data-testid":"chat-modal-close",children:t.jsx(Ir,{size:16})}):null]})}),t.jsxs("div",{className:"chat-view__body",children:[t.jsxs("div",{className:`chat-sidebar${be?"":" chat-sidebar--hidden"}`,style:Xa,children:[k==="direct"?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-sidebar-search-container",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx(Lr,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:o("chat.searchConversations","Search conversations..."),value:Q,onChange:e=>le(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:I?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.loadingConversations","Loading...")}):M.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.noConversationsYet","No conversations yet")}):M.map(e=>{const a=f?.id===e.id,l=!a&&U("direct",e.id,e.lastMessageAt??e.updatedAt),y=Ma(e,Te.get(e.agentId)??null,dt),O=Zs(y?.provider,y?.modelId)??"Fusion",Z=e.title||o("chat.untitledSession","Untitled");return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>_s(e.id),onContextMenu:he=>{he.preventDefault(),xe({sessionId:e.id,x:he.clientX,y:he.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsxs("div",{className:"chat-session-actions",children:[t.jsx("button",{type:"button",className:"btn-icon chat-session-action-btn chat-session-rename-btn",onClick:he=>{he.stopPropagation(),jn(e.id)},"data-testid":"chat-session-rename-btn","aria-label":o("chat.renameConversationAria","Rename conversation {{title}}",{title:Z}),children:t.jsx(Wn,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon chat-session-action-btn chat-session-delete-btn",onClick:he=>{he.stopPropagation(),ve(e.id)},"data-testid":"chat-session-delete-btn","aria-label":o("chat.deleteConversation","Delete conversation"),children:t.jsx(qn,{size:14})})]}),t.jsxs("div",{className:"chat-session-title",children:[Z,l?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||o("chat.noMessages","No messages")}),e.matchedMessagePreview?t.jsx("div",{className:"chat-session-preview chat-session-preview--matched","data-testid":`chat-session-matched-preview-${e.id}`,children:o("chat.matchedInMessage",'Matched: "{{preview}}"',{preview:e.matchedMessagePreview})}):null,t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[y?.provider?t.jsx(Gn,{provider:y.provider,size:"sm"}):null,t.jsx("span",{children:Te.get(e.agentId)?.name||(e.agentId===St?O:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?po(e.updatedAt,o):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!se&&t.jsx("div",{className:"chat-sidebar-rooms-header","data-testid":"chat-sidebar-rooms-header",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary","data-testid":"chat-create-room-btn",onClick:()=>lt(!0),children:[t.jsx(yt,{size:14}),o("chat.createRoom","Create room")]})}),C.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:o("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:C.rooms.map(e=>{const a=C.activeRoom?.id===e.id,l=!a&&U("room",e.id,e.updatedAt);return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${a?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{ie("room",e.id,e.updatedAt),C.selectRoom(e.id),se&&je(!1)},onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),ie("room",e.id,e.updatedAt),C.selectRoom(e.id),se&&je(!1))},children:[t.jsxs("span",{className:"chat-room-item-details",children:[t.jsxs("span",{className:"chat-room-item-name-row",children:[t.jsxs("span",{className:"chat-room-item-name",children:["#",e.name]}),l?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:o("chat.roomMemberCount","{{count}} member",{count:C.activeRoomMembers.length,defaultValue_one:"{{count}} member",defaultValue_other:"{{count}} members"})}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":o("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:y=>{y.stopPropagation(),ct(e.id)},children:t.jsx(qn,{size:14})})]},e.id)})})]}),k==="rooms"?se?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary chat-sidebar-footer-btn","data-testid":"chat-create-room-btn",onClick:()=>lt(!0),children:[t.jsx(yt,{size:14}),o("chat.createRoom","Create room")]})}):null:se?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>v(!0),"data-testid":"chat-new-btn",children:[t.jsx(yt,{size:14}),o("chat.newChat","New Chat")]})}):null]}),!se&&be&&!Et&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":un,"aria-valuemax":mn,"aria-valuenow":pe,"aria-label":o("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:$a,onKeyDown:Oa}),ge&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:ge.y,left:ge.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>jn(ge.sessionId),"data-testid":"chat-context-rename",children:[t.jsx(Wn,{size:14}),o("chat.rename","Rename")]}),t.jsxs("button",{onClick:()=>Pa(ge.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Pr,{size:14}),o("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{xe(null),ve(ge.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(qn,{size:14}),o("chat.delete","Delete")]})]}),Se&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Je(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"chat-rename-dialog-title",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{id:"chat-rename-dialog-title",children:o("chat.renameConversationTitle","Rename Conversation")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.renameConversationBody","Choose a new name for this conversation. Leave it blank to show Untitled.")}),t.jsx("label",{className:"chat-rename-label",htmlFor:"chat-rename-input",children:o("chat.conversationName","Conversation name")}),t.jsx("input",{id:"chat-rename-input",className:"input chat-rename-input",type:"text",value:Le,placeholder:o("chat.renamePlaceholder","Untitled"),"data-testid":"chat-rename-input",onChange:e=>Ke(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Ps())},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Je(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ps(),"data-testid":"chat-rename-save",children:o("chat.save","Save")})]})]})}),Ze&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>ve(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteConversationBody","This action cannot be undone. All messages in this conversation will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>ve(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void _a(Ze),children:o("chat.delete","Delete")})]})]})}),et&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>ct(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteRoomBody","This action cannot be undone. This room and all its messages will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>ct(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await C.deleteRoom(et),ct(null)}catch{r(o("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:o("chat.delete","Delete")})]})]})}),k==="rooms"?t.jsxs("div",{ref:wn,className:"chat-thread",children:[C.activeRoom?t.jsxs(t.Fragment,{children:[(!se||Hs)&&t.jsxs("div",{className:"chat-room-thread-header",children:[Hs&&t.jsx("button",{className:"btn-icon",onClick:Fn,"data-testid":"chat-back-btn",children:t.jsx(ea,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:ws,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Ht,onClick:()=>Rt(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",C.activeRoom.name]}),t.jsx(rn,{size:16,"aria-hidden":"true"})]}),Ht&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:C.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===C.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{ie("room",e.id,e.updatedAt),C.selectRoom(e.id),Rt(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:C.activeRoomMembers.map(e=>t.jsx(pn,{agent:Te.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:Ne,onScroll:As,children:[C.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):C.messages.filter(e=>e.content.trim()!==ya).length===0?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):C.messages.filter(e=>e.content.trim()!==ya).map(e=>{const a=e.senderAgentId?Te.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):o("chat.you","You"),l={id:e.id,sessionId:e.roomId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput??void 0,toolCalls:void 0,fallbackInfo:void 0,attachments:e.attachments,createdAt:e.createdAt};return t.jsx(Xn,{message:l,forcePlain:!1,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:C.activeRoom?.id??null,mentionAgentsByName:kn,roomContext:Oe,onScrollToTop:Un,isAwaitingQuestionAnswer:!1,onQuestionSubmit:Jt},e.id)}),t.jsx("div",{ref:bs})]}),C.activeRoom&&fs&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ie("fab-click"),children:[t.jsx(rn,{size:14}),o("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:o("chat.selectRoomOrCreate","Select a room or create one")}),C.activeRoom&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Wt,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{bt(e.target.files),e.target.value=""}}),K.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:K.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Ns(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":o("chat.attachFiles","Attach files"),onClick:()=>Wt.current?.click(),children:t.jsx(na,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Me?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),De(!0)},onDragLeave:()=>De(!1),onDrop:e=>{e.preventDefault(),De(!1),bt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ts,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:_,onChange:Ds,onKeyDown:js,onKeyUp:Fs,onClick:tn,onBlur:Is,onFocus:Ls,onPaste:Es,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Qn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(fa,{agents:gt,filter:A,highlightedIndex:q,visible:$,onSelect:Zt,position:"below",roomMemberIds:Oe?.memberIds,roomName:Oe?.roomName})]}),t.jsx(sa,{isStreaming:!1,canSend:!!(_.trim()||K.length>0),onSend:Nn})]})]})]}):t.jsxs("div",{ref:wn,className:"chat-thread",children:[!se&&(Ln||!se)&&t.jsx("div",{className:"chat-thread-header",children:t.jsxs("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:[rt?t.jsx(Gn,{provider:rt,size:"md"}):t.jsx(rs,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:Os}),Ua&&t.jsx("span",{className:"chat-model-tag",children:Xe}),Ka&&an&&Pn?t.jsxs("span",{className:"chat-thread-header-context","data-testid":"chat-thread-context-window",title:Pn,"aria-label":Pn,children:[Bs," / ",an]}):null]})}),Vs?t.jsx(so,{cliSessionId:qa,tier:Wa,projectId:n,renderTranscript:Ws,renderComposer:()=>f?qs():null}):t.jsxs(t.Fragment,{children:[Ws(),fs&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ie("fab-click"),children:[t.jsx(rn,{size:14}),o("chat.latest","Latest")]}),f&&qs()]})]}),t.jsx(no,{isOpen:bn,onClose:()=>lt(!1),projectId:n,existingRoomNames:C.rooms.map(e=>e.name),onCreate:async e=>{await C.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),k!=="rooms"&&J("rooms"),lt(!1),se&&je(!1)}})]}),E&&t.jsx(Co,{projectId:n,defaultModel:dt,onClose:()=>v(!1),onCreate:La})]})}export{jo as ChatView,go as clampChatInputHeight,fo as resolveChatInputOverflowY,Ma as resolveSessionProvider};
@@ -1 +0,0 @@
1
- .cc-date-range{position:relative;display:inline-block}.cc-date-range-trigger{display:inline-flex;align-items:center;gap:var(--space-xs)}.cc-date-range-popover{position:absolute;top:calc(100% + var(--space-xs));right:0;z-index:20;min-width:16rem;padding:var(--space-md);background:var(--surface-1, #1c1c1c);border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-md, 8px);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:var(--space-md)}.cc-date-range-presets{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.cc-date-range-custom{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-date-range-field{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-date-range-field input{background:var(--surface-2, color-mix(in srgb, #7f7f7f 12%, transparent));border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-sm, 4px);color:var(--text);padding:var(--space-xs) var(--space-sm)}.cc-bar-chart,.cc-stacked-bar,.cc-sparkline,.cc-token-series,.cc-token-series-plot,.cc-token-series-axis,.cc-line-chart,.cc-radial-gauge,.cc-funnel,.cc-funnel-stage{min-inline-size:0;max-inline-size:100%}.cc-bar-chart{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-bar-row{display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 2 + var(--space-lg)),32%) minmax(0,1fr) auto;align-items:center;gap:var(--space-sm)}.cc-bar-label{min-inline-size:0;display:inline-flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-bar-label>.provider-icon{flex:0 0 auto}.cc-bar-label-text{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-model-label{min-inline-size:0;max-inline-size:100%;display:inline-flex;align-items:center;gap:var(--space-xs);vertical-align:middle}.cc-model-label .provider-icon{flex:0 0 auto}.cc-model-label-text{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-bar-track{min-inline-size:0;position:relative;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-bar-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-bar-row:nth-child(8n+1) .cc-bar-fill{background:var(--accent)}.cc-bar-row:nth-child(8n+2) .cc-bar-fill{background:var(--todo)}.cc-bar-row:nth-child(8n+3) .cc-bar-fill{background:var(--in-progress)}.cc-bar-row:nth-child(8n+4) .cc-bar-fill{background:var(--in-review)}.cc-bar-row:nth-child(8n+5) .cc-bar-fill{background:var(--triage)}.cc-bar-row:nth-child(8n+6) .cc-bar-fill{background:var(--color-success)}.cc-bar-row:nth-child(8n+7) .cc-bar-fill{background:var(--color-warning)}.cc-bar-row:nth-child(8n) .cc-bar-fill{background:var(--color-error)}.cc-bar-value{min-inline-size:0;font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text);overflow-wrap:anywhere;text-align:end}.cc-stacked-bar{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-stacked-track{display:flex;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-stacked-segment{block-size:100%;background:var(--accent);transition:width var(--transition-normal)}.cc-stacked-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-md)}.cc-stacked-legend-item{min-inline-size:0;display:flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;color:var(--text-muted);overflow-wrap:anywhere}.cc-stacked-swatch{inline-size:var(--space-sm);block-size:var(--space-sm);border-radius:var(--radius-sm);background:var(--accent);display:inline-block}.cc-stacked-segment:nth-child(8n+1),.cc-stacked-legend-item:nth-child(8n+1) .cc-stacked-swatch{background:var(--accent)}.cc-stacked-segment:nth-child(8n+2),.cc-stacked-legend-item:nth-child(8n+2) .cc-stacked-swatch{background:var(--todo)}.cc-stacked-segment:nth-child(8n+3),.cc-stacked-legend-item:nth-child(8n+3) .cc-stacked-swatch{background:var(--in-progress)}.cc-stacked-segment:nth-child(8n+4),.cc-stacked-legend-item:nth-child(8n+4) .cc-stacked-swatch{background:var(--in-review)}.cc-stacked-segment:nth-child(8n+5),.cc-stacked-legend-item:nth-child(8n+5) .cc-stacked-swatch{background:var(--triage)}.cc-stacked-segment:nth-child(8n+6),.cc-stacked-legend-item:nth-child(8n+6) .cc-stacked-swatch{background:var(--color-success)}.cc-stacked-segment:nth-child(8n+7),.cc-stacked-legend-item:nth-child(8n+7) .cc-stacked-swatch{background:var(--color-warning)}.cc-stacked-segment:nth-child(8n),.cc-stacked-legend-item:nth-child(8n) .cc-stacked-swatch{background:var(--color-error)}.cc-sparkline{display:flex;align-items:flex-end;gap:1px;block-size:var(--space-2xl)}.cc-sparkline-bar{flex:1 1 0;min-inline-size:1px;background:var(--accent);border-radius:1px;transition:height var(--transition-normal)}.cc-sparkline-bar:nth-child(8n+1){background:var(--accent)}.cc-sparkline-bar:nth-child(8n+2){background:var(--todo)}.cc-sparkline-bar:nth-child(8n+3){background:var(--in-progress)}.cc-sparkline-bar:nth-child(8n+4){background:var(--in-review)}.cc-sparkline-bar:nth-child(8n+5){background:var(--triage)}.cc-sparkline-bar:nth-child(8n+6){background:var(--color-success)}.cc-sparkline-bar:nth-child(8n+7){background:var(--color-warning)}.cc-sparkline-bar:nth-child(8n){background:var(--color-error)}.cc-token-series{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0}.cc-token-series-plot{display:flex;align-items:flex-end;gap:var(--space-xs);block-size:clamp(calc(var(--space-2xl) * 2),24vw,calc(var(--space-2xl) * 5));padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 10%,transparent),transparent),var(--surface-1);overflow:hidden}.cc-token-series-bar{flex:1 1 0;min-inline-size:var(--space-xs);border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:linear-gradient(180deg,var(--accent),color-mix(in srgb,var(--accent) 45%,var(--surface-2)));box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 24%,transparent);transition:height var(--transition-normal);animation:cc-token-series-rise var(--duration-normal) ease-out both}.cc-token-series-empty{inline-size:100%;block-size:2px;align-self:flex-end;border-radius:var(--radius-pill);background:var(--border-subtle)}.cc-token-series-axis{display:flex;justify-content:space-between;gap:var(--space-sm);color:var(--text-muted);font-size:.75rem;font-variant-numeric:tabular-nums}.cc-token-series-axis span{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-token-series-axis span:last-child{text-align:end}@keyframes cc-token-series-rise{0%{transform:scaleY(.82);opacity:.72}to{transform:scaleY(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cc-token-series-bar{transition:none;animation:none}}@media(max-width:768px){.cc-token-series-plot{block-size:clamp(calc(var(--space-2xl) + var(--space-xl)),38vw,calc(var(--space-2xl) * 4));padding:var(--space-sm)}}.cc-line-chart{display:block;inline-size:100%;block-size:clamp(calc(var(--space-2xl) * 2),22vw,calc(var(--space-2xl) * 5));aspect-ratio:5 / 2;color:var(--accent);overflow:hidden}.cc-line-chart-series{color:var(--accent)}.cc-line-chart-series:nth-child(2n){color:var(--color-success)}.cc-line-chart-series:nth-child(3n){color:var(--color-warning)}.cc-line-chart-path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:100;stroke-dashoffset:100;animation:cc-line-chart-draw calc(var(--duration-slow) * 4) ease-out forwards}.cc-line-chart-point{fill:var(--surface-1);stroke:currentColor;stroke-width:2px}@keyframes cc-line-chart-draw{to{stroke-dashoffset:0}}@media(prefers-reduced-motion:reduce){.cc-line-chart-path{animation:none;stroke-dashoffset:0}}@media(max-width:768px){.cc-line-chart{block-size:clamp(calc(var(--space-2xl) * 2),44vw,calc(var(--space-2xl) * 4));aspect-ratio:auto}}.cc-recharts-chart,.cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-recharts-chart .recharts-wrapper{inline-size:100%!important;max-inline-size:100%}.cc-recharts-chart .recharts-legend-wrapper{inset-inline:0!important;inset-block-start:auto!important;inset-block-end:0!important;inline-size:100%!important;max-inline-size:100%;overflow:hidden}.cc-recharts-chart .recharts-default-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-xs) var(--space-sm);inline-size:100%;max-inline-size:100%;margin:0;padding:0}.cc-recharts-chart .recharts-legend-item{display:inline-flex!important;align-items:center;max-inline-size:min(100%,calc(var(--space-2xl) * 5));margin-inline-end:0!important;min-inline-size:0}.cc-recharts-chart .recharts-legend-item-text{display:inline-block;min-inline-size:0;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}@media(max-width:768px){.cc-recharts-chart,.cc-recharts-empty{block-size:calc(var(--space-2xl) * 8 + var(--space-md))}.cc-model-label{max-inline-size:100%}}.cc-radial-gauge{min-inline-size:0;display:grid;place-items:center;gap:var(--space-sm);color:var(--text)}.cc-radial-gauge-ring{position:relative;display:grid;place-items:center;inline-size:clamp(calc(var(--space-2xl) * 3),32vw,calc(var(--space-2xl) * 4 + var(--space-lg)));aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at center,var(--surface-1) 0 54%,transparent 55%),conic-gradient(var(--accent) var(--cc-radial-value),var(--surface-2) 0);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 35%,transparent);isolation:isolate;animation:cc-radial-gauge-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-radial-gauge-ring:before{content:"";position:absolute;inset:var(--space-sm);border-radius:inherit;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);box-shadow:inset 0 0 var(--space-md) color-mix(in srgb,var(--accent) 22%,transparent);animation:cc-radial-gauge-sweep calc(var(--duration-slow) * 8) linear infinite}.cc-radial-gauge-core{position:relative;z-index:1;display:grid;place-items:center;inline-size:58%;aspect-ratio:1;background:var(--surface-1);border-radius:50%;box-shadow:inset 0 0 var(--space-md) var(--surface-2)}.cc-radial-gauge-value{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.cc-radial-gauge-label{max-inline-size:100%;color:var(--text-muted);font-size:.8125rem;overflow-wrap:anywhere;text-align:center}@keyframes cc-radial-gauge-pulse{0%,to{filter:saturate(1)}50%{filter:saturate(1.35)}}@keyframes cc-radial-gauge-sweep{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.cc-radial-gauge-ring,.cc-radial-gauge-ring:before{animation:none}}.cc-funnel{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-funnel-stage{display:flex;flex-direction:column;gap:var(--space-xs)}.cc-funnel-header{min-inline-size:0;display:flex;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-funnel-label,.cc-funnel-conversion,.cc-funnel-value{min-inline-size:0;overflow-wrap:anywhere}.cc-funnel-conversion{flex:0 1 auto;text-align:end}.cc-funnel-conversion{font-variant-numeric:tabular-nums}.cc-funnel-track{block-size:var(--space-lg);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-funnel-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-funnel-stage:nth-child(8n+1) .cc-funnel-fill{background:var(--accent)}.cc-funnel-stage:nth-child(8n+2) .cc-funnel-fill{background:var(--todo)}.cc-funnel-stage:nth-child(8n+3) .cc-funnel-fill{background:var(--in-progress)}.cc-funnel-stage:nth-child(8n+4) .cc-funnel-fill{background:var(--in-review)}.cc-funnel-stage:nth-child(8n+5) .cc-funnel-fill{background:var(--triage)}.cc-funnel-stage:nth-child(8n+6) .cc-funnel-fill{background:var(--color-success)}.cc-funnel-stage:nth-child(8n+7) .cc-funnel-fill{background:var(--color-warning)}.cc-funnel-stage:nth-child(8n) .cc-funnel-fill{background:var(--color-error)}.cc-funnel-value{font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text)}.cc-chart-skeleton{block-size:var(--space-md);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-chart-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-chart-pulse{0%,to{opacity:.4}50%{opacity:.9}}@media(max-width:768px){.cc-bar-row{grid-template-columns:minmax(0,1fr) minmax(calc(var(--space-2xl) + var(--space-lg)),2fr);align-items:start}.cc-bar-label{max-inline-size:100%}.cc-bar-value{grid-column:1 / -1;justify-self:end;max-inline-size:100%}.cc-radial-gauge-ring{inline-size:clamp(calc(var(--space-2xl) * 2 + var(--space-lg)),44vw,calc(var(--space-2xl) * 4))}.cc-sparkline{block-size:clamp(var(--space-2xl),18vw,calc(var(--space-2xl) + var(--space-xl)))}}.cc-area{display:flex;flex-direction:column;gap:var(--space-lg);min-inline-size:0}.cc-area-section{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0}.cc-area-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.cc-area-section-title{margin:0;font-size:.8125rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cc-area .cc-recharts-chart,.cc-area .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-area .cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-sub{font-size:.75rem;color:var(--text-muted)}.cc-token-granularity{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-xs)}.cc-token-granularity .btn.active{border-color:var(--accent);color:var(--text);background:color-mix(in srgb,var(--accent) 14%,var(--surface-1))}@media(prefers-reduced-motion:reduce){.cc-token-count-live{animation:none}}@media(max-width:768px){.cc-area-section-header{align-items:flex-start;flex-direction:column}.cc-token-granularity{justify-content:flex-start;inline-size:100%}}.cc-table-wrap{max-inline-size:100%;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);overflow-x:auto;overflow-y:hidden}.cc-table{inline-size:100%;border-collapse:collapse;font-size:.8125rem;font-variant-numeric:tabular-nums}.cc-table th,.cc-table td{padding:var(--space-sm) var(--space-md);text-align:right;border-bottom:1px solid var(--border-subtle);white-space:nowrap}.cc-table th:first-child,.cc-table td:first-child{text-align:left}.cc-table thead th{color:var(--text-muted);font-weight:600}.cc-table th.cc-sortable{cursor:pointer;user-select:none}.cc-table th.cc-sortable:hover{color:var(--text)}.cc-table tbody tr{cursor:pointer}.cc-table tbody tr.cc-row-selected{background:var(--surface-2)}.cc-table tbody tr.cc-row-selected td{color:var(--text)}.cc-sort-caret{margin-inline-start:var(--space-xs);font-size:.7em;color:var(--accent)}.cc-unavailable{color:var(--text-muted);cursor:help;border-bottom:1px dotted var(--border-subtle)}.cc-loading-inline{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-lg);color:var(--text-muted)}.cc-area-empty,.cc-area-error{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-area-error{color:var(--color-error)}.cc-pricing-note{font-size:.75rem;color:var(--text-muted)}.cc-team-area{display:flex;flex-direction:column;gap:var(--space-lg);min-inline-size:0}.cc-team-ops-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-md);min-inline-size:0}.cc-team-ops-card{min-inline-size:0;padding:var(--space-md);border:thin solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-team-ops-card--org{grid-column:1 / -1}.cc-team-ops-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-block-end:var(--space-md)}.cc-team-ops-card-header h3{margin:0;color:var(--text);font-size:.9375rem}.cc-team-ops-card-header p,.cc-team-muted{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:.8125rem}.cc-team-error{margin:0;color:var(--color-error);font-size:.8125rem}.cc-team-status-pill{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.8125rem}.cc-team-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin:0 0 var(--space-md)}.cc-team-facts div{min-inline-size:0}.cc-team-facts dt{color:var(--text-muted);font-size:.75rem}.cc-team-facts dd{margin:var(--space-xs) 0 0;color:var(--text);font-size:.875rem;overflow-wrap:anywhere}.cc-team-action{gap:var(--space-xs)}.cc-team-ops-card--heartbeat{grid-column:1 / -1}.cc-team-heartbeat-multiplier{margin-block-start:var(--space-md)}.cc-team-heartbeat-multiplier .heartbeat-multiplier-controls{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md)}.cc-team-heartbeat-multiplier .heartbeat-multiplier-slider{flex:1 1 calc(var(--space-2xl) * 5);min-inline-size:calc(var(--space-2xl) * 4)}.cc-team-org-scroll{max-block-size:calc(var(--space-2xl) * 13);overflow:auto;overscroll-behavior:contain;cursor:grab}.cc-team-org-scroll.is-dragging{cursor:grabbing;user-select:none}.cc-team-org-roots,.cc-team-org-children{display:flex;gap:var(--space-sm);margin:0;padding:0;list-style:none}.cc-team-org-scroll[data-layout=vertical] .cc-team-org-roots,.cc-team-org-scroll[data-layout=vertical] .cc-team-org-children{flex-direction:column}.cc-team-org-scroll[data-layout=vertical] .cc-team-org-children{margin-block-start:var(--space-sm);margin-inline-start:var(--space-xl);padding-inline-start:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-roots,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{flex-direction:row;align-items:flex-start;justify-content:center;gap:var(--space-md)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{position:relative;margin-block-start:var(--space-md);padding-block-start:var(--space-md)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:before,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:after,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children>.cc-team-org-item:before{position:absolute;content:"";pointer-events:none}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:before{inset-block-start:calc(var(--space-md) * -1);inset-inline-start:50%;block-size:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:after{inset-block-start:calc(var(--space-md) / 2);inset-inline:0;border-block-start:thin solid var(--border-subtle)}.cc-team-org-item{min-inline-size:max-content}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-item{position:relative;display:flex;flex-direction:column;align-items:center}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children>.cc-team-org-item:before{inset-block-start:calc(var(--space-md) * -1);inset-inline-start:50%;block-size:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-card{display:inline-flex;min-inline-size:calc(var(--space-2xl) * 5);max-inline-size:calc(var(--space-2xl) * 10);padding:var(--space-sm);border:thin solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-2);box-shadow:var(--shadow-sm)}.cc-team-org-card-header{display:flex;align-items:center;gap:var(--space-sm);min-inline-size:0}.cc-team-org-avatar{display:inline-flex;flex:0 0 auto}.cc-team-org-name{color:var(--text);font-size:.8125rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-team-org-badge{flex:0 0 auto;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--accent) 12%,var(--surface-1));color:var(--text-muted);font-size:.75rem;text-transform:capitalize}.cc-team-chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-team-chart-panel{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);animation:cc-team-panel-reveal var(--duration-fast) ease-out both}.cc-team-spark-panel{grid-column:1 / -1}.cc-muted-hint,.cc-team-agent-role{color:var(--text-muted)}.cc-muted-hint{margin:0;font-size:.8125rem}.cc-team-agent-cell{display:inline-flex;align-items:center;gap:var(--space-sm);min-inline-size:0}.cc-team-agent-name,.cc-team-agent-role{display:block}.cc-team-agent-name{color:var(--text);font-weight:600}.cc-team-agent-role{font-size:.75rem;text-transform:capitalize}@keyframes cc-team-panel-reveal{0%{opacity:0;transform:translateY(var(--space-xs))}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.cc-team-chart-panel{animation:none}}@media(min-width:769px)and (max-width:1024px){.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-spark-panel{grid-column:auto}}@media(max-width:768px){.cc-team-ops-grid,.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-ops-card--org,.cc-team-ops-card--heartbeat,.cc-team-spark-panel{grid-column:auto}.cc-team-ops-card,.cc-team-chart-panel{padding:var(--space-sm)}.cc-team-ops-card-header{flex-direction:column}.cc-team-facts{grid-template-columns:minmax(0,1fr)}.cc-team-action{justify-content:center;inline-size:100%}.cc-team-org-scroll{max-block-size:calc(var(--space-2xl) * 10)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-roots,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{justify-content:flex-start;gap:var(--space-sm)}}.cc-system-refresh{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);color:var(--text-muted);font-size:.8125rem}.cc-system-refresh .btn-icon{flex:0 0 auto}.cc-system-node-selector{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--text)}.cc-system-node-selector .input{min-inline-size:10rem}.cc-system-gauges .cc-stat-card{min-block-size:100%}.cc-system-chart-grid{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-system-chart-grid .cc-stat-card{gap:var(--space-md)}.cc-system-section-title-with-icon{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-section-title-with-icon svg{color:var(--text-muted)}.cc-system-vitest-card{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-system-vitest-card .btn,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-toggle-row,.cc-system-threshold-row{color:var(--text);font-size:.8125rem}.cc-system-threshold-controls input[type=range]{accent-color:var(--accent)}.cc-system-threshold-controls .input{inline-size:5rem}.cc-system-note{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-system-note--error,.cc-system-value--critical{color:var(--color-error)}.cc-system-value--warning{color:var(--color-warning)}.cc-system-note--success{color:var(--color-success)}@media(max-width:768px){.cc-system-refresh{align-items:flex-start;justify-content:flex-start;flex-direction:column}.cc-system-chart-grid{grid-template-columns:minmax(0,1fr)}.cc-system-node-selector,.cc-system-vitest-card,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{align-items:stretch;flex-direction:column;inline-size:100%}.cc-system-node-selector .input,.cc-system-vitest-card .btn,.cc-system-threshold-controls .input{inline-size:100%}}.cc-mission-control{display:flex;flex-direction:column;gap:var(--space-lg)}.cc-mc-columns{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}.cc-mc-section{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}.cc-mc-muted{color:var(--text-muted);font-size:.85rem;margin:0}.cc-mc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-mc-session,.cc-mc-node{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border-subtle, color-mix(in srgb, #ffffff 8%, transparent));border-radius:var(--radius-sm, 6px);background:var(--surface-1, color-mix(in srgb, #ffffff 2%, transparent));min-width:0}.cc-mc-node.inactive{opacity:.55}.cc-mc-session-purpose,.cc-mc-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cc-mc-session-meta,.cc-mc-node-meta{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.cc-mc-badge{font-size:.7rem;text-transform:uppercase;letter-spacing:.03em;padding:2px 6px;border-radius:var(--radius-sm, 6px);background:var(--surface-2, color-mix(in srgb, #3b82f6 15%, transparent));color:var(--text)}.cc-mc-badge.inactive{background:var(--surface-2, color-mix(in srgb, #ffffff 6%, transparent));color:var(--text-muted)}.cc-mc-task,.cc-mc-node-count{font-size:.75rem;color:var(--text-muted)}@media(max-width:768px),(max-height:480px){.cc-mc-columns{grid-template-columns:1fr}}.theme-dropdown{position:relative;display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0}.theme-dropdown.open{z-index:10002}.theme-dropdown-trigger{justify-content:space-between;gap:var(--space-sm);inline-size:100%;min-inline-size:0}.theme-dropdown-trigger .theme-option-swatch,.theme-dropdown-option .theme-option-swatch{flex:0 0 auto}.theme-dropdown-trigger-label,.theme-dropdown-option-label{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.theme-dropdown-modes{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.theme-dropdown-mode-btn{gap:var(--space-xs)}.theme-dropdown-mode-btn.active{border-color:var(--accent);color:var(--accent)}.theme-dropdown-popover{position:absolute;z-index:10002;inset-block-start:calc(100% + var(--space-xs));inset-inline:0;padding:var(--space-sm);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);box-shadow:var(--shadow-lg)}.theme-dropdown-list{display:grid;gap:var(--space-xs);max-block-size:min(60vh,calc(var(--space-2xl) * 12));overflow-y:auto;overscroll-behavior:contain}.theme-dropdown-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);inline-size:100%;padding:var(--space-sm);border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text);cursor:pointer;text-align:start}.theme-dropdown-option:hover,.theme-dropdown-option:focus-visible,.theme-dropdown-option.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);outline:none}@media(max-width:768px){.theme-dropdown.open{z-index:auto}.theme-dropdown-popover{position:static;z-index:auto;margin-block-start:var(--space-xs)}.theme-dropdown-list{max-block-size:min(50vh,calc(var(--space-2xl) * 10))}}.cc-controls{min-inline-size:0}.cc-controls-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);align-items:stretch}.cc-controls-card{min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-controls-card--concurrency{grid-column:1 / -1}.cc-controls-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-block-end:var(--space-md)}.cc-controls-card-header h3{margin:0;color:var(--text);font-size:.9375rem}.cc-controls-card-header p,.cc-controls-muted{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:.8125rem}.cc-controls-error{margin:0;color:var(--color-error);font-size:.8125rem}.cc-controls-status-pill{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.8125rem}.cc-controls-action{gap:var(--space-xs)}.cc-controls-save-state{flex:0 0 auto;color:var(--text-muted);font-size:.8125rem}.cc-controls-save-state--saved{color:var(--color-success)}.cc-controls-save-state--error{color:var(--color-error)}.cc-controls-sliders{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-md)}.cc-controls-slider{display:flex;min-inline-size:0;flex-direction:column;gap:var(--space-sm);color:var(--text);font-size:.8125rem}.cc-controls-slider--global{grid-column:1 / -1;padding-bottom:var(--space-md);border-bottom:1px solid var(--border)}.cc-controls-slider-caption{color:var(--text-muted);font-size:.75rem}.cc-controls-slider-label{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.cc-controls-slider-label strong{color:var(--accent);font-variant-numeric:tabular-nums}.cc-controls-range-wrap{--cc-controls-range-thumb-size: var(--space-md);position:relative;display:flex;align-items:center}.cc-controls-use-marker{--use-pct: 0%;--use-offset: 0%;position:absolute;inset-block-start:50%;inset-inline-start:var(--use-offset, var(--use-pct));transform:translate(-50%,-50%);pointer-events:none}.cc-controls-slider input[type=range],.cc-controls-touch-slider{inline-size:100%;min-block-size:var(--space-xl);accent-color:var(--accent);touch-action:pan-y}@media(max-width:768px){.cc-controls-grid{grid-template-columns:minmax(0,1fr)}.cc-controls-card{padding:var(--space-sm)}.cc-controls-card-header{flex-direction:column}.cc-controls-sliders{grid-template-columns:minmax(0,1fr)}.cc-controls-range-wrap{--cc-controls-range-thumb-size: var(--space-xl)}.cc-controls-slider input[type=range],.cc-controls-touch-slider{min-block-size:var(--space-2xl)}.cc-controls-slider input[type=range]::-webkit-slider-thumb,.cc-controls-touch-slider::-webkit-slider-thumb{inline-size:var(--space-xl);block-size:var(--space-xl)}.cc-controls-slider input[type=range]::-moz-range-thumb,.cc-controls-touch-slider::-moz-range-thumb{inline-size:var(--space-xl);block-size:var(--space-xl)}.cc-controls-action{justify-content:center;inline-size:100%}}.reliability-view{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-lg);height:100%;min-height:0;min-width:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.reliability-card{padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card)}.reliability-loading{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);color:var(--text-muted)}.reliability-error{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);text-align:center}.reliability-error p{color:var(--text-muted);margin:0}.reliability-headline-card{display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-headline{font-size:1.75rem;font-weight:700}.reliability-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-lg)}.reliability-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.reliability-chart-section{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0;margin-block-start:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.reliability-chart-section h4{margin:0;color:var(--text-muted);font-size:var(--font-size-xs);font-weight:600}.reliability-chart-section .cc-recharts-chart,.reliability-chart-section .cc-recharts-empty{block-size:clamp(calc(var(--space-2xl) * 4),34vh,calc(var(--space-2xl) * 7))}.reliability-table{width:100%;border-collapse:collapse;margin-top:var(--space-sm)}.reliability-table th,.reliability-table td{text-align:left;padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.reliability-stat-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xs) 0}.reliability-muted{color:var(--text-muted)}.reliability-details{margin-top:var(--space-sm)}.reliability-details summary{color:var(--text-muted);cursor:pointer}.reliability-details-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted)}.reliability-histogram{list-style:none;margin:var(--space-sm) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-histogram li{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,6fr) minmax(0,1fr);align-items:center;gap:var(--space-sm)}.reliability-histogram-bar-wrap{width:100%;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);overflow:hidden}.reliability-histogram-bar{height:var(--space-md);background:var(--color-info)}@media(max-width:768px){.reliability-view,.reliability-loading,.reliability-error{padding-bottom:calc(var(--space-lg) + var(--mobile-nav-height) + env(safe-area-inset-bottom,0px) + var(--standalone-bottom-gap))}.reliability-grid{grid-template-columns:minmax(0,1fr)}.reliability-section-header{flex-direction:column;align-items:flex-start}.reliability-chart-section{padding:var(--space-sm)}.reliability-chart-section .cc-recharts-chart,.reliability-chart-section .cc-recharts-empty{block-size:clamp(calc(var(--space-2xl) * 3),46vh,calc(var(--space-2xl) * 6))}}.nodes-view{--nodes-view-spin-duration: calc(var(--duration-slow) * 4);--nodes-view-pulse-duration: calc(var(--duration-slow) * 5);display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-sm) var(--space-md) var(--space-xl)}.nodes-view-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-sm)}.nodes-view-title{display:flex;align-items:center;gap:var(--space-sm)}.nodes-view-title h2{margin:0;display:flex;align-items:center;gap:var(--space-sm)}.nodes-view-count{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) / 4)}.nodes-view-actions{display:flex;gap:var(--space-sm)}.nodes-view-close{margin-left:auto}.nodes-view-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-xl) * 5.833),1fr));gap:var(--space-sm)}.nodes-view-stat{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.nodes-view-stat span{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.nodes-view-stat strong{font-size:calc(var(--space-lg) + var(--space-xs) / 2)}.nodes-view-stat--online strong{color:var(--color-success)}.nodes-view-stat--offline strong{color:var(--color-error)}.nodes-view-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-lg) * 20),1fr));gap:var(--space-md)}.nodes-view-empty{padding:var(--space-xl);border:1px dashed var(--border);border-radius:var(--radius-md);text-align:center;color:var(--text-muted);display:flex;flex-direction:column;align-items:center;gap:var(--space-md)}.nodes-view-error{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) / 4)}.node-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md);cursor:pointer;transition:border-color var(--transition-fast),transform var(--transition-fast)}.node-card:hover{border-color:var(--accent);transform:translateY(calc(var(--space-xs) * -.25))}.node-card:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.node-card--loading{min-height:calc(var(--space-xl) * 9.167);opacity:.55;pointer-events:none}.node-card__header{display:flex;align-items:center;justify-content:space-between}.node-card__title-wrap{display:flex;align-items:center;gap:var(--space-sm)}.node-card__icon{width:calc(var(--space-lg) * 2.125);height:calc(var(--space-lg) * 2.125);border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.node-card__name{margin:0;font-size:calc(var(--space-md) + var(--space-xs));line-height:1.25}.node-card__meta-row{margin-top:var(--space-xs);display:flex;align-items:center;gap:var(--space-xs)}.node-card__type-badge{border:1px solid var(--border);border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.node-card__status{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .75);font-weight:600}.node-card__status-indicator{width:var(--space-sm);height:var(--space-sm);border-radius:50%}.node-card__status--online .node-card__status-indicator{background:var(--color-success)}.node-card__status--offline .node-card__status-indicator,.node-card__status--error .node-card__status-indicator{background:var(--color-error)}.node-card__status--connecting .node-card__status-indicator{background:var(--color-warning)}.node-card__auth-indicator{display:inline-flex;align-items:center;margin-left:var(--space-xs);vertical-align:middle}.node-card__url{font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);word-break:break-all}.node-card__metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.node-card__metric{display:flex;flex-direction:column;gap:var(--space-xs)}.node-card__metric-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-transform:uppercase;letter-spacing:.03em}.node-card__metric-value{font-size:calc(var(--space-md) + var(--space-xs));font-weight:600}.node-card__sync{display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.node-card__sync-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;flex-shrink:0}.node-card__sync-time{color:var(--text-muted)}.nodes-view-stat--synced strong{color:var(--color-success)}.node-card__actions{display:flex;gap:var(--space-xs);flex-wrap:wrap}.node-card__action{display:inline-flex;align-items:center;gap:var(--space-xs)}.node-card__action--remove{margin-left:auto}.node-card__action--remove:not(.btn-danger){color:var(--color-error);border-color:color-mix(in srgb,var(--color-error) 45%,var(--border))}.node-card__action--remove.is-armed{background:color-mix(in srgb,var(--color-error) 14%,transparent)}.node-card__docker-badge{display:inline-flex;align-items:center;gap:var(--space-xs);border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * .75);background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.node-card__docker-meta{display:flex;gap:var(--space-sm);margin-top:var(--space-xs);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.node-card__docker-meta span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mesh-topology{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);min-height:calc(var(--space-2xl) * 6.25);padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}.mesh-topology__svg{width:100%;max-width:calc(var(--space-2xl) * 12.5);height:auto;aspect-ratio:1}.mesh-topology__node{transition:filter var(--transition-fast)}.mesh-topology__node:hover{filter:brightness(1.1)}.mesh-topology__node-circle{stroke:var(--border);stroke-width:calc(var(--space-xs) / 2);transition:fill var(--transition-fast)}.mesh-topology__node-label{font-size:calc(var(--space-sm) + var(--space-xs) * .75);fill:var(--text);font-weight:500}.mesh-topology__node-type-badge{fill:color-mix(in srgb,var(--surface) 75%,var(--bg));stroke:var(--border);stroke-width:calc(var(--space-xs) / 4)}.mesh-topology__node-type-text{font-size:calc(var(--space-sm) + var(--space-xs) / 2);font-weight:700;fill:var(--text-muted);text-transform:uppercase;letter-spacing:.03em}.mesh-topology__link{stroke:var(--border);stroke-width:calc((var(--space-xs) * 3) / 8);stroke-dasharray:var(--space-xs),var(--space-xs);opacity:.6}.mesh-topology__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.mesh-topology__legend-item{display:flex;align-items:center;gap:var(--space-sm)}.mesh-topology__notice{margin:var(--space-md) 0 0;text-align:center;color:var(--text-dim);font-size:calc(var(--space-sm) + var(--space-xs))}.mesh-topology__legend-dot{width:calc(var(--space-sm) + var(--space-xs) / 2);height:calc(var(--space-sm) + var(--space-xs) / 2);border-radius:50%;border:1px solid var(--border)}.mesh-topology--empty{justify-content:center}.mesh-topology__empty-state{text-align:center;color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) / 2)}.connect-node-modal{width:min(calc(var(--space-lg) * 30),calc(100vw - (var(--space-lg) * 2)))}.connect-node-form{display:flex;flex-direction:column;gap:var(--space-md)}.connect-node-form .form-group{padding:0;margin-top:0}.connect-node-form .form-group:last-of-type{margin-bottom:0}.connect-node-field{display:flex;flex-direction:column;gap:var(--space-xs)}.connect-node-field__input{width:100%}.connect-node-field__input[aria-invalid=true]{border-color:var(--color-error);background:color-mix(in srgb,var(--color-error) 5%,var(--surface))}.connect-node-field__input[aria-invalid=true]:focus-visible{border-color:var(--color-error);box-shadow:var(--glow-danger)}.connect-node-url-preview{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--surface) 50%,var(--bg));border-radius:var(--radius-sm);border-left:var(--space-xs) solid var(--accent);font-size:calc(var(--space-sm) + var(--space-xs))}.connect-node-url-preview-label{color:var(--text-muted)}.connect-node-url-preview code{font-family:var(--font-mono);color:var(--text);font-size:calc(var(--space-sm) + var(--space-xs))}.connect-node-actions{display:flex;justify-content:flex-end;gap:var(--space-sm);padding:var(--modal-padding);border-top:1px solid var(--border)}.nodes-view-topology{margin-bottom:var(--space-md)}.nodes-view-section-title{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;color:var(--text);margin:0 0 var(--space-sm)}.nodes-view .node-status-indicator{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .625)}.nodes-view .node-status-indicator__label,.nodes-view .node-status-indicator--local{color:var(--text-muted)}.nodes-view .node-status-indicator--remote{color:var(--text)}.nodes-view .node-status-indicator__dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;position:relative;display:inline-block}.nodes-view .node-status-indicator__dot--online{background:var(--color-success);box-shadow:var(--glow-success)}.nodes-view .node-status-indicator__dot--offline,.nodes-view .node-status-indicator__dot--error{background:var(--color-error)}.nodes-view .node-status-indicator__dot--connecting{background:var(--color-warning);animation:pulse-warning var(--nodes-view-pulse-duration) ease-in-out infinite}.nodes-view .node-status-indicator__spinner{position:absolute;inset:0;border:calc(var(--space-xs) / 2) solid transparent;border-top-color:currentColor;border-radius:50%;animation:nodes-view-spinner-spin var(--nodes-view-spin-duration) linear infinite}.nodes-view .node-status-indicator__name{font-weight:500}.nodes-view .node-status-indicator__details{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}@keyframes pulse-warning{0%,to{opacity:1;box-shadow:var(--glow-warning)}50%{opacity:.6;box-shadow:var(--glow-warning)}}@keyframes nodes-view-spinner-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.nodes-view .spin{animation:nodes-view-spinner-spin var(--nodes-view-spin-duration) linear infinite}@media(max-width:768px){.nodes-view{padding-inline:var(--space-sm)}.nodes-view-grid,.node-card__metrics{grid-template-columns:1fr}.node-card__docker-badge,.node-card__docker-meta{gap:var(--space-xs)}.node-card__docker-meta span{max-width:calc(var(--space-2xl) * 4.5)}.connect-node-modal{width:calc(100vw - (var(--space-md) * 2))}.connect-node-field__input{min-height:calc(var(--space-2xl) + var(--space-md))}.nodes-view-header{flex-wrap:wrap;gap:var(--space-sm)}.nodes-view-title h2{font-size:calc(var(--space-md) + var(--space-xs))}.nodes-view-title h2 svg{flex-shrink:0}.nodes-view-count{font-size:calc(var(--space-sm) + var(--space-xs))}.nodes-view-actions{flex-wrap:wrap;gap:var(--space-sm);width:100%;justify-content:flex-end}.nodes-view-close{min-height:calc(var(--space-xl) + var(--space-md));min-width:calc(var(--space-xl) + var(--space-md))}.nodes-view-actions .btn{min-height:calc(var(--space-xl) + var(--space-md))}.nodes-view-stats{grid-template-columns:repeat(2,1fr);gap:var(--space-sm)}.nodes-view-stat{padding:var(--space-xs) var(--space-sm)}.nodes-view-stat span{font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.nodes-view-stat strong{font-size:calc(var(--space-md) + var(--space-xs) / 2)}.nodes-view-empty{padding:var(--space-xl) var(--space-md);text-align:center}.nodes-view-error{padding:var(--space-md);margin:var(--space-md) 0}.nodes-view-topology{padding:var(--space-sm) 0}.nodes-view-section-title{font-size:calc(var(--space-md) + var(--space-xs) / 4)}}.add-node-modal{width:min(calc(var(--space-lg) * 32.5),calc(100vw - (var(--space-lg) * 2)))}.add-node-modal__body{display:flex;flex-direction:column;gap:var(--space-md)}.add-node-modal__row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.add-node-modal__fieldset{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__fieldset legend{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .625);padding:0 var(--space-xs)}.add-node-modal__storage-toggle{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-sm)}.add-node-modal__advanced-btn{align-self:flex-start}.add-node-modal__advanced{border:1px dashed var(--border);border-radius:var(--radius-sm);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__textarea{min-height:calc(var(--space-2xl) * 2.25);resize:vertical;font-family:var(--font-mono)}.add-node-modal__description{font-size:calc(var(--space-sm) + var(--space-xs) * .625);color:var(--text-muted);margin-bottom:var(--space-sm);padding:0}.add-node-modal__field{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__field>span{font-size:calc(var(--space-sm) + var(--space-xs) * .625);font-weight:600;color:var(--text-muted)}.add-node-modal__field .input{width:100%;padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__field .input:focus-visible{border-color:var(--accent);box-shadow:var(--focus-ring-strong)}.add-node-modal__field .input[aria-invalid=true]{border-color:var(--color-error);background:color-mix(in srgb,var(--color-error) 5%,var(--surface))}.add-node-modal__field .input[aria-invalid=true]:focus{box-shadow:var(--glow-danger)}.add-node-modal__hint{font-size:calc(var(--space-sm) + var(--space-xs) * .375);color:var(--text-dim);margin-top:calc(var(--space-xs) / 2)}.add-node-modal__error{margin-top:calc(var(--space-xs) / 2)}.add-node-modal__type-toggle{display:flex;gap:0;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;background:var(--surface)}.add-node-modal__type-btn{flex:1;padding:calc(var(--space-sm) + var(--space-xs) / 2) var(--space-lg);border:none;background:transparent;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .625);font-weight:500;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.add-node-modal__type-btn:hover:not(:disabled){background:color-mix(in srgb,var(--bg) 50%,var(--surface))}.add-node-modal__type-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);z-index:1}.add-node-modal__type-btn.active{background:var(--accent);color:var(--bg)}.add-node-modal__type-btn:disabled{opacity:.6;cursor:not-allowed}.add-node-modal__remote-fields{display:grid;gap:var(--space-sm)}.add-node-modal__discovery-actions{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovery-state{font-size:calc(var(--space-sm) + var(--space-xs) * .375);color:var(--color-success)}.add-node-modal__discovered-list{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovered-card{padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovered-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.add-node-modal__projects{display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__projects-title{margin:0;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__project-list{display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__project-card{padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__project-toggle{margin:0}@media(max-width:768px){.add-node-modal{width:calc(100vw - (var(--space-md) * 2))}.add-node-modal__type-toggle{width:100%}.add-node-modal__type-btn{flex:1;padding:var(--space-md) var(--space-lg)}.add-node-modal__field input{min-height:calc(var(--space-2xl) + var(--space-md));font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__row{grid-template-columns:1fr}.add-node-modal__project-card{padding:var(--space-md)}.add-node-modal__discovered-row{flex-direction:column;align-items:flex-start}}.docker-tls-config{display:flex;flex-direction:column;gap:var(--space-md)}.docker-tls-config__fields{display:grid;gap:var(--space-md)}.docker-tls-config__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-tls-config__field label{color:var(--text-muted)}@media(max-width:768px){.docker-tls-config .input{min-height:calc(var(--mobile-nav-height) - var(--space-sm))}}.docker-target-selector{display:flex;flex-direction:column;gap:var(--space-md)}.docker-target-selector__modes{display:flex;gap:var(--space-sm);flex-wrap:wrap}.docker-target-selector__mode-active{border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.docker-target-selector__panel{display:grid;gap:var(--space-md)}.docker-target-selector__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-target-selector__field label{color:var(--text-muted)}.docker-target-selector__context-row{display:grid;gap:var(--space-sm);grid-template-columns:minmax(0,1fr) auto;align-items:center}.docker-target-selector__status{color:var(--text-muted)}.docker-target-selector__success{color:var(--color-success)}.docker-target-selector__error{color:var(--color-error)}@media(max-width:768px){.docker-target-selector__modes .btn{min-height:calc(var(--mobile-nav-height) - var(--space-sm))}}.docker-onboarding{width:min(calc(var(--space-2xl) * 22.5),calc(100vw - (var(--space-lg) * 2)))}.docker-onboarding__body{display:flex;flex-direction:column;gap:var(--space-md)}.docker-onboarding__section{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__section-title{margin:0;display:flex;align-items:center;gap:var(--space-sm);font-size:calc(var(--space-md) + var(--space-xs) / 2)}.docker-onboarding__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-onboarding__inline-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.docker-onboarding__radio-group{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.docker-onboarding__type-toggle{display:flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.docker-onboarding__type-btn{flex:1;border:none;background:var(--surface);color:var(--text);padding:var(--space-sm) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.docker-onboarding__type-btn+.docker-onboarding__type-btn{border-left:1px solid var(--border)}.docker-onboarding__type-btn.is-active{background:var(--todo);color:var(--bg)}.docker-onboarding__type-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);position:relative;z-index:1}.docker-onboarding__checkbox-group{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-onboarding__kv-list{display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__kv-list h5{margin:0;font-size:calc(var(--space-sm) + var(--space-xs))}.docker-onboarding__kv-row{display:grid;gap:var(--space-sm);align-items:center}.docker-onboarding__kv-row--env{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}.docker-onboarding__kv-row--mount{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.docker-onboarding__kv-add{align-self:flex-start}.docker-onboarding__advanced-toggle{border:none;background:none;color:var(--text);padding:var(--space-xs);margin:calc(var(--space-xs) * -1);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;font-size:calc(var(--space-md) + var(--space-xs) / 2);font-weight:600}.docker-onboarding__advanced-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.docker-onboarding__advanced-toggle svg{transition:transform var(--transition-fast)}.docker-onboarding__advanced-toggle.is-expanded svg{transform:rotate(180deg)}.docker-onboarding__advanced-content{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--transition-fast)}.docker-onboarding__advanced-content>div{overflow:hidden;display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__advanced-content.is-expanded{grid-template-rows:1fr}.docker-onboarding__tls-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.docker-onboarding__tls-fields .docker-onboarding__field:first-child{grid-column:1 / -1}@media(max-width:768px){.docker-onboarding{width:calc(100vw - (var(--space-md) * 2))}.docker-onboarding__inline-fields,.docker-onboarding__tls-fields,.docker-onboarding__kv-row{grid-template-columns:1fr}.docker-onboarding .input,.docker-onboarding .select,.docker-onboarding .btn{min-height:calc(var(--space-2xl) + var(--space-md))}.docker-onboarding__advanced-content{transition:none}}.settings-sync-log{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-sync-log__header{display:flex;align-items:center;gap:var(--space-xs);cursor:pointer;padding:var(--space-xs) 0;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text);font:inherit;text-align:left;transition:background-color var(--transition-fast)}.settings-sync-log__header:hover{background:var(--surface-hover)}.settings-sync-log__header:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:var(--surface-hover)}.settings-sync-log__chevron{transform:rotate(0);transition:transform var(--transition-fast)}.settings-sync-log__chevron--expanded{transform:rotate(180deg)}.settings-sync-log__filters{display:flex;gap:var(--space-sm);align-items:center;flex-wrap:wrap}.settings-sync-log__filters label{display:flex;align-items:center;gap:var(--space-xs);font-size:12px;color:var(--text-muted)}.settings-sync-log__filters select{font-size:12px;padding:4px 8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text)}.settings-sync-log__filters select:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.settings-sync-log__list{display:flex;flex-direction:column}.settings-sync-log__entry{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) 0;border-bottom:1px solid var(--border)}.settings-sync-log__entry:last-child{border-bottom:none}.settings-sync-log__entry-timestamp{font-size:12px;color:var(--text-muted);min-width:140px}.settings-sync-log__entry-direction{display:flex;align-items:center;color:var(--text-muted)}.settings-sync-log__entry-result{display:inline-flex;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:500}.settings-sync-log__badge--success{background:color-mix(in srgb,var(--color-success, #2da44e) 14%,transparent);color:var(--color-success, #2da44e)}.settings-sync-log__badge--conflict{background:color-mix(in srgb,var(--color-warning, #d29922) 14%,transparent);color:var(--color-warning, #d29922)}.settings-sync-log__badge--error{background:color-mix(in srgb,var(--color-error, #cf222e) 14%,transparent);color:var(--color-error, #cf222e)}.settings-sync-log__entry-node{font-weight:500;font-size:12px}.settings-sync-log__entry-details{font-size:12px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.settings-sync-log__empty{text-align:center;color:var(--text-muted);padding:var(--space-md);font-size:13px}.node-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);border:1px solid color-mix(in srgb,var(--accent) 36%,transparent);color:var(--text-muted);font-size:11px;width:fit-content;margin-top:4px}@media(max-width:768px){.settings-sync-conflict-modal__diff-panel{grid-template-columns:1fr}}.settings-sync-conflict-modal{max-width:860px;width:min(860px,calc(100vw - 32px))}.settings-sync-conflict-modal__conflict-list{display:flex;flex-direction:column;gap:var(--space-md);max-height:min(50vh,400px);overflow-y:auto}.settings-sync-conflict-modal__conflict-item{border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-md)}.settings-sync-conflict-modal__key{font-weight:600;font-family:monospace;margin-bottom:var(--space-sm)}.settings-sync-conflict-modal__diff-panel{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-sm)}.settings-sync-conflict-modal__diff-side{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.settings-sync-conflict-modal__diff-label{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding:4px 8px;border-bottom:1px solid var(--border);background:var(--surface)}.settings-sync-conflict-modal__diff-content{padding:var(--space-xs) var(--space-sm);white-space:pre;font-family:monospace;font-size:12px;line-height:1.5;overflow-x:auto}.settings-sync-conflict-modal__resolution{display:flex;gap:var(--space-md);align-items:center}.settings-sync-conflict-modal__resolution label{display:flex;align-items:center;gap:var(--space-xs);cursor:pointer}.settings-sync-conflict-modal__resolution input[type=radio]{cursor:pointer}.settings-sync-conflict-modal__manual-input{width:100%;font-family:monospace;font-size:12px;min-height:80px;margin-top:var(--space-xs);padding:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);resize:vertical}.settings-sync-conflict-modal__manual-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.settings-sync-conflict-modal__bulk-actions{display:flex;gap:var(--space-xs);padding-top:var(--space-sm);border-top:1px solid var(--border)}.settings-sync-conflict-modal__footer{display:flex;justify-content:flex-end;gap:var(--space-xs)}.node-detail-modal{max-width:calc(var(--space-lg) * 53.75);width:min(calc(var(--space-lg) * 53.75),calc(100vw - (var(--space-lg) * 2)))}.node-detail-modal__body{display:flex;flex-direction:column;gap:var(--space-md);max-height:min(72vh,calc(var(--space-lg) * 42.5));overflow-y:auto}.node-detail-modal__section{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.node-detail-modal__section h4{margin:0 0 var(--space-sm) 0}.node-detail-modal__section-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.node-detail-modal__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.node-detail-modal__field{display:flex;flex-direction:column;gap:var(--space-xs)}.node-detail-modal__field--full{grid-column:span 2}.node-detail-modal__field span{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__edit-actions{margin-top:var(--space-sm);display:flex;gap:var(--space-xs)}.node-detail-modal__project-list{margin:0;padding-left:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__project-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm)}.node-detail-modal__project-item code{color:var(--text-muted)}.node-detail-modal__empty{margin:0;color:var(--text-muted)}.node-detail-modal__health-row{display:flex;flex-wrap:wrap;gap:var(--space-md)}.node-detail-modal__actions{justify-content:space-between}.node-detail-modal__docker-config{display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__docker-toggle{align-self:flex-start}.node-detail-modal__docker-toggle-icon--expanded{transform:rotate(180deg)}.node-detail-modal__docker-config-content{display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__docker-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__docker-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-sm)}.node-detail-modal__docker-stack{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__checkbox{display:flex;align-items:center;gap:var(--space-sm);color:var(--text-muted)}.node-detail-modal__docker-meta{display:flex;flex-wrap:wrap;gap:var(--space-sm);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__docker-recreate{color:var(--color-warning)}.node-detail-modal__docker-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__textarea{min-height:calc(var(--space-2xl) * 2.25);resize:vertical;font-family:var(--font-mono)}.node-detail-modal__sync-status{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm);margin-bottom:var(--space-sm)}.node-detail-modal__sync-dot{width:calc(var(--space-sm) + var(--space-xs) / 2);height:calc(var(--space-sm) + var(--space-xs) / 2);border-radius:50%;flex-shrink:0}.node-detail-modal__sync-dot--synced{background:var(--color-success)}.node-detail-modal__sync-dot--diff,.node-detail-modal__sync-dot--pending{background:var(--color-warning)}.node-detail-modal__sync-dot--error{background:var(--color-error)}.node-detail-modal__sync-dot--never{background:var(--text-muted)}.node-detail-modal__sync-diff{color:var(--color-warning);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__sync-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__sync-error{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 30%,transparent);border-radius:var(--radius-sm);color:var(--color-error);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__sync-error-dismiss{background:transparent;border:none;color:var(--color-error);cursor:pointer;padding:calc(var(--space-xs) / 2);display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm)}.node-detail-modal__sync-error-dismiss:hover{background:color-mix(in srgb,var(--color-error) 20%,transparent)}.node-detail-modal__sync-error-dismiss:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:color-mix(in srgb,var(--color-error) 20%,transparent)}.docker-management{display:flex;flex-direction:column;gap:var(--space-md)}.docker-management__status-card{display:flex;flex-direction:column;gap:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.docker-management__status-row{display:inline-flex;align-items:center;gap:var(--space-sm)}.docker-management__status-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%}.docker-management__status-dot--success{background:var(--color-success)}.docker-management__status-dot--warning{background:var(--color-warning)}.docker-management__status-dot--error{background:var(--color-error)}.docker-management__status-meta{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));display:flex;gap:var(--space-md);flex-wrap:wrap}.docker-management__actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.docker-management__info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.docker-management__log-viewer{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.docker-management__log-viewer-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.docker-management__log-viewer pre{margin:0;max-height:calc(var(--space-2xl) * 9.375);overflow-y:auto;font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text);white-space:pre-wrap}.docker-management__env-list{margin:var(--space-sm) 0 0}.docker-management__env-list div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:var(--space-sm);padding:var(--space-xs) 0}.docker-management__env-list dt{color:var(--text-muted);font-family:var(--font-mono)}.docker-management__env-list dd{margin:0;font-family:var(--font-mono);word-break:break-all}.docker-management__mounts-list{margin:var(--space-sm) 0 0;padding-left:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.docker-management__mounts-list li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}@media(max-width:768px){.node-detail-modal__grid,.node-detail-modal__docker-grid{grid-template-columns:1fr}.node-detail-modal__field--full{grid-column:span 1}.docker-management__actions{flex-direction:column}.docker-management__actions .btn{width:100%;justify-content:center}.docker-management__info-grid,.node-detail-modal__docker-row{grid-template-columns:1fr}.node-detail-modal__docker-toggle,.node-detail-modal__docker-config-content .btn{min-height:calc(var(--space-lg) * 2.25)}.docker-management__env-list div{grid-template-columns:1fr}.docker-management__mounts-list li{flex-direction:column;align-items:flex-start}.docker-management__log-viewer pre{max-height:calc(var(--space-2xl) * 6.25)}}.cc-area[data-testid=cc-area-funnel] .cc-area-section+.cc-area-section{margin-top:var(--space-lg)}.command-center{display:flex;flex:1;flex-direction:column;gap:0;min-height:0;inline-size:100%;padding:0}.cc-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:var(--space-md)}.cc-header{box-sizing:border-box;min-block-size:var(--view-header-min-height);padding:var(--space-lg) var(--space-xl);background:var(--surface)}@media(min-width:769px)and (min-height:481px){.cc-header{height:var(--view-header-min-height)}.cc-header>.cc-date-range{max-height:var(--view-header-content-row)}.cc-header>.cc-date-range .cc-date-range-trigger{min-height:0;max-height:var(--view-header-content-row);white-space:nowrap}}.cc-title{display:flex;align-items:center;gap:var(--space-sm);margin:0;font-size:1.125rem;font-weight:600;color:var(--text)}.cc-title svg{flex-shrink:0;color:var(--todo)}.cc-tablist{display:flex;flex-shrink:0;flex-wrap:wrap;gap:var(--space-xs);padding:var(--space-md) var(--space-xl) 0;border-bottom:1px solid var(--border-subtle)}.cc-tab{appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);padding:var(--space-sm) var(--space-md);cursor:pointer;font-size:.8125rem;transition:color var(--transition-fast),border-color var(--transition-fast)}.cc-tab:hover{color:var(--text)}.cc-tab.active{color:var(--text);border-bottom-color:var(--accent)}.cc-tabpanel{flex:1;min-height:0;min-inline-size:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;outline:none;padding:var(--space-lg) var(--space-xl) var(--space-xl);-webkit-overflow-scrolling:touch}@media(max-width:768px){.cc-tabpanel{padding-bottom:calc(var(--space-lg) + env(safe-area-inset-bottom,0) + var(--standalone-bottom-gap))}}.cc-overview{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-lg)}.cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-card{container-type:inline-size;display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-stat-label{font-size:.8125rem;color:var(--text-muted)}.cc-stat-value{max-width:100%;min-width:0;overflow:hidden;white-space:nowrap;font-size:clamp(.95rem,16cqi,2.4rem);line-height:1.1;font-variant-numeric:tabular-nums;color:var(--text)}.cc-stat-card--gauge{align-items:center;text-align:center}.cc-github-backfill-actions,.cc-productivity-backfill-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.cc-github-backfill-status,.cc-productivity-backfill-status{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted);font-size:.75rem}.cc-github-backfill-status--error,.cc-productivity-backfill-status--error{color:var(--color-error)}.cc-github-backfill-status--warning,.cc-productivity-backfill-status--warning{color:var(--color-warning)}@media(max-width:768px){.cc-github-backfill-actions,.cc-productivity-backfill-actions{align-items:stretch;flex-direction:column}.cc-github-backfill-actions .btn,.cc-productivity-backfill-actions .btn{justify-content:center;inline-size:100%}}.cc-live-strip{position:relative;display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 5),1fr) minmax(calc(var(--space-2xl) * 8),2fr) minmax(calc(var(--space-2xl) * 5),1fr);align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 7%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 9%,transparent);overflow:hidden;font-size:.8125rem}.cc-live-strip:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 10%,transparent),transparent);opacity:.25;transform:translate(-100%);animation:cc-live-signal-sweep calc(var(--duration-slow) * 8) linear infinite;pointer-events:none}.cc-live-strip-heading,.cc-live-strip-metrics,.cc-live-trend{min-inline-size:0;position:relative;z-index:1}.cc-live-strip-heading{display:flex;align-items:center;gap:var(--space-sm)}.cc-live-strip-label{color:var(--text);font-weight:600}.cc-live-strip-metrics{min-inline-size:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm)}.cc-live-metric{container-type:inline-size;min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--surface-2) 70%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-live-metric-value{max-width:100%;min-width:0;overflow:hidden;white-space:nowrap;color:var(--text);font-size:clamp(.75rem,6cqi,1.125rem);font-weight:700;font-variant-numeric:tabular-nums}.cc-token-count-live{animation:cc-token-count-pop var(--duration-normal) ease-out both}@keyframes cc-token-count-pop{0%{transform:translateY(var(--space-xs));opacity:.7}to{transform:translateY(0);opacity:1}}.cc-live-metric-label,.cc-live-trend-label{color:var(--text-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}.cc-live-trend{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-live-trend .cc-sparkline{block-size:calc(var(--space-2xl) + var(--space-sm))}.cc-live-trend .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 28%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 5) ease-in-out infinite}@keyframes cc-live-signal-sweep{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes cc-live-signal-pulse{0%,to{opacity:.78}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.cc-live-strip:before,.cc-live-metric,.cc-live-trend .cc-sparkline-bar,.cc-token-count-live{animation:none}}.cc-overview-charts{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);align-items:stretch}.cc-overview-chart-card{min-inline-size:0;position:relative;display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 6%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 7%,transparent);overflow:hidden;animation:cc-overview-chart-rise var(--duration-normal) ease-out both}.cc-overview-chart-card--trend{grid-column:1 / -1}.cc-overview-chart-card:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 8%,transparent),transparent);opacity:0;pointer-events:none;animation:cc-overview-chart-sheen calc(var(--duration-slow) * 7) ease-in-out infinite}.cc-overview-chart-header{position:relative;z-index:1;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-overview-chart-header p{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-overview-chart-card .cc-bar-chart,.cc-overview-chart-card .cc-sparkline,.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{position:relative;z-index:1}.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-overview-chart-card .cc-sparkline{block-size:calc(var(--space-2xl) * 2)}.cc-overview-chart-card .cc-bar-fill,.cc-overview-chart-card .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 30%,transparent)}@keyframes cc-overview-chart-rise{0%{opacity:0;transform:translateY(var(--space-sm))}to{opacity:1;transform:translateY(0)}}@keyframes cc-overview-chart-sheen{0%{opacity:0;transform:translate(-100%)}45%,55%{opacity:.35}to{opacity:0;transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.cc-overview-chart-card,.cc-overview-chart-card:before{animation:none}}@media(min-width:769px)and (max-width:1024px){.command-center{flex:1;min-block-size:0;overflow:hidden}.cc-tabpanel{flex:1;min-block-size:0;overflow-x:hidden;overflow-y:auto}.cc-live-strip,.cc-overview-charts,.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-live-strip-metrics{min-inline-size:0;grid-template-columns:repeat(2,minmax(0,1fr))}.cc-overview-chart-card--trend,.cc-team-spark-panel{grid-column:auto}.cc-stat-grid,.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}}@media(max-width:768px){.cc-live-strip{grid-template-columns:1fr}.cc-live-strip-metrics,.cc-overview-charts{min-inline-size:0;grid-template-columns:1fr}.cc-overview-chart-card--trend{grid-column:auto}}.cc-loading,.cc-error,.cc-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-error{color:var(--color-error)}.cc-loading .cc-chart-skeleton{block-size:var(--space-lg);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-shell-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-shell-pulse{0%,to{opacity:.4}50%{opacity:.9}}.cc-overview-engine-panel{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-overview-engine-panel-header{display:flex;align-items:center;gap:var(--space-sm);color:var(--text)}.cc-overview-engine-panel-title{font-size:.9375rem;font-weight:600}.cc-overview-engine-panel-status{margin:0;font-size:.8125rem;color:var(--text-muted)}.cc-overview-engine-nav{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-lg)}.cc-overview-engine-nav-btn{flex:1 1 auto;justify-content:center}