shipscreens 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/.well-known/ai-agents.json +88 -0
- package/dist/.well-known/llms-full.txt +150 -0
- package/dist/.well-known/llms.txt +57 -0
- package/dist/.well-known/mcp-server.json +40 -0
- package/dist/ai-agents.json +88 -0
- package/dist/app/assets/{AgentCli-CJHTv5S4.js → AgentCli-DNTDYBbk.js} +2 -2
- package/dist/{assets/AgentCli-CJHTv5S4.js.map → app/assets/AgentCli-DNTDYBbk.js.map} +1 -1
- package/dist/app/assets/{App-DV5XHwn8.js → App-DPi9LW-y.js} +2 -2
- package/dist/{assets/App-DV5XHwn8.js.map → app/assets/App-DPi9LW-y.js.map} +1 -1
- package/dist/{assets/AppReviewAso-Dvh6A_g-.js → app/assets/AppReviewAso-BUTGLatx.js} +2 -2
- package/dist/{assets/AppReviewAso-Dvh6A_g-.js.map → app/assets/AppReviewAso-BUTGLatx.js.map} +1 -1
- package/dist/app/assets/{Cancelled-D6i4ywc8.js → Cancelled-BeS-WlPj.js} +2 -2
- package/dist/app/assets/{Cancelled-D6i4ywc8.js.map → Cancelled-BeS-WlPj.js.map} +1 -1
- package/dist/app/assets/{CopyButton-BlPQEoP3.js → CopyButton-BZQEBHBq.js} +2 -2
- package/dist/app/assets/{CopyButton-BlPQEoP3.js.map → CopyButton-BZQEBHBq.js.map} +1 -1
- package/dist/{assets/FastlaneScreenshots-DF74cNwo.js → app/assets/FastlaneScreenshots-Dn7jfpuz.js} +2 -2
- package/dist/{assets/FastlaneScreenshots-DF74cNwo.js.map → app/assets/FastlaneScreenshots-Dn7jfpuz.js.map} +1 -1
- package/dist/{assets/FirstExport-BMHdPGDX.js → app/assets/FirstExport-CzioMqbJ.js} +2 -2
- package/dist/app/assets/{FirstExport-BMHdPGDX.js.map → FirstExport-CzioMqbJ.js.map} +1 -1
- package/dist/app/assets/{FitPanel-Fp4iPZxf.js → FitPanel-DzYzTMEi.js} +2 -2
- package/dist/app/assets/{FitPanel-Fp4iPZxf.js.map → FitPanel-DzYzTMEi.js.map} +1 -1
- package/dist/app/assets/{FivePanelFramework-B967Cblg.js → FivePanelFramework-Bt5-NjCV.js} +2 -2
- package/dist/app/assets/{FivePanelFramework-B967Cblg.js.map → FivePanelFramework-Bt5-NjCV.js.map} +1 -1
- package/dist/app/assets/{ForgotPassword-CApAdwy1.js → ForgotPassword-DuHNHuUe.js} +2 -2
- package/dist/{assets/ForgotPassword-CApAdwy1.js.map → app/assets/ForgotPassword-DuHNHuUe.js.map} +1 -1
- package/dist/{assets/Landing-Vxx4PfE4.js → app/assets/Landing-DB9pTPoT.js} +2 -2
- package/dist/{assets/Landing-Vxx4PfE4.js.map → app/assets/Landing-DB9pTPoT.js.map} +1 -1
- package/dist/app/assets/{LanguageSwitcher-Cp-6zMXz.js → LanguageSwitcher-CfUhVVuT.js} +2 -2
- package/dist/{assets/LanguageSwitcher-Cp-6zMXz.js.map → app/assets/LanguageSwitcher-CfUhVVuT.js.map} +1 -1
- package/dist/app/assets/{Legal-CGgUYM9f.js → Legal-p-YIX5Jv.js} +2 -2
- package/dist/app/assets/{Legal-CGgUYM9f.js.map → Legal-p-YIX5Jv.js.map} +1 -1
- package/dist/app/assets/{NotFound-DCeMrR7Q.js → NotFound-XohZYy7w.js} +2 -2
- package/dist/app/assets/{NotFound-DCeMrR7Q.js.map → NotFound-XohZYy7w.js.map} +1 -1
- package/dist/{assets/Pricing-CGZnCST5.js → app/assets/Pricing-CxCutpT0.js} +2 -2
- package/dist/app/assets/{Pricing-CGZnCST5.js.map → Pricing-CxCutpT0.js.map} +1 -1
- package/dist/app/assets/{Privacy-D86um9Ox.js → Privacy-D8m3h6P-.js} +2 -2
- package/dist/app/assets/{Privacy-D86um9Ox.js.map → Privacy-D8m3h6P-.js.map} +1 -1
- package/dist/app/assets/{SignIn-J1V55TpG.js → SignIn-CINUig91.js} +2 -2
- package/dist/app/assets/{SignIn-J1V55TpG.js.map → SignIn-CINUig91.js.map} +1 -1
- package/dist/app/assets/{SignUp-D6y9FaIp.js → SignUp-B1H6dQgE.js} +2 -2
- package/dist/app/assets/{SignUp-D6y9FaIp.js.map → SignUp-B1H6dQgE.js.map} +1 -1
- package/dist/app/assets/{SiteHeader-Ch5fAKkA.js → SiteHeader-BGQW06JF.js} +2 -2
- package/dist/app/assets/{SiteHeader-Ch5fAKkA.js.map → SiteHeader-BGQW06JF.js.map} +1 -1
- package/dist/app/assets/{StickyMobileCta-BdjmxjZ4.js → StickyMobileCta-C41cW-Ji.js} +2 -2
- package/dist/app/assets/{StickyMobileCta-BdjmxjZ4.js.map → StickyMobileCta-C41cW-Ji.js.map} +1 -1
- package/dist/{assets/StoreAssetsPipeline-Cl-3GPfw.js → app/assets/StoreAssetsPipeline-bUVDqZAU.js} +2 -2
- package/dist/{assets/StoreAssetsPipeline-Cl-3GPfw.js.map → app/assets/StoreAssetsPipeline-bUVDqZAU.js.map} +1 -1
- package/dist/app/assets/{Success-BtaUzpPJ.js → Success-CMpdlLi2.js} +2 -2
- package/dist/app/assets/{Success-BtaUzpPJ.js.map → Success-CMpdlLi2.js.map} +1 -1
- package/dist/app/assets/{Terms-D_qNDuwq.js → Terms-C8NcE4sw.js} +2 -2
- package/dist/app/assets/{Terms-D_qNDuwq.js.map → Terms-C8NcE4sw.js.map} +1 -1
- package/dist/app/assets/{ToolGuardrailsPanel-Dqo_LDWu.js → ToolGuardrailsPanel-DbjLhdX8.js} +2 -2
- package/dist/app/assets/{ToolGuardrailsPanel-Dqo_LDWu.js.map → ToolGuardrailsPanel-DbjLhdX8.js.map} +1 -1
- package/dist/app/assets/{ToolsIndex-D7Z_LkLt.js → ToolsIndex-BuZSvoBC.js} +2 -2
- package/dist/app/assets/{ToolsIndex-D7Z_LkLt.js.map → ToolsIndex-BuZSvoBC.js.map} +1 -1
- package/dist/{assets/WorkloadCalculator-6PgA8Qfc.js → app/assets/WorkloadCalculator-CjdG5TVq.js} +2 -2
- package/dist/{assets/WorkloadCalculator-6PgA8Qfc.js.map → app/assets/WorkloadCalculator-CjdG5TVq.js.map} +1 -1
- package/dist/app/assets/{calculator-BJHViS7f.js → calculator-_D64kDDH.js} +2 -2
- package/dist/app/assets/{calculator-BJHViS7f.js.map → calculator-_D64kDDH.js.map} +1 -1
- package/dist/app/assets/check-BaiZ7vYg.js +2 -0
- package/dist/app/assets/{check-IxdpNvaC.js.map → check-BaiZ7vYg.js.map} +1 -1
- package/dist/app/assets/chevron-down-DVRa-y8D.js +2 -0
- package/dist/app/assets/{chevron-down-DFKVs9n4.js.map → chevron-down-DVRa-y8D.js.map} +1 -1
- package/dist/app/assets/{circle-check-DA-NWInD.js → circle-check-reAyVfkP.js} +2 -2
- package/dist/app/assets/{circle-check-DA-NWInD.js.map → circle-check-reAyVfkP.js.map} +1 -1
- package/dist/app/assets/{clipboard-copy-B2p9wr40.js → clipboard-copy-BfB1mutp.js} +2 -2
- package/dist/app/assets/{clipboard-copy-B2p9wr40.js.map → clipboard-copy-BfB1mutp.js.map} +1 -1
- package/dist/app/assets/{copy-BnUx1vxq.js → copy-B9y2mtjd.js} +2 -2
- package/dist/app/assets/{copy-BnUx1vxq.js.map → copy-B9y2mtjd.js.map} +1 -1
- package/dist/app/assets/{crop-BLAB1KK_.js → crop-2_j5MtOq.js} +2 -2
- package/dist/app/assets/{crop-BLAB1KK_.js.map → crop-2_j5MtOq.js.map} +1 -1
- package/dist/app/assets/{download-DNjju5h9.js → download-CqEtEEpe.js} +2 -2
- package/dist/app/assets/{download-DNjju5h9.js.map → download-CqEtEEpe.js.map} +1 -1
- package/dist/app/assets/{eye-DkJdJAvt.js → eye-B1LPDhW7.js} +2 -2
- package/dist/app/assets/{eye-DkJdJAvt.js.map → eye-B1LPDhW7.js.map} +1 -1
- package/dist/app/assets/{folder-tree-zQOd55nP.js → folder-tree-CnF1eSpg.js} +2 -2
- package/dist/app/assets/{folder-tree-zQOd55nP.js.map → folder-tree-CnF1eSpg.js.map} +1 -1
- package/dist/app/assets/{grid-3x3-BCPiZxWL.js → grid-3x3-BB0TBwXQ.js} +2 -2
- package/dist/{assets/grid-3x3-BCPiZxWL.js.map → app/assets/grid-3x3-BB0TBwXQ.js.map} +1 -1
- package/dist/app/assets/{index-C4xM6WAU.js → index-Bffw9flM.js} +8 -8
- package/dist/app/assets/index-Bffw9flM.js.map +1 -0
- package/dist/app/assets/{layout-grid-DvMRLTBT.js → layout-grid-DbSzm5KY.js} +2 -2
- package/dist/app/assets/{layout-grid-DvMRLTBT.js.map → layout-grid-DbSzm5KY.js.map} +1 -1
- package/dist/app/assets/{rocket-fjJ-qzsl.js → rocket-d1Ntm8ge.js} +2 -2
- package/dist/app/assets/{rocket-fjJ-qzsl.js.map → rocket-d1Ntm8ge.js.map} +1 -1
- package/dist/app/assets/{shield-check-C-qC9fhU.js → shield-check-DXqKmrPT.js} +2 -2
- package/dist/{assets/shield-check-C-qC9fhU.js.map → app/assets/shield-check-DXqKmrPT.js.map} +1 -1
- package/dist/app/assets/{signIn-CYNXaR1Y.js → signIn-D-eCUhFT.js} +2 -2
- package/dist/{assets/signIn-CYNXaR1Y.js.map → app/assets/signIn-D-eCUhFT.js.map} +1 -1
- package/dist/app/assets/{smartphone-DRYkbHrn.js → smartphone-Cjrk_YxV.js} +2 -2
- package/dist/app/assets/{smartphone-DRYkbHrn.js.map → smartphone-Cjrk_YxV.js.map} +1 -1
- package/dist/app/assets/{terminal-CY2dKmaU.js → terminal-CT_KE008.js} +2 -2
- package/dist/{assets/terminal-CY2dKmaU.js.map → app/assets/terminal-CT_KE008.js.map} +1 -1
- package/dist/{assets/useAuth-D_UWt-CP.js → app/assets/useAuth-ctmUbyCR.js} +2 -2
- package/dist/app/assets/{useAuth-D_UWt-CP.js.map → useAuth-ctmUbyCR.js.map} +1 -1
- package/dist/app/index.html +5 -1
- package/dist/assets/{AgentCli-CJHTv5S4.js → AgentCli-DNTDYBbk.js} +2 -2
- package/dist/{app/assets/AgentCli-CJHTv5S4.js.map → assets/AgentCli-DNTDYBbk.js.map} +1 -1
- package/dist/assets/{App-DV5XHwn8.js → App-DPi9LW-y.js} +2 -2
- package/dist/{app/assets/App-DV5XHwn8.js.map → assets/App-DPi9LW-y.js.map} +1 -1
- package/dist/{app/assets/AppReviewAso-Dvh6A_g-.js → assets/AppReviewAso-BUTGLatx.js} +2 -2
- package/dist/{app/assets/AppReviewAso-Dvh6A_g-.js.map → assets/AppReviewAso-BUTGLatx.js.map} +1 -1
- package/dist/assets/{Cancelled-D6i4ywc8.js → Cancelled-BeS-WlPj.js} +2 -2
- package/dist/assets/{Cancelled-D6i4ywc8.js.map → Cancelled-BeS-WlPj.js.map} +1 -1
- package/dist/assets/{CopyButton-BlPQEoP3.js → CopyButton-BZQEBHBq.js} +2 -2
- package/dist/assets/{CopyButton-BlPQEoP3.js.map → CopyButton-BZQEBHBq.js.map} +1 -1
- package/dist/{app/assets/FastlaneScreenshots-DF74cNwo.js → assets/FastlaneScreenshots-Dn7jfpuz.js} +2 -2
- package/dist/{app/assets/FastlaneScreenshots-DF74cNwo.js.map → assets/FastlaneScreenshots-Dn7jfpuz.js.map} +1 -1
- package/dist/{app/assets/FirstExport-BMHdPGDX.js → assets/FirstExport-CzioMqbJ.js} +2 -2
- package/dist/assets/{FirstExport-BMHdPGDX.js.map → FirstExport-CzioMqbJ.js.map} +1 -1
- package/dist/assets/{FitPanel-Fp4iPZxf.js → FitPanel-DzYzTMEi.js} +2 -2
- package/dist/assets/{FitPanel-Fp4iPZxf.js.map → FitPanel-DzYzTMEi.js.map} +1 -1
- package/dist/assets/{FivePanelFramework-B967Cblg.js → FivePanelFramework-Bt5-NjCV.js} +2 -2
- package/dist/assets/{FivePanelFramework-B967Cblg.js.map → FivePanelFramework-Bt5-NjCV.js.map} +1 -1
- package/dist/assets/{ForgotPassword-CApAdwy1.js → ForgotPassword-DuHNHuUe.js} +2 -2
- package/dist/{app/assets/ForgotPassword-CApAdwy1.js.map → assets/ForgotPassword-DuHNHuUe.js.map} +1 -1
- package/dist/{app/assets/Landing-Vxx4PfE4.js → assets/Landing-DB9pTPoT.js} +2 -2
- package/dist/{app/assets/Landing-Vxx4PfE4.js.map → assets/Landing-DB9pTPoT.js.map} +1 -1
- package/dist/assets/{LanguageSwitcher-Cp-6zMXz.js → LanguageSwitcher-CfUhVVuT.js} +2 -2
- package/dist/{app/assets/LanguageSwitcher-Cp-6zMXz.js.map → assets/LanguageSwitcher-CfUhVVuT.js.map} +1 -1
- package/dist/assets/{Legal-CGgUYM9f.js → Legal-p-YIX5Jv.js} +2 -2
- package/dist/assets/{Legal-CGgUYM9f.js.map → Legal-p-YIX5Jv.js.map} +1 -1
- package/dist/assets/{NotFound-DCeMrR7Q.js → NotFound-XohZYy7w.js} +2 -2
- package/dist/assets/{NotFound-DCeMrR7Q.js.map → NotFound-XohZYy7w.js.map} +1 -1
- package/dist/{app/assets/Pricing-CGZnCST5.js → assets/Pricing-CxCutpT0.js} +2 -2
- package/dist/assets/{Pricing-CGZnCST5.js.map → Pricing-CxCutpT0.js.map} +1 -1
- package/dist/assets/{Privacy-D86um9Ox.js → Privacy-D8m3h6P-.js} +2 -2
- package/dist/assets/{Privacy-D86um9Ox.js.map → Privacy-D8m3h6P-.js.map} +1 -1
- package/dist/assets/{SignIn-J1V55TpG.js → SignIn-CINUig91.js} +2 -2
- package/dist/assets/{SignIn-J1V55TpG.js.map → SignIn-CINUig91.js.map} +1 -1
- package/dist/assets/{SignUp-D6y9FaIp.js → SignUp-B1H6dQgE.js} +2 -2
- package/dist/assets/{SignUp-D6y9FaIp.js.map → SignUp-B1H6dQgE.js.map} +1 -1
- package/dist/assets/{SiteHeader-Ch5fAKkA.js → SiteHeader-BGQW06JF.js} +2 -2
- package/dist/assets/{SiteHeader-Ch5fAKkA.js.map → SiteHeader-BGQW06JF.js.map} +1 -1
- package/dist/assets/{StickyMobileCta-BdjmxjZ4.js → StickyMobileCta-C41cW-Ji.js} +2 -2
- package/dist/assets/{StickyMobileCta-BdjmxjZ4.js.map → StickyMobileCta-C41cW-Ji.js.map} +1 -1
- package/dist/{app/assets/StoreAssetsPipeline-Cl-3GPfw.js → assets/StoreAssetsPipeline-bUVDqZAU.js} +2 -2
- package/dist/{app/assets/StoreAssetsPipeline-Cl-3GPfw.js.map → assets/StoreAssetsPipeline-bUVDqZAU.js.map} +1 -1
- package/dist/assets/{Success-BtaUzpPJ.js → Success-CMpdlLi2.js} +2 -2
- package/dist/assets/{Success-BtaUzpPJ.js.map → Success-CMpdlLi2.js.map} +1 -1
- package/dist/assets/{Terms-D_qNDuwq.js → Terms-C8NcE4sw.js} +2 -2
- package/dist/assets/{Terms-D_qNDuwq.js.map → Terms-C8NcE4sw.js.map} +1 -1
- package/dist/assets/{ToolGuardrailsPanel-Dqo_LDWu.js → ToolGuardrailsPanel-DbjLhdX8.js} +2 -2
- package/dist/assets/{ToolGuardrailsPanel-Dqo_LDWu.js.map → ToolGuardrailsPanel-DbjLhdX8.js.map} +1 -1
- package/dist/assets/{ToolsIndex-D7Z_LkLt.js → ToolsIndex-BuZSvoBC.js} +2 -2
- package/dist/assets/{ToolsIndex-D7Z_LkLt.js.map → ToolsIndex-BuZSvoBC.js.map} +1 -1
- package/dist/{app/assets/WorkloadCalculator-6PgA8Qfc.js → assets/WorkloadCalculator-CjdG5TVq.js} +2 -2
- package/dist/{app/assets/WorkloadCalculator-6PgA8Qfc.js.map → assets/WorkloadCalculator-CjdG5TVq.js.map} +1 -1
- package/dist/assets/{calculator-BJHViS7f.js → calculator-_D64kDDH.js} +2 -2
- package/dist/assets/{calculator-BJHViS7f.js.map → calculator-_D64kDDH.js.map} +1 -1
- package/dist/assets/check-BaiZ7vYg.js +2 -0
- package/dist/assets/{check-IxdpNvaC.js.map → check-BaiZ7vYg.js.map} +1 -1
- package/dist/assets/chevron-down-DVRa-y8D.js +2 -0
- package/dist/assets/{chevron-down-DFKVs9n4.js.map → chevron-down-DVRa-y8D.js.map} +1 -1
- package/dist/assets/{circle-check-DA-NWInD.js → circle-check-reAyVfkP.js} +2 -2
- package/dist/assets/{circle-check-DA-NWInD.js.map → circle-check-reAyVfkP.js.map} +1 -1
- package/dist/assets/{clipboard-copy-B2p9wr40.js → clipboard-copy-BfB1mutp.js} +2 -2
- package/dist/assets/{clipboard-copy-B2p9wr40.js.map → clipboard-copy-BfB1mutp.js.map} +1 -1
- package/dist/assets/{copy-BnUx1vxq.js → copy-B9y2mtjd.js} +2 -2
- package/dist/assets/{copy-BnUx1vxq.js.map → copy-B9y2mtjd.js.map} +1 -1
- package/dist/assets/{crop-BLAB1KK_.js → crop-2_j5MtOq.js} +2 -2
- package/dist/assets/{crop-BLAB1KK_.js.map → crop-2_j5MtOq.js.map} +1 -1
- package/dist/assets/{download-DNjju5h9.js → download-CqEtEEpe.js} +2 -2
- package/dist/assets/{download-DNjju5h9.js.map → download-CqEtEEpe.js.map} +1 -1
- package/dist/assets/{eye-DkJdJAvt.js → eye-B1LPDhW7.js} +2 -2
- package/dist/assets/{eye-DkJdJAvt.js.map → eye-B1LPDhW7.js.map} +1 -1
- package/dist/assets/{folder-tree-zQOd55nP.js → folder-tree-CnF1eSpg.js} +2 -2
- package/dist/assets/{folder-tree-zQOd55nP.js.map → folder-tree-CnF1eSpg.js.map} +1 -1
- package/dist/assets/{grid-3x3-BCPiZxWL.js → grid-3x3-BB0TBwXQ.js} +2 -2
- package/dist/{app/assets/grid-3x3-BCPiZxWL.js.map → assets/grid-3x3-BB0TBwXQ.js.map} +1 -1
- package/dist/assets/{index-C4xM6WAU.js → index-Bffw9flM.js} +8 -8
- package/dist/assets/index-Bffw9flM.js.map +1 -0
- package/dist/assets/{layout-grid-DvMRLTBT.js → layout-grid-DbSzm5KY.js} +2 -2
- package/dist/assets/{layout-grid-DvMRLTBT.js.map → layout-grid-DbSzm5KY.js.map} +1 -1
- package/dist/assets/{rocket-fjJ-qzsl.js → rocket-d1Ntm8ge.js} +2 -2
- package/dist/assets/{rocket-fjJ-qzsl.js.map → rocket-d1Ntm8ge.js.map} +1 -1
- package/dist/assets/{shield-check-C-qC9fhU.js → shield-check-DXqKmrPT.js} +2 -2
- package/dist/{app/assets/shield-check-C-qC9fhU.js.map → assets/shield-check-DXqKmrPT.js.map} +1 -1
- package/dist/assets/{signIn-CYNXaR1Y.js → signIn-D-eCUhFT.js} +2 -2
- package/dist/{app/assets/signIn-CYNXaR1Y.js.map → assets/signIn-D-eCUhFT.js.map} +1 -1
- package/dist/assets/{smartphone-DRYkbHrn.js → smartphone-Cjrk_YxV.js} +2 -2
- package/dist/assets/{smartphone-DRYkbHrn.js.map → smartphone-Cjrk_YxV.js.map} +1 -1
- package/dist/assets/{terminal-CY2dKmaU.js → terminal-CT_KE008.js} +2 -2
- package/dist/{app/assets/terminal-CY2dKmaU.js.map → assets/terminal-CT_KE008.js.map} +1 -1
- package/dist/{app/assets/useAuth-D_UWt-CP.js → assets/useAuth-ctmUbyCR.js} +2 -2
- package/dist/assets/{useAuth-D_UWt-CP.js.map → useAuth-ctmUbyCR.js.map} +1 -1
- package/dist/cancelled/index.html +5 -1
- package/dist/forgot-password/index.html +5 -1
- package/dist/index.html +5 -1
- package/dist/legal/index.html +5 -1
- package/dist/llms-full.txt +44 -0
- package/dist/llms.txt +22 -0
- package/dist/mcp-server.json +40 -0
- package/dist/pricing/index.html +5 -1
- package/dist/privacy/index.html +5 -1
- package/dist/robots.txt +6 -0
- package/dist/signin/index.html +5 -1
- package/dist/signup/index.html +5 -1
- package/dist/sitemap.xml +28 -0
- package/dist/success/index.html +5 -1
- package/dist/terms/index.html +5 -1
- package/dist/tools/5-panel-screenshot-framework/index.html +5 -1
- package/dist/tools/agent-cli/index.html +13 -7
- package/dist/tools/app-review-aso/index.html +5 -1
- package/dist/tools/fastlane-screenshots/index.html +5 -1
- package/dist/tools/first-export/index.html +5 -1
- package/dist/tools/index.html +5 -1
- package/dist/tools/screenshot-workload-calculator/index.html +5 -1
- package/dist/tools/store-assets-pipeline/index.html +5 -1
- package/package.json +2 -2
- package/dist/app/assets/check-IxdpNvaC.js +0 -2
- package/dist/app/assets/chevron-down-DFKVs9n4.js +0 -2
- package/dist/app/assets/index-C4xM6WAU.js.map +0 -1
- package/dist/assets/check-IxdpNvaC.js +0 -2
- package/dist/assets/chevron-down-DFKVs9n4.js +0 -2
- package/dist/assets/index-C4xM6WAU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Landing-Vxx4PfE4.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, useState } 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 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 fit = t('landing.fit', { returnObjects: true }) || {};\n const fitBestBullets = fit.bestBullets || [];\n const fitNotBullets = fit.notBullets || [];\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 heroOutputMessageExamples = heroOutputExample.messageExamples || [];\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 <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 </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/demo-poster.jpg\"\n >\n <source src=\"/app/assets/hero/demo.webm\" type=\"video/webm\" />\n <source src=\"/app/assets/hero/demo.mp4\" type=\"video/mp4\" />\n <img\n src=\"/app/assets/hero/demo-poster.jpg\"\n alt={heroAlt}\n className=\"w-full h-auto block\"\n />\n </video>\n </div>\n {heroCli.code && <CodeBlock label={heroCli.label} code={heroCli.code} defaultOpen={false} />}\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 {heroOutputMessageExamples.length > 0 && (\n <div className=\"space-y-3 max-w-5xl mx-auto\">\n {heroOutputExample.messageExamplesTitle && (\n <h3 className=\"text-xl font-bold text-center text-white\">{heroOutputExample.messageExamplesTitle}</h3>\n )}\n {heroOutputExample.messageExamplesLead && (\n <p className=\"text-sm text-slate-300 text-center\">{heroOutputExample.messageExamplesLead}</p>\n )}\n <div className=\"grid md:grid-cols-3 gap-4\">\n {heroOutputMessageExamples.map((item, index) => (\n <div key={`${item.category || 'example'}-${index}`} className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3\">\n {item.category && <div className=\"text-xs font-semibold tracking-[0.12em] uppercase text-blue-200\">{item.category}</div>}\n {item.bad && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold\">\n {heroOutputExample.messageExamplesBadLabel || 'Vague'}\n </div>\n <div className=\"text-sm text-slate-300\">\"{item.bad}\"</div>\n </div>\n )}\n {item.good && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold\">\n {heroOutputExample.messageExamplesGoodLabel || 'Concrete'}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\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 {fit?.title && (fitBestBullets.length > 0 || fitNotBullets.length > 0) && (\n <section id=\"fit\" className=\"space-y-6\">\n <div className=\"text-center space-y-2 max-w-3xl mx-auto\">\n <h2 className=\"text-3xl font-bold\">{fit.title}</h2>\n </div>\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3\">\n <div className=\"text-lg font-bold text-emerald-200\">{fit.bestTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitBestBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3\">\n <div className=\"text-lg font-bold text-amber-200\">{fit.notTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitNotBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </div>\n {fit.note && <p className=\"text-xs text-slate-500 text-center max-w-3xl mx-auto\">{fit.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\">\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">{t('landing.footer.terms')}</a>\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">{t('landing.footer.privacy')}</a>\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">{t('landing.footer.legal')}</a>\n <a href=\"/llms.txt\" className=\"hover:text-white transition-colors\">LLMs</a>\n </div>\n </div>\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, defaultOpen }) => {\n const { t } = useTranslation();\n const [isOpen, setIsOpen] = useState(() => {\n if (typeof defaultOpen === 'boolean') return defaultOpen;\n if (typeof window === 'undefined') return true;\n return window.matchMedia('(min-width: 640px)').matches;\n });\n if (!code) return null;\n\n const toggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\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={isOpen} onToggle={(event) => setIsOpen(event.currentTarget.open)}>\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","fit","fitBestBullets","fitNotBullets","pricing","socialProof","faqItems","footerLinks","heroAlt","heroOutputs","heroCli","heroOutputExample","heroOutputMessageExamples","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","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","defaultOpen","t","isOpen","setIsOpen","useState","toggleLabel","ChevronDown"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
1
|
+
{"version":3,"file":"Landing-DB9pTPoT.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, useState } 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 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 fit = t('landing.fit', { returnObjects: true }) || {};\n const fitBestBullets = fit.bestBullets || [];\n const fitNotBullets = fit.notBullets || [];\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 heroOutputMessageExamples = heroOutputExample.messageExamples || [];\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 <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 </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/demo-poster.jpg\"\n >\n <source src=\"/app/assets/hero/demo.webm\" type=\"video/webm\" />\n <source src=\"/app/assets/hero/demo.mp4\" type=\"video/mp4\" />\n <img\n src=\"/app/assets/hero/demo-poster.jpg\"\n alt={heroAlt}\n className=\"w-full h-auto block\"\n />\n </video>\n </div>\n {heroCli.code && <CodeBlock label={heroCli.label} code={heroCli.code} defaultOpen={false} />}\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 {heroOutputMessageExamples.length > 0 && (\n <div className=\"space-y-3 max-w-5xl mx-auto\">\n {heroOutputExample.messageExamplesTitle && (\n <h3 className=\"text-xl font-bold text-center text-white\">{heroOutputExample.messageExamplesTitle}</h3>\n )}\n {heroOutputExample.messageExamplesLead && (\n <p className=\"text-sm text-slate-300 text-center\">{heroOutputExample.messageExamplesLead}</p>\n )}\n <div className=\"grid md:grid-cols-3 gap-4\">\n {heroOutputMessageExamples.map((item, index) => (\n <div key={`${item.category || 'example'}-${index}`} className=\"rounded-2xl border border-slate-800 bg-slate-950/60 p-4 space-y-3\">\n {item.category && <div className=\"text-xs font-semibold tracking-[0.12em] uppercase text-blue-200\">{item.category}</div>}\n {item.bad && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-rose-300 font-semibold\">\n {heroOutputExample.messageExamplesBadLabel || 'Vague'}\n </div>\n <div className=\"text-sm text-slate-300\">\"{item.bad}\"</div>\n </div>\n )}\n {item.good && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] uppercase tracking-[0.16em] text-emerald-300 font-semibold\">\n {heroOutputExample.messageExamplesGoodLabel || 'Concrete'}\n </div>\n <div className=\"text-sm text-white font-semibold\">\"{item.good}\"</div>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\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 {fit?.title && (fitBestBullets.length > 0 || fitNotBullets.length > 0) && (\n <section id=\"fit\" className=\"space-y-6\">\n <div className=\"text-center space-y-2 max-w-3xl mx-auto\">\n <h2 className=\"text-3xl font-bold\">{fit.title}</h2>\n </div>\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-emerald-500/30 space-y-3\">\n <div className=\"text-lg font-bold text-emerald-200\">{fit.bestTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitBestBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n <div className=\"p-6 rounded-2xl bg-slate-900/60 border border-amber-400/30 space-y-3\">\n <div className=\"text-lg font-bold text-amber-200\">{fit.notTitle}</div>\n <ul className=\"text-sm text-slate-200 list-disc pl-5 space-y-2\">\n {fitNotBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </div>\n {fit.note && <p className=\"text-xs text-slate-500 text-center max-w-3xl mx-auto\">{fit.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\">\n <a href=\"/terms\" className=\"hover:text-white transition-colors\">{t('landing.footer.terms')}</a>\n <a href=\"/privacy\" className=\"hover:text-white transition-colors\">{t('landing.footer.privacy')}</a>\n <a href=\"/legal\" className=\"hover:text-white transition-colors\">{t('landing.footer.legal')}</a>\n <a href=\"/llms.txt\" className=\"hover:text-white transition-colors\">LLMs</a>\n <a href=\"/ai-agents.json\" className=\"hover:text-white transition-colors\">AI Agents JSON</a>\n <a href=\"/mcp-server.json\" className=\"hover:text-white transition-colors\">MCP Server JSON</a>\n </div>\n </div>\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, defaultOpen }) => {\n const { t } = useTranslation();\n const [isOpen, setIsOpen] = useState(() => {\n if (typeof defaultOpen === 'boolean') return defaultOpen;\n if (typeof window === 'undefined') return true;\n return window.matchMedia('(min-width: 640px)').matches;\n });\n if (!code) return null;\n\n const toggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\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={isOpen} onToggle={(event) => setIsOpen(event.currentTarget.open)}>\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","fit","fitBestBullets","fitNotBullets","pricing","socialProof","faqItems","footerLinks","heroAlt","heroOutputs","heroCli","heroOutputExample","heroOutputMessageExamples","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","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","defaultOpen","t","isOpen","setIsOpen","useState","toggleLabel","ChevronDown"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as i,u as L,j as l,s as k,c as A,t as N}from"./index-
|
|
2
|
-
//# sourceMappingURL=LanguageSwitcher-
|
|
1
|
+
import{r as i,u as L,j as l,s as k,c as A,t as N}from"./index-Bffw9flM.js";const E=(...e)=>e.filter((t,n,s)=>!!t&&t.trim()!==""&&s.indexOf(t)===n).join(" ").trim();const S=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const T=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,s)=>s?s.toUpperCase():n.toLowerCase());const x=e=>{const t=T(e);return t.charAt(0).toUpperCase()+t.slice(1)};var $={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const _=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1};const D=i.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:s,className:a="",children:o,iconNode:c,...u},d)=>i.createElement("svg",{ref:d,...$,width:t,height:t,stroke:e,strokeWidth:s?Number(n)*24/Number(t):n,className:E("lucide",a),...!o&&!_(u)&&{"aria-hidden":"true"},...u},[...c.map(([p,f])=>i.createElement(p,f)),...Array.isArray(o)?o:[o]]));const C=(e,t)=>{const n=i.forwardRef(({className:s,...a},o)=>i.createElement(D,{ref:o,iconNode:t,className:E(`lucide-${S(x(e))}`,`lucide-${e}`,s),...a}));return n.displayName=x(e),n};const M=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],O=C("globe",M);const R=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],z=C("x",R),B='a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])',v=e=>{if(!e)return[];const t=e.querySelectorAll(B);return Array.from(t).filter(n=>n&&typeof n.focus=="function")},G=({isOpen:e,onClose:t,panelRef:n,initialFocusRef:s,closeOnEscape:a=!0,trapFocus:o=!0,lockScroll:c=!0,restoreFocus:u=!0}={})=>{const d=i.useRef(null),p=i.useRef(null);i.useEffect(()=>{if(!e||typeof window>"u")return;u&&(d.current=document.activeElement),c&&(p.current=document.body.style.overflow,document.body.style.overflow="hidden");const f=s?.current;if(f&&typeof f.focus=="function")f.focus();else{const r=v(n?.current);r[0]&&r[0].focus()}const h=r=>{if(r.key==="Escape"&&a){r.preventDefault(),t?.();return}if(r.key!=="Tab"||!o)return;const m=n?.current;if(!m)return;const g=v(m);if(g.length===0)return;const w=g[0],y=g[g.length-1],b=document.activeElement;if(!m.contains(b)){r.preventDefault(),w.focus();return}if(r.shiftKey){b===w&&(r.preventDefault(),y.focus());return}b===y&&(r.preventDefault(),w.focus())};return window.addEventListener("keydown",h),()=>{if(window.removeEventListener("keydown",h),c&&(document.body.style.overflow=p.current??""),u){const r=d.current;r&&typeof r.focus=="function"&&r.focus()}}},[a,s,e,c,t,n,u,o])},j=()=>{if("".toLowerCase()==="staging"||"".includes("api-stg"))return!0;if(typeof window<"u"){const n=window.location.hostname.toLowerCase();if(n.includes("develop")||n.includes("stg"))return!0}return!1},I=()=>{const e="".toLowerCase().trim();return e==="1"||e==="true"||e==="yes"||e==="on"},K=(e,t)=>{const{t:n,i18n:s}=L(),a=JSON.stringify(t??{}),o=i.useMemo(()=>JSON.parse(a),[a]);i.useEffect(()=>{const c=n(e,o),u=j()?"[Staging] ":"";c&&(document.title=`${u}${c}`)},[e,n,s.language,o])},P=()=>j()?l.jsx("div",{className:"fixed top-3 left-3 z-[200] px-3 py-1.5 rounded-full bg-amber-500 text-amber-950 text-xs font-bold shadow-lg shadow-amber-500/30 border border-amber-600",children:"STAGING"}):null,J=e=>(e||"").split("-")[0]==="ja"?"ja":"en",F=({className:e=""})=>{const{i18n:t,t:n}=L(),s=J(t.resolvedLanguage||t.language),a=async()=>{const o=s==="en"?"ja":"en",c=typeof window<"u"?window.location.pathname:void 0;k(o),A(o);try{await t.changeLanguage(o),N("lang_switch",{from:s,to:o,path:c})}catch{}};return l.jsxs("button",{type:"button",onClick:a,className:`flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-200 text-xs font-semibold transition-colors ${e} ${s==="ja"?"bg-slate-50 text-slate-800":"bg-white text-slate-600 hover:bg-slate-50"}`,title:n(s==="en"?"app.header.switchToJa":"app.header.switchToEn"),children:[l.jsx(O,{size:14}),l.jsx("span",{className:s==="ja"?"text-slate-800":"text-slate-400",children:"JA"}),l.jsx("span",{className:"text-slate-300",children:"/"}),l.jsx("span",{className:s==="en"?"text-slate-800":"text-slate-400",children:"EN"})]})};export{F as L,P as S,z as X,K as a,C as c,I as i,G as u};
|
|
2
|
+
//# sourceMappingURL=LanguageSwitcher-CfUhVVuT.js.map
|
package/dist/{assets/LanguageSwitcher-Cp-6zMXz.js.map → app/assets/LanguageSwitcher-CfUhVVuT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageSwitcher-Cp-6zMXz.js","sources":["../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/globe.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../src/hooks/useModalA11y.js","../../src/lib/env.js","../../src/hooks/usePageTitle.js","../../src/components/StagingBadge.jsx","../../src/components/LanguageSwitcher.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { useEffect, useRef } from 'react';\n\nconst DEFAULT_FOCUSABLE_SELECTOR =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nconst getFocusable = (root) => {\n if (!root) return [];\n const nodes = root.querySelectorAll(DEFAULT_FOCUSABLE_SELECTOR);\n return Array.from(nodes).filter((node) => node && typeof node.focus === 'function');\n};\n\nconst useModalA11y = ({\n isOpen,\n onClose,\n panelRef,\n initialFocusRef,\n closeOnEscape = true,\n trapFocus = true,\n lockScroll = true,\n restoreFocus = true,\n} = {}) => {\n const previousFocusRef = useRef(null);\n const previousOverflowRef = useRef(null);\n\n useEffect(() => {\n if (!isOpen) return;\n if (typeof window === 'undefined') return;\n\n if (restoreFocus) previousFocusRef.current = document.activeElement;\n if (lockScroll) {\n previousOverflowRef.current = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n const focusTarget = initialFocusRef?.current;\n if (focusTarget && typeof focusTarget.focus === 'function') {\n focusTarget.focus();\n } else {\n const focusable = getFocusable(panelRef?.current);\n if (focusable[0]) focusable[0].focus();\n }\n\n const handleKeyDown = (event) => {\n if (event.key === 'Escape' && closeOnEscape) {\n event.preventDefault();\n onClose?.();\n return;\n }\n\n if (event.key !== 'Tab' || !trapFocus) return;\n\n const panel = panelRef?.current;\n if (!panel) return;\n\n const focusable = getFocusable(panel);\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (!panel.contains(active)) {\n event.preventDefault();\n first.focus();\n return;\n }\n\n if (event.shiftKey) {\n if (active === first) {\n event.preventDefault();\n last.focus();\n }\n return;\n }\n\n if (active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n\n if (lockScroll) document.body.style.overflow = previousOverflowRef.current ?? '';\n\n if (restoreFocus) {\n const previous = previousFocusRef.current;\n if (previous && typeof previous.focus === 'function') previous.focus();\n }\n };\n }, [closeOnEscape, initialFocusRef, isOpen, lockScroll, onClose, panelRef, restoreFocus, trapFocus]);\n};\n\nexport default useModalA11y;\n\n","export const isStagingEnv = () => {\n const envFlag = (import.meta.env.VITE_APP_ENV || '').toLowerCase();\n if (envFlag === 'staging') return true;\n\n const api = import.meta.env.VITE_API_ENDPOINT || '';\n if (api.includes('api-stg')) return true;\n\n if (typeof window !== 'undefined') {\n const host = window.location.hostname.toLowerCase();\n if (host.includes('develop') || host.includes('stg')) return true;\n }\n\n return false;\n};\n\nexport const isTeamSyncEnabled = () => {\n const flag = (import.meta.env.VITE_FEATURE_TEAM_SYNC || '').toLowerCase().trim();\n return flag === '1' || flag === 'true' || flag === 'yes' || flag === 'on';\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isStagingEnv } from '../lib/env';\n\n const usePageTitle = (titleKey, options) => {\n const { t, i18n } = useTranslation();\n const optionsKey = JSON.stringify(options ?? {});\n const stableOptions = useMemo(() => JSON.parse(optionsKey), [optionsKey]);\n\n useEffect(() => {\n const base = t(titleKey, stableOptions);\n const prefix = isStagingEnv() ? '[Staging] ' : '';\n if (base) {\n document.title = `${prefix}${base}`;\n }\n }, [titleKey, t, i18n.language, stableOptions]);\n};\n\nexport default usePageTitle;\n","import React from 'react';\nimport { isStagingEnv } from '../lib/env';\n\nconst StagingBadge = () => {\n if (!isStagingEnv()) return null;\n\n return (\n <div className=\"fixed top-3 left-3 z-[200] px-3 py-1.5 rounded-full bg-amber-500 text-amber-950 text-xs font-bold shadow-lg shadow-amber-500/30 border border-amber-600\">\n STAGING\n </div>\n );\n};\n\nexport default StagingBadge;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Globe } from 'lucide-react';\nimport { setHtmlLang, saveLang } from '../lib/locale';\nimport { trackEvent } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst LanguageSwitcher = ({ className = '' }) => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n\n const toggleLang = async () => {\n const newLang = lang === 'en' ? 'ja' : 'en';\n const path = typeof window !== 'undefined' ? window.location.pathname : undefined;\n setHtmlLang(newLang);\n saveLang(newLang);\n try {\n await i18n.changeLanguage(newLang);\n trackEvent('lang_switch', { from: lang, to: newLang, path });\n } catch {\n // If changeLanguage fails, keep the persisted language for the next load.\n }\n };\n\n return (\n <button\n type=\"button\"\n onClick={toggleLang}\n className={`flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-200 text-xs font-semibold transition-colors ${className} ${\n lang === 'ja' ? 'bg-slate-50 text-slate-800' : 'bg-white text-slate-600 hover:bg-slate-50'\n }`}\n title={lang === 'en' ? t('app.header.switchToJa') : t('app.header.switchToEn')}\n >\n <Globe size={14} />\n <span className={lang === 'ja' ? 'text-slate-800' : 'text-slate-400'}>JA</span>\n <span className=\"text-slate-300\">/</span>\n <span className={lang === 'en' ? 'text-slate-800' : 'text-slate-400'}>EN</span>\n </button>\n );\n};\n\nexport default LanguageSwitcher;\n"],"names":["mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","props","prop","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","Globe","X","DEFAULT_FOCUSABLE_SELECTOR","getFocusable","root","nodes","node","useModalA11y","isOpen","onClose","panelRef","initialFocusRef","closeOnEscape","trapFocus","lockScroll","restoreFocus","previousFocusRef","useRef","previousOverflowRef","useEffect","focusTarget","focusable","handleKeyDown","event","panel","first","last","active","previous","isStagingEnv","host","isTeamSyncEnabled","flag","usePageTitle","titleKey","options","t","i18n","useTranslation","optionsKey","stableOptions","useMemo","base","prefix","StagingBadge","jsx","normalizeLang","lang","LanguageSwitcher","toggleLang","newLang","path","setHtmlLang","saveLang","trackEvent","jsxs"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
|
|
1
|
+
{"version":3,"file":"LanguageSwitcher-CfUhVVuT.js","sources":["../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/globe.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../src/hooks/useModalA11y.js","../../src/lib/env.js","../../src/hooks/usePageTitle.js","../../src/components/StagingBadge.jsx","../../src/components/LanguageSwitcher.jsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { useEffect, useRef } from 'react';\n\nconst DEFAULT_FOCUSABLE_SELECTOR =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nconst getFocusable = (root) => {\n if (!root) return [];\n const nodes = root.querySelectorAll(DEFAULT_FOCUSABLE_SELECTOR);\n return Array.from(nodes).filter((node) => node && typeof node.focus === 'function');\n};\n\nconst useModalA11y = ({\n isOpen,\n onClose,\n panelRef,\n initialFocusRef,\n closeOnEscape = true,\n trapFocus = true,\n lockScroll = true,\n restoreFocus = true,\n} = {}) => {\n const previousFocusRef = useRef(null);\n const previousOverflowRef = useRef(null);\n\n useEffect(() => {\n if (!isOpen) return;\n if (typeof window === 'undefined') return;\n\n if (restoreFocus) previousFocusRef.current = document.activeElement;\n if (lockScroll) {\n previousOverflowRef.current = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n const focusTarget = initialFocusRef?.current;\n if (focusTarget && typeof focusTarget.focus === 'function') {\n focusTarget.focus();\n } else {\n const focusable = getFocusable(panelRef?.current);\n if (focusable[0]) focusable[0].focus();\n }\n\n const handleKeyDown = (event) => {\n if (event.key === 'Escape' && closeOnEscape) {\n event.preventDefault();\n onClose?.();\n return;\n }\n\n if (event.key !== 'Tab' || !trapFocus) return;\n\n const panel = panelRef?.current;\n if (!panel) return;\n\n const focusable = getFocusable(panel);\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (!panel.contains(active)) {\n event.preventDefault();\n first.focus();\n return;\n }\n\n if (event.shiftKey) {\n if (active === first) {\n event.preventDefault();\n last.focus();\n }\n return;\n }\n\n if (active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n\n if (lockScroll) document.body.style.overflow = previousOverflowRef.current ?? '';\n\n if (restoreFocus) {\n const previous = previousFocusRef.current;\n if (previous && typeof previous.focus === 'function') previous.focus();\n }\n };\n }, [closeOnEscape, initialFocusRef, isOpen, lockScroll, onClose, panelRef, restoreFocus, trapFocus]);\n};\n\nexport default useModalA11y;\n\n","export const isStagingEnv = () => {\n const envFlag = (import.meta.env.VITE_APP_ENV || '').toLowerCase();\n if (envFlag === 'staging') return true;\n\n const api = import.meta.env.VITE_API_ENDPOINT || '';\n if (api.includes('api-stg')) return true;\n\n if (typeof window !== 'undefined') {\n const host = window.location.hostname.toLowerCase();\n if (host.includes('develop') || host.includes('stg')) return true;\n }\n\n return false;\n};\n\nexport const isTeamSyncEnabled = () => {\n const flag = (import.meta.env.VITE_FEATURE_TEAM_SYNC || '').toLowerCase().trim();\n return flag === '1' || flag === 'true' || flag === 'yes' || flag === 'on';\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isStagingEnv } from '../lib/env';\n\n const usePageTitle = (titleKey, options) => {\n const { t, i18n } = useTranslation();\n const optionsKey = JSON.stringify(options ?? {});\n const stableOptions = useMemo(() => JSON.parse(optionsKey), [optionsKey]);\n\n useEffect(() => {\n const base = t(titleKey, stableOptions);\n const prefix = isStagingEnv() ? '[Staging] ' : '';\n if (base) {\n document.title = `${prefix}${base}`;\n }\n }, [titleKey, t, i18n.language, stableOptions]);\n};\n\nexport default usePageTitle;\n","import React from 'react';\nimport { isStagingEnv } from '../lib/env';\n\nconst StagingBadge = () => {\n if (!isStagingEnv()) return null;\n\n return (\n <div className=\"fixed top-3 left-3 z-[200] px-3 py-1.5 rounded-full bg-amber-500 text-amber-950 text-xs font-bold shadow-lg shadow-amber-500/30 border border-amber-600\">\n STAGING\n </div>\n );\n};\n\nexport default StagingBadge;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Globe } from 'lucide-react';\nimport { setHtmlLang, saveLang } from '../lib/locale';\nimport { trackEvent } from '../lib/analytics';\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst LanguageSwitcher = ({ className = '' }) => {\n const { i18n, t } = useTranslation();\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n\n const toggleLang = async () => {\n const newLang = lang === 'en' ? 'ja' : 'en';\n const path = typeof window !== 'undefined' ? window.location.pathname : undefined;\n setHtmlLang(newLang);\n saveLang(newLang);\n try {\n await i18n.changeLanguage(newLang);\n trackEvent('lang_switch', { from: lang, to: newLang, path });\n } catch {\n // If changeLanguage fails, keep the persisted language for the next load.\n }\n };\n\n return (\n <button\n type=\"button\"\n onClick={toggleLang}\n className={`flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-200 text-xs font-semibold transition-colors ${className} ${\n lang === 'ja' ? 'bg-slate-50 text-slate-800' : 'bg-white text-slate-600 hover:bg-slate-50'\n }`}\n title={lang === 'en' ? t('app.header.switchToJa') : t('app.header.switchToEn')}\n >\n <Globe size={14} />\n <span className={lang === 'ja' ? 'text-slate-800' : 'text-slate-400'}>JA</span>\n <span className=\"text-slate-300\">/</span>\n <span className={lang === 'en' ? 'text-slate-800' : 'text-slate-400'}>EN</span>\n </button>\n );\n};\n\nexport default LanguageSwitcher;\n"],"names":["mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","props","prop","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","Globe","X","DEFAULT_FOCUSABLE_SELECTOR","getFocusable","root","nodes","node","useModalA11y","isOpen","onClose","panelRef","initialFocusRef","closeOnEscape","trapFocus","lockScroll","restoreFocus","previousFocusRef","useRef","previousOverflowRef","useEffect","focusTarget","focusable","handleKeyDown","event","panel","first","last","active","previous","isStagingEnv","host","isTeamSyncEnabled","flag","usePageTitle","titleKey","options","t","i18n","useTranslation","optionsKey","stableOptions","useMemo","base","prefix","StagingBadge","jsx","normalizeLang","lang","LanguageSwitcher","toggleLang","newLang","path","setHtmlLang","saveLang","trackEvent","jsxs"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as r,j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=Legal-
|
|
1
|
+
import{u as r,j as e}from"./index-Bffw9flM.js";import{a as d,S as c}from"./LanguageSwitcher-CfUhVVuT.js";import{S as m}from"./SiteHeader-BGQW06JF.js";const h=()=>{const{t:s}=r();d("titles.legal");const i=s("legal.fields",{returnObjects:!0})||[],t=s("legal.notes",{returnObjects:!0})||[];return e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800",children:[e.jsx(c,{}),e.jsx(m,{variant:"light",showX:!1}),e.jsxs("main",{className:"max-w-4xl mx-auto px-4 py-12",children:[e.jsx("h1",{className:"text-3xl font-bold mb-6",children:s("legal.title")}),e.jsx("p",{className:"mb-6",children:s("legal.intro")}),e.jsx("dl",{className:"bg-white rounded-2xl border border-slate-200 shadow-sm divide-y divide-slate-100",children:i.map((l,a)=>e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-[220px_1fr] gap-1 md:gap-3 px-4 py-3",children:[e.jsx("dt",{className:"font-semibold text-slate-700",children:l.label}),e.jsx("dd",{className:"text-slate-800",children:l.value})]},`${l.label}-${a}`))}),t.length>0&&e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",children:s("legal.notesTitle")}),e.jsx("ul",{className:"list-disc pl-5 space-y-1 text-slate-700",children:t.map((l,a)=>e.jsx("li",{children:l},`${l}-${a}`))})]}),e.jsx("p",{className:"mt-6 text-sm text-slate-600",children:s("legal.contact",{email:"support@shimaumaservices.co.jp"})})]})]})};export{h as default};
|
|
2
|
+
//# sourceMappingURL=Legal-p-YIX5Jv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Legal-
|
|
1
|
+
{"version":3,"file":"Legal-p-YIX5Jv.js","sources":["../../src/pages/Legal.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\n\nconst Legal = () => {\n const { t } = useTranslation();\n usePageTitle('titles.legal');\n const fields = t('legal.fields', { returnObjects: true }) || [];\n const notes = t('legal.notes', { returnObjects: true }) || [];\n\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n\n <main className=\"max-w-4xl mx-auto px-4 py-12\">\n <h1 className=\"text-3xl font-bold mb-6\">{t('legal.title')}</h1>\n <p className=\"mb-6\">{t('legal.intro')}</p>\n\n <dl className=\"bg-white rounded-2xl border border-slate-200 shadow-sm divide-y divide-slate-100\">\n {fields.map((item, idx) => (\n <div\n key={`${item.label}-${idx}`}\n className=\"grid grid-cols-1 md:grid-cols-[220px_1fr] gap-1 md:gap-3 px-4 py-3\"\n >\n <dt className=\"font-semibold text-slate-700\">{item.label}</dt>\n <dd className=\"text-slate-800\">{item.value}</dd>\n </div>\n ))}\n </dl>\n\n {notes.length > 0 && (\n <div className=\"mt-8\">\n <h2 className=\"text-xl font-semibold mb-2\">{t('legal.notesTitle')}</h2>\n <ul className=\"list-disc pl-5 space-y-1 text-slate-700\">\n {notes.map((note, idx) => (\n <li key={`${note}-${idx}`}>{note}</li>\n ))}\n </ul>\n </div>\n )}\n\n <p className=\"mt-6 text-sm text-slate-600\">{t('legal.contact', { email: 'support@shimaumaservices.co.jp' })}</p>\n </main>\n </div>\n );\n};\n\r\nexport default Legal;\r\n"],"names":["Legal","t","useTranslation","usePageTitle","fields","notes","jsxs","jsx","StagingBadge","SiteHeader","item","idx","note"],"mappings":"sJAMA,MAAMA,EAAQ,IAAM,CAClB,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAA,EACdC,EAAa,cAAc,EAC3B,MAAMC,EAASH,EAAE,eAAgB,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EACvDI,EAAQJ,EAAE,cAAe,CAAE,cAAe,EAAA,CAAM,GAAK,CAAA,EAE3D,OACEK,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,EAE1CH,EAAAA,KAAC,OAAA,CAAK,UAAU,+BACd,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,0BAA2B,SAAAN,EAAE,aAAa,EAAE,QACzD,IAAA,CAAE,UAAU,OAAQ,SAAAA,EAAE,aAAa,EAAE,EAEtCM,EAAAA,IAAC,MAAG,UAAU,mFACX,WAAO,IAAI,CAACG,EAAMC,IACjBL,EAAAA,KAAC,MAAA,CAEC,UAAU,qEAEV,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,+BAAgC,SAAAG,EAAK,MAAM,EACzDH,EAAAA,IAAC,KAAA,CAAG,UAAU,iBAAkB,WAAK,KAAA,CAAM,CAAA,CAAA,EAJtC,GAAGG,EAAK,KAAK,IAAIC,CAAG,EAAA,CAM5B,EACH,EAECN,EAAM,OAAS,GACdC,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,6BAA8B,SAAAN,EAAE,kBAAkB,EAAE,QACjE,KAAA,CAAG,UAAU,0CACX,SAAAI,EAAM,IAAI,CAACO,EAAMD,IAChBJ,EAAAA,IAAC,KAAA,CAA2B,YAAnB,GAAGK,CAAI,IAAID,CAAG,EAAU,CAClC,CAAA,CACH,CAAA,EACF,EAGFJ,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA+B,SAAAN,EAAE,gBAAiB,CAAE,MAAO,gCAAA,CAAkC,CAAA,CAAE,CAAA,CAAA,CAC9G,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as s,j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=NotFound-
|
|
1
|
+
import{u as s,j as e}from"./index-Bffw9flM.js";import{a,S as l}from"./LanguageSwitcher-CfUhVVuT.js";import{S as n}from"./SiteHeader-BGQW06JF.js";const i=()=>{const{t}=s();return a("titles.notFound"),e.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-800 flex flex-col",children:[e.jsx(l,{}),e.jsx(n,{variant:"light",showX:!1}),e.jsx("main",{className:"flex-1 flex items-center justify-center px-6 py-10",children:e.jsxs("div",{className:"max-w-lg text-center space-y-4",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-slate-200 text-slate-600 font-bold text-xl",children:"404"}),e.jsx("h1",{className:"text-3xl font-bold",children:t("notFound.title")}),e.jsx("p",{className:"text-slate-600",children:t("notFound.description")}),e.jsxs("div",{className:"flex gap-3 justify-center",children:[e.jsx("a",{href:"/",className:"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100",children:t("notFound.backHome")}),e.jsx("a",{href:"/tools/",className:"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100",children:t("landing.nav.tools")}),e.jsx("a",{href:"/app/",className:"px-4 py-2 rounded-lg bg-slate-900 text-white hover:bg-slate-800",children:t("notFound.openApp")})]})]})})]})};export{i as default};
|
|
2
|
+
//# sourceMappingURL=NotFound-XohZYy7w.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotFound-
|
|
1
|
+
{"version":3,"file":"NotFound-XohZYy7w.js","sources":["../../src/pages/NotFound.jsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport usePageTitle from '../hooks/usePageTitle';\nimport StagingBadge from '../components/StagingBadge';\nimport SiteHeader from '../components/SiteHeader';\n\nconst NotFound = () => {\n const { t } = useTranslation();\n usePageTitle('titles.notFound');\n return (\n <div className=\"min-h-screen bg-slate-50 text-slate-800 flex flex-col\">\n <StagingBadge />\n <SiteHeader variant=\"light\" showX={false} />\n <main className=\"flex-1 flex items-center justify-center px-6 py-10\">\n <div className=\"max-w-lg text-center space-y-4\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-slate-200 text-slate-600 font-bold text-xl\">\n 404\n </div>\n <h1 className=\"text-3xl font-bold\">{t('notFound.title')}</h1>\n <p className=\"text-slate-600\">{t('notFound.description')}</p>\n <div className=\"flex gap-3 justify-center\">\n <a href=\"/\" className=\"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100\">\n {t('notFound.backHome')}\n </a>\n <a href=\"/tools/\" className=\"px-4 py-2 rounded-lg border border-slate-300 text-slate-700 hover:bg-slate-100\">\n {t('landing.nav.tools')}\n </a>\n <a href=\"/app/\" className=\"px-4 py-2 rounded-lg bg-slate-900 text-white hover:bg-slate-800\">\n {t('notFound.openApp')}\n </a>\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default NotFound;\n"],"names":["NotFound","useTranslation","usePageTitle","jsxs","jsx","StagingBadge","SiteHeader"],"mappings":"iJAMA,MAAMA,EAAW,IAAM,CACrB,KAAM,CAAE,CAAA,EAAMC,EAAA,EACd,OAAAC,EAAa,iBAAiB,EAE5BC,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAa,EACdD,EAAAA,IAACE,EAAA,CAAW,QAAQ,QAAQ,MAAO,GAAO,QACzC,OAAA,CAAK,UAAU,qDACd,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,+GAA+G,SAAA,MAE9H,QACC,KAAA,CAAG,UAAU,qBAAsB,SAAA,EAAE,gBAAgB,EAAE,QACvD,IAAA,CAAE,UAAU,iBAAkB,SAAA,EAAE,sBAAsB,EAAE,EACzDD,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAC,EAAAA,IAAC,KAAE,KAAK,IAAI,UAAU,iFACnB,SAAA,EAAE,mBAAmB,EACxB,EACAA,EAAAA,IAAC,KAAE,KAAK,UAAU,UAAU,iFACzB,SAAA,EAAE,mBAAmB,EACxB,EACAA,MAAC,KAAE,KAAK,QAAQ,UAAU,kEACvB,SAAA,EAAE,kBAAkB,CAAA,CACvB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ"}
|