@runfusion/fusion 0.38.1 → 0.40.1

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 (193) hide show
  1. package/bin.mjs +20 -0
  2. package/dist/automation-store-EKXXEE2S.js +10 -0
  3. package/dist/automation-store-PLNG3X72.js +10 -0
  4. package/dist/automation-store-RDDYZFUJ.js +10 -0
  5. package/dist/bin.js +72539 -40364
  6. package/dist/chunk-2JI3F6MG.js +948 -0
  7. package/dist/chunk-4L6CLWJC.js +8345 -0
  8. package/dist/chunk-4VNS5WPM.js +42 -0
  9. package/dist/chunk-5RGECGQL.js +1139 -0
  10. package/dist/chunk-6JDLN7IL.js +409 -0
  11. package/dist/chunk-AICJATVW.js +948 -0
  12. package/dist/chunk-AWKNRUOR.js +1148 -0
  13. package/dist/chunk-BHM3UYWS.js +4651 -0
  14. package/dist/chunk-BMUXDSBF.js +4647 -0
  15. package/dist/chunk-GETECT6V.js +353 -0
  16. package/dist/chunk-GUV4QQT3.js +1143 -0
  17. package/dist/chunk-JKQO7YYZ.js +8369 -0
  18. package/dist/chunk-LYZVU6UV.js +409 -0
  19. package/dist/chunk-MAN4WYHO.js +353 -0
  20. package/dist/chunk-MCUG2Z7M.js +4651 -0
  21. package/dist/chunk-PSDYB45U.js +948 -0
  22. package/dist/chunk-RR2HM46R.js +8345 -0
  23. package/dist/chunk-RXMQ5OMY.js +9226 -0
  24. package/dist/chunk-S2EVJUY3.js +353 -0
  25. package/dist/chunk-UXR5XZFZ.js +409 -0
  26. package/dist/client/.vite/manifest.json +457 -155
  27. package/dist/client/assets/AgentDetailView-BrETpTDj.js +18 -0
  28. package/dist/client/assets/AgentPermissionPolicyEditor-BP6d1LFG.js +6 -0
  29. package/dist/client/assets/AgentsView-COx3draV.js +29 -0
  30. package/dist/client/assets/{AgentsView-BI_CESkd.css → AgentsView-DfznJDek.css} +1 -1
  31. package/dist/client/assets/ChatView-CrVSqQK_.js +6 -0
  32. package/dist/client/assets/DevServerView-DXQ1LX4H.js +1 -0
  33. package/dist/client/assets/DirectoryPicker-B_8ICSPl.js +1 -0
  34. package/dist/client/assets/{DirectoryPicker-DzKVmxOf.css → DirectoryPicker-DTKtd8L2.css} +1 -1
  35. package/dist/client/assets/DocumentsView-DmNB9rJZ.js +1 -0
  36. package/dist/client/assets/DocumentsView-WfVoTZt8.css +1 -0
  37. package/dist/client/assets/EvalsView-72w3_AO6.js +1 -0
  38. package/dist/client/assets/{ExperimentalAgentOnboardingModal-lXM--LV-.js → ExperimentalAgentOnboardingModal-Be4oaohM.js} +41 -41
  39. package/dist/client/assets/GoalsView-DI66UsjT.css +1 -0
  40. package/dist/client/assets/GoalsView-DkEXO_mx.js +2 -0
  41. package/dist/client/assets/InsightsView-_-wd4BOJ.js +11 -0
  42. package/dist/client/assets/MemoryView-BOCIc8HT.js +2 -0
  43. package/dist/client/assets/NodesView-7VInxyf_.css +1 -0
  44. package/dist/client/assets/NodesView-DTQP1j4H.js +14 -0
  45. package/dist/client/assets/PiExtensionsManager-BqaI9GKX.js +11 -0
  46. package/dist/client/assets/PluginManager-DYaVwsXd.js +1 -0
  47. package/dist/client/assets/{PluginManager-BJQXdUmV.css → PluginManager-UHVLvWWl.css} +1 -1
  48. package/dist/client/assets/PullRequestView-Dk9a7jRZ.js +6 -0
  49. package/dist/client/assets/PullRequestView-WQIS0zUC.css +1 -0
  50. package/dist/client/assets/ReliabilityView-B-i5SOoD.js +1 -0
  51. package/dist/client/assets/ReliabilityView-eoKBhBc4.css +1 -0
  52. package/dist/client/assets/ResearchView-C2Gx8jC9.js +1 -0
  53. package/dist/client/assets/SecretsView-Db2HAGi2.js +1 -0
  54. package/dist/client/assets/SessionTerminal-BiigPP2l.css +1 -0
  55. package/dist/client/assets/SessionTerminal-DwlNZLlr.js +2 -0
  56. package/dist/client/assets/{SettingsModal-Cy42vswI.js → SettingsModal-B-d30TVy.js} +1 -1
  57. package/dist/client/assets/SettingsModal-Dje7N0hv.js +31 -0
  58. package/dist/client/assets/SettingsModal-bJvc9aHl.css +1 -0
  59. package/dist/client/assets/SettingsModal-nF_GaeeK.css +1 -0
  60. package/dist/client/assets/SetupWizardModal-CIqFbkrD.css +1 -0
  61. package/dist/client/assets/SetupWizardModal-Cw3RdN83.js +1 -0
  62. package/dist/client/assets/SkillsView-3bhGyWs1.css +1 -0
  63. package/dist/client/assets/SkillsView-BGyynaI4.js +1 -0
  64. package/dist/client/assets/StashRecoveryView-CFaU-hym.js +1 -0
  65. package/dist/client/assets/{TodoView-Cx9cVhq7.css → TodoView-7xIh-Fmi.css} +1 -1
  66. package/dist/client/assets/TodoView-Djjwcb49.js +6 -0
  67. package/dist/client/assets/WorkflowNodeEditor-Po5uv_dN.css +1 -0
  68. package/dist/client/assets/WorkflowNodeEditor-vnXnKvAr.js +8 -0
  69. package/dist/client/assets/{addon-fit-C7jRorKK.js → addon-fit-B4jkcKk4.js} +1 -1
  70. package/dist/client/assets/addon-unicode11-Cdne2Sj4.js +1 -0
  71. package/dist/client/assets/{addon-web-links-CkJwd4cQ.js → addon-web-links-CRNLzj7m.js} +1 -1
  72. package/dist/client/assets/{addon-webgl-BjvOw43o.js → addon-webgl-CeCSULF1.js} +1 -1
  73. package/dist/client/assets/app-CTRT_hQh.js +13 -0
  74. package/dist/client/assets/app-CVg6W-HU.js +13 -0
  75. package/dist/client/assets/app-CY3pQXOr.js +13 -0
  76. package/dist/client/assets/app-DNh04p5I.js +13 -0
  77. package/dist/client/assets/app-DhHgtB9j.js +13 -0
  78. package/dist/client/assets/app-NL_hPGDS.js +13 -0
  79. package/dist/client/assets/common-BRyX4VxB.js +1 -0
  80. package/dist/client/assets/common-CN9QPI2d.js +1 -0
  81. package/dist/client/assets/common-CNbjPELi.js +1 -0
  82. package/dist/client/assets/common-DFDqu_n0.js +1 -0
  83. package/dist/client/assets/common-DgWWKG8Z.js +1 -0
  84. package/dist/client/assets/common-X6PzBnVA.js +1 -0
  85. package/dist/client/assets/{createLucideIcon-BazL2hk5.js → createLucideIcon-BYvOGRiO.js} +2 -2
  86. package/dist/client/assets/dashboard-view-BgiLoG1G.css +1 -0
  87. package/dist/client/assets/{dashboard-view-DqWnXEbq.css → dashboard-view-CuUPQZzi.css} +1 -1
  88. package/dist/client/assets/dashboard-view-DOEa6gWS.js +1 -0
  89. package/dist/client/assets/dashboard-view-DlKsVySD.js +3 -0
  90. package/dist/client/assets/dashboard-view-O5j3PSGY.js +8101 -0
  91. package/dist/client/assets/errors-07IrmOYM.js +1 -0
  92. package/dist/client/assets/errors-BPsCufin.js +1 -0
  93. package/dist/client/assets/errors-CcVDgqlA.js +1 -0
  94. package/dist/client/assets/errors-D-i_Bxc6.js +1 -0
  95. package/dist/client/assets/errors-DDdWAK-U.js +1 -0
  96. package/dist/client/assets/errors-DOF5Td3F.js +1 -0
  97. package/dist/client/assets/{folder-open-Doam5g-y.js → folder-open-BtEAEp7E.js} +1 -1
  98. package/dist/client/assets/index-BHGM5W8a.css +1 -0
  99. package/dist/client/assets/index-CW4OzecJ.js +793 -0
  100. package/dist/client/assets/{upload-BUfrZl69.js → upload-Y9NiLQ9o.js} +1 -1
  101. package/dist/client/assets/{users-XNGnYBJb.js → users-B13HD4Tp.js} +1 -1
  102. package/dist/client/assets/vendor-i18n-CV0mwX_-.js +9 -0
  103. package/dist/client/assets/{vendor-react-K0fH_qHe.js → vendor-react-D37HfzIf.js} +1 -1
  104. package/dist/client/assets/vendor-reactflow-C5ap-Sga.css +1 -0
  105. package/dist/client/assets/vendor-reactflow-CRZcPCXF.js +15 -0
  106. package/dist/client/assets/{vendor-xterm-DzcZoU0P.js → vendor-xterm-tcedd2Jt.js} +1 -1
  107. package/dist/client/assets/x-CqNX_9E2.js +61 -0
  108. package/dist/client/assets/zoom-out-CSTHbJgD.js +21 -0
  109. package/dist/client/index.html +7 -4
  110. package/dist/client/sw.js +36 -1
  111. package/dist/client/version.json +1 -1
  112. package/dist/droid-cli/package.json +2 -2
  113. package/dist/extension.js +67616 -44149
  114. package/dist/extract-zip-WL55Z3AU.js +2497 -0
  115. package/dist/index.min-CHQ3ABYJ.js +2926 -0
  116. package/dist/memory-dreams-7USISKVE.js +32 -0
  117. package/dist/memory-dreams-PBPISUDD.js +32 -0
  118. package/dist/memory-dreams-XNO2B2QF.js +32 -0
  119. package/dist/migration-EH2YOCYQ.js +15 -0
  120. package/dist/migration-PLGTTKL5.js +15 -0
  121. package/dist/migration-WZEZK22R.js +15 -0
  122. package/dist/pi-claude-cli/package.json +2 -2
  123. package/dist/plugin-sdk/index.d.ts +97 -0
  124. package/dist/plugin-sdk/index.js +55 -0
  125. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +17286 -0
  126. package/dist/plugins/fusion-plugin-acp-runtime/manifest.json +13 -0
  127. package/dist/plugins/fusion-plugin-acp-runtime/package.json +11 -0
  128. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +2 -3
  129. package/dist/plugins/fusion-plugin-cli-printing-press/src/dashboard-interop.d.ts +19 -0
  130. package/dist/plugins/fusion-plugin-cli-printing-press/src/index.ts +0 -3
  131. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +1984 -0
  132. package/dist/plugins/fusion-plugin-compound-engineering/manifest.json +56 -0
  133. package/dist/plugins/fusion-plugin-compound-engineering/package.json +11 -0
  134. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +5 -0
  135. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  136. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +5 -0
  137. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  138. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +43 -4
  139. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  140. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +5 -0
  141. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  142. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +5 -0
  143. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  144. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +5 -0
  145. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  146. package/dist/plugins/fusion-plugin-reports/package.json +2 -2
  147. package/dist/plugins/fusion-plugin-reports/src/__tests__/review-panel.test.ts +3 -3
  148. package/dist/plugins/fusion-plugin-reports/src/index.ts +0 -1
  149. package/dist/plugins/fusion-plugin-roadmap/bundled.js +5 -0
  150. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  151. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +2 -2
  152. package/dist/routine-store-GIJ6MXWY.js +10 -0
  153. package/dist/routine-store-HTVC2PUQ.js +10 -0
  154. package/dist/routine-store-KGHZBPDF.js +10 -0
  155. package/package.json +24 -10
  156. package/skill/fusion/SKILL.md +1 -1
  157. package/skill/fusion/references/engine-tools.md +79 -3
  158. package/skill/fusion/references/extension-tools.md +79 -4
  159. package/skill/fusion/references/fusion-capabilities.md +12 -4
  160. package/dist/client/assets/AgentDetailView-DuRYmHK3.js +0 -18
  161. package/dist/client/assets/AgentPermissionPolicyEditor-ClY32kYN.js +0 -6
  162. package/dist/client/assets/AgentsView-UbCAHs_i.js +0 -29
  163. package/dist/client/assets/ChatView-DDDjYRKc.js +0 -6
  164. package/dist/client/assets/DevServerView-DY5GlJcD.js +0 -1
  165. package/dist/client/assets/DirectoryPicker-B4VRL2BH.js +0 -1
  166. package/dist/client/assets/DocumentsView-gv4zG3aT.css +0 -1
  167. package/dist/client/assets/DocumentsView-tqpIZ9t9.js +0 -1
  168. package/dist/client/assets/EvalsView-C_Br3ry8.js +0 -1
  169. package/dist/client/assets/GoalsView-B65urz9k.css +0 -1
  170. package/dist/client/assets/GoalsView-CI3Bzs1b.js +0 -1
  171. package/dist/client/assets/InsightsView-BYfsVobi.js +0 -11
  172. package/dist/client/assets/MemoryView-DT4vIhaW.js +0 -2
  173. package/dist/client/assets/NodesView-DT4pXowv.css +0 -1
  174. package/dist/client/assets/NodesView-Dx6HFqjI.js +0 -14
  175. package/dist/client/assets/PiExtensionsManager-BcGBnNiC.js +0 -6
  176. package/dist/client/assets/PluginManager-T_XZ7iNI.js +0 -1
  177. package/dist/client/assets/ReliabilityView-C1C1j1SD.js +0 -1
  178. package/dist/client/assets/ReliabilityView-D9AsVv5l.css +0 -1
  179. package/dist/client/assets/ResearchView-Bv4igpnv.js +0 -1
  180. package/dist/client/assets/SecretsView-C4VX2ZTa.js +0 -1
  181. package/dist/client/assets/SettingsModal-CLEkhLK_.js +0 -31
  182. package/dist/client/assets/SettingsModal-DZrJ5PFH.css +0 -1
  183. package/dist/client/assets/SettingsModal-D_uIvf6n.css +0 -1
  184. package/dist/client/assets/SetupWizardModal-CGYGKurR.css +0 -1
  185. package/dist/client/assets/SetupWizardModal-LqloAL4J.js +0 -1
  186. package/dist/client/assets/SkillsView-CUbSBeZ2.css +0 -1
  187. package/dist/client/assets/SkillsView-I1SDKaRz.js +0 -1
  188. package/dist/client/assets/StashRecoveryView-DMUUR3cy.js +0 -1
  189. package/dist/client/assets/TodoView-PKvJKjtV.js +0 -6
  190. package/dist/client/assets/dashboard-view-BWGH_fAq.js +0 -63
  191. package/dist/client/assets/dashboard-view-D4XVI1XP.js +0 -21
  192. package/dist/client/assets/index-BS-jSWPW.js +0 -742
  193. package/dist/client/assets/index-ktpD_W3I.css +0 -1
