shipscreens 0.1.2 → 0.1.3

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 (320) hide show
  1. package/README.md +37 -0
  2. package/bin/shipscreens.js +15 -1
  3. package/cli/commands/build.js +19 -4
  4. package/cli/mcpServer.js +573 -0
  5. package/dist/app/assets/AgentCli-CJHTv5S4.js +17 -0
  6. package/dist/app/assets/AgentCli-CJHTv5S4.js.map +1 -0
  7. package/dist/app/assets/App-BwQ1zI7a.css +1 -0
  8. package/dist/app/assets/App-DV5XHwn8.js +13 -0
  9. package/dist/app/assets/App-DV5XHwn8.js.map +1 -0
  10. package/dist/app/assets/AppReviewAso-Dvh6A_g-.js +4 -0
  11. package/dist/app/assets/AppReviewAso-Dvh6A_g-.js.map +1 -0
  12. package/dist/app/assets/{Cancelled-66ixTUrm.js → Cancelled-D6i4ywc8.js} +2 -2
  13. package/dist/app/assets/{Cancelled-66ixTUrm.js.map → Cancelled-D6i4ywc8.js.map} +1 -1
  14. package/dist/app/assets/CopyButton-BlPQEoP3.js +2 -0
  15. package/dist/app/assets/CopyButton-BlPQEoP3.js.map +1 -0
  16. package/dist/app/assets/FastlaneScreenshots-DF74cNwo.js +52 -0
  17. package/dist/app/assets/FastlaneScreenshots-DF74cNwo.js.map +1 -0
  18. package/dist/app/assets/FirstExport-BMHdPGDX.js +6 -0
  19. package/dist/app/assets/FirstExport-BMHdPGDX.js.map +1 -0
  20. package/dist/app/assets/FitPanel-Fp4iPZxf.js +2 -0
  21. package/dist/app/assets/FitPanel-Fp4iPZxf.js.map +1 -0
  22. package/dist/app/assets/FivePanelFramework-B967Cblg.js +62 -0
  23. package/dist/app/assets/FivePanelFramework-B967Cblg.js.map +1 -0
  24. package/dist/{assets/ForgotPassword-B9_si1tH.js → app/assets/ForgotPassword-CApAdwy1.js} +2 -2
  25. package/dist/app/assets/{ForgotPassword-B9_si1tH.js.map → ForgotPassword-CApAdwy1.js.map} +1 -1
  26. package/dist/app/assets/Landing-Vxx4PfE4.js +2 -0
  27. package/dist/app/assets/Landing-Vxx4PfE4.js.map +1 -0
  28. package/dist/app/assets/{LanguageSwitcher-BD9N-dla.js → LanguageSwitcher-Cp-6zMXz.js} +2 -2
  29. package/dist/{assets/LanguageSwitcher-BD9N-dla.js.map → app/assets/LanguageSwitcher-Cp-6zMXz.js.map} +1 -1
  30. package/dist/app/assets/{Legal-D3cAXQXw.js → Legal-CGgUYM9f.js} +2 -2
  31. package/dist/app/assets/{Legal-D3cAXQXw.js.map → Legal-CGgUYM9f.js.map} +1 -1
  32. package/dist/app/assets/{NotFound-ClV-6RmP.js → NotFound-DCeMrR7Q.js} +2 -2
  33. package/dist/app/assets/{NotFound-ClV-6RmP.js.map → NotFound-DCeMrR7Q.js.map} +1 -1
  34. package/dist/app/assets/Pricing-CGZnCST5.js +2 -0
  35. package/dist/app/assets/Pricing-CGZnCST5.js.map +1 -0
  36. package/dist/app/assets/{Privacy-DfxgWwC3.js → Privacy-D86um9Ox.js} +2 -2
  37. package/dist/{assets/Privacy-DfxgWwC3.js.map → app/assets/Privacy-D86um9Ox.js.map} +1 -1
  38. package/dist/app/assets/{SignIn-ghQCKcPe.js → SignIn-J1V55TpG.js} +2 -2
  39. package/dist/app/assets/{SignIn-ghQCKcPe.js.map → SignIn-J1V55TpG.js.map} +1 -1
  40. package/dist/app/assets/{SignUp-BKB87hd4.js → SignUp-D6y9FaIp.js} +2 -2
  41. package/dist/{assets/SignUp-BKB87hd4.js.map → app/assets/SignUp-D6y9FaIp.js.map} +1 -1
  42. package/dist/app/assets/SiteHeader-Ch5fAKkA.js +2 -0
  43. package/dist/app/assets/SiteHeader-Ch5fAKkA.js.map +1 -0
  44. package/dist/app/assets/StickyMobileCta-BdjmxjZ4.js +2 -0
  45. package/dist/app/assets/StickyMobileCta-BdjmxjZ4.js.map +1 -0
  46. package/dist/app/assets/StoreAssetsPipeline-Cl-3GPfw.js +6 -0
  47. package/dist/app/assets/StoreAssetsPipeline-Cl-3GPfw.js.map +1 -0
  48. package/dist/app/assets/{Success-819qvzmp.js → Success-BtaUzpPJ.js} +2 -2
  49. package/dist/app/assets/{Success-819qvzmp.js.map → Success-BtaUzpPJ.js.map} +1 -1
  50. package/dist/app/assets/{Terms-7k3nA4SU.js → Terms-D_qNDuwq.js} +2 -2
  51. package/dist/app/assets/{Terms-7k3nA4SU.js.map → Terms-D_qNDuwq.js.map} +1 -1
  52. package/dist/app/assets/ToolGuardrailsPanel-Dqo_LDWu.js +2 -0
  53. package/dist/app/assets/ToolGuardrailsPanel-Dqo_LDWu.js.map +1 -0
  54. package/dist/app/assets/ToolsIndex-D7Z_LkLt.js +6 -0
  55. package/dist/app/assets/ToolsIndex-D7Z_LkLt.js.map +1 -0
  56. package/dist/app/assets/WorkloadCalculator-6PgA8Qfc.js +5 -0
  57. package/dist/app/assets/WorkloadCalculator-6PgA8Qfc.js.map +1 -0
  58. package/dist/app/assets/{calculator-CiqKFdRp.js → calculator-BJHViS7f.js} +2 -2
  59. package/dist/app/assets/{calculator-CiqKFdRp.js.map → calculator-BJHViS7f.js.map} +1 -1
  60. package/dist/app/assets/check-IxdpNvaC.js +2 -0
  61. package/dist/app/assets/check-IxdpNvaC.js.map +1 -0
  62. package/dist/app/assets/chevron-down-DFKVs9n4.js +2 -0
  63. package/dist/app/assets/{chevron-down-_xIkRLaA.js.map → chevron-down-DFKVs9n4.js.map} +1 -1
  64. package/dist/app/assets/circle-check-DA-NWInD.js +2 -0
  65. package/dist/app/assets/circle-check-DA-NWInD.js.map +1 -0
  66. package/dist/app/assets/{clipboard-copy-DCJioqIc.js → clipboard-copy-B2p9wr40.js} +2 -2
  67. package/dist/app/assets/{clipboard-copy-DCJioqIc.js.map → clipboard-copy-B2p9wr40.js.map} +1 -1
  68. package/dist/app/assets/{copy-AQdWJCcs.js → copy-BnUx1vxq.js} +2 -2
  69. package/dist/app/assets/{copy-AQdWJCcs.js.map → copy-BnUx1vxq.js.map} +1 -1
  70. package/dist/app/assets/{crop-DOMVp18h.js → crop-BLAB1KK_.js} +2 -2
  71. package/dist/app/assets/{crop-DOMVp18h.js.map → crop-BLAB1KK_.js.map} +1 -1
  72. package/dist/app/assets/{download-D5RbyXDm.js → download-DNjju5h9.js} +2 -2
  73. package/dist/app/assets/{download-D5RbyXDm.js.map → download-DNjju5h9.js.map} +1 -1
  74. package/dist/app/assets/{eye-CLcZi_uk.js → eye-DkJdJAvt.js} +2 -2
  75. package/dist/app/assets/{eye-CLcZi_uk.js.map → eye-DkJdJAvt.js.map} +1 -1
  76. package/dist/app/assets/folder-tree-zQOd55nP.js +2 -0
  77. package/dist/app/assets/folder-tree-zQOd55nP.js.map +1 -0
  78. package/dist/app/assets/{grid-3x3-AKmIrhzv.js → grid-3x3-BCPiZxWL.js} +2 -2
  79. package/dist/{assets/grid-3x3-AKmIrhzv.js.map → app/assets/grid-3x3-BCPiZxWL.js.map} +1 -1
  80. package/dist/app/assets/hero/cli-build-tree-15s.mp4 +0 -0
  81. package/dist/app/assets/hero/cli-build-tree-15s.webm +0 -0
  82. package/dist/app/assets/hero/cli-build-tree-25s.mp4 +0 -0
  83. package/dist/app/assets/hero/cli-build-tree-25s.webm +0 -0
  84. package/dist/app/assets/hero/cli-build-tree-poster.png +0 -0
  85. package/dist/app/assets/hero/demo-25s-poster.jpg +0 -0
  86. package/dist/app/assets/hero/demo-25s.mp4 +0 -0
  87. package/dist/app/assets/hero/demo-25s.webm +0 -0
  88. package/dist/app/assets/hero/demo-poster.jpg +0 -0
  89. package/dist/app/assets/hero/demo.mp4 +0 -0
  90. package/dist/app/assets/hero/demo.webm +0 -0
  91. package/dist/app/assets/{index-Bqv2NztY.js → index-C4xM6WAU.js} +18 -18
  92. package/dist/app/assets/index-C4xM6WAU.js.map +1 -0
  93. package/dist/app/assets/index-CQecHUcy.css +1 -0
  94. package/dist/app/assets/{layout-grid-CpGXUPMR.js → layout-grid-DvMRLTBT.js} +2 -2
  95. package/dist/app/assets/{layout-grid-CpGXUPMR.js.map → layout-grid-DvMRLTBT.js.map} +1 -1
  96. package/dist/app/assets/noto-sans-arabic-arabic-400-normal-AAMxebZb.woff2 +0 -0
  97. package/dist/app/assets/noto-sans-arabic-arabic-400-normal-hsqIUL9Q.woff +0 -0
  98. package/dist/app/assets/noto-sans-arabic-arabic-500-normal-CoaTbVwZ.woff +0 -0
  99. package/dist/app/assets/noto-sans-arabic-arabic-500-normal-DPISWLls.woff2 +0 -0
  100. package/dist/app/assets/noto-sans-arabic-arabic-700-normal-3CqrwsiZ.woff2 +0 -0
  101. package/dist/app/assets/noto-sans-arabic-arabic-700-normal-DXnsSW3z.woff +0 -0
  102. package/dist/app/assets/noto-sans-thai-thai-400-normal-BEOmKAI1.woff2 +0 -0
  103. package/dist/app/assets/noto-sans-thai-thai-400-normal-Dxb_unuU.woff +0 -0
  104. package/dist/app/assets/noto-sans-thai-thai-500-normal-BOGXO2tw.woff +0 -0
  105. package/dist/app/assets/noto-sans-thai-thai-500-normal-CU_X86GQ.woff2 +0 -0
  106. package/dist/app/assets/noto-sans-thai-thai-700-normal-C9ISMlQq.woff +0 -0
  107. package/dist/app/assets/noto-sans-thai-thai-700-normal-Cm52XUnT.woff2 +0 -0
  108. package/dist/app/assets/{rocket-IzRFv1aW.js → rocket-fjJ-qzsl.js} +2 -2
  109. package/dist/app/assets/{rocket-IzRFv1aW.js.map → rocket-fjJ-qzsl.js.map} +1 -1
  110. package/dist/app/assets/{shield-check-CngdN3zn.js → shield-check-C-qC9fhU.js} +2 -2
  111. package/dist/app/assets/{shield-check-CngdN3zn.js.map → shield-check-C-qC9fhU.js.map} +1 -1
  112. package/dist/app/assets/{signIn-Cn6FaQYi.js → signIn-CYNXaR1Y.js} +2 -2
  113. package/dist/{assets/signIn-Cn6FaQYi.js.map → app/assets/signIn-CYNXaR1Y.js.map} +1 -1
  114. package/dist/app/assets/{smartphone-CpNG_Pfk.js → smartphone-DRYkbHrn.js} +2 -2
  115. package/dist/app/assets/{smartphone-CpNG_Pfk.js.map → smartphone-DRYkbHrn.js.map} +1 -1
  116. package/dist/app/assets/{terminal-BbBESfoU.js → terminal-CY2dKmaU.js} +2 -2
  117. package/dist/{assets/terminal-BbBESfoU.js.map → app/assets/terminal-CY2dKmaU.js.map} +1 -1
  118. package/dist/{assets/useAuth-3WWZ3GCD.js → app/assets/useAuth-D_UWt-CP.js} +2 -2
  119. package/dist/app/assets/{useAuth-3WWZ3GCD.js.map → useAuth-D_UWt-CP.js.map} +1 -1
  120. package/dist/app/index.html +2 -2
  121. package/dist/assets/AgentCli-CJHTv5S4.js +17 -0
  122. package/dist/assets/AgentCli-CJHTv5S4.js.map +1 -0
  123. package/dist/assets/App-BwQ1zI7a.css +1 -0
  124. package/dist/assets/App-DV5XHwn8.js +13 -0
  125. package/dist/assets/App-DV5XHwn8.js.map +1 -0
  126. package/dist/assets/AppReviewAso-Dvh6A_g-.js +4 -0
  127. package/dist/assets/AppReviewAso-Dvh6A_g-.js.map +1 -0
  128. package/dist/assets/{Cancelled-66ixTUrm.js → Cancelled-D6i4ywc8.js} +2 -2
  129. package/dist/assets/{Cancelled-66ixTUrm.js.map → Cancelled-D6i4ywc8.js.map} +1 -1
  130. package/dist/assets/CopyButton-BlPQEoP3.js +2 -0
  131. package/dist/assets/CopyButton-BlPQEoP3.js.map +1 -0
  132. package/dist/assets/FastlaneScreenshots-DF74cNwo.js +52 -0
  133. package/dist/assets/FastlaneScreenshots-DF74cNwo.js.map +1 -0
  134. package/dist/assets/FirstExport-BMHdPGDX.js +6 -0
  135. package/dist/assets/FirstExport-BMHdPGDX.js.map +1 -0
  136. package/dist/assets/FitPanel-Fp4iPZxf.js +2 -0
  137. package/dist/assets/FitPanel-Fp4iPZxf.js.map +1 -0
  138. package/dist/assets/FivePanelFramework-B967Cblg.js +62 -0
  139. package/dist/assets/FivePanelFramework-B967Cblg.js.map +1 -0
  140. package/dist/{app/assets/ForgotPassword-B9_si1tH.js → assets/ForgotPassword-CApAdwy1.js} +2 -2
  141. package/dist/assets/{ForgotPassword-B9_si1tH.js.map → ForgotPassword-CApAdwy1.js.map} +1 -1
  142. package/dist/assets/Landing-Vxx4PfE4.js +2 -0
  143. package/dist/assets/Landing-Vxx4PfE4.js.map +1 -0
  144. package/dist/assets/{LanguageSwitcher-BD9N-dla.js → LanguageSwitcher-Cp-6zMXz.js} +2 -2
  145. package/dist/{app/assets/LanguageSwitcher-BD9N-dla.js.map → assets/LanguageSwitcher-Cp-6zMXz.js.map} +1 -1
  146. package/dist/assets/{Legal-D3cAXQXw.js → Legal-CGgUYM9f.js} +2 -2
  147. package/dist/assets/{Legal-D3cAXQXw.js.map → Legal-CGgUYM9f.js.map} +1 -1
  148. package/dist/assets/{NotFound-ClV-6RmP.js → NotFound-DCeMrR7Q.js} +2 -2
  149. package/dist/assets/{NotFound-ClV-6RmP.js.map → NotFound-DCeMrR7Q.js.map} +1 -1
  150. package/dist/assets/Pricing-CGZnCST5.js +2 -0
  151. package/dist/assets/Pricing-CGZnCST5.js.map +1 -0
  152. package/dist/assets/{Privacy-DfxgWwC3.js → Privacy-D86um9Ox.js} +2 -2
  153. package/dist/{app/assets/Privacy-DfxgWwC3.js.map → assets/Privacy-D86um9Ox.js.map} +1 -1
  154. package/dist/assets/{SignIn-ghQCKcPe.js → SignIn-J1V55TpG.js} +2 -2
  155. package/dist/assets/{SignIn-ghQCKcPe.js.map → SignIn-J1V55TpG.js.map} +1 -1
  156. package/dist/assets/{SignUp-BKB87hd4.js → SignUp-D6y9FaIp.js} +2 -2
  157. package/dist/{app/assets/SignUp-BKB87hd4.js.map → assets/SignUp-D6y9FaIp.js.map} +1 -1
  158. package/dist/assets/SiteHeader-Ch5fAKkA.js +2 -0
  159. package/dist/assets/SiteHeader-Ch5fAKkA.js.map +1 -0
  160. package/dist/assets/StickyMobileCta-BdjmxjZ4.js +2 -0
  161. package/dist/assets/StickyMobileCta-BdjmxjZ4.js.map +1 -0
  162. package/dist/assets/StoreAssetsPipeline-Cl-3GPfw.js +6 -0
  163. package/dist/assets/StoreAssetsPipeline-Cl-3GPfw.js.map +1 -0
  164. package/dist/assets/{Success-819qvzmp.js → Success-BtaUzpPJ.js} +2 -2
  165. package/dist/assets/{Success-819qvzmp.js.map → Success-BtaUzpPJ.js.map} +1 -1
  166. package/dist/assets/{Terms-7k3nA4SU.js → Terms-D_qNDuwq.js} +2 -2
  167. package/dist/assets/{Terms-7k3nA4SU.js.map → Terms-D_qNDuwq.js.map} +1 -1
  168. package/dist/assets/ToolGuardrailsPanel-Dqo_LDWu.js +2 -0
  169. package/dist/assets/ToolGuardrailsPanel-Dqo_LDWu.js.map +1 -0
  170. package/dist/assets/ToolsIndex-D7Z_LkLt.js +6 -0
  171. package/dist/assets/ToolsIndex-D7Z_LkLt.js.map +1 -0
  172. package/dist/assets/WorkloadCalculator-6PgA8Qfc.js +5 -0
  173. package/dist/assets/WorkloadCalculator-6PgA8Qfc.js.map +1 -0
  174. package/dist/assets/{calculator-CiqKFdRp.js → calculator-BJHViS7f.js} +2 -2
  175. package/dist/assets/{calculator-CiqKFdRp.js.map → calculator-BJHViS7f.js.map} +1 -1
  176. package/dist/assets/check-IxdpNvaC.js +2 -0
  177. package/dist/assets/check-IxdpNvaC.js.map +1 -0
  178. package/dist/assets/chevron-down-DFKVs9n4.js +2 -0
  179. package/dist/assets/{chevron-down-_xIkRLaA.js.map → chevron-down-DFKVs9n4.js.map} +1 -1
  180. package/dist/assets/circle-check-DA-NWInD.js +2 -0
  181. package/dist/assets/circle-check-DA-NWInD.js.map +1 -0
  182. package/dist/assets/{clipboard-copy-DCJioqIc.js → clipboard-copy-B2p9wr40.js} +2 -2
  183. package/dist/assets/{clipboard-copy-DCJioqIc.js.map → clipboard-copy-B2p9wr40.js.map} +1 -1
  184. package/dist/assets/{copy-AQdWJCcs.js → copy-BnUx1vxq.js} +2 -2
  185. package/dist/assets/{copy-AQdWJCcs.js.map → copy-BnUx1vxq.js.map} +1 -1
  186. package/dist/assets/{crop-DOMVp18h.js → crop-BLAB1KK_.js} +2 -2
  187. package/dist/assets/{crop-DOMVp18h.js.map → crop-BLAB1KK_.js.map} +1 -1
  188. package/dist/assets/{download-D5RbyXDm.js → download-DNjju5h9.js} +2 -2
  189. package/dist/assets/{download-D5RbyXDm.js.map → download-DNjju5h9.js.map} +1 -1
  190. package/dist/assets/{eye-CLcZi_uk.js → eye-DkJdJAvt.js} +2 -2
  191. package/dist/assets/{eye-CLcZi_uk.js.map → eye-DkJdJAvt.js.map} +1 -1
  192. package/dist/assets/folder-tree-zQOd55nP.js +2 -0
  193. package/dist/assets/folder-tree-zQOd55nP.js.map +1 -0
  194. package/dist/assets/{grid-3x3-AKmIrhzv.js → grid-3x3-BCPiZxWL.js} +2 -2
  195. package/dist/{app/assets/grid-3x3-AKmIrhzv.js.map → assets/grid-3x3-BCPiZxWL.js.map} +1 -1
  196. package/dist/assets/hero/cli-build-tree-15s.mp4 +0 -0
  197. package/dist/assets/hero/cli-build-tree-15s.webm +0 -0
  198. package/dist/assets/hero/cli-build-tree-25s.mp4 +0 -0
  199. package/dist/assets/hero/cli-build-tree-25s.webm +0 -0
  200. package/dist/assets/hero/cli-build-tree-poster.png +0 -0
  201. package/dist/assets/hero/demo-25s-poster.jpg +0 -0
  202. package/dist/assets/hero/demo-25s.mp4 +0 -0
  203. package/dist/assets/hero/demo-25s.webm +0 -0
  204. package/dist/assets/hero/demo-poster.jpg +0 -0
  205. package/dist/assets/hero/demo.mp4 +0 -0
  206. package/dist/assets/hero/demo.webm +0 -0
  207. package/dist/assets/{index-Bqv2NztY.js → index-C4xM6WAU.js} +18 -18
  208. package/dist/assets/index-C4xM6WAU.js.map +1 -0
  209. package/dist/assets/index-CQecHUcy.css +1 -0
  210. package/dist/assets/{layout-grid-CpGXUPMR.js → layout-grid-DvMRLTBT.js} +2 -2
  211. package/dist/assets/{layout-grid-CpGXUPMR.js.map → layout-grid-DvMRLTBT.js.map} +1 -1
  212. package/dist/assets/noto-sans-arabic-arabic-400-normal-AAMxebZb.woff2 +0 -0
  213. package/dist/assets/noto-sans-arabic-arabic-400-normal-hsqIUL9Q.woff +0 -0
  214. package/dist/assets/noto-sans-arabic-arabic-500-normal-CoaTbVwZ.woff +0 -0
  215. package/dist/assets/noto-sans-arabic-arabic-500-normal-DPISWLls.woff2 +0 -0
  216. package/dist/assets/noto-sans-arabic-arabic-700-normal-3CqrwsiZ.woff2 +0 -0
  217. package/dist/assets/noto-sans-arabic-arabic-700-normal-DXnsSW3z.woff +0 -0
  218. package/dist/assets/noto-sans-thai-thai-400-normal-BEOmKAI1.woff2 +0 -0
  219. package/dist/assets/noto-sans-thai-thai-400-normal-Dxb_unuU.woff +0 -0
  220. package/dist/assets/noto-sans-thai-thai-500-normal-BOGXO2tw.woff +0 -0
  221. package/dist/assets/noto-sans-thai-thai-500-normal-CU_X86GQ.woff2 +0 -0
  222. package/dist/assets/noto-sans-thai-thai-700-normal-C9ISMlQq.woff +0 -0
  223. package/dist/assets/noto-sans-thai-thai-700-normal-Cm52XUnT.woff2 +0 -0
  224. package/dist/assets/{rocket-IzRFv1aW.js → rocket-fjJ-qzsl.js} +2 -2
  225. package/dist/assets/{rocket-IzRFv1aW.js.map → rocket-fjJ-qzsl.js.map} +1 -1
  226. package/dist/assets/{shield-check-CngdN3zn.js → shield-check-C-qC9fhU.js} +2 -2
  227. package/dist/assets/{shield-check-CngdN3zn.js.map → shield-check-C-qC9fhU.js.map} +1 -1
  228. package/dist/assets/{signIn-Cn6FaQYi.js → signIn-CYNXaR1Y.js} +2 -2
  229. package/dist/{app/assets/signIn-Cn6FaQYi.js.map → assets/signIn-CYNXaR1Y.js.map} +1 -1
  230. package/dist/assets/{smartphone-CpNG_Pfk.js → smartphone-DRYkbHrn.js} +2 -2
  231. package/dist/assets/{smartphone-CpNG_Pfk.js.map → smartphone-DRYkbHrn.js.map} +1 -1
  232. package/dist/assets/{terminal-BbBESfoU.js → terminal-CY2dKmaU.js} +2 -2
  233. package/dist/{app/assets/terminal-BbBESfoU.js.map → assets/terminal-CY2dKmaU.js.map} +1 -1
  234. package/dist/{app/assets/useAuth-3WWZ3GCD.js → assets/useAuth-D_UWt-CP.js} +2 -2
  235. package/dist/assets/{useAuth-3WWZ3GCD.js.map → useAuth-D_UWt-CP.js.map} +1 -1
  236. package/dist/cancelled/index.html +2 -2
  237. package/dist/forgot-password/index.html +2 -2
  238. package/dist/index.html +2 -2
  239. package/dist/legal/index.html +2 -2
  240. package/dist/llms-full.txt +106 -0
  241. package/dist/llms.txt +35 -0
  242. package/dist/pricing/index.html +33 -0
  243. package/dist/privacy/index.html +2 -2
  244. package/dist/robots.txt +2 -0
  245. package/dist/signin/index.html +2 -2
  246. package/dist/signup/index.html +2 -2
  247. package/dist/sitemap.xml +12 -0
  248. package/dist/success/index.html +2 -2
  249. package/dist/terms/index.html +2 -2
  250. package/dist/tools/5-panel-screenshot-framework/index.html +2 -2
  251. package/dist/tools/agent-cli/index.html +2 -2
  252. package/dist/tools/app-review-aso/index.html +2 -2
  253. package/dist/tools/fastlane-screenshots/index.html +2 -2
  254. package/dist/tools/first-export/index.html +2 -2
  255. package/dist/tools/index.html +2 -2
  256. package/dist/tools/screenshot-workload-calculator/index.html +2 -2
  257. package/dist/tools/store-assets-pipeline/index.html +2 -2
  258. package/package.json +22 -2
  259. package/dist/app/assets/AgentCli-FWNCO1pb.js +0 -17
  260. package/dist/app/assets/AgentCli-FWNCO1pb.js.map +0 -1
  261. package/dist/app/assets/App-yU7CFXCv.js +0 -13
  262. package/dist/app/assets/App-yU7CFXCv.js.map +0 -1
  263. package/dist/app/assets/AppReviewAso-BYfaP1Lu.js +0 -4
  264. package/dist/app/assets/AppReviewAso-BYfaP1Lu.js.map +0 -1
  265. package/dist/app/assets/CliPreflightCard-D7utpFux.js +0 -2
  266. package/dist/app/assets/CliPreflightCard-D7utpFux.js.map +0 -1
  267. package/dist/app/assets/CopyButton-CmVmSaYn.js +0 -2
  268. package/dist/app/assets/CopyButton-CmVmSaYn.js.map +0 -1
  269. package/dist/app/assets/FastlaneScreenshots-CRMcetq-.js +0 -52
  270. package/dist/app/assets/FastlaneScreenshots-CRMcetq-.js.map +0 -1
  271. package/dist/app/assets/FirstExport-C0WgL4Hl.js +0 -6
  272. package/dist/app/assets/FirstExport-C0WgL4Hl.js.map +0 -1
  273. package/dist/app/assets/FivePanelFramework-BwCRmXIK.js +0 -60
  274. package/dist/app/assets/FivePanelFramework-BwCRmXIK.js.map +0 -1
  275. package/dist/app/assets/Landing-s1ni1n-7.js +0 -2
  276. package/dist/app/assets/Landing-s1ni1n-7.js.map +0 -1
  277. package/dist/app/assets/SiteHeader-DxsqNPnt.js +0 -2
  278. package/dist/app/assets/SiteHeader-DxsqNPnt.js.map +0 -1
  279. package/dist/app/assets/StickyMobileCta-C_x2pUIF.js +0 -2
  280. package/dist/app/assets/StickyMobileCta-C_x2pUIF.js.map +0 -1
  281. package/dist/app/assets/StoreAssetsPipeline-4hXRONUd.js +0 -4
  282. package/dist/app/assets/StoreAssetsPipeline-4hXRONUd.js.map +0 -1
  283. package/dist/app/assets/ToolsIndex-CzrxymnM.js +0 -6
  284. package/dist/app/assets/ToolsIndex-CzrxymnM.js.map +0 -1
  285. package/dist/app/assets/WorkloadCalculator-D2TuKS4B.js +0 -5
  286. package/dist/app/assets/WorkloadCalculator-D2TuKS4B.js.map +0 -1
  287. package/dist/app/assets/chevron-down-_xIkRLaA.js +0 -2
  288. package/dist/app/assets/index-Bqv2NztY.js.map +0 -1
  289. package/dist/app/assets/index-DGVMa-P7.css +0 -1
  290. package/dist/assets/AgentCli-FWNCO1pb.js +0 -17
  291. package/dist/assets/AgentCli-FWNCO1pb.js.map +0 -1
  292. package/dist/assets/App-yU7CFXCv.js +0 -13
  293. package/dist/assets/App-yU7CFXCv.js.map +0 -1
  294. package/dist/assets/AppReviewAso-BYfaP1Lu.js +0 -4
  295. package/dist/assets/AppReviewAso-BYfaP1Lu.js.map +0 -1
  296. package/dist/assets/CliPreflightCard-D7utpFux.js +0 -2
  297. package/dist/assets/CliPreflightCard-D7utpFux.js.map +0 -1
  298. package/dist/assets/CopyButton-CmVmSaYn.js +0 -2
  299. package/dist/assets/CopyButton-CmVmSaYn.js.map +0 -1
  300. package/dist/assets/FastlaneScreenshots-CRMcetq-.js +0 -52
  301. package/dist/assets/FastlaneScreenshots-CRMcetq-.js.map +0 -1
  302. package/dist/assets/FirstExport-C0WgL4Hl.js +0 -6
  303. package/dist/assets/FirstExport-C0WgL4Hl.js.map +0 -1
  304. package/dist/assets/FivePanelFramework-BwCRmXIK.js +0 -60
  305. package/dist/assets/FivePanelFramework-BwCRmXIK.js.map +0 -1
  306. package/dist/assets/Landing-s1ni1n-7.js +0 -2
  307. package/dist/assets/Landing-s1ni1n-7.js.map +0 -1
  308. package/dist/assets/SiteHeader-DxsqNPnt.js +0 -2
  309. package/dist/assets/SiteHeader-DxsqNPnt.js.map +0 -1
  310. package/dist/assets/StickyMobileCta-C_x2pUIF.js +0 -2
  311. package/dist/assets/StickyMobileCta-C_x2pUIF.js.map +0 -1
  312. package/dist/assets/StoreAssetsPipeline-4hXRONUd.js +0 -4
  313. package/dist/assets/StoreAssetsPipeline-4hXRONUd.js.map +0 -1
  314. package/dist/assets/ToolsIndex-CzrxymnM.js +0 -6
  315. package/dist/assets/ToolsIndex-CzrxymnM.js.map +0 -1
  316. package/dist/assets/WorkloadCalculator-D2TuKS4B.js +0 -5
  317. package/dist/assets/WorkloadCalculator-D2TuKS4B.js.map +0 -1
  318. package/dist/assets/chevron-down-_xIkRLaA.js +0 -2
  319. package/dist/assets/index-Bqv2NztY.js.map +0 -1
  320. package/dist/assets/index-DGVMa-P7.css +0 -1
