shipscreens 0.1.3 → 0.1.4

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 (217) hide show
  1. package/README.md +12 -0
  2. package/dist/.well-known/ai-agents.json +88 -0
  3. package/dist/.well-known/llms-full.txt +150 -0
  4. package/dist/.well-known/llms.txt +57 -0
  5. package/dist/.well-known/mcp-server.json +40 -0
  6. package/dist/ai-agents.json +88 -0
  7. package/dist/app/assets/{AgentCli-CJHTv5S4.js → AgentCli-DNTDYBbk.js} +2 -2
  8. package/dist/{assets/AgentCli-CJHTv5S4.js.map → app/assets/AgentCli-DNTDYBbk.js.map} +1 -1
  9. package/dist/app/assets/{App-DV5XHwn8.js → App-DPi9LW-y.js} +2 -2
  10. package/dist/{assets/App-DV5XHwn8.js.map → app/assets/App-DPi9LW-y.js.map} +1 -1
  11. package/dist/{assets/AppReviewAso-Dvh6A_g-.js → app/assets/AppReviewAso-BUTGLatx.js} +2 -2
  12. package/dist/{assets/AppReviewAso-Dvh6A_g-.js.map → app/assets/AppReviewAso-BUTGLatx.js.map} +1 -1
  13. package/dist/app/assets/{Cancelled-D6i4ywc8.js → Cancelled-BeS-WlPj.js} +2 -2
  14. package/dist/app/assets/{Cancelled-D6i4ywc8.js.map → Cancelled-BeS-WlPj.js.map} +1 -1
  15. package/dist/app/assets/{CopyButton-BlPQEoP3.js → CopyButton-BZQEBHBq.js} +2 -2
  16. package/dist/app/assets/{CopyButton-BlPQEoP3.js.map → CopyButton-BZQEBHBq.js.map} +1 -1
  17. package/dist/{assets/FastlaneScreenshots-DF74cNwo.js → app/assets/FastlaneScreenshots-Dn7jfpuz.js} +2 -2
  18. package/dist/{assets/FastlaneScreenshots-DF74cNwo.js.map → app/assets/FastlaneScreenshots-Dn7jfpuz.js.map} +1 -1
  19. package/dist/{assets/FirstExport-BMHdPGDX.js → app/assets/FirstExport-CzioMqbJ.js} +2 -2
  20. package/dist/app/assets/{FirstExport-BMHdPGDX.js.map → FirstExport-CzioMqbJ.js.map} +1 -1
  21. package/dist/app/assets/{FitPanel-Fp4iPZxf.js → FitPanel-DzYzTMEi.js} +2 -2
  22. package/dist/app/assets/{FitPanel-Fp4iPZxf.js.map → FitPanel-DzYzTMEi.js.map} +1 -1
  23. package/dist/app/assets/{FivePanelFramework-B967Cblg.js → FivePanelFramework-Bt5-NjCV.js} +2 -2
  24. package/dist/app/assets/{FivePanelFramework-B967Cblg.js.map → FivePanelFramework-Bt5-NjCV.js.map} +1 -1
  25. package/dist/app/assets/{ForgotPassword-CApAdwy1.js → ForgotPassword-DuHNHuUe.js} +2 -2
  26. package/dist/{assets/ForgotPassword-CApAdwy1.js.map → app/assets/ForgotPassword-DuHNHuUe.js.map} +1 -1
  27. package/dist/{assets/Landing-Vxx4PfE4.js → app/assets/Landing-DB9pTPoT.js} +2 -2
  28. package/dist/{assets/Landing-Vxx4PfE4.js.map → app/assets/Landing-DB9pTPoT.js.map} +1 -1
  29. package/dist/app/assets/{LanguageSwitcher-Cp-6zMXz.js → LanguageSwitcher-CfUhVVuT.js} +2 -2
  30. package/dist/{assets/LanguageSwitcher-Cp-6zMXz.js.map → app/assets/LanguageSwitcher-CfUhVVuT.js.map} +1 -1
  31. package/dist/app/assets/{Legal-CGgUYM9f.js → Legal-p-YIX5Jv.js} +2 -2
  32. package/dist/app/assets/{Legal-CGgUYM9f.js.map → Legal-p-YIX5Jv.js.map} +1 -1
  33. package/dist/app/assets/{NotFound-DCeMrR7Q.js → NotFound-XohZYy7w.js} +2 -2
  34. package/dist/app/assets/{NotFound-DCeMrR7Q.js.map → NotFound-XohZYy7w.js.map} +1 -1
  35. package/dist/{assets/Pricing-CGZnCST5.js → app/assets/Pricing-CxCutpT0.js} +2 -2
  36. package/dist/app/assets/{Pricing-CGZnCST5.js.map → Pricing-CxCutpT0.js.map} +1 -1
  37. package/dist/app/assets/{Privacy-D86um9Ox.js → Privacy-D8m3h6P-.js} +2 -2
  38. package/dist/app/assets/{Privacy-D86um9Ox.js.map → Privacy-D8m3h6P-.js.map} +1 -1
  39. package/dist/app/assets/{SignIn-J1V55TpG.js → SignIn-CINUig91.js} +2 -2
  40. package/dist/app/assets/{SignIn-J1V55TpG.js.map → SignIn-CINUig91.js.map} +1 -1
  41. package/dist/app/assets/{SignUp-D6y9FaIp.js → SignUp-B1H6dQgE.js} +2 -2
  42. package/dist/app/assets/{SignUp-D6y9FaIp.js.map → SignUp-B1H6dQgE.js.map} +1 -1
  43. package/dist/app/assets/{SiteHeader-Ch5fAKkA.js → SiteHeader-BGQW06JF.js} +2 -2
  44. package/dist/app/assets/{SiteHeader-Ch5fAKkA.js.map → SiteHeader-BGQW06JF.js.map} +1 -1
  45. package/dist/app/assets/{StickyMobileCta-BdjmxjZ4.js → StickyMobileCta-C41cW-Ji.js} +2 -2
  46. package/dist/app/assets/{StickyMobileCta-BdjmxjZ4.js.map → StickyMobileCta-C41cW-Ji.js.map} +1 -1
  47. package/dist/{assets/StoreAssetsPipeline-Cl-3GPfw.js → app/assets/StoreAssetsPipeline-bUVDqZAU.js} +2 -2
  48. package/dist/{assets/StoreAssetsPipeline-Cl-3GPfw.js.map → app/assets/StoreAssetsPipeline-bUVDqZAU.js.map} +1 -1
  49. package/dist/app/assets/{Success-BtaUzpPJ.js → Success-CMpdlLi2.js} +2 -2
  50. package/dist/app/assets/{Success-BtaUzpPJ.js.map → Success-CMpdlLi2.js.map} +1 -1
  51. package/dist/app/assets/{Terms-D_qNDuwq.js → Terms-C8NcE4sw.js} +2 -2
  52. package/dist/app/assets/{Terms-D_qNDuwq.js.map → Terms-C8NcE4sw.js.map} +1 -1
  53. package/dist/app/assets/{ToolGuardrailsPanel-Dqo_LDWu.js → ToolGuardrailsPanel-DbjLhdX8.js} +2 -2
  54. package/dist/app/assets/{ToolGuardrailsPanel-Dqo_LDWu.js.map → ToolGuardrailsPanel-DbjLhdX8.js.map} +1 -1
  55. package/dist/app/assets/{ToolsIndex-D7Z_LkLt.js → ToolsIndex-BuZSvoBC.js} +2 -2
  56. package/dist/app/assets/{ToolsIndex-D7Z_LkLt.js.map → ToolsIndex-BuZSvoBC.js.map} +1 -1
  57. package/dist/{assets/WorkloadCalculator-6PgA8Qfc.js → app/assets/WorkloadCalculator-CjdG5TVq.js} +2 -2
  58. package/dist/{assets/WorkloadCalculator-6PgA8Qfc.js.map → app/assets/WorkloadCalculator-CjdG5TVq.js.map} +1 -1
  59. package/dist/app/assets/{calculator-BJHViS7f.js → calculator-_D64kDDH.js} +2 -2
  60. package/dist/app/assets/{calculator-BJHViS7f.js.map → calculator-_D64kDDH.js.map} +1 -1
  61. package/dist/app/assets/check-BaiZ7vYg.js +2 -0
  62. package/dist/app/assets/{check-IxdpNvaC.js.map → check-BaiZ7vYg.js.map} +1 -1
  63. package/dist/app/assets/chevron-down-DVRa-y8D.js +2 -0
  64. package/dist/app/assets/{chevron-down-DFKVs9n4.js.map → chevron-down-DVRa-y8D.js.map} +1 -1
  65. package/dist/app/assets/{circle-check-DA-NWInD.js → circle-check-reAyVfkP.js} +2 -2
  66. package/dist/app/assets/{circle-check-DA-NWInD.js.map → circle-check-reAyVfkP.js.map} +1 -1
  67. package/dist/app/assets/{clipboard-copy-B2p9wr40.js → clipboard-copy-BfB1mutp.js} +2 -2
  68. package/dist/app/assets/{clipboard-copy-B2p9wr40.js.map → clipboard-copy-BfB1mutp.js.map} +1 -1
  69. package/dist/app/assets/{copy-BnUx1vxq.js → copy-B9y2mtjd.js} +2 -2
  70. package/dist/app/assets/{copy-BnUx1vxq.js.map → copy-B9y2mtjd.js.map} +1 -1
  71. package/dist/app/assets/{crop-BLAB1KK_.js → crop-2_j5MtOq.js} +2 -2
  72. package/dist/app/assets/{crop-BLAB1KK_.js.map → crop-2_j5MtOq.js.map} +1 -1
  73. package/dist/app/assets/{download-DNjju5h9.js → download-CqEtEEpe.js} +2 -2
  74. package/dist/app/assets/{download-DNjju5h9.js.map → download-CqEtEEpe.js.map} +1 -1
  75. package/dist/app/assets/{eye-DkJdJAvt.js → eye-B1LPDhW7.js} +2 -2
  76. package/dist/app/assets/{eye-DkJdJAvt.js.map → eye-B1LPDhW7.js.map} +1 -1
  77. package/dist/app/assets/{folder-tree-zQOd55nP.js → folder-tree-CnF1eSpg.js} +2 -2
  78. package/dist/app/assets/{folder-tree-zQOd55nP.js.map → folder-tree-CnF1eSpg.js.map} +1 -1
  79. package/dist/app/assets/{grid-3x3-BCPiZxWL.js → grid-3x3-BB0TBwXQ.js} +2 -2
  80. package/dist/{assets/grid-3x3-BCPiZxWL.js.map → app/assets/grid-3x3-BB0TBwXQ.js.map} +1 -1
  81. package/dist/app/assets/{index-C4xM6WAU.js → index-Bffw9flM.js} +8 -8
  82. package/dist/app/assets/index-Bffw9flM.js.map +1 -0
  83. package/dist/app/assets/{layout-grid-DvMRLTBT.js → layout-grid-DbSzm5KY.js} +2 -2
  84. package/dist/app/assets/{layout-grid-DvMRLTBT.js.map → layout-grid-DbSzm5KY.js.map} +1 -1
  85. package/dist/app/assets/{rocket-fjJ-qzsl.js → rocket-d1Ntm8ge.js} +2 -2
  86. package/dist/app/assets/{rocket-fjJ-qzsl.js.map → rocket-d1Ntm8ge.js.map} +1 -1
  87. package/dist/app/assets/{shield-check-C-qC9fhU.js → shield-check-DXqKmrPT.js} +2 -2
  88. package/dist/{assets/shield-check-C-qC9fhU.js.map → app/assets/shield-check-DXqKmrPT.js.map} +1 -1
  89. package/dist/app/assets/{signIn-CYNXaR1Y.js → signIn-D-eCUhFT.js} +2 -2
  90. package/dist/{assets/signIn-CYNXaR1Y.js.map → app/assets/signIn-D-eCUhFT.js.map} +1 -1
  91. package/dist/app/assets/{smartphone-DRYkbHrn.js → smartphone-Cjrk_YxV.js} +2 -2
  92. package/dist/app/assets/{smartphone-DRYkbHrn.js.map → smartphone-Cjrk_YxV.js.map} +1 -1
  93. package/dist/app/assets/{terminal-CY2dKmaU.js → terminal-CT_KE008.js} +2 -2
  94. package/dist/{assets/terminal-CY2dKmaU.js.map → app/assets/terminal-CT_KE008.js.map} +1 -1
  95. package/dist/{assets/useAuth-D_UWt-CP.js → app/assets/useAuth-ctmUbyCR.js} +2 -2
  96. package/dist/app/assets/{useAuth-D_UWt-CP.js.map → useAuth-ctmUbyCR.js.map} +1 -1
  97. package/dist/app/index.html +5 -1
  98. package/dist/assets/{AgentCli-CJHTv5S4.js → AgentCli-DNTDYBbk.js} +2 -2
  99. package/dist/{app/assets/AgentCli-CJHTv5S4.js.map → assets/AgentCli-DNTDYBbk.js.map} +1 -1
  100. package/dist/assets/{App-DV5XHwn8.js → App-DPi9LW-y.js} +2 -2
  101. package/dist/{app/assets/App-DV5XHwn8.js.map → assets/App-DPi9LW-y.js.map} +1 -1
  102. package/dist/{app/assets/AppReviewAso-Dvh6A_g-.js → assets/AppReviewAso-BUTGLatx.js} +2 -2
  103. package/dist/{app/assets/AppReviewAso-Dvh6A_g-.js.map → assets/AppReviewAso-BUTGLatx.js.map} +1 -1
  104. package/dist/assets/{Cancelled-D6i4ywc8.js → Cancelled-BeS-WlPj.js} +2 -2
  105. package/dist/assets/{Cancelled-D6i4ywc8.js.map → Cancelled-BeS-WlPj.js.map} +1 -1
  106. package/dist/assets/{CopyButton-BlPQEoP3.js → CopyButton-BZQEBHBq.js} +2 -2
  107. package/dist/assets/{CopyButton-BlPQEoP3.js.map → CopyButton-BZQEBHBq.js.map} +1 -1
  108. package/dist/{app/assets/FastlaneScreenshots-DF74cNwo.js → assets/FastlaneScreenshots-Dn7jfpuz.js} +2 -2
  109. package/dist/{app/assets/FastlaneScreenshots-DF74cNwo.js.map → assets/FastlaneScreenshots-Dn7jfpuz.js.map} +1 -1
  110. package/dist/{app/assets/FirstExport-BMHdPGDX.js → assets/FirstExport-CzioMqbJ.js} +2 -2
  111. package/dist/assets/{FirstExport-BMHdPGDX.js.map → FirstExport-CzioMqbJ.js.map} +1 -1
  112. package/dist/assets/{FitPanel-Fp4iPZxf.js → FitPanel-DzYzTMEi.js} +2 -2
  113. package/dist/assets/{FitPanel-Fp4iPZxf.js.map → FitPanel-DzYzTMEi.js.map} +1 -1
  114. package/dist/assets/{FivePanelFramework-B967Cblg.js → FivePanelFramework-Bt5-NjCV.js} +2 -2
  115. package/dist/assets/{FivePanelFramework-B967Cblg.js.map → FivePanelFramework-Bt5-NjCV.js.map} +1 -1
  116. package/dist/assets/{ForgotPassword-CApAdwy1.js → ForgotPassword-DuHNHuUe.js} +2 -2
  117. package/dist/{app/assets/ForgotPassword-CApAdwy1.js.map → assets/ForgotPassword-DuHNHuUe.js.map} +1 -1
  118. package/dist/{app/assets/Landing-Vxx4PfE4.js → assets/Landing-DB9pTPoT.js} +2 -2
  119. package/dist/{app/assets/Landing-Vxx4PfE4.js.map → assets/Landing-DB9pTPoT.js.map} +1 -1
  120. package/dist/assets/{LanguageSwitcher-Cp-6zMXz.js → LanguageSwitcher-CfUhVVuT.js} +2 -2
  121. package/dist/{app/assets/LanguageSwitcher-Cp-6zMXz.js.map → assets/LanguageSwitcher-CfUhVVuT.js.map} +1 -1
  122. package/dist/assets/{Legal-CGgUYM9f.js → Legal-p-YIX5Jv.js} +2 -2
  123. package/dist/assets/{Legal-CGgUYM9f.js.map → Legal-p-YIX5Jv.js.map} +1 -1
  124. package/dist/assets/{NotFound-DCeMrR7Q.js → NotFound-XohZYy7w.js} +2 -2
  125. package/dist/assets/{NotFound-DCeMrR7Q.js.map → NotFound-XohZYy7w.js.map} +1 -1
  126. package/dist/{app/assets/Pricing-CGZnCST5.js → assets/Pricing-CxCutpT0.js} +2 -2
  127. package/dist/assets/{Pricing-CGZnCST5.js.map → Pricing-CxCutpT0.js.map} +1 -1
  128. package/dist/assets/{Privacy-D86um9Ox.js → Privacy-D8m3h6P-.js} +2 -2
  129. package/dist/assets/{Privacy-D86um9Ox.js.map → Privacy-D8m3h6P-.js.map} +1 -1
  130. package/dist/assets/{SignIn-J1V55TpG.js → SignIn-CINUig91.js} +2 -2
  131. package/dist/assets/{SignIn-J1V55TpG.js.map → SignIn-CINUig91.js.map} +1 -1
  132. package/dist/assets/{SignUp-D6y9FaIp.js → SignUp-B1H6dQgE.js} +2 -2
  133. package/dist/assets/{SignUp-D6y9FaIp.js.map → SignUp-B1H6dQgE.js.map} +1 -1
  134. package/dist/assets/{SiteHeader-Ch5fAKkA.js → SiteHeader-BGQW06JF.js} +2 -2
  135. package/dist/assets/{SiteHeader-Ch5fAKkA.js.map → SiteHeader-BGQW06JF.js.map} +1 -1
  136. package/dist/assets/{StickyMobileCta-BdjmxjZ4.js → StickyMobileCta-C41cW-Ji.js} +2 -2
  137. package/dist/assets/{StickyMobileCta-BdjmxjZ4.js.map → StickyMobileCta-C41cW-Ji.js.map} +1 -1
  138. package/dist/{app/assets/StoreAssetsPipeline-Cl-3GPfw.js → assets/StoreAssetsPipeline-bUVDqZAU.js} +2 -2
  139. package/dist/{app/assets/StoreAssetsPipeline-Cl-3GPfw.js.map → assets/StoreAssetsPipeline-bUVDqZAU.js.map} +1 -1
  140. package/dist/assets/{Success-BtaUzpPJ.js → Success-CMpdlLi2.js} +2 -2
  141. package/dist/assets/{Success-BtaUzpPJ.js.map → Success-CMpdlLi2.js.map} +1 -1
  142. package/dist/assets/{Terms-D_qNDuwq.js → Terms-C8NcE4sw.js} +2 -2
  143. package/dist/assets/{Terms-D_qNDuwq.js.map → Terms-C8NcE4sw.js.map} +1 -1
  144. package/dist/assets/{ToolGuardrailsPanel-Dqo_LDWu.js → ToolGuardrailsPanel-DbjLhdX8.js} +2 -2
  145. package/dist/assets/{ToolGuardrailsPanel-Dqo_LDWu.js.map → ToolGuardrailsPanel-DbjLhdX8.js.map} +1 -1
  146. package/dist/assets/{ToolsIndex-D7Z_LkLt.js → ToolsIndex-BuZSvoBC.js} +2 -2
  147. package/dist/assets/{ToolsIndex-D7Z_LkLt.js.map → ToolsIndex-BuZSvoBC.js.map} +1 -1
  148. package/dist/{app/assets/WorkloadCalculator-6PgA8Qfc.js → assets/WorkloadCalculator-CjdG5TVq.js} +2 -2
  149. package/dist/{app/assets/WorkloadCalculator-6PgA8Qfc.js.map → assets/WorkloadCalculator-CjdG5TVq.js.map} +1 -1
  150. package/dist/assets/{calculator-BJHViS7f.js → calculator-_D64kDDH.js} +2 -2
  151. package/dist/assets/{calculator-BJHViS7f.js.map → calculator-_D64kDDH.js.map} +1 -1
  152. package/dist/assets/check-BaiZ7vYg.js +2 -0
  153. package/dist/assets/{check-IxdpNvaC.js.map → check-BaiZ7vYg.js.map} +1 -1
  154. package/dist/assets/chevron-down-DVRa-y8D.js +2 -0
  155. package/dist/assets/{chevron-down-DFKVs9n4.js.map → chevron-down-DVRa-y8D.js.map} +1 -1
  156. package/dist/assets/{circle-check-DA-NWInD.js → circle-check-reAyVfkP.js} +2 -2
  157. package/dist/assets/{circle-check-DA-NWInD.js.map → circle-check-reAyVfkP.js.map} +1 -1
  158. package/dist/assets/{clipboard-copy-B2p9wr40.js → clipboard-copy-BfB1mutp.js} +2 -2
  159. package/dist/assets/{clipboard-copy-B2p9wr40.js.map → clipboard-copy-BfB1mutp.js.map} +1 -1
  160. package/dist/assets/{copy-BnUx1vxq.js → copy-B9y2mtjd.js} +2 -2
  161. package/dist/assets/{copy-BnUx1vxq.js.map → copy-B9y2mtjd.js.map} +1 -1
  162. package/dist/assets/{crop-BLAB1KK_.js → crop-2_j5MtOq.js} +2 -2
  163. package/dist/assets/{crop-BLAB1KK_.js.map → crop-2_j5MtOq.js.map} +1 -1
  164. package/dist/assets/{download-DNjju5h9.js → download-CqEtEEpe.js} +2 -2
  165. package/dist/assets/{download-DNjju5h9.js.map → download-CqEtEEpe.js.map} +1 -1
  166. package/dist/assets/{eye-DkJdJAvt.js → eye-B1LPDhW7.js} +2 -2
  167. package/dist/assets/{eye-DkJdJAvt.js.map → eye-B1LPDhW7.js.map} +1 -1
  168. package/dist/assets/{folder-tree-zQOd55nP.js → folder-tree-CnF1eSpg.js} +2 -2
  169. package/dist/assets/{folder-tree-zQOd55nP.js.map → folder-tree-CnF1eSpg.js.map} +1 -1
  170. package/dist/assets/{grid-3x3-BCPiZxWL.js → grid-3x3-BB0TBwXQ.js} +2 -2
  171. package/dist/{app/assets/grid-3x3-BCPiZxWL.js.map → assets/grid-3x3-BB0TBwXQ.js.map} +1 -1
  172. package/dist/assets/{index-C4xM6WAU.js → index-Bffw9flM.js} +8 -8
  173. package/dist/assets/index-Bffw9flM.js.map +1 -0
  174. package/dist/assets/{layout-grid-DvMRLTBT.js → layout-grid-DbSzm5KY.js} +2 -2
  175. package/dist/assets/{layout-grid-DvMRLTBT.js.map → layout-grid-DbSzm5KY.js.map} +1 -1
  176. package/dist/assets/{rocket-fjJ-qzsl.js → rocket-d1Ntm8ge.js} +2 -2
  177. package/dist/assets/{rocket-fjJ-qzsl.js.map → rocket-d1Ntm8ge.js.map} +1 -1
  178. package/dist/assets/{shield-check-C-qC9fhU.js → shield-check-DXqKmrPT.js} +2 -2
  179. package/dist/{app/assets/shield-check-C-qC9fhU.js.map → assets/shield-check-DXqKmrPT.js.map} +1 -1
  180. package/dist/assets/{signIn-CYNXaR1Y.js → signIn-D-eCUhFT.js} +2 -2
  181. package/dist/{app/assets/signIn-CYNXaR1Y.js.map → assets/signIn-D-eCUhFT.js.map} +1 -1
  182. package/dist/assets/{smartphone-DRYkbHrn.js → smartphone-Cjrk_YxV.js} +2 -2
  183. package/dist/assets/{smartphone-DRYkbHrn.js.map → smartphone-Cjrk_YxV.js.map} +1 -1
  184. package/dist/assets/{terminal-CY2dKmaU.js → terminal-CT_KE008.js} +2 -2
  185. package/dist/{app/assets/terminal-CY2dKmaU.js.map → assets/terminal-CT_KE008.js.map} +1 -1
  186. package/dist/{app/assets/useAuth-D_UWt-CP.js → assets/useAuth-ctmUbyCR.js} +2 -2
  187. package/dist/assets/{useAuth-D_UWt-CP.js.map → useAuth-ctmUbyCR.js.map} +1 -1
  188. package/dist/cancelled/index.html +5 -1
  189. package/dist/forgot-password/index.html +5 -1
  190. package/dist/index.html +5 -1
  191. package/dist/legal/index.html +5 -1
  192. package/dist/llms-full.txt +44 -0
  193. package/dist/llms.txt +22 -0
  194. package/dist/mcp-server.json +40 -0
  195. package/dist/pricing/index.html +5 -1
  196. package/dist/privacy/index.html +5 -1
  197. package/dist/robots.txt +6 -0
  198. package/dist/signin/index.html +5 -1
  199. package/dist/signup/index.html +5 -1
  200. package/dist/sitemap.xml +28 -0
  201. package/dist/success/index.html +5 -1
  202. package/dist/terms/index.html +5 -1
  203. package/dist/tools/5-panel-screenshot-framework/index.html +5 -1
  204. package/dist/tools/agent-cli/index.html +13 -7
  205. package/dist/tools/app-review-aso/index.html +5 -1
  206. package/dist/tools/fastlane-screenshots/index.html +5 -1
  207. package/dist/tools/first-export/index.html +5 -1
  208. package/dist/tools/index.html +5 -1
  209. package/dist/tools/screenshot-workload-calculator/index.html +5 -1
  210. package/dist/tools/store-assets-pipeline/index.html +5 -1
  211. package/package.json +2 -2
  212. package/dist/app/assets/check-IxdpNvaC.js +0 -2
  213. package/dist/app/assets/chevron-down-DFKVs9n4.js +0 -2
  214. package/dist/app/assets/index-C4xM6WAU.js.map +0 -1
  215. package/dist/assets/check-IxdpNvaC.js +0 -2
  216. package/dist/assets/chevron-down-DFKVs9n4.js +0 -2
  217. package/dist/assets/index-C4xM6WAU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FivePanelFramework-B967Cblg.js","sources":["../../src/pages/FivePanelFramework.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from 'react';\nimport { ArrowRight, ChevronDown, Copy, Download, LayoutGrid } 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 { useToast } from '../context/ToastContext';\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 buildMarkdown = (lang) => {\n if (lang === 'ja') {\n return `# 5枚構成 スクショフレームワーク\n\nApp Store / Google Play のスクショを「5枚で伝える」ための構成テンプレです。\n\n## 1) Hook(結論)\n- 何が変わるか(成果)を1行で\n- 例: スクショをビルドステップに / 再実行で毎リリース\n\n## 2) Problem(痛み)\n- いま起きている苦痛を具体化(数字が強い)\n- 例: 5枚×10言語×4サイズ = 200枚\n\n## 3) Proof(根拠)\n- 信用・再現性の材料(仕様・実績・数字)\n- 例: Fastlane公式パス(dir/ZIP) / 再現性のある出力\n\n## 4) How(やり方)\n- どうやって実現するか(フローを短く)\n- 例: master layout → CSV/JSON copy → Export\n\n## 5) CTA(次の一手)\n- 読んだ後に何をすればいいかを1つに絞る\n- 例: 無料で試す / サンプルから開始\n\n## メモ\n- 翻訳は外部でOK(ShipScreensは翻訳しない)\n- UIは大きく(~80%目安)\n- キャプションは短く(6-8語目安)\n- 確認: 見出しが他の多くのアプリにも当てはまるなら、成果を具体化して書き直す\n`;\n }\n\n return `# 5-panel screenshot framework\n\nA simple structure to explain your app in five store screenshots.\n\n## 1) Hook (Outcome)\n- Say the result in one line\n- Example: Screenshots as a build step / Rerun exports every release\n\n## 2) Problem (Pain)\n- Make the pain concrete (numbers work)\n- Example: 5 shots × 10 locales × 4 sizes = 200 images\n\n## 3) Proof (Credibility)\n- Give confidence (specs, numbers, workflow fit)\n- Example: Fastlane-ready output (folders/ZIP) / Reproducible reruns\n\n## 4) How (Workflow)\n- Show the shortest path in steps\n- Example: Master layout → CSV/JSON copy → export\n\n## 5) CTA (Next step)\n- One clear action\n- Example: Try it free / Start from a sample project\n\n## Notes\n- Bring your translations; ShipScreens does not translate.\n- Keep UI big (~80% of the frame).\n- Keep captions short (<= 6-8 words).\n- Clarity check: if the headline could fit many apps, make the outcome more concrete.\n`;\n};\n\nconst COPY = {\n en: {\n badge: 'Screenshot structure template',\n title: '5-panel Screenshot Framework',\n subtitle:\n 'Use this structure even if you already have design tools: Hook -> Problem -> Proof -> How -> CTA keeps App Store / Google Play screenshots consistent across sizes/locales and release reruns without forcing a generic visual style.',\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 navTools: 'Tools',\n introTitle: 'Use this when…',\n introBullets: [\n 'Manual Figma/Canva edits (or AI drafts) keep drifting across sizes/locales',\n 'App Review/ASO feedback says the first screenshot is unclear',\n 'Screenshots look generic because the message is vague, not because your style is wrong',\n 'Localization makes copy decisions expensive',\n 'You want a rerunnable flow (sample → edit → export)',\n ],\n hookRule:\n 'Clarity check: if your Hook could fit many apps, it is too broad. Make one concrete outcome explicit.',\n hookExamplesTitle: 'Hook examples (vague vs concrete)',\n hookExamplesBadLabel: 'Vague',\n hookExamplesGoodLabel: 'Concrete',\n hookExamples: [\n {\n bad: 'Learn everything about finance',\n good: 'Build a weekly budget and track spending in 10 minutes',\n },\n {\n bad: 'A smarter productivity app',\n good: 'Plan your day in 3 tasks and finish by 6pm',\n },\n ],\n panelsTitle: 'The 5 panels',\n panelCards: [\n {\n name: 'Hook',\n goal: 'Say the outcome in one line.',\n header: 'Header: concrete outcome',\n subtitle: 'Subtitle: for who / how fast',\n example: 'Example: Ship screenshot updates in one CI rerun',\n },\n {\n name: 'Problem',\n goal: 'Make the pain concrete (numbers help).',\n header: 'Header: what is painful',\n subtitle: 'Subtitle: why it costs time',\n example: 'Example: 5×10×4 = 200 images',\n },\n {\n name: 'Proof',\n goal: 'Add credibility and reduce doubt.',\n header: 'Header: why trust this',\n subtitle: 'Subtitle: spec / workflow fit',\n example: 'Example: Fastlane-ready output',\n },\n {\n name: 'How',\n goal: 'Show the shortest reproducible workflow.',\n header: 'Header: the steps',\n subtitle: 'Subtitle: what you need',\n example: 'Example: Master layout → CSV → Export',\n },\n {\n name: 'CTA',\n goal: 'One clear next action.',\n header: 'Header: try / start',\n subtitle: 'Subtitle: what happens next',\n example: 'Example: Try it free',\n },\n ],\n toolsTitle: 'Assets',\n calculatorLink: 'Screenshot Workload Calculator',\n calculatorCaption: 'Quantify the device × locale explosion and pick size buckets.',\n sampleTitle: 'Sample project',\n sampleCaption: 'Open a pre-filled 5-panel project in ShipScreens and replace the screenshots.',\n openSample: 'Open sample project',\n downloadTitle: 'Download',\n downloadCaption: 'Save the framework as Markdown (easy to share with teammates).',\n copyButton: 'Copy Markdown',\n downloadButton: 'Download Markdown',\n toastCopied: 'Copied to clipboard',\n toastCopyFailed: 'Copy failed. Please use Download.',\n ctaPrimary: 'Start for Free',\n footerText: 'Want feedback on your store assets pipeline and screenshot positioning? We are talking to early users.',\n footerCta: 'DM @shipscreenscom on X',\n },\n ja: {\n badge: '構成テンプレ(5枚)',\n title: '5枚構成 スクショフレームワーク',\n subtitle: '既存ツールがあっても、Hook -> Problem -> Proof -> How -> CTA でサイズ/言語/リリース再実行のブレを抑える5枚構成テンプレ。見た目を画一化するためではなく、訴求順を固定するための型です。',\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 navTools: 'ツール',\n introTitle: 'こんな時に使う',\n introBullets: [\n '手作業/AI下書きがサイズ/言語でズレる',\n 'App Review/ASO で「最初のスクショが伝わらない」と言われたとき',\n '見た目ではなく訴求の曖昧さで「よくある画面」に見えてしまう',\n '多言語対応でコピーが長くなりがち',\n '再実行できる流れ(サンプル→編集→Export)が欲しい',\n ],\n hookRule: '確認: Hookが他の多くのアプリにも当てはまるなら、成果を具体化してください。',\n hookExamplesTitle: 'Hook例(曖昧 vs 具体)',\n hookExamplesBadLabel: '曖昧',\n hookExamplesGoodLabel: '具体',\n hookExamples: [\n {\n bad: 'お金のことを全部学べる',\n good: '10分で週次予算を作って、支出を自動で把握する',\n },\n {\n bad: 'もっと賢い生産性アプリ',\n good: '毎日の3タスクを整理して、18時までに終わらせる',\n },\n ],\n panelsTitle: '5枚の役割',\n panelCards: [\n { name: 'Hook', goal: '結論(成果)を1行で。', header: 'ヘッダー: 具体的な成果', subtitle: 'サブ: 誰に/どれくらい', example: '例: スクショ更新をCIの1回再実行で完了' },\n { name: 'Problem', goal: '痛みを具体化(数字が強い)。', header: 'ヘッダー: 何がつらい', subtitle: 'サブ: なぜ時間が溶ける', example: '例: 5×10×4 = 200枚' },\n { name: 'Proof', goal: '不安を減らす材料。', header: 'ヘッダー: 根拠', subtitle: 'サブ: 仕様/ワークフロー適合', example: '例: Fastlane対応出力' },\n { name: 'How', goal: '短いフローで再現性を。', header: 'ヘッダー: 手順', subtitle: 'サブ: 必要なもの', example: '例: master→CSV→Export' },\n { name: 'CTA', goal: '次の一手を1つに。', header: 'ヘッダー: 試す/開始', subtitle: 'サブ: 次に起きること', example: '例: 無料で試す' },\n ],\n toolsTitle: '資産',\n calculatorLink: 'スクショ作業量 計算ツール',\n calculatorCaption: '端末×言語の爆発とサイズバケットを先に把握。',\n sampleTitle: 'サンプルプロジェクト',\n sampleCaption: '5枚構成の雛形を開いて、画像だけ差し替えてください。',\n openSample: 'サンプルを開く',\n downloadTitle: 'ダウンロード',\n downloadCaption: 'Markdownとして保存(チーム共有しやすい)。',\n copyButton: 'Markdownをコピー',\n downloadButton: 'MarkdownをDL',\n toastCopied: 'コピーしました',\n toastCopyFailed: 'コピーできませんでした。ダウンロードをご利用ください。',\n ctaPrimary: '無料で試す',\n footerText: 'ストア素材パイプラインや訴求の相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。',\n footerCta: 'XでDM: @shipscreenscom',\n },\n};\n\nconst FivePanelFramework = () => {\n const { i18n, t } = useTranslation();\n const { addToast } = useToast();\n\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n usePageTitle('titles.fivePanelFramework', {\n defaultValue: lang === 'ja' ? '5枚構成テンプレ - ShipScreens' : '5-panel Screenshot Framework - ShipScreens',\n });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'five_panel_screenshot_framework' });\n }, []);\n\n const markdown = useMemo(() => buildMarkdown(lang), [lang]);\n const openAppHref = '/app/?sample=5panel&entry_source=five_panel_screenshot_framework_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const firstExportHref = '/tools/first-export/?entry_source=five_panel_screenshot_framework_primary_cta';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=five_panel_screenshot_framework_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 downloadMarkdown = useCallback(() => {\n try {\n const content = `\\ufeff${markdown}`;\n const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = lang === 'ja' ? 'shipscreens-5panel-framework-ja.md' : 'shipscreens-5panel-framework.md';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown' });\n } catch {\n // noop\n }\n }, [lang, markdown]);\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: 'five_panel_screenshot_framework', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', 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', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_first_export_header',\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-12\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <LayoutGrid 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=\"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={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_hero' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\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 || copyButtonLabel}\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: 'five_panel_screenshot_framework', 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: 'five_panel_screenshot_framework', 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', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight',\n })\n }\n proUnlockTitle={copy.proUnlockTitle}\n proUnlockBody={copy.proUnlockBody}\n proUnlockCmd={copy.proUnlockCmd}\n proUnlockNote={copy.proUnlockNote}\n onProUnlockCopied={() =>\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_pro_unlock' })\n }\n />\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight_card',\n })\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=\"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.introTitle}</h2>\n <ul className=\"text-sm text-slate-300 list-disc pl-5 space-y-1\">\n {copy.introBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n {copy.hookRule && <p className=\"text-xs text-amber-300\">{copy.hookRule}</p>}\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.hookExamplesTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.hookExamples.map((item) => (\n <div key={`${item.bad}-${item.good}`} className=\"rounded-2xl border border-slate-800 bg-slate-950 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.hookExamplesBadLabel}\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.hookExamplesGoodLabel}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.panelsTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.panelCards.map((panel, idx) => (\n <div key={panel.name} className=\"rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-bold text-slate-100\">\n {idx + 1}. {panel.name}\n </div>\n <div className=\"text-xs text-slate-500\">Panel</div>\n </div>\n <div className=\"text-sm text-slate-300\">{panel.goal}</div>\n <div className=\"pt-2 space-y-1 text-xs text-slate-400\">\n <div>{panel.header}</div>\n <div>{panel.subtitle}</div>\n <div className=\"text-slate-200 font-semibold\">{panel.example}</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.toolsTitle}</h2>\n <div className=\"space-y-2\">\n <a\n href=\"/tools/screenshot-workload-calculator/\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'open_calculator' })}\n className=\"text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4 font-semibold\"\n >\n {copy.calculatorLink}\n </a>\n <div className=\"text-sm text-slate-300\">{copy.calculatorCaption}</div>\n </div>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.downloadTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.downloadCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={markdown}\n onCopied={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown_clipboard' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n aria-label={copy.copyButton}\n >\n <Copy size={16} />\n {copy.copyButton}\n </CopyButton>\n <button\n type=\"button\"\n onClick={downloadMarkdown}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadButton}\n </button>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.sampleTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.sampleCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_first_export_footer',\n })\n }\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\"\n >\n {t('landing.nav.primaryCta')} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_sample_project_footer',\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full\"\n >\n {copy.openSample} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto text-center space-y-3 pt-2\">\n <p className=\"text-sm text-slate-400\">{copy.footerText}</p>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'dm_x' })}\n className=\"text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4\"\n >\n {copy.footerCta}\n </a>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.ctaPrimary,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_primary',\n }),\n }}\n secondary={{\n label: copy.openSample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_secondary',\n }),\n }}\n />\n </div>\n );\n};\n\nexport default FivePanelFramework;\n"],"names":["normalizeLang","lang","buildMarkdown","COPY","FivePanelFramework","i18n","t","useTranslation","addToast","useToast","copy","usePageTitle","useEffect","trackEvent","markdown","useMemo","openAppHref","agentCliHref","firstExportHref","sampleProjectHref","configDownloadHref","csvDownloadHref","copyButtonLabel","codeToggleLabel","defaultCodeOpen","downloadMarkdown","useCallback","content","blob","url","link","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","LayoutGrid","CopyButton","copyLabel","copyState","Fragment","Copy","ChevronDown","ToolGuardrailsPanel","CliPreflightCard","FitPanel","item","panel","idx","Download","StickyMobileCta"],"mappings":"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"}
1
+ {"version":3,"file":"FivePanelFramework-Bt5-NjCV.js","sources":["../../src/pages/FivePanelFramework.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from 'react';\nimport { ArrowRight, ChevronDown, Copy, Download, LayoutGrid } 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 { useToast } from '../context/ToastContext';\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 buildMarkdown = (lang) => {\n if (lang === 'ja') {\n return `# 5枚構成 スクショフレームワーク\n\nApp Store / Google Play のスクショを「5枚で伝える」ための構成テンプレです。\n\n## 1) Hook(結論)\n- 何が変わるか(成果)を1行で\n- 例: スクショをビルドステップに / 再実行で毎リリース\n\n## 2) Problem(痛み)\n- いま起きている苦痛を具体化(数字が強い)\n- 例: 5枚×10言語×4サイズ = 200枚\n\n## 3) Proof(根拠)\n- 信用・再現性の材料(仕様・実績・数字)\n- 例: Fastlane公式パス(dir/ZIP) / 再現性のある出力\n\n## 4) How(やり方)\n- どうやって実現するか(フローを短く)\n- 例: master layout → CSV/JSON copy → Export\n\n## 5) CTA(次の一手)\n- 読んだ後に何をすればいいかを1つに絞る\n- 例: 無料で試す / サンプルから開始\n\n## メモ\n- 翻訳は外部でOK(ShipScreensは翻訳しない)\n- UIは大きく(~80%目安)\n- キャプションは短く(6-8語目安)\n- 確認: 見出しが他の多くのアプリにも当てはまるなら、成果を具体化して書き直す\n`;\n }\n\n return `# 5-panel screenshot framework\n\nA simple structure to explain your app in five store screenshots.\n\n## 1) Hook (Outcome)\n- Say the result in one line\n- Example: Screenshots as a build step / Rerun exports every release\n\n## 2) Problem (Pain)\n- Make the pain concrete (numbers work)\n- Example: 5 shots × 10 locales × 4 sizes = 200 images\n\n## 3) Proof (Credibility)\n- Give confidence (specs, numbers, workflow fit)\n- Example: Fastlane-ready output (folders/ZIP) / Reproducible reruns\n\n## 4) How (Workflow)\n- Show the shortest path in steps\n- Example: Master layout → CSV/JSON copy → export\n\n## 5) CTA (Next step)\n- One clear action\n- Example: Try it free / Start from a sample project\n\n## Notes\n- Bring your translations; ShipScreens does not translate.\n- Keep UI big (~80% of the frame).\n- Keep captions short (<= 6-8 words).\n- Clarity check: if the headline could fit many apps, make the outcome more concrete.\n`;\n};\n\nconst COPY = {\n en: {\n badge: 'Screenshot structure template',\n title: '5-panel Screenshot Framework',\n subtitle:\n 'Use this structure even if you already have design tools: Hook -> Problem -> Proof -> How -> CTA keeps App Store / Google Play screenshots consistent across sizes/locales and release reruns without forcing a generic visual style.',\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 navTools: 'Tools',\n introTitle: 'Use this when…',\n introBullets: [\n 'Manual Figma/Canva edits (or AI drafts) keep drifting across sizes/locales',\n 'App Review/ASO feedback says the first screenshot is unclear',\n 'Screenshots look generic because the message is vague, not because your style is wrong',\n 'Localization makes copy decisions expensive',\n 'You want a rerunnable flow (sample → edit → export)',\n ],\n hookRule:\n 'Clarity check: if your Hook could fit many apps, it is too broad. Make one concrete outcome explicit.',\n hookExamplesTitle: 'Hook examples (vague vs concrete)',\n hookExamplesBadLabel: 'Vague',\n hookExamplesGoodLabel: 'Concrete',\n hookExamples: [\n {\n bad: 'Learn everything about finance',\n good: 'Build a weekly budget and track spending in 10 minutes',\n },\n {\n bad: 'A smarter productivity app',\n good: 'Plan your day in 3 tasks and finish by 6pm',\n },\n ],\n panelsTitle: 'The 5 panels',\n panelCards: [\n {\n name: 'Hook',\n goal: 'Say the outcome in one line.',\n header: 'Header: concrete outcome',\n subtitle: 'Subtitle: for who / how fast',\n example: 'Example: Ship screenshot updates in one CI rerun',\n },\n {\n name: 'Problem',\n goal: 'Make the pain concrete (numbers help).',\n header: 'Header: what is painful',\n subtitle: 'Subtitle: why it costs time',\n example: 'Example: 5×10×4 = 200 images',\n },\n {\n name: 'Proof',\n goal: 'Add credibility and reduce doubt.',\n header: 'Header: why trust this',\n subtitle: 'Subtitle: spec / workflow fit',\n example: 'Example: Fastlane-ready output',\n },\n {\n name: 'How',\n goal: 'Show the shortest reproducible workflow.',\n header: 'Header: the steps',\n subtitle: 'Subtitle: what you need',\n example: 'Example: Master layout → CSV → Export',\n },\n {\n name: 'CTA',\n goal: 'One clear next action.',\n header: 'Header: try / start',\n subtitle: 'Subtitle: what happens next',\n example: 'Example: Try it free',\n },\n ],\n toolsTitle: 'Assets',\n calculatorLink: 'Screenshot Workload Calculator',\n calculatorCaption: 'Quantify the device × locale explosion and pick size buckets.',\n sampleTitle: 'Sample project',\n sampleCaption: 'Open a pre-filled 5-panel project in ShipScreens and replace the screenshots.',\n openSample: 'Open sample project',\n downloadTitle: 'Download',\n downloadCaption: 'Save the framework as Markdown (easy to share with teammates).',\n copyButton: 'Copy Markdown',\n downloadButton: 'Download Markdown',\n toastCopied: 'Copied to clipboard',\n toastCopyFailed: 'Copy failed. Please use Download.',\n ctaPrimary: 'Start for Free',\n footerText: 'Want feedback on your store assets pipeline and screenshot positioning? We are talking to early users.',\n footerCta: 'DM @shipscreenscom on X',\n },\n ja: {\n badge: '構成テンプレ(5枚)',\n title: '5枚構成 スクショフレームワーク',\n subtitle: '既存ツールがあっても、Hook -> Problem -> Proof -> How -> CTA でサイズ/言語/リリース再実行のブレを抑える5枚構成テンプレ。見た目を画一化するためではなく、訴求順を固定するための型です。',\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 navTools: 'ツール',\n introTitle: 'こんな時に使う',\n introBullets: [\n '手作業/AI下書きがサイズ/言語でズレる',\n 'App Review/ASO で「最初のスクショが伝わらない」と言われたとき',\n '見た目ではなく訴求の曖昧さで「よくある画面」に見えてしまう',\n '多言語対応でコピーが長くなりがち',\n '再実行できる流れ(サンプル→編集→Export)が欲しい',\n ],\n hookRule: '確認: Hookが他の多くのアプリにも当てはまるなら、成果を具体化してください。',\n hookExamplesTitle: 'Hook例(曖昧 vs 具体)',\n hookExamplesBadLabel: '曖昧',\n hookExamplesGoodLabel: '具体',\n hookExamples: [\n {\n bad: 'お金のことを全部学べる',\n good: '10分で週次予算を作って、支出を自動で把握する',\n },\n {\n bad: 'もっと賢い生産性アプリ',\n good: '毎日の3タスクを整理して、18時までに終わらせる',\n },\n ],\n panelsTitle: '5枚の役割',\n panelCards: [\n { name: 'Hook', goal: '結論(成果)を1行で。', header: 'ヘッダー: 具体的な成果', subtitle: 'サブ: 誰に/どれくらい', example: '例: スクショ更新をCIの1回再実行で完了' },\n { name: 'Problem', goal: '痛みを具体化(数字が強い)。', header: 'ヘッダー: 何がつらい', subtitle: 'サブ: なぜ時間が溶ける', example: '例: 5×10×4 = 200枚' },\n { name: 'Proof', goal: '不安を減らす材料。', header: 'ヘッダー: 根拠', subtitle: 'サブ: 仕様/ワークフロー適合', example: '例: Fastlane対応出力' },\n { name: 'How', goal: '短いフローで再現性を。', header: 'ヘッダー: 手順', subtitle: 'サブ: 必要なもの', example: '例: master→CSV→Export' },\n { name: 'CTA', goal: '次の一手を1つに。', header: 'ヘッダー: 試す/開始', subtitle: 'サブ: 次に起きること', example: '例: 無料で試す' },\n ],\n toolsTitle: '資産',\n calculatorLink: 'スクショ作業量 計算ツール',\n calculatorCaption: '端末×言語の爆発とサイズバケットを先に把握。',\n sampleTitle: 'サンプルプロジェクト',\n sampleCaption: '5枚構成の雛形を開いて、画像だけ差し替えてください。',\n openSample: 'サンプルを開く',\n downloadTitle: 'ダウンロード',\n downloadCaption: 'Markdownとして保存(チーム共有しやすい)。',\n copyButton: 'Markdownをコピー',\n downloadButton: 'MarkdownをDL',\n toastCopied: 'コピーしました',\n toastCopyFailed: 'コピーできませんでした。ダウンロードをご利用ください。',\n ctaPrimary: '無料で試す',\n footerText: 'ストア素材パイプラインや訴求の相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。',\n footerCta: 'XでDM: @shipscreenscom',\n },\n};\n\nconst FivePanelFramework = () => {\n const { i18n, t } = useTranslation();\n const { addToast } = useToast();\n\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n usePageTitle('titles.fivePanelFramework', {\n defaultValue: lang === 'ja' ? '5枚構成テンプレ - ShipScreens' : '5-panel Screenshot Framework - ShipScreens',\n });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'five_panel_screenshot_framework' });\n }, []);\n\n const markdown = useMemo(() => buildMarkdown(lang), [lang]);\n const openAppHref = '/app/?sample=5panel&entry_source=five_panel_screenshot_framework_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const firstExportHref = '/tools/first-export/?entry_source=five_panel_screenshot_framework_primary_cta';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=five_panel_screenshot_framework_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 downloadMarkdown = useCallback(() => {\n try {\n const content = `\\ufeff${markdown}`;\n const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = lang === 'ja' ? 'shipscreens-5panel-framework-ja.md' : 'shipscreens-5panel-framework.md';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown' });\n } catch {\n // noop\n }\n }, [lang, markdown]);\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: 'five_panel_screenshot_framework', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', 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', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_first_export_header',\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-12\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <LayoutGrid 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=\"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={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_hero' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\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 || copyButtonLabel}\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: 'five_panel_screenshot_framework', 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: 'five_panel_screenshot_framework', 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', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight',\n })\n }\n proUnlockTitle={copy.proUnlockTitle}\n proUnlockBody={copy.proUnlockBody}\n proUnlockCmd={copy.proUnlockCmd}\n proUnlockNote={copy.proUnlockNote}\n onProUnlockCopied={() =>\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_pro_unlock' })\n }\n />\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight_card',\n })\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=\"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.introTitle}</h2>\n <ul className=\"text-sm text-slate-300 list-disc pl-5 space-y-1\">\n {copy.introBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n {copy.hookRule && <p className=\"text-xs text-amber-300\">{copy.hookRule}</p>}\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.hookExamplesTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.hookExamples.map((item) => (\n <div key={`${item.bad}-${item.good}`} className=\"rounded-2xl border border-slate-800 bg-slate-950 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.hookExamplesBadLabel}\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.hookExamplesGoodLabel}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.panelsTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.panelCards.map((panel, idx) => (\n <div key={panel.name} className=\"rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-bold text-slate-100\">\n {idx + 1}. {panel.name}\n </div>\n <div className=\"text-xs text-slate-500\">Panel</div>\n </div>\n <div className=\"text-sm text-slate-300\">{panel.goal}</div>\n <div className=\"pt-2 space-y-1 text-xs text-slate-400\">\n <div>{panel.header}</div>\n <div>{panel.subtitle}</div>\n <div className=\"text-slate-200 font-semibold\">{panel.example}</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.toolsTitle}</h2>\n <div className=\"space-y-2\">\n <a\n href=\"/tools/screenshot-workload-calculator/\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'open_calculator' })}\n className=\"text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4 font-semibold\"\n >\n {copy.calculatorLink}\n </a>\n <div className=\"text-sm text-slate-300\">{copy.calculatorCaption}</div>\n </div>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.downloadTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.downloadCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={markdown}\n onCopied={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown_clipboard' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n aria-label={copy.copyButton}\n >\n <Copy size={16} />\n {copy.copyButton}\n </CopyButton>\n <button\n type=\"button\"\n onClick={downloadMarkdown}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadButton}\n </button>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.sampleTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.sampleCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_first_export_footer',\n })\n }\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\"\n >\n {t('landing.nav.primaryCta')} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_sample_project_footer',\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full\"\n >\n {copy.openSample} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto text-center space-y-3 pt-2\">\n <p className=\"text-sm text-slate-400\">{copy.footerText}</p>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'dm_x' })}\n className=\"text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4\"\n >\n {copy.footerCta}\n </a>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.ctaPrimary,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_primary',\n }),\n }}\n secondary={{\n label: copy.openSample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_secondary',\n }),\n }}\n />\n </div>\n );\n};\n\nexport default FivePanelFramework;\n"],"names":["normalizeLang","lang","buildMarkdown","COPY","FivePanelFramework","i18n","t","useTranslation","addToast","useToast","copy","usePageTitle","useEffect","trackEvent","markdown","useMemo","openAppHref","agentCliHref","firstExportHref","sampleProjectHref","configDownloadHref","csvDownloadHref","copyButtonLabel","codeToggleLabel","defaultCodeOpen","downloadMarkdown","useCallback","content","blob","url","link","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","LayoutGrid","CopyButton","copyLabel","copyState","Fragment","Copy","ChevronDown","ToolGuardrailsPanel","CliPreflightCard","FitPanel","item","panel","idx","Download","StickyMobileCta"],"mappings":"klBAcA,MAAMA,EAAiBC,IACPA,GAAQ,IAAI,MAAM,GAAG,EAAE,CAAC,IACtB,KAAO,KAAO,KAG1BC,EAAiBD,GACjBA,IAAS,KACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCHE,EAAO,CACX,GAAI,CACF,MAAO,gCACP,MAAO,+BACP,SACE,wOACF,aAAc,2BACd,YAAa,4CACb,eAAgB,iFAChB,iBAAkB,oBAClB,sBAAuB,oBACvB,mBAAoB,aACpB,gBAAiB,WACjB,WAAY,CACV,+BACA,8DAAA,EACA,KAAK;AAAA,CAAI,EACX,eAAgB,mBAChB,cAAe,0EACf,aAAc,mCACd,cAAe,6EACf,SAAU,QACV,WAAY,iBACZ,aAAc,CACZ,6EACA,+DACA,yFACA,8CACA,qDAAA,EAEF,SACE,wGACF,kBAAmB,oCACnB,qBAAsB,QACtB,sBAAuB,WACvB,aAAc,CACZ,CACE,IAAK,iCACL,KAAM,wDAAA,EAER,CACE,IAAK,6BACL,KAAM,4CAAA,CACR,EAEF,YAAa,eACb,WAAY,CACV,CACE,KAAM,OACN,KAAM,+BACN,OAAQ,2BACR,SAAU,+BACV,QAAS,kDAAA,EAEX,CACE,KAAM,UACN,KAAM,yCACN,OAAQ,0BACR,SAAU,8BACV,QAAS,8BAAA,EAEX,CACE,KAAM,QACN,KAAM,oCACN,OAAQ,yBACR,SAAU,gCACV,QAAS,gCAAA,EAEX,CACE,KAAM,MACN,KAAM,2CACN,OAAQ,oBACR,SAAU,0BACV,QAAS,uCAAA,EAEX,CACE,KAAM,MACN,KAAM,yBACN,OAAQ,sBACR,SAAU,8BACV,QAAS,sBAAA,CACX,EAEF,WAAY,SACZ,eAAgB,iCAChB,kBAAmB,gEACnB,YAAa,iBACb,cAAe,gFACf,WAAY,sBACZ,cAAe,WACf,gBAAiB,iEACjB,WAAY,gBACZ,eAAgB,oBAChB,YAAa,sBACb,gBAAiB,oCACjB,WAAY,iBACZ,WAAY,yGACZ,UAAW,yBAAA,EAEb,GAAI,CACF,MAAO,aACP,MAAO,mBACP,SAAU,mHACV,aAAc,qBACd,YAAa,sCACb,eAAgB,wDAChB,iBAAkB,cAClB,sBAAuB,UACvB,mBAAoB,aACpB,gBAAiB,WACjB,WAAY,CACV,+BACA,8DAAA,EACA,KAAK;AAAA,CAAI,EACX,eAAgB,cAChB,cAAe,qCACf,aAAc,mCACd,cAAe,4CACf,SAAU,MACV,WAAY,UACZ,aAAc,CACZ,uBACA,yCACA,gCACA,mBACA,8BAAA,EAEF,SAAU,2CACV,kBAAmB,kBACnB,qBAAsB,KACtB,sBAAuB,KACvB,aAAc,CACZ,CACE,IAAK,cACL,KAAM,yBAAA,EAER,CACE,IAAK,cACL,KAAM,0BAAA,CACR,EAEF,YAAa,QACb,WAAY,CACV,CAAE,KAAM,OAAQ,KAAM,cAAe,OAAQ,eAAgB,SAAU,eAAgB,QAAS,uBAAA,EAChG,CAAE,KAAM,UAAW,KAAM,iBAAkB,OAAQ,cAAe,SAAU,eAAgB,QAAS,kBAAA,EACrG,CAAE,KAAM,QAAS,KAAM,YAAa,OAAQ,WAAY,SAAU,kBAAmB,QAAS,iBAAA,EAC9F,CAAE,KAAM,MAAO,KAAM,cAAe,OAAQ,WAAY,SAAU,YAAa,QAAS,sBAAA,EACxF,CAAE,KAAM,MAAO,KAAM,YAAa,OAAQ,cAAe,SAAU,cAAe,QAAS,UAAA,CAAW,EAExG,WAAY,KACZ,eAAgB,gBAChB,kBAAmB,yBACnB,YAAa,aACb,cAAe,6BACf,WAAY,UACZ,cAAe,SACf,gBAAiB,4BACjB,WAAY,eACZ,eAAgB,cAChB,YAAa,UACb,gBAAiB,8BACjB,WAAY,QACZ,WAAY,uDACZ,UAAW,uBAAA,CAEf,EAEMC,GAAqB,IAAM,CAC/B,KAAM,CAAE,KAAAC,EAAM,EAAAC,CAAA,EAAMC,EAAA,EACd,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfR,EAAOD,EAAcK,EAAK,kBAAoBA,EAAK,QAAQ,EAC3DK,EAAOP,EAAKF,CAAI,GAAKE,EAAK,GAEhCQ,EAAa,4BAA6B,CACxC,aAAcV,IAAS,KAAO,yBAA2B,4CAAA,CAC1D,EAEDW,EAAAA,UAAU,IAAM,CACdC,EAAW,YAAa,CAAE,KAAM,iCAAA,CAAmC,CACrE,EAAG,CAAA,CAAE,EAEL,MAAMC,EAAWC,EAAAA,QAAQ,IAAMb,EAAcD,CAAI,EAAG,CAACA,CAAI,CAAC,EACpDe,EAAc,mFACdC,EAAe,oBACfC,EAAkB,gFAClBC,EAAoB,uFACpBC,EAAqB,8CACrBC,EAAkB,4CAClBC,EAAkBhB,EAAE,cAAe,CAAE,aAAc,OAAQ,EAC3DiB,EAAkBjB,EAAE,sBAAuB,CAAE,aAAc,gBAAiB,EAC5EkB,EAAkB,OAAO,OAAW,IAAc,GAAO,OAAO,WAAW,oBAAoB,EAAE,QAEjGC,EAAmBC,EAAAA,YAAY,IAAM,CACzC,GAAI,CACF,MAAMC,EAAU,SAASb,CAAQ,GAC3Bc,EAAO,IAAI,KAAK,CAACD,CAAO,EAAG,CAAE,KAAM,8BAA+B,EAClEE,EAAM,IAAI,gBAAgBD,CAAI,EAC9BE,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOD,EACZC,EAAK,SAAW7B,IAAS,KAAO,qCAAuC,kCACvE,SAAS,KAAK,YAAY6B,CAAI,EAC9BA,EAAK,MAAA,EACL,SAAS,KAAK,YAAYA,CAAI,EAC9B,IAAI,gBAAgBD,CAAG,EACvBhB,EAAW,gBAAiB,CAAE,KAAM,kCAAmC,MAAO,WAAY,CAC5F,MAAQ,CAER,CACF,EAAG,CAACZ,EAAMa,CAAQ,CAAC,EAEnB,OACEiB,EAAAA,KAAC,MAAA,CAAI,UAAU,qFACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CACC,QAAQ,OACR,OAAO,QACP,YAAAlB,EACA,aAAemB,GACbC,EAAwBD,EAAO,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,oBAAqB,EAExH,eAAiBA,GACfC,EAAwBD,EAAO,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,iBAAkB,EAErH,eAAiBA,GACfC,EAAwBD,EAAO,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,kBAAmB,EAEtH,WAAY,CACV,KAAMjB,EACN,MACEa,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACb,SAAA,CAAAzB,EAAE,wBAAwB,EAAE,IAAC0B,EAAAA,IAACK,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,EACtD,EAEF,QAAUF,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,0BAAA,CACN,CAAA,CACL,CAAA,EAGFJ,EAAAA,KAAC,OAAA,CAAK,UAAU,0CACd,SAAA,CAAAA,EAAAA,KAAC,UAAA,CAAQ,UAAU,0CACjB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uIACb,SAAA,CAAAC,EAAAA,IAACM,EAAA,CAAW,KAAM,EAAA,CAAI,EACrB5B,EAAK,KAAA,EACR,EACAsB,EAAAA,IAAC,KAAA,CAAG,UAAU,gDAAiD,WAAK,MAAM,EAC1EA,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,SAAS,EACrED,EAAAA,KAAC,MAAA,CAAI,UAAU,+FACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,sEAAuE,SAAAtB,EAAK,aAAa,EACxGsB,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,WAAK,YAAY,EACxDA,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,WAAK,eAAe,EAC3DA,EAAAA,IAACO,EAAA,CACC,MAAO7B,EAAK,WACZ,SAAU,IAAM,CACdF,EAAS,CAAE,KAAM,UAAW,QAASE,EAAK,YAAa,EACvDG,EAAW,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,gBAAiB,CAChG,EACA,aAAc,IAAML,EAAS,CAAE,KAAM,QAAS,QAASE,EAAK,gBAAiB,EAC7E,UAAU,6KAET,SAAA,CAAC,CAAE,UAAA8B,EAAW,UAAAC,CAAA,IACbV,OAAAW,EAAAA,SAAA,CACE,SAAA,CAAAV,EAAAA,IAACW,EAAA,CAAK,KAAM,EAAA,CAAI,EACfF,IAAc,OAAS/B,EAAK,iBAAmB8B,GAAalB,CAAA,CAAA,CAC/D,CAAA,CAAA,EAGJS,EAAAA,KAAC,UAAA,CAAQ,UAAU,QAAQ,KAAMP,EAC/B,SAAA,CAAAO,EAAAA,KAAC,UAAA,CAAQ,UAAU,sGACjB,SAAA,CAAAC,EAAAA,IAAC,QAAM,SAAAT,CAAA,CAAgB,EACvBS,EAAAA,IAACY,EAAA,CAAY,KAAM,GAAI,UAAU,wEAAA,CAAyE,CAAA,EAC5G,EACAZ,EAAAA,IAAC,MAAA,CAAI,UAAU,2DACb,SAAAA,EAAAA,IAAC,OAAI,UAAU,6CAA8C,SAAAtB,EAAK,UAAA,CAAW,CAAA,CAC/E,CAAA,EACF,EACAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,sEACZ,SAAAtB,EAAK,sBACR,EACAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CACC,KAAMZ,EACN,SAAQ,GACR,QAAS,IAAMP,EAAW,gBAAiB,CAAE,KAAM,kCAAmC,MAAO,kBAAmB,EAChH,UAAU,uKAET,SAAAH,EAAK,kBAAA,CAAA,EAERsB,EAAAA,IAAC,IAAA,CACC,KAAMX,EACN,SAAQ,GACR,QAAS,IAAMR,EAAW,gBAAiB,CAAE,KAAM,kCAAmC,MAAO,gBAAiB,EAC9G,UAAU,uKAET,SAAAH,EAAK,eAAA,CAAA,CACR,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EACAsB,EAAAA,IAACa,EAAA,CACC,MAAO5C,IAAS,KAAO,wBAA0B,wCACjD,gBAAAsB,EACA,gBAAAD,EACA,cAAc,8BACd,iBAAmBa,GACjBC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,oBAAA,CACN,EAEH,eAAgBzB,EAAK,eACrB,cAAeA,EAAK,cACpB,aAAcA,EAAK,aACnB,cAAeA,EAAK,cACpB,kBAAmB,IACjBG,EAAW,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,qBAAA,CAAuB,CAAA,CAAA,EAGxGmB,EAAAA,IAACc,EAAA,CACC,QAAO,GACP,KAAK,8BACL,QAAUX,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,yBAAA,CACN,EAEH,UAAU,kBAAA,CAAA,CACZ,EACF,EAEAH,EAAAA,IAACe,EAAA,CAAS,UAAU,0BAAA,CAA2B,EAE/ChB,EAAAA,KAAC,UAAA,CAAQ,UAAU,oEACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,WAAW,EAC9DsB,EAAAA,IAAC,KAAA,CAAG,UAAU,kDACX,WAAK,aAAa,IAAKgB,GACtBhB,EAAAA,IAAC,KAAA,CAAe,SAAAgB,GAAPA,CAAY,CACtB,EACH,EACCtC,EAAK,UAAYsB,EAAAA,IAAC,KAAE,UAAU,yBAA0B,WAAK,QAAA,CAAS,CAAA,EACzE,EAEAD,EAAAA,KAAC,UAAA,CAAQ,UAAU,YACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,kBAAkB,EACrEsB,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACZ,SAAAtB,EAAK,aAAa,IAAKsC,GACtBjB,EAAAA,KAAC,MAAA,CAAqC,UAAU,iEAC9C,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,sEACZ,SAAAtB,EAAK,qBACR,EACAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,yBAAyB,SAAA,CAAA,IAAEiB,EAAK,IAAI,GAAA,CAAA,CAAC,CAAA,EACtD,EACAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,yEACZ,SAAAtB,EAAK,sBACR,EACAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,mCAAmC,SAAA,CAAA,IAAEiB,EAAK,KAAK,GAAA,CAAA,CAAC,CAAA,CAAA,CACjE,CAAA,GAZQ,GAAGA,EAAK,GAAG,IAAIA,EAAK,IAAI,EAalC,CACD,CAAA,CACH,CAAA,EACF,EAEAjB,EAAAA,KAAC,UAAA,CAAQ,UAAU,YACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,YAAY,EAC/DsB,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACZ,SAAAtB,EAAK,WAAW,IAAI,CAACuC,EAAOC,IAC3BnB,OAAC,MAAA,CAAqB,UAAU,iEAC9B,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAAmB,EAAM,EAAE,KAAGD,EAAM,IAAA,EACpB,EACAjB,EAAAA,IAAC,MAAA,CAAI,UAAU,yBAAyB,SAAA,OAAA,CAAK,CAAA,EAC/C,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,yBAA0B,WAAM,KAAK,EACpDD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAK,WAAM,MAAA,CAAO,EACnBA,EAAAA,IAAC,MAAA,CAAK,SAAAiB,EAAM,QAAA,CAAS,EACrBjB,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAgC,WAAM,OAAA,CAAQ,CAAA,CAAA,CAC/D,CAAA,GAZQiB,EAAM,IAahB,CACD,CAAA,CACH,CAAA,EACF,QAEC,UAAA,CAAQ,UAAU,YACjB,SAAAlB,EAAAA,KAAC,MAAA,CAAI,UAAU,oEACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,WAAW,EAC9DqB,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CACC,KAAK,yCACL,QAAS,IAAMnB,EAAW,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,kBAAmB,EAC/G,UAAU,iGAET,SAAAH,EAAK,cAAA,CAAA,EAERsB,EAAAA,IAAC,MAAA,CAAI,UAAU,yBAA0B,WAAK,iBAAA,CAAkB,CAAA,CAAA,CAClE,CAAA,CAAA,CACF,CAAA,CACF,EAEAD,EAAAA,KAAC,UAAA,CAAQ,UAAU,oEACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,cAAc,EACjEsB,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,WAAK,gBAAgB,EAC5DD,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAA,EAAAA,KAACQ,EAAA,CACC,MAAOzB,EACP,SAAU,IAAM,CACdN,EAAS,CAAE,KAAM,UAAW,QAASE,EAAK,YAAa,EACvDG,EAAW,gBAAiB,CAAE,KAAM,kCAAmC,MAAO,qBAAsB,CACtG,EACA,aAAc,IAAML,EAAS,CAAE,KAAM,QAAS,QAASE,EAAK,gBAAiB,EAC7E,UAAU,8JACV,aAAYA,EAAK,WAEjB,SAAA,CAAAsB,EAAAA,IAACW,EAAA,CAAK,KAAM,EAAA,CAAI,EACfjC,EAAK,UAAA,CAAA,CAAA,EAERqB,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAASN,EACT,UAAU,8JAEV,SAAA,CAAAO,EAAAA,IAACmB,EAAA,CAAS,KAAM,EAAA,CAAI,EACnBzC,EAAK,cAAA,CAAA,CAAA,CACR,CAAA,CACF,CAAA,EACF,EAEAqB,EAAAA,KAAC,UAAA,CAAQ,UAAU,oEACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAtB,EAAK,YAAY,EAC/DsB,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,WAAK,cAAc,EAC1DD,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CACC,KAAMb,EACN,QAAUiB,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,0BAAA,CACN,EAEH,UAAU,4IAET,SAAA,CAAA7B,EAAE,wBAAwB,EAAE,IAAC0B,EAAAA,IAACK,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,EAEtDN,EAAAA,KAAC,IAAA,CACC,KAAMZ,EACN,QAAUgB,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,4BAAA,CACN,EAEH,UAAU,wKAET,SAAA,CAAAzB,EAAK,WAAW,IAACsB,EAAAA,IAACK,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,CAC1C,CAAA,CACF,CAAA,EACF,EAEAN,EAAAA,KAAC,UAAA,CAAQ,UAAU,+CACjB,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,SAAAtB,EAAK,WAAW,EACvDsB,EAAAA,IAAC,IAAA,CACC,KAAK,+BACL,OAAO,SACP,IAAI,sBACJ,QAAS,IAAMnB,EAAW,iBAAkB,CAAE,KAAM,kCAAmC,IAAK,OAAQ,EACpG,UAAU,2FAET,SAAAH,EAAK,SAAA,CAAA,CACR,CAAA,CACF,CAAA,EACF,EACAsB,EAAAA,IAACoB,EAAA,CACC,QAAS,CACP,MAAO1C,EAAK,WACZ,KAAMO,EACN,QAAUkB,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,gBAAA,CACN,CAAA,EAEL,UAAW,CACT,MAAOzB,EAAK,WACZ,KAAMS,EACN,QAAUgB,GACRC,EAAwBD,EAAO,iBAAkB,CAC/C,KAAM,kCACN,IAAK,kBAAA,CACN,CAAA,CACL,CAAA,CACF,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{u as H,r as l,j as e}from"./index-C4xM6WAU.js";import{c as N,D as S,a as E,b as R,d as A,f as C,g as v,A as D,e as I,h as U,i as F,j as k,k as V,m as M,u as z}from"./useAuth-D_UWt-CP.js";import{a as L,S as W}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as $}from"./SiteHeader-Ch5fAKkA.js";import{E as B,a as G}from"./eye-DkJdJAvt.js";const X=t=>N(A,R("ForgotPassword"),E(),{...S,...t});async function J(t){const{username:s}=t;C(!!s,v.EmptyResetPasswordUsername);const n=D.getConfig().Auth?.Cognito;I(n);const{userPoolClientId:o,userPoolId:i,userPoolEndpoint:d}=n,r=t.options?.clientMetadata,c=U({username:s,userPoolId:i,userPoolClientId:o}),u=(await X({endpointResolver:M({endpointOverride:d})})({region:k(i),userAgentValue:F(V.ResetPassword)},{Username:s,ClientMetadata:r,ClientId:o,UserContextData:c})).CodeDeliveryDetails;return{isPasswordReset:!1,nextStep:{resetPasswordStep:"CONFIRM_RESET_PASSWORD_WITH_CODE",codeDeliveryDetails:{deliveryMedium:u?.DeliveryMedium,destination:u?.Destination,attributeName:u?.AttributeName}}}}const K=t=>N(A,R("ConfirmForgotPassword"),E(),{...S,...t});async function Q(t){const s=D.getConfig().Auth?.Cognito;I(s);const{userPoolClientId:n,userPoolId:o,userPoolEndpoint:i}=s,{username:d,newPassword:r}=t;C(!!d,v.EmptyConfirmResetPasswordUsername),C(!!r,v.EmptyConfirmResetPasswordNewPassword);const c=t.confirmationCode;C(!!c,v.EmptyConfirmResetPasswordConfirmationCode);const m=t.options?.clientMetadata,h=U({username:d,userPoolId:o,userPoolClientId:n});await K({endpointResolver:M({endpointOverride:i})})({region:k(s.userPoolId),userAgentValue:F(V.ConfirmResetPassword)},{Username:d,ConfirmationCode:c,Password:r,ClientMetadata:m,ClientId:s.userPoolClientId,UserContextData:h})}const Y=()=>{if(typeof window>"u")return null;const s=new URLSearchParams(window.location.search).get("next");return!s||!s.startsWith("/")||s.startsWith("//")?null:s},oe=()=>{const{t}=H();L("titles.forgotPassword");const{isAuthenticated:s,isLoading:n}=z(),o=Y(),[i,d]=l.useState("request"),[r,c]=l.useState(""),[m,h]=l.useState(""),[u,T]=l.useState(""),[x,_]=l.useState(!1),[g,p]=l.useState(""),[b,w]=l.useState(""),[j,y]=l.useState(!1);l.useEffect(()=>{!n&&s&&(window.location.href=o||"/app/")},[s,n,o]);const q=async a=>{a.preventDefault(),p(""),w(""),y(!0);try{await J({username:r}),p(t("auth.forgot.codeSent")),d("confirm")}catch(f){const P=f?.name||f?.code;w(t(`auth.errors.${P}`,t("auth.errors.default")))}finally{y(!1)}},O=async a=>{a.preventDefault(),p(""),w(""),y(!0);try{await Q({username:r,confirmationCode:m,newPassword:u}),p(t("auth.success.confirm")),window.location.href=o?`/signin?next=${encodeURIComponent(o)}`:"/signin"}catch(f){const P=f?.name||f?.code;w(t(`auth.errors.${P}`,t("auth.errors.default")))}finally{y(!1)}};return e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white flex flex-col",children:[e.jsx(W,{}),e.jsx($,{variant:"dark",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-4 pb-12",children:e.jsxs("div",{className:"w-full max-w-md bg-slate-900/70 border border-slate-800 rounded-2xl shadow-2xl p-8 space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-blue-500/10 text-blue-300 border border-blue-500/30",children:e.jsx("span",{className:"font-black text-lg",children:"S"})}),e.jsx("h1",{className:"text-2xl font-bold",children:t("auth.forgot.title")}),e.jsx("p",{className:"text-slate-400 text-sm",children:t("auth.forgot.subtitle")})]}),i==="request"&&e.jsxs("form",{onSubmit:q,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"forgot-email",type:"email",value:r,onChange:a=>c(a.target.value),required:!0,autoComplete:"email",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.email")})]}),b&&e.jsx("div",{role:"alert",className:"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2",children:b}),g&&e.jsx("div",{role:"status",className:"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2",children:g}),e.jsx("button",{type:"submit",disabled:j,className:"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed",children:t("auth.forgot.sendCode")})]}),i==="confirm"&&e.jsxs("form",{onSubmit:O,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"forgot-email",type:"email",value:r,onChange:a=>c(a.target.value),required:!0,autoComplete:"email",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.email")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-code",className:"block text-sm text-slate-300",children:t("auth.code")}),e.jsx("input",{id:"forgot-code",type:"text",value:m,onChange:a=>h(a.target.value),required:!0,className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"123456"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-new-password",className:"block text-sm text-slate-300",children:t("auth.forgot.newPassword")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"forgot-new-password",type:x?"text":"password",value:u,onChange:a=>T(a.target.value),required:!0,autoComplete:"new-password",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 pr-12 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.passwordNew")}),e.jsx("button",{type:"button",onClick:()=>_(a=>!a),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":x?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),title:x?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),children:x?e.jsx(B,{size:18}):e.jsx(G,{size:18})})]})]}),b&&e.jsx("div",{role:"alert",className:"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2",children:b}),g&&e.jsx("div",{role:"status",className:"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2",children:g}),e.jsx("button",{type:"submit",disabled:j,className:"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed",children:t("auth.forgot.reset")})]}),e.jsxs("div",{className:"text-center text-sm text-slate-400 space-y-1",children:[e.jsxs("div",{children:[t("auth.actions.haveAccount")," ",e.jsx("button",{type:"button",className:"text-blue-300 hover:text-blue-200 underline",onClick:()=>{window.location.href=o?`/signin?next=${encodeURIComponent(o)}`:"/signin"},children:t("auth.actions.goToSignIn")})]}),e.jsxs("div",{className:"text-slate-500 text-xs",children:[e.jsx("div",{children:t("auth.helper.terms")}),e.jsxs("div",{className:"mt-1 flex items-center justify-center gap-2",children:[e.jsx("a",{href:"/terms",className:"underline underline-offset-4 hover:text-slate-200",children:t("landing.footer.terms")}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{href:"/privacy",className:"underline underline-offset-4 hover:text-slate-200",children:t("landing.footer.privacy")})]})]})]})]})})]})};export{oe as default};
2
- //# sourceMappingURL=ForgotPassword-CApAdwy1.js.map
1
+ import{u as H,r as l,j as e}from"./index-Bffw9flM.js";import{c as N,D as S,a as E,b as R,d as A,f as C,g as v,A as D,e as I,h as U,i as F,j as k,k as V,m as M,u as z}from"./useAuth-ctmUbyCR.js";import{a as L,S as W}from"./LanguageSwitcher-CfUhVVuT.js";import{S as $}from"./SiteHeader-BGQW06JF.js";import{E as B,a as G}from"./eye-B1LPDhW7.js";const X=t=>N(A,R("ForgotPassword"),E(),{...S,...t});async function J(t){const{username:s}=t;C(!!s,v.EmptyResetPasswordUsername);const n=D.getConfig().Auth?.Cognito;I(n);const{userPoolClientId:o,userPoolId:i,userPoolEndpoint:d}=n,r=t.options?.clientMetadata,c=U({username:s,userPoolId:i,userPoolClientId:o}),u=(await X({endpointResolver:M({endpointOverride:d})})({region:k(i),userAgentValue:F(V.ResetPassword)},{Username:s,ClientMetadata:r,ClientId:o,UserContextData:c})).CodeDeliveryDetails;return{isPasswordReset:!1,nextStep:{resetPasswordStep:"CONFIRM_RESET_PASSWORD_WITH_CODE",codeDeliveryDetails:{deliveryMedium:u?.DeliveryMedium,destination:u?.Destination,attributeName:u?.AttributeName}}}}const K=t=>N(A,R("ConfirmForgotPassword"),E(),{...S,...t});async function Q(t){const s=D.getConfig().Auth?.Cognito;I(s);const{userPoolClientId:n,userPoolId:o,userPoolEndpoint:i}=s,{username:d,newPassword:r}=t;C(!!d,v.EmptyConfirmResetPasswordUsername),C(!!r,v.EmptyConfirmResetPasswordNewPassword);const c=t.confirmationCode;C(!!c,v.EmptyConfirmResetPasswordConfirmationCode);const m=t.options?.clientMetadata,h=U({username:d,userPoolId:o,userPoolClientId:n});await K({endpointResolver:M({endpointOverride:i})})({region:k(s.userPoolId),userAgentValue:F(V.ConfirmResetPassword)},{Username:d,ConfirmationCode:c,Password:r,ClientMetadata:m,ClientId:s.userPoolClientId,UserContextData:h})}const Y=()=>{if(typeof window>"u")return null;const s=new URLSearchParams(window.location.search).get("next");return!s||!s.startsWith("/")||s.startsWith("//")?null:s},oe=()=>{const{t}=H();L("titles.forgotPassword");const{isAuthenticated:s,isLoading:n}=z(),o=Y(),[i,d]=l.useState("request"),[r,c]=l.useState(""),[m,h]=l.useState(""),[u,T]=l.useState(""),[x,_]=l.useState(!1),[g,p]=l.useState(""),[b,w]=l.useState(""),[j,y]=l.useState(!1);l.useEffect(()=>{!n&&s&&(window.location.href=o||"/app/")},[s,n,o]);const q=async a=>{a.preventDefault(),p(""),w(""),y(!0);try{await J({username:r}),p(t("auth.forgot.codeSent")),d("confirm")}catch(f){const P=f?.name||f?.code;w(t(`auth.errors.${P}`,t("auth.errors.default")))}finally{y(!1)}},O=async a=>{a.preventDefault(),p(""),w(""),y(!0);try{await Q({username:r,confirmationCode:m,newPassword:u}),p(t("auth.success.confirm")),window.location.href=o?`/signin?next=${encodeURIComponent(o)}`:"/signin"}catch(f){const P=f?.name||f?.code;w(t(`auth.errors.${P}`,t("auth.errors.default")))}finally{y(!1)}};return e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white flex flex-col",children:[e.jsx(W,{}),e.jsx($,{variant:"dark",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-4 pb-12",children:e.jsxs("div",{className:"w-full max-w-md bg-slate-900/70 border border-slate-800 rounded-2xl shadow-2xl p-8 space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-blue-500/10 text-blue-300 border border-blue-500/30",children:e.jsx("span",{className:"font-black text-lg",children:"S"})}),e.jsx("h1",{className:"text-2xl font-bold",children:t("auth.forgot.title")}),e.jsx("p",{className:"text-slate-400 text-sm",children:t("auth.forgot.subtitle")})]}),i==="request"&&e.jsxs("form",{onSubmit:q,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"forgot-email",type:"email",value:r,onChange:a=>c(a.target.value),required:!0,autoComplete:"email",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.email")})]}),b&&e.jsx("div",{role:"alert",className:"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2",children:b}),g&&e.jsx("div",{role:"status",className:"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2",children:g}),e.jsx("button",{type:"submit",disabled:j,className:"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed",children:t("auth.forgot.sendCode")})]}),i==="confirm"&&e.jsxs("form",{onSubmit:O,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"forgot-email",type:"email",value:r,onChange:a=>c(a.target.value),required:!0,autoComplete:"email",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.email")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-code",className:"block text-sm text-slate-300",children:t("auth.code")}),e.jsx("input",{id:"forgot-code",type:"text",value:m,onChange:a=>h(a.target.value),required:!0,className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"123456"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"forgot-new-password",className:"block text-sm text-slate-300",children:t("auth.forgot.newPassword")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"forgot-new-password",type:x?"text":"password",value:u,onChange:a=>T(a.target.value),required:!0,autoComplete:"new-password",className:"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 pr-12 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:t("auth.placeholders.passwordNew")}),e.jsx("button",{type:"button",onClick:()=>_(a=>!a),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":x?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),title:x?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),children:x?e.jsx(B,{size:18}):e.jsx(G,{size:18})})]})]}),b&&e.jsx("div",{role:"alert",className:"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2",children:b}),g&&e.jsx("div",{role:"status",className:"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2",children:g}),e.jsx("button",{type:"submit",disabled:j,className:"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed",children:t("auth.forgot.reset")})]}),e.jsxs("div",{className:"text-center text-sm text-slate-400 space-y-1",children:[e.jsxs("div",{children:[t("auth.actions.haveAccount")," ",e.jsx("button",{type:"button",className:"text-blue-300 hover:text-blue-200 underline",onClick:()=>{window.location.href=o?`/signin?next=${encodeURIComponent(o)}`:"/signin"},children:t("auth.actions.goToSignIn")})]}),e.jsxs("div",{className:"text-slate-500 text-xs",children:[e.jsx("div",{children:t("auth.helper.terms")}),e.jsxs("div",{className:"mt-1 flex items-center justify-center gap-2",children:[e.jsx("a",{href:"/terms",className:"underline underline-offset-4 hover:text-slate-200",children:t("landing.footer.terms")}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{href:"/privacy",className:"underline underline-offset-4 hover:text-slate-200",children:t("landing.footer.privacy")})]})]})]})]})})]})};export{oe as default};
2
+ //# sourceMappingURL=ForgotPassword-DuHNHuUe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForgotPassword-CApAdwy1.js","sources":["../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/resetPassword.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/confirmResetPassword.mjs","../../src/pages/ForgotPassword.jsx"],"sourcesContent":["import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createForgotPasswordClient };\n//# sourceMappingURL=createForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Resets a user's password.\n *\n * @param input - The ResetPasswordInput object.\n * @returns ResetPasswordOutput\n * @throws -{@link ForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n **/\nasync function resetPassword(input) {\n const { username } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyResetPasswordUsername);\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const clientMetadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const forgotPassword = createForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const res = await forgotPassword({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ResetPassword),\n }, {\n Username: username,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n });\n const codeDeliveryDetails = res.CodeDeliveryDetails;\n return {\n isPasswordReset: false,\n nextStep: {\n resetPasswordStep: 'CONFIRM_RESET_PASSWORD_WITH_CODE',\n codeDeliveryDetails: {\n deliveryMedium: codeDeliveryDetails?.DeliveryMedium,\n destination: codeDeliveryDetails?.Destination,\n attributeName: codeDeliveryDetails?.AttributeName,\n },\n },\n };\n}\n\nexport { resetPassword };\n//# sourceMappingURL=resetPassword.mjs.map\n","import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createConfirmForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ConfirmForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createConfirmForgotPasswordClient };\n//# sourceMappingURL=createConfirmForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createConfirmForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Confirms the new password and verification code to reset the password.\n *\n * @param input - The ConfirmResetPasswordInput object.\n * @throws -{@link ConfirmForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty confirmation code, password or username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n */\nasync function confirmResetPassword(input) {\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const { username, newPassword } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyConfirmResetPasswordUsername);\n assertValidationError(!!newPassword, AuthValidationErrorCode.EmptyConfirmResetPasswordNewPassword);\n const code = input.confirmationCode;\n assertValidationError(!!code, AuthValidationErrorCode.EmptyConfirmResetPasswordConfirmationCode);\n const metadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const confirmForgotPassword = createConfirmForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n await confirmForgotPassword({\n region: getRegionFromUserPoolId(authConfig.userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmResetPassword),\n }, {\n Username: username,\n ConfirmationCode: code,\n Password: newPassword,\n ClientMetadata: metadata,\n ClientId: authConfig.userPoolClientId,\n UserContextData,\n });\n}\n\nexport { confirmResetPassword };\n//# sourceMappingURL=confirmResetPassword.mjs.map\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { resetPassword, confirmResetPassword } from 'aws-amplify/auth';\nimport { Eye, EyeOff } from 'lucide-react';\nimport useAuth from '../hooks/useAuth';\nimport usePageTitle from '../hooks/usePageTitle';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\n\nconst readNextPath = () => {\n if (typeof window === 'undefined') return null;\n const params = new URLSearchParams(window.location.search);\n const next = params.get('next');\n if (!next) return null;\n if (!next.startsWith('/') || next.startsWith('//')) return null;\n return next;\n};\n\nconst ForgotPassword = () => {\n const { t } = useTranslation();\n usePageTitle('titles.forgotPassword');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [stage, setStage] = useState('request'); // request | confirm\n const [email, setEmail] = useState('');\n const [code, setCode] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [newPasswordVisible, setNewPasswordVisible] = useState(false);\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (!isLoading && isAuthenticated) {\n window.location.href = nextPath || '/app/';\n }\n }, [isAuthenticated, isLoading, nextPath]);\n\n const handleRequest = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await resetPassword({ username: email });\n setMessage(t('auth.forgot.codeSent'));\n setStage('confirm');\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\n };\n\n const handleConfirm = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await confirmResetPassword({ username: email, confirmationCode: code, newPassword });\n setMessage(t('auth.success.confirm'));\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\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 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"dark\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-4 pb-12\">\n <div className=\"w-full max-w-md bg-slate-900/70 border border-slate-800 rounded-2xl shadow-2xl p-8 space-y-6\">\n <div className=\"text-center space-y-2\">\n <div className=\"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-blue-500/10 text-blue-300 border border-blue-500/30\">\n <span className=\"font-black text-lg\">S</span>\n </div>\n <h1 className=\"text-2xl font-bold\">{t('auth.forgot.title')}</h1>\n <p className=\"text-slate-400 text-sm\">{t('auth.forgot.subtitle')}</p>\n </div>\n\n {stage === 'request' && (\n <form onSubmit={handleRequest} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.sendCode')}\n </button>\n </form>\n )}\n\n {stage === 'confirm' && (\n <form onSubmit={handleConfirm} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-code\" className=\"block text-sm text-slate-300\">\n {t('auth.code')}\n </label>\n <input\n id=\"forgot-code\"\n type=\"text\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n required\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123456\"\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-new-password\" className=\"block text-sm text-slate-300\">\n {t('auth.forgot.newPassword')}\n </label>\n <div className=\"relative\">\n <input\n id=\"forgot-new-password\"\n type={newPasswordVisible ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n required\n autoComplete=\"new-password\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 pr-12 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.passwordNew')}\n />\n <button\n type=\"button\"\n onClick={() => setNewPasswordVisible((prev) => !prev)}\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200\"\n aria-label={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {newPasswordVisible ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.reset')}\n </button>\n </form>\n )}\n\n <div className=\"text-center text-sm text-slate-400 space-y-1\">\n <div>\n {t('auth.actions.haveAccount')}{' '}\n <button\n type=\"button\"\n className=\"text-blue-300 hover:text-blue-200 underline\"\n onClick={() => {\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n }}\n >\n {t('auth.actions.goToSignIn')}\n </button>\n </div>\n <div className=\"text-slate-500 text-xs\">\n <div>{t('auth.helper.terms')}</div>\n <div className=\"mt-1 flex items-center justify-center gap-2\">\n <a href=\"/terms\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.terms')}\n </a>\n <span aria-hidden=\"true\">·</span>\n <a href=\"/privacy\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.privacy')}\n </a>\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default ForgotPassword;\n"],"names":["createForgotPasswordClient","config","composeServiceApi","cognitoUserPoolTransferHandler","createUserPoolSerializer","createUserPoolDeserializer","DEFAULT_SERVICE_CLIENT_API_CONFIG","resetPassword","input","username","assertValidationError","AuthValidationErrorCode","authConfig","Amplify","assertTokenProviderConfig","userPoolClientId","userPoolId","userPoolEndpoint","clientMetadata","UserContextData","getUserContextData","codeDeliveryDetails","createCognitoUserPoolEndpointResolver","getRegionFromUserPoolId","getAuthUserAgentValue","AuthAction","createConfirmForgotPasswordClient","confirmResetPassword","newPassword","code","metadata","readNextPath","next","ForgotPassword","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","stage","setStage","useState","email","setEmail","setCode","setNewPassword","newPasswordVisible","setNewPasswordVisible","message","setMessage","error","setError","busy","setBusy","useEffect","handleRequest","e","err","key","handleConfirm","jsxs","jsx","StagingBadge","SiteHeader","prev","EyeOff","Eye"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"ForgotPassword-DuHNHuUe.js","sources":["../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/resetPassword.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/confirmResetPassword.mjs","../../src/pages/ForgotPassword.jsx"],"sourcesContent":["import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createForgotPasswordClient };\n//# sourceMappingURL=createForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Resets a user's password.\n *\n * @param input - The ResetPasswordInput object.\n * @returns ResetPasswordOutput\n * @throws -{@link ForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n **/\nasync function resetPassword(input) {\n const { username } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyResetPasswordUsername);\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const clientMetadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const forgotPassword = createForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const res = await forgotPassword({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ResetPassword),\n }, {\n Username: username,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n });\n const codeDeliveryDetails = res.CodeDeliveryDetails;\n return {\n isPasswordReset: false,\n nextStep: {\n resetPasswordStep: 'CONFIRM_RESET_PASSWORD_WITH_CODE',\n codeDeliveryDetails: {\n deliveryMedium: codeDeliveryDetails?.DeliveryMedium,\n destination: codeDeliveryDetails?.Destination,\n attributeName: codeDeliveryDetails?.AttributeName,\n },\n },\n };\n}\n\nexport { resetPassword };\n//# sourceMappingURL=resetPassword.mjs.map\n","import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createConfirmForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ConfirmForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createConfirmForgotPasswordClient };\n//# sourceMappingURL=createConfirmForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createConfirmForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Confirms the new password and verification code to reset the password.\n *\n * @param input - The ConfirmResetPasswordInput object.\n * @throws -{@link ConfirmForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty confirmation code, password or username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n */\nasync function confirmResetPassword(input) {\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const { username, newPassword } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyConfirmResetPasswordUsername);\n assertValidationError(!!newPassword, AuthValidationErrorCode.EmptyConfirmResetPasswordNewPassword);\n const code = input.confirmationCode;\n assertValidationError(!!code, AuthValidationErrorCode.EmptyConfirmResetPasswordConfirmationCode);\n const metadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const confirmForgotPassword = createConfirmForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n await confirmForgotPassword({\n region: getRegionFromUserPoolId(authConfig.userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmResetPassword),\n }, {\n Username: username,\n ConfirmationCode: code,\n Password: newPassword,\n ClientMetadata: metadata,\n ClientId: authConfig.userPoolClientId,\n UserContextData,\n });\n}\n\nexport { confirmResetPassword };\n//# sourceMappingURL=confirmResetPassword.mjs.map\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { resetPassword, confirmResetPassword } from 'aws-amplify/auth';\nimport { Eye, EyeOff } from 'lucide-react';\nimport useAuth from '../hooks/useAuth';\nimport usePageTitle from '../hooks/usePageTitle';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\n\nconst readNextPath = () => {\n if (typeof window === 'undefined') return null;\n const params = new URLSearchParams(window.location.search);\n const next = params.get('next');\n if (!next) return null;\n if (!next.startsWith('/') || next.startsWith('//')) return null;\n return next;\n};\n\nconst ForgotPassword = () => {\n const { t } = useTranslation();\n usePageTitle('titles.forgotPassword');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [stage, setStage] = useState('request'); // request | confirm\n const [email, setEmail] = useState('');\n const [code, setCode] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [newPasswordVisible, setNewPasswordVisible] = useState(false);\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (!isLoading && isAuthenticated) {\n window.location.href = nextPath || '/app/';\n }\n }, [isAuthenticated, isLoading, nextPath]);\n\n const handleRequest = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await resetPassword({ username: email });\n setMessage(t('auth.forgot.codeSent'));\n setStage('confirm');\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\n };\n\n const handleConfirm = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await confirmResetPassword({ username: email, confirmationCode: code, newPassword });\n setMessage(t('auth.success.confirm'));\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\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 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"dark\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-4 pb-12\">\n <div className=\"w-full max-w-md bg-slate-900/70 border border-slate-800 rounded-2xl shadow-2xl p-8 space-y-6\">\n <div className=\"text-center space-y-2\">\n <div className=\"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-blue-500/10 text-blue-300 border border-blue-500/30\">\n <span className=\"font-black text-lg\">S</span>\n </div>\n <h1 className=\"text-2xl font-bold\">{t('auth.forgot.title')}</h1>\n <p className=\"text-slate-400 text-sm\">{t('auth.forgot.subtitle')}</p>\n </div>\n\n {stage === 'request' && (\n <form onSubmit={handleRequest} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.sendCode')}\n </button>\n </form>\n )}\n\n {stage === 'confirm' && (\n <form onSubmit={handleConfirm} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-code\" className=\"block text-sm text-slate-300\">\n {t('auth.code')}\n </label>\n <input\n id=\"forgot-code\"\n type=\"text\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n required\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123456\"\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-new-password\" className=\"block text-sm text-slate-300\">\n {t('auth.forgot.newPassword')}\n </label>\n <div className=\"relative\">\n <input\n id=\"forgot-new-password\"\n type={newPasswordVisible ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n required\n autoComplete=\"new-password\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 pr-12 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.passwordNew')}\n />\n <button\n type=\"button\"\n onClick={() => setNewPasswordVisible((prev) => !prev)}\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200\"\n aria-label={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {newPasswordVisible ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.reset')}\n </button>\n </form>\n )}\n\n <div className=\"text-center text-sm text-slate-400 space-y-1\">\n <div>\n {t('auth.actions.haveAccount')}{' '}\n <button\n type=\"button\"\n className=\"text-blue-300 hover:text-blue-200 underline\"\n onClick={() => {\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n }}\n >\n {t('auth.actions.goToSignIn')}\n </button>\n </div>\n <div className=\"text-slate-500 text-xs\">\n <div>{t('auth.helper.terms')}</div>\n <div className=\"mt-1 flex items-center justify-center gap-2\">\n <a href=\"/terms\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.terms')}\n </a>\n <span aria-hidden=\"true\">·</span>\n <a href=\"/privacy\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.privacy')}\n </a>\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default ForgotPassword;\n"],"names":["createForgotPasswordClient","config","composeServiceApi","cognitoUserPoolTransferHandler","createUserPoolSerializer","createUserPoolDeserializer","DEFAULT_SERVICE_CLIENT_API_CONFIG","resetPassword","input","username","assertValidationError","AuthValidationErrorCode","authConfig","Amplify","assertTokenProviderConfig","userPoolClientId","userPoolId","userPoolEndpoint","clientMetadata","UserContextData","getUserContextData","codeDeliveryDetails","createCognitoUserPoolEndpointResolver","getRegionFromUserPoolId","getAuthUserAgentValue","AuthAction","createConfirmForgotPasswordClient","confirmResetPassword","newPassword","code","metadata","readNextPath","next","ForgotPassword","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","stage","setStage","useState","email","setEmail","setCode","setNewPassword","newPasswordVisible","setNewPasswordVisible","message","setMessage","error","setError","busy","setBusy","useEffect","handleRequest","e","err","key","handleConfirm","jsxs","jsx","StagingBadge","SiteHeader","prev","EyeOff","Eye"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1,2 +1,2 @@
1
- import{u as W,r as Y,t as S,j as e,b as f}from"./index-C4xM6WAU.js";import{A as O,C as G}from"./CopyButton-BlPQEoP3.js";import{c as $,a as he,S as ge,X as ue}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as be}from"./SiteHeader-Ch5fAKkA.js";import{S as X}from"./shield-check-C-qC9fhU.js";import{T as je}from"./terminal-CY2dKmaU.js";import{S as fe}from"./smartphone-DRYkbHrn.js";import{C as Ne}from"./chevron-down-DFKVs9n4.js";import{C as ye}from"./check-IxdpNvaC.js";const ve=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Z=$("earth",ve);const we=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],K=$("layers",we);const _e=[["path",{d:"M5 12h14",key:"1ays0h"}]],ke=$("minus",_e);const Ce=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Se=$("zap",Ce),U=[Se,K,X],D=["text-yellow-400","text-green-400","text-cyan-400"],R=[K,Z,X],Q=[je,fe,Z],Be=()=>{const{t}=W();he("titles.landing");const p=t("landing.badges",{returnObjects:!0})||[],m=t("landing.features",{returnObjects:!0})||[],n=t("landing.pipeline",{returnObjects:!0})||{},c=t("landing.ciQuickstart",{returnObjects:!0})||{},l=t("landing.guardrails",{returnObjects:!0})||{},o=n.inputs||{},i=n.outputs||{},g=o.files||[],I=i.files||[],d=t("landing.entryPoints",{returnObjects:!0})||{},h=d.items||[],x=t("landing.comparison",{returnObjects:!0})||{},_=x.columns||[],E=x.rows||[],ee=x.legend||{},b=t("landing.fit",{returnObjects:!0})||{},A=b.bestBullets||[],M=b.notBullets||[],L=t("landing.pricing",{returnObjects:!0})||{},u=t("landing.socialProof",{returnObjects:!0})||{},k=t("landing.faq.items",{returnObjects:!0})||[],z=t("landing.footer.links",{returnObjects:!0})||[],q=t("landing.hero.alt",{defaultValue:"ShipScreens preview"}),T=t("landing.hero.outputs",{returnObjects:!0})||[],N=t("landing.hero.cliQuickstart",{returnObjects:!0})||{},r=t("landing.hero.outputExample",{returnObjects:!0})||{},B=r.messageExamples||[],se=t("landing.hero.noLogin",{defaultValue:"No login required · Free forever"}),H=t("landing.hero.proUnlockNote",{defaultValue:""}),V=t("landing.hero.proPriceNote",{defaultValue:""}),te=t("landing.footer.copyright",{year:new Date().getFullYear()}),C=L.free||{},y=L.pro||{},j=L.cliProUnlock||{},ae="/app/?sample=5panel&entry_source=landing_open_app_header",le="/tools/agent-cli/?entry_source=landing_cli_quickstart",re="/tools/first-export/?entry_source=landing_first_export_hero",ne="/tools/first-export/?entry_source=landing_first_export_header",ce="/app/?sample=5panel&entry_source=landing_open_app_pricing_free",ie="/app/?sample=5panel&upgrade=1&entry_source=landing_go_pro_pricing",P="support@shimaumaservices.co.jp",oe=t("landing.partner.emailSubject",{defaultValue:"ShipScreens Founding / Design Partner"}),de=t("landing.partner.emailBody",{defaultValue:""}),xe=`mailto:${P}?subject=${encodeURIComponent(oe)}&body=${encodeURIComponent(de)}`,pe={"@context":"https://schema.org","@type":"SoftwareApplication",name:"ShipScreens",applicationCategory:"Multimedia",operatingSystem:"iOS, Android, Web",url:"https://shipscreens.com/",offers:{"@type":"Offer",priceCurrency:"USD",price:"19.00",availability:"https://schema.org/InStock"},description:t("landing.subheading"),provider:{"@type":"Organization",name:"ShipScreens",url:"https://shipscreens.com/"}},F=k.length>0?{"@context":"https://schema.org","@type":"FAQPage",mainEntity:k.map(s=>({"@type":"Question",name:s.q,acceptedAnswer:{"@type":"Answer",text:s.a}}))}:null;return Y.useEffect(()=>{S("landing_view",{path:typeof window<"u"?window.location.pathname:"/"})},[]),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(ge,{}),e.jsx(be,{variant:"dark",active:"home",openAppHref:ae,onToolsClick:s=>f(s,"landing_nav_click",{cta:"tools_header"}),onPricingClick:s=>f(s,"landing_nav_click",{cta:"pricing_header"}),onOpenAppClick:s=>f(s,"landing_nav_click",{cta:"open_app_header"}),primaryCta:{href:ne,label:t("landing.nav.primaryCta",{defaultValue:t("landing.nav.goPro")}),onClick:s=>f(s,"landing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-7xl mx-auto px-6 space-y-24 pb-24",children:[e.jsxs("section",{className:"grid md:grid-cols-[1fr_1.4fr] gap-8 items-start",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-blue-300 text-sm font-semibold tracking-[0.2em] uppercase",children:t("landing.tagline")}),e.jsx("h1",{className:"text-4xl md:text-5xl font-black leading-tight",children:t("landing.headline")}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:t("landing.subheading")}),t("landing.whoFor",{defaultValue:""})&&e.jsx("p",{className:"text-slate-400 text-sm",children:t("landing.whoFor")}),T.length>0&&e.jsx("ul",{className:"space-y-2 text-sm text-slate-200",children:T.map(s=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-2 w-2 h-2 rounded-full bg-blue-400 inline-block"}),e.jsx("span",{children:s})]},s))}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:re,onClick:s=>f(s,"landing_cta_click",{cta:"open_first_export_hero"}),className:"px-5 py-3 rounded-xl bg-blue-500 hover:bg-blue-600 font-bold flex items-center gap-2 transition",children:[t("landing.ctas.primary")," ",e.jsx(O,{size:16})]}),e.jsxs("a",{href:le,onClick:s=>f(s,"landing_cta_click",{cta:"agent_cli_hero"}),className:"px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold flex items-center gap-2 hover:bg-slate-900 transition",children:[t("landing.ctas.secondarySample")," ",e.jsx(O,{size:16})]})]}),e.jsx("p",{className:"text-xs text-slate-500 font-medium ml-1",children:se}),H&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:H}),V&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:V})]}),e.jsx("div",{className:"flex gap-6 text-sm text-slate-400",children:p.map((s,a)=>{const v=U[a%U.length],me=D[a%D.length];return e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(v,{size:16,className:me}),s]},`${s}-${a}`)})})]}),e.jsxs("div",{className:"rounded-2xl bg-slate-900/60 border border-slate-800 p-5 shadow-2xl space-y-3",children:[e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/60 overflow-hidden",children:e.jsxs("video",{className:"w-full h-auto block",autoPlay:!0,loop:!0,muted:!0,playsInline:!0,preload:"metadata",poster:"/app/assets/hero/demo-poster.jpg",children:[e.jsx("source",{src:"/app/assets/hero/demo.webm",type:"video/webm"}),e.jsx("source",{src:"/app/assets/hero/demo.mp4",type:"video/mp4"}),e.jsx("img",{src:"/app/assets/hero/demo-poster.jpg",alt:q,className:"w-full h-auto block"})]})}),N.code&&e.jsx(w,{label:N.label,code:N.code,defaultOpen:!1}),N.note&&e.jsx("p",{className:"text-xs text-slate-500",children:N.note})]})]}),r?.title&&e.jsxs("section",{id:"output-example",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:r.title}),r.desc&&e.jsx("p",{className:"text-slate-300",children:r.desc})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6 items-start",children:[e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[r.treeLabel&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:r.treeLabel}),r.tree&&e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:r.tree})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:["01","02","03","04"].map(s=>e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 overflow-hidden",children:e.jsx("img",{src:`/app/assets/proof/output-${s}.png`,alt:r.thumbAlt||q,loading:"lazy",className:"w-full h-auto object-cover"})},s))})]}),r.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:r.note}),B.length>0&&e.jsxs("div",{className:"space-y-3 max-w-5xl mx-auto",children:[r.messageExamplesTitle&&e.jsx("h3",{className:"text-xl font-bold text-center text-white",children:r.messageExamplesTitle}),r.messageExamplesLead&&e.jsx("p",{className:"text-sm text-slate-300 text-center",children:r.messageExamplesLead}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:B.map((s,a)=>e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3",children:[s.category&&e.jsx("div",{className:"text-xs font-semibold tracking-[0.12em] uppercase text-blue-200",children:s.category}),s.bad&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold",children:r.messageExamplesBadLabel||"Vague"}),e.jsxs("div",{className:"text-sm text-slate-300",children:['"',s.bad,'"']})]}),s.good&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold",children:r.messageExamplesGoodLabel||"Concrete"}),e.jsxs("div",{className:"text-sm text-white font-semibold",children:['"',s.good,'"']})]})]},`${s.category||"example"}-${a}`))})]})]}),n&&n.title&&e.jsxs("section",{id:"pipeline",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:n.title}),e.jsx("p",{className:"text-slate-300",children:n.subtitle})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:o.label}),e.jsx("h2",{className:"text-2xl font-bold",children:o.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:o.desc}),e.jsx("div",{className:"space-y-3",children:g.map((s,a)=>e.jsx(w,{label:s.label,code:s.code},s.label||a))})]}),e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:i.label}),e.jsx("h2",{className:"text-2xl font-bold",children:i.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:i.desc}),e.jsx("div",{className:"space-y-3",children:I.map((s,a)=>e.jsx(w,{label:s.label,code:s.code},s.label||a))}),i.note&&e.jsx("p",{className:"text-xs text-slate-500",children:i.note})]})]})]}),l?.title&&e.jsxs("section",{id:"guardrails",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:l.title}),l.subtitle&&e.jsx("p",{className:"text-slate-300",children:l.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:(l.items||[]).map((s,a)=>e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-3",children:[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.desc})]},s.title||a))}),l.example?.code&&e.jsxs("div",{className:"max-w-4xl mx-auto rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[l.example?.label&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:l.example.label}),e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:l.example.code})]}),l.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:l.note})]}),c&&c.title&&e.jsxs("section",{id:"ci-quickstart",className:"max-w-3xl mx-auto space-y-4",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:c.title}),c.desc&&e.jsx("p",{className:"text-slate-300",children:c.desc})]}),c.code&&e.jsx(w,{label:c.codeLabel,code:c.code}),c.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center",children:c.note})]}),h.length>0&&e.jsxs("section",{id:"entry-points",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:d.title}),e.jsx("p",{className:"text-slate-300",children:d.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:h.map((s,a)=>{const v=Q[a%Q.length];return e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center",children:e.jsx(v,{size:18})}),e.jsx("h3",{className:"text-lg font-bold text-white",children:s.title})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.desc}),s.code&&e.jsx(w,{label:s.codeLabel,code:s.code}),s.cta&&s.href&&e.jsxs("a",{href:s.href,className:"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors",children:[s.cta," ",e.jsx(O,{size:14})]})]},s.title||a)})})]}),e.jsx("section",{id:"problem",className:"grid md:grid-cols-3 gap-6",children:m.map((s,a)=>{const v=R[a%R.length];return e.jsx(Oe,{Icon:v,title:s.title,desc:s.desc},s.title||a)})}),x?.title&&_.length>0&&E.length>0&&e.jsxs("section",{id:"comparison",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:x.title}),x.subtitle&&e.jsx("p",{className:"text-slate-300",children:x.subtitle})]}),e.jsx($e,{columns:_,rows:E,legend:ee}),x.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:x.note})]}),b?.title&&(A.length>0||M.length>0)&&e.jsxs("section",{id:"fit",className:"space-y-6",children:[e.jsx("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:e.jsx("h2",{className:"text-3xl font-bold",children:b.title})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3",children:[e.jsx("div",{className:"text-lg font-bold text-emerald-200",children:b.bestTitle}),e.jsx("ul",{className:"text-sm text-slate-200 list-disc pl-5 space-y-2",children:A.map(s=>e.jsx("li",{children:s},s))})]}),e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3",children:[e.jsx("div",{className:"text-lg font-bold text-amber-200",children:b.notTitle}),e.jsx("ul",{className:"text-sm text-slate-200 list-disc pl-5 space-y-2",children:M.map(s=>e.jsx("li",{children:s},s))})]})]}),b.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:b.note})]}),u&&((u.items||[]).length>0||(u.badges||[]).length>0)&&e.jsxs("section",{id:"social-proof",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:u.title}),e.jsx("p",{className:"text-slate-300",children:u.caption})]}),(u.items||[]).length>0&&e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:u.items.map((s,a)=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 shadow-sm shadow-slate-900/40",children:[e.jsxs("p",{className:"text-slate-100 text-sm leading-relaxed mb-3",children:['"',s.quote,'"']}),e.jsxs("div",{className:"text-xs text-slate-400",children:[e.jsx("span",{className:"font-semibold text-slate-200",children:s.name})," · ",s.role]})]},`${s.name}-${a}`))}),(u.badges||[]).length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-3 text-[11px] text-slate-300",children:u.badges.map(s=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/70",children:s},s))})]}),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:t("landing.partner.title")}),e.jsx("div",{className:"text-sm text-slate-300 leading-relaxed",children:t("landing.partner.body")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:xe,onClick:()=>S("landing_cta_click",{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:[t("landing.partner.emailCta")," ",e.jsx(O,{size:16})]}),e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>S("landing_cta_click",{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:t("landing.partner.dmCta")})]}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t("landing.partner.emailLabel")," ",e.jsx("a",{href:`mailto:${P}`,className:"underline underline-offset-4 hover:text-white",children:P})]})]}),e.jsxs("section",{id:"pricing",className:"grid md:grid-cols-2 gap-6",children:[e.jsx(J,{title:C.title,price:C.price,bullets:C.bullets||[],cta:C.cta,href:ce,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(J,{title:y.title,price:y.price,bullets:y.bullets||[],cta:y.cta,href:ie,trackingCta:"go_pro_pricing",highlight:!0,badge:y.badge})]}),j?.cmd&&e.jsx("section",{className:"max-w-3xl mx-auto w-full",children:e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:j.title}),e.jsx("span",{className:"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full",children:"PRO"})]}),j.body&&e.jsx("p",{className:"text-sm text-slate-300",children:j.body}),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:j.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(G,{value:j.cmd,onCopied:()=>S("landing_cta_click",{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"})}),j.note&&e.jsx("div",{className:"text-xs text-slate-500",children:j.note})]})}),k.length>0&&e.jsxs("section",{id:"faq",className:"max-w-3xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:t("landing.faq.title")}),e.jsx("div",{className:"space-y-4",children:k.map((s,a)=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-xl p-6",children:[e.jsx("h3",{className:"font-semibold text-lg mb-2",children:s.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:s.a})]},`${s.q}-${a}`))})]})]}),e.jsxs("footer",{className:"border-t border-slate-800 bg-slate-950 py-12 mt-24",children:[e.jsxs("div",{className:"max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-start gap-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-500 text-sm",children:[e.jsx("div",{className:"w-7 h-7 rounded-lg border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png?v=3",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{children:te})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-8 text-sm text-slate-400",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:t("landing.footer.terms")}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:t("landing.footer.privacy")}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:t("landing.footer.legal")}),e.jsx("a",{href:"/llms.txt",className:"hover:text-white transition-colors",children:"LLMs"})]})]}),z.length>0&&e.jsx("div",{className:"max-w-6xl mx-auto px-6 mt-6 flex flex-wrap gap-4 text-xs text-slate-500",children:z.map(s=>e.jsx("a",{href:s.href,className:"hover:text-white transition-colors",children:s.label},s.label))})]}),e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(pe)}}),F&&e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(F)}})]})},Oe=({Icon:t,title:p,desc:m})=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 hover:border-slate-700 transition",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center mb-3",children:e.jsx(t,{})}),e.jsx("h3",{className:"text-lg font-bold mb-1",children:p}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:m})]}),$e=({columns:t,rows:p,legend:m})=>{const n={yes:m?.yes||"Yes",partial:m?.partial||"Partial",no:m?.no||"No"},c={yes:{Icon:ye,className:"text-emerald-300",label:n.yes},partial:{Icon:ke,className:"text-amber-300",label:n.partial},no:{Icon:ue,className:"text-slate-500",label:n.no}},l=d=>{const h=c[d]||c.partial,x=h.Icon;return e.jsxs("span",{className:`inline-flex items-center justify-center w-8 h-8 rounded-lg border border-slate-800 bg-slate-950/60 ${h.className}`,"aria-label":h.label,children:[e.jsx("span",{className:"sr-only",children:h.label}),e.jsx(x,{size:16})]})},o=Array.isArray(t)?t.filter(Boolean):[],i=o.length,g={gridTemplateColumns:`1.4fr repeat(${i||1}, minmax(0, 1fr))`},I=Math.max(640,320+i*180);return e.jsx("div",{className:"overflow-auto rounded-2xl border border-slate-800 bg-slate-900/40",children:e.jsxs("div",{style:{minWidth:I},children:[e.jsxs("div",{className:"grid gap-0 border-b border-slate-800",style:g,children:[e.jsxs("div",{className:"p-4 text-xs uppercase tracking-[0.2em] text-slate-500 font-semibold",children:[n.yes," / ",n.partial," / ",n.no]}),o.map(d=>e.jsx("div",{className:"p-4 text-sm font-bold text-white text-center border-l border-slate-800",children:d},d))]}),(p||[]).map((d,h)=>e.jsxs("div",{className:`grid gap-0 ${h===p.length-1?"":"border-b border-slate-800"}`,style:g,children:[e.jsx("div",{className:"p-4 text-sm text-slate-200",children:e.jsx("div",{className:"font-semibold text-white",children:d.label})}),(d.values||[]).slice(0,i).map((x,_)=>e.jsx("div",{className:"p-4 flex items-center justify-center border-l border-slate-800",children:l(x)},`${d.label}-${_}`))]},`${d.label}-${h}`))]})})},J=({title:t,price:p,bullets:m,cta:n,href:c,trackingCta:l,highlight:o,badge:i})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${o?"border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20":"border-slate-800 bg-slate-900/60"} flex flex-col gap-4`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xl font-bold",children:t}),o&&i&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:i})]}),e.jsx("div",{className:"text-3xl font-black",children:p}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:m.map(g=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-blue-400 inline-block"}),g]},g))}),e.jsx("a",{href:c,onClick:g=>l?f(g,"landing_cta_click",{cta:l}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${o?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:n})]}),w=({label:t,code:p,defaultOpen:m})=>{const{t:n}=W(),[c,l]=Y.useState(()=>typeof m=="boolean"?m:typeof window>"u"?!0:window.matchMedia("(min-width: 640px)").matches);if(!p)return null;const o=n("common.showCommands",{defaultValue:"Show commands"});return e.jsxs("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-2",children:[e.jsx("div",{className:"min-w-0",children:t&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:t})}),e.jsx(G,{value:p,className:"shrink-0 text-[11px] px-2 py-1 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition disabled:opacity-50 disabled:cursor-not-allowed"})]}),e.jsxs("details",{className:"group",open:c,onToggle:i=>l(i.currentTarget.open),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:o}),e.jsx(Ne,{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:p})]})]})};export{Be as default};
2
- //# sourceMappingURL=Landing-Vxx4PfE4.js.map
1
+ import{u as W,r as Y,t as S,j as e,b as f}from"./index-Bffw9flM.js";import{A as O,C as G}from"./CopyButton-BZQEBHBq.js";import{c as I,a as he,S as ge,X as ue}from"./LanguageSwitcher-CfUhVVuT.js";import{S as be}from"./SiteHeader-BGQW06JF.js";import{S as X}from"./shield-check-DXqKmrPT.js";import{T as je}from"./terminal-CT_KE008.js";import{S as fe}from"./smartphone-Cjrk_YxV.js";import{C as Ne}from"./chevron-down-DVRa-y8D.js";import{C as ye}from"./check-BaiZ7vYg.js";const ve=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Z=I("earth",ve);const we=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],K=I("layers",we);const _e=[["path",{d:"M5 12h14",key:"1ays0h"}]],ke=I("minus",_e);const Ce=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Se=I("zap",Ce),U=[Se,K,X],D=["text-yellow-400","text-green-400","text-cyan-400"],R=[K,Z,X],Q=[je,fe,Z],Be=()=>{const{t}=W();he("titles.landing");const p=t("landing.badges",{returnObjects:!0})||[],m=t("landing.features",{returnObjects:!0})||[],n=t("landing.pipeline",{returnObjects:!0})||{},c=t("landing.ciQuickstart",{returnObjects:!0})||{},l=t("landing.guardrails",{returnObjects:!0})||{},o=n.inputs||{},i=n.outputs||{},g=o.files||[],$=i.files||[],d=t("landing.entryPoints",{returnObjects:!0})||{},h=d.items||[],x=t("landing.comparison",{returnObjects:!0})||{},_=x.columns||[],A=x.rows||[],ee=x.legend||{},b=t("landing.fit",{returnObjects:!0})||{},E=b.bestBullets||[],M=b.notBullets||[],L=t("landing.pricing",{returnObjects:!0})||{},u=t("landing.socialProof",{returnObjects:!0})||{},k=t("landing.faq.items",{returnObjects:!0})||[],z=t("landing.footer.links",{returnObjects:!0})||[],q=t("landing.hero.alt",{defaultValue:"ShipScreens preview"}),T=t("landing.hero.outputs",{returnObjects:!0})||[],N=t("landing.hero.cliQuickstart",{returnObjects:!0})||{},r=t("landing.hero.outputExample",{returnObjects:!0})||{},B=r.messageExamples||[],se=t("landing.hero.noLogin",{defaultValue:"No login required · Free forever"}),H=t("landing.hero.proUnlockNote",{defaultValue:""}),V=t("landing.hero.proPriceNote",{defaultValue:""}),te=t("landing.footer.copyright",{year:new Date().getFullYear()}),C=L.free||{},y=L.pro||{},j=L.cliProUnlock||{},ae="/app/?sample=5panel&entry_source=landing_open_app_header",le="/tools/agent-cli/?entry_source=landing_cli_quickstart",re="/tools/first-export/?entry_source=landing_first_export_hero",ne="/tools/first-export/?entry_source=landing_first_export_header",ce="/app/?sample=5panel&entry_source=landing_open_app_pricing_free",ie="/app/?sample=5panel&upgrade=1&entry_source=landing_go_pro_pricing",P="support@shimaumaservices.co.jp",oe=t("landing.partner.emailSubject",{defaultValue:"ShipScreens Founding / Design Partner"}),de=t("landing.partner.emailBody",{defaultValue:""}),xe=`mailto:${P}?subject=${encodeURIComponent(oe)}&body=${encodeURIComponent(de)}`,pe={"@context":"https://schema.org","@type":"SoftwareApplication",name:"ShipScreens",applicationCategory:"Multimedia",operatingSystem:"iOS, Android, Web",url:"https://shipscreens.com/",offers:{"@type":"Offer",priceCurrency:"USD",price:"19.00",availability:"https://schema.org/InStock"},description:t("landing.subheading"),provider:{"@type":"Organization",name:"ShipScreens",url:"https://shipscreens.com/"}},F=k.length>0?{"@context":"https://schema.org","@type":"FAQPage",mainEntity:k.map(s=>({"@type":"Question",name:s.q,acceptedAnswer:{"@type":"Answer",text:s.a}}))}:null;return Y.useEffect(()=>{S("landing_view",{path:typeof window<"u"?window.location.pathname:"/"})},[]),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(ge,{}),e.jsx(be,{variant:"dark",active:"home",openAppHref:ae,onToolsClick:s=>f(s,"landing_nav_click",{cta:"tools_header"}),onPricingClick:s=>f(s,"landing_nav_click",{cta:"pricing_header"}),onOpenAppClick:s=>f(s,"landing_nav_click",{cta:"open_app_header"}),primaryCta:{href:ne,label:t("landing.nav.primaryCta",{defaultValue:t("landing.nav.goPro")}),onClick:s=>f(s,"landing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-7xl mx-auto px-6 space-y-24 pb-24",children:[e.jsxs("section",{className:"grid md:grid-cols-[1fr_1.4fr] gap-8 items-start",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-blue-300 text-sm font-semibold tracking-[0.2em] uppercase",children:t("landing.tagline")}),e.jsx("h1",{className:"text-4xl md:text-5xl font-black leading-tight",children:t("landing.headline")}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:t("landing.subheading")}),t("landing.whoFor",{defaultValue:""})&&e.jsx("p",{className:"text-slate-400 text-sm",children:t("landing.whoFor")}),T.length>0&&e.jsx("ul",{className:"space-y-2 text-sm text-slate-200",children:T.map(s=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-2 w-2 h-2 rounded-full bg-blue-400 inline-block"}),e.jsx("span",{children:s})]},s))}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:re,onClick:s=>f(s,"landing_cta_click",{cta:"open_first_export_hero"}),className:"px-5 py-3 rounded-xl bg-blue-500 hover:bg-blue-600 font-bold flex items-center gap-2 transition",children:[t("landing.ctas.primary")," ",e.jsx(O,{size:16})]}),e.jsxs("a",{href:le,onClick:s=>f(s,"landing_cta_click",{cta:"agent_cli_hero"}),className:"px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold flex items-center gap-2 hover:bg-slate-900 transition",children:[t("landing.ctas.secondarySample")," ",e.jsx(O,{size:16})]})]}),e.jsx("p",{className:"text-xs text-slate-500 font-medium ml-1",children:se}),H&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:H}),V&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:V})]}),e.jsx("div",{className:"flex gap-6 text-sm text-slate-400",children:p.map((s,a)=>{const v=U[a%U.length],me=D[a%D.length];return e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(v,{size:16,className:me}),s]},`${s}-${a}`)})})]}),e.jsxs("div",{className:"rounded-2xl bg-slate-900/60 border border-slate-800 p-5 shadow-2xl space-y-3",children:[e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/60 overflow-hidden",children:e.jsxs("video",{className:"w-full h-auto block",autoPlay:!0,loop:!0,muted:!0,playsInline:!0,preload:"metadata",poster:"/app/assets/hero/demo-poster.jpg",children:[e.jsx("source",{src:"/app/assets/hero/demo.webm",type:"video/webm"}),e.jsx("source",{src:"/app/assets/hero/demo.mp4",type:"video/mp4"}),e.jsx("img",{src:"/app/assets/hero/demo-poster.jpg",alt:q,className:"w-full h-auto block"})]})}),N.code&&e.jsx(w,{label:N.label,code:N.code,defaultOpen:!1}),N.note&&e.jsx("p",{className:"text-xs text-slate-500",children:N.note})]})]}),r?.title&&e.jsxs("section",{id:"output-example",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:r.title}),r.desc&&e.jsx("p",{className:"text-slate-300",children:r.desc})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6 items-start",children:[e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[r.treeLabel&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:r.treeLabel}),r.tree&&e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:r.tree})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:["01","02","03","04"].map(s=>e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 overflow-hidden",children:e.jsx("img",{src:`/app/assets/proof/output-${s}.png`,alt:r.thumbAlt||q,loading:"lazy",className:"w-full h-auto object-cover"})},s))})]}),r.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:r.note}),B.length>0&&e.jsxs("div",{className:"space-y-3 max-w-5xl mx-auto",children:[r.messageExamplesTitle&&e.jsx("h3",{className:"text-xl font-bold text-center text-white",children:r.messageExamplesTitle}),r.messageExamplesLead&&e.jsx("p",{className:"text-sm text-slate-300 text-center",children:r.messageExamplesLead}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:B.map((s,a)=>e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3",children:[s.category&&e.jsx("div",{className:"text-xs font-semibold tracking-[0.12em] uppercase text-blue-200",children:s.category}),s.bad&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold",children:r.messageExamplesBadLabel||"Vague"}),e.jsxs("div",{className:"text-sm text-slate-300",children:['"',s.bad,'"']})]}),s.good&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold",children:r.messageExamplesGoodLabel||"Concrete"}),e.jsxs("div",{className:"text-sm text-white font-semibold",children:['"',s.good,'"']})]})]},`${s.category||"example"}-${a}`))})]})]}),n&&n.title&&e.jsxs("section",{id:"pipeline",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:n.title}),e.jsx("p",{className:"text-slate-300",children:n.subtitle})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:o.label}),e.jsx("h2",{className:"text-2xl font-bold",children:o.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:o.desc}),e.jsx("div",{className:"space-y-3",children:g.map((s,a)=>e.jsx(w,{label:s.label,code:s.code},s.label||a))})]}),e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:i.label}),e.jsx("h2",{className:"text-2xl font-bold",children:i.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:i.desc}),e.jsx("div",{className:"space-y-3",children:$.map((s,a)=>e.jsx(w,{label:s.label,code:s.code},s.label||a))}),i.note&&e.jsx("p",{className:"text-xs text-slate-500",children:i.note})]})]})]}),l?.title&&e.jsxs("section",{id:"guardrails",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:l.title}),l.subtitle&&e.jsx("p",{className:"text-slate-300",children:l.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:(l.items||[]).map((s,a)=>e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-3",children:[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.desc})]},s.title||a))}),l.example?.code&&e.jsxs("div",{className:"max-w-4xl mx-auto rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[l.example?.label&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:l.example.label}),e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:l.example.code})]}),l.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:l.note})]}),c&&c.title&&e.jsxs("section",{id:"ci-quickstart",className:"max-w-3xl mx-auto space-y-4",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:c.title}),c.desc&&e.jsx("p",{className:"text-slate-300",children:c.desc})]}),c.code&&e.jsx(w,{label:c.codeLabel,code:c.code}),c.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center",children:c.note})]}),h.length>0&&e.jsxs("section",{id:"entry-points",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:d.title}),e.jsx("p",{className:"text-slate-300",children:d.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:h.map((s,a)=>{const v=Q[a%Q.length];return e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center",children:e.jsx(v,{size:18})}),e.jsx("h3",{className:"text-lg font-bold text-white",children:s.title})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.desc}),s.code&&e.jsx(w,{label:s.codeLabel,code:s.code}),s.cta&&s.href&&e.jsxs("a",{href:s.href,className:"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors",children:[s.cta," ",e.jsx(O,{size:14})]})]},s.title||a)})})]}),e.jsx("section",{id:"problem",className:"grid md:grid-cols-3 gap-6",children:m.map((s,a)=>{const v=R[a%R.length];return e.jsx(Oe,{Icon:v,title:s.title,desc:s.desc},s.title||a)})}),x?.title&&_.length>0&&A.length>0&&e.jsxs("section",{id:"comparison",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:x.title}),x.subtitle&&e.jsx("p",{className:"text-slate-300",children:x.subtitle})]}),e.jsx(Ie,{columns:_,rows:A,legend:ee}),x.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:x.note})]}),b?.title&&(E.length>0||M.length>0)&&e.jsxs("section",{id:"fit",className:"space-y-6",children:[e.jsx("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:e.jsx("h2",{className:"text-3xl font-bold",children:b.title})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3",children:[e.jsx("div",{className:"text-lg font-bold text-emerald-200",children:b.bestTitle}),e.jsx("ul",{className:"text-sm text-slate-200 list-disc pl-5 space-y-2",children:E.map(s=>e.jsx("li",{children:s},s))})]}),e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3",children:[e.jsx("div",{className:"text-lg font-bold text-amber-200",children:b.notTitle}),e.jsx("ul",{className:"text-sm text-slate-200 list-disc pl-5 space-y-2",children:M.map(s=>e.jsx("li",{children:s},s))})]})]}),b.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:b.note})]}),u&&((u.items||[]).length>0||(u.badges||[]).length>0)&&e.jsxs("section",{id:"social-proof",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:u.title}),e.jsx("p",{className:"text-slate-300",children:u.caption})]}),(u.items||[]).length>0&&e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:u.items.map((s,a)=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 shadow-sm shadow-slate-900/40",children:[e.jsxs("p",{className:"text-slate-100 text-sm leading-relaxed mb-3",children:['"',s.quote,'"']}),e.jsxs("div",{className:"text-xs text-slate-400",children:[e.jsx("span",{className:"font-semibold text-slate-200",children:s.name})," · ",s.role]})]},`${s.name}-${a}`))}),(u.badges||[]).length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-3 text-[11px] text-slate-300",children:u.badges.map(s=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/70",children:s},s))})]}),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:t("landing.partner.title")}),e.jsx("div",{className:"text-sm text-slate-300 leading-relaxed",children:t("landing.partner.body")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:xe,onClick:()=>S("landing_cta_click",{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:[t("landing.partner.emailCta")," ",e.jsx(O,{size:16})]}),e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>S("landing_cta_click",{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:t("landing.partner.dmCta")})]}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t("landing.partner.emailLabel")," ",e.jsx("a",{href:`mailto:${P}`,className:"underline underline-offset-4 hover:text-white",children:P})]})]}),e.jsxs("section",{id:"pricing",className:"grid md:grid-cols-2 gap-6",children:[e.jsx(J,{title:C.title,price:C.price,bullets:C.bullets||[],cta:C.cta,href:ce,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(J,{title:y.title,price:y.price,bullets:y.bullets||[],cta:y.cta,href:ie,trackingCta:"go_pro_pricing",highlight:!0,badge:y.badge})]}),j?.cmd&&e.jsx("section",{className:"max-w-3xl mx-auto w-full",children:e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:j.title}),e.jsx("span",{className:"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full",children:"PRO"})]}),j.body&&e.jsx("p",{className:"text-sm text-slate-300",children:j.body}),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:j.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(G,{value:j.cmd,onCopied:()=>S("landing_cta_click",{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"})}),j.note&&e.jsx("div",{className:"text-xs text-slate-500",children:j.note})]})}),k.length>0&&e.jsxs("section",{id:"faq",className:"max-w-3xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:t("landing.faq.title")}),e.jsx("div",{className:"space-y-4",children:k.map((s,a)=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-xl p-6",children:[e.jsx("h3",{className:"font-semibold text-lg mb-2",children:s.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:s.a})]},`${s.q}-${a}`))})]})]}),e.jsxs("footer",{className:"border-t border-slate-800 bg-slate-950 py-12 mt-24",children:[e.jsxs("div",{className:"max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-start gap-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-500 text-sm",children:[e.jsx("div",{className:"w-7 h-7 rounded-lg border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png?v=3",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{children:te})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-8 text-sm text-slate-400",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:t("landing.footer.terms")}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:t("landing.footer.privacy")}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:t("landing.footer.legal")}),e.jsx("a",{href:"/llms.txt",className:"hover:text-white transition-colors",children:"LLMs"}),e.jsx("a",{href:"/ai-agents.json",className:"hover:text-white transition-colors",children:"AI Agents JSON"}),e.jsx("a",{href:"/mcp-server.json",className:"hover:text-white transition-colors",children:"MCP Server JSON"})]})]}),z.length>0&&e.jsx("div",{className:"max-w-6xl mx-auto px-6 mt-6 flex flex-wrap gap-4 text-xs text-slate-500",children:z.map(s=>e.jsx("a",{href:s.href,className:"hover:text-white transition-colors",children:s.label},s.label))})]}),e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(pe)}}),F&&e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(F)}})]})},Oe=({Icon:t,title:p,desc:m})=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 hover:border-slate-700 transition",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center mb-3",children:e.jsx(t,{})}),e.jsx("h3",{className:"text-lg font-bold mb-1",children:p}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:m})]}),Ie=({columns:t,rows:p,legend:m})=>{const n={yes:m?.yes||"Yes",partial:m?.partial||"Partial",no:m?.no||"No"},c={yes:{Icon:ye,className:"text-emerald-300",label:n.yes},partial:{Icon:ke,className:"text-amber-300",label:n.partial},no:{Icon:ue,className:"text-slate-500",label:n.no}},l=d=>{const h=c[d]||c.partial,x=h.Icon;return e.jsxs("span",{className:`inline-flex items-center justify-center w-8 h-8 rounded-lg border border-slate-800 bg-slate-950/60 ${h.className}`,"aria-label":h.label,children:[e.jsx("span",{className:"sr-only",children:h.label}),e.jsx(x,{size:16})]})},o=Array.isArray(t)?t.filter(Boolean):[],i=o.length,g={gridTemplateColumns:`1.4fr repeat(${i||1}, minmax(0, 1fr))`},$=Math.max(640,320+i*180);return e.jsx("div",{className:"overflow-auto rounded-2xl border border-slate-800 bg-slate-900/40",children:e.jsxs("div",{style:{minWidth:$},children:[e.jsxs("div",{className:"grid gap-0 border-b border-slate-800",style:g,children:[e.jsxs("div",{className:"p-4 text-xs uppercase tracking-[0.2em] text-slate-500 font-semibold",children:[n.yes," / ",n.partial," / ",n.no]}),o.map(d=>e.jsx("div",{className:"p-4 text-sm font-bold text-white text-center border-l border-slate-800",children:d},d))]}),(p||[]).map((d,h)=>e.jsxs("div",{className:`grid gap-0 ${h===p.length-1?"":"border-b border-slate-800"}`,style:g,children:[e.jsx("div",{className:"p-4 text-sm text-slate-200",children:e.jsx("div",{className:"font-semibold text-white",children:d.label})}),(d.values||[]).slice(0,i).map((x,_)=>e.jsx("div",{className:"p-4 flex items-center justify-center border-l border-slate-800",children:l(x)},`${d.label}-${_}`))]},`${d.label}-${h}`))]})})},J=({title:t,price:p,bullets:m,cta:n,href:c,trackingCta:l,highlight:o,badge:i})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${o?"border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20":"border-slate-800 bg-slate-900/60"} flex flex-col gap-4`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xl font-bold",children:t}),o&&i&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:i})]}),e.jsx("div",{className:"text-3xl font-black",children:p}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:m.map(g=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-blue-400 inline-block"}),g]},g))}),e.jsx("a",{href:c,onClick:g=>l?f(g,"landing_cta_click",{cta:l}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${o?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:n})]}),w=({label:t,code:p,defaultOpen:m})=>{const{t:n}=W(),[c,l]=Y.useState(()=>typeof m=="boolean"?m:typeof window>"u"?!0:window.matchMedia("(min-width: 640px)").matches);if(!p)return null;const o=n("common.showCommands",{defaultValue:"Show commands"});return e.jsxs("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-2",children:[e.jsx("div",{className:"min-w-0",children:t&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:t})}),e.jsx(G,{value:p,className:"shrink-0 text-[11px] px-2 py-1 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition disabled:opacity-50 disabled:cursor-not-allowed"})]}),e.jsxs("details",{className:"group",open:c,onToggle:i=>l(i.currentTarget.open),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:o}),e.jsx(Ne,{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:p})]})]})};export{Be as default};
2
+ //# sourceMappingURL=Landing-DB9pTPoT.js.map