@@ -1 +0,0 @@
1
- .theme-selector{padding:0 20px 20px}.theme-mode-toggle{display:flex;align-items:center;gap:var(--space-sm);background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-xs);margin-bottom:20px}.theme-mode-btn{display:flex;align-items:center;justify-content:center;gap:6px;padding:var(--space-sm) var(--space-lg);background:none;border:none;border-radius:var(--radius-sm);color:var(--text-muted);font-size:13px;font-weight:500;cursor:pointer;transition:all var(--transition-fast);flex:1}.theme-mode-btn:hover{color:var(--text);background:var(--card-hover)}.theme-mode-btn.active,.theme-mode-btn.active:hover{background:var(--todo);color:var(--bg)}.theme-mode-btn:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.theme-section-title{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-md)}.theme-font-size-toggle{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin-bottom:var(--space-lg)}.theme-font-size-btn{align-items:center;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;justify-content:center;min-height:calc(var(--space-2xl) + var(--space-sm));padding:var(--space-sm) var(--space-md);transition:all var(--transition-fast)}.theme-font-size-btn:hover{border-color:var(--todo);color:var(--text)}.theme-font-size-btn.active{background:color-mix(in srgb,var(--todo) 14%,transparent);border-color:var(--todo);color:var(--text)}.theme-font-size-btn:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.theme-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-md)}@media(max-width:768px){.theme-grid{grid-template-columns:repeat(2,1fr)}}.theme-option{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:var(--card);border:2px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast)}.theme-option:hover{border-color:var(--todo);background:var(--card-hover)}.theme-option.active{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 14%,transparent)}.theme-option:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.theme-option-swatch{width:calc(var(--space-2xl) + var(--space-lg));height:calc(var(--space-2xl) + var(--space-lg));border-radius:var(--radius);border:2px solid var(--border);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));overflow:hidden}.theme-option-swatch-sample{display:block;min-height:0}.theme-option-swatch-sample-1{background:var(--swatch-sample-1)}.theme-option-swatch-sample-2{background:var(--swatch-sample-2)}.theme-option-swatch-sample-3{background:var(--swatch-sample-3)}.theme-option-swatch-sample-4{background:var(--swatch-sample-4)}.theme-option-label{font-size:12px;font-weight:500;color:var(--text);text-align:center}.theme-swatch-default{--swatch-sample-1: #0d1117;--swatch-sample-2: #161b22;--swatch-sample-3: #58a6ff;--swatch-sample-4: #79c0ff}.theme-swatch-ocean{--swatch-sample-1: #0a1929;--swatch-sample-2: #132f4c;--swatch-sample-3: #4fc3f7;--swatch-sample-4: #00bcd4}.theme-swatch-forest{--swatch-sample-1: #0d2818;--swatch-sample-2: #1a472a;--swatch-sample-3: #4caf50;--swatch-sample-4: #2e7d32}.theme-swatch-sunset{--swatch-sample-1: #2d1f1f;--swatch-sample-2: #4a2c2c;--swatch-sample-3: #ff8a65;--swatch-sample-4: #ff7043}.theme-swatch-zen{--swatch-sample-1: #0c0c0c;--swatch-sample-2: #111111;--swatch-sample-3: #6b7b8c;--swatch-sample-4: #7a8590}.theme-swatch-berry{--swatch-sample-1: #1a0b2e;--swatch-sample-2: #2d1b4e;--swatch-sample-3: #c084fc;--swatch-sample-4: #ec4899}.theme-swatch-monochrome{--swatch-sample-1: #0d0d0d;--swatch-sample-2: #1a1a1a;--swatch-sample-3: #a3a3a3;--swatch-sample-4: #d4d4d4}.theme-swatch-slate{--swatch-sample-1: #1e293b;--swatch-sample-2: #334155;--swatch-sample-3: #60a5fa;--swatch-sample-4: #22d3ee}.theme-swatch-ash{--swatch-sample-1: #292524;--swatch-sample-2: #44403c;--swatch-sample-3: #a8a29e;--swatch-sample-4: #d6d3d1}.theme-swatch-graphite{--swatch-sample-1: #18181b;--swatch-sample-2: #27272a;--swatch-sample-3: #94a3b8;--swatch-sample-4: #cbd5e1}.theme-swatch-ember{--swatch-sample-1: #18181b;--swatch-sample-2: #27272a;--swatch-sample-3: #f97316;--swatch-sample-4: #ef4444}.theme-swatch-rust{--swatch-sample-1: #0f0b09;--swatch-sample-2: #1a1410;--swatch-sample-3: #e06830;--swatch-sample-4: #e88040}.theme-swatch-copper{--swatch-sample-1: #0e0c0a;--swatch-sample-2: #181410;--swatch-sample-3: #e89545;--swatch-sample-4: #f0a858}.theme-swatch-foundry{--swatch-sample-1: #0c0806;--swatch-sample-2: #15100c;--swatch-sample-3: #ffab20;--swatch-sample-4: #ffc040}.theme-swatch-carbon{--swatch-sample-1: #0a0b0d;--swatch-sample-2: #111318;--swatch-sample-3: #6a9acf;--swatch-sample-4: #7ab0e0}.theme-swatch-sandstone{--swatch-sample-1: #1a1712;--swatch-sample-2: #241f18;--swatch-sample-3: #d4a06a;--swatch-sample-4: #e0b080}.theme-swatch-lagoon{--swatch-sample-1: #0a1214;--swatch-sample-2: #101c1f;--swatch-sample-3: #50d8c0;--swatch-sample-4: #60e8d0}.theme-swatch-frost{--swatch-sample-1: #0c0e14;--swatch-sample-2: #121520;--swatch-sample-3: #8ac8f8;--swatch-sample-4: #9ad8ff}.theme-swatch-lavender{--swatch-sample-1: #14101a;--swatch-sample-2: #1c1624;--swatch-sample-3: #c8a0e8;--swatch-sample-4: #d8b0f0}.theme-swatch-neon-bloom{--swatch-sample-1: #120a18;--swatch-sample-2: #1a1024;--swatch-sample-3: #f080d0;--swatch-sample-4: #ff90e0}.theme-swatch-sepia{--swatch-sample-1: #161210;--swatch-sample-2: #201a16;--swatch-sample-3: #d8b878;--swatch-sample-4: #e8c888}.theme-swatch-silver{--swatch-sample-1: #27272a;--swatch-sample-2: #3f3f46;--swatch-sample-3: #94a3b8;--swatch-sample-4: #e2e8f0}.theme-swatch-high-contrast{--swatch-sample-1: #000000;--swatch-sample-2: #0a0a0a;--swatch-sample-3: #00ffff;--swatch-sample-4: #ffff00}.theme-swatch-industrial{--swatch-sample-1: #0c0c0c;--swatch-sample-2: #141414;--swatch-sample-3: #ff6b00;--swatch-sample-4: #ff8c00}.theme-swatch-solarized{--swatch-sample-1: #002b36;--swatch-sample-2: #073642;--swatch-sample-3: #268bd2;--swatch-sample-4: #2aa198}.theme-swatch-factory{--swatch-sample-1: #0a0a0a;--swatch-sample-2: #111111;--swatch-sample-3: #f59e0b;--swatch-sample-4: #06b6d4}.theme-swatch-ayu{--swatch-sample-1: #0f1419;--swatch-sample-2: #131d27;--swatch-sample-3: #39bae6;--swatch-sample-4: #ffb454}.theme-swatch-one-dark{--swatch-sample-1: #282c34;--swatch-sample-2: #21252b;--swatch-sample-3: #61afef;--swatch-sample-4: #00e5ff}.theme-swatch-nord{--swatch-sample-1: #2e3440;--swatch-sample-2: #3b4252;--swatch-sample-3: #88c0d0;--swatch-sample-4: #81a1c1}.theme-swatch-dracula{--swatch-sample-1: #282a36;--swatch-sample-2: #21222c;--swatch-sample-3: #8be9fd;--swatch-sample-4: #00e5ff}.theme-swatch-gruvbox{--swatch-sample-1: #282828;--swatch-sample-2: #1d2021;--swatch-sample-3: #83a598;--swatch-sample-4: #d3869b}.theme-swatch-tokyo-night{--swatch-sample-1: #1a1b26;--swatch-sample-2: #16161e;--swatch-sample-3: #7aa2f7;--swatch-sample-4: #00e5ff}.theme-swatch-catppuccin-mocha{--swatch-sample-1: #1e1e2e;--swatch-sample-2: #181825;--swatch-sample-3: #89b4fa;--swatch-sample-4: #89dceb}.theme-swatch-github-dark{--swatch-sample-1: #0d1117;--swatch-sample-2: #010409;--swatch-sample-3: #58a6ff;--swatch-sample-4: #79c0ff}.theme-swatch-everforest{--swatch-sample-1: #2d353b;--swatch-sample-2: #272e33;--swatch-sample-3: #7fbbb3;--swatch-sample-4: #e0c8a8}.theme-swatch-rose-pine{--swatch-sample-1: #191724;--swatch-sample-2: #1f1d2e;--swatch-sample-3: #c4a7e7;--swatch-sample-4: #ebbcba}.theme-swatch-kanagawa{--swatch-sample-1: #1f1f28;--swatch-sample-2: #16161d;--swatch-sample-3: #7e9cd8;--swatch-sample-4: #7e9cd8}.theme-swatch-night-owl{--swatch-sample-1: #011627;--swatch-sample-2: #01111d;--swatch-sample-3: #82aaff;--swatch-sample-4: #addb67}.theme-swatch-palenight{--swatch-sample-1: #292d3e;--swatch-sample-2: #1e2235;--swatch-sample-3: #82aaff;--swatch-sample-4: #ffcb6b}.theme-swatch-monokai-pro{--swatch-sample-1: #2d2a2e;--swatch-sample-2: #252229;--swatch-sample-3: #78dce8;--swatch-sample-4: #ff6188}.theme-swatch-slime{--swatch-sample-1: #0a0e09;--swatch-sample-2: #0f150d;--swatch-sample-3: #8aff40;--swatch-sample-4: #40e8a0}.theme-swatch-brutalist{--swatch-sample-1: #101010;--swatch-sample-2: #171717;--swatch-sample-3: #ff6a00;--swatch-sample-4: #ffd100}.theme-swatch-neon-city{--swatch-sample-1: #0d0d15;--swatch-sample-2: #121326;--swatch-sample-3: #ff2d95;--swatch-sample-4: #00f0ff}.theme-swatch-parchment{--swatch-sample-1: #1b1712;--swatch-sample-2: #252019;--swatch-sample-3: #d08a4b;--swatch-sample-4: #be6e3c}.theme-swatch-terminal{--swatch-sample-1: #0a0a0a;--swatch-sample-2: #0f120d;--swatch-sample-3: #33ff00;--swatch-sample-4: #8fff38}.theme-swatch-glass{--swatch-sample-1: #13111f;--swatch-sample-2: color-mix(in srgb, #221b34 78%, transparent);--swatch-sample-3: #c86bff;--swatch-sample-4: #ff7aa8}.theme-swatch-horizon{--swatch-sample-1: #1c1e26;--swatch-sample-2: #16161c;--swatch-sample-3: #e59371;--swatch-sample-4: #f08c42}.theme-swatch-vitesse{--swatch-sample-1: #121817;--swatch-sample-2: #0d1210;--swatch-sample-3: #4c9a91;--swatch-sample-4: #dca561}.theme-swatch-outrun{--swatch-sample-1: #0a0a14;--swatch-sample-2: #0d0d1a;--swatch-sample-3: #ff2d95;--swatch-sample-4: #b537f2}.theme-swatch-snazzy{--swatch-sample-1: #282a36;--swatch-sample-2: #1e1f29;--swatch-sample-3: #ff5c57;--swatch-sample-4: #5af78e}.theme-swatch-porple{--swatch-sample-1: #292d3e;--swatch-sample-2: #1e2030;--swatch-sample-3: #c792ea;--swatch-sample-4: #82aaff}.theme-swatch-espresso{--swatch-sample-1: #2c1f1a;--swatch-sample-2: #231813;--swatch-sample-3: #d4a574;--swatch-sample-4: #c17d56}.theme-swatch-mars{--swatch-sample-1: #1a1210;--swatch-sample-2: #140e0c;--swatch-sample-3: #c1440e;--swatch-sample-4: #e77d3d}.theme-swatch-poimandres{--swatch-sample-1: #1a1b26;--swatch-sample-2: #14151f;--swatch-sample-3: #89ddff;--swatch-sample-4: #5de4c7}[data-theme=light] .theme-swatch-factory{--swatch-sample-1: #f5f5f5;--swatch-sample-2: #ffffff;--swatch-sample-3: #d97706;--swatch-sample-4: #0891b2}[data-theme=light] .theme-swatch-ayu{--swatch-sample-1: #fafafa;--swatch-sample-2: #f3f3f3;--swatch-sample-3: #007acc;--swatch-sample-4: #ff8f40}[data-theme=light] .theme-swatch-zen{--swatch-sample-1: #f5f5f5;--swatch-sample-2: #fafafa;--swatch-sample-3: #5a6a7a;--swatch-sample-4: #6a757f}[data-theme=light] .theme-swatch-nord{--swatch-sample-1: #eceff4;--swatch-sample-2: #e5e9f0;--swatch-sample-3: #5e81ac;--swatch-sample-4: #5e81ac}[data-theme=light] .theme-swatch-dracula{--swatch-sample-1: #f8f8f2;--swatch-sample-2: #efeefa;--swatch-sample-3: #0097a7;--swatch-sample-4: #00bcd4}[data-theme=light] .theme-swatch-gruvbox{--swatch-sample-1: #fbf1c7;--swatch-sample-2: #f2e5bc;--swatch-sample-3: #076678;--swatch-sample-4: #8f3f71}[data-theme=light] .theme-swatch-tokyo-night{--swatch-sample-1: #e1e2e7;--swatch-sample-2: #d5d6db;--swatch-sample-3: #3b5ea5;--swatch-sample-4: #00bcd4}[data-theme=light] .theme-swatch-catppuccin-mocha{--swatch-sample-1: #eff1f5;--swatch-sample-2: #e6e9ef;--swatch-sample-3: #1e66f5;--swatch-sample-4: #04a5e5}[data-theme=light] .theme-swatch-github-dark{--swatch-sample-1: #ffffff;--swatch-sample-2: #f6f8fa;--swatch-sample-3: #0969da;--swatch-sample-4: #0969da}[data-theme=light] .theme-swatch-everforest{--swatch-sample-1: #fdf6e3;--swatch-sample-2: #f4f0d9;--swatch-sample-3: #3a94a5;--swatch-sample-4: #83a08a}[data-theme=light] .theme-swatch-rose-pine{--swatch-sample-1: #faf4ed;--swatch-sample-2: #fffaf3;--swatch-sample-3: #907aa9;--swatch-sample-4: #b4637a}[data-theme=light] .theme-swatch-kanagawa{--swatch-sample-1: #edeadd;--swatch-sample-2: #e1ddd4;--swatch-sample-3: #4e76b5;--swatch-sample-4: #4e76b5}[data-theme=light] .theme-swatch-one-dark{--swatch-sample-1: #fafafa;--swatch-sample-2: #f0f0f0;--swatch-sample-3: #4078f2;--swatch-sample-4: #0184bc}[data-theme=light] .theme-swatch-night-owl{--swatch-sample-1: #f6f7f9;--swatch-sample-2: #eef0f4;--swatch-sample-3: #2563eb;--swatch-sample-4: #5a9e2f}[data-theme=light] .theme-swatch-palenight{--swatch-sample-1: #f5f7fa;--swatch-sample-2: #ebeef5;--swatch-sample-3: #3b6fcf;--swatch-sample-4: #c49020}[data-theme=light] .theme-swatch-monokai-pro{--swatch-sample-1: #faf8f5;--swatch-sample-2: #f0ece5;--swatch-sample-3: #2d8fa0;--swatch-sample-4: #c4405e}[data-theme=light] .theme-swatch-slime{--swatch-sample-1: #f2f7ea;--swatch-sample-2: #e6efda;--swatch-sample-3: #3d8f10;--swatch-sample-4: #1a8a6a}[data-theme=light] .theme-swatch-brutalist{--swatch-sample-1: #ece9e4;--swatch-sample-2: #f7f4ef;--swatch-sample-3: #d9480f;--swatch-sample-4: #b8860b}[data-theme=light] .theme-swatch-neon-city{--swatch-sample-1: #f7f5ff;--swatch-sample-2: #f1edff;--swatch-sample-3: #cc166e;--swatch-sample-4: #008e9b}[data-theme=light] .theme-swatch-parchment{--swatch-sample-1: #f5f0e8;--swatch-sample-2: #efe7dc;--swatch-sample-3: #a8562f;--swatch-sample-4: #8f4e2a}[data-theme=light] .theme-swatch-terminal{--swatch-sample-1: #e7f5dd;--swatch-sample-2: #deefd2;--swatch-sample-3: #2d6b14;--swatch-sample-4: #4c8f25}[data-theme=light] .theme-swatch-glass{--swatch-sample-1: #eceaf5;--swatch-sample-2: color-mix(in srgb, #ffffff 75%, transparent);--swatch-sample-3: #9d40cf;--swatch-sample-4: #c74b7a}[data-theme=light] .theme-swatch-slate{--swatch-sample-1: #f1f5f9;--swatch-sample-2: #e2e8f0;--swatch-sample-3: #3b5ea5;--swatch-sample-4: #4f7090}[data-theme=light] .theme-swatch-ash{--swatch-sample-1: #fafaf9;--swatch-sample-2: #f5f5f4;--swatch-sample-3: #5a6a7a;--swatch-sample-4: #768694}[data-theme=light] .theme-swatch-graphite{--swatch-sample-1: #fafafa;--swatch-sample-2: #f4f4f5;--swatch-sample-3: #6f7f90;--swatch-sample-4: #8a99aa}[data-theme=light] .theme-swatch-ember{--swatch-sample-1: #fafafa;--swatch-sample-2: #f4f4f5;--swatch-sample-3: #d9480f;--swatch-sample-4: #e8646a}[data-theme=light] .theme-swatch-rust{--swatch-sample-1: #f5efe8;--swatch-sample-2: #ebe3d8;--swatch-sample-3: #a04020;--swatch-sample-4: #b85828}[data-theme=light] .theme-swatch-copper{--swatch-sample-1: #f3ede6;--swatch-sample-2: #e8e0d6;--swatch-sample-3: #905820;--swatch-sample-4: #a87030}[data-theme=light] .theme-swatch-foundry{--swatch-sample-1: #f5f0e6;--swatch-sample-2: #ebe4d6;--swatch-sample-3: #c07808;--swatch-sample-4: #d08a10}[data-theme=light] .theme-swatch-carbon{--swatch-sample-1: #eef0f4;--swatch-sample-2: #e2e6ec;--swatch-sample-3: #3a6090;--swatch-sample-4: #4878a0}[data-theme=light] .theme-swatch-sandstone{--swatch-sample-1: #f5f0e8;--swatch-sample-2: #ebe4d8;--swatch-sample-3: #a07040;--swatch-sample-4: #b08050}[data-theme=light] .theme-swatch-lagoon{--swatch-sample-1: #eef5f3;--swatch-sample-2: #e0ebe8;--swatch-sample-3: #208070;--swatch-sample-4: #289080}[data-theme=light] .theme-swatch-frost{--swatch-sample-1: #f0f4f8;--swatch-sample-2: #e4eaf0;--swatch-sample-3: #3078a8;--swatch-sample-4: #4088b8}[data-theme=light] .theme-swatch-lavender{--swatch-sample-1: #f4f0f8;--swatch-sample-2: #e8e2f0;--swatch-sample-3: #8060a0;--swatch-sample-4: #9070b0}[data-theme=light] .theme-swatch-neon-bloom{--swatch-sample-1: #f8f0f8;--swatch-sample-2: #f0e4f0;--swatch-sample-3: #a03090;--swatch-sample-4: #b040a0}[data-theme=light] .theme-swatch-sepia{--swatch-sample-1: #f5f0e4;--swatch-sample-2: #ece4d4;--swatch-sample-3: #907040;--swatch-sample-4: #a08050}[data-theme=light] .theme-swatch-silver{--swatch-sample-1: #fafafa;--swatch-sample-2: #f4f4f5;--swatch-sample-3: #6b7280;--swatch-sample-4: #9ca3af}[data-theme=light] .theme-swatch-horizon{--swatch-sample-1: #fdf0ed;--swatch-sample-2: #f9cec0;--swatch-sample-3: #e8646a;--swatch-sample-4: #f08c42}[data-theme=light] .theme-swatch-vitesse{--swatch-sample-1: #f8f5f0;--swatch-sample-2: #efe9e0;--swatch-sample-3: #3a8578;--swatch-sample-4: #c08040}[data-theme=light] .theme-swatch-outrun{--swatch-sample-1: #f0f0f5;--swatch-sample-2: #e8e8ef;--swatch-sample-3: #d02080;--swatch-sample-4: #9030c8}[data-theme=light] .theme-swatch-snazzy{--swatch-sample-1: #fafafa;--swatch-sample-2: #f0f0f2;--swatch-sample-3: #d04040;--swatch-sample-4: #30a050}[data-theme=light] .theme-swatch-porple{--swatch-sample-1: #f5f3f7;--swatch-sample-2: #eae7ef;--swatch-sample-3: #9060d8;--swatch-sample-4: #4080c8}[data-theme=light] .theme-swatch-espresso{--swatch-sample-1: #f5ece4;--swatch-sample-2: #ebe1d6;--swatch-sample-3: #a07050;--swatch-sample-4: #906040}[data-theme=light] .theme-swatch-mars{--swatch-sample-1: #f5ece6;--swatch-sample-2: #ebe0d4;--swatch-sample-3: #a03010;--swatch-sample-4: #c06030}[data-theme=light] .theme-swatch-poimandres{--swatch-sample-1: #f0f0f5;--swatch-sample-2: #e6e6ee;--swatch-sample-3: #4090c0;--swatch-sample-4: #30a090}.theme-reset-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);margin-top:20px;padding:10px 16px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);font-size:13px;font-weight:500;cursor:pointer;transition:all var(--transition-fast);width:100%}.theme-reset-btn:hover{background:var(--card-hover);color:var(--text);border-color:var(--text-muted)}.theme-reset-btn:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.theme-current-preview{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:var(--card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:20px}.theme-preview-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:var(--surface);border-radius:var(--radius);color:var(--todo)}.theme-preview-info{flex:1}.theme-preview-label{font-size:12px;color:var(--text-muted);margin-bottom:2px}.theme-preview-value{font-size:14px;font-weight:600;color:var(--text);text-transform:capitalize}@media(max-width:768px){.model-combobox-dropdown{max-height:50vh;width:min(360px,calc(100vw - 32px))}.model-combobox-search{font-size:16px}.model-combobox-option{min-height:36px}.theme-selector{padding:0 14px 14px}.theme-font-size-toggle{grid-template-columns:1fr}}.cli-binary-panel{display:flex;flex-direction:column;gap:12px;padding:0 var(--space-xl);margin-top:var(--space-lg);border:0;background:transparent}.cli-binary-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.cli-binary-header .settings-section-heading{margin:0}.cli-binary-pill{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.cli-binary-pill--ok{background:color-mix(in srgb,var(--color-success) 18%,transparent);color:var(--color-success);border:1px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.cli-binary-pill--warn{background:color-mix(in srgb,var(--color-warning) 18%,transparent);color:var(--color-warning);border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent)}.cli-binary-pill--err{background:color-mix(in srgb,var(--color-error) 18%,transparent);color:var(--color-error);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.cli-binary-help{color:var(--text-muted);line-height:1.4}.cli-binary-help code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px;font-size:.92em}.cli-binary-status-line{margin:0;color:var(--text-muted)}.cli-binary-status-line code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px}.cli-binary-detail{display:flex;flex-direction:column;gap:12px}.cli-binary-info-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13px}.cli-binary-info-list li{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.cli-binary-info-list span{color:var(--text-muted);min-width:64px}.cli-binary-info-list code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px;word-break:break-all}.cli-binary-expected{color:var(--text-muted);font-size:12px}.cli-binary-actions{display:flex;gap:8px;flex-wrap:wrap}.cli-binary-install-btn,.cli-binary-refresh-btn,.cli-binary-copy-btn{cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px;border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.cli-binary-install-btn{background:var(--accent, #3b82f6);color:var(--accent-text)}.cli-binary-install-btn:hover:not(:disabled){background:var(--accent-hover, #2563eb)}.cli-binary-install-btn:disabled,.cli-binary-refresh-btn:disabled{opacity:.55;cursor:not-allowed}.cli-binary-refresh-btn,.cli-binary-copy-btn{background:color-mix(in srgb,var(--text) 4%,transparent);color:var(--text);border-color:color-mix(in srgb,var(--text) 12%,transparent)}.cli-binary-refresh-btn:hover:not(:disabled),.cli-binary-copy-btn:hover{background:color-mix(in srgb,var(--text) 8%,transparent)}.cli-binary-commands{display:flex;flex-direction:column;gap:6px}.cli-binary-commands label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cli-binary-command-row{display:flex;align-items:center;gap:8px;background:color-mix(in srgb,var(--bg) 25%,transparent);border:1px solid color-mix(in srgb,var(--text) 6%,transparent);border-radius:6px;padding:6px 8px 6px 12px}.cli-binary-command-row code{flex:1;font-family:var(--font-mono, ui-monospace, "SFMono-Regular", monospace);font-size:12.5px;color:var(--text-primary, #e6edf3);white-space:nowrap;overflow-x:auto}.cli-binary-install-log{border-top:1px solid color-mix(in srgb,var(--text) 6%,transparent);padding-top:10px;font-size:12.5px}.cli-binary-install-log summary{cursor:pointer;color:var(--text-muted)}.cli-binary-install-output{margin:6px 0 0;padding:8px 10px;background:color-mix(in srgb,var(--bg) 35%,transparent);border-radius:4px;max-height:220px;overflow:auto;white-space:pre-wrap;font-size:12px;line-height:1.4}.cli-binary-install-output--err{color:var(--color-error)}.cli-binary-permissions-hint{margin:6px 0;padding:8px 10px;background:color-mix(in srgb,var(--color-error) 10%,transparent);border-left:3px solid color-mix(in srgb,var(--color-error) 55%,transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--color-error);font-size:12.5px;line-height:1.5}.prompt-manager{display:flex;flex-direction:column;gap:var(--space-md);padding:0 var(--space-xl);margin-top:var(--space-md)}.prompt-manager-tabs{display:flex;gap:var(--space-xs);border-bottom:1px solid var(--border);padding-bottom:var(--space-sm)}.prompt-manager-tab{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);background:none;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.prompt-manager-tab:hover{color:var(--text);background:var(--surface)}.prompt-manager-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-color:var(--todo)}.prompt-manager-tab.active{color:var(--text);background:var(--surface);border-color:var(--border)}.prompt-manager-content{min-height:200px}.prompt-manager-templates-tab,.prompt-manager-assignments-tab,.prompt-manager-overrides-tab{display:flex;flex-direction:column;gap:var(--space-lg)}.prompt-template-section{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.prompt-template-section-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-template-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-card{padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.prompt-template-card:hover{border-color:var(--text-dim)}.prompt-template-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.prompt-template-card-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.prompt-template-card-name{font-weight:600;color:var(--text);font-size:14px}.prompt-template-badge-built-in,.prompt-template-badge-custom,.prompt-template-badge-override{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.02em}.prompt-template-badge-built-in{background:var(--surface);color:var(--text-muted);border:1px solid var(--border)}.prompt-template-badge-custom{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.prompt-template-badge-override{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.prompt-template-badge-role{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;border-radius:var(--radius-sm)}.prompt-template-badge-built-in,.prompt-template-badge-role,.prompt-role-badge{--prompt-role-color: var(--color-muted)}.prompt-role-tone--executor{--prompt-role-color: var(--todo)}.prompt-role-tone--triage{--prompt-role-color: var(--triage)}.prompt-role-tone--reviewer{--prompt-role-color: var(--in-review)}.prompt-role-tone--merger{--prompt-role-color: var(--done)}.prompt-role-tone--scheduler{--prompt-role-color: var(--color-info)}.prompt-role-tone--engineer{--prompt-role-color: var(--color-warning)}.prompt-role-tone--custom{--prompt-role-color: var(--color-muted)}.prompt-template-badge-role,.prompt-role-badge{background:color-mix(in srgb,var(--prompt-role-color) 15%,transparent);color:var(--prompt-role-color)}.prompt-template-badge-built-in.prompt-role-tone--executor,.prompt-template-badge-built-in.prompt-role-tone--triage,.prompt-template-badge-built-in.prompt-role-tone--reviewer,.prompt-template-badge-built-in.prompt-role-tone--merger,.prompt-template-badge-built-in.prompt-role-tone--scheduler,.prompt-template-badge-built-in.prompt-role-tone--engineer,.prompt-template-badge-built-in.prompt-role-tone--custom{border-color:var(--prompt-role-color)}.prompt-template-card-actions{display:flex;gap:var(--space-xs)}.prompt-template-card-actions .btn-icon{padding:var(--space-xs)}.prompt-template-card-description{font-size:12px;color:var(--text-muted);margin:0 0 var(--space-sm) 0;line-height:1.4}.prompt-template-card-preview{background:var(--surface);border-radius:var(--radius-sm);padding:var(--space-sm);overflow:hidden}.prompt-template-card-preview code{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;display:block;max-height:120px;overflow-y:auto}.prompt-template-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:13px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-md)}.prompt-template-add-btn{align-self:flex-start;margin-top:var(--space-sm)}.prompt-template-editor{padding:var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.prompt-template-editor-title{font-size:14px;font-weight:600;color:var(--text);margin:0 0 var(--space-md) 0}.prompt-template-editor-fields{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-field{display:flex;flex-direction:column;gap:var(--space-xs)}.prompt-template-field label{font-size:12px;font-weight:500;color:var(--text-muted)}.prompt-template-field input,.prompt-template-field select,.prompt-template-prompt-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;transition:border-color var(--transition-fast)}.prompt-template-field input:focus,.prompt-template-field select:focus,.prompt-template-prompt-textarea:focus{outline:none;border-color:var(--todo)}.prompt-template-prompt-textarea{font-family:var(--font-mono);font-size:12px;line-height:1.5;resize:vertical;min-height:120px}.prompt-template-error{padding:var(--space-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-sm);color:var(--color-error);font-size:12px}.prompt-template-editor-actions{display:flex;gap:var(--space-sm);justify-content:flex-end;margin-top:var(--space-sm)}.prompt-template-delete-confirm{padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-template-delete-confirm p{margin:0;font-size:13px;color:var(--text)}.prompt-template-delete-actions{display:flex;gap:var(--space-sm)}.prompt-assignments-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-role-assignment-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-role-assignment-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md)}.prompt-role-assignment-label{display:flex;align-items:center;gap:var(--space-md)}.prompt-role-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);font-size:12px;font-weight:600;border-radius:var(--radius-sm)}.prompt-role-assignment-status{font-size:12px;color:var(--text-muted)}.prompt-role-select{min-width:200px;padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;cursor:pointer}.prompt-role-select:focus{outline:none;border-color:var(--todo)}.prompt-role-select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.prompt-assignments-note{margin-top:var(--space-md);padding:var(--space-md);background:var(--surface);border-radius:var(--radius-md);font-size:12px;color:var(--text-muted);line-height:1.5}.prompt-assignments-note strong{color:var(--text)}.prompt-overrides-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-overrides-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-override-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.prompt-override-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);cursor:pointer;transition:background var(--transition-fast)}.prompt-override-header:hover{background:var(--card-hover)}.prompt-override-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm);flex:1;min-width:0;border:none;background:none;color:inherit;padding:0;text-align:left;font:inherit;cursor:pointer;border-radius:var(--radius-sm)}.prompt-override-info:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.prompt-override-name{font-weight:600;color:var(--text);font-size:13px}.prompt-override-key{font-size:11px;font-family:var(--font-mono);color:var(--text-muted);padding:calc(var(--space-xs) * .5) var(--space-xs);background:var(--surface);border-radius:var(--radius-sm)}.prompt-override-badge{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning);border-radius:var(--radius-sm)}.prompt-override-expand-btn{display:flex;align-items:center;justify-content:center;width:var(--space-xl);height:var(--space-xl);background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-expand-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-expand-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);color:var(--text);background:var(--surface)}.prompt-override-description{font-size:12px;color:var(--text-muted);margin:0;padding:0 var(--space-md) var(--space-md);line-height:1.4}.prompt-override-editor{padding:var(--space-md);border-top:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-override-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:12px;font-family:var(--font-mono);line-height:1.5;resize:vertical;min-height:calc(var(--space-xl) * 3 + var(--space-sm));transition:border-color var(--transition-fast)}.prompt-override-textarea:focus{outline:none;border-color:var(--todo)}.prompt-override-footer{display:flex;align-items:center;gap:var(--space-md)}.prompt-override-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.prompt-override-header-actions{display:flex;align-items:center;gap:var(--space-xs)}.prompt-override-fullscreen-btn{display:flex;align-items:center;justify-content:center;width:var(--space-xl);height:var(--space-xl);background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-fullscreen-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-fullscreen-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);color:var(--text);background:var(--surface)}.prompt-override-fullscreen{position:fixed;inset:0;z-index:10000;background:var(--surface);padding:max(var(--space-lg),env(safe-area-inset-top,0px)) max(var(--space-lg),env(safe-area-inset-right,0px)) max(var(--space-lg),env(safe-area-inset-bottom,0px)) max(var(--space-lg),env(safe-area-inset-left,0px));display:flex;flex-direction:column}.prompt-override-fullscreen-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);flex-shrink:0}.prompt-override-fullscreen-title{font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:var(--space-sm)}.prompt-override-fullscreen-close{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:none;border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;font-size:12px;transition:all var(--transition-fast)}.prompt-override-fullscreen-close:hover{color:var(--text);border-color:var(--text-muted)}.prompt-override-fullscreen-close:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.prompt-override-fullscreen textarea{flex:1;min-height:unset;resize:none;border-radius:var(--radius-md);font-size:14px;line-height:1.6}.prompt-template-fullscreen-pre{flex:1;font-family:var(--font-mono);font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-word;overflow-y:auto;padding:var(--space-md);background:var(--bg);border-radius:var(--radius-md);border:1px solid var(--border);margin:0}.prompt-override-fullscreen .prompt-override-footer{flex-shrink:0;padding-top:var(--space-sm)}.prompt-template-prompt-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.prompt-template-prompt-label-row label{display:block}.prompt-template-fullscreen-btn{vertical-align:middle}.prompt-template-prompt-label-row .prompt-template-fullscreen-btn{margin-left:var(--space-xs)}@media(max-width:768px){.prompt-manager{padding:0 var(--space-lg)}.prompt-manager-tabs{flex-wrap:wrap}.prompt-manager-tab{flex:1;justify-content:center;min-width:calc(50% - var(--space-xs))}.prompt-role-assignment-row{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.prompt-role-select{width:100%}.prompt-template-editor-actions{flex-direction:column}.prompt-template-editor-actions .btn{width:100%}.prompt-override-fullscreen{padding:max(var(--space-md),env(safe-area-inset-top,0px)) max(var(--space-md),env(safe-area-inset-right,0px)) max(var(--space-md),env(safe-area-inset-bottom,0px)) max(var(--space-md),env(safe-area-inset-left,0px))}.prompt-override-fullscreen textarea{font-size:16px}.prompt-override-expand-btn,.prompt-override-fullscreen-btn{width:calc(var(--space-lg) * 2 + var(--space-xs));height:calc(var(--space-lg) * 2 + var(--space-xs))}}@keyframes custom-provider-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-providers-section .onboarding-disclosure-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-list{display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.custom-provider-item:hover{border-color:var(--text-dim)}.custom-provider-item-info{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.custom-provider-item-name{font-weight:600;color:var(--text)}.custom-provider-item-meta{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-provider-item-actions{display:flex;gap:var(--space-xs);flex-shrink:0}.custom-provider-badge{display:inline-flex;align-items:center;padding:var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.custom-provider-empty{color:var(--text-muted);padding:var(--space-sm) 0}.custom-provider-add-btn{margin-top:var(--space-sm)}.custom-provider-form{padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:var(--space-sm)}.custom-provider-form-row{margin-bottom:var(--space-sm)}.custom-provider-form-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-md)}.custom-provider-form-error{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-error);margin-top:var(--space-xs);background:color-mix(in srgb,var(--color-error) 10%,transparent);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.custom-provider-item-edit-form{margin-top:var(--space-xs)}.spin{animation:custom-provider-spin calc(var(--transition-slow) * 4) linear infinite}@media(max-width:768px){.custom-provider-item{flex-direction:column;align-items:flex-start;gap:var(--space-xs)}.custom-provider-item-meta{max-width:100%}.custom-provider-form{padding:var(--space-sm)}.custom-provider-item-actions{align-self:flex-end;margin-top:var(--space-xs)}}.agent-provisioning-policy-editor{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-lg)}.agent-provisioning-policy-help{color:var(--text-muted);font-size:.75rem;margin:0}.agent-provisioning-policy-help code{font-family:var(--font-mono)}.agent-provisioning-policy-textarea{min-height:calc(var(--space-2xl) + var(--space-xl));resize:vertical}@media(max-width:768px){.agent-provisioning-policy-editor{padding:var(--space-md)}}.tracking-repo-select{display:flex;flex-direction:column;gap:var(--space-sm)}.tracking-repo-select__custom-input{margin-top:0}.tracking-repo-select__hint{color:var(--text-muted)}.tracking-repo-select__hint--error{color:var(--color-error)}@media(max-width:768px){.tracking-repo-select{gap:var(--space-xs)}}
@@ -1 +0,0 @@
1
- .settings-header-actions{--settings-header-action-height: calc(var(--space-md) * 2 + var(--space-xs) / 2);display:flex;align-items:stretch;gap:var(--space-xs);margin-left:auto;margin-right:var(--space-sm)}.settings-header-actions>.settings-github-star-btn,.settings-header-actions>.settings-header-help-btn{height:var(--settings-header-action-height);box-sizing:border-box}.settings-header-help-btn{display:inline-flex;align-items:center}@media(max-width:768px){.settings-modal .modal-header{flex-wrap:nowrap;align-items:center;column-gap:var(--space-sm)}.settings-modal-heading{flex:1 1 0;min-width:0}.settings-update-check{flex-wrap:wrap;row-gap:var(--space-xs)}.settings-header-actions{margin-left:auto;margin-right:var(--space-sm)}}.settings-github-star-btn{display:inline-flex;align-items:stretch;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--card);color:var(--text);font-size:12px;font-weight:500;text-decoration:none;overflow:hidden;transition:border-color var(--transition-fast),background var(--transition-fast)}.settings-github-star-btn:hover{border-color:var(--text-muted);background:var(--card-hover)}.settings-github-star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-color:var(--todo)}.settings-github-star-btn__action{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 2)}.settings-github-star-btn__count{display:inline-flex;align-items:center;padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 4);border-left:var(--btn-border-width) solid var(--border);background:color-mix(in srgb,var(--surface) 60%,var(--card));color:var(--text-muted);font-variant-numeric:tabular-nums}.settings-modal{width:min(95vw,1100px);max-width:95vw;min-width:520px;height:80vh;min-height:480px;max-height:calc(100dvh - var(--overlay-padding-top, 10vh) - 16px);overflow:hidden;resize:both}@media(max-width:768px){.modal-overlay.settings-modal-overlay,.modal-overlay:has(.settings-modal){padding:0;inset:0;align-items:stretch;justify-content:stretch}.modal.settings-modal{width:100vw;min-width:0;max-width:100vw;height:100dvh;min-height:100dvh;max-height:100dvh;margin:0;border:none;border-radius:0;resize:none;flex:1 1 auto}.modal.settings-modal[style*=--keyboard-overlap]{height:var(--vv-height, 100dvh);min-height:var(--vv-height, 100dvh);max-height:var(--vv-height, 100dvh);transform:translateY(var(--vv-offset-top, 0px));will-change:transform}}.settings-modal-heading{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-modal-heading h3{margin:0}.settings-modal-version{margin:0;font-size:.85rem;color:var(--text-muted);font-weight:500}.settings-update-check{display:flex;align-items:center;gap:var(--space-sm)}.settings-version-check-btn{--settings-inline-touch-target: calc(var(--space-lg) + var(--space-lg) + var(--space-xs));display:inline-flex;align-items:center;gap:var(--space-xs);margin:0;min-height:var(--settings-inline-touch-target);padding:var(--space-xs) var(--space-sm);border:none;background:transparent;color:var(--text-muted);cursor:pointer;transition:opacity var(--transition-fast),box-shadow var(--transition-fast)}.settings-version-check-btn:hover:not(:disabled){opacity:.85}.settings-version-check-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.settings-version-check-btn:disabled{cursor:default;opacity:.7}.settings-version-check-btn svg{color:var(--text-muted)}.settings-version-check-btn svg.spinning{animation:settings-update-spin 1s linear infinite}.settings-update-result{font-size:.85rem;font-weight:500}.settings-update-result--up-to-date{color:var(--color-success)}.settings-update-result--available{color:var(--color-info)}.settings-update-result--error{color:var(--text-muted)}.settings-update-result-link{color:var(--color-info);text-decoration:underline;transition:color var(--transition-fast),box-shadow var(--transition-fast)}.settings-update-result-link:hover{color:color-mix(in srgb,var(--color-info) 80%,var(--text))}.settings-update-result-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}@keyframes settings-update-spin{to{transform:rotate(360deg)}}.backup-stats{display:flex;align-items:center;gap:var(--space-lg);padding:var(--space-sm) var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,transparent)}.backup-stat{display:flex;flex:1 1 0;flex-direction:column;align-items:center;gap:var(--space-xs);min-width:0}.backup-stat-value{color:var(--text);font-size:1rem;font-weight:600;font-variant-numeric:tabular-nums}.backup-stat-label{color:var(--text-muted);font-size:.75rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.backup-list{margin-top:var(--space-sm)}.backup-list summary{padding:var(--space-sm) 0;color:var(--text-muted);cursor:pointer;transition:color var(--transition-fast)}.backup-list summary:hover{color:var(--text)}.backup-list summary:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:var(--focus-ring-strong)}.backup-list ul{display:flex;flex-direction:column;gap:var(--space-xs);margin:0;margin-top:var(--space-sm);padding:0;list-style:none}.backup-list li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) 0;border-top:var(--btn-border-width) solid color-mix(in srgb,var(--border) 80%,transparent)}.backup-list li code{min-width:0;color:var(--text);font-family:var(--font-mono);font-size:.75rem;white-space:nowrap;overflow-x:auto}.backup-size{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;text-align:right;white-space:nowrap}@media(max-width:768px){.backup-stats{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.backup-stat{align-items:flex-start}.backup-list ul{max-height:calc(var(--space-xl) * 9 + var(--space-md));overflow-y:auto;-webkit-overflow-scrolling:touch}.backup-list li code{white-space:normal;overflow-wrap:anywhere;word-break:normal}}.settings-layout{display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.settings-mobile-section-picker{display:none}.settings-sidebar{width:170px;min-width:170px;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;padding:var(--space-sm) var(--space-sm);gap:calc(var(--space-xs) / 2);background:color-mix(in srgb,var(--text) 10%,transparent);scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-sidebar::-webkit-scrollbar{width:6px}.settings-sidebar::-webkit-scrollbar-track{background:transparent}.settings-sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-sidebar::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-research-source-locked{cursor:default;color:var(--text-muted)!important}.settings-research-source-locked input[type=checkbox]{cursor:not-allowed}.settings-research-source-grid,.settings-research-limits-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.settings-research-limit-field{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-research-limits-error{grid-column:1 / -1}@media(max-width:768px){.settings-research-source-grid,.settings-research-limits-grid{grid-template-columns:1fr}}.settings-nav-item{display:block;width:100%;padding:var(--space-sm) var(--space-md);font-size:13px;font-weight:500;color:var(--text-muted);background:none;border:none;border-left:3px solid transparent;border-radius:0 var(--radius-md) var(--radius-md) 0;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.settings-nav-item:hover{background:var(--bg);color:var(--text);border-left-color:var(--border)}.settings-nav-item:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.settings-nav-item.active{background:var(--bg);color:var(--todo);font-weight:600;border-left-color:var(--todo)}.settings-group-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding:var(--space-md) var(--space-md) var(--space-xs);margin-top:var(--space-sm);user-select:none}.settings-group-header:first-child{margin-top:0}.settings-content{flex:1;overflow-x:hidden;overflow-y:auto;padding:4px 0 12px;scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-content::-webkit-scrollbar{width:6px}.settings-content::-webkit-scrollbar-track{background:transparent}.settings-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-content::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-content>*{animation:settingsFadeIn var(--transition-normal)}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.settings-section-heading{font-size:14px;font-weight:600;padding:var(--space-lg) var(--space-xl) var(--space-md);margin:0 0 var(--space-md);color:var(--text);border-bottom:1px solid var(--border)}.settings-content>.settings-section-heading:first-child,.settings-modal-section>.settings-section-heading:first-child{padding-top:var(--space-md)}.settings-section-heading--spaced{margin-top:var(--space-lg)}.settings-section-description{margin:0;padding:0 var(--space-xl);margin-bottom:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-plugins-subsection-toggle{display:inline-flex;gap:var(--space-xs);padding:0 var(--space-xl);margin:var(--space-md) 0}.settings-plugins-subsection-btn{display:inline-flex;align-items:center;justify-content:center;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--text-muted);font-size:.85rem;font-weight:600;padding:var(--space-xs) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.settings-plugins-subsection-btn:hover{background:var(--surface-hover, color-mix(in srgb, var(--text) 6%, transparent));color:var(--text)}.settings-plugins-subsection-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.settings-plugins-subsection-btn.active{background:color-mix(in srgb,var(--todo) 14%,transparent);border-color:color-mix(in srgb,var(--todo) 45%,var(--border));color:var(--todo)}.settings-plugins-subsection-panel{padding-bottom:var(--space-md)}.settings-scope-icon{margin-right:6px;display:inline-flex;vertical-align:middle;color:var(--text-muted)}.settings-scope-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);margin:0 var(--space-xl) var(--space-xs);font-size:12px;border-radius:var(--radius-md);color:var(--text-muted)}.settings-scope-global{background:color-mix(in srgb,var(--color-info) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-info) 40%,transparent)}.settings-scope-project{background:color-mix(in srgb,var(--color-success) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.settings-scope-mixed{background:color-mix(in srgb,var(--triage) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--triage) 40%,transparent)}.settings-note{display:block;padding:0 var(--space-xl);margin-top:var(--space-xs);font-size:12px;color:var(--text-muted)}.form-inline-group{display:flex;align-items:center;gap:var(--space-sm)}.form-inline-group .input{flex:1;min-width:0}.btn-link{background:none;border:none;padding:0;font-size:12px;color:var(--accent, #4a90e2);cursor:pointer;text-decoration:underline;white-space:nowrap}.btn-link:hover{text-decoration:none}.settings-overlap-ignore-group code{font-family:var(--font-mono);font-size:.9em}.settings-button-row{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.settings-raw-output{margin:var(--space-sm) 0 0;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);max-height:calc(var(--space-2xl) * 7);overflow:auto;font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs))}.settings-url-output{display:block;margin-top:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));overflow-wrap:anywhere;word-break:break-word;overflow-x:auto;max-width:100%}.settings-qr-preview{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-qr-preview-label{margin:0;font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.settings-qr-preview-image-wrap{width:fit-content;max-width:100%;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card)}.settings-qr-preview-image{display:block;width:min(calc(var(--space-2xl) * 6),100%);height:auto;aspect-ratio:1 / 1}.remote-provider-selector{display:flex;gap:var(--space-xs);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-xs);background:var(--surface)}.remote-provider-option{position:relative;flex:1;cursor:pointer}.remote-provider-option input{position:absolute;opacity:0;width:0;height:0}.remote-provider-option span{display:block;padding:var(--space-sm) var(--space-md);text-align:center;border-radius:var(--radius-sm);border:var(--btn-border-width) solid transparent;color:var(--text-muted);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.remote-provider-option-content{display:inline-flex;align-items:center;gap:var(--space-xs)}.remote-provider-option input:checked+span{background:var(--card);color:var(--text);border-color:var(--border)}.remote-provider-option input:focus-visible+span{box-shadow:var(--focus-ring-strong)}.remote-status-bar{--status-color: var(--text-muted);display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:0 var(--space-xl) var(--space-md);background:color-mix(in srgb,var(--status-color) 10%,transparent)}.remote-status-bar--running{--status-color: var(--color-success)}.remote-status-bar--starting{--status-color: var(--color-warning)}.remote-status-bar--error{--status-color: var(--color-error)}.remote-status-bar--stopped{--status-color: var(--text-muted)}.remote-share-block{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--text-muted) 5%,transparent)}.remote-share-row{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-share-row .settings-qr-preview-image{margin-top:var(--space-xs)}.remote-status-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;display:inline-block;flex-shrink:0}.remote-status-dot--running{background:var(--color-success)}.remote-status-dot--starting{background:var(--color-warning)}.remote-status-dot--error{background:var(--color-error)}.remote-status-dot--stopped{background:var(--text-muted)}.remote-status-url{margin-left:auto;font-family:var(--font-mono);overflow-wrap:anywhere;word-break:break-word;user-select:all}.remote-provider-settings{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-cli-detection{display:flex;align-items:flex-start;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm)}.remote-cli-detection--available{background:color-mix(in srgb,var(--color-success) 10%,transparent);color:var(--color-success)}.remote-cli-detection--missing{background:color-mix(in srgb,var(--color-warning) 10%,transparent);color:var(--color-warning)}.remote-cli-detection-content{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text)}.remote-cli-detection .btn{align-self:flex-start}.remote-cli-install-error{color:var(--color-error)}.remote-cli-manual{color:var(--text-dim)}.remote-external-tunnel-panel{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-info) 10%,transparent)}.remote-external-tunnel-header{display:flex;align-items:center;gap:var(--space-sm);color:var(--color-info)}.remote-external-tunnel-qr{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-external-tunnel-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-advanced-details{margin:var(--space-lg) var(--space-xl) 0;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);background:var(--surface)}.remote-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-advanced-details>summary::-webkit-details-marker{display:none}.remote-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-advanced-details[open]>summary:before{content:"▾"}.settings-option-details{margin-top:var(--space-xs)}.settings-research-provider-group{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-research-provider-advanced-details{margin-left:var(--space-md)}.settings-research-empty-state{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}@media(max-width:768px){.settings-research-provider-advanced-details{margin-left:0}}.settings-option-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.settings-option-details>summary::-webkit-details-marker{display:none}.settings-option-details>summary:before{content:"▸";margin-right:var(--space-xs)}.settings-option-details[open]>summary:before{content:"▾"}.remote-cf-advanced-details{margin-top:var(--space-xs)}.remote-cf-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-cf-advanced-details>summary::-webkit-details-marker{display:none}.remote-cf-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-cf-advanced-details[open]>summary:before{content:"▾"}.remote-cf-advanced-fields{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.remote-tunnel-actions{margin-top:var(--space-md)}.remote-tunnel-actions .btn{width:100%}.settings-overlap-ignore-list{display:flex;flex-direction:column;gap:var(--space-sm);margin:var(--space-sm) 0}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.settings-overlap-path-picker-modal{max-width:min(960px,calc(100vw - var(--space-2xl)))}.settings-overlap-path-picker-body{display:flex;flex-direction:column;gap:var(--space-sm);max-height:min(70vh,720px)}.settings-overlap-path-picker-note{margin:0;font-size:12px;color:var(--text-muted)}.settings-section-divider{border-top:1px solid var(--border);margin:var(--space-lg) var(--space-xl)}@media(max-width:768px){.settings-note{padding:0 var(--space-lg)}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{grid-template-columns:minmax(0,1fr)}.settings-overlap-ignore-row>.btn{justify-self:start}.settings-overlap-path-picker-modal{max-width:calc(100vw - var(--space-md))}.remote-provider-selector{flex-direction:column}.remote-status-bar{flex-wrap:wrap;margin:0 var(--space-lg) var(--space-md)}.remote-share-block{margin:0 var(--space-lg) var(--space-md)}.remote-status-url{width:100%;margin-left:0;font-size:.8em}.remote-provider-option,.remote-tunnel-actions .btn{min-height:36px}.remote-cli-detection,.remote-external-tunnel-panel{margin:0 var(--space-lg) var(--space-md)}}.ntfy-advanced-disclosure{margin-top:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.ntfy-advanced-disclosure>summary{cursor:pointer;list-style:none;padding:var(--space-sm) var(--space-md);font-size:12px;font-weight:600;color:var(--text)}.ntfy-advanced-disclosure>summary::-webkit-details-marker{display:none}.ntfy-advanced-content{padding:0 var(--space-md) var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-inline-link{color:var(--todo);text-decoration:none;transition:text-decoration var(--transition-fast)}.settings-inline-link:hover{text-decoration:underline}.settings-inline-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.notification-provider-card{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-lg);background:var(--surface);margin:0 var(--space-xl) var(--space-lg);overflow:hidden}.notification-provider-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border)}.notification-provider-body{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.notification-provider-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding-top:var(--space-md);border-top:var(--btn-border-width) solid var(--border);margin-top:var(--space-md)}.notification-test-feedback{display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-sm)}.notification-test-feedback-item{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-sm);padding:var(--space-xs) var(--space-sm)}.notification-test-feedback-item--success{border-color:color-mix(in srgb,var(--color-success) 45%,var(--border));background:color-mix(in srgb,var(--color-success) 8%,transparent);color:var(--color-success)}.notification-test-feedback-item--error{border-color:color-mix(in srgb,var(--color-error) 45%,var(--border));background:color-mix(in srgb,var(--color-error) 8%,transparent);color:var(--color-error)}@media(max-width:768px){.notification-provider-actions{flex-direction:column}.notification-provider-actions .btn{width:100%}}.memory-status-message{display:flex;gap:var(--space-md);align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.memory-status-message span{min-width:0}.memory-retrieval-test{margin-top:var(--space-lg)}.memory-test-result{margin:0 var(--space-xl) var(--space-lg);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-test-result strong,.memory-test-result span{color:var(--text);font-size:12px}.memory-test-result small{display:block;margin-top:var(--space-xs);color:var(--text-muted);font-size:12px}.memory-test-result ul{margin:var(--space-md) 0 0;padding:0;list-style:none}.memory-test-result li{padding-top:var(--space-sm);border-top:var(--btn-border-width) solid var(--border)}.memory-test-result li+li{margin-top:var(--space-sm)}.memory-test-result p{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.memory-editor-section{margin-top:var(--space-lg);display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.memory-editor-form-group{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.memory-file-summary{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xs) var(--space-md);align-items:center;margin:0 var(--space-xl) var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-file-summary span{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent);font-size:11px;font-weight:600}.memory-file-summary strong{min-width:0;overflow-wrap:anywhere;color:var(--text);font-family:var(--font-mono);font-size:12px}.memory-file-summary small{grid-column:2;color:var(--text-muted);font-size:12px}.memory-editor-frame{min-height:50vh;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex:1 1 auto;flex-direction:column;min-width:0}.auth-panel-body{padding-inline:var(--space-md)}.auth-section-hint{padding:var(--space-md) var(--space-lg);margin-bottom:var(--space-md);background:var(--bg-tertiary);border-radius:var(--radius-md);font-size:13px;color:var(--text-muted);border-left:3px solid var(--text-muted)}.auth-provider-group{margin-bottom:calc(var(--space-sm) + var(--space-xs) / 2)}.auth-group-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:var(--space-xs);padding:0 4px}.auth-provider-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-xs);overflow:hidden;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.auth-provider-card:hover{border-color:var(--text-dim)}.auth-provider-card--authenticated{border-color:color-mix(in srgb,var(--color-success) 40%,var(--border));background:color-mix(in srgb,var(--color-success) 5%,var(--surface))}.auth-provider-card--authenticated:hover{border-color:color-mix(in srgb,var(--color-success) 60%,var(--border))}.auth-provider-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);gap:12px}.auth-provider-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.auth-provider-info strong{font-weight:500;color:var(--text)}.auth-provider-icon-slot{display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--space-md) + var(--space-xs) * 2);block-size:calc(var(--space-md) + var(--space-xs) * 2);flex-shrink:0}.auth-provider-icon-slot .provider-icon{display:inline-flex}.auth-hint{display:block;padding:12px 4px 0;font-size:12px;color:var(--text-muted);border-top:1px solid var(--border);margin-top:8px}.auth-apikey-section{display:flex;flex-direction:column;gap:var(--space-xs);align-items:flex-end;flex-shrink:0}.auth-apikey-input-row{display:flex;gap:6px;align-items:center}.auth-apikey-input{background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:6px 10px;font-size:13px;width:180px;font-family:monospace}.auth-apikey-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.auth-apikey-input:disabled{opacity:.6}.auth-apikey-progress{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-right:4px}.auth-apikey-error{font-size:11px;color:var(--color-error);padding-right:4px}.auth-provider-actions-row{display:flex;width:100%;align-items:center;gap:var(--space-sm)}.auth-device-code-panel{width:100%;margin-top:var(--space-sm);padding:var(--space-sm);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,transparent);display:flex;flex-direction:column;gap:var(--space-sm)}.auth-device-code-pill{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .5);letter-spacing:var(--space-xs);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-pill);border:var(--btn-border-width) solid var(--border);background:var(--card);color:var(--text);display:flex;align-self:stretch}.auth-key-hint{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);display:inline-block;margin-top:var(--space-xs);user-select:none}.settings-lane-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;white-space:nowrap}.settings-lane-badge--override{background-color:color-mix(in srgb,var(--todo) 20%,transparent);color:var(--todo)}.settings-lane-badge--inherited{background-color:color-mix(in srgb,var(--text-muted) 15%,transparent);color:var(--text-muted)}.settings-description{font-size:13px;color:var(--text-dim);padding-inline:var(--space-xl);margin-block:0 var(--space-md);line-height:1.5}.settings-token-cap-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.settings-model-lane-control-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-control-main{flex:1}.settings-summarization-actions{justify-content:flex-start}.settings-model-presets{display:flex;flex-direction:column;gap:var(--space-md)}.settings-preset-list{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-item{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.settings-preset-item-meta{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.settings-preset-item-meta strong{color:var(--text);overflow-wrap:anywhere}.settings-preset-summary{font-size:12px;overflow-wrap:anywhere}.settings-preset-item-actions{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}.settings-preset-actions{display:flex;justify-content:flex-start}.settings-preset-editor{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,var(--card))}.settings-preset-editor-fields{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-editor .form-group{padding:0}.settings-preset-editor-actions{justify-content:flex-start;margin-top:0;padding:0}.settings-preset-auto-select{margin-top:var(--space-sm)}.settings-preset-size-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}.settings-preset-size-row{padding:0}@media(max-width:768px){.settings-layout{flex-direction:column;min-height:0}.settings-mobile-section-picker{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border);background:var(--surface)}.settings-mobile-section-picker label{color:var(--text-muted);font-weight:600;text-transform:uppercase}.settings-mobile-section-picker select{width:100%}.settings-mobile-section-picker select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.settings-sidebar{display:none}.settings-nav-item{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);border-left:none;border-bottom:2px solid transparent;border-radius:var(--radius-md) var(--radius-md) 0 0;padding:calc(var(--space-xs) + var(--space-xs) / 2) var(--space-md);white-space:nowrap}.settings-nav-item:hover{border-left-color:transparent;border-bottom-color:var(--border)}.settings-nav-item.active{border-left-color:transparent;border-bottom-color:var(--todo)}.settings-group-header{display:none}.notification-provider-card{margin:0 var(--space-lg) var(--space-md)}.notification-provider-header{padding:var(--space-sm) var(--space-md)}.notification-provider-body{padding:var(--space-md)}.settings-scope-icon{margin-right:0}.settings-content{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto}.settings-content .form-group small{overflow-wrap:break-word;word-break:normal}.settings-content input,.settings-content select,.settings-content textarea{font-size:16px}.settings-section-heading{padding:var(--space-lg) var(--space-lg) var(--space-md);margin:0 0 var(--space-md)}.settings-plugins-subsection-toggle{display:flex;width:100%;padding:0 var(--space-lg)}.settings-plugins-subsection-btn{flex:1;min-height:36px}.settings-plugins-subsection-panel{padding-left:var(--space-lg);padding-right:var(--space-lg)}.form-group{padding:0 calc(var(--space-md) + var(--space-xs) / 2)}.settings-scope-banner{padding:var(--space-sm) var(--space-lg)}.memory-editor-frame{min-height:65vh}.memory-file-summary{grid-template-columns:1fr;margin:0 var(--space-lg) var(--space-md)}.memory-status-message{align-items:stretch;flex-direction:column}.memory-file-summary span{justify-content:flex-start}.memory-file-summary small{grid-column:auto}.settings-description{padding:0 var(--space-lg)}.settings-content .btn,.settings-preset-item-actions .btn{min-height:36px}.auth-provider-row{flex-wrap:wrap;padding:var(--space-md) calc(var(--space-md) + var(--space-xs) / 2);gap:var(--space-sm)}.auth-section-hint{margin:0 calc(var(--space-md) + var(--space-xs) / 2) var(--space-md);padding:calc(var(--space-sm) + var(--space-xs) / 2) calc(var(--space-md) + var(--space-xs) / 2)}.auth-provider-group{margin-bottom:var(--space-md)}.auth-group-label{padding:0 calc(var(--space-md) + var(--space-xs) / 2)}.auth-provider-card{margin:0 calc(var(--space-md) + var(--space-xs) / 2) var(--space-sm)}.auth-provider-header{flex-wrap:wrap;padding:calc(var(--space-sm) + var(--space-xs) / 2) calc(var(--space-md) + var(--space-xs) / 2);gap:10px}.auth-provider-header>div:not(.auth-provider-info):not(.auth-apikey-section){margin-left:auto}.auth-provider-actions-row{width:100%;justify-content:flex-end}.auth-device-code-panel{width:100%}.auth-device-code-pill{max-width:100%;overflow-wrap:anywhere}.auth-provider-info{width:100%;flex-basis:100%}.auth-apikey-section{width:100%;flex-basis:100%;align-items:flex-end}.auth-apikey-input-row{width:100%;flex-wrap:wrap;justify-content:flex-end}.auth-apikey-input{flex:1;min-width:120px;width:auto}.auth-apikey-input-row .btn{flex-shrink:0;margin-left:auto}.auth-hint{padding:var(--space-md) calc(var(--space-md) + var(--space-xs) / 2) 0}.settings-model-presets{gap:var(--space-sm)}.settings-preset-item{flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md)}.settings-preset-item-actions{justify-content:flex-start}.settings-preset-editor{padding:var(--space-sm) var(--space-md)}.settings-preset-editor-actions{flex-wrap:wrap}.settings-preset-size-grid{grid-template-columns:1fr;gap:var(--space-xs)}.settings-node-routing-note{padding:var(--space-sm) var(--space-md);font-size:12px}}.settings-node-routing-note{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);margin-top:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-node-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);font-size:12px;color:var(--text-muted)}.auth-advanced-disclosure{margin-top:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.auth-advanced-disclosure>summary{cursor:pointer;padding:var(--space-sm) var(--space-md)}.auth-advanced-content{display:flex;flex-direction:column;gap:var(--space-sm);padding:0 var(--space-md) var(--space-md)}.auth-custom-provider-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm)}.auth-custom-provider-actions{display:flex;gap:var(--space-sm)}.settings-warning-banner{margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--color-warning);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-warning) 12%,transparent);color:var(--text);font-size:var(--font-sm, .875rem);line-height:1.4}.settings-warning-banner strong{color:var(--color-warning);margin-right:var(--space-xs)}@media(max-width:768px){.auth-custom-provider-item{flex-direction:column;align-items:flex-start}.settings-warning-banner{padding:var(--space-sm)}}
@@ -1 +0,0 @@
1
- .wizard-option-recommended{display:inline-flex;align-items:center;width:fit-content;padding:calc(var(--space-xs) / 2) var(--space-sm);background:color-mix(in srgb,var(--color-success) 10%,transparent);color:var(--color-success)!important;border-radius:var(--radius-sm);font-size:calc(var(--space-md) - (var(--space-xs) / 4))!important;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.wizard-error{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 35%,transparent);border-radius:var(--radius-md);color:var(--color-error);font-size:calc(var(--space-md) + (var(--space-xs) / 4))}.setup-wizard-overlay{overflow-y:auto;overscroll-behavior:contain}.setup-wizard-modal{display:flex;flex-direction:column;max-width:880px;width:90vw;max-height:min(720px,calc(100vh - var(--overlay-padding-top, 10vh) - var(--space-lg)));max-height:min(720px,calc(100dvh - var(--overlay-padding-top, 10vh) - var(--space-lg)));animation:slideUp var(--transition-normal) ease-out;overflow:hidden;flex-shrink:0}@keyframes slideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.setup-wizard-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-xl) var(--space-xl) 0;gap:var(--space-md);flex-shrink:0}.setup-wizard-heading{display:flex;flex-direction:column;gap:var(--space-xs);flex:1 1 auto;min-width:0}.setup-wizard-brand{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--logo-accent)}.setup-wizard-brand-logo{width:28px;height:28px;flex-shrink:0}.setup-wizard-brand-name{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1}.setup-wizard-title{font-size:24px;font-weight:800;color:var(--text);margin:0;line-height:1.1}.setup-wizard-content{padding:var(--space-md) var(--space-xl);flex:1 1 auto;min-height:0;overflow-y:auto}.setup-wizard-manual{display:flex;flex-direction:column}.setup-wizard-manual .welcome-icon{display:flex;align-items:center;justify-content:center;width:64px;height:64px;background:color-mix(in srgb,var(--todo) 10%,transparent);border-radius:var(--radius-lg);color:var(--todo);margin-bottom:var(--space-lg)}.setup-wizard-manual .welcome-text{font-size:14px;color:var(--text-muted);line-height:1.6;margin:0 0 var(--space-xl)}.setup-wizard-mode-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin:0 0 var(--space-lg);padding:0;border:0}.setup-wizard-mode-switch legend{font-size:13px;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.setup-wizard-mode-option{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);cursor:pointer;transition:border-color var(--transition-fast),background-color var(--transition-fast),box-shadow var(--transition-fast)}.setup-wizard-mode-option input{accent-color:var(--todo)}.setup-wizard-mode-option:hover{border-color:var(--text-dim)}.setup-wizard-mode-option.selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 10%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--todo) 25%,transparent)}.setup-wizard-manual .form-group{margin-bottom:var(--space-lg)}.setup-wizard-manual .form-group label{display:block;font-size:13px;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.setup-wizard-manual .form-group input,.setup-wizard-manual .form-group select{width:100%;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.setup-wizard-manual .form-group input:focus,.setup-wizard-manual .form-group select:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.setup-wizard-manual .form-hint{margin:4px 0 0;font-size:12px;color:var(--text-dim)}.setup-wizard-isolation-options{display:flex;flex-direction:column;gap:var(--space-sm)}.setup-wizard-advanced{margin-top:var(--space-sm);border-top:1px solid var(--border);padding-top:var(--space-lg)}.setup-wizard-advanced-toggle{width:100%;display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) 0;background:transparent;border:none;color:var(--text);font-size:14px;font-weight:600;text-align:left;cursor:pointer}.setup-wizard-advanced-toggle:hover{color:var(--logo-accent)}.setup-wizard-advanced-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.setup-wizard-advanced-toggle[aria-expanded=true] .setup-wizard-advanced-chevron{transform:rotate(90deg)}.setup-wizard-advanced-chevron{flex-shrink:0;transition:transform var(--transition-fast)}.setup-wizard-advanced-panel{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg)}.setup-wizard-advanced-panel .form-group:last-child{margin-bottom:0}.setup-wizard-auth-token{display:flex;flex-direction:column;gap:var(--space-sm)}.setup-wizard-auth-token-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.setup-wizard-auth-token-actions .btn{min-height:36px}.setup-wizard-auth-step{display:flex;flex-direction:column;gap:var(--space-lg)}.setup-wizard-auth-step-description{font-size:14px;color:var(--text-muted);line-height:1.6;margin:0}.setup-wizard-auth-step code{font-family:var(--font-mono);font-size:12px;padding:2px 6px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm)}.setup-wizard-isolation-option{display:flex;align-items:flex-start;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast)}.setup-wizard-isolation-option:hover{background:var(--card-hover);border-color:var(--text-dim)}.setup-wizard-isolation-option.selected{background:color-mix(in srgb,var(--todo) 5%,transparent);border-color:var(--todo);box-shadow:0 0 0 1px var(--todo)}.setup-wizard-isolation-option input[type=radio]{margin-top:2px;accent-color:var(--todo)}.setup-wizard-isolation-option-content{display:flex;flex-direction:column;gap:2px}.setup-wizard-isolation-option-content strong{font-size:14px;font-weight:600;color:var(--text)}.setup-wizard-isolation-option-content span{font-size:12px;color:var(--text-muted)}.setup-wizard-isolation-option .wizard-option-recommended{margin-top:2px}.setup-wizard-complete{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-sm);padding:var(--space-lg) 0}.setup-wizard-complete .success-icon{color:var(--color-success)}.setup-wizard-complete h3{font-size:20px;font-weight:700;color:var(--text);margin:0}.setup-wizard-complete p{font-size:14px;color:var(--text-muted);margin:0;line-height:1.5}.setup-wizard-footer{display:flex;align-items:center;gap:var(--space-sm);justify-content:flex-end;padding:var(--space-md) var(--space-xl) var(--space-lg);flex-shrink:0;border-top:1px solid var(--border);background:var(--surface)}.setup-wizard-footer .btn-primary{display:inline-flex;align-items:center;gap:var(--space-sm);padding:10px 24px;font-size:14px;font-weight:600}.setup-wizard-help-link{margin-right:auto;text-decoration:none}.setup-wizard-footer .btn-primary:disabled{opacity:.5;cursor:not-allowed}@media(max-width:768px){.setup-wizard-overlay{padding:max(var(--space-md),env(safe-area-inset-top,0px)) max(var(--space-md),env(safe-area-inset-right,0px)) max(var(--space-md),env(safe-area-inset-bottom,0px)) max(var(--space-md),env(safe-area-inset-left,0px))}.setup-wizard-modal{display:flex;flex-direction:column;max-width:100%;width:100%;max-height:calc(100vh - max(var(--space-2xl),env(safe-area-inset-top,0px)) - max(var(--space-2xl),env(safe-area-inset-bottom,0px)));max-height:calc(100dvh - max(var(--space-2xl),env(safe-area-inset-top,0px)) - max(var(--space-2xl),env(safe-area-inset-bottom,0px)));border-radius:var(--radius-lg)}.setup-wizard-header{padding:var(--space-md) var(--space-md) 0}.setup-wizard-brand-name{font-size:20px}.setup-wizard-title{font-size:21px}.setup-wizard-content{padding:var(--space-md)}.setup-wizard-mode-switch{grid-template-columns:1fr}.setup-wizard-isolation-options{gap:var(--space-xs)}.setup-wizard-isolation-option{padding:var(--space-sm) var(--space-md)}.setup-wizard-advanced-panel{padding:var(--space-sm)}.setup-wizard-auth-token-actions .btn{width:100%;justify-content:center}.setup-wizard-footer{flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md) max(var(--space-md),env(safe-area-inset-bottom,0px))}.setup-wizard-footer .btn-primary{width:100%;justify-content:center}.setup-wizard-help-link{margin-right:0;width:100%;justify-content:center}.setup-wizard-complete{padding:var(--space-lg) 0}}
@@ -1 +0,0 @@
1
- import{r as o,j as e}from"./vendor-react-K0fH_qHe.js";import{cB as w,bb as L,cC as O,cD as _,cE as $,X as W,b as Y,C as k,L as G}from"./index-BS-jSWPW.js";import{D as q}from"./DirectoryPicker-B4VRL2BH.js";import{s as C}from"./projectDetection-G3XuxD2X.js";import"./vendor-xterm-DzcZoU0P.js";import"./vendor-codemirror-jBKmHyH0.js";import"./folder-open-Doam5g-y.js";function ee({onProjectRegistered:m,onClose:p}){const f="https://github.com/runfusion/fusion/discussions",[z,y]=o.useState(!0),[s,n]=o.useState(()=>({step:w()?"manual":"auth",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",isRegistering:!1,error:null})),[j,M]=o.useState(!1),[i,c]=o.useState(""),[u,x]=o.useState(()=>w()),{nodes:g,loading:I}=L(),S=g.find(a=>a.type==="local")?.id,N=o.useCallback(()=>{y(!1),p?.()},[p]),P=o.useCallback(a=>{n(t=>{const d={manualPath:a};return a&&(!t.manualName||t.manualName===C(t.manualPath))&&(d.manualName=C(a)),{...t,...d}})},[]),R=o.useCallback(async()=>{const a=s.manualPath.trim(),t=s.manualName.trim(),d=s.manualCloneUrl.trim();if(!(!a||!t)&&!(s.manualMode==="clone"&&!d)){n(r=>({...r,isRegistering:!0,error:null}));try{const r={name:t,path:a,isolationMode:s.manualIsolationMode,nodeId:s.manualNodeId||void 0,cloneUrl:s.manualMode==="clone"?d:void 0},h=await O(r);m(h),n(B=>({...B,step:"complete",isRegistering:!1}))}catch(r){n(h=>({...h,isRegistering:!1,error:r instanceof Error?r.message:"Failed to register project"}))}}},[s.manualPath,s.manualName,s.manualCloneUrl,s.manualMode,s.manualIsolationMode,s.manualNodeId,m]),b=o.useCallback(()=>{const a=i.trim();a&&(_(a),x(a),c(""),n(t=>t.step==="auth"?{...t,step:"manual"}:t))},[i]),A=o.useCallback(()=>{$(),x(void 0),c("")},[]),F=o.useCallback(()=>{n(a=>({...a,step:"manual"}))},[]);if(!z)return null;const v=s.manualMode==="existing",l=s.manualMode==="clone",T=s.manualPath.trim().length>0,U=s.manualName.trim().length>0,D=s.manualCloneUrl.trim().length>0,E=s.isRegistering||!T||!U||l&&!D;return e.jsx("div",{className:"modal-overlay open setup-wizard-overlay",role:"dialog","aria-modal":"true","aria-labelledby":"wizard-title",children:e.jsxs("div",{className:"modal setup-wizard-modal",children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":"Fusion",children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:"Fusion"})]}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[s.step==="auth"&&"Set Auth Token",s.step==="manual"&&"Welcome to Fusion",s.step==="complete"&&"Setup Complete!"]})]}),s.step!=="complete"&&e.jsx("button",{className:"modal-close",onClick:N,"aria-label":"Close wizard",children:e.jsx(W,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[s.step==="auth"&&e.jsxs("div",{className:"setup-wizard-auth-step",children:[e.jsx("p",{className:"setup-wizard-auth-step-description",children:"This dashboard requires an auth token to communicate with the Fusion daemon. Paste the token below to continue."}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"setup-auth-token",children:"Auth Token"}),e.jsx("input",{id:"setup-auth-token",type:"password",value:i,onChange:a=>c(a.target.value),placeholder:"Paste the daemon auth token",autoComplete:"off",spellCheck:!1,autoFocus:!0}),e.jsxs("p",{className:"form-hint",children:["The token was set via the ",e.jsx("code",{children:"FUSION_DAEMON_TOKEN"})," environment variable when starting the dashboard."]})]}),s.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:s.error})]}),s.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:"Project Name"}),e.jsx("input",{id:"project-name",type:"text",value:s.manualName,onChange:a=>n(t=>({...t,manualName:a.target.value})),placeholder:"my-project"}),e.jsx("p",{className:"form-hint",children:l?"By default this follows the destination folder name unless you edit it.":"By default this follows the selected directory name unless you edit it."})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:l?"Destination Directory":"Project Directory"}),e.jsx(q,{value:s.manualPath,onChange:P,nodeId:s.manualNodeId||void 0,localNodeId:S,placeholder:l?"/path/for/new-clone":"/path/to/your/project"}),e.jsx("p",{className:"form-hint",children:l?"Select or type an absolute destination path. Fusion will clone into this directory.":"Select or type the absolute path to your project"})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":j,onClick:()=>M(a=>!a),children:[e.jsx(Y,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:"Advanced settings"})]}),j&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":"Project setup mode",children:[e.jsx("legend",{children:"Setup Mode"}),e.jsxs("label",{className:`setup-wizard-mode-option${v?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing",checked:v,onChange:()=>n(a=>({...a,manualMode:"existing",error:null}))}),e.jsx("span",{children:"Use Existing Directory"})]}),e.jsxs("label",{className:`setup-wizard-mode-option${l?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone",checked:l,onChange:()=>n(a=>({...a,manualMode:"clone",error:null}))}),e.jsx("span",{children:"Clone Git Repository"})]})]}),l&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:"Repository URL"}),e.jsx("input",{id:"project-clone-url",type:"text",value:s.manualCloneUrl,onChange:a=>n(t=>({...t,manualCloneUrl:a.target.value})),placeholder:"https://github.com/owner/repo.git"}),e.jsx("p",{className:"form-hint",children:"Fusion will run git clone into the destination directory, then register that cloned folder."})]}),e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:"Runtime Node"}),e.jsxs("select",{value:s.manualNodeId,onChange:a=>n(t=>({...t,manualNodeId:a.target.value})),disabled:I||s.isRegistering,children:[e.jsx("option",{value:"",children:"Local node"}),g.map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]})}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"Isolation Mode"}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${s.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:s.manualIsolationMode==="in-process",onChange:()=>n(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:"In-Process"}),e.jsx("span",{children:"Lower overhead, shared memory. Best for most projects."}),e.jsx("span",{className:"wizard-option-recommended",children:"Recommended"})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${s.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:s.manualIsolationMode==="child-process",onChange:()=>n(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:"Child-Process"}),e.jsx("span",{children:"Isolated execution with crash containment."})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"advanced-auth-token",children:"Browser Auth Token"}),e.jsxs("div",{className:"setup-wizard-auth-token",children:[e.jsx("input",{id:"advanced-auth-token",type:"password",value:i,onChange:a=>c(a.target.value),placeholder:u?"Enter a new token to replace the stored one":"Paste the auth token for this browser",autoComplete:"off",spellCheck:!1}),e.jsxs("div",{className:"setup-wizard-auth-token-actions",children:[e.jsx("button",{type:"button",className:"btn",onClick:b,disabled:i.trim().length===0,children:u?"Update token":"Set token"}),u&&e.jsx("button",{type:"button",className:"btn",onClick:A,children:"Reset token"})]})]}),e.jsx("p",{className:"form-hint",children:u?"A token is already stored in this browser. You can update or reset it below.":"No token is stored. Use the auth prompt at the top of the wizard, or set one here."})]})]})]}),s.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:s.error})]}),s.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(k,{size:64,className:"success-icon"}),e.jsx("h3",{children:"All Set!"}),e.jsx("p",{children:"Your project has been registered successfully."}),e.jsx("p",{children:"You can add more projects anytime from the project overview."})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:f,target:"_blank",rel:"noreferrer",children:"Need help?"}),s.step==="auth"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:F,children:"Skip"}),e.jsx("button",{className:"btn btn-primary",onClick:b,disabled:i.trim().length===0,children:e.jsx("span",{children:"Set Token & Continue"})})]}),s.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:R,disabled:E,children:s.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("span",{children:"Registering..."})]}):e.jsx("span",{children:"Register Project"})}),s.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:N,children:[e.jsx(k,{size:16}),e.jsx("span",{children:"Get Started"})]})]})]})})}export{ee as SetupWizardModal};
@@ -1 +0,0 @@
1
- .skills-view{display:flex;flex-direction:column;height:100%;overflow:hidden}.skills-view-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;gap:var(--space-sm)}.skills-view-title{display:flex;align-items:center;gap:var(--space-sm)}.skills-view-title h2{font-weight:600;margin:0}.skills-view-count{color:var(--text-muted)}.skills-view-actions{display:flex;align-items:center;gap:var(--space-sm)}.skills-view-content{flex:1;overflow-y:auto;padding:var(--space-lg)}.skills-view-section{margin-bottom:var(--space-xl)}.skills-view-section-title{font-weight:600;color:var(--text);margin-bottom:var(--space-md);padding-bottom:var(--space-sm);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--space-sm)}.skills-view-list{display:flex;flex-direction:column;gap:var(--space-sm)}.skills-view-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.skills-view-item:hover{background:var(--card-hover);border-color:var(--text-muted)}.skills-view-item-info{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0;flex:1}.skills-view-item-name{font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skills-view-item-path{color:var(--text-muted);font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skills-view-item-source{color:var(--text-dim);text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8)}.skills-view-item-toggle{display:flex;align-items:center;cursor:pointer;user-select:none;flex-shrink:0}.skills-view-item-toggle input{position:absolute;width:calc(var(--space-xs) / 4);height:calc(var(--space-xs) / 4);padding:0;margin:calc(var(--space-xs) / -4);overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skills-view-toggle-slider{position:relative;width:calc(var(--space-xl) + var(--space-lg));height:calc(var(--space-xl) - (var(--space-xs) / 2));background:var(--border);border-radius:var(--radius-md);transition:background var(--transition-normal);flex-shrink:0}.skills-view-toggle-slider:after{content:"";position:absolute;top:calc(var(--space-xs) / 2);left:calc(var(--space-xs) / 2);width:calc(var(--space-lg) + (var(--space-xs) / 2));height:calc(var(--space-lg) + (var(--space-xs) / 2));background:var(--card);border-radius:50%;transition:transform var(--transition-normal)}.skills-view-item-toggle input:checked+.skills-view-toggle-slider{background:var(--color-success)}.skills-view-item-toggle input:checked+.skills-view-toggle-slider:after{transform:translate(calc(var(--space-lg) + (var(--space-xs) / 2)))}.skills-view-search{margin-bottom:var(--space-lg)}.skills-view-search .form-input{width:100%;max-width:calc(var(--space-2xl) * 12 + var(--space-md))}.skills-view-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-2xl) * 8 + var(--space-lg)),1fr));gap:var(--space-md)}.skills-view-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);min-height:calc(var(--space-2xl) * 3 + var(--space-xl));display:flex;flex-direction:column;gap:var(--space-sm);transition:background var(--transition-fast),border-color var(--transition-fast)}.skills-view-card:hover{background:var(--card-hover);border-color:var(--text-muted)}.skills-view-card-title{font-weight:600;color:var(--text);margin:0}.skills-view-card-description{color:var(--text-muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0}.skills-view-card-tags{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.skills-view-card-installs{color:var(--text-dim);margin-top:auto}.skills-view-empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-md);padding:var(--space-2xl);border:1px dashed var(--border);border-radius:var(--radius-md);text-align:center;color:var(--text-muted)}.skills-view-error{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-lg);color:var(--color-error);background:color-mix(in srgb,var(--color-error) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 25%,transparent);border-radius:var(--radius-md);text-align:center}.skills-view-loading{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted)}.skills-view-close{flex-shrink:0}.skills-view-item--selected{border-color:var(--todo);background:var(--card-hover)}.skills-view-detail{background:var(--surface);border:1px solid var(--border);border-left:calc(var(--space-md) / 4) solid var(--todo);border-radius:var(--radius-md);margin:var(--space-sm) 0 var(--space-md) 0;padding:var(--space-lg)}.skills-view-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--border)}.skills-view-detail-title{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skills-view-detail-close{flex-shrink:0}.skills-view-detail-content{font-family:var(--font-mono);line-height:1.5;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:var(--text);background:var(--bg);padding:var(--space-md);border-radius:var(--radius-sm);max-height:calc(var(--space-2xl) * 12 + var(--space-md));overflow-y:auto}.skills-view-detail-files{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);margin-top:var(--space-md);padding-top:var(--space-sm);border-top:1px solid var(--border)}.skills-view-detail-files-label{color:var(--text-muted)}.skills-view-detail-loading{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);color:var(--text-muted)}.skills-view-detail-error{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-md);color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent);border-radius:var(--radius-sm);text-align:center}.skills-view-detail-empty{padding:var(--space-md);color:var(--text-muted);font-style:italic}@media(max-width:768px){.skills-view-header{padding:var(--space-sm) var(--space-md)}.skills-view-content{padding:var(--space-md)}.skills-view-section{margin-bottom:var(--space-md)}.skills-view-card{padding:var(--space-sm)}.skills-view-empty,.skills-view-error{padding:var(--space-lg)}.skills-view-loading{padding:var(--space-md)}.skills-view-search .form-input{width:100%;max-width:none}.skills-view-grid{grid-template-columns:1fr}.skills-view-item{padding:var(--space-md);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));flex-wrap:wrap}.skills-view-item-info{width:100%}.skills-view-item-toggle{padding:var(--space-sm)}.skills-view-item--selected{border-color:var(--todo)}.skills-view-toggle-slider{min-width:calc(var(--space-xl) + var(--space-lg));min-height:calc(var(--space-xl) - (var(--space-xs) / 2))}.skills-view-detail{padding:var(--space-md)}.skills-view-detail-content{max-height:calc(60dvh - (var(--space-2xl) * 6 + var(--space-xs)));-webkit-overflow-scrolling:touch}.skills-view-detail-close{min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}}
@@ -1 +0,0 @@
1
- import{r as i,j as e}from"./vendor-react-K0fH_qHe.js";import{bO as X,bP as _,bQ as q,bR as B,bM as G,X as P,R as H,a as J,b as Y,L as Z,ay as I}from"./index-BS-jSWPW.js";import"./vendor-xterm-DzcZoU0P.js";import"./vendor-codemirror-jBKmHyH0.js";function ae({projectId:c,addToast:o,onClose:Q}){const[d,v]=i.useState([]),[f,y]=i.useState(!0),[A,E]=i.useState(!1),[L,p]=i.useState(null),[D,K]=i.useState([]),[m,M]=i.useState(""),[h,g]=i.useState(null),[k,x]=i.useState(null),[V,R]=i.useState(!1),[z,b]=i.useState(null),r=i.useRef(null),[N,W]=i.useState(""),F=m.trim()?d.filter(s=>s.name.toLowerCase().includes(m.toLowerCase())||s.relativePath.toLowerCase().includes(m.toLowerCase())):d,C=i.useCallback(async()=>{y(!0);try{const s=await X(c);v(s)}catch(s){const a=s instanceof Error?s.message:"Failed to load discovered skills";o(a,"error")}finally{y(!1)}},[c,o]),u=i.useCallback(async s=>{const a=l=>{if(!l||typeof l!="object")return!1;const t=l;if(typeof t.status=="number"&&t.status>=500)return!0;if(t.details&&typeof t.details=="object"){const w=t.details;if(typeof w.code=="string"&&w.code.startsWith("upstream_"))return!0}const n=l;return typeof n.error=="string"&&typeof n.code=="string"};E(!0),p(null);try{const l=await _(s,20,c);K(l.entries)}catch(l){if(a(l))p("Catalog is temporarily unavailable. Please try again later.");else{const t=l instanceof Error?l.message:"Failed to load catalog";p(t)}}finally{E(!1)}},[c]);i.useEffect(()=>{C(),u("")},[C,u]);const O=i.useCallback(s=>{M(s),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{W(s),r.current=null},300)},[]);i.useEffect(()=>()=>{r.current&&(clearTimeout(r.current),r.current=null)},[]),i.useEffect(()=>{u(N)},[N,u]);const T=i.useCallback(async(s,a)=>{const l=!a;v(t=>t.map(n=>n.id===s?{...n,toggling:!0}:n));try{await q(s,l,c),v(t=>t.map(n=>n.id===s?{...n,enabled:l,toggling:!1}:n)),o(`Skill ${l?"enabled":"disabled"}`,"success")}catch(t){v(w=>w.map(S=>S.id===s?{...S,toggling:!1}:S));const n=t instanceof Error?t.message:"Failed to toggle skill";o(`Failed to toggle skill: ${n}`,"error")}},[c,o]),j=i.useCallback(async s=>{R(!0),b(null),x(null);try{const a=await B(s,c);x(a)}catch(a){const l=a instanceof Error?a.message:"Failed to load skill content";b(l)}finally{R(!1)}},[c]),$=i.useCallback((s,a)=>{if(!(a&&a.target.closest(".skills-view-item-toggle"))){if(h===s){g(null),x(null),b(null);return}g(s),j(s)}},[h,j]),U=i.useCallback(s=>{h!==s&&g(s),j(s)},[j,h]);return e.jsxs("div",{className:"skills-view","data-testid":"skills-view",children:[e.jsxs("div",{className:"skills-view-header",children:[e.jsxs("div",{className:"skills-view-title",children:[e.jsxs("h2",{children:[e.jsx(G,{size:20}),"Skills"]}),e.jsxs("span",{className:"skills-view-count","aria-label":`${d.length} discovered skills`,children:[d.length," discovered"]})]}),e.jsxs("div",{className:"skills-view-actions",children:[e.jsx("button",{className:"btn-icon skills-view-close touch-target",onClick:Q,"aria-label":"Close skills view",children:e.jsx(P,{size:16})}),e.jsxs("button",{className:"btn btn-sm touch-target",onClick:()=>void C(),disabled:f,children:[e.jsx(H,{size:14,className:f?"spin":""}),"Refresh"]})]})]}),e.jsxs("div",{className:"skills-view-content",children:[e.jsx("div",{className:"skills-view-search",children:e.jsx("input",{type:"text",className:"form-input",placeholder:"Search skills...",value:m,onChange:s=>O(s.target.value),"aria-label":"Search skills"})}),e.jsxs("section",{className:"skills-view-section","aria-labelledby":"discovered-skills-title",children:[e.jsx("h3",{id:"discovered-skills-title",className:"skills-view-section-title",children:"Discovered Skills"}),f?e.jsxs("div",{className:"skills-view-loading",children:[e.jsx("span",{className:"spinner"}),"Loading discovered skills..."]}):d.length===0?e.jsx("div",{className:"skills-view-empty",children:e.jsx("p",{children:"No skills discovered in this project."})}):F.length===0?e.jsx("div",{className:"skills-view-empty",children:e.jsx("p",{children:"No discovered skills match your search."})}):e.jsx("div",{className:"skills-view-list",children:F.map(s=>{const a=h===s.id;return e.jsxs("div",{children:[e.jsxs("div",{className:`skills-view-item${a?" skills-view-item--selected":""}`,onClick:l=>$(s.id,l),role:"button",tabIndex:0,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),$(s.id))},"aria-expanded":a,"aria-label":`View details for ${s.name}`,children:[e.jsxs("div",{className:"skills-view-item-info",children:[e.jsxs("span",{className:"skills-view-item-name",children:[a?e.jsx(J,{size:14}):e.jsx(Y,{size:14}),s.name]}),e.jsx("span",{className:"skills-view-item-path",children:s.relativePath}),e.jsx("span",{className:"skills-view-item-source",children:s.metadata.source})]}),e.jsxs("label",{className:"skills-view-item-toggle",onClick:l=>l.stopPropagation(),children:[e.jsx("input",{type:"checkbox",checked:s.enabled,disabled:s.toggling,onChange:()=>void T(s.id,s.enabled),"aria-label":`${s.enabled?"Disable":"Enable"} ${s.name}`}),e.jsx("span",{className:"skills-view-toggle-slider"})]})]}),a&&e.jsxs("div",{className:"skills-view-detail","data-testid":"skill-detail",children:[e.jsxs("div",{className:"skills-view-detail-header",children:[e.jsx("span",{className:"skills-view-detail-title",children:s.name}),e.jsxs("button",{className:"btn btn-sm skills-view-detail-close",onClick:()=>{g(null),x(null),b(null)},"aria-label":"Close skill detail",children:[e.jsx(P,{size:14}),"Close"]})]}),V?e.jsxs("div",{className:"skills-view-detail-loading",children:[e.jsx(Z,{size:16,className:"spin"}),"Loading skill content..."]}):z?e.jsxs("div",{className:"skills-view-detail-error",children:[e.jsx(I,{size:14}),e.jsx("span",{children:z}),e.jsx("button",{className:"btn btn-sm",onClick:()=>U(s.id),children:"Retry"})]}):k?e.jsxs(e.Fragment,{children:[e.jsx("pre",{className:"skills-view-detail-content",children:k.skillMd||"(No SKILL.md found)"}),k.files.length>0&&e.jsxs("div",{className:"skills-view-detail-files",children:[e.jsx("span",{className:"skills-view-detail-files-label",children:"Files:"}),k.files.map(l=>e.jsxs("span",{className:"badge badge--sm",children:[l.name,l.type==="directory"&&"/"]},l.relativePath))]})]}):null]})]},s.id)})})]}),e.jsxs("section",{className:"skills-view-section","aria-labelledby":"catalog-title",children:[e.jsx("h3",{id:"catalog-title",className:"skills-view-section-title",children:"Skills Catalog"}),L?e.jsxs("div",{className:"skills-view-error",children:[e.jsx("p",{children:L}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void u(N),children:"Try Again"})]}):A?e.jsxs("div",{className:"skills-view-loading",children:[e.jsx("span",{className:"spinner"}),"Loading catalog..."]}):D.length===0?e.jsx("div",{className:"skills-view-empty",children:m?e.jsx("p",{children:"No skills match your search."}):e.jsx("p",{children:"No skills available in the catalog."})}):e.jsx("div",{className:"skills-view-grid",children:D.map(s=>e.jsxs("div",{className:"skills-view-card",children:[e.jsx("h4",{className:"skills-view-card-title",children:s.name}),s.description&&e.jsx("p",{className:"skills-view-card-description",children:s.description}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"skills-view-card-tags",children:s.tags.map(a=>e.jsx("span",{className:"badge badge--sm",children:a},a))}),s.installs!==void 0&&e.jsxs("span",{className:"skills-view-card-installs",children:[s.installs.toLocaleString()," installs"]})]},s.id))})]})]})]})}export{ae as SkillsView};
@@ -1 +0,0 @@
1
- import{r as t,j as s}from"./vendor-react-K0fH_qHe.js";import{v as N,cy as i}from"./index-BS-jSWPW.js";import"./vendor-xterm-DzcZoU0P.js";import"./vendor-codemirror-jBKmHyH0.js";function S(){const{confirm:h}=N(),[c,u]=t.useState([]),[d,f]=t.useState(null),[p,x]=t.useState({}),[n,l]=t.useState(null),o=t.useCallback(async()=>{try{f(null);const a=await i("/stash-recovery/orphans");u(a.records??[])}catch(a){f(a instanceof Error?a.message:"Failed to load orphans")}},[]);t.useEffect(()=>{o()},[o]);const j=t.useMemo(()=>{const a=new Map;for(const e of c){const r=e.sourceTaskId??"Unknown source",m=a.get(r)??[];m.push(e),a.set(r,m)}return Array.from(a.entries())},[c]),v=t.useCallback(async a=>{const e=await i(`/stash-recovery/orphans/${a}/apply`,{method:"POST"});x(r=>({...r,[a]:e.ok?"Applied":e.stderr??e.reason??"Apply failed"}))},[]),b=t.useCallback(async a=>{await h({title:"Drop orphaned stash?",message:"This removes the stash entry permanently.",confirmLabel:"Drop",danger:!0})&&(await i(`/stash-recovery/orphans/${a}/drop`,{method:"POST",body:JSON.stringify({confirm:!0})}),await o())},[h,o]),y=t.useCallback(async a=>{l({sha:a,diff:"",truncated:!1,loading:!0,error:null});try{const e=await i(`/stash-recovery/orphans/${a}/diff`);l({sha:a,diff:e.diff??"",truncated:!!e.truncated,loading:!1,error:null})}catch(e){l({sha:a,diff:"",truncated:!1,loading:!1,error:e instanceof Error?e.message:"Failed to load diff"})}},[]);return c.length===0&&!d?s.jsxs("div",{className:"card stash-recovery-view",children:[s.jsx("p",{children:"No orphaned merger autostashes found."}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void o(),children:"Refresh"})]}):s.jsxs("div",{className:"card stash-recovery-view",children:[s.jsxs("div",{className:"stash-recovery-header",children:[s.jsx("h2",{children:"Stash Recovery"}),s.jsxs("span",{children:[c.length," orphans"]}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void o(),children:"Refresh"})]}),d&&s.jsx("div",{className:"form-error",children:d}),j.map(([a,e])=>s.jsxs("section",{children:[s.jsx("h3",{children:a}),e.map(r=>s.jsxs("div",{className:"stash-row",children:[s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:"SHA"}),s.jsx("span",{children:r.sha.slice(0,7)})]}),s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:"Classification"}),s.jsx("span",{children:r.classification})]}),s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:"Changed paths"}),s.jsxs("span",{children:[r.changedPaths.length," files"]})]}),s.jsxs("div",{className:"stash-row-actions",children:[s.jsx("button",{className:"btn btn-sm stash-action-btn",onClick:()=>void y(r.sha),children:"Inspect diff"}),s.jsx("button",{className:"btn btn-sm stash-action-btn",onClick:()=>void v(r.sha),children:"Apply"})]}),s.jsx("div",{className:"stash-row-actions-danger",children:s.jsx("button",{className:"btn btn-sm btn-danger stash-action-btn",onClick:()=>void b(r.sha),children:"Drop"})}),p[r.sha]&&s.jsx("div",{className:"stash-status",children:p[r.sha]})]},r.sha))]},a)),n&&s.jsx("div",{className:"modal-overlay open",onClick:()=>l(null),children:s.jsxs("div",{className:"modal stash-recovery-diff-modal",role:"dialog","aria-modal":"true","aria-label":`Diff for ${n.sha}`,onClick:a=>a.stopPropagation(),children:[s.jsxs("div",{className:"modal-header",children:[s.jsxs("h3",{children:["Diff for ",n.sha.slice(0,7)]}),s.jsx("button",{className:"modal-close",onClick:()=>l(null),"aria-label":"Close diff dialog",children:"×"})]}),n.loading&&s.jsx("p",{children:"Loading diff…"}),n.error&&s.jsx("div",{className:"form-error",children:n.error}),!n.loading&&!n.error&&s.jsxs(s.Fragment,{children:[s.jsx("pre",{className:"stash-recovery-diff-pre",children:n.diff||"No diff output available."}),n.truncated&&s.jsx("p",{className:"stash-status",children:"Diff output truncated."})]}),s.jsx("div",{className:"modal-actions",children:s.jsx("button",{className:"btn",onClick:()=>l(null),children:"Close"})})]})})]})}export{S as StashRecoveryView};
@@ -1,6 +0,0 @@
1
- import{r,j as e}from"./vendor-react-K0fH_qHe.js";import{c as At,a7 as ut,a8 as mt,a9 as St,co as $t,cp as Et,cq as Dt,cr as Ft,cs as Tt,ct as Mt,cu as _t,cv as Ot,ac as Rt,v as Pt,j as Kt,z as V,cw as bt,L as Ut,J as Bt,bC as Y,X as Q,cx as pt,b4 as ht,_ as ft,aj as Xt,a as Wt,aA as qt,B as xt}from"./index-BS-jSWPW.js";import"./vendor-xterm-DzcZoU0P.js";import"./vendor-codemirror-jBKmHyH0.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 zt=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]],Gt=At("circle-plus",zt);function Ht(I){const{items:c,...f}=I;return f}function gt(I){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`${I}-${crypto.randomUUID()}`:`${I}-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Jt(I={}){const{projectId:c,addToast:f}=I,A=`${St.TODO_LISTS_PREFIX}${c??"global"}`,[N,j]=r.useState(()=>{const n=ut(A,{maxAgeMs:mt});return Array.isArray(n)?n:[]}),[L,k]=r.useState([]),[B,w]=r.useState(()=>N.length===0),[q,v]=r.useState(null),[E,D]=r.useState(null),[y,h]=r.useState([]),C=r.useRef(E);C.current=E,r.useEffect(()=>{let n=!1;const o=ut(A,{maxAgeMs:mt}),b=Array.isArray(o)&&o.length>0;b?(j(o),w(!1)):(j([]),w(!0));async function l(){b||w(!0),v(null);try{const d=await Ot(c);if(n)return;h(d);const s=d.map(Ht);j(s),Rt(A,s,{maxBytes:5e5});const i=C.current&&d.some(a=>a.id===C.current)?C.current:d[0]?.id??null;D(i),k(i?d.find(a=>a.id===i)?.items??[]:[])}catch(d){if(n)return;h([]),j([]),k([]),D(null),v(d instanceof Error?d.message:"Failed to load todo lists")}finally{n||w(!1)}}return l(),()=>{n=!0}},[A,c]),r.useEffect(()=>{if(!E){k([]);return}const n=y.find(o=>o.id===E);k(n?.items??[])},[y,E]);const z=r.useCallback(async n=>{const o=N,b=y,l=new Date().toISOString(),d={id:gt("temp-list"),projectId:c??"",title:n,createdAt:l,updatedAt:l};v(null),j(s=>[...s,d]),h(s=>[...s,{...d,items:[]}]);try{const s=await $t(n,c);j(i=>i.map(a=>a.id===d.id?s:a)),h(i=>i.map(a=>a.id===d.id?{...s,items:[]}:a)),C.current||D(s.id)}catch(s){j(o),h(b),v(s instanceof Error?s.message:"Failed to create list"),f?.("Failed to create todo list","error")}},[f,y,N,c]),G=r.useCallback(async(n,o)=>{const b=N,l=y;v(null),j(d=>d.map(s=>s.id===n?{...s,title:o}:s)),h(d=>d.map(s=>s.id===n?{...s,title:o}:s));try{const d=await Et(n,o,c);j(s=>s.map(i=>i.id===n?d:i)),h(s=>s.map(i=>i.id===n?{...d,items:i.items}:i))}catch(d){j(b),h(l),v(d instanceof Error?d.message:"Failed to rename list"),f?.("Failed to rename todo list","error")}},[f,y,N,c]),_=r.useCallback(async n=>{const o=N,b=y,l=C.current,d=l===n?N.find(s=>s.id!==n)?.id??null:l;v(null),j(s=>s.filter(i=>i.id!==n)),h(s=>s.filter(i=>i.id!==n)),l===n&&D(d);try{await Dt(n,c)}catch(s){j(o),h(b),D(l),v(s instanceof Error?s.message:"Failed to delete list"),f?.("Failed to delete todo list","error")}},[f,y,N,c]),S=r.useCallback(async n=>{const o=C.current;if(!o)return;const b=L,l=y,d=new Date().toISOString(),s=L.reduce((a,u)=>Math.max(a,u.sortOrder),-1),i={id:gt("temp-item"),listId:o,text:n,completed:!1,completedAt:null,createdAt:d,updatedAt:d,sortOrder:s+1};v(null),k(a=>[...a,i]),h(a=>a.map(u=>u.id===o?{...u,items:[...u.items,i]}:u));try{const a=await Ft(o,n,c);k(u=>u.map(x=>x.id===i.id?a:x)),h(u=>u.map(x=>x.id===o?{...x,items:x.items.map(T=>T.id===i.id?a:T)}:x))}catch(a){k(b),h(l),v(a instanceof Error?a.message:"Failed to create item"),f?.("Failed to create todo item","error")}},[f,L,y,c]),M=r.useCallback(async(n,o)=>{const b=L.find(a=>a.id===n);if(!b)return;const l=L,d=y,s=o.completed??b.completed,i={...b,...o,completed:s,completedAt:s?b.completedAt??new Date().toISOString():null,updatedAt:new Date().toISOString()};v(null),k(a=>a.map(u=>u.id===n?i:u)),h(a=>a.map(u=>u.id===i.listId?{...u,items:u.items.map(x=>x.id===n?i:x)}:u));try{const a=await Tt(n,o,c);k(u=>u.map(x=>x.id===n?a:x)),h(u=>u.map(x=>x.id===a.listId?{...x,items:x.items.map(T=>T.id===n?a:T)}:x))}catch(a){k(l),h(d),v(a instanceof Error?a.message:"Failed to update item"),f?.("Failed to update todo item","error")}},[f,L,y,c]),$=r.useCallback(async n=>{const o=L.find(b=>b.id===n);o&&await M(n,{completed:!o.completed})},[L,M]),O=r.useCallback(async n=>{const o=L,b=y;v(null),k(l=>l.filter(d=>d.id!==n)),h(l=>l.map(d=>({...d,items:d.items.filter(s=>s.id!==n)})));try{await Mt(n,c)}catch(l){k(o),h(b),v(l instanceof Error?l.message:"Failed to delete item"),f?.("Failed to delete todo item","error")}},[f,L,y,c]),F=r.useCallback(async n=>{const o=C.current;if(!o)return;const b=L,l=y,d=new Map(L.map(i=>[i.id,i])),s=n.map((i,a)=>{const u=d.get(i);return u?{...u,sortOrder:a}:null}).filter(i=>i!==null);v(null),k(s),h(i=>i.map(a=>a.id===o?{...a,items:s}:a));try{await _t(o,n,c)}catch(i){k(b),h(l),v(i instanceof Error?i.message:"Failed to reorder items"),f?.("Failed to reorder todo items","error")}},[f,L,y,c]);return{lists:N,items:L,loading:B,error:q,selectedListId:E,setSelectedListId:D,createList:z,renameList:G,deleteList:_,createItem:S,updateItem:M,toggleItem:$,deleteItem:O,reorderItems:F}}function Vt(I){return[...I].sort((c,f)=>c.sortOrder-f.sortOrder)}function ee({projectId:I,addToast:c,onPlanningMode:f,onTaskCreated:A,mobileKeyboardActive:N=!1}){const{lists:j,items:L,loading:k,error:B,selectedListId:w,setSelectedListId:q,createList:v,renameList:E,deleteList:D,createItem:y,updateItem:h,toggleItem:C,deleteItem:z,reorderItems:G}=Jt({projectId:I,addToast:(t,p)=>{if(p==="success"||p==="error"||p==="info"||p===void 0){c(t,p);return}c(t,"info")}}),[_,S]=r.useState(null),[M,$]=r.useState(""),[O,F]=r.useState(null),[n,o]=r.useState(""),[b,l]=r.useState(""),[d,s]=r.useState(!1),[i,a]=r.useState(""),[u,x]=r.useState([]),[T,Z]=r.useState(!1),[H,R]=r.useState(!1),[tt,P]=r.useState(null),J=r.useRef(null),{confirm:vt}=Pt(),et=r.useMemo(()=>j.find(t=>t.id===w)??null,[j,w]),X=r.useMemo(()=>Vt(L.filter(t=>t.listId===w)),[L,w]);function st(){S(null),$(""),l(""),s(!1)}function W(){F(null),o(""),a("")}function yt(t){st(),W(),q(t)}const jt=r.useCallback(async()=>{Z(!0);try{const t=await Kt(void 0,I);x(t),R(!0)}catch(t){c(`Failed to load agents: ${V(t)}`,"error"),R(!1),P(null)}finally{Z(!1)}},[I,c]);r.useEffect(()=>{S(null),$(""),l(""),s(!1),F(null),o(""),a(""),R(!1),P(null)},[w]),r.useEffect(()=>{if(!H)return;const t=p=>{J.current&&!J.current.contains(p.target)&&(R(!1),P(null))};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t)}},[H]);function Lt(t){W(),S(t.id),$(t.title),s(!1)}async function nt(){if(!_)return;const t=M.trim();if(!t){S(null),$("");return}await E(_,t),S(null),$("")}function at(){S(null),$("")}function it(t){st(),F(t.id),o(t.text)}async function ot(){if(!O)return;const t=n.trim();if(!t){F(null),o("");return}await h(O,{text:t}),F(null),o("")}function dt(){F(null),o("")}async function rt(){const t=b.trim();t&&(await v(t),l(""),s(!1))}async function ct(){if(!w)return;const t=i.trim();t&&(await y(t),a(""))}async function It(t){await vt({title:"Delete List",message:"Delete this list and all its items?",danger:!0})&&await D(t)}async function kt(t){await z(t)}async function lt(t,p){const g=X.map(U=>U.id),m=g.findIndex(U=>U===t);if(m<0)return;const K=p==="up"?m-1:m+1;K<0||K>=g.length||([g[m],g[K]]=[g[K],g[m]],await G(g))}const wt=r.useCallback(async t=>{try{const p={description:t.text,column:"triage",source:{sourceType:"dashboard_ui"}},g=await bt(p,I);A?.(g),c(`Created ${g.id} from todo`,"success")}catch(p){c(`Failed to create task: ${V(p)}`,"error")}},[I,c,A]),Nt=r.useCallback(async(t,p)=>{try{const g={description:t.text,column:"triage",assignedAgentId:p,source:{sourceType:"dashboard_ui"}},m=await bt(g,I);A?.(m);const U=u.find(Ct=>Ct.id===p)?.name??p;c(`Created ${m.id} and assigned to ${U}`,"success"),R(!1),P(null)}catch(g){c(`Failed to create and assign task: ${V(g)}`,"error")}},[I,c,u,A]);return k?e.jsx("div",{className:"todo-view",children:e.jsxs("div",{className:"todo-loading",children:[e.jsx(Ut,{className:"todo-loading-icon","aria-hidden":"true"}),e.jsx("p",{children:"Loading todos..."})]})}):e.jsx("div",{className:`todo-view${N?" todo-view--mobile-keyboard-active":""}`,"data-testid":"todo-view-root",children:e.jsxs("div",{className:"todo-view-layout",children:[e.jsxs("aside",{className:"todo-view-sidebar","aria-label":"Todo lists sidebar",children:[e.jsxs("div",{className:"todo-sidebar-header",children:[e.jsx("h3",{className:"todo-sidebar-title",children:"Lists"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-add-list-btn",onClick:()=>{W(),s(!0),S(null)},"aria-label":"Add list","data-testid":"add-list-button",children:e.jsx(Bt,{})})]}),d&&e.jsxs("div",{className:"todo-list-item",children:[e.jsx("input",{className:"input todo-inline-edit-input",placeholder:"New list title",value:b,onChange:t=>l(t.target.value),onKeyDown:t=>{t.key==="Enter"&&rt(),t.key==="Escape"&&(l(""),s(!1))},autoFocus:!0,"data-testid":"new-list-input"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{rt()},"aria-label":"Save list",children:e.jsx(Y,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{l(""),s(!1)},"aria-label":"Cancel list",children:e.jsx(Q,{})})]}),j.length===0&&!d?e.jsxs("div",{className:"todo-empty-state",children:[e.jsx(pt,{"aria-hidden":"true"}),e.jsx("p",{children:"No todo lists yet. Create one to get started."}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{W(),s(!0)},children:"Create List"})]}):e.jsx("div",{className:"todo-list-items",role:"list","aria-label":"Todo lists",children:j.map(t=>{const p=t.id===w,g=t.id===_;return e.jsx("div",{className:`todo-list-item${p?" todo-list-item--active":""}`,role:"listitem",children:g?e.jsxs(e.Fragment,{children:[e.jsx("input",{className:"input todo-inline-edit-input",value:M,onChange:m=>$(m.target.value),onKeyDown:m=>{m.key==="Enter"&&nt(),m.key==="Escape"&&at()},autoFocus:!0,"data-testid":`rename-list-input-${t.id}`}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{nt()},"aria-label":"Save list rename",children:e.jsx(Y,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:at,"aria-label":"Cancel list rename",children:e.jsx(Q,{})})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"todo-list-select-btn",onClick:()=>yt(t.id),"aria-label":`Select list ${t.title}`,"aria-current":p?"true":void 0,"data-testid":`todo-list-${t.id}`,children:e.jsx("span",{className:"todo-list-item-name",children:t.title})}),e.jsxs("div",{className:"todo-list-item-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{Lt(t)},"aria-label":`Rename ${t.title}`,"data-testid":`rename-list-button-${t.id}`,children:e.jsx(ht,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon btn-danger todo-icon-btn",onClick:()=>{It(t.id)},"aria-label":`Delete ${t.title}`,"data-testid":`delete-list-button-${t.id}`,children:e.jsx(ft,{})})]})]})},t.id)})})]}),e.jsxs("section",{className:"todo-view-main","aria-label":"Todo items",children:[B&&e.jsxs("div",{className:"todo-error-banner",role:"alert",children:[e.jsx("span",{className:"todo-error-message",children:B}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>window.location.reload(),children:"Retry"})]}),et?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"todo-items-header",children:e.jsx("h3",{children:et.title})}),e.jsxs("div",{className:"todo-add-item-row",children:[e.jsx("input",{className:"input",placeholder:"Add a todo item",value:i,onChange:t=>a(t.target.value),onKeyDown:t=>{t.key==="Enter"&&ct(),t.key==="Escape"&&a("")},"data-testid":"new-item-input"}),e.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>{ct()},children:"Add"})]}),X.length===0?e.jsx("div",{className:"todo-empty-state",children:e.jsx("p",{children:"No items in this list. Add one above."})}):e.jsx("div",{className:"todo-items-list",children:X.map((t,p)=>{const g=t.id===O;return e.jsxs("div",{className:"todo-item","data-testid":`todo-item-${t.id}`,children:[e.jsxs("div",{className:"todo-item-main-row",children:[e.jsx("input",{type:"checkbox",checked:t.completed,onChange:()=>{C(t.id)},className:"todo-item-checkbox","aria-label":`Toggle ${t.text}`,"data-testid":`toggle-item-${t.id}`}),g?e.jsx("input",{className:"input todo-inline-edit-input",value:n,onChange:m=>o(m.target.value),onKeyDown:m=>{m.key==="Enter"&&ot(),m.key==="Escape"&&dt()},autoFocus:!0,"data-testid":`edit-item-input-${t.id}`}):e.jsx("button",{type:"button",className:`todo-item-text${t.completed?" todo-item-text--completed":""}`,onClick:()=>it(t),children:t.text})]}),e.jsx("div",{className:"todo-item-actions","data-testid":`todo-item-actions-${t.id}`,children:g?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{ot()},"aria-label":"Save item edit",children:e.jsx(Y,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:dt,"aria-label":"Cancel item edit",children:e.jsx(Q,{})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"todo-item-reorder-btns",children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-item-reorder-btn",onClick:()=>{lt(t.id,"up")},disabled:p===0,"aria-label":`Move ${t.text} up`,"data-testid":`move-up-${t.id}`,children:e.jsx(Xt,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-item-reorder-btn",onClick:()=>{lt(t.id,"down")},disabled:p===X.length-1,"aria-label":`Move ${t.text} down`,"data-testid":`move-down-${t.id}`,children:e.jsx(Wt,{})})]}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{f?.(t.text)},"aria-label":`Start planning from ${t.text}`,"data-testid":`planning-from-${t.id}`,children:e.jsx(qt,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{wt(t)},"aria-label":`Create task from ${t.text}`,"data-testid":`create-task-from-${t.id}`,children:e.jsx(Gt,{})}),e.jsxs("div",{className:"todo-agent-picker-trigger",ref:tt===t.id?J:void 0,children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{P(t.id),jt()},"aria-label":`Assign ${t.text} to agent`,"data-testid":`assign-agent-for-${t.id}`,children:e.jsx(xt,{})}),H&&tt===t.id&&e.jsx("div",{className:"todo-agent-picker-dropdown",onMouseDown:m=>{m.preventDefault()},children:T?e.jsx("div",{className:"todo-agent-picker-loading",children:"Loading agents..."}):u.length>0?u.map(m=>e.jsxs("button",{type:"button",className:"todo-agent-picker-item",onClick:()=>{Nt(t,m.id)},children:[e.jsx(xt,{}),e.jsx("span",{children:m.name}),e.jsx("span",{className:"todo-agent-picker-role",children:m.role})]},m.id)):e.jsx("div",{className:"todo-agent-picker-empty",children:"No agents available"})})]}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>it(t),"aria-label":`Edit ${t.text}`,"data-testid":`edit-item-${t.id}`,children:e.jsx(ht,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon btn-danger todo-icon-btn",onClick:()=>{kt(t.id)},"aria-label":`Delete ${t.text}`,"data-testid":`delete-item-${t.id}`,children:e.jsx(ft,{})})]})})]},t.id)})})]}):e.jsxs("div",{className:"todo-empty-state",children:[e.jsx(pt,{"aria-hidden":"true"}),e.jsx("p",{children:"Select a list from the sidebar"})]})]})]})})}export{ee as TodoView};
@@ -1,63 +0,0 @@
1
- import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{c as X}from"./createLucideIcon-BazL2hk5.js";/**
2
- * @license lucide-react v0.542.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 It=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],zt=X("arrow-left",It);/**
7
- * @license lucide-react v0.542.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const At=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],he=X("check",At);/**
12
- * @license lucide-react v0.542.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const Ot=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],Tt=X("chevron-up",Ot);/**
17
- * @license lucide-react v0.542.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const Pt=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],Ht=X("copy",Pt);/**
22
- * @license lucide-react v0.542.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- */const Bt=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],it=X("download",Bt);/**
27
- * @license lucide-react v0.542.0 - ISC
28
- *
29
- * This source code is licensed under the ISC license.
30
- * See the LICENSE file in the root directory of this source tree.
31
- */const Gt=[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]],Xe=X("grip-vertical",Gt);/**
32
- * @license lucide-react v0.542.0 - ISC
33
- *
34
- * This source code is licensed under the ISC license.
35
- * See the LICENSE file in the root directory of this source tree.
36
- */const Lt=[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]],Vt=X("loader",Lt);/**
37
- * @license lucide-react v0.542.0 - ISC
38
- *
39
- * This source code is licensed under the ISC license.
40
- * See the LICENSE file in the root directory of this source tree.
41
- */const Jt=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],$e=X("pencil",Jt);/**
42
- * @license lucide-react v0.542.0 - ISC
43
- *
44
- * This source code is licensed under the ISC license.
45
- * See the LICENSE file in the root directory of this source tree.
46
- */const Ut=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Te=X("plus",Ut);/**
47
- * @license lucide-react v0.542.0 - ISC
48
- *
49
- * This source code is licensed under the ISC license.
50
- * See the LICENSE file in the root directory of this source tree.
51
- */const Kt=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],ht=X("sparkles",Kt);/**
52
- * @license lucide-react v0.542.0 - ISC
53
- *
54
- * This source code is licensed under the ISC license.
55
- * See the LICENSE file in the root directory of this source tree.
56
- */const qt=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],Ve=X("trash-2",qt);/**
57
- * @license lucide-react v0.542.0 - ISC
58
- *
59
- * This source code is licensed under the ISC license.
60
- * See the LICENSE file in the root directory of this source tree.
61
- */const Wt=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],oe=X("x",Wt),Yt="/api/plugins/fusion-plugin-roadmap";async function z(a,r){const d=await fetch(`${Yt}${a}`,{headers:{"Content-Type":"application/json",...r?.headers??{}},...r});if(!d.ok){let g=`${d.status} ${d.statusText}`;try{const _=await d.json();_.error&&(g=_.error)}catch{}throw new Error(g)}if(d.status!==204)return await d.json()}function A(a){return a?`?projectId=${encodeURIComponent(a)}`:""}function Xt(a){return z(`/roadmaps${A(a)}`)}function Qt(a,r){return z(`/roadmaps/${a}${A(r)}`)}function Zt(a,r){return z(`/roadmaps${A(r)}`,{method:"POST",body:JSON.stringify({...a,projectId:r})})}function ea(a,r,d){return z(`/roadmaps/${a}${A(d)}`,{method:"PATCH",body:JSON.stringify({...r,projectId:d})})}function ta(a,r){return z(`/roadmaps/${a}${A(r)}`,{method:"DELETE"})}function st(a,r,d){return z(`/roadmaps/${a}/milestones${A(d)}`,{method:"POST",body:JSON.stringify({...r,projectId:d})})}function aa(a,r,d){return z(`/roadmaps/milestones/${a}${A(d)}`,{method:"PATCH",body:JSON.stringify({...r,projectId:d})})}function ra(a,r){return z(`/roadmaps/milestones/${a}${A(r)}`,{method:"DELETE"})}function sa(a,r,d){return z(`/roadmaps/${a}/milestones/reorder${A(d)}`,{method:"POST",body:JSON.stringify({orderedMilestoneIds:r,projectId:d})})}function nt(a,r,d){return z(`/roadmaps/milestones/${a}/features${A(d)}`,{method:"POST",body:JSON.stringify({...r,projectId:d})})}function na(a,r,d){return z(`/roadmaps/features/${a}${A(d)}`,{method:"PATCH",body:JSON.stringify({...r,projectId:d})})}function ia(a,r){return z(`/roadmaps/features/${a}${A(r)}`,{method:"DELETE"})}function oa(a,r,d){return z(`/roadmaps/milestones/${a}/features/reorder${A(d)}`,{method:"POST",body:JSON.stringify({orderedFeatureIds:r,projectId:d})})}function la(a,r,d,g){return z(`/roadmaps/features/${a}/move${A(g)}`,{method:"POST",body:JSON.stringify({targetMilestoneId:r,targetIndex:d,projectId:g})})}function da(a,r,d=5,g){return z(`/roadmaps/${a}/suggestions/milestones${A(g)}`,{method:"POST",body:JSON.stringify({goalPrompt:r,count:d,projectId:g})})}function ca(a,r,d){return z(`/roadmaps/milestones/${a}/suggestions/features${A(d)}`,{method:"POST",body:JSON.stringify({...r,projectId:d})})}function ua(a,r){return z(`/roadmaps/${a}/handoff${A(r)}`)}function ma(a){const r=a?.projectId,[d,g]=s.useState([]),[_,j]=s.useState(null),[N,f]=s.useState(null),[E,D]=s.useState([]),[y,S]=s.useState({}),[O,Q]=s.useState(!1),[J,I]=s.useState(null),[le,fe]=s.useState(null),[Je,ve]=s.useState(!1),[be,ae]=s.useState(null),[xe,B]=s.useState([]),[P,G]=s.useState(!1),[we,L]=s.useState({}),[de,re]=s.useState({}),Z=s.useRef(we),_e=s.useRef(de),ce=s.useRef(xe);Z.current=we,_e.current=de,ce.current=xe;const je=s.useRef(r),M=s.useRef(0),ue=s.useRef(0),ye=s.useRef(d),x=s.useRef(_),me=s.useRef(E),Ce=s.useRef(y),$=s.useRef(r),Pe=s.useRef(le);ye.current=d,x.current=_,me.current=E,Ce.current=y,$.current=r,Pe.current=le,s.useEffect(()=>{je.current!==r&&(je.current=r,M.current++,j(null),f(null),D([]),S({}),fe(null),ae(null),B([]),G(!1),L({}),re({}))},[r]);const ee=s.useCallback(async()=>{Q(!0),I(null);try{const n=await Xt(r);g(n)}catch(n){I(n instanceof Error?n:new Error("Failed to fetch roadmaps"))}finally{Q(!1)}},[r]),C=s.useCallback(async n=>{try{const c=await Qt(n,r);f(c),D(c.milestones||[]);const o={};for(const i of c.milestones||[])o[i.id]=i.features||[];S(o)}catch(c){I(c instanceof Error?c:new Error("Failed to fetch roadmap"))}},[r]);s.useEffect(()=>{ee()},[ee]),s.useEffect(()=>{_?C(_):(f(null),D([]),S({}))},[_,C]);const He=s.useCallback(async(n,c)=>{try{const o=await Zt(n,$.current);g(i=>[...i,o]),c?.onSuccess?.()}catch(o){const i=o instanceof Error?o:new Error("Failed to create roadmap");throw c?.onError?.(i),i}},[]),Ne=s.useCallback(async(n,c,o)=>{try{const i=await ea(n,c,$.current);g(u=>u.map(l=>l.id===n?i:l)),x.current===n&&f(u=>u?{...u,...i}:null),o?.onSuccess?.()}catch(i){const u=i instanceof Error?i:new Error("Failed to update roadmap");throw o?.onError?.(u),u}},[]),Be=s.useCallback(async(n,c)=>{try{await ta(n,$.current),g(o=>o.filter(i=>i.id!==n)),x.current===n&&(j(null),f(null),D([]),S({})),c?.onSuccess?.()}catch(o){const i=o instanceof Error?o:new Error("Failed to delete roadmap");throw c?.onError?.(i),i}},[]),Ue=s.useCallback(n=>{j(n)},[]),h=s.useCallback(async(n,c)=>{const o=x.current;if(!o){const i=new Error("No roadmap selected");throw c?.onError?.(i),i}try{const i=await st(o,n,$.current);D(u=>[...u,i]),S(u=>({...u,[i.id]:[]})),x.current&&C(x.current),c?.onSuccess?.()}catch(i){const u=i instanceof Error?i:new Error("Failed to create milestone");throw c?.onError?.(u),u}},[C]),R=s.useCallback(async(n,c,o)=>{try{const i=await aa(n,c,$.current);D(u=>u.map(l=>l.id===n?i:l)),x.current&&C(x.current),o?.onSuccess?.()}catch(i){const u=i instanceof Error?i:new Error("Failed to update milestone");throw o?.onError?.(u),u}},[C]),se=s.useCallback(async(n,c)=>{try{await ra(n,$.current),D(o=>o.filter(i=>i.id!==n)),S(o=>{const i={...o};return delete i[n],i}),x.current&&C(x.current),c?.onSuccess?.()}catch(o){const i=o instanceof Error?o:new Error("Failed to delete milestone");throw c?.onError?.(i),i}},[C]),Ke=s.useCallback(async(n,c,o)=>{try{const i=await nt(n,c,$.current);S(u=>({...u,[n]:[...u[n]||[],i]})),x.current&&C(x.current),o?.onSuccess?.()}catch(i){const u=i instanceof Error?i:new Error("Failed to create feature");throw o?.onError?.(u),u}},[C]),Re=s.useCallback(async(n,c,o)=>{try{const i=await na(n,c,$.current);S(u=>{const l={};for(const[v,p]of Object.entries(u))l[v]=p.map(w=>w.id===n?i:w);return l}),x.current&&C(x.current),o?.onSuccess?.()}catch(i){const u=i instanceof Error?i:new Error("Failed to update feature");throw o?.onError?.(u),u}},[C]),Ie=s.useCallback(async(n,c)=>{try{await ia(n,$.current),S(o=>{const i={};for(const[u,l]of Object.entries(o))i[u]=l.filter(v=>v.id!==n);return i}),x.current&&C(x.current),c?.onSuccess?.()}catch(o){const i=o instanceof Error?o:new Error("Failed to delete feature");throw c?.onError?.(i),i}},[C]),k=s.useCallback(async(n,c,o)=>{const i=me.current,u=c.map(l=>i.find(v=>v.id===l)).filter(l=>l!==void 0).map((l,v)=>({...l,orderIndex:v}));D(u);try{await sa(n,c,$.current),x.current&&C(x.current),o?.onSuccess?.()}catch(l){D(i);const v=l instanceof Error?l:new Error("Failed to reorder milestones");throw o?.onError?.(v),v}},[C]),pe=s.useCallback(async(n,c,o)=>{const i=Ce.current[n]||[],u=i.map(p=>p.id);if(JSON.stringify(u)===JSON.stringify(c)){o?.onSuccess?.();return}const l=Ce.current,v=c.map(p=>i.find(w=>w.id===p)).filter(p=>p!==void 0).map((p,w)=>({...p,orderIndex:w}));S(p=>({...p,[n]:v}));try{await oa(n,c,$.current),x.current&&C(x.current),o?.onSuccess?.()}catch(p){S(l);const w=p instanceof Error?p:new Error("Failed to reorder features");throw o?.onError?.(w),w}},[C]),te=s.useCallback(async(n,c,o,i)=>{const u=Ce.current;let l=null;for(const[F,W]of Object.entries(u))if(W.some(We=>We.id===n)){l=F;break}if(!l){const F=new Error("Feature not found");throw i?.onError?.(F),F}if(l===c){const F=u[l]||[],W=Math.max(0,Math.min(o,F.length-1));if(F.findIndex(Ye=>Ye.id===n)===W){i?.onSuccess?.();return}}const v=u[l]||[],p=u[c]||[],w=v.find(F=>F.id===n);if(!w){const F=new Error("Feature not found");throw i?.onError?.(F),F}const H=v.filter(F=>F.id!==n).map((F,W)=>({...F,orderIndex:W})),Ee={...w,milestoneId:c,orderIndex:o},ie=[...p];ie.splice(o,0,Ee);const qe=ie.map((F,W)=>({...F,orderIndex:W}));S(l===c?F=>({...F,[l]:qe}):F=>({...F,[l]:H,[c]:qe}));try{await la(n,c,o,r),x.current&&C(x.current),i?.onSuccess?.()}catch(F){S(u);const W=F instanceof Error?F:new Error("Failed to move feature");throw i?.onError?.(W),W}},[C,r]);function U(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`draft-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}const ne=s.useCallback(async(n,c=5,o)=>{const i=x.current;if(!i){const v=new Error("No roadmap selected");throw o?.onError?.(v),v}const u=M.current,l=$.current;G(!0);try{const v=await da(i,n,c,l);if(M.current!==u)return;const p=v.suggestions.map(w=>({id:U(),title:w.title,description:w.description}));B(p),o?.onSuccess?.()}catch(v){if(M.current!==u)return;const p=v instanceof Error?v:new Error("Failed to generate suggestions");throw o?.onError?.(p),p}finally{M.current===u&&G(!1)}},[]),ze=s.useCallback((n,c)=>{const i=ce.current.map(u=>u.id===n?{...u,...c}:u);ce.current=i,B(u=>u.map(l=>l.id===n?{...l,...c}:l))},[]),K=s.useCallback(async(n,c)=>{const o=x.current;if(!o){const p=new Error("No roadmap selected");throw c?.onError?.(p),p}const i=M.current,u=ce.current,l=u.findIndex(p=>p.id===n);if(l===-1){const p=new Error("Suggestion draft not found");throw c?.onError?.(p),p}const v=u[l];if(!v.title.trim()){const p=new Error("Title cannot be empty");throw c?.onError?.(p),p}B(p=>p.filter(w=>w.id!==n));try{if(await st(o,{title:v.title,description:v.description},$.current),M.current!==i){B(p=>{const w=[...p];return w.splice(l,0,v),w});return}x.current&&C(x.current),c?.onSuccess?.()}catch(p){B(H=>{const Ee=[...H];return Ee.splice(l,0,v),Ee});const w=p instanceof Error?p:new Error("Failed to accept suggestion");throw c?.onError?.(w),w}},[C]),q=s.useCallback(async n=>{const c=x.current;if(!c){const l=new Error("No roadmap selected");throw n?.onError?.(l),l}const o=[...ce.current];if(o.length===0)return;const i=o.findIndex(l=>!l.title.trim());if(i!==-1){const l=new Error(`Title cannot be empty at position ${i+1}`);throw n?.onError?.(l),l}B([]);const u=M.current;for(let l=0;l<o.length&&M.current===u;l++){const v=o[l];try{await st(c,{title:v.title,description:v.description},$.current)}catch(p){const w=p instanceof Error?p:new Error("Failed to accept all suggestions");throw n?.onError?.(w),w}}M.current===u&&(x.current&&C(x.current),n?.onSuccess?.())},[C]),Qe=s.useCallback(n=>_e.current[n]??!1,[]),Ge=s.useCallback(async(n,c,o)=>{const i=M.current,u=$.current;re(l=>({...l,[n]:!0}));try{const l=await ca(n,c,u);if(M.current!==i)return;const v=l.suggestions.map(p=>({id:U(),title:p.title,description:p.description}));L(p=>({...p,[n]:v})),o?.onSuccess?.()}catch(l){if(M.current!==i)return;const v=l instanceof Error?l:new Error("Failed to generate feature suggestions");throw o?.onError?.(v),v}finally{M.current===i&&re(l=>({...l,[n]:!1}))}},[]),Se=s.useCallback((n,c,o)=>{const u=(Z.current[n]||[]).map(l=>l.id===c?{...l,...o}:l);Z.current={...Z.current,[n]:u},L(l=>({...l,[n]:l[n]?.map(v=>v.id===c?{...v,...o}:v)||[]}))},[]),Le=s.useCallback(async(n,c,o)=>{const i=M.current,u=Z.current[n]||[],l=u.findIndex(p=>p.id===c);if(l===-1){const p=new Error("Suggestion draft not found");throw o?.onError?.(p),p}const v=u[l];if(!v.title.trim()){const p=new Error("Title cannot be empty");throw o?.onError?.(p),p}L(p=>({...p,[n]:p[n]?.filter(w=>w.id!==c)||[]}));try{if(await nt(n,{title:v.title,description:v.description},$.current),M.current!==i){L(p=>{const H=[...p[n]||[]];return H.splice(l,0,v),{...p,[n]:H}});return}x.current&&C(x.current),o?.onSuccess?.()}catch(p){L(H=>{const ie=[...H[n]||[]];return ie.splice(l,0,v),{...H,[n]:ie}});const w=p instanceof Error?p:new Error("Failed to accept suggestion");throw o?.onError?.(w),w}},[C]),Ze=s.useCallback(async(n,c)=>{const o=[...Z.current[n]||[]];if(o.length===0)return;const i=o.findIndex(l=>!l.title.trim());if(i!==-1){const l=new Error(`Title cannot be empty at position ${i+1}`);throw c?.onError?.(l),l}L(l=>({...l,[n]:[]}));const u=M.current;for(let l=0;l<o.length&&M.current===u;l++){const v=o[l];try{await nt(n,{title:v.title,description:v.description},$.current)}catch(p){const w=p instanceof Error?p:new Error("Failed to accept all suggestions");throw c?.onError?.(w),w}}M.current===u&&(x.current&&C(x.current),c?.onSuccess?.())},[C]),ke=s.useCallback(()=>{B([]),G(!1)},[]),et=s.useCallback(n=>{L(c=>{const o={...c};return delete o[n],o}),re(c=>{const o={...c};return delete o[n],o})},[]),ge=s.useCallback(async(n,c)=>{const o=++ue.current,i=r;ve(!0),ae(null);try{const u=await ua(n,i);if(ue.current!==o||r!==i)return;fe(u),c?.onSuccess?.()}catch(u){if(ue.current!==o||r!==i)return;const l=u instanceof Error?u:new Error(String(u));ae(l),fe(null),c?.onError?.(l)}finally{ue.current===o&&ve(!1)}},[r]),Ae=s.useCallback(()=>{fe(null),ae(null),ve(!1)},[]),tt=s.useCallback(async()=>{await ee(),x.current&&await C(x.current)},[ee,C]);return{roadmaps:d,selectedRoadmapId:_,selectedRoadmap:N,milestones:E,featuresByMilestoneId:y,loading:O,error:J,createRoadmap:He,updateRoadmap:Ne,deleteRoadmap:Be,selectRoadmap:Ue,createMilestone:h,updateMilestone:R,deleteMilestone:se,reorderMilestones:k,createFeature:Ke,updateFeature:Re,deleteFeature:Ie,reorderFeatures:pe,moveFeature:te,milestoneSuggestions:xe,isGeneratingSuggestions:P,generateMilestoneSuggestions:ne,updateMilestoneSuggestionDraft:ze,acceptMilestoneSuggestion:K,acceptAllMilestoneSuggestions:q,clearMilestoneSuggestions:ke,featureSuggestionsByMilestoneId:we,isGeneratingFeatureSuggestions:Qe,generateFeatureSuggestions:Ge,updateFeatureSuggestionDraft:Se,acceptFeatureSuggestion:Le,acceptAllFeatureSuggestions:Ze,clearFeatureSuggestions:et,handoffPayload:le,isFetchingHandoff:Je,handoffError:be,fetchHandoff:ge,clearHandoff:Ae,refresh:tt}}function pt(){return typeof window>"u"?"desktop":window.matchMedia("(max-width: 768px)").matches?"mobile":window.matchMedia("(min-width: 769px) and (max-width: 1024px)").matches?"tablet":"desktop"}function pa(){const[a,r]=s.useState(()=>pt());return s.useEffect(()=>{const d=()=>r(pt());return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d)},[]),a}function ga(){return{confirm:async a=>{const r=typeof a=="string"?a:[a.title,a.message].filter(Boolean).join(`
62
-
63
- `);return window.confirm(r||"Are you sure?")}}}function ha({isOpen:a,onClose:r,roadmapTitle:d,handoffPayload:g,isLoading:_,error:j,onFetchHandoff:N,onCopyToClipboard:f}){return a?e.jsx("div",{className:"modal-overlay open",onClick:r,role:"presentation",children:e.jsxs("div",{className:"modal modal-lg",onClick:E=>E.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"handoff-modal-title",children:[e.jsxs("div",{className:"modal-header",children:[e.jsxs("h2",{id:"handoff-modal-title",children:["Export Roadmap: ",d]}),e.jsx("button",{className:"modal-close",onClick:r,"aria-label":"Close modal",children:e.jsx(oe,{size:18})})]}),e.jsxs("div",{className:"modal-body",children:[e.jsx("p",{className:"text-muted roadmaps-view__handoff-intro",children:"Export roadmap data for use in mission and task planning flows. This is a read-only export — no missions or tasks will be created."}),j&&e.jsxs("div",{className:"form-error roadmaps-view__handoff-error",children:["Error loading handoff data: ",j.message]}),!g&&!_&&e.jsx("div",{className:"roadmaps-view__handoff-empty-state",children:e.jsxs("button",{className:"btn btn-primary",onClick:N,children:[e.jsx(it,{size:16,className:"roadmaps-view__handoff-button-icon"}),"Load Handoff Data"]})}),_&&e.jsxs("div",{className:"roadmaps-view__handoff-loading-state",children:[e.jsx(Vt,{size:24,className:"spin"}),e.jsx("p",{className:"roadmaps-view__handoff-loading-text",children:"Loading handoff data..."})]}),g&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"roadmaps-view__handoff-section",children:[e.jsx("h3",{className:"roadmaps-view__handoff-section-title",children:"Mission Planning Handoff"}),e.jsx("div",{className:"card roadmaps-view__handoff-card",children:e.jsx("pre",{className:"roadmaps-view__handoff-pre roadmaps-view__handoff-pre--mission",children:JSON.stringify(g.mission,null,2)})})]}),e.jsxs("div",{className:"roadmaps-view__handoff-section",children:[e.jsxs("h3",{className:"roadmaps-view__handoff-section-title",children:["Feature Task Planning Handoffs (",g.features.length,")"]}),e.jsx("div",{className:"card roadmaps-view__handoff-card",children:e.jsx("pre",{className:"roadmaps-view__handoff-pre roadmaps-view__handoff-pre--features",children:JSON.stringify(g.features,null,2)})})]})]})]}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("div",{className:"modal-actions-left",children:g&&e.jsxs("button",{className:"btn btn-sm",onClick:f,children:[e.jsx(Ht,{size:14,className:"roadmaps-view__handoff-copy-icon"}),"Copy to Clipboard"]})}),e.jsx("div",{className:"modal-actions-right",children:e.jsx("button",{className:"btn",onClick:r,children:"Close"})})]})]})}):null}function fa({roadmap:a,isSelected:r,onSelect:d,onEdit:g,onDelete:_,onExport:j}){const N=y=>{y.key==="Enter"&&d()},f=y=>{y.stopPropagation(),g()},E=y=>{y.stopPropagation(),_()},D=y=>{y.stopPropagation(),j()};return e.jsxs("div",{className:`roadmaps-view__sidebar-item${r?" roadmaps-view__sidebar-item--active":""}`,onClick:d,onKeyDown:N,role:"button",tabIndex:0,"aria-selected":r,"data-testid":`roadmap-item-${a.id}`,children:[e.jsxs("div",{className:"roadmaps-view__sidebar-item-content",children:[e.jsx("div",{className:"roadmaps-view__sidebar-item-title",children:a.title}),a.description&&e.jsx("div",{className:"roadmaps-view__sidebar-item-desc",children:a.description})]}),e.jsxs("div",{className:"roadmaps-view__sidebar-item-actions",onClick:f,role:"presentation",children:[e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:D,title:"Export roadmap","aria-label":"Export roadmap","data-testid":`roadmap-export-${a.id}`,type:"button",children:e.jsx(it,{size:14})}),e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:f,title:"Edit roadmap","aria-label":"Edit roadmap","data-testid":`roadmap-edit-${a.id}`,type:"button",children:e.jsx($e,{size:14})}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--danger",onClick:E,title:"Delete roadmap","aria-label":"Delete roadmap","data-testid":`roadmap-delete-${a.id}`,type:"button",children:e.jsx(Ve,{size:14})})]})]})}function va({roadmaps:a,selectedRoadmapId:r,onSelect:d,onCreate:g,onEdit:_,onDelete:j,onExport:N,showCreateForm:f,onCancelCreate:E,onSaveCreate:D}){return e.jsxs("div",{className:"roadmaps-view__mobile-list","data-testid":"roadmaps-view__mobile-list",children:[e.jsxs("div",{className:"roadmaps-view__mobile-list-header",children:[e.jsx("h2",{className:"roadmaps-view__mobile-list-title",children:"Roadmaps"}),!f&&e.jsx("button",{className:"roadmaps-view__mobile-add-btn",onClick:g,title:"Create roadmap","aria-label":"Create roadmap","data-testid":"mobile-create-roadmap-btn",children:e.jsx(Te,{size:18})})]}),f&&e.jsx("div",{className:"roadmaps-view__mobile-create-form",children:e.jsx(ft,{onSave:D,onCancel:E})}),a.length===0&&!f?e.jsxs("div",{className:"roadmaps-view__mobile-empty",children:[e.jsx("p",{children:"No roadmaps yet."}),e.jsxs("button",{className:"btn btn-primary btn-sm",onClick:g,children:[e.jsx(Te,{size:14}),e.jsx("span",{children:"Create Roadmap"})]})]}):e.jsx("div",{className:"roadmaps-view__mobile-list-items",children:a.map(y=>e.jsxs("div",{className:`roadmaps-view__mobile-item${y.id===r?" roadmaps-view__mobile-item--active":""}`,onClick:()=>d(y.id),role:"button",tabIndex:0,onKeyDown:S=>{S.key==="Enter"&&d(y.id)},"data-testid":`mobile-roadmap-item-${y.id}`,children:[e.jsxs("div",{className:"roadmaps-view__mobile-item-content",children:[e.jsx("span",{className:"roadmaps-view__mobile-item-title",children:y.title}),y.description&&e.jsx("span",{className:"roadmaps-view__mobile-item-desc",children:y.description})]}),e.jsxs("div",{className:"roadmaps-view__mobile-item-actions",children:[e.jsx("button",{className:"roadmaps-view__mobile-action-btn",onClick:S=>{S.stopPropagation(),N(y)},title:"Export roadmap","aria-label":"Export roadmap","data-testid":`mobile-roadmap-export-${y.id}`,children:e.jsx(it,{size:16})}),e.jsx("button",{className:"roadmaps-view__mobile-action-btn",onClick:S=>{S.stopPropagation(),_(y)},title:"Edit roadmap","aria-label":"Edit roadmap","data-testid":`mobile-roadmap-edit-${y.id}`,children:e.jsx($e,{size:16})}),e.jsx("button",{className:"roadmaps-view__mobile-action-btn roadmaps-view__mobile-action-btn--danger",onClick:S=>{S.stopPropagation(),j(y.id)},title:"Delete roadmap","aria-label":"Delete roadmap","data-testid":`mobile-roadmap-delete-${y.id}`,children:e.jsx(Ve,{size:16})})]})]},y.id))})]})}function ba({roadmapTitle:a,onBack:r,onEdit:d,onDelete:g,onCreate:_}){return e.jsxs("div",{className:"roadmaps-view__mobile-header","data-testid":"roadmaps-view__mobile-header",children:[e.jsx("button",{className:"roadmaps-view__mobile-back-btn",onClick:r,title:"Back to roadmap list","aria-label":"Back to roadmap list","data-testid":"mobile-back-btn",children:e.jsx(zt,{size:20})}),e.jsx("h2",{className:"roadmaps-view__mobile-header-title",children:a}),e.jsxs("div",{className:"roadmaps-view__mobile-header-actions",children:[e.jsx("button",{className:"roadmaps-view__mobile-action-btn",onClick:_,title:"Create roadmap","aria-label":"Create roadmap","data-testid":"mobile-header-create-btn",children:e.jsx(Te,{size:18})}),e.jsx("button",{className:"roadmaps-view__mobile-action-btn",onClick:d,title:"Edit roadmap","aria-label":"Edit roadmap","data-testid":"mobile-header-edit-btn",children:e.jsx($e,{size:18})}),e.jsx("button",{className:"roadmaps-view__mobile-action-btn roadmaps-view__mobile-action-btn--danger",onClick:g,title:"Delete roadmap","aria-label":"Delete roadmap","data-testid":"mobile-header-delete-btn",children:e.jsx(Ve,{size:18})})]})]})}function xa({milestone:a,features:r,onEditMilestone:d,onDeleteMilestone:g,onAddFeature:_,onEditFeature:j,onDeleteFeature:N,milestoneEdit:f,onMilestoneEditChange:E,onMilestoneEditFieldChange:D,onCancelMilestoneEdit:y,onSaveMilestoneEdit:S,featureEdit:O,onFeatureEditChange:Q,onStartFeatureEdit:J,onCancelFeatureEdit:I,onSaveFeatureEdit:le,projectId:fe,addToast:Je,isMilestoneDragging:ve,isMilestoneDropTarget:be,milestoneDropPosition:ae,onMilestoneDragStart:xe,onMilestoneDragEnd:B,onMilestoneDragOver:P,onMilestoneDrop:G,onMilestoneDragLeave:we,isFeatureDragging:L,isFeatureDropTarget:de,featureDropIndex:re,onFeatureDragStart:Z,onFeatureDragEnd:_e,onFeatureDragOver:ce,onFeatureDrop:je,onFeatureDragLeave:M,onFeatureDropOnMilestone:ue,featureSuggestions:ye,isGeneratingFeatureSuggestions:x,onGenerateFeatureSuggestions:me,onAcceptFeatureSuggestion:Ce,onAcceptAllFeatureSuggestions:$,onUpdateFeatureSuggestionDraft:Pe,onClearFeatureSuggestions:ee}){const C=f?.milestoneId===a.id,He=h=>{h.key==="Enter"?(h.preventDefault(),f&&S({title:f.value})):h.key==="Escape"&&y()},Ne=h=>{h.key==="Escape"&&y()},Be=["roadmaps-view__milestone",ve?"roadmaps-view__milestone--dragging":"",be?"roadmaps-view__milestone--drop-target":"",be&&ae==="before"?"roadmaps-view__milestone--drop-before":"",be&&ae==="after"?"roadmaps-view__milestone--drop-after":""].filter(Boolean).join(" "),Ue=["roadmaps-view__feature-list",de?"roadmaps-view__feature-list--drop-target":""].filter(Boolean).join(" ");return e.jsxs("div",{className:Be,draggable:!C,onDragStart:h=>{C||(xe(a.id),h.dataTransfer.setData("text/plain",`milestone:${a.id}`),h.dataTransfer.effectAllowed="move")},onDragEnd:B,onDragOver:h=>{h.dataTransfer.types.includes("text/plain")&&h.dataTransfer.types.includes("text/plain")&&(h.preventDefault(),h.dataTransfer.dropEffect="move",P(a.id))},onDrop:h=>{h.preventDefault(),h.dataTransfer.getData("text/plain")?.startsWith("feature:")||G(a.id)},onDragLeave:we,"data-testid":`milestone-card-${a.id}`,children:[e.jsx("div",{className:"roadmaps-view__milestone-header",children:C&&f?e.jsxs("div",{className:"roadmaps-view__inline-edit",children:[e.jsxs("div",{className:"roadmaps-view__inline-edit-row",children:[e.jsx("span",{className:"roadmaps-view__drag-handle",title:"Drag to reorder","aria-label":"Drag to reorder","data-testid":`milestone-drag-handle-${a.id}`,children:e.jsx(Xe,{size:14})}),e.jsx("input",{type:"text",className:"roadmaps-view__inline-input",value:f.value,onChange:h=>{D("title"),E(h.target.value)},onKeyDown:He,placeholder:"Milestone title",autoFocus:!0,"data-testid":`milestone-title-input-${a.id}`}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--success",onClick:()=>S({title:f.value}),"aria-label":"Save milestone title",title:"Save",children:e.jsx(he,{size:14})}),e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:y,"aria-label":"Cancel editing",title:"Cancel",children:e.jsx(oe,{size:14})})]}),e.jsx("textarea",{className:"roadmaps-view__inline-textarea",value:f.field==="description"?f.value:a.description||"",onChange:h=>{D("description"),E(h.target.value)},onKeyDown:Ne,placeholder:"Milestone description (optional)",rows:2,"data-testid":`milestone-desc-input-${a.id}`})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"roadmaps-view__milestone-title-row",children:[e.jsx("span",{className:"roadmaps-view__drag-handle",title:"Drag to reorder","aria-label":"Drag to reorder","data-testid":`milestone-drag-handle-${a.id}`,children:e.jsx(Xe,{size:14})}),e.jsx("h3",{className:"roadmaps-view__milestone-title",children:a.title}),e.jsxs("div",{className:"roadmaps-view__milestone-actions",children:[e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:d,title:"Edit milestone","aria-label":"Edit milestone","data-testid":`milestone-edit-${a.id}`,children:e.jsx($e,{size:14})}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--danger",onClick:g,title:"Delete milestone","aria-label":"Delete milestone","data-testid":`milestone-delete-${a.id}`,children:e.jsx(Ve,{size:14})})]})]}),a.description&&e.jsx("p",{className:"roadmaps-view__milestone-desc",children:a.description})]})}),e.jsxs("div",{className:"roadmaps-view__milestone-actions-bar",children:[e.jsxs("button",{className:"roadmaps-view__add-feature-btn",onClick:_,title:"Add feature","aria-label":"Add feature","data-testid":`add-feature-${a.id}`,children:[e.jsx(Te,{size:12}),e.jsx("span",{children:"Add Feature"})]}),e.jsxs("button",{className:"roadmaps-view__suggest-btn",onClick:()=>{me?.()},disabled:x??!1,title:"Generate feature suggestions with AI","aria-label":"Generate feature suggestions","data-testid":`generate-features-${a.id}`,children:[e.jsx(ht,{size:12}),e.jsx("span",{children:x?"Generating...":"AI Suggestions"})]})]}),e.jsxs("div",{className:Ue,onDragOver:h=>{h.preventDefault(),h.dataTransfer.dropEffect="move",h.dataTransfer.getData("text/plain")?.startsWith("feature:")&&ue()},onDrop:h=>{h.preventDefault();const R=h.dataTransfer.getData("text/plain");R?.startsWith("feature:")&&je(R.split(":")[1],r.length)},onDragLeave:M,children:[r.length===0?e.jsx("p",{className:"roadmaps-view__empty-features",children:"No features yet."}):r.map((h,R)=>{const se=O?.featureId===h.id,Ke=L(h.id),Re=k=>{k.key==="Enter"?(k.preventDefault(),O&&le({title:O.value})):k.key==="Escape"&&I()},Ie=["roadmaps-view__feature-item",Ke?"roadmaps-view__feature-item--dragging":"",de&&re===R?"roadmaps-view__feature-item--drop-before":"",de&&re===R+1?"roadmaps-view__feature-item--drop-after":""].filter(Boolean).join(" ");return e.jsx("div",{className:Ie,draggable:!se,onDragStart:k=>{se||(Z(h.id,a.id),k.dataTransfer.setData("text/plain",`feature:${h.id}`),k.dataTransfer.effectAllowed="move")},onDragEnd:_e,onDragOver:k=>{if(k.preventDefault(),k.stopPropagation(),k.dataTransfer.dropEffect="move",k.dataTransfer.getData("text/plain")?.startsWith("feature:")){const te=k.currentTarget.getBoundingClientRect(),U=te.top+te.height/2,ne=k.clientY<U?"before":"after";ce(h.id,ne)}},onDrop:k=>{k.preventDefault(),k.stopPropagation();const pe=k.dataTransfer.getData("text/plain");if(pe?.startsWith("feature:")){const te=pe.split(":")[1],U=k.currentTarget.getBoundingClientRect(),ne=U.top+U.height/2,ze=k.clientY<ne?"before":"after";let K=R;ze==="after"&&(K=R+1),je(te,K)}},onDragLeave:M,"data-testid":`feature-item-${h.id}`,children:se&&O?e.jsx("div",{className:"roadmaps-view__inline-edit roadmaps-view__inline-edit--compact",children:e.jsxs("div",{className:"roadmaps-view__inline-edit-row",children:[e.jsx("span",{className:"roadmaps-view__drag-handle roadmaps-view__drag-handle--feature",title:"Drag to reorder","aria-label":"Drag to reorder","data-testid":`feature-drag-handle-${h.id}`,children:e.jsx(Xe,{size:12})}),e.jsx("input",{type:"text",className:"roadmaps-view__inline-input",value:O.value,onChange:k=>Q(k.target.value),onKeyDown:Re,placeholder:"Feature title",autoFocus:!0,"data-testid":`feature-title-input-${h.id}`}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--success",onClick:()=>le({title:O.value}),"aria-label":"Save feature title",title:"Save",children:e.jsx(he,{size:14})}),e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:I,"aria-label":"Cancel editing",title:"Cancel",children:e.jsx(oe,{size:14})})]})}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"roadmaps-view__drag-handle roadmaps-view__drag-handle--feature",title:"Drag to reorder","aria-label":"Drag to reorder","data-testid":`feature-drag-handle-${h.id}`,children:e.jsx(Xe,{size:12})}),e.jsxs("div",{className:"roadmaps-view__feature-content",children:[e.jsx("span",{className:"roadmaps-view__feature-title",children:h.title}),h.description&&e.jsx("p",{className:"roadmaps-view__feature-desc",children:h.description})]}),e.jsxs("div",{className:"roadmaps-view__feature-actions",children:[e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:()=>j(h.id),title:"Edit feature","aria-label":"Edit feature","data-testid":`feature-edit-${h.id}`,children:e.jsx($e,{size:12})}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--danger",onClick:()=>N(h.id),title:"Delete feature","aria-label":"Delete feature","data-testid":`feature-delete-${h.id}`,children:e.jsx(Ve,{size:12})})]})]})},h.id)}),ye&&ye.length>0&&e.jsxs("div",{className:"roadmap-suggestion-section",children:[e.jsxs("div",{className:"roadmap-suggestion-header",children:[e.jsx("h4",{className:"roadmap-suggestion-title",children:"AI Feature Suggestions"}),e.jsxs("div",{className:"roadmap-suggestion-actions",children:[e.jsx("button",{className:"roadmap-suggestion-accept-all-btn",onClick:()=>$?.(),title:"Accept all suggestions","aria-label":"Accept all","data-testid":`accept-all-features-${a.id}`,children:"Accept All"}),e.jsx("button",{className:"roadmap-suggestion-clear-btn",onClick:()=>ee?.(),title:"Clear suggestions","aria-label":"Clear","data-testid":`clear-features-${a.id}`,children:"Clear"})]})]}),e.jsx("div",{className:"roadmap-suggestion-list",children:ye.map(h=>e.jsx(wa,{suggestion:h,onUpdateDraft:R=>Pe?.(a.id,h.id,R),onAccept:()=>{Ce?.(a.id,h.id)},testIdPrefix:`feature-suggestion-${a.id}`},h.id))})]})]})]})}function wa({suggestion:a,onUpdateDraft:r,onAccept:d,testIdPrefix:g}){const[_,j]=s.useState(!1),[N,f]=s.useState(a.title),[E,D]=s.useState(a.description||""),y=()=>{f(a.title),D(a.description||""),j(!0)},S=()=>{r({title:N.trim(),description:E.trim()||void 0}),j(!1)},O=()=>{f(a.title),D(a.description||""),j(!1)},Q=()=>{a.title.trim()&&d()},J=a.title.trim().length>0;return _?e.jsx("div",{className:"roadmap-suggestion-card roadmap-suggestion-card--editing",children:e.jsxs("div",{className:"roadmap-suggestion-edit-form",children:[e.jsx("input",{type:"text",className:"roadmap-suggestion-input",value:N,onChange:I=>f(I.target.value),placeholder:"Feature title",autoFocus:!0,"data-testid":`${g}-${a.id}-title-input`}),e.jsx("textarea",{className:"roadmap-suggestion-textarea",value:E,onChange:I=>D(I.target.value),placeholder:"Description (optional)",rows:2,"data-testid":`${g}-${a.id}-desc-input`}),e.jsxs("div",{className:"roadmap-suggestion-edit-actions",children:[e.jsx("button",{className:"roadmap-suggestion-save-btn",onClick:S,disabled:!N.trim(),title:"Save","data-testid":`${g}-${a.id}-save`,children:e.jsx(he,{size:12})}),e.jsx("button",{className:"roadmap-suggestion-cancel-btn",onClick:O,title:"Cancel","data-testid":`${g}-${a.id}-cancel`,children:e.jsx(oe,{size:12})})]})]})}):e.jsxs("div",{className:"roadmap-suggestion-card","data-testid":`${g}-${a.id}`,children:[e.jsxs("div",{className:"roadmap-suggestion-content",children:[e.jsx("span",{className:"roadmap-suggestion-card-title",children:a.title}),a.description&&e.jsx("p",{className:"roadmap-suggestion-card-desc",children:a.description})]}),e.jsxs("div",{className:"roadmap-suggestion-card-actions",children:[e.jsx("button",{className:"roadmap-suggestion-edit-btn",onClick:y,title:"Edit suggestion","aria-label":"Edit","data-testid":`${g}-${a.id}-edit`,children:e.jsx($e,{size:12})}),e.jsx("button",{className:"roadmap-suggestion-accept-btn",onClick:Q,disabled:!J,title:"Accept this suggestion","aria-label":"Accept","data-testid":`${g}-${a.id}-accept`,children:e.jsx(he,{size:12})})]})]})}function gt({suggestion:a,onUpdateDraft:r,onAccept:d,testIdPrefix:g}){const[_,j]=s.useState(!1),[N,f]=s.useState(a.title),[E,D]=s.useState(a.description||""),y=()=>{f(a.title),D(a.description||""),j(!0)},S=()=>{r({title:N.trim(),description:E.trim()||void 0}),j(!1)},O=()=>{f(a.title),D(a.description||""),j(!1)},Q=()=>{a.title.trim()&&d()},J=a.title.trim().length>0;return _?e.jsx("div",{className:"roadmap-suggestion-card roadmap-suggestion-card--editing",children:e.jsxs("div",{className:"roadmap-suggestion-edit-form",children:[e.jsx("input",{type:"text",className:"roadmap-suggestion-input",value:N,onChange:I=>f(I.target.value),placeholder:"Milestone title",autoFocus:!0,"data-testid":`${g}-${a.id}-title-input`}),e.jsx("textarea",{className:"roadmap-suggestion-textarea",value:E,onChange:I=>D(I.target.value),placeholder:"Description (optional)",rows:2,"data-testid":`${g}-${a.id}-desc-input`}),e.jsxs("div",{className:"roadmap-suggestion-edit-actions",children:[e.jsx("button",{className:"roadmap-suggestion-save-btn",onClick:S,disabled:!N.trim(),title:"Save","data-testid":`${g}-${a.id}-save`,children:e.jsx(he,{size:12})}),e.jsx("button",{className:"roadmap-suggestion-cancel-btn",onClick:O,title:"Cancel","data-testid":`${g}-${a.id}-cancel`,children:e.jsx(oe,{size:12})})]})]})}):e.jsxs("div",{className:"roadmap-suggestion-card","data-testid":`${g}-${a.id}`,children:[e.jsxs("div",{className:"roadmap-suggestion-content",children:[e.jsx("span",{className:"roadmap-suggestion-card-title",children:a.title}),a.description&&e.jsx("p",{className:"roadmap-suggestion-card-desc",children:a.description})]}),e.jsxs("div",{className:"roadmap-suggestion-card-actions",children:[e.jsx("button",{className:"roadmap-suggestion-edit-btn",onClick:y,title:"Edit suggestion","aria-label":"Edit","data-testid":`${g}-${a.id}-edit`,children:e.jsx($e,{size:12})}),e.jsx("button",{className:"roadmap-suggestion-accept-btn",onClick:Q,disabled:!J,title:"Accept this suggestion","aria-label":"Accept","data-testid":`${g}-${a.id}-accept`,children:e.jsx(he,{size:12})})]})]})}function ft({onSave:a,onCancel:r}){const[d,g]=s.useState(""),[_,j]=s.useState(""),N=f=>{f.preventDefault(),d.trim()&&a({title:d.trim(),description:_.trim()||void 0})};return e.jsx("div",{className:"roadmaps-view__create-form","data-testid":"create-roadmap-form",children:e.jsxs("form",{onSubmit:N,children:[e.jsx("input",{type:"text",className:"roadmaps-view__inline-input",value:d,onChange:f=>g(f.target.value),placeholder:"Roadmap title",autoFocus:!0,"data-testid":"create-roadmap-title"}),e.jsx("textarea",{className:"roadmaps-view__inline-textarea",value:_,onChange:f=>j(f.target.value),placeholder:"Roadmap description (optional)",rows:2,"data-testid":"create-roadmap-description"}),e.jsxs("div",{className:"roadmaps-view__create-form-actions",children:[e.jsx("button",{type:"submit",className:"roadmaps-view__btn roadmaps-view__btn--primary",disabled:!d.trim(),"data-testid":"create-roadmap-submit",children:"Create"}),e.jsx("button",{type:"button",className:"roadmaps-view__btn",onClick:r,"data-testid":"create-roadmap-cancel",children:"Cancel"})]})]})})}function _a({onSave:a,onCancel:r}){const[d,g]=s.useState(""),[_,j]=s.useState(""),N=f=>{f.preventDefault(),d.trim()&&a({title:d.trim(),description:_.trim()||void 0})};return e.jsx("div",{className:"roadmaps-view__create-form roadmaps-view__create-form--inline","data-testid":"create-milestone-form",children:e.jsxs("form",{onSubmit:N,className:"roadmaps-view__inline-form",children:[e.jsx("input",{type:"text",className:"roadmaps-view__inline-input",value:d,onChange:f=>g(f.target.value),placeholder:"Milestone title",autoFocus:!0,"data-testid":"create-milestone-title"}),e.jsx("textarea",{className:"roadmaps-view__inline-textarea",value:_,onChange:f=>j(f.target.value),placeholder:"Description (optional)",rows:1,"data-testid":"create-milestone-description"}),e.jsxs("div",{className:"roadmaps-view__inline-form-actions",children:[e.jsx("button",{type:"submit",className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--success",disabled:!d.trim(),"aria-label":"Save milestone",title:"Save","data-testid":"create-milestone-submit",children:e.jsx(he,{size:14})}),e.jsx("button",{type:"button",className:"roadmaps-view__icon-btn",onClick:r,"aria-label":"Cancel",title:"Cancel","data-testid":"create-milestone-cancel",children:e.jsx(oe,{size:14})})]})]})})}function ja({onSave:a,onCancel:r}){const[d,g]=s.useState(""),[_,j]=s.useState(""),N=f=>{f.preventDefault(),d.trim()&&a({title:d.trim(),description:_.trim()||void 0})};return e.jsx("div",{className:"roadmaps-view__create-form roadmaps-view__create-form--inline","data-testid":"create-feature-form",children:e.jsxs("form",{onSubmit:N,className:"roadmaps-view__inline-form",children:[e.jsx("input",{type:"text",className:"roadmaps-view__inline-input",value:d,onChange:f=>g(f.target.value),placeholder:"Feature title",autoFocus:!0,"data-testid":"create-feature-title"}),e.jsx("textarea",{className:"roadmaps-view__inline-textarea",value:_,onChange:f=>j(f.target.value),placeholder:"Description (optional)",rows:1,"data-testid":"create-feature-description"}),e.jsxs("div",{className:"roadmaps-view__inline-form-actions",children:[e.jsx("button",{type:"submit",className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--success",disabled:!d.trim(),"aria-label":"Save feature",title:"Save","data-testid":"create-feature-submit",children:e.jsx(he,{size:14})}),e.jsx("button",{type:"button",className:"roadmaps-view__icon-btn",onClick:r,"aria-label":"Cancel",title:"Cancel","data-testid":"create-feature-cancel",children:e.jsx(oe,{size:14})})]})]})})}function ya({projectId:a,addToast:r}){const{confirm:d}=ga(),g=pa()==="mobile",{roadmaps:_,selectedRoadmapId:j,selectedRoadmap:N,milestones:f,featuresByMilestoneId:E,loading:D,error:y,createRoadmap:S,updateRoadmap:O,deleteRoadmap:Q,selectRoadmap:J,createMilestone:I,updateMilestone:le,deleteMilestone:fe,createFeature:Je,updateFeature:ve,deleteFeature:be,reorderMilestones:ae,reorderFeatures:xe,moveFeature:B,milestoneSuggestions:P,isGeneratingSuggestions:G,generateMilestoneSuggestions:we,updateMilestoneSuggestionDraft:L,acceptMilestoneSuggestion:de,acceptAllMilestoneSuggestions:re,clearMilestoneSuggestions:Z,featureSuggestionsByMilestoneId:_e,isGeneratingFeatureSuggestions:ce,generateFeatureSuggestions:je,updateFeatureSuggestionDraft:M,acceptFeatureSuggestion:ue,acceptAllFeatureSuggestions:ye,clearFeatureSuggestions:x,handoffPayload:me,isFetchingHandoff:Ce,handoffError:$,fetchHandoff:Pe,clearHandoff:ee}=ma({projectId:a}),[C,He]=s.useState(!1),[Ne,Be]=s.useState(null),[Ue,h]=s.useState(""),[R,se]=s.useState(""),[Ke,Re]=s.useState(!1),Ie=s.useRef(null);s.useEffect(()=>{Ie.current!==null&&Ie.current!==j&&Re(!1),Ie.current=j},[j]);const[k,pe]=s.useState({roadmapId:null,field:null,value:""}),[te,U]=s.useState({milestoneId:null,field:null,value:""}),[ne,ze]=s.useState({featureId:null,field:null,value:""}),[K,q]=s.useState({type:null,parentId:void 0,title:"",description:""}),[Qe,Ge]=s.useState(!1),[Se,Le]=s.useState({draggingId:null,dropTargetId:null,dropPosition:null}),Ze=s.useCallback(t=>{Le(m=>({...m,draggingId:t}))},[]),ke=s.useCallback(()=>{Le({draggingId:null,dropTargetId:null,dropPosition:null})},[]),et=s.useCallback(t=>{Le(m=>m.draggingId===t?m:{...m,dropTargetId:t,dropPosition:null})},[]),[ge,Ae]=s.useState({draggingId:null,draggingMilestoneId:null,dropTargetMilestoneId:null,dropTargetIndex:null,dropPosition:null}),tt=s.useCallback((t,m)=>{Ae(b=>({...b,draggingId:t,draggingMilestoneId:m}))},[]),n=s.useCallback(()=>{Ae({draggingId:null,draggingMilestoneId:null,dropTargetMilestoneId:null,dropTargetIndex:null,dropPosition:null})},[]),c=s.useCallback((t,m)=>{Ae(b=>{if(b.draggingId===t)return b;const V=(E[b.draggingMilestoneId||""]||[]).findIndex(De=>De.id===t);let Y;return m==="before"?Y=V:Y=V+1,{...b,dropTargetMilestoneId:b.draggingMilestoneId,dropTargetIndex:Y,dropPosition:m}})},[E]),o=s.useCallback(()=>{Ae(t=>({...t,dropTargetMilestoneId:t.draggingMilestoneId,dropTargetIndex:(E[t.draggingMilestoneId||""]||[]).length}))},[E]),i=s.useCallback(async(t,m)=>{const{draggingMilestoneId:b,dropTargetMilestoneId:T}=ge;if(!b){n();return}const V=T||b,Y=E[b]||[],De=Y.find(Me=>Me.id===t);if(!De){n();return}if(b!==V){if(b===V){n();return}try{await B(t,V,m,{onError:Me=>{r(`Failed to move feature: ${Me.message}`,"error")}})}catch{}}else{const Me=[...Y],$t=Me.findIndex(Oe=>Oe.id===t);Me.splice($t,1),Me.splice(m,0,De);const mt=Me.map(Oe=>Oe.id),Rt=Y.map(Oe=>Oe.id);if(mt.join(",")===Rt.join(",")){n();return}try{await xe(b,mt,{onError:Oe=>{r(`Failed to reorder features: ${Oe.message}`,"error")}})}catch{}}n()},[ge,E,xe,B,r,n]),u=s.useCallback(t=>{const m=t.currentTarget.getBoundingClientRect(),b=t.clientX,T=t.clientY;(b<m.left||b>m.right||T<m.top||T>m.bottom)&&Ae(V=>({...V,dropTargetMilestoneId:null,dropTargetIndex:null,dropPosition:null}))},[]),l=s.useCallback(t=>ge.draggingId===t,[ge.draggingId]),v=s.useCallback(async t=>{const{draggingId:m}=Se;if(!m||m===t){ke();return}const b=f.map(De=>De.id),T=b.indexOf(m),V=b.indexOf(t);if(T===-1||V===-1){ke();return}const Y=[...b];if(Y.splice(T,1),Y.splice(V,0,m),Y.join(",")===b.join(",")){ke();return}try{await ae(j,Y,{onError:De=>{r(`Failed to reorder milestones: ${De.message}`,"error")}})}catch{}ke()},[Se,f,j,ae,r,ke]),p=s.useCallback(t=>{const m=t.currentTarget.getBoundingClientRect(),b=t.clientX,T=t.clientY;(b<m.left||b>m.right||T<m.top||T>m.bottom)&&Le(V=>({...V,dropTargetId:null,dropPosition:null}))},[]),w=s.useCallback(t=>{J(t.id),pe({roadmapId:t.id,field:"title",value:t.title})},[J]),H=s.useCallback(()=>{pe({roadmapId:null,field:null,value:""})},[]),Ee=s.useCallback(async t=>{if(k.roadmapId)try{await O(k.roadmapId,t,{onError:m=>r(m.message,"error")}),H()}catch{}},[k.roadmapId,O,H,r]),ie=s.useCallback(async t=>{if(await d({title:"Delete Roadmap",message:"Delete this roadmap? This cannot be undone.",danger:!0}))try{await Q(t,{onError:b=>r(b.message,"error")}),r("Roadmap deleted","success")}catch{}},[Q,r,d]),qe=s.useCallback((t,m)=>{Be(t),h(m),He(!0),ee()},[ee]),F=s.useCallback(()=>{He(!1),Be(null),h(""),ee()},[ee]),W=s.useCallback(()=>{Ne&&Pe(Ne,{onError:t=>r(`Failed to load handoff: ${t.message}`,"error")})},[Ne,Pe,r]),We=s.useCallback(()=>{if(me){const t=JSON.stringify(me,null,2);navigator.clipboard.writeText(t).then(()=>{r("Handoff data copied to clipboard","success")}).catch(()=>{r("Failed to copy to clipboard","error")})}},[me,r]),Ye=s.useCallback(async t=>{try{await S(t,{onError:m=>r(m.message,"error")}),q({type:null,parentId:void 0,title:"",description:""}),r("Roadmap created","success")}catch{}},[S,r]),vt=s.useCallback(t=>{U({milestoneId:t.id,field:"title",value:t.title})},[]),bt=s.useCallback(t=>{U(m=>({...m,value:t}))},[]),xt=s.useCallback(t=>{U(m=>({...m,field:t}))},[]),at=s.useCallback(()=>{U({milestoneId:null,field:null,value:""})},[]),wt=s.useCallback(async t=>{if(te.milestoneId)try{await le(te.milestoneId,t,{onError:m=>r(m.message,"error")}),at()}catch{}},[te.milestoneId,le,at,r]),_t=s.useCallback(async t=>{if(await d({title:"Delete Milestone",message:"Delete this milestone and all its features?",danger:!0}))try{await fe(t,{onError:b=>r(b.message,"error")}),r("Milestone deleted","success")}catch{}},[fe,r,d]),jt=s.useCallback(async t=>{try{await I(t,{onError:m=>r(m.message,"error")}),q({type:null,parentId:void 0,title:"",description:""}),r("Milestone created","success")}catch{}},[I,r]),ot=s.useCallback((t,m,b)=>{ze({featureId:t,field:"title",value:m})},[]),yt=s.useCallback(t=>{ze(m=>({...m,value:t}))},[]),rt=s.useCallback(()=>{ze({featureId:null,field:null,value:""})},[]),Ct=s.useCallback(async t=>{if(ne.featureId)try{await ve(ne.featureId,t,{onError:m=>r(m.message,"error")}),rt()}catch{}},[ne.featureId,ve,rt,r]),Nt=s.useCallback(async t=>{if(await d({title:"Delete Feature",message:"Delete this feature?",danger:!0}))try{await be(t,{onError:b=>r(b.message,"error")}),r("Feature deleted","success")}catch{}},[be,r,d]),lt=s.useCallback(async()=>{if(R.trim())try{await we(R,5,{onError:t=>r(t.message,"error")})}catch{}},[R,we,r]),dt=s.useCallback(async t=>{try{await de(t,{onError:m=>r(m.message,"error")}),r("Milestone added","success")}catch{}},[de,r]),ct=s.useCallback(async()=>{try{await re({onError:t=>r(t.message,"error")}),r(`${P.length} milestones added`,"success"),se("")}catch{}},[re,P.length,r]),ut=s.useCallback(()=>{Z(),se("")},[Z]),St=s.useCallback(async t=>{try{await je(t,{count:5},{onError:m=>r(m.message,"error")})}catch{}},[je,r]),kt=s.useCallback(async(t,m)=>{try{await ue(t,m,{onError:b=>r(b.message,"error")}),r("Feature added","success")}catch{}},[ue,r]),Et=s.useCallback((t,m,b)=>{M(t,m,b)},[M]),Ft=s.useCallback(async t=>{const m=_e[t]||[];try{await ye(t,{onError:b=>r(b.message,"error")}),r(`${m.length} features added`,"success")}catch{}},[ye,_e,r]),Dt=s.useCallback(t=>{x(t)},[x]),Mt=s.useCallback(async(t,m)=>{try{await Je(t,m,{onError:b=>r(b.message,"error")}),q({type:null,parentId:void 0,title:"",description:""}),r("Feature created","success")}catch{}},[Je,r]),Fe=j;return D&&_.length===0?e.jsx("div",{className:"roadmaps-view roadmaps-view--loading",children:e.jsx("div",{className:"roadmaps-view__loading-state",children:"Loading roadmaps..."})}):y&&_.length===0?e.jsx("div",{className:"roadmaps-view roadmaps-view--error",children:e.jsxs("div",{className:"roadmaps-view__error-state",children:[e.jsx("p",{children:"Failed to load roadmaps"}),e.jsx("p",{className:"roadmaps-view__error-msg",children:y.message})]})}):e.jsxs("div",{className:"roadmaps-view",children:[g&&!Fe&&e.jsx(va,{roadmaps:_,selectedRoadmapId:Fe,onSelect:t=>J(t),onCreate:()=>Ge(!0),onEdit:w,onDelete:ie,onExport:t=>qe(t.id,t.title),showCreateForm:Qe,onCancelCreate:()=>Ge(!1),onSaveCreate:async t=>{await Ye(t),Ge(!1)}}),!g&&e.jsxs("aside",{className:"roadmaps-view__sidebar","aria-label":"Roadmaps",children:[e.jsxs("div",{className:"roadmaps-view__sidebar-header",children:[e.jsx("h2",{className:"roadmaps-view__sidebar-title",children:"Roadmaps"}),e.jsx("button",{className:"roadmaps-view__add-btn",onClick:()=>q({type:"roadmap",title:"",description:""}),title:"Create roadmap","aria-label":"Create roadmap","data-testid":"create-roadmap-btn",children:e.jsx(Te,{size:16})})]}),K.type==="roadmap"&&e.jsx(ft,{onSave:Ye,onCancel:()=>q({type:null,parentId:void 0,title:"",description:""})}),e.jsx("div",{className:"roadmaps-view__sidebar-list",children:_.length===0?e.jsx("p",{className:"roadmaps-view__empty-sidebar",children:"No roadmaps yet. Click + to create one."}):_.map(t=>e.jsx(fa,{roadmap:t,isSelected:t.id===Fe,onSelect:()=>J(t.id),onEdit:()=>w(t),onDelete:()=>ie(t.id),onExport:()=>qe(t.id,t.title)},t.id))})]}),e.jsxs("main",{className:"roadmaps-view__main","aria-label":"Roadmap content",children:[g&&Fe&&e.jsx(ba,{roadmapTitle:N?.title||"Untitled Roadmap",onBack:()=>J(null),onEdit:()=>{N&&w(N)},onDelete:()=>ie(Fe),onCreate:()=>Ge(!0)}),Fe?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"roadmaps-view__roadmap-header",children:k.roadmapId===Fe?e.jsx("div",{className:"roadmaps-view__inline-edit",children:e.jsxs("div",{className:"roadmaps-view__inline-edit-row",children:[e.jsx("input",{type:"text",className:"roadmaps-view__inline-input roadmaps-view__inline-input--large",value:k.value,onChange:t=>pe(m=>({...m,value:t.target.value})),onKeyDown:t=>{t.key==="Enter"?Ee({title:k.value}):t.key==="Escape"&&H()},placeholder:"Roadmap title",autoFocus:!0,"data-testid":"roadmap-title-input"}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--success",onClick:()=>Ee({title:k.value}),"aria-label":"Save",title:"Save",children:e.jsx(he,{size:16})}),e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:H,"aria-label":"Cancel",title:"Cancel",children:e.jsx(oe,{size:16})})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"roadmaps-view__roadmap-title-row",children:[e.jsx("h1",{className:"roadmaps-view__roadmap-title",children:N?.title||"Untitled Roadmap"}),e.jsxs("div",{className:"roadmaps-view__roadmap-actions",children:[e.jsx("button",{className:"roadmaps-view__icon-btn",onClick:()=>{N&&w(N)},title:"Edit roadmap","aria-label":"Edit roadmap","data-testid":"edit-roadmap-btn",children:e.jsx($e,{size:16})}),e.jsx("button",{className:"roadmaps-view__icon-btn roadmaps-view__icon-btn--danger",onClick:()=>ie(Fe),title:"Delete roadmap","aria-label":"Delete roadmap","data-testid":"delete-roadmap-btn",children:e.jsx(Ve,{size:16})})]})]}),N?.description&&e.jsx("p",{className:"roadmaps-view__roadmap-desc",children:N.description})]})}),g?Ke?e.jsxs("div",{className:"roadmap-suggestion-section",children:[e.jsxs("div",{className:"roadmap-suggestion-header",children:[e.jsx("h3",{className:"roadmap-suggestion-title",children:"Generate Milestone Ideas"}),e.jsx("button",{className:"roadmap-suggestion-collapse-btn",onClick:()=>Re(!1),"aria-label":"Collapse suggestion panel","data-testid":"collapse-suggestion-panel-btn",children:e.jsx(Tt,{size:16})})]}),e.jsxs("div",{className:"roadmap-suggestion-form",children:[e.jsx("textarea",{className:"roadmap-suggestion-input",value:R,onChange:t=>se(t.target.value),placeholder:"Describe your roadmap goal (e.g., 'Build a user authentication system with OAuth, profiles, and admin dashboard')",rows:2,disabled:G||!j,"data-testid":"goal-prompt-input",autoFocus:!0}),e.jsxs("div",{className:"roadmap-suggestion-actions",children:[e.jsx("button",{className:"roadmap-suggestion-generate-btn",onClick:lt,disabled:!R.trim()||G||!j,"data-testid":"generate-suggestions-btn",children:G?"Generating...":"Generate Milestones"}),P.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"roadmap-suggestion-accept-all-btn",onClick:ct,"data-testid":"accept-all-suggestions-btn",children:["Accept All (",P.length,")"]}),e.jsx("button",{className:"roadmap-suggestion-clear-btn",onClick:ut,title:"Clear suggestions","aria-label":"Clear suggestions","data-testid":"clear-suggestions-btn",children:e.jsx(oe,{size:14})})]})]})]}),P.length>0&&e.jsx("div",{className:"roadmap-suggestion-list",children:P.map(t=>e.jsx(gt,{suggestion:t,onUpdateDraft:m=>L(t.id,m),onAccept:()=>dt(t.id),testIdPrefix:"suggestion"},t.id))})]}):e.jsx("div",{className:"roadmap-suggestion-section",children:e.jsxs("button",{className:"roadmap-suggestion-expand-btn",onClick:()=>Re(!0),disabled:!j,"data-testid":"expand-suggestion-panel-btn",children:[e.jsx(ht,{size:16}),"Generate Milestone Ideas"]})}):e.jsxs("div",{className:"roadmap-suggestion-section",children:[e.jsx("div",{className:"roadmap-suggestion-header",children:e.jsx("h3",{className:"roadmap-suggestion-title",children:"Generate Milestone Ideas"})}),e.jsxs("div",{className:"roadmap-suggestion-form",children:[e.jsx("textarea",{className:"roadmap-suggestion-input",value:R,onChange:t=>se(t.target.value),placeholder:"Describe your roadmap goal (e.g., 'Build a user authentication system with OAuth, profiles, and admin dashboard')",rows:2,disabled:G||!j,"data-testid":"goal-prompt-input"}),e.jsxs("div",{className:"roadmap-suggestion-actions",children:[e.jsx("button",{className:"roadmap-suggestion-generate-btn",onClick:lt,disabled:!R.trim()||G||!j,"data-testid":"generate-suggestions-btn",children:G?"Generating...":"Generate Milestones"}),P.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"roadmap-suggestion-accept-all-btn",onClick:ct,"data-testid":"accept-all-suggestions-btn",children:["Accept All (",P.length,")"]}),e.jsx("button",{className:"roadmap-suggestion-clear-btn",onClick:ut,title:"Clear suggestions","aria-label":"Clear suggestions","data-testid":"clear-suggestions-btn",children:e.jsx(oe,{size:14})})]})]})]}),P.length>0&&e.jsx("div",{className:"roadmap-suggestion-list",children:P.map(t=>e.jsx(gt,{suggestion:t,onUpdateDraft:m=>L(t.id,m),onAccept:()=>dt(t.id),testIdPrefix:"suggestion"},t.id))})]}),e.jsxs("div",{className:"roadmaps-view__milestone-lanes",children:[K.type==="milestone"&&e.jsx(_a,{onSave:jt,onCancel:()=>q({type:null,parentId:void 0,title:"",description:""})}),f.length===0&&K.type!=="milestone"?e.jsxs("div",{className:"roadmaps-view__empty-milestones",children:[e.jsx("p",{children:"This roadmap has no milestones."}),e.jsxs("button",{className:"roadmaps-view__add-milestone-btn",onClick:()=>q({type:"milestone",title:"",description:""}),"data-testid":"add-milestone-btn-empty",children:[e.jsx(Te,{size:14}),e.jsx("span",{children:"Add Milestone"})]})]}):e.jsxs(e.Fragment,{children:[K.type!=="milestone"&&e.jsxs("button",{className:"roadmaps-view__add-milestone-fab",onClick:()=>q({type:"milestone",title:"",description:""}),"data-testid":"add-milestone-btn",children:[e.jsx(Te,{size:14}),e.jsx("span",{children:"Add Milestone"})]}),f.map(t=>e.jsx(xa,{milestone:t,features:E[t.id]||[],onEditMilestone:()=>vt(t),onDeleteMilestone:()=>_t(t.id),onAddFeature:()=>q({type:"feature",parentId:t.id,title:"",description:""}),onEditFeature:m=>{const b=E[t.id]?.find(T=>T.id===m);b&&ot(m,b.title,b.description)},onDeleteFeature:Nt,milestoneEdit:te,onMilestoneEditChange:bt,onMilestoneEditFieldChange:xt,onCancelMilestoneEdit:at,onSaveMilestoneEdit:wt,featureEdit:ne,onFeatureEditChange:yt,onStartFeatureEdit:ot,onCancelFeatureEdit:rt,onSaveFeatureEdit:Ct,projectId:a,addToast:r,isMilestoneDragging:Se.draggingId===t.id,isMilestoneDropTarget:Se.dropTargetId===t.id,milestoneDropPosition:Se.dropTargetId===t.id?Se.dropPosition:null,onMilestoneDragStart:Ze,onMilestoneDragEnd:ke,onMilestoneDragOver:et,onMilestoneDrop:v,onMilestoneDragLeave:p,isFeatureDragging:l,isFeatureDropTarget:ge.dropTargetMilestoneId===t.id,featureDropIndex:ge.dropTargetMilestoneId===t.id?ge.dropTargetIndex:null,onFeatureDragStart:tt,onFeatureDragEnd:n,onFeatureDragOver:c,onFeatureDrop:i,onFeatureDragLeave:u,onFeatureDropOnMilestone:o,featureSuggestions:_e[t.id],isGeneratingFeatureSuggestions:ce(t.id),onGenerateFeatureSuggestions:()=>St(t.id),onAcceptFeatureSuggestion:m=>kt(t.id,m),onAcceptAllFeatureSuggestions:()=>Ft(t.id),onUpdateFeatureSuggestionDraft:(m,b,T)=>Et(m,b,T),onClearFeatureSuggestions:()=>Dt(t.id)},t.id))]})]})]}):e.jsx("div",{className:"roadmaps-view__empty-main",children:e.jsx("p",{children:"Select a roadmap from the sidebar to view its milestones."})})]}),K.type==="feature"&&K.parentId&&e.jsx("div",{className:"roadmaps-view__feature-create-overlay",children:e.jsx(ja,{onSave:t=>Mt(K.parentId,t),onCancel:()=>q({type:null,parentId:void 0,title:"",description:""})})}),e.jsx(ha,{isOpen:C,onClose:F,roadmapId:Ne||"",roadmapTitle:Ue,handoffPayload:me,isLoading:Ce,error:$,onFetchHandoff:W,onCopyToClipboard:We})]})}function ka({context:a}){return e.jsx(ya,{projectId:a?.projectId,addToast:a?.addToast??(()=>{})})}export{ka as RoadmapDashboardView};