shipscreens 0.1.0 → 0.1.2
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 +0 -8
- package/bin/shipscreens.js +223 -28
- package/cli/assets/demo-screens/01.png +0 -0
- package/cli/assets/demo-screens/02.png +0 -0
- package/cli/assets/demo-screens/03.png +0 -0
- package/cli/assets/demo-screens/04.png +0 -0
- package/cli/commands/build.js +27 -27
- package/cli/schema.js +59 -20
- package/dist/app/assets/{AgentCli-8e28laT4.js → AgentCli-FWNCO1pb.js} +5 -5
- package/dist/app/assets/AgentCli-FWNCO1pb.js.map +1 -0
- package/dist/app/assets/App-yU7CFXCv.js +13 -0
- package/dist/app/assets/App-yU7CFXCv.js.map +1 -0
- package/dist/app/assets/{AppReviewAso-OLwc4Rw_.js → AppReviewAso-BYfaP1Lu.js} +3 -3
- package/dist/{assets/AppReviewAso-OLwc4Rw_.js.map → app/assets/AppReviewAso-BYfaP1Lu.js.map} +1 -1
- package/dist/app/assets/{Cancelled-BoeZQa1S.js → Cancelled-66ixTUrm.js} +2 -2
- package/dist/app/assets/{Cancelled-BoeZQa1S.js.map → Cancelled-66ixTUrm.js.map} +1 -1
- package/dist/app/assets/CliPreflightCard-D7utpFux.js +2 -0
- package/dist/app/assets/{CliPreflightCard-CxYyogdF.js.map → CliPreflightCard-D7utpFux.js.map} +1 -1
- package/dist/app/assets/CopyButton-CmVmSaYn.js +2 -0
- package/dist/app/assets/CopyButton-CmVmSaYn.js.map +1 -0
- package/dist/app/assets/{FastlaneScreenshots-CFT6IiRb.js → FastlaneScreenshots-CRMcetq-.js} +4 -4
- package/dist/{assets/FastlaneScreenshots-CFT6IiRb.js.map → app/assets/FastlaneScreenshots-CRMcetq-.js.map} +1 -1
- package/dist/app/assets/{FirstExport-B_UDacZm.js → FirstExport-C0WgL4Hl.js} +3 -3
- package/dist/{assets/FirstExport-B_UDacZm.js.map → app/assets/FirstExport-C0WgL4Hl.js.map} +1 -1
- package/dist/app/assets/{FivePanelFramework-C1z_xUbe.js → FivePanelFramework-BwCRmXIK.js} +3 -3
- package/dist/{assets/FivePanelFramework-C1z_xUbe.js.map → app/assets/FivePanelFramework-BwCRmXIK.js.map} +1 -1
- package/dist/app/assets/{ForgotPassword-ZQ8U3ejz.js → ForgotPassword-B9_si1tH.js} +2 -2
- package/dist/{assets/ForgotPassword-ZQ8U3ejz.js.map → app/assets/ForgotPassword-B9_si1tH.js.map} +1 -1
- package/dist/app/assets/Landing-s1ni1n-7.js +2 -0
- package/dist/app/assets/Landing-s1ni1n-7.js.map +1 -0
- package/dist/app/assets/{LanguageSwitcher-D93nCuuR.js → LanguageSwitcher-BD9N-dla.js} +2 -2
- package/dist/{assets/LanguageSwitcher-D93nCuuR.js.map → app/assets/LanguageSwitcher-BD9N-dla.js.map} +1 -1
- package/dist/app/assets/{Legal-Koe7vi6H.js → Legal-D3cAXQXw.js} +2 -2
- package/dist/app/assets/{Legal-Koe7vi6H.js.map → Legal-D3cAXQXw.js.map} +1 -1
- package/dist/app/assets/{NotFound-CfY31vMZ.js → NotFound-ClV-6RmP.js} +2 -2
- package/dist/app/assets/{NotFound-CfY31vMZ.js.map → NotFound-ClV-6RmP.js.map} +1 -1
- package/dist/app/assets/{Privacy-CaHf2UM7.js → Privacy-DfxgWwC3.js} +2 -2
- package/dist/{assets/Privacy-CaHf2UM7.js.map → app/assets/Privacy-DfxgWwC3.js.map} +1 -1
- package/dist/app/assets/{SignIn-Cyi2_-Mn.js → SignIn-ghQCKcPe.js} +2 -2
- package/dist/app/assets/{SignIn-Cyi2_-Mn.js.map → SignIn-ghQCKcPe.js.map} +1 -1
- package/dist/app/assets/{SignUp-C9QH5po_.js → SignUp-BKB87hd4.js} +2 -2
- package/dist/app/assets/{SignUp-C9QH5po_.js.map → SignUp-BKB87hd4.js.map} +1 -1
- package/dist/app/assets/SiteHeader-DxsqNPnt.js +2 -0
- package/dist/app/assets/SiteHeader-DxsqNPnt.js.map +1 -0
- package/dist/app/assets/{StickyMobileCta-uyWGVhdc.js → StickyMobileCta-C_x2pUIF.js} +2 -2
- package/dist/app/assets/{StickyMobileCta-uyWGVhdc.js.map → StickyMobileCta-C_x2pUIF.js.map} +1 -1
- package/dist/{assets/StoreAssetsPipeline-BJlnD3kD.js → app/assets/StoreAssetsPipeline-4hXRONUd.js} +3 -3
- package/dist/app/assets/{StoreAssetsPipeline-BJlnD3kD.js.map → StoreAssetsPipeline-4hXRONUd.js.map} +1 -1
- package/dist/app/assets/{Success-B7k7FvJj.js → Success-819qvzmp.js} +2 -2
- package/dist/app/assets/{Success-B7k7FvJj.js.map → Success-819qvzmp.js.map} +1 -1
- package/dist/app/assets/{Terms-DgJWOeUD.js → Terms-7k3nA4SU.js} +2 -2
- package/dist/app/assets/{Terms-DgJWOeUD.js.map → Terms-7k3nA4SU.js.map} +1 -1
- package/dist/app/assets/{ToolsIndex-xMPoFom9.js → ToolsIndex-CzrxymnM.js} +3 -3
- package/dist/{assets/ToolsIndex-xMPoFom9.js.map → app/assets/ToolsIndex-CzrxymnM.js.map} +1 -1
- package/dist/app/assets/{WorkloadCalculator-Bdt6qPR3.js → WorkloadCalculator-D2TuKS4B.js} +4 -4
- package/dist/app/assets/{WorkloadCalculator-Bdt6qPR3.js.map → WorkloadCalculator-D2TuKS4B.js.map} +1 -1
- package/dist/app/assets/{calculator-CWfp5Day.js → calculator-CiqKFdRp.js} +2 -2
- package/dist/app/assets/{calculator-CWfp5Day.js.map → calculator-CiqKFdRp.js.map} +1 -1
- package/dist/app/assets/chevron-down-_xIkRLaA.js +2 -0
- package/dist/app/assets/{chevron-down-DbSAem1L.js.map → chevron-down-_xIkRLaA.js.map} +1 -1
- package/dist/app/assets/{clipboard-copy-DgTgnK84.js → clipboard-copy-DCJioqIc.js} +2 -2
- package/dist/app/assets/{clipboard-copy-DgTgnK84.js.map → clipboard-copy-DCJioqIc.js.map} +1 -1
- package/dist/app/assets/{copy-C9t_FzCZ.js → copy-AQdWJCcs.js} +2 -2
- package/dist/app/assets/{copy-C9t_FzCZ.js.map → copy-AQdWJCcs.js.map} +1 -1
- package/dist/app/assets/{crop-B7IxIx6D.js → crop-DOMVp18h.js} +2 -2
- package/dist/app/assets/{crop-B7IxIx6D.js.map → crop-DOMVp18h.js.map} +1 -1
- package/dist/app/assets/{download-65Zuvgwm.js → download-D5RbyXDm.js} +2 -2
- package/dist/app/assets/{download-65Zuvgwm.js.map → download-D5RbyXDm.js.map} +1 -1
- package/dist/app/assets/{eye-ouNo8Nv5.js → eye-CLcZi_uk.js} +2 -2
- package/dist/{assets/eye-ouNo8Nv5.js.map → app/assets/eye-CLcZi_uk.js.map} +1 -1
- package/dist/app/assets/{grid-3x3-U1Nk_ppf.js → grid-3x3-AKmIrhzv.js} +2 -2
- package/dist/{assets/grid-3x3-U1Nk_ppf.js.map → app/assets/grid-3x3-AKmIrhzv.js.map} +1 -1
- package/dist/app/assets/hero/demo-25s-poster.jpg +0 -0
- package/dist/app/assets/hero/demo-25s.mp4 +0 -0
- package/dist/app/assets/hero/demo-25s.webm +0 -0
- package/dist/app/assets/hero/demo-poster.jpg +0 -0
- package/dist/app/assets/hero/demo.mp4 +0 -0
- package/dist/app/assets/hero/demo.webm +0 -0
- package/dist/{assets/index-B8Y8Y-Mi.js → app/assets/index-Bqv2NztY.js} +6 -6
- package/dist/app/assets/index-Bqv2NztY.js.map +1 -0
- package/dist/{assets/index-hyiQFYGv.css → app/assets/index-DGVMa-P7.css} +1 -1
- package/dist/app/assets/{layout-grid-X9Sgull2.js → layout-grid-CpGXUPMR.js} +2 -2
- package/dist/app/assets/{layout-grid-X9Sgull2.js.map → layout-grid-CpGXUPMR.js.map} +1 -1
- package/dist/app/assets/proof/output-01.png +0 -0
- package/dist/app/assets/proof/output-02.png +0 -0
- package/dist/app/assets/proof/output-03.png +0 -0
- package/dist/app/assets/proof/output-04.png +0 -0
- package/dist/app/assets/{rocket-BjOXauLe.js → rocket-IzRFv1aW.js} +2 -2
- package/dist/app/assets/{rocket-BjOXauLe.js.map → rocket-IzRFv1aW.js.map} +1 -1
- package/dist/app/assets/{shield-check-CFNhE_aD.js → shield-check-CngdN3zn.js} +2 -2
- package/dist/{assets/shield-check-CFNhE_aD.js.map → app/assets/shield-check-CngdN3zn.js.map} +1 -1
- package/dist/app/assets/{signIn-CVoSzqCz.js → signIn-Cn6FaQYi.js} +2 -2
- package/dist/{assets/signIn-CVoSzqCz.js.map → app/assets/signIn-Cn6FaQYi.js.map} +1 -1
- package/dist/app/assets/{smartphone-BcQB9gIh.js → smartphone-CpNG_Pfk.js} +2 -2
- package/dist/app/assets/{smartphone-BcQB9gIh.js.map → smartphone-CpNG_Pfk.js.map} +1 -1
- package/dist/app/assets/{terminal-CGhryJds.js → terminal-BbBESfoU.js} +2 -2
- package/dist/{assets/terminal-CGhryJds.js.map → app/assets/terminal-BbBESfoU.js.map} +1 -1
- package/dist/{assets/useAuth-lZZC20Tl.js → app/assets/useAuth-3WWZ3GCD.js} +2 -2
- package/dist/app/assets/{useAuth-lZZC20Tl.js.map → useAuth-3WWZ3GCD.js.map} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/assets/{AgentCli-8e28laT4.js → AgentCli-FWNCO1pb.js} +5 -5
- package/dist/assets/AgentCli-FWNCO1pb.js.map +1 -0
- package/dist/assets/App-yU7CFXCv.js +13 -0
- package/dist/assets/App-yU7CFXCv.js.map +1 -0
- package/dist/assets/{AppReviewAso-OLwc4Rw_.js → AppReviewAso-BYfaP1Lu.js} +3 -3
- package/dist/{app/assets/AppReviewAso-OLwc4Rw_.js.map → assets/AppReviewAso-BYfaP1Lu.js.map} +1 -1
- package/dist/assets/{Cancelled-BoeZQa1S.js → Cancelled-66ixTUrm.js} +2 -2
- package/dist/assets/{Cancelled-BoeZQa1S.js.map → Cancelled-66ixTUrm.js.map} +1 -1
- package/dist/assets/CliPreflightCard-D7utpFux.js +2 -0
- package/dist/assets/{CliPreflightCard-CxYyogdF.js.map → CliPreflightCard-D7utpFux.js.map} +1 -1
- package/dist/assets/CopyButton-CmVmSaYn.js +2 -0
- package/dist/assets/CopyButton-CmVmSaYn.js.map +1 -0
- package/dist/assets/{FastlaneScreenshots-CFT6IiRb.js → FastlaneScreenshots-CRMcetq-.js} +4 -4
- package/dist/{app/assets/FastlaneScreenshots-CFT6IiRb.js.map → assets/FastlaneScreenshots-CRMcetq-.js.map} +1 -1
- package/dist/assets/{FirstExport-B_UDacZm.js → FirstExport-C0WgL4Hl.js} +3 -3
- package/dist/{app/assets/FirstExport-B_UDacZm.js.map → assets/FirstExport-C0WgL4Hl.js.map} +1 -1
- package/dist/assets/{FivePanelFramework-C1z_xUbe.js → FivePanelFramework-BwCRmXIK.js} +3 -3
- package/dist/{app/assets/FivePanelFramework-C1z_xUbe.js.map → assets/FivePanelFramework-BwCRmXIK.js.map} +1 -1
- package/dist/assets/{ForgotPassword-ZQ8U3ejz.js → ForgotPassword-B9_si1tH.js} +2 -2
- package/dist/{app/assets/ForgotPassword-ZQ8U3ejz.js.map → assets/ForgotPassword-B9_si1tH.js.map} +1 -1
- package/dist/assets/Landing-s1ni1n-7.js +2 -0
- package/dist/assets/Landing-s1ni1n-7.js.map +1 -0
- package/dist/assets/{LanguageSwitcher-D93nCuuR.js → LanguageSwitcher-BD9N-dla.js} +2 -2
- package/dist/{app/assets/LanguageSwitcher-D93nCuuR.js.map → assets/LanguageSwitcher-BD9N-dla.js.map} +1 -1
- package/dist/assets/{Legal-Koe7vi6H.js → Legal-D3cAXQXw.js} +2 -2
- package/dist/assets/{Legal-Koe7vi6H.js.map → Legal-D3cAXQXw.js.map} +1 -1
- package/dist/assets/{NotFound-CfY31vMZ.js → NotFound-ClV-6RmP.js} +2 -2
- package/dist/assets/{NotFound-CfY31vMZ.js.map → NotFound-ClV-6RmP.js.map} +1 -1
- package/dist/assets/{Privacy-CaHf2UM7.js → Privacy-DfxgWwC3.js} +2 -2
- package/dist/{app/assets/Privacy-CaHf2UM7.js.map → assets/Privacy-DfxgWwC3.js.map} +1 -1
- package/dist/assets/{SignIn-Cyi2_-Mn.js → SignIn-ghQCKcPe.js} +2 -2
- package/dist/assets/{SignIn-Cyi2_-Mn.js.map → SignIn-ghQCKcPe.js.map} +1 -1
- package/dist/assets/{SignUp-C9QH5po_.js → SignUp-BKB87hd4.js} +2 -2
- package/dist/assets/{SignUp-C9QH5po_.js.map → SignUp-BKB87hd4.js.map} +1 -1
- package/dist/assets/SiteHeader-DxsqNPnt.js +2 -0
- package/dist/assets/SiteHeader-DxsqNPnt.js.map +1 -0
- package/dist/assets/{StickyMobileCta-uyWGVhdc.js → StickyMobileCta-C_x2pUIF.js} +2 -2
- package/dist/assets/{StickyMobileCta-uyWGVhdc.js.map → StickyMobileCta-C_x2pUIF.js.map} +1 -1
- package/dist/{app/assets/StoreAssetsPipeline-BJlnD3kD.js → assets/StoreAssetsPipeline-4hXRONUd.js} +3 -3
- package/dist/assets/{StoreAssetsPipeline-BJlnD3kD.js.map → StoreAssetsPipeline-4hXRONUd.js.map} +1 -1
- package/dist/assets/{Success-B7k7FvJj.js → Success-819qvzmp.js} +2 -2
- package/dist/assets/{Success-B7k7FvJj.js.map → Success-819qvzmp.js.map} +1 -1
- package/dist/assets/{Terms-DgJWOeUD.js → Terms-7k3nA4SU.js} +2 -2
- package/dist/assets/{Terms-DgJWOeUD.js.map → Terms-7k3nA4SU.js.map} +1 -1
- package/dist/assets/{ToolsIndex-xMPoFom9.js → ToolsIndex-CzrxymnM.js} +3 -3
- package/dist/{app/assets/ToolsIndex-xMPoFom9.js.map → assets/ToolsIndex-CzrxymnM.js.map} +1 -1
- package/dist/assets/{WorkloadCalculator-Bdt6qPR3.js → WorkloadCalculator-D2TuKS4B.js} +4 -4
- package/dist/assets/{WorkloadCalculator-Bdt6qPR3.js.map → WorkloadCalculator-D2TuKS4B.js.map} +1 -1
- package/dist/assets/{calculator-CWfp5Day.js → calculator-CiqKFdRp.js} +2 -2
- package/dist/assets/{calculator-CWfp5Day.js.map → calculator-CiqKFdRp.js.map} +1 -1
- package/dist/assets/chevron-down-_xIkRLaA.js +2 -0
- package/dist/assets/{chevron-down-DbSAem1L.js.map → chevron-down-_xIkRLaA.js.map} +1 -1
- package/dist/assets/{clipboard-copy-DgTgnK84.js → clipboard-copy-DCJioqIc.js} +2 -2
- package/dist/assets/{clipboard-copy-DgTgnK84.js.map → clipboard-copy-DCJioqIc.js.map} +1 -1
- package/dist/assets/{copy-C9t_FzCZ.js → copy-AQdWJCcs.js} +2 -2
- package/dist/assets/{copy-C9t_FzCZ.js.map → copy-AQdWJCcs.js.map} +1 -1
- package/dist/assets/{crop-B7IxIx6D.js → crop-DOMVp18h.js} +2 -2
- package/dist/assets/{crop-B7IxIx6D.js.map → crop-DOMVp18h.js.map} +1 -1
- package/dist/assets/{download-65Zuvgwm.js → download-D5RbyXDm.js} +2 -2
- package/dist/assets/{download-65Zuvgwm.js.map → download-D5RbyXDm.js.map} +1 -1
- package/dist/assets/{eye-ouNo8Nv5.js → eye-CLcZi_uk.js} +2 -2
- package/dist/{app/assets/eye-ouNo8Nv5.js.map → assets/eye-CLcZi_uk.js.map} +1 -1
- package/dist/assets/{grid-3x3-U1Nk_ppf.js → grid-3x3-AKmIrhzv.js} +2 -2
- package/dist/{app/assets/grid-3x3-U1Nk_ppf.js.map → assets/grid-3x3-AKmIrhzv.js.map} +1 -1
- package/dist/assets/hero/demo-25s-poster.jpg +0 -0
- package/dist/assets/hero/demo-25s.mp4 +0 -0
- package/dist/assets/hero/demo-25s.webm +0 -0
- package/dist/assets/hero/demo-poster.jpg +0 -0
- package/dist/assets/hero/demo.mp4 +0 -0
- package/dist/assets/hero/demo.webm +0 -0
- package/dist/{app/assets/index-B8Y8Y-Mi.js → assets/index-Bqv2NztY.js} +6 -6
- package/dist/assets/index-Bqv2NztY.js.map +1 -0
- package/dist/{app/assets/index-hyiQFYGv.css → assets/index-DGVMa-P7.css} +1 -1
- package/dist/assets/{layout-grid-X9Sgull2.js → layout-grid-CpGXUPMR.js} +2 -2
- package/dist/assets/{layout-grid-X9Sgull2.js.map → layout-grid-CpGXUPMR.js.map} +1 -1
- package/dist/assets/proof/output-01.png +0 -0
- package/dist/assets/proof/output-02.png +0 -0
- package/dist/assets/proof/output-03.png +0 -0
- package/dist/assets/proof/output-04.png +0 -0
- package/dist/assets/{rocket-BjOXauLe.js → rocket-IzRFv1aW.js} +2 -2
- package/dist/assets/{rocket-BjOXauLe.js.map → rocket-IzRFv1aW.js.map} +1 -1
- package/dist/assets/{shield-check-CFNhE_aD.js → shield-check-CngdN3zn.js} +2 -2
- package/dist/{app/assets/shield-check-CFNhE_aD.js.map → assets/shield-check-CngdN3zn.js.map} +1 -1
- package/dist/assets/{signIn-CVoSzqCz.js → signIn-Cn6FaQYi.js} +2 -2
- package/dist/{app/assets/signIn-CVoSzqCz.js.map → assets/signIn-Cn6FaQYi.js.map} +1 -1
- package/dist/assets/{smartphone-BcQB9gIh.js → smartphone-CpNG_Pfk.js} +2 -2
- package/dist/assets/{smartphone-BcQB9gIh.js.map → smartphone-CpNG_Pfk.js.map} +1 -1
- package/dist/assets/{terminal-CGhryJds.js → terminal-BbBESfoU.js} +2 -2
- package/dist/{app/assets/terminal-CGhryJds.js.map → assets/terminal-BbBESfoU.js.map} +1 -1
- package/dist/{app/assets/useAuth-lZZC20Tl.js → assets/useAuth-3WWZ3GCD.js} +2 -2
- package/dist/assets/{useAuth-lZZC20Tl.js.map → useAuth-3WWZ3GCD.js.map} +1 -1
- package/dist/cancelled/index.html +2 -2
- package/dist/forgot-password/index.html +2 -2
- package/dist/index.html +2 -2
- package/dist/legal/index.html +2 -2
- package/dist/privacy/index.html +2 -2
- package/dist/signin/index.html +2 -2
- package/dist/signup/index.html +2 -2
- package/dist/sitemap.xml +0 -4
- package/dist/success/index.html +2 -2
- package/dist/terms/index.html +2 -2
- package/dist/tools/5-panel-screenshot-framework/index.html +2 -2
- package/dist/tools/agent-cli/index.html +2 -2
- package/dist/tools/app-review-aso/index.html +2 -2
- package/dist/tools/fastlane-screenshots/index.html +2 -2
- package/dist/tools/first-export/index.html +2 -2
- package/dist/tools/index.html +2 -2
- package/dist/tools/screenshot-workload-calculator/index.html +2 -2
- package/dist/tools/store-assets-pipeline/index.html +2 -2
- package/package.json +3 -3
- package/templates/agent/agent-prompt.txt +8 -0
- package/dist/app/assets/AgentCli-8e28laT4.js.map +0 -1
- package/dist/app/assets/App-DU0xew0e.js +0 -13
- package/dist/app/assets/App-DU0xew0e.js.map +0 -1
- package/dist/app/assets/CliPreflightCard-CxYyogdF.js +0 -2
- package/dist/app/assets/CopyButton-CGfuSJtU.js +0 -2
- package/dist/app/assets/CopyButton-CGfuSJtU.js.map +0 -1
- package/dist/app/assets/Landing-DAIP71DD.js +0 -2
- package/dist/app/assets/Landing-DAIP71DD.js.map +0 -1
- package/dist/app/assets/Pricing-BQwtFVbj.js +0 -2
- package/dist/app/assets/Pricing-BQwtFVbj.js.map +0 -1
- package/dist/app/assets/SiteHeader-Dj3gDOnR.js +0 -2
- package/dist/app/assets/SiteHeader-Dj3gDOnR.js.map +0 -1
- package/dist/app/assets/check-BWCiUZ-C.js +0 -2
- package/dist/app/assets/check-BWCiUZ-C.js.map +0 -1
- package/dist/app/assets/chevron-down-DbSAem1L.js +0 -2
- package/dist/app/assets/circle-check-CeakjiXC.js +0 -2
- package/dist/app/assets/circle-check-CeakjiXC.js.map +0 -1
- package/dist/app/assets/hero/cli-build-tree-15s.mp4 +0 -0
- package/dist/app/assets/hero/cli-build-tree-15s.webm +0 -0
- package/dist/app/assets/hero/cli-build-tree-25s.mp4 +0 -0
- package/dist/app/assets/hero/cli-build-tree-25s.webm +0 -0
- package/dist/app/assets/hero/cli-build-tree-poster.png +0 -0
- package/dist/app/assets/hero/demo.gif +0 -0
- package/dist/app/assets/index-B8Y8Y-Mi.js.map +0 -1
- package/dist/assets/AgentCli-8e28laT4.js.map +0 -1
- package/dist/assets/App-DU0xew0e.js +0 -13
- package/dist/assets/App-DU0xew0e.js.map +0 -1
- package/dist/assets/CliPreflightCard-CxYyogdF.js +0 -2
- package/dist/assets/CopyButton-CGfuSJtU.js +0 -2
- package/dist/assets/CopyButton-CGfuSJtU.js.map +0 -1
- package/dist/assets/Landing-DAIP71DD.js +0 -2
- package/dist/assets/Landing-DAIP71DD.js.map +0 -1
- package/dist/assets/Pricing-BQwtFVbj.js +0 -2
- package/dist/assets/Pricing-BQwtFVbj.js.map +0 -1
- package/dist/assets/SiteHeader-Dj3gDOnR.js +0 -2
- package/dist/assets/SiteHeader-Dj3gDOnR.js.map +0 -1
- package/dist/assets/check-BWCiUZ-C.js +0 -2
- package/dist/assets/check-BWCiUZ-C.js.map +0 -1
- package/dist/assets/chevron-down-DbSAem1L.js +0 -2
- package/dist/assets/circle-check-CeakjiXC.js +0 -2
- package/dist/assets/circle-check-CeakjiXC.js.map +0 -1
- package/dist/assets/hero/cli-build-tree-15s.mp4 +0 -0
- package/dist/assets/hero/cli-build-tree-15s.webm +0 -0
- package/dist/assets/hero/cli-build-tree-25s.mp4 +0 -0
- package/dist/assets/hero/cli-build-tree-25s.webm +0 -0
- package/dist/assets/hero/cli-build-tree-poster.png +0 -0
- package/dist/assets/hero/demo.gif +0 -0
- package/dist/assets/index-B8Y8Y-Mi.js.map +0 -1
- package/dist/pricing/index.html +0 -33
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as c,j as t}from"./index-B8Y8Y-Mi.js";import{C as d}from"./circle-check-CeakjiXC.js";import{A as m}from"./CopyButton-CGfuSJtU.js";const j=({href:l,onClick:x,compact:s=!1,className:n=""})=>{const{t:o}=c(),e=o("common.cliPreflight",{returnObjects:!0})||{},r=e.bullets||[],a=s?r.slice(0,3):r;return e.title?t.jsxs("div",{className:`rounded-2xl border border-slate-800 bg-slate-900/60 ${s?"p-4":"p-6"} space-y-2 ${n}`,children:[t.jsx("div",{className:`${s?"text-sm":"text-lg"} font-bold text-white`,children:e.title}),e.body&&t.jsx("p",{className:`${s?"text-xs":"text-sm"} text-slate-300`,children:e.body}),a.length>0&&t.jsx("ul",{className:`space-y-1 ${s?"text-xs":"text-sm"} text-slate-300`,children:a.map(i=>t.jsxs("li",{className:"flex items-center gap-2",children:[t.jsx(d,{size:s?14:16,className:"text-emerald-400"}),i]},i))}),e.note&&t.jsx("p",{className:"text-[11px] text-slate-500",children:e.note}),l&&e.cta&&t.jsxs("a",{href:l,onClick:x,className:`inline-flex items-center gap-2 text-xs font-semibold text-blue-200 hover:text-blue-100 transition-colors ${s?"pt-1":"pt-2"}`,children:[e.cta," ",t.jsx(m,{size:12})]})]}):null};export{j as C};
|
|
2
|
-
//# sourceMappingURL=CliPreflightCard-CxYyogdF.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as g}from"./LanguageSwitcher-D93nCuuR.js";import{u as v,r as i,j as x}from"./index-B8Y8Y-Mi.js";const T=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],A=g("arrow-right",T),S=async t=>{const o=typeof t=="string"?t:String(t??"");if(!o)return{ok:!1,method:"unavailable"};if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(o),{ok:!0,method:"clipboard"}}catch{}if(typeof document>"u")return{ok:!1,method:"unavailable"};let e=null;try{return e=document.createElement("textarea"),e.value=o,e.setAttribute("readonly",""),e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.opacity="0",e.style.pointerEvents="none",document.body.appendChild(e),e.focus(),e.select(),e.setSelectionRange(0,e.value.length),{ok:document.execCommand("copy"),method:"execCommand"}}catch{return{ok:!1,method:"execCommand"}}finally{e?.parentNode&&e.parentNode.removeChild(e)}},E=(t,{resetMs:o=1600,enabled:e=!0}={})=>{const{t:n}=v(),a=i.useRef(null),[c,l]=i.useState("idle"),r=i.useMemo(()=>typeof t=="string"?t:String(t??""),[t]),s=typeof window<"u"&&e&&!!r;i.useEffect(()=>()=>{a.current&&window.clearTimeout(a.current)},[]);const d=c==="copied"?n("common.copied",{defaultValue:"Copied"}):c==="error"?n("common.copyFailed",{defaultValue:"Copy failed"}):n("common.copy",{defaultValue:"Copy"}),p=i.useCallback(async()=>{if(!s)return!1;const u=await S(r);return l(u.ok?"copied":"error"),a.current&&window.clearTimeout(a.current),a.current=window.setTimeout(()=>l("idle"),o),u.ok},[s,o,r]);return{canCopy:s,copy:p,copyLabel:d,copyState:c}},B=({value:t,enabled:o=!0,resetMs:e,onCopied:n,onCopyFailed:a,onClick:c,type:l="button",children:r,disabled:s,...d})=>{const{["aria-label"]:p,...u}=d,{canCopy:f,copy:m,copyLabel:y,copyState:h}=E(t,{enabled:o,resetMs:e}),C=i.useCallback(async b=>{if(c?.(b),b?.defaultPrevented)return;await m()?n?.():a?.()},[m,c,n,a]),k=s||!f,w=typeof r=="function"?r({canCopy:f,copyLabel:y,copyState:h}):r??y;return x.jsx("button",{...u,type:l,onClick:C,disabled:k,"aria-label":p||y,children:w})};export{A,B as C,S as c};
|
|
2
|
-
//# sourceMappingURL=CopyButton-CGfuSJtU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CopyButton-CGfuSJtU.js","sources":["../../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../../src/lib/clipboard.js","../../src/hooks/useCopyButton.js","../../src/components/CopyButton.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","export const copyTextToClipboard = async (text) => {\n const value = typeof text === 'string' ? text : String(text ?? '');\n if (!value) return { ok: false, method: 'unavailable' };\n\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(value);\n return { ok: true, method: 'clipboard' };\n } catch {\n // fallback below\n }\n }\n\n if (typeof document === 'undefined') return { ok: false, method: 'unavailable' };\n\n let textarea = null;\n try {\n textarea = document.createElement('textarea');\n textarea.value = value;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.left = '0';\n textarea.style.opacity = '0';\n textarea.style.pointerEvents = 'none';\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n textarea.setSelectionRange(0, textarea.value.length);\n const ok = document.execCommand('copy');\n return { ok, method: 'execCommand' };\n } catch {\n return { ok: false, method: 'execCommand' };\n } finally {\n if (textarea?.parentNode) textarea.parentNode.removeChild(textarea);\n }\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { copyTextToClipboard } from '../lib/clipboard';\n\nconst useCopyButton = (text, { resetMs = 1600, enabled = true } = {}) => {\n const { t } = useTranslation();\n const timeoutRef = useRef(null);\n const [copyState, setCopyState] = useState('idle');\n\n const value = useMemo(() => (typeof text === 'string' ? text : String(text ?? '')), [text]);\n const canCopy = typeof window !== 'undefined' && enabled && Boolean(value);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const copyLabel =\n copyState === 'copied'\n ? t('common.copied', { defaultValue: 'Copied' })\n : copyState === 'error'\n ? t('common.copyFailed', { defaultValue: 'Copy failed' })\n : t('common.copy', { defaultValue: 'Copy' });\n\n const copy = useCallback(async () => {\n if (!canCopy) return false;\n\n const result = await copyTextToClipboard(value);\n setCopyState(result.ok ? 'copied' : 'error');\n\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => setCopyState('idle'), resetMs);\n\n return result.ok;\n }, [canCopy, resetMs, value]);\n\n return { canCopy, copy, copyLabel, copyState };\n};\n\nexport default useCopyButton;\n\n","import React, { useCallback } from 'react';\nimport useCopyButton from '../hooks/useCopyButton';\n\nconst CopyButton = ({\n value,\n enabled = true,\n resetMs,\n onCopied,\n onCopyFailed,\n onClick,\n type = 'button',\n children,\n disabled,\n ...rest\n}) => {\n const { ['aria-label']: ariaLabelProp, ...buttonProps } = rest;\n const { canCopy, copy, copyLabel, copyState } = useCopyButton(value, { enabled, resetMs });\n\n const handleClick = useCallback(\n async (event) => {\n onClick?.(event);\n if (event?.defaultPrevented) return;\n\n const ok = await copy();\n if (ok) onCopied?.();\n else onCopyFailed?.();\n },\n [copy, onClick, onCopied, onCopyFailed]\n );\n\n const isDisabled = disabled || !canCopy;\n const content =\n typeof children === 'function' ? children({ canCopy, copyLabel, copyState }) : children ?? copyLabel;\n\n return (\n <button\n {...buttonProps}\n type={type}\n onClick={handleClick}\n disabled={isDisabled}\n aria-label={ariaLabelProp || copyLabel}\n >\n {content}\n </button>\n );\n};\n\nexport default CopyButton;\n\n"],"names":["__iconNode","ArrowRight","createLucideIcon","copyTextToClipboard","text","value","textarea","useCopyButton","resetMs","enabled","t","useTranslation","timeoutRef","useRef","copyState","setCopyState","useState","useMemo","canCopy","useEffect","copyLabel","copy","useCallback","result","CopyButton","onCopied","onCopyFailed","onClick","type","children","disabled","rest","ariaLabelProp","buttonProps","handleClick","event","isDisabled","content","jsx"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as B,r as oe,t as v,j as e,b as j}from"./index-B8Y8Y-Mi.js";import{A as w,C as D}from"./CopyButton-CGfuSJtU.js";import{C as de}from"./CliPreflightCard-CxYyogdF.js";import{c as O,a as xe,S as pe,X as me}from"./LanguageSwitcher-D93nCuuR.js";import{S as he}from"./SiteHeader-Dj3gDOnR.js";import{S as R}from"./shield-check-CFNhE_aD.js";import{T as ue}from"./terminal-CGhryJds.js";import{S as ge}from"./smartphone-BcQB9gIh.js";import{C as be}from"./chevron-down-DbSAem1L.js";import{C as je}from"./check-BWCiUZ-C.js";import"./circle-check-CeakjiXC.js";const fe=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Q=O("earth",fe);const Ne=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],J=O("layers",Ne);const ye=[["path",{d:"M5 12h14",key:"1ays0h"}]],ve=O("minus",ye);const we=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],_e=O("zap",we),H=[_e,J,R],V=["text-yellow-400","text-green-400","text-cyan-400"],F=[J,Q,R],T=[ue,ge,Q],He=()=>{const{t}=B();xe("titles.landing");const d=t("landing.badges",{returnObjects:!0})||[],x=t("landing.features",{returnObjects:!0})||[],l=t("landing.pipeline",{returnObjects:!0})||{},r=t("landing.ciQuickstart",{returnObjects:!0})||{},n=t("landing.guardrails",{returnObjects:!0})||{},p=l.inputs||{},c=l.outputs||{},u=p.files||[],I=c.files||[],i=t("landing.entryPoints",{returnObjects:!0})||{},h=i.items||[],o=t("landing.comparison",{returnObjects:!0})||{},k=o.columns||[],z=o.rows||[],W=o.legend||{},$=t("landing.pricing",{returnObjects:!0})||{},g=t("landing.socialProof",{returnObjects:!0})||{},C=t("landing.faq.items",{returnObjects:!0})||[],A=t("landing.footer.links",{returnObjects:!0})||[],Y=t("landing.hero.alt",{defaultValue:"ShipScreens preview"}),L=t("landing.hero.outputs",{returnObjects:!0})||[],f=t("landing.hero.cliQuickstart",{returnObjects:!0})||{},m=t("landing.hero.outputExample",{returnObjects:!0})||{},X=t("landing.hero.noLogin",{defaultValue:"No login required · Free forever"}),M=t("landing.hero.proUnlockNote",{defaultValue:""}),q=t("landing.hero.proPriceNote",{defaultValue:""}),Z=t("landing.footer.copyright",{year:new Date().getFullYear()}),S=$.free||{},N=$.pro||{},b=$.cliProUnlock||{},G="/app/?sample=5panel&entry_source=landing_open_app_header",K="/tools/agent-cli/?entry_source=landing_cli_quickstart",ee="/tools/first-export/?entry_source=landing_first_export_hero",se="/tools/first-export/?entry_source=landing_first_export_header",te="/app/?sample=5panel&entry_source=landing_open_app_pricing_free",ae="/app/?sample=5panel&upgrade=1&entry_source=landing_go_pro_pricing",P="support@shimaumaservices.co.jp",le=t("landing.partner.emailSubject",{defaultValue:"ShipScreens Founding / Design Partner"}),re=t("landing.partner.emailBody",{defaultValue:""}),ne=`mailto:${P}?subject=${encodeURIComponent(le)}&body=${encodeURIComponent(re)}`,ce={"@context":"https://schema.org","@type":"SoftwareApplication",name:"ShipScreens",applicationCategory:"Multimedia",operatingSystem:"iOS, Android, Web",url:"https://shipscreens.com/",offers:{"@type":"Offer",priceCurrency:"USD",price:"19.00",availability:"https://schema.org/InStock"},description:t("landing.subheading"),provider:{"@type":"Organization",name:"ShipScreens",url:"https://shipscreens.com/"}},E=C.length>0?{"@context":"https://schema.org","@type":"FAQPage",mainEntity:C.map(s=>({"@type":"Question",name:s.q,acceptedAnswer:{"@type":"Answer",text:s.a}}))}:null;return oe.useEffect(()=>{v("landing_view",{path:typeof window<"u"?window.location.pathname:"/"})},[]),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white",children:[e.jsx(pe,{}),e.jsx(he,{variant:"dark",active:"home",openAppHref:G,onToolsClick:s=>j(s,"landing_nav_click",{cta:"tools_header"}),onPricingClick:s=>j(s,"landing_nav_click",{cta:"pricing_header"}),onOpenAppClick:s=>j(s,"landing_nav_click",{cta:"open_app_header"}),primaryCta:{href:se,label:t("landing.nav.primaryCta",{defaultValue:t("landing.nav.goPro")}),onClick:s=>j(s,"landing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-7xl mx-auto px-6 space-y-24 pb-24",children:[e.jsxs("section",{className:"grid md:grid-cols-[1fr_1.4fr] gap-8 items-start",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsx("p",{className:"text-blue-300 text-sm font-semibold tracking-[0.2em] uppercase",children:t("landing.tagline")}),e.jsx("h1",{className:"text-4xl md:text-5xl font-black leading-tight",children:t("landing.headline")}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:t("landing.subheading")}),t("landing.whoFor",{defaultValue:""})&&e.jsx("p",{className:"text-slate-400 text-sm",children:t("landing.whoFor")}),L.length>0&&e.jsx("ul",{className:"space-y-2 text-sm text-slate-200",children:L.map(s=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-2 w-2 h-2 rounded-full bg-blue-400 inline-block"}),e.jsx("span",{children:s})]},s))}),e.jsx(de,{compact:!0,href:"/tools/agent-cli/#preflight",onClick:s=>j(s,"landing_cta_click",{cta:"open_cli_preflight"}),className:"max-w-lg"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("a",{href:ee,onClick:s=>j(s,"landing_cta_click",{cta:"open_first_export_hero"}),className:"px-5 py-3 rounded-xl bg-blue-500 hover:bg-blue-600 font-bold flex items-center gap-2 transition",children:[t("landing.ctas.primary")," ",e.jsx(w,{size:16})]}),e.jsxs("a",{href:K,onClick:s=>j(s,"landing_cta_click",{cta:"agent_cli_hero"}),className:"px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold flex items-center gap-2 hover:bg-slate-900 transition",children:[t("landing.ctas.secondarySample")," ",e.jsx(w,{size:16})]})]}),e.jsx("p",{className:"text-xs text-slate-500 font-medium ml-1",children:X}),M&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:M}),q&&e.jsx("p",{className:"text-xs text-slate-500 ml-1",children:q}),e.jsxs("a",{href:"#design-partner",onClick:()=>v("landing_cta_click",{cta:"jump_design_partner"}),className:"inline-flex items-center gap-1 text-xs text-blue-200 hover:text-blue-100 underline underline-offset-4 ml-1 w-fit",children:[t("landing.partner.jumpCta",{defaultValue:t("landing.partner.emailCta")})," ",e.jsx(w,{size:12})]})]}),e.jsx("div",{className:"flex gap-6 text-sm text-slate-400",children:d.map((s,a)=>{const y=H[a%H.length],ie=V[a%V.length];return e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(y,{size:16,className:ie}),s]},`${s}-${a}`)})})]}),e.jsxs("div",{className:"rounded-2xl bg-slate-900/60 border border-slate-800 p-5 shadow-2xl space-y-3",children:[e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/60 overflow-hidden",children:e.jsxs("video",{className:"w-full h-auto block",autoPlay:!0,loop:!0,muted:!0,playsInline:!0,preload:"metadata",poster:"/app/assets/hero/cli-build-tree-poster.png",children:[e.jsx("source",{src:"/app/assets/hero/cli-build-tree-15s.webm",type:"video/webm"}),e.jsx("source",{src:"/app/assets/hero/cli-build-tree-15s.mp4",type:"video/mp4"})]})}),f.code&&e.jsx(_,{label:f.label,code:f.code}),f.note&&e.jsx("p",{className:"text-xs text-slate-500",children:f.note})]})]}),m?.title&&e.jsxs("section",{id:"output-example",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:m.title}),m.desc&&e.jsx("p",{className:"text-slate-300",children:m.desc})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-6 items-start",children:[e.jsxs("div",{className:"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[m.treeLabel&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:m.treeLabel}),m.tree&&e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:m.tree})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:["01","02","03","04"].map(s=>e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950 overflow-hidden",children:e.jsx("img",{src:`/app/assets/proof/output-${s}.png`,alt:m.thumbAlt||Y,loading:"lazy",className:"w-full h-auto object-cover"})},s))})]}),m.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:m.note})]}),l&&l.title&&e.jsxs("section",{id:"pipeline",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:l.title}),e.jsx("p",{className:"text-slate-300",children:l.subtitle})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:p.label}),e.jsx("h2",{className:"text-2xl font-bold",children:p.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:p.desc}),e.jsx("div",{className:"space-y-3",children:u.map((s,a)=>e.jsx(_,{label:s.label,code:s.code},s.label||a))})]}),e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsx("div",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:c.label}),e.jsx("h2",{className:"text-2xl font-bold",children:c.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:c.desc}),e.jsx("div",{className:"space-y-3",children:I.map((s,a)=>e.jsx(_,{label:s.label,code:s.code},s.label||a))}),c.note&&e.jsx("p",{className:"text-xs text-slate-500",children:c.note})]})]})]}),n?.title&&e.jsxs("section",{id:"guardrails",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:n.title}),n.subtitle&&e.jsx("p",{className:"text-slate-300",children:n.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:(n.items||[]).map((s,a)=>e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-3",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:s.title}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.desc})]},s.title||a))}),n.example?.code&&e.jsxs("div",{className:"max-w-4xl mx-auto rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3",children:[n.example?.label&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:n.example.label}),e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:n.example.code})]}),n.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:n.note})]}),r&&r.title&&e.jsxs("section",{id:"ci-quickstart",className:"max-w-3xl mx-auto space-y-4",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:r.title}),r.desc&&e.jsx("p",{className:"text-slate-300",children:r.desc})]}),r.code&&e.jsx(_,{label:r.codeLabel,code:r.code}),r.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center",children:r.note})]}),h.length>0&&e.jsxs("section",{id:"entry-points",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:i.title}),e.jsx("p",{className:"text-slate-300",children:i.subtitle})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:h.map((s,a)=>{const y=T[a%T.length];return e.jsxs("div",{className:"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center",children:e.jsx(y,{size:18})}),e.jsx("h3",{className:"text-lg font-bold text-white",children:s.title})]}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.desc}),s.code&&e.jsx(_,{label:s.codeLabel,code:s.code}),s.cta&&s.href&&e.jsxs("a",{href:s.href,className:"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors",children:[s.cta," ",e.jsx(w,{size:14})]})]},s.title||a)})})]}),e.jsx("section",{id:"problem",className:"grid md:grid-cols-3 gap-6",children:x.map((s,a)=>{const y=F[a%F.length];return e.jsx(ke,{Icon:y,title:s.title,desc:s.desc},s.title||a)})}),o?.title&&k.length>0&&z.length>0&&e.jsxs("section",{id:"comparison",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2 max-w-3xl mx-auto",children:[e.jsx("h2",{className:"text-3xl font-bold",children:o.title}),o.subtitle&&e.jsx("p",{className:"text-slate-300",children:o.subtitle})]}),e.jsx(Ce,{columns:k,rows:z,legend:W}),o.note&&e.jsx("p",{className:"text-xs text-slate-500 text-center max-w-3xl mx-auto",children:o.note})]}),g&&((g.items||[]).length>0||(g.badges||[]).length>0)&&e.jsxs("section",{id:"social-proof",className:"space-y-6",children:[e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("p",{className:"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase",children:g.title}),e.jsx("p",{className:"text-slate-300",children:g.caption})]}),(g.items||[]).length>0&&e.jsx("div",{className:"grid md:grid-cols-3 gap-4",children:g.items.map((s,a)=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 shadow-sm shadow-slate-900/40",children:[e.jsxs("p",{className:"text-slate-100 text-sm leading-relaxed mb-3",children:['"',s.quote,'"']}),e.jsxs("div",{className:"text-xs text-slate-400",children:[e.jsx("span",{className:"font-semibold text-slate-200",children:s.name})," · ",s.role]})]},`${s.name}-${a}`))}),(g.badges||[]).length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-3 text-[11px] text-slate-300",children:g.badges.map(s=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/70",children:s},s))})]}),e.jsxs("section",{id:"design-partner",className:"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("div",{className:"text-lg font-bold text-white",children:t("landing.partner.title")}),e.jsx("div",{className:"text-sm text-slate-300 leading-relaxed",children:t("landing.partner.body")}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:ne,onClick:()=>v("landing_cta_click",{cta:"email_design_partner"}),className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition",children:[t("landing.partner.emailCta")," ",e.jsx(w,{size:16})]}),e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",onClick:()=>v("landing_cta_click",{cta:"dm_design_partner"}),className:"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition",children:t("landing.partner.dmCta")})]}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t("landing.partner.emailLabel")," ",e.jsx("a",{href:`mailto:${P}`,className:"underline underline-offset-4 hover:text-white",children:P})]})]}),e.jsxs("section",{id:"pricing",className:"grid md:grid-cols-2 gap-6",children:[e.jsx(U,{title:S.title,price:S.price,bullets:S.bullets||[],cta:S.cta,href:te,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(U,{title:N.title,price:N.price,bullets:N.bullets||[],cta:N.cta,href:ae,trackingCta:"go_pro_pricing",highlight:!0,badge:N.badge})]}),b?.cmd&&e.jsx("section",{className:"max-w-3xl mx-auto w-full",children:e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:b.title}),e.jsx("span",{className:"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full",children:"PRO"})]}),b.body&&e.jsx("p",{className:"text-sm text-slate-300",children:b.body}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:b.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(D,{value:b.cmd,onCopied:()=>v("landing_cta_click",{cta:"copy_cli_pro_unlock"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold"})}),b.note&&e.jsx("div",{className:"text-xs text-slate-500",children:b.note})]})}),C.length>0&&e.jsxs("section",{id:"faq",className:"max-w-3xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:t("landing.faq.title")}),e.jsx("div",{className:"space-y-4",children:C.map((s,a)=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-xl p-6",children:[e.jsx("h3",{className:"font-semibold text-lg mb-2",children:s.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:s.a})]},`${s.q}-${a}`))})]})]}),e.jsxs("footer",{className:"border-t border-slate-800 bg-slate-950 py-12 mt-24",children:[e.jsxs("div",{className:"max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-start gap-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-500 text-sm",children:[e.jsx("div",{className:"w-7 h-7 rounded-lg border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png?v=3",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{children:Z})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-8 text-sm text-slate-400",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:t("landing.footer.terms")}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:t("landing.footer.privacy")}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:t("landing.footer.legal")})]})]}),A.length>0&&e.jsx("div",{className:"max-w-6xl mx-auto px-6 mt-6 flex flex-wrap gap-4 text-xs text-slate-500",children:A.map(s=>e.jsx("a",{href:s.href,className:"hover:text-white transition-colors",children:s.label},s.label))})]}),e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(ce)}}),E&&e.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(E)}})]})},ke=({Icon:t,title:d,desc:x})=>e.jsxs("div",{className:"p-5 rounded-xl bg-slate-900/60 border border-slate-800 hover:border-slate-700 transition",children:[e.jsx("div",{className:"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center mb-3",children:e.jsx(t,{})}),e.jsx("h3",{className:"text-lg font-bold mb-1",children:d}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:x})]}),Ce=({columns:t,rows:d,legend:x})=>{const l={yes:x?.yes||"Yes",partial:x?.partial||"Partial",no:x?.no||"No"},r={yes:{Icon:je,className:"text-emerald-300",label:l.yes},partial:{Icon:ve,className:"text-amber-300",label:l.partial},no:{Icon:me,className:"text-slate-500",label:l.no}},n=i=>{const h=r[i]||r.partial,o=h.Icon;return e.jsxs("span",{className:`inline-flex items-center justify-center w-8 h-8 rounded-lg border border-slate-800 bg-slate-950/60 ${h.className}`,"aria-label":h.label,children:[e.jsx("span",{className:"sr-only",children:h.label}),e.jsx(o,{size:16})]})},p=Array.isArray(t)?t.filter(Boolean):[],c=p.length,u={gridTemplateColumns:`1.4fr repeat(${c||1}, minmax(0, 1fr))`},I=Math.max(640,320+c*180);return e.jsx("div",{className:"overflow-auto rounded-2xl border border-slate-800 bg-slate-900/40",children:e.jsxs("div",{style:{minWidth:I},children:[e.jsxs("div",{className:"grid gap-0 border-b border-slate-800",style:u,children:[e.jsxs("div",{className:"p-4 text-xs uppercase tracking-[0.2em] text-slate-500 font-semibold",children:[l.yes," / ",l.partial," / ",l.no]}),p.map(i=>e.jsx("div",{className:"p-4 text-sm font-bold text-white text-center border-l border-slate-800",children:i},i))]}),(d||[]).map((i,h)=>e.jsxs("div",{className:`grid gap-0 ${h===d.length-1?"":"border-b border-slate-800"}`,style:u,children:[e.jsx("div",{className:"p-4 text-sm text-slate-200",children:e.jsx("div",{className:"font-semibold text-white",children:i.label})}),(i.values||[]).slice(0,c).map((o,k)=>e.jsx("div",{className:"p-4 flex items-center justify-center border-l border-slate-800",children:n(o)},`${i.label}-${k}`))]},`${i.label}-${h}`))]})})},U=({title:t,price:d,bullets:x,cta:l,href:r,trackingCta:n,highlight:p,badge:c})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${p?"border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20":"border-slate-800 bg-slate-900/60"} flex flex-col gap-4`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xl font-bold",children:t}),p&&c&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:c})]}),e.jsx("div",{className:"text-3xl font-black",children:d}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:x.map(u=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-2 h-2 rounded-full bg-blue-400 inline-block"}),u]},u))}),e.jsx("a",{href:r,onClick:u=>n?j(u,"landing_cta_click",{cta:n}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${p?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:l})]}),_=({label:t,code:d})=>{const{t:x}=B();if(!d)return null;const l=x("common.showCommands",{defaultValue:"Show commands"}),r=typeof window>"u"?!0:window.matchMedia("(min-width: 640px)").matches;return e.jsxs("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-2",children:[e.jsx("div",{className:"min-w-0",children:t&&e.jsx("div",{className:"text-[11px] uppercase tracking-[0.2em] text-slate-500",children:t})}),e.jsx(D,{value:d,className:"shrink-0 text-[11px] px-2 py-1 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition disabled:opacity-50 disabled:cursor-not-allowed"})]}),e.jsxs("details",{className:"group",open:r,children:[e.jsxs("summary",{className:"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none",children:[e.jsx("span",{children:l}),e.jsx(be,{size:14,className:"text-slate-500 transition-transform duration-200 group-open:rotate-180"})]}),e.jsx("pre",{className:"mt-2 text-xs text-slate-200 font-mono whitespace-pre leading-relaxed overflow-auto",children:d})]})]})};export{He as default};
|
|
2
|
-
//# sourceMappingURL=Landing-DAIP71DD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Landing-DAIP71DD.js","sources":["../../node_modules/lucide-react/dist/esm/icons/earth.js","../../node_modules/lucide-react/dist/esm/icons/layers.js","../../node_modules/lucide-react/dist/esm/icons/minus.js","../../node_modules/lucide-react/dist/esm/icons/zap.js","../../src/pages/Landing.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.54 15H17a2 2 0 0 0-2 2v4.54\", key: \"1djwo0\" }],\n [\n \"path\",\n {\n d: \"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17\",\n key: \"1tzkfa\"\n }\n ],\n [\"path\", { d: \"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05\", key: \"14pb5j\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Earth = createLucideIcon(\"earth\", __iconNode);\n\nexport { __iconNode, Earth as default };\n//# sourceMappingURL=earth.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\",\n key: \"zw3jo\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\",\n key: \"1wduqc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\",\n key: \"kqbvx6\"\n }\n ]\n];\nconst Layers = createLucideIcon(\"layers\", __iconNode);\n\nexport { __iconNode, Layers as default };\n//# sourceMappingURL=layers.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.js.map\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ArrowRight, Check, ChevronDown, Globe2, Layers, Minus, ShieldCheck, Smartphone, Terminal, X, Zap } from 'lucide-react';\nimport CopyButton from '../components/CopyButton';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport StagingBadge from '../components/StagingBadge';\nimport usePageTitle from '../hooks/usePageTitle';\nimport SiteHeader from '../components/SiteHeader';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst badgeIcons = [Zap, Layers, ShieldCheck];\nconst badgeIconClasses = ['text-yellow-400', 'text-green-400', 'text-cyan-400'];\nconst featureIcons = [Layers, Globe2, ShieldCheck];\nconst entryIcons = [Terminal, Smartphone, Globe2];\n\nconst Landing = () => {\n const { t } = useTranslation();\n usePageTitle('titles.landing');\n const badges = t('landing.badges', { returnObjects: true }) || [];\n const features = t('landing.features', { returnObjects: true }) || [];\n const pipeline = t('landing.pipeline', { returnObjects: true }) || {};\n const ciQuickstart = t('landing.ciQuickstart', { returnObjects: true }) || {};\n const guardrails = t('landing.guardrails', { returnObjects: true }) || {};\n const pipelineInputs = pipeline.inputs || {};\n const pipelineOutputs = pipeline.outputs || {};\n const pipelineInputFiles = pipelineInputs.files || [];\n const pipelineOutputFiles = pipelineOutputs.files || [];\n const entryPoints = t('landing.entryPoints', { returnObjects: true }) || {};\n const entryItems = entryPoints.items || [];\n const comparison = t('landing.comparison', { returnObjects: true }) || {};\n const comparisonColumns = comparison.columns || [];\n const comparisonRows = comparison.rows || [];\n const comparisonLegend = comparison.legend || {};\n const pricing = t('landing.pricing', { returnObjects: true }) || {};\n const socialProof = t('landing.socialProof', { returnObjects: true }) || {};\n const faqItems = t('landing.faq.items', { returnObjects: true }) || [];\n const footerLinks = t('landing.footer.links', { returnObjects: true }) || [];\n const heroAlt = t('landing.hero.alt', { defaultValue: 'ShipScreens preview' });\n const heroOutputs = t('landing.hero.outputs', { returnObjects: true }) || [];\n const heroCli = t('landing.hero.cliQuickstart', { returnObjects: true }) || {};\n const heroOutputExample = t('landing.hero.outputExample', { returnObjects: true }) || {};\n const noLoginCopy = t('landing.hero.noLogin', { defaultValue: 'No login required · Free forever' });\n const proUnlockNote = t('landing.hero.proUnlockNote', { defaultValue: '' });\n const proPriceNote = t('landing.hero.proPriceNote', { defaultValue: '' });\n const footerCopy = t('landing.footer.copyright', { year: new Date().getFullYear() });\n const freePlan = pricing.free || {};\n const proPlan = pricing.pro || {};\n const cliProUnlock = pricing.cliProUnlock || {};\n const openAppHref = '/app/?sample=5panel&entry_source=landing_open_app_header';\n const agentCliHref = '/tools/agent-cli/?entry_source=landing_cli_quickstart';\n const firstExportHref = '/tools/first-export/?entry_source=landing_first_export_hero';\n const firstExportHeaderHref = '/tools/first-export/?entry_source=landing_first_export_header';\n const freePlanHref = '/app/?sample=5panel&entry_source=landing_open_app_pricing_free';\n const proPlanHref = '/app/?sample=5panel&upgrade=1&entry_source=landing_go_pro_pricing';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const partnerSubject = t('landing.partner.emailSubject', { defaultValue: 'ShipScreens Founding / Design Partner' });\n const partnerBody = t('landing.partner.emailBody', { defaultValue: '' });\n const partnerMailto = `mailto:${supportEmail}?subject=${encodeURIComponent(partnerSubject)}&body=${encodeURIComponent(\n partnerBody\n )}`;\n const structuredData = {\n '@context': 'https://schema.org',\r\n '@type': 'SoftwareApplication',\r\n name: 'ShipScreens',\r\n applicationCategory: 'Multimedia',\r\n operatingSystem: 'iOS, Android, Web',\r\n url: 'https://shipscreens.com/',\r\n offers: {\r\n '@type': 'Offer',\r\n priceCurrency: 'USD',\r\n price: '19.00',\r\n availability: 'https://schema.org/InStock',\r\n },\r\n description: t('landing.subheading'),\r\n provider: {\r\n '@type': 'Organization',\r\n name: 'ShipScreens',\n url: 'https://shipscreens.com/',\n },\n };\n const faqStructuredData =\n faqItems.length > 0\n ? {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map((item) => ({\n '@type': 'Question',\n name: item.q,\n acceptedAnswer: {\n '@type': 'Answer',\n text: item.a,\n },\n })),\n }\n : null;\n\n useEffect(() => {\n trackEvent('landing_view', { path: typeof window !== 'undefined' ? window.location.pathname : '/' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"home\"\n openAppHref={openAppHref}\n onToolsClick={(event) => trackEventAndFollowLink(event, 'landing_nav_click', { cta: 'tools_header' })}\n onPricingClick={(event) => trackEventAndFollowLink(event, 'landing_nav_click', { cta: 'pricing_header' })}\n onOpenAppClick={(event) => trackEventAndFollowLink(event, 'landing_nav_click', { cta: 'open_app_header' })}\n primaryCta={{\n href: firstExportHeaderHref,\n label: t('landing.nav.primaryCta', { defaultValue: t('landing.nav.goPro') }),\n onClick: (event) => trackEventAndFollowLink(event, 'landing_nav_click', { cta: 'first_export_header' }),\n }}\n />\n\n <main className=\"max-w-7xl mx-auto px-6 space-y-24 pb-24\">\n <section className=\"grid md:grid-cols-[1fr_1.4fr] gap-8 items-start\">\n <div className=\"space-y-6\">\n <p className=\"text-blue-300 text-sm font-semibold tracking-[0.2em] uppercase\">{t('landing.tagline')}</p>\n <h1 className=\"text-4xl md:text-5xl font-black leading-tight\">{t('landing.headline')}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{t('landing.subheading')}</p>\n {t('landing.whoFor', { defaultValue: '' }) && (\n <p className=\"text-slate-400 text-sm\">{t('landing.whoFor')}</p>\n )}\n {heroOutputs.length > 0 && (\n <ul className=\"space-y-2 text-sm text-slate-200\">\n {heroOutputs.map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <span className=\"mt-2 w-2 h-2 rounded-full bg-blue-400 inline-block\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )}\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'landing_cta_click', { cta: 'open_cli_preflight' })\n }\n className=\"max-w-lg\"\n />\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'landing_cta_click', { cta: 'open_first_export_hero' })\n }\n className=\"px-5 py-3 rounded-xl bg-blue-500 hover:bg-blue-600 font-bold flex items-center gap-2 transition\"\n >\n {t('landing.ctas.primary')} <ArrowRight size={16} />\n </a>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'landing_cta_click', { cta: 'agent_cli_hero' })}\n className=\"px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold flex items-center gap-2 hover:bg-slate-900 transition\"\n >\n {t('landing.ctas.secondarySample')} <ArrowRight size={16} />\n </a>\n </div>\n <p className=\"text-xs text-slate-500 font-medium ml-1\">{noLoginCopy}</p>\n {proUnlockNote && <p className=\"text-xs text-slate-500 ml-1\">{proUnlockNote}</p>}\n {proPriceNote && <p className=\"text-xs text-slate-500 ml-1\">{proPriceNote}</p>}\n <a\n href=\"#design-partner\"\n onClick={() => trackEvent('landing_cta_click', { cta: 'jump_design_partner' })}\n className=\"inline-flex items-center gap-1 text-xs text-blue-200 hover:text-blue-100 underline underline-offset-4 ml-1 w-fit\"\n >\n {t('landing.partner.jumpCta', { defaultValue: t('landing.partner.emailCta') })} <ArrowRight size={12} />\n </a>\n </div>\n <div className=\"flex gap-6 text-sm text-slate-400\">\n {badges.map((text, index) => {\n const Icon = badgeIcons[index % badgeIcons.length];\n const iconClass = badgeIconClasses[index % badgeIconClasses.length];\n return (\n <span key={`${text}-${index}`} className=\"flex items-center gap-2\">\r\n <Icon size={16} className={iconClass} />\r\n {text}\r\n </span>\r\n );\n })}\n </div>\n </div>\n <div className=\"rounded-2xl bg-slate-900/60 border border-slate-800 p-5 shadow-2xl space-y-3\">\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/60 overflow-hidden\">\n <video\n className=\"w-full h-auto block\"\n autoPlay\n loop\n muted\n playsInline\n preload=\"metadata\"\n poster=\"/app/assets/hero/cli-build-tree-poster.png\"\n >\n <source src=\"/app/assets/hero/cli-build-tree-15s.webm\" type=\"video/webm\" />\n <source src=\"/app/assets/hero/cli-build-tree-15s.mp4\" type=\"video/mp4\" />\n </video>\n </div>\n {heroCli.code && <CodeBlock label={heroCli.label} code={heroCli.code} />}\n {heroCli.note && <p className=\"text-xs text-slate-500\">{heroCli.note}</p>}\n </div>\n </section>\n\n {heroOutputExample?.title && (\n <section id=\"output-example\" className=\"space-y-6\">\n <div className=\"text-center space-y-2 max-w-3xl mx-auto\">\n <h2 className=\"text-3xl font-bold\">{heroOutputExample.title}</h2>\n {heroOutputExample.desc && <p className=\"text-slate-300\">{heroOutputExample.desc}</p>}\n </div>\n <div className=\"grid md:grid-cols-2 gap-6 items-start\">\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3\">\n {heroOutputExample.treeLabel && (\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500\">{heroOutputExample.treeLabel}</div>\n )}\n {heroOutputExample.tree && (\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{heroOutputExample.tree}</pre>\n )}\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n {['01', '02', '03', '04'].map((n) => (\n <div key={n} className=\"rounded-xl border border-slate-800 bg-slate-950 overflow-hidden\">\n <img\n src={`/app/assets/proof/output-${n}.png`}\n alt={heroOutputExample.thumbAlt || heroAlt}\n loading=\"lazy\"\n className=\"w-full h-auto object-cover\"\n />\n </div>\n ))}\n </div>\n </div>\n {heroOutputExample.note && (\n <p className=\"text-xs text-slate-500 text-center max-w-3xl mx-auto\">{heroOutputExample.note}</p>\n )}\n </section>\n )}\n\n {pipeline && pipeline.title && (\n <section id=\"pipeline\" className=\"space-y-6\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{pipeline.title}</p>\n <p className=\"text-slate-300\">{pipeline.subtitle}</p>\n </div>\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4\">\n <div className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{pipelineInputs.label}</div>\n <h2 className=\"text-2xl font-bold\">{pipelineInputs.title}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{pipelineInputs.desc}</p>\n <div className=\"space-y-3\">\n {pipelineInputFiles.map((file, index) => (\n <CodeBlock key={file.label || index} label={file.label} code={file.code} />\n ))}\n </div>\n </div>\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4\">\n <div className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{pipelineOutputs.label}</div>\n <h2 className=\"text-2xl font-bold\">{pipelineOutputs.title}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{pipelineOutputs.desc}</p>\n <div className=\"space-y-3\">\n {pipelineOutputFiles.map((file, index) => (\n <CodeBlock key={file.label || index} label={file.label} code={file.code} />\n ))}\n </div>\n {pipelineOutputs.note && <p className=\"text-xs text-slate-500\">{pipelineOutputs.note}</p>}\n </div>\n </div>\n </section>\n )}\n\n {guardrails?.title && (\n <section id=\"guardrails\" className=\"space-y-6\">\n <div className=\"text-center space-y-2 max-w-3xl mx-auto\">\n <h2 className=\"text-3xl font-bold\">{guardrails.title}</h2>\n {guardrails.subtitle && <p className=\"text-slate-300\">{guardrails.subtitle}</p>}\n </div>\n <div className=\"grid md:grid-cols-3 gap-6\">\n {(guardrails.items || []).map((item, index) => (\n <div key={item.title || index} className=\"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-3\">\n <div className=\"text-lg font-bold text-white\">{item.title}</div>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{item.desc}</p>\n </div>\n ))}\n </div>\n {guardrails.example?.code && (\n <div className=\"max-w-4xl mx-auto rounded-2xl border border-slate-800 bg-slate-950/60 p-5 space-y-3\">\n {guardrails.example?.label && (\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500\">{guardrails.example.label}</div>\n )}\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{guardrails.example.code}</pre>\n </div>\n )}\n {guardrails.note && <p className=\"text-xs text-slate-500 text-center max-w-3xl mx-auto\">{guardrails.note}</p>}\n </section>\n )}\n\n {ciQuickstart && ciQuickstart.title && (\n <section id=\"ci-quickstart\" className=\"max-w-3xl mx-auto space-y-4\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{ciQuickstart.title}</p>\n {ciQuickstart.desc && <p className=\"text-slate-300\">{ciQuickstart.desc}</p>}\n </div>\n {ciQuickstart.code && (\n <CodeBlock label={ciQuickstart.codeLabel} code={ciQuickstart.code} />\n )}\n {ciQuickstart.note && <p className=\"text-xs text-slate-500 text-center\">{ciQuickstart.note}</p>}\n </section>\n )}\n\n {entryItems.length > 0 && (\n <section id=\"entry-points\" className=\"space-y-6\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{entryPoints.title}</p>\n <p className=\"text-slate-300\">{entryPoints.subtitle}</p>\n </div>\n <div className=\"grid md:grid-cols-3 gap-6\">\n {entryItems.map((item, index) => {\n const Icon = entryIcons[index % entryIcons.length];\n return (\n <div key={item.title || index} className=\"p-6 rounded-2xl bg-slate-900/60 border border-slate-800 space-y-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center\">\n <Icon size={18} />\n </div>\n <h3 className=\"text-lg font-bold text-white\">{item.title}</h3>\n </div>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{item.desc}</p>\n {item.code && <CodeBlock label={item.codeLabel} code={item.code} />}\n {item.cta && item.href && (\n <a\n href={item.href}\n className=\"inline-flex items-center gap-2 text-sm text-blue-200 hover:text-blue-100 transition-colors\"\n >\n {item.cta} <ArrowRight size={14} />\n </a>\n )}\n </div>\n );\n })}\n </div>\n </section>\n )}\n\n <section id=\"problem\" className=\"grid md:grid-cols-3 gap-6\">\n {features.map((f, index) => {\n const Icon = featureIcons[index % featureIcons.length];\n return <FeatureCard key={f.title || index} Icon={Icon} title={f.title} desc={f.desc} />;\n })}\n </section>\n\n {comparison?.title && comparisonColumns.length > 0 && comparisonRows.length > 0 && (\n <section id=\"comparison\" className=\"space-y-6\">\n <div className=\"text-center space-y-2 max-w-3xl mx-auto\">\n <h2 className=\"text-3xl font-bold\">{comparison.title}</h2>\n {comparison.subtitle && <p className=\"text-slate-300\">{comparison.subtitle}</p>}\n </div>\n <ComparisonTable columns={comparisonColumns} rows={comparisonRows} legend={comparisonLegend} />\n {comparison.note && <p className=\"text-xs text-slate-500 text-center max-w-3xl mx-auto\">{comparison.note}</p>}\n </section>\n )}\n\n {socialProof &&\n ((socialProof.items || []).length > 0 || (socialProof.badges || []).length > 0) && (\n <section id=\"social-proof\" className=\"space-y-6\">\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs font-semibold tracking-[0.2em] text-blue-200 uppercase\">{socialProof.title}</p>\n <p className=\"text-slate-300\">{socialProof.caption}</p>\n </div>\n {(socialProof.items || []).length > 0 && (\n <div className=\"grid md:grid-cols-3 gap-4\">\n {socialProof.items.map((item, i) => (\n <div key={`${item.name}-${i}`} className=\"p-5 rounded-xl bg-slate-900/60 border border-slate-800 shadow-sm shadow-slate-900/40\">\n <p className=\"text-slate-100 text-sm leading-relaxed mb-3\">\"{item.quote}\"</p>\n <div className=\"text-xs text-slate-400\">\n <span className=\"font-semibold text-slate-200\">{item.name}</span> · {item.role}\n </div>\n </div>\n ))}\n </div>\n )}\n {(socialProof.badges || []).length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-3 text-[11px] text-slate-300\">\n {socialProof.badges.map((badge) => (\n <span key={badge} className=\"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/70\">\n {badge}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </section>\n )}\n\n <section id=\"design-partner\" className=\"max-w-3xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <div className=\"text-lg font-bold text-white\">{t('landing.partner.title')}</div>\n <div className=\"text-sm text-slate-300 leading-relaxed\">{t('landing.partner.body')}</div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={partnerMailto}\n onClick={() => trackEvent('landing_cta_click', { cta: 'email_design_partner' })}\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 {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={() => trackEvent('landing_cta_click', { cta: 'dm_design_partner' })}\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 {t('landing.partner.dmCta')}\n </a>\n </div>\n <div className=\"text-xs text-slate-500\">\n {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\n <section id=\"pricing\" className=\"grid md:grid-cols-2 gap-6\">\n <PricingCard\n title={freePlan.title}\n price={freePlan.price}\n bullets={freePlan.bullets || []}\n cta={freePlan.cta}\n href={freePlanHref}\n trackingCta=\"open_app_pricing_free\"\n highlight={false}\n />\n <PricingCard\n title={proPlan.title}\n price={proPlan.price}\n bullets={proPlan.bullets || []}\n cta={proPlan.cta}\n href={proPlanHref}\n trackingCta=\"go_pro_pricing\"\n highlight\n badge={proPlan.badge}\n />\n </section>\n\n {cliProUnlock?.cmd && (\n <section className=\"max-w-3xl mx-auto w-full\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{cliProUnlock.title}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {cliProUnlock.body && <p className=\"text-sm text-slate-300\">{cliProUnlock.body}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{cliProUnlock.cmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={cliProUnlock.cmd}\n onCopied={() => trackEvent('landing_cta_click', { cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n />\n </div>\n {cliProUnlock.note && <div className=\"text-xs text-slate-500\">{cliProUnlock.note}</div>}\n </div>\n </section>\n )}\n\n {faqItems.length > 0 && (\n <section id=\"faq\" className=\"max-w-3xl mx-auto w-full space-y-6\">\n <h2 className=\"text-3xl font-bold text-center\">{t('landing.faq.title')}</h2>\n <div className=\"space-y-4\">\n {faqItems.map((item, i) => (\r\n <div key={`${item.q}-${i}`} className=\"bg-slate-900/60 border border-slate-800 rounded-xl p-6\">\r\n <h3 className=\"font-semibold text-lg mb-2\">{item.q}</h3>\r\n <p className=\"text-slate-300 text-sm leading-relaxed\">{item.a}</p>\r\n </div>\r\n ))}\r\n </div>\r\n </section>\r\n )}\r\n </main>\r\n\n <footer className=\"border-t border-slate-800 bg-slate-950 py-12 mt-24\">\n <div className=\"max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-start gap-6\">\n <div className=\"flex items-center gap-2 text-slate-500 text-sm\">\n <div className=\"w-7 h-7 rounded-lg border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden\">\n <img\n src=\"/app/assets/icons/favicon-32x32.png?v=3\"\n alt=\"ShipScreens\"\n className=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n <span>{footerCopy}</span>\n </div>\n <div className=\"flex flex-wrap justify-center gap-8 text-sm text-slate-400\">\r\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">{t('landing.footer.terms')}</a>\r\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">{t('landing.footer.privacy')}</a>\r\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">{t('landing.footer.legal')}</a>\r\n </div>\r\n </div>\r\n {footerLinks.length > 0 && (\n <div className=\"max-w-6xl mx-auto px-6 mt-6 flex flex-wrap gap-4 text-xs text-slate-500\">\n {footerLinks.map((item) => (\n <a key={item.label} href={item.href} className=\"hover:text-white transition-colors\">\n {item.label}\n </a>\n ))}\n </div>\n )}\n </footer>\r\n\r\n <script type=\"application/ld+json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }} />\n {faqStructuredData && (\n <script type=\"application/ld+json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(faqStructuredData) }} />\n )}\n </div>\n );\n};\n\r\nconst FeatureCard = ({ Icon, title, desc }) => (\n <div className=\"p-5 rounded-xl bg-slate-900/60 border border-slate-800 hover:border-slate-700 transition\">\n <div className=\"w-10 h-10 rounded-lg bg-slate-800 text-blue-300 flex items-center justify-center mb-3\">\n <Icon />\n </div>\r\n <h3 className=\"text-lg font-bold mb-1\">{title}</h3>\r\n <p className=\"text-slate-300 text-sm leading-relaxed\">{desc}</p>\r\n </div>\r\n);\n\nconst ComparisonTable = ({ columns, rows, legend }) => {\n const legendLabels = {\n yes: legend?.yes || 'Yes',\n partial: legend?.partial || 'Partial',\n no: legend?.no || 'No',\n };\n\n const statusMeta = {\n yes: { Icon: Check, className: 'text-emerald-300', label: legendLabels.yes },\n partial: { Icon: Minus, className: 'text-amber-300', label: legendLabels.partial },\n no: { Icon: X, className: 'text-slate-500', label: legendLabels.no },\n };\n\n const renderStatus = (value) => {\n const meta = statusMeta[value] || statusMeta.partial;\n const Icon = meta.Icon;\n return (\n <span className={`inline-flex items-center justify-center w-8 h-8 rounded-lg border border-slate-800 bg-slate-950/60 ${meta.className}`} aria-label={meta.label}>\n <span className=\"sr-only\">{meta.label}</span>\n <Icon size={16} />\n </span>\n );\n };\n\n const normalizedColumns = Array.isArray(columns) ? columns.filter(Boolean) : [];\n const columnCount = normalizedColumns.length;\n const gridStyle = {\n gridTemplateColumns: `1.4fr repeat(${columnCount || 1}, minmax(0, 1fr))`,\n };\n const minWidth = Math.max(640, 320 + columnCount * 180);\n\n return (\n <div className=\"overflow-auto rounded-2xl border border-slate-800 bg-slate-900/40\">\n <div style={{ minWidth }}>\n <div className=\"grid gap-0 border-b border-slate-800\" style={gridStyle}>\n <div className=\"p-4 text-xs uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {legendLabels.yes} / {legendLabels.partial} / {legendLabels.no}\n </div>\n {normalizedColumns.map((col) => (\n <div key={col} className=\"p-4 text-sm font-bold text-white text-center border-l border-slate-800\">\n {col}\n </div>\n ))}\n </div>\n\n {(rows || []).map((row, idx) => (\n <div\n key={`${row.label}-${idx}`}\n className={`grid gap-0 ${idx === (rows.length - 1) ? '' : 'border-b border-slate-800'}`}\n style={gridStyle}\n >\n <div className=\"p-4 text-sm text-slate-200\">\n <div className=\"font-semibold text-white\">{row.label}</div>\n </div>\n {(row.values || []).slice(0, columnCount).map((value, i) => (\n <div key={`${row.label}-${i}`} className=\"p-4 flex items-center justify-center border-l border-slate-800\">\n {renderStatus(value)}\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nconst PricingCard = ({ title, price, bullets, cta, href, trackingCta, highlight, badge }) => (\n <div className={`p-6 rounded-2xl border ${highlight ? 'border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20' : 'border-slate-800 bg-slate-900/60'} flex flex-col gap-4`}>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-xl font-bold\">{title}</h3>\n {highlight && badge && <span className=\"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold\">{badge}</span>}\n </div>\r\n <div className=\"text-3xl font-black\">{price}</div>\r\n <ul className=\"text-slate-200 space-y-2 text-sm\">\r\n {bullets.map((item) => (\r\n <li key={item} className=\"flex items-center gap-2\">\r\n <span className=\"w-2 h-2 rounded-full bg-blue-400 inline-block\" />\r\n {item}\r\n </li>\r\n ))}\r\n </ul>\r\n <a\n href={href}\n onClick={(event) =>\n trackingCta ? trackEventAndFollowLink(event, 'landing_cta_click', { cta: trackingCta }) : undefined\n }\n className={`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${highlight ? 'bg-blue-500 text-white hover:bg-blue-600' : 'bg-white text-slate-900 hover:scale-[1.02]'}`}\n >\n {cta}\n </a>\n </div>\n);\n\nconst CodeBlock = ({ label, code }) => {\n const { t } = useTranslation();\n if (!code) return null;\n\n const toggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\n const defaultOpen = typeof window === 'undefined' ? true : window.matchMedia('(min-width: 640px)').matches;\n\n return (\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <div className=\"flex items-center justify-between gap-3 mb-2\">\n <div className=\"min-w-0\">\n {label && <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500\">{label}</div>}\n </div>\n <CopyButton\n value={code}\n className=\"shrink-0 text-[11px] px-2 py-1 rounded-md border border-slate-700 bg-slate-900/60 text-slate-200 hover:bg-slate-900 transition disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n </div>\n <details className=\"group\" open={defaultOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{toggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <pre className=\"mt-2 text-xs text-slate-200 font-mono whitespace-pre leading-relaxed overflow-auto\">{code}</pre>\n </details>\n </div>\n );\n};\n\nexport default Landing;\n"],"names":["__iconNode","Earth","createLucideIcon","Layers","Minus","Zap","badgeIcons","ShieldCheck","badgeIconClasses","featureIcons","Globe2","entryIcons","Terminal","Smartphone","Landing","useTranslation","usePageTitle","badges","features","pipeline","ciQuickstart","guardrails","pipelineInputs","pipelineOutputs","pipelineInputFiles","pipelineOutputFiles","entryPoints","entryItems","comparison","comparisonColumns","comparisonRows","comparisonLegend","pricing","socialProof","faqItems","footerLinks","heroAlt","heroOutputs","heroCli","heroOutputExample","noLoginCopy","proUnlockNote","proPriceNote","footerCopy","freePlan","proPlan","cliProUnlock","openAppHref","agentCliHref","firstExportHref","firstExportHeaderHref","freePlanHref","proPlanHref","supportEmail","partnerSubject","partnerBody","partnerMailto","structuredData","faqStructuredData","item","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","CliPreflightCard","ArrowRight","text","index","Icon","iconClass","CodeBlock","n","file","f","FeatureCard","ComparisonTable","i","badge","PricingCard","CopyButton","title","desc","columns","rows","legend","legendLabels","statusMeta","Check","X","renderStatus","value","meta","normalizedColumns","columnCount","gridStyle","minWidth","col","row","idx","price","bullets","cta","href","trackingCta","highlight","label","code","t","toggleLabel","defaultOpen","ChevronDown"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as k,r as P,t as h,j as e,b as l}from"./index-B8Y8Y-Mi.js";import{A as c,C as T}from"./CopyButton-CGfuSJtU.js";import{a as B,S as I}from"./LanguageSwitcher-D93nCuuR.js";import{S}from"./SiteHeader-Dj3gDOnR.js";import{S as z}from"./shield-check-CFNhE_aD.js";import{C as j}from"./check-BWCiUZ-C.js";import{C as A}from"./copy-C9t_FzCZ.js";import{T as L}from"./terminal-CGhryJds.js";const q=o=>(o||"").split("-")[0]==="ja"?"ja":"en",b={en:{badge:"Pricing",title:"Pricing",subtitle:"Start free with a watermarked preview bundle, then upgrade when you need full matrix exports and no-watermark outputs.",valueBullets:["Screenshots as a build step","Reproducible exports (dir + ZIP)","Fastlane-ready output (iOS + Android)"],proNoteTitle:"Pro = production workflow",proNoteBody:"If screenshots block releases (device buckets, locale churn, ordering accidents), Pro pays for itself by making exports rerunnable in CI.",faqTitle:"FAQ",trustTitle:"Privacy-first",trustBody:"Rendering and export runs locally (browser or CI runner). No uploads to ShipScreens.",teamTitle:"Team / Agency (coming soon)",teamBody:"For teams managing multiple apps or client work. Email us if you need a team plan or an agency license.",teamBullets:["Multiple projects","Client work licensing","Priority support for CI unblockers"],teamCta:"Contact us",annualTitle:"Annual billing (coming soon)",annualBody:"Want annual billing for simpler budgeting? Email us and we will set it up.",annualCta:"Contact us",ctas:{primary:"Preview output (5 min)",secondary:"Run CLI quickstart"},footer:{terms:"Terms",privacy:"Privacy",legal:"Legal (Japan)"}},ja:{badge:"料金",title:"料金",subtitle:"まずは透かし付きのプレビューで確認し、フル一括(端末×言語)や透かし解除が必要になったらProへ。",valueBullets:["スクショをビルドステップに","再現性のある出力(dir + ZIP)","Fastlane対応出力(iOS + Android)"],proNoteTitle:"Pro = 本番運用",proNoteBody:"端末バケット/ロケール更新/順番事故でリリースが止まるなら、Proで「再実行できる出力」をCIに固定する価値があります。",faqTitle:"FAQ",trustTitle:"プライバシー",trustBody:"レンダリング/出力はローカル(ブラウザ/CI)で完結。ShipScreensへアップロード不要。",teamTitle:"Team / Agency(準備中)",teamBody:"複数アプリ運用や受託/代理店向け。Teamプランやライセンスが必要ならご連絡ください。",teamBullets:["複数プロジェクト","受託/代理店での利用","CI詰まりの優先サポート"],teamCta:"問い合わせる",annualTitle:"年額(準備中)",annualBody:"年額が必要なら連絡ください。用意します。",annualCta:"問い合わせる",ctas:{primary:"出力例をプレビュー(5分)",secondary:"CLIクイックスタート"},footer:{terms:"利用規約",privacy:"プライバシー",legal:"特商法表記"}}},Q=()=>{const{i18n:o,t:d}=k(),x=q(o.resolvedLanguage||o.language),s=b[x]||b.en;B("titles.pricing",{defaultValue:s.title});const p=d("landing.pricing",{returnObjects:!0})||{},i=p.free||{},r=p.pro||{},a=p.cliProUnlock||{},n=d("landing.faq.items",{returnObjects:!0})||[],y="/app/?sample=5panel&entry_source=pricing_open_app_header",m="/tools/first-export/?entry_source=pricing_preview",u="/tools/agent-cli/?entry_source=pricing_cli_quickstart",N="/app/?sample=5panel&entry_source=pricing_open_app_free",v="/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro",g="support@shimaumaservices.co.jp",_=`mailto:${g}?subject=${encodeURIComponent("ShipScreens Team/Agency plan")}`,w=`mailto:${g}?subject=${encodeURIComponent("ShipScreens annual billing")}`;return P.useEffect(()=>{h("pricing_view",{path:typeof window<"u"?window.location.pathname:"/pricing"})},[]),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white",children:[e.jsx(I,{}),e.jsx(S,{variant:"dark",active:"pricing",openAppHref:y,onToolsClick:t=>l(t,"pricing_nav_click",{cta:"tools_header"}),onPricingClick:t=>l(t,"pricing_nav_click",{cta:"pricing_header"}),onOpenAppClick:t=>l(t,"pricing_nav_click",{cta:"open_app_header"}),primaryCta:{href:m,label:d("landing.nav.primaryCta",{defaultValue:s.ctas.primary}),onClick:t=>l(t,"pricing_nav_click",{cta:"first_export_header"})}}),e.jsxs("main",{className:"max-w-6xl mx-auto px-6 pb-24 space-y-14",children:[e.jsxs("section",{className:"max-w-3xl mx-auto text-center space-y-4 pt-6",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold",children:[e.jsx(z,{size:14}),s.badge]}),e.jsx("h1",{className:"text-3xl md:text-5xl font-black leading-tight",children:s.title}),e.jsx("p",{className:"text-slate-300 text-lg leading-relaxed",children:s.subtitle}),s.valueBullets?.length>0&&e.jsx("div",{className:"flex flex-wrap justify-center gap-2 text-xs text-slate-400",children:s.valueBullets.map(t=>e.jsx("span",{className:"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60",children:t},t))}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center pt-2",children:[e.jsxs("a",{href:m,onClick:t=>l(t,"pricing_cta_click",{cta:"first_export_hero"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition",children:[s.ctas.primary," ",e.jsx(c,{size:16})]}),e.jsxs("a",{href:u,onClick:t=>l(t,"pricing_cta_click",{cta:"agent_cli_hero"}),className:"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition",children:[s.ctas.secondary," ",e.jsx(c,{size:16})]})]})]}),e.jsxs("section",{className:"grid md:grid-cols-2 gap-6",children:[e.jsx(f,{title:i.title,price:i.price,bullets:i.bullets||[],cta:i.cta,href:N,trackingCta:"open_app_pricing_free",highlight:!1}),e.jsx(f,{title:r.title,price:r.price,bullets:r.bullets||[],cta:r.cta,href:v,trackingCta:"go_pro_pricing",highlight:!0,badge:r.badge})]}),e.jsxs("section",{className:"max-w-4xl mx-auto grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.teamTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.teamBody}),e.jsx("ul",{className:"space-y-2 text-sm text-slate-200",children:(s.teamBullets||[]).map(t=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(j,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:t})]},t))}),e.jsxs("a",{href:_,onClick:t=>l(t,"pricing_cta_click",{cta:"team_contact"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold",children:[s.teamCta," ",e.jsx(c,{size:16})]})]}),e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.annualTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.annualBody}),e.jsxs("a",{href:w,onClick:t=>l(t,"pricing_cta_click",{cta:"annual_contact"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold",children:[s.annualCta," ",e.jsx(c,{size:16})]})]})]}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.proNoteTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.proNoteBody}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("a",{href:m,onClick:t=>l(t,"pricing_cta_click",{cta:"first_export_pro_note"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold",children:[s.ctas.primary," ",e.jsx(c,{size:16})]}),e.jsxs("a",{href:u,onClick:t=>l(t,"pricing_cta_click",{cta:"agent_cli_pro_note"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold",children:[s.ctas.secondary," ",e.jsx(c,{size:16})]})]})]}),a?.cmd&&e.jsx("section",{className:"max-w-4xl mx-auto w-full",children:e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm font-bold text-white",children:a.title}),e.jsx("span",{className:"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full",children:"PRO"})]}),a.body&&e.jsx("p",{className:"text-sm text-slate-300",children:a.body}),e.jsx("div",{className:"rounded-xl border border-slate-800 bg-slate-950/80 p-4",children:e.jsx("pre",{className:"text-xs text-slate-200 whitespace-pre-wrap",children:a.cmd})}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-3",children:e.jsx(T,{value:a.cmd,onCopied:()=>h("pricing_cta_click",{cta:"copy_cli_pro_unlock"}),className:"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold",children:({copyLabel:t})=>e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14}),t]})})}),a.note&&e.jsx("div",{className:"text-xs text-slate-500",children:a.note})]})}),e.jsxs("section",{className:"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4",children:[e.jsx("h2",{className:"text-xl font-bold text-white",children:s.trustTitle}),e.jsx("p",{className:"text-sm text-slate-300 leading-relaxed",children:s.trustBody}),e.jsxs("div",{className:"flex items-start gap-3 text-sm text-slate-200",children:[e.jsx("div",{className:"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center",children:e.jsx(L,{size:16,className:"text-blue-300"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"font-semibold text-white",children:x==="ja"?"CLI/CIで回せる":"CI-friendly CLI"}),e.jsx("div",{className:"text-slate-300",children:x==="ja"?"non-interactive な CLI で、毎リリースの更新をビルドステップにできます。":"Non-interactive CLI runs locally or in CI, so screenshot updates become a build step."})]})]})]}),n.length>0&&e.jsxs("section",{className:"max-w-4xl mx-auto w-full space-y-6",children:[e.jsx("h2",{className:"text-3xl font-bold text-center",children:s.faqTitle}),e.jsx("div",{className:"space-y-4",children:n.map((t,C)=>e.jsxs("div",{className:"bg-slate-900/60 border border-slate-800 rounded-xl p-6",children:[e.jsx("h3",{className:"font-semibold text-lg mb-2",children:t.q}),e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed",children:t.a})]},`${t.q}-${C}`))})]}),e.jsxs("footer",{className:"border-t border-slate-800 pt-10 text-center text-sm text-slate-400",children:[e.jsxs("div",{className:"flex flex-wrap justify-center gap-6",children:[e.jsx("a",{href:"/terms",className:"hover:text-white transition-colors",children:s.footer.terms}),e.jsx("a",{href:"/privacy",className:"hover:text-white transition-colors",children:s.footer.privacy}),e.jsx("a",{href:"/legal",className:"hover:text-white transition-colors",children:s.footer.legal})]}),e.jsxs("div",{className:"mt-4 text-xs text-slate-600",children:["© ",new Date().getFullYear()," ShipScreens"]})]})]})]})},f=({title:o,price:d,bullets:x,cta:s,href:p,trackingCta:i,highlight:r,badge:a})=>e.jsxs("div",{className:`p-6 rounded-2xl border ${r?"border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20":"border-slate-800 bg-slate-900/60"} flex flex-col gap-4`,children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("h3",{className:"text-xl font-bold",children:o}),r&&a&&e.jsx("span",{className:"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold",children:a})]}),e.jsx("div",{className:"text-3xl font-black",children:d}),e.jsx("ul",{className:"text-slate-200 space-y-2 text-sm",children:(x||[]).map(n=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(j,{size:16,className:"mt-0.5 text-blue-300 shrink-0"}),e.jsx("span",{children:n})]},n))}),e.jsxs("a",{href:p,onClick:n=>i?l(n,"pricing_cta_click",{cta:i}):void 0,className:`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${r?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-slate-900 hover:scale-[1.02]"}`,children:[s," ",e.jsx(c,{size:16,className:"ml-2"})]})]});export{Q as default};
|
|
2
|
-
//# sourceMappingURL=Pricing-BQwtFVbj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Pricing-BQwtFVbj.js","sources":["../../src/pages/Pricing.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ArrowRight, Check, Copy, ShieldCheck, Terminal } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CopyButton from '../components/CopyButton';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Pricing',\n title: 'Pricing',\n subtitle:\n 'Start free with a watermarked preview bundle, then upgrade when you need full matrix exports and no-watermark outputs.',\n valueBullets: ['Screenshots as a build step', 'Reproducible exports (dir + ZIP)', 'Fastlane-ready output (iOS + Android)'],\n proNoteTitle: 'Pro = production workflow',\n proNoteBody:\n 'If screenshots block releases (device buckets, locale churn, ordering accidents), Pro pays for itself by making exports rerunnable in CI.',\n faqTitle: 'FAQ',\n trustTitle: 'Privacy-first',\n trustBody: 'Rendering and export runs locally (browser or CI runner). No uploads to ShipScreens.',\n teamTitle: 'Team / Agency (coming soon)',\n teamBody: 'For teams managing multiple apps or client work. Email us if you need a team plan or an agency license.',\n teamBullets: ['Multiple projects', 'Client work licensing', 'Priority support for CI unblockers'],\n teamCta: 'Contact us',\n annualTitle: 'Annual billing (coming soon)',\n annualBody: 'Want annual billing for simpler budgeting? Email us and we will set it up.',\n annualCta: 'Contact us',\n ctas: {\n primary: 'Preview output (5 min)',\n secondary: 'Run CLI quickstart',\n },\n footer: {\n terms: 'Terms',\n privacy: 'Privacy',\n legal: 'Legal (Japan)',\n },\n },\n ja: {\n badge: '料金',\n title: '料金',\n subtitle:\n 'まずは透かし付きのプレビューで確認し、フル一括(端末×言語)や透かし解除が必要になったらProへ。',\n valueBullets: ['スクショをビルドステップに', '再現性のある出力(dir + ZIP)', 'Fastlane対応出力(iOS + Android)'],\n proNoteTitle: 'Pro = 本番運用',\n proNoteBody:\n '端末バケット/ロケール更新/順番事故でリリースが止まるなら、Proで「再実行できる出力」をCIに固定する価値があります。',\n faqTitle: 'FAQ',\n trustTitle: 'プライバシー',\n trustBody: 'レンダリング/出力はローカル(ブラウザ/CI)で完結。ShipScreensへアップロード不要。',\n teamTitle: 'Team / Agency(準備中)',\n teamBody: '複数アプリ運用や受託/代理店向け。Teamプランやライセンスが必要ならご連絡ください。',\n teamBullets: ['複数プロジェクト', '受託/代理店での利用', 'CI詰まりの優先サポート'],\n teamCta: '問い合わせる',\n annualTitle: '年額(準備中)',\n annualBody: '年額が必要なら連絡ください。用意します。',\n annualCta: '問い合わせる',\n ctas: {\n primary: '出力例をプレビュー(5分)',\n secondary: 'CLIクイックスタート',\n },\n footer: {\n terms: '利用規約',\n privacy: 'プライバシー',\n legal: '特商法表記',\n },\n },\n};\n\nconst Pricing = () => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const copy = COPY[lang] || COPY.en;\n\n usePageTitle('titles.pricing', { defaultValue: copy.title });\n\n const pricing = t('landing.pricing', { returnObjects: true }) || {};\n const freePlan = pricing.free || {};\n const proPlan = pricing.pro || {};\n const cliProUnlock = pricing.cliProUnlock || {};\n const faqItems = t('landing.faq.items', { returnObjects: true }) || [];\n\n const openAppHref = '/app/?sample=5panel&entry_source=pricing_open_app_header';\n const firstExportHref = '/tools/first-export/?entry_source=pricing_preview';\n const agentCliHref = '/tools/agent-cli/?entry_source=pricing_cli_quickstart';\n const freePlanHref = '/app/?sample=5panel&entry_source=pricing_open_app_free';\n const proPlanHref = '/app/?sample=5panel&upgrade=1&entry_source=pricing_go_pro';\n const supportEmail = 'support@shimaumaservices.co.jp';\n const teamMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens Team/Agency plan')}`;\n const annualMailto = `mailto:${supportEmail}?subject=${encodeURIComponent('ShipScreens annual billing')}`;\n\n useEffect(() => {\n trackEvent('pricing_view', { path: typeof window !== 'undefined' ? window.location.pathname : '/pricing' });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"pricing\"\n openAppHref={openAppHref}\n onToolsClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'tools_header' })}\n onPricingClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'pricing_header' })}\n onOpenAppClick={(event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'open_app_header' })}\n primaryCta={{\n href: firstExportHref,\n label: t('landing.nav.primaryCta', { defaultValue: copy.ctas.primary }),\n onClick: (event) => trackEventAndFollowLink(event, 'pricing_nav_click', { cta: 'first_export_header' }),\n }}\n />\n\n <main className=\"max-w-6xl mx-auto px-6 pb-24 space-y-14\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4 pt-6\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <ShieldCheck size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">{copy.subtitle}</p>\n {copy.valueBullets?.length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-2 text-xs text-slate-400\">\n {copy.valueBullets.map((item) => (\n <span key={item} className=\"px-3 py-1 rounded-full border border-slate-800 bg-slate-900/60\">\n {item}\n </span>\n ))}\n </div>\n )}\n <div className=\"flex flex-col sm:flex-row gap-3 justify-center pt-2\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-5 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition\"\n >\n {copy.ctas.secondary} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section className=\"grid md:grid-cols-2 gap-6\">\n <PlanCard\n title={freePlan.title}\n price={freePlan.price}\n bullets={freePlan.bullets || []}\n cta={freePlan.cta}\n href={freePlanHref}\n trackingCta=\"open_app_pricing_free\"\n highlight={false}\n />\n <PlanCard\n title={proPlan.title}\n price={proPlan.price}\n bullets={proPlan.bullets || []}\n cta={proPlan.cta}\n href={proPlanHref}\n trackingCta=\"go_pro_pricing\"\n highlight\n badge={proPlan.badge}\n />\n </section>\n\n <section className=\"max-w-4xl mx-auto grid md:grid-cols-2 gap-6\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.teamTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.teamBody}</p>\n <ul className=\"space-y-2 text-sm text-slate-200\">\n {(copy.teamBullets || []).map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <Check size={16} className=\"mt-0.5 text-blue-300 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n <a\n href={teamMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'team_contact' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {copy.teamCta} <ArrowRight size={16} />\n </a>\n </div>\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.annualTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.annualBody}</p>\n <a\n href={annualMailto}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'annual_contact' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold\"\n >\n {copy.annualCta} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.proNoteTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.proNoteBody}</p>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <a\n href={firstExportHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'first_export_pro_note' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {copy.ctas.primary} <ArrowRight size={16} />\n </a>\n <a\n href={agentCliHref}\n onClick={(event) => trackEventAndFollowLink(event, 'pricing_cta_click', { cta: 'agent_cli_pro_note' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-white text-slate-900 hover:scale-[1.02] transition text-sm font-semibold\"\n >\n {copy.ctas.secondary} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n\n {cliProUnlock?.cmd && (\n <section className=\"max-w-4xl mx-auto w-full\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{cliProUnlock.title}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {cliProUnlock.body && <p className=\"text-sm text-slate-300\">{cliProUnlock.body}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{cliProUnlock.cmd}</pre>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <CopyButton\n value={cliProUnlock.cmd}\n onCopied={() => trackEvent('pricing_cta_click', { cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <Copy size={14} />\n {copyLabel}\n </>\n )}\n </CopyButton>\n </div>\n {cliProUnlock.note && <div className=\"text-xs text-slate-500\">{cliProUnlock.note}</div>}\n </div>\n </section>\n )}\n\n <section className=\"max-w-4xl mx-auto bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-4\">\n <h2 className=\"text-xl font-bold text-white\">{copy.trustTitle}</h2>\n <p className=\"text-sm text-slate-300 leading-relaxed\">{copy.trustBody}</p>\n <div className=\"flex items-start gap-3 text-sm text-slate-200\">\n <div className=\"mt-0.5 w-9 h-9 rounded-xl border border-slate-700 bg-slate-950 flex items-center justify-center\">\n <Terminal size={16} className=\"text-blue-300\" />\n </div>\n <div className=\"space-y-1\">\n <div className=\"font-semibold text-white\">{lang === 'ja' ? 'CLI/CIで回せる' : 'CI-friendly CLI'}</div>\n <div className=\"text-slate-300\">\n {lang === 'ja'\n ? 'non-interactive な CLI で、毎リリースの更新をビルドステップにできます。'\n : 'Non-interactive CLI runs locally or in CI, so screenshot updates become a build step.'}\n </div>\n </div>\n </div>\n </section>\n\n {faqItems.length > 0 && (\n <section className=\"max-w-4xl mx-auto w-full space-y-6\">\n <h2 className=\"text-3xl font-bold text-center\">{copy.faqTitle}</h2>\n <div className=\"space-y-4\">\n {faqItems.map((item, i) => (\n <div key={`${item.q}-${i}`} className=\"bg-slate-900/60 border border-slate-800 rounded-xl p-6\">\n <h3 className=\"font-semibold text-lg mb-2\">{item.q}</h3>\n <p className=\"text-slate-300 text-sm leading-relaxed\">{item.a}</p>\n </div>\n ))}\n </div>\n </section>\n )}\n\n <footer className=\"border-t border-slate-800 pt-10 text-center text-sm text-slate-400\">\n <div className=\"flex flex-wrap justify-center gap-6\">\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">\n {copy.footer.terms}\n </a>\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">\n {copy.footer.privacy}\n </a>\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">\n {copy.footer.legal}\n </a>\n </div>\n <div className=\"mt-4 text-xs text-slate-600\">© {new Date().getFullYear()} ShipScreens</div>\n </footer>\n </main>\n </div>\n );\n};\n\nconst PlanCard = ({ title, price, bullets, cta, href, trackingCta, highlight, badge }) => (\n <div\n className={`p-6 rounded-2xl border ${\n highlight\n ? 'border-blue-500 bg-blue-500/10 shadow-lg shadow-blue-500/20'\n : 'border-slate-800 bg-slate-900/60'\n } flex flex-col gap-4`}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-xl font-bold\">{title}</h3>\n {highlight && badge && (\n <span className=\"text-xs px-2 py-1 rounded bg-blue-500 text-white font-semibold\">{badge}</span>\n )}\n </div>\n <div className=\"text-3xl font-black\">{price}</div>\n <ul className=\"text-slate-200 space-y-2 text-sm\">\n {(bullets || []).map((item) => (\n <li key={item} className=\"flex items-start gap-2\">\n <Check size={16} className=\"mt-0.5 text-blue-300 shrink-0\" />\n <span>{item}</span>\n </li>\n ))}\n </ul>\n <a\n href={href}\n onClick={(event) =>\n trackingCta ? trackEventAndFollowLink(event, 'pricing_cta_click', { cta: trackingCta }) : undefined\n }\n className={`mt-auto inline-flex justify-center items-center px-4 py-3 rounded-xl font-bold transition ${\n highlight ? 'bg-blue-500 text-white hover:bg-blue-600' : 'bg-white text-slate-900 hover:scale-[1.02]'\n }`}\n >\n {cta} <ArrowRight size={16} className=\"ml-2\" />\n </a>\n </div>\n);\n\nexport default Pricing;\n"],"names":["normalizeLang","lang","COPY","Pricing","i18n","t","useTranslation","copy","usePageTitle","pricing","freePlan","proPlan","cliProUnlock","faqItems","openAppHref","firstExportHref","agentCliHref","freePlanHref","proPlanHref","supportEmail","teamMailto","annualMailto","useEffect","trackEvent","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ShieldCheck","item","ArrowRight","PlanCard","Check","CopyButton","copyLabel","Fragment","Copy","Terminal","i","title","price","bullets","cta","href","trackingCta","highlight","badge"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as K,r as h,j as e}from"./index-B8Y8Y-Mi.js";import{c as Q,u as U,L as S,X as W}from"./LanguageSwitcher-D93nCuuR.js";const Y=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],D=Q("menu",Y),E=({className:x})=>e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-md ${x}`,"aria-label":"ShipScreens on X (opens in new tab)",children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M20.5 3h-2.4L12 9.6 6.9 3H3l7.2 9.1L3.2 21h2.4L12 14l6.6 7h3.1l-7.7-9.5L20.5 3Z"})})}),H=({variant:x="dark",active:t=null,logoHref:L="/",toolsHref:b="/tools/",pricingHref:m="/pricing",openAppHref:f="/app/",showTools:p=!0,showPricing:g=!0,showOpenApp:j=!0,showX:v=!0,showLanguageSwitcher:N=!0,languageSwitcherClassName:B="hidden sm:flex",onToolsClick:w,onPricingClick:$,onOpenAppClick:k,primaryCta:s=null})=>{const{t:n}=K(),a=x==="dark",R=!!(s?.href&&s?.label),[o,y]=h.useState(!1),V=h.useRef(null),C=h.useRef(null),c=h.useCallback(()=>y(!1),[]);U({isOpen:o,onClose:c,panelRef:V,initialFocusRef:C});const l=a?"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950 rounded-md":"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white rounded-md",F=a?`text-sm text-slate-300 hover:text-white transition-colors ${l}`:`text-sm text-slate-600 hover:text-slate-900 transition-colors ${l}`,X=a?"text-white font-semibold":"text-slate-900 font-semibold",i=r=>`${F}${t===r?` ${X}`:""}`,z=a?`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-800 bg-slate-950 text-sm text-slate-200 hover:bg-slate-900 transition ${l}`:`flex items-center justify-between px-3 py-2 rounded-lg border border-slate-200 bg-white text-sm text-slate-800 hover:bg-slate-50 transition ${l}`,I=a?"border-blue-500 text-white":"border-blue-600 text-slate-900",M=r=>`${z}${t===r?` ${I}`:""}`,P=()=>{if(!o)return null;const r=a?"bg-slate-900/70":"bg-slate-900/40",q=a?"bg-slate-950 border-slate-800 text-white":"bg-white border-slate-200 text-slate-800",A=a?"border-slate-800":"border-slate-200",G=a?`border-slate-800 text-slate-200 hover:bg-slate-900 ${l}`:`border-slate-200 text-slate-600 hover:bg-slate-50 ${l}`,d=u=>J=>{u?.(J),c()},_=n("common.menu",{defaultValue:"Menu"});return e.jsx("div",{className:`fixed inset-0 z-[2200] ${r} backdrop-blur-sm p-4 sm:hidden`,role:"dialog","aria-modal":"true","aria-label":_,onMouseDown:u=>{u.target===u.currentTarget&&c()},children:e.jsxs("div",{ref:V,id:"shipscreens-mobile-menu",className:`w-full max-w-sm ml-auto rounded-2xl shadow-2xl border overflow-hidden ${q}`,children:[e.jsxs("div",{className:`flex items-center justify-between px-4 py-3 border-b ${A}`,children:[e.jsx("div",{className:"text-sm font-bold",children:_}),e.jsx("button",{ref:C,type:"button",onClick:c,className:`p-2 rounded-lg border transition ${G}`,"aria-label":n("common.close",{defaultValue:"Close"}),title:n("common.close",{defaultValue:"Close"}),children:e.jsx(W,{size:16})})]}),e.jsxs("div",{className:"p-4 space-y-3",children:[N&&e.jsx(S,{className:"w-full justify-center"}),e.jsxs("div",{className:"space-y-2",children:[p&&e.jsx("a",{href:b,onClick:d(w),className:M("tools"),"aria-current":t==="tools"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.tools")})}),g&&e.jsx("a",{href:m,onClick:d($),className:M("pricing"),"aria-current":t==="pricing"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.pricing",{defaultValue:"Pricing"})})}),j&&e.jsx("a",{href:f,onClick:d(k),className:M("app"),"aria-current":t==="app"?"page":void 0,children:e.jsx("span",{children:n("landing.nav.openApp")})}),v&&e.jsx("a",{href:"https://x.com/shipscreenscom",target:"_blank",rel:"noopener noreferrer",className:z,children:e.jsx("span",{children:"X"})})]}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:d(s.onClick),className:`w-full inline-flex items-center justify-center px-4 py-2 rounded-lg font-semibold transition ${a?"bg-white text-slate-900 hover:scale-[1.02]":"bg-slate-900 text-white hover:bg-slate-800"} ${l}`,children:s.label})]})]})})},Z=a?e.jsxs("header",{className:"max-w-6xl mx-auto px-4 py-4 sm:px-6 sm:py-6 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"text-lg font-bold",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-300 hover:text-white transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:`${R?"hidden sm:inline ":""}${i("app")}`,"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),R&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-3 py-1.5 sm:px-4 sm:py-2 text-sm whitespace-nowrap rounded-lg bg-white text-slate-900 font-semibold hover:scale-[1.02] transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-800 bg-slate-950 text-slate-200 hover:bg-slate-900 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]}):e.jsx("header",{className:"border-b border-slate-200 bg-white",children:e.jsxs("div",{className:"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between gap-4",children:[e.jsxs("a",{href:L,className:`flex items-center gap-3 hover:opacity-90 transition-opacity ${l}`,children:[e.jsx("div",{className:"w-9 h-9 rounded-xl border border-slate-200 bg-white p-1 flex items-center justify-center overflow-hidden shadow-sm",children:e.jsx("img",{src:"/app/assets/icons/favicon-32x32.png",alt:"ShipScreens",className:"w-full h-full object-contain",loading:"lazy"})}),e.jsx("span",{className:"font-bold text-slate-900",children:"ShipScreens"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[N&&e.jsx(S,{className:B}),v&&e.jsx(E,{className:"hidden sm:inline text-slate-500 hover:text-slate-900 transition-colors"}),p&&e.jsx("a",{href:b,onClick:w,className:`hidden sm:inline ${i("tools")}`,"aria-current":t==="tools"?"page":void 0,children:n("landing.nav.tools")}),g&&e.jsx("a",{href:m,onClick:$,className:`hidden sm:inline ${i("pricing")}`,"aria-current":t==="pricing"?"page":void 0,children:n("landing.nav.pricing",{defaultValue:"Pricing"})}),j&&e.jsx("a",{href:f,onClick:k,className:i("app"),"aria-current":t==="app"?"page":void 0,children:n("landing.nav.openApp")}),s?.href&&s?.label&&e.jsx("a",{href:s.href,onClick:s.onClick,className:`px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800 transition ${l}`,children:s.label}),e.jsx("button",{type:"button",onClick:()=>y(!0),className:`sm:hidden p-2 rounded-lg border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition ${l}`,"aria-label":n("common.menu",{defaultValue:"Menu"}),"aria-controls":"shipscreens-mobile-menu","aria-expanded":o,children:e.jsx(D,{size:18})})]})]})});return e.jsxs(e.Fragment,{children:[Z,P()]})};export{H as S};
|
|
2
|
-
//# sourceMappingURL=SiteHeader-Dj3gDOnR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SiteHeader-Dj3gDOnR.js","sources":["../../node_modules/lucide-react/dist/esm/icons/menu.js","../../src/components/SiteHeader.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M4 5h16\", key: \"1tepv9\" }],\n [\"path\", { d: \"M4 12h16\", key: \"1lakjw\" }],\n [\"path\", { d: \"M4 19h16\", key: \"1djgab\" }]\n];\nconst Menu = createLucideIcon(\"menu\", __iconNode);\n\nexport { __iconNode, Menu as default };\n//# sourceMappingURL=menu.js.map\n","import React, { useCallback, useRef, useState } from 'react';\nimport { Menu, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport LanguageSwitcher from './LanguageSwitcher';\nimport useModalA11y from '../hooks/useModalA11y';\n\nconst XLink = ({ className }) => (\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-md ${className}`}\n aria-label=\"ShipScreens on X (opens in new tab)\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M20.5 3h-2.4L12 9.6 6.9 3H3l7.2 9.1L3.2 21h2.4L12 14l6.6 7h3.1l-7.7-9.5L20.5 3Z\" />\n </svg>\n </a>\n);\n\nconst SiteHeader = ({\n variant = 'dark',\n active = null, // 'tools' | 'pricing' | 'app' | null\n logoHref = '/',\n toolsHref = '/tools/',\n pricingHref = '/pricing',\n openAppHref = '/app/',\n showTools = true,\n showPricing = true,\n showOpenApp = true,\n showX = true,\n showLanguageSwitcher = true,\n languageSwitcherClassName = 'hidden sm:flex',\n onToolsClick,\n onPricingClick,\n onOpenAppClick,\n primaryCta = null, // { href, label, onClick }\n}) => {\n const { t } = useTranslation();\n const isDark = variant === 'dark';\n const hasPrimaryCta = Boolean(primaryCta?.href && primaryCta?.label);\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const mobileMenuPanelRef = useRef(null);\n const mobileMenuCloseRef = useRef(null);\n\n const closeMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n\n useModalA11y({\n isOpen: mobileMenuOpen,\n onClose: closeMobileMenu,\n panelRef: mobileMenuPanelRef,\n initialFocusRef: mobileMenuCloseRef,\n });\n\n const focusRing = isDark\n ? 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950 rounded-md'\n : 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white rounded-md';\n const linkBase = isDark\n ? `text-sm text-slate-300 hover:text-white transition-colors ${focusRing}`\n : `text-sm text-slate-600 hover:text-slate-900 transition-colors ${focusRing}`;\n const linkActive = isDark ? 'text-white font-semibold' : 'text-slate-900 font-semibold';\n const linkClass = (id) => `${linkBase}${active === id ? ` ${linkActive}` : ''}`;\n\n const mobileMenuLinkBase = isDark\n ? `flex items-center justify-between px-3 py-2 rounded-lg border border-slate-800 bg-slate-950 text-sm text-slate-200 hover:bg-slate-900 transition ${focusRing}`\n : `flex items-center justify-between px-3 py-2 rounded-lg border border-slate-200 bg-white text-sm text-slate-800 hover:bg-slate-50 transition ${focusRing}`;\n const mobileMenuLinkActive = isDark ? 'border-blue-500 text-white' : 'border-blue-600 text-slate-900';\n const mobileMenuLinkClass = (id) => `${mobileMenuLinkBase}${active === id ? ` ${mobileMenuLinkActive}` : ''}`;\n\n const renderMobileMenu = () => {\n if (!mobileMenuOpen) return null;\n\n const menuBg = isDark ? 'bg-slate-900/70' : 'bg-slate-900/40';\n const panelBase = isDark ? 'bg-slate-950 border-slate-800 text-white' : 'bg-white border-slate-200 text-slate-800';\n const panelHeaderBorder = isDark ? 'border-slate-800' : 'border-slate-200';\n const closeButtonStyle = isDark\n ? `border-slate-800 text-slate-200 hover:bg-slate-900 ${focusRing}`\n : `border-slate-200 text-slate-600 hover:bg-slate-50 ${focusRing}`;\n\n const handleNav = (callback) => (event) => {\n callback?.(event);\n closeMobileMenu();\n };\n\n const menuLabel = t('common.menu', { defaultValue: 'Menu' });\n\n return (\n <div\n className={`fixed inset-0 z-[2200] ${menuBg} backdrop-blur-sm p-4 sm:hidden`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={menuLabel}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) closeMobileMenu();\n }}\n >\n <div\n ref={mobileMenuPanelRef}\n id=\"shipscreens-mobile-menu\"\n className={`w-full max-w-sm ml-auto rounded-2xl shadow-2xl border overflow-hidden ${panelBase}`}\n >\n <div className={`flex items-center justify-between px-4 py-3 border-b ${panelHeaderBorder}`}>\n <div className=\"text-sm font-bold\">{menuLabel}</div>\n <button\n ref={mobileMenuCloseRef}\n type=\"button\"\n onClick={closeMobileMenu}\n className={`p-2 rounded-lg border transition ${closeButtonStyle}`}\n aria-label={t('common.close', { defaultValue: 'Close' })}\n title={t('common.close', { defaultValue: 'Close' })}\n >\n <X size={16} />\n </button>\n </div>\n\n <div className=\"p-4 space-y-3\">\n {showLanguageSwitcher && <LanguageSwitcher className=\"w-full justify-center\" />}\n\n <div className=\"space-y-2\">\n {showTools && (\n <a\n href={toolsHref}\n onClick={handleNav(onToolsClick)}\n className={mobileMenuLinkClass('tools')}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n <span>{t('landing.nav.tools')}</span>\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={handleNav(onPricingClick)}\n className={mobileMenuLinkClass('pricing')}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n <span>{t('landing.nav.pricing', { defaultValue: 'Pricing' })}</span>\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={handleNav(onOpenAppClick)}\n className={mobileMenuLinkClass('app')}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n <span>{t('landing.nav.openApp')}</span>\n </a>\n )}\n\n {showX && (\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mobileMenuLinkBase}\n >\n <span>X</span>\n </a>\n )}\n </div>\n\n {primaryCta?.href && primaryCta?.label && (\n <a\n href={primaryCta.href}\n onClick={handleNav(primaryCta.onClick)}\n className={`w-full inline-flex items-center justify-center px-4 py-2 rounded-lg font-semibold transition ${\n isDark ? 'bg-white text-slate-900 hover:scale-[1.02]' : 'bg-slate-900 text-white hover:bg-slate-800'\n } ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n };\n\n const headerContent = isDark ? (\n <header className=\"max-w-6xl mx-auto px-4 py-4 sm:px-6 sm:py-6 flex items-center justify-between gap-4\">\n <a href={logoHref} className={`flex items-center gap-3 hover:opacity-90 transition-opacity ${focusRing}`}>\n <div className=\"w-10 h-10 rounded-xl border border-slate-800 bg-slate-950 p-1 flex items-center justify-center overflow-hidden shadow-sm\">\n <img\n src=\"/app/assets/icons/favicon-32x32.png\"\n alt=\"ShipScreens\"\n className=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n <span className=\"text-lg font-bold\">ShipScreens</span>\n </a>\n\n <div className=\"flex items-center gap-2 sm:gap-3\">\n {showLanguageSwitcher && <LanguageSwitcher className={languageSwitcherClassName} />}\n {showX && <XLink className=\"hidden sm:inline text-slate-300 hover:text-white transition-colors\" />}\n\n {showTools && (\n <a\n href={toolsHref}\n onClick={onToolsClick}\n className={`hidden sm:inline ${linkClass('tools')}`}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n {t('landing.nav.tools')}\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={onPricingClick}\n className={`hidden sm:inline ${linkClass('pricing')}`}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n {t('landing.nav.pricing', { defaultValue: 'Pricing' })}\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={onOpenAppClick}\n className={`${hasPrimaryCta ? 'hidden sm:inline ' : ''}${linkClass('app')}`}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n {t('landing.nav.openApp')}\n </a>\n )}\n\n {hasPrimaryCta && (\n <a\n href={primaryCta.href}\n onClick={primaryCta.onClick}\n className={`px-3 py-1.5 sm:px-4 sm:py-2 text-sm whitespace-nowrap rounded-lg bg-white text-slate-900 font-semibold hover:scale-[1.02] transition ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n\n <button\n type=\"button\"\n onClick={() => setMobileMenuOpen(true)}\n className={`sm:hidden p-2 rounded-lg border border-slate-800 bg-slate-950 text-slate-200 hover:bg-slate-900 transition ${focusRing}`}\n aria-label={t('common.menu', { defaultValue: 'Menu' })}\n aria-controls=\"shipscreens-mobile-menu\"\n aria-expanded={mobileMenuOpen}\n >\n <Menu size={18} />\n </button>\n </div>\n </header>\n ) : (\n <header className=\"border-b border-slate-200 bg-white\">\n <div className=\"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between gap-4\">\n <a href={logoHref} className={`flex items-center gap-3 hover:opacity-90 transition-opacity ${focusRing}`}>\n <div className=\"w-9 h-9 rounded-xl border border-slate-200 bg-white p-1 flex items-center justify-center overflow-hidden shadow-sm\">\n <img\n src=\"/app/assets/icons/favicon-32x32.png\"\n alt=\"ShipScreens\"\n className=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n <span className=\"font-bold text-slate-900\">ShipScreens</span>\n </a>\n\n <div className=\"flex items-center gap-3\">\n {showLanguageSwitcher && <LanguageSwitcher className={languageSwitcherClassName} />}\n {showX && <XLink className=\"hidden sm:inline text-slate-500 hover:text-slate-900 transition-colors\" />}\n\n {showTools && (\n <a\n href={toolsHref}\n onClick={onToolsClick}\n className={`hidden sm:inline ${linkClass('tools')}`}\n aria-current={active === 'tools' ? 'page' : undefined}\n >\n {t('landing.nav.tools')}\n </a>\n )}\n\n {showPricing && (\n <a\n href={pricingHref}\n onClick={onPricingClick}\n className={`hidden sm:inline ${linkClass('pricing')}`}\n aria-current={active === 'pricing' ? 'page' : undefined}\n >\n {t('landing.nav.pricing', { defaultValue: 'Pricing' })}\n </a>\n )}\n\n {showOpenApp && (\n <a\n href={openAppHref}\n onClick={onOpenAppClick}\n className={linkClass('app')}\n aria-current={active === 'app' ? 'page' : undefined}\n >\n {t('landing.nav.openApp')}\n </a>\n )}\n\n {primaryCta?.href && primaryCta?.label && (\n <a\n href={primaryCta.href}\n onClick={primaryCta.onClick}\n className={`px-4 py-2 rounded-lg bg-slate-900 text-white font-semibold hover:bg-slate-800 transition ${focusRing}`}\n >\n {primaryCta.label}\n </a>\n )}\n\n <button\n type=\"button\"\n onClick={() => setMobileMenuOpen(true)}\n className={`sm:hidden p-2 rounded-lg border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition ${focusRing}`}\n aria-label={t('common.menu', { defaultValue: 'Menu' })}\n aria-controls=\"shipscreens-mobile-menu\"\n aria-expanded={mobileMenuOpen}\n >\n <Menu size={18} />\n </button>\n </div>\n </div>\n </header>\n );\n\n return (\n <>\n {headerContent}\n {renderMobileMenu()}\n </>\n );\n};\n\nexport default SiteHeader;\n"],"names":["__iconNode","Menu","createLucideIcon","XLink","className","jsx","SiteHeader","variant","active","logoHref","toolsHref","pricingHref","openAppHref","showTools","showPricing","showOpenApp","showX","showLanguageSwitcher","languageSwitcherClassName","onToolsClick","onPricingClick","onOpenAppClick","primaryCta","t","useTranslation","isDark","hasPrimaryCta","mobileMenuOpen","setMobileMenuOpen","useState","mobileMenuPanelRef","useRef","mobileMenuCloseRef","closeMobileMenu","useCallback","useModalA11y","focusRing","linkBase","linkActive","linkClass","id","mobileMenuLinkBase","mobileMenuLinkActive","mobileMenuLinkClass","renderMobileMenu","menuBg","panelBase","panelHeaderBorder","closeButtonStyle","handleNav","callback","event","menuLabel","jsxs","X","LanguageSwitcher","headerContent","Fragment"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-BWCiUZ-C.js","sources":["../../node_modules/lucide-react/dist/esm/icons/check.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n"],"names":["__iconNode","Check","createLucideIcon"],"mappings":"8CASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,CAAC,EAC/DC,EAAQC,EAAiB,QAASF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"circle-check-CeakjiXC.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n"],"names":["__iconNode","CircleCheck","createLucideIcon"],"mappings":"8CASA,MAAMA,EAAa,CACjB,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,EACMC,EAAcC,EAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|