shipscreens 0.1.6 → 0.1.7

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 (531) hide show
  1. package/README.md +14 -4
  2. package/bin/shipscreens.js +352 -18
  3. package/cli/commands/captureScreenshots.js +409 -0
  4. package/cli/commands/importScreenshots.js +377 -0
  5. package/cli/commands/inspectReleaseContext.js +607 -0
  6. package/cli/commands/planRelease.js +324 -0
  7. package/cli/commands/writeStarterConfig.js +233 -0
  8. package/cli/mcpServer.js +172 -3
  9. package/dist/.well-known/ai-agents.json +58 -11
  10. package/dist/.well-known/llms-full.txt +80 -17
  11. package/dist/.well-known/llms.txt +38 -12
  12. package/dist/.well-known/mcp-server.json +4 -4
  13. package/dist/ai-agents.json +58 -11
  14. package/dist/app/assets/AgentCli-nIqgOG-i.js +17 -0
  15. package/dist/app/assets/AgentCli-nIqgOG-i.js.map +1 -0
  16. package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
  17. package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
  18. package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
  19. package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
  20. package/dist/app/assets/App-BRKxkubQ.css +1 -0
  21. package/dist/app/assets/App-CZiyX8-L.js +14 -0
  22. package/dist/app/assets/App-CZiyX8-L.js.map +1 -0
  23. package/dist/app/assets/AppReviewAso-DYOCuqgV.js +4 -0
  24. package/dist/app/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
  25. package/dist/app/assets/Cancelled-CP6V6uDb.js +2 -0
  26. package/dist/app/assets/Cancelled-CP6V6uDb.js.map +1 -0
  27. package/dist/app/assets/CopyButton-BFCx6EPg.js +2 -0
  28. package/dist/app/assets/CopyButton-BFCx6EPg.js.map +1 -0
  29. package/dist/app/assets/DesignPartner-B4J7f0Bx.js +4 -0
  30. package/dist/app/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
  31. package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
  32. package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
  33. package/dist/app/assets/FirstExport-qfY7uE8r.js +6 -0
  34. package/dist/app/assets/FirstExport-qfY7uE8r.js.map +1 -0
  35. package/dist/app/assets/FitPanel-B1J0V1jK.js +2 -0
  36. package/dist/app/assets/FitPanel-B1J0V1jK.js.map +1 -0
  37. package/dist/app/assets/FivePanelFramework-C4yq58kM.js +62 -0
  38. package/dist/app/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
  39. package/dist/app/assets/ForgotPassword-KF_HFGyb.js +2 -0
  40. package/dist/app/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
  41. package/dist/app/assets/Landing-B_CvZDXJ.js +2 -0
  42. package/dist/app/assets/Landing-B_CvZDXJ.js.map +1 -0
  43. package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
  44. package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
  45. package/dist/app/assets/Legal-BwGbEjDk.js +2 -0
  46. package/dist/app/assets/Legal-BwGbEjDk.js.map +1 -0
  47. package/dist/app/assets/NotFound-Ba1Bw7uu.js +2 -0
  48. package/dist/app/assets/NotFound-Ba1Bw7uu.js.map +1 -0
  49. package/dist/app/assets/Pricing-Dt-V4Gqc.js +20 -0
  50. package/dist/app/assets/Pricing-Dt-V4Gqc.js.map +1 -0
  51. package/dist/app/assets/Privacy-C6MrXYPO.js +2 -0
  52. package/dist/app/assets/Privacy-C6MrXYPO.js.map +1 -0
  53. package/dist/app/assets/Proof-C3DDFAhm.js +20 -0
  54. package/dist/app/assets/Proof-C3DDFAhm.js.map +1 -0
  55. package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
  56. package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
  57. package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
  58. package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
  59. package/dist/app/assets/Security-C1OmAgom.js +2 -0
  60. package/dist/app/assets/Security-C1OmAgom.js.map +1 -0
  61. package/dist/app/assets/SignIn-C_wwnmvu.js +2 -0
  62. package/dist/app/assets/SignIn-C_wwnmvu.js.map +1 -0
  63. package/dist/app/assets/SignUp-Dm5HalC6.js +2 -0
  64. package/dist/app/assets/SignUp-Dm5HalC6.js.map +1 -0
  65. package/dist/app/assets/SiteHeader-CJqQ0pL3.js +2 -0
  66. package/dist/app/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
  67. package/dist/app/assets/StickyMobileCta-REC3DROG.js +2 -0
  68. package/dist/app/assets/StickyMobileCta-REC3DROG.js.map +1 -0
  69. package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
  70. package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
  71. package/dist/app/assets/Success-D6b4wLPD.js +2 -0
  72. package/dist/app/assets/Success-D6b4wLPD.js.map +1 -0
  73. package/dist/app/assets/Terms-BMt39FQK.js +2 -0
  74. package/dist/app/assets/Terms-BMt39FQK.js.map +1 -0
  75. package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
  76. package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
  77. package/dist/app/assets/ToolsIndex-d1szo5bn.js +6 -0
  78. package/dist/app/assets/ToolsIndex-d1szo5bn.js.map +1 -0
  79. package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
  80. package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
  81. package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
  82. package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
  83. package/dist/app/assets/agentHandoff-BGmHqDwv.js +2 -0
  84. package/dist/app/assets/agentHandoff-BGmHqDwv.js.map +1 -0
  85. package/dist/app/assets/apiClient-3WVm94VW.js +2 -0
  86. package/dist/app/assets/apiClient-3WVm94VW.js.map +1 -0
  87. package/dist/app/assets/calculator-CofuwQa8.js +2 -0
  88. package/dist/app/assets/calculator-CofuwQa8.js.map +1 -0
  89. package/dist/app/assets/check-Fm2iQO64.js +2 -0
  90. package/dist/app/assets/check-Fm2iQO64.js.map +1 -0
  91. package/dist/app/assets/chevron-down-BIXHKpnf.js +2 -0
  92. package/dist/app/assets/chevron-down-BIXHKpnf.js.map +1 -0
  93. package/dist/app/assets/chunk-BHe-jwch.js +1 -0
  94. package/dist/app/assets/circle-check-X08qqy40.js +2 -0
  95. package/dist/app/assets/circle-check-X08qqy40.js.map +1 -0
  96. package/dist/app/assets/copy-KD-LYJ0z.js +2 -0
  97. package/dist/app/assets/copy-KD-LYJ0z.js.map +1 -0
  98. package/dist/app/assets/crop-K1LOmRty.js +2 -0
  99. package/dist/app/assets/crop-K1LOmRty.js.map +1 -0
  100. package/dist/app/assets/designPartnerRequest-DYqMElJd.js +2 -0
  101. package/dist/app/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
  102. package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
  103. package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
  104. package/dist/app/assets/download-BXzoc-Y3.js +2 -0
  105. package/dist/app/assets/download-BXzoc-Y3.js.map +1 -0
  106. package/dist/app/assets/eye-CHvLhG2r.js +2 -0
  107. package/dist/app/assets/eye-CHvLhG2r.js.map +1 -0
  108. package/dist/app/assets/file-text-CU-ETLz1.js +2 -0
  109. package/dist/app/assets/file-text-CU-ETLz1.js.map +1 -0
  110. package/dist/app/assets/folder-tree-raVH0Y5V.js +2 -0
  111. package/dist/app/assets/folder-tree-raVH0Y5V.js.map +1 -0
  112. package/dist/app/assets/grid-3x3-cWuhGQfz.js +2 -0
  113. package/dist/app/assets/grid-3x3-cWuhGQfz.js.map +1 -0
  114. package/dist/app/assets/hardeningOffer-tkjlPDU-.js +2 -0
  115. package/dist/app/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
  116. package/dist/app/assets/hero/agent-starter-workflow.png +0 -0
  117. package/dist/app/assets/hero/agent-starter-workflow.webp +0 -0
  118. package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
  119. package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
  120. package/dist/app/assets/index-BW_YmKvl.css +2 -0
  121. package/dist/app/assets/index-D7D6ZRCW.js +212 -0
  122. package/dist/app/assets/index-D7D6ZRCW.js.map +1 -0
  123. package/dist/app/assets/jszip.min-XyfP2hUJ.js +3 -0
  124. package/dist/app/assets/jszip.min-XyfP2hUJ.js.map +1 -0
  125. package/dist/app/assets/layout-grid-Cq_e979G.js +2 -0
  126. package/dist/app/assets/layout-grid-Cq_e979G.js.map +1 -0
  127. package/dist/app/assets/lock-Di7P18Ts.js +2 -0
  128. package/dist/app/assets/lock-Di7P18Ts.js.map +1 -0
  129. package/dist/app/assets/rocket-DHdrCHKD.js +2 -0
  130. package/dist/app/assets/rocket-DHdrCHKD.js.map +1 -0
  131. package/dist/app/assets/shield-check-CxpHNdp0.js +2 -0
  132. package/dist/app/assets/shield-check-CxpHNdp0.js.map +1 -0
  133. package/dist/app/assets/smartphone-DXKiqu57.js +2 -0
  134. package/dist/app/assets/smartphone-DXKiqu57.js.map +1 -0
  135. package/dist/app/assets/stripeClient-CuZgvzca.js +2 -0
  136. package/dist/app/assets/stripeClient-CuZgvzca.js.map +1 -0
  137. package/dist/app/assets/terminal-J0iyJTv2.js +2 -0
  138. package/dist/app/assets/terminal-J0iyJTv2.js.map +1 -0
  139. package/dist/app/assets/triangle-alert-BA0HP6zD.js +2 -0
  140. package/dist/app/assets/triangle-alert-BA0HP6zD.js.map +1 -0
  141. package/dist/app/assets/useAuth-CoS4r8yi.js +22 -0
  142. package/dist/app/assets/useAuth-CoS4r8yi.js.map +1 -0
  143. package/dist/app/assets/users-C-fz7pbn.js +2 -0
  144. package/dist/app/assets/users-C-fz7pbn.js.map +1 -0
  145. package/dist/app/index.html +9 -8
  146. package/dist/assets/AgentCli-nIqgOG-i.js +17 -0
  147. package/dist/assets/AgentCli-nIqgOG-i.js.map +1 -0
  148. package/dist/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
  149. package/dist/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
  150. package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
  151. package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
  152. package/dist/assets/App-BRKxkubQ.css +1 -0
  153. package/dist/assets/App-CZiyX8-L.js +14 -0
  154. package/dist/assets/App-CZiyX8-L.js.map +1 -0
  155. package/dist/assets/AppReviewAso-DYOCuqgV.js +4 -0
  156. package/dist/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
  157. package/dist/assets/Cancelled-CP6V6uDb.js +2 -0
  158. package/dist/assets/Cancelled-CP6V6uDb.js.map +1 -0
  159. package/dist/assets/CopyButton-BFCx6EPg.js +2 -0
  160. package/dist/assets/CopyButton-BFCx6EPg.js.map +1 -0
  161. package/dist/assets/DesignPartner-B4J7f0Bx.js +4 -0
  162. package/dist/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
  163. package/dist/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
  164. package/dist/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
  165. package/dist/assets/FirstExport-qfY7uE8r.js +6 -0
  166. package/dist/assets/FirstExport-qfY7uE8r.js.map +1 -0
  167. package/dist/assets/FitPanel-B1J0V1jK.js +2 -0
  168. package/dist/assets/FitPanel-B1J0V1jK.js.map +1 -0
  169. package/dist/assets/FivePanelFramework-C4yq58kM.js +62 -0
  170. package/dist/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
  171. package/dist/assets/ForgotPassword-KF_HFGyb.js +2 -0
  172. package/dist/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
  173. package/dist/assets/Landing-B_CvZDXJ.js +2 -0
  174. package/dist/assets/Landing-B_CvZDXJ.js.map +1 -0
  175. package/dist/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
  176. package/dist/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
  177. package/dist/assets/Legal-BwGbEjDk.js +2 -0
  178. package/dist/assets/Legal-BwGbEjDk.js.map +1 -0
  179. package/dist/assets/NotFound-Ba1Bw7uu.js +2 -0
  180. package/dist/assets/NotFound-Ba1Bw7uu.js.map +1 -0
  181. package/dist/assets/Pricing-Dt-V4Gqc.js +20 -0
  182. package/dist/assets/Pricing-Dt-V4Gqc.js.map +1 -0
  183. package/dist/assets/Privacy-C6MrXYPO.js +2 -0
  184. package/dist/assets/Privacy-C6MrXYPO.js.map +1 -0
  185. package/dist/assets/Proof-C3DDFAhm.js +20 -0
  186. package/dist/assets/Proof-C3DDFAhm.js.map +1 -0
  187. package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
  188. package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
  189. package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
  190. package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
  191. package/dist/assets/Security-C1OmAgom.js +2 -0
  192. package/dist/assets/Security-C1OmAgom.js.map +1 -0
  193. package/dist/assets/SignIn-C_wwnmvu.js +2 -0
  194. package/dist/assets/SignIn-C_wwnmvu.js.map +1 -0
  195. package/dist/assets/SignUp-Dm5HalC6.js +2 -0
  196. package/dist/assets/SignUp-Dm5HalC6.js.map +1 -0
  197. package/dist/assets/SiteHeader-CJqQ0pL3.js +2 -0
  198. package/dist/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
  199. package/dist/assets/StickyMobileCta-REC3DROG.js +2 -0
  200. package/dist/assets/StickyMobileCta-REC3DROG.js.map +1 -0
  201. package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
  202. package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
  203. package/dist/assets/Success-D6b4wLPD.js +2 -0
  204. package/dist/assets/Success-D6b4wLPD.js.map +1 -0
  205. package/dist/assets/Terms-BMt39FQK.js +2 -0
  206. package/dist/assets/Terms-BMt39FQK.js.map +1 -0
  207. package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
  208. package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
  209. package/dist/assets/ToolsIndex-d1szo5bn.js +6 -0
  210. package/dist/assets/ToolsIndex-d1szo5bn.js.map +1 -0
  211. package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
  212. package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
  213. package/dist/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
  214. package/dist/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
  215. package/dist/assets/agentHandoff-BGmHqDwv.js +2 -0
  216. package/dist/assets/agentHandoff-BGmHqDwv.js.map +1 -0
  217. package/dist/assets/apiClient-3WVm94VW.js +2 -0
  218. package/dist/assets/apiClient-3WVm94VW.js.map +1 -0
  219. package/dist/assets/calculator-CofuwQa8.js +2 -0
  220. package/dist/assets/calculator-CofuwQa8.js.map +1 -0
  221. package/dist/assets/check-Fm2iQO64.js +2 -0
  222. package/dist/assets/check-Fm2iQO64.js.map +1 -0
  223. package/dist/assets/chevron-down-BIXHKpnf.js +2 -0
  224. package/dist/assets/chevron-down-BIXHKpnf.js.map +1 -0
  225. package/dist/assets/chunk-BHe-jwch.js +1 -0
  226. package/dist/assets/circle-check-X08qqy40.js +2 -0
  227. package/dist/assets/circle-check-X08qqy40.js.map +1 -0
  228. package/dist/assets/copy-KD-LYJ0z.js +2 -0
  229. package/dist/assets/copy-KD-LYJ0z.js.map +1 -0
  230. package/dist/assets/crop-K1LOmRty.js +2 -0
  231. package/dist/assets/crop-K1LOmRty.js.map +1 -0
  232. package/dist/assets/designPartnerRequest-DYqMElJd.js +2 -0
  233. package/dist/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
  234. package/dist/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
  235. package/dist/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
  236. package/dist/assets/download-BXzoc-Y3.js +2 -0
  237. package/dist/assets/download-BXzoc-Y3.js.map +1 -0
  238. package/dist/assets/eye-CHvLhG2r.js +2 -0
  239. package/dist/assets/eye-CHvLhG2r.js.map +1 -0
  240. package/dist/assets/file-text-CU-ETLz1.js +2 -0
  241. package/dist/assets/file-text-CU-ETLz1.js.map +1 -0
  242. package/dist/assets/folder-tree-raVH0Y5V.js +2 -0
  243. package/dist/assets/folder-tree-raVH0Y5V.js.map +1 -0
  244. package/dist/assets/grid-3x3-cWuhGQfz.js +2 -0
  245. package/dist/assets/grid-3x3-cWuhGQfz.js.map +1 -0
  246. package/dist/assets/hardeningOffer-tkjlPDU-.js +2 -0
  247. package/dist/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
  248. package/dist/assets/hero/agent-starter-workflow.png +0 -0
  249. package/dist/assets/hero/agent-starter-workflow.webp +0 -0
  250. package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
  251. package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
  252. package/dist/assets/index-BW_YmKvl.css +2 -0
  253. package/dist/assets/index-D7D6ZRCW.js +212 -0
  254. package/dist/assets/index-D7D6ZRCW.js.map +1 -0
  255. package/dist/assets/jszip.min-XyfP2hUJ.js +3 -0
  256. package/dist/assets/jszip.min-XyfP2hUJ.js.map +1 -0
  257. package/dist/assets/layout-grid-Cq_e979G.js +2 -0
  258. package/dist/assets/layout-grid-Cq_e979G.js.map +1 -0
  259. package/dist/assets/lock-Di7P18Ts.js +2 -0
  260. package/dist/assets/lock-Di7P18Ts.js.map +1 -0
  261. package/dist/assets/rocket-DHdrCHKD.js +2 -0
  262. package/dist/assets/rocket-DHdrCHKD.js.map +1 -0
  263. package/dist/assets/shield-check-CxpHNdp0.js +2 -0
  264. package/dist/assets/shield-check-CxpHNdp0.js.map +1 -0
  265. package/dist/assets/smartphone-DXKiqu57.js +2 -0
  266. package/dist/assets/smartphone-DXKiqu57.js.map +1 -0
  267. package/dist/assets/stripeClient-CuZgvzca.js +2 -0
  268. package/dist/assets/stripeClient-CuZgvzca.js.map +1 -0
  269. package/dist/assets/terminal-J0iyJTv2.js +2 -0
  270. package/dist/assets/terminal-J0iyJTv2.js.map +1 -0
  271. package/dist/assets/triangle-alert-BA0HP6zD.js +2 -0
  272. package/dist/assets/triangle-alert-BA0HP6zD.js.map +1 -0
  273. package/dist/assets/useAuth-CoS4r8yi.js +22 -0
  274. package/dist/assets/useAuth-CoS4r8yi.js.map +1 -0
  275. package/dist/assets/users-C-fz7pbn.js +2 -0
  276. package/dist/assets/users-C-fz7pbn.js.map +1 -0
  277. package/dist/cancelled/index.html +3 -2
  278. package/dist/design-partner/index.html +6 -5
  279. package/dist/downloads/shipscreens-github-actions-template.yml +1 -1
  280. package/dist/forgot-password/index.html +3 -2
  281. package/dist/index.html +9 -8
  282. package/dist/legal/index.html +3 -2
  283. package/dist/llms-full.txt +80 -17
  284. package/dist/llms.txt +38 -12
  285. package/dist/mcp-server.json +4 -4
  286. package/dist/pricing/index.html +6 -5
  287. package/dist/privacy/index.html +3 -2
  288. package/dist/proof/index.html +6 -5
  289. package/dist/security/index.html +3 -2
  290. package/dist/signin/index.html +3 -2
  291. package/dist/signup/index.html +3 -2
  292. package/dist/success/index.html +3 -2
  293. package/dist/terms/index.html +3 -2
  294. package/dist/tools/5-panel-screenshot-framework/index.html +6 -5
  295. package/dist/tools/agent-cli/index.html +8 -7
  296. package/dist/tools/app-review-aso/index.html +6 -5
  297. package/dist/tools/app-store-localization-screenshot-automation/index.html +8 -7
  298. package/dist/tools/app-store-screenshot-automation/index.html +8 -7
  299. package/dist/tools/app-store-screenshot-requirements-checklist/index.html +8 -7
  300. package/dist/tools/claude-code-mcp-screenshot-automation/index.html +8 -7
  301. package/dist/tools/cursor-mcp-screenshot-automation/index.html +8 -7
  302. package/dist/tools/deterministic-screenshot-reruns/index.html +8 -7
  303. package/dist/tools/device-locale-screenshot-matrix/index.html +8 -7
  304. package/dist/tools/fastlane-screenshot-folder-structure/index.html +8 -7
  305. package/dist/tools/fastlane-screenshot-pipeline/index.html +8 -7
  306. package/dist/tools/fastlane-screenshots/index.html +6 -5
  307. package/dist/tools/first-export/index.html +6 -5
  308. package/dist/tools/gemini-cli-mcp-screenshot-automation/index.html +8 -7
  309. package/dist/tools/google-play-screenshot-automation/index.html +8 -7
  310. package/dist/tools/google-play-screenshot-requirements-checklist/index.html +8 -7
  311. package/dist/tools/index.html +6 -5
  312. package/dist/tools/ipad-screenshot-review-requirements/index.html +8 -7
  313. package/dist/tools/openai-responses-tool-screenshot-automation/index.html +8 -7
  314. package/dist/tools/screenshot-ci-pipeline/index.html +8 -7
  315. package/dist/tools/screenshot-naming-order-drift/index.html +8 -7
  316. package/dist/tools/screenshot-workload-calculator/index.html +6 -5
  317. package/dist/tools/store-assets-pipeline/index.html +3 -2
  318. package/dist/tools/vscode-copilot-mcp-screenshot-automation/index.html +8 -7
  319. package/package.json +7 -7
  320. package/dist/app/assets/AgentCli-xKYtzL3B.js +0 -17
  321. package/dist/app/assets/AgentCli-xKYtzL3B.js.map +0 -1
  322. package/dist/app/assets/App-C1cNw_fn.js +0 -13
  323. package/dist/app/assets/App-C1cNw_fn.js.map +0 -1
  324. package/dist/app/assets/App-oQfE_p3A.css +0 -1
  325. package/dist/app/assets/AppReviewAso-CaIT-L7Z.js +0 -4
  326. package/dist/app/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
  327. package/dist/app/assets/Cancelled-Dmw7PTD-.js +0 -2
  328. package/dist/app/assets/Cancelled-Dmw7PTD-.js.map +0 -1
  329. package/dist/app/assets/CopyButton-CPRHmu8l.js +0 -2
  330. package/dist/app/assets/CopyButton-CPRHmu8l.js.map +0 -1
  331. package/dist/app/assets/DesignPartner-Ckp1GhNv.js +0 -4
  332. package/dist/app/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
  333. package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
  334. package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
  335. package/dist/app/assets/FirstExport-RXbvVQdK.js +0 -6
  336. package/dist/app/assets/FirstExport-RXbvVQdK.js.map +0 -1
  337. package/dist/app/assets/FitPanel-ic91y-49.js +0 -2
  338. package/dist/app/assets/FitPanel-ic91y-49.js.map +0 -1
  339. package/dist/app/assets/FivePanelFramework-BZKNcycb.js +0 -62
  340. package/dist/app/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
  341. package/dist/app/assets/ForgotPassword-CKOfAvWk.js +0 -2
  342. package/dist/app/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
  343. package/dist/app/assets/Landing-D0cuDDUk.js +0 -2
  344. package/dist/app/assets/Landing-D0cuDDUk.js.map +0 -1
  345. package/dist/app/assets/LanguageSwitcher-BrToLEgF.js +0 -2
  346. package/dist/app/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
  347. package/dist/app/assets/Legal-Cm-hVzjY.js +0 -2
  348. package/dist/app/assets/Legal-Cm-hVzjY.js.map +0 -1
  349. package/dist/app/assets/NotFound-B0I6I440.js +0 -2
  350. package/dist/app/assets/NotFound-B0I6I440.js.map +0 -1
  351. package/dist/app/assets/Pricing-p-NIjjtK.js +0 -29
  352. package/dist/app/assets/Pricing-p-NIjjtK.js.map +0 -1
  353. package/dist/app/assets/Privacy-BhfPkK0y.js +0 -2
  354. package/dist/app/assets/Privacy-BhfPkK0y.js.map +0 -1
  355. package/dist/app/assets/Proof-D-7QbTGX.js +0 -20
  356. package/dist/app/assets/Proof-D-7QbTGX.js.map +0 -1
  357. package/dist/app/assets/Security-DFafJQIT.js +0 -2
  358. package/dist/app/assets/Security-DFafJQIT.js.map +0 -1
  359. package/dist/app/assets/SignIn--6nNsUCm.js +0 -2
  360. package/dist/app/assets/SignIn--6nNsUCm.js.map +0 -1
  361. package/dist/app/assets/SignUp-yh5ydmFf.js +0 -2
  362. package/dist/app/assets/SignUp-yh5ydmFf.js.map +0 -1
  363. package/dist/app/assets/SiteHeader-NTK-cM9O.js +0 -2
  364. package/dist/app/assets/SiteHeader-NTK-cM9O.js.map +0 -1
  365. package/dist/app/assets/StickyMobileCta-DVXAyhaH.js +0 -2
  366. package/dist/app/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
  367. package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
  368. package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
  369. package/dist/app/assets/Success-C3n0m1XU.js +0 -2
  370. package/dist/app/assets/Success-C3n0m1XU.js.map +0 -1
  371. package/dist/app/assets/Terms-C72ybAwA.js +0 -2
  372. package/dist/app/assets/Terms-C72ybAwA.js.map +0 -1
  373. package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
  374. package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
  375. package/dist/app/assets/ToolsIndex-CnvNTvyW.js +0 -6
  376. package/dist/app/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
  377. package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
  378. package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
  379. package/dist/app/assets/arrow-right-Dglia5EE.js +0 -2
  380. package/dist/app/assets/arrow-right-Dglia5EE.js.map +0 -1
  381. package/dist/app/assets/calculator-CAgtsVuH.js +0 -2
  382. package/dist/app/assets/calculator-CAgtsVuH.js.map +0 -1
  383. package/dist/app/assets/check-B5h9hATV.js +0 -2
  384. package/dist/app/assets/check-B5h9hATV.js.map +0 -1
  385. package/dist/app/assets/chevron-down-By2Ts8dG.js +0 -2
  386. package/dist/app/assets/chevron-down-By2Ts8dG.js.map +0 -1
  387. package/dist/app/assets/circle-check-DaJ6APMi.js +0 -2
  388. package/dist/app/assets/circle-check-DaJ6APMi.js.map +0 -1
  389. package/dist/app/assets/clipboard-copy-IDfWU9SE.js +0 -2
  390. package/dist/app/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
  391. package/dist/app/assets/copy-KSn4Rc2b.js +0 -2
  392. package/dist/app/assets/copy-KSn4Rc2b.js.map +0 -1
  393. package/dist/app/assets/crop-C9hwiw0i.js +0 -2
  394. package/dist/app/assets/crop-C9hwiw0i.js.map +0 -1
  395. package/dist/app/assets/download-eqwxO8bs.js +0 -2
  396. package/dist/app/assets/download-eqwxO8bs.js.map +0 -1
  397. package/dist/app/assets/eye-Dg61f0nU.js +0 -2
  398. package/dist/app/assets/eye-Dg61f0nU.js.map +0 -1
  399. package/dist/app/assets/file-text-BQPKCil3.js +0 -2
  400. package/dist/app/assets/file-text-BQPKCil3.js.map +0 -1
  401. package/dist/app/assets/folder-tree-9hq6oigy.js +0 -2
  402. package/dist/app/assets/folder-tree-9hq6oigy.js.map +0 -1
  403. package/dist/app/assets/grid-3x3-BHXRyOIx.js +0 -2
  404. package/dist/app/assets/grid-3x3-BHXRyOIx.js.map +0 -1
  405. package/dist/app/assets/index-my6BmN7T.js +0 -204
  406. package/dist/app/assets/index-my6BmN7T.js.map +0 -1
  407. package/dist/app/assets/index-rv91vbLH.css +0 -1
  408. package/dist/app/assets/layout-grid-DDQvnEgx.js +0 -2
  409. package/dist/app/assets/layout-grid-DDQvnEgx.js.map +0 -1
  410. package/dist/app/assets/rocket-0KMviRpJ.js +0 -2
  411. package/dist/app/assets/rocket-0KMviRpJ.js.map +0 -1
  412. package/dist/app/assets/shield-check-BvKEQ2hc.js +0 -2
  413. package/dist/app/assets/shield-check-BvKEQ2hc.js.map +0 -1
  414. package/dist/app/assets/signIn-Ckla1_0O.js +0 -2
  415. package/dist/app/assets/signIn-Ckla1_0O.js.map +0 -1
  416. package/dist/app/assets/smartphone-I0w1b2DV.js +0 -2
  417. package/dist/app/assets/smartphone-I0w1b2DV.js.map +0 -1
  418. package/dist/app/assets/terminal-CLpUSQqd.js +0 -2
  419. package/dist/app/assets/terminal-CLpUSQqd.js.map +0 -1
  420. package/dist/app/assets/triangle-alert-w7TZ0yy2.js +0 -2
  421. package/dist/app/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
  422. package/dist/app/assets/useAuth-N3hsUaDj.js +0 -4
  423. package/dist/app/assets/useAuth-N3hsUaDj.js.map +0 -1
  424. package/dist/app/assets/users-DsQdkuR3.js +0 -2
  425. package/dist/app/assets/users-DsQdkuR3.js.map +0 -1
  426. package/dist/assets/AgentCli-xKYtzL3B.js +0 -17
  427. package/dist/assets/AgentCli-xKYtzL3B.js.map +0 -1
  428. package/dist/assets/App-C1cNw_fn.js +0 -13
  429. package/dist/assets/App-C1cNw_fn.js.map +0 -1
  430. package/dist/assets/App-oQfE_p3A.css +0 -1
  431. package/dist/assets/AppReviewAso-CaIT-L7Z.js +0 -4
  432. package/dist/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
  433. package/dist/assets/Cancelled-Dmw7PTD-.js +0 -2
  434. package/dist/assets/Cancelled-Dmw7PTD-.js.map +0 -1
  435. package/dist/assets/CopyButton-CPRHmu8l.js +0 -2
  436. package/dist/assets/CopyButton-CPRHmu8l.js.map +0 -1
  437. package/dist/assets/DesignPartner-Ckp1GhNv.js +0 -4
  438. package/dist/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
  439. package/dist/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
  440. package/dist/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
  441. package/dist/assets/FirstExport-RXbvVQdK.js +0 -6
  442. package/dist/assets/FirstExport-RXbvVQdK.js.map +0 -1
  443. package/dist/assets/FitPanel-ic91y-49.js +0 -2
  444. package/dist/assets/FitPanel-ic91y-49.js.map +0 -1
  445. package/dist/assets/FivePanelFramework-BZKNcycb.js +0 -62
  446. package/dist/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
  447. package/dist/assets/ForgotPassword-CKOfAvWk.js +0 -2
  448. package/dist/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
  449. package/dist/assets/Landing-D0cuDDUk.js +0 -2
  450. package/dist/assets/Landing-D0cuDDUk.js.map +0 -1
  451. package/dist/assets/LanguageSwitcher-BrToLEgF.js +0 -2
  452. package/dist/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
  453. package/dist/assets/Legal-Cm-hVzjY.js +0 -2
  454. package/dist/assets/Legal-Cm-hVzjY.js.map +0 -1
  455. package/dist/assets/NotFound-B0I6I440.js +0 -2
  456. package/dist/assets/NotFound-B0I6I440.js.map +0 -1
  457. package/dist/assets/Pricing-p-NIjjtK.js +0 -29
  458. package/dist/assets/Pricing-p-NIjjtK.js.map +0 -1
  459. package/dist/assets/Privacy-BhfPkK0y.js +0 -2
  460. package/dist/assets/Privacy-BhfPkK0y.js.map +0 -1
  461. package/dist/assets/Proof-D-7QbTGX.js +0 -20
  462. package/dist/assets/Proof-D-7QbTGX.js.map +0 -1
  463. package/dist/assets/Security-DFafJQIT.js +0 -2
  464. package/dist/assets/Security-DFafJQIT.js.map +0 -1
  465. package/dist/assets/SignIn--6nNsUCm.js +0 -2
  466. package/dist/assets/SignIn--6nNsUCm.js.map +0 -1
  467. package/dist/assets/SignUp-yh5ydmFf.js +0 -2
  468. package/dist/assets/SignUp-yh5ydmFf.js.map +0 -1
  469. package/dist/assets/SiteHeader-NTK-cM9O.js +0 -2
  470. package/dist/assets/SiteHeader-NTK-cM9O.js.map +0 -1
  471. package/dist/assets/StickyMobileCta-DVXAyhaH.js +0 -2
  472. package/dist/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
  473. package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
  474. package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
  475. package/dist/assets/Success-C3n0m1XU.js +0 -2
  476. package/dist/assets/Success-C3n0m1XU.js.map +0 -1
  477. package/dist/assets/Terms-C72ybAwA.js +0 -2
  478. package/dist/assets/Terms-C72ybAwA.js.map +0 -1
  479. package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
  480. package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
  481. package/dist/assets/ToolsIndex-CnvNTvyW.js +0 -6
  482. package/dist/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
  483. package/dist/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
  484. package/dist/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
  485. package/dist/assets/arrow-right-Dglia5EE.js +0 -2
  486. package/dist/assets/arrow-right-Dglia5EE.js.map +0 -1
  487. package/dist/assets/calculator-CAgtsVuH.js +0 -2
  488. package/dist/assets/calculator-CAgtsVuH.js.map +0 -1
  489. package/dist/assets/check-B5h9hATV.js +0 -2
  490. package/dist/assets/check-B5h9hATV.js.map +0 -1
  491. package/dist/assets/chevron-down-By2Ts8dG.js +0 -2
  492. package/dist/assets/chevron-down-By2Ts8dG.js.map +0 -1
  493. package/dist/assets/circle-check-DaJ6APMi.js +0 -2
  494. package/dist/assets/circle-check-DaJ6APMi.js.map +0 -1
  495. package/dist/assets/clipboard-copy-IDfWU9SE.js +0 -2
  496. package/dist/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
  497. package/dist/assets/copy-KSn4Rc2b.js +0 -2
  498. package/dist/assets/copy-KSn4Rc2b.js.map +0 -1
  499. package/dist/assets/crop-C9hwiw0i.js +0 -2
  500. package/dist/assets/crop-C9hwiw0i.js.map +0 -1
  501. package/dist/assets/download-eqwxO8bs.js +0 -2
  502. package/dist/assets/download-eqwxO8bs.js.map +0 -1
  503. package/dist/assets/eye-Dg61f0nU.js +0 -2
  504. package/dist/assets/eye-Dg61f0nU.js.map +0 -1
  505. package/dist/assets/file-text-BQPKCil3.js +0 -2
  506. package/dist/assets/file-text-BQPKCil3.js.map +0 -1
  507. package/dist/assets/folder-tree-9hq6oigy.js +0 -2
  508. package/dist/assets/folder-tree-9hq6oigy.js.map +0 -1
  509. package/dist/assets/grid-3x3-BHXRyOIx.js +0 -2
  510. package/dist/assets/grid-3x3-BHXRyOIx.js.map +0 -1
  511. package/dist/assets/index-my6BmN7T.js +0 -204
  512. package/dist/assets/index-my6BmN7T.js.map +0 -1
  513. package/dist/assets/index-rv91vbLH.css +0 -1
  514. package/dist/assets/layout-grid-DDQvnEgx.js +0 -2
  515. package/dist/assets/layout-grid-DDQvnEgx.js.map +0 -1
  516. package/dist/assets/rocket-0KMviRpJ.js +0 -2
  517. package/dist/assets/rocket-0KMviRpJ.js.map +0 -1
  518. package/dist/assets/shield-check-BvKEQ2hc.js +0 -2
  519. package/dist/assets/shield-check-BvKEQ2hc.js.map +0 -1
  520. package/dist/assets/signIn-Ckla1_0O.js +0 -2
  521. package/dist/assets/signIn-Ckla1_0O.js.map +0 -1
  522. package/dist/assets/smartphone-I0w1b2DV.js +0 -2
  523. package/dist/assets/smartphone-I0w1b2DV.js.map +0 -1
  524. package/dist/assets/terminal-CLpUSQqd.js +0 -2
  525. package/dist/assets/terminal-CLpUSQqd.js.map +0 -1
  526. package/dist/assets/triangle-alert-w7TZ0yy2.js +0 -2
  527. package/dist/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
  528. package/dist/assets/useAuth-N3hsUaDj.js +0 -4
  529. package/dist/assets/useAuth-N3hsUaDj.js.map +0 -1
  530. package/dist/assets/users-DsQdkuR3.js +0 -2
  531. package/dist/assets/users-DsQdkuR3.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentCli-nIqgOG-i.js","names":[],"sources":["../../src/pages/AgentCli.jsx"],"sourcesContent":["import React, { useEffect, useMemo } from 'react';\nimport { ArrowRight, CheckCircle2, ChevronDown, ClipboardCopy, Download, Terminal } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport AgentStarterWorkflowFigure from '../components/AgentStarterWorkflowFigure';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport CopyButton from '../components/CopyButton';\nimport AgentReportPreview from '../components/AgentReportPreview';\nimport FitPanel from '../components/FitPanel';\nimport ReleaseFitIntake from '../components/ReleaseFitIntake';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent as baseTrackEvent, trackEventAndFollowLink as baseTrackEventAndFollowLink } from '../lib/analytics';\nimport { persistAgentClientId, readPersistedAgentClientId } from '../lib/agentHandoff';\nimport { buildDesignPartnerHref, getDesignPartnerPresetForIntent } from '../lib/designPartnerPrefill';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst withEntrySource = (href, entrySource) => {\n if (!entrySource) return href;\n const [beforeHash, hash = ''] = String(href || '').split('#');\n const separator = beforeHash.includes('?') ? '&' : '?';\n return `${beforeHash}${separator}entry_source=${encodeURIComponent(entrySource)}${hash ? `#${hash}` : ''}`;\n};\n\nconst COPY = {\n en: {\n badge: 'Agent + CLI quickstart',\n title: 'Screenshots as a build step. Let your coding agent run ShipScreens.',\n subtitle:\n 'Best flow for teams already using Claude/Cursor/Copilot/Gemini or another coding agent: paste one natural-language handoff. ShipScreens keeps the screenshots you already create in Figma/Fastlane/manual flows, can capture current connected device/emulator screens when no PNG folder exists, lets the agent use workspace-local MCP when available or the CLI otherwise, and turns that into deterministic, Fastlane-ready outputs plus upload checks without forcing a redesign.',\n painLine:\n 'Built for teams where Figma/AI/manual exports already create images, but release week still breaks on Fastlane paths, panel order, naming drift, iPad/review checks, upload roots, or coding-agent and CI coordination, and the preferred UX is to tell the coding agent to handle it.',\n ctas: {\n primary: 'Paste the agent prompt',\n unlockPro: 'Start $5 Agent Starter',\n goPro: 'Start $5 Agent Starter',\n sample: 'Open sample project',\n },\n agentFirstTitle: 'Paste the agent prompt',\n agentFirstBody:\n 'Use this when the agent should decide whether workspace-local MCP or the CLI is the better path for this project.',\n agentFirstPrompt:\n 'Use ShipScreens as the build step for our mobile release screenshots. Keep our current Figma/Fastlane/manual workflow, inspect this repo, choose the best path for this workspace (workspace-local MCP if available, otherwise pure CLI), capture current device/emulator screens if no screenshot folder exists, generate deterministic Fastlane-ready outputs, run verify/stage, and return a short report with output paths, warnings, and next steps. Only ask me if device or locale scope, panel #1 messaging, or store-upload approval is unclear.',\n agentFirstBullets: [\n 'If MCP is supported in this workspace, set it up first so the agent can call ShipScreens directly.',\n 'If screenshots only exist on a connected device/emulator, capture each visible panel before import.',\n 'If MCP is not available, fall back to the CLI without changing the workflow.',\n 'Keep screenshots local; ShipScreens only hardens the release-time build step.',\n ],\n agentFirstNote: 'Product promise: one natural-language handoff, then deterministic screenshot outputs plus proof.',\n agentFirstBootstrapCta: 'Open MCP setup',\n agentFirstQuickstartCta: 'Jump to CLI quickstart',\n trustTitle: 'Check trust basics before upgrade',\n trustLinks: {\n pricing: 'Pricing',\n terms: 'Terms',\n privacy: 'Privacy',\n legal: 'Legal (Japan)',\n security: 'Security',\n proof: 'Proof',\n },\n demoTitle: 'Run a demo export (no assets required)',\n demoBody:\n 'Creates a throwaway demo project, then runs validate → lock → build → verify → stage so you can test a full deterministic Fastlane-ready flow (folders + ZIP).',\n demoCmd: 'npx --yes shipscreens demo',\n demoBullets: [\n 'Project inputs: shipscreens.config.yml + assets/ + shipscreens.lock.json',\n 'Build outputs: fastlane/ + fastlane_assets.zip (repeatable artifact)',\n 'Staged upload root: stage/ (clean tree for deliver/supply)',\n ],\n demoNote: 'First run may take longer while npx downloads the package. Delete the demo folder anytime.',\n steps: [\n {\n title: 'Set up ShipScreens in the agent workspace',\n body: 'Let the agent initialize workspace-local MCP when supported, or choose the CLI when that is the safer path for this project.',\n },\n {\n title: 'Paste one natural-language handoff',\n body: 'Tell the agent to use ShipScreens while keeping the current screenshot workflow, and let it decide the smallest deterministic release path.',\n },\n {\n title: 'Let it build + verify + stage',\n body: 'The agent should produce clean upload roots, catch path drift and mixed folders, and stop only when device/locale scope or panel #1 messaging is unclear.',\n },\n ],\n preflightTitle: 'Before you run (prep checklist)',\n preflightBody: 'Have these ready so the CLI can run end-to-end without prompts.',\n preflightBullets: [\n 'PNG screenshots exist for every slide/locale/device path, or the app screens are visible on a connected device/emulator for capture.',\n 'Locales + devices are finalized (output structure depends on them).',\n 'Panel #1 outcome sentence is finalized per locale.',\n 'Copy text per locale is ready (config or CSV).',\n 'Background/logo assets are final if used.',\n ],\n preflightNote: 'agent-run stops early if any PNG is missing or still a placeholder.',\n heroQuickstartTitle: 'CLI fallback (when the agent picks CLI)',\n heroQuickstartBody: 'Fastest CLI path: inspect, plan, write a starter config if needed, capture connected device/emulator screens when no PNG folder exists, import screenshots if placeholders remain, then agent-run. It builds, verifies, stages, and writes proof reports for stable reruns.',\n heroQuickstartCmd: [\n 'npx --yes shipscreens inspect-release-context --json',\n 'npx --yes shipscreens plan-release --json',\n 'npx --yes shipscreens write-starter-config --profile appstore --json',\n 'npx --yes shipscreens capture-screenshots --platform auto --out screenshots --slot 1 --profile appstore --json',\n 'npx --yes shipscreens import-screenshots --from screenshots --profile appstore --json',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n heroProLabel: 'Then remove the watermark:',\n heroProCmd: 'npx --yes shipscreens auth login',\n allCommandsLabel: 'Copy all commands',\n allCommandsNote: 'Includes raw + rendered + auth.',\n allCommandsSections: {\n hero: 'Inspect + quickstart (raw mode)',\n local: 'Local quickstart (raw mode)',\n rendered: 'Rendered pipeline (CI-ready)',\n auth: 'CLI auth',\n authManual: 'CLI auth (manual)',\n },\n pathsTitle: 'Recommended quickstart (raw mode)',\n paths: [\n {\n id: 'raw',\n badge: 'RAW',\n title: 'No browser (raw mode)',\n body: 'Fastest path. Uses your PNGs directly; no Playwright required.',\n cmdKey: 'local',\n },\n {\n id: 'rendered',\n badge: 'RENDERED',\n title: 'UI-grade render (Playwright)',\n body: 'Headless Chromium runs the app renderer for UI-grade output.',\n cmdKey: 'rendered',\n },\n ],\n localQuickstartTitle: 'Local quickstart (no browser)',\n localQuickstartBody: 'Start here with raw mode; agent-run keeps verify, stage, and proof reports in the loop for upload safety.',\n localQuickstartCmd: [\n 'npx --yes shipscreens inspect-release-context --json',\n 'npx --yes shipscreens plan-release --json',\n '# if readiness is needs_config:',\n 'npx --yes shipscreens write-starter-config --profile appstore --json',\n '# if readiness is placeholder_assets:',\n 'npx --yes shipscreens import-screenshots --from screenshots --profile appstore --json',\n '# human fallback: npx --yes shipscreens wizard',\n '# or replace assets/en-US/01.png..05.png with your real screenshots',\n '# optional: npx --yes shipscreens copy import --csv copy.csv --import-mode merge',\n '# optional (submission QA): npx --yes shipscreens copy check --strict --write-pseudo-csv out/agent/copy-pseudo.csv --write-report-json out/agent/copy-check-report.json',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage --profile appstore',\n ].join('\\n'),\n proUnlockTitle: 'Remove watermark (CLI)',\n proUnlockBody:\n 'Once deterministic reruns work, start Agent Starter for one active app or Pro for full matrix exports, then run CLI auth to remove the watermark.',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun agent-run with --require-pro.',\n localTitle: 'Local-first execution (no uploads to ShipScreens)',\n localBullets: [\n 'Raw mode runs without Playwright or a browser.',\n 'Rendered mode uses headless Chromium locally or in CI.',\n 'The same contract can be called through the stdio MCP server for coding-agent workflows.',\n 'Screenshots stay on your machine (store upload still required).',\n ],\n promptTitle: 'Agent prompt (copy/paste)',\n promptBody: 'Use this to have an agent generate config + CSV reproducibly.',\n prompt: [\n 'You are preparing ShipScreens inputs for a local/CI CLI pipeline.',\n 'Output exactly two files in plain text with clear file markers:',\n '',\n 'FILE: shipscreens.config.yml',\n '<YAML>',\n '',\n 'FILE: copy.csv',\n '<CSV>',\n '',\n 'Constraints:',\n '- Use ASCII only.',\n '- Do not generate images. Only reference PNG file paths that will exist locally.',\n '- Use device ids from src/constants/devices.js (example: iphone69, iphone65, iphone61, ipad13, pixel8, pixel8pro, galaxy24ultra).',\n '- Keep slide count <= 10 unless explicitly asked.',\n '- Use 1-based slide numbering (Header_1, Subtitle_1, ...).',\n '- Fill slide text per locale directly in shipscreens.config.yml (CLI reads config only).',\n '- copy.csv is optional; keep it in sync with the config when provided.',\n '- If the device list is unclear, ask a single clarification question; otherwise default to iphone69 + pixel8.',\n ].join('\\n'),\n templateTitle: 'Config template (optional)',\n templateBody: 'Minimal example if you want to author manually.',\n template: [\n 'schemaVersion: 1',\n '',\n 'locales:',\n ' - id: en-US',\n '',\n 'devices:',\n ' - id: iphone69',\n ' platform: ios',\n ' - id: pixel8',\n ' platform: android',\n '',\n 'slides:',\n ' - id: 1',\n ' screenshot:',\n ' path: assets/en-US/01.png',\n ' text:',\n ' en-US:',\n ' header: New App',\n ' sub: Available Now',\n ].join('\\n'),\n quickstartTitle: 'Rendered pipeline (CI-ready)',\n quickstartBody: 'Rendered mode uses Playwright Chromium to run the app renderer headlessly; agent-run keeps verify, stage, and report proof attached.',\n quickstartCmd: [\n 'npm ci',\n 'npx playwright install --with-deps chromium',\n 'npx --yes shipscreens copy check --config shipscreens.config.yml --strict --write-pseudo-csv out/agent/copy-pseudo.csv --write-report-json out/agent/copy-check-report.json',\n 'npx --yes shipscreens agent-run --mode rendered --zip --out out/agent --stage --profile appstore --json',\n ].join('\\n'),\n authTitle: 'Manual login (if browser does not open)',\n authBody: 'Use the manual flow only when the browser sign-in fails.',\n authCmd: [\n 'npx --yes shipscreens auth login',\n '# optional (staging): add --domain <cognito-domain>',\n 'npx --yes shipscreens auth status',\n 'npx --yes shipscreens build -- --config shipscreens.config.yml --zip --out out/agent --require-pro',\n ].join('\\n'),\n authManualCmd: [\n 'npx --yes shipscreens auth login --manual',\n '# optional (staging): add --domain <cognito-domain>',\n '# open the printed URL, then run:',\n 'npx --yes shipscreens auth finish --redirect-url \"<URL>\"',\n ].join('\\n'),\n proTitle: 'Upgrade unlocks',\n proBullets: [\n 'Deterministic reruns in CI (rendered exports)',\n 'Full matrix batch exports (devices × locales)',\n 'CSV/JSON copy import at scale',\n 'No watermark',\n ],\n downloadTitle: 'Template pack (optional)',\n downloadBody: 'Download the config + CSV files if you do not want to use init.',\n downloadConfig: 'Download shipscreens.config.yml',\n downloadCsv: 'Download copy.csv',\n downloadCiTitle: 'CI templates',\n downloadCiBody: 'Use these starter workflows if you want a copy-paste CI lane for ShipScreens.',\n downloadCiGithub: 'Download GitHub Actions template',\n downloadCiBitrise: 'Download Bitrise template',\n },\n ja: {\n badge: 'Agent + CLI クイックスタート',\n title: 'スクショをビルド工程へ。coding agent に ShipScreens を渡す。',\n subtitle:\n 'Claude/Cursor/Copilot/Gemini などの coding agent をすでに使っているなら、短い自然文の指示を1つ渡すのが最短です。ShipScreens は新しい生成ツールではなく、今ある Figma/Fastlane/手動フローの上に、接続端末/エミュレータの現在画面 capture、このワークスペースで使う MCP または CLI、Fastlane 向けの再現できる出力、提出前チェック、訴求順固定、提出ルート固定、短い proof report を足すレイヤーです。',\n painLine:\n 'Figma/AI/手動エクスポートで画像は作れるが、リリースごとに Fastlane パス、訴求順、命名ドリフト、iPad審査、提出ルート、coding agent とCIの連携が崩れるチーム向けで、できれば coding agent に丸ごと任せたいケースに向いています。',\n ctas: {\n primary: 'エージェント向けプロンプトを見る',\n unlockPro: '$5 Agent Starter を開始',\n goPro: '$5 Agent Starter を開始',\n sample: 'サンプルを開く',\n },\n agentFirstTitle: 'coding agent に渡すプロンプト',\n agentFirstBody:\n 'このプロジェクトでは workspace-local MCP と CLI のどちらが良いかを、coding agent 自身に選ばせたいときに使います。',\n agentFirstPrompt:\n 'このモバイルアプリのリリース用スクリーンショットは、ShipScreens をビルド工程として使って進めてください。今の Figma/Fastlane/手動フローは維持し、この repo を確認して、このプロジェクトで使える MCP または CLI を選び、PNGフォルダが無ければ接続端末/エミュレータの現在画面を capture し、Fastlane 向けの再現できる出力を生成し、verify と stage を実行し、出力パス・警告・次の作業を短く報告してください。端末/言語スコープ、1枚目の訴求、ストアアップロード承認が不明なときだけ確認してください。',\n agentFirstBullets: [\n 'このワークスペースで MCP が使えるなら、まず設定して agent から ShipScreens を直接呼べるようにする。',\n 'スクショが接続端末/エミュレータ上にしか無い場合は、表示中の各画面を capture してから import する。',\n 'MCP が使えないなら、同じ手順のまま CLI に切り替える。',\n 'スクリーンショットはローカルに残し、ShipScreens は release-time build step だけを固める。',\n ],\n agentFirstNote: '価値は、短い指示で再現できるスクリーンショット出力と proof が返ることです。',\n agentFirstBootstrapCta: 'MCP設定を見る',\n agentFirstQuickstartCta: 'CLI クイックスタートへ',\n trustTitle: 'アップグレード前に料金・規約を確認',\n trustLinks: {\n pricing: '料金',\n terms: '利用規約',\n privacy: 'プライバシー',\n legal: '特商法表記',\n security: 'セキュリティ',\n proof: '実績',\n },\n demoTitle: 'デモを書き出す(素材不要)',\n demoBody:\n 'デモ用プロジェクトを作成し、validate → lock → build → verify → stage を一括実行して、決定的な提出フローを確認します(アップロード向け出力 + ZIP)。',\n demoCmd: 'npx --yes shipscreens demo',\n demoBullets: [\n '入力: shipscreens.config.yml + assets/ + shipscreens.lock.json',\n '出力: fastlane/ + fastlane_assets.zip(再現性artifact)',\n 'stage/: deliver/supply 向けのクリーンなルート',\n ],\n demoNote: '初回は npx がパッケージを取得するため時間がかかる場合があります。デモは削除してOKです。',\n steps: [\n {\n title: 'agent workspace に ShipScreens を入れる',\n body: 'このプロジェクトで MCP が使えるなら設定し、難しければ CLI を選ばせます。',\n },\n {\n title: '自然文で 1 回だけ依頼する',\n body: '今のスクショ運用を維持したまま ShipScreens で進めてと AIエージェントに渡し、最小の再現できる release path を選ばせます。',\n },\n {\n title: 'build + verify + stage まで進めさせる',\n body: 'agent が clean upload root を作り、パス崩れ・訴求順崩れ・混在事故をアップロード前に検知します。',\n },\n ],\n preflightTitle: '実行前の準備チェック',\n preflightBody: 'ここまで決まっているとCLIが止まらずに最後まで回ります。',\n preflightBullets: [\n 'PNGが全スライド/ロケール/端末パスに存在、または接続端末/エミュレータで対象画面を表示できる。',\n 'ロケールと端末構成が確定(出力構成が固定)。',\n '各ロケールで1枚目の成果文が確定。',\n '各ロケールのコピーが準備済み(config or CSV)。',\n '背景/ロゴを使う場合は素材確定。',\n ],\n preflightNote: 'agent-run はPNGが欠けている/プレースホルダーだと停止します。',\n heroQuickstartTitle: 'CLI fallback(agent が CLI を選んだ場合)',\n heroQuickstartBody: 'CLI 最短は inspect → plan → 必要なら write-starter-config → PNGフォルダが無ければ capture-screenshots → placeholder が残るなら import-screenshots → agent-run。build / verify / stage / proof report まで固定して再実行できます。',\n heroQuickstartCmd: [\n 'npx --yes shipscreens inspect-release-context --json',\n 'npx --yes shipscreens plan-release --json',\n 'npx --yes shipscreens write-starter-config --profile appstore --json',\n 'npx --yes shipscreens capture-screenshots --platform auto --out screenshots --slot 1 --profile appstore --json',\n 'npx --yes shipscreens import-screenshots --from screenshots --profile appstore --json',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n heroProLabel: '次に透かしを解除:',\n heroProCmd: 'npx --yes shipscreens auth login',\n allCommandsLabel: '全コマンドをコピー',\n allCommandsNote: 'raw + rendered + 認証をまとめてコピー。',\n allCommandsSections: {\n hero: 'inspect + 実行(raw)',\n local: 'ローカル最短(raw)',\n rendered: 'Rendered pipeline(CI-ready)',\n auth: 'CLI認証',\n authManual: 'CLI認証(手動)',\n },\n pathsTitle: '最短パス(raw mode)',\n paths: [\n {\n id: 'raw',\n badge: 'RAW',\n title: 'ブラウザ不要(raw mode)',\n body: '最速。PNGをそのまま使うので Playwright 不要。',\n cmdKey: 'local',\n },\n {\n id: 'rendered',\n badge: 'RENDERED',\n title: 'UI品質(Playwright)',\n body: 'Headless Chromium でUIレンダリングを再現。',\n cmdKey: 'rendered',\n },\n ],\n localQuickstartTitle: 'ローカル最短(ブラウザ不要)',\n localQuickstartBody: 'まずは raw モードで最短実行し、agent-run で verify / stage / proof report を常設して固定。',\n localQuickstartCmd: [\n 'npx --yes shipscreens inspect-release-context --json',\n 'npx --yes shipscreens plan-release --json',\n '# readiness が needs_config の場合:',\n 'npx --yes shipscreens write-starter-config --profile appstore --json',\n '# readiness が placeholder_assets の場合:',\n 'npx --yes shipscreens import-screenshots --from screenshots --profile appstore --json',\n '# 人間向け fallback: npx --yes shipscreens wizard',\n '# もしくは assets/en-US/01.png〜05.png を実スクショに差し替え',\n '# 任意: npx --yes shipscreens copy import --csv copy.csv --import-mode merge',\n '# 任意(提出QA): npx --yes shipscreens copy check --strict --write-pseudo-csv out/agent/copy-pseudo.csv --write-report-json out/agent/copy-check-report.json',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage --profile appstore',\n ].join('\\n'),\n proUnlockTitle: '透かし解除(CLI)',\n proUnlockBody:\n '再実行しやすいフローが固まったら、1アプリなら Agent Starter、フル一括なら Pro を開始し、CLI認証で透かしを解除します。',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は --require-pro で再実行。',\n localTitle: 'ローカル完結実行(ShipScreensへアップロードなし)',\n localBullets: [\n 'raw モードは Playwright 不要・ブラウザ不要。',\n 'rendered モードは Headless Chromium をローカル/CIで実行。',\n '同じ契約を stdio MCP server から coding agent に渡せます。',\n 'スクショは端末に残る(ストアへのアップロードは必要)。',\n ],\n promptTitle: 'Agent プロンプト(コピペ)',\n promptBody: 'エージェントに config + CSV を安定して生成させるテンプレです。',\n prompt: [\n 'You are preparing ShipScreens inputs for a local/CI CLI pipeline.',\n 'Output exactly two files in plain text with clear file markers:',\n '',\n 'FILE: shipscreens.config.yml',\n '<YAML>',\n '',\n 'FILE: copy.csv',\n '<CSV>',\n '',\n 'Constraints:',\n '- Use ASCII only.',\n '- Do not generate images. Only reference PNG file paths that will exist locally.',\n '- Use device ids from src/constants/devices.js (example: iphone69, iphone65, iphone61, ipad13, pixel8, pixel8pro, galaxy24ultra).',\n '- Keep slide count <= 10 unless explicitly asked.',\n '- Use 1-based slide numbering (Header_1, Subtitle_1, ...).',\n '- Fill slide text per locale directly in shipscreens.config.yml (CLI reads config only).',\n '- copy.csv is optional; keep it in sync with the config when provided.',\n '- If the device list is unclear, ask a single clarification question; otherwise default to iphone69 + pixel8.',\n ].join('\\n'),\n templateTitle: 'config テンプレ(任意)',\n templateBody: 'init を使わずに手書きする場合の最小例。',\n template: [\n 'schemaVersion: 1',\n '',\n 'locales:',\n ' - id: en-US',\n '',\n 'devices:',\n ' - id: iphone69',\n ' platform: ios',\n ' - id: pixel8',\n ' platform: android',\n '',\n 'slides:',\n ' - id: 1',\n ' screenshot:',\n ' path: assets/en-US/01.png',\n ' text:',\n ' en-US:',\n ' header: New App',\n ' sub: Available Now',\n ].join('\\n'),\n quickstartTitle: 'Rendered pipeline(CI-ready)',\n quickstartBody: 'Playwright Chromium でUIをヘッドレス実行し、agent-run で verify / stage / proof report を一体化します。',\n quickstartCmd: [\n 'npm ci',\n 'npx playwright install --with-deps chromium',\n 'npx --yes shipscreens copy check --config shipscreens.config.yml --strict --write-pseudo-csv out/agent/copy-pseudo.csv --write-report-json out/agent/copy-check-report.json',\n 'npx --yes shipscreens agent-run --mode rendered --zip --out out/agent --stage --profile appstore --json',\n ].join('\\n'),\n authTitle: '手動ログイン(ブラウザが開かない場合)',\n authBody: 'ブラウザが開かない時だけ手動ログインを使います。',\n authCmd: [\n 'npx --yes shipscreens auth login',\n '# 任意 (stg): --domain <cognito-domain> を付与',\n 'npx --yes shipscreens auth status',\n 'npx --yes shipscreens build -- --config shipscreens.config.yml --zip --out out/agent --require-pro',\n ].join('\\n'),\n authManualCmd: [\n 'npx --yes shipscreens auth login --manual',\n '# 任意 (stg): --domain <cognito-domain> を付与',\n '# 表示されたURLを開いた後、以下を実行:',\n 'npx --yes shipscreens auth finish --redirect-url \"<URL>\"',\n ].join('\\n'),\n proTitle: 'Proでできること',\n proBullets: [\n 'CIで決定的に再実行(rendered出力)',\n 'フル一括(端末×言語)',\n 'CSV/JSON copy 取り込み',\n '透かしなし',\n ],\n downloadTitle: 'テンプレのダウンロード(任意)',\n downloadBody: 'init を使わない場合のテンプレをダウンロードできます。',\n downloadConfig: 'shipscreens.config.yml をダウンロード',\n downloadCsv: 'copy.csv をダウンロード',\n downloadCiTitle: 'CIテンプレ',\n downloadCiBody: 'ShipScreens用のCIレーンをすぐ作るための雛形です。',\n downloadCiGithub: 'GitHub Actions テンプレをダウンロード',\n downloadCiBitrise: 'Bitrise テンプレをダウンロード',\n },\n};\n\nconst MCP_SERVER_ARGS = ['--yes', 'shipscreens@latest', 'mcp', 'serve'];\n\nconst prettyJson = (value) => JSON.stringify(value, null, 2);\n\nconst STANDARD_MCP_BOOTSTRAP = prettyJson({\n mcpServers: {\n shipscreens: {\n command: 'npx',\n args: MCP_SERVER_ARGS,\n },\n },\n});\n\nconst VSCODE_MCP_BOOTSTRAP = prettyJson({\n servers: {\n shipscreens: {\n type: 'stdio',\n command: 'npx',\n args: MCP_SERVER_ARGS,\n },\n },\n});\n\nconst CLIENT_BOOTSTRAP_COPY = {\n en: {\n title: 'AI client setup',\n body: 'Run one project-local `mcp init` command first, then use manual JSON only when you need to inspect or download the exact config.',\n commandTitle: 'Write config from CLI',\n configTitle: 'Manual JSON fallback',\n commandCopyLabel: 'Copy init command',\n configCopyLabel: 'Copy JSON',\n windowsNote:\n 'Claude Code on Windows can switch to `cmd` + `/c npx --yes shipscreens@latest mcp serve` if plain `npx` resolution fails.',\n openAiTitle: 'OpenAI Responses API',\n openAiBullets: [\n '`tool_choice=auto` lets the model decide when to call ShipScreens.',\n 'Use `tool_choice=required` when the workflow must force a ShipScreens tool call.',\n 'Keep the first command fixed: `npx --yes shipscreens@latest demo`.',\n ],\n cards: [\n {\n id: 'claude_code',\n title: 'Claude Code',\n configFile: '.mcp.json',\n note: 'Project-local MCP config for Claude Code.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client claude',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-claude-code-mcp.json',\n downloadLabel: 'Download .mcp.json',\n asset: 'client_bootstrap_claude_code',\n },\n {\n id: 'cursor',\n title: 'Cursor',\n configFile: '.cursor/mcp.json',\n note: 'Project-local MCP config for Cursor.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client cursor',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-cursor-mcp.json',\n downloadLabel: 'Download .cursor/mcp.json',\n asset: 'client_bootstrap_cursor',\n },\n {\n id: 'vscode_copilot',\n title: 'VS Code Copilot',\n configFile: '.vscode/mcp.json',\n note: 'Workspace-level MCP config for VS Code agent mode / Copilot.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client vscode',\n config: VSCODE_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-vscode-mcp.json',\n downloadLabel: 'Download .vscode/mcp.json',\n asset: 'client_bootstrap_vscode_copilot',\n },\n {\n id: 'gemini_cli',\n title: 'Gemini CLI',\n configFile: '.gemini/settings.json',\n note: 'Project-local or home-level MCP config for Gemini CLI.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client gemini',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-gemini-mcp-settings.json',\n downloadLabel: 'Download .gemini/settings.json',\n asset: 'client_bootstrap_gemini_cli',\n },\n ],\n },\n ja: {\n title: 'AI client setup',\n body: 'まずこのプロジェクト用の `mcp init` コマンドを 1 つ実行し、JSON を手で貼るのは中身確認やダウンロードが必要なときだけにします。',\n commandTitle: 'CLI で config を書く',\n configTitle: '手動 JSON の fallback',\n commandCopyLabel: 'init コマンドをコピー',\n configCopyLabel: 'JSON をコピー',\n windowsNote:\n 'Windows の Claude Code で `npx` 解決に失敗する場合は、`cmd` + `/c npx --yes shipscreens@latest mcp serve` に切り替えてください。',\n openAiTitle: 'OpenAI Responses API',\n openAiBullets: [\n '`tool_choice=auto` はモデルに ShipScreens 呼び出し可否を任せます。',\n '必ず ShipScreens を実行したいフローでは `tool_choice=required` を使います。',\n '最初のコマンドは `npx --yes shipscreens@latest demo` に固定するとぶれません。',\n ],\n cards: [\n {\n id: 'claude_code',\n title: 'Claude Code',\n configFile: '.mcp.json',\n note: 'Claude Code 向けのこのプロジェクト用 MCP 設定。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client claude',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-claude-code-mcp.json',\n downloadLabel: '.mcp.json をダウンロード',\n asset: 'client_bootstrap_claude_code',\n },\n {\n id: 'cursor',\n title: 'Cursor',\n configFile: '.cursor/mcp.json',\n note: 'Cursor 向けのこのプロジェクト用 MCP 設定。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client cursor',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-cursor-mcp.json',\n downloadLabel: '.cursor/mcp.json をダウンロード',\n asset: 'client_bootstrap_cursor',\n },\n {\n id: 'vscode_copilot',\n title: 'VS Code Copilot',\n configFile: '.vscode/mcp.json',\n note: 'VS Code agent mode / Copilot 向けの workspace MCP config。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client vscode',\n config: VSCODE_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-vscode-mcp.json',\n downloadLabel: '.vscode/mcp.json をダウンロード',\n asset: 'client_bootstrap_vscode_copilot',\n },\n {\n id: 'gemini_cli',\n title: 'Gemini CLI',\n configFile: '.gemini/settings.json',\n note: 'Gemini CLI の project-local / home-level MCP config。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client gemini',\n config: STANDARD_MCP_BOOTSTRAP,\n downloadHref: '/downloads/shipscreens-gemini-mcp-settings.json',\n downloadLabel: '.gemini/settings.json をダウンロード',\n asset: 'client_bootstrap_gemini_cli',\n },\n ],\n },\n};\n\nconst INTENT_ROUTE_COPY = {\n en: {\n appStoreAutomation: {\n intentKey: 'app_store_screenshot_automation',\n pathPrefix: '/tools/app-store-screenshot-automation',\n pageTitle: 'App Store Screenshot Automation - ShipScreens',\n badge: 'Automation intent',\n title: 'Automate App Store screenshots as a deterministic release step.',\n body: 'If you came for App Store screenshot automation, start by pasting the agent prompt so the coding agent can choose MCP or CLI, then lock the upload checks so reruns stay deterministic.',\n primaryCta: 'Paste the agent prompt',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Start with one natural-language handoff, then keep the upload checks as the contract.',\n },\n googlePlayAutomation: {\n intentKey: 'google_play_screenshot_automation',\n pathPrefix: '/tools/google-play-screenshot-automation',\n pageTitle: 'Google Play Screenshot Automation - ShipScreens',\n badge: 'Automation intent',\n title: 'Automate Google Play screenshots without breaking upload roots.',\n body: 'If you came for Google Play screenshot automation, start by pasting the agent prompt so the coding agent can choose MCP or CLI, then lock folder contracts and deterministic reruns before supply uploads.',\n primaryCta: 'Paste the agent prompt',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Start with one natural-language handoff, then lock the upload structure.',\n },\n appStoreLocalization: {\n intentKey: 'app_store_localization_automation',\n pathPrefix: '/tools/app-store-localization-screenshot-automation',\n pageTitle: 'App Store Localization Screenshot Automation - ShipScreens',\n badge: 'Localization intent',\n title: 'Fix locale x device screenshot drift before release week.',\n body: 'If you came for localization automation, start by pasting the agent prompt, then lock locale/device contracts and deterministic matrix reruns.',\n primaryCta: 'Paste the agent prompt',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Start with one natural-language handoff, then scale locale/device contracts.',\n },\n fastlanePipeline: {\n intentKey: 'fastlane_screenshot_pipeline',\n pathPrefix: '/tools/fastlane-screenshot-pipeline',\n pageTitle: 'Fastlane Screenshot Pipeline - ShipScreens',\n badge: 'Pipeline intent',\n title: 'Build a Fastlane-ready screenshot pipeline with deterministic reruns.',\n body: 'If you came for a Fastlane screenshot pipeline, start with exact folder + naming contracts, then run the upload checks on each release.',\n primaryCta: 'Open Fastlane folder map',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Folder contract first, then CI reruns.',\n },\n screenshotCiPipeline: {\n intentKey: 'screenshot_ci_pipeline',\n pathPrefix: '/tools/screenshot-ci-pipeline',\n pageTitle: 'Screenshot CI Pipeline - ShipScreens',\n badge: 'CI intent',\n title: 'Turn screenshot updates into a deterministic CI step.',\n body: 'If you came for screenshot CI pipeline setup, start by pasting the agent prompt, then let the agent set up MCP or CLI and enforce the upload checks before store upload.',\n primaryCta: 'Paste the agent prompt',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Have CI fail on drift before submission, starting from one agent instruction.',\n },\n claudeCodeMcp: {\n intentKey: 'claude_code_mcp_screenshot_automation',\n pathPrefix: '/tools/claude-code-mcp-screenshot-automation',\n pageTitle: 'Claude Code MCP Screenshot Automation - ShipScreens',\n badge: 'MCP intent',\n title: 'Wire ShipScreens into Claude Code with one workspace-local MCP setup.',\n body: 'If you came for Claude Code MCP screenshot automation, start with the MCP setup section, then run inspect -> plan -> write-starter-config when needed -> import-screenshots when placeholders remain -> agent-run.',\n primaryCta: 'Open MCP setup',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Workspace-local MCP setup first, deterministic reruns second.',\n },\n cursorMcp: {\n intentKey: 'cursor_mcp_screenshot_automation',\n pathPrefix: '/tools/cursor-mcp-screenshot-automation',\n pageTitle: 'Cursor MCP Screenshot Automation - ShipScreens',\n badge: 'MCP intent',\n title: 'Give Cursor a deterministic screenshot tool instead of another prompt-only workflow.',\n body: 'If you came for Cursor MCP screenshot automation, start with the `.cursor/mcp.json` setup, then keep the release flow on inspect -> plan -> write-starter-config when needed -> import-screenshots when placeholders remain -> agent-run.',\n primaryCta: 'Open MCP setup',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Treat screenshot reruns as a workspace tool, not a one-off prompt.',\n },\n vscodeCopilotMcp: {\n intentKey: 'vscode_copilot_mcp_screenshot_automation',\n pathPrefix: '/tools/vscode-copilot-mcp-screenshot-automation',\n pageTitle: 'VS Code Copilot MCP Screenshot Automation - ShipScreens',\n badge: 'MCP intent',\n title: 'Add ShipScreens to VS Code Copilot as a stdio automation tool.',\n body: 'If you came for VS Code Copilot MCP screenshot automation, start with `.vscode/mcp.json`, then use the deterministic CLI path for inspect -> plan -> write-starter-config when needed -> import-screenshots when placeholders remain -> agent-run.',\n primaryCta: 'Open MCP setup',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'The config contract matters more than prompt prose once CI owns reruns.',\n },\n geminiCliMcp: {\n intentKey: 'gemini_cli_mcp_screenshot_automation',\n pathPrefix: '/tools/gemini-cli-mcp-screenshot-automation',\n pageTitle: 'Gemini CLI MCP Screenshot Automation - ShipScreens',\n badge: 'MCP intent',\n title: 'Use Gemini CLI as a deterministic screenshot operator, not a template generator.',\n body: 'If you came for Gemini CLI MCP screenshot automation, start with the MCP setup section, then move into inspect -> plan -> write-starter-config when needed -> import-screenshots when placeholders remain -> agent-run.',\n primaryCta: 'Open MCP setup',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Keep the prompt small and the CLI contract explicit.',\n },\n openaiResponsesTool: {\n intentKey: 'openai_responses_tool_screenshot_automation',\n pathPrefix: '/tools/openai-responses-tool-screenshot-automation',\n pageTitle: 'OpenAI Responses Tool Screenshot Automation - ShipScreens',\n badge: 'Tool intent',\n title: 'Make screenshot automation an explicit tool call in OpenAI workflows.',\n body: 'If you came for OpenAI Responses tool screenshot automation, use the setup/notes section first and force `tool_choice=required` when ShipScreens must execute.',\n primaryCta: 'Open MCP setup',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Tool-choice policy belongs in the contract, not in a best-effort prompt.',\n },\n deterministicReruns: {\n intentKey: 'deterministic_screenshot_reruns',\n pathPrefix: '/tools/deterministic-screenshot-reruns',\n pageTitle: 'Deterministic Screenshot Reruns - ShipScreens',\n badge: 'Determinism intent',\n title: 'Make screenshot reruns reproducible across releases.',\n body: 'If deterministic reruns are your main pain, lock panel order + locale token + device token naming before touching visuals.',\n primaryCta: 'Open naming + slot map guide',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Naming drift is usually the hidden bottleneck.',\n },\n namingOrderDrift: {\n intentKey: 'screenshot_naming_order_drift',\n pathPrefix: '/tools/screenshot-naming-order-drift',\n pageTitle: 'Screenshot Naming Order Drift - ShipScreens',\n badge: 'Drift intent',\n title: 'Stop screenshot naming and order drift before release week.',\n body: 'If naming/order drift is breaking reruns, lock 01..05 slots, locale/device tokens, and upload roots before you touch the visuals.',\n primaryCta: 'Open naming + folder contract guide',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'The shortest fix is usually slot-map discipline, not more design rework.',\n },\n appStore: {\n intentKey: 'app_store_requirements',\n pathPrefix: '/tools/app-store-screenshot-requirements-checklist',\n pageTitle: 'App Store Screenshot Requirements Checklist - ShipScreens',\n badge: 'Requirements intent',\n title: 'Start with a checklist flow before implementation.',\n body: 'If you came for an App Store screenshot requirements checklist, start with the App Review + ASO quick check, then move to pay-first or partner support.',\n primaryCta: 'Open App Review + ASO checklist',\n primaryHref: '/tools/app-review-aso/#checks',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Run checklist first, then choose the offer path.',\n },\n googlePlay: {\n intentKey: 'google_play_requirements',\n pathPrefix: '/tools/google-play-screenshot-requirements-checklist',\n pageTitle: 'Google Play Screenshot Requirements Checklist - ShipScreens',\n badge: 'Requirements intent',\n title: 'Start with a checklist flow before implementation.',\n body: 'If you came for a Google Play screenshot requirements checklist, start with the App Review + ASO quick check, then move to pay-first or partner support.',\n primaryCta: 'Open App Review + ASO checklist',\n primaryHref: '/tools/app-review-aso/#checks',\n payFirstCta: 'Open pay-first path',\n designPartnerCta: 'Open Design Partner',\n proofCta: 'Open proof + case snapshots',\n note: 'Run checklist first, then choose the offer path.',\n },\n },\n ja: {\n appStoreAutomation: {\n intentKey: 'app_store_screenshot_automation',\n pathPrefix: '/tools/app-store-screenshot-automation',\n pageTitle: 'App Store スクリーンショット自動化 - ShipScreens',\n badge: '自動化導線',\n title: 'App Store スクショ更新を毎リリース再現可能にします。',\n body: 'App Store スクショ自動化目的なら、まずエージェント向けプロンプトから始め、coding agent に MCP か CLI を選ばせたうえで提出前チェックを固定して再実行のズレを止めます。',\n primaryCta: 'エージェント向けプロンプトを見る',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先に自然文で1回指示し、その後 提出前チェック を契約にします。',\n },\n googlePlayAutomation: {\n intentKey: 'google_play_screenshot_automation',\n pathPrefix: '/tools/google-play-screenshot-automation',\n pageTitle: 'Google Play スクリーンショット自動化 - ShipScreens',\n badge: '自動化導線',\n title: 'Google Play の提出ルートを崩さず自動化します。',\n body: 'Google Play スクショ自動化目的なら、まずエージェント向けプロンプトから始め、coding agent に MCP か CLI を選ばせたうえでフォルダ契約を固定し、supply前に再実行を検証します。',\n primaryCta: 'エージェント向けプロンプトを見る',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先に自然文で1回指示し、その後提出ルートを固定します。',\n },\n appStoreLocalization: {\n intentKey: 'app_store_localization_automation',\n pathPrefix: '/tools/app-store-localization-screenshot-automation',\n pageTitle: 'App Store ローカライズスクショ自動化 - ShipScreens',\n badge: 'ローカライズ導線',\n title: 'locale x device の崩れをリリース前に止めます。',\n body: 'ローカライズ自動化目的なら、まずエージェント向けプロンプトから始め、locale/device 契約を固定したうえで行列再実行を回します。',\n primaryCta: 'エージェント向けプロンプトを見る',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先に自然文で1回指示し、その後 locale/device 契約を広げます。',\n },\n fastlanePipeline: {\n intentKey: 'fastlane_screenshot_pipeline',\n pathPrefix: '/tools/fastlane-screenshot-pipeline',\n pageTitle: 'Fastlane スクリーンショットパイプライン - ShipScreens',\n badge: 'パイプライン導線',\n title: 'Fastlane向けスクショパイプラインを再現可能にします。',\n body: 'Fastlane パイプライン目的なら、フォルダ/命名契約を先に固定し、提出前チェックを毎リリースで実行します。',\n primaryCta: 'Fastlane フォルダ設計を開く',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先にフォルダ契約、次にCI再実行です。',\n },\n screenshotCiPipeline: {\n intentKey: 'screenshot_ci_pipeline',\n pathPrefix: '/tools/screenshot-ci-pipeline',\n pageTitle: 'スクリーンショット CI パイプライン - ShipScreens',\n badge: 'CI導線',\n title: 'スクショ更新を CI の再現できるステップにします。',\n body: 'Screenshot CI 目的なら、まずエージェント向けプロンプトから始め、MCP か CLI を設定させて提出前チェックを必須化します。',\n primaryCta: 'エージェント向けプロンプトを見る',\n primaryHref: '/tools/agent-cli/#tell-your-agent',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '提出後ではなく、1回の自然文の指示から CI で先に失敗を検出します。',\n },\n claudeCodeMcp: {\n intentKey: 'claude_code_mcp_screenshot_automation',\n pathPrefix: '/tools/claude-code-mcp-screenshot-automation',\n pageTitle: 'Claude Code MCP スクリーンショット自動化 - ShipScreens',\n badge: 'MCP導線',\n title: 'Claude Code に workspace-local MCP 設定で ShipScreens を渡します。',\n body: 'Claude Code MCP 目的なら、まず MCP設定を済ませ、その後 inspect -> plan -> 必要なら write-starter-config -> placeholder が残るなら import-screenshots -> agent-run の順で固定します。',\n primaryCta: 'MCP設定を見る',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先にこのプロジェクト用 MCP を設定し、そのあと再実行しやすい契約に載せます。',\n },\n cursorMcp: {\n intentKey: 'cursor_mcp_screenshot_automation',\n pathPrefix: '/tools/cursor-mcp-screenshot-automation',\n pageTitle: 'Cursor MCP スクリーンショット自動化 - ShipScreens',\n badge: 'MCP導線',\n title: 'Cursor に prompt だけでなく決定的な screenshot tool を渡します。',\n body: 'Cursor MCP 目的なら、まず `.cursor/mcp.json` を貼り、その後 inspect -> plan -> 必要なら write-starter-config -> placeholder が残るなら import-screenshots -> agent-run を release 契約として固定します。',\n primaryCta: 'MCP設定を見る',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '一発プロンプトではなく workspace tool として扱います。',\n },\n vscodeCopilotMcp: {\n intentKey: 'vscode_copilot_mcp_screenshot_automation',\n pathPrefix: '/tools/vscode-copilot-mcp-screenshot-automation',\n pageTitle: 'VS Code Copilot MCP スクリーンショット自動化 - ShipScreens',\n badge: 'MCP導線',\n title: 'VS Code Copilot に stdio automation tool として ShipScreens を追加します。',\n body: 'VS Code Copilot MCP 目的なら、まず `.vscode/mcp.json` を設定し、その後 inspect -> plan -> 必要なら write-starter-config -> placeholder が残るなら import-screenshots -> agent-run の決定的フローに乗せます。',\n primaryCta: 'MCP設定を見る',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: 'prompt より先に stdio 契約を固定します。',\n },\n geminiCliMcp: {\n intentKey: 'gemini_cli_mcp_screenshot_automation',\n pathPrefix: '/tools/gemini-cli-mcp-screenshot-automation',\n pageTitle: 'Gemini CLI MCP スクリーンショット自動化 - ShipScreens',\n badge: 'MCP導線',\n title: 'Gemini CLI をテンプレ生成ではなく決定的 screenshot operator にします。',\n body: 'Gemini CLI MCP 目的なら、まず MCP設定を済ませ、その後 inspect -> plan -> 必要なら write-starter-config -> placeholder が残るなら import-screenshots -> agent-run を固定します。',\n primaryCta: 'MCP設定を見る',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '短いプロンプトより、明示的な CLI 契約を優先します。',\n },\n openaiResponsesTool: {\n intentKey: 'openai_responses_tool_screenshot_automation',\n pathPrefix: '/tools/openai-responses-tool-screenshot-automation',\n pageTitle: 'OpenAI Responses Tool スクリーンショット自動化 - ShipScreens',\n badge: 'Tool導線',\n title: 'OpenAI workflow で screenshot automation を明示的な tool call にします。',\n body: 'OpenAI Responses tool 目的なら、まず setup / note を確認し、ShipScreens を必ず呼ばせたい箇所では `tool_choice=required` を使います。',\n primaryCta: 'MCP設定を見る',\n primaryHref: '/tools/agent-cli/#agent-bootstrap',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: 'tool-choice 方針は prompt ではなく契約に置きます。',\n },\n deterministicReruns: {\n intentKey: 'deterministic_screenshot_reruns',\n pathPrefix: '/tools/deterministic-screenshot-reruns',\n pageTitle: '決定的スクリーンショット再実行 - ShipScreens',\n badge: '再実行導線',\n title: '毎リリースで同じ結果を再現できるようにします。',\n body: '決定的再実行が目的なら、見た目より先に panel順 + locale token + device token 命名を固定します。',\n primaryCta: '命名/slot mapガイドを開く',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '隠れたボトルネックは命名ドリフトです。',\n },\n namingOrderDrift: {\n intentKey: 'screenshot_naming_order_drift',\n pathPrefix: '/tools/screenshot-naming-order-drift',\n pageTitle: 'スクリーンショット命名・順序ドリフト - ShipScreens',\n badge: 'ドリフト導線',\n title: '命名と順序のドリフトをリリース前に止めます。',\n body: '命名/順序のズレが再実行を壊すなら、見た目を触る前に 01..05 slot、locale/device token、upload root を固定します。',\n primaryCta: '命名/フォルダ契約ガイドを開く',\n primaryHref: '/tools/fastlane-screenshots/',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '最短の対策はデザイン追加ではなく slot map の固定です。',\n },\n appStore: {\n intentKey: 'app_store_requirements',\n pathPrefix: '/tools/app-store-screenshot-requirements-checklist',\n pageTitle: 'App Store スクリーンショット要件チェックリスト - ShipScreens',\n badge: '要件チェック導線',\n title: '実装に入る前に、まずチェックフローを通します。',\n body: 'App Store の要件チェック目的で来た場合は、先に App Review / ASO クイックチェックを通し、その後 pay-first か partner 支援に進んでください。',\n primaryCta: 'App Review / ASO チェックを開く',\n primaryHref: '/tools/app-review-aso/#checks',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先にチェック、次にオファー選択の順序で進めます。',\n },\n googlePlay: {\n intentKey: 'google_play_requirements',\n pathPrefix: '/tools/google-play-screenshot-requirements-checklist',\n pageTitle: 'Google Play スクリーンショット要件チェックリスト - ShipScreens',\n badge: '要件チェック導線',\n title: '実装に入る前に、まずチェックフローを通します。',\n body: 'Google Play の要件チェック目的で来た場合は、先に App Review / ASO クイックチェックを通し、その後 pay-first か partner 支援に進んでください。',\n primaryCta: 'App Review / ASO チェックを開く',\n primaryHref: '/tools/app-review-aso/#checks',\n payFirstCta: 'pay-first 導線を開く',\n designPartnerCta: 'Design Partner を開く',\n proofCta: '実績・証跡を確認する',\n note: '先にチェック、次にオファー選択の順序で進めます。',\n },\n },\n};\n\nconst AgentCli = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n const partnerCopy = t('landing.partner', { returnObjects: true }) || {};\n const partnerScopeBullets = Array.isArray(partnerCopy.scopeBullets) ? partnerCopy.scopeBullets.filter(Boolean) : [];\n const currentPath = typeof window !== 'undefined' ? window.location.pathname : '/tools/agent-cli/';\n const intentCopySet = INTENT_ROUTE_COPY[lang] || INTENT_ROUTE_COPY.en;\n const intentRouteCopy = Object.values(intentCopySet).find((candidate) => currentPath.startsWith(candidate.pathPrefix)) || null;\n const intentRouteEntrySource = intentRouteCopy ? `${intentRouteCopy.intentKey}_intent` : 'agent_cli';\n const analyticsParams = { intent_route: intentRouteCopy?.intentKey || 'default' };\n const trackEvent = (name, params = {}) => baseTrackEvent(name, { ...params, ...analyticsParams });\n const trackEventAndFollowLink = (event, name, params = {}) =>\n baseTrackEventAndFollowLink(event, name, { ...params, ...analyticsParams });\n const buildInternalHref = (href, suffix) => withEntrySource(href, `${intentRouteEntrySource}_${suffix}`);\n const designPartnerPreset = getDesignPartnerPresetForIntent(intentRouteCopy?.intentKey) || 'ci_determinism';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const agentWorkflowAlt =\n lang === 'ja'\n ? '接続端末とエミュレータのスクリーンショットから、coding agent がストア提出用画像とFastlane-readyフォルダを作る流れ'\n : 'Coding agent workflow turning connected device and emulator screenshots into store-ready panels and a Fastlane-ready folder';\n const agentWorkflowCaption =\n lang === 'ja'\n ? '伝えることは自然文で十分です。agent が画面素材を探し、足りなければ接続端末/エミュレータから capture し、verify/stage proof まで残します。'\n : 'Natural language is enough: the agent finds screen assets, captures from a connected device or emulator when needed, then leaves verify/stage proof.';\n const trustDisclosure =\n lang === 'ja'\n ? '返金: デジタルサービスの性質上、法令で必要な場合を除き返金はありません。いつでも解約可能です。会社: Shimauma Services, Inc.(東京)。'\n : 'Refund: due to the digital nature of the service, payments are non-refundable except where required by law. Cancel anytime. Company: Shimauma Services, Inc. (Tokyo).';\n const trustContactLabel = lang === 'ja' ? '問い合わせ' : 'Contact';\n const partnerSubject = t('landing.partner.emailSubject', { defaultValue: 'ShipScreens first export review' });\n const partnerBody = t('landing.partner.emailBody', { defaultValue: '' });\n const partnerMailto = `mailto:${supportEmail}?subject=${encodeURIComponent(partnerSubject)}&body=${encodeURIComponent(\n partnerBody\n )}`;\n const openAppHref = buildInternalHref('/app/?sample=5panel', 'open_app_header');\n const agentStarterCheckoutConfigured = Boolean(import.meta.env?.VITE_STRIPE_AGENT_STARTER_PRICE_ID);\n const buildAgentStarterRequestHref = (suffix) =>\n buildDesignPartnerHref({\n entrySource: `${intentRouteEntrySource}_${suffix}`,\n preset: 'ci_determinism',\n reviewMode: 'async_email',\n releaseTimeline: 'this_month',\n scope: 'iphone_first',\n workflow: 'fastlane_ci',\n blocker: 'upload_roots',\n });\n const goProHeroHref = agentStarterCheckoutConfigured\n ? buildInternalHref('/app/?sample=5panel&upgrade=1&billing=starter', 'go_pro_hero')\n : buildAgentStarterRequestHref('agent_starter_request_hero');\n const goProFooterHref = agentStarterCheckoutConfigured\n ? buildInternalHref('/app/?sample=5panel&upgrade=1&billing=starter', 'go_pro_footer')\n : buildAgentStarterRequestHref('agent_starter_request_footer');\n const agentStarterCtaLabel = agentStarterCheckoutConfigured\n ? copy.ctas.unlockPro || copy.ctas.goPro\n : lang === 'ja'\n ? '$5 Starter を相談'\n : 'Request $5 Starter';\n const sampleProjectHref = buildInternalHref('/app/?sample=5panel', 'open_sample_project');\n const logoHref = buildInternalHref('/', 'open_logo_header');\n const toolsHref = buildInternalHref('/tools/', 'open_tools_header');\n const pricingHeaderHref = buildInternalHref('/pricing', 'open_pricing_header');\n const pricingHref = buildInternalHref('/pricing', 'open_pricing');\n const termsHref = buildInternalHref('/terms', 'open_terms');\n const privacyHref = buildInternalHref('/privacy', 'open_privacy');\n const legalHref = buildInternalHref('/legal', 'open_legal');\n const securityHref = buildInternalHref('/security', 'open_security');\n const proofHref = buildInternalHref('/proof', 'open_proof');\n const designPartnerOfferHref = buildDesignPartnerHref({\n entrySource: `${intentRouteEntrySource}_open_design_partner_offer`,\n preset: designPartnerPreset,\n });\n const payFirstPartnerHref = buildInternalHref('/pricing?offer=pay_first', 'pay_first_partner_block');\n const intentPrimaryBaseHref = intentRouteCopy?.primaryHref || '/tools/agent-cli/#quickstart';\n const intentPrimarySeparator = intentPrimaryBaseHref.includes('?') ? '&' : '?';\n const intentPrimaryHref = `${intentPrimaryBaseHref}${intentPrimarySeparator}entry_source=${intentRouteEntrySource}_primary`;\n const intentPayFirstHref = `/pricing?offer=pay_first&entry_source=${intentRouteEntrySource}_pay_first`;\n const intentDesignPartnerHref = buildDesignPartnerHref({\n entrySource: `${intentRouteEntrySource}_design_partner`,\n preset: designPartnerPreset,\n });\n const intentProofHref = `/proof?entry_source=${intentRouteEntrySource}_proof`;\n const designPartnerOfferLabel = lang === 'ja' ? 'オファー詳細を見る' : 'See offer details';\n const bootstrapCopy = CLIENT_BOOTSTRAP_COPY[lang] || CLIENT_BOOTSTRAP_COPY.en;\n const bootstrapClientIds = useMemo(() => bootstrapCopy.cards.map((card) => card.id), [bootstrapCopy.cards]);\n const preferredClientId = useMemo(() => {\n if (typeof window === 'undefined') return null;\n const client = new URLSearchParams(window.location.search).get('client');\n if (bootstrapClientIds.includes(client)) return client;\n return readPersistedAgentClientId(bootstrapClientIds, null);\n }, [bootstrapClientIds]);\n const selectedBootstrapCard = preferredClientId\n ? bootstrapCopy.cards.find((card) => card.id === preferredClientId) || null\n : null;\n const orderedBootstrapCards = selectedBootstrapCard\n ? [selectedBootstrapCard, ...bootstrapCopy.cards.filter((card) => card.id !== selectedBootstrapCard.id)]\n : bootstrapCopy.cards;\n const selectedBootstrapBundle = selectedBootstrapCard\n ? `${selectedBootstrapCard.initCommand}\\n\\n${copy.agentFirstPrompt}`\n : '';\n const quickstartAnchorHref = '#quickstart';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const githubActionsTemplateHref = '/downloads/shipscreens-github-actions-template.yml';\n const bitriseTemplateHref = '/downloads/shipscreens-bitrise-template.yml';\n const top20TemplatePackCsvHref = '/downloads/shipscreens-top20-category-headline-pack-2026-02.csv';\n const top20TemplatePackGuideHref = '/downloads/shipscreens-top20-category-headline-pack-2026-02.md';\n const localizationHandoffTemplateHref = '/downloads/shipscreens-localization-handoff-template.csv';\n const localizationCiChecklistHref = '/downloads/shipscreens-localization-ci-checklist-2026-02.md';\n const variantMatrixTemplateHref = '/downloads/shipscreens-aso-variant-matrix-template.csv';\n const jpCaseSnapshotsHref = '/downloads/shipscreens-japan-case-snapshots-2026-02.md';\n const extraPackTitle = lang === 'ja' ? 'カテゴリ/ローカライズ運用テンプレ' : 'Category + localization packs';\n const extraPackBody =\n lang === 'ja'\n ? 'トップ20カテゴリ×2訴求、翻訳受け渡し、ASO変種管理、JPケース資料をまとめて利用できます。'\n : 'Use top-20 category x2 copy starters, localization templates, ASO variant planning, and JP case snapshots.';\n const top20CsvLabel = lang === 'ja' ? 'トップ20カテゴリ×2(CSV)' : 'Top20 category x2 (CSV)';\n const top20GuideLabel = lang === 'ja' ? 'トップ20パック使い方(MD)' : 'Top20 pack guide (MD)';\n const localizationHandoffLabel = lang === 'ja' ? 'ローカライズ用テンプレート(CSV)' : 'Localization template (CSV)';\n const localizationCiLabel = lang === 'ja' ? 'ローカライズCIチェック(MD)' : 'Localization CI checklist (MD)';\n const variantMatrixLabel = lang === 'ja' ? 'ASO変種管理テンプレ(CSV)' : 'ASO variant matrix (CSV)';\n const jpCaseLabel = lang === 'ja' ? '日本向けケース資料(MD)' : 'Japan case snapshots (MD)';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n const codeToggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\n const defaultCodeOpen = typeof window === 'undefined' ? true : window.matchMedia('(min-width: 640px)').matches;\n const heroQuickstartBadge = lang === 'ja' ? '2ステップ' : '2 STEPS';\n const tellYourAgentAnchorHref = '#tell-your-agent';\n const rawPath = (copy.paths || []).find((item) => item.id === 'raw');\n const renderedPath = (copy.paths || []).find((item) => item.id === 'rendered');\n const allCommandsSections = copy.allCommandsSections || {};\n const allCommands = [\n `# ${allCommandsSections.hero || '2-step quickstart (raw mode)'}`,\n copy.heroQuickstartCmd,\n '',\n `# ${allCommandsSections.local || 'Local quickstart (raw mode)'}`,\n copy.localQuickstartCmd,\n '',\n `# ${allCommandsSections.rendered || 'Rendered pipeline (CI-ready)'}`,\n copy.quickstartCmd,\n '',\n `# ${allCommandsSections.auth || 'CLI auth'}`,\n copy.authCmd,\n '',\n `# ${allCommandsSections.authManual || 'CLI auth (manual)'}`,\n copy.authManualCmd,\n ].join('\\n');\n\n usePageTitle('titles.agentCli', { defaultValue: intentRouteCopy?.pageTitle || copy.title });\n\n useEffect(() => {\n baseTrackEvent('tool_view', { tool: 'agent_cli', intent_route: intentRouteCopy?.intentKey || 'default' });\n }, [intentRouteCopy?.intentKey]);\n\n useEffect(() => {\n if (selectedBootstrapCard?.id) persistAgentClientId(selectedBootstrapCard.id);\n }, [selectedBootstrapCard]);\n\n return (\n <div className=\"min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n logoHref={logoHref}\n toolsHref={toolsHref}\n pricingHref={pricingHeaderHref}\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_app_header' })\n }\n primaryCta={{\n href: tellYourAgentAnchorHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {copy.ctas.primary} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_agent_prompt_header' }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-12\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <Terminal size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n {copy.painLine && <p className=\"text-sm text-slate-400\">{copy.painLine}</p>}\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={tellYourAgentAnchorHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_agent_prompt_hero' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n <a\n href={goProHeroHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'unlock_pro_hero_top' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-amber-400/50 bg-amber-500/10 text-amber-100 font-bold hover:bg-amber-500/20 transition\"\n >\n {agentStarterCtaLabel} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"text-[11px] text-slate-500 font-semibold\">{copy.trustTitle}</div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={pricingHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_pricing_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.pricing}\n </a>\n <a\n href={termsHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_terms_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.terms}\n </a>\n <a\n href={privacyHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_privacy_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.privacy}\n </a>\n <a\n href={legalHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_legal_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.legal}\n </a>\n <a\n href={securityHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_security_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.security}\n </a>\n <a\n href={proofHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_proof_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.proof}\n </a>\n </div>\n <p className=\"text-[11px] text-slate-500\">\n {trustDisclosure}{' '}\n {trustContactLabel}:{' '}\n <a\n href={`mailto:${supportEmail}`}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_contact_trust' })\n }\n className=\"underline underline-offset-4 hover:text-slate-300\"\n >\n {supportEmail}\n </a>\n </p>\n </div>\n {intentRouteCopy && (\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/70 border border-blue-500/40 rounded-2xl p-4 space-y-3\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-blue-200 font-semibold\">\n {intentRouteCopy.badge}\n </div>\n <h2 className=\"text-base font-bold text-white\">{intentRouteCopy.title}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{intentRouteCopy.body}</p>\n <div className=\"flex flex-col sm:flex-row sm:flex-wrap gap-2\">\n <a\n href={intentPrimaryHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_intent_primary_bridge' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl bg-blue-500 text-white font-semibold hover:bg-blue-600 transition\"\n >\n {intentRouteCopy.primaryCta} <ArrowRight size={14} />\n </a>\n <a\n href={intentPayFirstHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_intent_pay_first_offer' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-semibold hover:bg-slate-900 transition\"\n >\n {intentRouteCopy.payFirstCta} <ArrowRight size={14} />\n </a>\n <a\n href={intentDesignPartnerHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_intent_design_partner_offer' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-semibold hover:bg-slate-900 transition\"\n >\n {intentRouteCopy.designPartnerCta} <ArrowRight size={14} />\n </a>\n <a\n href={intentProofHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_intent_proof_offer' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-semibold hover:bg-slate-900 transition\"\n >\n {intentRouteCopy.proofCta} <ArrowRight size={14} />\n </a>\n </div>\n <p className=\"text-xs text-slate-500\">{intentRouteCopy.note}</p>\n </div>\n )}\n </section>\n\n <AgentStarterWorkflowFigure\n alt={agentWorkflowAlt}\n caption={agentWorkflowCaption}\n className=\"max-w-5xl mx-auto\"\n loading=\"eager\"\n onImageLoad={() => trackEvent('tool_visual_loaded', { tool: 'agent_cli', asset: 'agent_starter_workflow' })}\n />\n\n <section id=\"tell-your-agent\" className=\"max-w-4xl mx-auto\">\n <div className=\"bg-slate-900/70 border border-blue-500/30 rounded-2xl p-6 space-y-4\">\n <div className=\"text-lg font-bold text-white\">{copy.agentFirstTitle}</div>\n {copy.agentFirstBody && <p className=\"text-sm text-slate-300\">{copy.agentFirstBody}</p>}\n <div className=\"grid md:grid-cols-[1.15fr_0.85fr] gap-4\">\n <div className=\"space-y-3\">\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.agentFirstPrompt}</pre>\n </div>\n <CopyButton\n value={copy.agentFirstPrompt}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_agent_prompt_primary' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n <div className=\"space-y-3\">\n {(copy.agentFirstBullets || []).length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.agentFirstBullets.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <CheckCircle2 size={16} className=\"mt-0.5 text-emerald-400 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex flex-col gap-2\">\n <a\n href=\"#agent-bootstrap\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_bootstrap_from_agent_prompt' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-semibold hover:bg-blue-600 transition\"\n >\n {copy.agentFirstBootstrapCta} <ArrowRight size={14} />\n </a>\n <a\n href={quickstartAnchorHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_quickstart_from_agent_prompt' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-semibold hover:bg-slate-900 transition\"\n >\n {copy.agentFirstQuickstartCta} <ArrowRight size={14} />\n </a>\n </div>\n </div>\n </div>\n {copy.agentFirstNote && <p className=\"text-xs text-slate-500\">{copy.agentFirstNote}</p>}\n </div>\n </section>\n\n <CliPreflightCard\n compact\n href=\"#preflight\"\n onClick={(event) => trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_preflight_card' })}\n className=\"max-w-xl mx-auto\"\n />\n\n <ReleaseFitIntake\n lang={lang}\n className=\"max-w-4xl mx-auto w-full\"\n onPromptCopied={({ pathKey }) =>\n trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_release_fit_prompt', path: pathKey })\n }\n onPathClick={(event, { pathKey }) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'agent_cli',\n cta: 'open_release_fit_path',\n path: pathKey,\n })\n }\n onRequestClick={(event, { pathKey }) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'agent_cli',\n cta: 'open_release_fit_request',\n path: pathKey,\n has_app_url: event.currentTarget.href.includes('appUrl=') ? 'yes' : 'no',\n })\n }\n />\n\n <AgentReportPreview lang={lang} className=\"max-w-4xl mx-auto w-full\" />\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n {copy.demoTitle && copy.demoCmd && (\n <section id=\"demo\" className=\"max-w-4xl mx-auto\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"text-lg font-bold text-white\">{copy.demoTitle}</div>\n {copy.demoBody && <p className=\"text-sm text-slate-300\">{copy.demoBody}</p>}\n {(copy.demoBullets || []).length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.demoBullets.map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CheckCircle2 size={16} className=\"text-emerald-400\" />\n {item}\n </li>\n ))}\n </ul>\n )}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.demoCmd}</pre>\n </div>\n <CopyButton\n value={copy.demoCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_demo_cmd' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.demoNote && <p className=\"text-xs text-slate-500\">{copy.demoNote}</p>}\n </div>\n </section>\n )}\n\n {copy.proUnlockTitle && copy.proUnlockCmd && (\n <section className=\"max-w-4xl mx-auto\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-lg font-bold text-white\">{copy.proUnlockTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {copy.proUnlockBody && <p className=\"text-sm text-slate-300\">{copy.proUnlockBody}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.proUnlockCmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={copy.proUnlockCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <a\n href={goProHeroHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'unlock_pro_hero' })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-2 rounded-lg bg-white text-slate-900 font-bold hover:scale-[1.02] transition\"\n >\n {agentStarterCtaLabel} <ArrowRight size={16} />\n </a>\n </div>\n {copy.proUnlockNote && <p className=\"text-xs text-slate-500\">{copy.proUnlockNote}</p>}\n </div>\n </section>\n )}\n\n {copy.heroQuickstartCmd && (\n <section className=\"max-w-4xl mx-auto\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{copy.heroQuickstartTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-blue-200 bg-blue-500/10 border border-blue-400/30 px-2 py-1 rounded-full\">\n {heroQuickstartBadge}\n </span>\n </div>\n {copy.heroQuickstartBody && <p className=\"text-sm text-slate-300\">{copy.heroQuickstartBody}</p>}\n <details className=\"group\" open={defaultCodeOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{codeToggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <div className=\"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroQuickstartCmd}</pre>\n </div>\n </details>\n <CopyButton\n value={copy.heroQuickstartCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_hero_quickstart' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.heroProCmd && (\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-slate-400\">\n {copy.heroProLabel && <span>{copy.heroProLabel}</span>}\n <div className=\"inline-flex items-center gap-2 px-2 py-1 rounded-md border border-slate-800 bg-slate-950 text-slate-200\">\n <code>{copy.heroProCmd}</code>\n <CopyButton\n value={copy.heroProCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_hero_pro_cmd' })}\n className=\"text-[11px] px-2 py-0.5 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition\"\n />\n </div>\n <a\n href={goProHeroHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'unlock_pro_inline' })\n }\n className=\"inline-flex items-center gap-1 text-amber-200 hover:text-amber-100 transition-colors font-semibold\"\n >\n {agentStarterCtaLabel} <ArrowRight size={12} />\n </a>\n </div>\n )}\n </div>\n </section>\n )}\n\n <section className=\"grid md:grid-cols-3 gap-6\">\n {copy.steps.map((step, index) => (\n <div key={step.title} className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"text-xs font-semibold text-blue-200\">STEP {index + 1}</div>\n <div className=\"text-lg font-bold text-white\">{step.title}</div>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{step.body}</p>\n </div>\n ))}\n </section>\n\n {copy.preflightTitle && (\n <section id=\"preflight\" className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"text-lg font-bold text-white\">{copy.preflightTitle}</div>\n {copy.preflightBody && <p className=\"text-sm text-slate-300\">{copy.preflightBody}</p>}\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {(copy.preflightBullets || []).map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CheckCircle2 size={16} className=\"text-emerald-400\" />\n {item}\n </li>\n ))}\n </ul>\n {copy.preflightNote && <p className=\"text-xs text-slate-500\">{copy.preflightNote}</p>}\n </section>\n )}\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"text-lg font-bold text-white\">{copy.localTitle}</div>\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.localBullets.map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CheckCircle2 size={16} className=\"text-green-400\" />\n {item}\n </li>\n ))}\n </ul>\n </section>\n\n <section id=\"quickstart\" className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-lg font-bold text-white\">{copy.pathsTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-emerald-200 bg-emerald-500/10 border border-emerald-400/30 px-2 py-1 rounded-full\">\n {lang === 'ja' ? '推奨' : 'RECOMMENDED'}\n </span>\n </div>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3\">\n <CopyButton\n value={allCommands}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_all_commands' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copy.allCommandsLabel || copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.allCommandsNote && <span className=\"text-xs text-slate-500\">{copy.allCommandsNote}</span>}\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{rawPath?.title || copy.localQuickstartTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-blue-200 bg-blue-500/10 border border-blue-400/30 px-2 py-1 rounded-full\">\n {rawPath?.badge || 'RAW'}\n </span>\n </div>\n <p className=\"text-sm text-slate-300\">{rawPath?.body || copy.localQuickstartBody}</p>\n <details className=\"group\" open={defaultCodeOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{codeToggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <div className=\"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.localQuickstartCmd}</pre>\n </div>\n </details>\n <CopyButton\n value={copy.localQuickstartCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_raw_quickstart' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n\n <details className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{renderedPath?.title || copy.quickstartTitle}</span>\n <span className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-blue-200 bg-blue-500/10 border border-blue-400/30 px-2 py-1 rounded-full\">\n {renderedPath?.badge || 'RENDERED'}\n </span>\n <ChevronDown size={16} className=\"text-slate-400\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-3\">\n <p className=\"text-sm text-slate-300\">{renderedPath?.body || copy.quickstartBody}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.quickstartCmd}</pre>\n </div>\n <CopyButton\n value={copy.quickstartCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_rendered_quickstart' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n </details>\n </section>\n\n <section id=\"agent-bootstrap\" className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-lg font-bold text-white\">{bootstrapCopy.title}</div>\n <a\n href={quickstartAnchorHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_quickstart_from_bootstrap' })\n }\n className=\"text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.ctas.primary}\n </a>\n </div>\n <p className=\"text-sm text-slate-300\">{bootstrapCopy.body}</p>\n {selectedBootstrapCard && (\n <div className=\"rounded-2xl border border-blue-500/30 bg-blue-500/10 p-4 space-y-3\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-blue-200 font-semibold\">\n {lang === 'ja' ? '選択中のクライアント' : 'Selected client'}\n </div>\n <div className=\"text-sm font-bold text-white\">{selectedBootstrapCard.title}</div>\n <p className=\"text-xs text-slate-300\">\n {lang === 'ja'\n ? '入口ページで選んだ client を先頭に固定しています。このまま設定コマンドだけ、または設定 + プロンプトをコピーできます。'\n : 'Keeping the client you chose on the entry page pinned first. Copy the setup command only, or setup + prompt, from here.'}\n </p>\n </div>\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-400 font-semibold\">\n {selectedBootstrapCard.configFile}\n </div>\n </div>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{selectedBootstrapCard.initCommand}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-2\">\n <CopyButton\n value={selectedBootstrapCard.initCommand}\n onCopied={() =>\n trackEvent('tool_cta_click', {\n tool: 'agent_cli',\n cta: `copy_selected_bootstrap_init_${selectedBootstrapCard.id}`,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || bootstrapCopy.commandCopyLabel}\n </>\n )}\n </CopyButton>\n <CopyButton\n value={selectedBootstrapBundle}\n onCopied={() =>\n trackEvent('tool_cta_click', {\n tool: 'agent_cli',\n cta: `copy_selected_bootstrap_bundle_${selectedBootstrapCard.id}`,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-blue-500/40 bg-blue-500/10 text-blue-100 hover:bg-blue-500/20 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || (lang === 'ja' ? '設定 + プロンプトをコピー' : 'Copy bootstrap + prompt')}\n </>\n )}\n </CopyButton>\n </div>\n </div>\n )}\n <div className=\"grid xl:grid-cols-2 gap-4\">\n {orderedBootstrapCards.map((card) => (\n <div\n key={card.id}\n className={`rounded-2xl border p-4 space-y-3 ${\n card.id === preferredClientId\n ? 'border-blue-500/40 bg-blue-500/10'\n : 'border-slate-800 bg-slate-950/60'\n }`}\n >\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3\">\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"text-sm font-bold text-white\">{card.title}</div>\n {card.id === preferredClientId && (\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-blue-200 bg-blue-500/10 border border-blue-400/30 px-2 py-1 rounded-full\">\n {lang === 'ja' ? '選択中' : 'SELECTED'}\n </span>\n )}\n </div>\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{card.configFile}</div>\n <p className=\"text-xs text-slate-400\">{card.note}</p>\n </div>\n <a\n href={card.downloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: card.asset })}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n <Download size={14} />\n {card.downloadLabel}\n </a>\n </div>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"mb-2 text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {bootstrapCopy.commandTitle}\n </div>\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{card.initCommand}</pre>\n </div>\n <CopyButton\n value={card.initCommand}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: `copy_bootstrap_init_${card.id}` })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || bootstrapCopy.commandCopyLabel}\n </>\n )}\n </CopyButton>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"mb-2 text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {bootstrapCopy.configTitle}\n </div>\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{card.config}</pre>\n </div>\n <CopyButton\n value={card.config}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: `copy_bootstrap_${card.id}` })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || bootstrapCopy.configCopyLabel}\n </>\n )}\n </CopyButton>\n </div>\n ))}\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3\">\n <div className=\"text-sm font-bold text-white\">{bootstrapCopy.openAiTitle}</div>\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {bootstrapCopy.openAiBullets.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <CheckCircle2 size={16} className=\"mt-0.5 text-green-400 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n </div>\n <p className=\"text-xs text-slate-500\">{bootstrapCopy.windowsNote}</p>\n </section>\n\n <section className=\"space-y-4\">\n <div className=\"text-xs uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {lang === 'ja' ? '詳細・任意' : 'Advanced / Optional'}\n </div>\n\n <details className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.promptTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n {lang === 'ja' ? '任意' : 'OPTIONAL'}\n <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-4\">\n <p className=\"text-sm text-slate-300\">{copy.promptBody}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.prompt}</pre>\n </div>\n <CopyButton\n value={copy.prompt}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_agent_prompt' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n </details>\n\n <details className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.templateTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n {lang === 'ja' ? '任意' : 'OPTIONAL'}\n <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-4\">\n <p className=\"text-sm text-slate-300\">{copy.templateBody}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.template}</pre>\n </div>\n <CopyButton\n value={copy.template}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n </details>\n\n <details id=\"downloads\" className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.downloadTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n {lang === 'ja' ? '任意' : 'OPTIONAL'}\n <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-4\">\n <p className=\"text-sm text-slate-300\">{copy.downloadBody}</p>\n <div className=\"grid sm:grid-cols-2 gap-3\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.01] transition\"\n >\n <Download size={16} />\n {copy.downloadConfig}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'copy_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadCsv}\n </a>\n </div>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.downloadCiTitle}\n </div>\n <p className=\"text-xs text-slate-400\">{copy.downloadCiBody}</p>\n <div className=\"grid sm:grid-cols-2 gap-3\">\n <a\n href={githubActionsTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'ci_template_github_actions' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadCiGithub}\n </a>\n <a\n href={bitriseTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'ci_template_bitrise' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadCiBitrise}\n </a>\n </div>\n </div>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{extraPackTitle}</div>\n <p className=\"text-xs text-slate-400\">{extraPackBody}</p>\n <div className=\"grid sm:grid-cols-2 gap-3\">\n <a\n href={top20TemplatePackCsvHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'top20_category_pack_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {top20CsvLabel}\n </a>\n <a\n href={top20TemplatePackGuideHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'top20_category_pack_guide' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {top20GuideLabel}\n </a>\n <a\n href={localizationHandoffTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'localization_handoff_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {localizationHandoffLabel}\n </a>\n <a\n href={localizationCiChecklistHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'localization_ci_checklist_md' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {localizationCiLabel}\n </a>\n <a\n href={variantMatrixTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'aso_variant_matrix_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {variantMatrixLabel}\n </a>\n <a\n href={jpCaseSnapshotsHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'agent_cli', asset: 'jp_case_snapshots_md' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {jpCaseLabel}\n </a>\n </div>\n </div>\n </div>\n </details>\n\n <details className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.authTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n {lang === 'ja' ? '任意' : 'OPTIONAL'}\n <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-4\">\n <p className=\"text-sm text-slate-300\">{copy.authBody}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.authCmd}</pre>\n </div>\n <CopyButton\n value={copy.authCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_cli_auth' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.authManualCmd}</pre>\n </div>\n <CopyButton\n value={copy.authManualCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'copy_cli_auth_manual' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n </details>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"text-lg font-bold text-white\">{copy.proTitle}</div>\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.proBullets.map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CheckCircle2 size={16} className=\"text-green-400\" />\n {item}\n </li>\n ))}\n </ul>\n <div className=\"flex flex-col sm:flex-row gap-3 pt-2\">\n <a\n href={goProFooterHref}\n onClick={(event) => trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'go_pro_footer' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.02] transition\"\n >\n {agentStarterCtaLabel} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) => trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_sample_project_footer' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.ctas.sample} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section\n id=\"design-partner\"\n className=\"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\"\n >\n <div className=\"text-lg font-bold text-white\">{partnerCopy.title || t('landing.partner.title')}</div>\n <div className=\"text-sm text-slate-300 leading-relaxed\">{partnerCopy.body || t('landing.partner.body')}</div>\n {partnerScopeBullets.length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-300 list-disc pl-5\">\n {partnerScopeBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n )}\n <a\n href={designPartnerOfferHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_design_partner_offer' })\n }\n className=\"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {designPartnerOfferLabel} <ArrowRight size={14} />\n </a>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={partnerMailto}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'email_design_partner' })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {partnerCopy.emailCta || t('landing.partner.emailCta')} <ArrowRight size={16} />\n </a>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'agent_cli', cta: 'dm_design_partner' })}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n {partnerCopy.dmCta || t('landing.partner.dmCta')}\n </a>\n <a\n href={payFirstPartnerHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'open_pay_first_from_partner_block' })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-emerald-500/40 bg-emerald-500/10 text-emerald-100 font-semibold hover:bg-emerald-500/15 transition\"\n >\n {partnerCopy.payFirstCta || t('landing.partner.payFirstCta')} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"text-xs text-slate-500\">\n {partnerCopy.emailLabel || t('landing.partner.emailLabel')}{' '}\n <a href={`mailto:${supportEmail}`} className=\"underline underline-offset-4 hover:text-white\">\n {supportEmail}\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.ctas.primary,\n href: tellYourAgentAnchorHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'sticky_agent_prompt' }),\n }}\n secondary={{\n label: copy.ctas.sample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'agent_cli', cta: 'sticky_sample' }),\n }}\n />\n </div>\n );\n};\n\nexport default AgentCli;\n"],"mappings":"mwBAiBM,GAAiB,IACP,GAAQ,IAAI,MAAM,GAAG,EAAE,KACrB,KAAO,KAAO,KAG1B,IAAmB,EAAM,IAAgB,CAC7C,GAAI,CAAC,EAAa,OAAO,EACzB,GAAM,CAAC,EAAY,EAAO,IAAM,OAAO,GAAQ,EAAE,EAAE,MAAM,GAAG,EAE5D,MAAO,GAAG,IADQ,EAAW,SAAS,GAAG,EAAI,IAAM,IAClB,eAAe,mBAAmB,CAAW,IAAI,EAAO,IAAI,IAAS,IACxG,EAEM,EAAO,CACX,GAAI,CACF,MAAO,yBACP,MAAO,sEACP,SACE,ydACF,SACE,yRACF,KAAM,CACJ,QAAS,yBACT,UAAW,yBACX,MAAO,yBACP,OAAQ,qBACV,EACA,gBAAiB,yBACjB,eACE,oHACF,iBACE,4hBACF,kBAAmB,CACjB,qGACA,sGACA,+EACA,+EACF,EACA,eAAgB,mGAChB,uBAAwB,iBACxB,wBAAyB,yBACzB,WAAY,oCACZ,WAAY,CACV,QAAS,UACT,MAAO,QACP,QAAS,UACT,MAAO,gBACP,SAAU,WACV,MAAO,OACT,EACA,UAAW,yCACX,SACE,iKACF,QAAS,6BACT,YAAa,CACX,2EACA,uEACA,4DACF,EACA,SAAU,6FACV,MAAO,CACL,CACE,MAAO,4CACP,KAAM,8HACR,EACA,CACE,MAAO,qCACP,KAAM,6IACR,EACA,CACE,MAAO,gCACP,KAAM,2JACR,CACF,EACA,eAAgB,kCAChB,cAAe,kEACf,iBAAkB,CAChB,uIACA,sEACA,qDACA,iDACA,2CACF,EACA,cAAe,sEACf,oBAAqB,0CACrB,mBAAoB,8QACpB,kBAAmB,CACjB,uDACA,4CACA,uEACA,iHACA,wFACA,0EACF,EAAE,KAAK;CAAI,EACX,aAAc,6BACd,WAAY,mCACZ,iBAAkB,oBAClB,gBAAiB,kCACjB,oBAAqB,CACnB,KAAM,kCACN,MAAO,8BACP,SAAU,+BACV,KAAM,WACN,WAAY,mBACd,EACA,WAAY,oCACZ,MAAO,CACL,CACE,GAAI,MACJ,MAAO,MACP,MAAO,wBACP,KAAM,iEACN,OAAQ,OACV,EACA,CACE,GAAI,WACJ,MAAO,WACP,MAAO,+BACP,KAAM,+DACN,OAAQ,UACV,CACF,EACA,qBAAsB,gCACtB,oBAAqB,4GACrB,mBAAoB,CAClB,uDACA,4CACA,kCACA,uEACA,wCACA,wFACA,iDACA,sEACA,mFACA,0KACA,6FACF,EAAE,KAAK;CAAI,EACX,eAAgB,yBAChB,cACE,oJACF,aAAc,mCACd,cAAe,iFACf,WAAY,oDACZ,aAAc,CACZ,iDACA,yDACA,2FACA,iEACF,EACA,YAAa,4BACb,WAAY,gEACZ,OAAQ,CACN,oEACA,kEACA,GACA,+BACA,SACA,GACA,iBACA,QACA,GACA,eACA,oBACA,mFACA,oIACA,oDACA,6DACA,2FACA,yEACA,+GACF,EAAE,KAAK;CAAI,EACX,cAAe,6BACf,aAAc,kDACd,SAAU,CACR,mBACA,GACA,WACA,gBACA,GACA,WACA,mBACA,oBACA,iBACA,wBACA,GACA,UACA,YACA,kBACA,kCACA,YACA,eACA,0BACA,4BACF,EAAE,KAAK;CAAI,EACX,gBAAiB,+BACjB,eAAgB,uIAChB,cAAe,CACb,SACA,8CACA,8KACA,yGACF,EAAE,KAAK;CAAI,EACX,UAAW,0CACX,SAAU,2DACV,QAAS,CACP,mCACA,sDACA,oCACA,oGACF,EAAE,KAAK;CAAI,EACX,cAAe,CACb,4CACA,sDACA,oCACA,0DACF,EAAE,KAAK;CAAI,EACX,SAAU,kBACV,WAAY,CACV,gDACA,gDACA,gCACA,cACF,EACA,cAAe,2BACf,aAAc,kEACd,eAAgB,kCAChB,YAAa,oBACb,gBAAiB,eACjB,eAAgB,gFAChB,iBAAkB,mCAClB,kBAAmB,2BACrB,EACA,GAAI,CACF,MAAO,uBACP,MAAO,8CACP,SACE,6PACF,SACE,4IACF,KAAM,CACJ,QAAS,mBACT,UAAW,uBACX,MAAO,uBACP,OAAQ,SACV,EACA,gBAAiB,wBACjB,eACE,+EACF,iBACE,6RACF,kBAAmB,CACjB,iEACA,6DACA,kCACA,iEACF,EACA,eAAgB,4CAChB,uBAAwB,WACxB,wBAAyB,gBACzB,WAAY,oBACZ,WAAY,CACV,QAAS,KACT,MAAO,OACP,QAAS,SACT,MAAO,QACP,SAAU,SACV,MAAO,IACT,EACA,UAAW,gBACX,SACE,oGACF,QAAS,6BACT,YAAa,CACX,+DACA,mDACA,oCACF,EACA,SAAU,kDACV,MAAO,CACL,CACE,MAAO,qCACP,KAAM,2CACR,EACA,CACE,MAAO,iBACP,KAAM,6EACR,EACA,CACE,MAAO,iCACP,KAAM,8DACR,CACF,EACA,eAAgB,aAChB,cAAe,gCACf,iBAAkB,CAChB,oDACA,yBACA,oBACA,iCACA,kBACF,EACA,cAAe,wCACf,oBAAqB,mCACrB,mBAAoB,gMACpB,kBAAmB,CACjB,uDACA,4CACA,uEACA,iHACA,wFACA,0EACF,EAAE,KAAK;CAAI,EACX,aAAc,YACd,WAAY,mCACZ,iBAAkB,YAClB,gBAAiB,+BACjB,oBAAqB,CACnB,KAAM,oBACN,MAAO,cACP,SAAU,8BACV,KAAM,QACN,WAAY,WACd,EACA,WAAY,iBACZ,MAAO,CACL,CACE,GAAI,MACJ,MAAO,MACP,MAAO,mBACP,KAAM,iCACN,OAAQ,OACV,EACA,CACE,GAAI,WACJ,MAAO,WACP,MAAO,mBACP,KAAM,kCACN,OAAQ,UACV,CACF,EACA,qBAAsB,iBACtB,oBAAqB,uEACrB,mBAAoB,CAClB,uDACA,4CACA,kCACA,uEACA,wCACA,wFACA,gDACA,gDACA,6EACA,0JACA,6FACF,EAAE,KAAK;CAAI,EACX,eAAgB,aAChB,cACE,yEACF,aAAc,mCACd,cAAe,4CACf,WAAY,iCACZ,aAAc,CACZ,iCACA,+CACA,gDACA,6BACF,EACA,YAAa,mBACb,WAAY,yCACZ,OAAQ,CACN,oEACA,kEACA,GACA,+BACA,SACA,GACA,iBACA,QACA,GACA,eACA,oBACA,mFACA,oIACA,oDACA,6DACA,2FACA,yEACA,+GACF,EAAE,KAAK;CAAI,EACX,cAAe,kBACf,aAAc,yBACd,SAAU,CACR,mBACA,GACA,WACA,gBACA,GACA,WACA,mBACA,oBACA,iBACA,wBACA,GACA,UACA,YACA,kBACA,kCACA,YACA,eACA,0BACA,4BACF,EAAE,KAAK;CAAI,EACX,gBAAiB,8BACjB,eAAgB,sFAChB,cAAe,CACb,SACA,8CACA,8KACA,yGACF,EAAE,KAAK;CAAI,EACX,UAAW,sBACX,SAAU,2BACV,QAAS,CACP,mCACA,4CACA,oCACA,oGACF,EAAE,KAAK;CAAI,EACX,cAAe,CACb,4CACA,4CACA,yBACA,0DACF,EAAE,KAAK;CAAI,EACX,SAAU,YACV,WAAY,CACV,yBACA,cACA,qBACA,OACF,EACA,cAAe,kBACf,aAAc,gCACd,eAAgB,iCAChB,YAAa,mBACb,gBAAiB,SACjB,eAAgB,kCAChB,iBAAkB,6BAClB,kBAAmB,qBACrB,CACF,EAEM,EAAkB,CAAC,QAAS,qBAAsB,MAAO,OAAO,EAEhE,EAAc,GAAU,KAAK,UAAU,EAAO,KAAM,CAAC,EAErD,EAAyB,EAAW,CACxC,WAAY,CACV,YAAa,CACX,QAAS,MACT,KAAM,CACR,CACF,CACF,CAAC,EAEK,EAAuB,EAAW,CACtC,QAAS,CACP,YAAa,CACX,KAAM,QACN,QAAS,MACT,KAAM,CACR,CACF,CACF,CAAC,EAEK,EAAwB,CAC5B,GAAI,CACF,MAAO,kBACP,KAAM,mIACN,aAAc,wBACd,YAAa,uBACb,iBAAkB,oBAClB,gBAAiB,YACjB,YACE,4HACF,YAAa,uBACb,cAAe,CACb,qEACA,mFACA,oEACF,EACA,MAAO,CACL,CACE,GAAI,cACJ,MAAO,cACP,WAAY,YACZ,KAAM,4CACN,YAAa,wDACb,OAAQ,EACR,aAAc,8CACd,cAAe,qBACf,MAAO,8BACT,EACA,CACE,GAAI,SACJ,MAAO,SACP,WAAY,mBACZ,KAAM,uCACN,YAAa,wDACb,OAAQ,EACR,aAAc,yCACd,cAAe,4BACf,MAAO,yBACT,EACA,CACE,GAAI,iBACJ,MAAO,kBACP,WAAY,mBACZ,KAAM,+DACN,YAAa,wDACb,OAAQ,EACR,aAAc,yCACd,cAAe,4BACf,MAAO,iCACT,EACA,CACE,GAAI,aACJ,MAAO,aACP,WAAY,wBACZ,KAAM,yDACN,YAAa,wDACb,OAAQ,EACR,aAAc,kDACd,cAAe,iCACf,MAAO,6BACT,CACF,CACF,EACA,GAAI,CACF,MAAO,kBACP,KAAM,4EACN,aAAc,mBACd,YAAa,qBACb,iBAAkB,gBAClB,gBAAiB,YACjB,YACE,2GACF,YAAa,uBACb,cAAe,CACb,oDACA,2DACA,2DACF,EACA,MAAO,CACL,CACE,GAAI,cACJ,MAAO,cACP,WAAY,YACZ,KAAM,mCACN,YAAa,wDACb,OAAQ,EACR,aAAc,8CACd,cAAe,oBACf,MAAO,8BACT,EACA,CACE,GAAI,SACJ,MAAO,SACP,WAAY,mBACZ,KAAM,8BACN,YAAa,wDACb,OAAQ,EACR,aAAc,yCACd,cAAe,2BACf,MAAO,yBACT,EACA,CACE,GAAI,iBACJ,MAAO,kBACP,WAAY,mBACZ,KAAM,yDACN,YAAa,wDACb,OAAQ,EACR,aAAc,yCACd,cAAe,2BACf,MAAO,iCACT,EACA,CACE,GAAI,aACJ,MAAO,aACP,WAAY,wBACZ,KAAM,sDACN,YAAa,wDACb,OAAQ,EACR,aAAc,kDACd,cAAe,gCACf,MAAO,6BACT,CACF,CACF,CACF,EAEM,EAAoB,CACxB,GAAI,CACF,mBAAoB,CAClB,UAAW,kCACX,WAAY,yCACZ,UAAW,gDACX,MAAO,oBACP,MAAO,kEACP,KAAM,0LACN,WAAY,yBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,uFACR,EACA,qBAAsB,CACpB,UAAW,oCACX,WAAY,2CACZ,UAAW,kDACX,MAAO,oBACP,MAAO,kEACP,KAAM,6MACN,WAAY,yBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,0EACR,EACA,qBAAsB,CACpB,UAAW,oCACX,WAAY,sDACZ,UAAW,6DACX,MAAO,sBACP,MAAO,4DACP,KAAM,iJACN,WAAY,yBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,8EACR,EACA,iBAAkB,CAChB,UAAW,+BACX,WAAY,sCACZ,UAAW,6CACX,MAAO,kBACP,MAAO,wEACP,KAAM,0IACN,WAAY,2BACZ,YAAa,+BACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,wCACR,EACA,qBAAsB,CACpB,UAAW,yBACX,WAAY,gCACZ,UAAW,uCACX,MAAO,YACP,MAAO,wDACP,KAAM,2KACN,WAAY,yBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,+EACR,EACA,cAAe,CACb,UAAW,wCACX,WAAY,+CACZ,UAAW,sDACX,MAAO,aACP,MAAO,wEACP,KAAM,qNACN,WAAY,iBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,+DACR,EACA,UAAW,CACT,UAAW,mCACX,WAAY,0CACZ,UAAW,iDACX,MAAO,aACP,MAAO,uFACP,KAAM,4OACN,WAAY,iBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,oEACR,EACA,iBAAkB,CAChB,UAAW,2CACX,WAAY,kDACZ,UAAW,0DACX,MAAO,aACP,MAAO,iEACP,KAAM,qPACN,WAAY,iBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,yEACR,EACA,aAAc,CACZ,UAAW,uCACX,WAAY,8CACZ,UAAW,qDACX,MAAO,aACP,MAAO,mFACP,KAAM,0NACN,WAAY,iBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,sDACR,EACA,oBAAqB,CACnB,UAAW,8CACX,WAAY,qDACZ,UAAW,4DACX,MAAO,cACP,MAAO,wEACP,KAAM,iKACN,WAAY,iBACZ,YAAa,oCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,0EACR,EACA,oBAAqB,CACnB,UAAW,kCACX,WAAY,yCACZ,UAAW,gDACX,MAAO,qBACP,MAAO,uDACP,KAAM,6HACN,WAAY,+BACZ,YAAa,+BACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,gDACR,EACA,iBAAkB,CAChB,UAAW,gCACX,WAAY,uCACZ,UAAW,8CACX,MAAO,eACP,MAAO,8DACP,KAAM,oIACN,WAAY,sCACZ,YAAa,+BACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,0EACR,EACA,SAAU,CACR,UAAW,yBACX,WAAY,qDACZ,UAAW,4DACX,MAAO,sBACP,MAAO,qDACP,KAAM,0JACN,WAAY,kCACZ,YAAa,gCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,kDACR,EACA,WAAY,CACV,UAAW,2BACX,WAAY,uDACZ,UAAW,8DACX,MAAO,sBACP,MAAO,qDACP,KAAM,2JACN,WAAY,kCACZ,YAAa,gCACb,YAAa,sBACb,iBAAkB,sBAClB,SAAU,8BACV,KAAM,kDACR,CACF,EACA,GAAI,CACF,mBAAoB,CAClB,UAAW,kCACX,WAAY,yCACZ,UAAW,uCACX,MAAO,QACP,MAAO,kCACP,KAAM,sGACN,WAAY,mBACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,kCACR,EACA,qBAAsB,CACpB,UAAW,oCACX,WAAY,2CACZ,UAAW,yCACX,MAAO,QACP,MAAO,gCACP,KAAM,6GACN,WAAY,mBACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,6BACR,EACA,qBAAsB,CACpB,UAAW,oCACX,WAAY,sDACZ,UAAW,wCACX,MAAO,WACP,MAAO,kCACP,KAAM,wEACN,WAAY,mBACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,wCACR,EACA,iBAAkB,CAChB,UAAW,+BACX,WAAY,sCACZ,UAAW,yCACX,MAAO,WACP,MAAO,iCACP,KAAM,2DACN,WAAY,qBACZ,YAAa,+BACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,qBACR,EACA,qBAAsB,CACpB,UAAW,yBACX,WAAY,gCACZ,UAAW,oCACX,MAAO,OACP,MAAO,6BACP,KAAM,yEACN,WAAY,mBACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,qCACR,EACA,cAAe,CACb,UAAW,wCACX,WAAY,+CACZ,UAAW,6CACX,MAAO,QACP,MAAO,2DACP,KAAM,oJACN,WAAY,WACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,0CACR,EACA,UAAW,CACT,UAAW,mCACX,WAAY,0CACZ,UAAW,wCACX,MAAO,QACP,MAAO,mDACP,KAAM,wKACN,WAAY,WACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,qCACR,EACA,iBAAkB,CAChB,UAAW,2CACX,WAAY,kDACZ,UAAW,iDACX,MAAO,QACP,MAAO,kEACP,KAAM,0KACN,WAAY,WACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,6BACR,EACA,aAAc,CACZ,UAAW,uCACX,WAAY,8CACZ,UAAW,4CACX,MAAO,QACP,MAAO,sDACP,KAAM,iJACN,WAAY,WACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,8BACR,EACA,oBAAqB,CACnB,UAAW,8CACX,WAAY,qDACZ,UAAW,mDACX,MAAO,SACP,MAAO,gEACP,KAAM,yGACN,WAAY,WACZ,YAAa,oCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,qCACR,EACA,oBAAqB,CACnB,UAAW,kCACX,WAAY,yCACZ,UAAW,gCACX,MAAO,QACP,MAAO,0BACP,KAAM,qEACN,WAAY,oBACZ,YAAa,+BACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,qBACR,EACA,iBAAkB,CAChB,UAAW,gCACX,WAAY,uCACZ,UAAW,mCACX,MAAO,SACP,MAAO,yBACP,KAAM,iFACN,WAAY,kBACZ,YAAa,+BACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,kCACR,EACA,SAAU,CACR,UAAW,yBACX,WAAY,qDACZ,UAAW,6CACX,MAAO,WACP,MAAO,0BACP,KAAM,gGACN,WAAY,2BACZ,YAAa,gCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,0BACR,EACA,WAAY,CACV,UAAW,2BACX,WAAY,uDACZ,UAAW,+CACX,MAAO,WACP,MAAO,0BACP,KAAM,kGACN,WAAY,2BACZ,YAAa,gCACb,YAAa,kBACb,iBAAkB,qBAClB,SAAU,aACV,KAAM,0BACR,CACF,CACF,EAEM,MAAiB,CACrB,GAAM,CAAE,OAAM,GAAM,GAAe,EAC7B,EAAO,GAAc,EAAK,kBAAoB,EAAK,QAAQ,EAC3D,EAAO,EAAK,IAAS,EAAK,GAC1B,EAAc,EAAE,kBAAmB,CAAE,cAAe,EAAK,CAAC,GAAK,CAAC,EAChE,EAAsB,MAAM,QAAQ,EAAY,YAAY,EAAI,EAAY,aAAa,OAAO,OAAO,EAAI,CAAC,EAC5G,EAAc,OAAO,OAAW,IAAc,OAAO,SAAS,SAAW,oBACzE,EAAgB,EAAkB,IAAS,EAAkB,GAC7D,EAAkB,OAAO,OAAO,CAAa,EAAE,KAAM,GAAc,EAAY,WAAW,EAAU,UAAU,CAAC,GAAK,KACpH,EAAyB,EAAkB,GAAG,EAAgB,UAAU,SAAW,YACnF,EAAkB,CAAE,aAAc,GAAiB,WAAa,SAAU,EAC1E,GAAc,EAAM,EAAS,CAAC,IAAM,EAAe,EAAM,CAAE,GAAG,EAAQ,GAAG,CAAgB,CAAC,EAC1F,GAA2B,EAAO,EAAM,EAAS,CAAC,IACtD,EAA4B,EAAO,EAAM,CAAE,GAAG,EAAQ,GAAG,CAAgB,CAAC,EACtE,GAAqB,EAAM,IAAW,GAAgB,EAAM,GAAG,EAAuB,GAAG,GAAQ,EACjG,EAAsB,EAAgC,GAAiB,SAAS,GAAK,iBACrF,EAAe,iCACf,GACJ,IAAS,KACL,yEACA,8HACA,GACJ,IAAS,KACL,yFACA,uJACA,GACJ,IAAS,KACL,mFACA,wKACA,EAAoB,IAAS,KAAO,QAAU,UAC9C,EAAiB,EAAE,+BAAgC,CAAE,aAAc,iCAAkC,CAAC,EACtG,EAAc,EAAE,4BAA6B,CAAE,aAAc,EAAG,CAAC,EACjE,EAAgB,UAAU,EAAa,WAAW,mBAAmB,CAAc,EAAE,QAAQ,mBACjG,CACF,IACM,EAAc,EAAkB,sBAAuB,iBAAiB,EAExE,EAAgC,GACpC,EAAuB,CACrB,YAAa,GAAG,EAAuB,GAAG,IAC1C,OAAQ,iBACR,WAAY,cACZ,gBAAiB,aACjB,MAAO,eACP,SAAU,cACV,QAAS,cACX,CAAC,EACG,EAEF,EAA6B,4BAA4B,EACvD,GAEF,EAA6B,8BAA8B,EACzD,EAEF,IAAS,KACP,iBACA,qBACA,EAAoB,EAAkB,sBAAuB,qBAAqB,EAClF,GAAW,EAAkB,IAAK,kBAAkB,EACpD,GAAY,EAAkB,UAAW,mBAAmB,EAC5D,GAAoB,EAAkB,WAAY,qBAAqB,EACvE,GAAc,EAAkB,WAAY,cAAc,EAC1D,GAAY,EAAkB,SAAU,YAAY,EACpD,GAAc,EAAkB,WAAY,cAAc,EAC1D,GAAY,EAAkB,SAAU,YAAY,EACpD,GAAe,EAAkB,YAAa,eAAe,EAC7D,GAAY,EAAkB,SAAU,YAAY,EACpD,GAAyB,EAAuB,CACpD,YAAa,GAAG,EAAuB,4BACvC,OAAQ,CACV,CAAC,EACK,GAAsB,EAAkB,2BAA4B,yBAAyB,EAC7F,EAAwB,GAAiB,aAAe,+BAExD,GAAoB,GAAG,IADE,EAAsB,SAAS,GAAG,EAAI,IAAM,IACC,eAAe,EAAuB,UAC5G,GAAqB,yCAAyC,EAAuB,YACrF,GAA0B,EAAuB,CACrD,YAAa,GAAG,EAAuB,iBACvC,OAAQ,CACV,CAAC,EACK,GAAkB,uBAAuB,EAAuB,QAChE,GAA0B,IAAS,KAAO,YAAc,oBACxD,EAAgB,EAAsB,IAAS,EAAsB,GACrE,GAAA,EAAA,EAAA,aAAmC,EAAc,MAAM,IAAK,GAAS,EAAK,EAAE,EAAG,CAAC,EAAc,KAAK,CAAC,EACpG,GAAA,EAAA,EAAA,aAAkC,CACtC,GAAI,OAAO,OAAW,IAAa,OAAO,KAC1C,IAAM,EAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,QAAQ,EAEvE,OADI,EAAmB,SAAS,CAAM,EAAU,EACzC,GAA2B,EAAoB,IAAI,CAC5D,EAAG,CAAC,CAAkB,CAAC,EACjB,EAAwB,GAC1B,EAAc,MAAM,KAAM,GAAS,EAAK,KAAO,CAAiB,GAChE,KACE,GAAwB,EAC1B,CAAC,EAAuB,GAAG,EAAc,MAAM,OAAQ,GAAS,EAAK,KAAO,EAAsB,EAAE,CAAC,EACrG,EAAc,MACZ,GAA0B,EAC5B,GAAG,EAAsB,YAAY,MAAM,EAAK,mBAChD,GACE,EAAuB,cAWvB,GAAiB,IAAS,KAAO,oBAAsB,gCACvD,GACJ,IAAS,KACL,mDACA,6GACA,GAAgB,IAAS,KAAO,mBAAqB,0BACrD,GAAkB,IAAS,KAAO,kBAAoB,wBACtD,GAA2B,IAAS,KAAO,qBAAuB,8BAClE,EAAsB,IAAS,KAAO,mBAAqB,iCAC3D,GAAqB,IAAS,KAAO,mBAAqB,2BAC1D,GAAc,IAAS,KAAO,gBAAkB,4BAChD,EAAkB,EAAE,cAAe,CAAE,aAAc,MAAO,CAAC,EAC3D,EAAkB,EAAE,sBAAuB,CAAE,aAAc,eAAgB,CAAC,EAC5E,EAAkB,OAAO,OAAW,IAAc,GAAO,OAAO,WAAW,oBAAoB,EAAE,QACjG,GAAsB,IAAS,KAAO,QAAU,UAChD,EAA0B,mBAC1B,GAAW,EAAK,OAAS,CAAC,GAAG,KAAM,GAAS,EAAK,KAAO,KAAK,EAC7D,GAAgB,EAAK,OAAS,CAAC,GAAG,KAAM,GAAS,EAAK,KAAO,UAAU,EACvE,EAAsB,EAAK,qBAAuB,CAAC,EACnD,GAAc,CAClB,KAAK,EAAoB,MAAQ,iCACjC,EAAK,kBACL,GACA,KAAK,EAAoB,OAAS,gCAClC,EAAK,mBACL,GACA,KAAK,EAAoB,UAAY,iCACrC,EAAK,cACL,GACA,KAAK,EAAoB,MAAQ,aACjC,EAAK,QACL,GACA,KAAK,EAAoB,YAAc,sBACvC,EAAK,aACP,EAAE,KAAK;CAAI,EAYX,OAVA,GAAa,kBAAmB,CAAE,aAAc,GAAiB,WAAa,EAAK,KAAM,CAAC,GAE1F,EAAA,EAAA,eAAgB,CACd,EAAe,YAAa,CAAE,KAAM,YAAa,aAAc,GAAiB,WAAa,SAAU,CAAC,CAC1G,EAAG,CAAC,GAAiB,SAAS,CAAC,GAE/B,EAAA,EAAA,eAAgB,CACV,GAAuB,IAAI,GAAqB,EAAsB,EAAE,CAC9E,EAAG,CAAC,CAAqB,CAAC,GAGxB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4FAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAe,CAAA,GACf,EAAA,EAAA,KAAC,GAAD,CACE,QAAQ,OACR,OAAO,QACG,YACC,aACX,YAAa,GACA,cACb,aAAe,GACb,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAElG,eAAiB,GACf,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,gBAAiB,CAAC,EAE/F,eAAiB,GACf,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,iBAAkB,CAAC,EAEhG,WAAY,CACV,KAAM,EACN,OACE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,0CAAhB,CACG,EAAK,KAAK,QAAQ,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACvC,IAER,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,0BAA2B,CAAC,CAC3G,CACD,CAAA,GAED,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,mDAAhB,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mDAAnB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gJAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,KACH,KACL,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,yDAAiD,EAAK,KAAU,CAAA,GAC9E,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kDAA0C,EAAK,QAAY,CAAA,EACvE,EAAK,WAAY,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,QAAY,CAAA,GAC1E,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,wBAAyB,CAAC,EAEvG,UAAU,4IALZ,CAOG,EAAK,KAAK,QAAQ,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC1C,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,qBAAsB,CAAC,EAEpG,UAAU,mLALZ,CAOG,EAAqB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC7C,GACA,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wGAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oDAA4C,EAAK,UAAgB,CAAA,GAChF,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gCAAf,EACE,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,oBAAqB,CAAC,EAEnG,UAAU,sFAET,EAAK,WAAW,OAChB,CAAA,GACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,kBAAmB,CAAC,EAEjG,UAAU,sFAET,EAAK,WAAW,KAChB,CAAA,GACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,oBAAqB,CAAC,EAEnG,UAAU,sFAET,EAAK,WAAW,OAChB,CAAA,GACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,kBAAmB,CAAC,EAEjG,UAAU,sFAET,EAAK,WAAW,KAChB,CAAA,GACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,qBAAsB,CAAC,EAEpG,UAAU,sFAET,EAAK,WAAW,QAChB,CAAA,GACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,kBAAmB,CAAC,EAEjG,UAAU,sFAET,EAAK,WAAW,KAChB,CAAA,CACA,KACL,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,sCAAb,CACG,GAAiB,IACjB,EAAkB,IAAE,KACrB,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,UAAU,IAChB,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,oBAAqB,CAAC,EAEnG,UAAU,6DAET,CACA,CAAA,CACF,GACA,IACJ,IACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0GAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8EACZ,EAAgB,KACd,CAAA,GACL,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,0CAAkC,EAAgB,KAAU,CAAA,GAC1E,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kDAA0C,EAAgB,IAAQ,CAAA,GAC/E,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wDAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,4BAA6B,CAAC,EAE3G,UAAU,gJALZ,CAOG,EAAgB,WAAW,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACnD,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,6BAA8B,CAAC,EAE5G,UAAU,8KALZ,CAOG,EAAgB,YAAY,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACpD,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,kCAAmC,CAAC,EAEjH,UAAU,8KALZ,CAOG,EAAgB,iBAAiB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACzD,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,yBAA0B,CAAC,EAExG,UAAU,8KALZ,CAOG,EAAgB,SAAS,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACjD,GACA,KACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAgB,IAAQ,CAAA,CAC5D,GAEA,KAET,EAAA,EAAA,KAAC,GAAD,CACE,IAAK,GACL,QAAS,GACT,UAAU,oBACV,QAAQ,QACR,gBAAmB,EAAW,qBAAsB,CAAE,KAAM,YAAa,MAAO,wBAAyB,CAAC,CAC3G,CAAA,GAED,EAAA,EAAA,KAAC,UAAD,CAAS,GAAG,kBAAkB,UAAU,8BACtC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+EAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,eAAqB,CAAA,EACxE,EAAK,iBAAkB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,cAAkB,CAAA,GACtF,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,gBAAsB,CAAA,CACrF,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,iBACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,2BAA4B,CAAC,EACpG,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACI,EAAK,mBAAqB,CAAC,GAAG,OAAS,IACvC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,4CACX,EAAK,kBAAkB,IAAK,IAC3B,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,kCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,kCAAoC,CAAA,GACtE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,CAAW,CAAA,CAChB,GAHK,CAGL,CACL,CACC,CAAA,GAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAK,mBACL,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,kCAAmC,CAAC,EAEjH,UAAU,gJALZ,CAOG,EAAK,uBAAuB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACpD,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,mCAAoC,CAAC,EAElH,UAAU,8KALZ,CAOG,EAAK,wBAAwB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACrD,GACA,GACF,GACF,IACJ,EAAK,iBAAkB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,cAAkB,CAAA,CACnF,GACE,CAAA,GAET,EAAA,EAAA,KAAC,GAAD,CACE,QAAA,GACA,KAAK,aACL,QAAU,GAAU,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,qBAAsB,CAAC,EACtH,UAAU,kBACX,CAAA,GAED,EAAA,EAAA,KAAC,GAAD,CACQ,OACN,UAAU,2BACV,gBAAiB,CAAE,aACjB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,0BAA2B,KAAM,CAAQ,CAAC,EAEnG,aAAc,EAAO,CAAE,aACrB,EAAwB,EAAO,iBAAkB,CAC/C,KAAM,YACN,IAAK,wBACL,KAAM,CACR,CAAC,EAEH,gBAAiB,EAAO,CAAE,aACxB,EAAwB,EAAO,iBAAkB,CAC/C,KAAM,YACN,IAAK,2BACL,KAAM,EACN,YAAa,EAAM,cAAc,KAAK,SAAS,SAAS,EAAI,MAAQ,IACtE,CAAC,CAEJ,CAAA,GAED,EAAA,EAAA,KAAC,GAAD,CAA0B,OAAM,UAAU,0BAA4B,CAAA,GAEtE,EAAA,EAAA,KAAC,GAAD,CAAU,UAAU,0BAA4B,CAAA,EAE/C,EAAK,WAAa,EAAK,UACtB,EAAA,EAAA,KAAC,UAAD,CAAS,GAAG,OAAO,UAAU,8BAC3B,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,SAAe,CAAA,EAClE,EAAK,WAAY,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,QAAY,CAAA,GACxE,EAAK,aAAe,CAAC,GAAG,OAAS,IACjC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,4CACX,EAAK,YAAY,IAAK,IACrB,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,mCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,kBAAoB,CAAA,EACrD,CACC,GAHK,CAGL,CACL,CACC,CAAA,GAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,OAAa,CAAA,CAC5E,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,QACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,eAAgB,CAAC,EACxF,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,EACX,EAAK,WAAY,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,QAAY,CAAA,CACvE,GACE,CAAA,EAGV,EAAK,gBAAkB,EAAK,eAC3B,EAAA,EAAA,KAAC,UAAD,CAAS,UAAU,8BACjB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,cAAoB,CAAA,GACxE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uIAA8H,KAExI,CAAA,CACH,IACJ,EAAK,gBAAiB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,aAAiB,CAAA,GACpF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,YAAkB,CAAA,CACjF,CAAA,GACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,2CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,aACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,iBAAkB,CAAC,EAC1F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,GACZ,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,iBAAkB,CAAC,EAEhG,UAAU,8IALZ,CAOG,EAAqB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC7C,GACA,IACJ,EAAK,gBAAiB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,aAAiB,CAAA,CACjF,GACE,CAAA,EAGV,EAAK,oBACJ,EAAA,EAAA,KAAC,UAAD,CAAS,UAAU,8BACjB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,mBAAyB,CAAA,GAC7E,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oIACb,EACG,CAAA,CACH,IACJ,EAAK,qBAAsB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,kBAAsB,CAAA,GAC9F,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,QAAQ,KAAM,WAAjC,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,+GAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,CAAsB,CAAA,GAC7B,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,wEAA0E,CAAA,CACpG,KACT,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,iBAAuB,CAAA,CACtF,CAAA,CACE,KACT,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,kBACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,sBAAuB,CAAC,EAC/F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,EACX,EAAK,aACJ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,oEAAf,CACG,EAAK,eAAgB,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,YAAmB,CAAA,GACrD,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mHAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,UAAiB,CAAA,GAC7B,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,WACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAC5F,UAAU,yHACX,CAAA,CACE,KACL,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAElG,UAAU,8GALZ,CAOG,EAAqB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC7C,GACA,GAEJ,GACE,CAAA,GAGX,EAAA,EAAA,KAAC,UAAD,CAAS,UAAU,qCAChB,EAAK,MAAM,KAAK,EAAM,KACrB,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,6EAAhC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+CAAf,CAAqD,QAAM,EAAQ,CAAO,KAC1E,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,KAAW,CAAA,GAC/D,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kDAA0C,EAAK,IAAQ,CAAA,CACjE,GAJK,EAAK,KAIV,CACN,CACM,CAAA,EAER,EAAK,iBACJ,EAAA,EAAA,MAAC,UAAD,CAAS,GAAG,YAAY,UAAU,6EAAlC,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,cAAoB,CAAA,EACvE,EAAK,gBAAiB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,aAAiB,CAAA,GACpF,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,6CACV,EAAK,kBAAoB,CAAC,GAAG,IAAK,IAClC,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,mCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,kBAAoB,CAAA,EACrD,CACC,GAHK,CAGL,CACL,CACC,CAAA,EACH,EAAK,gBAAiB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,aAAiB,CAAA,CAC7E,KAGX,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,6EAAnB,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,UAAgB,CAAA,GACpE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,4CACX,EAAK,aAAa,IAAK,IACtB,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,mCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,gBAAkB,CAAA,EACnD,CACC,GAHK,CAGL,CACL,CACC,CAAA,CACG,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,GAAG,aAAa,UAAU,6EAAnC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,UAAgB,CAAA,GACpE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6IACb,IAAS,KAAO,KAAO,aACpB,CAAA,CACH,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,GACP,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAC5F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,EAAK,kBAAoB,GAAa,CACvC,CAAA,CAAA,CAEM,CAAA,EACX,EAAK,kBAAmB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,kCAA0B,EAAK,eAAsB,CAAA,CAC3F,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,GAAS,OAAS,EAAK,oBAA0B,CAAA,GAChG,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oIACb,GAAS,OAAS,KACf,CAAA,CACH,KACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,GAAS,MAAQ,EAAK,mBAAuB,CAAA,GACpF,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,QAAQ,KAAM,WAAjC,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,+GAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,CAAsB,CAAA,GAC7B,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,wEAA0E,CAAA,CACpG,KACT,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,kBAAwB,CAAA,CACvF,CAAA,CACE,KACT,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,mBACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,qBAAsB,CAAC,EAC9F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,KAEL,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,yEAAnB,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mGAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,GAAc,OAAS,EAAK,eAAsB,CAAA,GACzD,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,mCAAhB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oIACb,GAAc,OAAS,UACpB,CAAA,GACN,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,gBAAkB,CAAA,CAC/C,GACC,KACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,GAAc,MAAQ,EAAK,cAAkB,CAAA,GACpF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,aAAmB,CAAA,CAClF,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,cACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,0BAA2B,CAAC,EACnG,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,GACE,GACF,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,GAAG,kBAAkB,UAAU,6EAAxC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAc,KAAW,CAAA,GACxE,EAAA,EAAA,KAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,gCAAiC,CAAC,EAE/G,UAAU,kFAET,EAAK,KAAK,OACV,CAAA,CACA,KACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAc,IAAQ,CAAA,EAC5D,IACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8EACZ,IAAS,KAAO,aAAe,iBAC7B,CAAA,GACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAsB,KAAW,CAAA,GAChF,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCACV,IAAS,KACN,mEACA,yHACH,CAAA,CACA,KACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+EACZ,EAAsB,UACpB,CAAA,CACF,KACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAsB,WAAiB,CAAA,CACjG,CAAA,GACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,2CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAsB,YAC7B,aACE,EAAW,iBAAkB,CAC3B,KAAM,YACN,IAAK,gCAAgC,EAAsB,IAC7D,CAAC,EAEH,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,EAAc,gBAC5B,CAAA,CAAA,CAEM,CAAA,GACZ,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,GACP,aACE,EAAW,iBAAkB,CAC3B,KAAM,YACN,IAAK,kCAAkC,EAAsB,IAC/D,CAAC,EAEH,UAAU,4LAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,IAAc,IAAS,KAAO,iBAAmB,0BAClD,CAAA,CAAA,CAEM,CAAA,CACT,GACF,KAEP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qCACZ,GAAsB,IAAK,IAC1B,EAAA,EAAA,MAAC,MAAD,CAEE,UAAW,oCACT,EAAK,KAAO,EACR,oCACA,8CALR,EAQE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,KAAW,CAAA,EAC9D,EAAK,KAAO,IACX,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oIACb,IAAS,KAAO,MAAQ,UACrB,CAAA,CAEL,KACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+EAAuE,EAAK,UAAgB,CAAA,GAC3G,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,IAAQ,CAAA,CACjD,KACL,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EAAK,aACX,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,EAAK,KAAM,CAAC,EACnF,UAAU,sLAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,aACL,GACA,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oFACZ,EAAc,YACZ,CAAA,GACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,WAAiB,CAAA,CAChF,KACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,YACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,uBAAuB,EAAK,IAAK,CAAC,EACzG,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,EAAc,gBAC5B,CAAA,CAAA,CAEM,CAAA,GACZ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oFACZ,EAAc,WACZ,CAAA,GACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,MAAY,CAAA,CAC3E,KACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,OACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,kBAAkB,EAAK,IAAK,CAAC,EACpG,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,EAAc,eAC5B,CAAA,CAAA,CAEM,CAAA,CACT,GAlEE,EAAK,EAkEP,CACN,CACE,CAAA,GACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAc,WAAiB,CAAA,GAC9E,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,4CACX,EAAc,cAAc,IAAK,IAChC,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,kCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,gCAAkC,CAAA,GACpE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,CAAW,CAAA,CAChB,GAHK,CAGL,CACL,CACC,CAAA,CACD,KACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAc,WAAe,CAAA,CAC7D,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,qBAAnB,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2EACZ,IAAS,KAAO,QAAU,qBACxB,CAAA,GAEL,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,yEAAnB,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mGAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,WAAkB,CAAA,GAC9B,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4EAAhB,CACG,IAAS,KAAO,KAAO,YACxB,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,gBAAkB,CAAA,CAC/C,GACC,KACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,UAAc,CAAA,GAC1D,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,MAAY,CAAA,CAC3E,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,OACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAC5F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,GACE,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,yEAAnB,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mGAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,aAAoB,CAAA,GAChC,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4EAAhB,CACG,IAAS,KAAO,KAAO,YACxB,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,gBAAkB,CAAA,CAC/C,GACC,KACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,YAAgB,CAAA,GAC5D,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,QAAc,CAAA,CAC7E,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,SACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,eAAgB,CAAC,EACxF,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,GACE,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,GAAG,YAAY,UAAU,yEAAlC,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mGAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,aAAoB,CAAA,GAChC,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4EAAhB,CACG,IAAS,KAAO,KAAO,YACxB,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,gBAAkB,CAAA,CAC/C,GACC,KACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,YAAgB,CAAA,GAC5D,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,8CACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,iBAAkB,CAAC,EAC1F,UAAU,8IAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,cACL,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,4CACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,UAAW,CAAC,EACnF,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,WACL,GACA,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+EACZ,EAAK,eACH,CAAA,GACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,cAAkB,CAAA,GAC9D,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,qDACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,4BAA6B,CAAC,EACrG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,gBACL,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,8CACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,qBAAsB,CAAC,EAC9F,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EAAK,iBACL,GACA,GACF,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+EAAuE,EAAoB,CAAA,GAC1G,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAiB,CAAA,GACxD,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,kEACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,yBAA0B,CAAC,EAClG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EACA,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,iEACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,2BAA4B,CAAC,EACpG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EACA,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,2DACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,0BAA2B,CAAC,EACnG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EACA,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,8DACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,8BAA+B,CAAC,EACvG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,CACA,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,yDACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,wBAAyB,CAAC,EACjG,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EACA,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,yDACN,SAAA,GACA,YAAe,EAAW,gBAAiB,CAAE,KAAM,YAAa,MAAO,sBAAuB,CAAC,EAC/F,UAAU,gKAJZ,EAME,EAAA,EAAA,KAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,EACA,GACA,GACF,GACF,GACE,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,yEAAnB,EACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,mGAAnB,EACE,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAK,SAAgB,CAAA,GAC5B,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4EAAhB,CACG,IAAS,KAAO,KAAO,YACxB,EAAA,EAAA,KAAC,EAAD,CAAa,KAAM,GAAI,UAAU,gBAAkB,CAAA,CAC/C,GACC,KACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kCAA0B,EAAK,QAAY,CAAA,GACxD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,OAAa,CAAA,CAC5E,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,QACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,eAAgB,CAAC,EACxF,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,GACZ,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA8C,EAAK,aAAmB,CAAA,CAClF,CAAA,GACL,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAK,cACZ,aAAgB,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,sBAAuB,CAAC,EAC/F,UAAU,uLAER,CAAE,gBACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAK,CAAA,EACzB,GAAa,CACd,CAAA,CAAA,CAEM,CAAA,CACT,GACE,GACF,KAET,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,6EAAnB,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAK,QAAc,CAAA,GAClE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,4CACX,EAAK,WAAW,IAAK,IACpB,EAAA,EAAA,MAAC,KAAD,CAAe,UAAU,mCAAzB,EACE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,GAAI,UAAU,gBAAkB,CAAA,EACnD,CACC,GAHK,CAGL,CACL,CACC,CAAA,GACJ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gDAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GAAU,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,eAAgB,CAAC,EAChH,UAAU,8IAHZ,CAKG,EAAqB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC7C,KACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GAAU,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,4BAA6B,CAAC,EAC7H,UAAU,gKAHZ,CAKG,EAAK,KAAK,OAAO,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACzC,GACA,GACE,KAET,EAAA,EAAA,MAAC,UAAD,CACE,GAAG,iBACH,UAAU,+FAFZ,EAIE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCAAgC,EAAY,OAAS,EAAE,uBAAuB,CAAO,CAAA,GACpG,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kDAA0C,EAAY,MAAQ,EAAE,sBAAsB,CAAO,CAAA,EAC3G,EAAoB,OAAS,IAC5B,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,2DACX,EAAoB,IAAK,IACxB,EAAA,EAAA,KAAC,KAAD,CAAA,SAAgB,CAAS,EAAhB,CAAgB,CAC1B,CACC,CAAA,GAEN,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,2BAA4B,CAAC,EAE1G,UAAU,iHALZ,CAOG,GAAwB,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAChD,KACH,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,2CAAf,EACE,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,sBAAuB,CAAC,EAErG,UAAU,mJALZ,CAOG,EAAY,UAAY,EAAE,0BAA0B,EAAE,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CAC9E,KACH,EAAA,EAAA,KAAC,IAAD,CACE,KAAK,+BACL,OAAO,SACP,IAAI,sBACJ,YAAe,EAAW,iBAAkB,CAAE,KAAM,YAAa,IAAK,mBAAoB,CAAC,EAC3F,UAAU,uKAET,EAAY,OAAS,EAAE,uBAAuB,CAC9C,CAAA,GACH,EAAA,EAAA,MAAC,IAAD,CACE,KAAM,GACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,mCAAoC,CAAC,EAElH,UAAU,sMALZ,CAOG,EAAY,aAAe,EAAE,6BAA6B,EAAE,KAAC,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACpF,GACA,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kCAAf,CACG,EAAY,YAAc,EAAE,4BAA4B,EAAG,KAC5D,EAAA,EAAA,KAAC,IAAD,CAAG,KAAM,UAAU,IAAgB,UAAU,yDAC1C,CACA,CAAA,CACA,GACE,GACL,KACN,EAAA,EAAA,KAAC,GAAD,CACE,QAAS,CACP,MAAO,EAAK,KAAK,QACjB,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,qBAAsB,CAAC,CACtG,EACA,UAAW,CACT,MAAO,EAAK,KAAK,OACjB,KAAM,EACN,QAAU,GACR,EAAwB,EAAO,iBAAkB,CAAE,KAAM,YAAa,IAAK,eAAgB,CAAC,CAChG,CACD,CAAA,CACE,GAET"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./chunk-BHe-jwch.js";import{S as t,b as n}from"./index-D7D6ZRCW.js";import{n as r,t as i}from"./circle-check-X08qqy40.js";import{r as a,t as o}from"./CopyButton-BFCx6EPg.js";import{t as s}from"./download-BXzoc-Y3.js";import{n as c,r as l,t as u}from"./agentHandoff-BGmHqDwv.js";var d=e(t(),1),f=n(),p={en:[{id:`claude_code`,title:`Claude Code`,configFile:`.mcp.json`,note:`Project-local MCP config for Claude Code.`,initCommand:`npx --yes shipscreens@latest mcp init --client claude`,downloadHref:`/downloads/shipscreens-claude-code-mcp.json`,downloadLabel:`Download .mcp.json`},{id:`cursor`,title:`Cursor`,configFile:`.cursor/mcp.json`,note:`Project-local MCP config for Cursor.`,initCommand:`npx --yes shipscreens@latest mcp init --client cursor`,downloadHref:`/downloads/shipscreens-cursor-mcp.json`,downloadLabel:`Download .cursor/mcp.json`},{id:`vscode_copilot`,title:`VS Code Copilot`,configFile:`.vscode/mcp.json`,note:`Workspace MCP config for agent mode / Copilot.`,initCommand:`npx --yes shipscreens@latest mcp init --client vscode`,downloadHref:`/downloads/shipscreens-vscode-mcp.json`,downloadLabel:`Download .vscode/mcp.json`},{id:`gemini_cli`,title:`Gemini CLI`,configFile:`.gemini/settings.json`,note:`Project-local or home-level MCP config for Gemini CLI.`,initCommand:`npx --yes shipscreens@latest mcp init --client gemini`,downloadHref:`/downloads/shipscreens-gemini-mcp-settings.json`,downloadLabel:`Download .gemini/settings.json`}],ja:[{id:`claude_code`,title:`Claude Code`,configFile:`.mcp.json`,note:`Claude Code 向けのこのプロジェクト用 MCP 設定。`,initCommand:`npx --yes shipscreens@latest mcp init --client claude`,downloadHref:`/downloads/shipscreens-claude-code-mcp.json`,downloadLabel:`.mcp.json をダウンロード`},{id:`cursor`,title:`Cursor`,configFile:`.cursor/mcp.json`,note:`Cursor 向けのこのプロジェクト用 MCP 設定。`,initCommand:`npx --yes shipscreens@latest mcp init --client cursor`,downloadHref:`/downloads/shipscreens-cursor-mcp.json`,downloadLabel:`.cursor/mcp.json をダウンロード`},{id:`vscode_copilot`,title:`VS Code Copilot`,configFile:`.vscode/mcp.json`,note:`VS Code Agent Mode / Copilot 向けの MCP 設定。`,initCommand:`npx --yes shipscreens@latest mcp init --client vscode`,downloadHref:`/downloads/shipscreens-vscode-mcp.json`,downloadLabel:`.vscode/mcp.json をダウンロード`},{id:`gemini_cli`,title:`Gemini CLI`,configFile:`.gemini/settings.json`,note:`Gemini CLI 向けの MCP 設定(このプロジェクトまたはホーム)。`,initCommand:`npx --yes shipscreens@latest mcp init --client gemini`,downloadHref:`/downloads/shipscreens-gemini-mcp-settings.json`,downloadLabel:`.gemini/settings.json をダウンロード`}]},m={en:{eyebrow:`Recommended`,title:`Choose your coding agent, then review the release proof.`,body:`ShipScreens works best when the coding agent already in your workflow inspects the repo, chooses workspace-local MCP or CLI, captures connected device/emulator screens when needed, then builds, verifies, stages, and reports the screenshot release outputs.`,chooseTitle:`1. Choose your coding agent`,chooseBody:`Pick the coding agent already in your workflow. Use the one-time setup command only when workspace-local MCP is supported.`,initLabel:`One-time MCP setup`,initCopyLabel:`Copy init command`,bundleCopyLabel:`Copy bootstrap + prompt`,promptTitle:`2. Paste the agent prompt`,promptBody:`One prompt is enough. The agent should keep your current screenshot workflow, choose MCP or CLI, capture visible device/emulator screens when no PNG folder exists, run verify/stage, and only ask when device/locale scope, panel #1 messaging, or upload approval is unclear.`,promptCopyLabel:`Copy agent prompt`,doneTitle:`3. Review the export proof`,doneBullets:[`Panel #1 is concrete and specific to this app.`,`01..05 naming, panel order, and upload roots are stable.`,`Output paths, warnings, and next steps are clear.`,`Only then unlock Pro or expand devices and locales.`],guideLabel:`Open the full setup guide`,note:`Best UX: tell the coding agent once, then review the proof.`},ja:{eyebrow:`おすすめ`,title:`使っている coding agent を選び、release proof を確認する。`,body:`ShipScreens は、普段使っている coding agent に repo を確認させ、MCP か CLI を選ばせ、必要なら接続端末/エミュレータ画面を capture し、build / verify / stage / report まで進めるのが最短です。`,chooseTitle:`1. 使う coding agent を選ぶ`,chooseBody:`今の開発フローで使っている coding agent を選びます。MCP をこのワークスペースで使う場合だけ、一度だけ設定します。`,initLabel:`1回だけのMCP設定`,initCopyLabel:`設定コマンドをコピー`,bundleCopyLabel:`設定 + プロンプトをコピー`,promptTitle:`2. coding agent に渡すプロンプト`,promptBody:`この1文で十分です。今のスクショ運用を維持したまま、MCP か CLI を選び、PNGフォルダが無ければ表示中の端末/エミュレータ画面を capture し、verify/stage と report まで進め、端末/言語スコープ、1枚目訴求、アップロード承認が不明なときだけ確認します。`,promptCopyLabel:`coding agent 用プロンプトをコピー`,doneTitle:`3. エクスポートの proof を確認する`,doneBullets:[`1枚目訴求がこのアプリ固有で具体的になっている。`,`01..05 の命名、訴求順、アップロード用フォルダが安定している。`,`出力パス、警告、次の作業が明確になっている。`,`その後で Pro 解除や端末/言語拡張に進む。`],guideLabel:`coding agent ガイドを見る`,note:`おすすめは、1回渡して proof だけ確認することです。`}},h=e=>(e||``).split(`-`)[0]===`ja`?`ja`:`en`,g=(e,t,n)=>{if(!e||!t||!n)return e;let[r,i=``]=String(e).split(`#`);return`${r}${r.includes(`?`)?`&`:`?`}${encodeURIComponent(t)}=${encodeURIComponent(n)}${i?`#${i}`:``}`},_=({lang:e=`en`,prompt:t,promptTitle:n,promptBody:_,promptNote:v,guideHref:y,guideLabel:b,sectionId:x,initialClientId:S,onClientSelected:C,onPromptCopied:w,onBundleCopied:T,onClientCommandCopied:E,onClientDownload:D,onGuideClick:O,className:k=``})=>{let A=h(e),j=m[A],M=p[A],N=M[1]?.id||M[0]?.id||null,P=M.map(e=>e.id),[F,I]=(0,d.useState)(()=>l(S,P,null)||c(P,N)),L=(0,d.useMemo)(()=>M.find(e=>e.id===F)||M[0],[F,M]),R=`${L.initCommand}\n\n${t}`,z=y?g(y,`client`,L.id):null;return(0,d.useEffect)(()=>{let e=l(S,P,null);e&&e!==F&&I(e)},[F,S,P]),(0,d.useEffect)(()=>{L?.id&&u(L.id)},[L]),(0,f.jsxs)(`section`,{id:x,className:`scroll-mt-24 bg-slate-900/70 border border-blue-500/30 rounded-2xl p-5 space-y-5 ${k}`.trim(),children:[(0,f.jsxs)(`div`,{className:`space-y-2`,children:[(0,f.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.2em] text-blue-200 font-semibold`,children:j.eyebrow}),(0,f.jsx)(`h2`,{className:`text-xl font-bold text-white`,children:j.title}),(0,f.jsx)(`p`,{className:`text-sm text-slate-300 leading-relaxed`,children:j.body})]}),(0,f.jsxs)(`div`,{className:`grid xl:grid-cols-[0.95fr_1.05fr] gap-5 items-start`,children:[(0,f.jsxs)(`div`,{className:`space-y-3`,children:[(0,f.jsxs)(`div`,{className:`space-y-1`,children:[(0,f.jsx)(`div`,{className:`text-sm font-bold text-white`,children:j.chooseTitle}),(0,f.jsx)(`p`,{className:`text-xs text-slate-400`,children:j.chooseBody})]}),(0,f.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:M.map(e=>(0,f.jsxs)(`button`,{type:`button`,onClick:()=>{I(e.id),C?.(e)},className:`rounded-xl border px-3 py-2 text-left transition ${e.id===L.id?`border-blue-400 bg-blue-500/10 text-white`:`border-slate-800 bg-slate-950 text-slate-300 hover:bg-slate-900`}`,children:[(0,f.jsx)(`div`,{className:`text-sm font-semibold`,children:e.title}),(0,f.jsx)(`div`,{className:`text-[11px] text-slate-500`,children:e.configFile})]},e.id))}),(0,f.jsxs)(`div`,{className:`rounded-2xl border border-slate-800 bg-slate-950/80 p-4 space-y-3`,children:[(0,f.jsxs)(`div`,{className:`space-y-1`,children:[(0,f.jsx)(`div`,{className:`text-sm font-bold text-white`,children:L.title}),(0,f.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold`,children:L.configFile}),(0,f.jsx)(`p`,{className:`text-xs text-slate-400`,children:L.note})]}),(0,f.jsxs)(`div`,{className:`rounded-xl border border-slate-800 bg-slate-950 p-3 space-y-2`,children:[(0,f.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold`,children:j.initLabel}),(0,f.jsx)(`pre`,{className:`text-xs text-slate-200 whitespace-pre-wrap`,children:L.initCommand})]}),(0,f.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2`,children:[(0,f.jsx)(o,{value:L.initCommand,onCopied:()=>E?.(L),className:`inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold`,children:({copyLabel:e,copyState:t})=>(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(a,{size:14}),t===`idle`?j.initCopyLabel:e||j.initCopyLabel]})}),(0,f.jsx)(o,{value:R,onCopied:()=>T?.(L),className:`inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-blue-500/40 bg-blue-500/10 text-blue-100 hover:bg-blue-500/15 transition text-xs font-semibold`,children:({copyLabel:e,copyState:t})=>(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(a,{size:14}),t===`idle`?j.bundleCopyLabel:e||j.bundleCopyLabel]})}),(0,f.jsxs)(`a`,{href:L.downloadHref,download:!0,onClick:()=>D?.(L),className:`inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold`,children:[(0,f.jsx)(s,{size:14}),L.downloadLabel]})]})]})]}),(0,f.jsxs)(`div`,{className:`space-y-3`,children:[(0,f.jsxs)(`div`,{className:`space-y-1`,children:[(0,f.jsx)(`div`,{className:`text-sm font-bold text-white`,children:n||j.promptTitle}),(0,f.jsx)(`p`,{className:`text-xs text-slate-400`,children:_||j.promptBody})]}),(0,f.jsxs)(`div`,{className:`rounded-2xl border border-slate-800 bg-slate-950/80 p-4 space-y-3`,children:[(0,f.jsx)(`pre`,{className:`text-xs text-slate-200 whitespace-pre-wrap`,children:t}),(0,f.jsx)(o,{value:t,onCopied:()=>w?.(L),className:`inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold`,children:({copyLabel:e,copyState:t})=>(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(a,{size:14}),t===`idle`?j.promptCopyLabel:e||j.promptCopyLabel]})})]}),(0,f.jsxs)(`div`,{className:`rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3`,children:[(0,f.jsx)(`div`,{className:`text-sm font-bold text-white`,children:j.doneTitle}),(0,f.jsx)(`ul`,{className:`space-y-2 text-sm text-slate-300`,children:j.doneBullets.map(e=>(0,f.jsxs)(`li`,{className:`flex items-start gap-2`,children:[(0,f.jsx)(i,{size:16,className:`mt-0.5 text-emerald-400 shrink-0`}),(0,f.jsx)(`span`,{children:e})]},e))}),(v||j.note)&&(0,f.jsx)(`p`,{className:`text-xs text-slate-500`,children:v||j.note}),z&&(0,f.jsxs)(`a`,{href:z,onClick:e=>O?.(e,L),className:`inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4`,children:[b||j.guideLabel,` `,(0,f.jsx)(r,{size:14})]})]})]})]})]})};export{_ as t};
2
+ //# sourceMappingURL=AgentHandoffPanel-Bf_AJepG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentHandoffPanel-Bf_AJepG.js","names":[],"sources":["../../src/components/AgentHandoffPanel.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { ArrowRight, CheckCircle2, ClipboardCopy, Download } from 'lucide-react';\nimport CopyButton from './CopyButton';\nimport { persistAgentClientId, readPersistedAgentClientId, resolveAgentClientId } from '../lib/agentHandoff';\n\nconst CLIENTS = {\n en: [\n {\n id: 'claude_code',\n title: 'Claude Code',\n configFile: '.mcp.json',\n note: 'Project-local MCP config for Claude Code.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client claude',\n downloadHref: '/downloads/shipscreens-claude-code-mcp.json',\n downloadLabel: 'Download .mcp.json',\n },\n {\n id: 'cursor',\n title: 'Cursor',\n configFile: '.cursor/mcp.json',\n note: 'Project-local MCP config for Cursor.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client cursor',\n downloadHref: '/downloads/shipscreens-cursor-mcp.json',\n downloadLabel: 'Download .cursor/mcp.json',\n },\n {\n id: 'vscode_copilot',\n title: 'VS Code Copilot',\n configFile: '.vscode/mcp.json',\n note: 'Workspace MCP config for agent mode / Copilot.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client vscode',\n downloadHref: '/downloads/shipscreens-vscode-mcp.json',\n downloadLabel: 'Download .vscode/mcp.json',\n },\n {\n id: 'gemini_cli',\n title: 'Gemini CLI',\n configFile: '.gemini/settings.json',\n note: 'Project-local or home-level MCP config for Gemini CLI.',\n initCommand: 'npx --yes shipscreens@latest mcp init --client gemini',\n downloadHref: '/downloads/shipscreens-gemini-mcp-settings.json',\n downloadLabel: 'Download .gemini/settings.json',\n },\n ],\n ja: [\n {\n id: 'claude_code',\n title: 'Claude Code',\n configFile: '.mcp.json',\n note: 'Claude Code 向けのこのプロジェクト用 MCP 設定。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client claude',\n downloadHref: '/downloads/shipscreens-claude-code-mcp.json',\n downloadLabel: '.mcp.json をダウンロード',\n },\n {\n id: 'cursor',\n title: 'Cursor',\n configFile: '.cursor/mcp.json',\n note: 'Cursor 向けのこのプロジェクト用 MCP 設定。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client cursor',\n downloadHref: '/downloads/shipscreens-cursor-mcp.json',\n downloadLabel: '.cursor/mcp.json をダウンロード',\n },\n {\n id: 'vscode_copilot',\n title: 'VS Code Copilot',\n configFile: '.vscode/mcp.json',\n note: 'VS Code Agent Mode / Copilot 向けの MCP 設定。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client vscode',\n downloadHref: '/downloads/shipscreens-vscode-mcp.json',\n downloadLabel: '.vscode/mcp.json をダウンロード',\n },\n {\n id: 'gemini_cli',\n title: 'Gemini CLI',\n configFile: '.gemini/settings.json',\n note: 'Gemini CLI 向けの MCP 設定(このプロジェクトまたはホーム)。',\n initCommand: 'npx --yes shipscreens@latest mcp init --client gemini',\n downloadHref: '/downloads/shipscreens-gemini-mcp-settings.json',\n downloadLabel: '.gemini/settings.json をダウンロード',\n },\n ],\n};\n\nconst PANEL_COPY = {\n en: {\n eyebrow: 'Recommended',\n title: 'Choose your coding agent, then review the release proof.',\n body:\n 'ShipScreens works best when the coding agent already in your workflow inspects the repo, chooses workspace-local MCP or CLI, captures connected device/emulator screens when needed, then builds, verifies, stages, and reports the screenshot release outputs.',\n chooseTitle: '1. Choose your coding agent',\n chooseBody: 'Pick the coding agent already in your workflow. Use the one-time setup command only when workspace-local MCP is supported.',\n initLabel: 'One-time MCP setup',\n initCopyLabel: 'Copy init command',\n bundleCopyLabel: 'Copy bootstrap + prompt',\n promptTitle: '2. Paste the agent prompt',\n promptBody:\n 'One prompt is enough. The agent should keep your current screenshot workflow, choose MCP or CLI, capture visible device/emulator screens when no PNG folder exists, run verify/stage, and only ask when device/locale scope, panel #1 messaging, or upload approval is unclear.',\n promptCopyLabel: 'Copy agent prompt',\n doneTitle: '3. Review the export proof',\n doneBullets: [\n 'Panel #1 is concrete and specific to this app.',\n '01..05 naming, panel order, and upload roots are stable.',\n 'Output paths, warnings, and next steps are clear.',\n 'Only then unlock Pro or expand devices and locales.',\n ],\n guideLabel: 'Open the full setup guide',\n note: 'Best UX: tell the coding agent once, then review the proof.',\n },\n ja: {\n eyebrow: 'おすすめ',\n title: '使っている coding agent を選び、release proof を確認する。',\n body:\n 'ShipScreens は、普段使っている coding agent に repo を確認させ、MCP か CLI を選ばせ、必要なら接続端末/エミュレータ画面を capture し、build / verify / stage / report まで進めるのが最短です。',\n chooseTitle: '1. 使う coding agent を選ぶ',\n chooseBody: '今の開発フローで使っている coding agent を選びます。MCP をこのワークスペースで使う場合だけ、一度だけ設定します。',\n initLabel: '1回だけのMCP設定',\n initCopyLabel: '設定コマンドをコピー',\n bundleCopyLabel: '設定 + プロンプトをコピー',\n promptTitle: '2. coding agent に渡すプロンプト',\n promptBody:\n 'この1文で十分です。今のスクショ運用を維持したまま、MCP か CLI を選び、PNGフォルダが無ければ表示中の端末/エミュレータ画面を capture し、verify/stage と report まで進め、端末/言語スコープ、1枚目訴求、アップロード承認が不明なときだけ確認します。',\n promptCopyLabel: 'coding agent 用プロンプトをコピー',\n doneTitle: '3. エクスポートの proof を確認する',\n doneBullets: [\n '1枚目訴求がこのアプリ固有で具体的になっている。',\n '01..05 の命名、訴求順、アップロード用フォルダが安定している。',\n '出力パス、警告、次の作業が明確になっている。',\n 'その後で Pro 解除や端末/言語拡張に進む。',\n ],\n guideLabel: 'coding agent ガイドを見る',\n note: 'おすすめは、1回渡して proof だけ確認することです。',\n },\n};\n\nconst normalizeLang = (lang) => ((lang || '').split('-')[0] === 'ja' ? 'ja' : 'en');\n\nconst appendQueryParam = (href, key, value) => {\n if (!href || !key || !value) return href;\n const [beforeHash, hash = ''] = String(href).split('#');\n const separator = beforeHash.includes('?') ? '&' : '?';\n return `${beforeHash}${separator}${encodeURIComponent(key)}=${encodeURIComponent(value)}${hash ? `#${hash}` : ''}`;\n};\n\nconst AgentHandoffPanel = ({\n lang = 'en',\n prompt,\n promptTitle,\n promptBody,\n promptNote,\n guideHref,\n guideLabel,\n sectionId,\n initialClientId,\n onClientSelected,\n onPromptCopied,\n onBundleCopied,\n onClientCommandCopied,\n onClientDownload,\n onGuideClick,\n className = '',\n}) => {\n const locale = normalizeLang(lang);\n const copy = PANEL_COPY[locale];\n const clients = CLIENTS[locale];\n const fallbackClientId = clients[1]?.id || clients[0]?.id || null;\n const validClientIds = clients.map((client) => client.id);\n const [activeClientId, setActiveClientId] = useState(() => {\n const explicitClientId = resolveAgentClientId(initialClientId, validClientIds, null);\n return explicitClientId || readPersistedAgentClientId(validClientIds, fallbackClientId);\n });\n\n const activeClient = useMemo(\n () => clients.find((client) => client.id === activeClientId) || clients[0],\n [activeClientId, clients]\n );\n const combinedHandoffText = `${activeClient.initCommand}\\n\\n${prompt}`;\n const guideHrefWithClient = guideHref ? appendQueryParam(guideHref, 'client', activeClient.id) : null;\n\n useEffect(() => {\n const explicitClientId = resolveAgentClientId(initialClientId, validClientIds, null);\n if (explicitClientId && explicitClientId !== activeClientId) {\n setActiveClientId(explicitClientId);\n }\n }, [activeClientId, initialClientId, validClientIds]);\n\n useEffect(() => {\n if (activeClient?.id) persistAgentClientId(activeClient.id);\n }, [activeClient]);\n\n return (\n <section\n id={sectionId}\n className={`scroll-mt-24 bg-slate-900/70 border border-blue-500/30 rounded-2xl p-5 space-y-5 ${className}`.trim()}\n >\n <div className=\"space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-blue-200 font-semibold\">{copy.eyebrow}</div>\n <h2 className=\"text-xl font-bold text-white\">{copy.title}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.body}</p>\n </div>\n\n <div className=\"grid xl:grid-cols-[0.95fr_1.05fr] gap-5 items-start\">\n <div className=\"space-y-3\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{copy.chooseTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.chooseBody}</p>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n {clients.map((client) => {\n const active = client.id === activeClient.id;\n return (\n <button\n key={client.id}\n type=\"button\"\n onClick={() => {\n setActiveClientId(client.id);\n onClientSelected?.(client);\n }}\n className={`rounded-xl border px-3 py-2 text-left transition ${\n active\n ? 'border-blue-400 bg-blue-500/10 text-white'\n : 'border-slate-800 bg-slate-950 text-slate-300 hover:bg-slate-900'\n }`}\n >\n <div className=\"text-sm font-semibold\">{client.title}</div>\n <div className=\"text-[11px] text-slate-500\">{client.configFile}</div>\n </button>\n );\n })}\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/80 p-4 space-y-3\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{activeClient.title}</div>\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {activeClient.configFile}\n </div>\n <p className=\"text-xs text-slate-400\">{activeClient.note}</p>\n </div>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-3 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.initLabel}</div>\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{activeClient.initCommand}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-2\">\n <CopyButton\n value={activeClient.initCommand}\n onCopied={() => onClientCommandCopied?.(activeClient)}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copy.initCopyLabel : copyLabel || copy.initCopyLabel}\n </>\n )}\n </CopyButton>\n <CopyButton\n value={combinedHandoffText}\n onCopied={() => onBundleCopied?.(activeClient)}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-blue-500/40 bg-blue-500/10 text-blue-100 hover:bg-blue-500/15 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copy.bundleCopyLabel : copyLabel || copy.bundleCopyLabel}\n </>\n )}\n </CopyButton>\n <a\n href={activeClient.downloadHref}\n download\n onClick={() => onClientDownload?.(activeClient)}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n <Download size={14} />\n {activeClient.downloadLabel}\n </a>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{promptTitle || copy.promptTitle}</div>\n <p className=\"text-xs text-slate-400\">{promptBody || copy.promptBody}</p>\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/80 p-4 space-y-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{prompt}</pre>\n <CopyButton\n value={prompt}\n onCopied={() => onPromptCopied?.(activeClient)}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copy.promptCopyLabel : copyLabel || copy.promptCopyLabel}\n </>\n )}\n </CopyButton>\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3\">\n <div className=\"text-sm font-bold text-white\">{copy.doneTitle}</div>\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.doneBullets.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <CheckCircle2 size={16} className=\"mt-0.5 text-emerald-400 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n {(promptNote || copy.note) && <p className=\"text-xs text-slate-500\">{promptNote || copy.note}</p>}\n {guideHrefWithClient && (\n <a\n href={guideHrefWithClient}\n onClick={(event) => onGuideClick?.(event, activeClient)}\n className=\"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {guideLabel || copy.guideLabel} <ArrowRight size={14} />\n </a>\n )}\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default AgentHandoffPanel;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import"./chunk-BHe-jwch.js";import{S as e,b as t}from"./index-D7D6ZRCW.js";e();var n=t(),r=`/app/assets/hero/agent-starter-workflow.webp`,i=`/app/assets/hero/agent-starter-workflow.png`,a=({alt:e,caption:t,className:a=``,loading:o=`lazy`,onImageLoad:s})=>(0,n.jsxs)(`figure`,{className:`overflow-hidden rounded-2xl border border-slate-800 bg-slate-900/60 shadow-2xl shadow-slate-950/30 ${a}`,children:[(0,n.jsxs)(`picture`,{children:[(0,n.jsx)(`source`,{srcSet:r,type:`image/webp`}),(0,n.jsx)(`img`,{src:i,alt:e,className:`block w-full aspect-video object-cover`,loading:o,decoding:`async`,onLoad:s})]}),t?(0,n.jsx)(`figcaption`,{className:`border-t border-slate-800 bg-slate-950/70 px-4 py-3 text-xs leading-relaxed text-slate-400`,children:t}):null]});export{a as t};
2
+ //# sourceMappingURL=AgentStarterWorkflowFigure-DW4SMMy7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentStarterWorkflowFigure-DW4SMMy7.js","names":[],"sources":["../../src/components/AgentStarterWorkflowFigure.jsx"],"sourcesContent":["import React from 'react';\n\nconst ASSET_WEBP = '/app/assets/hero/agent-starter-workflow.webp';\nconst ASSET_PNG = '/app/assets/hero/agent-starter-workflow.png';\n\nconst AgentStarterWorkflowFigure = ({\n alt,\n caption,\n className = '',\n loading = 'lazy',\n onImageLoad,\n}) => (\n <figure\n className={`overflow-hidden rounded-2xl border border-slate-800 bg-slate-900/60 shadow-2xl shadow-slate-950/30 ${className}`}\n >\n <picture>\n <source srcSet={ASSET_WEBP} type=\"image/webp\" />\n <img\n src={ASSET_PNG}\n alt={alt}\n className=\"block w-full aspect-video object-cover\"\n loading={loading}\n decoding=\"async\"\n onLoad={onImageLoad}\n />\n </picture>\n {caption ? (\n <figcaption className=\"border-t border-slate-800 bg-slate-950/70 px-4 py-3 text-xs leading-relaxed text-slate-400\">\n {caption}\n </figcaption>\n ) : null}\n </figure>\n);\n\nexport default AgentStarterWorkflowFigure;\n"],"mappings":"yFAEM,EAAa,+CACb,EAAY,8CAEZ,GAA8B,CAClC,MACA,UACA,YAAY,GACZ,UAAU,OACV,kBAEA,EAAA,EAAA,MAAC,SAAD,CACE,UAAW,sGAAsG,aADnH,EAGE,EAAA,EAAA,MAAC,UAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,SAAD,CAAQ,OAAQ,EAAY,KAAK,YAAc,CAAA,GAC/C,EAAA,EAAA,KAAC,MAAD,CACE,IAAK,EACA,MACL,UAAU,yCACD,UACT,SAAS,QACT,OAAQ,CACT,CAAA,CACM,CAAA,CAAA,EACR,GACC,EAAA,EAAA,KAAC,aAAD,CAAY,UAAU,sGACnB,CACS,CAAA,EACV,IACE"}