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,2 +1,2 @@
1
- import{u as C,r as k,t as g,j as e,b as a}from"./index-C4xM6WAU.js";import{A as i,C as P}from"./CopyButton-BlPQEoP3.js";import{F as T}from"./FitPanel-Fp4iPZxf.js";import{a as I,S}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as A}from"./SiteHeader-Ch5fAKkA.js";import{S as B}from"./shield-check-C-qC9fhU.js";import{C as q}from"./copy-BnUx1vxq.js";import{T as z}from"./terminal-CY2dKmaU.js";import{C as L}from"./check-IxdpNvaC.js";const F=o=>(o||"").split("-")[0]==="ja"?"ja":"en",b={en:{badge:"Pricing",title:"Pricing",subtitle:"Start free and prove the first export. Upgrade when device x locale reruns, CI handoff, and no-watermark outputs become release blockers.",valueBullets:["Deterministic screenshot reruns","Reproducible exports (dir + ZIP)","Verify + stage upload guardrails"],proNoteTitle:"Pro = production workflow",proNoteBody:"Pro is for release-time reliability: full matrix reruns, copy import, and clean upload roots when shipping frequent updates.",faqTitle:"FAQ",trustTitle:"Privacy-first",trustBody:"Rendering/export runs locally (browser or CI runner). Base screenshots are not uploaded to ShipScreens; use verify/stage before store upload.",expansionTitle:"Need Team / Agency or annual billing?",expansionBody:"These options are available on request. Contact us if Free/Pro does not fit your workflow.",expansionTeamCta:"Team / Agency inquiry",expansionAnnualCta:"Annual billing inquiry",ctas:{primary:"Get first export (5 min)",directPro:"Go Pro now",secondary:"Run CLI quickstart"},footer:{terms:"Terms",privacy:"Privacy",legal:"Legal (Japan)"}},ja:{badge:"料金",title:"料金",subtitle:"まずは無料で初回エクスポートを通し、端末×言語の再実行・CI連携・透かし解除がリリース課題になったタイミングでProへ。",valueBullets:["決定的に再実行できるスクショ運用","再現性のある出力(dir + ZIP)","verify + stage 提出前ガードレール"],proNoteTitle:"Pro = 本番運用",proNoteBody:"Proは本番の再実行性向けです。フル一括、copy運用、提出ルートの安定化を毎リリースで回せます。",faqTitle:"FAQ",trustTitle:"プライバシー",trustBody:"レンダリング/出力はローカル(ブラウザ/CI)で完結。元スクショはShipScreensへアップロードされません。提出前は verify/stage で確認。",expansionTitle:"Team / Agency・年額が必要ですか?",expansionBody:"Free/Proで合わない運用は個別対応します。必要条件だけメールで共有ください。",expansionTeamCta:"Team / Agency相談",expansionAnnualCta:"年額相談",ctas:{primary:"初回エクスポート(5分)",directPro:"今すぐProへ",secondary:"CLIクイックスタート"},footer:{terms:"利用規約",privacy:"プライバシー",legal:"特商法表記"}}},M=()=>{const{i18n:o,t:x}=C(),d=F(o.resolvedLanguage||o.language),s=b[d]||b.en;I("titles.pricing",{defaultValue:s.title});const p=x("landing.pricing",{returnObjects:!0})||{},n=p.free||{},r=p.pro||{},l=p.cliProUnlock||{},c=x("landing.faq.items",{returnObjects:!0})||[],y="/app/?sample=5panel&entry_source=pricing_open_app_header",m="/tools/first-export/?entry_source=pricing_preview",u="/tools/agent-cli/?entry_source=pricing_cli_quickstart",N="/app/?sample=5panel&entry_source=pricing_open_app_free",f="/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro",h="support@shimaumaservices.co.jp",_=`mailto:${h}?subject=${encodeURIComponent("ShipScreens Team/Agency plan")}`,v=`mailto:${h}?subject=${encodeURIComponent("ShipScreens annual billing")}`;return k.useEffect(()=>{g("pricing_view",{path:typeof window<"u"?window.location.pathname:"/pricing"})},[]),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(S,{}),e.jsx(A,{variant:"dark",active:"pricing",openAppHref:y,onToolsClick:t=>a(t,"pricing_nav_click",{cta:"tools_header"}),onPricingClick:t=>a(t,"pricing_nav_click",{cta:"pricing_header"}),onOpenAppClick:t=>a(t,"pricing_nav_click",{cta:"open_app_header"}),primaryCta:{href:m,label:x("landing.nav.primaryCta",{defaultValue:s.ctas.primary}),onClick:t=>a(t,"pricing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-6xl mx-auto px-6 pb-24 space-y-14",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4 pt-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold",children:[e.jsx(B,{size:14}),s.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:s.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:s.subtitle}),s.valueBullets?.length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-2 text-xs text-slate-400",children:s.valueBullets.map(t=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60",children:t},t))}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:e.jsxs("a",{href:m,onClick:t=>a(t,"pricing_cta_click",{cta:"first_export_hero"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition",children:[s.ctas.primary," ",e.jsx(i,{size:16})]})}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-sm",children:[e.jsxs("a",{href:f,onClick:t=>a(t,"pricing_cta_click",{cta:"go_pro_hero"}),className:"inline-flex items-center gap-1 text-slate-200 hover:text-white underline underline-offset-4",children:[s.ctas.directPro," ",e.jsx(i,{size:14})]}),e.jsx("span",{className:"text-slate-600","aria-hidden":!0,children:"|"}),e.jsxs("a",{href:u,onClick:t=>a(t,"pricing_cta_click",{cta:"agent_cli_hero_link"}),className:"inline-flex items-center gap-1 text-blue-200 hover:text-blue-100 underline underline-offset-4",children:[s.ctas.secondary," ",e.jsx(i,{size:14})]})]})]}),e.jsxs("section",{className:"grid md:grid-cols-2 gap-6",children:[e.jsx(j,{title:n.title,price:n.price,bullets:n.bullets||[],cta:n.cta,href:N,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(j,{title:r.title,price:r.price,bullets:r.bullets||[],cta:r.cta,href:f,trackingCta:"go_pro_pricing",highlight:!0,badge:r.badge})]}),e.jsx(T,{className:"max-w-4xl mx-auto w-full"}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.proNoteTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.proNoteBody}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsxs("a",{href:m,onClick:t=>a(t,"pricing_cta_click",{cta:"first_export_pro_note"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold",children:[s.ctas.primary," ",e.jsx(i,{size:16})]})}),e.jsxs("a",{href:u,onClick:t=>a(t,"pricing_cta_click",{cta:"agent_cli_pro_note_link"}),className:"inline-flex items-center gap-1 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4",children:[s.ctas.secondary," ",e.jsx(i,{size:14})]})]}),l?.cmd&&e.jsx("section",{className:"max-w-4xl 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:l.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"})]}),l.body&&e.jsx("p",{className:"text-sm text-slate-300",children:l.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:l.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(P,{value:l.cmd,onCopied:()=>g("pricing_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",children:({copyLabel:t})=>e.jsxs(e.Fragment,{children:[e.jsx(q,{size:14}),t]})})}),l.note&&e.jsx("div",{className:"text-xs text-slate-500",children:l.note})]})}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.trustTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.trustBody}),e.jsxs("div",{className:"flex items-start gap-3 text-sm text-slate-200",children:[e.jsx("div",{className:"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center",children:e.jsx(z,{size:16,className:"text-blue-300"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"font-semibold text-white",children:d==="ja"?"CLI/CIで回せる":"CI-friendly CLI"}),e.jsx("div",{className:"text-slate-300",children:d==="ja"?"non-interactive な CLI で、毎リリースの更新をビルドステップにできます。":"Non-interactive CLI runs locally or in CI, so screenshot updates become a build step."})]})]})]}),e.jsxs("section",{className:"max-w-4xl mx-auto space-y-2 text-center",children:[e.jsx("h2",{className:"text-sm font-semibold text-slate-200",children:s.expansionTitle}),e.jsx("p",{className:"text-xs text-slate-500",children:s.expansionBody}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4 text-xs",children:[e.jsxs("a",{href:_,onClick:t=>a(t,"pricing_cta_click",{cta:"team_contact_compact"}),className:"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4",children:[s.expansionTeamCta," ",e.jsx(i,{size:14})]}),e.jsxs("a",{href:v,onClick:t=>a(t,"pricing_cta_click",{cta:"annual_contact_compact"}),className:"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4",children:[s.expansionAnnualCta," ",e.jsx(i,{size:14})]})]})]}),c.length>0&&e.jsxs("section",{className:"max-w-4xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:s.faqTitle}),e.jsx("div",{className:"space-y-4",children:c.map((t,w)=>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:t.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:t.a})]},`${t.q}-${w}`))})]}),e.jsxs("footer",{className:"border-t border-slate-800 pt-10 text-center text-sm text-slate-400",children:[e.jsxs("div",{className:"flex flex-wrap justify-center gap-6",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:s.footer.terms}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:s.footer.privacy}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:s.footer.legal})]}),e.jsxs("div",{className:"mt-4 text-xs text-slate-600",children:["© ",new Date().getFullYear()," ShipScreens"]})]})]})]})},j=({title:o,price:x,bullets:d,cta:s,href:p,trackingCta:n,highlight:r,badge:l})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${r?"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 gap-3",children:[e.jsx("h3",{className:"text-xl font-bold",children:o}),r&&l&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:l})]}),e.jsx("div",{className:"text-3xl font-black",children:x}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:(d||[]).map(c=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(L,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:c})]},c))}),e.jsxs("a",{href:p,onClick:c=>n?a(c,"pricing_cta_click",{cta:n}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${r?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:[s," ",e.jsx(i,{size:16,className:"ml-2"})]})]});export{M as default};
2
- //# sourceMappingURL=Pricing-CGZnCST5.js.map
1
+ import{u as C,r as k,t as g,j as e,b as a}from"./index-Bffw9flM.js";import{A as i,C as P}from"./CopyButton-BZQEBHBq.js";import{F as T}from"./FitPanel-DzYzTMEi.js";import{a as I,S}from"./LanguageSwitcher-CfUhVVuT.js";import{S as A}from"./SiteHeader-BGQW06JF.js";import{S as B}from"./shield-check-DXqKmrPT.js";import{C as q}from"./copy-B9y2mtjd.js";import{T as z}from"./terminal-CT_KE008.js";import{C as L}from"./check-BaiZ7vYg.js";const F=o=>(o||"").split("-")[0]==="ja"?"ja":"en",b={en:{badge:"Pricing",title:"Pricing",subtitle:"Start free and prove the first export. Upgrade when device x locale reruns, CI handoff, and no-watermark outputs become release blockers.",valueBullets:["Deterministic screenshot reruns","Reproducible exports (dir + ZIP)","Verify + stage upload guardrails"],proNoteTitle:"Pro = production workflow",proNoteBody:"Pro is for release-time reliability: full matrix reruns, copy import, and clean upload roots when shipping frequent updates.",faqTitle:"FAQ",trustTitle:"Privacy-first",trustBody:"Rendering/export runs locally (browser or CI runner). Base screenshots are not uploaded to ShipScreens; use verify/stage before store upload.",expansionTitle:"Need Team / Agency or annual billing?",expansionBody:"These options are available on request. Contact us if Free/Pro does not fit your workflow.",expansionTeamCta:"Team / Agency inquiry",expansionAnnualCta:"Annual billing inquiry",ctas:{primary:"Get first export (5 min)",directPro:"Go Pro now",secondary:"Run CLI quickstart"},footer:{terms:"Terms",privacy:"Privacy",legal:"Legal (Japan)"}},ja:{badge:"料金",title:"料金",subtitle:"まずは無料で初回エクスポートを通し、端末×言語の再実行・CI連携・透かし解除がリリース課題になったタイミングでProへ。",valueBullets:["決定的に再実行できるスクショ運用","再現性のある出力(dir + ZIP)","verify + stage 提出前ガードレール"],proNoteTitle:"Pro = 本番運用",proNoteBody:"Proは本番の再実行性向けです。フル一括、copy運用、提出ルートの安定化を毎リリースで回せます。",faqTitle:"FAQ",trustTitle:"プライバシー",trustBody:"レンダリング/出力はローカル(ブラウザ/CI)で完結。元スクショはShipScreensへアップロードされません。提出前は verify/stage で確認。",expansionTitle:"Team / Agency・年額が必要ですか?",expansionBody:"Free/Proで合わない運用は個別対応します。必要条件だけメールで共有ください。",expansionTeamCta:"Team / Agency相談",expansionAnnualCta:"年額相談",ctas:{primary:"初回エクスポート(5分)",directPro:"今すぐProへ",secondary:"CLIクイックスタート"},footer:{terms:"利用規約",privacy:"プライバシー",legal:"特商法表記"}}},M=()=>{const{i18n:o,t:x}=C(),d=F(o.resolvedLanguage||o.language),s=b[d]||b.en;I("titles.pricing",{defaultValue:s.title});const p=x("landing.pricing",{returnObjects:!0})||{},n=p.free||{},r=p.pro||{},l=p.cliProUnlock||{},c=x("landing.faq.items",{returnObjects:!0})||[],y="/app/?sample=5panel&entry_source=pricing_open_app_header",m="/tools/first-export/?entry_source=pricing_preview",u="/tools/agent-cli/?entry_source=pricing_cli_quickstart",N="/app/?sample=5panel&entry_source=pricing_open_app_free",f="/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro",h="support@shimaumaservices.co.jp",_=`mailto:${h}?subject=${encodeURIComponent("ShipScreens Team/Agency plan")}`,v=`mailto:${h}?subject=${encodeURIComponent("ShipScreens annual billing")}`;return k.useEffect(()=>{g("pricing_view",{path:typeof window<"u"?window.location.pathname:"/pricing"})},[]),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(S,{}),e.jsx(A,{variant:"dark",active:"pricing",openAppHref:y,onToolsClick:t=>a(t,"pricing_nav_click",{cta:"tools_header"}),onPricingClick:t=>a(t,"pricing_nav_click",{cta:"pricing_header"}),onOpenAppClick:t=>a(t,"pricing_nav_click",{cta:"open_app_header"}),primaryCta:{href:m,label:x("landing.nav.primaryCta",{defaultValue:s.ctas.primary}),onClick:t=>a(t,"pricing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-6xl mx-auto px-6 pb-24 space-y-14",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4 pt-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold",children:[e.jsx(B,{size:14}),s.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:s.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:s.subtitle}),s.valueBullets?.length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-2 text-xs text-slate-400",children:s.valueBullets.map(t=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60",children:t},t))}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:e.jsxs("a",{href:m,onClick:t=>a(t,"pricing_cta_click",{cta:"first_export_hero"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition",children:[s.ctas.primary," ",e.jsx(i,{size:16})]})}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-sm",children:[e.jsxs("a",{href:f,onClick:t=>a(t,"pricing_cta_click",{cta:"go_pro_hero"}),className:"inline-flex items-center gap-1 text-slate-200 hover:text-white underline underline-offset-4",children:[s.ctas.directPro," ",e.jsx(i,{size:14})]}),e.jsx("span",{className:"text-slate-600","aria-hidden":!0,children:"|"}),e.jsxs("a",{href:u,onClick:t=>a(t,"pricing_cta_click",{cta:"agent_cli_hero_link"}),className:"inline-flex items-center gap-1 text-blue-200 hover:text-blue-100 underline underline-offset-4",children:[s.ctas.secondary," ",e.jsx(i,{size:14})]})]})]}),e.jsxs("section",{className:"grid md:grid-cols-2 gap-6",children:[e.jsx(j,{title:n.title,price:n.price,bullets:n.bullets||[],cta:n.cta,href:N,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(j,{title:r.title,price:r.price,bullets:r.bullets||[],cta:r.cta,href:f,trackingCta:"go_pro_pricing",highlight:!0,badge:r.badge})]}),e.jsx(T,{className:"max-w-4xl mx-auto w-full"}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.proNoteTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.proNoteBody}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsxs("a",{href:m,onClick:t=>a(t,"pricing_cta_click",{cta:"first_export_pro_note"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold",children:[s.ctas.primary," ",e.jsx(i,{size:16})]})}),e.jsxs("a",{href:u,onClick:t=>a(t,"pricing_cta_click",{cta:"agent_cli_pro_note_link"}),className:"inline-flex items-center gap-1 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4",children:[s.ctas.secondary," ",e.jsx(i,{size:14})]})]}),l?.cmd&&e.jsx("section",{className:"max-w-4xl 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:l.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"})]}),l.body&&e.jsx("p",{className:"text-sm text-slate-300",children:l.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:l.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(P,{value:l.cmd,onCopied:()=>g("pricing_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",children:({copyLabel:t})=>e.jsxs(e.Fragment,{children:[e.jsx(q,{size:14}),t]})})}),l.note&&e.jsx("div",{className:"text-xs text-slate-500",children:l.note})]})}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.trustTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.trustBody}),e.jsxs("div",{className:"flex items-start gap-3 text-sm text-slate-200",children:[e.jsx("div",{className:"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center",children:e.jsx(z,{size:16,className:"text-blue-300"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"font-semibold text-white",children:d==="ja"?"CLI/CIで回せる":"CI-friendly CLI"}),e.jsx("div",{className:"text-slate-300",children:d==="ja"?"non-interactive な CLI で、毎リリースの更新をビルドステップにできます。":"Non-interactive CLI runs locally or in CI, so screenshot updates become a build step."})]})]})]}),e.jsxs("section",{className:"max-w-4xl mx-auto space-y-2 text-center",children:[e.jsx("h2",{className:"text-sm font-semibold text-slate-200",children:s.expansionTitle}),e.jsx("p",{className:"text-xs text-slate-500",children:s.expansionBody}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4 text-xs",children:[e.jsxs("a",{href:_,onClick:t=>a(t,"pricing_cta_click",{cta:"team_contact_compact"}),className:"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4",children:[s.expansionTeamCta," ",e.jsx(i,{size:14})]}),e.jsxs("a",{href:v,onClick:t=>a(t,"pricing_cta_click",{cta:"annual_contact_compact"}),className:"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4",children:[s.expansionAnnualCta," ",e.jsx(i,{size:14})]})]})]}),c.length>0&&e.jsxs("section",{className:"max-w-4xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:s.faqTitle}),e.jsx("div",{className:"space-y-4",children:c.map((t,w)=>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:t.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:t.a})]},`${t.q}-${w}`))})]}),e.jsxs("footer",{className:"border-t border-slate-800 pt-10 text-center text-sm text-slate-400",children:[e.jsxs("div",{className:"flex flex-wrap justify-center gap-6",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:s.footer.terms}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:s.footer.privacy}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:s.footer.legal})]}),e.jsxs("div",{className:"mt-4 text-xs text-slate-600",children:["© ",new Date().getFullYear()," ShipScreens"]})]})]})]})},j=({title:o,price:x,bullets:d,cta:s,href:p,trackingCta:n,highlight:r,badge:l})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${r?"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 gap-3",children:[e.jsx("h3",{className:"text-xl font-bold",children:o}),r&&l&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:l})]}),e.jsx("div",{className:"text-3xl font-black",children:x}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:(d||[]).map(c=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(L,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:c})]},c))}),e.jsxs("a",{href:p,onClick:c=>n?a(c,"pricing_cta_click",{cta:n}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${r?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:[s," ",e.jsx(i,{size:16,className:"ml-2"})]})]});export{M as default};
2
+ //# sourceMappingURL=Pricing-CxCutpT0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pricing-CGZnCST5.js","sources":["../../src/pages/Pricing.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ArrowRight, Check, Copy, ShieldCheck, Terminal } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CopyButton from '../components/CopyButton';\nimport FitPanel from '../components/FitPanel';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Pricing',\n title: 'Pricing',\n subtitle:\n 'Start free and prove the first export. Upgrade when device x locale reruns, CI handoff, and no-watermark outputs become release blockers.',\n valueBullets: ['Deterministic screenshot reruns', 'Reproducible exports (dir + ZIP)', 'Verify + stage upload guardrails'],\n proNoteTitle: 'Pro = production workflow',\n proNoteBody:\n 'Pro is for release-time reliability: full matrix reruns, copy import, and clean upload roots when shipping frequent updates.',\n faqTitle: 'FAQ',\n trustTitle: 'Privacy-first',\n trustBody:\n 'Rendering/export runs locally (browser or CI runner). Base screenshots are not uploaded to ShipScreens; use verify/stage before store upload.',\n expansionTitle: 'Need Team / Agency or annual billing?',\n expansionBody: 'These options are available on request. Contact us if Free/Pro does not fit your workflow.',\n expansionTeamCta: 'Team / Agency inquiry',\n expansionAnnualCta: 'Annual billing inquiry',\n ctas: {\n primary: 'Get first export (5 min)',\n directPro: 'Go Pro now',\n secondary: 'Run CLI quickstart',\n },\n footer: {\n terms: 'Terms',\n privacy: 'Privacy',\n legal: 'Legal (Japan)',\n },\n },\n ja: {\n badge: '料金',\n title: '料金',\n subtitle:\n 'まずは無料で初回エクスポートを通し、端末×言語の再実行・CI連携・透かし解除がリリース課題になったタイミングでProへ。',\n valueBullets: ['決定的に再実行できるスクショ運用', '再現性のある出力(dir + ZIP)', 'verify + stage 提出前ガードレール'],\n proNoteTitle: 'Pro = 本番運用',\n proNoteBody:\n 'Proは本番の再実行性向けです。フル一括、copy運用、提出ルートの安定化を毎リリースで回せます。',\n faqTitle: 'FAQ',\n trustTitle: 'プライバシー',\n trustBody:\n 'レンダリング/出力はローカル(ブラウザ/CI)で完結。元スクショはShipScreensへアップロードされません。提出前は verify/stage で確認。',\n expansionTitle: 'Team / Agency・年額が必要ですか?',\n expansionBody: 'Free/Proで合わない運用は個別対応します。必要条件だけメールで共有ください。',\n expansionTeamCta: 'Team / Agency相談',\n expansionAnnualCta: '年額相談',\n ctas: {\n primary: '初回エクスポート(5分)',\n directPro: '今すぐProへ',\n secondary: 'CLIクイックスタート',\n },\n footer: {\n terms: '利用規約',\n privacy: 'プライバシー',\n legal: '特商法表記',\n },\n },\n};\n\nconst Pricing = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n usePageTitle('titles.pricing', { defaultValue: copy.title });\n\n const pricing = t('landing.pricing', { returnObjects: true }) || {};\n const freePlan = pricing.free || {};\n const proPlan = pricing.pro || {};\n const cliProUnlock = pricing.cliProUnlock || {};\n const faqItems = t('landing.faq.items', { returnObjects: true }) || [];\n\n const openAppHref = '/app/?sample=5panel&entry_source=pricing_open_app_header';\n const firstExportHref = '/tools/first-export/?entry_source=pricing_preview';\n const agentCliHref = '/tools/agent-cli/?entry_source=pricing_cli_quickstart';\n const freePlanHref = '/app/?sample=5panel&entry_source=pricing_open_app_free';\n const proPlanHref = '/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const teamMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens Team/Agency plan')}`;\n const annualMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens annual billing')}`;\n\n useEffect(() => {\n trackEvent('pricing_view', { path: typeof window !== 'undefined' ? window.location.pathname : '/pricing' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"pricing\"\n openAppHref={openAppHref}\n onToolsClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'tools_header' })}\n onPricingClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'pricing_header' })}\n onOpenAppClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'open_app_header' })}\n primaryCta={{\n href: firstExportHref,\n label: t('landing.nav.primaryCta', { defaultValue: copy.ctas.primary }),\n onClick: (event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'first_export_header' }),\n }}\n />\n\n <main className=\"max-w-6xl mx-auto px-6 pb-24 space-y-14\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4 pt-6\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <ShieldCheck size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n {copy.valueBullets?.length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-2 text-xs text-slate-400\">\n {copy.valueBullets.map((item) => (\n <span key={item} className=\"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60\">\n {item}\n </span>\n ))}\n </div>\n )}\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-2 text-sm\">\n <a\n href={proPlanHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'go_pro_hero' })}\n className=\"inline-flex items-center gap-1 text-slate-200 hover:text-white underline underline-offset-4\"\n >\n {copy.ctas.directPro} <ArrowRight size={14} />\n </a>\n <span className=\"text-slate-600\" aria-hidden>\n |\n </span>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_hero_link' })}\n className=\"inline-flex items-center gap-1 text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.ctas.secondary} <ArrowRight size={14} />\n </a>\n </div>\n </section>\n\n <section className=\"grid md:grid-cols-2 gap-6\">\n <PlanCard\n title={freePlan.title}\n price={freePlan.price}\n bullets={freePlan.bullets || []}\n cta={freePlan.cta}\n href={freePlanHref}\n trackingCta=\"open_app_pricing_free\"\n highlight={false}\n />\n <PlanCard\n title={proPlan.title}\n price={proPlan.price}\n bullets={proPlan.bullets || []}\n cta={proPlan.cta}\n href={proPlanHref}\n trackingCta=\"go_pro_pricing\"\n highlight\n badge={proPlan.badge}\n />\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.proNoteTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.proNoteBody}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_pro_note' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n </div>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_pro_note_link' })}\n className=\"inline-flex items-center gap-1 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.ctas.secondary} <ArrowRight size={14} />\n </a>\n </section>\n\n {cliProUnlock?.cmd && (\n <section className=\"max-w-4xl mx-auto w-full\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{cliProUnlock.title}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {cliProUnlock.body && <p className=\"text-sm text-slate-300\">{cliProUnlock.body}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{cliProUnlock.cmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={cliProUnlock.cmd}\n onCopied={() => trackEvent('pricing_cta_click', { cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <Copy size={14} />\n {copyLabel}\n </>\n )}\n </CopyButton>\n </div>\n {cliProUnlock.note && <div className=\"text-xs text-slate-500\">{cliProUnlock.note}</div>}\n </div>\n </section>\n )}\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.trustTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.trustBody}</p>\n <div className=\"flex items-start gap-3 text-sm text-slate-200\">\n <div className=\"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center\">\n <Terminal size={16} className=\"text-blue-300\" />\n </div>\n <div className=\"space-y-1\">\n <div className=\"font-semibold text-white\">{lang === 'ja' ? 'CLI/CIで回せる' : 'CI-friendly CLI'}</div>\n <div className=\"text-slate-300\">\n {lang === 'ja'\n ? 'non-interactive な CLI で、毎リリースの更新をビルドステップにできます。'\n : 'Non-interactive CLI runs locally or in CI, so screenshot updates become a build step.'}\n </div>\n </div>\n </div>\n </section>\n\n <section className=\"max-w-4xl mx-auto space-y-2 text-center\">\n <h2 className=\"text-sm font-semibold text-slate-200\">{copy.expansionTitle}</h2>\n <p className=\"text-xs text-slate-500\">{copy.expansionBody}</p>\n <div className=\"flex flex-wrap justify-center gap-4 text-xs\">\n <a\n href={teamMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'team_contact_compact' })}\n className=\"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4\"\n >\n {copy.expansionTeamCta} <ArrowRight size={14} />\n </a>\n <a\n href={annualMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'annual_contact_compact' })}\n className=\"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4\"\n >\n {copy.expansionAnnualCta} <ArrowRight size={14} />\n </a>\n </div>\n </section>\n\n {faqItems.length > 0 && (\n <section className=\"max-w-4xl mx-auto w-full space-y-6\">\n <h2 className=\"text-3xl font-bold text-center\">{copy.faqTitle}</h2>\n <div className=\"space-y-4\">\n {faqItems.map((item, i) => (\n <div key={`${item.q}-${i}`} className=\"bg-slate-900/60 border border-slate-800 rounded-xl p-6\">\n <h3 className=\"font-semibold text-lg mb-2\">{item.q}</h3>\n <p className=\"text-slate-300 text-sm leading-relaxed\">{item.a}</p>\n </div>\n ))}\n </div>\n </section>\n )}\n\n <footer className=\"border-t border-slate-800 pt-10 text-center text-sm text-slate-400\">\n <div className=\"flex flex-wrap justify-center gap-6\">\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">\n {copy.footer.terms}\n </a>\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">\n {copy.footer.privacy}\n </a>\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">\n {copy.footer.legal}\n </a>\n </div>\n <div className=\"mt-4 text-xs text-slate-600\">© {new Date().getFullYear()} ShipScreens</div>\n </footer>\n </main>\n </div>\n );\n};\n\nconst PlanCard = ({ title, price, bullets, cta, href, trackingCta, highlight, badge }) => (\n <div\n className={`p-6 rounded-2xl border ${\n highlight\n ? 'border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20'\n : 'border-slate-800 bg-slate-900/60'\n } flex flex-col gap-4`}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-xl font-bold\">{title}</h3>\n {highlight && badge && (\n <span className=\"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold\">{badge}</span>\n )}\n </div>\n <div className=\"text-3xl font-black\">{price}</div>\n <ul className=\"text-slate-200 space-y-2 text-sm\">\n {(bullets || []).map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <Check size={16} className=\"mt-0.5 text-blue-300 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n <a\n href={href}\n onClick={(event) =>\n trackingCta ? trackEventAndFollowLink(event, 'pricing_cta_click', { cta: trackingCta }) : undefined\n }\n className={`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${\n highlight ? 'bg-blue-500 text-white hover:bg-blue-600' : 'bg-white text-slate-900 hover:scale-[1.02]'\n }`}\n >\n {cta} <ArrowRight size={16} className=\"ml-2\" />\n </a>\n </div>\n);\n\nexport default Pricing;\n"],"names":["normalizeLang","lang","COPY","Pricing","i18n","t","useTranslation","copy","usePageTitle","pricing","freePlan","proPlan","cliProUnlock","faqItems","openAppHref","firstExportHref","agentCliHref","freePlanHref","proPlanHref","supportEmail","teamMailto","annualMailto","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ShieldCheck","item","ArrowRight","PlanCard","FitPanel","CopyButton","copyLabel","Fragment","Copy","Terminal","i","title","price","bullets","cta","href","trackingCta","highlight","badge","Check"],"mappings":"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"}
1
+ {"version":3,"file":"Pricing-CxCutpT0.js","sources":["../../src/pages/Pricing.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ArrowRight, Check, Copy, ShieldCheck, Terminal } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CopyButton from '../components/CopyButton';\nimport FitPanel from '../components/FitPanel';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Pricing',\n title: 'Pricing',\n subtitle:\n 'Start free and prove the first export. Upgrade when device x locale reruns, CI handoff, and no-watermark outputs become release blockers.',\n valueBullets: ['Deterministic screenshot reruns', 'Reproducible exports (dir + ZIP)', 'Verify + stage upload guardrails'],\n proNoteTitle: 'Pro = production workflow',\n proNoteBody:\n 'Pro is for release-time reliability: full matrix reruns, copy import, and clean upload roots when shipping frequent updates.',\n faqTitle: 'FAQ',\n trustTitle: 'Privacy-first',\n trustBody:\n 'Rendering/export runs locally (browser or CI runner). Base screenshots are not uploaded to ShipScreens; use verify/stage before store upload.',\n expansionTitle: 'Need Team / Agency or annual billing?',\n expansionBody: 'These options are available on request. Contact us if Free/Pro does not fit your workflow.',\n expansionTeamCta: 'Team / Agency inquiry',\n expansionAnnualCta: 'Annual billing inquiry',\n ctas: {\n primary: 'Get first export (5 min)',\n directPro: 'Go Pro now',\n secondary: 'Run CLI quickstart',\n },\n footer: {\n terms: 'Terms',\n privacy: 'Privacy',\n legal: 'Legal (Japan)',\n },\n },\n ja: {\n badge: '料金',\n title: '料金',\n subtitle:\n 'まずは無料で初回エクスポートを通し、端末×言語の再実行・CI連携・透かし解除がリリース課題になったタイミングでProへ。',\n valueBullets: ['決定的に再実行できるスクショ運用', '再現性のある出力(dir + ZIP)', 'verify + stage 提出前ガードレール'],\n proNoteTitle: 'Pro = 本番運用',\n proNoteBody:\n 'Proは本番の再実行性向けです。フル一括、copy運用、提出ルートの安定化を毎リリースで回せます。',\n faqTitle: 'FAQ',\n trustTitle: 'プライバシー',\n trustBody:\n 'レンダリング/出力はローカル(ブラウザ/CI)で完結。元スクショはShipScreensへアップロードされません。提出前は verify/stage で確認。',\n expansionTitle: 'Team / Agency・年額が必要ですか?',\n expansionBody: 'Free/Proで合わない運用は個別対応します。必要条件だけメールで共有ください。',\n expansionTeamCta: 'Team / Agency相談',\n expansionAnnualCta: '年額相談',\n ctas: {\n primary: '初回エクスポート(5分)',\n directPro: '今すぐProへ',\n secondary: 'CLIクイックスタート',\n },\n footer: {\n terms: '利用規約',\n privacy: 'プライバシー',\n legal: '特商法表記',\n },\n },\n};\n\nconst Pricing = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n usePageTitle('titles.pricing', { defaultValue: copy.title });\n\n const pricing = t('landing.pricing', { returnObjects: true }) || {};\n const freePlan = pricing.free || {};\n const proPlan = pricing.pro || {};\n const cliProUnlock = pricing.cliProUnlock || {};\n const faqItems = t('landing.faq.items', { returnObjects: true }) || [];\n\n const openAppHref = '/app/?sample=5panel&entry_source=pricing_open_app_header';\n const firstExportHref = '/tools/first-export/?entry_source=pricing_preview';\n const agentCliHref = '/tools/agent-cli/?entry_source=pricing_cli_quickstart';\n const freePlanHref = '/app/?sample=5panel&entry_source=pricing_open_app_free';\n const proPlanHref = '/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const teamMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens Team/Agency plan')}`;\n const annualMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens annual billing')}`;\n\n useEffect(() => {\n trackEvent('pricing_view', { path: typeof window !== 'undefined' ? window.location.pathname : '/pricing' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"pricing\"\n openAppHref={openAppHref}\n onToolsClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'tools_header' })}\n onPricingClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'pricing_header' })}\n onOpenAppClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'open_app_header' })}\n primaryCta={{\n href: firstExportHref,\n label: t('landing.nav.primaryCta', { defaultValue: copy.ctas.primary }),\n onClick: (event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'first_export_header' }),\n }}\n />\n\n <main className=\"max-w-6xl mx-auto px-6 pb-24 space-y-14\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4 pt-6\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <ShieldCheck size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n {copy.valueBullets?.length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-2 text-xs text-slate-400\">\n {copy.valueBullets.map((item) => (\n <span key={item} className=\"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60\">\n {item}\n </span>\n ))}\n </div>\n )}\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-2 text-sm\">\n <a\n href={proPlanHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'go_pro_hero' })}\n className=\"inline-flex items-center gap-1 text-slate-200 hover:text-white underline underline-offset-4\"\n >\n {copy.ctas.directPro} <ArrowRight size={14} />\n </a>\n <span className=\"text-slate-600\" aria-hidden>\n |\n </span>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_hero_link' })}\n className=\"inline-flex items-center gap-1 text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.ctas.secondary} <ArrowRight size={14} />\n </a>\n </div>\n </section>\n\n <section className=\"grid md:grid-cols-2 gap-6\">\n <PlanCard\n title={freePlan.title}\n price={freePlan.price}\n bullets={freePlan.bullets || []}\n cta={freePlan.cta}\n href={freePlanHref}\n trackingCta=\"open_app_pricing_free\"\n highlight={false}\n />\n <PlanCard\n title={proPlan.title}\n price={proPlan.price}\n bullets={proPlan.bullets || []}\n cta={proPlan.cta}\n href={proPlanHref}\n trackingCta=\"go_pro_pricing\"\n highlight\n badge={proPlan.badge}\n />\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.proNoteTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.proNoteBody}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_pro_note' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n </div>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_pro_note_link' })}\n className=\"inline-flex items-center gap-1 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.ctas.secondary} <ArrowRight size={14} />\n </a>\n </section>\n\n {cliProUnlock?.cmd && (\n <section className=\"max-w-4xl mx-auto w-full\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{cliProUnlock.title}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {cliProUnlock.body && <p className=\"text-sm text-slate-300\">{cliProUnlock.body}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{cliProUnlock.cmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={cliProUnlock.cmd}\n onCopied={() => trackEvent('pricing_cta_click', { cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <Copy size={14} />\n {copyLabel}\n </>\n )}\n </CopyButton>\n </div>\n {cliProUnlock.note && <div className=\"text-xs text-slate-500\">{cliProUnlock.note}</div>}\n </div>\n </section>\n )}\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.trustTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.trustBody}</p>\n <div className=\"flex items-start gap-3 text-sm text-slate-200\">\n <div className=\"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center\">\n <Terminal size={16} className=\"text-blue-300\" />\n </div>\n <div className=\"space-y-1\">\n <div className=\"font-semibold text-white\">{lang === 'ja' ? 'CLI/CIで回せる' : 'CI-friendly CLI'}</div>\n <div className=\"text-slate-300\">\n {lang === 'ja'\n ? 'non-interactive な CLI で、毎リリースの更新をビルドステップにできます。'\n : 'Non-interactive CLI runs locally or in CI, so screenshot updates become a build step.'}\n </div>\n </div>\n </div>\n </section>\n\n <section className=\"max-w-4xl mx-auto space-y-2 text-center\">\n <h2 className=\"text-sm font-semibold text-slate-200\">{copy.expansionTitle}</h2>\n <p className=\"text-xs text-slate-500\">{copy.expansionBody}</p>\n <div className=\"flex flex-wrap justify-center gap-4 text-xs\">\n <a\n href={teamMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'team_contact_compact' })}\n className=\"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4\"\n >\n {copy.expansionTeamCta} <ArrowRight size={14} />\n </a>\n <a\n href={annualMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'annual_contact_compact' })}\n className=\"inline-flex items-center justify-center gap-1 text-slate-300 hover:text-white underline underline-offset-4\"\n >\n {copy.expansionAnnualCta} <ArrowRight size={14} />\n </a>\n </div>\n </section>\n\n {faqItems.length > 0 && (\n <section className=\"max-w-4xl mx-auto w-full space-y-6\">\n <h2 className=\"text-3xl font-bold text-center\">{copy.faqTitle}</h2>\n <div className=\"space-y-4\">\n {faqItems.map((item, i) => (\n <div key={`${item.q}-${i}`} className=\"bg-slate-900/60 border border-slate-800 rounded-xl p-6\">\n <h3 className=\"font-semibold text-lg mb-2\">{item.q}</h3>\n <p className=\"text-slate-300 text-sm leading-relaxed\">{item.a}</p>\n </div>\n ))}\n </div>\n </section>\n )}\n\n <footer className=\"border-t border-slate-800 pt-10 text-center text-sm text-slate-400\">\n <div className=\"flex flex-wrap justify-center gap-6\">\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">\n {copy.footer.terms}\n </a>\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">\n {copy.footer.privacy}\n </a>\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">\n {copy.footer.legal}\n </a>\n </div>\n <div className=\"mt-4 text-xs text-slate-600\">© {new Date().getFullYear()} ShipScreens</div>\n </footer>\n </main>\n </div>\n );\n};\n\nconst PlanCard = ({ title, price, bullets, cta, href, trackingCta, highlight, badge }) => (\n <div\n className={`p-6 rounded-2xl border ${\n highlight\n ? 'border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20'\n : 'border-slate-800 bg-slate-900/60'\n } flex flex-col gap-4`}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-xl font-bold\">{title}</h3>\n {highlight && badge && (\n <span className=\"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold\">{badge}</span>\n )}\n </div>\n <div className=\"text-3xl font-black\">{price}</div>\n <ul className=\"text-slate-200 space-y-2 text-sm\">\n {(bullets || []).map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <Check size={16} className=\"mt-0.5 text-blue-300 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n <a\n href={href}\n onClick={(event) =>\n trackingCta ? trackEventAndFollowLink(event, 'pricing_cta_click', { cta: trackingCta }) : undefined\n }\n className={`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${\n highlight ? 'bg-blue-500 text-white hover:bg-blue-600' : 'bg-white text-slate-900 hover:scale-[1.02]'\n }`}\n >\n {cta} <ArrowRight size={16} className=\"ml-2\" />\n </a>\n </div>\n);\n\nexport default Pricing;\n"],"names":["normalizeLang","lang","COPY","Pricing","i18n","t","useTranslation","copy","usePageTitle","pricing","freePlan","proPlan","cliProUnlock","faqItems","openAppHref","firstExportHref","agentCliHref","freePlanHref","proPlanHref","supportEmail","teamMailto","annualMailto","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ShieldCheck","item","ArrowRight","PlanCard","FitPanel","CopyButton","copyLabel","Fragment","Copy","Terminal","i","title","price","bullets","cta","href","trackingCta","highlight","badge","Check"],"mappings":"8aAUA,MAAMA,EAAiBC,IACPA,GAAQ,IAAI,MAAM,GAAG,EAAE,CAAC,IACtB,KAAO,KAAO,KAG1BC,EAAO,CACX,GAAI,CACF,MAAO,UACP,MAAO,UACP,SACE,4IACF,aAAc,CAAC,kCAAmC,mCAAoC,kCAAkC,EACxH,aAAc,4BACd,YACE,+HACF,SAAU,MACV,WAAY,gBACZ,UACE,gJACF,eAAgB,wCAChB,cAAe,6FACf,iBAAkB,wBAClB,mBAAoB,yBACpB,KAAM,CACJ,QAAS,2BACT,UAAW,aACX,UAAW,oBAAA,EAEb,OAAQ,CACN,MAAO,QACP,QAAS,UACT,MAAO,eAAA,CACT,EAEF,GAAI,CACF,MAAO,KACP,MAAO,KACP,SACE,+DACF,aAAc,CAAC,mBAAoB,sBAAuB,0BAA0B,EACpF,aAAc,aACd,YACE,oDACF,SAAU,MACV,WAAY,SACZ,UACE,kFACF,eAAgB,0BAChB,cAAe,4CACf,iBAAkB,kBAClB,mBAAoB,OACpB,KAAM,CACJ,QAAS,eACT,UAAW,UACX,UAAW,aAAA,EAEb,OAAQ,CACN,MAAO,OACP,QAAS,SACT,MAAO,OAAA,CACT,CAEJ,EAEMC,EAAU,IAAM,CACpB,KAAM,CAAE,KAAAC,EAAM,EAAAC,CAAA,EAAMC,EAAA,EACdL,EAAOD,EAAcI,EAAK,kBAAoBA,EAAK,QAAQ,EAC3DG,EAAOL,EAAKD,CAAI,GAAKC,EAAK,GAEhCM,EAAa,iBAAkB,CAAE,aAAcD,EAAK,MAAO,EAE3D,MAAME,EAAUJ,EAAE,kBAAmB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAC3DK,EAAWD,EAAQ,MAAQ,CAAA,EAC3BE,EAAUF,EAAQ,KAAO,CAAA,EACzBG,EAAeH,EAAQ,cAAgB,CAAA,EACvCI,EAAWR,EAAE,oBAAqB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAE9DS,EAAc,2DACdC,EAAkB,oDAClBC,EAAe,wDACfC,EAAe,yDACfC,EAAc,4DACdC,EAAe,iCACfC,EAAa,UAAUD,CAAY,YAAY,mBAAmB,8BAA8B,CAAC,GACjGE,EAAe,UAAUF,CAAY,YAAY,mBAAmB,4BAA4B,CAAC,GAEvGG,OAAAA,EAAAA,UAAU,IAAM,CACdC,EAAW,eAAgB,CAAE,KAAM,OAAO,OAAW,IAAc,OAAO,SAAS,SAAW,WAAY,CAC5G,EAAG,CAAA,CAAE,EAGHC,EAAAA,KAAC,MAAA,CAAI,UAAU,qFACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CACC,QAAQ,OACR,OAAO,UACP,YAAAb,EACA,aAAec,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,eAAgB,EACpG,eAAiBA,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,iBAAkB,EACxG,eAAiBA,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,kBAAmB,EACzG,WAAY,CACV,KAAMb,EACN,MAAOV,EAAE,yBAA0B,CAAE,aAAcE,EAAK,KAAK,QAAS,EACtE,QAAUqB,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,qBAAA,CAAuB,CAAA,CACxG,CAAA,EAGFJ,EAAAA,KAAC,OAAA,CAAK,UAAU,0CACd,SAAA,CAAAA,EAAAA,KAAC,UAAA,CAAQ,UAAU,+CACjB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uIACb,SAAA,CAAAC,EAAAA,IAACK,EAAA,CAAY,KAAM,EAAA,CAAI,EACtBvB,EAAK,KAAA,EACR,EACAkB,EAAAA,IAAC,KAAA,CAAG,UAAU,gDAAiD,WAAK,MAAM,EAC1EA,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,SAAS,EACpElB,EAAK,cAAc,OAAS,SAC1B,MAAA,CAAI,UAAU,6DACZ,SAAAA,EAAK,aAAa,IAAKwB,SACrB,OAAA,CAAgB,UAAU,iEACxB,SAAAA,CAAA,EADQA,CAEX,CACD,CAAA,CACH,EAEFN,EAAAA,IAAC,MAAA,CAAI,UAAU,sDACb,SAAAD,EAAAA,KAAC,IAAA,CACC,KAAMT,EACN,QAAUa,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,oBAAqB,EACpG,UAAU,mIAET,SAAA,CAAArB,EAAK,KAAK,QAAQ,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,EAE9C,EACAR,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CACC,KAAMN,EACN,QAAUU,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,cAAe,EAC9F,UAAU,8FAET,SAAA,CAAArB,EAAK,KAAK,UAAU,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,QAE7C,OAAA,CAAK,UAAU,iBAAiB,cAAW,GAAC,SAAA,IAE7C,EACAR,EAAAA,KAAC,IAAA,CACC,KAAMR,EACN,QAAUY,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,sBAAuB,EACtG,UAAU,gGAET,SAAA,CAAArB,EAAK,KAAK,UAAU,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,CAC9C,CAAA,CACF,CAAA,EACF,EAEAR,EAAAA,KAAC,UAAA,CAAQ,UAAU,4BACjB,SAAA,CAAAC,EAAAA,IAACQ,EAAA,CACC,MAAOvB,EAAS,MAChB,MAAOA,EAAS,MAChB,QAASA,EAAS,SAAW,CAAA,EAC7B,IAAKA,EAAS,IACd,KAAMO,EACN,YAAY,wBACZ,UAAW,EAAA,CAAA,EAEbQ,EAAAA,IAACQ,EAAA,CACC,MAAOtB,EAAQ,MACf,MAAOA,EAAQ,MACf,QAASA,EAAQ,SAAW,CAAA,EAC5B,IAAKA,EAAQ,IACb,KAAMO,EACN,YAAY,iBACZ,UAAS,GACT,MAAOP,EAAQ,KAAA,CAAA,CACjB,EACF,EAEAc,EAAAA,IAACS,EAAA,CAAS,UAAU,0BAAA,CAA2B,EAE/CV,EAAAA,KAAC,UAAA,CAAQ,UAAU,sFACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAlB,EAAK,aAAa,EAChEkB,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,YAAY,EACxEA,EAAAA,IAAC,MAAA,CAAI,UAAU,kCACb,SAAAD,EAAAA,KAAC,IAAA,CACC,KAAMT,EACN,QAAUa,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,wBAAyB,EACxG,UAAU,6KAET,SAAA,CAAArB,EAAK,KAAK,QAAQ,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,EAE9C,EACAR,EAAAA,KAAC,IAAA,CACC,KAAMR,EACN,QAAUY,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,0BAA2B,EAC1G,UAAU,wGAET,SAAA,CAAArB,EAAK,KAAK,UAAU,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,CAC9C,EACF,EAECpB,GAAc,KACba,EAAAA,IAAC,UAAA,CAAQ,UAAU,2BACjB,SAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,oEACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAgC,SAAAb,EAAa,MAAM,EAClEa,EAAAA,IAAC,OAAA,CAAK,UAAU,8HAA8H,SAAA,KAAA,CAE9I,CAAA,EACF,EACCb,EAAa,MAAQa,EAAAA,IAAC,KAAE,UAAU,yBAA0B,WAAa,KAAK,EAC/EA,EAAAA,IAAC,MAAA,CAAI,UAAU,yDACb,SAAAA,EAAAA,IAAC,OAAI,UAAU,6CAA8C,SAAAb,EAAa,GAAA,CAAI,CAAA,CAChF,EACAa,EAAAA,IAAC,MAAA,CAAI,UAAU,kCACb,SAAAA,EAAAA,IAACU,EAAA,CACC,MAAOvB,EAAa,IACpB,SAAU,IAAMW,EAAW,oBAAqB,CAAE,IAAK,sBAAuB,EAC9E,UAAU,6KAET,SAAA,CAAC,CAAE,UAAAa,CAAA,IACFZ,EAAAA,KAAAa,EAAAA,SAAA,CACE,SAAA,CAAAZ,EAAAA,IAACa,EAAA,CAAK,KAAM,EAAA,CAAI,EACfF,CAAA,CAAA,CACH,CAAA,CAAA,EAGN,EACCxB,EAAa,MAAQa,EAAAA,IAAC,OAAI,UAAU,yBAA0B,WAAa,IAAA,CAAK,CAAA,CAAA,CACnF,CAAA,CACF,EAGFD,EAAAA,KAAC,UAAA,CAAQ,UAAU,sFACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAlB,EAAK,WAAW,EAC9DkB,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,UAAU,EACtED,EAAAA,KAAC,MAAA,CAAI,UAAU,gDACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,kGACb,SAAAA,EAAAA,IAACc,GAAS,KAAM,GAAI,UAAU,eAAA,CAAgB,CAAA,CAChD,EACAf,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,MAAC,OAAI,UAAU,2BAA4B,SAAAxB,IAAS,KAAO,aAAe,kBAAkB,QAC3F,MAAA,CAAI,UAAU,iBACZ,SAAAA,IAAS,KACN,iDACA,uFAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EAEAuB,EAAAA,KAAC,UAAA,CAAQ,UAAU,0CACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,uCAAwC,SAAAlB,EAAK,eAAe,EAC1EkB,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAA0B,WAAK,cAAc,EAC1DD,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CACC,KAAMJ,EACN,QAAUQ,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,uBAAwB,EACvG,UAAU,6GAET,SAAA,CAAArB,EAAK,iBAAiB,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,EAEhDR,EAAAA,KAAC,IAAA,CACC,KAAMH,EACN,QAAUO,GAAUC,EAAwBD,EAAO,oBAAqB,CAAE,IAAK,yBAA0B,EACzG,UAAU,6GAET,SAAA,CAAArB,EAAK,mBAAmB,IAACkB,EAAAA,IAACO,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,CAAA,CAClD,CAAA,CACF,CAAA,EACF,EAECnB,EAAS,OAAS,GACjBW,EAAAA,KAAC,UAAA,CAAQ,UAAU,qCACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,iCAAkC,SAAAlB,EAAK,SAAS,EAC9DkB,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAAZ,EAAS,IAAI,CAACkB,EAAMS,IACnBhB,EAAAA,KAAC,MAAA,CAA2B,UAAU,yDACpC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA8B,SAAAM,EAAK,EAAE,EACnDN,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,CAAA,CAAE,CAAA,CAAA,EAFtD,GAAGM,EAAK,CAAC,IAAIS,CAAC,EAGxB,CACD,CAAA,CACH,CAAA,EACF,EAGFhB,EAAAA,KAAC,SAAA,CAAO,UAAU,qEAChB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAC,EAAAA,IAAC,KAAE,KAAK,SAAS,UAAU,qCACxB,SAAAlB,EAAK,OAAO,KAAA,CACf,EACAkB,EAAAA,IAAC,KAAE,KAAK,WAAW,UAAU,qCAC1B,SAAAlB,EAAK,OAAO,OAAA,CACf,EACAkB,EAAAA,IAAC,KAAE,KAAK,SAAS,UAAU,qCACxB,SAAAlB,EAAK,OAAO,KAAA,CACf,CAAA,EACF,EACAiB,EAAAA,KAAC,MAAA,CAAI,UAAU,8BAA8B,SAAA,CAAA,KAAG,IAAI,KAAA,EAAO,YAAA,EAAc,cAAA,CAAA,CAAY,CAAA,CAAA,CACvF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,EAEMS,EAAW,CAAC,CAAE,MAAAQ,EAAO,MAAAC,EAAO,QAAAC,EAAS,IAAAC,EAAK,KAAAC,EAAM,YAAAC,EAAa,UAAAC,EAAW,MAAAC,CAAA,IAC5ExB,EAAAA,KAAC,MAAA,CACC,UAAW,0BACTuB,EACI,8DACA,kCACN,uBAEA,SAAA,CAAAvB,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,oBAAqB,SAAAgB,EAAM,EACxCM,GAAaC,GACZvB,EAAAA,IAAC,OAAA,CAAK,UAAU,iEAAkE,SAAAuB,CAAA,CAAM,CAAA,EAE5F,EACAvB,EAAAA,IAAC,MAAA,CAAI,UAAU,sBAAuB,SAAAiB,EAAM,EAC5CjB,EAAAA,IAAC,KAAA,CAAG,UAAU,mCACV,UAAAkB,GAAW,CAAA,GAAI,IAAKZ,GACpBP,OAAC,KAAA,CAAc,UAAU,yBACvB,SAAA,CAAAC,EAAAA,IAACwB,EAAA,CAAM,KAAM,GAAI,UAAU,gCAAgC,EAC3DxB,EAAAA,IAAC,QAAM,SAAAM,CAAA,CAAK,CAAA,GAFLA,CAGT,CACD,EACH,EACAP,EAAAA,KAAC,IAAA,CACC,KAAAqB,EACA,QAAUjB,GACRkB,EAAcjB,EAAwBD,EAAO,oBAAqB,CAAE,IAAKkB,CAAA,CAAa,EAAI,OAE5F,UAAW,6FACTC,EAAY,2CAA6C,4CAC3D,GAEC,SAAA,CAAAH,EAAI,IAACnB,EAAAA,IAACO,EAAA,CAAW,KAAM,GAAI,UAAU,MAAA,CAAO,CAAA,CAAA,CAAA,CAC/C,CAAA,CACF"}
@@ -1,2 +1,2 @@
1
- import{u as l,j as s}from"./index-C4xM6WAU.js";import{a as c,S as r}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as m}from"./SiteHeader-Ch5fAKkA.js";const d=()=>{const{t:e}=l();c("titles.privacy");const a=e("privacy.sections",{returnObjects:!0})||[];return s.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800",children:[s.jsx(r,{}),s.jsx(m,{variant:"light",showX:!1}),s.jsxs("main",{className:"max-w-4xl mx-auto px-4 py-12",children:[s.jsx("h1",{className:"text-3xl font-bold mb-6",children:e("privacy.title")}),s.jsx("p",{className:"mb-4",children:e("privacy.intro")}),a.map(t=>s.jsx(n,{title:t.title,body:t.body,items:t.items},t.title)),s.jsx("p",{className:"mt-6 text-sm text-slate-600",children:e("privacy.contact",{email:"support@shimaumaservices.co.jp"})})]})]})},n=({title:e,body:a,items:t})=>s.jsxs("section",{children:[s.jsx("h2",{className:"text-xl font-semibold mt-6 mb-2",children:e}),t?s.jsx("ul",{className:"list-disc pl-6 space-y-2 mb-4",children:t.map(i=>s.jsx("li",{children:i},i))}):s.jsx("p",{className:"mb-3",children:a})]});export{d as default};
2
- //# sourceMappingURL=Privacy-D86um9Ox.js.map
1
+ import{u as l,j as s}from"./index-Bffw9flM.js";import{a as c,S as r}from"./LanguageSwitcher-CfUhVVuT.js";import{S as m}from"./SiteHeader-BGQW06JF.js";const d=()=>{const{t:e}=l();c("titles.privacy");const a=e("privacy.sections",{returnObjects:!0})||[];return s.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800",children:[s.jsx(r,{}),s.jsx(m,{variant:"light",showX:!1}),s.jsxs("main",{className:"max-w-4xl mx-auto px-4 py-12",children:[s.jsx("h1",{className:"text-3xl font-bold mb-6",children:e("privacy.title")}),s.jsx("p",{className:"mb-4",children:e("privacy.intro")}),a.map(t=>s.jsx(n,{title:t.title,body:t.body,items:t.items},t.title)),s.jsx("p",{className:"mt-6 text-sm text-slate-600",children:e("privacy.contact",{email:"support@shimaumaservices.co.jp"})})]})]})},n=({title:e,body:a,items:t})=>s.jsxs("section",{children:[s.jsx("h2",{className:"text-xl font-semibold mt-6 mb-2",children:e}),t?s.jsx("ul",{className:"list-disc pl-6 space-y-2 mb-4",children:t.map(i=>s.jsx("li",{children:i},i))}):s.jsx("p",{className:"mb-3",children:a})]});export{d as default};
2
+ //# sourceMappingURL=Privacy-D8m3h6P-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Privacy-D86um9Ox.js","sources":["../../src/pages/Privacy.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\n\nconst Privacy = () => {\n const { t } = useTranslation();\n usePageTitle('titles.privacy');\n const sections = t('privacy.sections', { returnObjects: true }) || [];\n\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n\n <main className=\"max-w-4xl mx-auto px-4 py-12\">\n <h1 className=\"text-3xl font-bold mb-6\">{t('privacy.title')}</h1>\n <p className=\"mb-4\">{t('privacy.intro')}</p>\n {sections.map((section) => (\n <Section key={section.title} title={section.title} body={section.body} items={section.items} />\n ))}\n <p className=\"mt-6 text-sm text-slate-600\">{t('privacy.contact', { email: 'support@shimaumaservices.co.jp' })}</p>\n </main>\n </div>\n );\n};\n\r\nconst Section = ({ title, body, items }) => (\r\n <section>\r\n <h2 className=\"text-xl font-semibold mt-6 mb-2\">{title}</h2>\r\n {items ? (\r\n <ul className=\"list-disc pl-6 space-y-2 mb-4\">\r\n {items.map((item) => (\r\n <li key={item}>{item}</li>\r\n ))}\r\n </ul>\r\n ) : (\r\n <p className=\"mb-3\">{body}</p>\r\n )}\r\n </section>\r\n);\r\n\r\nexport default Privacy;\r\n"],"names":["Privacy","t","useTranslation","usePageTitle","sections","jsxs","jsx","StagingBadge","SiteHeader","section","Section","title","body","items","item"],"mappings":"sJAMA,MAAMA,EAAU,IAAM,CACpB,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAA,EACdC,EAAa,gBAAgB,EAC7B,MAAMC,EAAWH,EAAE,mBAAoB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAEnE,OACEI,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,EAE1CH,EAAAA,KAAC,OAAA,CAAK,UAAU,+BACd,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,0BAA2B,SAAAL,EAAE,eAAe,EAAE,QAC3D,IAAA,CAAE,UAAU,OAAQ,SAAAA,EAAE,eAAe,EAAE,EACvCG,EAAS,IAAKK,GACbH,EAAAA,IAACI,GAA4B,MAAOD,EAAQ,MAAO,KAAMA,EAAQ,KAAM,MAAOA,EAAQ,OAAxEA,EAAQ,KAAuE,CAC9F,EACDH,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA+B,SAAAL,EAAE,kBAAmB,CAAE,MAAO,gCAAA,CAAkC,CAAA,CAAE,CAAA,CAAA,CAChH,CAAA,EACF,CAEJ,EAEMS,EAAU,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,MAAAC,CAAA,WAC7B,UAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAG,UAAU,kCAAmC,SAAAK,EAAM,EACtDE,QACE,KAAA,CAAG,UAAU,gCACX,SAAAA,EAAM,IAAKC,GACVR,EAAAA,IAAC,MAAe,SAAAQ,CAAA,EAAPA,CAAY,CACtB,CAAA,CACH,QAEC,IAAA,CAAE,UAAU,OAAQ,SAAAF,CAAA,CAAK,CAAA,EAE9B"}
1
+ {"version":3,"file":"Privacy-D8m3h6P-.js","sources":["../../src/pages/Privacy.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\n\nconst Privacy = () => {\n const { t } = useTranslation();\n usePageTitle('titles.privacy');\n const sections = t('privacy.sections', { returnObjects: true }) || [];\n\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n\n <main className=\"max-w-4xl mx-auto px-4 py-12\">\n <h1 className=\"text-3xl font-bold mb-6\">{t('privacy.title')}</h1>\n <p className=\"mb-4\">{t('privacy.intro')}</p>\n {sections.map((section) => (\n <Section key={section.title} title={section.title} body={section.body} items={section.items} />\n ))}\n <p className=\"mt-6 text-sm text-slate-600\">{t('privacy.contact', { email: 'support@shimaumaservices.co.jp' })}</p>\n </main>\n </div>\n );\n};\n\r\nconst Section = ({ title, body, items }) => (\r\n <section>\r\n <h2 className=\"text-xl font-semibold mt-6 mb-2\">{title}</h2>\r\n {items ? (\r\n <ul className=\"list-disc pl-6 space-y-2 mb-4\">\r\n {items.map((item) => (\r\n <li key={item}>{item}</li>\r\n ))}\r\n </ul>\r\n ) : (\r\n <p className=\"mb-3\">{body}</p>\r\n )}\r\n </section>\r\n);\r\n\r\nexport default Privacy;\r\n"],"names":["Privacy","t","useTranslation","usePageTitle","sections","jsxs","jsx","StagingBadge","SiteHeader","section","Section","title","body","items","item"],"mappings":"sJAMA,MAAMA,EAAU,IAAM,CACpB,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAA,EACdC,EAAa,gBAAgB,EAC7B,MAAMC,EAAWH,EAAE,mBAAoB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAEnE,OACEI,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,EAE1CH,EAAAA,KAAC,OAAA,CAAK,UAAU,+BACd,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,0BAA2B,SAAAL,EAAE,eAAe,EAAE,QAC3D,IAAA,CAAE,UAAU,OAAQ,SAAAA,EAAE,eAAe,EAAE,EACvCG,EAAS,IAAKK,GACbH,EAAAA,IAACI,GAA4B,MAAOD,EAAQ,MAAO,KAAMA,EAAQ,KAAM,MAAOA,EAAQ,OAAxEA,EAAQ,KAAuE,CAC9F,EACDH,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA+B,SAAAL,EAAE,kBAAmB,CAAE,MAAO,gCAAA,CAAkC,CAAA,CAAE,CAAA,CAAA,CAChH,CAAA,EACF,CAEJ,EAEMS,EAAU,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,MAAAC,CAAA,WAC7B,UAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAG,UAAU,kCAAmC,SAAAK,EAAM,EACtDE,QACE,KAAA,CAAG,UAAU,gCACX,SAAAA,EAAM,IAAKC,GACVR,EAAAA,IAAC,MAAe,SAAAQ,CAAA,EAAPA,CAAY,CACtB,CAAA,CACH,QAEC,IAAA,CAAE,UAAU,OAAQ,SAAAF,CAAA,CAAK,CAAA,EAE9B"}
@@ -1,2 +1,2 @@
1
- import{u as j,r as l,j as e}from"./index-C4xM6WAU.js";import{u as y}from"./useAuth-D_UWt-CP.js";import{a as v,S as N}from"./LanguageSwitcher-Cp-6zMXz.js";import{S}from"./SiteHeader-Ch5fAKkA.js";import{S as P}from"./smartphone-DRYkbHrn.js";import{E as C,a as E}from"./eye-DkJdJAvt.js";import{s as k}from"./signIn-CYNXaR1Y.js";const I=()=>{if(typeof window>"u")return null;const t=new URLSearchParams(window.location.search).get("next");return!t||!t.startsWith("/")||t.startsWith("//")?null:t},$=()=>{const{t:s}=j();v("titles.signIn");const{isAuthenticated:t,isLoading:o}=y(),a=I(),[i,m]=l.useState(""),[d,p]=l.useState(""),[n,f]=l.useState(!1),[c,u]=l.useState(""),[b,x]=l.useState(!1);l.useEffect(()=>{!o&&t&&(window.location.href=a||"/app/")},[t,o,a]);const w=async r=>{r.preventDefault(),u(""),x(!0);try{await k({username:i,password:d}),window.location.href=a||"/app/"}catch(h){const g=h?.name||h?.code;u(s(`auth.errors.${g}`,s("auth.errors.default")))}finally{x(!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(N,{}),e.jsx(S,{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-slate-800 border border-slate-700 text-white shadow-lg",children:e.jsx(P,{size:24})}),e.jsx("h1",{className:"text-2xl font-bold",children:s("auth.title")}),e.jsx("p",{className:"text-slate-400 text-sm",children:s("auth.subtitle")})]}),e.jsxs("form",{onSubmit:w,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signin-email",className:"block text-sm text-slate-300",children:s("auth.email")}),e.jsx("input",{id:"signin-email",type:"email",value:i,onChange:r=>m(r.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:s("auth.placeholders.email")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signin-password",className:"block text-sm text-slate-300",children:s("auth.password")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"signin-password",type:n?"text":"password",value:d,onChange:r=>p(r.target.value),required:!0,autoComplete:"current-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:s("auth.placeholders.password")}),e.jsx("button",{type:"button",onClick:()=>f(r=>!r),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":n?s("auth.actions.hidePassword",{defaultValue:"Hide password"}):s("auth.actions.showPassword",{defaultValue:"Show password"}),title:n?s("auth.actions.hidePassword",{defaultValue:"Hide password"}):s("auth.actions.showPassword",{defaultValue:"Show password"}),children:n?e.jsx(C,{size:18}):e.jsx(E,{size:18})})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx("a",{href:a?`/forgot-password?next=${encodeURIComponent(a)}`:"/forgot-password",className:"text-xs text-blue-300 hover:text-blue-200 underline underline-offset-4",children:s("auth.links.forgotPassword")})})]}),c&&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:c}),e.jsx("button",{type:"submit",disabled:b,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:s("auth.actions.signIn")})]}),e.jsxs("div",{className:"text-center text-sm text-slate-400 space-y-1",children:[e.jsxs("div",{children:[s("auth.actions.needAccount")," ",e.jsx("button",{type:"button",className:"text-blue-300 hover:text-blue-200 underline",onClick:()=>{window.location.href=a?`/signup?next=${encodeURIComponent(a)}`:"/signup"},children:s("auth.actions.goToSignUp")})]}),e.jsxs("div",{className:"text-slate-500 text-xs",children:[e.jsx("div",{children:s("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:s("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:s("landing.footer.privacy")})]})]})]})]})})]})};export{$ as default};
2
- //# sourceMappingURL=SignIn-J1V55TpG.js.map
1
+ import{u as j,r as l,j as e}from"./index-Bffw9flM.js";import{u as y}from"./useAuth-ctmUbyCR.js";import{a as v,S as N}from"./LanguageSwitcher-CfUhVVuT.js";import{S}from"./SiteHeader-BGQW06JF.js";import{S as P}from"./smartphone-Cjrk_YxV.js";import{E as C,a as E}from"./eye-B1LPDhW7.js";import{s as k}from"./signIn-D-eCUhFT.js";const I=()=>{if(typeof window>"u")return null;const t=new URLSearchParams(window.location.search).get("next");return!t||!t.startsWith("/")||t.startsWith("//")?null:t},$=()=>{const{t:s}=j();v("titles.signIn");const{isAuthenticated:t,isLoading:o}=y(),a=I(),[i,m]=l.useState(""),[d,p]=l.useState(""),[n,f]=l.useState(!1),[c,u]=l.useState(""),[b,x]=l.useState(!1);l.useEffect(()=>{!o&&t&&(window.location.href=a||"/app/")},[t,o,a]);const w=async r=>{r.preventDefault(),u(""),x(!0);try{await k({username:i,password:d}),window.location.href=a||"/app/"}catch(h){const g=h?.name||h?.code;u(s(`auth.errors.${g}`,s("auth.errors.default")))}finally{x(!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(N,{}),e.jsx(S,{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-slate-800 border border-slate-700 text-white shadow-lg",children:e.jsx(P,{size:24})}),e.jsx("h1",{className:"text-2xl font-bold",children:s("auth.title")}),e.jsx("p",{className:"text-slate-400 text-sm",children:s("auth.subtitle")})]}),e.jsxs("form",{onSubmit:w,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signin-email",className:"block text-sm text-slate-300",children:s("auth.email")}),e.jsx("input",{id:"signin-email",type:"email",value:i,onChange:r=>m(r.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:s("auth.placeholders.email")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signin-password",className:"block text-sm text-slate-300",children:s("auth.password")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"signin-password",type:n?"text":"password",value:d,onChange:r=>p(r.target.value),required:!0,autoComplete:"current-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:s("auth.placeholders.password")}),e.jsx("button",{type:"button",onClick:()=>f(r=>!r),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":n?s("auth.actions.hidePassword",{defaultValue:"Hide password"}):s("auth.actions.showPassword",{defaultValue:"Show password"}),title:n?s("auth.actions.hidePassword",{defaultValue:"Hide password"}):s("auth.actions.showPassword",{defaultValue:"Show password"}),children:n?e.jsx(C,{size:18}):e.jsx(E,{size:18})})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx("a",{href:a?`/forgot-password?next=${encodeURIComponent(a)}`:"/forgot-password",className:"text-xs text-blue-300 hover:text-blue-200 underline underline-offset-4",children:s("auth.links.forgotPassword")})})]}),c&&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:c}),e.jsx("button",{type:"submit",disabled:b,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:s("auth.actions.signIn")})]}),e.jsxs("div",{className:"text-center text-sm text-slate-400 space-y-1",children:[e.jsxs("div",{children:[s("auth.actions.needAccount")," ",e.jsx("button",{type:"button",className:"text-blue-300 hover:text-blue-200 underline",onClick:()=>{window.location.href=a?`/signup?next=${encodeURIComponent(a)}`:"/signup"},children:s("auth.actions.goToSignUp")})]}),e.jsxs("div",{className:"text-slate-500 text-xs",children:[e.jsx("div",{children:s("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:s("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:s("landing.footer.privacy")})]})]})]})]})})]})};export{$ as default};
2
+ //# sourceMappingURL=SignIn-CINUig91.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignIn-J1V55TpG.js","sources":["../../src/pages/SignIn.jsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { signIn } from 'aws-amplify/auth';\nimport { Eye, EyeOff, Smartphone } 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 SignIn = () => {\n const { t } = useTranslation();\n usePageTitle('titles.signIn');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [passwordVisible, setPasswordVisible] = useState(false);\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 handleSubmit = async (e) => {\n e.preventDefault();\n setError('');\n setBusy(true);\n try {\n await signIn({ username: email, password });\n window.location.href = nextPath || '/app/';\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-slate-800 border border-slate-700 text-white shadow-lg\">\n <Smartphone size={24} />\n </div>\n <h1 className=\"text-2xl font-bold\">{t('auth.title')}</h1>\n <p className=\"text-slate-400 text-sm\">{t('auth.subtitle')}</p>\n </div>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"signin-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signin-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=\"signin-password\" className=\"block text-sm text-slate-300\">\n {t('auth.password')}\n </label>\n <div className=\"relative\">\n <input\n id=\"signin-password\"\n type={passwordVisible ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n autoComplete=\"current-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.password')}\n />\n <button\n type=\"button\"\n onClick={() => setPasswordVisible((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 passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {passwordVisible ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n <div className=\"flex justify-end\">\n <a\n href={nextPath ? `/forgot-password?next=${encodeURIComponent(nextPath)}` : '/forgot-password'}\n className=\"text-xs text-blue-300 hover:text-blue-200 underline underline-offset-4\"\n >\n {t('auth.links.forgotPassword')}\n </a>\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 <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.actions.signIn')}\n </button>\n </form>\n <div className=\"text-center text-sm text-slate-400 space-y-1\">\n <div>\n {t('auth.actions.needAccount')}{' '}\n <button\n type=\"button\"\n className=\"text-blue-300 hover:text-blue-200 underline\"\n onClick={() => {\n window.location.href = nextPath ? `/signup?next=${encodeURIComponent(nextPath)}` : '/signup';\n }}\n >\n {t('auth.actions.goToSignUp')}\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 SignIn;\n"],"names":["readNextPath","next","SignIn","t","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","email","setEmail","useState","password","setPassword","passwordVisible","setPasswordVisible","error","setError","busy","setBusy","useEffect","handleSubmit","e","signIn","err","key","jsxs","jsx","StagingBadge","SiteHeader","Smartphone","prev","EyeOff","Eye"],"mappings":"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"}
1
+ {"version":3,"file":"SignIn-CINUig91.js","sources":["../../src/pages/SignIn.jsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { signIn } from 'aws-amplify/auth';\nimport { Eye, EyeOff, Smartphone } 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 SignIn = () => {\n const { t } = useTranslation();\n usePageTitle('titles.signIn');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [passwordVisible, setPasswordVisible] = useState(false);\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 handleSubmit = async (e) => {\n e.preventDefault();\n setError('');\n setBusy(true);\n try {\n await signIn({ username: email, password });\n window.location.href = nextPath || '/app/';\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-slate-800 border border-slate-700 text-white shadow-lg\">\n <Smartphone size={24} />\n </div>\n <h1 className=\"text-2xl font-bold\">{t('auth.title')}</h1>\n <p className=\"text-slate-400 text-sm\">{t('auth.subtitle')}</p>\n </div>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"signin-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signin-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=\"signin-password\" className=\"block text-sm text-slate-300\">\n {t('auth.password')}\n </label>\n <div className=\"relative\">\n <input\n id=\"signin-password\"\n type={passwordVisible ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n autoComplete=\"current-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.password')}\n />\n <button\n type=\"button\"\n onClick={() => setPasswordVisible((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 passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {passwordVisible ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n <div className=\"flex justify-end\">\n <a\n href={nextPath ? `/forgot-password?next=${encodeURIComponent(nextPath)}` : '/forgot-password'}\n className=\"text-xs text-blue-300 hover:text-blue-200 underline underline-offset-4\"\n >\n {t('auth.links.forgotPassword')}\n </a>\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 <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.actions.signIn')}\n </button>\n </form>\n <div className=\"text-center text-sm text-slate-400 space-y-1\">\n <div>\n {t('auth.actions.needAccount')}{' '}\n <button\n type=\"button\"\n className=\"text-blue-300 hover:text-blue-200 underline\"\n onClick={() => {\n window.location.href = nextPath ? `/signup?next=${encodeURIComponent(nextPath)}` : '/signup';\n }}\n >\n {t('auth.actions.goToSignUp')}\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 SignIn;\n"],"names":["readNextPath","next","SignIn","t","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","email","setEmail","useState","password","setPassword","passwordVisible","setPasswordVisible","error","setError","busy","setBusy","useEffect","handleSubmit","e","signIn","err","key","jsxs","jsx","StagingBadge","SiteHeader","Smartphone","prev","EyeOff","Eye"],"mappings":"qUASA,MAAMA,EAAe,IAAM,CACzB,GAAI,OAAO,OAAW,IAAa,OAAO,KAE1C,MAAMC,EADS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACrC,IAAI,MAAM,EAE9B,MADI,CAACA,GACD,CAACA,EAAK,WAAW,GAAG,GAAKA,EAAK,WAAW,IAAI,EAAU,KACpDA,CACT,EAEMC,EAAS,IAAM,CACnB,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAA,EACdC,EAAa,eAAe,EAC5B,KAAM,CAAE,gBAAAC,EAAiB,UAAAC,CAAA,EAAcC,EAAA,EACjCC,EAAWT,EAAA,EACX,CAACU,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAE,EAC/B,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAAS,EAAE,EACrC,CAACG,EAAiBC,CAAkB,EAAIJ,EAAAA,SAAS,EAAK,EACtD,CAACK,EAAOC,CAAQ,EAAIN,EAAAA,SAAS,EAAE,EAC/B,CAACO,EAAMC,CAAO,EAAIR,EAAAA,SAAS,EAAK,EAEtCS,EAAAA,UAAU,IAAM,CACV,CAACd,GAAaD,IAChB,OAAO,SAAS,KAAOG,GAAY,QAEvC,EAAG,CAACH,EAAiBC,EAAWE,CAAQ,CAAC,EAEzC,MAAMa,EAAe,MAAOC,GAAM,CAChCA,EAAE,eAAA,EACFL,EAAS,EAAE,EACXE,EAAQ,EAAI,EACZ,GAAI,CACF,MAAMI,EAAO,CAAE,SAAUd,EAAO,SAAAG,EAAU,EAC1C,OAAO,SAAS,KAAOJ,GAAY,OACrC,OAASgB,EAAK,CACZ,MAAMC,EAAMD,GAAK,MAAQA,GAAK,KAC9BP,EAASf,EAAE,eAAeuB,CAAG,GAAIvB,EAAE,qBAAqB,CAAC,CAAC,CAC5D,QAAA,CACEiB,EAAQ,EAAK,CACf,CACF,EAEA,OACEO,EAAAA,KAAC,MAAA,CAAI,UAAU,mGACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,OAAO,MAAO,GAAO,QACxC,OAAA,CAAK,UAAU,qDACd,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,+FACf,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,yHACb,eAACG,EAAA,CAAW,KAAM,GAAI,CAAA,CACxB,QACC,KAAA,CAAG,UAAU,qBAAsB,SAAA5B,EAAE,YAAY,EAAE,QACnD,IAAA,CAAE,UAAU,yBAA0B,SAAAA,EAAE,eAAe,CAAA,CAAE,CAAA,EAC5D,EACAwB,EAAAA,KAAC,OAAA,CAAK,SAAUL,EAAc,UAAU,YACtC,SAAA,CAAAK,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,SAAM,QAAQ,eAAe,UAAU,+BACrC,SAAAzB,EAAE,YAAY,EACjB,EACAyB,EAAAA,IAAC,QAAA,CACC,GAAG,eACH,KAAK,QACL,MAAOlB,EACP,SAAWa,GAAMZ,EAASY,EAAE,OAAO,KAAK,EACxC,SAAQ,GACR,aAAa,QACb,UAAU,+HACV,YAAapB,EAAE,yBAAyB,CAAA,CAAA,CAC1C,EACF,EACAwB,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,SAAM,QAAQ,kBAAkB,UAAU,+BACxC,SAAAzB,EAAE,eAAe,EACpB,EACAwB,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,GAAG,kBACH,KAAMb,EAAkB,OAAS,WACjC,MAAOF,EACP,SAAWU,GAAMT,EAAYS,EAAE,OAAO,KAAK,EAC3C,SAAQ,GACR,aAAa,mBACb,UAAU,qIACV,YAAapB,EAAE,4BAA4B,CAAA,CAAA,EAE7CyB,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMZ,EAAoBgB,GAAS,CAACA,CAAI,EACjD,UAAU,wFACV,aACEjB,EACIZ,EAAE,4BAA6B,CAAE,aAAc,gBAAiB,EAChEA,EAAE,4BAA6B,CAAE,aAAc,gBAAiB,EAEtE,MACEY,EACIZ,EAAE,4BAA6B,CAAE,aAAc,gBAAiB,EAChEA,EAAE,4BAA6B,CAAE,aAAc,gBAAiB,EAGrE,SAAAY,QAAmBkB,EAAA,CAAO,KAAM,GAAI,EAAKL,EAAAA,IAACM,EAAA,CAAI,KAAM,EAAA,CAAI,CAAA,CAAA,CAC3D,EACF,EACAN,EAAAA,IAAC,MAAA,CAAI,UAAU,mBACb,SAAAA,EAAAA,IAAC,IAAA,CACC,KAAMnB,EAAW,yBAAyB,mBAAmBA,CAAQ,CAAC,GAAK,mBAC3E,UAAU,yEAET,WAAE,2BAA2B,CAAA,CAAA,CAChC,CACF,CAAA,EACF,EACCQ,GACCW,EAAAA,IAAC,MAAA,CACC,KAAK,QACL,UAAU,sFAET,SAAAX,CAAA,CAAA,EAGLW,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,SAAUT,EACV,UAAU,2IAET,WAAE,qBAAqB,CAAA,CAAA,CAC1B,EACF,EACAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,+CACb,SAAA,CAAAA,OAAC,MAAA,CACE,SAAA,CAAAxB,EAAE,0BAA0B,EAAG,IAChCyB,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,8CACV,QAAS,IAAM,CACb,OAAO,SAAS,KAAOnB,EAAW,gBAAgB,mBAAmBA,CAAQ,CAAC,GAAK,SACrF,EAEC,WAAE,yBAAyB,CAAA,CAAA,CAC9B,EACF,EACAkB,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAK,SAAAzB,EAAE,mBAAmB,CAAA,CAAE,EAC7BwB,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAC,EAAAA,IAAC,KAAE,KAAK,SAAS,UAAU,oDACxB,SAAAzB,EAAE,sBAAsB,EAC3B,EACAyB,EAAAA,IAAC,OAAA,CAAK,cAAY,OAAO,SAAA,IAAC,EAC1BA,MAAC,KAAE,KAAK,WAAW,UAAU,oDAC1B,SAAAzB,EAAE,wBAAwB,CAAA,CAC7B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACA,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{u as k,r as o,j as e}from"./index-C4xM6WAU.js";import{c as T,D as V,a as D,b as F,d as O,A as _,e as R,f as N,g as U,h as H,i as L,j as M,k as q,l as P,r as z,H as E,m as $,u as B,s as G}from"./useAuth-D_UWt-CP.js";import{a as W,S as X}from"./LanguageSwitcher-Cp-6zMXz.js";import{S as J}from"./SiteHeader-Ch5fAKkA.js";import{E as K,a as Q}from"./eye-DkJdJAvt.js";import{s as Y}from"./signIn-CYNXaR1Y.js";const Z=t=>T(O,F("ConfirmSignUp"),D(),{...V,...t});async function ee(t){const{username:a,confirmationCode:p,options:l}=t,r=_.getConfig().Auth?.Cognito;R(r);const{userPoolId:w,userPoolClientId:i,userPoolEndpoint:f}=r,h=l?.clientMetadata;N(!!a,U.EmptyConfirmSignUpUsername),N(!!p,U.EmptyConfirmSignUpCode);const y=H({username:a,userPoolId:w,userPoolClientId:i}),c=Z({endpointResolver:$({endpointOverride:f})}),{Session:S}=await c({region:M(r.userPoolId),userAgentValue:L(q.ConfirmSignUp)},{Username:a,ConfirmationCode:p,ClientMetadata:h,ForceAliasCreation:l?.forceAliasCreation,ClientId:r.userPoolClientId,UserContextData:y});return new Promise((x,j)=>{try{const n={isSignUpComplete:!0,nextStep:{signUpStep:"DONE"}},d=P.getState();if(!d.active||d.username!==a){x(n),z();return}P.dispatch({type:"SET_SESSION",value:S});const u=E.listen("auth-internal",({payload:m})=>{m.event==="autoSignIn"&&(x({isSignUpComplete:!0,nextStep:{signUpStep:"COMPLETE_AUTO_SIGN_IN"}}),u())});E.dispatch("auth-internal",{event:"confirmSignUp",data:n})}catch(n){j(n)}})}const te=()=>{if(typeof window>"u")return null;const a=new URLSearchParams(window.location.search).get("next");return!a||!a.startsWith("/")||a.startsWith("//")?null:a},ie=()=>{const{t}=k();W("titles.signUp");const{isAuthenticated:a,isLoading:p}=B(),l=te(),[r,w]=o.useState("form"),[i,f]=o.useState(""),[h,y]=o.useState(""),[c,S]=o.useState(!1),[x,j]=o.useState(""),[n,d]=o.useState(""),[u,m]=o.useState(""),[C,b]=o.useState(!1);o.useEffect(()=>{!p&&a&&(window.location.href=l||"/app/")},[a,p,l]);const A=async s=>{s.preventDefault(),m(""),d(""),b(!0);try{await G({username:i,password:h,options:{userAttributes:{email:i}}}),d(t("auth.success.signup")),w("confirm")}catch(g){const v=g?.name||g?.code;m(t(`auth.errors.${v}`,t("auth.errors.default")))}finally{b(!1)}},I=async s=>{s.preventDefault(),m(""),d(""),b(!0);try{await ee({username:i,confirmationCode:x}),d(t("auth.success.confirm")),await Y({username:i,password:h}),window.location.href=l||"/app/"}catch(g){const v=g?.name||g?.code;m(t(`auth.errors.${v}`,t("auth.errors.default")))}finally{b(!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(X,{}),e.jsx(J,{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(r==="form"?"auth.signupTitle":"auth.actions.confirm")}),e.jsx("p",{className:"text-slate-400 text-sm",children:t(r==="form"?"auth.signupSubtitle":"auth.code")})]}),r==="form"&&e.jsxs("form",{onSubmit:A,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signup-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"signup-email",type:"email",value:i,onChange:s=>f(s.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:"signup-password",className:"block text-sm text-slate-300",children:t("auth.password")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"signup-password",type:c?"text":"password",value:h,onChange:s=>y(s.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:()=>S(s=>!s),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":c?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),title:c?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),children:c?e.jsx(K,{size:18}):e.jsx(Q,{size:18})})]})]}),u&&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:u}),n&&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:n}),e.jsx("button",{type:"submit",disabled:C,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.actions.createAccount")})]}),r==="confirm"&&e.jsxs("form",{onSubmit:I,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signup-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"signup-email",type:"email",value:i,onChange:s=>f(s.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:"signup-code",className:"block text-sm text-slate-300",children:t("auth.code")}),e.jsx("input",{id:"signup-code",type:"text",value:x,onChange:s=>j(s.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"})]}),u&&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:u}),n&&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:n}),e.jsx("button",{type:"submit",disabled:C,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.actions.confirm")})]}),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=l?`/signin?next=${encodeURIComponent(l)}`:"/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{ie as default};
2
- //# sourceMappingURL=SignUp-D6y9FaIp.js.map
1
+ import{u as k,r as o,j as e}from"./index-Bffw9flM.js";import{c as T,D as V,a as D,b as F,d as O,A as _,e as R,f as N,g as U,h as H,i as L,j as M,k as q,l as P,r as z,H as E,m as $,u as B,s as G}from"./useAuth-ctmUbyCR.js";import{a as W,S as X}from"./LanguageSwitcher-CfUhVVuT.js";import{S as J}from"./SiteHeader-BGQW06JF.js";import{E as K,a as Q}from"./eye-B1LPDhW7.js";import{s as Y}from"./signIn-D-eCUhFT.js";const Z=t=>T(O,F("ConfirmSignUp"),D(),{...V,...t});async function ee(t){const{username:a,confirmationCode:p,options:l}=t,r=_.getConfig().Auth?.Cognito;R(r);const{userPoolId:w,userPoolClientId:i,userPoolEndpoint:f}=r,h=l?.clientMetadata;N(!!a,U.EmptyConfirmSignUpUsername),N(!!p,U.EmptyConfirmSignUpCode);const y=H({username:a,userPoolId:w,userPoolClientId:i}),c=Z({endpointResolver:$({endpointOverride:f})}),{Session:S}=await c({region:M(r.userPoolId),userAgentValue:L(q.ConfirmSignUp)},{Username:a,ConfirmationCode:p,ClientMetadata:h,ForceAliasCreation:l?.forceAliasCreation,ClientId:r.userPoolClientId,UserContextData:y});return new Promise((x,j)=>{try{const n={isSignUpComplete:!0,nextStep:{signUpStep:"DONE"}},d=P.getState();if(!d.active||d.username!==a){x(n),z();return}P.dispatch({type:"SET_SESSION",value:S});const u=E.listen("auth-internal",({payload:m})=>{m.event==="autoSignIn"&&(x({isSignUpComplete:!0,nextStep:{signUpStep:"COMPLETE_AUTO_SIGN_IN"}}),u())});E.dispatch("auth-internal",{event:"confirmSignUp",data:n})}catch(n){j(n)}})}const te=()=>{if(typeof window>"u")return null;const a=new URLSearchParams(window.location.search).get("next");return!a||!a.startsWith("/")||a.startsWith("//")?null:a},ie=()=>{const{t}=k();W("titles.signUp");const{isAuthenticated:a,isLoading:p}=B(),l=te(),[r,w]=o.useState("form"),[i,f]=o.useState(""),[h,y]=o.useState(""),[c,S]=o.useState(!1),[x,j]=o.useState(""),[n,d]=o.useState(""),[u,m]=o.useState(""),[C,b]=o.useState(!1);o.useEffect(()=>{!p&&a&&(window.location.href=l||"/app/")},[a,p,l]);const A=async s=>{s.preventDefault(),m(""),d(""),b(!0);try{await G({username:i,password:h,options:{userAttributes:{email:i}}}),d(t("auth.success.signup")),w("confirm")}catch(g){const v=g?.name||g?.code;m(t(`auth.errors.${v}`,t("auth.errors.default")))}finally{b(!1)}},I=async s=>{s.preventDefault(),m(""),d(""),b(!0);try{await ee({username:i,confirmationCode:x}),d(t("auth.success.confirm")),await Y({username:i,password:h}),window.location.href=l||"/app/"}catch(g){const v=g?.name||g?.code;m(t(`auth.errors.${v}`,t("auth.errors.default")))}finally{b(!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(X,{}),e.jsx(J,{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(r==="form"?"auth.signupTitle":"auth.actions.confirm")}),e.jsx("p",{className:"text-slate-400 text-sm",children:t(r==="form"?"auth.signupSubtitle":"auth.code")})]}),r==="form"&&e.jsxs("form",{onSubmit:A,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signup-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"signup-email",type:"email",value:i,onChange:s=>f(s.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:"signup-password",className:"block text-sm text-slate-300",children:t("auth.password")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"signup-password",type:c?"text":"password",value:h,onChange:s=>y(s.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:()=>S(s=>!s),className:"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200","aria-label":c?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),title:c?t("auth.actions.hidePassword",{defaultValue:"Hide password"}):t("auth.actions.showPassword",{defaultValue:"Show password"}),children:c?e.jsx(K,{size:18}):e.jsx(Q,{size:18})})]})]}),u&&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:u}),n&&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:n}),e.jsx("button",{type:"submit",disabled:C,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.actions.createAccount")})]}),r==="confirm"&&e.jsxs("form",{onSubmit:I,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"signup-email",className:"block text-sm text-slate-300",children:t("auth.email")}),e.jsx("input",{id:"signup-email",type:"email",value:i,onChange:s=>f(s.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:"signup-code",className:"block text-sm text-slate-300",children:t("auth.code")}),e.jsx("input",{id:"signup-code",type:"text",value:x,onChange:s=>j(s.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"})]}),u&&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:u}),n&&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:n}),e.jsx("button",{type:"submit",disabled:C,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.actions.confirm")})]}),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=l?`/signin?next=${encodeURIComponent(l)}`:"/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{ie as default};
2
+ //# sourceMappingURL=SignUp-B1H6dQgE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignUp-D6y9FaIp.js","sources":["../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmSignUpClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/confirmSignUp.mjs","../../src/pages/SignUp.jsx"],"sourcesContent":["import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\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';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createConfirmSignUpClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ConfirmSignUp'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createConfirmSignUpClient };\n//# sourceMappingURL=createConfirmSignUpClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction, HubInternal } from '@aws-amplify/core/internals/utils';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.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 { createConfirmSignUpClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmSignUpClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { autoSignInStore } from '../../../client/utils/store/autoSignInStore.mjs';\nimport '../../../client/utils/store/signInStore.mjs';\nimport { resetAutoSignIn } from './autoSignIn.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Confirms a new user account.\n *\n * @param input - The ConfirmSignUpInput object.\n * @returns ConfirmSignUpOutput\n * @throws -{@link ConfirmSignUpException }\n * Thrown due to an invalid confirmation code.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty confirmation code\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n */\nasync function confirmSignUp(input) {\n const { username, confirmationCode, options } = input;\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolId, userPoolClientId, userPoolEndpoint } = authConfig;\n const clientMetadata = options?.clientMetadata;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyConfirmSignUpUsername);\n assertValidationError(!!confirmationCode, AuthValidationErrorCode.EmptyConfirmSignUpCode);\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const confirmSignUpClient = createConfirmSignUpClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const { Session: session } = await confirmSignUpClient({\n region: getRegionFromUserPoolId(authConfig.userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignUp),\n }, {\n Username: username,\n ConfirmationCode: confirmationCode,\n ClientMetadata: clientMetadata,\n ForceAliasCreation: options?.forceAliasCreation,\n ClientId: authConfig.userPoolClientId,\n UserContextData,\n });\n return new Promise((resolve, reject) => {\n try {\n const signUpOut = {\n isSignUpComplete: true,\n nextStep: {\n signUpStep: 'DONE',\n },\n };\n const autoSignInStoreState = autoSignInStore.getState();\n if (!autoSignInStoreState.active ||\n autoSignInStoreState.username !== username) {\n resolve(signUpOut);\n resetAutoSignIn();\n return;\n }\n autoSignInStore.dispatch({ type: 'SET_SESSION', value: session });\n const stopListener = HubInternal.listen('auth-internal', ({ payload }) => {\n switch (payload.event) {\n case 'autoSignIn':\n resolve({\n isSignUpComplete: true,\n nextStep: {\n signUpStep: 'COMPLETE_AUTO_SIGN_IN',\n },\n });\n stopListener();\n }\n });\n HubInternal.dispatch('auth-internal', {\n event: 'confirmSignUp',\n data: signUpOut,\n });\n }\n catch (error) {\n reject(error);\n }\n });\n}\n\nexport { confirmSignUp };\n//# sourceMappingURL=confirmSignUp.mjs.map\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { signUp, confirmSignUp, signIn } 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 SignUp = () => {\n const { t } = useTranslation();\n usePageTitle('titles.signUp');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [stage, setStage] = useState('form'); // form | confirm\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [passwordVisible, setPasswordVisible] = useState(false);\n const [code, setCode] = useState('');\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 handleSignUp = async (e) => {\n e.preventDefault();\n setError('');\n setMessage('');\n setBusy(true);\n try {\n await signUp({ username: email, password, options: { userAttributes: { email } } });\n setMessage(t('auth.success.signup'));\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 setError('');\n setMessage('');\n setBusy(true);\n try {\n await confirmSignUp({ username: email, confirmationCode: code });\n setMessage(t('auth.success.confirm'));\n // 自動でサインインして /app へ\n await signIn({ username: email, password });\n window.location.href = nextPath || '/app/';\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\">{stage === 'form' ? t('auth.signupTitle') : t('auth.actions.confirm')}</h1>\n <p className=\"text-slate-400 text-sm\">{stage === 'form' ? t('auth.signupSubtitle') : t('auth.code')}</p>\n </div>\n\n {stage === 'form' && (\n <form onSubmit={handleSignUp} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"signup-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signup-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=\"signup-password\" className=\"block text-sm text-slate-300\">\n {t('auth.password')}\n </label>\n <div className=\"relative\">\n <input\n id=\"signup-password\"\n type={passwordVisible ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(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={() => setPasswordVisible((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 passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {passwordVisible ? <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.actions.createAccount')}\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=\"signup-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signup-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=\"signup-code\" className=\"block text-sm text-slate-300\">\n {t('auth.code')}\n </label>\n <input\n id=\"signup-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 {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.actions.confirm')}\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 SignUp;\n"],"names":["createConfirmSignUpClient","config","composeServiceApi","cognitoUserPoolTransferHandler","createUserPoolSerializer","createUserPoolDeserializer","DEFAULT_SERVICE_CLIENT_API_CONFIG","confirmSignUp","input","username","confirmationCode","options","authConfig","Amplify","assertTokenProviderConfig","userPoolId","userPoolClientId","userPoolEndpoint","clientMetadata","assertValidationError","AuthValidationErrorCode","UserContextData","getUserContextData","confirmSignUpClient","createCognitoUserPoolEndpointResolver","session","getRegionFromUserPoolId","getAuthUserAgentValue","AuthAction","resolve","reject","signUpOut","autoSignInStoreState","autoSignInStore","resetAutoSignIn","stopListener","HubInternal","payload","error","readNextPath","next","SignUp","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","stage","setStage","useState","email","setEmail","password","setPassword","passwordVisible","setPasswordVisible","code","setCode","message","setMessage","setError","busy","setBusy","useEffect","handleSignUp","e","signUp","err","key","handleConfirm","signIn","jsxs","jsx","StagingBadge","SiteHeader","prev","EyeOff","Eye"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"SignUp-B1H6dQgE.js","sources":["../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmSignUpClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/confirmSignUp.mjs","../../src/pages/SignUp.jsx"],"sourcesContent":["import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\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';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createConfirmSignUpClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ConfirmSignUp'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createConfirmSignUpClient };\n//# sourceMappingURL=createConfirmSignUpClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction, HubInternal } from '@aws-amplify/core/internals/utils';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.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 { createConfirmSignUpClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmSignUpClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { autoSignInStore } from '../../../client/utils/store/autoSignInStore.mjs';\nimport '../../../client/utils/store/signInStore.mjs';\nimport { resetAutoSignIn } from './autoSignIn.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Confirms a new user account.\n *\n * @param input - The ConfirmSignUpInput object.\n * @returns ConfirmSignUpOutput\n * @throws -{@link ConfirmSignUpException }\n * Thrown due to an invalid confirmation code.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty confirmation code\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n */\nasync function confirmSignUp(input) {\n const { username, confirmationCode, options } = input;\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolId, userPoolClientId, userPoolEndpoint } = authConfig;\n const clientMetadata = options?.clientMetadata;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyConfirmSignUpUsername);\n assertValidationError(!!confirmationCode, AuthValidationErrorCode.EmptyConfirmSignUpCode);\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const confirmSignUpClient = createConfirmSignUpClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const { Session: session } = await confirmSignUpClient({\n region: getRegionFromUserPoolId(authConfig.userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignUp),\n }, {\n Username: username,\n ConfirmationCode: confirmationCode,\n ClientMetadata: clientMetadata,\n ForceAliasCreation: options?.forceAliasCreation,\n ClientId: authConfig.userPoolClientId,\n UserContextData,\n });\n return new Promise((resolve, reject) => {\n try {\n const signUpOut = {\n isSignUpComplete: true,\n nextStep: {\n signUpStep: 'DONE',\n },\n };\n const autoSignInStoreState = autoSignInStore.getState();\n if (!autoSignInStoreState.active ||\n autoSignInStoreState.username !== username) {\n resolve(signUpOut);\n resetAutoSignIn();\n return;\n }\n autoSignInStore.dispatch({ type: 'SET_SESSION', value: session });\n const stopListener = HubInternal.listen('auth-internal', ({ payload }) => {\n switch (payload.event) {\n case 'autoSignIn':\n resolve({\n isSignUpComplete: true,\n nextStep: {\n signUpStep: 'COMPLETE_AUTO_SIGN_IN',\n },\n });\n stopListener();\n }\n });\n HubInternal.dispatch('auth-internal', {\n event: 'confirmSignUp',\n data: signUpOut,\n });\n }\n catch (error) {\n reject(error);\n }\n });\n}\n\nexport { confirmSignUp };\n//# sourceMappingURL=confirmSignUp.mjs.map\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { signUp, confirmSignUp, signIn } 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 SignUp = () => {\n const { t } = useTranslation();\n usePageTitle('titles.signUp');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [stage, setStage] = useState('form'); // form | confirm\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [passwordVisible, setPasswordVisible] = useState(false);\n const [code, setCode] = useState('');\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 handleSignUp = async (e) => {\n e.preventDefault();\n setError('');\n setMessage('');\n setBusy(true);\n try {\n await signUp({ username: email, password, options: { userAttributes: { email } } });\n setMessage(t('auth.success.signup'));\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 setError('');\n setMessage('');\n setBusy(true);\n try {\n await confirmSignUp({ username: email, confirmationCode: code });\n setMessage(t('auth.success.confirm'));\n // 自動でサインインして /app へ\n await signIn({ username: email, password });\n window.location.href = nextPath || '/app/';\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\">{stage === 'form' ? t('auth.signupTitle') : t('auth.actions.confirm')}</h1>\n <p className=\"text-slate-400 text-sm\">{stage === 'form' ? t('auth.signupSubtitle') : t('auth.code')}</p>\n </div>\n\n {stage === 'form' && (\n <form onSubmit={handleSignUp} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"signup-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signup-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=\"signup-password\" className=\"block text-sm text-slate-300\">\n {t('auth.password')}\n </label>\n <div className=\"relative\">\n <input\n id=\"signup-password\"\n type={passwordVisible ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(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={() => setPasswordVisible((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 passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n passwordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {passwordVisible ? <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.actions.createAccount')}\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=\"signup-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"signup-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=\"signup-code\" className=\"block text-sm text-slate-300\">\n {t('auth.code')}\n </label>\n <input\n id=\"signup-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 {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.actions.confirm')}\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 SignUp;\n"],"names":["createConfirmSignUpClient","config","composeServiceApi","cognitoUserPoolTransferHandler","createUserPoolSerializer","createUserPoolDeserializer","DEFAULT_SERVICE_CLIENT_API_CONFIG","confirmSignUp","input","username","confirmationCode","options","authConfig","Amplify","assertTokenProviderConfig","userPoolId","userPoolClientId","userPoolEndpoint","clientMetadata","assertValidationError","AuthValidationErrorCode","UserContextData","getUserContextData","confirmSignUpClient","createCognitoUserPoolEndpointResolver","session","getRegionFromUserPoolId","getAuthUserAgentValue","AuthAction","resolve","reject","signUpOut","autoSignInStoreState","autoSignInStore","resetAutoSignIn","stopListener","HubInternal","payload","error","readNextPath","next","SignUp","useTranslation","usePageTitle","isAuthenticated","isLoading","useAuth","nextPath","stage","setStage","useState","email","setEmail","password","setPassword","passwordVisible","setPasswordVisible","code","setCode","message","setMessage","setError","busy","setBusy","useEffect","handleSignUp","e","signUp","err","key","handleConfirm","signIn","jsxs","jsx","StagingBadge","SiteHeader","prev","EyeOff","Eye"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,2 +1,2 @@
1
- import{u as K,r as h,j as e}from"./index-C4xM6WAU.js";import{c as Q,u as U,L as S,X as W}from"./LanguageSwitcher-Cp-6zMXz.js";const Y=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],D=Q("menu",Y),E=({className:x})=>e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-md ${x}`,"aria-label":"ShipScreens on X (opens in new tab)",children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M20.5 3h-2.4L12 9.6 6.9 3H3l7.2 9.1L3.2 21h2.4L12 14l6.6 7h3.1l-7.7-9.5L20.5 3Z"})})}),H=({variant:x="dark",active:t=null,logoHref:L="/",toolsHref:b="/tools/",pricingHref:m="/pricing",openAppHref:f="/app/",showTools:p=!0,showPricing:g=!0,showOpenApp:j=!0,showX:v=!0,showLanguageSwitcher:N=!0,languageSwitcherClassName:B="hidden sm:flex",onToolsClick:w,onPricingClick:$,onOpenAppClick:k,primaryCta:s=null})=>{const{t:n}=K(),a=x==="dark",R=!!(s?.href&&s?.label),[o,y]=h.useState(!1),V=h.useRef(null),C=h.useRef(null),c=h.useCallback(()=>y(!1),[]);U({isOpen:o,onClose:c,panelRef:V,initialFocusRef:C});const l=a?"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950 rounded-md":"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white rounded-md",F=a?`text-sm text-slate-300 hover:text-white transition-colors ${l}`:`text-sm text-slate-600 hover:text-slate-900 transition-colors ${l}`,X=a?"text-white font-semibold":"text-slate-900 font-semibold",i=r=>`${F}${t===r?` ${X}`:""}`,z=a?`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-800 bg-slate-950 text-sm text-slate-200 hover:bg-slate-900 transition ${l}`:`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-200 bg-white text-sm text-slate-800 hover:bg-slate-50 transition ${l}`,I=a?"border-blue-500 text-white":"border-blue-600 text-slate-900",M=r=>`${z}${t===r?` ${I}`:""}`,P=()=>{if(!o)return null;const r=a?"bg-slate-900/70":"bg-slate-900/40",q=a?"bg-slate-950 border-slate-800 text-white":"bg-white border-slate-200 text-slate-800",A=a?"border-slate-800":"border-slate-200",G=a?`border-slate-800 text-slate-200 hover:bg-slate-900 ${l}`:`border-slate-200 text-slate-600 hover:bg-slate-50 ${l}`,d=u=>J=>{u?.(J),c()},_=n("common.menu",{defaultValue:"Menu"});return e.jsx("div",{className:`fixed inset-0 z-[2200] ${r} backdrop-blur-sm p-4 sm:hidden`,role:"dialog","aria-modal":"true","aria-label":_,onMouseDown:u=>{u.target===u.currentTarget&&c()},children:e.jsxs("div",{ref:V,id:"shipscreens-mobile-menu",className:`w-full max-w-sm ml-auto rounded-2xl shadow-2xl border overflow-hidden ${q}`,children:[e.jsxs("div",{className:`flex items-center justify-between px-4 py-3 border-b ${A}`,children:[e.jsx("div",{className:"text-sm font-bold",children:_}),e.jsx("button",{ref:C,type:"button",onClick:c,className:`p-2 rounded-lg border transition ${G}`,"aria-label":n("common.close",{defaultValue:"Close"}),title:n("common.close",{defaultValue:"Close"}),children:e.jsx(W,{size:16})})]}),e.jsxs("div",{className:"p-4 space-y-3",children:[N&&e.jsx(S,{className:"w-full justify-center"}),e.jsxs("div",{className:"space-y-2",children:[p&&e.jsx("a",{href:b,onClick:d(w),className:M("tools"),"aria-current":t==="tools"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.tools")})}),g&&e.jsx("a",{href:m,onClick:d($),className:M("pricing"),"aria-current":t==="pricing"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.pricing",{defaultValue:"Pricing"})})}),j&&e.jsx("a",{href:f,onClick:d(k),className:M("app"),"aria-current":t==="app"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.openApp")})}),v&&e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:z,children:e.jsx("span",{children:"X"})})]}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:d(s.onClick),className:`w-full inline-flex items-center justify-center px-4 py-2 rounded-lg font-semibold transition ${a?"bg-white text-slate-900 hover:scale-[1.02]":"bg-slate-900 text-white hover:bg-slate-800"} ${l}`,children:s.label})]})]})})},Z=a?e.jsxs("header",{className:"max-w-6xl mx-auto px-4 py-4 sm:px-6 sm:py-6 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"text-lg font-bold",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-300 hover:text-white transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:`${R?"hidden sm:inline ":""}${i("app")}`,"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),R&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-3 py-1.5 sm:px-4 sm:py-2 text-sm whitespace-nowrap rounded-lg bg-white text-slate-900 font-semibold hover:scale-[1.02] transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-800 bg-slate-950 text-slate-200 hover:bg-slate-900 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]}):e.jsx("header",{className:"border-b border-slate-200 bg-white",children:e.jsxs("div",{className:"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-9 h-9 rounded-xl border border-slate-200 bg-white p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"font-bold text-slate-900",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-500 hover:text-slate-900 transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:i("app"),"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800 transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]})});return e.jsxs(e.Fragment,{children:[Z,P()]})};export{H as S};
2
- //# sourceMappingURL=SiteHeader-Ch5fAKkA.js.map
1
+ import{u as K,r as h,j as e}from"./index-Bffw9flM.js";import{c as Q,u as U,L as S,X as W}from"./LanguageSwitcher-CfUhVVuT.js";const Y=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],D=Q("menu",Y),E=({className:x})=>e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-md ${x}`,"aria-label":"ShipScreens on X (opens in new tab)",children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M20.5 3h-2.4L12 9.6 6.9 3H3l7.2 9.1L3.2 21h2.4L12 14l6.6 7h3.1l-7.7-9.5L20.5 3Z"})})}),H=({variant:x="dark",active:t=null,logoHref:L="/",toolsHref:b="/tools/",pricingHref:m="/pricing",openAppHref:f="/app/",showTools:p=!0,showPricing:g=!0,showOpenApp:j=!0,showX:v=!0,showLanguageSwitcher:N=!0,languageSwitcherClassName:B="hidden sm:flex",onToolsClick:w,onPricingClick:$,onOpenAppClick:k,primaryCta:s=null})=>{const{t:n}=K(),a=x==="dark",R=!!(s?.href&&s?.label),[o,y]=h.useState(!1),V=h.useRef(null),C=h.useRef(null),c=h.useCallback(()=>y(!1),[]);U({isOpen:o,onClose:c,panelRef:V,initialFocusRef:C});const l=a?"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950 rounded-md":"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white rounded-md",F=a?`text-sm text-slate-300 hover:text-white transition-colors ${l}`:`text-sm text-slate-600 hover:text-slate-900 transition-colors ${l}`,X=a?"text-white font-semibold":"text-slate-900 font-semibold",i=r=>`${F}${t===r?` ${X}`:""}`,z=a?`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-800 bg-slate-950 text-sm text-slate-200 hover:bg-slate-900 transition ${l}`:`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-200 bg-white text-sm text-slate-800 hover:bg-slate-50 transition ${l}`,I=a?"border-blue-500 text-white":"border-blue-600 text-slate-900",M=r=>`${z}${t===r?` ${I}`:""}`,P=()=>{if(!o)return null;const r=a?"bg-slate-900/70":"bg-slate-900/40",q=a?"bg-slate-950 border-slate-800 text-white":"bg-white border-slate-200 text-slate-800",A=a?"border-slate-800":"border-slate-200",G=a?`border-slate-800 text-slate-200 hover:bg-slate-900 ${l}`:`border-slate-200 text-slate-600 hover:bg-slate-50 ${l}`,d=u=>J=>{u?.(J),c()},_=n("common.menu",{defaultValue:"Menu"});return e.jsx("div",{className:`fixed inset-0 z-[2200] ${r} backdrop-blur-sm p-4 sm:hidden`,role:"dialog","aria-modal":"true","aria-label":_,onMouseDown:u=>{u.target===u.currentTarget&&c()},children:e.jsxs("div",{ref:V,id:"shipscreens-mobile-menu",className:`w-full max-w-sm ml-auto rounded-2xl shadow-2xl border overflow-hidden ${q}`,children:[e.jsxs("div",{className:`flex items-center justify-between px-4 py-3 border-b ${A}`,children:[e.jsx("div",{className:"text-sm font-bold",children:_}),e.jsx("button",{ref:C,type:"button",onClick:c,className:`p-2 rounded-lg border transition ${G}`,"aria-label":n("common.close",{defaultValue:"Close"}),title:n("common.close",{defaultValue:"Close"}),children:e.jsx(W,{size:16})})]}),e.jsxs("div",{className:"p-4 space-y-3",children:[N&&e.jsx(S,{className:"w-full justify-center"}),e.jsxs("div",{className:"space-y-2",children:[p&&e.jsx("a",{href:b,onClick:d(w),className:M("tools"),"aria-current":t==="tools"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.tools")})}),g&&e.jsx("a",{href:m,onClick:d($),className:M("pricing"),"aria-current":t==="pricing"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.pricing",{defaultValue:"Pricing"})})}),j&&e.jsx("a",{href:f,onClick:d(k),className:M("app"),"aria-current":t==="app"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.openApp")})}),v&&e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:z,children:e.jsx("span",{children:"X"})})]}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:d(s.onClick),className:`w-full inline-flex items-center justify-center px-4 py-2 rounded-lg font-semibold transition ${a?"bg-white text-slate-900 hover:scale-[1.02]":"bg-slate-900 text-white hover:bg-slate-800"} ${l}`,children:s.label})]})]})})},Z=a?e.jsxs("header",{className:"max-w-6xl mx-auto px-4 py-4 sm:px-6 sm:py-6 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"text-lg font-bold",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-300 hover:text-white transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:`${R?"hidden sm:inline ":""}${i("app")}`,"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),R&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-3 py-1.5 sm:px-4 sm:py-2 text-sm whitespace-nowrap rounded-lg bg-white text-slate-900 font-semibold hover:scale-[1.02] transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-800 bg-slate-950 text-slate-200 hover:bg-slate-900 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]}):e.jsx("header",{className:"border-b border-slate-200 bg-white",children:e.jsxs("div",{className:"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-9 h-9 rounded-xl border border-slate-200 bg-white p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"font-bold text-slate-900",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-500 hover:text-slate-900 transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:i("app"),"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800 transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]})});return e.jsxs(e.Fragment,{children:[Z,P()]})};export{H as S};
2
+ //# sourceMappingURL=SiteHeader-BGQW06JF.js.map