shipscreens 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -4
- package/bin/shipscreens.js +484 -29
- package/cli/auth.js +31 -11
- package/cli/commands/build.js +9 -1
- package/cli/commands/captureScreenshots.js +409 -0
- package/cli/commands/copyCheck.js +265 -0
- package/cli/commands/importScreenshots.js +377 -0
- package/cli/commands/inspectReleaseContext.js +607 -0
- package/cli/commands/plan.js +7 -3
- package/cli/commands/planRelease.js +324 -0
- package/cli/commands/stage.js +13 -3
- package/cli/commands/verify.js +7 -2
- package/cli/commands/writeStarterConfig.js +233 -0
- package/cli/mcpBootstrap.js +174 -0
- package/cli/mcpServer.js +172 -3
- package/cli/schema.js +19 -0
- package/cli/variantScope.js +58 -0
- package/dist/.well-known/ai-agents.json +268 -8
- package/dist/.well-known/llms-full.txt +191 -20
- package/dist/.well-known/llms.txt +99 -11
- package/dist/.well-known/mcp-server.json +4 -4
- package/dist/ai-agents.json +268 -8
- package/dist/app/assets/AgentCli-nIqgOG-i.js +17 -0
- package/dist/app/assets/AgentCli-nIqgOG-i.js.map +1 -0
- package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
- package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
- package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
- package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
- package/dist/app/assets/App-BRKxkubQ.css +1 -0
- package/dist/app/assets/App-CZiyX8-L.js +14 -0
- package/dist/app/assets/App-CZiyX8-L.js.map +1 -0
- package/dist/app/assets/AppReviewAso-DYOCuqgV.js +4 -0
- package/dist/app/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
- package/dist/app/assets/Cancelled-CP6V6uDb.js +2 -0
- package/dist/app/assets/Cancelled-CP6V6uDb.js.map +1 -0
- package/dist/app/assets/CopyButton-BFCx6EPg.js +2 -0
- package/dist/app/assets/CopyButton-BFCx6EPg.js.map +1 -0
- package/dist/app/assets/DesignPartner-B4J7f0Bx.js +4 -0
- package/dist/app/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
- package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
- package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
- package/dist/app/assets/FirstExport-qfY7uE8r.js +6 -0
- package/dist/app/assets/FirstExport-qfY7uE8r.js.map +1 -0
- package/dist/app/assets/FitPanel-B1J0V1jK.js +2 -0
- package/dist/app/assets/FitPanel-B1J0V1jK.js.map +1 -0
- package/dist/app/assets/FivePanelFramework-C4yq58kM.js +62 -0
- package/dist/app/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
- package/dist/app/assets/ForgotPassword-KF_HFGyb.js +2 -0
- package/dist/app/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
- package/dist/app/assets/Landing-B_CvZDXJ.js +2 -0
- package/dist/app/assets/Landing-B_CvZDXJ.js.map +1 -0
- package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
- package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
- package/dist/app/assets/Legal-BwGbEjDk.js +2 -0
- package/dist/app/assets/Legal-BwGbEjDk.js.map +1 -0
- package/dist/app/assets/NotFound-Ba1Bw7uu.js +2 -0
- package/dist/app/assets/NotFound-Ba1Bw7uu.js.map +1 -0
- package/dist/app/assets/Pricing-Dt-V4Gqc.js +20 -0
- package/dist/app/assets/Pricing-Dt-V4Gqc.js.map +1 -0
- package/dist/app/assets/Privacy-C6MrXYPO.js +2 -0
- package/dist/app/assets/Privacy-C6MrXYPO.js.map +1 -0
- package/dist/app/assets/Proof-C3DDFAhm.js +20 -0
- package/dist/app/assets/Proof-C3DDFAhm.js.map +1 -0
- package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
- package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
- package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
- package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
- package/dist/app/assets/Security-C1OmAgom.js +2 -0
- package/dist/app/assets/Security-C1OmAgom.js.map +1 -0
- package/dist/app/assets/SignIn-C_wwnmvu.js +2 -0
- package/dist/app/assets/SignIn-C_wwnmvu.js.map +1 -0
- package/dist/app/assets/SignUp-Dm5HalC6.js +2 -0
- package/dist/app/assets/SignUp-Dm5HalC6.js.map +1 -0
- package/dist/app/assets/SiteHeader-CJqQ0pL3.js +2 -0
- package/dist/app/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
- package/dist/app/assets/StickyMobileCta-REC3DROG.js +2 -0
- package/dist/app/assets/StickyMobileCta-REC3DROG.js.map +1 -0
- package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
- package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
- package/dist/app/assets/Success-D6b4wLPD.js +2 -0
- package/dist/app/assets/Success-D6b4wLPD.js.map +1 -0
- package/dist/app/assets/Terms-BMt39FQK.js +2 -0
- package/dist/app/assets/Terms-BMt39FQK.js.map +1 -0
- package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
- package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
- package/dist/app/assets/ToolsIndex-d1szo5bn.js +6 -0
- package/dist/app/assets/ToolsIndex-d1szo5bn.js.map +1 -0
- package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
- package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
- package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
- package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
- package/dist/app/assets/agentHandoff-BGmHqDwv.js +2 -0
- package/dist/app/assets/agentHandoff-BGmHqDwv.js.map +1 -0
- package/dist/app/assets/apiClient-3WVm94VW.js +2 -0
- package/dist/app/assets/apiClient-3WVm94VW.js.map +1 -0
- package/dist/app/assets/calculator-CofuwQa8.js +2 -0
- package/dist/app/assets/calculator-CofuwQa8.js.map +1 -0
- package/dist/app/assets/check-Fm2iQO64.js +2 -0
- package/dist/app/assets/check-Fm2iQO64.js.map +1 -0
- package/dist/app/assets/chevron-down-BIXHKpnf.js +2 -0
- package/dist/app/assets/chevron-down-BIXHKpnf.js.map +1 -0
- package/dist/app/assets/chunk-BHe-jwch.js +1 -0
- package/dist/app/assets/circle-check-X08qqy40.js +2 -0
- package/dist/app/assets/circle-check-X08qqy40.js.map +1 -0
- package/dist/app/assets/copy-KD-LYJ0z.js +2 -0
- package/dist/app/assets/copy-KD-LYJ0z.js.map +1 -0
- package/dist/app/assets/crop-K1LOmRty.js +2 -0
- package/dist/app/assets/crop-K1LOmRty.js.map +1 -0
- package/dist/app/assets/designPartnerRequest-DYqMElJd.js +2 -0
- package/dist/app/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
- package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
- package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
- package/dist/app/assets/download-BXzoc-Y3.js +2 -0
- package/dist/app/assets/download-BXzoc-Y3.js.map +1 -0
- package/dist/app/assets/eye-CHvLhG2r.js +2 -0
- package/dist/app/assets/eye-CHvLhG2r.js.map +1 -0
- package/dist/app/assets/file-text-CU-ETLz1.js +2 -0
- package/dist/app/assets/file-text-CU-ETLz1.js.map +1 -0
- package/dist/app/assets/folder-tree-raVH0Y5V.js +2 -0
- package/dist/app/assets/folder-tree-raVH0Y5V.js.map +1 -0
- package/dist/app/assets/grid-3x3-cWuhGQfz.js +2 -0
- package/dist/app/assets/grid-3x3-cWuhGQfz.js.map +1 -0
- package/dist/app/assets/hardeningOffer-tkjlPDU-.js +2 -0
- package/dist/app/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
- package/dist/app/assets/hero/agent-starter-workflow.png +0 -0
- package/dist/app/assets/hero/agent-starter-workflow.webp +0 -0
- package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
- package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
- package/dist/app/assets/index-BW_YmKvl.css +2 -0
- package/dist/app/assets/index-D7D6ZRCW.js +212 -0
- package/dist/app/assets/index-D7D6ZRCW.js.map +1 -0
- package/dist/app/assets/jszip.min-XyfP2hUJ.js +3 -0
- package/dist/app/assets/jszip.min-XyfP2hUJ.js.map +1 -0
- package/dist/app/assets/layout-grid-Cq_e979G.js +2 -0
- package/dist/app/assets/layout-grid-Cq_e979G.js.map +1 -0
- package/dist/app/assets/lock-Di7P18Ts.js +2 -0
- package/dist/app/assets/lock-Di7P18Ts.js.map +1 -0
- package/dist/{assets/roboto-cyrillic-400-normal-DZJji7Rx.woff → app/assets/roboto-cyrillic-400-normal-Bjg-1-sg.woff} +0 -0
- package/dist/app/assets/roboto-cyrillic-400-normal-CBPI_iaY.woff2 +0 -0
- package/dist/{assets/roboto-cyrillic-500-normal-BI4HuXre.woff → app/assets/roboto-cyrillic-500-normal-CBKMylY4.woff} +0 -0
- package/dist/app/assets/roboto-cyrillic-500-normal-CLao9AfR.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-700-normal-C2o7G-SM.woff2 +0 -0
- package/dist/{assets/roboto-cyrillic-700-normal-KqaQ5bNp.woff → app/assets/roboto-cyrillic-700-normal-DhZFXDSN.woff} +0 -0
- package/dist/{assets/roboto-cyrillic-ext-400-normal-DtZHuW6i.woff → app/assets/roboto-cyrillic-ext-400-normal-CaK1767H.woff} +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-400-normal-qHufge6k.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-500-normal-BWC_xYeb.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-500-normal-DqF2hftb.woff +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-700-normal-CI7FH63F.woff +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-700-normal-DmFxo5wj.woff2 +0 -0
- package/dist/{assets/roboto-greek-400-normal-CcizSnRP.woff → app/assets/roboto-greek-400-normal-Bb5mj_fZ.woff} +0 -0
- package/dist/app/assets/roboto-greek-400-normal-ai2Z1K3C.woff2 +0 -0
- package/dist/app/assets/roboto-greek-500-normal-C9AnhcmC.woff2 +0 -0
- package/dist/{assets/roboto-greek-500-normal-BLLWU9W-.woff → app/assets/roboto-greek-500-normal-oCqhoyfc.woff} +0 -0
- package/dist/app/assets/roboto-greek-700-normal-0aHWxGLu.woff2 +0 -0
- package/dist/app/assets/{roboto-greek-700-normal-D3kmAf0K.woff → roboto-greek-700-normal-DjRqqLBV.woff} +0 -0
- package/dist/app/assets/roboto-latin-400-normal-BqEyEoaF.woff2 +0 -0
- package/dist/app/assets/{roboto-latin-400-normal-068yxgMN.woff → roboto-latin-400-normal-DyYNIH4P.woff} +0 -0
- package/dist/app/assets/roboto-latin-500-normal-7RbcRiD8.woff2 +0 -0
- package/dist/app/assets/roboto-latin-500-normal-DQZyH_nt.woff +0 -0
- package/dist/app/assets/roboto-latin-700-normal-BZpUvMxY.woff2 +0 -0
- package/dist/app/assets/roboto-latin-700-normal-DLgJJpmK.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-400-normal-C3tdtHj3.woff2 +0 -0
- package/dist/app/assets/roboto-latin-ext-400-normal-scX0fKtV.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-500-normal-Cyc0AKLz.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-500-normal-pMCM9Ixg.woff2 +0 -0
- package/dist/app/assets/roboto-latin-ext-700-normal-BUhwtWwy.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-700-normal-DSBUz0N1.woff2 +0 -0
- package/dist/app/assets/roboto-math-400-normal-BEFej5gc.woff2 +0 -0
- package/dist/app/assets/{roboto-math-400-normal-rzxYvyVt.woff → roboto-math-400-normal-C9RxBKAh.woff} +0 -0
- package/dist/{assets/roboto-math-500-normal-DaFX-ZC8.woff → app/assets/roboto-math-500-normal-C-7mKPO3.woff} +0 -0
- package/dist/app/assets/roboto-math-500-normal-C4NU9gLX.woff2 +0 -0
- package/dist/app/assets/roboto-math-700-normal-B8YqGHVc.woff2 +0 -0
- package/dist/app/assets/roboto-math-700-normal-DVoD5t2k.woff +0 -0
- package/dist/app/assets/roboto-symbols-400-normal-CB1Ce4Gk.woff2 +0 -0
- package/dist/app/assets/roboto-symbols-400-normal-DLYbZahX.woff +0 -0
- package/dist/app/assets/roboto-symbols-500-normal-B_CZKVJS.woff2 +0 -0
- package/dist/app/assets/roboto-symbols-500-normal-F7c8nfcH.woff +0 -0
- package/dist/app/assets/roboto-symbols-700-normal-BiFDindJ.woff2 +0 -0
- package/dist/app/assets/roboto-symbols-700-normal-BoS6HWkc.woff +0 -0
- package/dist/app/assets/roboto-vietnamese-400-normal-D2PTxGxD.woff2 +0 -0
- package/dist/{assets/roboto-vietnamese-400-normal-DmXaN3yE.woff → app/assets/roboto-vietnamese-400-normal-DnpnVwnf.woff} +0 -0
- package/dist/app/assets/roboto-vietnamese-500-normal-B3ncpOoB.woff2 +0 -0
- package/dist/{assets/roboto-vietnamese-500-normal-DW96CsrR.woff → app/assets/roboto-vietnamese-500-normal-D380IkQ8.woff} +0 -0
- package/dist/app/assets/roboto-vietnamese-700-normal-BEVeWqJt.woff2 +0 -0
- package/dist/{assets/roboto-vietnamese-700-normal-Dz0HwF-w.woff → app/assets/roboto-vietnamese-700-normal-DsFyXAL4.woff} +0 -0
- package/dist/app/assets/rocket-DHdrCHKD.js +2 -0
- package/dist/app/assets/rocket-DHdrCHKD.js.map +1 -0
- package/dist/app/assets/shield-check-CxpHNdp0.js +2 -0
- package/dist/app/assets/shield-check-CxpHNdp0.js.map +1 -0
- package/dist/app/assets/smartphone-DXKiqu57.js +2 -0
- package/dist/app/assets/smartphone-DXKiqu57.js.map +1 -0
- package/dist/app/assets/stripeClient-CuZgvzca.js +2 -0
- package/dist/app/assets/stripeClient-CuZgvzca.js.map +1 -0
- package/dist/app/assets/terminal-J0iyJTv2.js +2 -0
- package/dist/app/assets/terminal-J0iyJTv2.js.map +1 -0
- package/dist/app/assets/triangle-alert-BA0HP6zD.js +2 -0
- package/dist/app/assets/triangle-alert-BA0HP6zD.js.map +1 -0
- package/dist/app/assets/useAuth-CoS4r8yi.js +22 -0
- package/dist/app/assets/useAuth-CoS4r8yi.js.map +1 -0
- package/dist/app/assets/users-C-fz7pbn.js +2 -0
- package/dist/app/assets/users-C-fz7pbn.js.map +1 -0
- package/dist/app/index.html +9 -8
- package/dist/assets/AgentCli-nIqgOG-i.js +17 -0
- package/dist/assets/AgentCli-nIqgOG-i.js.map +1 -0
- package/dist/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
- package/dist/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
- package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
- package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
- package/dist/assets/App-BRKxkubQ.css +1 -0
- package/dist/assets/App-CZiyX8-L.js +14 -0
- package/dist/assets/App-CZiyX8-L.js.map +1 -0
- package/dist/assets/AppReviewAso-DYOCuqgV.js +4 -0
- package/dist/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
- package/dist/assets/Cancelled-CP6V6uDb.js +2 -0
- package/dist/assets/Cancelled-CP6V6uDb.js.map +1 -0
- package/dist/assets/CopyButton-BFCx6EPg.js +2 -0
- package/dist/assets/CopyButton-BFCx6EPg.js.map +1 -0
- package/dist/assets/DesignPartner-B4J7f0Bx.js +4 -0
- package/dist/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
- package/dist/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
- package/dist/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
- package/dist/assets/FirstExport-qfY7uE8r.js +6 -0
- package/dist/assets/FirstExport-qfY7uE8r.js.map +1 -0
- package/dist/assets/FitPanel-B1J0V1jK.js +2 -0
- package/dist/assets/FitPanel-B1J0V1jK.js.map +1 -0
- package/dist/assets/FivePanelFramework-C4yq58kM.js +62 -0
- package/dist/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
- package/dist/assets/ForgotPassword-KF_HFGyb.js +2 -0
- package/dist/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
- package/dist/assets/Landing-B_CvZDXJ.js +2 -0
- package/dist/assets/Landing-B_CvZDXJ.js.map +1 -0
- package/dist/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
- package/dist/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
- package/dist/assets/Legal-BwGbEjDk.js +2 -0
- package/dist/assets/Legal-BwGbEjDk.js.map +1 -0
- package/dist/assets/NotFound-Ba1Bw7uu.js +2 -0
- package/dist/assets/NotFound-Ba1Bw7uu.js.map +1 -0
- package/dist/assets/Pricing-Dt-V4Gqc.js +20 -0
- package/dist/assets/Pricing-Dt-V4Gqc.js.map +1 -0
- package/dist/assets/Privacy-C6MrXYPO.js +2 -0
- package/dist/assets/Privacy-C6MrXYPO.js.map +1 -0
- package/dist/assets/Proof-C3DDFAhm.js +20 -0
- package/dist/assets/Proof-C3DDFAhm.js.map +1 -0
- package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
- package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
- package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
- package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
- package/dist/assets/Security-C1OmAgom.js +2 -0
- package/dist/assets/Security-C1OmAgom.js.map +1 -0
- package/dist/assets/SignIn-C_wwnmvu.js +2 -0
- package/dist/assets/SignIn-C_wwnmvu.js.map +1 -0
- package/dist/assets/SignUp-Dm5HalC6.js +2 -0
- package/dist/assets/SignUp-Dm5HalC6.js.map +1 -0
- package/dist/assets/SiteHeader-CJqQ0pL3.js +2 -0
- package/dist/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
- package/dist/assets/StickyMobileCta-REC3DROG.js +2 -0
- package/dist/assets/StickyMobileCta-REC3DROG.js.map +1 -0
- package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
- package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
- package/dist/assets/Success-D6b4wLPD.js +2 -0
- package/dist/assets/Success-D6b4wLPD.js.map +1 -0
- package/dist/assets/Terms-BMt39FQK.js +2 -0
- package/dist/assets/Terms-BMt39FQK.js.map +1 -0
- package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
- package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
- package/dist/assets/ToolsIndex-d1szo5bn.js +6 -0
- package/dist/assets/ToolsIndex-d1szo5bn.js.map +1 -0
- package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
- package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
- package/dist/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
- package/dist/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
- package/dist/assets/agentHandoff-BGmHqDwv.js +2 -0
- package/dist/assets/agentHandoff-BGmHqDwv.js.map +1 -0
- package/dist/assets/apiClient-3WVm94VW.js +2 -0
- package/dist/assets/apiClient-3WVm94VW.js.map +1 -0
- package/dist/assets/calculator-CofuwQa8.js +2 -0
- package/dist/assets/calculator-CofuwQa8.js.map +1 -0
- package/dist/assets/check-Fm2iQO64.js +2 -0
- package/dist/assets/check-Fm2iQO64.js.map +1 -0
- package/dist/assets/chevron-down-BIXHKpnf.js +2 -0
- package/dist/assets/chevron-down-BIXHKpnf.js.map +1 -0
- package/dist/assets/chunk-BHe-jwch.js +1 -0
- package/dist/assets/circle-check-X08qqy40.js +2 -0
- package/dist/assets/circle-check-X08qqy40.js.map +1 -0
- package/dist/assets/copy-KD-LYJ0z.js +2 -0
- package/dist/assets/copy-KD-LYJ0z.js.map +1 -0
- package/dist/assets/crop-K1LOmRty.js +2 -0
- package/dist/assets/crop-K1LOmRty.js.map +1 -0
- package/dist/assets/designPartnerRequest-DYqMElJd.js +2 -0
- package/dist/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
- package/dist/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
- package/dist/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
- package/dist/assets/download-BXzoc-Y3.js +2 -0
- package/dist/assets/download-BXzoc-Y3.js.map +1 -0
- package/dist/assets/eye-CHvLhG2r.js +2 -0
- package/dist/assets/eye-CHvLhG2r.js.map +1 -0
- package/dist/assets/file-text-CU-ETLz1.js +2 -0
- package/dist/assets/file-text-CU-ETLz1.js.map +1 -0
- package/dist/assets/folder-tree-raVH0Y5V.js +2 -0
- package/dist/assets/folder-tree-raVH0Y5V.js.map +1 -0
- package/dist/assets/grid-3x3-cWuhGQfz.js +2 -0
- package/dist/assets/grid-3x3-cWuhGQfz.js.map +1 -0
- package/dist/assets/hardeningOffer-tkjlPDU-.js +2 -0
- package/dist/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
- package/dist/assets/hero/agent-starter-workflow.png +0 -0
- package/dist/assets/hero/agent-starter-workflow.webp +0 -0
- package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
- package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
- package/dist/assets/index-BW_YmKvl.css +2 -0
- package/dist/assets/index-D7D6ZRCW.js +212 -0
- package/dist/assets/index-D7D6ZRCW.js.map +1 -0
- package/dist/assets/jszip.min-XyfP2hUJ.js +3 -0
- package/dist/assets/jszip.min-XyfP2hUJ.js.map +1 -0
- package/dist/assets/layout-grid-Cq_e979G.js +2 -0
- package/dist/assets/layout-grid-Cq_e979G.js.map +1 -0
- package/dist/assets/lock-Di7P18Ts.js +2 -0
- package/dist/assets/lock-Di7P18Ts.js.map +1 -0
- package/dist/{app/assets/roboto-cyrillic-400-normal-DZJji7Rx.woff → assets/roboto-cyrillic-400-normal-Bjg-1-sg.woff} +0 -0
- package/dist/assets/roboto-cyrillic-400-normal-CBPI_iaY.woff2 +0 -0
- package/dist/{app/assets/roboto-cyrillic-500-normal-BI4HuXre.woff → assets/roboto-cyrillic-500-normal-CBKMylY4.woff} +0 -0
- package/dist/assets/roboto-cyrillic-500-normal-CLao9AfR.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-700-normal-C2o7G-SM.woff2 +0 -0
- package/dist/{app/assets/roboto-cyrillic-700-normal-KqaQ5bNp.woff → assets/roboto-cyrillic-700-normal-DhZFXDSN.woff} +0 -0
- package/dist/{app/assets/roboto-cyrillic-ext-400-normal-DtZHuW6i.woff → assets/roboto-cyrillic-ext-400-normal-CaK1767H.woff} +0 -0
- package/dist/assets/roboto-cyrillic-ext-400-normal-qHufge6k.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-BWC_xYeb.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-DqF2hftb.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-CI7FH63F.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-DmFxo5wj.woff2 +0 -0
- package/dist/{app/assets/roboto-greek-400-normal-CcizSnRP.woff → assets/roboto-greek-400-normal-Bb5mj_fZ.woff} +0 -0
- package/dist/assets/roboto-greek-400-normal-ai2Z1K3C.woff2 +0 -0
- package/dist/assets/roboto-greek-500-normal-C9AnhcmC.woff2 +0 -0
- package/dist/{app/assets/roboto-greek-500-normal-BLLWU9W-.woff → assets/roboto-greek-500-normal-oCqhoyfc.woff} +0 -0
- package/dist/assets/roboto-greek-700-normal-0aHWxGLu.woff2 +0 -0
- package/dist/assets/{roboto-greek-700-normal-D3kmAf0K.woff → roboto-greek-700-normal-DjRqqLBV.woff} +0 -0
- package/dist/assets/roboto-latin-400-normal-BqEyEoaF.woff2 +0 -0
- package/dist/assets/{roboto-latin-400-normal-068yxgMN.woff → roboto-latin-400-normal-DyYNIH4P.woff} +0 -0
- package/dist/assets/roboto-latin-500-normal-7RbcRiD8.woff2 +0 -0
- package/dist/assets/roboto-latin-500-normal-DQZyH_nt.woff +0 -0
- package/dist/assets/roboto-latin-700-normal-BZpUvMxY.woff2 +0 -0
- package/dist/assets/roboto-latin-700-normal-DLgJJpmK.woff +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-C3tdtHj3.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-scX0fKtV.woff +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-Cyc0AKLz.woff +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-pMCM9Ixg.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-BUhwtWwy.woff +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-DSBUz0N1.woff2 +0 -0
- package/dist/assets/roboto-math-400-normal-BEFej5gc.woff2 +0 -0
- package/dist/assets/{roboto-math-400-normal-rzxYvyVt.woff → roboto-math-400-normal-C9RxBKAh.woff} +0 -0
- package/dist/{app/assets/roboto-math-500-normal-DaFX-ZC8.woff → assets/roboto-math-500-normal-C-7mKPO3.woff} +0 -0
- package/dist/assets/roboto-math-500-normal-C4NU9gLX.woff2 +0 -0
- package/dist/assets/roboto-math-700-normal-B8YqGHVc.woff2 +0 -0
- package/dist/assets/roboto-math-700-normal-DVoD5t2k.woff +0 -0
- package/dist/assets/roboto-symbols-400-normal-CB1Ce4Gk.woff2 +0 -0
- package/dist/assets/roboto-symbols-400-normal-DLYbZahX.woff +0 -0
- package/dist/assets/roboto-symbols-500-normal-B_CZKVJS.woff2 +0 -0
- package/dist/assets/roboto-symbols-500-normal-F7c8nfcH.woff +0 -0
- package/dist/assets/roboto-symbols-700-normal-BiFDindJ.woff2 +0 -0
- package/dist/assets/roboto-symbols-700-normal-BoS6HWkc.woff +0 -0
- package/dist/assets/roboto-vietnamese-400-normal-D2PTxGxD.woff2 +0 -0
- package/dist/{app/assets/roboto-vietnamese-400-normal-DmXaN3yE.woff → assets/roboto-vietnamese-400-normal-DnpnVwnf.woff} +0 -0
- package/dist/assets/roboto-vietnamese-500-normal-B3ncpOoB.woff2 +0 -0
- package/dist/{app/assets/roboto-vietnamese-500-normal-DW96CsrR.woff → assets/roboto-vietnamese-500-normal-D380IkQ8.woff} +0 -0
- package/dist/assets/roboto-vietnamese-700-normal-BEVeWqJt.woff2 +0 -0
- package/dist/{app/assets/roboto-vietnamese-700-normal-Dz0HwF-w.woff → assets/roboto-vietnamese-700-normal-DsFyXAL4.woff} +0 -0
- package/dist/assets/rocket-DHdrCHKD.js +2 -0
- package/dist/assets/rocket-DHdrCHKD.js.map +1 -0
- package/dist/assets/shield-check-CxpHNdp0.js +2 -0
- package/dist/assets/shield-check-CxpHNdp0.js.map +1 -0
- package/dist/assets/smartphone-DXKiqu57.js +2 -0
- package/dist/assets/smartphone-DXKiqu57.js.map +1 -0
- package/dist/assets/stripeClient-CuZgvzca.js +2 -0
- package/dist/assets/stripeClient-CuZgvzca.js.map +1 -0
- package/dist/assets/terminal-J0iyJTv2.js +2 -0
- package/dist/assets/terminal-J0iyJTv2.js.map +1 -0
- package/dist/assets/triangle-alert-BA0HP6zD.js +2 -0
- package/dist/assets/triangle-alert-BA0HP6zD.js.map +1 -0
- package/dist/assets/useAuth-CoS4r8yi.js +22 -0
- package/dist/assets/useAuth-CoS4r8yi.js.map +1 -0
- package/dist/assets/users-C-fz7pbn.js +2 -0
- package/dist/assets/users-C-fz7pbn.js.map +1 -0
- package/dist/cancelled/index.html +3 -2
- package/dist/design-partner/index.html +38 -0
- package/dist/downloads/shipscreens-aso-variant-matrix-template.csv +4 -0
- package/dist/downloads/shipscreens-bitrise-template.yml +60 -0
- package/dist/downloads/shipscreens-claude-code-mcp.json +8 -0
- package/dist/downloads/shipscreens-cursor-mcp.json +8 -0
- package/dist/downloads/shipscreens-gemini-mcp-settings.json +8 -0
- package/dist/downloads/shipscreens-github-actions-template.yml +62 -0
- package/dist/downloads/shipscreens-japan-case-snapshots-2026-02.md +37 -0
- package/dist/downloads/shipscreens-localization-ci-checklist-2026-02.md +46 -0
- package/dist/downloads/shipscreens-localization-handoff-template.csv +3 -0
- package/dist/downloads/shipscreens-proof-packet-2026-02.md +59 -0
- package/dist/downloads/shipscreens-top20-category-headline-pack-2026-02.csv +41 -0
- package/dist/downloads/shipscreens-top20-category-headline-pack-2026-02.md +18 -0
- package/dist/downloads/shipscreens-vscode-mcp.json +9 -0
- package/dist/forgot-password/index.html +3 -2
- package/dist/index.html +9 -8
- package/dist/legal/index.html +3 -2
- package/dist/llms-full.txt +191 -20
- package/dist/llms.txt +99 -11
- package/dist/mcp-server.json +4 -4
- package/dist/pricing/index.html +6 -5
- package/dist/privacy/index.html +3 -2
- package/dist/proof/index.html +38 -0
- package/dist/security/index.html +38 -0
- package/dist/signin/index.html +3 -2
- package/dist/signup/index.html +3 -2
- package/dist/sitemap.xml +80 -0
- package/dist/success/index.html +3 -2
- package/dist/terms/index.html +3 -2
- package/dist/tools/5-panel-screenshot-framework/index.html +6 -5
- package/dist/tools/agent-cli/index.html +8 -7
- package/dist/tools/app-review-aso/index.html +6 -5
- package/dist/tools/app-store-localization-screenshot-automation/index.html +40 -0
- package/dist/tools/app-store-screenshot-automation/index.html +40 -0
- package/dist/tools/app-store-screenshot-requirements-checklist/index.html +40 -0
- package/dist/tools/claude-code-mcp-screenshot-automation/index.html +40 -0
- package/dist/tools/cursor-mcp-screenshot-automation/index.html +40 -0
- package/dist/tools/deterministic-screenshot-reruns/index.html +40 -0
- package/dist/tools/device-locale-screenshot-matrix/index.html +40 -0
- package/dist/tools/fastlane-screenshot-folder-structure/index.html +40 -0
- package/dist/tools/fastlane-screenshot-pipeline/index.html +40 -0
- package/dist/tools/fastlane-screenshots/index.html +6 -5
- package/dist/tools/first-export/index.html +6 -5
- package/dist/tools/gemini-cli-mcp-screenshot-automation/index.html +40 -0
- package/dist/tools/google-play-screenshot-automation/index.html +40 -0
- package/dist/tools/google-play-screenshot-requirements-checklist/index.html +40 -0
- package/dist/tools/index.html +6 -5
- package/dist/tools/ipad-screenshot-review-requirements/index.html +40 -0
- package/dist/tools/openai-responses-tool-screenshot-automation/index.html +40 -0
- package/dist/tools/screenshot-ci-pipeline/index.html +40 -0
- package/dist/tools/screenshot-naming-order-drift/index.html +40 -0
- package/dist/tools/screenshot-workload-calculator/index.html +6 -5
- package/dist/tools/store-assets-pipeline/index.html +3 -2
- package/dist/tools/vscode-copilot-mcp-screenshot-automation/index.html +40 -0
- package/package.json +10 -7
- package/dist/app/assets/AgentCli-DNTDYBbk.js +0 -17
- package/dist/app/assets/AgentCli-DNTDYBbk.js.map +0 -1
- package/dist/app/assets/App-BwQ1zI7a.css +0 -1
- package/dist/app/assets/App-DPi9LW-y.js +0 -13
- package/dist/app/assets/App-DPi9LW-y.js.map +0 -1
- package/dist/app/assets/AppReviewAso-BUTGLatx.js +0 -4
- package/dist/app/assets/AppReviewAso-BUTGLatx.js.map +0 -1
- package/dist/app/assets/Cancelled-BeS-WlPj.js +0 -2
- package/dist/app/assets/Cancelled-BeS-WlPj.js.map +0 -1
- package/dist/app/assets/CopyButton-BZQEBHBq.js +0 -2
- package/dist/app/assets/CopyButton-BZQEBHBq.js.map +0 -1
- package/dist/app/assets/FastlaneScreenshots-Dn7jfpuz.js +0 -52
- package/dist/app/assets/FastlaneScreenshots-Dn7jfpuz.js.map +0 -1
- package/dist/app/assets/FirstExport-CzioMqbJ.js +0 -6
- package/dist/app/assets/FirstExport-CzioMqbJ.js.map +0 -1
- package/dist/app/assets/FitPanel-DzYzTMEi.js +0 -2
- package/dist/app/assets/FitPanel-DzYzTMEi.js.map +0 -1
- package/dist/app/assets/FivePanelFramework-Bt5-NjCV.js +0 -62
- package/dist/app/assets/FivePanelFramework-Bt5-NjCV.js.map +0 -1
- package/dist/app/assets/ForgotPassword-DuHNHuUe.js +0 -2
- package/dist/app/assets/ForgotPassword-DuHNHuUe.js.map +0 -1
- package/dist/app/assets/Landing-DB9pTPoT.js +0 -2
- package/dist/app/assets/Landing-DB9pTPoT.js.map +0 -1
- package/dist/app/assets/LanguageSwitcher-CfUhVVuT.js +0 -2
- package/dist/app/assets/LanguageSwitcher-CfUhVVuT.js.map +0 -1
- package/dist/app/assets/Legal-p-YIX5Jv.js +0 -2
- package/dist/app/assets/Legal-p-YIX5Jv.js.map +0 -1
- package/dist/app/assets/NotFound-XohZYy7w.js +0 -2
- package/dist/app/assets/NotFound-XohZYy7w.js.map +0 -1
- package/dist/app/assets/Pricing-CxCutpT0.js +0 -2
- package/dist/app/assets/Pricing-CxCutpT0.js.map +0 -1
- package/dist/app/assets/Privacy-D8m3h6P-.js +0 -2
- package/dist/app/assets/Privacy-D8m3h6P-.js.map +0 -1
- package/dist/app/assets/SignIn-CINUig91.js +0 -2
- package/dist/app/assets/SignIn-CINUig91.js.map +0 -1
- package/dist/app/assets/SignUp-B1H6dQgE.js +0 -2
- package/dist/app/assets/SignUp-B1H6dQgE.js.map +0 -1
- package/dist/app/assets/SiteHeader-BGQW06JF.js +0 -2
- package/dist/app/assets/SiteHeader-BGQW06JF.js.map +0 -1
- package/dist/app/assets/StickyMobileCta-C41cW-Ji.js +0 -2
- package/dist/app/assets/StickyMobileCta-C41cW-Ji.js.map +0 -1
- package/dist/app/assets/StoreAssetsPipeline-bUVDqZAU.js +0 -6
- package/dist/app/assets/StoreAssetsPipeline-bUVDqZAU.js.map +0 -1
- package/dist/app/assets/Success-CMpdlLi2.js +0 -2
- package/dist/app/assets/Success-CMpdlLi2.js.map +0 -1
- package/dist/app/assets/Terms-C8NcE4sw.js +0 -2
- package/dist/app/assets/Terms-C8NcE4sw.js.map +0 -1
- package/dist/app/assets/ToolGuardrailsPanel-DbjLhdX8.js +0 -2
- package/dist/app/assets/ToolGuardrailsPanel-DbjLhdX8.js.map +0 -1
- package/dist/app/assets/ToolsIndex-BuZSvoBC.js +0 -6
- package/dist/app/assets/ToolsIndex-BuZSvoBC.js.map +0 -1
- package/dist/app/assets/WorkloadCalculator-CjdG5TVq.js +0 -5
- package/dist/app/assets/WorkloadCalculator-CjdG5TVq.js.map +0 -1
- package/dist/app/assets/calculator-_D64kDDH.js +0 -2
- package/dist/app/assets/calculator-_D64kDDH.js.map +0 -1
- package/dist/app/assets/check-BaiZ7vYg.js +0 -2
- package/dist/app/assets/check-BaiZ7vYg.js.map +0 -1
- package/dist/app/assets/chevron-down-DVRa-y8D.js +0 -2
- package/dist/app/assets/chevron-down-DVRa-y8D.js.map +0 -1
- package/dist/app/assets/circle-check-reAyVfkP.js +0 -2
- package/dist/app/assets/circle-check-reAyVfkP.js.map +0 -1
- package/dist/app/assets/clipboard-copy-BfB1mutp.js +0 -2
- package/dist/app/assets/clipboard-copy-BfB1mutp.js.map +0 -1
- package/dist/app/assets/copy-B9y2mtjd.js +0 -2
- package/dist/app/assets/copy-B9y2mtjd.js.map +0 -1
- package/dist/app/assets/crop-2_j5MtOq.js +0 -2
- package/dist/app/assets/crop-2_j5MtOq.js.map +0 -1
- package/dist/app/assets/download-CqEtEEpe.js +0 -2
- package/dist/app/assets/download-CqEtEEpe.js.map +0 -1
- package/dist/app/assets/eye-B1LPDhW7.js +0 -2
- package/dist/app/assets/eye-B1LPDhW7.js.map +0 -1
- package/dist/app/assets/folder-tree-CnF1eSpg.js +0 -2
- package/dist/app/assets/folder-tree-CnF1eSpg.js.map +0 -1
- package/dist/app/assets/grid-3x3-BB0TBwXQ.js +0 -2
- package/dist/app/assets/grid-3x3-BB0TBwXQ.js.map +0 -1
- package/dist/app/assets/index-Bffw9flM.js +0 -180
- package/dist/app/assets/index-Bffw9flM.js.map +0 -1
- package/dist/app/assets/index-CQecHUcy.css +0 -1
- package/dist/app/assets/layout-grid-DbSzm5KY.js +0 -2
- package/dist/app/assets/layout-grid-DbSzm5KY.js.map +0 -1
- package/dist/app/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-700-normal-BiSG5NnW.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-500-normal-C927yMrb.woff +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-700-normal-BuQgZIrO.woff +0 -0
- package/dist/app/assets/roboto-cyrillic-ext-700-normal-UFn0vR9r.woff2 +0 -0
- package/dist/app/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
- package/dist/app/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
- package/dist/app/assets/roboto-greek-700-normal-BcGn9doz.woff2 +0 -0
- package/dist/app/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
- package/dist/app/assets/roboto-latin-500-normal-CC5nhZkh.woff +0 -0
- package/dist/app/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
- package/dist/app/assets/roboto-latin-700-normal-CXeAXeti.woff2 +0 -0
- package/dist/app/assets/roboto-latin-700-normal-DUekQERp.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
- package/dist/app/assets/roboto-latin-ext-400-normal-eTRLN0Nt.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
- package/dist/app/assets/roboto-latin-ext-500-normal-FFcS8vBN.woff +0 -0
- package/dist/app/assets/roboto-latin-ext-700-normal-70GS1MYH.woff2 +0 -0
- package/dist/app/assets/roboto-latin-ext-700-normal-BS1OuQqR.woff +0 -0
- package/dist/app/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
- package/dist/app/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
- package/dist/app/assets/roboto-math-700-normal-VUAI6Bz2.woff2 +0 -0
- package/dist/app/assets/roboto-math-700-normal-pYD1nhov.woff +0 -0
- package/dist/app/assets/roboto-symbols-400-normal-Tzuungub.woff +0 -0
- package/dist/app/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
- package/dist/app/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
- package/dist/app/assets/roboto-symbols-500-normal-CAhAe-ik.woff +0 -0
- package/dist/app/assets/roboto-symbols-700-normal-CuuvBBxy.woff +0 -0
- package/dist/app/assets/roboto-symbols-700-normal-rJi6RjIy.woff2 +0 -0
- package/dist/app/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
- package/dist/app/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
- package/dist/app/assets/roboto-vietnamese-700-normal-iKxYNAzq.woff2 +0 -0
- package/dist/app/assets/rocket-d1Ntm8ge.js +0 -2
- package/dist/app/assets/rocket-d1Ntm8ge.js.map +0 -1
- package/dist/app/assets/shield-check-DXqKmrPT.js +0 -2
- package/dist/app/assets/shield-check-DXqKmrPT.js.map +0 -1
- package/dist/app/assets/signIn-D-eCUhFT.js +0 -2
- package/dist/app/assets/signIn-D-eCUhFT.js.map +0 -1
- package/dist/app/assets/smartphone-Cjrk_YxV.js +0 -2
- package/dist/app/assets/smartphone-Cjrk_YxV.js.map +0 -1
- package/dist/app/assets/terminal-CT_KE008.js +0 -2
- package/dist/app/assets/terminal-CT_KE008.js.map +0 -1
- package/dist/app/assets/useAuth-ctmUbyCR.js +0 -4
- package/dist/app/assets/useAuth-ctmUbyCR.js.map +0 -1
- package/dist/assets/AgentCli-DNTDYBbk.js +0 -17
- package/dist/assets/AgentCli-DNTDYBbk.js.map +0 -1
- package/dist/assets/App-BwQ1zI7a.css +0 -1
- package/dist/assets/App-DPi9LW-y.js +0 -13
- package/dist/assets/App-DPi9LW-y.js.map +0 -1
- package/dist/assets/AppReviewAso-BUTGLatx.js +0 -4
- package/dist/assets/AppReviewAso-BUTGLatx.js.map +0 -1
- package/dist/assets/Cancelled-BeS-WlPj.js +0 -2
- package/dist/assets/Cancelled-BeS-WlPj.js.map +0 -1
- package/dist/assets/CopyButton-BZQEBHBq.js +0 -2
- package/dist/assets/CopyButton-BZQEBHBq.js.map +0 -1
- package/dist/assets/FastlaneScreenshots-Dn7jfpuz.js +0 -52
- package/dist/assets/FastlaneScreenshots-Dn7jfpuz.js.map +0 -1
- package/dist/assets/FirstExport-CzioMqbJ.js +0 -6
- package/dist/assets/FirstExport-CzioMqbJ.js.map +0 -1
- package/dist/assets/FitPanel-DzYzTMEi.js +0 -2
- package/dist/assets/FitPanel-DzYzTMEi.js.map +0 -1
- package/dist/assets/FivePanelFramework-Bt5-NjCV.js +0 -62
- package/dist/assets/FivePanelFramework-Bt5-NjCV.js.map +0 -1
- package/dist/assets/ForgotPassword-DuHNHuUe.js +0 -2
- package/dist/assets/ForgotPassword-DuHNHuUe.js.map +0 -1
- package/dist/assets/Landing-DB9pTPoT.js +0 -2
- package/dist/assets/Landing-DB9pTPoT.js.map +0 -1
- package/dist/assets/LanguageSwitcher-CfUhVVuT.js +0 -2
- package/dist/assets/LanguageSwitcher-CfUhVVuT.js.map +0 -1
- package/dist/assets/Legal-p-YIX5Jv.js +0 -2
- package/dist/assets/Legal-p-YIX5Jv.js.map +0 -1
- package/dist/assets/NotFound-XohZYy7w.js +0 -2
- package/dist/assets/NotFound-XohZYy7w.js.map +0 -1
- package/dist/assets/Pricing-CxCutpT0.js +0 -2
- package/dist/assets/Pricing-CxCutpT0.js.map +0 -1
- package/dist/assets/Privacy-D8m3h6P-.js +0 -2
- package/dist/assets/Privacy-D8m3h6P-.js.map +0 -1
- package/dist/assets/SignIn-CINUig91.js +0 -2
- package/dist/assets/SignIn-CINUig91.js.map +0 -1
- package/dist/assets/SignUp-B1H6dQgE.js +0 -2
- package/dist/assets/SignUp-B1H6dQgE.js.map +0 -1
- package/dist/assets/SiteHeader-BGQW06JF.js +0 -2
- package/dist/assets/SiteHeader-BGQW06JF.js.map +0 -1
- package/dist/assets/StickyMobileCta-C41cW-Ji.js +0 -2
- package/dist/assets/StickyMobileCta-C41cW-Ji.js.map +0 -1
- package/dist/assets/StoreAssetsPipeline-bUVDqZAU.js +0 -6
- package/dist/assets/StoreAssetsPipeline-bUVDqZAU.js.map +0 -1
- package/dist/assets/Success-CMpdlLi2.js +0 -2
- package/dist/assets/Success-CMpdlLi2.js.map +0 -1
- package/dist/assets/Terms-C8NcE4sw.js +0 -2
- package/dist/assets/Terms-C8NcE4sw.js.map +0 -1
- package/dist/assets/ToolGuardrailsPanel-DbjLhdX8.js +0 -2
- package/dist/assets/ToolGuardrailsPanel-DbjLhdX8.js.map +0 -1
- package/dist/assets/ToolsIndex-BuZSvoBC.js +0 -6
- package/dist/assets/ToolsIndex-BuZSvoBC.js.map +0 -1
- package/dist/assets/WorkloadCalculator-CjdG5TVq.js +0 -5
- package/dist/assets/WorkloadCalculator-CjdG5TVq.js.map +0 -1
- package/dist/assets/calculator-_D64kDDH.js +0 -2
- package/dist/assets/calculator-_D64kDDH.js.map +0 -1
- package/dist/assets/check-BaiZ7vYg.js +0 -2
- package/dist/assets/check-BaiZ7vYg.js.map +0 -1
- package/dist/assets/chevron-down-DVRa-y8D.js +0 -2
- package/dist/assets/chevron-down-DVRa-y8D.js.map +0 -1
- package/dist/assets/circle-check-reAyVfkP.js +0 -2
- package/dist/assets/circle-check-reAyVfkP.js.map +0 -1
- package/dist/assets/clipboard-copy-BfB1mutp.js +0 -2
- package/dist/assets/clipboard-copy-BfB1mutp.js.map +0 -1
- package/dist/assets/copy-B9y2mtjd.js +0 -2
- package/dist/assets/copy-B9y2mtjd.js.map +0 -1
- package/dist/assets/crop-2_j5MtOq.js +0 -2
- package/dist/assets/crop-2_j5MtOq.js.map +0 -1
- package/dist/assets/download-CqEtEEpe.js +0 -2
- package/dist/assets/download-CqEtEEpe.js.map +0 -1
- package/dist/assets/eye-B1LPDhW7.js +0 -2
- package/dist/assets/eye-B1LPDhW7.js.map +0 -1
- package/dist/assets/folder-tree-CnF1eSpg.js +0 -2
- package/dist/assets/folder-tree-CnF1eSpg.js.map +0 -1
- package/dist/assets/grid-3x3-BB0TBwXQ.js +0 -2
- package/dist/assets/grid-3x3-BB0TBwXQ.js.map +0 -1
- package/dist/assets/index-Bffw9flM.js +0 -180
- package/dist/assets/index-Bffw9flM.js.map +0 -1
- package/dist/assets/index-CQecHUcy.css +0 -1
- package/dist/assets/layout-grid-DbSzm5KY.js +0 -2
- package/dist/assets/layout-grid-DbSzm5KY.js.map +0 -1
- package/dist/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-700-normal-BiSG5NnW.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
- package/dist/assets/roboto-cyrillic-ext-500-normal-C927yMrb.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-BuQgZIrO.woff +0 -0
- package/dist/assets/roboto-cyrillic-ext-700-normal-UFn0vR9r.woff2 +0 -0
- package/dist/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
- package/dist/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
- package/dist/assets/roboto-greek-700-normal-BcGn9doz.woff2 +0 -0
- package/dist/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
- package/dist/assets/roboto-latin-500-normal-CC5nhZkh.woff +0 -0
- package/dist/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
- package/dist/assets/roboto-latin-700-normal-CXeAXeti.woff2 +0 -0
- package/dist/assets/roboto-latin-700-normal-DUekQERp.woff +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-400-normal-eTRLN0Nt.woff +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-500-normal-FFcS8vBN.woff +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-70GS1MYH.woff2 +0 -0
- package/dist/assets/roboto-latin-ext-700-normal-BS1OuQqR.woff +0 -0
- package/dist/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
- package/dist/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
- package/dist/assets/roboto-math-700-normal-VUAI6Bz2.woff2 +0 -0
- package/dist/assets/roboto-math-700-normal-pYD1nhov.woff +0 -0
- package/dist/assets/roboto-symbols-400-normal-Tzuungub.woff +0 -0
- package/dist/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
- package/dist/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
- package/dist/assets/roboto-symbols-500-normal-CAhAe-ik.woff +0 -0
- package/dist/assets/roboto-symbols-700-normal-CuuvBBxy.woff +0 -0
- package/dist/assets/roboto-symbols-700-normal-rJi6RjIy.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
- package/dist/assets/roboto-vietnamese-700-normal-iKxYNAzq.woff2 +0 -0
- package/dist/assets/rocket-d1Ntm8ge.js +0 -2
- package/dist/assets/rocket-d1Ntm8ge.js.map +0 -1
- package/dist/assets/shield-check-DXqKmrPT.js +0 -2
- package/dist/assets/shield-check-DXqKmrPT.js.map +0 -1
- package/dist/assets/signIn-D-eCUhFT.js +0 -2
- package/dist/assets/signIn-D-eCUhFT.js.map +0 -1
- package/dist/assets/smartphone-Cjrk_YxV.js +0 -2
- package/dist/assets/smartphone-Cjrk_YxV.js.map +0 -1
- package/dist/assets/terminal-CT_KE008.js +0 -2
- package/dist/assets/terminal-CT_KE008.js.map +0 -1
- package/dist/assets/useAuth-ctmUbyCR.js +0 -4
- package/dist/assets/useAuth-ctmUbyCR.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FirstExport-qfY7uE8r.js","names":[],"sources":["../../src/pages/FirstExport.jsx"],"sourcesContent":["import { ArrowRight, CheckCircle2, ChevronDown, ClipboardCopy, Rocket, Terminal } from 'lucide-react';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport AgentHandoffPanel from '../components/AgentHandoffPanel';\nimport AgentReportPreview from '../components/AgentReportPreview';\nimport CopyButton from '../components/CopyButton';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport FitPanel from '../components/FitPanel';\nimport ReleaseFitIntake from '../components/ReleaseFitIntake';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\nimport { getAttributionParams } from '../lib/attribution';\nimport { buildDesignPartnerHref } from '../lib/designPartnerPrefill';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: '5-minute first export',\n title: 'Turn your current screenshots into a deterministic first export in 5 minutes',\n subtitle:\n 'You may already have design tools or Fastlane scripts. This page does not replace them; it adds a deterministic first-export layer (fastlane/ + ZIP) with clear panel order, iPhone-first scope, and upload-safe roots. If you already use a coding agent, tell it to use ShipScreens and let it carry the same contract into CLI/MCP and CI.',\n quickPathTitle: 'Fastest path (agent-first if available)',\n quickPathBullets: [\n 'Start from the 5-panel sample project and reuse your current screenshots/copy.',\n 'Keep panel #1 to one concrete outcome for one user type.',\n 'Use zero-padded 01..05 naming and verify upload roots before scaling devices/locales.',\n 'If a coding agent is already in your workflow, hand this to the agent instead of rebuilding the release step yourself.',\n ],\n agentPromptTitle: 'Already using a coding agent?',\n agentPromptBody: 'Paste this instead of clicking through everything manually.',\n agentPrompt:\n 'Use ShipScreens to turn our current screenshots into a deterministic first export. Keep the existing design workflow, choose the best path for this workspace (workspace-local MCP if available, otherwise pure CLI), create a Fastlane-ready ZIP, run verify/stage before upload, and only ask me if device or locale scope or panel #1 messaging is unclear.',\n agentPromptNote: 'Browser-first is still here. Agent-first is the better default when you are already building with Claude/Cursor/Copilot/Gemini.',\n demoTitle: 'Run a demo export (no assets required)',\n demoBody:\n 'If you just want to sanity-check the folder roots and the deterministic ZIP first, run the demo. It generates a throwaway project and stages a clean upload root.',\n demoCmd: 'npx --yes shipscreens demo',\n demoBullets: [\n 'Output tree: fastlane/ + reproducible ZIP',\n 'Stages a clean upload root (deliver/supply-safe)',\n 'Delete the demo folder anytime',\n ],\n demoNote: 'First run may take longer while npx downloads the package.',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard -> agent-run --stage (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP + staged upload root + proof reports.',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCiTemplatesLabel: 'CI templates',\n heroCiGithubLabel: 'GitHub Actions',\n heroCiBitriseLabel: 'Bitrise',\n ctas: {\n cli: 'Tell your agent (CLI/MCP)',\n goPro: 'Go Pro',\n sample: 'Open sample project',\n },\n trustTitle: 'Check trust basics before upgrade',\n trustLinks: {\n pricing: 'Pricing',\n terms: 'Terms',\n privacy: 'Privacy',\n legal: 'Legal (Japan)',\n security: 'Security',\n proof: 'Proof',\n },\n steps: [\n {\n title: 'Run the CLI wizard (or open the sample)',\n body: 'Scaffold config + placeholders from wizard, or start from the 5-panel sample and keep your current visual style.',\n },\n {\n title: 'Lock panel order + export upload-ready outputs',\n body: 'Generate fastlane/ + reproducible ZIP with stable numbering/path naming and a clear Hook -> CTA panel flow.',\n },\n {\n title: 'Review verify + stage proof',\n body: 'Run agent-run --stage so build, verify, stage, and report stay together before upload or unlock.',\n },\n ],\n quickstartTitle: 'Agent/CI handoff (copy/paste)',\n quickstartBody: 'Paste these commands when the agent falls back to pure CLI or when you run the rendered release pipeline yourself.',\n quickstartCmd: [\n 'npm ci',\n 'npx playwright install --with-deps chromium',\n 'npm run shipscreens:validate',\n 'npm run shipscreens:lock -- --check',\n 'npx --yes shipscreens agent-run --mode raw --out out/agent --zip --stage --profile appstore',\n ].join('\\n'),\n cliTitle: 'Prefer CLI (no browser)?',\n cliBody:\n 'Run shipscreens wizard, replace placeholders, and build in raw mode first; then add verify/stage to catch drift before upload.',\n cliCmd: [\n 'npx --yes shipscreens wizard',\n '# replace assets/en-US/01.png..05.png',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n cliCta: 'Open the agent-first guide',\n proTitle: 'Upgrade unlocks',\n proBullets: [\n 'Unlock CI-grade reruns (rendered exports)',\n 'Full matrix batch exports (devices × locales)',\n 'CSV/JSON copy import at scale',\n 'No watermark',\n ],\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun agent-run with --require-pro.',\n advancedTitle: 'Advanced: CLI + CI guardrails',\n advancedBody: 'Optional for first export. Use this when you need deterministic reruns in CI or a non-interactive handoff to coding agents.',\n note: 'Free exports are watermarked. Keep your current design tools and art direction; ShipScreens adds deterministic reruns, 01..05 naming discipline, and upload guardrails. Clarity check: if screenshot #1 could fit many apps, rewrite it with one concrete outcome.',\n },\n ja: {\n badge: '5分で初回エクスポート',\n title: '今あるスクショから、決定論的な初回エクスポートを5分で作る',\n subtitle:\n '既存のデザインツールやFastlaneスクリプトはそのままで、今あるスクショに決定論的な初回エクスポート層(fastlane/ + ZIP)を足すページです。1枚目訴求、iPhone-first の最小構成、パス/順序の崩れを止めます。coding agent を使っているなら、ShipScreens を使って進めてと渡して同じ契約を CLI/MCP / CI へ載せられます。',\n quickPathTitle: '最短導線(agent がいれば agent-first)',\n quickPathBullets: [\n '5枚構成サンプルを開き、今あるスクショ/コピーを流し込む。',\n '1枚目は「誰に、どんな成果か」を1つに絞る。',\n '01..05 の連番命名と upload root の確認を先に済ませる。',\n 'coding agent を使っているなら、自分で組み立て直さず agent にそのまま委譲する。',\n ],\n agentPromptTitle: 'coding agent を使っていますか?',\n agentPromptBody: '手で進める代わりに、まずこれを貼るのが最短です。',\n agentPrompt:\n 'ShipScreens を使って、今あるスクリーンショットから決定論的な first export を作ってください。既存のデザイン運用は維持し、このワークスペースで使えるなら workspace-local MCP、無ければ CLI を選び、Fastlane-ready ZIP と verify/stage まで進めて、端末/言語スコープか 1枚目訴求が不明なときだけ確認してください。',\n agentPromptNote: 'browser-first 導線も残しますが、Claude/Cursor/Copilot/Gemini が既にあるなら agent-first の方が良いUXです。',\n demoTitle: 'デモを書き出す(素材不要)',\n demoBody:\n 'まずフォルダ構成と再現性ZIPだけ確認したい場合はデモが最短です。捨てプロジェクトを生成し、クリーンな提出ルートまで stage します。',\n demoCmd: 'npx --yes shipscreens demo',\n demoBullets: ['出力: fastlane/ + 再現性ZIP', '提出用のクリーンなルートを stage', 'デモは削除してOK'],\n demoNote: '初回は npx がパッケージを取得するため時間がかかる場合があります。',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard -> agent-run --stage(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP + staged upload root + proof report。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCiTemplatesLabel: 'CIテンプレ',\n heroCiGithubLabel: 'GitHub Actions',\n heroCiBitriseLabel: 'Bitrise',\n ctas: {\n cli: 'agent に任せる(CLI/MCP)',\n goPro: 'Proにアップグレード',\n sample: 'サンプルを開く',\n },\n trustTitle: 'アップグレード前に料金・規約を確認',\n trustLinks: {\n pricing: '料金',\n terms: '利用規約',\n privacy: 'プライバシー',\n legal: '特商法表記',\n security: 'セキュリティ',\n proof: '実績',\n },\n steps: [\n {\n title: 'CLI wizard で雛形作成(サンプルでも可)',\n body: 'wizard で雛形を作るか、5枚構成サンプルから開始し、既存の見た目を維持したまま進めます。',\n },\n {\n title: '訴求順を固定してアップロード用出力を作る',\n body: 'Hook->CTA の流れを維持しながら、連番/パス命名を固定して fastlane/ + 再現性ZIP を出力。',\n },\n {\n title: 'verify + stage の proof を確認',\n body: 'agent-run --stage で build / verify / stage / report をまとめて実行し、アップロードや Pro 解除の前に確認します。',\n },\n ],\n quickstartTitle: 'agent/CI handoff(コピペ)',\n quickstartBody: 'agent が pure CLI に fallback したとき、または rendered release pipeline を自分で回すときのコマンドです。',\n quickstartCmd: [\n 'npm ci',\n 'npx playwright install --with-deps chromium',\n 'npm run shipscreens:validate',\n 'npm run shipscreens:lock -- --check',\n 'npx --yes shipscreens agent-run --mode raw --out out/agent --zip --stage --profile appstore',\n ].join('\\n'),\n cliTitle: 'CLIで完結したい場合',\n cliBody:\n 'shipscreens wizard で雛形を作って raw モードで出力し、次に verify/stage を足して提出前に崩れを検知します。',\n cliCmd: [\n 'npx --yes shipscreens wizard',\n '# assets/en-US/01.png〜05.png を差し替え',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n cliCta: 'agent-first ガイドを開く',\n proTitle: 'Proでできること',\n proBullets: [\n 'CIで再実行(rendered出力)',\n 'フル一括(端末×言語)',\n 'CSV/JSON copy 取り込み',\n '透かしなし',\n ],\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は agent-run --require-pro で再実行。',\n advancedTitle: '詳細: CLI + CI ガードレール',\n advancedBody: '初回出力では任意。CIで再実行性を固定したい場合や、coding agent に non-interactive に渡したい場合に使います。',\n note: '無料版は透かし付きです。既存の見た目とツールはそのままに、ShipScreensで再実行性、01..05 命名、提出前ガードレールを追加します。確認: 1枚目見出しが他の多くのアプリにも当てはまるなら、成果を具体化します。',\n },\n};\n\nconst FirstExport = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n const partnerCopy = t('landing.partner', { returnObjects: true }) || {};\n const partnerScopeBullets = Array.isArray(partnerCopy.scopeBullets) ? partnerCopy.scopeBullets.filter(Boolean) : [];\n const attribution = getAttributionParams();\n const inboundEntrySource = attribution.entry_source || '';\n const isQuickShipEntry = inboundEntrySource === 'quick_ship_iphone_only_first_export';\n const quickShipPathParams = isQuickShipEntry ? { quick_ship_path: 'iphone_only' } : {};\n const supportEmail = 'support@shimaumaservices.co.jp';\n const trustDisclosure =\n lang === 'ja'\n ? '返金: デジタルサービスの性質上、法令で必要な場合を除き返金はありません。いつでも解約可能です。会社: Shimauma Services, Inc.(東京)。'\n : 'Refund: due to the digital nature of the service, payments are non-refundable except where required by law. Cancel anytime. Company: Shimauma Services, Inc. (Tokyo).';\n const trustContactLabel = lang === 'ja' ? '問い合わせ' : 'Contact';\n const openAppEntrySource = isQuickShipEntry ? 'quick_ship_iphone_only_open_app_header' : 'first_export_open_app_header';\n const goProFooterEntrySource = isQuickShipEntry ? 'quick_ship_iphone_only_go_pro_footer' : 'first_export_go_pro_footer';\n const sampleProjectHeroEntrySource = isQuickShipEntry\n ? 'quick_ship_iphone_only_open_sample_project'\n : 'first_export_open_sample_project';\n const sampleProjectFooterEntrySource = isQuickShipEntry\n ? 'quick_ship_iphone_only_open_sample_project_footer'\n : 'first_export_open_sample_project_footer';\n const openAppHref = `/app/?sample=5panel&entry_source=${openAppEntrySource}`;\n const agentHandoffHref = '#agent-handoff';\n const agentCliGuideHref = '/tools/agent-cli/?entry_source=first_export_agent_handoff#agent-bootstrap';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const githubActionsTemplateHref = '/downloads/shipscreens-github-actions-template.yml';\n const bitriseTemplateHref = '/downloads/shipscreens-bitrise-template.yml';\n const top20TemplatePackCsvHref = '/downloads/shipscreens-top20-category-headline-pack-2026-02.csv';\n const localizationHandoffTemplateHref = '/downloads/shipscreens-localization-handoff-template.csv';\n const localizationCiChecklistHref = '/downloads/shipscreens-localization-ci-checklist-2026-02.md';\n const variantMatrixTemplateHref = '/downloads/shipscreens-aso-variant-matrix-template.csv';\n const jpCaseSnapshotsHref = '/downloads/shipscreens-japan-case-snapshots-2026-02.md';\n const extraPackTitle = lang === 'ja' ? '運用テンプレパック' : 'Ops template pack';\n const top20CsvLabel = lang === 'ja' ? 'トップ20カテゴリ×2(CSV)' : 'Top20 category x2 (CSV)';\n const localizationHandoffLabel = lang === 'ja' ? 'ローカライズ受け渡し(CSV)' : 'Localization handoff (CSV)';\n const localizationCiLabel = lang === 'ja' ? 'ローカライズCIチェック(MD)' : 'Localization CI checklist (MD)';\n const variantMatrixLabel = lang === 'ja' ? 'ASO変種管理テンプレ(CSV)' : 'ASO variant matrix (CSV)';\n const jpCaseLabel = lang === 'ja' ? '日本向けケース資料(MD)' : 'Japan case snapshots (MD)';\n const goProFooterHref = `/app/?sample=5panel&upgrade=1&entry_source=${goProFooterEntrySource}`;\n const sampleProjectHeroHref = `/app/?sample=5panel&entry_source=${sampleProjectHeroEntrySource}`;\n const sampleProjectFooterHref = `/app/?sample=5panel&entry_source=${sampleProjectFooterEntrySource}`;\n const pricingHref = '/pricing';\n const termsHref = '/terms';\n const privacyHref = '/privacy';\n const legalHref = '/legal';\n const securityHref = '/security';\n const proofHref = '/proof';\n const designPartnerEntrySource = isQuickShipEntry\n ? 'quick_ship_iphone_only_design_partner_offer'\n : 'first_export_design_partner_offer';\n const payFirstPartnerEntrySource = isQuickShipEntry\n ? 'quick_ship_iphone_only_pay_first_partner_block'\n : 'first_export_pay_first_partner_block';\n const designPartnerOfferHref = buildDesignPartnerHref({\n entrySource: designPartnerEntrySource,\n preset: 'manual_figma',\n });\n const payFirstPartnerHref = `/pricing?offer=pay_first&entry_source=${payFirstPartnerEntrySource}`;\n const designPartnerOfferLabel = lang === 'ja' ? 'オファー詳細を見る' : 'See offer details';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n const [quickstartMode, setQuickstartMode] = useState('cli');\n const isCli = quickstartMode === 'cli';\n const quickstart = isCli\n ? { title: copy.cliTitle, body: copy.cliBody, cmd: copy.cliCmd, cta: 'copy_cli_quickstart' }\n : { title: copy.quickstartTitle, body: copy.quickstartBody, cmd: copy.quickstartCmd, cta: 'copy_ci_quickstart' };\n\n usePageTitle('titles.firstExport', { defaultValue: copy.title });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'first_export' });\n if (isQuickShipEntry) {\n trackEvent('quick_ship_path_progress', { step: 'first_export_view' });\n }\n }, [isQuickShipEntry]);\n\n return (\n <div className=\"min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_app_header',\n ...quickShipPathParams,\n })\n }\n primaryCta={{\n href: agentHandoffHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {copy.ctas.cli} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_agent_cli_header',\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-12\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <Rocket size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={agentHandoffHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_agent_cli_hero',\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctas.cli} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHeroHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_sample_project_hero',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition\"\n >\n {copy.ctas.sample} <ArrowRight size={16} />\n </a>\n </div>\n {copy.agentPrompt && (\n <AgentHandoffPanel\n sectionId=\"agent-handoff\"\n lang={lang}\n prompt={copy.agentPrompt}\n promptTitle={copy.agentPromptTitle}\n promptBody={copy.agentPromptBody}\n promptNote={copy.agentPromptNote}\n guideHref={agentCliGuideHref}\n className=\"max-w-4xl mx-auto text-left\"\n onPromptCopied={(client) =>\n trackEvent('tool_cta_click', { tool: 'first_export', cta: 'copy_agent_prompt', client: client.id })\n }\n onBundleCopied={(client) =>\n trackEvent('tool_cta_click', {\n tool: 'first_export',\n cta: `copy_bootstrap_bundle_${client.id}`,\n client: client.id,\n })\n }\n onClientCommandCopied={(client) =>\n trackEvent('tool_cta_click', {\n tool: 'first_export',\n cta: `copy_client_bootstrap_${client.id}`,\n client: client.id,\n })\n }\n onClientDownload={(client) =>\n trackEvent('tool_download', {\n tool: 'first_export',\n asset: `client_bootstrap_${client.id}`,\n client: client.id,\n })\n }\n onGuideClick={(event, client) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_agent_handoff_guide',\n client: client.id,\n })\n }\n />\n )}\n <ReleaseFitIntake\n lang={lang}\n className=\"max-w-4xl mx-auto text-left\"\n onPromptCopied={({ pathKey }) =>\n trackEvent('tool_cta_click', { tool: 'first_export', cta: 'copy_release_fit_prompt', path: pathKey })\n }\n onPathClick={(event, { pathKey }) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_release_fit_path',\n path: pathKey,\n })\n }\n onRequestClick={(event, { pathKey }) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_release_fit_request',\n path: pathKey,\n has_app_url: event.currentTarget.href.includes('appUrl=') ? 'yes' : 'no',\n })\n }\n />\n <AgentReportPreview lang={lang} className=\"max-w-4xl mx-auto text-left\" />\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.quickPathTitle}</div>\n {copy.quickPathBullets?.length > 0 && (\n <ul className=\"space-y-1 text-xs text-slate-300\">\n {copy.quickPathBullets.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <CheckCircle2 size={14} className=\"mt-0.5 text-green-400 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"pt-1 space-y-1.5\">\n <div className=\"text-[11px] text-slate-500 font-semibold\">{copy.trustTitle}</div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={pricingHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_pricing_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.pricing}\n </a>\n <a\n href={termsHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_terms_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.terms}\n </a>\n <a\n href={privacyHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_privacy_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.privacy}\n </a>\n <a\n href={legalHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_legal_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.legal}\n </a>\n <a\n href={securityHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_security_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.security}\n </a>\n <a\n href={proofHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_proof_trust' })\n }\n className=\"text-[11px] text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {copy.trustLinks.proof}\n </a>\n </div>\n <p className=\"text-[11px] text-slate-500\">\n {trustDisclosure}{' '}\n {trustContactLabel}:{' '}\n <a\n href={`mailto:${supportEmail}`}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_contact_trust',\n })\n }\n className=\"underline underline-offset-4 hover:text-slate-300\"\n >\n {supportEmail}\n </a>\n </p>\n </div>\n </div>\n <p className=\"text-xs text-slate-500\">{copy.note}</p>\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"grid md:grid-cols-3 gap-6\">\n {copy.steps.map((step, index) => (\n <div key={step.title} className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"text-xs font-semibold text-blue-200\">STEP {index + 1}</div>\n <div className=\"text-lg font-bold text-white\">{step.title}</div>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{step.body}</p>\n </div>\n ))}\n </section>\n\n <details className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 group\">\n <summary className=\"flex items-center justify-between text-sm font-bold text-white cursor-pointer list-none\">\n <span>{copy.advancedTitle}</span>\n <span className=\"flex items-center gap-2 text-[10px] font-semibold text-slate-400\">\n CLI/CI <ChevronDown size={14} className=\"text-slate-500\" />\n </span>\n </summary>\n <div className=\"mt-3 space-y-4\">\n <p className=\"text-sm text-slate-300\">{copy.advancedBody}</p>\n <div className=\"flex flex-col md:flex-row md:items-center md:justify-between gap-3\">\n <div className=\"flex items-center gap-2 text-sm font-bold text-white\">\n {isCli ? <Terminal size={16} className=\"text-blue-300\" /> : <CheckCircle2 size={16} className=\"text-blue-300\" />}\n {quickstart.title}\n </div>\n <div className=\"inline-flex gap-2 rounded-lg border border-slate-700 bg-slate-950 p-1\">\n <button\n type=\"button\"\n onClick={() => setQuickstartMode('cli')}\n className={`px-3 py-1.5 rounded-md text-xs font-semibold transition-colors ${\n isCli ? 'bg-white text-slate-900' : 'text-slate-400 hover:text-slate-200'\n }`}\n >\n {copy.cliTitle}\n </button>\n <button\n type=\"button\"\n onClick={() => setQuickstartMode('ci')}\n className={`px-3 py-1.5 rounded-md text-xs font-semibold transition-colors ${\n !isCli ? 'bg-white text-slate-900' : 'text-slate-400 hover:text-slate-200'\n }`}\n >\n {copy.quickstartTitle}\n </button>\n </div>\n </div>\n <p className=\"text-sm text-slate-300\">{quickstart.body}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{quickstart.cmd}</pre>\n </div>\n <CopyButton\n value={quickstart.cmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'first_export', cta: quickstart.cta })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {isCli && (\n <a\n href=\"/tools/agent-cli/\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_agent_cli' })\n }\n className=\"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors\"\n >\n {copy.cliCta} <ArrowRight size={14} />\n </a>\n )}\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCiTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={githubActionsTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'ci_template_github_actions' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCiGithubLabel}\n </a>\n <a\n href={bitriseTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'ci_template_bitrise' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCiBitriseLabel}\n </a>\n </div>\n </div>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{extraPackTitle}</div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={top20TemplatePackCsvHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'top20_category_pack_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {top20CsvLabel}\n </a>\n <a\n href={localizationHandoffTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'localization_handoff_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {localizationHandoffLabel}\n </a>\n <a\n href={localizationCiChecklistHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'localization_ci_checklist_md' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {localizationCiLabel}\n </a>\n <a\n href={variantMatrixTemplateHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'aso_variant_matrix_csv' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {variantMatrixLabel}\n </a>\n <a\n href={jpCaseSnapshotsHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'first_export', asset: 'jp_case_snapshots_md' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {jpCaseLabel}\n </a>\n </div>\n </div>\n <div className=\"text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n <Terminal size={14} className=\"text-blue-300\" />\n {copy.demoTitle}\n </div>\n <p className=\"text-xs text-slate-400\">{copy.demoBody}</p>\n <div className=\"rounded-xl border border-slate-800 bg-slate-950 p-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.demoCmd}</pre>\n </div>\n <CopyButton\n value={copy.demoCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'first_export', cta: 'copy_demo_cmd' })}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copyButtonLabel : copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.demoBullets?.length > 0 && (\n <ul className=\"space-y-1 text-xs text-slate-300 pt-1\">\n {copy.demoBullets.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <CheckCircle2 size={14} className=\"mt-0.5 text-green-400 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )}\n {copy.demoNote && <div className=\"text-[11px] text-slate-500\">{copy.demoNote}</div>}\n </div>\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'first_export', cta: 'open_cli_preflight' })\n }\n className=\"max-w-xl\"\n />\n </div>\n </details>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"text-lg font-bold text-white\">{copy.proTitle}</div>\n <ul className=\"space-y-2 text-sm text-slate-300\">\n {copy.proBullets.map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CheckCircle2 size={16} className=\"text-green-400\" />\n {item}\n </li>\n ))}\n </ul>\n <div className=\"flex flex-col sm:flex-row gap-3 pt-2\">\n <a\n href={goProFooterHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'go_pro_footer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.02] transition\"\n >\n {copy.ctas.goPro} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectFooterHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_sample_project_footer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.ctas.sample} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"pt-4 border-t border-slate-800/80 space-y-2\">\n <div className=\"text-sm font-bold text-white\">{copy.proUnlockTitle}</div>\n {copy.proUnlockBody && <p className=\"text-sm text-slate-300\">{copy.proUnlockBody}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.proUnlockCmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={copy.proUnlockCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'first_export', 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 <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n </div>\n {copy.proUnlockNote && <div className=\"text-xs text-slate-500\">{copy.proUnlockNote}</div>}\n </div>\n </section>\n\n <section\n id=\"design-partner\"\n className=\"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\"\n >\n <div className=\"text-lg font-bold text-white\">{partnerCopy.title || t('landing.partner.title')}</div>\n <div className=\"text-sm text-slate-300 leading-relaxed\">{partnerCopy.body || t('landing.partner.body')}</div>\n {partnerScopeBullets.length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-300 list-disc pl-5\">\n {partnerScopeBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n )}\n <a\n href={designPartnerOfferHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_design_partner_offer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 underline underline-offset-4\"\n >\n {designPartnerOfferLabel} <ArrowRight size={14} />\n </a>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={designPartnerOfferHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_design_partner_offer_primary',\n ...quickShipPathParams,\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {(partnerCopy.jumpCta || designPartnerOfferLabel)} <ArrowRight size={16} />\n </a>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'first_export', cta: 'dm_design_partner', ...quickShipPathParams })}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n {partnerCopy.dmCta || t('landing.partner.dmCta')}\n </a>\n <a\n href={payFirstPartnerHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'open_pay_first_from_partner_block',\n ...quickShipPathParams,\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-emerald-500/40 bg-emerald-500/10 text-emerald-100 font-semibold hover:bg-emerald-500/15 transition\"\n >\n {partnerCopy.payFirstCta || t('landing.partner.payFirstCta')} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"text-xs text-slate-500\">\n {partnerCopy.emailLabel || t('landing.partner.emailLabel')}{' '}\n <a href={`mailto:${supportEmail}`} className=\"underline underline-offset-4 hover:text-white\">\n {supportEmail}\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n note={copy.note}\n primary={{\n label: copy.ctas.cli,\n href: agentHandoffHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'sticky_primary_agent',\n }),\n }}\n secondary={{\n label: copy.ctas.sample,\n href: sampleProjectHeroHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'first_export',\n cta: 'sticky_secondary_sample',\n ...quickShipPathParams,\n }),\n }}\n />\n </div>\n );\n};\n\nexport default FirstExport;\n"],"mappings":"yrBAiBM,GAAiB,IACP,GAAQ,IAAI,MAAM,GAAG,EAAE,KACrB,KAAO,KAAO,KAG1B,EAAO,CACX,GAAI,CACF,MAAO,wBACP,MAAO,+EACP,SACE,gVACF,eAAgB,0CAChB,iBAAkB,CAChB,iFACA,2DACA,wFACA,wHACF,EACA,iBAAkB,gCAClB,gBAAiB,8DACjB,YACE,iWACF,gBAAiB,kIACjB,UAAW,yCACX,SACE,oKACF,QAAS,6BACT,YAAa,CACX,4CACA,mDACA,gCACF,EACA,SAAU,6DACV,aAAc,2BACd,YAAa,yDACb,eAAgB,8EAChB,iBAAkB,oBAClB,sBAAuB,oBACvB,mBAAoB,aACpB,gBAAiB,WACjB,qBAAsB,eACtB,kBAAmB,iBACnB,mBAAoB,UACpB,KAAM,CACJ,IAAK,4BACL,MAAO,SACP,OAAQ,qBACV,EACA,WAAY,oCACZ,WAAY,CACV,QAAS,UACT,MAAO,QACP,QAAS,UACT,MAAO,gBACP,SAAU,WACV,MAAO,OACT,EACA,MAAO,CACL,CACE,MAAO,0CACP,KAAM,kHACR,EACA,CACE,MAAO,iDACP,KAAM,6GACR,EACA,CACE,MAAO,8BACP,KAAM,kGACR,CACF,EACA,gBAAiB,gCACjB,eAAgB,qHAChB,cAAe,CACb,SACA,8CACA,+BACA,sCACA,6FACF,EAAE,KAAK;CAAI,EACX,SAAU,2BACV,QACE,iIACF,OAAQ,CACN,+BACA,wCACA,0EACF,EAAE,KAAK;CAAI,EACX,OAAQ,6BACR,SAAU,kBACV,WAAY,CACV,4CACA,gDACA,gCACA,cACF,EACA,eAAgB,mBAChB,cAAe,oEACf,aAAc,mCACd,cAAe,iFACf,cAAe,gCACf,aAAc,8HACd,KAAM,oQACR,EACA,GAAI,CACF,MAAO,cACP,MAAO,gCACP,SACE,iMACF,eAAgB,+BAChB,iBAAkB,CAChB,gCACA,yBACA,wCACA,mDACF,EACA,iBAAkB,yBAClB,gBAAiB,2BACjB,YACE,sMACF,gBAAiB,qFACjB,UAAW,gBACX,SACE,wEACF,QAAS,6BACT,YAAa,CAAC,yBAA0B,sBAAuB,WAAW,EAC1E,SAAU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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./chunk-BHe-jwch.js";import{S as e,b as t,x as n}from"./index-D7D6ZRCW.js";e();var r=t(),i=({className:e=``})=>{let{t}=n(),i=t(`landing.fit`,{returnObjects:!0})||{},a=Array.isArray(i.bestBullets)?i.bestBullets:[],o=Array.isArray(i.notBullets)?i.notBullets:[],s=e?`space-y-4 ${e}`:`space-y-4`;return!i?.title||a.length===0&&o.length===0?null:(0,r.jsxs)(`section`,{className:s,children:[(0,r.jsx)(`h2`,{className:`text-xl font-bold text-white text-center`,children:i.title}),(0,r.jsxs)(`div`,{className:`grid md:grid-cols-2 gap-4`,children:[(0,r.jsxs)(`div`,{className:`p-5 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3`,children:[(0,r.jsx)(`div`,{className:`text-base font-bold text-emerald-200`,children:i.bestTitle}),(0,r.jsx)(`ul`,{className:`text-sm text-slate-200 list-disc pl-5 space-y-2`,children:a.map(e=>(0,r.jsx)(`li`,{children:e},e))})]}),(0,r.jsxs)(`div`,{className:`p-5 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3`,children:[(0,r.jsx)(`div`,{className:`text-base font-bold text-amber-200`,children:i.notTitle}),(0,r.jsx)(`ul`,{className:`text-sm text-slate-200 list-disc pl-5 space-y-2`,children:o.map(e=>(0,r.jsx)(`li`,{children:e},e))})]})]}),i.note&&(0,r.jsx)(`p`,{className:`text-xs text-slate-500 text-center`,children:i.note})]})};export{i as t};
|
|
2
|
+
//# sourceMappingURL=FitPanel-B1J0V1jK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FitPanel-B1J0V1jK.js","names":[],"sources":["../../src/components/FitPanel.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst FitPanel = ({ className = '' }) => {\n const { t } = useTranslation();\n const fit = t('landing.fit', { returnObjects: true }) || {};\n const fitBestBullets = Array.isArray(fit.bestBullets) ? fit.bestBullets : [];\n const fitNotBullets = Array.isArray(fit.notBullets) ? fit.notBullets : [];\n const sectionClassName = className ? `space-y-4 ${className}` : 'space-y-4';\n\n if (!fit?.title || (fitBestBullets.length === 0 && fitNotBullets.length === 0)) {\n return null;\n }\n\n return (\n <section className={sectionClassName}>\n <h2 className=\"text-xl font-bold text-white text-center\">{fit.title}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div className=\"p-5 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3\">\n <div className=\"text-base font-bold text-emerald-200\">{fit.bestTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitBestBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n <div className=\"p-5 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3\">\n <div className=\"text-base font-bold text-amber-200\">{fit.notTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitNotBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </div>\n {fit.note && <p className=\"text-xs text-slate-500 text-center\">{fit.note}</p>}\n </section>\n );\n};\n\nexport default FitPanel;\n"],"mappings":"gGAGM,GAAY,CAAE,YAAY,MAAS,CACvC,GAAM,CAAE,GAAM,EAAe,EACvB,EAAM,EAAE,cAAe,CAAE,cAAe,EAAK,CAAC,GAAK,CAAC,EACpD,EAAiB,MAAM,QAAQ,EAAI,WAAW,EAAI,EAAI,YAAc,CAAC,EACrE,EAAgB,MAAM,QAAQ,EAAI,UAAU,EAAI,EAAI,WAAa,CAAC,EAClE,EAAmB,EAAY,aAAa,IAAc,YAMhE,MAJI,CAAC,GAAK,OAAU,EAAe,SAAW,GAAK,EAAc,SAAW,EACnE,MAIP,EAAA,EAAA,MAAC,UAAD,CAAS,UAAW,WAApB,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,oDAA4C,EAAI,KAAU,CAAA,GACxE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kFAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gDAAwC,EAAI,SAAe,CAAA,GAC1E,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,2DACX,EAAe,IAAK,IACnB,EAAA,EAAA,KAAC,KAAD,CAAA,SAAgB,CAAS,EAAhB,CAAgB,CAC1B,CACC,CAAA,CACD,KACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gFAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8CAAsC,EAAI,QAAc,CAAA,GACvE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,2DACX,EAAc,IAAK,IAClB,EAAA,EAAA,KAAC,KAAD,CAAA,SAAgB,CAAS,EAAhB,CAAgB,CAC1B,CACC,CAAA,CACD,GACF,IACJ,EAAI,OAAQ,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,8CAAsC,EAAI,IAAQ,CAAA,CACrE,GAEb"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import{r as e}from"./chunk-BHe-jwch.js";import{S as t,b as n,n as r,r as i,s as a,t as o,x as s}from"./index-D7D6ZRCW.js";import{n as c,r as l}from"./LanguageSwitcher-hFv9zl1u.js";import{n as u}from"./circle-check-X08qqy40.js";import{t as d}from"./chevron-down-BIXHKpnf.js";import{t as f}from"./CopyButton-BFCx6EPg.js";import{t as p}from"./copy-KD-LYJ0z.js";import{t as m}from"./download-BXzoc-Y3.js";import{t as h}from"./layout-grid-Cq_e979G.js";import{t as g}from"./SiteHeader-CJqQ0pL3.js";import{n as _,t as v}from"./StickyMobileCta-REC3DROG.js";import{t as y}from"./FitPanel-B1J0V1jK.js";import{t as b}from"./AgentHandoffPanel-Bf_AJepG.js";import{t as x}from"./ToolGuardrailsPanel-Cclxwdrb.js";var S=e(t(),1),C=n(),w=e=>(e||``).split(`-`)[0]===`ja`?`ja`:`en`,T=e=>e===`ja`?`# 5枚構成 スクショフレームワーク
|
|
2
|
+
|
|
3
|
+
App Store / Google Play のスクショを「5枚で伝える」ための構成テンプレです。
|
|
4
|
+
|
|
5
|
+
## 1) Hook(結論)
|
|
6
|
+
- 何が変わるか(成果)を1行で
|
|
7
|
+
- 例: スクショ更新をCIの1回再実行で完了
|
|
8
|
+
|
|
9
|
+
## 2) Problem(痛み)
|
|
10
|
+
- いま起きている苦痛を具体化(数字が強い)
|
|
11
|
+
- 例: 5枚×10言語×4サイズ = 200枚
|
|
12
|
+
|
|
13
|
+
## 3) Proof(根拠)
|
|
14
|
+
- 信用・再現性の材料(仕様・実績・数字)
|
|
15
|
+
- 例: Fastlane公式パス(dir/ZIP) / 再現性のある出力
|
|
16
|
+
|
|
17
|
+
## 4) How(やり方)
|
|
18
|
+
- どうやって実現するか(フローを短く)
|
|
19
|
+
- 例: master layout → CSV/JSON copy → Export
|
|
20
|
+
|
|
21
|
+
## 5) CTA(次の一手)
|
|
22
|
+
- 読んだ後に何をすればいいかを1つに絞る
|
|
23
|
+
- 例: 無料で試す / サンプルから開始
|
|
24
|
+
|
|
25
|
+
## メモ
|
|
26
|
+
- 翻訳は外部でOK(ShipScreensは翻訳しない)
|
|
27
|
+
- UIは大きく(~80%目安)
|
|
28
|
+
- キャプションは短く(6-8語目安)
|
|
29
|
+
- 確認: 見出しが他の多くのアプリにも当てはまるなら、成果を具体化して書き直す
|
|
30
|
+
`:`# 5-panel screenshot framework
|
|
31
|
+
|
|
32
|
+
A simple structure to explain your app in five store screenshots.
|
|
33
|
+
|
|
34
|
+
## 1) Hook (Outcome)
|
|
35
|
+
- Say the result in one line
|
|
36
|
+
- Example: Ship screenshot updates in one CI rerun
|
|
37
|
+
|
|
38
|
+
## 2) Problem (Pain)
|
|
39
|
+
- Make the pain concrete (numbers work)
|
|
40
|
+
- Example: 5 shots × 10 locales × 4 sizes = 200 images
|
|
41
|
+
|
|
42
|
+
## 3) Proof (Credibility)
|
|
43
|
+
- Give confidence (specs, numbers, workflow fit)
|
|
44
|
+
- Example: upload-ready output (folders/ZIP) / Reproducible reruns
|
|
45
|
+
|
|
46
|
+
## 4) How (Workflow)
|
|
47
|
+
- Show the shortest path in steps
|
|
48
|
+
- Example: Master layout → CSV/JSON copy → export
|
|
49
|
+
|
|
50
|
+
## 5) CTA (Next step)
|
|
51
|
+
- One clear action
|
|
52
|
+
- Example: Try it free / Start from a sample project
|
|
53
|
+
|
|
54
|
+
## Notes
|
|
55
|
+
- Bring your translations; ShipScreens does not translate.
|
|
56
|
+
- Keep UI big (~80% of the frame).
|
|
57
|
+
- Keep captions short (<= 6-8 words).
|
|
58
|
+
- Clarity check: if the headline could fit many apps, make the outcome more concrete.
|
|
59
|
+
`,E={en:{badge:`Screenshot structure template`,title:`5-panel Screenshot Framework`,subtitle:`Use this structure even if you already have design tools: Hook -> Problem -> Proof -> How -> CTA keeps App Store / Google Play screenshots consistent across sizes/locales and release reruns without forcing a generic visual style.`,heroCliTitle:`CLI quickstart (2 steps)`,heroCliNote:`wizard -> agent-run --stage (raw mode, no Playwright).`,heroCliSummary:`Outputs: fastlane/ + reproducible ZIP + staged upload root + proof reports.`,heroCliCopyLabel:`Copy all commands`,heroCliTemplatesLabel:`Starter templates`,heroCliConfigLabel:`config.yml`,heroCliCsvLabel:`copy.csv`,heroCliCmd:[`npx --yes shipscreens wizard`,`npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage`].join(`
|
|
60
|
+
`),agentPromptTitle:`Recommended: let your coding agent lock the 5-panel story into the release step`,agentPromptBody:`Use this when panel #1 is vague or the 5-panel order keeps drifting across sizes/locales.`,agentPrompt:`Use ShipScreens to turn our current screenshots into a deterministic 5-panel release flow. Keep the existing design workflow, inspect this repo, choose the best path for this workspace (workspace-local MCP if available, otherwise pure CLI), make panel #1 specific to one outcome and audience, lock Hook -> Problem -> Proof -> How -> CTA order across sizes/locales, run verify/stage before upload, and return a short report with output paths, warnings, and next steps. Only ask me if device or locale scope or panel #1 messaging is unclear.`,agentPromptNote:`Best flow: hand off once, then review panel #1 clarity and the first export.`,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 agent-run with --require-pro.`,navTools:`Tools`,introTitle:`Use this when…`,introBullets:[`Manual Figma/Canva edits (or AI drafts) keep drifting across sizes/locales`,`App Review/ASO feedback says the first screenshot is unclear`,`Screenshots look generic because the message is vague, not because your style is wrong`,`Localization makes copy decisions expensive`,`You want a rerunnable flow (sample → edit → export)`],hookRule:`Clarity check: if your Hook could fit many apps, it is too broad. Make one concrete outcome explicit.`,hookExamplesTitle:`Hook examples (vague vs concrete)`,hookExamplesBadLabel:`Vague`,hookExamplesGoodLabel:`Concrete`,hookExamples:[{bad:`Learn everything about finance`,good:`Build a weekly budget and track spending in 10 minutes`},{bad:`A smarter productivity app`,good:`Plan your day in 3 tasks and finish by 6pm`}],panelsTitle:`The 5 panels`,panelCards:[{name:`Hook`,goal:`Say the outcome in one line.`,header:`Header: concrete outcome`,subtitle:`Subtitle: for who / how fast`,example:`Example: Ship screenshot updates in one CI rerun`},{name:`Problem`,goal:`Make the pain concrete (numbers help).`,header:`Header: what is painful`,subtitle:`Subtitle: why it costs time`,example:`Example: 5×10×4 = 200 images`},{name:`Proof`,goal:`Add credibility and reduce doubt.`,header:`Header: why trust this`,subtitle:`Subtitle: spec / workflow fit`,example:`Example: upload-ready output`},{name:`How`,goal:`Show the shortest reproducible workflow.`,header:`Header: the steps`,subtitle:`Subtitle: what you need`,example:`Example: Master layout → CSV → Export`},{name:`CTA`,goal:`One clear next action.`,header:`Header: try / start`,subtitle:`Subtitle: what happens next`,example:`Example: Try it free`}],toolsTitle:`Assets`,calculatorLink:`Screenshot Workload Calculator`,calculatorCaption:`Quantify the device × locale explosion and pick size buckets.`,sampleTitle:`Next: turn this 5-panel script into a repeatable export`,sampleCaption:`Use ShipScreens as the build step that keeps the 5-panel structure while the agent chooses MCP or CLI. Use the sample project when you want to test the browser fallback yourself.`,openSample:`Open sample project`,downloadTitle:`Download`,downloadCaption:`Save the framework as Markdown (easy to share with teammates).`,copyButton:`Copy Markdown`,downloadButton:`Download Markdown`,toastCopied:`Copied to clipboard`,toastCopyFailed:`Copy failed. Please use Download.`,ctaPrimary:`Use your agent to structure + export`,footerText:`Want feedback on your store assets pipeline and screenshot positioning? We are talking to early users.`,footerCta:`Open 15-min review intake`},ja:{badge:`構成テンプレ(5枚)`,title:`5枚構成 スクショフレームワーク`,subtitle:`既存ツールがあっても、Hook -> Problem -> Proof -> How -> CTA でサイズ/言語/リリース再実行のブレを抑える5枚構成テンプレ。見た目を画一化するためではなく、訴求順を固定するための型です。`,heroCliTitle:`CLIクイックスタート(2ステップ)`,heroCliNote:`wizard -> agent-run --stage(raw / Playwright不要)。`,heroCliSummary:`出力: fastlane/ + 再現性ZIP + staged upload root + proof report。`,heroCliCopyLabel:`コマンドをすべてコピー`,heroCliTemplatesLabel:`スターター雛形`,heroCliConfigLabel:`config.yml`,heroCliCsvLabel:`copy.csv`,heroCliCmd:[`npx --yes shipscreens wizard`,`npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage`].join(`
|
|
61
|
+
`),agentPromptTitle:`既定導線: coding agent に5枚構成をリリース工程に載せる`,agentPromptBody:`1枚目訴求が曖昧だったり、5枚の順序がサイズ/言語で崩れるなら、まずこれを渡します。`,agentPrompt:`ShipScreens を使って、今あるスクリーンショットを再現できる5枚構成のリリース工程に変えてください。既存のデザイン運用は維持し、この repo を確認して、このプロジェクトで MCP が使えるならそれを使い、無ければ CLI を使ってください。1枚目で成果と対象ユーザーを具体化し、Hook -> Problem -> Proof -> How -> CTA の順序をサイズ/言語でも固定し、verify と stage を実行し、出力パス・警告・次の作業を短く報告してください。端末/言語スコープか1枚目訴求が不明なときだけ確認してください。`,agentPromptNote:`おすすめは、1回指示して 1枚目訴求と最初のエクスポートだけ確認することです。`,proUnlockTitle:`Proを解除(CLI)`,proUnlockBody:`透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:`,proUnlockCmd:`npx --yes shipscreens auth login`,proUnlockNote:`初回のみブラウザでサインインします。以後は agent-run --require-pro で再実行。`,navTools:`ツール`,introTitle:`こんな時に使う`,introBullets:[`手作業/AI下書きがサイズ/言語でズレる`,`App Review/ASO で「最初のスクショが伝わらない」と言われたとき`,`見た目ではなく訴求の曖昧さで「よくある画面」に見えてしまう`,`多言語対応でコピーが長くなりがち`,`再実行できる流れ(サンプル→編集→Export)が欲しい`],hookRule:`確認: Hookが他の多くのアプリにも当てはまるなら、成果を具体化してください。`,hookExamplesTitle:`Hook例(曖昧 vs 具体)`,hookExamplesBadLabel:`曖昧`,hookExamplesGoodLabel:`具体`,hookExamples:[{bad:`お金のことを全部学べる`,good:`10分で週次予算を作って、支出を自動で把握する`},{bad:`もっと賢い生産性アプリ`,good:`毎日の3タスクを整理して、18時までに終わらせる`}],panelsTitle:`5枚の役割`,panelCards:[{name:`Hook`,goal:`結論(成果)を1行で。`,header:`ヘッダー: 具体的な成果`,subtitle:`サブ: 誰に/どれくらい`,example:`例: スクショ更新をCIの1回再実行で完了`},{name:`Problem`,goal:`痛みを具体化(数字が強い)。`,header:`ヘッダー: 何がつらい`,subtitle:`サブ: なぜ時間が溶ける`,example:`例: 5×10×4 = 200枚`},{name:`Proof`,goal:`不安を減らす材料。`,header:`ヘッダー: 根拠`,subtitle:`サブ: 仕様/ワークフロー適合`,example:`例: Fastlane対応出力`},{name:`How`,goal:`短いフローで再現性を。`,header:`ヘッダー: 手順`,subtitle:`サブ: 必要なもの`,example:`例: master→CSV→Export`},{name:`CTA`,goal:`次の一手を1つに。`,header:`ヘッダー: 試す/開始`,subtitle:`サブ: 次に起きること`,example:`例: 無料で試す`}],toolsTitle:`資産`,calculatorLink:`スクショ作業量 計算ツール`,calculatorCaption:`端末×言語の爆発とサイズバケットを先に把握。`,sampleTitle:`次: この5枚構成を決定論的な export に変える`,sampleCaption:`5枚構成を保ったまま coding agent に MCP/CLI を選ばせます。ブラウザ fallback を自分で触りたいときだけサンプルを開きます。`,openSample:`サンプルを開く`,downloadTitle:`ダウンロード`,downloadCaption:`Markdownとして保存(チーム共有しやすい)。`,copyButton:`Markdownをコピー`,downloadButton:`Markdownをダウンロード`,toastCopied:`コピーしました`,toastCopyFailed:`コピーできませんでした。ダウンロードをご利用ください。`,ctaPrimary:`AIエージェントに構成 + export を任せる`,footerText:`ストア素材パイプラインや訴求の相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。`,footerCta:`15分レビューを開く`}},D=()=>{let{i18n:e,t}=s(),{addToast:n}=o(),D=w(e.resolvedLanguage||e.language),O=E[D]||E.en,k=t(`landing.partner`,{returnObjects:!0})||{},A=Array.isArray(k.scopeBullets)?k.scopeBullets.filter(Boolean):[],j=(a().entry_source||``)===`landing_entry_quick_ship_iphone_only`,M=j?{quick_ship_path:`iphone_only`}:{};l(`titles.fivePanelFramework`,{defaultValue:D===`ja`?`5枚構成テンプレ - ShipScreens`:`5-panel Screenshot Framework - ShipScreens`}),(0,S.useEffect)(()=>{r(`tool_view`,{tool:`five_panel_screenshot_framework`}),j&&r(`quick_ship_path_progress`,{step:`five_panel_view`})},[j]);let N=(0,S.useMemo)(()=>T(D),[D]),P=`#agent-handoff`,F=j?`quick_ship_iphone_only_open_sample_project`:`five_panel_screenshot_framework_open_sample_project`,I=j?`quick_ship_iphone_only_design_partner_offer`:`five_panel_screenshot_framework_design_partner_offer`,L=j?`quick_ship_iphone_only_pay_first_partner_block`:`five_panel_screenshot_framework_pay_first_partner_block`,R=`/app/?sample=5panel&entry_source=${F}`,z=`/design-partner/?entry_source=${I}&scope=iphone_first&workflow=figma&blocker=panel_hook`,B=`/pricing?offer=pay_first&entry_source=${L}`,V=D===`ja`?`オファー詳細を見る`:`See offer details`,H=`support@shimaumaservices.co.jp`,U=t(`landing.partner.emailSubject`,{defaultValue:`ShipScreens release setup review`}),W=t(`landing.partner.emailBody`,{defaultValue:``}),G=`mailto:${H}?subject=${encodeURIComponent(U)}&body=${encodeURIComponent(W)}`,K=t(`common.copy`,{defaultValue:`Copy`}),q=t(`common.showCommands`,{defaultValue:`Show commands`}),J=typeof window>`u`?!0:window.matchMedia(`(min-width: 640px)`).matches,Y=(0,S.useCallback)(()=>{try{let e=`\ufeff${N}`,t=new Blob([e],{type:`text/markdown;charset=utf-8`}),n=URL.createObjectURL(t),i=document.createElement(`a`);i.href=n,i.download=D===`ja`?`shipscreens-5panel-framework-ja.md`:`shipscreens-5panel-framework.md`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(n),r(`tool_download`,{tool:`five_panel_screenshot_framework`,asset:`markdown`})}catch{}},[D,N]);return(0,C.jsxs)(`div`,{className:`min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white`,children:[(0,C.jsx)(c,{}),(0,C.jsx)(g,{variant:`dark`,active:`tools`,openAppHref:`/app/?sample=5panel&entry_source=five_panel_screenshot_framework_open_app_header`,onToolsClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_tools_header`}),onPricingClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`pricing_header`}),onOpenAppClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_app_header`}),primaryCta:{href:P,label:(0,C.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[O.ctaPrimary,` `,(0,C.jsx)(u,{size:16})]}),onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_agent_handoff_header`,...M})}}),(0,C.jsxs)(`main`,{className:`max-w-5xl mx-auto px-6 pb-24 space-y-12`,children:[(0,C.jsxs)(`section`,{className:`max-w-3xl mx-auto text-center space-y-4`,children:[(0,C.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:[(0,C.jsx)(h,{size:14}),O.badge]}),(0,C.jsx)(`h1`,{className:`text-3xl md:text-5xl font-black leading-tight`,children:O.title}),(0,C.jsx)(`p`,{className:`text-slate-300 text-lg leading-relaxed`,children:O.subtitle}),(0,C.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3 justify-center pt-2`,children:[(0,C.jsxs)(`a`,{href:P,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_agent_handoff_hero`,...M}),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:[O.ctaPrimary,` `,(0,C.jsx)(u,{size:16})]}),(0,C.jsxs)(`a`,{href:R,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_sample_project_hero`,...M}),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:[O.openSample,` `,(0,C.jsx)(u,{size:16})]})]}),(0,C.jsx)(b,{sectionId:`agent-handoff`,lang:D,prompt:O.agentPrompt,promptTitle:O.agentPromptTitle,promptBody:O.agentPromptBody,promptNote:O.agentPromptNote,guideHref:`/tools/agent-cli/?entry_source=five_panel_screenshot_framework_agent_handoff#agent-bootstrap`,className:`max-w-4xl mx-auto text-left`,onPromptCopied:e=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`copy_agent_prompt`,client:e.id}),onBundleCopied:e=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`copy_bootstrap_bundle_${e.id}`,client:e.id,...M}),onClientCommandCopied:e=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`copy_client_bootstrap_${e.id}`,client:e.id,...M}),onClientDownload:e=>r(`tool_download`,{tool:`five_panel_screenshot_framework`,asset:`client_bootstrap_${e.id}`,client:e.id,...M}),onGuideClick:(e,t)=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_agent_handoff_guide`,client:t.id,...M})}),(0,C.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:[(0,C.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold`,children:O.heroCliTitle}),(0,C.jsx)(`p`,{className:`text-xs text-slate-400`,children:O.heroCliNote}),(0,C.jsx)(`p`,{className:`text-xs text-slate-500`,children:O.heroCliSummary}),(0,C.jsx)(f,{value:O.heroCliCmd,onCopied:()=>{n({type:`success`,message:O.toastCopied}),r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`copy_cli_hero`})},onCopyFailed:()=>n({type:`error`,message:O.toastCopyFailed}),className:`inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold`,children:({copyLabel:e,copyState:t})=>(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(p,{size:14}),t===`idle`?O.heroCliCopyLabel:e||K]})}),(0,C.jsxs)(`details`,{className:`group`,open:J,children:[(0,C.jsxs)(`summary`,{className:`flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none`,children:[(0,C.jsx)(`span`,{children:q}),(0,C.jsx)(d,{size:14,className:`text-slate-500 transition-transform duration-200 group-open:rotate-180`})]}),(0,C.jsx)(`div`,{className:`mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3`,children:(0,C.jsx)(`pre`,{className:`text-xs text-slate-200 whitespace-pre-wrap`,children:O.heroCliCmd})})]}),(0,C.jsxs)(`div`,{className:`pt-1 space-y-2`,children:[(0,C.jsx)(`div`,{className:`text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold`,children:O.heroCliTemplatesLabel}),(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,C.jsx)(`a`,{href:`/downloads/shipscreens-agent-cli-config.yml`,download:!0,onClick:()=>r(`tool_download`,{tool:`five_panel_screenshot_framework`,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:O.heroCliConfigLabel}),(0,C.jsx)(`a`,{href:`/downloads/shipscreens-agent-cli-copy.csv`,download:!0,onClick:()=>r(`tool_download`,{tool:`five_panel_screenshot_framework`,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:O.heroCliCsvLabel})]})]})]}),(0,C.jsx)(x,{title:D===`ja`?`詳細: CLIガードレール + Pro解除`:`Advanced: CLI guardrails + Pro unlock`,codeToggleLabel:q,copyButtonLabel:K,preflightHref:`/tools/agent-cli/#preflight`,onPreflightClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_cli_preflight`}),proUnlockTitle:O.proUnlockTitle,proUnlockBody:O.proUnlockBody,proUnlockCmd:O.proUnlockCmd,proUnlockNote:O.proUnlockNote,onProUnlockCopied:()=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`copy_cli_pro_unlock`})}),(0,C.jsx)(_,{compact:!0,href:`/tools/agent-cli/#preflight`,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_cli_preflight_card`}),className:`max-w-xl mx-auto`})]}),(0,C.jsx)(y,{className:`max-w-4xl mx-auto w-full`}),(0,C.jsxs)(`section`,{className:`bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3`,children:[(0,C.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:O.introTitle}),(0,C.jsx)(`ul`,{className:`text-sm text-slate-300 list-disc pl-5 space-y-1`,children:O.introBullets.map(e=>(0,C.jsx)(`li`,{children:e},e))}),O.hookRule&&(0,C.jsx)(`p`,{className:`text-xs text-amber-300`,children:O.hookRule})]}),(0,C.jsxs)(`section`,{className:`space-y-4`,children:[(0,C.jsx)(`h2`,{className:`text-xl font-bold text-white`,children:O.hookExamplesTitle}),(0,C.jsx)(`div`,{className:`grid md:grid-cols-2 gap-4`,children:O.hookExamples.map(e=>(0,C.jsxs)(`div`,{className:`rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-3`,children:[(0,C.jsxs)(`div`,{className:`space-y-1`,children:[(0,C.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold`,children:O.hookExamplesBadLabel}),(0,C.jsxs)(`div`,{className:`text-sm text-slate-200`,children:[`"`,e.bad,`"`]})]}),(0,C.jsxs)(`div`,{className:`space-y-1`,children:[(0,C.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold`,children:O.hookExamplesGoodLabel}),(0,C.jsxs)(`div`,{className:`text-sm text-white font-semibold`,children:[`"`,e.good,`"`]})]})]},`${e.bad}-${e.good}`))})]}),(0,C.jsxs)(`section`,{className:`space-y-4`,children:[(0,C.jsx)(`h2`,{className:`text-xl font-bold text-white`,children:O.panelsTitle}),(0,C.jsx)(`div`,{className:`grid md:grid-cols-2 gap-4`,children:O.panelCards.map((e,t)=>(0,C.jsxs)(`div`,{className:`rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-2`,children:[(0,C.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,C.jsxs)(`div`,{className:`text-sm font-bold text-slate-100`,children:[t+1,`. `,e.name]}),(0,C.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Panel`})]}),(0,C.jsx)(`div`,{className:`text-sm text-slate-300`,children:e.goal}),(0,C.jsxs)(`div`,{className:`pt-2 space-y-1 text-xs text-slate-400`,children:[(0,C.jsx)(`div`,{children:e.header}),(0,C.jsx)(`div`,{children:e.subtitle}),(0,C.jsx)(`div`,{className:`text-slate-200 font-semibold`,children:e.example})]})]},e.name))})]}),(0,C.jsx)(`section`,{className:`space-y-4`,children:(0,C.jsxs)(`div`,{className:`bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4`,children:[(0,C.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:O.toolsTitle}),(0,C.jsxs)(`div`,{className:`space-y-2`,children:[(0,C.jsx)(`a`,{href:`/tools/screenshot-workload-calculator/`,onClick:()=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_calculator`}),className:`text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4 font-semibold`,children:O.calculatorLink}),(0,C.jsx)(`div`,{className:`text-sm text-slate-300`,children:O.calculatorCaption})]})]})}),(0,C.jsxs)(`section`,{className:`bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4`,children:[(0,C.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:O.downloadTitle}),(0,C.jsx)(`p`,{className:`text-sm text-slate-300`,children:O.downloadCaption}),(0,C.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3`,children:[(0,C.jsxs)(f,{value:N,onCopied:()=>{n({type:`success`,message:O.toastCopied}),r(`tool_download`,{tool:`five_panel_screenshot_framework`,asset:`markdown_clipboard`})},onCopyFailed:()=>n({type:`error`,message:O.toastCopyFailed}),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`,"aria-label":O.copyButton,children:[(0,C.jsx)(p,{size:16}),O.copyButton]}),(0,C.jsxs)(`button`,{type:`button`,onClick:Y,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:[(0,C.jsx)(m,{size:16}),O.downloadButton]})]})]}),(0,C.jsxs)(`section`,{className:`bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4`,children:[(0,C.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:O.sampleTitle}),(0,C.jsx)(`p`,{className:`text-sm text-slate-300`,children:O.sampleCaption}),(0,C.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3`,children:[(0,C.jsxs)(`a`,{href:P,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_agent_handoff_footer`,...M}),className:`inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.02] transition w-full`,children:[O.ctaPrimary,` `,(0,C.jsx)(u,{size:16})]}),(0,C.jsxs)(`a`,{href:R,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_sample_project_footer`,...M}),className:`inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full`,children:[O.openSample,` `,(0,C.jsx)(u,{size:16})]})]})]}),(0,C.jsxs)(`section`,{className:`max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4`,children:[(0,C.jsx)(`p`,{className:`text-sm text-slate-400`,children:O.footerText}),(0,C.jsx)(`div`,{className:`text-lg font-bold text-white`,children:k.title||O.footerCta}),(0,C.jsx)(`div`,{className:`text-sm text-slate-300 leading-relaxed`,children:k.body}),A.length>0&&(0,C.jsx)(`ul`,{className:`space-y-2 text-sm text-slate-300 list-disc pl-5`,children:A.map(e=>(0,C.jsx)(`li`,{children:e},e))}),(0,C.jsxs)(`a`,{href:z,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_design_partner_offer`,...M}),className:`inline-flex items-center gap-2 text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4`,children:[V,` `,(0,C.jsx)(u,{size:14})]}),(0,C.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3`,children:[(0,C.jsxs)(`a`,{href:G,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`email_design_partner`,...M}),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:[k.emailCta||t(`landing.partner.emailCta`),` `,(0,C.jsx)(u,{size:16})]}),(0,C.jsx)(`a`,{href:`https://x.com/shipscreenscom`,target:`_blank`,rel:`noopener noreferrer`,onClick:()=>r(`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`dm_design_partner`,...M}),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 font-bold hover:bg-slate-900 transition`,children:k.dmCta||t(`landing.partner.dmCta`)}),(0,C.jsxs)(`a`,{href:B,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`open_pay_first_from_partner_block`,...M}),className:`flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-emerald-500/40 bg-emerald-500/10 text-emerald-100 font-bold hover:bg-emerald-500/15 transition`,children:[k.payFirstCta||t(`landing.partner.payFirstCta`),` `,(0,C.jsx)(u,{size:16})]})]}),(0,C.jsxs)(`div`,{className:`text-xs text-slate-500`,children:[k.emailLabel||t(`landing.partner.emailLabel`),` `,(0,C.jsx)(`a`,{href:`mailto:${H}`,className:`underline underline-offset-4 hover:text-white`,children:H})]})]})]}),(0,C.jsx)(v,{primary:{label:O.ctaPrimary,href:P,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`sticky_primary_agent`,...M})},secondary:{label:O.openSample,href:R,onClick:e=>i(e,`tool_cta_click`,{tool:`five_panel_screenshot_framework`,cta:`sticky_secondary`,...M})}})]})};export{D as default};
|
|
62
|
+
//# sourceMappingURL=FivePanelFramework-C4yq58kM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FivePanelFramework-C4yq58kM.js","names":[],"sources":["../../src/pages/FivePanelFramework.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from 'react';\nimport { ArrowRight, ChevronDown, Copy, Download, LayoutGrid } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport AgentHandoffPanel from '../components/AgentHandoffPanel';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport CopyButton from '../components/CopyButton';\nimport FitPanel from '../components/FitPanel';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport ToolGuardrailsPanel from '../components/ToolGuardrailsPanel';\nimport { useToast } from '../context/ToastContext';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\nimport { getAttributionParams } from '../lib/attribution';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst buildMarkdown = (lang) => {\n if (lang === 'ja') {\n return `# 5枚構成 スクショフレームワーク\n\nApp Store / Google Play のスクショを「5枚で伝える」ための構成テンプレです。\n\n## 1) Hook(結論)\n- 何が変わるか(成果)を1行で\n- 例: スクショ更新をCIの1回再実行で完了\n\n## 2) Problem(痛み)\n- いま起きている苦痛を具体化(数字が強い)\n- 例: 5枚×10言語×4サイズ = 200枚\n\n## 3) Proof(根拠)\n- 信用・再現性の材料(仕様・実績・数字)\n- 例: Fastlane公式パス(dir/ZIP) / 再現性のある出力\n\n## 4) How(やり方)\n- どうやって実現するか(フローを短く)\n- 例: master layout → CSV/JSON copy → Export\n\n## 5) CTA(次の一手)\n- 読んだ後に何をすればいいかを1つに絞る\n- 例: 無料で試す / サンプルから開始\n\n## メモ\n- 翻訳は外部でOK(ShipScreensは翻訳しない)\n- UIは大きく(~80%目安)\n- キャプションは短く(6-8語目安)\n- 確認: 見出しが他の多くのアプリにも当てはまるなら、成果を具体化して書き直す\n`;\n }\n\n return `# 5-panel screenshot framework\n\nA simple structure to explain your app in five store screenshots.\n\n## 1) Hook (Outcome)\n- Say the result in one line\n- Example: Ship screenshot updates in one CI rerun\n\n## 2) Problem (Pain)\n- Make the pain concrete (numbers work)\n- Example: 5 shots × 10 locales × 4 sizes = 200 images\n\n## 3) Proof (Credibility)\n- Give confidence (specs, numbers, workflow fit)\n- Example: upload-ready output (folders/ZIP) / Reproducible reruns\n\n## 4) How (Workflow)\n- Show the shortest path in steps\n- Example: Master layout → CSV/JSON copy → export\n\n## 5) CTA (Next step)\n- One clear action\n- Example: Try it free / Start from a sample project\n\n## Notes\n- Bring your translations; ShipScreens does not translate.\n- Keep UI big (~80% of the frame).\n- Keep captions short (<= 6-8 words).\n- Clarity check: if the headline could fit many apps, make the outcome more concrete.\n`;\n};\n\nconst COPY = {\n en: {\n badge: 'Screenshot structure template',\n title: '5-panel Screenshot Framework',\n subtitle:\n 'Use this structure even if you already have design tools: Hook -> Problem -> Proof -> How -> CTA keeps App Store / Google Play screenshots consistent across sizes/locales and release reruns without forcing a generic visual style.',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard -> agent-run --stage (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP + staged upload root + proof reports.',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n agentPromptTitle: 'Recommended: let your coding agent lock the 5-panel story into the release step',\n agentPromptBody: 'Use this when panel #1 is vague or the 5-panel order keeps drifting across sizes/locales.',\n agentPrompt:\n 'Use ShipScreens to turn our current screenshots into a deterministic 5-panel release flow. Keep the existing design workflow, inspect this repo, choose the best path for this workspace (workspace-local MCP if available, otherwise pure CLI), make panel #1 specific to one outcome and audience, lock Hook -> Problem -> Proof -> How -> CTA order across sizes/locales, run verify/stage before upload, and return a short report with output paths, warnings, and next steps. Only ask me if device or locale scope or panel #1 messaging is unclear.',\n agentPromptNote:\n 'Best flow: hand off once, then review panel #1 clarity and the first export.',\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix batch exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun agent-run with --require-pro.',\n navTools: 'Tools',\n introTitle: 'Use this when…',\n introBullets: [\n 'Manual Figma/Canva edits (or AI drafts) keep drifting across sizes/locales',\n 'App Review/ASO feedback says the first screenshot is unclear',\n 'Screenshots look generic because the message is vague, not because your style is wrong',\n 'Localization makes copy decisions expensive',\n 'You want a rerunnable flow (sample → edit → export)',\n ],\n hookRule:\n 'Clarity check: if your Hook could fit many apps, it is too broad. Make one concrete outcome explicit.',\n hookExamplesTitle: 'Hook examples (vague vs concrete)',\n hookExamplesBadLabel: 'Vague',\n hookExamplesGoodLabel: 'Concrete',\n hookExamples: [\n {\n bad: 'Learn everything about finance',\n good: 'Build a weekly budget and track spending in 10 minutes',\n },\n {\n bad: 'A smarter productivity app',\n good: 'Plan your day in 3 tasks and finish by 6pm',\n },\n ],\n panelsTitle: 'The 5 panels',\n panelCards: [\n {\n name: 'Hook',\n goal: 'Say the outcome in one line.',\n header: 'Header: concrete outcome',\n subtitle: 'Subtitle: for who / how fast',\n example: 'Example: Ship screenshot updates in one CI rerun',\n },\n {\n name: 'Problem',\n goal: 'Make the pain concrete (numbers help).',\n header: 'Header: what is painful',\n subtitle: 'Subtitle: why it costs time',\n example: 'Example: 5×10×4 = 200 images',\n },\n {\n name: 'Proof',\n goal: 'Add credibility and reduce doubt.',\n header: 'Header: why trust this',\n subtitle: 'Subtitle: spec / workflow fit',\n example: 'Example: upload-ready output',\n },\n {\n name: 'How',\n goal: 'Show the shortest reproducible workflow.',\n header: 'Header: the steps',\n subtitle: 'Subtitle: what you need',\n example: 'Example: Master layout → CSV → Export',\n },\n {\n name: 'CTA',\n goal: 'One clear next action.',\n header: 'Header: try / start',\n subtitle: 'Subtitle: what happens next',\n example: 'Example: Try it free',\n },\n ],\n toolsTitle: 'Assets',\n calculatorLink: 'Screenshot Workload Calculator',\n calculatorCaption: 'Quantify the device × locale explosion and pick size buckets.',\n sampleTitle: 'Next: turn this 5-panel script into a repeatable export',\n sampleCaption:\n 'Use ShipScreens as the build step that keeps the 5-panel structure while the agent chooses MCP or CLI. Use the sample project when you want to test the browser fallback yourself.',\n openSample: 'Open sample project',\n downloadTitle: 'Download',\n downloadCaption: 'Save the framework as Markdown (easy to share with teammates).',\n copyButton: 'Copy Markdown',\n downloadButton: 'Download Markdown',\n toastCopied: 'Copied to clipboard',\n toastCopyFailed: 'Copy failed. Please use Download.',\n ctaPrimary: 'Use your agent to structure + export',\n footerText: 'Want feedback on your store assets pipeline and screenshot positioning? We are talking to early users.',\n footerCta: 'Open 15-min review intake',\n },\n ja: {\n badge: '構成テンプレ(5枚)',\n title: '5枚構成 スクショフレームワーク',\n subtitle: '既存ツールがあっても、Hook -> Problem -> Proof -> How -> CTA でサイズ/言語/リリース再実行のブレを抑える5枚構成テンプレ。見た目を画一化するためではなく、訴求順を固定するための型です。',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard -> agent-run --stage(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP + staged upload root + proof report。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens agent-run --mode raw --zip --out out/agent --stage',\n ].join('\\n'),\n agentPromptTitle: '既定導線: coding agent に5枚構成をリリース工程に載せる',\n agentPromptBody: '1枚目訴求が曖昧だったり、5枚の順序がサイズ/言語で崩れるなら、まずこれを渡します。',\n agentPrompt:\n 'ShipScreens を使って、今あるスクリーンショットを再現できる5枚構成のリリース工程に変えてください。既存のデザイン運用は維持し、この repo を確認して、このプロジェクトで MCP が使えるならそれを使い、無ければ CLI を使ってください。1枚目で成果と対象ユーザーを具体化し、Hook -> Problem -> Proof -> How -> CTA の順序をサイズ/言語でも固定し、verify と stage を実行し、出力パス・警告・次の作業を短く報告してください。端末/言語スコープか1枚目訴求が不明なときだけ確認してください。',\n agentPromptNote:\n 'おすすめは、1回指示して 1枚目訴求と最初のエクスポートだけ確認することです。',\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は agent-run --require-pro で再実行。',\n navTools: 'ツール',\n introTitle: 'こんな時に使う',\n introBullets: [\n '手作業/AI下書きがサイズ/言語でズレる',\n 'App Review/ASO で「最初のスクショが伝わらない」と言われたとき',\n '見た目ではなく訴求の曖昧さで「よくある画面」に見えてしまう',\n '多言語対応でコピーが長くなりがち',\n '再実行できる流れ(サンプル→編集→Export)が欲しい',\n ],\n hookRule: '確認: Hookが他の多くのアプリにも当てはまるなら、成果を具体化してください。',\n hookExamplesTitle: 'Hook例(曖昧 vs 具体)',\n hookExamplesBadLabel: '曖昧',\n hookExamplesGoodLabel: '具体',\n hookExamples: [\n {\n bad: 'お金のことを全部学べる',\n good: '10分で週次予算を作って、支出を自動で把握する',\n },\n {\n bad: 'もっと賢い生産性アプリ',\n good: '毎日の3タスクを整理して、18時までに終わらせる',\n },\n ],\n panelsTitle: '5枚の役割',\n panelCards: [\n { name: 'Hook', goal: '結論(成果)を1行で。', header: 'ヘッダー: 具体的な成果', subtitle: 'サブ: 誰に/どれくらい', example: '例: スクショ更新をCIの1回再実行で完了' },\n { name: 'Problem', goal: '痛みを具体化(数字が強い)。', header: 'ヘッダー: 何がつらい', subtitle: 'サブ: なぜ時間が溶ける', example: '例: 5×10×4 = 200枚' },\n { name: 'Proof', goal: '不安を減らす材料。', header: 'ヘッダー: 根拠', subtitle: 'サブ: 仕様/ワークフロー適合', example: '例: Fastlane対応出力' },\n { name: 'How', goal: '短いフローで再現性を。', header: 'ヘッダー: 手順', subtitle: 'サブ: 必要なもの', example: '例: master→CSV→Export' },\n { name: 'CTA', goal: '次の一手を1つに。', header: 'ヘッダー: 試す/開始', subtitle: 'サブ: 次に起きること', example: '例: 無料で試す' },\n ],\n toolsTitle: '資産',\n calculatorLink: 'スクショ作業量 計算ツール',\n calculatorCaption: '端末×言語の爆発とサイズバケットを先に把握。',\n sampleTitle: '次: この5枚構成を決定論的な export に変える',\n sampleCaption: '5枚構成を保ったまま coding agent に MCP/CLI を選ばせます。ブラウザ fallback を自分で触りたいときだけサンプルを開きます。',\n openSample: 'サンプルを開く',\n downloadTitle: 'ダウンロード',\n downloadCaption: 'Markdownとして保存(チーム共有しやすい)。',\n copyButton: 'Markdownをコピー',\n downloadButton: 'Markdownをダウンロード',\n toastCopied: 'コピーしました',\n toastCopyFailed: 'コピーできませんでした。ダウンロードをご利用ください。',\n ctaPrimary: 'AIエージェントに構成 + export を任せる',\n footerText: 'ストア素材パイプラインや訴求の相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。',\n footerCta: '15分レビューを開く',\n },\n};\n\nconst FivePanelFramework = () => {\n const { i18n, t } = useTranslation();\n const { addToast } = useToast();\n\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n const partnerCopy = t('landing.partner', { returnObjects: true }) || {};\n const partnerScopeBullets = Array.isArray(partnerCopy.scopeBullets) ? partnerCopy.scopeBullets.filter(Boolean) : [];\n const attribution = getAttributionParams();\n const inboundEntrySource = attribution.entry_source || '';\n const isQuickShipPath = inboundEntrySource === 'landing_entry_quick_ship_iphone_only';\n const quickShipPathParams = isQuickShipPath ? { quick_ship_path: 'iphone_only' } : {};\n\n usePageTitle('titles.fivePanelFramework', {\n defaultValue: lang === 'ja' ? '5枚構成テンプレ - ShipScreens' : '5-panel Screenshot Framework - ShipScreens',\n });\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'five_panel_screenshot_framework' });\n if (isQuickShipPath) {\n trackEvent('quick_ship_path_progress', { step: 'five_panel_view' });\n }\n }, [isQuickShipPath]);\n\n const markdown = useMemo(() => buildMarkdown(lang), [lang]);\n const openAppHref = '/app/?sample=5panel&entry_source=five_panel_screenshot_framework_open_app_header';\n const agentHandoffHref = '#agent-handoff';\n const agentCliGuideHref = '/tools/agent-cli/?entry_source=five_panel_screenshot_framework_agent_handoff#agent-bootstrap';\n const sampleProjectEntrySource = isQuickShipPath\n ? 'quick_ship_iphone_only_open_sample_project'\n : 'five_panel_screenshot_framework_open_sample_project';\n const designPartnerEntrySource = isQuickShipPath\n ? 'quick_ship_iphone_only_design_partner_offer'\n : 'five_panel_screenshot_framework_design_partner_offer';\n const payFirstPartnerEntrySource = isQuickShipPath\n ? 'quick_ship_iphone_only_pay_first_partner_block'\n : 'five_panel_screenshot_framework_pay_first_partner_block';\n const sampleProjectHref = `/app/?sample=5panel&entry_source=${sampleProjectEntrySource}`;\n const designPartnerHref = `/design-partner/?entry_source=${designPartnerEntrySource}&scope=iphone_first&workflow=figma&blocker=panel_hook`;\n const payFirstPartnerHref = `/pricing?offer=pay_first&entry_source=${payFirstPartnerEntrySource}`;\n const designPartnerOfferLabel = lang === 'ja' ? 'オファー詳細を見る' : 'See offer details';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const partnerSubject = t('landing.partner.emailSubject', { defaultValue: 'ShipScreens release setup review' });\n const partnerBody = t('landing.partner.emailBody', { defaultValue: '' });\n const partnerMailto = `mailto:${supportEmail}?subject=${encodeURIComponent(partnerSubject)}&body=${encodeURIComponent(\n partnerBody\n )}`;\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n const codeToggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\n const defaultCodeOpen = typeof window === 'undefined' ? true : window.matchMedia('(min-width: 640px)').matches;\n\n const downloadMarkdown = useCallback(() => {\n try {\n const content = `\\ufeff${markdown}`;\n const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = lang === 'ja' ? 'shipscreens-5panel-framework-ja.md' : 'shipscreens-5panel-framework.md';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown' });\n } catch {\n // noop\n }\n }, [lang, markdown]);\n\n return (\n <div className=\"min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'open_app_header' })\n }\n primaryCta={{\n href: agentHandoffHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {copy.ctaPrimary} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_agent_handoff_header',\n ...quickShipPathParams,\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-12\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <LayoutGrid size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={agentHandoffHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_agent_handoff_hero',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctaPrimary} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_sample_project_hero',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition\"\n >\n {copy.openSample} <ArrowRight size={16} />\n </a>\n </div>\n <AgentHandoffPanel\n sectionId=\"agent-handoff\"\n lang={lang}\n prompt={copy.agentPrompt}\n promptTitle={copy.agentPromptTitle}\n promptBody={copy.agentPromptBody}\n promptNote={copy.agentPromptNote}\n guideHref={agentCliGuideHref}\n className=\"max-w-4xl mx-auto text-left\"\n onPromptCopied={(client) =>\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_agent_prompt', client: client.id })\n }\n onBundleCopied={(client) =>\n trackEvent('tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: `copy_bootstrap_bundle_${client.id}`,\n client: client.id,\n ...quickShipPathParams,\n })\n }\n onClientCommandCopied={(client) =>\n trackEvent('tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: `copy_client_bootstrap_${client.id}`,\n client: client.id,\n ...quickShipPathParams,\n })\n }\n onClientDownload={(client) =>\n trackEvent('tool_download', {\n tool: 'five_panel_screenshot_framework',\n asset: `client_bootstrap_${client.id}`,\n client: client.id,\n ...quickShipPathParams,\n })\n }\n onGuideClick={(event, client) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_agent_handoff_guide',\n client: client.id,\n ...quickShipPathParams,\n })\n }\n />\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.heroCliTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.heroCliNote}</p>\n <p className=\"text-xs text-slate-500\">{copy.heroCliSummary}</p>\n <CopyButton\n value={copy.heroCliCmd}\n onCopied={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_hero' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <Copy size={14} />\n {copyState === 'idle' ? copy.heroCliCopyLabel : copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <details className=\"group\" open={defaultCodeOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{codeToggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <div className=\"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroCliCmd}</pre>\n </div>\n </details>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n </div>\n <ToolGuardrailsPanel\n title={lang === 'ja' ? '詳細: CLIガードレール + Pro解除' : 'Advanced: CLI guardrails + Pro unlock'}\n codeToggleLabel={codeToggleLabel}\n copyButtonLabel={copyButtonLabel}\n preflightHref=\"/tools/agent-cli/#preflight\"\n onPreflightClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight',\n })\n }\n proUnlockTitle={copy.proUnlockTitle}\n proUnlockBody={copy.proUnlockBody}\n proUnlockCmd={copy.proUnlockCmd}\n proUnlockNote={copy.proUnlockNote}\n onProUnlockCopied={() =>\n trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'copy_cli_pro_unlock' })\n }\n />\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_cli_preflight_card',\n })\n }\n className=\"max-w-xl mx-auto\"\n />\n </section>\n\n <FitPanel className=\"max-w-4xl mx-auto w-full\" />\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <h2 className=\"text-lg font-bold text-white\">{copy.introTitle}</h2>\n <ul className=\"text-sm text-slate-300 list-disc pl-5 space-y-1\">\n {copy.introBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n {copy.hookRule && <p className=\"text-xs text-amber-300\">{copy.hookRule}</p>}\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.hookExamplesTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.hookExamples.map((item) => (\n <div key={`${item.bad}-${item.good}`} className=\"rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-3\">\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold\">\n {copy.hookExamplesBadLabel}\n </div>\n <div className=\"text-sm text-slate-200\">\"{item.bad}\"</div>\n </div>\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold\">\n {copy.hookExamplesGoodLabel}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.panelsTitle}</h2>\n <div className=\"grid md:grid-cols-2 gap-4\">\n {copy.panelCards.map((panel, idx) => (\n <div key={panel.name} className=\"rounded-2xl border border-slate-800 bg-slate-950 p-5 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-bold text-slate-100\">\n {idx + 1}. {panel.name}\n </div>\n <div className=\"text-xs text-slate-500\">Panel</div>\n </div>\n <div className=\"text-sm text-slate-300\">{panel.goal}</div>\n <div className=\"pt-2 space-y-1 text-xs text-slate-400\">\n <div>{panel.header}</div>\n <div>{panel.subtitle}</div>\n <div className=\"text-slate-200 font-semibold\">{panel.example}</div>\n </div>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-4\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.toolsTitle}</h2>\n <div className=\"space-y-2\">\n <a\n href=\"/tools/screenshot-workload-calculator/\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'five_panel_screenshot_framework', cta: 'open_calculator' })}\n className=\"text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4 font-semibold\"\n >\n {copy.calculatorLink}\n </a>\n <div className=\"text-sm text-slate-300\">{copy.calculatorCaption}</div>\n </div>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.downloadTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.downloadCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={markdown}\n onCopied={() => {\n addToast({ type: 'success', message: copy.toastCopied });\n trackEvent('tool_download', { tool: 'five_panel_screenshot_framework', asset: 'markdown_clipboard' });\n }}\n onCopyFailed={() => addToast({ type: 'error', message: copy.toastCopyFailed })}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n aria-label={copy.copyButton}\n >\n <Copy size={16} />\n {copy.copyButton}\n </CopyButton>\n <button\n type=\"button\"\n onClick={downloadMarkdown}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadButton}\n </button>\n </div>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-lg font-bold text-white\">{copy.sampleTitle}</h2>\n <p className=\"text-sm text-slate-300\">{copy.sampleCaption}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={agentHandoffHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_agent_handoff_footer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-white text-slate-900 font-bold hover:scale-[1.02] transition w-full\"\n >\n {copy.ctaPrimary} <ArrowRight size={16} />\n </a>\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_sample_project_footer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full\"\n >\n {copy.openSample} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <p className=\"text-sm text-slate-400\">{copy.footerText}</p>\n <div className=\"text-lg font-bold text-white\">{partnerCopy.title || copy.footerCta}</div>\n <div className=\"text-sm text-slate-300 leading-relaxed\">{partnerCopy.body}</div>\n {partnerScopeBullets.length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-300 list-disc pl-5\">\n {partnerScopeBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n )}\n <a\n href={designPartnerHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_design_partner_offer',\n ...quickShipPathParams,\n })\n }\n className=\"inline-flex items-center gap-2 text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4\"\n >\n {designPartnerOfferLabel} <ArrowRight size={14} />\n </a>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={partnerMailto}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'email_design_partner',\n ...quickShipPathParams,\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {partnerCopy.emailCta || t('landing.partner.emailCta')} <ArrowRight size={16} />\n </a>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() =>\n trackEvent('tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'dm_design_partner',\n ...quickShipPathParams,\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition\"\n >\n {partnerCopy.dmCta || t('landing.partner.dmCta')}\n </a>\n <a\n href={payFirstPartnerHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'open_pay_first_from_partner_block',\n ...quickShipPathParams,\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-emerald-500/40 bg-emerald-500/10 text-emerald-100 font-bold hover:bg-emerald-500/15 transition\"\n >\n {partnerCopy.payFirstCta || t('landing.partner.payFirstCta')} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"text-xs text-slate-500\">\n {partnerCopy.emailLabel || t('landing.partner.emailLabel')}{' '}\n <a href={`mailto:${supportEmail}`} className=\"underline underline-offset-4 hover:text-white\">\n {supportEmail}\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.ctaPrimary,\n href: agentHandoffHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_primary_agent',\n ...quickShipPathParams,\n }),\n }}\n secondary={{\n label: copy.openSample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'five_panel_screenshot_framework',\n cta: 'sticky_secondary',\n ...quickShipPathParams,\n }),\n }}\n />\n </div>\n );\n};\n\nexport default FivePanelFramework;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./chunk-BHe-jwch.js";import{S as t,b as n,x as r}from"./index-D7D6ZRCW.js";import{n as i,r as a}from"./LanguageSwitcher-hFv9zl1u.js";import{n as o,t as s}from"./eye-CHvLhG2r.js";import{t as c}from"./SiteHeader-CJqQ0pL3.js";import{_ as l,a as u,c as d,d as f,f as p,g as m,h,l as g,m as _,p as v,s as y,t as b,u as x,v as S,y as C}from"./useAuth-CoS4r8yi.js";var w=e=>m(g,f(`ForgotPassword`),x(),{...d,...e});async function T(e){let{username:t}=e;_(!!t,h.EmptyResetPasswordUsername);let n=l.getConfig().Auth?.Cognito;C(n);let{userPoolClientId:r,userPoolId:i,userPoolEndpoint:a}=n,o=e.options?.clientMetadata,s=u({username:t,userPoolId:i,userPoolClientId:r}),c=(await w({endpointResolver:y({endpointOverride:a})})({region:v(i),userAgentValue:p(S.ResetPassword)},{Username:t,ClientMetadata:o,ClientId:r,UserContextData:s})).CodeDeliveryDetails;return{isPasswordReset:!1,nextStep:{resetPasswordStep:`CONFIRM_RESET_PASSWORD_WITH_CODE`,codeDeliveryDetails:{deliveryMedium:c?.DeliveryMedium,destination:c?.Destination,attributeName:c?.AttributeName}}}}var E=e=>m(g,f(`ConfirmForgotPassword`),x(),{...d,...e});async function D(e){let t=l.getConfig().Auth?.Cognito;C(t);let{userPoolClientId:n,userPoolId:r,userPoolEndpoint:i}=t,{username:a,newPassword:o}=e;_(!!a,h.EmptyConfirmResetPasswordUsername),_(!!o,h.EmptyConfirmResetPasswordNewPassword);let s=e.confirmationCode;_(!!s,h.EmptyConfirmResetPasswordConfirmationCode);let c=e.options?.clientMetadata,d=u({username:a,userPoolId:r,userPoolClientId:n});await E({endpointResolver:y({endpointOverride:i})})({region:v(t.userPoolId),userAgentValue:p(S.ConfirmResetPassword)},{Username:a,ConfirmationCode:s,Password:o,ClientMetadata:c,ClientId:t.userPoolClientId,UserContextData:d})}var O=e(t(),1),k=n(),A=()=>{if(typeof window>`u`)return null;let e=new URLSearchParams(window.location.search).get(`next`);return!e||!e.startsWith(`/`)||e.startsWith(`//`)?null:e},j=()=>{let{t:e}=r();a(`titles.forgotPassword`);let{isAuthenticated:t,isLoading:n}=b(),l=A(),[u,d]=(0,O.useState)(`request`),[f,p]=(0,O.useState)(``),[m,h]=(0,O.useState)(``),[g,_]=(0,O.useState)(``),[v,y]=(0,O.useState)(!1),[x,S]=(0,O.useState)(``),[C,w]=(0,O.useState)(``),[E,j]=(0,O.useState)(!1);return(0,O.useEffect)(()=>{!n&&t&&(window.location.href=l||`/app/`)},[t,n,l]),(0,k.jsxs)(`div`,{className:`min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white flex flex-col`,children:[(0,k.jsx)(i,{}),(0,k.jsx)(c,{variant:`dark`,showX:!1}),(0,k.jsx)(`main`,{className:`flex-1 flex items-center justify-center px-4 pb-12`,children:(0,k.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:[(0,k.jsxs)(`div`,{className:`text-center space-y-2`,children:[(0,k.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:(0,k.jsx)(`span`,{className:`font-black text-lg`,children:`S`})}),(0,k.jsx)(`h1`,{className:`text-2xl font-bold`,children:e(`auth.forgot.title`)}),(0,k.jsx)(`p`,{className:`text-slate-400 text-sm`,children:e(`auth.forgot.subtitle`)})]}),u===`request`&&(0,k.jsxs)(`form`,{onSubmit:async t=>{t.preventDefault(),S(``),w(``),j(!0);try{await T({username:f}),S(e(`auth.forgot.codeSent`)),d(`confirm`)}catch(t){w(e(`auth.errors.${t?.name||t?.code}`,e(`auth.errors.default`)))}finally{j(!1)}},className:`space-y-4`,children:[(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsx)(`label`,{htmlFor:`forgot-email`,className:`block text-sm text-slate-300`,children:e(`auth.email`)}),(0,k.jsx)(`input`,{id:`forgot-email`,type:`email`,value:f,onChange:e=>p(e.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-hidden focus:ring-2 focus:ring-blue-500`,placeholder:e(`auth.placeholders.email`)})]}),C&&(0,k.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}),x&&(0,k.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:x}),(0,k.jsx)(`button`,{type:`submit`,disabled:E,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:e(`auth.forgot.sendCode`)})]}),u===`confirm`&&(0,k.jsxs)(`form`,{onSubmit:async t=>{t.preventDefault(),S(``),w(``),j(!0);try{await D({username:f,confirmationCode:m,newPassword:g}),S(e(`auth.success.confirm`)),window.location.href=l?`/signin?next=${encodeURIComponent(l)}`:`/signin`}catch(t){w(e(`auth.errors.${t?.name||t?.code}`,e(`auth.errors.default`)))}finally{j(!1)}},className:`space-y-4`,children:[(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsx)(`label`,{htmlFor:`forgot-email`,className:`block text-sm text-slate-300`,children:e(`auth.email`)}),(0,k.jsx)(`input`,{id:`forgot-email`,type:`email`,value:f,onChange:e=>p(e.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-hidden focus:ring-2 focus:ring-blue-500`,placeholder:e(`auth.placeholders.email`)})]}),(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsx)(`label`,{htmlFor:`forgot-code`,className:`block text-sm text-slate-300`,children:e(`auth.code`)}),(0,k.jsx)(`input`,{id:`forgot-code`,type:`text`,value:m,onChange:e=>h(e.target.value),required:!0,className:`w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-hidden focus:ring-2 focus:ring-blue-500`,placeholder:`123456`})]}),(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsx)(`label`,{htmlFor:`forgot-new-password`,className:`block text-sm text-slate-300`,children:e(`auth.forgot.newPassword`)}),(0,k.jsxs)(`div`,{className:`relative`,children:[(0,k.jsx)(`input`,{id:`forgot-new-password`,type:v?`text`:`password`,value:g,onChange:e=>_(e.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-hidden focus:ring-2 focus:ring-blue-500`,placeholder:e(`auth.placeholders.passwordNew`)}),(0,k.jsx)(`button`,{type:`button`,onClick:()=>y(e=>!e),className:`absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200`,"aria-label":v?e(`auth.actions.hidePassword`,{defaultValue:`Hide password`}):e(`auth.actions.showPassword`,{defaultValue:`Show password`}),title:v?e(`auth.actions.hidePassword`,{defaultValue:`Hide password`}):e(`auth.actions.showPassword`,{defaultValue:`Show password`}),children:v?(0,k.jsx)(o,{size:18}):(0,k.jsx)(s,{size:18})})]})]}),C&&(0,k.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}),x&&(0,k.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:x}),(0,k.jsx)(`button`,{type:`submit`,disabled:E,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:e(`auth.forgot.reset`)})]}),(0,k.jsxs)(`div`,{className:`text-center text-sm text-slate-400 space-y-1`,children:[(0,k.jsxs)(`div`,{children:[e(`auth.actions.haveAccount`),` `,(0,k.jsx)(`button`,{type:`button`,className:`text-blue-300 hover:text-blue-200 underline`,onClick:()=>{window.location.href=l?`/signin?next=${encodeURIComponent(l)}`:`/signin`},children:e(`auth.actions.goToSignIn`)})]}),(0,k.jsxs)(`div`,{className:`text-slate-500 text-xs`,children:[(0,k.jsx)(`div`,{children:e(`auth.helper.terms`)}),(0,k.jsxs)(`div`,{className:`mt-1 flex items-center justify-center gap-2`,children:[(0,k.jsx)(`a`,{href:`/terms`,className:`underline underline-offset-4 hover:text-slate-200`,children:e(`landing.footer.terms`)}),(0,k.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,k.jsx)(`a`,{href:`/privacy`,className:`underline underline-offset-4 hover:text-slate-200`,children:e(`landing.footer.privacy`)})]})]})]})]})})]})};export{j as default};
|
|
2
|
+
//# sourceMappingURL=ForgotPassword-KF_HFGyb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPassword-KF_HFGyb.js","names":[],"sources":["../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/resetPassword.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs","../../node_modules/aws-amplify/node_modules/@aws-amplify/auth/dist/esm/providers/cognito/apis/confirmResetPassword.mjs","../../src/pages/ForgotPassword.jsx"],"sourcesContent":["import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createForgotPasswordClient };\n//# sourceMappingURL=createForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Resets a user's password.\n *\n * @param input - The ResetPasswordInput object.\n * @returns ResetPasswordOutput\n * @throws -{@link ForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n **/\nasync function resetPassword(input) {\n const { username } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyResetPasswordUsername);\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const clientMetadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const forgotPassword = createForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const res = await forgotPassword({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ResetPassword),\n }, {\n Username: username,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n });\n const codeDeliveryDetails = res.CodeDeliveryDetails;\n return {\n isPasswordReset: false,\n nextStep: {\n resetPasswordStep: 'CONFIRM_RESET_PASSWORD_WITH_CODE',\n codeDeliveryDetails: {\n deliveryMedium: codeDeliveryDetails?.DeliveryMedium,\n destination: codeDeliveryDetails?.Destination,\n attributeName: codeDeliveryDetails?.AttributeName,\n },\n },\n };\n}\n\nexport { resetPassword };\n//# sourceMappingURL=resetPassword.mjs.map\n","import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createConfirmForgotPasswordClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('ConfirmForgotPassword'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createConfirmForgotPasswordClient };\n//# sourceMappingURL=createConfirmForgotPasswordClient.mjs.map\n","import { Amplify } from '@aws-amplify/core';\nimport { assertTokenProviderConfig, AuthAction } from '@aws-amplify/core/internals/utils';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation.mjs';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError.mjs';\nimport { getAuthUserAgentValue } from '../../../utils/getAuthUserAgentValue.mjs';\nimport { getUserContextData } from '../utils/userContextData.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../types/errors.mjs';\nimport { createConfirmForgotPasswordClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createConfirmForgotPasswordClient.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Confirms the new password and verification code to reset the password.\n *\n * @param input - The ConfirmResetPasswordInput object.\n * @throws -{@link ConfirmForgotPasswordException }\n * Thrown due to an invalid confirmation code or password.\n * @throws -{@link AuthValidationErrorCode }\n * Thrown due to an empty confirmation code, password or username.\n * @throws AuthTokenConfigException - Thrown when the token provider config is invalid.\n */\nasync function confirmResetPassword(input) {\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n const { userPoolClientId, userPoolId, userPoolEndpoint } = authConfig;\n const { username, newPassword } = input;\n assertValidationError(!!username, AuthValidationErrorCode.EmptyConfirmResetPasswordUsername);\n assertValidationError(!!newPassword, AuthValidationErrorCode.EmptyConfirmResetPasswordNewPassword);\n const code = input.confirmationCode;\n assertValidationError(!!code, AuthValidationErrorCode.EmptyConfirmResetPasswordConfirmationCode);\n const metadata = input.options?.clientMetadata;\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const confirmForgotPassword = createConfirmForgotPasswordClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n await confirmForgotPassword({\n region: getRegionFromUserPoolId(authConfig.userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmResetPassword),\n }, {\n Username: username,\n ConfirmationCode: code,\n Password: newPassword,\n ClientMetadata: metadata,\n ClientId: authConfig.userPoolClientId,\n UserContextData,\n });\n}\n\nexport { confirmResetPassword };\n//# sourceMappingURL=confirmResetPassword.mjs.map\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { resetPassword, confirmResetPassword } from 'aws-amplify/auth';\nimport { Eye, EyeOff } from 'lucide-react';\nimport useAuth from '../hooks/useAuth';\nimport usePageTitle from '../hooks/usePageTitle';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\n\nconst readNextPath = () => {\n if (typeof window === 'undefined') return null;\n const params = new URLSearchParams(window.location.search);\n const next = params.get('next');\n if (!next) return null;\n if (!next.startsWith('/') || next.startsWith('//')) return null;\n return next;\n};\n\nconst ForgotPassword = () => {\n const { t } = useTranslation();\n usePageTitle('titles.forgotPassword');\n const { isAuthenticated, isLoading } = useAuth();\n const nextPath = readNextPath();\n const [stage, setStage] = useState('request'); // request | confirm\n const [email, setEmail] = useState('');\n const [code, setCode] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [newPasswordVisible, setNewPasswordVisible] = useState(false);\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (!isLoading && isAuthenticated) {\n window.location.href = nextPath || '/app/';\n }\n }, [isAuthenticated, isLoading, nextPath]);\n\n const handleRequest = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await resetPassword({ username: email });\n setMessage(t('auth.forgot.codeSent'));\n setStage('confirm');\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\n };\n\n const handleConfirm = async (e) => {\n e.preventDefault();\n setMessage('');\n setError('');\n setBusy(true);\n try {\n await confirmResetPassword({ username: email, confirmationCode: code, newPassword });\n setMessage(t('auth.success.confirm'));\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n } catch (err) {\n const key = err?.name || err?.code;\n setError(t(`auth.errors.${key}`, t('auth.errors.default')));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <div className=\"min-h-screen bg-linear-to-b from-slate-950 via-slate-900 to-slate-950 text-white flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"dark\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-4 pb-12\">\n <div className=\"w-full max-w-md bg-slate-900/70 border border-slate-800 rounded-2xl shadow-2xl p-8 space-y-6\">\n <div className=\"text-center space-y-2\">\n <div className=\"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-blue-500/10 text-blue-300 border border-blue-500/30\">\n <span className=\"font-black text-lg\">S</span>\n </div>\n <h1 className=\"text-2xl font-bold\">{t('auth.forgot.title')}</h1>\n <p className=\"text-slate-400 text-sm\">{t('auth.forgot.subtitle')}</p>\n </div>\n\n {stage === 'request' && (\n <form onSubmit={handleRequest} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-hidden focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.sendCode')}\n </button>\n </form>\n )}\n\n {stage === 'confirm' && (\n <form onSubmit={handleConfirm} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-email\" className=\"block text-sm text-slate-300\">\n {t('auth.email')}\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-hidden focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.email')}\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-code\" className=\"block text-sm text-slate-300\">\n {t('auth.code')}\n </label>\n <input\n id=\"forgot-code\"\n type=\"text\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n required\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 text-sm focus:outline-hidden focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123456\"\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"forgot-new-password\" className=\"block text-sm text-slate-300\">\n {t('auth.forgot.newPassword')}\n </label>\n <div className=\"relative\">\n <input\n id=\"forgot-new-password\"\n type={newPasswordVisible ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n required\n autoComplete=\"new-password\"\n className=\"w-full rounded-lg bg-slate-950 border border-slate-700 px-4 py-3 pr-12 text-sm focus:outline-hidden focus:ring-2 focus:ring-blue-500\"\n placeholder={t('auth.placeholders.passwordNew')}\n />\n <button\n type=\"button\"\n onClick={() => setNewPasswordVisible((prev) => !prev)}\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-slate-400 hover:text-slate-200\"\n aria-label={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n title={\n newPasswordVisible\n ? t('auth.actions.hidePassword', { defaultValue: 'Hide password' })\n : t('auth.actions.showPassword', { defaultValue: 'Show password' })\n }\n >\n {newPasswordVisible ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n {error && (\n <div\n role=\"alert\"\n className=\"text-sm text-rose-400 bg-rose-950/40 border border-rose-700/50 rounded-lg px-3 py-2\"\n >\n {error}\n </div>\n )}\n {message && (\n <div\n role=\"status\"\n className=\"text-sm text-emerald-300 bg-emerald-950/40 border border-emerald-700/50 rounded-lg px-3 py-2\"\n >\n {message}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={busy}\n className=\"w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg py-3 transition disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {t('auth.forgot.reset')}\n </button>\n </form>\n )}\n\n <div className=\"text-center text-sm text-slate-400 space-y-1\">\n <div>\n {t('auth.actions.haveAccount')}{' '}\n <button\n type=\"button\"\n className=\"text-blue-300 hover:text-blue-200 underline\"\n onClick={() => {\n window.location.href = nextPath ? `/signin?next=${encodeURIComponent(nextPath)}` : '/signin';\n }}\n >\n {t('auth.actions.goToSignIn')}\n </button>\n </div>\n <div className=\"text-slate-500 text-xs\">\n <div>{t('auth.helper.terms')}</div>\n <div className=\"mt-1 flex items-center justify-center gap-2\">\n <a href=\"/terms\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.terms')}\n </a>\n <span aria-hidden=\"true\">·</span>\n <a href=\"/privacy\" className=\"underline underline-offset-4 hover:text-slate-200\">\n {t('landing.footer.privacy')}\n </a>\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default ForgotPassword;\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
|