@@ -0,0 +1,4 @@
1
+ import{u as w,r as k,t as l,j as e,b as a}from"./index-C4xM6WAU.js";import{C,S as _}from"./StickyMobileCta-BdjmxjZ4.js";import{A as o,C as j}from"./CopyButton-BlPQEoP3.js";import{F as N}from"./FitPanel-Fp4iPZxf.js";import{a as T,S as L}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as P}from"./SiteHeader-Ch5fAKkA.js";import{T as S}from"./ToolGuardrailsPanel-Dqo_LDWu.js";import{S as p}from"./shield-check-C-qC9fhU.js";import{L as u}from"./layout-grid-DvMRLTBT.js";import{C as b}from"./crop-BLAB1KK_.js";import{C as A}from"./clipboard-copy-B2p9wr40.js";import{C as U}from"./circle-check-DA-NWInD.js";import"./chevron-down-DFKVs9n4.js";import"./copy-BnUx1vxq.js";const B=r=>(r||"").split("-")[0]==="ja"?"ja":"en",f={en:{badge:"App Review + ASO quick check",title:"App Review + ASO Quick Check",subtitle:"Keep your current design workflow, then run this short pre-upload checklist for App Store / Google Play screenshots: outcome clarity, policy-safe claims, and release-safe outputs (ordering/path/safe area).",heroCliTitle:"CLI quickstart (2 steps)",heroCliNote:"wizard → build (raw mode, no Playwright).",heroCliSummary:"Outputs: fastlane/ + reproducible ZIP (local/CI) with verify/stage guardrails.",heroCliCopyLabel:"Copy all commands",heroCliTemplatesLabel:"Starter templates",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
2
+ `),proUnlockTitle:"Unlock Pro (CLI)",proUnlockBody:"Remove the watermark and unlock full matrix batch exports via CLI auth:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"Completes a one-time browser sign-in; then rerun build with --require-pro.",overviewTitle:"What this covers",overviewBullets:["First screenshot clarity (outcome + target user)","App Review sanity (current-version UI, no misleading claims)","Play feature graphic safe area + size buckets","When screenshots feel generic, strengthen positioning before redesign"],checklistsTitle:"Checks",checklists:[{key:"review",icon:p,title:"App Review sanity",body:"Avoid rejections caused by mismatched or outdated screenshots.",bullets:["Screenshots match the current app version UI.","Avoid showing unreleased or removed features.","Keep claims verifiable inside the product.","App Store Connect screenshots are version-scoped."]},{key:"aso",icon:u,title:"ASO clarity",body:"Make the first screenshot explain the outcome fast, without looking generic.",bullets:["Use a 5-panel flow: Hook → Problem → Proof → How → CTA.","One idea per panel; keep captions short and concrete.","Keep UI readable on small devices.","Clarity check: if screenshot #1 could fit many apps, rewrite it with one concrete outcome.","If it still feels generic, pair screenshots with a 15-30s app preview video."]},{key:"play-safe",icon:b,title:"Play feature graphic safe area",body:"Avoid hidden crops in Play previews.",bullets:["Keep text/logos inside the central ~80–86% area.","Avoid edge-aligned UI that can get cropped.","Preview in Play Console before final upload."]}],messageExamplesTitle:"Panel #1 copy: vague vs concrete",messageExamplesLead:"From real ASO feedback: broad claims are usually read as generic.",messageExamplesBadLabel:"Vague",messageExamplesGoodLabel:"Concrete",messageExamplesWhyLabel:"Why this works",messageExamples:[{bad:"Learn everything about finance",good:"Build a weekly budget and track spending in 10 minutes",why:"Clear outcome + scope + timeframe."},{bad:"The easiest habit tracker",good:"Track 3 daily habits with streak reminders and a weekly review",why:"Specific use case users can picture immediately."}],abTestTitle:"A/B test caution (avoid false winners)",abTestBody:"Screenshot experiments can mislead if traffic is thin. Treat one-day spikes as noise.",abTestBullets:["Test one hypothesis at a time (usually panel #1 headline first).","Keep each variant live for at least 7 days to include weekday/weekend behavior.","Use meaningful sample size before deciding (rule of thumb: >=1,000 store impressions per variant).","Prefer consistent lift across days over a single-day jump."],abTestNote:"If volume is low, combine this with qualitative signals (user interviews, onboarding drop-off, reply feedback) before redesigning screenshots.",assetsTitle:"Related assets",assetsCta:"Open tool",assets:[{key:"five_panel",title:"5-panel Screenshot Framework",desc:"Structure the story flow for the first five screenshots.",href:"/tools/5-panel-screenshot-framework/"},{key:"pipeline",title:"Store Assets Pipeline Kit",desc:"Capture checklist, size buckets, and Play safe areas.",href:"/tools/store-assets-pipeline/"},{key:"workload",title:"Screenshot Workload Calculator",desc:"Quantify device × locale explosion before you commit.",href:"/tools/screenshot-workload-calculator/"}],nextTitle:"Next: run a reproducible export",nextBody:"Use the CLI quickstart or open a sample project to generate Fastlane-ready outputs.",nextCtaPrimary:"Open sample project",nextCtaSecondary:"Run CLI quickstart",note:"Upload happens in App Store Connect / Play Console. Translation is BYO; ShipScreens focuses on reproducible exports."},ja:{badge:"App Review / ASO クイックチェック",title:"App Review / ASO クイックチェック",subtitle:"既存のデザイン運用はそのままに、提出前にスクショを整えるミニチェック。成果の伝わり方/制約に加え、順序・パス・安全域の提出事故を確認します。",heroCliTitle:"CLIクイックスタート(2ステップ)",heroCliNote:"wizard → build(raw / Playwright不要)。",heroCliSummary:"出力: fastlane/ + 再現性ZIP(ローカル/CI)+ verify/stage ガードレール。",heroCliCopyLabel:"コマンドをすべてコピー",heroCliTemplatesLabel:"スターター雛形",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
3
+ `),proUnlockTitle:"Proを解除(CLI)",proUnlockBody:"透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"初回のみブラウザでサインインします。以後は --require-pro で再実行。",overviewTitle:"このチェックで見ること",overviewBullets:["1枚目の伝わり方(成果 + 誰向けか)","App Reviewの制約(現行UI、誤解を招く表現の回避)","Playの安全域 + サイズバケット","「なんとなく同じ見た目」を避けるための訴求確認"],checklistsTitle:"チェック項目",checklists:[{key:"review",icon:p,title:"App Review 影響点",body:"審査落ちや差し戻しの原因を先に潰します。",bullets:["スクショは現行バージョンのUIと一致。","未実装/削除済みの機能は出さない。","主張はプロダクト内で検証できる範囲に。","ASCのスクショはバージョン単位で管理。"]},{key:"aso",icon:u,title:"ASOの伝達性",body:"1枚目で成果が伝わり、汎用テンプレっぽく見えない構成に。",bullets:["5枚構成(Hook→Problem→Proof→How→CTA)。","1枚1メッセージ、キャプションは短く具体的に。","小さな端末でも読めるUIサイズ。","確認: 1枚目が他の多くのアプリにも当てはまるなら、成果を具体化して書き直す。","見た目が埋もれる場合は 15-30 秒のアプリ動画を併用。"]},{key:"play-safe",icon:b,title:"Play feature graphic 安全域",body:"プレビューの隠れクロップを回避。",bullets:["文字/ロゴは中央 80〜86% に収める。","端に寄せすぎない(切れる)。","Play Consoleで最終プレビュー。"]}],messageExamplesTitle:"1枚目コピー: 曖昧 vs 具体",messageExamplesLead:"実際のASOフィードバックでは、広すぎる主張は「よくある見た目」として流されやすいです。",messageExamplesBadLabel:"曖昧",messageExamplesGoodLabel:"具体",messageExamplesWhyLabel:"理由",messageExamples:[{bad:"お金のことを全部学べる",good:"10分で週次予算を作って、支出を自動で把握する",why:"成果・範囲・時間が明確。"},{bad:"最強の習慣管理アプリ",good:"3つの習慣を毎日記録し、連続達成と週次レビューで継続する",why:"使い方をすぐ想像できる具体性。"}],abTestTitle:"A/Bテスト時の注意(誤判定を防ぐ)",abTestBody:"トラフィックが少ない状態では、スクショ差分の勝ち負けを誤認しやすいです。単日の上下はノイズとして扱います。",abTestBullets:["同時に検証する仮説は1つだけ(まず1枚目見出し)。","平日/週末を含めて、最低7日間は同じ条件で回す。","判断前に十分な母数を確保(目安: バリアントごとにストア表示 1,000 以上)。","単発の急上昇ではなく、日単位で一貫した改善を重視する。"],abTestNote:"母数が足りない場合は、ユーザーヒアリング・オンボーディング離脱・返信反応などの定性シグナルも併用して判断します。",assetsTitle:"関連ツール",assetsCta:"ツールを開く",assets:[{key:"five_panel",title:"5枚構成 スクショフレームワーク",desc:"5枚のストーリー構成を固定するテンプレ。",href:"/tools/5-panel-screenshot-framework/"},{key:"pipeline",title:"ストア素材パイプラインキット",desc:"素材取り/サイズバケット/安全域のチェック。",href:"/tools/store-assets-pipeline/"},{key:"workload",title:"スクショ作業量 計算ツール",desc:"端末×言語の爆発を先に把握。",href:"/tools/screenshot-workload-calculator/"}],nextTitle:"次: 再現性のある出力へ",nextBody:"CLI最短かサンプルから始めて、Fastlane-readyを出力します。",nextCtaPrimary:"サンプルを開く",nextCtaSecondary:"CLIクイックスタート",note:"アップロードは App Store Connect / Play Console 側で行います。翻訳は外部でOK。"}},M=()=>{const{i18n:r,t:c}=w(),x=B(r.resolvedLanguage||r.language),t=f[x]||f.en,g="/app/?sample=5panel&entry_source=app_review_aso_open_app_header",n="/tools/agent-cli/",i="/app/?sample=5panel&entry_source=app_review_aso_open_sample_project",y="/downloads/shipscreens-agent-cli-config.yml",v="/downloads/shipscreens-agent-cli-copy.csv",m=c("common.copy",{defaultValue:"Copy"});return T("titles.appReviewAso",{defaultValue:t.title}),k.useEffect(()=>{l("tool_view",{tool:"app_review_aso"})},[]),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white",children:[e.jsx(L,{}),e.jsx(P,{variant:"dark",active:"tools",openAppHref:g,onToolsClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_tools_header"}),onPricingClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"pricing_header"}),onOpenAppClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_app_header"}),primaryCta:{href:i,label:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[t.nextCtaPrimary," ",e.jsx(o,{size:16})]}),onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_sample_project_header"})}}),e.jsxs("main",{className:"max-w-5xl mx-auto px-6 pb-24 space-y-10",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4",children:[e.jsxs("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",children:[e.jsx(p,{size:14}),t.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:t.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:t.subtitle}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:[e.jsxs("a",{href:i,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_sample_project_hero"}),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",children:[t.nextCtaPrimary," ",e.jsx(o,{size:16})]}),e.jsxs("a",{href:n,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_agent_cli_hero"}),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 font-bold hover:bg-slate-900 transition",children:[t.nextCtaSecondary," ",e.jsx(o,{size:16})]})]}),e.jsxs("div",{className:"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:t.heroCliTitle}),e.jsx("p",{className:"text-xs text-slate-400",children:t.heroCliNote}),e.jsx("p",{className:"text-xs text-slate-500",children:t.heroCliSummary}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 p-3",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:t.heroCliCmd})}),e.jsx(j,{value:t.heroCliCmd,onCopied:()=>l("tool_cta_click",{tool:"app_review_aso",cta:"copy_cli_hero"}),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:s,copyState:d})=>e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14}),d==="idle"?t.heroCliCopyLabel:s||m]})}),e.jsxs("div",{className:"pt-1 space-y-2",children:[e.jsx("div",{className:"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:t.heroCliTemplatesLabel}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("a",{href:y,download:!0,onClick:()=>l("tool_download",{tool:"app_review_aso",asset:"config_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:t.heroCliConfigLabel}),e.jsx("a",{href:v,download:!0,onClick:()=>l("tool_download",{tool:"app_review_aso",asset:"copy_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:t.heroCliCsvLabel})]})]})]}),e.jsx(S,{title:x==="ja"?"詳細: CLIガードレール + Pro解除":"Advanced: CLI guardrails + Pro unlock",codeToggleLabel:c("common.showCommands",{defaultValue:"Show commands"}),copyButtonLabel:m,preflightHref:"/tools/agent-cli/#preflight",onPreflightClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_cli_preflight"}),proUnlockTitle:t.proUnlockTitle,proUnlockBody:t.proUnlockBody,proUnlockCmd:t.proUnlockCmd,proUnlockNote:t.proUnlockNote,onProUnlockCopied:()=>l("tool_cta_click",{tool:"app_review_aso",cta:"copy_cli_pro_unlock"})}),e.jsx(C,{compact:!0,href:"/tools/agent-cli/#preflight",onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_cli_preflight_card"}),className:"max-w-xl mx-auto"})]}),e.jsx(N,{className:"max-w-4xl mx-auto w-full"}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:t.overviewTitle}),e.jsx("ul",{className:"max-w-3xl mx-auto space-y-2 text-sm text-slate-300",children:t.overviewBullets.map(s=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx(U,{size:16,className:"text-emerald-400"}),s]},s))})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:t.checklistsTitle}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:t.checklists.map(s=>{const d=s.icon;return e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 flex items-center justify-center",children:e.jsx(d,{size:18,className:"text-slate-200"})}),e.jsx("div",{className:"text-lg font-bold text-white",children:s.title})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.body}),e.jsx("ul",{className:"text-xs text-slate-400 list-disc pl-4 space-y-1",children:s.bullets.map(h=>e.jsx("li",{children:h},h))})]},s.key)})}),e.jsx("div",{className:"text-xs text-slate-500 text-center",children:t.note})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:t.messageExamplesTitle}),e.jsx("p",{className:"text-sm text-slate-300 text-center max-w-3xl mx-auto",children:t.messageExamplesLead}),e.jsx("div",{className:"grid md:grid-cols-2 gap-4",children:t.messageExamples.map(s=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold",children:t.messageExamplesBadLabel}),e.jsxs("div",{className:"text-sm text-slate-200",children:['"',s.bad,'"']})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold",children:t.messageExamplesGoodLabel}),e.jsxs("div",{className:"text-sm text-white font-semibold",children:['"',s.good,'"']})]}),e.jsxs("div",{className:"text-xs text-slate-400",children:[e.jsxs("span",{className:"text-slate-300 font-semibold",children:[t.messageExamplesWhyLabel,": "]}),s.why]})]},`${s.bad}-${s.good}`))})]}),e.jsxs("section",{className:"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsx("h2",{className:"text-lg font-bold text-white",children:t.abTestTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:t.abTestBody}),e.jsx("ul",{className:"text-sm text-slate-300 list-disc pl-5 space-y-1",children:(t.abTestBullets||[]).map(s=>e.jsx("li",{children:s},s))}),t.abTestNote&&e.jsx("p",{className:"text-xs text-slate-500",children:t.abTestNote})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:t.assetsTitle}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:t.assets.map(s=>e.jsxs("a",{href:s.href,onClick:()=>l("tool_cta_click",{tool:"app_review_aso",cta:`open_${s.key}`}),className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3 hover:border-slate-700 transition",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:s.title}),e.jsx("div",{className:"text-sm text-slate-300",children:s.desc}),e.jsxs("div",{className:"text-xs text-blue-200 flex items-center gap-2",children:[t.assetsCta," ",e.jsx(o,{size:14})]})]},s.key))})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:t.nextTitle}),e.jsx("div",{className:"text-sm text-slate-300",children:t.nextBody})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 w-full md:w-auto",children:[e.jsxs("a",{href:i,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_sample_project_body"}),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 w-full md:w-auto",children:[t.nextCtaPrimary," ",e.jsx(o,{size:16})]}),e.jsxs("a",{href:n,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"open_agent_cli_footer"}),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 w-full md:w-auto",children:[t.nextCtaSecondary," ",e.jsx(o,{size:16})]})]})]})]}),e.jsx(_,{primary:{label:t.nextCtaPrimary,href:i,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"sticky_primary_sample"})},secondary:{label:t.nextCtaSecondary,href:n,onClick:s=>a(s,"tool_cta_click",{tool:"app_review_aso",cta:"sticky_secondary_cli"})}})]})};export{M as default};
4
+ //# sourceMappingURL=AppReviewAso-Dvh6A_g-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppReviewAso-Dvh6A_g-.js","sources":["../../src/pages/AppReviewAso.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ArrowRight, CheckCircle2, ClipboardCopy, Crop, LayoutGrid, ShieldCheck } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport CopyButton from '../components/CopyButton';\nimport FitPanel from '../components/FitPanel';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport ToolGuardrailsPanel from '../components/ToolGuardrailsPanel';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'App Review + ASO quick check',\n title: 'App Review + ASO Quick Check',\n subtitle:\n 'Keep your current design workflow, then run this short pre-upload checklist for App Store / Google Play screenshots: outcome clarity, policy-safe claims, and release-safe outputs (ordering/path/safe area).',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard → build (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP (local/CI) with verify/stage guardrails.',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix batch exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun build with --require-pro.',\n overviewTitle: 'What this covers',\n overviewBullets: [\n 'First screenshot clarity (outcome + target user)',\n 'App Review sanity (current-version UI, no misleading claims)',\n 'Play feature graphic safe area + size buckets',\n 'When screenshots feel generic, strengthen positioning before redesign',\n ],\n checklistsTitle: 'Checks',\n checklists: [\n {\n key: 'review',\n icon: ShieldCheck,\n title: 'App Review sanity',\n body: 'Avoid rejections caused by mismatched or outdated screenshots.',\n bullets: [\n 'Screenshots match the current app version UI.',\n 'Avoid showing unreleased or removed features.',\n 'Keep claims verifiable inside the product.',\n 'App Store Connect screenshots are version-scoped.',\n ],\n },\n {\n key: 'aso',\n icon: LayoutGrid,\n title: 'ASO clarity',\n body: 'Make the first screenshot explain the outcome fast, without looking generic.',\n bullets: [\n 'Use a 5-panel flow: Hook → Problem → Proof → How → CTA.',\n 'One idea per panel; keep captions short and concrete.',\n 'Keep UI readable on small devices.',\n 'Clarity check: if screenshot #1 could fit many apps, rewrite it with one concrete outcome.',\n 'If it still feels generic, pair screenshots with a 15-30s app preview video.',\n ],\n },\n {\n key: 'play-safe',\n icon: Crop,\n title: 'Play feature graphic safe area',\n body: 'Avoid hidden crops in Play previews.',\n bullets: [\n 'Keep text/logos inside the central ~80–86% area.',\n 'Avoid edge-aligned UI that can get cropped.',\n 'Preview in Play Console before final upload.',\n ],\n },\n ],\n messageExamplesTitle: 'Panel #1 copy: vague vs concrete',\n messageExamplesLead: 'From real ASO feedback: broad claims are usually read as generic.',\n messageExamplesBadLabel: 'Vague',\n messageExamplesGoodLabel: 'Concrete',\n messageExamplesWhyLabel: 'Why this works',\n messageExamples: [\n {\n bad: 'Learn everything about finance',\n good: 'Build a weekly budget and track spending in 10 minutes',\n why: 'Clear outcome + scope + timeframe.',\n },\n {\n bad: 'The easiest habit tracker',\n good: 'Track 3 daily habits with streak reminders and a weekly review',\n why: 'Specific use case users can picture immediately.',\n },\n ],\n abTestTitle: 'A/B test caution (avoid false winners)',\n abTestBody: 'Screenshot experiments can mislead if traffic is thin. Treat one-day spikes as noise.',\n abTestBullets: [\n 'Test one hypothesis at a time (usually panel #1 headline first).',\n 'Keep each variant live for at least 7 days to include weekday/weekend behavior.',\n 'Use meaningful sample size before deciding (rule of thumb: >=1,000 store impressions per variant).',\n 'Prefer consistent lift across days over a single-day jump.',\n ],\n abTestNote:\n 'If volume is low, combine this with qualitative signals (user interviews, onboarding drop-off, reply feedback) before redesigning screenshots.',\n assetsTitle: 'Related assets',\n assetsCta: 'Open tool',\n assets: [\n {\n key: 'five_panel',\n title: '5-panel Screenshot Framework',\n desc: 'Structure the story flow for the first five screenshots.',\n href: '/tools/5-panel-screenshot-framework/',\n },\n {\n key: 'pipeline',\n title: 'Store Assets Pipeline Kit',\n desc: 'Capture checklist, size buckets, and Play safe areas.',\n href: '/tools/store-assets-pipeline/',\n },\n {\n key: 'workload',\n title: 'Screenshot Workload Calculator',\n desc: 'Quantify device × locale explosion before you commit.',\n href: '/tools/screenshot-workload-calculator/',\n },\n ],\n nextTitle: 'Next: run a reproducible export',\n nextBody: 'Use the CLI quickstart or open a sample project to generate Fastlane-ready outputs.',\n nextCtaPrimary: 'Open sample project',\n nextCtaSecondary: 'Run CLI quickstart',\n note: 'Upload happens in App Store Connect / Play Console. Translation is BYO; ShipScreens focuses on reproducible exports.',\n },\n ja: {\n badge: 'App Review / ASO クイックチェック',\n title: 'App Review / ASO クイックチェック',\n subtitle:\n '既存のデザイン運用はそのままに、提出前にスクショを整えるミニチェック。成果の伝わり方/制約に加え、順序・パス・安全域の提出事故を確認します。',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard → build(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP(ローカル/CI)+ verify/stage ガードレール。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は --require-pro で再実行。',\n overviewTitle: 'このチェックで見ること',\n overviewBullets: [\n '1枚目の伝わり方(成果 + 誰向けか)',\n 'App Reviewの制約(現行UI、誤解を招く表現の回避)',\n 'Playの安全域 + サイズバケット',\n '「なんとなく同じ見た目」を避けるための訴求確認',\n ],\n checklistsTitle: 'チェック項目',\n checklists: [\n {\n key: 'review',\n icon: ShieldCheck,\n title: 'App Review 影響点',\n body: '審査落ちや差し戻しの原因を先に潰します。',\n bullets: [\n 'スクショは現行バージョンのUIと一致。',\n '未実装/削除済みの機能は出さない。',\n '主張はプロダクト内で検証できる範囲に。',\n 'ASCのスクショはバージョン単位で管理。',\n ],\n },\n {\n key: 'aso',\n icon: LayoutGrid,\n title: 'ASOの伝達性',\n body: '1枚目で成果が伝わり、汎用テンプレっぽく見えない構成に。',\n bullets: [\n '5枚構成(Hook→Problem→Proof→How→CTA)。',\n '1枚1メッセージ、キャプションは短く具体的に。',\n '小さな端末でも読めるUIサイズ。',\n '確認: 1枚目が他の多くのアプリにも当てはまるなら、成果を具体化して書き直す。',\n '見た目が埋もれる場合は 15-30 秒のアプリ動画を併用。',\n ],\n },\n {\n key: 'play-safe',\n icon: Crop,\n title: 'Play feature graphic 安全域',\n body: 'プレビューの隠れクロップを回避。',\n bullets: [\n '文字/ロゴは中央 80〜86% に収める。',\n '端に寄せすぎない(切れる)。',\n 'Play Consoleで最終プレビュー。',\n ],\n },\n ],\n messageExamplesTitle: '1枚目コピー: 曖昧 vs 具体',\n messageExamplesLead: '実際のASOフィードバックでは、広すぎる主張は「よくある見た目」として流されやすいです。',\n messageExamplesBadLabel: '曖昧',\n messageExamplesGoodLabel: '具体',\n messageExamplesWhyLabel: '理由',\n messageExamples: [\n {\n bad: 'お金のことを全部学べる',\n good: '10分で週次予算を作って、支出を自動で把握する',\n why: '成果・範囲・時間が明確。',\n },\n {\n bad: '最強の習慣管理アプリ',\n good: '3つの習慣を毎日記録し、連続達成と週次レビューで継続する',\n why: '使い方をすぐ想像できる具体性。',\n },\n ],\n abTestTitle: 'A/Bテスト時の注意(誤判定を防ぐ)',\n abTestBody: 'トラフィックが少ない状態では、スクショ差分の勝ち負けを誤認しやすいです。単日の上下はノイズとして扱います。',\n abTestBullets: [\n '同時に検証する仮説は1つだけ(まず1枚目見出し)。',\n '平日/週末を含めて、最低7日間は同じ条件で回す。',\n '判断前に十分な母数を確保(目安: バリアントごとにストア表示 1,000 以上)。',\n '単発の急上昇ではなく、日単位で一貫した改善を重視する。',\n ],\n abTestNote:\n '母数が足りない場合は、ユーザーヒアリング・オンボーディング離脱・返信反応などの定性シグナルも併用して判断します。',\n assetsTitle: '関連ツール',\n assetsCta: 'ツールを開く',\n assets: [\n {\n key: 'five_panel',\n title: '5枚構成 スクショフレームワーク',\n desc: '5枚のストーリー構成を固定するテンプレ。',\n href: '/tools/5-panel-screenshot-framework/',\n },\n {\n key: 'pipeline',\n title: 'ストア素材パイプラインキット',\n desc: '素材取り/サイズバケット/安全域のチェック。',\n href: '/tools/store-assets-pipeline/',\n },\n {\n key: 'workload',\n title: 'スクショ作業量 計算ツール',\n desc: '端末×言語の爆発を先に把握。',\n href: '/tools/screenshot-workload-calculator/',\n },\n ],\n nextTitle: '次: 再現性のある出力へ',\n nextBody: 'CLI最短かサンプルから始めて、Fastlane-readyを出力します。',\n nextCtaPrimary: 'サンプルを開く',\n nextCtaSecondary: 'CLIクイックスタート',\n note: 'アップロードは App Store Connect / Play Console 側で行います。翻訳は外部でOK。',\n },\n};\n\nconst AppReviewAso = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n const openAppHref = '/app/?sample=5panel&entry_source=app_review_aso_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=app_review_aso_open_sample_project';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n usePageTitle('titles.appReviewAso', { defaultValue: copy.title });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'app_review_aso' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_app_header' })\n }\n primaryCta={{\n href: sampleProjectHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {copy.nextCtaPrimary} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_sample_project_header' }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-10\">\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 <ShieldCheck 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\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_sample_project_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.nextCtaPrimary} <ArrowRight size={16} />\n </a>\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_agent_cli_hero' })\n }\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 font-bold hover:bg-slate-900 transition\"\n >\n {copy.nextCtaSecondary} <ArrowRight size={16} />\n </a>\n </div>\n\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] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.heroCliTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.heroCliNote}</p>\n <p className=\"text-xs text-slate-500\">{copy.heroCliSummary}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroCliCmd}</pre>\n </div>\n <CopyButton\n value={copy.heroCliCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'app_review_aso', cta: 'copy_cli_hero' })}\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.heroCliCopyLabel : copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'app_review_aso', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'app_review_aso', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n </div>\n\n <ToolGuardrailsPanel\n title={lang === 'ja' ? '詳細: CLIガードレール + Pro解除' : 'Advanced: CLI guardrails + Pro unlock'}\n codeToggleLabel={t('common.showCommands', { defaultValue: 'Show commands' })}\n copyButtonLabel={copyButtonLabel}\n preflightHref=\"/tools/agent-cli/#preflight\"\n onPreflightClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_cli_preflight' })\n }\n proUnlockTitle={copy.proUnlockTitle}\n proUnlockBody={copy.proUnlockBody}\n proUnlockCmd={copy.proUnlockCmd}\n proUnlockNote={copy.proUnlockNote}\n onProUnlockCopied={() => trackEvent('tool_cta_click', { tool: 'app_review_aso', cta: 'copy_cli_pro_unlock' })}\n />\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_cli_preflight_card' })\n }\n className=\"max-w-xl mx-auto\"\n />\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"space-y-4\">\n <h2 className=\"text-lg font-bold text-white text-center\">{copy.overviewTitle}</h2>\n <ul className=\"max-w-3xl mx-auto space-y-2 text-sm text-slate-300\">\n {copy.overviewBullets.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 </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-lg font-bold text-white text-center\">{copy.checklistsTitle}</h2>\n <div className=\"grid md:grid-cols-3 gap-6\">\n {copy.checklists.map((item) => {\n const Icon = item.icon;\n return (\n <div key={item.key} className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 flex items-center justify-center\">\n <Icon size={18} className=\"text-slate-200\" />\n </div>\n <div className=\"text-lg font-bold text-white\">{item.title}</div>\n </div>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{item.body}</p>\n <ul className=\"text-xs text-slate-400 list-disc pl-4 space-y-1\">\n {item.bullets.map((bullet) => (\n <li key={bullet}>{bullet}</li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n <div className=\"text-xs text-slate-500 text-center\">{copy.note}</div>\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-lg font-bold text-white text-center\">{copy.messageExamplesTitle}</h2>\n <p className=\"text-sm text-slate-300 text-center max-w-3xl mx-auto\">{copy.messageExamplesLead}</p>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.messageExamples.map((item) => (\n <div key={`${item.bad}-${item.good}`} className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 space-y-3\">\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold\">\n {copy.messageExamplesBadLabel}\n </div>\n <div className=\"text-sm text-slate-200\">\"{item.bad}\"</div>\n </div>\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold\">\n {copy.messageExamplesGoodLabel}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n <div className=\"text-xs text-slate-400\">\n <span className=\"text-slate-300 font-semibold\">{copy.messageExamplesWhyLabel}: </span>\n {item.why}\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <h2 className=\"text-lg font-bold text-white\">{copy.abTestTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.abTestBody}</p>\n <ul className=\"text-sm text-slate-300 list-disc pl-5 space-y-1\">\n {(copy.abTestBullets || []).map((bullet) => (\n <li key={bullet}>{bullet}</li>\n ))}\n </ul>\n {copy.abTestNote && <p className=\"text-xs text-slate-500\">{copy.abTestNote}</p>}\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-lg font-bold text-white text-center\">{copy.assetsTitle}</h2>\n <div className=\"grid md:grid-cols-3 gap-6\">\n {copy.assets.map((asset) => (\n <a\n key={asset.key}\n href={asset.href}\n onClick={() => trackEvent('tool_cta_click', { tool: 'app_review_aso', cta: `open_${asset.key}` })}\n className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3 hover:border-slate-700 transition\"\n >\n <div className=\"text-lg font-bold text-white\">{asset.title}</div>\n <div className=\"text-sm text-slate-300\">{asset.desc}</div>\n <div className=\"text-xs text-blue-200 flex items-center gap-2\">\n {copy.assetsCta} <ArrowRight size={14} />\n </div>\n </a>\n ))}\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{copy.nextTitle}</div>\n <div className=\"text-sm text-slate-300\">{copy.nextBody}</div>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3 w-full md:w-auto\">\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_sample_project_body' })\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 w-full md:w-auto\"\n >\n {copy.nextCtaPrimary} <ArrowRight size={16} />\n </a>\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'open_agent_cli_footer' })\n }\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 w-full md:w-auto\"\n >\n {copy.nextCtaSecondary} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n </main>\n\n <StickyMobileCta\n primary={{\n label: copy.nextCtaPrimary,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'sticky_primary_sample' }),\n }}\n secondary={{\n label: copy.nextCtaSecondary,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'app_review_aso', cta: 'sticky_secondary_cli' }),\n }}\n />\n </div>\n );\n};\n\nexport default AppReviewAso;\n"],"names":["normalizeLang","lang","COPY","ShieldCheck","LayoutGrid","Crop","AppReviewAso","i18n","t","useTranslation","copy","openAppHref","agentCliHref","sampleProjectHref","configDownloadHref","csvDownloadHref","copyButtonLabel","usePageTitle","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","CopyButton","copyLabel","copyState","Fragment","ClipboardCopy","ToolGuardrailsPanel","CliPreflightCard","FitPanel","item","CheckCircle2","Icon","bullet","asset","StickyMobileCta"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as s,r as l,t as r,j as e,b as a}from"./index-Bqv2NztY.js";import{c as n,a as i,S as o}from"./LanguageSwitcher-BD9N-dla.js";import{S as d}from"./SiteHeader-DxsqNPnt.js";const x=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],m=n("circle-x",x),g=()=>{const{t}=s();return i("titles.checkoutCancelled"),l.useEffect(()=>{r("checkout_cancel_view")},[]),e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800 flex flex-col",children:[e.jsx(o,{}),e.jsx(d,{variant:"light",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-6 py-10",children:e.jsxs("div",{className:"max-w-lg w-full bg-white border border-slate-200 rounded-2xl shadow-sm p-8 text-center space-y-4",children:[e.jsx(m,{size:48,className:"text-amber-500 mx-auto"}),e.jsx("h1",{className:"text-2xl font-bold",children:t("pages.cancelled.title")}),e.jsx("p",{className:"text-slate-600",children:t("pages.cancelled.description")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[e.jsx("a",{href:"/app/",onClick:c=>a(c,"checkout_cancel_cta_click",{cta:"back_to_app"}),className:"inline-flex justify-center items-center px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800",children:t("pages.cancelled.action")}),e.jsx("a",{href:"/#pricing",onClick:c=>a(c,"checkout_cancel_cta_click",{cta:"go_pro_pricing"}),className:"inline-flex justify-center items-center px-4 py-2 rounded-lg border border-slate-300 text-slate-700 font-semibold hover:bg-slate-100",children:t("landing.nav.goPro")})]})]})})]})};export{g as default};
2
- //# sourceMappingURL=Cancelled-66ixTUrm.js.map
1
+ import{u as s,r as l,t as r,j as e,b as a}from"./index-C4xM6WAU.js";import{c as n,a as i,S as o}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as d}from"./SiteHeader-Ch5fAKkA.js";const x=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],m=n("circle-x",x),g=()=>{const{t}=s();return i("titles.checkoutCancelled"),l.useEffect(()=>{r("checkout_cancel_view")},[]),e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800 flex flex-col",children:[e.jsx(o,{}),e.jsx(d,{variant:"light",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-6 py-10",children:e.jsxs("div",{className:"max-w-lg w-full bg-white border border-slate-200 rounded-2xl shadow-sm p-8 text-center space-y-4",children:[e.jsx(m,{size:48,className:"text-amber-500 mx-auto"}),e.jsx("h1",{className:"text-2xl font-bold",children:t("pages.cancelled.title")}),e.jsx("p",{className:"text-slate-600",children:t("pages.cancelled.description")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[e.jsx("a",{href:"/app/",onClick:c=>a(c,"checkout_cancel_cta_click",{cta:"back_to_app"}),className:"inline-flex justify-center items-center px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800",children:t("pages.cancelled.action")}),e.jsx("a",{href:"/pricing",onClick:c=>a(c,"checkout_cancel_cta_click",{cta:"go_pro_pricing"}),className:"inline-flex justify-center items-center px-4 py-2 rounded-lg border border-slate-300 text-slate-700 font-semibold hover:bg-slate-100",children:t("landing.nav.goPro")})]})]})})]})};export{g as default};
2
+ //# sourceMappingURL=Cancelled-D6i4ywc8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cancelled-66ixTUrm.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-x.js","../../src/pages/Cancelled.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { XCircle } from 'lucide-react';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst Cancelled = () => {\n const { t } = useTranslation();\n usePageTitle('titles.checkoutCancelled');\n\n useEffect(() => {\n trackEvent('checkout_cancel_view');\n }, []);\n\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-6 py-10\">\n <div className=\"max-w-lg w-full bg-white border border-slate-200 rounded-2xl shadow-sm p-8 text-center space-y-4\">\n <XCircle size={48} className=\"text-amber-500 mx-auto\" />\n <h1 className=\"text-2xl font-bold\">{t('pages.cancelled.title')}</h1>\n <p className=\"text-slate-600\">{t('pages.cancelled.description')}</p>\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center\">\n <a\n href=\"/app/\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'checkout_cancel_cta_click', { cta: 'back_to_app' })\n }\n className=\"inline-flex justify-center items-center px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800\"\n >\n {t('pages.cancelled.action')}\n </a>\n <a\n href=\"/#pricing\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'checkout_cancel_cta_click', { cta: 'go_pro_pricing' })\n }\n className=\"inline-flex justify-center items-center px-4 py-2 rounded-lg border border-slate-300 text-slate-700 font-semibold hover:bg-slate-100\"\n >\n {t('landing.nav.goPro')}\n </a>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default Cancelled;\n"],"names":["__iconNode","CircleX","createLucideIcon","Cancelled","useTranslation","usePageTitle","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","XCircle","event","trackEventAndFollowLink"],"mappings":"kLASA,MAAMA,EAAa,CACjB,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMC,EAAUC,EAAiB,WAAYF,CAAU,ECNjDG,EAAY,IAAM,CACtB,KAAM,CAAE,CAAA,EAAMC,EAAA,EACd,OAAAC,EAAa,0BAA0B,EAEvCC,EAAAA,UAAU,IAAM,CACdC,EAAW,sBAAsB,CACnC,EAAG,CAAA,CAAE,EAGHC,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,QACzC,OAAA,CAAK,UAAU,qDACd,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,mGACb,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAQ,KAAM,GAAI,UAAU,yBAAyB,QACrD,KAAA,CAAG,UAAU,qBAAsB,SAAA,EAAE,uBAAuB,EAAE,QAC9D,IAAA,CAAE,UAAU,iBAAkB,SAAA,EAAE,6BAA6B,EAAE,EAChEJ,EAAAA,KAAC,MAAA,CAAI,UAAU,iDACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CACC,KAAK,QACL,QAAUI,GACRC,EAAwBD,EAAO,4BAA6B,CAAE,IAAK,cAAe,EAEpF,UAAU,wHAET,WAAE,wBAAwB,CAAA,CAAA,EAE7BJ,EAAAA,IAAC,IAAA,CACC,KAAK,YACL,QAAUI,GACRC,EAAwBD,EAAO,4BAA6B,CAAE,IAAK,iBAAkB,EAEvF,UAAU,uIAET,WAAE,mBAAmB,CAAA,CAAA,CACxB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Cancelled-D6i4ywc8.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-x.js","../../src/pages/Cancelled.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { XCircle } from 'lucide-react';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst Cancelled = () => {\n const { t } = useTranslation();\n usePageTitle('titles.checkoutCancelled');\n\n useEffect(() => {\n trackEvent('checkout_cancel_view');\n }, []);\n\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-6 py-10\">\n <div className=\"max-w-lg w-full bg-white border border-slate-200 rounded-2xl shadow-sm p-8 text-center space-y-4\">\n <XCircle size={48} className=\"text-amber-500 mx-auto\" />\n <h1 className=\"text-2xl font-bold\">{t('pages.cancelled.title')}</h1>\n <p className=\"text-slate-600\">{t('pages.cancelled.description')}</p>\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center\">\n <a\n href=\"/app/\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'checkout_cancel_cta_click', { cta: 'back_to_app' })\n }\n className=\"inline-flex justify-center items-center px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800\"\n >\n {t('pages.cancelled.action')}\n </a>\n <a\n href=\"/pricing\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'checkout_cancel_cta_click', { cta: 'go_pro_pricing' })\n }\n className=\"inline-flex justify-center items-center px-4 py-2 rounded-lg border border-slate-300 text-slate-700 font-semibold hover:bg-slate-100\"\n >\n {t('landing.nav.goPro')}\n </a>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default Cancelled;\n"],"names":["__iconNode","CircleX","createLucideIcon","Cancelled","useTranslation","usePageTitle","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","XCircle","event","trackEventAndFollowLink"],"mappings":"kLASA,MAAMA,EAAa,CACjB,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMC,EAAUC,EAAiB,WAAYF,CAAU,ECNjDG,EAAY,IAAM,CACtB,KAAM,CAAE,CAAA,EAAMC,EAAA,EACd,OAAAC,EAAa,0BAA0B,EAEvCC,EAAAA,UAAU,IAAM,CACdC,EAAW,sBAAsB,CACnC,EAAG,CAAA,CAAE,EAGHC,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,QACzC,OAAA,CAAK,UAAU,qDACd,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,mGACb,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAQ,KAAM,GAAI,UAAU,yBAAyB,QACrD,KAAA,CAAG,UAAU,qBAAsB,SAAA,EAAE,uBAAuB,EAAE,QAC9D,IAAA,CAAE,UAAU,iBAAkB,SAAA,EAAE,6BAA6B,EAAE,EAChEJ,EAAAA,KAAC,MAAA,CAAI,UAAU,iDACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CACC,KAAK,QACL,QAAUI,GACRC,EAAwBD,EAAO,4BAA6B,CAAE,IAAK,cAAe,EAEpF,UAAU,wHAET,WAAE,wBAAwB,CAAA,CAAA,EAE7BJ,EAAAA,IAAC,IAAA,CACC,KAAK,WACL,QAAUI,GACRC,EAAwBD,EAAO,4BAA6B,CAAE,IAAK,iBAAkB,EAEvF,UAAU,uIAET,WAAE,mBAAmB,CAAA,CAAA,CACxB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ import{c as g}from"./LanguageSwitcher-Cp-6zMXz.js";import{u as v,r as i,j as x}from"./index-C4xM6WAU.js";const T=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],A=g("arrow-right",T),S=async t=>{const o=typeof t=="string"?t:String(t??"");if(!o)return{ok:!1,method:"unavailable"};if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(o),{ok:!0,method:"clipboard"}}catch{}if(typeof document>"u")return{ok:!1,method:"unavailable"};let e=null;try{return e=document.createElement("textarea"),e.value=o,e.setAttribute("readonly",""),e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.opacity="0",e.style.pointerEvents="none",document.body.appendChild(e),e.focus(),e.select(),e.setSelectionRange(0,e.value.length),{ok:document.execCommand("copy"),method:"execCommand"}}catch{return{ok:!1,method:"execCommand"}}finally{e?.parentNode&&e.parentNode.removeChild(e)}},E=(t,{resetMs:o=1600,enabled:e=!0}={})=>{const{t:n}=v(),a=i.useRef(null),[c,l]=i.useState("idle"),r=i.useMemo(()=>typeof t=="string"?t:String(t??""),[t]),s=typeof window<"u"&&e&&!!r;i.useEffect(()=>()=>{a.current&&window.clearTimeout(a.current)},[]);const d=c==="copied"?n("common.copied",{defaultValue:"Copied"}):c==="error"?n("common.copyFailed",{defaultValue:"Copy failed"}):n("common.copy",{defaultValue:"Copy"}),p=i.useCallback(async()=>{if(!s)return!1;const u=await S(r);return l(u.ok?"copied":"error"),a.current&&window.clearTimeout(a.current),a.current=window.setTimeout(()=>l("idle"),o),u.ok},[s,o,r]);return{canCopy:s,copy:p,copyLabel:d,copyState:c}},B=({value:t,enabled:o=!0,resetMs:e,onCopied:n,onCopyFailed:a,onClick:c,type:l="button",children:r,disabled:s,...d})=>{const{["aria-label"]:p,...u}=d,{canCopy:f,copy:m,copyLabel:y,copyState:h}=E(t,{enabled:o,resetMs:e}),C=i.useCallback(async b=>{if(c?.(b),b?.defaultPrevented)return;await m()?n?.():a?.()},[m,c,n,a]),k=s||!f,w=typeof r=="function"?r({canCopy:f,copyLabel:y,copyState:h}):r??y;return x.jsx("button",{...u,type:l,onClick:C,disabled:k,"aria-label":p||y,children:w})};export{A,B as C,S as c};
2
+ //# sourceMappingURL=CopyButton-BlPQEoP3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyButton-BlPQEoP3.js","sources":["../../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../../src/lib/clipboard.js","../../src/hooks/useCopyButton.js","../../src/components/CopyButton.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","export const copyTextToClipboard = async (text) => {\n const value = typeof text === 'string' ? text : String(text ?? '');\n if (!value) return { ok: false, method: 'unavailable' };\n\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(value);\n return { ok: true, method: 'clipboard' };\n } catch {\n // fallback below\n }\n }\n\n if (typeof document === 'undefined') return { ok: false, method: 'unavailable' };\n\n let textarea = null;\n try {\n textarea = document.createElement('textarea');\n textarea.value = value;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.left = '0';\n textarea.style.opacity = '0';\n textarea.style.pointerEvents = 'none';\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n textarea.setSelectionRange(0, textarea.value.length);\n const ok = document.execCommand('copy');\n return { ok, method: 'execCommand' };\n } catch {\n return { ok: false, method: 'execCommand' };\n } finally {\n if (textarea?.parentNode) textarea.parentNode.removeChild(textarea);\n }\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { copyTextToClipboard } from '../lib/clipboard';\n\nconst useCopyButton = (text, { resetMs = 1600, enabled = true } = {}) => {\n const { t } = useTranslation();\n const timeoutRef = useRef(null);\n const [copyState, setCopyState] = useState('idle');\n\n const value = useMemo(() => (typeof text === 'string' ? text : String(text ?? '')), [text]);\n const canCopy = typeof window !== 'undefined' && enabled && Boolean(value);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const copyLabel =\n copyState === 'copied'\n ? t('common.copied', { defaultValue: 'Copied' })\n : copyState === 'error'\n ? t('common.copyFailed', { defaultValue: 'Copy failed' })\n : t('common.copy', { defaultValue: 'Copy' });\n\n const copy = useCallback(async () => {\n if (!canCopy) return false;\n\n const result = await copyTextToClipboard(value);\n setCopyState(result.ok ? 'copied' : 'error');\n\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => setCopyState('idle'), resetMs);\n\n return result.ok;\n }, [canCopy, resetMs, value]);\n\n return { canCopy, copy, copyLabel, copyState };\n};\n\nexport default useCopyButton;\n\n","import React, { useCallback } from 'react';\nimport useCopyButton from '../hooks/useCopyButton';\n\nconst CopyButton = ({\n value,\n enabled = true,\n resetMs,\n onCopied,\n onCopyFailed,\n onClick,\n type = 'button',\n children,\n disabled,\n ...rest\n}) => {\n const { ['aria-label']: ariaLabelProp, ...buttonProps } = rest;\n const { canCopy, copy, copyLabel, copyState } = useCopyButton(value, { enabled, resetMs });\n\n const handleClick = useCallback(\n async (event) => {\n onClick?.(event);\n if (event?.defaultPrevented) return;\n\n const ok = await copy();\n if (ok) onCopied?.();\n else onCopyFailed?.();\n },\n [copy, onClick, onCopied, onCopyFailed]\n );\n\n const isDisabled = disabled || !canCopy;\n const content =\n typeof children === 'function' ? children({ canCopy, copyLabel, copyState }) : children ?? copyLabel;\n\n return (\n <button\n {...buttonProps}\n type={type}\n onClick={handleClick}\n disabled={isDisabled}\n aria-label={ariaLabelProp || copyLabel}\n >\n {content}\n </button>\n );\n};\n\nexport default CopyButton;\n\n"],"names":["__iconNode","ArrowRight","createLucideIcon","copyTextToClipboard","text","value","textarea","useCopyButton","resetMs","enabled","t","useTranslation","timeoutRef","useRef","copyState","setCopyState","useState","useMemo","canCopy","useEffect","copyLabel","copy","useCallback","result","CopyButton","onCopied","onCopyFailed","onClick","type","children","disabled","rest","ariaLabelProp","buttonProps","handleClick","event","isDisabled","content","jsx"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,52 @@
1
+ import{u as L,r as T,t as l,j as e,b as a}from"./index-C4xM6WAU.js";import{C as I,S as U}from"./StickyMobileCta-BdjmxjZ4.js";import{A as d,C as g}from"./CopyButton-BlPQEoP3.js";import{F as B}from"./FitPanel-Fp4iPZxf.js";import{c as b,a as F,S as P}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as A}from"./SiteHeader-Ch5fAKkA.js";import{T as E}from"./ToolGuardrailsPanel-Dqo_LDWu.js";import{F as D}from"./folder-tree-zQOd55nP.js";import{C}from"./copy-BnUx1vxq.js";import{C as u}from"./chevron-down-DFKVs9n4.js";import"./circle-check-DA-NWInD.js";const q=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],H=b("mail",q);const O=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],R=b("message-square",O),M=o=>(o||"").split("-")[0]==="ja"?"ja":"en",y={en:{badge:"Fastlane cheat sheet",title:"Fastlane screenshot folder structure",subtitle:"Fastlane and other tools exist, but uploads still fail when paths/order drift. Copy/paste the paths Fastlane expects (deliver + supply), then lock an outcome-first screenshot order with reproducible exports.",primaryCta:"Run CLI first export",secondaryCta:"Open sample project (free)",heroCliTitle:"CLI quickstart (2 steps)",heroCliNote:"wizard → build (raw mode, no Playwright).",heroCliSummary:"Outputs: fastlane/ + reproducible ZIP (local/CI) with verify/stage guardrails.",heroCliCopyLabel:"Copy all commands",heroCliTemplatesLabel:"Starter templates",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/fastlane"].join(`
2
+ `),proUnlockTitle:"Unlock Pro (CLI)",proUnlockBody:"Remove the watermark and unlock full matrix batch exports via CLI auth:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"Completes a one-time browser sign-in; then rerun build with --require-pro.",trustNote:"Privacy-first: exports run locally (browser/CI). No uploads to ShipScreens.",structureTitle:"Expected paths (deliver + supply)",structureBody:"Most Fastlane failures come from path/numbering drift, not design quality. Keep this structure consistent per locale and device/bucket while preserving your own visual style. For panel #1, run a clarity check: if the line could fit many apps, rewrite it with one concrete outcome.",structureCode:`fastlane/
3
+ screenshots/ # iOS (deliver)
4
+ en-US/
5
+ iphone69_01.png
6
+ iphone69_02.png
7
+ metadata/
8
+ android/ # Android (supply)
9
+ en-US/
10
+ images/
11
+ phoneScreenshots/
12
+ 01.png
13
+ 02.png
14
+
15
+ fastlane_assets.zip # reproducible artifact (optional)`,bucketsTitle:"Android buckets (supply)",bucketsBody:"ShipScreens supports these upload buckets (use what matches your device set): phoneScreenshots, sevenInchScreenshots, tenInchScreenshots, tvScreenshots, wearScreenshots.",localTitle:"Local quickstart (no browser)",localBody:"Run shipscreens wizard (step-by-step), swap PNGs, build in raw mode, then verify/stage before upload.",localCode:`npx --yes shipscreens wizard
16
+ # replace assets/en-US/01.png..05.png
17
+ npx --yes shipscreens build --mode raw --zip --out out/fastlane
18
+ npx --yes shipscreens verify --out out/fastlane --zip --profile appstore`,pipelineTitle:"Recommended CI pipeline (copy/paste)",pipelineBody:"Validate → lock → build → verify → stage upload roots so each release reruns safely. Rendered mode uses Playwright Chromium.",pipelineCode:`npm ci
19
+ npx playwright install --with-deps chromium
20
+ npm run shipscreens:validate
21
+ npm run shipscreens:lock -- --check
22
+ npm run shipscreens:build -- --zip
23
+ npm run shipscreens:verify -- --zip
24
+ npm run shipscreens:stage -- --profile appstore --out stage/appstore
25
+ npm run shipscreens:stage -- --profile playstore --out stage/playstore`,partnerTitle:"Need help getting your first export?",partnerBody:"We do short 15-min workflow reviews and map your current setup to an upload-safe Fastlane-ready export with clearer screenshot positioning.",partnerEmailCta:"Email us",partnerDmCta:"DM on X"},ja:{badge:"Fastlane チートシート",title:"Fastlane 用スクショのフォルダ構成",subtitle:"Fastlaneや既存ツールがあっても、提出時はパス/順序の崩れで詰まりやすい。deliver / supply が期待するパスを固定し、成果訴求順を保った再現性出力にします。",primaryCta:"CLIで初回エクスポート",secondaryCta:"サンプルを開く(無料)",heroCliTitle:"CLIクイックスタート(2ステップ)",heroCliNote:"wizard → build(raw / Playwright不要)。",heroCliSummary:"出力: fastlane/ + 再現性ZIP(ローカル/CI)+ verify/stage ガードレール。",heroCliCopyLabel:"コマンドをすべてコピー",heroCliTemplatesLabel:"スターター雛形",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/fastlane"].join(`
26
+ `),proUnlockTitle:"Proを解除(CLI)",proUnlockBody:"透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"初回のみブラウザでサインインします。以後は --require-pro で再実行。",trustNote:"プライバシー: 出力はローカル(ブラウザ/CI)。ShipScreensへアップロード不要。",structureTitle:"期待されるパス(deliver + supply)",structureBody:"Fastlaneの失敗原因はデザインよりパス/連番ドリフトが多いです。見た目は維持したまま、言語/端末(バケット)単位でこの形に揃えます。1枚目は「他の多くのアプリにも当てはまる文言なら、成果を具体化して書き直す」を確認します。",structureCode:`fastlane/
27
+ screenshots/ # iOS (deliver)
28
+ en-US/
29
+ iphone69_01.png
30
+ iphone69_02.png
31
+ metadata/
32
+ android/ # Android (supply)
33
+ en-US/
34
+ images/
35
+ phoneScreenshots/
36
+ 01.png
37
+ 02.png
38
+
39
+ fastlane_assets.zip # 再現性のあるZIP(任意)`,bucketsTitle:"Android buckets(supply)",bucketsBody:"対応バケット: phoneScreenshots / sevenInchScreenshots / tenInchScreenshots / tvScreenshots / wearScreenshots",localTitle:"ローカル最短(ブラウザ不要)",localBody:"shipscreens wizard(ステップ式)で雛形作成 → raw モードで出力し、提出前に verify/stage を実行。",localCode:`npx --yes shipscreens wizard
40
+ # assets/en-US/01.png〜05.png を差し替え
41
+ npx --yes shipscreens build --mode raw --zip --out out/fastlane
42
+ npx --yes shipscreens verify --out out/fastlane --zip --profile appstore`,pipelineTitle:"CIパイプライン(コピペ)",pipelineBody:"validate → lock → build → verify → stage を回し、毎リリースを安全に再実行します(rendered mode)。",pipelineCode:`npm ci
43
+ npx playwright install --with-deps chromium
44
+ npm run shipscreens:validate
45
+ npm run shipscreens:lock -- --check
46
+ npm run shipscreens:build -- --zip
47
+ npm run shipscreens:verify -- --zip
48
+ npm run shipscreens:stage -- --profile appstore --out stage/appstore
49
+ npm run shipscreens:stage -- --profile playstore --out stage/playstore`,partnerTitle:"初回エクスポートが詰まったら",partnerBody:"15分だけ現状を聞かせてください。既存運用を upload-safe な Fastlane-ready に寄せつつ、訴求の通り方も改善する案を返します。",partnerEmailCta:"メールする",partnerDmCta:"XでDM"}},x=({label:o,code:r,tool:n,assetKey:s,toggleLabel:h,defaultOpen:i})=>e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/80 p-5 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"min-w-0",children:o&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:o})}),e.jsx(g,{value:r,onCopied:()=>l("tool_download",{tool:n,asset:s}),className:"shrink-0 inline-flex items-center gap-2 text-[11px] px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition",children:({copyLabel:m})=>e.jsxs(e.Fragment,{children:[e.jsx(C,{size:14}),m]})})]}),e.jsxs("details",{className:"group",open:i,children:[e.jsxs("summary",{className:"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none",children:[e.jsx("span",{children:h}),e.jsx(u,{size:14,className:"text-slate-500 transition-transform duration-200 group-open:rotate-180"})]}),e.jsx("pre",{className:"mt-2 text-xs text-slate-200 font-mono whitespace-pre leading-relaxed overflow-auto",children:r})]})]}),se=()=>{const{i18n:o,t:r}=L(),n=M(o.resolvedLanguage||o.language),s=y[n]||y.en,h="/app/?sample=5panel&entry_source=fastlane_screenshots_open_app_header",i="/tools/agent-cli/",m="/tools/first-export/?entry_source=fastlane_screenshots_primary_cta",f="/app/?sample=5panel&entry_source=fastlane_screenshots_open_sample_project",j="/downloads/shipscreens-agent-cli-config.yml",_="/downloads/shipscreens-agent-cli-copy.csv",w=r("common.copy",{defaultValue:"Copy"}),c=r("common.showCommands",{defaultValue:"Show commands"}),p=typeof window>"u"?!0:window.matchMedia("(min-width: 640px)").matches,k="support@shimaumaservices.co.jp",v=n==="ja"?"ShipScreens ヒアリング希望":"ShipScreens Founding / Design Partner",N=n==="ja"?["ShipScreens チーム様","","15分ヒアリングを希望します。","","- アプリ名 / URL:","- 現在のスクショ作業フロー:","- 端末数 / 言語数:","","よろしくお願いします。"].join(`
50
+ `):["Hi ShipScreens team,","","I want a 15-min workflow review to unblock my first Fastlane-ready export.","","- App name / link:","- Current screenshot workflow:","- #devices / #locales:","","Thanks!"].join(`
51
+ `),S=`mailto:${k}?subject=${encodeURIComponent(v)}&body=${encodeURIComponent(N)}`;return F("titles.fastlaneScreenshots",{defaultValue:"Fastlane screenshots - ShipScreens"}),T.useEffect(()=>{l("tool_view",{tool:"fastlane_screenshots"})},[]),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white",children:[e.jsx(P,{}),e.jsx(A,{variant:"dark",active:"tools",openAppHref:h,onToolsClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_tools_header"}),onPricingClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"pricing_header"}),onOpenAppClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_app_header"}),primaryCta:{href:m,label:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[r("landing.nav.primaryCta")," ",e.jsx(d,{size:16})]}),onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_first_export_header"})}}),e.jsxs("main",{className:"max-w-5xl mx-auto px-6 pb-24 space-y-10",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4 pt-6",children:[e.jsxs("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",children:[e.jsx(D,{size:14}),s.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:s.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:s.subtitle}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:e.jsxs("a",{href:i,onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_agent_cli_hero"}),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",children:[s.primaryCta," ",e.jsx(d,{size:16})]})}),e.jsxs("div",{className:"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:s.heroCliTitle}),e.jsx("p",{className:"text-xs text-slate-400",children:s.heroCliNote}),e.jsx("p",{className:"text-xs text-slate-500",children:s.heroCliSummary}),e.jsx(g,{value:s.heroCliCmd,onCopied:()=>l("tool_cta_click",{tool:"fastlane_screenshots",cta:"copy_cli_hero"}),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:t,copyState:z})=>e.jsxs(e.Fragment,{children:[e.jsx(C,{size:14}),z==="idle"?s.heroCliCopyLabel:t]})}),e.jsxs("details",{className:"group",open:p,children:[e.jsxs("summary",{className:"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none",children:[e.jsx("span",{children:c}),e.jsx(u,{size:14,className:"text-slate-500 transition-transform duration-200 group-open:rotate-180"})]}),e.jsx("div",{className:"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:s.heroCliCmd})})]}),e.jsxs("div",{className:"pt-1 space-y-2",children:[e.jsx("div",{className:"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:s.heroCliTemplatesLabel}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("a",{href:j,download:!0,onClick:()=>l("tool_download",{tool:"fastlane_screenshots",asset:"config_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:s.heroCliConfigLabel}),e.jsx("a",{href:_,download:!0,onClick:()=>l("tool_download",{tool:"fastlane_screenshots",asset:"copy_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:s.heroCliCsvLabel})]})]})]}),e.jsx(E,{title:n==="ja"?"詳細: CLIガードレール + Pro解除":"Advanced: CLI guardrails + Pro unlock",codeToggleLabel:c,copyButtonLabel:w,preflightHref:"/tools/agent-cli/#preflight",onPreflightClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_cli_preflight"}),proUnlockTitle:s.proUnlockTitle,proUnlockBody:s.proUnlockBody,proUnlockCmd:s.proUnlockCmd,proUnlockNote:s.proUnlockNote,onProUnlockCopied:()=>l("tool_cta_click",{tool:"fastlane_screenshots",cta:"copy_cli_pro_unlock"})}),e.jsx(I,{compact:!0,href:"/tools/agent-cli/#preflight",onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_cli_preflight_card"}),className:"max-w-xl mx-auto"}),e.jsx("div",{className:"text-xs text-slate-500 font-medium",children:s.trustNote})]}),e.jsx(B,{className:"max-w-4xl mx-auto w-full"}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsx("h2",{className:"text-lg font-bold text-white",children:s.structureTitle}),e.jsx("p",{className:"text-sm text-slate-300",children:s.structureBody}),e.jsx(x,{label:"paths",code:s.structureCode,tool:"fastlane_screenshots",assetKey:"fastlane_paths",toggleLabel:c,defaultOpen:p})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsx("h2",{className:"text-lg font-bold text-white",children:s.bucketsTitle}),e.jsx("p",{className:"text-sm text-slate-300",children:s.bucketsBody})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsx("h2",{className:"text-lg font-bold text-white",children:s.localTitle}),e.jsx("p",{className:"text-sm text-slate-300",children:s.localBody}),e.jsx(x,{label:"local",code:s.localCode,tool:"fastlane_screenshots",assetKey:"local_quickstart",toggleLabel:c,defaultOpen:p})]}),e.jsxs("details",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 group",children:[e.jsxs("summary",{className:"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none",children:[e.jsx("span",{children:s.pipelineTitle}),e.jsxs("span",{className:"flex items-center gap-2 text-[10px] font-semibold text-slate-400",children:[n==="ja"?"詳細":"ADVANCED",e.jsx(u,{size:14,className:"text-slate-500"})]})]}),e.jsxs("div",{className:"mt-3 space-y-3",children:[e.jsx("p",{className:"text-sm text-slate-300",children:s.pipelineBody}),e.jsx(x,{label:"ci",code:s.pipelineCode,tool:"fastlane_screenshots",assetKey:"ci_pipeline",toggleLabel:c,defaultOpen:p})]})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:s.partnerTitle}),e.jsx("div",{className:"text-sm text-slate-300",children:s.partnerBody})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 w-full md:w-auto",children:[e.jsxs("a",{href:S,onClick:()=>l("tool_cta_click",{tool:"fastlane_screenshots",cta:"email_design_partner"}),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.02] transition w-full md:w-auto",children:[e.jsx(H,{size:16}),s.partnerEmailCta]}),e.jsxs("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>l("tool_cta_click",{tool:"fastlane_screenshots",cta:"dm_design_partner"}),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-bold hover:bg-slate-900 transition w-full md:w-auto",children:[e.jsx(R,{size:16}),s.partnerDmCta]})]})]}),e.jsx("section",{className:"max-w-3xl mx-auto text-center space-y-3 pt-2",children:e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[e.jsxs("a",{href:i,onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_agent_cli_footer"}),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",children:[s.primaryCta," ",e.jsx(d,{size:16})]}),e.jsxs("a",{href:f,onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"open_sample_project_footer"}),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",children:[s.secondaryCta," ",e.jsx(d,{size:16})]})]})})]}),e.jsx(U,{primary:{label:s.primaryCta,href:i,onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"sticky_primary"})},secondary:{label:s.secondaryCta,href:f,onClick:t=>a(t,"tool_cta_click",{tool:"fastlane_screenshots",cta:"sticky_secondary"})}})]})};export{se as default};
52
+ //# sourceMappingURL=FastlaneScreenshots-DF74cNwo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FastlaneScreenshots-DF74cNwo.js","sources":["../../node_modules/lucide-react/dist/esm/icons/mail.js","../../node_modules/lucide-react/dist/esm/icons/message-square.js","../../src/pages/FastlaneScreenshots.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ]\n];\nconst MessageSquare = createLucideIcon(\"message-square\", __iconNode);\n\nexport { __iconNode, MessageSquare as default };\n//# sourceMappingURL=message-square.js.map\n","import React, { useEffect } from 'react';\nimport { ArrowRight, ChevronDown, Copy, FolderTree, Mail, MessageSquare } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport CopyButton from '../components/CopyButton';\nimport FitPanel from '../components/FitPanel';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport ToolGuardrailsPanel from '../components/ToolGuardrailsPanel';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Fastlane cheat sheet',\n title: 'Fastlane screenshot folder structure',\n subtitle:\n 'Fastlane and other tools exist, but uploads still fail when paths/order drift. Copy/paste the paths Fastlane expects (deliver + supply), then lock an outcome-first screenshot order with reproducible exports.',\n primaryCta: 'Run CLI first export',\n secondaryCta: 'Open sample project (free)',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard → build (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP (local/CI) with verify/stage guardrails.',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/fastlane',\n ].join('\\n'),\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix batch exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun build with --require-pro.',\n trustNote: 'Privacy-first: exports run locally (browser/CI). No uploads to ShipScreens.',\n structureTitle: 'Expected paths (deliver + supply)',\n structureBody:\n 'Most Fastlane failures come from path/numbering drift, not design quality. Keep this structure consistent per locale and device/bucket while preserving your own visual style. For panel #1, run a clarity check: if the line could fit many apps, rewrite it with one concrete outcome.',\n structureCode: `fastlane/\n screenshots/ # iOS (deliver)\n en-US/\n iphone69_01.png\n iphone69_02.png\n metadata/\n android/ # Android (supply)\n en-US/\n images/\n phoneScreenshots/\n 01.png\n 02.png\n\nfastlane_assets.zip # reproducible artifact (optional)`,\n bucketsTitle: 'Android buckets (supply)',\n bucketsBody:\n 'ShipScreens supports these upload buckets (use what matches your device set): phoneScreenshots, sevenInchScreenshots, tenInchScreenshots, tvScreenshots, wearScreenshots.',\n localTitle: 'Local quickstart (no browser)',\n localBody: 'Run shipscreens wizard (step-by-step), swap PNGs, build in raw mode, then verify/stage before upload.',\n localCode: `npx --yes shipscreens wizard\n# replace assets/en-US/01.png..05.png\nnpx --yes shipscreens build --mode raw --zip --out out/fastlane\nnpx --yes shipscreens verify --out out/fastlane --zip --profile appstore`,\n pipelineTitle: 'Recommended CI pipeline (copy/paste)',\n pipelineBody: 'Validate → lock → build → verify → stage upload roots so each release reruns safely. Rendered mode uses Playwright Chromium.',\n pipelineCode: `npm ci\nnpx playwright install --with-deps chromium\nnpm run shipscreens:validate\nnpm run shipscreens:lock -- --check\nnpm run shipscreens:build -- --zip\nnpm run shipscreens:verify -- --zip\nnpm run shipscreens:stage -- --profile appstore --out stage/appstore\nnpm run shipscreens:stage -- --profile playstore --out stage/playstore`,\n partnerTitle: 'Need help getting your first export?',\n partnerBody: 'We do short 15-min workflow reviews and map your current setup to an upload-safe Fastlane-ready export with clearer screenshot positioning.',\n partnerEmailCta: 'Email us',\n partnerDmCta: 'DM on X',\n },\n ja: {\n badge: 'Fastlane チートシート',\n title: 'Fastlane 用スクショのフォルダ構成',\n subtitle: 'Fastlaneや既存ツールがあっても、提出時はパス/順序の崩れで詰まりやすい。deliver / supply が期待するパスを固定し、成果訴求順を保った再現性出力にします。',\n primaryCta: 'CLIで初回エクスポート',\n secondaryCta: 'サンプルを開く(無料)',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard → build(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP(ローカル/CI)+ verify/stage ガードレール。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/fastlane',\n ].join('\\n'),\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は --require-pro で再実行。',\n trustNote: 'プライバシー: 出力はローカル(ブラウザ/CI)。ShipScreensへアップロード不要。',\n structureTitle: '期待されるパス(deliver + supply)',\n structureBody: 'Fastlaneの失敗原因はデザインよりパス/連番ドリフトが多いです。見た目は維持したまま、言語/端末(バケット)単位でこの形に揃えます。1枚目は「他の多くのアプリにも当てはまる文言なら、成果を具体化して書き直す」を確認します。',\n structureCode: `fastlane/\n screenshots/ # iOS (deliver)\n en-US/\n iphone69_01.png\n iphone69_02.png\n metadata/\n android/ # Android (supply)\n en-US/\n images/\n phoneScreenshots/\n 01.png\n 02.png\n\nfastlane_assets.zip # 再現性のあるZIP(任意)`,\n bucketsTitle: 'Android buckets(supply)',\n bucketsBody:\n '対応バケット: phoneScreenshots / sevenInchScreenshots / tenInchScreenshots / tvScreenshots / wearScreenshots',\n localTitle: 'ローカル最短(ブラウザ不要)',\n localBody: 'shipscreens wizard(ステップ式)で雛形作成 → raw モードで出力し、提出前に verify/stage を実行。',\n localCode: `npx --yes shipscreens wizard\n# assets/en-US/01.png〜05.png を差し替え\nnpx --yes shipscreens build --mode raw --zip --out out/fastlane\nnpx --yes shipscreens verify --out out/fastlane --zip --profile appstore`,\n pipelineTitle: 'CIパイプライン(コピペ)',\n pipelineBody: 'validate → lock → build → verify → stage を回し、毎リリースを安全に再実行します(rendered mode)。',\n pipelineCode: `npm ci\nnpx playwright install --with-deps chromium\nnpm run shipscreens:validate\nnpm run shipscreens:lock -- --check\nnpm run shipscreens:build -- --zip\nnpm run shipscreens:verify -- --zip\nnpm run shipscreens:stage -- --profile appstore --out stage/appstore\nnpm run shipscreens:stage -- --profile playstore --out stage/playstore`,\n partnerTitle: '初回エクスポートが詰まったら',\n partnerBody: '15分だけ現状を聞かせてください。既存運用を upload-safe な Fastlane-ready に寄せつつ、訴求の通り方も改善する案を返します。',\n partnerEmailCta: 'メールする',\n partnerDmCta: 'XでDM',\n },\n};\n\nconst CodeBlock = ({ label, code, tool, assetKey, toggleLabel, defaultOpen }) => (\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/80 p-5 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n {label && <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500\">{label}</div>}\n </div>\n <CopyButton\n value={code}\n onCopied={() => trackEvent('tool_download', { tool, asset: assetKey })}\n className=\"shrink-0 inline-flex items-center gap-2 text-[11px] px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition\"\n >\n {({ copyLabel }) => (\n <>\n <Copy size={14} />\n {copyLabel}\n </>\n )}\n </CopyButton>\n </div>\n <details className=\"group\" open={defaultOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{toggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <pre className=\"mt-2 text-xs text-slate-200 font-mono whitespace-pre leading-relaxed overflow-auto\">{code}</pre>\n </details>\n </div>\n);\n\nconst FastlaneScreenshots = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n const openAppHref = '/app/?sample=5panel&entry_source=fastlane_screenshots_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const firstExportHref = '/tools/first-export/?entry_source=fastlane_screenshots_primary_cta';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=fastlane_screenshots_open_sample_project';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\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\n const supportEmail = 'support@shimaumaservices.co.jp';\n const mailSubject = lang === 'ja' ? 'ShipScreens ヒアリング希望' : 'ShipScreens Founding / Design Partner';\n const mailBody =\n lang === 'ja'\n ? [\n 'ShipScreens チーム様',\n '',\n '15分ヒアリングを希望します。',\n '',\n '- アプリ名 / URL:',\n '- 現在のスクショ作業フロー:',\n '- 端末数 / 言語数:',\n '',\n 'よろしくお願いします。',\n ].join('\\n')\n : [\n 'Hi ShipScreens team,',\n '',\n 'I want a 15-min workflow review to unblock my first Fastlane-ready export.',\n '',\n '- App name / link:',\n '- Current screenshot workflow:',\n '- #devices / #locales:',\n '',\n 'Thanks!',\n ].join('\\n');\n const partnerMailto = `mailto:${supportEmail}?subject=${encodeURIComponent(mailSubject)}&body=${encodeURIComponent(\n mailBody\n )}`;\n\n usePageTitle('titles.fastlaneScreenshots', { defaultValue: 'Fastlane screenshots - ShipScreens' });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'fastlane_screenshots' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_app_header' })\n }\n primaryCta={{\n href: firstExportHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {t('landing.nav.primaryCta')} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_first_export_header' }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-10\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4 pt-6\">\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 <FolderTree 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 <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_agent_cli_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.primaryCta} <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] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.heroCliTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.heroCliNote}</p>\n <p className=\"text-xs text-slate-500\">{copy.heroCliSummary}</p>\n <CopyButton\n value={copy.heroCliCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'fastlane_screenshots', cta: 'copy_cli_hero' })}\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 <Copy size={14} />\n {copyState === 'idle' ? copy.heroCliCopyLabel : copyLabel}\n </>\n )}\n </CopyButton>\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-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroCliCmd}</pre>\n </div>\n </details>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'fastlane_screenshots', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'fastlane_screenshots', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n </div>\n <ToolGuardrailsPanel\n title={lang === 'ja' ? '詳細: CLIガードレール + Pro解除' : 'Advanced: CLI guardrails + Pro unlock'}\n codeToggleLabel={codeToggleLabel}\n copyButtonLabel={copyButtonLabel}\n preflightHref=\"/tools/agent-cli/#preflight\"\n onPreflightClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_cli_preflight' })\n }\n proUnlockTitle={copy.proUnlockTitle}\n proUnlockBody={copy.proUnlockBody}\n proUnlockCmd={copy.proUnlockCmd}\n proUnlockNote={copy.proUnlockNote}\n onProUnlockCopied={() => trackEvent('tool_cta_click', { tool: 'fastlane_screenshots', cta: 'copy_cli_pro_unlock' })}\n />\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'fastlane_screenshots',\n cta: 'open_cli_preflight_card',\n })\n }\n className=\"max-w-xl mx-auto\"\n />\n <div className=\"text-xs text-slate-500 font-medium\">{copy.trustNote}</div>\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <h2 className=\"text-lg font-bold text-white\">{copy.structureTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.structureBody}</p>\n <CodeBlock\n label=\"paths\"\n code={copy.structureCode}\n tool=\"fastlane_screenshots\"\n assetKey=\"fastlane_paths\"\n toggleLabel={codeToggleLabel}\n defaultOpen={defaultCodeOpen}\n />\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <h2 className=\"text-lg font-bold text-white\">{copy.bucketsTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.bucketsBody}</p>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <h2 className=\"text-lg font-bold text-white\">{copy.localTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.localBody}</p>\n <CodeBlock\n label=\"local\"\n code={copy.localCode}\n tool=\"fastlane_screenshots\"\n assetKey=\"local_quickstart\"\n toggleLabel={codeToggleLabel}\n defaultOpen={defaultCodeOpen}\n />\n </section>\n\n <details className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.pipelineTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n {lang === 'ja' ? '詳細' : 'ADVANCED'}\n <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-3\">\n <p className=\"text-sm text-slate-300\">{copy.pipelineBody}</p>\n <CodeBlock\n label=\"ci\"\n code={copy.pipelineCode}\n tool=\"fastlane_screenshots\"\n assetKey=\"ci_pipeline\"\n toggleLabel={codeToggleLabel}\n defaultOpen={defaultCodeOpen}\n />\n </div>\n </details>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{copy.partnerTitle}</div>\n <div className=\"text-sm text-slate-300\">{copy.partnerBody}</div>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3 w-full md:w-auto\">\n <a\n href={partnerMailto}\n onClick={() => trackEvent('tool_cta_click', { tool: 'fastlane_screenshots', cta: 'email_design_partner' })}\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.02] transition w-full md:w-auto\"\n >\n <Mail size={16} />\n {copy.partnerEmailCta}\n </a>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'fastlane_screenshots', cta: 'dm_design_partner' })}\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-bold hover:bg-slate-900 transition w-full md:w-auto\"\n >\n <MessageSquare size={16} />\n {copy.partnerDmCta}\n </a>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto text-center space-y-3 pt-2\">\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center\">\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'open_agent_cli_footer' })\n }\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 {copy.primaryCta} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'fastlane_screenshots',\n cta: 'open_sample_project_footer',\n })\n }\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.secondaryCta} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.primaryCta,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'sticky_primary' }),\n }}\n secondary={{\n label: copy.secondaryCta,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'fastlane_screenshots', cta: 'sticky_secondary' }),\n }}\n />\n </div>\n );\n};\n\nexport default FastlaneScreenshots;\n"],"names":["__iconNode","Mail","createLucideIcon","MessageSquare","normalizeLang","lang","COPY","CodeBlock","label","code","tool","assetKey","toggleLabel","defaultOpen","jsxs","jsx","CopyButton","trackEvent","copyLabel","Fragment","Copy","ChevronDown","FastlaneScreenshots","i18n","t","useTranslation","copy","openAppHref","agentCliHref","firstExportHref","sampleProjectHref","configDownloadHref","csvDownloadHref","copyButtonLabel","codeToggleLabel","defaultCodeOpen","supportEmail","mailSubject","mailBody","partnerMailto","usePageTitle","useEffect","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","FolderTree","copyState","ToolGuardrailsPanel","CliPreflightCard","FitPanel","StickyMobileCta"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1,6 @@
1
+ import{u as B,r as y,t as r,j as e,b as a}from"./index-C4xM6WAU.js";import{A as o,C as u}from"./CopyButton-BlPQEoP3.js";import{C as S,S as q}from"./StickyMobileCta-BdjmxjZ4.js";import{F as U}from"./FitPanel-Fp4iPZxf.js";import{a as F,S as R}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as A}from"./SiteHeader-Ch5fAKkA.js";import{R as H}from"./rocket-fjJ-qzsl.js";import{C as p}from"./circle-check-DA-NWInD.js";import{C as O}from"./chevron-down-DFKVs9n4.js";import{T as j}from"./terminal-CY2dKmaU.js";import{C as f}from"./clipboard-copy-B2p9wr40.js";const Z=c=>(c||"").split("-")[0]==="ja"?"ja":"en",C={en:{badge:"5-minute first export",title:"Get an outcome-first Fastlane-ready export in 5 minutes",subtitle:"You may already have design tools or Fastlane scripts. This page gets you to a reproducible first export (fastlane/ + ZIP) with a clear panel story, so reruns stop breaking on both messaging and paths/order.",quickPathTitle:"Fastest path (keep your current design workflow)",quickPathBullets:["Start from the 5-panel sample project and edit copy first.","Keep panel #1 to one concrete outcome for one user type.","Use zero-padded 01..05 naming so release reruns stay stable."],demoTitle:"Run a demo export (no assets required)",demoBody:"If you just want to sanity-check the folder roots and the deterministic ZIP first, run the demo. It generates a throwaway project and stages a clean upload root.",demoCmd:"npx --yes shipscreens demo",demoBullets:["Output tree: fastlane/ + reproducible ZIP","Stages a clean upload root (deliver/supply-safe)","Delete the demo folder anytime"],demoNote:"First run may take longer while npx downloads the package.",heroCliTitle:"CLI quickstart (2 steps)",heroCliNote:"wizard → build (raw mode, no Playwright).",heroCliSummary:"Outputs: fastlane/ + reproducible ZIP (local/CI); add verify/stage next.",heroCliCopyLabel:"Copy all commands",heroCliTemplatesLabel:"Starter templates",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",ctas:{cli:"Run CLI first export",goPro:"Go Pro",sample:"Open sample project"},steps:[{title:"Run the CLI wizard (or open the sample)",body:"Scaffold config + placeholders from wizard, or start from the 5-panel sample and keep your current visual style."},{title:"Lock panel order + export upload-ready outputs",body:"Generate fastlane/ + reproducible ZIP with stable numbering/path naming and a clear Hook -> CTA panel flow."},{title:"Add verify + stage guardrails",body:"Run validate/lock/build/verify/stage so each release stays upload-safe and avoids hidden drift."}],quickstartTitle:"CI quickstart (copy/paste)",quickstartBody:"Run these commands in CI to generate Fastlane-ready outputs (rendered mode).",quickstartCmd:["npm ci","npx playwright install --with-deps chromium","npm run shipscreens:validate","npm run shipscreens:lock -- --check","npm run shipscreens:build -- --zip","npm run shipscreens:verify -- --zip"].join(`
2
+ `),cliTitle:"Prefer CLI (no browser)?",cliBody:"Run shipscreens wizard, replace placeholders, and build in raw mode first; then add verify/stage to catch drift before upload.",cliCmd:["npx --yes shipscreens wizard","# replace assets/en-US/01.png..05.png","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
3
+ `),cliCta:"Open Agent + CLI quickstart",proTitle:"Upgrade unlocks",proBullets:["Unlock CI-grade reruns (rendered exports)","Full matrix batch exports (devices × locales)","CSV/JSON copy import at scale","No watermark"],proUnlockTitle:"Unlock Pro (CLI)",proUnlockBody:"Remove the watermark and unlock full matrix exports via CLI auth:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"Completes a one-time browser sign-in; then rerun build with --require-pro.",advancedTitle:"Advanced: CLI + CI guardrails",advancedBody:"Optional for first export. Use this when you need deterministic reruns in CI.",note:"Free exports are watermarked. Keep your current design tools and art direction; ShipScreens adds deterministic reruns + upload guardrails. Clarity check: if screenshot #1 could fit many apps, rewrite it with one concrete outcome."},ja:{badge:"5分で初回エクスポート",title:"成果訴求を固めた Fastlane-ready を5分で出す",subtitle:"既存のデザインツールやFastlaneスクリプトはそのままで、まず「1枚目で成果が伝わる」再現性のある初回出力(fastlane/ + ZIP)を作るページです。パス/順序の崩れも止めます。",quickPathTitle:"最短導線(既存デザイン運用をそのまま活用)",quickPathBullets:["5枚構成サンプルを開いて、まずコピーだけ調整する。","1枚目は「誰に、どんな成果か」を1つに絞る。","01..05 の連番命名で、リリース時の再実行を安定化する。"],demoTitle:"デモを書き出す(素材不要)",demoBody:"まずフォルダ構成と再現性ZIPだけ確認したい場合はデモが最短です。捨てプロジェクトを生成し、クリーンな提出ルートまで stage します。",demoCmd:"npx --yes shipscreens demo",demoBullets:["出力: fastlane/ + 再現性ZIP","提出用のクリーンなルートを stage","デモは削除してOK"],demoNote:"初回は npx がパッケージを取得するため時間がかかる場合があります。",heroCliTitle:"CLIクイックスタート(2ステップ)",heroCliNote:"wizard → build(raw / Playwright不要)。",heroCliSummary:"出力: fastlane/ + 再現性ZIP(ローカル/CI); 次に verify/stage を追加。",heroCliCopyLabel:"コマンドをすべてコピー",heroCliTemplatesLabel:"スターター雛形",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",ctas:{cli:"CLIで初回エクスポート",goPro:"Proにアップグレード",sample:"サンプルを開く"},steps:[{title:"CLI wizard で雛形作成(サンプルでも可)",body:"wizard で雛形を作るか、5枚構成サンプルから開始し、既存の見た目を維持したまま進めます。"},{title:"訴求順を固定してアップロード用出力を作る",body:"Hook->CTA の流れを維持しながら、連番/パス命名を固定して fastlane/ + 再現性ZIP を出力。"},{title:"verify + stage を追加",body:"validate/lock/build/verify/stage を回し、毎リリースのアップロード事故と見えないドリフトを防ぎます。"}],quickstartTitle:"CIクイックスタート(コピペ)",quickstartBody:"CIで Fastlane-ready 出力を生成するコマンドです(rendered mode)。",quickstartCmd:["npm ci","npx playwright install --with-deps chromium","npm run shipscreens:validate","npm run shipscreens:lock -- --check","npm run shipscreens:build -- --zip","npm run shipscreens:verify -- --zip"].join(`
4
+ `),cliTitle:"CLIで完結したい場合",cliBody:"shipscreens wizard で雛形を作って raw モードで出力し、次に verify/stage を足して提出前に崩れを検知します。",cliCmd:["npx --yes shipscreens wizard","# assets/en-US/01.png〜05.png を差し替え","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
5
+ `),cliCta:"Agent + CLI クイックスタート",proTitle:"Proでできること",proBullets:["CIで再実行(rendered出力)","フル一括(端末×言語)","CSV/JSON copy 取り込み","透かしなし"],proUnlockTitle:"Proを解除(CLI)",proUnlockBody:"透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"初回のみブラウザでサインインします。以後は --require-pro で再実行。",advancedTitle:"詳細: CLI + CI ガードレール",advancedBody:"初回出力では任意。CIで再実行性を固定したい場合に使います。",note:"無料版は透かし付きです。既存の見た目とツールはそのままに、ShipScreensで再実行性と提出前ガードレールを追加します。確認: 1枚目見出しが他の多くのアプリにも当てはまるなら、成果を具体化します。"}},X=()=>{const{i18n:c,t:l}=B(),_=Z(c.resolvedLanguage||c.language),t=C[_]||C.en,x="support@shimaumaservices.co.jp",k=l("landing.partner.emailSubject",{defaultValue:"ShipScreens first export review"}),v=l("landing.partner.emailBody",{defaultValue:""}),N=`mailto:${x}?subject=${encodeURIComponent(k)}&body=${encodeURIComponent(v)}`,w="/app/?sample=5panel&entry_source=first_export_open_app_header",g="/tools/agent-cli/",I="/downloads/shipscreens-agent-cli-config.yml",P="/downloads/shipscreens-agent-cli-copy.csv",T="/app/?sample=5panel&upgrade=1&entry_source=first_export_go_pro_footer",m="/app/?sample=5panel&entry_source=first_export_open_sample_project",z="/app/?sample=5panel&entry_source=first_export_open_sample_project_footer",d=l("common.copy",{defaultValue:"Copy"}),[L,b]=y.useState("cli"),i=L==="cli",n=i?{title:t.cliTitle,body:t.cliBody,cmd:t.cliCmd,cta:"copy_cli_quickstart"}:{title:t.quickstartTitle,body:t.quickstartBody,cmd:t.quickstartCmd,cta:"copy_ci_quickstart"};return F("titles.firstExport",{defaultValue:t.title}),y.useEffect(()=>{r("tool_view",{tool:"first_export"})},[]),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white",children:[e.jsx(R,{}),e.jsx(A,{variant:"dark",active:"tools",openAppHref:w,onToolsClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_tools_header"}),onPricingClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"pricing_header"}),onOpenAppClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_app_header"}),primaryCta:{href:m,label:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[t.ctas.sample," ",e.jsx(o,{size:16})]}),onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_sample_project_header"})}}),e.jsxs("main",{className:"max-w-5xl mx-auto px-6 pb-24 space-y-12",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4",children:[e.jsxs("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",children:[e.jsx(H,{size:14}),t.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:t.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:t.subtitle}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:[e.jsxs("a",{href:m,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_sample_project_hero"}),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",children:[t.ctas.sample," ",e.jsx(o,{size:16})]}),e.jsxs("a",{href:g,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_agent_cli_hero"}),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 font-bold hover:bg-slate-900 transition",children:[t.ctas.cli," ",e.jsx(o,{size:16})]})]}),e.jsxs("div",{className:"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:t.quickPathTitle}),t.quickPathBullets?.length>0&&e.jsx("ul",{className:"space-y-1 text-xs text-slate-300",children:t.quickPathBullets.map(s=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(p,{size:14,className:"mt-0.5 text-green-400 shrink-0"}),e.jsx("span",{children:s})]},s))})]}),e.jsx("p",{className:"text-xs text-slate-500",children:t.note})]}),e.jsx(U,{className:"max-w-4xl mx-auto w-full"}),e.jsx("section",{className:"grid md:grid-cols-3 gap-6",children:t.steps.map((s,h)=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsxs("div",{className:"text-xs font-semibold text-blue-200",children:["STEP ",h+1]}),e.jsx("div",{className:"text-lg font-bold text-white",children:s.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.body})]},s.title))}),e.jsxs("details",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 group",children:[e.jsxs("summary",{className:"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none",children:[e.jsx("span",{children:t.advancedTitle}),e.jsxs("span",{className:"flex items-center gap-2 text-[10px] font-semibold text-slate-400",children:["CLI/CI ",e.jsx(O,{size:14,className:"text-slate-500"})]})]}),e.jsxs("div",{className:"mt-3 space-y-4",children:[e.jsx("p",{className:"text-sm text-slate-300",children:t.advancedBody}),e.jsxs("div",{className:"flex flex-col md:flex-row md:items-center md:justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-bold text-white",children:[i?e.jsx(j,{size:16,className:"text-blue-300"}):e.jsx(p,{size:16,className:"text-blue-300"}),n.title]}),e.jsxs("div",{className:"inline-flex gap-2 rounded-lg border border-slate-700 bg-slate-950 p-1",children:[e.jsx("button",{type:"button",onClick:()=>b("cli"),className:`px-3 py-1.5 rounded-md text-xs font-semibold transition-colors ${i?"bg-white text-slate-900":"text-slate-400 hover:text-slate-200"}`,children:t.cliTitle}),e.jsx("button",{type:"button",onClick:()=>b("ci"),className:`px-3 py-1.5 rounded-md text-xs font-semibold transition-colors ${i?"text-slate-400 hover:text-slate-200":"bg-white text-slate-900"}`,children:t.quickstartTitle})]})]}),e.jsx("p",{className:"text-sm text-slate-300",children:n.body}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 p-4",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:n.cmd})}),e.jsx(u,{value:n.cmd,onCopied:()=>r("tool_cta_click",{tool:"first_export",cta:n.cta}),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",children:({copyLabel:s})=>e.jsxs(e.Fragment,{children:[e.jsx(f,{size:14}),s||d]})}),i&&e.jsxs("a",{href:"/tools/agent-cli/",onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_agent_cli"}),className:"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors",children:[t.cliCta," ",e.jsx(o,{size:14})]}),e.jsxs("div",{className:"pt-1 space-y-2",children:[e.jsx("div",{className:"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:t.heroCliTemplatesLabel}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("a",{href:I,download:!0,onClick:()=>r("tool_download",{tool:"first_export",asset:"config_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:t.heroCliConfigLabel}),e.jsx("a",{href:P,download:!0,onClick:()=>r("tool_download",{tool:"first_export",asset:"copy_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:t.heroCliCsvLabel})]})]}),e.jsxs("div",{className:"text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:[e.jsx(j,{size:14,className:"text-blue-300"}),t.demoTitle]}),e.jsx("p",{className:"text-xs text-slate-400",children:t.demoBody}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 p-3",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:t.demoCmd})}),e.jsx(u,{value:t.demoCmd,onCopied:()=>r("tool_cta_click",{tool:"first_export",cta:"copy_demo_cmd"}),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:s,copyState:h})=>e.jsxs(e.Fragment,{children:[e.jsx(f,{size:14}),h==="idle"?d:s||d]})}),t.demoBullets?.length>0&&e.jsx("ul",{className:"space-y-1 text-xs text-slate-300 pt-1",children:t.demoBullets.map(s=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(p,{size:14,className:"mt-0.5 text-green-400 shrink-0"}),e.jsx("span",{children:s})]},s))}),t.demoNote&&e.jsx("div",{className:"text-[11px] text-slate-500",children:t.demoNote})]}),e.jsx(S,{compact:!0,href:"/tools/agent-cli/#preflight",onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_cli_preflight"}),className:"max-w-xl"})]})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:t.proTitle}),e.jsx("ul",{className:"space-y-2 text-sm text-slate-300",children:t.proBullets.map(s=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx(p,{size:16,className:"text-green-400"}),s]},s))}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 pt-2",children:[e.jsxs("a",{href:T,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"go_pro_footer"}),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",children:[t.ctas.goPro," ",e.jsx(o,{size:16})]}),e.jsxs("a",{href:z,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"open_sample_project_footer"}),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",children:[t.ctas.sample," ",e.jsx(o,{size:16})]})]}),e.jsxs("div",{className:"pt-4 border-t border-slate-800/80 space-y-2",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:t.proUnlockTitle}),t.proUnlockBody&&e.jsx("p",{className:"text-sm text-slate-300",children:t.proUnlockBody}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:t.proUnlockCmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(u,{value:t.proUnlockCmd,onCopied:()=>r("tool_cta_click",{tool:"first_export",cta:"copy_cli_pro_unlock"}),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",children:({copyLabel:s})=>e.jsxs(e.Fragment,{children:[e.jsx(f,{size:14}),s||d]})})}),t.proUnlockNote&&e.jsx("div",{className:"text-xs text-slate-500",children:t.proUnlockNote})]})]}),e.jsxs("section",{id:"design-partner",className:"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:l("landing.partner.title")}),e.jsx("div",{className:"text-sm text-slate-300 leading-relaxed",children:l("landing.partner.body")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:N,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"email_design_partner"}),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",children:[l("landing.partner.emailCta")," ",e.jsx(o,{size:16})]}),e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>r("tool_cta_click",{tool:"first_export",cta:"dm_design_partner"}),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",children:l("landing.partner.dmCta")})]}),e.jsxs("div",{className:"text-xs text-slate-500",children:[l("landing.partner.emailLabel")," ",e.jsx("a",{href:`mailto:${x}`,className:"underline underline-offset-4 hover:text-white",children:x})]})]})]}),e.jsx(q,{note:t.note,primary:{label:t.ctas.sample,href:m,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"sticky_primary_sample"})},secondary:{label:t.ctas.cli,href:g,onClick:s=>a(s,"tool_cta_click",{tool:"first_export",cta:"sticky_secondary_cli"})}})]})};export{X as default};
6
+ //# sourceMappingURL=FirstExport-BMHdPGDX.js.map