shipscreens 0.1.0

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 (605) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +27 -0
  3. package/bin/shipscreens.js +664 -0
  4. package/cli/assetRefs.js +33 -0
  5. package/cli/auth.js +454 -0
  6. package/cli/buildOutputs.js +146 -0
  7. package/cli/commands/auth.js +65 -0
  8. package/cli/commands/build.js +347 -0
  9. package/cli/commands/copyImport.js +263 -0
  10. package/cli/commands/exportFramefile.js +404 -0
  11. package/cli/commands/init.js +339 -0
  12. package/cli/commands/lock.js +144 -0
  13. package/cli/commands/plan.js +203 -0
  14. package/cli/commands/stage.js +318 -0
  15. package/cli/commands/validate.js +89 -0
  16. package/cli/commands/verify.js +659 -0
  17. package/cli/commands/wizard.js +266 -0
  18. package/cli/dataUrl.js +19 -0
  19. package/cli/fastlaneZip.js +115 -0
  20. package/cli/hash.js +13 -0
  21. package/cli/loadConfig.js +55 -0
  22. package/cli/outputPaths.js +24 -0
  23. package/cli/packageRoot.js +8 -0
  24. package/cli/pathUtils.js +25 -0
  25. package/cli/rendererServer.js +48 -0
  26. package/cli/repoRoot.js +23 -0
  27. package/cli/rootPolicy.js +17 -0
  28. package/cli/schema.js +290 -0
  29. package/cli/snapshotFromConfig.js +116 -0
  30. package/cli/staticServer.js +102 -0
  31. package/cli/templateConfig.js +51 -0
  32. package/cli/viteServer.js +40 -0
  33. package/dist/app/apple-touch-icon.png +0 -0
  34. package/dist/app/assets/AgentCli-8e28laT4.js +17 -0
  35. package/dist/app/assets/AgentCli-8e28laT4.js.map +1 -0
  36. package/dist/app/assets/App-DU0xew0e.js +13 -0
  37. package/dist/app/assets/App-DU0xew0e.js.map +1 -0
  38. package/dist/app/assets/AppReviewAso-OLwc4Rw_.js +4 -0
  39. package/dist/app/assets/AppReviewAso-OLwc4Rw_.js.map +1 -0
  40. package/dist/app/assets/Cancelled-BoeZQa1S.js +2 -0
  41. package/dist/app/assets/Cancelled-BoeZQa1S.js.map +1 -0
  42. package/dist/app/assets/CliPreflightCard-CxYyogdF.js +2 -0
  43. package/dist/app/assets/CliPreflightCard-CxYyogdF.js.map +1 -0
  44. package/dist/app/assets/CopyButton-CGfuSJtU.js +2 -0
  45. package/dist/app/assets/CopyButton-CGfuSJtU.js.map +1 -0
  46. package/dist/app/assets/FastlaneScreenshots-CFT6IiRb.js +52 -0
  47. package/dist/app/assets/FastlaneScreenshots-CFT6IiRb.js.map +1 -0
  48. package/dist/app/assets/FirstExport-B_UDacZm.js +6 -0
  49. package/dist/app/assets/FirstExport-B_UDacZm.js.map +1 -0
  50. package/dist/app/assets/FivePanelFramework-C1z_xUbe.js +60 -0
  51. package/dist/app/assets/FivePanelFramework-C1z_xUbe.js.map +1 -0
  52. package/dist/app/assets/ForgotPassword-ZQ8U3ejz.js +2 -0
  53. package/dist/app/assets/ForgotPassword-ZQ8U3ejz.js.map +1 -0
  54. package/dist/app/assets/Landing-DAIP71DD.js +2 -0
  55. package/dist/app/assets/Landing-DAIP71DD.js.map +1 -0
  56. package/dist/app/assets/LanguageSwitcher-D93nCuuR.js +2 -0
  57. package/dist/app/assets/LanguageSwitcher-D93nCuuR.js.map +1 -0
  58. package/dist/app/assets/Legal-Koe7vi6H.js +2 -0
  59. package/dist/app/assets/Legal-Koe7vi6H.js.map +1 -0
  60. package/dist/app/assets/NotFound-CfY31vMZ.js +2 -0
  61. package/dist/app/assets/NotFound-CfY31vMZ.js.map +1 -0
  62. package/dist/app/assets/Pricing-BQwtFVbj.js +2 -0
  63. package/dist/app/assets/Pricing-BQwtFVbj.js.map +1 -0
  64. package/dist/app/assets/Privacy-CaHf2UM7.js +2 -0
  65. package/dist/app/assets/Privacy-CaHf2UM7.js.map +1 -0
  66. package/dist/app/assets/SignIn-Cyi2_-Mn.js +2 -0
  67. package/dist/app/assets/SignIn-Cyi2_-Mn.js.map +1 -0
  68. package/dist/app/assets/SignUp-C9QH5po_.js +2 -0
  69. package/dist/app/assets/SignUp-C9QH5po_.js.map +1 -0
  70. package/dist/app/assets/SiteHeader-Dj3gDOnR.js +2 -0
  71. package/dist/app/assets/SiteHeader-Dj3gDOnR.js.map +1 -0
  72. package/dist/app/assets/StickyMobileCta-uyWGVhdc.js +2 -0
  73. package/dist/app/assets/StickyMobileCta-uyWGVhdc.js.map +1 -0
  74. package/dist/app/assets/StoreAssetsPipeline-BJlnD3kD.js +4 -0
  75. package/dist/app/assets/StoreAssetsPipeline-BJlnD3kD.js.map +1 -0
  76. package/dist/app/assets/Success-B7k7FvJj.js +2 -0
  77. package/dist/app/assets/Success-B7k7FvJj.js.map +1 -0
  78. package/dist/app/assets/Terms-DgJWOeUD.js +2 -0
  79. package/dist/app/assets/Terms-DgJWOeUD.js.map +1 -0
  80. package/dist/app/assets/ToolsIndex-xMPoFom9.js +6 -0
  81. package/dist/app/assets/ToolsIndex-xMPoFom9.js.map +1 -0
  82. package/dist/app/assets/WorkloadCalculator-Bdt6qPR3.js +5 -0
  83. package/dist/app/assets/WorkloadCalculator-Bdt6qPR3.js.map +1 -0
  84. package/dist/app/assets/calculator-CWfp5Day.js +2 -0
  85. package/dist/app/assets/calculator-CWfp5Day.js.map +1 -0
  86. package/dist/app/assets/check-BWCiUZ-C.js +2 -0
  87. package/dist/app/assets/check-BWCiUZ-C.js.map +1 -0
  88. package/dist/app/assets/chevron-down-DbSAem1L.js +2 -0
  89. package/dist/app/assets/chevron-down-DbSAem1L.js.map +1 -0
  90. package/dist/app/assets/circle-check-CeakjiXC.js +2 -0
  91. package/dist/app/assets/circle-check-CeakjiXC.js.map +1 -0
  92. package/dist/app/assets/clipboard-copy-DgTgnK84.js +2 -0
  93. package/dist/app/assets/clipboard-copy-DgTgnK84.js.map +1 -0
  94. package/dist/app/assets/copy-C9t_FzCZ.js +2 -0
  95. package/dist/app/assets/copy-C9t_FzCZ.js.map +1 -0
  96. package/dist/app/assets/crop-B7IxIx6D.js +2 -0
  97. package/dist/app/assets/crop-B7IxIx6D.js.map +1 -0
  98. package/dist/app/assets/download-65Zuvgwm.js +2 -0
  99. package/dist/app/assets/download-65Zuvgwm.js.map +1 -0
  100. package/dist/app/assets/eye-ouNo8Nv5.js +2 -0
  101. package/dist/app/assets/eye-ouNo8Nv5.js.map +1 -0
  102. package/dist/app/assets/grid-3x3-U1Nk_ppf.js +2 -0
  103. package/dist/app/assets/grid-3x3-U1Nk_ppf.js.map +1 -0
  104. package/dist/app/assets/hero/cli-build-tree-15s.mp4 +0 -0
  105. package/dist/app/assets/hero/cli-build-tree-15s.webm +0 -0
  106. package/dist/app/assets/hero/cli-build-tree-25s.mp4 +0 -0
  107. package/dist/app/assets/hero/cli-build-tree-25s.webm +0 -0
  108. package/dist/app/assets/hero/cli-build-tree-poster.png +0 -0
  109. package/dist/app/assets/hero/demo.gif +0 -0
  110. package/dist/app/assets/hero/demo.mp4 +0 -0
  111. package/dist/app/assets/hero/demo.webm +0 -0
  112. package/dist/app/assets/icons/apple-touch-icon.png +0 -0
  113. package/dist/app/assets/icons/device-base.png +0 -0
  114. package/dist/app/assets/icons/favicon-16x16.png +0 -0
  115. package/dist/app/assets/icons/favicon-32x32.png +0 -0
  116. package/dist/app/assets/icons/favicon.ico +0 -0
  117. package/dist/app/assets/icons/favicon.svg +1 -0
  118. package/dist/app/assets/index-B8Y8Y-Mi.js +180 -0
  119. package/dist/app/assets/index-B8Y8Y-Mi.js.map +1 -0
  120. package/dist/app/assets/index-hyiQFYGv.css +1 -0
  121. package/dist/app/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  122. package/dist/app/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  123. package/dist/app/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  124. package/dist/app/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  125. package/dist/app/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  126. package/dist/app/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  127. package/dist/app/assets/inter-cyrillic-700-normal-CjBOestx.woff2 +0 -0
  128. package/dist/app/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
  129. package/dist/app/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  130. package/dist/app/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  131. package/dist/app/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  132. package/dist/app/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  133. package/dist/app/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  134. package/dist/app/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  135. package/dist/app/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2 +0 -0
  136. package/dist/app/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
  137. package/dist/app/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  138. package/dist/app/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  139. package/dist/app/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  140. package/dist/app/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  141. package/dist/app/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  142. package/dist/app/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  143. package/dist/app/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
  144. package/dist/app/assets/inter-greek-700-normal-C3JjAnD8.woff2 +0 -0
  145. package/dist/app/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  146. package/dist/app/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  147. package/dist/app/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  148. package/dist/app/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  149. package/dist/app/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  150. package/dist/app/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  151. package/dist/app/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
  152. package/dist/app/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2 +0 -0
  153. package/dist/app/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  154. package/dist/app/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  155. package/dist/app/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  156. package/dist/app/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  157. package/dist/app/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  158. package/dist/app/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  159. package/dist/app/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
  160. package/dist/app/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  161. package/dist/app/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  162. package/dist/app/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  163. package/dist/app/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  164. package/dist/app/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  165. package/dist/app/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  166. package/dist/app/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  167. package/dist/app/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2 +0 -0
  168. package/dist/app/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
  169. package/dist/app/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  170. package/dist/app/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  171. package/dist/app/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  172. package/dist/app/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  173. package/dist/app/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  174. package/dist/app/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  175. package/dist/app/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
  176. package/dist/app/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2 +0 -0
  177. package/dist/app/assets/layout-grid-X9Sgull2.js +2 -0
  178. package/dist/app/assets/layout-grid-X9Sgull2.js.map +1 -0
  179. package/dist/app/assets/merriweather-cyrillic-400-normal-AvfsDsMQ.woff2 +0 -0
  180. package/dist/app/assets/merriweather-cyrillic-400-normal-DAcQ8g-H.woff +0 -0
  181. package/dist/app/assets/merriweather-cyrillic-700-normal-CHCcU-4a.woff +0 -0
  182. package/dist/app/assets/merriweather-cyrillic-700-normal-wbY04GlL.woff2 +0 -0
  183. package/dist/app/assets/merriweather-cyrillic-ext-400-normal-D9NYhYTq.woff2 +0 -0
  184. package/dist/app/assets/merriweather-cyrillic-ext-400-normal-Di6yW_eE.woff +0 -0
  185. package/dist/app/assets/merriweather-cyrillic-ext-700-normal-Bk1p9YoV.woff2 +0 -0
  186. package/dist/app/assets/merriweather-cyrillic-ext-700-normal-DoooT6Vg.woff +0 -0
  187. package/dist/app/assets/merriweather-latin-400-normal-CvqO63Ah.woff +0 -0
  188. package/dist/app/assets/merriweather-latin-400-normal-G4kZaoXi.woff2 +0 -0
  189. package/dist/app/assets/merriweather-latin-700-normal-D4-nzrAh.woff +0 -0
  190. package/dist/app/assets/merriweather-latin-700-normal-DoUP8Ce-.woff2 +0 -0
  191. package/dist/app/assets/merriweather-latin-ext-400-normal-CLqijLtt.woff +0 -0
  192. package/dist/app/assets/merriweather-latin-ext-400-normal-CWVzVQq3.woff2 +0 -0
  193. package/dist/app/assets/merriweather-latin-ext-700-normal-CaBzXGOk.woff +0 -0
  194. package/dist/app/assets/merriweather-latin-ext-700-normal-jHnxg2Kc.woff2 +0 -0
  195. package/dist/app/assets/merriweather-vietnamese-400-normal-Dh8WVvgZ.woff +0 -0
  196. package/dist/app/assets/merriweather-vietnamese-400-normal-hNacsVs_.woff2 +0 -0
  197. package/dist/app/assets/merriweather-vietnamese-700-normal-Bp6kWjW5.woff2 +0 -0
  198. package/dist/app/assets/merriweather-vietnamese-700-normal-C7_HxHBa.woff +0 -0
  199. package/dist/app/assets/montserrat-cyrillic-400-normal-BPq32Q8K.woff2 +0 -0
  200. package/dist/app/assets/montserrat-cyrillic-400-normal-jEs4Tk-Z.woff +0 -0
  201. package/dist/app/assets/montserrat-cyrillic-700-normal-BvLYcGP1.woff +0 -0
  202. package/dist/app/assets/montserrat-cyrillic-700-normal-D-Pqjtdp.woff2 +0 -0
  203. package/dist/app/assets/montserrat-cyrillic-ext-400-normal-DRPPeomZ.woff +0 -0
  204. package/dist/app/assets/montserrat-cyrillic-ext-400-normal-Xqov12YL.woff2 +0 -0
  205. package/dist/app/assets/montserrat-cyrillic-ext-700-normal-D-Mk2xRJ.woff +0 -0
  206. package/dist/app/assets/montserrat-cyrillic-ext-700-normal-MyDreaeu.woff2 +0 -0
  207. package/dist/app/assets/montserrat-latin-400-normal-BLhwKU8k.woff2 +0 -0
  208. package/dist/app/assets/montserrat-latin-400-normal-xItZbAXg.woff +0 -0
  209. package/dist/app/assets/montserrat-latin-700-normal-BWkrl476.woff +0 -0
  210. package/dist/app/assets/montserrat-latin-700-normal-BdjcYUrC.woff2 +0 -0
  211. package/dist/app/assets/montserrat-latin-ext-400-normal-B8bwfy6Y.woff2 +0 -0
  212. package/dist/app/assets/montserrat-latin-ext-400-normal-BffdBkAA.woff +0 -0
  213. package/dist/app/assets/montserrat-latin-ext-700-normal-BOP2Nhf0.woff2 +0 -0
  214. package/dist/app/assets/montserrat-latin-ext-700-normal-DdDFr05Z.woff +0 -0
  215. package/dist/app/assets/montserrat-vietnamese-400-normal-BeEscFYY.woff +0 -0
  216. package/dist/app/assets/montserrat-vietnamese-400-normal-D4oHqQTd.woff2 +0 -0
  217. package/dist/app/assets/montserrat-vietnamese-700-normal-C0x1De3p.woff2 +0 -0
  218. package/dist/app/assets/montserrat-vietnamese-700-normal-DnwGT2D9.woff +0 -0
  219. package/dist/app/assets/playfair-display-cyrillic-400-normal-CjW2EstV.woff2 +0 -0
  220. package/dist/app/assets/playfair-display-cyrillic-400-normal-ZiRag6zj.woff +0 -0
  221. package/dist/app/assets/playfair-display-cyrillic-700-normal-Dk1mTcxf.woff +0 -0
  222. package/dist/app/assets/playfair-display-cyrillic-700-normal-Dw3uKy19.woff2 +0 -0
  223. package/dist/app/assets/playfair-display-latin-400-normal-CFtfchNt.woff2 +0 -0
  224. package/dist/app/assets/playfair-display-latin-400-normal-DHYHbkg3.woff +0 -0
  225. package/dist/app/assets/playfair-display-latin-700-normal-Bc_1Q1cG.woff +0 -0
  226. package/dist/app/assets/playfair-display-latin-700-normal-CuDiGg7c.woff2 +0 -0
  227. package/dist/app/assets/playfair-display-latin-ext-400-normal-BxlSGspa.woff2 +0 -0
  228. package/dist/app/assets/playfair-display-latin-ext-400-normal-qdZwdvNS.woff +0 -0
  229. package/dist/app/assets/playfair-display-latin-ext-700-normal-C58ejOkc.woff2 +0 -0
  230. package/dist/app/assets/playfair-display-latin-ext-700-normal-D5HUU8GT.woff +0 -0
  231. package/dist/app/assets/playfair-display-vietnamese-400-normal-BV2APVTb.woff2 +0 -0
  232. package/dist/app/assets/playfair-display-vietnamese-400-normal-BbvUAu4N.woff +0 -0
  233. package/dist/app/assets/playfair-display-vietnamese-700-normal-CaKJSIny.woff2 +0 -0
  234. package/dist/app/assets/playfair-display-vietnamese-700-normal-Cr1rw0mr.woff +0 -0
  235. package/dist/app/assets/proof/output-01.png +0 -0
  236. package/dist/app/assets/proof/output-02.png +0 -0
  237. package/dist/app/assets/proof/output-03.png +0 -0
  238. package/dist/app/assets/proof/output-04.png +0 -0
  239. package/dist/app/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
  240. package/dist/app/assets/roboto-cyrillic-400-normal-DZJji7Rx.woff +0 -0
  241. package/dist/app/assets/roboto-cyrillic-500-normal-BI4HuXre.woff +0 -0
  242. package/dist/app/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
  243. package/dist/app/assets/roboto-cyrillic-700-normal-BiSG5NnW.woff2 +0 -0
  244. package/dist/app/assets/roboto-cyrillic-700-normal-KqaQ5bNp.woff +0 -0
  245. package/dist/app/assets/roboto-cyrillic-ext-400-normal-DtZHuW6i.woff +0 -0
  246. package/dist/app/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
  247. package/dist/app/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
  248. package/dist/app/assets/roboto-cyrillic-ext-500-normal-C927yMrb.woff +0 -0
  249. package/dist/app/assets/roboto-cyrillic-ext-700-normal-BuQgZIrO.woff +0 -0
  250. package/dist/app/assets/roboto-cyrillic-ext-700-normal-UFn0vR9r.woff2 +0 -0
  251. package/dist/app/assets/roboto-greek-400-normal-CcizSnRP.woff +0 -0
  252. package/dist/app/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
  253. package/dist/app/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
  254. package/dist/app/assets/roboto-greek-500-normal-BLLWU9W-.woff +0 -0
  255. package/dist/app/assets/roboto-greek-700-normal-BcGn9doz.woff2 +0 -0
  256. package/dist/app/assets/roboto-greek-700-normal-D3kmAf0K.woff +0 -0
  257. package/dist/app/assets/roboto-latin-400-normal-068yxgMN.woff +0 -0
  258. package/dist/app/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
  259. package/dist/app/assets/roboto-latin-500-normal-CC5nhZkh.woff +0 -0
  260. package/dist/app/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
  261. package/dist/app/assets/roboto-latin-700-normal-CXeAXeti.woff2 +0 -0
  262. package/dist/app/assets/roboto-latin-700-normal-DUekQERp.woff +0 -0
  263. package/dist/app/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
  264. package/dist/app/assets/roboto-latin-ext-400-normal-eTRLN0Nt.woff +0 -0
  265. package/dist/app/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
  266. package/dist/app/assets/roboto-latin-ext-500-normal-FFcS8vBN.woff +0 -0
  267. package/dist/app/assets/roboto-latin-ext-700-normal-70GS1MYH.woff2 +0 -0
  268. package/dist/app/assets/roboto-latin-ext-700-normal-BS1OuQqR.woff +0 -0
  269. package/dist/app/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
  270. package/dist/app/assets/roboto-math-400-normal-rzxYvyVt.woff +0 -0
  271. package/dist/app/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
  272. package/dist/app/assets/roboto-math-500-normal-DaFX-ZC8.woff +0 -0
  273. package/dist/app/assets/roboto-math-700-normal-VUAI6Bz2.woff2 +0 -0
  274. package/dist/app/assets/roboto-math-700-normal-pYD1nhov.woff +0 -0
  275. package/dist/app/assets/roboto-symbols-400-normal-Tzuungub.woff +0 -0
  276. package/dist/app/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
  277. package/dist/app/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
  278. package/dist/app/assets/roboto-symbols-500-normal-CAhAe-ik.woff +0 -0
  279. package/dist/app/assets/roboto-symbols-700-normal-CuuvBBxy.woff +0 -0
  280. package/dist/app/assets/roboto-symbols-700-normal-rJi6RjIy.woff2 +0 -0
  281. package/dist/app/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
  282. package/dist/app/assets/roboto-vietnamese-400-normal-DmXaN3yE.woff +0 -0
  283. package/dist/app/assets/roboto-vietnamese-500-normal-DW96CsrR.woff +0 -0
  284. package/dist/app/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
  285. package/dist/app/assets/roboto-vietnamese-700-normal-Dz0HwF-w.woff +0 -0
  286. package/dist/app/assets/roboto-vietnamese-700-normal-iKxYNAzq.woff2 +0 -0
  287. package/dist/app/assets/rocket-BjOXauLe.js +2 -0
  288. package/dist/app/assets/rocket-BjOXauLe.js.map +1 -0
  289. package/dist/app/assets/shield-check-CFNhE_aD.js +2 -0
  290. package/dist/app/assets/shield-check-CFNhE_aD.js.map +1 -0
  291. package/dist/app/assets/signIn-CVoSzqCz.js +2 -0
  292. package/dist/app/assets/signIn-CVoSzqCz.js.map +1 -0
  293. package/dist/app/assets/smartphone-BcQB9gIh.js +2 -0
  294. package/dist/app/assets/smartphone-BcQB9gIh.js.map +1 -0
  295. package/dist/app/assets/terminal-CGhryJds.js +2 -0
  296. package/dist/app/assets/terminal-CGhryJds.js.map +1 -0
  297. package/dist/app/assets/useAuth-lZZC20Tl.js +4 -0
  298. package/dist/app/assets/useAuth-lZZC20Tl.js.map +1 -0
  299. package/dist/app/favicon-16x16.png +0 -0
  300. package/dist/app/favicon-32x32.png +0 -0
  301. package/dist/app/favicon.ico +0 -0
  302. package/dist/app/favicon.svg +10 -0
  303. package/dist/app/index.html +43 -0
  304. package/dist/apple-touch-icon.png +0 -0
  305. package/dist/assets/AgentCli-8e28laT4.js +17 -0
  306. package/dist/assets/AgentCli-8e28laT4.js.map +1 -0
  307. package/dist/assets/App-DU0xew0e.js +13 -0
  308. package/dist/assets/App-DU0xew0e.js.map +1 -0
  309. package/dist/assets/AppReviewAso-OLwc4Rw_.js +4 -0
  310. package/dist/assets/AppReviewAso-OLwc4Rw_.js.map +1 -0
  311. package/dist/assets/Cancelled-BoeZQa1S.js +2 -0
  312. package/dist/assets/Cancelled-BoeZQa1S.js.map +1 -0
  313. package/dist/assets/CliPreflightCard-CxYyogdF.js +2 -0
  314. package/dist/assets/CliPreflightCard-CxYyogdF.js.map +1 -0
  315. package/dist/assets/CopyButton-CGfuSJtU.js +2 -0
  316. package/dist/assets/CopyButton-CGfuSJtU.js.map +1 -0
  317. package/dist/assets/FastlaneScreenshots-CFT6IiRb.js +52 -0
  318. package/dist/assets/FastlaneScreenshots-CFT6IiRb.js.map +1 -0
  319. package/dist/assets/FirstExport-B_UDacZm.js +6 -0
  320. package/dist/assets/FirstExport-B_UDacZm.js.map +1 -0
  321. package/dist/assets/FivePanelFramework-C1z_xUbe.js +60 -0
  322. package/dist/assets/FivePanelFramework-C1z_xUbe.js.map +1 -0
  323. package/dist/assets/ForgotPassword-ZQ8U3ejz.js +2 -0
  324. package/dist/assets/ForgotPassword-ZQ8U3ejz.js.map +1 -0
  325. package/dist/assets/Landing-DAIP71DD.js +2 -0
  326. package/dist/assets/Landing-DAIP71DD.js.map +1 -0
  327. package/dist/assets/LanguageSwitcher-D93nCuuR.js +2 -0
  328. package/dist/assets/LanguageSwitcher-D93nCuuR.js.map +1 -0
  329. package/dist/assets/Legal-Koe7vi6H.js +2 -0
  330. package/dist/assets/Legal-Koe7vi6H.js.map +1 -0
  331. package/dist/assets/NotFound-CfY31vMZ.js +2 -0
  332. package/dist/assets/NotFound-CfY31vMZ.js.map +1 -0
  333. package/dist/assets/Pricing-BQwtFVbj.js +2 -0
  334. package/dist/assets/Pricing-BQwtFVbj.js.map +1 -0
  335. package/dist/assets/Privacy-CaHf2UM7.js +2 -0
  336. package/dist/assets/Privacy-CaHf2UM7.js.map +1 -0
  337. package/dist/assets/SignIn-Cyi2_-Mn.js +2 -0
  338. package/dist/assets/SignIn-Cyi2_-Mn.js.map +1 -0
  339. package/dist/assets/SignUp-C9QH5po_.js +2 -0
  340. package/dist/assets/SignUp-C9QH5po_.js.map +1 -0
  341. package/dist/assets/SiteHeader-Dj3gDOnR.js +2 -0
  342. package/dist/assets/SiteHeader-Dj3gDOnR.js.map +1 -0
  343. package/dist/assets/StickyMobileCta-uyWGVhdc.js +2 -0
  344. package/dist/assets/StickyMobileCta-uyWGVhdc.js.map +1 -0
  345. package/dist/assets/StoreAssetsPipeline-BJlnD3kD.js +4 -0
  346. package/dist/assets/StoreAssetsPipeline-BJlnD3kD.js.map +1 -0
  347. package/dist/assets/Success-B7k7FvJj.js +2 -0
  348. package/dist/assets/Success-B7k7FvJj.js.map +1 -0
  349. package/dist/assets/Terms-DgJWOeUD.js +2 -0
  350. package/dist/assets/Terms-DgJWOeUD.js.map +1 -0
  351. package/dist/assets/ToolsIndex-xMPoFom9.js +6 -0
  352. package/dist/assets/ToolsIndex-xMPoFom9.js.map +1 -0
  353. package/dist/assets/WorkloadCalculator-Bdt6qPR3.js +5 -0
  354. package/dist/assets/WorkloadCalculator-Bdt6qPR3.js.map +1 -0
  355. package/dist/assets/calculator-CWfp5Day.js +2 -0
  356. package/dist/assets/calculator-CWfp5Day.js.map +1 -0
  357. package/dist/assets/check-BWCiUZ-C.js +2 -0
  358. package/dist/assets/check-BWCiUZ-C.js.map +1 -0
  359. package/dist/assets/chevron-down-DbSAem1L.js +2 -0
  360. package/dist/assets/chevron-down-DbSAem1L.js.map +1 -0
  361. package/dist/assets/circle-check-CeakjiXC.js +2 -0
  362. package/dist/assets/circle-check-CeakjiXC.js.map +1 -0
  363. package/dist/assets/clipboard-copy-DgTgnK84.js +2 -0
  364. package/dist/assets/clipboard-copy-DgTgnK84.js.map +1 -0
  365. package/dist/assets/copy-C9t_FzCZ.js +2 -0
  366. package/dist/assets/copy-C9t_FzCZ.js.map +1 -0
  367. package/dist/assets/crop-B7IxIx6D.js +2 -0
  368. package/dist/assets/crop-B7IxIx6D.js.map +1 -0
  369. package/dist/assets/download-65Zuvgwm.js +2 -0
  370. package/dist/assets/download-65Zuvgwm.js.map +1 -0
  371. package/dist/assets/eye-ouNo8Nv5.js +2 -0
  372. package/dist/assets/eye-ouNo8Nv5.js.map +1 -0
  373. package/dist/assets/grid-3x3-U1Nk_ppf.js +2 -0
  374. package/dist/assets/grid-3x3-U1Nk_ppf.js.map +1 -0
  375. package/dist/assets/hero/cli-build-tree-15s.mp4 +0 -0
  376. package/dist/assets/hero/cli-build-tree-15s.webm +0 -0
  377. package/dist/assets/hero/cli-build-tree-25s.mp4 +0 -0
  378. package/dist/assets/hero/cli-build-tree-25s.webm +0 -0
  379. package/dist/assets/hero/cli-build-tree-poster.png +0 -0
  380. package/dist/assets/hero/demo.gif +0 -0
  381. package/dist/assets/hero/demo.mp4 +0 -0
  382. package/dist/assets/hero/demo.webm +0 -0
  383. package/dist/assets/icons/apple-touch-icon.png +0 -0
  384. package/dist/assets/icons/device-base.png +0 -0
  385. package/dist/assets/icons/favicon-16x16.png +0 -0
  386. package/dist/assets/icons/favicon-32x32.png +0 -0
  387. package/dist/assets/icons/favicon.ico +0 -0
  388. package/dist/assets/icons/favicon.svg +1 -0
  389. package/dist/assets/index-B8Y8Y-Mi.js +180 -0
  390. package/dist/assets/index-B8Y8Y-Mi.js.map +1 -0
  391. package/dist/assets/index-hyiQFYGv.css +1 -0
  392. package/dist/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  393. package/dist/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  394. package/dist/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  395. package/dist/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  396. package/dist/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  397. package/dist/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  398. package/dist/assets/inter-cyrillic-700-normal-CjBOestx.woff2 +0 -0
  399. package/dist/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
  400. package/dist/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  401. package/dist/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  402. package/dist/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  403. package/dist/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  404. package/dist/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  405. package/dist/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  406. package/dist/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2 +0 -0
  407. package/dist/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
  408. package/dist/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  409. package/dist/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  410. package/dist/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  411. package/dist/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  412. package/dist/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  413. package/dist/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  414. package/dist/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
  415. package/dist/assets/inter-greek-700-normal-C3JjAnD8.woff2 +0 -0
  416. package/dist/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  417. package/dist/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  418. package/dist/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  419. package/dist/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  420. package/dist/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  421. package/dist/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  422. package/dist/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
  423. package/dist/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2 +0 -0
  424. package/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  425. package/dist/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  426. package/dist/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  427. package/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  428. package/dist/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  429. package/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  430. package/dist/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
  431. package/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  432. package/dist/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  433. package/dist/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  434. package/dist/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  435. package/dist/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  436. package/dist/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  437. package/dist/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  438. package/dist/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2 +0 -0
  439. package/dist/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
  440. package/dist/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  441. package/dist/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  442. package/dist/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  443. package/dist/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  444. package/dist/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  445. package/dist/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  446. package/dist/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
  447. package/dist/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2 +0 -0
  448. package/dist/assets/layout-grid-X9Sgull2.js +2 -0
  449. package/dist/assets/layout-grid-X9Sgull2.js.map +1 -0
  450. package/dist/assets/merriweather-cyrillic-400-normal-AvfsDsMQ.woff2 +0 -0
  451. package/dist/assets/merriweather-cyrillic-400-normal-DAcQ8g-H.woff +0 -0
  452. package/dist/assets/merriweather-cyrillic-700-normal-CHCcU-4a.woff +0 -0
  453. package/dist/assets/merriweather-cyrillic-700-normal-wbY04GlL.woff2 +0 -0
  454. package/dist/assets/merriweather-cyrillic-ext-400-normal-D9NYhYTq.woff2 +0 -0
  455. package/dist/assets/merriweather-cyrillic-ext-400-normal-Di6yW_eE.woff +0 -0
  456. package/dist/assets/merriweather-cyrillic-ext-700-normal-Bk1p9YoV.woff2 +0 -0
  457. package/dist/assets/merriweather-cyrillic-ext-700-normal-DoooT6Vg.woff +0 -0
  458. package/dist/assets/merriweather-latin-400-normal-CvqO63Ah.woff +0 -0
  459. package/dist/assets/merriweather-latin-400-normal-G4kZaoXi.woff2 +0 -0
  460. package/dist/assets/merriweather-latin-700-normal-D4-nzrAh.woff +0 -0
  461. package/dist/assets/merriweather-latin-700-normal-DoUP8Ce-.woff2 +0 -0
  462. package/dist/assets/merriweather-latin-ext-400-normal-CLqijLtt.woff +0 -0
  463. package/dist/assets/merriweather-latin-ext-400-normal-CWVzVQq3.woff2 +0 -0
  464. package/dist/assets/merriweather-latin-ext-700-normal-CaBzXGOk.woff +0 -0
  465. package/dist/assets/merriweather-latin-ext-700-normal-jHnxg2Kc.woff2 +0 -0
  466. package/dist/assets/merriweather-vietnamese-400-normal-Dh8WVvgZ.woff +0 -0
  467. package/dist/assets/merriweather-vietnamese-400-normal-hNacsVs_.woff2 +0 -0
  468. package/dist/assets/merriweather-vietnamese-700-normal-Bp6kWjW5.woff2 +0 -0
  469. package/dist/assets/merriweather-vietnamese-700-normal-C7_HxHBa.woff +0 -0
  470. package/dist/assets/montserrat-cyrillic-400-normal-BPq32Q8K.woff2 +0 -0
  471. package/dist/assets/montserrat-cyrillic-400-normal-jEs4Tk-Z.woff +0 -0
  472. package/dist/assets/montserrat-cyrillic-700-normal-BvLYcGP1.woff +0 -0
  473. package/dist/assets/montserrat-cyrillic-700-normal-D-Pqjtdp.woff2 +0 -0
  474. package/dist/assets/montserrat-cyrillic-ext-400-normal-DRPPeomZ.woff +0 -0
  475. package/dist/assets/montserrat-cyrillic-ext-400-normal-Xqov12YL.woff2 +0 -0
  476. package/dist/assets/montserrat-cyrillic-ext-700-normal-D-Mk2xRJ.woff +0 -0
  477. package/dist/assets/montserrat-cyrillic-ext-700-normal-MyDreaeu.woff2 +0 -0
  478. package/dist/assets/montserrat-latin-400-normal-BLhwKU8k.woff2 +0 -0
  479. package/dist/assets/montserrat-latin-400-normal-xItZbAXg.woff +0 -0
  480. package/dist/assets/montserrat-latin-700-normal-BWkrl476.woff +0 -0
  481. package/dist/assets/montserrat-latin-700-normal-BdjcYUrC.woff2 +0 -0
  482. package/dist/assets/montserrat-latin-ext-400-normal-B8bwfy6Y.woff2 +0 -0
  483. package/dist/assets/montserrat-latin-ext-400-normal-BffdBkAA.woff +0 -0
  484. package/dist/assets/montserrat-latin-ext-700-normal-BOP2Nhf0.woff2 +0 -0
  485. package/dist/assets/montserrat-latin-ext-700-normal-DdDFr05Z.woff +0 -0
  486. package/dist/assets/montserrat-vietnamese-400-normal-BeEscFYY.woff +0 -0
  487. package/dist/assets/montserrat-vietnamese-400-normal-D4oHqQTd.woff2 +0 -0
  488. package/dist/assets/montserrat-vietnamese-700-normal-C0x1De3p.woff2 +0 -0
  489. package/dist/assets/montserrat-vietnamese-700-normal-DnwGT2D9.woff +0 -0
  490. package/dist/assets/playfair-display-cyrillic-400-normal-CjW2EstV.woff2 +0 -0
  491. package/dist/assets/playfair-display-cyrillic-400-normal-ZiRag6zj.woff +0 -0
  492. package/dist/assets/playfair-display-cyrillic-700-normal-Dk1mTcxf.woff +0 -0
  493. package/dist/assets/playfair-display-cyrillic-700-normal-Dw3uKy19.woff2 +0 -0
  494. package/dist/assets/playfair-display-latin-400-normal-CFtfchNt.woff2 +0 -0
  495. package/dist/assets/playfair-display-latin-400-normal-DHYHbkg3.woff +0 -0
  496. package/dist/assets/playfair-display-latin-700-normal-Bc_1Q1cG.woff +0 -0
  497. package/dist/assets/playfair-display-latin-700-normal-CuDiGg7c.woff2 +0 -0
  498. package/dist/assets/playfair-display-latin-ext-400-normal-BxlSGspa.woff2 +0 -0
  499. package/dist/assets/playfair-display-latin-ext-400-normal-qdZwdvNS.woff +0 -0
  500. package/dist/assets/playfair-display-latin-ext-700-normal-C58ejOkc.woff2 +0 -0
  501. package/dist/assets/playfair-display-latin-ext-700-normal-D5HUU8GT.woff +0 -0
  502. package/dist/assets/playfair-display-vietnamese-400-normal-BV2APVTb.woff2 +0 -0
  503. package/dist/assets/playfair-display-vietnamese-400-normal-BbvUAu4N.woff +0 -0
  504. package/dist/assets/playfair-display-vietnamese-700-normal-CaKJSIny.woff2 +0 -0
  505. package/dist/assets/playfair-display-vietnamese-700-normal-Cr1rw0mr.woff +0 -0
  506. package/dist/assets/proof/output-01.png +0 -0
  507. package/dist/assets/proof/output-02.png +0 -0
  508. package/dist/assets/proof/output-03.png +0 -0
  509. package/dist/assets/proof/output-04.png +0 -0
  510. package/dist/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
  511. package/dist/assets/roboto-cyrillic-400-normal-DZJji7Rx.woff +0 -0
  512. package/dist/assets/roboto-cyrillic-500-normal-BI4HuXre.woff +0 -0
  513. package/dist/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
  514. package/dist/assets/roboto-cyrillic-700-normal-BiSG5NnW.woff2 +0 -0
  515. package/dist/assets/roboto-cyrillic-700-normal-KqaQ5bNp.woff +0 -0
  516. package/dist/assets/roboto-cyrillic-ext-400-normal-DtZHuW6i.woff +0 -0
  517. package/dist/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
  518. package/dist/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
  519. package/dist/assets/roboto-cyrillic-ext-500-normal-C927yMrb.woff +0 -0
  520. package/dist/assets/roboto-cyrillic-ext-700-normal-BuQgZIrO.woff +0 -0
  521. package/dist/assets/roboto-cyrillic-ext-700-normal-UFn0vR9r.woff2 +0 -0
  522. package/dist/assets/roboto-greek-400-normal-CcizSnRP.woff +0 -0
  523. package/dist/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
  524. package/dist/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
  525. package/dist/assets/roboto-greek-500-normal-BLLWU9W-.woff +0 -0
  526. package/dist/assets/roboto-greek-700-normal-BcGn9doz.woff2 +0 -0
  527. package/dist/assets/roboto-greek-700-normal-D3kmAf0K.woff +0 -0
  528. package/dist/assets/roboto-latin-400-normal-068yxgMN.woff +0 -0
  529. package/dist/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
  530. package/dist/assets/roboto-latin-500-normal-CC5nhZkh.woff +0 -0
  531. package/dist/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
  532. package/dist/assets/roboto-latin-700-normal-CXeAXeti.woff2 +0 -0
  533. package/dist/assets/roboto-latin-700-normal-DUekQERp.woff +0 -0
  534. package/dist/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
  535. package/dist/assets/roboto-latin-ext-400-normal-eTRLN0Nt.woff +0 -0
  536. package/dist/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
  537. package/dist/assets/roboto-latin-ext-500-normal-FFcS8vBN.woff +0 -0
  538. package/dist/assets/roboto-latin-ext-700-normal-70GS1MYH.woff2 +0 -0
  539. package/dist/assets/roboto-latin-ext-700-normal-BS1OuQqR.woff +0 -0
  540. package/dist/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
  541. package/dist/assets/roboto-math-400-normal-rzxYvyVt.woff +0 -0
  542. package/dist/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
  543. package/dist/assets/roboto-math-500-normal-DaFX-ZC8.woff +0 -0
  544. package/dist/assets/roboto-math-700-normal-VUAI6Bz2.woff2 +0 -0
  545. package/dist/assets/roboto-math-700-normal-pYD1nhov.woff +0 -0
  546. package/dist/assets/roboto-symbols-400-normal-Tzuungub.woff +0 -0
  547. package/dist/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
  548. package/dist/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
  549. package/dist/assets/roboto-symbols-500-normal-CAhAe-ik.woff +0 -0
  550. package/dist/assets/roboto-symbols-700-normal-CuuvBBxy.woff +0 -0
  551. package/dist/assets/roboto-symbols-700-normal-rJi6RjIy.woff2 +0 -0
  552. package/dist/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
  553. package/dist/assets/roboto-vietnamese-400-normal-DmXaN3yE.woff +0 -0
  554. package/dist/assets/roboto-vietnamese-500-normal-DW96CsrR.woff +0 -0
  555. package/dist/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
  556. package/dist/assets/roboto-vietnamese-700-normal-Dz0HwF-w.woff +0 -0
  557. package/dist/assets/roboto-vietnamese-700-normal-iKxYNAzq.woff2 +0 -0
  558. package/dist/assets/rocket-BjOXauLe.js +2 -0
  559. package/dist/assets/rocket-BjOXauLe.js.map +1 -0
  560. package/dist/assets/shield-check-CFNhE_aD.js +2 -0
  561. package/dist/assets/shield-check-CFNhE_aD.js.map +1 -0
  562. package/dist/assets/signIn-CVoSzqCz.js +2 -0
  563. package/dist/assets/signIn-CVoSzqCz.js.map +1 -0
  564. package/dist/assets/smartphone-BcQB9gIh.js +2 -0
  565. package/dist/assets/smartphone-BcQB9gIh.js.map +1 -0
  566. package/dist/assets/terminal-CGhryJds.js +2 -0
  567. package/dist/assets/terminal-CGhryJds.js.map +1 -0
  568. package/dist/assets/useAuth-lZZC20Tl.js +4 -0
  569. package/dist/assets/useAuth-lZZC20Tl.js.map +1 -0
  570. package/dist/cancelled/index.html +34 -0
  571. package/dist/downloads/shipscreens-agent-cli-config.yml +48 -0
  572. package/dist/downloads/shipscreens-agent-cli-copy.csv +2 -0
  573. package/dist/favicon-16x16.png +0 -0
  574. package/dist/favicon-32x32.png +0 -0
  575. package/dist/favicon.ico +0 -0
  576. package/dist/favicon.svg +10 -0
  577. package/dist/forgot-password/index.html +34 -0
  578. package/dist/index.html +42 -0
  579. package/dist/legal/index.html +33 -0
  580. package/dist/og-image.png +0 -0
  581. package/dist/pricing/index.html +33 -0
  582. package/dist/privacy/index.html +33 -0
  583. package/dist/robots.txt +11 -0
  584. package/dist/signin/index.html +34 -0
  585. package/dist/signup/index.html +34 -0
  586. package/dist/sitemap.xml +51 -0
  587. package/dist/success/index.html +34 -0
  588. package/dist/templates/clean_blue.png +0 -0
  589. package/dist/templates/minimal_dark.png +0 -0
  590. package/dist/templates/split_modern.png +0 -0
  591. package/dist/templates/vibrant_gradient.png +0 -0
  592. package/dist/terms/index.html +33 -0
  593. package/dist/tools/5-panel-screenshot-framework/index.html +33 -0
  594. package/dist/tools/agent-cli/index.html +33 -0
  595. package/dist/tools/app-review-aso/index.html +33 -0
  596. package/dist/tools/fastlane-screenshots/index.html +33 -0
  597. package/dist/tools/first-export/index.html +33 -0
  598. package/dist/tools/index.html +33 -0
  599. package/dist/tools/screenshot-workload-calculator/index.html +33 -0
  600. package/dist/tools/store-assets-pipeline/index.html +33 -0
  601. package/package.json +36 -0
  602. package/src/constants/devices.js +122 -0
  603. package/templates/agent/agent-prompt.txt +21 -0
  604. package/templates/agent/copy.csv +2 -0
  605. package/templates/agent/shipscreens.config.yml +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSwitcher-D93nCuuR.js","sources":["../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/globe.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../src/hooks/useModalA11y.js","../../src/lib/env.js","../../src/hooks/usePageTitle.js","../../src/components/StagingBadge.jsx","../../src/components/LanguageSwitcher.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { useEffect, useRef } from 'react';\n\nconst DEFAULT_FOCUSABLE_SELECTOR =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nconst getFocusable = (root) => {\n if (!root) return [];\n const nodes = root.querySelectorAll(DEFAULT_FOCUSABLE_SELECTOR);\n return Array.from(nodes).filter((node) => node && typeof node.focus === 'function');\n};\n\nconst useModalA11y = ({\n isOpen,\n onClose,\n panelRef,\n initialFocusRef,\n closeOnEscape = true,\n trapFocus = true,\n lockScroll = true,\n restoreFocus = true,\n} = {}) => {\n const previousFocusRef = useRef(null);\n const previousOverflowRef = useRef(null);\n\n useEffect(() => {\n if (!isOpen) return;\n if (typeof window === 'undefined') return;\n\n if (restoreFocus) previousFocusRef.current = document.activeElement;\n if (lockScroll) {\n previousOverflowRef.current = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n const focusTarget = initialFocusRef?.current;\n if (focusTarget && typeof focusTarget.focus === 'function') {\n focusTarget.focus();\n } else {\n const focusable = getFocusable(panelRef?.current);\n if (focusable[0]) focusable[0].focus();\n }\n\n const handleKeyDown = (event) => {\n if (event.key === 'Escape' && closeOnEscape) {\n event.preventDefault();\n onClose?.();\n return;\n }\n\n if (event.key !== 'Tab' || !trapFocus) return;\n\n const panel = panelRef?.current;\n if (!panel) return;\n\n const focusable = getFocusable(panel);\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (!panel.contains(active)) {\n event.preventDefault();\n first.focus();\n return;\n }\n\n if (event.shiftKey) {\n if (active === first) {\n event.preventDefault();\n last.focus();\n }\n return;\n }\n\n if (active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n\n if (lockScroll) document.body.style.overflow = previousOverflowRef.current ?? '';\n\n if (restoreFocus) {\n const previous = previousFocusRef.current;\n if (previous && typeof previous.focus === 'function') previous.focus();\n }\n };\n }, [closeOnEscape, initialFocusRef, isOpen, lockScroll, onClose, panelRef, restoreFocus, trapFocus]);\n};\n\nexport default useModalA11y;\n\n","export const isStagingEnv = () => {\n const envFlag = (import.meta.env.VITE_APP_ENV || '').toLowerCase();\n if (envFlag === 'staging') return true;\n\n const api = import.meta.env.VITE_API_ENDPOINT || '';\n if (api.includes('api-stg')) return true;\n\n if (typeof window !== 'undefined') {\n const host = window.location.hostname.toLowerCase();\n if (host.includes('develop') || host.includes('stg')) return true;\n }\n\n return false;\n};\n\nexport const isTeamSyncEnabled = () => {\n const flag = (import.meta.env.VITE_FEATURE_TEAM_SYNC || '').toLowerCase().trim();\n return flag === '1' || flag === 'true' || flag === 'yes' || flag === 'on';\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isStagingEnv } from '../lib/env';\n\n const usePageTitle = (titleKey, options) => {\n const { t, i18n } = useTranslation();\n const optionsKey = JSON.stringify(options ?? {});\n const stableOptions = useMemo(() => JSON.parse(optionsKey), [optionsKey]);\n\n useEffect(() => {\n const base = t(titleKey, stableOptions);\n const prefix = isStagingEnv() ? '[Staging] ' : '';\n if (base) {\n document.title = `${prefix}${base}`;\n }\n }, [titleKey, t, i18n.language, stableOptions]);\n};\n\nexport default usePageTitle;\n","import React from 'react';\nimport { isStagingEnv } from '../lib/env';\n\nconst StagingBadge = () => {\n if (!isStagingEnv()) return null;\n\n return (\n <div className=\"fixed top-3 left-3 z-[200] px-3 py-1.5 rounded-full bg-amber-500 text-amber-950 text-xs font-bold shadow-lg shadow-amber-500/30 border border-amber-600\">\n STAGING\n </div>\n );\n};\n\nexport default StagingBadge;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Globe } from 'lucide-react';\nimport { setHtmlLang, saveLang } from '../lib/locale';\nimport { trackEvent } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst LanguageSwitcher = ({ className = '' }) => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n\n const toggleLang = async () => {\n const newLang = lang === 'en' ? 'ja' : 'en';\n const path = typeof window !== 'undefined' ? window.location.pathname : undefined;\n setHtmlLang(newLang);\n saveLang(newLang);\n try {\n await i18n.changeLanguage(newLang);\n trackEvent('lang_switch', { from: lang, to: newLang, path });\n } catch {\n // If changeLanguage fails, keep the persisted language for the next load.\n }\n };\n\n return (\n <button\n type=\"button\"\n onClick={toggleLang}\n className={`flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-200 text-xs font-semibold transition-colors ${className} ${\n lang === 'ja' ? 'bg-slate-50 text-slate-800' : 'bg-white text-slate-600 hover:bg-slate-50'\n }`}\n title={lang === 'en' ? t('app.header.switchToJa') : t('app.header.switchToEn')}\n >\n <Globe size={14} />\n <span className={lang === 'ja' ? 'text-slate-800' : 'text-slate-400'}>JA</span>\n <span className=\"text-slate-300\">/</span>\n <span className={lang === 'en' ? 'text-slate-800' : 'text-slate-400'}>EN</span>\n </button>\n );\n};\n\nexport default LanguageSwitcher;\n"],"names":["mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","props","prop","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","Globe","X","DEFAULT_FOCUSABLE_SELECTOR","getFocusable","root","nodes","node","useModalA11y","isOpen","onClose","panelRef","initialFocusRef","closeOnEscape","trapFocus","lockScroll","restoreFocus","previousFocusRef","useRef","previousOverflowRef","useEffect","focusTarget","focusable","handleKeyDown","event","panel","first","last","active","previous","isStagingEnv","host","isTeamSyncEnabled","flag","usePageTitle","titleKey","options","t","i18n","useTranslation","optionsKey","stableOptions","useMemo","base","prefix","StagingBadge","jsx","normalizeLang","lang","LanguageSwitcher","toggleLang","newLang","path","setHtmlLang","saveLang","trackEvent","jsxs"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
@@ -0,0 +1,2 @@
1
+ import{u as r,j as e}from"./index-B8Y8Y-Mi.js";import{a as d,S as c}from"./LanguageSwitcher-D93nCuuR.js";import{S as m}from"./SiteHeader-Dj3gDOnR.js";const h=()=>{const{t:s}=r();d("titles.legal");const i=s("legal.fields",{returnObjects:!0})||[],t=s("legal.notes",{returnObjects:!0})||[];return e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800",children:[e.jsx(c,{}),e.jsx(m,{variant:"light",showX:!1}),e.jsxs("main",{className:"max-w-4xl mx-auto px-4 py-12",children:[e.jsx("h1",{className:"text-3xl font-bold mb-6",children:s("legal.title")}),e.jsx("p",{className:"mb-6",children:s("legal.intro")}),e.jsx("dl",{className:"bg-white rounded-2xl border border-slate-200 shadow-sm divide-y divide-slate-100",children:i.map((l,a)=>e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-[220px_1fr] gap-1 md:gap-3 px-4 py-3",children:[e.jsx("dt",{className:"font-semibold text-slate-700",children:l.label}),e.jsx("dd",{className:"text-slate-800",children:l.value})]},`${l.label}-${a}`))}),t.length>0&&e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",children:s("legal.notesTitle")}),e.jsx("ul",{className:"list-disc pl-5 space-y-1 text-slate-700",children:t.map((l,a)=>e.jsx("li",{children:l},`${l}-${a}`))})]}),e.jsx("p",{className:"mt-6 text-sm text-slate-600",children:s("legal.contact",{email:"support@shimaumaservices.co.jp"})})]})]})};export{h as default};
2
+ //# sourceMappingURL=Legal-Koe7vi6H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Legal-Koe7vi6H.js","sources":["../../src/pages/Legal.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 Legal = () => {\n const { t } = useTranslation();\n usePageTitle('titles.legal');\n const fields = t('legal.fields', { returnObjects: true }) || [];\n const notes = t('legal.notes', { 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('legal.title')}</h1>\n <p className=\"mb-6\">{t('legal.intro')}</p>\n\n <dl className=\"bg-white rounded-2xl border border-slate-200 shadow-sm divide-y divide-slate-100\">\n {fields.map((item, idx) => (\n <div\n key={`${item.label}-${idx}`}\n className=\"grid grid-cols-1 md:grid-cols-[220px_1fr] gap-1 md:gap-3 px-4 py-3\"\n >\n <dt className=\"font-semibold text-slate-700\">{item.label}</dt>\n <dd className=\"text-slate-800\">{item.value}</dd>\n </div>\n ))}\n </dl>\n\n {notes.length > 0 && (\n <div className=\"mt-8\">\n <h2 className=\"text-xl font-semibold mb-2\">{t('legal.notesTitle')}</h2>\n <ul className=\"list-disc pl-5 space-y-1 text-slate-700\">\n {notes.map((note, idx) => (\n <li key={`${note}-${idx}`}>{note}</li>\n ))}\n </ul>\n </div>\n )}\n\n <p className=\"mt-6 text-sm text-slate-600\">{t('legal.contact', { email: 'support@shimaumaservices.co.jp' })}</p>\n </main>\n </div>\n );\n};\n\r\nexport default Legal;\r\n"],"names":["Legal","t","useTranslation","usePageTitle","fields","notes","jsxs","jsx","StagingBadge","SiteHeader","item","idx","note"],"mappings":"sJAMA,MAAMA,EAAQ,IAAM,CAClB,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAA,EACdC,EAAa,cAAc,EAC3B,MAAMC,EAASH,EAAE,eAAgB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EACvDI,EAAQJ,EAAE,cAAe,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAE3D,OACEK,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,SAAAN,EAAE,aAAa,EAAE,QACzD,IAAA,CAAE,UAAU,OAAQ,SAAAA,EAAE,aAAa,EAAE,EAEtCM,EAAAA,IAAC,MAAG,UAAU,mFACX,WAAO,IAAI,CAACG,EAAMC,IACjBL,EAAAA,KAAC,MAAA,CAEC,UAAU,qEAEV,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAG,EAAK,MAAM,EACzDH,EAAAA,IAAC,KAAA,CAAG,UAAU,iBAAkB,WAAK,KAAA,CAAM,CAAA,CAAA,EAJtC,GAAGG,EAAK,KAAK,IAAIC,CAAG,EAAA,CAM5B,EACH,EAECN,EAAM,OAAS,GACdC,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,6BAA8B,SAAAN,EAAE,kBAAkB,EAAE,QACjE,KAAA,CAAG,UAAU,0CACX,SAAAI,EAAM,IAAI,CAACO,EAAMD,IAChBJ,EAAAA,IAAC,KAAA,CAA2B,YAAnB,GAAGK,CAAI,IAAID,CAAG,EAAU,CAClC,CAAA,CACH,CAAA,EACF,EAGFJ,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA+B,SAAAN,EAAE,gBAAiB,CAAE,MAAO,gCAAA,CAAkC,CAAA,CAAE,CAAA,CAAA,CAC9G,CAAA,EACF,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{u as s,j as e}from"./index-B8Y8Y-Mi.js";import{a,S as l}from"./LanguageSwitcher-D93nCuuR.js";import{S as n}from"./SiteHeader-Dj3gDOnR.js";const i=()=>{const{t}=s();return a("titles.notFound"),e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800 flex flex-col",children:[e.jsx(l,{}),e.jsx(n,{variant:"light",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-6 py-10",children:e.jsxs("div",{className:"max-w-lg text-center space-y-4",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-slate-200 text-slate-600 font-bold text-xl",children:"404"}),e.jsx("h1",{className:"text-3xl font-bold",children:t("notFound.title")}),e.jsx("p",{className:"text-slate-600",children:t("notFound.description")}),e.jsxs("div",{className:"flex gap-3 justify-center",children:[e.jsx("a",{href:"/",className:"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100",children:t("notFound.backHome")}),e.jsx("a",{href:"/tools/",className:"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100",children:t("landing.nav.tools")}),e.jsx("a",{href:"/app/",className:"px-4 py-2 rounded-lg bg-slate-900 text-white hover:bg-slate-800",children:t("notFound.openApp")})]})]})})]})};export{i as default};
2
+ //# sourceMappingURL=NotFound-CfY31vMZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotFound-CfY31vMZ.js","sources":["../../src/pages/NotFound.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport usePageTitle from '../hooks/usePageTitle';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\n\nconst NotFound = () => {\n const { t } = useTranslation();\n usePageTitle('titles.notFound');\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-6 py-10\">\n <div className=\"max-w-lg text-center space-y-4\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-slate-200 text-slate-600 font-bold text-xl\">\n 404\n </div>\n <h1 className=\"text-3xl font-bold\">{t('notFound.title')}</h1>\n <p className=\"text-slate-600\">{t('notFound.description')}</p>\n <div className=\"flex gap-3 justify-center\">\n <a href=\"/\" className=\"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100\">\n {t('notFound.backHome')}\n </a>\n <a href=\"/tools/\" className=\"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100\">\n {t('landing.nav.tools')}\n </a>\n <a href=\"/app/\" className=\"px-4 py-2 rounded-lg bg-slate-900 text-white hover:bg-slate-800\">\n {t('notFound.openApp')}\n </a>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default NotFound;\n"],"names":["NotFound","useTranslation","usePageTitle","jsxs","jsx","StagingBadge","SiteHeader"],"mappings":"iJAMA,MAAMA,EAAW,IAAM,CACrB,KAAM,CAAE,CAAA,EAAMC,EAAA,EACd,OAAAC,EAAa,iBAAiB,EAE5BC,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,QACzC,OAAA,CAAK,UAAU,qDACd,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,+GAA+G,SAAA,MAE9H,QACC,KAAA,CAAG,UAAU,qBAAsB,SAAA,EAAE,gBAAgB,EAAE,QACvD,IAAA,CAAE,UAAU,iBAAkB,SAAA,EAAE,sBAAsB,EAAE,EACzDD,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAC,EAAAA,IAAC,KAAE,KAAK,IAAI,UAAU,iFACnB,SAAA,EAAE,mBAAmB,EACxB,EACAA,EAAAA,IAAC,KAAE,KAAK,UAAU,UAAU,iFACzB,SAAA,EAAE,mBAAmB,EACxB,EACAA,MAAC,KAAE,KAAK,QAAQ,UAAU,kEACvB,SAAA,EAAE,kBAAkB,CAAA,CACvB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{u as k,r as P,t as h,j as e,b as l}from"./index-B8Y8Y-Mi.js";import{A as c,C as T}from"./CopyButton-CGfuSJtU.js";import{a as B,S as I}from"./LanguageSwitcher-D93nCuuR.js";import{S}from"./SiteHeader-Dj3gDOnR.js";import{S as z}from"./shield-check-CFNhE_aD.js";import{C as j}from"./check-BWCiUZ-C.js";import{C as A}from"./copy-C9t_FzCZ.js";import{T as L}from"./terminal-CGhryJds.js";const q=o=>(o||"").split("-")[0]==="ja"?"ja":"en",b={en:{badge:"Pricing",title:"Pricing",subtitle:"Start free with a watermarked preview bundle, then upgrade when you need full matrix exports and no-watermark outputs.",valueBullets:["Screenshots as a build step","Reproducible exports (dir + ZIP)","Fastlane-ready output (iOS + Android)"],proNoteTitle:"Pro = production workflow",proNoteBody:"If screenshots block releases (device buckets, locale churn, ordering accidents), Pro pays for itself by making exports rerunnable in CI.",faqTitle:"FAQ",trustTitle:"Privacy-first",trustBody:"Rendering and export runs locally (browser or CI runner). No uploads to ShipScreens.",teamTitle:"Team / Agency (coming soon)",teamBody:"For teams managing multiple apps or client work. Email us if you need a team plan or an agency license.",teamBullets:["Multiple projects","Client work licensing","Priority support for CI unblockers"],teamCta:"Contact us",annualTitle:"Annual billing (coming soon)",annualBody:"Want annual billing for simpler budgeting? Email us and we will set it up.",annualCta:"Contact us",ctas:{primary:"Preview output (5 min)",secondary:"Run CLI quickstart"},footer:{terms:"Terms",privacy:"Privacy",legal:"Legal (Japan)"}},ja:{badge:"料金",title:"料金",subtitle:"まずは透かし付きのプレビューで確認し、フル一括(端末×言語)や透かし解除が必要になったらProへ。",valueBullets:["スクショをビルドステップに","再現性のある出力(dir + ZIP)","Fastlane対応出力(iOS + Android)"],proNoteTitle:"Pro = 本番運用",proNoteBody:"端末バケット/ロケール更新/順番事故でリリースが止まるなら、Proで「再実行できる出力」をCIに固定する価値があります。",faqTitle:"FAQ",trustTitle:"プライバシー",trustBody:"レンダリング/出力はローカル(ブラウザ/CI)で完結。ShipScreensへアップロード不要。",teamTitle:"Team / Agency(準備中)",teamBody:"複数アプリ運用や受託/代理店向け。Teamプランやライセンスが必要ならご連絡ください。",teamBullets:["複数プロジェクト","受託/代理店での利用","CI詰まりの優先サポート"],teamCta:"問い合わせる",annualTitle:"年額(準備中)",annualBody:"年額が必要なら連絡ください。用意します。",annualCta:"問い合わせる",ctas:{primary:"出力例をプレビュー(5分)",secondary:"CLIクイックスタート"},footer:{terms:"利用規約",privacy:"プライバシー",legal:"特商法表記"}}},Q=()=>{const{i18n:o,t:d}=k(),x=q(o.resolvedLanguage||o.language),s=b[x]||b.en;B("titles.pricing",{defaultValue:s.title});const p=d("landing.pricing",{returnObjects:!0})||{},i=p.free||{},r=p.pro||{},a=p.cliProUnlock||{},n=d("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",v="/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro",g="support@shimaumaservices.co.jp",_=`mailto:${g}?subject=${encodeURIComponent("ShipScreens Team/Agency plan")}`,w=`mailto:${g}?subject=${encodeURIComponent("ShipScreens annual billing")}`;return P.useEffect(()=>{h("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(I,{}),e.jsx(S,{variant:"dark",active:"pricing",openAppHref:y,onToolsClick:t=>l(t,"pricing_nav_click",{cta:"tools_header"}),onPricingClick:t=>l(t,"pricing_nav_click",{cta:"pricing_header"}),onOpenAppClick:t=>l(t,"pricing_nav_click",{cta:"open_app_header"}),primaryCta:{href:m,label:d("landing.nav.primaryCta",{defaultValue:s.ctas.primary}),onClick:t=>l(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(z,{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.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:[e.jsxs("a",{href:m,onClick:t=>l(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(c,{size:16})]}),e.jsxs("a",{href:u,onClick:t=>l(t,"pricing_cta_click",{cta:"agent_cli_hero"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition",children:[s.ctas.secondary," ",e.jsx(c,{size:16})]})]})]}),e.jsxs("section",{className:"grid md:grid-cols-2 gap-6",children:[e.jsx(f,{title:i.title,price:i.price,bullets:i.bullets||[],cta:i.cta,href:N,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(f,{title:r.title,price:r.price,bullets:r.bullets||[],cta:r.cta,href:v,trackingCta:"go_pro_pricing",highlight:!0,badge:r.badge})]}),e.jsxs("section",{className:"max-w-4xl mx-auto grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"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.teamTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.teamBody}),e.jsx("ul",{className:"space-y-2 text-sm text-slate-200",children:(s.teamBullets||[]).map(t=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(j,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:t})]},t))}),e.jsxs("a",{href:_,onClick:t=>l(t,"pricing_cta_click",{cta:"team_contact"}),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.teamCta," ",e.jsx(c,{size:16})]})]}),e.jsxs("div",{className:"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.annualTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.annualBody}),e.jsxs("a",{href:w,onClick:t=>l(t,"pricing_cta_click",{cta:"annual_contact"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold",children:[s.annualCta," ",e.jsx(c,{size:16})]})]})]}),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.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:m,onClick:t=>l(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(c,{size:16})]}),e.jsxs("a",{href:u,onClick:t=>l(t,"pricing_cta_click",{cta:"agent_cli_pro_note"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold",children:[s.ctas.secondary," ",e.jsx(c,{size:16})]})]})]}),a?.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:a.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"})]}),a.body&&e.jsx("p",{className:"text-sm text-slate-300",children:a.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:a.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(T,{value:a.cmd,onCopied:()=>h("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(A,{size:14}),t]})})}),a.note&&e.jsx("div",{className:"text-xs text-slate-500",children:a.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(L,{size:16,className:"text-blue-300"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"font-semibold text-white",children:x==="ja"?"CLI/CIで回せる":"CI-friendly CLI"}),e.jsx("div",{className:"text-slate-300",children:x==="ja"?"non-interactive な CLI で、毎リリースの更新をビルドステップにできます。":"Non-interactive CLI runs locally or in CI, so screenshot updates become a build step."})]})]})]}),n.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:n.map((t,C)=>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}-${C}`))})]}),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"]})]})]})]})},f=({title:o,price:d,bullets:x,cta:s,href:p,trackingCta:i,highlight:r,badge:a})=>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&&a&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:a})]}),e.jsx("div",{className:"text-3xl font-black",children:d}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:(x||[]).map(n=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(j,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:n})]},n))}),e.jsxs("a",{href:p,onClick:n=>i?l(n,"pricing_cta_click",{cta:i}):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(c,{size:16,className:"ml-2"})]})]});export{Q as default};
2
+ //# sourceMappingURL=Pricing-BQwtFVbj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pricing-BQwtFVbj.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 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 with a watermarked preview bundle, then upgrade when you need full matrix exports and no-watermark outputs.',\n valueBullets: ['Screenshots as a build step', 'Reproducible exports (dir + ZIP)', 'Fastlane-ready output (iOS + Android)'],\n proNoteTitle: 'Pro = production workflow',\n proNoteBody:\n 'If screenshots block releases (device buckets, locale churn, ordering accidents), Pro pays for itself by making exports rerunnable in CI.',\n faqTitle: 'FAQ',\n trustTitle: 'Privacy-first',\n trustBody: 'Rendering and export runs locally (browser or CI runner). No uploads to ShipScreens.',\n teamTitle: 'Team / Agency (coming soon)',\n teamBody: 'For teams managing multiple apps or client work. Email us if you need a team plan or an agency license.',\n teamBullets: ['Multiple projects', 'Client work licensing', 'Priority support for CI unblockers'],\n teamCta: 'Contact us',\n annualTitle: 'Annual billing (coming soon)',\n annualBody: 'Want annual billing for simpler budgeting? Email us and we will set it up.',\n annualCta: 'Contact us',\n ctas: {\n primary: 'Preview output (5 min)',\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 'まずは透かし付きのプレビューで確認し、フル一括(端末×言語)や透かし解除が必要になったらProへ。',\n valueBullets: ['スクショをビルドステップに', '再現性のある出力(dir + ZIP)', 'Fastlane対応出力(iOS + Android)'],\n proNoteTitle: 'Pro = 本番運用',\n proNoteBody:\n '端末バケット/ロケール更新/順番事故でリリースが止まるなら、Proで「再実行できる出力」をCIに固定する価値があります。',\n faqTitle: 'FAQ',\n trustTitle: 'プライバシー',\n trustBody: 'レンダリング/出力はローカル(ブラウザ/CI)で完結。ShipScreensへアップロード不要。',\n teamTitle: 'Team / Agency(準備中)',\n teamBody: '複数アプリ運用や受託/代理店向け。Teamプランやライセンスが必要ならご連絡ください。',\n teamBullets: ['複数プロジェクト', '受託/代理店での利用', 'CI詰まりの優先サポート'],\n teamCta: '問い合わせる',\n annualTitle: '年額(準備中)',\n annualBody: '年額が必要なら連絡ください。用意します。',\n annualCta: '問い合わせる',\n ctas: {\n primary: '出力例をプレビュー(5分)',\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 <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition\"\n >\n {copy.ctas.secondary} <ArrowRight size={16} />\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 <section className=\"max-w-4xl mx-auto grid md:grid-cols-2 gap-6\">\n <div className=\"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.teamTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.teamBody}</p>\n <ul className=\"space-y-2 text-sm text-slate-200\">\n {(copy.teamBullets || []).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={teamMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'team_contact' })}\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.teamCta} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"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.annualTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.annualBody}</p>\n <a\n href={annualMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'annual_contact' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold\"\n >\n {copy.annualCta} <ArrowRight size={16} />\n </a>\n </div>\n </section>\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 <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_pro_note' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold\"\n >\n {copy.ctas.secondary} <ArrowRight size={16} />\n </a>\n </div>\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 {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","Check","CopyButton","copyLabel","Fragment","Copy","Terminal","i","title","price","bullets","cta","href","trackingCta","highlight","badge"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{u as l,j as s}from"./index-B8Y8Y-Mi.js";import{a as c,S as r}from"./LanguageSwitcher-D93nCuuR.js";import{S as m}from"./SiteHeader-Dj3gDOnR.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-CaHf2UM7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Privacy-CaHf2UM7.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"}
@@ -0,0 +1,2 @@
1
+ import{u as j,r as l,j as e}from"./index-B8Y8Y-Mi.js";import{u as y}from"./useAuth-lZZC20Tl.js";import{a as v,S as N}from"./LanguageSwitcher-D93nCuuR.js";import{S}from"./SiteHeader-Dj3gDOnR.js";import{S as P}from"./smartphone-BcQB9gIh.js";import{E as C,a as E}from"./eye-ouNo8Nv5.js";import{s as k}from"./signIn-CVoSzqCz.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-Cyi2_-Mn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignIn-Cyi2_-Mn.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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"}
@@ -0,0 +1,2 @@
1
+ import{u as k,r as o,j as e}from"./index-B8Y8Y-Mi.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-lZZC20Tl.js";import{a as W,S as X}from"./LanguageSwitcher-D93nCuuR.js";import{S as J}from"./SiteHeader-Dj3gDOnR.js";import{E as K,a as Q}from"./eye-ouNo8Nv5.js";import{s as Y}from"./signIn-CVoSzqCz.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-C9QH5po_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp-C9QH5po_.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]}
@@ -0,0 +1,2 @@
1
+ import{u as K,r as h,j as e}from"./index-B8Y8Y-Mi.js";import{c as Q,u as U,L as S,X as W}from"./LanguageSwitcher-D93nCuuR.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-Dj3gDOnR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteHeader-Dj3gDOnR.js","sources":["../../node_modules/lucide-react/dist/esm/icons/menu.js","../../src/components/SiteHeader.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M4 5h16\", key: \"1tepv9\" }],\n [\"path\", { d: \"M4 12h16\", key: \"1lakjw\" }],\n [\"path\", { d: \"M4 19h16\", key: \"1djgab\" }]\n];\nconst Menu = createLucideIcon(\"menu\", __iconNode);\n\nexport { __iconNode, Menu as default };\n//# sourceMappingURL=menu.js.map\n","import React, { useCallback, useRef, useState } from 'react';\nimport { Menu, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport LanguageSwitcher from './LanguageSwitcher';\nimport useModalA11y from '../hooks/useModalA11y';\n\nconst XLink = ({ className }) => (\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-md ${className}`}\n aria-label=\"ShipScreens on X (opens in new tab)\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <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\" />\n </svg>\n </a>\n);\n\nconst SiteHeader = ({\n variant = 'dark',\n active = null, // 'tools' | 'pricing' | 'app' | null\n logoHref = '/',\n toolsHref = '/tools/',\n pricingHref = '/pricing',\n openAppHref = '/app/',\n showTools = true,\n showPricing = true,\n showOpenApp = true,\n showX = true,\n showLanguageSwitcher = true,\n languageSwitcherClassName = 'hidden sm:flex',\n onToolsClick,\n onPricingClick,\n onOpenAppClick,\n primaryCta = null, // { href, label, onClick }\n}) => {\n const { t } = useTranslation();\n const isDark = variant === 'dark';\n const hasPrimaryCta = Boolean(primaryCta?.href && primaryCta?.label);\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const mobileMenuPanelRef = useRef(null);\n const mobileMenuCloseRef = useRef(null);\n\n const closeMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n\n useModalA11y({\n isOpen: mobileMenuOpen,\n onClose: closeMobileMenu,\n panelRef: mobileMenuPanelRef,\n initialFocusRef: mobileMenuCloseRef,\n });\n\n const focusRing = isDark\n ? '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'\n : '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';\n const linkBase = isDark\n ? `text-sm text-slate-300 hover:text-white transition-colors ${focusRing}`\n : `text-sm text-slate-600 hover:text-slate-900 transition-colors ${focusRing}`;\n const linkActive = isDark ? 'text-white font-semibold' : 'text-slate-900 font-semibold';\n const linkClass = (id) => `${linkBase}${active === id ? ` ${linkActive}` : ''}`;\n\n const mobileMenuLinkBase = isDark\n ? `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 ${focusRing}`\n : `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 ${focusRing}`;\n const mobileMenuLinkActive = isDark ? 'border-blue-500 text-white' : 'border-blue-600 text-slate-900';\n const mobileMenuLinkClass = (id) => `${mobileMenuLinkBase}${active === id ? ` ${mobileMenuLinkActive}` : ''}`;\n\n const renderMobileMenu = () => {\n if (!mobileMenuOpen) return null;\n\n const menuBg = isDark ? 'bg-slate-900/70' : 'bg-slate-900/40';\n const panelBase = isDark ? 'bg-slate-950 border-slate-800 text-white' : 'bg-white border-slate-200 text-slate-800';\n const panelHeaderBorder = isDark ? 'border-slate-800' : 'border-slate-200';\n const closeButtonStyle = isDark\n ? `border-slate-800 text-slate-200 hover:bg-slate-900 ${focusRing}`\n : `border-slate-200 text-slate-600 hover:bg-slate-50 ${focusRing}`;\n\n const handleNav = (callback) => (event) => {\n callback?.(event);\n closeMobileMenu();\n };\n\n const menuLabel = t('common.menu', { defaultValue: 'Menu' });\n\n return (\n <div\n className={`fixed inset-0 z-[2200] ${menuBg} backdrop-blur-sm p-4 sm:hidden`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={menuLabel}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) closeMobileMenu();\n }}\n >\n <div\n ref={mobileMenuPanelRef}\n id=\"shipscreens-mobile-menu\"\n className={`w-full max-w-sm ml-auto rounded-2xl shadow-2xl border overflow-hidden ${panelBase}`}\n >\n <div className={`flex items-center justify-between px-4 py-3 border-b ${panelHeaderBorder}`}>\n <div className=\"text-sm font-bold\">{menuLabel}</div>\n <button\n ref={mobileMenuCloseRef}\n type=\"button\"\n onClick={closeMobileMenu}\n className={`p-2 rounded-lg border transition ${closeButtonStyle}`}\n aria-label={t('common.close', { defaultValue: 'Close' })}\n title={t('common.close', { defaultValue: 'Close' })}\n >\n <X size={16} />\n </button>\n </div>\n\n <div className=\"p-4 space-y-3\">\n {showLanguageSwitcher && <LanguageSwitcher className=\"w-full justify-center\" />}\n\n <div className=\"space-y-2\">\n {showTools && (\n <a\n href={toolsHref}\n onClick={handleNav(onToolsClick)}\n className={mobileMenuLinkClass('tools')}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n <span>{t('landing.nav.tools')}</span>\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={handleNav(onPricingClick)}\n className={mobileMenuLinkClass('pricing')}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n <span>{t('landing.nav.pricing', { defaultValue: 'Pricing' })}</span>\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={handleNav(onOpenAppClick)}\n className={mobileMenuLinkClass('app')}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n <span>{t('landing.nav.openApp')}</span>\n </a>\n )}\n\n {showX && (\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mobileMenuLinkBase}\n >\n <span>X</span>\n </a>\n )}\n </div>\n\n {primaryCta?.href && primaryCta?.label && (\n <a\n href={primaryCta.href}\n onClick={handleNav(primaryCta.onClick)}\n className={`w-full inline-flex items-center justify-center px-4 py-2 rounded-lg font-semibold transition ${\n isDark ? 'bg-white text-slate-900 hover:scale-[1.02]' : 'bg-slate-900 text-white hover:bg-slate-800'\n } ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n };\n\n const headerContent = isDark ? (\n <header className=\"max-w-6xl mx-auto px-4 py-4 sm:px-6 sm:py-6 flex items-center justify-between gap-4\">\n <a href={logoHref} className={`flex items-center gap-3 hover:opacity-90 transition-opacity ${focusRing}`}>\n <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\">\n <img\n src=\"/app/assets/icons/favicon-32x32.png\"\n alt=\"ShipScreens\"\n className=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n <span className=\"text-lg font-bold\">ShipScreens</span>\n </a>\n\n <div className=\"flex items-center gap-2 sm:gap-3\">\n {showLanguageSwitcher && <LanguageSwitcher className={languageSwitcherClassName} />}\n {showX && <XLink className=\"hidden sm:inline text-slate-300 hover:text-white transition-colors\" />}\n\n {showTools && (\n <a\n href={toolsHref}\n onClick={onToolsClick}\n className={`hidden sm:inline ${linkClass('tools')}`}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n {t('landing.nav.tools')}\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={onPricingClick}\n className={`hidden sm:inline ${linkClass('pricing')}`}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n {t('landing.nav.pricing', { defaultValue: 'Pricing' })}\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={onOpenAppClick}\n className={`${hasPrimaryCta ? 'hidden sm:inline ' : ''}${linkClass('app')}`}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n {t('landing.nav.openApp')}\n </a>\n )}\n\n {hasPrimaryCta && (\n <a\n href={primaryCta.href}\n onClick={primaryCta.onClick}\n 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 ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n\n <button\n type=\"button\"\n onClick={() => setMobileMenuOpen(true)}\n className={`sm:hidden p-2 rounded-lg border border-slate-800 bg-slate-950 text-slate-200 hover:bg-slate-900 transition ${focusRing}`}\n aria-label={t('common.menu', { defaultValue: 'Menu' })}\n aria-controls=\"shipscreens-mobile-menu\"\n aria-expanded={mobileMenuOpen}\n >\n <Menu size={18} />\n </button>\n </div>\n </header>\n ) : (\n <header className=\"border-b border-slate-200 bg-white\">\n <div className=\"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between gap-4\">\n <a href={logoHref} className={`flex items-center gap-3 hover:opacity-90 transition-opacity ${focusRing}`}>\n <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\">\n <img\n src=\"/app/assets/icons/favicon-32x32.png\"\n alt=\"ShipScreens\"\n className=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n <span className=\"font-bold text-slate-900\">ShipScreens</span>\n </a>\n\n <div className=\"flex items-center gap-3\">\n {showLanguageSwitcher && <LanguageSwitcher className={languageSwitcherClassName} />}\n {showX && <XLink className=\"hidden sm:inline text-slate-500 hover:text-slate-900 transition-colors\" />}\n\n {showTools && (\n <a\n href={toolsHref}\n onClick={onToolsClick}\n className={`hidden sm:inline ${linkClass('tools')}`}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n {t('landing.nav.tools')}\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={onPricingClick}\n className={`hidden sm:inline ${linkClass('pricing')}`}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n {t('landing.nav.pricing', { defaultValue: 'Pricing' })}\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={onOpenAppClick}\n className={linkClass('app')}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n {t('landing.nav.openApp')}\n </a>\n )}\n\n {primaryCta?.href && primaryCta?.label && (\n <a\n href={primaryCta.href}\n onClick={primaryCta.onClick}\n className={`px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800 transition ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n\n <button\n type=\"button\"\n onClick={() => setMobileMenuOpen(true)}\n className={`sm:hidden p-2 rounded-lg border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition ${focusRing}`}\n aria-label={t('common.menu', { defaultValue: 'Menu' })}\n aria-controls=\"shipscreens-mobile-menu\"\n aria-expanded={mobileMenuOpen}\n >\n <Menu size={18} />\n </button>\n </div>\n </div>\n </header>\n );\n\n return (\n <>\n {headerContent}\n {renderMobileMenu()}\n </>\n );\n};\n\nexport default SiteHeader;\n"],"names":["__iconNode","Menu","createLucideIcon","XLink","className","jsx","SiteHeader","variant","active","logoHref","toolsHref","pricingHref","openAppHref","showTools","showPricing","showOpenApp","showX","showLanguageSwitcher","languageSwitcherClassName","onToolsClick","onPricingClick","onOpenAppClick","primaryCta","t","useTranslation","isDark","hasPrimaryCta","mobileMenuOpen","setMobileMenuOpen","useState","mobileMenuPanelRef","useRef","mobileMenuCloseRef","closeMobileMenu","useCallback","useModalA11y","focusRing","linkBase","linkActive","linkClass","id","mobileMenuLinkBase","mobileMenuLinkActive","mobileMenuLinkClass","renderMobileMenu","menuBg","panelBase","panelHeaderBorder","closeButtonStyle","handleNav","callback","event","menuLabel","jsxs","X","LanguageSwitcher","headerContent","Fragment"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ import{j as e}from"./index-B8Y8Y-Mi.js";const a=({primary:l,secondary:t,note:s})=>!l?.label||!l?.href?null:e.jsx("div",{className:"fixed inset-x-4 bottom-4 z-[1200] sm:hidden",style:{paddingBottom:"env(safe-area-inset-bottom)"},children:e.jsxs("div",{className:"rounded-2xl border border-slate-700 bg-slate-950/95 backdrop-blur p-3 shadow-xl shadow-slate-900/40",children:[s&&e.jsx("div",{className:"text-[10px] text-slate-400 mb-2",children:s}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("a",{href:l.href,onClick:l.onClick,className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl bg-blue-500 text-white text-sm font-semibold hover:bg-blue-600 transition",children:l.label}),t?.label&&t?.href&&e.jsx("a",{href:t.href,onClick:t.onClick,className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 text-sm font-semibold hover:bg-slate-900 transition",children:t.label})]})]})});export{a as S};
2
+ //# sourceMappingURL=StickyMobileCta-uyWGVhdc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StickyMobileCta-uyWGVhdc.js","sources":["../../src/components/StickyMobileCta.jsx"],"sourcesContent":["import React from 'react';\n\nconst StickyMobileCta = ({ primary, secondary, note }) => {\n if (!primary?.label || !primary?.href) return null;\n\n return (\n <div\n className=\"fixed inset-x-4 bottom-4 z-[1200] sm:hidden\"\n style={{ paddingBottom: 'env(safe-area-inset-bottom)' }}\n >\n <div className=\"rounded-2xl border border-slate-700 bg-slate-950/95 backdrop-blur p-3 shadow-xl shadow-slate-900/40\">\n {note && <div className=\"text-[10px] text-slate-400 mb-2\">{note}</div>}\n <div className=\"flex gap-2\">\n <a\n href={primary.href}\n onClick={primary.onClick}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl bg-blue-500 text-white text-sm font-semibold hover:bg-blue-600 transition\"\n >\n {primary.label}\n </a>\n {secondary?.label && secondary?.href && (\n <a\n href={secondary.href}\n onClick={secondary.onClick}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-2 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 text-sm font-semibold hover:bg-slate-900 transition\"\n >\n {secondary.label}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default StickyMobileCta;\n"],"names":["StickyMobileCta","primary","secondary","note","jsx","jsxs"],"mappings":"wCAEA,MAAMA,EAAkB,CAAC,CAAE,QAAAC,EAAS,UAAAC,EAAW,KAAAC,KACzC,CAACF,GAAS,OAAS,CAACA,GAAS,KAAa,KAG5CG,EAAAA,IAAC,MAAA,CACC,UAAU,8CACV,MAAO,CAAE,cAAe,6BAAA,EAExB,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,sGACZ,SAAA,CAAAF,GAAQC,EAAAA,IAAC,MAAA,CAAI,UAAU,kCAAmC,SAAAD,EAAK,EAChEE,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAD,EAAAA,IAAC,IAAA,CACC,KAAMH,EAAQ,KACd,QAASA,EAAQ,QACjB,UAAU,sJAET,SAAAA,EAAQ,KAAA,CAAA,EAEVC,GAAW,OAASA,GAAW,MAC9BE,EAAAA,IAAC,IAAA,CACC,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,UAAU,oLAET,SAAAA,EAAU,KAAA,CAAA,CACb,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA"}
@@ -0,0 +1,4 @@
1
+ import{u as L,r as A,t as o,j as e,b as a}from"./index-B8Y8Y-Mi.js";import{A as r,C as h}from"./CopyButton-CGfuSJtU.js";import{C as I}from"./CliPreflightCard-CxYyogdF.js";import{c as U,a as z,S as B}from"./LanguageSwitcher-D93nCuuR.js";import{S as H}from"./StickyMobileCta-uyWGVhdc.js";import{S as O}from"./SiteHeader-Dj3gDOnR.js";import{G as u}from"./grid-3x3-U1Nk_ppf.js";import{C as f}from"./crop-B7IxIx6D.js";import{C as b}from"./copy-C9t_FzCZ.js";import{C as E}from"./chevron-down-DbSAem1L.js";import"./circle-check-CeakjiXC.js";const R=[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]],y=U("tablet",R),V=i=>(i||"").split("-")[0]==="ja"?"ja":"en",g={en:{badge:"Store assets pipeline kit",title:"Store Assets Pipeline Kit",subtitle:"Capture → copy → layout → export. Replace manual Figma/Canva edits and brittle AI drafts before App Store / Google Play uploads, and sanity-check App Review / ASO constraints.",heroCliTitle:"CLI quickstart (2 steps)",heroCliNote:"wizard → build (raw mode, no Playwright).",heroCliSummary:"Outputs: fastlane/ + reproducible ZIP (local/CI).",heroCliCopyLabel:"Copy all commands",heroCliTemplatesLabel:"Starter templates",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
2
+ `),proUnlockTitle:"Unlock Pro (CLI)",proUnlockBody:"Remove the watermark and unlock full matrix batch exports via CLI auth:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"Completes a one-time browser sign-in; then rerun build with --require-pro.",navTools:"Tools",overviewTitle:"Pipeline overview",overviewSteps:["Capture","Copy","Layout","Export","Upload (ASC/Play)"],checklistTitle:"Checklists",checklists:[{key:"ipad13",icon:y,title:"iPad 13-inch capture",body:"Get the right source before you generate.",bullets:["Use a real device shot when possible (13-inch / 2064x2752).","If you use Simulator, export at native size (no scaling).","Keep UI clean; avoid overlays that won’t match store previews."]},{key:"buckets",icon:u,title:"Size bucket shortcuts",body:"Start minimal, expand later.",bullets:["iPhone-only: pick the largest iPhone bucket first.","Add iPad 13-inch only if you ship iPad-first.","Android: one phone bucket; add tablet only if needed."]},{key:"play-safe",icon:f,title:"Play feature graphic safe area",body:"Avoid hidden crops in Play previews.",bullets:["Keep text/logos inside the central 80-86% area.","Avoid edge-aligned UI; Play crops in some previews.","Preview in Play Console before you finalize."]}],note:"Translation happens outside ShipScreens; we focus on reproducible exports, Fastlane-ready outputs, and CI guardrails (verify + stage).",scopeNote:"Upload is handled in App Store Connect / Play Console.",assetsTitle:"Templates & tools",assetsCta:"Open tool",assets:[{key:"csv",title:"Screenshot copy CSV template",desc:"Download a copy template and estimate workload.",href:"/tools/screenshot-workload-calculator/"},{key:"framework",title:"5-panel screenshot script",desc:"Hook -> Problem -> Proof -> How -> CTA.",href:"/tools/5-panel-screenshot-framework/"}],nextTitle:"Next: start from a sample project",nextBody:"Open a sample project, swap screenshots + copy, then export the first set.",nextCtaSample:"Open sample project",ctaPrimary:"Run CLI first export",ctaSecondary:"Back to tools"},ja:{badge:"ストア素材パイプラインキット",title:"ストア素材パイプラインキット",subtitle:"Capture → Copy → Layout → Export。Figma/Canvaの手作業やAI下書きの不安定さをアップロード前に整え、App Review/ASO の制約もチェック。",heroCliTitle:"CLIクイックスタート(2ステップ)",heroCliNote:"wizard → build(raw / Playwright不要)。",heroCliSummary:"出力: fastlane/ + 再現性ZIP(ローカル/CI)。",heroCliCopyLabel:"コマンドをすべてコピー",heroCliTemplatesLabel:"スターター雛形",heroCliConfigLabel:"config.yml",heroCliCsvLabel:"copy.csv",heroCliCmd:["npx --yes shipscreens wizard","npx --yes shipscreens build --mode raw --zip --out out/agent"].join(`
3
+ `),proUnlockTitle:"Proを解除(CLI)",proUnlockBody:"透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:",proUnlockCmd:"npx --yes shipscreens auth login",proUnlockNote:"初回のみブラウザでサインインします。以後は --require-pro で再実行。",navTools:"ツール一覧",overviewTitle:"パイプライン概要",overviewSteps:["素材取り","コピー","レイアウト","出力","アップロード (ASC/Play)"],checklistTitle:"チェックリスト",checklists:[{key:"ipad13",icon:y,title:"iPad 13-inch 実スクショ",body:"生成前の素材を揃える。",bullets:["実機があれば 13-inch / 2064x2752 の実スクショを用意。","Simulator を使う場合は native サイズで書き出す。","ストア表示とズレるUIオーバーレイは避ける。"]},{key:"buckets",icon:u,title:"サイズバケット削減",body:"最小セットでまず出す。",bullets:["iPhone-only は最大サイズ1バケットから。","iPad は13-inchが必要な場合のみ追加。","Android はスマホ1バケット、必要ならタブレット。"]},{key:"play-safe",icon:f,title:"Play feature graphic 安全域",body:"隠れクロップを避ける。",bullets:["文字/ロゴは中央 80-86% に収める。","端に寄せすぎない(プレビューで切れる)。","Play Console のプレビューで最終確認。"]}],note:"翻訳は外部でOK。ShipScreensはレイアウトの安定・再現性のある出力・Fastlane公式パスへの生成(CI)と、verify+stage の事故防止を担います。",scopeNote:"アップロードは App Store Connect / Play Console 側で行います。",assetsTitle:"テンプレ/ツール",assetsCta:"ツールを開く",assets:[{key:"csv",title:"コピーCSVテンプレ + 作業量見積もり",desc:"CSV雛形と端末x言語の計算。",href:"/tools/screenshot-workload-calculator/"},{key:"framework",title:"5枚構成スクリプト",desc:"Hook -> Problem -> Proof -> How -> CTA。",href:"/tools/5-panel-screenshot-framework/"}],nextTitle:"次: サンプルから開始",nextBody:"サンプルを開いて、スクショ差し替え → CSV copy → Export まで最短で。",nextCtaSample:"サンプルを開く",ctaPrimary:"CLIで初回エクスポート",ctaSecondary:"ツール一覧へ"}},W=()=>{const{i18n:i,t:l}=L(),C=V(i.resolvedLanguage||i.language),s=g[C]||g.en,n="support@shimaumaservices.co.jp",_=l("landing.partner.emailSubject",{defaultValue:"ShipScreens first export review"}),j=l("landing.partner.emailBody",{defaultValue:""}),k=`mailto:${n}?subject=${encodeURIComponent(_)}&body=${encodeURIComponent(j)}`,v="/app/?sample=5panel&entry_source=store_assets_pipeline_open_app_header",d="/tools/agent-cli/",w="/tools/first-export/?entry_source=store_assets_pipeline_primary_cta",p="/app/?sample=5panel&entry_source=store_assets_pipeline_open_sample_project",N="/downloads/shipscreens-agent-cli-config.yml",S="/downloads/shipscreens-agent-cli-copy.csv",x=l("common.copy",{defaultValue:"Copy"}),P=l("common.showCommands",{defaultValue:"Show commands"}),T=typeof window>"u"?!0:window.matchMedia("(min-width: 640px)").matches;return z("titles.storeAssetsPipeline",{defaultValue:s.title}),A.useEffect(()=>{o("tool_view",{tool:"store_assets_pipeline"})},[]),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(B,{}),e.jsx(O,{variant:"dark",active:"tools",openAppHref:v,onToolsClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_tools_header"}),onPricingClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"pricing_header"}),onOpenAppClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_app_header"}),primaryCta:{href:w,label:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[l("landing.nav.primaryCta")," ",e.jsx(r,{size:16})]}),onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_first_export_header"})}}),e.jsxs("main",{className:"max-w-5xl mx-auto px-6 pb-24 space-y-10",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4",children:[e.jsx("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:s.badge}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:s.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:s.subtitle}),e.jsxs("a",{href:"#design-partner",onClick:()=>o("tool_cta_click",{tool:"store_assets_pipeline",cta:"jump_design_partner"}),className:"inline-flex items-center gap-1 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4",children:[l("landing.partner.jumpCta",{defaultValue:l("landing.partner.emailCta")})," ",e.jsx(r,{size:14})]}),e.jsxs("div",{className:"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:s.heroCliTitle}),e.jsx("p",{className:"text-xs text-slate-400",children:s.heroCliNote}),e.jsx("p",{className:"text-xs text-slate-500",children:s.heroCliSummary}),e.jsx(h,{value:s.heroCliCmd,onCopied:()=>o("tool_cta_click",{tool:"store_assets_pipeline",cta:"copy_cli_hero"}),className:"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold",children:({copyLabel:t,copyState:c})=>e.jsxs(e.Fragment,{children:[e.jsx(b,{size:14}),c==="idle"?s.heroCliCopyLabel:t||x]})}),e.jsxs("details",{className:"group",open:T,children:[e.jsxs("summary",{className:"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none",children:[e.jsx("span",{children:P}),e.jsx(E,{size:14,className:"text-slate-500 transition-transform duration-200 group-open:rotate-180"})]}),e.jsx("div",{className:"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:s.heroCliCmd})})]}),e.jsxs("div",{className:"pt-1 space-y-2",children:[e.jsx("div",{className:"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold",children:s.heroCliTemplatesLabel}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("a",{href:N,download:!0,onClick:()=>o("tool_download",{tool:"store_assets_pipeline",asset:"config_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:s.heroCliConfigLabel}),e.jsx("a",{href:S,download:!0,onClick:()=>o("tool_download",{tool:"store_assets_pipeline",asset:"copy_template"}),className:"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition",children:s.heroCliCsvLabel})]})]})]}),e.jsx(I,{compact:!0,href:"/tools/agent-cli/#preflight",onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_cli_preflight"}),className:"max-w-xl mx-auto"}),e.jsx("section",{className:"max-w-xl mx-auto",children:e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 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:s.proUnlockTitle}),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"})]}),s.proUnlockBody&&e.jsx("p",{className:"text-sm text-slate-300",children:s.proUnlockBody}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:s.proUnlockCmd})}),e.jsx(h,{value:s.proUnlockCmd,onCopied:()=>o("tool_cta_click",{tool:"store_assets_pipeline",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(b,{size:14}),t||x]})}),s.proUnlockNote&&e.jsx("div",{className:"text-xs text-slate-500",children:s.proUnlockNote})]})})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:s.overviewTitle}),e.jsx("div",{className:"flex flex-wrap justify-center gap-2 text-sm text-slate-300",children:s.overviewSteps.map(t=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/70",children:t},t))})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:s.checklistTitle}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:s.checklists.map(t=>{const c=t.icon;return e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 flex items-center justify-center",children:e.jsx(c,{size:18,className:"text-slate-200"})}),e.jsx("div",{className:"text-lg font-bold text-white",children:t.title})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:t.body}),e.jsx("ul",{className:"text-xs text-slate-400 list-disc pl-4 space-y-1",children:t.bullets.map(m=>e.jsx("li",{children:m},m))})]},t.key)})}),e.jsxs("div",{className:"text-xs text-slate-500 text-center space-y-1",children:[e.jsx("p",{children:s.note}),e.jsx("p",{children:s.scopeNote})]})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsx("h2",{className:"text-lg font-bold text-white text-center",children:s.assetsTitle}),e.jsx("div",{className:"grid md:grid-cols-2 gap-6",children:s.assets.map(t=>e.jsxs("a",{href:t.href,onClick:()=>o("tool_cta_click",{tool:"store_assets_pipeline",cta:`open_${t.key}`}),className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3 hover:border-slate-700 transition",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:t.title}),e.jsx("div",{className:"text-sm text-slate-300",children:t.desc}),e.jsxs("div",{className:"text-xs text-blue-200 flex items-center gap-2",children:[s.assetsCta," ",e.jsx(r,{size:14})]})]},t.key))})]}),e.jsxs("section",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:s.nextTitle}),e.jsx("div",{className:"text-sm text-slate-300",children:s.nextBody})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 w-full md:w-auto",children:[e.jsxs("a",{href:d,onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_agent_cli_body"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.02] transition w-full md:w-auto",children:[s.ctaPrimary," ",e.jsx(r,{size:16})]}),e.jsxs("a",{href:p,onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"open_sample_project_footer"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition w-full md:w-auto",children:[s.nextCtaSample," ",e.jsx(r,{size:16})]})]})]}),e.jsxs("section",{id:"design-partner",className:"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:l("landing.partner.title")}),e.jsx("div",{className:"text-sm text-slate-300 leading-relaxed",children:l("landing.partner.body")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:k,onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"email_design_partner"}),className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition",children:[l("landing.partner.emailCta")," ",e.jsx(r,{size:16})]}),e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>o("tool_cta_click",{tool:"store_assets_pipeline",cta:"dm_design_partner"}),className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition",children:l("landing.partner.dmCta")})]}),e.jsxs("div",{className:"text-xs text-slate-500",children:[l("landing.partner.emailLabel")," ",e.jsx("a",{href:`mailto:${n}`,className:"underline underline-offset-4 hover:text-white",children:n})]})]}),e.jsx("section",{className:"max-w-3xl mx-auto text-center space-y-4 pt-2",children:e.jsx("a",{href:"/tools/",onClick:()=>o("tool_cta_click",{tool:"store_assets_pipeline",cta:"back_to_tools"}),className:"text-xs text-slate-500 hover:text-slate-300 transition-colors underline underline-offset-4",children:s.ctaSecondary})})]}),e.jsx(H,{primary:{label:s.ctaPrimary,href:d,onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"sticky_primary"})},secondary:{label:s.nextCtaSample,href:p,onClick:t=>a(t,"tool_cta_click",{tool:"store_assets_pipeline",cta:"sticky_secondary"})}})]})};export{W as default};
4
+ //# sourceMappingURL=StoreAssetsPipeline-BJlnD3kD.js.map