@inneranimalmedia/agentsam-sdk 2.6.11 → 2.6.12
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/apps/cad-creator/shared/cad/package.json +1 -1
- package/apps/client-cms-editor/backend/package.json +2 -2
- package/apps/client-cms-editor/frontend/package.json +3 -3
- package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
- package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
- package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
- package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
- package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
- package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
- package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
- package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
- package/apps/client-cms-editor/package.json +1 -1
- package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
- package/apps/client-cms-editor/shared/cms/package.json +1 -1
- package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
- package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
- package/docs/PRODUCT_LIFECYCLE.md +38 -38
- package/docs/REPO_FILE_MAP.txt +2 -2
- package/docs/THEME_REFINERY.md +6 -6
- package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
- package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
- package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
- package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
- package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
- package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
- package/docs/adr/README.md +25 -0
- package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
- package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +1 -1
- package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +3 -3
- package/docs/contracts/google-cloud-oauth-setup.md +1 -1
- package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
- package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
- package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
- package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +1 -1
- package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
- package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +68 -68
- package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
- package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +1 -1
- package/docs/prd/PRD-agentsam-analytics.md +174 -0
- package/docs/prd/PRD-agentsam-brand.md +181 -0
- package/docs/prd/PRD-agentsam-browser.md +177 -0
- package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
- package/docs/prd/PRD-agentsam-campaign.md +1178 -0
- package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
- package/docs/prd/PRD-agentsam-content-studio.md +179 -0
- package/docs/prd/PRD-agentsam-copro.md +39 -0
- package/docs/prd/PRD-agentsam-database-studio.md +175 -0
- package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
- package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
- package/docs/prd/PRD-agentsam-knowledge.md +174 -0
- package/docs/prd/PRD-agentsam-local-studio.md +180 -0
- package/docs/prd/PRD-agentsam-merch.md +177 -0
- package/docs/prd/PRD-agentsam-platform.md +179 -0
- package/docs/prd/PRD-agentsam-site-studio.md +180 -0
- package/docs/prd/PRD-agentsam-work.md +180 -0
- package/docs/prd/README.md +39 -0
- package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
- package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
- package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
- package/docs/product/OFFER-PORTFOLIO.md +158 -0
- package/docs/product/PACKAGE-TAXONOMY.md +78 -0
- package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
- package/examples/hyperspace-demo/dist/index.html +13 -0
- package/native/agentsam-machine/core/src/lib.rs +2 -2
- package/package.json +55 -35
- package/packages/agentsam-brand/package.json +3 -2
- package/packages/agentsam-brand/src/public.js +192 -0
- package/packages/agentsam-contracts/README.md +1 -1
- package/packages/agentsam-contracts/package.json +1 -1
- package/packages/agentsam-errors/package.json +1 -1
- package/packages/agentsam-goap/package.json +2 -2
- package/packages/agentsam-hooks/package.json +1 -1
- package/packages/agentsam-knowledge/package.json +1 -1
- package/packages/agentsam-merch/package.json +1 -1
- package/packages/agentsam-merch/test/merch.test.mjs +1 -1
- package/packages/agentsam-nav/dist/browser.global.js +34 -71
- package/packages/agentsam-nav/dist/browser.js +759 -3157
- package/packages/agentsam-nav/dist/index.js +751 -3149
- package/packages/agentsam-nav/package.json +1 -1
- package/packages/agentsam-queue-control/package.json +1 -1
- package/packages/agentsam-repository/package.json +1 -1
- package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
- package/packages/agentsam-vault/package.json +1 -1
- package/packages/agentsam-workbench/package.json +5 -4
- package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
- package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
- package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
- package/packages/connectors/cfoa/package.json +1 -1
- package/packages/heuristic-theme/package.json +1 -1
- package/packages/identity/package.json +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
- package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
- package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
- package/packages/providers/completeful/README.md +3 -3
- package/packages/providers/completeful/package.json +1 -1
- package/packages/theme-cypress/README.md +11 -0
- package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
- package/packages/theme-cypress/prebuild.json +23 -0
- package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
- package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-cypress/site/beliefs.html +175 -0
- package/packages/theme-cypress/site/community.html +175 -0
- package/packages/theme-cypress/site/connect.html +319 -0
- package/packages/theme-cypress/site/donate.html +106 -0
- package/packages/theme-cypress/site/groups.html +1352 -0
- package/packages/theme-cypress/site/help.html +1 -0
- package/packages/theme-cypress/site/icons/clock.svg +4 -0
- package/packages/theme-cypress/site/icons/email.svg +4 -0
- package/packages/theme-cypress/site/icons/giving.svg +4 -0
- package/packages/theme-cypress/site/icons/home.svg +4 -0
- package/packages/theme-cypress/site/icons/location.svg +4 -0
- package/packages/theme-cypress/site/icons/media.svg +4 -0
- package/packages/theme-cypress/site/icons/ministries.svg +6 -0
- package/packages/theme-cypress/site/icons/prayer.svg +5 -0
- package/packages/theme-cypress/site/icons/visit.svg +6 -0
- package/packages/theme-cypress/site/index.html +1013 -0
- package/packages/theme-cypress/site/mensgroup.html +477 -0
- package/packages/theme-cypress/site/mission.html +512 -0
- package/packages/theme-cypress/site/unified-footer.css +172 -0
- package/packages/theme-cypress/site/unified-footer.js +175 -0
- package/packages/theme-cypress/site/unified-header.css +226 -0
- package/packages/theme-cypress/site/unified-header.js +111 -0
- package/packages/theme-cypress/site/womansgroup.html +452 -0
- package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
- package/packages/theme-cypress/src/node.js +69 -0
- package/packages/theme-cypress/test/theme.test.mjs +47 -0
- package/packages/theme-ember/README.md +11 -0
- package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
- package/packages/theme-ember/prebuild.json +23 -0
- package/packages/theme-ember/site/about.html +1840 -0
- package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
- package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-ember/site/community.html +1664 -0
- package/packages/theme-ember/site/index.html +2044 -0
- package/packages/theme-ember/site/shop.html +2104 -0
- package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
- package/packages/theme-ember/src/node.js +69 -0
- package/packages/theme-ember/test/theme.test.mjs +47 -0
- package/packages/theme-forge/README.md +11 -0
- package/packages/theme-forge/package.json +44 -0
- package/packages/theme-forge/prebuild.json +23 -0
- package/packages/theme-forge/site/apple-touch-icon.png +0 -0
- package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
- package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
- package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
- package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
- package/packages/theme-forge/site/index.html +5 -0
- package/packages/theme-forge/site/manifest.webmanifest +1 -0
- package/packages/theme-forge/site/pwa-192x192.png +0 -0
- package/packages/theme-forge/site/pwa-512x512.png +0 -0
- package/packages/theme-forge/site/sw.js +107 -0
- package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
- package/packages/theme-forge/src/index.js +76 -0
- package/packages/theme-forge/src/node.js +69 -0
- package/packages/theme-forge/test/theme.test.mjs +47 -0
- package/packages/theme-grove/README.md +11 -0
- package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
- package/packages/theme-grove/prebuild.json +23 -0
- package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
- package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-grove/site/index.html +1429 -0
- package/packages/theme-grove/site/pages/contact.html +664 -0
- package/packages/theme-grove/site/pages/gallery.html +216 -0
- package/packages/theme-grove/site/pages/privacy.html +180 -0
- package/packages/theme-grove/site/pages/process.html +592 -0
- package/packages/theme-grove/site/pages/services.html +567 -0
- package/packages/theme-grove/site/pages/terms.html +189 -0
- package/packages/theme-grove/site/shared/footer.css +140 -0
- package/packages/theme-grove/site/shared/footer.html +41 -0
- package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
- package/packages/theme-grove/src/node.js +69 -0
- package/packages/theme-grove/test/theme.test.mjs +47 -0
- package/packages/theme-harbor/README.md +11 -0
- package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
- package/packages/theme-harbor/prebuild.json +23 -0
- package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
- package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
- package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
- package/packages/theme-harbor/site/index.html +15 -0
- package/packages/theme-harbor/src/index.js +76 -0
- package/packages/theme-harbor/src/node.js +69 -0
- package/packages/theme-harbor/test/theme.test.mjs +47 -0
- package/packages/theme-resolve/README.md +11 -0
- package/packages/theme-resolve/package.json +44 -0
- package/packages/theme-resolve/prebuild.json +23 -0
- package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
- package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
- package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
- package/packages/theme-resolve/site/index.html +22 -0
- package/packages/theme-resolve/src/index.js +69 -0
- package/packages/theme-resolve/src/node.js +69 -0
- package/packages/theme-resolve/test/theme.test.mjs +47 -0
- package/packages/theme-scenes/package.json +1 -1
- package/packages/theme-scenes/src/registry.js +32 -49
- package/packages/theme-summit/README.md +11 -0
- package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
- package/packages/theme-summit/prebuild.json +23 -0
- package/packages/theme-summit/site/adventures.html +450 -0
- package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
- package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
- package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
- package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-summit/site/business-card.html +315 -0
- package/packages/theme-summit/site/chatbot.js +312 -0
- package/packages/theme-summit/site/gallery.html +524 -0
- package/packages/theme-summit/site/i18n.js +947 -0
- package/packages/theme-summit/site/icons.svg +87 -0
- package/packages/theme-summit/site/index.html +2415 -0
- package/packages/theme-summit/site/pages/about.html +100 -0
- package/packages/theme-summit/site/pages/contact.html +117 -0
- package/packages/theme-summit/site/pages/dashboard.html +111 -0
- package/packages/theme-summit/site/pages/index.html +129 -0
- package/packages/theme-summit/site/pages/services.html +125 -0
- package/packages/theme-summit/site/shared/footer.html +41 -0
- package/packages/theme-summit/site/shared/layout.js +315 -0
- package/packages/theme-summit/site/shared/nav.html +19 -0
- package/packages/theme-summit/site/shared/styles.css +696 -0
- package/packages/theme-summit/site/theme-styles.css +131 -0
- package/packages/theme-summit/site/themes.js +442 -0
- package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
- package/packages/theme-summit/src/node.js +69 -0
- package/packages/theme-summit/test/theme.test.mjs +47 -0
- package/packages/theme-violet/README.md +11 -0
- package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
- package/packages/theme-violet/prebuild.json +23 -0
- package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
- package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-violet/site/global/cpas-contact.css +405 -0
- package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
- package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
- package/packages/theme-violet/site/global/cpas-footer.html +38 -0
- package/packages/theme-violet/site/global/cpas-header.html +30 -0
- package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
- package/packages/theme-violet/site/global/cpas-modals.js +802 -0
- package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
- package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
- package/packages/theme-violet/site/global/cpas-shell.js +107 -0
- package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
- package/packages/theme-violet/site/index.html +141 -0
- package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
- package/packages/theme-violet/site/pages/about/cta.html +25 -0
- package/packages/theme-violet/site/pages/about/hero.html +46 -0
- package/packages/theme-violet/site/pages/about/paths.html +24 -0
- package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
- package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
- package/packages/theme-violet/site/pages/home/hero.html +42 -0
- package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
- package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
- package/packages/theme-violet/site/pages/home/mission.html +36 -0
- package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
- package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
- package/packages/theme-violet/site/pages/index.html +141 -0
- package/packages/theme-violet/src/index.js +76 -0
- package/packages/theme-violet/src/node.js +69 -0
- package/packages/theme-violet/test/theme.test.mjs +47 -0
- package/packages/work-graph/package.json +1 -1
- package/protocol/features/README.md +1 -1
- package/protocol/features/catalog.json +12 -12
- package/protocol/features/examples/provider-resend.feature.json +2 -2
- package/protocol/presets/catalog.json +1 -1
- package/protocol/theme-refinery/prebuild-registry.json +45 -0
- package/protocol/theme-refinery/product-metadata.schema.json +63 -26
- package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
- package/src/plugins/completeful.js +2 -2
- package/packages/theme-church-site/README.md +0 -10
- package/packages/theme-church-site/src/harvest.json +0 -16
- package/packages/theme-church-site/test/theme.test.mjs +0 -21
- package/packages/theme-companions-site/README.md +0 -10
- package/packages/theme-companions-site/src/harvest.json +0 -14
- package/packages/theme-companions-site/src/index.js +0 -87
- package/packages/theme-companions-site/test/theme.test.mjs +0 -21
- package/packages/theme-floors-site/README.md +0 -10
- package/packages/theme-floors-site/src/harvest.json +0 -16
- package/packages/theme-floors-site/test/theme.test.mjs +0 -21
- package/packages/theme-fuelnfree-site/README.md +0 -10
- package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
- package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
- package/packages/theme-handyman-site/README.md +0 -10
- package/packages/theme-handyman-site/package.json +0 -41
- package/packages/theme-handyman-site/src/harvest.json +0 -12
- package/packages/theme-handyman-site/src/index.js +0 -88
- package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
- package/packages/theme-insurance-site/README.md +0 -10
- package/packages/theme-insurance-site/src/harvest.json +0 -12
- package/packages/theme-insurance-site/src/index.js +0 -88
- package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
- package/packages/theme-shinshu-site/README.md +0 -10
- package/packages/theme-shinshu-site/src/harvest.json +0 -14
- package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
- package/protocol/theme-refinery/lineage-registry.json +0 -105
- package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
- package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
|
@@ -0,0 +1,2415 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8"/>
|
|
6
|
+
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
|
7
|
+
<title>Summit Practice — Summit</title>
|
|
8
|
+
<meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." name="description"/>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&family=Roboto+Mono:wght@400;500;700&display=swap" rel="stylesheet"/>
|
|
10
|
+
<script src="i18n.js"></script>
|
|
11
|
+
<script src="chatbot.js"></script>
|
|
12
|
+
<script src="themes.js"></script>
|
|
13
|
+
<link href="theme-styles.css" rel="stylesheet"/>
|
|
14
|
+
<style>
|
|
15
|
+
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&family=Roboto+Mono:wght@400;500;700&display=swap');
|
|
16
|
+
|
|
17
|
+
* {
|
|
18
|
+
margin: 0;
|
|
19
|
+
padding: 0;
|
|
20
|
+
box-sizing: border-box;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:root {
|
|
24
|
+
--orange-primary: #FF8C42;
|
|
25
|
+
--orange-dark: #E67635;
|
|
26
|
+
--orange-light: #FFB67A;
|
|
27
|
+
--cream: #FFF8F0;
|
|
28
|
+
--cream-dark: #F5E6D3;
|
|
29
|
+
--text-dark: #1A1A1A;
|
|
30
|
+
--text-gray: #4A4A4A;
|
|
31
|
+
--white: #FFFFFF;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
body {
|
|
35
|
+
font-family: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
36
|
+
color: var(--text-dark);
|
|
37
|
+
background: var(--cream);
|
|
38
|
+
line-height: 1.6;
|
|
39
|
+
overflow-x: hidden;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h1,
|
|
43
|
+
h2,
|
|
44
|
+
h3,
|
|
45
|
+
h4,
|
|
46
|
+
h5,
|
|
47
|
+
h6,
|
|
48
|
+
.heading {
|
|
49
|
+
font-family: 'Roboto Mono', monospace;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Navigation */
|
|
53
|
+
nav {
|
|
54
|
+
position: fixed;
|
|
55
|
+
top: 0;
|
|
56
|
+
left: 0;
|
|
57
|
+
right: 0;
|
|
58
|
+
background: rgba(255, 248, 240, 0.95);
|
|
59
|
+
backdrop-filter: blur(10px);
|
|
60
|
+
z-index: 100;
|
|
61
|
+
border-bottom: 1px solid rgba(255, 140, 66, 0.1);
|
|
62
|
+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.nav-container {
|
|
66
|
+
max-width: 1400px;
|
|
67
|
+
margin: 0 auto;
|
|
68
|
+
padding: 1.5rem 3rem;
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
align-items: center;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.logo-section {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: 1rem;
|
|
78
|
+
cursor: pointer;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.logo-mountain {
|
|
82
|
+
width: 50px;
|
|
83
|
+
height: 50px;
|
|
84
|
+
background: linear-gradient(135deg, var(--orange-primary), var(--orange-dark));
|
|
85
|
+
border-radius: 8px;
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
justify-content: center;
|
|
89
|
+
font-size: 24px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.logo-text h1 {
|
|
93
|
+
font-family: 'Roboto Mono', monospace;
|
|
94
|
+
font-size: 1.5rem;
|
|
95
|
+
font-weight: 700;
|
|
96
|
+
color: var(--text-dark);
|
|
97
|
+
letter-spacing: 1px;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.logo-text p {
|
|
101
|
+
font-size: 0.75rem;
|
|
102
|
+
color: var(--text-gray);
|
|
103
|
+
text-transform: uppercase;
|
|
104
|
+
letter-spacing: 2px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.nav-links {
|
|
108
|
+
display: flex;
|
|
109
|
+
gap: 2.5rem;
|
|
110
|
+
align-items: center;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.nav-links a {
|
|
114
|
+
color: var(--text-dark);
|
|
115
|
+
text-decoration: none;
|
|
116
|
+
font-weight: 500;
|
|
117
|
+
font-size: 0.95rem;
|
|
118
|
+
position: relative;
|
|
119
|
+
transition: color 0.3s ease;
|
|
120
|
+
cursor: pointer;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.nav-links a:hover {
|
|
124
|
+
color: var(--orange-primary);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.nav-links a.active::after {
|
|
128
|
+
content: '';
|
|
129
|
+
position: absolute;
|
|
130
|
+
bottom: -5px;
|
|
131
|
+
left: 0;
|
|
132
|
+
right: 0;
|
|
133
|
+
height: 2px;
|
|
134
|
+
background: var(--orange-primary);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.btn-primary {
|
|
138
|
+
background: var(--orange-primary);
|
|
139
|
+
color: white;
|
|
140
|
+
padding: 0.75rem 1.75rem;
|
|
141
|
+
border-radius: 8px;
|
|
142
|
+
border: none;
|
|
143
|
+
cursor: pointer;
|
|
144
|
+
font-weight: 600;
|
|
145
|
+
transition: all 0.3s ease;
|
|
146
|
+
text-decoration: none;
|
|
147
|
+
display: inline-block;
|
|
148
|
+
font-family: 'Roboto', sans-serif;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.btn-primary:hover {
|
|
152
|
+
background: var(--orange-dark);
|
|
153
|
+
transform: translateY(-2px);
|
|
154
|
+
box-shadow: 0 4px 12px rgba(255, 140, 66, 0.3);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Page Container */
|
|
158
|
+
.page {
|
|
159
|
+
display: none;
|
|
160
|
+
min-height: 100vh;
|
|
161
|
+
padding-top: 100px;
|
|
162
|
+
position: relative;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.page.active {
|
|
166
|
+
display: block;
|
|
167
|
+
animation: fadeIn 0.5s ease-in;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@keyframes fadeIn {
|
|
171
|
+
from {
|
|
172
|
+
opacity: 0;
|
|
173
|
+
transform: translateY(20px);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
to {
|
|
177
|
+
opacity: 1;
|
|
178
|
+
transform: translateY(0);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.container {
|
|
183
|
+
max-width: 1400px;
|
|
184
|
+
margin: 0 auto;
|
|
185
|
+
padding: 0 3rem;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Hero Section */
|
|
189
|
+
.hero {
|
|
190
|
+
padding: 6rem 0 4rem;
|
|
191
|
+
position: relative;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.hero-content {
|
|
195
|
+
display: grid;
|
|
196
|
+
grid-template-columns: 1.2fr 1fr;
|
|
197
|
+
gap: 4rem;
|
|
198
|
+
align-items: center;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.hero-text h1 {
|
|
202
|
+
font-family: 'Roboto Mono', monospace;
|
|
203
|
+
font-size: 4rem;
|
|
204
|
+
font-weight: 700;
|
|
205
|
+
line-height: 1.1;
|
|
206
|
+
margin-bottom: 1.5rem;
|
|
207
|
+
color: var(--text-dark);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.hero-text .highlight {
|
|
211
|
+
color: var(--orange-primary);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.hero-text p {
|
|
215
|
+
font-size: 1.25rem;
|
|
216
|
+
color: var(--text-gray);
|
|
217
|
+
margin-bottom: 2rem;
|
|
218
|
+
line-height: 1.8;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.hero-stats {
|
|
222
|
+
display: grid;
|
|
223
|
+
grid-template-columns: repeat(3, 1fr);
|
|
224
|
+
gap: 2rem;
|
|
225
|
+
margin-top: 3rem;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.stat {
|
|
229
|
+
text-align: center;
|
|
230
|
+
padding: 1.5rem;
|
|
231
|
+
background: white;
|
|
232
|
+
border-radius: 12px;
|
|
233
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.stat-number {
|
|
237
|
+
font-family: 'Roboto Mono', monospace;
|
|
238
|
+
font-size: 2.5rem;
|
|
239
|
+
font-weight: 700;
|
|
240
|
+
color: var(--orange-primary);
|
|
241
|
+
display: block;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.stat-label {
|
|
245
|
+
font-size: 0.9rem;
|
|
246
|
+
color: var(--text-gray);
|
|
247
|
+
margin-top: 0.5rem;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.hero-visual {
|
|
251
|
+
position: relative;
|
|
252
|
+
border-radius: 16px;
|
|
253
|
+
overflow: hidden;
|
|
254
|
+
background: linear-gradient(135deg, #FFE5D9 0%, #FFF8F0 100%);
|
|
255
|
+
min-height: 400px;
|
|
256
|
+
display: flex;
|
|
257
|
+
align-items: center;
|
|
258
|
+
justify-content: center;
|
|
259
|
+
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
|
|
260
|
+
background-image: url('/assets/generated/media-9d4521abba.webp');
|
|
261
|
+
background-size: cover;
|
|
262
|
+
background-position: center;
|
|
263
|
+
background-blend-mode: overlay;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.hero-visual::before {
|
|
267
|
+
content: '';
|
|
268
|
+
position: absolute;
|
|
269
|
+
top: 0;
|
|
270
|
+
left: 0;
|
|
271
|
+
right: 0;
|
|
272
|
+
bottom: 0;
|
|
273
|
+
background: linear-gradient(135deg, rgba(255, 229, 217, 0.7) 0%, rgba(255, 248, 240, 0.8) 100%);
|
|
274
|
+
z-index: 1;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.mountain-illustration {
|
|
278
|
+
width: 100%;
|
|
279
|
+
height: 100%;
|
|
280
|
+
position: relative;
|
|
281
|
+
z-index: 2;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* Section Styles */
|
|
285
|
+
.section {
|
|
286
|
+
padding: 5rem 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.section-header {
|
|
290
|
+
text-align: center;
|
|
291
|
+
margin-bottom: 4rem;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.section-title {
|
|
295
|
+
font-family: 'Roboto Mono', monospace;
|
|
296
|
+
font-size: 3rem;
|
|
297
|
+
font-weight: 700;
|
|
298
|
+
margin-bottom: 1rem;
|
|
299
|
+
color: var(--text-dark);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.section-subtitle {
|
|
303
|
+
font-size: 1.1rem;
|
|
304
|
+
color: var(--text-gray);
|
|
305
|
+
max-width: 600px;
|
|
306
|
+
margin: 0 auto;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* Services Grid */
|
|
310
|
+
.services-grid {
|
|
311
|
+
display: grid;
|
|
312
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
313
|
+
gap: 2rem;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* Service Area Showcase */
|
|
317
|
+
.area-showcase {
|
|
318
|
+
margin-top: 4rem;
|
|
319
|
+
padding: 4rem 0;
|
|
320
|
+
background: linear-gradient(135deg, #FFF8F0 0%, #F5E6D3 100%);
|
|
321
|
+
border-radius: 24px;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.area-grid {
|
|
325
|
+
display: grid;
|
|
326
|
+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
327
|
+
gap: 2rem;
|
|
328
|
+
margin-top: 2rem;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.area-card {
|
|
332
|
+
background: white;
|
|
333
|
+
border-radius: 16px;
|
|
334
|
+
overflow: hidden;
|
|
335
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
336
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
337
|
+
cursor: pointer;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.area-card:hover {
|
|
341
|
+
transform: translateY(-8px);
|
|
342
|
+
box-shadow: 0 12px 40px rgba(255, 140, 66, 0.2);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.area-image {
|
|
346
|
+
width: 100%;
|
|
347
|
+
height: 200px;
|
|
348
|
+
object-fit: cover;
|
|
349
|
+
background: linear-gradient(135deg, var(--orange-light), var(--orange-primary));
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.area-content {
|
|
353
|
+
padding: 1.5rem;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.area-content h4 {
|
|
357
|
+
font-family: 'Roboto Mono', monospace;
|
|
358
|
+
font-size: 1.3rem;
|
|
359
|
+
font-weight: 700;
|
|
360
|
+
margin-bottom: 0.5rem;
|
|
361
|
+
color: var(--text-dark);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.area-content p {
|
|
365
|
+
color: var(--text-gray);
|
|
366
|
+
font-size: 0.95rem;
|
|
367
|
+
line-height: 1.6;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.service-card {
|
|
371
|
+
background: white;
|
|
372
|
+
padding: 2.5rem;
|
|
373
|
+
border-radius: 16px;
|
|
374
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
375
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
376
|
+
cursor: pointer;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.service-card:hover {
|
|
380
|
+
transform: translateY(-8px);
|
|
381
|
+
box-shadow: 0 12px 40px rgba(255, 140, 66, 0.2);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.service-icon {
|
|
385
|
+
width: 60px;
|
|
386
|
+
height: 60px;
|
|
387
|
+
background: linear-gradient(135deg, var(--orange-light), var(--orange-primary));
|
|
388
|
+
border-radius: 12px;
|
|
389
|
+
display: flex;
|
|
390
|
+
align-items: center;
|
|
391
|
+
justify-content: center;
|
|
392
|
+
margin-bottom: 1.5rem;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.service-icon svg {
|
|
396
|
+
width: 32px;
|
|
397
|
+
height: 32px;
|
|
398
|
+
stroke: white;
|
|
399
|
+
fill: none;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.icon {
|
|
403
|
+
width: 24px;
|
|
404
|
+
height: 24px;
|
|
405
|
+
stroke: currentColor;
|
|
406
|
+
fill: none;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.service-card h3 {
|
|
410
|
+
font-family: 'Roboto Mono', monospace;
|
|
411
|
+
font-size: 1.5rem;
|
|
412
|
+
font-weight: 700;
|
|
413
|
+
margin-bottom: 1rem;
|
|
414
|
+
color: var(--text-dark);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.service-card p {
|
|
418
|
+
color: var(--text-gray);
|
|
419
|
+
line-height: 1.7;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.service-features {
|
|
423
|
+
list-style: none;
|
|
424
|
+
margin-top: 1.5rem;
|
|
425
|
+
display: grid;
|
|
426
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
427
|
+
gap: 0.75rem;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.service-features li {
|
|
431
|
+
display: flex;
|
|
432
|
+
align-items: center;
|
|
433
|
+
gap: 0.5rem;
|
|
434
|
+
font-size: 0.95rem;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.service-features li::before {
|
|
438
|
+
content: '✓';
|
|
439
|
+
color: var(--orange-primary);
|
|
440
|
+
font-weight: bold;
|
|
441
|
+
font-size: 1.2rem;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/* About Section */
|
|
445
|
+
.about-content {
|
|
446
|
+
display: grid;
|
|
447
|
+
grid-template-columns: 1fr 1fr;
|
|
448
|
+
gap: 4rem;
|
|
449
|
+
align-items: start;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* Profile Hero Section */
|
|
453
|
+
.profile-hero {
|
|
454
|
+
background: linear-gradient(135deg, #FFF8F0 0%, #F5E6D3 100%);
|
|
455
|
+
border-radius: 24px;
|
|
456
|
+
padding: 3rem;
|
|
457
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.profile-hero-content {
|
|
461
|
+
display: grid;
|
|
462
|
+
grid-template-columns: 300px 1fr;
|
|
463
|
+
gap: 3rem;
|
|
464
|
+
align-items: center;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.profile-image-container {
|
|
468
|
+
position: relative;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.profile-image {
|
|
472
|
+
width: 100%;
|
|
473
|
+
height: auto;
|
|
474
|
+
aspect-ratio: 9/16;
|
|
475
|
+
object-fit: cover;
|
|
476
|
+
border-radius: 16px;
|
|
477
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2);
|
|
478
|
+
border: 4px solid white;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.profile-badge {
|
|
482
|
+
position: absolute;
|
|
483
|
+
bottom: 1rem;
|
|
484
|
+
left: 50%;
|
|
485
|
+
transform: translateX(-50%);
|
|
486
|
+
background: rgba(0, 0, 0, 0.7);
|
|
487
|
+
backdrop-filter: blur(10px);
|
|
488
|
+
color: white;
|
|
489
|
+
padding: 0.75rem 1.5rem;
|
|
490
|
+
border-radius: 50px;
|
|
491
|
+
display: flex;
|
|
492
|
+
align-items: center;
|
|
493
|
+
gap: 0.5rem;
|
|
494
|
+
font-size: 0.9rem;
|
|
495
|
+
font-weight: 600;
|
|
496
|
+
white-space: nowrap;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.profile-info {
|
|
500
|
+
padding: 1rem 0;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.social-link:hover {
|
|
504
|
+
transform: translateY(-2px);
|
|
505
|
+
box-shadow: 0 8px 20px rgba(255, 140, 66, 0.4);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/* Portfolio Gallery */
|
|
509
|
+
.portfolio-section {
|
|
510
|
+
margin-top: 6rem;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.portfolio-grid {
|
|
514
|
+
display: grid;
|
|
515
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
516
|
+
gap: 2rem;
|
|
517
|
+
margin-top: 2rem;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.portfolio-item {
|
|
521
|
+
position: relative;
|
|
522
|
+
border-radius: 16px;
|
|
523
|
+
overflow: hidden;
|
|
524
|
+
aspect-ratio: 4/3;
|
|
525
|
+
cursor: pointer;
|
|
526
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
|
|
527
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.portfolio-item:hover {
|
|
531
|
+
transform: translateY(-8px);
|
|
532
|
+
box-shadow: 0 12px 40px rgba(255, 140, 66, 0.3);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.portfolio-image {
|
|
536
|
+
width: 100%;
|
|
537
|
+
height: 100%;
|
|
538
|
+
object-fit: cover;
|
|
539
|
+
transition: transform 0.5s ease;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.portfolio-item:hover .portfolio-image {
|
|
543
|
+
transform: scale(1.1);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.portfolio-overlay {
|
|
547
|
+
position: absolute;
|
|
548
|
+
bottom: 0;
|
|
549
|
+
left: 0;
|
|
550
|
+
right: 0;
|
|
551
|
+
background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
|
|
552
|
+
padding: 2rem 1.5rem 1.5rem;
|
|
553
|
+
transform: translateY(100%);
|
|
554
|
+
transition: transform 0.3s ease;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.portfolio-item:hover .portfolio-overlay {
|
|
558
|
+
transform: translateY(0);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
.portfolio-caption {
|
|
562
|
+
color: white;
|
|
563
|
+
font-size: 1.1rem;
|
|
564
|
+
font-weight: 600;
|
|
565
|
+
margin: 0;
|
|
566
|
+
font-family: 'Roboto Mono', monospace;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
@media (max-width: 768px) {
|
|
570
|
+
.profile-hero-content {
|
|
571
|
+
grid-template-columns: 1fr;
|
|
572
|
+
text-align: center;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
.profile-image-container {
|
|
576
|
+
max-width: 250px;
|
|
577
|
+
margin: 0 auto;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.portfolio-grid {
|
|
581
|
+
grid-template-columns: 1fr;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
.about-text p {
|
|
586
|
+
margin-bottom: 1.5rem;
|
|
587
|
+
line-height: 1.8;
|
|
588
|
+
color: var(--text-gray);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
.credentials {
|
|
592
|
+
background: white;
|
|
593
|
+
padding: 2rem;
|
|
594
|
+
border-radius: 12px;
|
|
595
|
+
border-left: 4px solid var(--orange-primary);
|
|
596
|
+
margin-bottom: 2rem;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.credentials h4 {
|
|
600
|
+
font-family: 'Roboto Mono', monospace;
|
|
601
|
+
font-size: 1.3rem;
|
|
602
|
+
margin-bottom: 1rem;
|
|
603
|
+
color: var(--text-dark);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.credentials ul {
|
|
607
|
+
list-style: none;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
.credentials li {
|
|
611
|
+
padding: 0.75rem 0;
|
|
612
|
+
border-bottom: 1px solid var(--cream-dark);
|
|
613
|
+
display: flex;
|
|
614
|
+
align-items: start;
|
|
615
|
+
gap: 0.75rem;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
.credentials li:last-child {
|
|
619
|
+
border-bottom: none;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
.credentials li::before {
|
|
623
|
+
content: '✓';
|
|
624
|
+
color: var(--orange-primary);
|
|
625
|
+
font-weight: bold;
|
|
626
|
+
font-size: 1.2rem;
|
|
627
|
+
flex-shrink: 0;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/* Contact Section */
|
|
631
|
+
.contact-content {
|
|
632
|
+
display: grid;
|
|
633
|
+
grid-template-columns: 1fr 1fr;
|
|
634
|
+
gap: 4rem;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.contact-info {
|
|
638
|
+
background: white;
|
|
639
|
+
padding: 3rem;
|
|
640
|
+
border-radius: 16px;
|
|
641
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.contact-item {
|
|
645
|
+
display: flex;
|
|
646
|
+
gap: 1.5rem;
|
|
647
|
+
margin-bottom: 2rem;
|
|
648
|
+
padding-bottom: 2rem;
|
|
649
|
+
border-bottom: 1px solid var(--cream-dark);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.contact-item:last-child {
|
|
653
|
+
border-bottom: none;
|
|
654
|
+
margin-bottom: 0;
|
|
655
|
+
padding-bottom: 0;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.contact-icon {
|
|
659
|
+
width: 50px;
|
|
660
|
+
height: 50px;
|
|
661
|
+
background: var(--cream);
|
|
662
|
+
border-radius: 10px;
|
|
663
|
+
display: flex;
|
|
664
|
+
align-items: center;
|
|
665
|
+
justify-content: center;
|
|
666
|
+
flex-shrink: 0;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.contact-icon svg {
|
|
670
|
+
width: 24px;
|
|
671
|
+
height: 24px;
|
|
672
|
+
stroke: var(--orange-primary);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/* Language Switcher */
|
|
676
|
+
.language-switcher {
|
|
677
|
+
position: relative;
|
|
678
|
+
display: inline-block;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
.language-btn {
|
|
682
|
+
background: transparent;
|
|
683
|
+
border: 2px solid var(--orange-primary);
|
|
684
|
+
color: var(--orange-primary);
|
|
685
|
+
padding: 0.5rem 1rem;
|
|
686
|
+
border-radius: 8px;
|
|
687
|
+
cursor: pointer;
|
|
688
|
+
display: flex;
|
|
689
|
+
align-items: center;
|
|
690
|
+
gap: 0.5rem;
|
|
691
|
+
font-weight: 500;
|
|
692
|
+
transition: all 0.3s ease;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
.language-btn:hover {
|
|
696
|
+
background: var(--orange-primary);
|
|
697
|
+
color: white;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.language-dropdown {
|
|
701
|
+
position: absolute;
|
|
702
|
+
top: 100%;
|
|
703
|
+
right: 0;
|
|
704
|
+
margin-top: 0.5rem;
|
|
705
|
+
background: white;
|
|
706
|
+
border-radius: 8px;
|
|
707
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
708
|
+
min-width: 150px;
|
|
709
|
+
display: none;
|
|
710
|
+
z-index: 1000;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
.language-dropdown.open {
|
|
714
|
+
display: block;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
.language-option {
|
|
718
|
+
padding: 0.75rem 1rem;
|
|
719
|
+
cursor: pointer;
|
|
720
|
+
transition: background 0.2s;
|
|
721
|
+
display: flex;
|
|
722
|
+
align-items: center;
|
|
723
|
+
gap: 0.5rem;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.language-option:hover {
|
|
727
|
+
background: var(--cream);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
.language-option.active {
|
|
731
|
+
background: var(--orange-primary);
|
|
732
|
+
color: white;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/* Chatbot Styles */
|
|
736
|
+
.chatbot-container {
|
|
737
|
+
position: fixed;
|
|
738
|
+
bottom: 2rem;
|
|
739
|
+
right: 2rem;
|
|
740
|
+
z-index: 1000;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.chatbot-toggle {
|
|
744
|
+
width: 60px;
|
|
745
|
+
height: 60px;
|
|
746
|
+
background: var(--orange-primary);
|
|
747
|
+
border-radius: 50%;
|
|
748
|
+
display: flex;
|
|
749
|
+
align-items: center;
|
|
750
|
+
justify-content: center;
|
|
751
|
+
cursor: pointer;
|
|
752
|
+
box-shadow: 0 4px 20px rgba(255, 140, 66, 0.4);
|
|
753
|
+
transition: transform 0.3s ease;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.chatbot-toggle:hover {
|
|
757
|
+
transform: scale(1.1);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.chatbot-toggle svg {
|
|
761
|
+
width: 28px;
|
|
762
|
+
height: 28px;
|
|
763
|
+
stroke: white;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
.chatbot-window {
|
|
767
|
+
position: absolute;
|
|
768
|
+
bottom: 80px;
|
|
769
|
+
right: 0;
|
|
770
|
+
width: 400px;
|
|
771
|
+
max-width: calc(100vw - 2rem);
|
|
772
|
+
height: 600px;
|
|
773
|
+
max-height: calc(100vh - 120px);
|
|
774
|
+
background: white;
|
|
775
|
+
border-radius: 16px;
|
|
776
|
+
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.2);
|
|
777
|
+
display: none;
|
|
778
|
+
flex-direction: column;
|
|
779
|
+
overflow: hidden;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
.chatbot-window.open {
|
|
783
|
+
display: flex;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
.chatbot-header {
|
|
787
|
+
padding: 1.5rem;
|
|
788
|
+
background: var(--orange-primary);
|
|
789
|
+
color: white;
|
|
790
|
+
display: flex;
|
|
791
|
+
justify-content: space-between;
|
|
792
|
+
align-items: center;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
.chatbot-title {
|
|
796
|
+
display: flex;
|
|
797
|
+
align-items: center;
|
|
798
|
+
gap: 0.75rem;
|
|
799
|
+
font-weight: 600;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
.chatbot-title svg {
|
|
803
|
+
width: 24px;
|
|
804
|
+
height: 24px;
|
|
805
|
+
stroke: white;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.chatbot-close {
|
|
809
|
+
background: transparent;
|
|
810
|
+
border: none;
|
|
811
|
+
color: white;
|
|
812
|
+
cursor: pointer;
|
|
813
|
+
padding: 0.5rem;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.chatbot-close svg {
|
|
817
|
+
width: 20px;
|
|
818
|
+
height: 20px;
|
|
819
|
+
stroke: white;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.chatbot-messages {
|
|
823
|
+
flex: 1;
|
|
824
|
+
overflow-y: auto;
|
|
825
|
+
padding: 1.5rem;
|
|
826
|
+
display: flex;
|
|
827
|
+
flex-direction: column;
|
|
828
|
+
gap: 1rem;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
.chatbot-message {
|
|
832
|
+
display: flex;
|
|
833
|
+
max-width: 80%;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.chatbot-message.user {
|
|
837
|
+
align-self: flex-end;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
.chatbot-message.bot {
|
|
841
|
+
align-self: flex-start;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
.message-content {
|
|
845
|
+
padding: 0.75rem 1rem;
|
|
846
|
+
border-radius: 12px;
|
|
847
|
+
line-height: 1.5;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
.chatbot-message.user .message-content {
|
|
851
|
+
background: var(--orange-primary);
|
|
852
|
+
color: white;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.chatbot-message.bot .message-content {
|
|
856
|
+
background: var(--cream);
|
|
857
|
+
color: var(--text-dark);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
.chatbot-suggestions {
|
|
861
|
+
padding: 1rem;
|
|
862
|
+
display: flex;
|
|
863
|
+
flex-wrap: wrap;
|
|
864
|
+
gap: 0.5rem;
|
|
865
|
+
border-top: 1px solid var(--cream-dark);
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.suggestion-btn {
|
|
869
|
+
padding: 0.5rem 1rem;
|
|
870
|
+
background: var(--cream);
|
|
871
|
+
border: 1px solid var(--cream-dark);
|
|
872
|
+
border-radius: 20px;
|
|
873
|
+
cursor: pointer;
|
|
874
|
+
font-size: 0.85rem;
|
|
875
|
+
transition: all 0.2s;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.suggestion-btn:hover {
|
|
879
|
+
background: var(--orange-primary);
|
|
880
|
+
color: white;
|
|
881
|
+
border-color: var(--orange-primary);
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
.chatbot-input-container {
|
|
885
|
+
padding: 1rem;
|
|
886
|
+
border-top: 1px solid var(--cream-dark);
|
|
887
|
+
display: flex;
|
|
888
|
+
gap: 0.5rem;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.chatbot-input {
|
|
892
|
+
flex: 1;
|
|
893
|
+
padding: 0.75rem;
|
|
894
|
+
border: 2px solid var(--cream-dark);
|
|
895
|
+
border-radius: 8px;
|
|
896
|
+
font-family: 'Roboto', sans-serif;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
.chatbot-input:focus {
|
|
900
|
+
outline: none;
|
|
901
|
+
border-color: var(--orange-primary);
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
.chatbot-send {
|
|
905
|
+
padding: 0.75rem 1rem;
|
|
906
|
+
background: var(--orange-primary);
|
|
907
|
+
color: white;
|
|
908
|
+
border: none;
|
|
909
|
+
border-radius: 8px;
|
|
910
|
+
cursor: pointer;
|
|
911
|
+
display: flex;
|
|
912
|
+
align-items: center;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
.chatbot-send svg {
|
|
916
|
+
width: 20px;
|
|
917
|
+
height: 20px;
|
|
918
|
+
stroke: white;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.typing-indicator {
|
|
922
|
+
display: inline-flex;
|
|
923
|
+
gap: 4px;
|
|
924
|
+
margin-right: 8px;
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
.typing-indicator span {
|
|
928
|
+
width: 6px;
|
|
929
|
+
height: 6px;
|
|
930
|
+
background: var(--text-gray);
|
|
931
|
+
border-radius: 50%;
|
|
932
|
+
animation: typing 1.4s infinite;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
.typing-indicator span:nth-child(2) {
|
|
936
|
+
animation-delay: 0.2s;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
.typing-indicator span:nth-child(3) {
|
|
940
|
+
animation-delay: 0.4s;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
@keyframes typing {
|
|
944
|
+
|
|
945
|
+
0%,
|
|
946
|
+
60%,
|
|
947
|
+
100% {
|
|
948
|
+
transform: translateY(0);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
30% {
|
|
952
|
+
transform: translateY(-10px);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
@media (max-width: 768px) {
|
|
957
|
+
.chatbot-window {
|
|
958
|
+
width: calc(100vw - 1rem);
|
|
959
|
+
height: calc(100vh - 100px);
|
|
960
|
+
bottom: 80px;
|
|
961
|
+
right: 0.5rem;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
.contact-details h4 {
|
|
966
|
+
font-weight: 600;
|
|
967
|
+
margin-bottom: 0.5rem;
|
|
968
|
+
color: var(--text-dark);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.contact-details p {
|
|
972
|
+
color: var(--text-gray);
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
.contact-form {
|
|
976
|
+
background: white;
|
|
977
|
+
padding: 3rem;
|
|
978
|
+
border-radius: 16px;
|
|
979
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
.form-group {
|
|
983
|
+
margin-bottom: 1.5rem;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.form-group label {
|
|
987
|
+
display: block;
|
|
988
|
+
margin-bottom: 0.5rem;
|
|
989
|
+
font-weight: 500;
|
|
990
|
+
color: var(--text-dark);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
.form-group input,
|
|
994
|
+
.form-group textarea {
|
|
995
|
+
width: 100%;
|
|
996
|
+
padding: 0.75rem 1rem;
|
|
997
|
+
border: 2px solid var(--cream-dark);
|
|
998
|
+
border-radius: 8px;
|
|
999
|
+
font-family: 'Roboto', sans-serif;
|
|
1000
|
+
font-size: 1rem;
|
|
1001
|
+
transition: border-color 0.3s ease;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
.form-group input:focus,
|
|
1005
|
+
.form-group textarea:focus {
|
|
1006
|
+
outline: none;
|
|
1007
|
+
border-color: var(--orange-primary);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
.form-group textarea {
|
|
1011
|
+
min-height: 150px;
|
|
1012
|
+
resize: vertical;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/* Dashboard */
|
|
1016
|
+
.dashboard-header {
|
|
1017
|
+
background: white;
|
|
1018
|
+
padding: 2rem;
|
|
1019
|
+
border-radius: 12px;
|
|
1020
|
+
margin-bottom: 2rem;
|
|
1021
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
.dashboard-grid {
|
|
1025
|
+
display: grid;
|
|
1026
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
1027
|
+
gap: 2rem;
|
|
1028
|
+
margin-bottom: 2rem;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.dashboard-card {
|
|
1032
|
+
background: white;
|
|
1033
|
+
padding: 2rem;
|
|
1034
|
+
border-radius: 12px;
|
|
1035
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
.dashboard-card h3 {
|
|
1039
|
+
font-family: 'Roboto Mono', monospace;
|
|
1040
|
+
font-size: 1.5rem;
|
|
1041
|
+
margin-bottom: 1rem;
|
|
1042
|
+
color: var(--text-dark);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
.dashboard-number {
|
|
1046
|
+
font-family: 'Roboto Mono', monospace;
|
|
1047
|
+
font-size: 3rem;
|
|
1048
|
+
font-weight: bold;
|
|
1049
|
+
color: var(--orange-primary);
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
.data-table {
|
|
1053
|
+
width: 100%;
|
|
1054
|
+
background: white;
|
|
1055
|
+
border-radius: 12px;
|
|
1056
|
+
overflow: hidden;
|
|
1057
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
1058
|
+
margin-bottom: 2rem;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
.data-table h3 {
|
|
1062
|
+
padding: 1.5rem;
|
|
1063
|
+
font-size: 1.5rem;
|
|
1064
|
+
font-family: 'Roboto Mono', monospace;
|
|
1065
|
+
background: var(--cream);
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
.data-table table {
|
|
1069
|
+
width: 100%;
|
|
1070
|
+
border-collapse: collapse;
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
.data-table th {
|
|
1074
|
+
background: var(--cream);
|
|
1075
|
+
padding: 1rem;
|
|
1076
|
+
text-align: left;
|
|
1077
|
+
font-weight: 600;
|
|
1078
|
+
color: var(--text-dark);
|
|
1079
|
+
border-bottom: 2px solid var(--cream-dark);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
.data-table td {
|
|
1083
|
+
padding: 1rem;
|
|
1084
|
+
border-bottom: 1px solid var(--cream-dark);
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
.data-table tr:hover {
|
|
1088
|
+
background: var(--cream);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
.badge {
|
|
1092
|
+
display: inline-block;
|
|
1093
|
+
padding: 0.25rem 0.75rem;
|
|
1094
|
+
border-radius: 20px;
|
|
1095
|
+
font-size: 0.85rem;
|
|
1096
|
+
font-weight: 500;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
.badge-success {
|
|
1100
|
+
background: #E8F5E9;
|
|
1101
|
+
color: #2E7D32;
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
.badge-warning {
|
|
1105
|
+
background: #FFF3E0;
|
|
1106
|
+
color: #E65100;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
.badge-info {
|
|
1110
|
+
background: #E3F2FD;
|
|
1111
|
+
color: #1565C0;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
.spinner {
|
|
1115
|
+
border: 3px solid var(--cream-dark);
|
|
1116
|
+
border-top: 3px solid var(--orange-primary);
|
|
1117
|
+
border-radius: 50%;
|
|
1118
|
+
width: 40px;
|
|
1119
|
+
height: 40px;
|
|
1120
|
+
animation: spin 1s linear infinite;
|
|
1121
|
+
margin: 2rem auto;
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
@keyframes spin {
|
|
1125
|
+
0% {
|
|
1126
|
+
transform: rotate(0deg);
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
100% {
|
|
1130
|
+
transform: rotate(360deg);
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
.alert {
|
|
1135
|
+
background: var(--cream);
|
|
1136
|
+
padding: 2rem;
|
|
1137
|
+
border-radius: 12px;
|
|
1138
|
+
border-left: 4px solid var(--orange-primary);
|
|
1139
|
+
margin: 2rem 0;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
/* Footer */
|
|
1143
|
+
footer {
|
|
1144
|
+
background: var(--text-dark);
|
|
1145
|
+
color: white;
|
|
1146
|
+
padding: 3rem 0 1.5rem;
|
|
1147
|
+
margin-top: 5rem;
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
.footer-content {
|
|
1151
|
+
display: grid;
|
|
1152
|
+
grid-template-columns: 2fr 1fr 1fr;
|
|
1153
|
+
gap: 3rem;
|
|
1154
|
+
margin-bottom: 2rem;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
.footer-brand h3 {
|
|
1158
|
+
font-family: 'Roboto Mono', monospace;
|
|
1159
|
+
font-size: 1.5rem;
|
|
1160
|
+
margin-bottom: 1rem;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
.footer-brand p {
|
|
1164
|
+
color: rgba(255, 255, 255, 0.7);
|
|
1165
|
+
line-height: 1.7;
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
.footer-links h4 {
|
|
1169
|
+
font-size: 1.1rem;
|
|
1170
|
+
margin-bottom: 1rem;
|
|
1171
|
+
font-weight: 600;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
.footer-links ul {
|
|
1175
|
+
list-style: none;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
.footer-links li {
|
|
1179
|
+
margin-bottom: 0.75rem;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.footer-links a {
|
|
1183
|
+
color: rgba(255, 255, 255, 0.7);
|
|
1184
|
+
text-decoration: none;
|
|
1185
|
+
transition: color 0.3s ease;
|
|
1186
|
+
cursor: pointer;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
.footer-links a:hover {
|
|
1190
|
+
color: var(--orange-primary);
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
.footer-bottom {
|
|
1194
|
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
|
1195
|
+
padding-top: 1.5rem;
|
|
1196
|
+
text-align: center;
|
|
1197
|
+
color: rgba(255, 255, 255, 0.5);
|
|
1198
|
+
font-size: 0.9rem;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
/* Mobile Responsive */
|
|
1202
|
+
@media (max-width: 768px) {
|
|
1203
|
+
.nav-container {
|
|
1204
|
+
padding: 1rem 1.5rem;
|
|
1205
|
+
flex-direction: column;
|
|
1206
|
+
gap: 1rem;
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
.nav-links {
|
|
1210
|
+
gap: 1rem;
|
|
1211
|
+
font-size: 0.85rem;
|
|
1212
|
+
flex-wrap: wrap;
|
|
1213
|
+
justify-content: center;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
.container {
|
|
1217
|
+
padding: 0 1.5rem;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
.hero-content,
|
|
1221
|
+
.about-content,
|
|
1222
|
+
.contact-content {
|
|
1223
|
+
grid-template-columns: 1fr;
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
.hero-text h1 {
|
|
1227
|
+
font-size: 2.5rem;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.services-grid {
|
|
1231
|
+
grid-template-columns: 1fr;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
.dashboard-grid {
|
|
1235
|
+
grid-template-columns: 1fr;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
.footer-content {
|
|
1239
|
+
grid-template-columns: 1fr;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
.hero-stats {
|
|
1243
|
+
grid-template-columns: 1fr;
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
</style>
|
|
1247
|
+
<link href="https://example.com/" rel="canonical"/><meta content="index,follow,max-image-preview:large" name="robots"/><meta content="#0e1111" name="theme-color"/><meta content="website" property="og:type"/><meta content="Summit Practice — Summit" property="og:title"/><meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." property="og:description"/><meta content="https://example.com/" property="og:url"/><meta content="https://example.com/assets/generated/social-card.webp" property="og:image"/><meta content="summary_large_image" name="twitter:card"/><meta content="Summit Practice — Summit" name="twitter:title"/><meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." name="twitter:description"/><meta content="https://example.com/assets/generated/social-card.webp" name="twitter:image"/><script data-agentsam-seo="theme-remaster" type="application/ld+json">{"@context": "https://schema.org", "@type": "WebSite", "name": "Summit Practice", "description": "Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think.", "url": "https://example.com/", "isPartOf": {"@type": "CreativeWork", "name": "Summit AgentSam Prebuild"}}</script></head>
|
|
1248
|
+
<body>
|
|
1249
|
+
<!-- SVG Icons Sprite -->
|
|
1250
|
+
<svg style="display: none;" xmlns="http://www.w3.org/2000/svg">
|
|
1251
|
+
<symbol fill="none" id="icon-translation" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1252
|
+
<path d="M5 8l6 6M11 8l6 6M2 12h20M12 2v20"></path>
|
|
1253
|
+
<circle cx="12" cy="12" r="10"></circle>
|
|
1254
|
+
</symbol>
|
|
1255
|
+
<symbol fill="none" id="icon-handshake" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1256
|
+
<path d="M8 12h8M8 8h8M8 16h8M4 4h16v16H4z"></path>
|
|
1257
|
+
<path d="M12 4v16M4 12h16"></path>
|
|
1258
|
+
</symbol>
|
|
1259
|
+
<symbol fill="none" id="icon-network" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1260
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
1261
|
+
<circle cx="6" cy="6" r="2"></circle>
|
|
1262
|
+
<circle cx="18" cy="6" r="2"></circle>
|
|
1263
|
+
<circle cx="6" cy="18" r="2"></circle>
|
|
1264
|
+
<circle cx="18" cy="18" r="2"></circle>
|
|
1265
|
+
<line x1="12" x2="12" y1="9" y2="15"></line>
|
|
1266
|
+
<line x1="9" x2="15" y1="12" y2="12"></line>
|
|
1267
|
+
<line x1="8" x2="10" y1="8" y2="10"></line>
|
|
1268
|
+
<line x1="14" x2="16" y1="8" y2="10"></line>
|
|
1269
|
+
<line x1="8" x2="10" y1="16" y2="14"></line>
|
|
1270
|
+
<line x1="14" x2="16" y1="16" y2="14"></line>
|
|
1271
|
+
</symbol>
|
|
1272
|
+
<symbol fill="none" id="icon-construction" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1273
|
+
<rect height="18" rx="2" width="18" x="3" y="3"></rect>
|
|
1274
|
+
<path d="M9 9h6M9 15h6M12 3v18"></path>
|
|
1275
|
+
<circle cx="7" cy="7" r="1"></circle>
|
|
1276
|
+
<circle cx="17" cy="7" r="1"></circle>
|
|
1277
|
+
<circle cx="7" cy="17" r="1"></circle>
|
|
1278
|
+
<circle cx="17" cy="17" r="1"></circle>
|
|
1279
|
+
</symbol>
|
|
1280
|
+
<symbol fill="none" id="icon-property" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1281
|
+
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
|
|
1282
|
+
<polyline points="9 22 9 12 15 12 15 22"></polyline>
|
|
1283
|
+
</symbol>
|
|
1284
|
+
<symbol fill="none" id="icon-target" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1285
|
+
<circle cx="12" cy="12" r="10"></circle>
|
|
1286
|
+
<circle cx="12" cy="12" r="6"></circle>
|
|
1287
|
+
<circle cx="12" cy="12" r="2"></circle>
|
|
1288
|
+
<line x1="12" x2="12" y1="2" y2="6"></line>
|
|
1289
|
+
<line x1="12" x2="12" y1="18" y2="22"></line>
|
|
1290
|
+
<line x1="2" x2="6" y1="12" y2="12"></line>
|
|
1291
|
+
<line x1="18" x2="22" y1="12" y2="12"></line>
|
|
1292
|
+
</symbol>
|
|
1293
|
+
<symbol fill="none" id="icon-mountain" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1294
|
+
<path d="M3 20l9-9 9 9H3z"></path>
|
|
1295
|
+
<path d="M3 20h18M12 11v9"></path>
|
|
1296
|
+
<path d="M6 17l3-3 3 3 3-3 3 3"></path>
|
|
1297
|
+
</symbol>
|
|
1298
|
+
<symbol fill="none" id="icon-chat" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1299
|
+
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
1300
|
+
</symbol>
|
|
1301
|
+
<symbol fill="none" id="icon-close" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1302
|
+
<line x1="18" x2="6" y1="6" y2="18"></line>
|
|
1303
|
+
<line x1="6" x2="18" y1="6" y2="18"></line>
|
|
1304
|
+
</symbol>
|
|
1305
|
+
<symbol fill="none" id="icon-send" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1306
|
+
<line x1="22" x2="11" y1="2" y2="13"></line>
|
|
1307
|
+
<polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
|
|
1308
|
+
</symbol>
|
|
1309
|
+
<symbol fill="none" id="icon-language" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1310
|
+
<circle cx="12" cy="12" r="10"></circle>
|
|
1311
|
+
<line x1="2" x2="22" y1="12" y2="12"></line>
|
|
1312
|
+
<line x1="12" x2="15" y1="2" y2="12"></line>
|
|
1313
|
+
<line x1="12" x2="9" y1="22" y2="12"></line>
|
|
1314
|
+
</symbol>
|
|
1315
|
+
<symbol fill="none" id="icon-email" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1316
|
+
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
|
|
1317
|
+
<polyline points="22,6 12,13 2,6"></polyline>
|
|
1318
|
+
</symbol>
|
|
1319
|
+
<symbol fill="none" id="icon-phone" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1320
|
+
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>
|
|
1321
|
+
</symbol>
|
|
1322
|
+
<symbol fill="none" id="icon-location" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
|
|
1323
|
+
<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path>
|
|
1324
|
+
<circle cx="12" cy="10" r="3"></circle>
|
|
1325
|
+
</symbol>
|
|
1326
|
+
</svg>
|
|
1327
|
+
<!-- Navigation -->
|
|
1328
|
+
<nav>
|
|
1329
|
+
<div class="nav-container">
|
|
1330
|
+
<div class="logo-section" onclick="navigateTo('home')">
|
|
1331
|
+
<div class="logo-mountain">
|
|
1332
|
+
<svg class="icon">
|
|
1333
|
+
<use href="#icon-mountain"></use>
|
|
1334
|
+
</svg>
|
|
1335
|
+
</div>
|
|
1336
|
+
<div class="logo-text">
|
|
1337
|
+
<h1>Summit Practice</h1>
|
|
1338
|
+
<p data-i18n="nav.tagline">Opening Alpine Region to the World</p>
|
|
1339
|
+
</div>
|
|
1340
|
+
</div>
|
|
1341
|
+
<div class="nav-links">
|
|
1342
|
+
<a class="nav-link active" data-i18n="nav.home" data-page="home" onclick="navigateTo('home')">Home</a>
|
|
1343
|
+
<a class="nav-link" data-i18n="nav.about" data-page="about" onclick="navigateTo('about')">About</a>
|
|
1344
|
+
<a class="nav-link" data-i18n="nav.services" data-page="services" onclick="navigateTo('services')">Services</a>
|
|
1345
|
+
<a class="nav-link" data-i18n="nav.contact" data-page="contact" onclick="navigateTo('contact')">Contact</a>
|
|
1346
|
+
<a class="nav-link" data-i18n="nav.gallery" href="./gallery">Gallery</a>
|
|
1347
|
+
<div class="language-switcher">
|
|
1348
|
+
<button class="language-btn" id="language-btn" onclick="window.toggleLanguageMenu()">
|
|
1349
|
+
<svg class="icon">
|
|
1350
|
+
<use href="#icon-language"></use>
|
|
1351
|
+
</svg>
|
|
1352
|
+
<span id="current-lang">EN</span>
|
|
1353
|
+
</button>
|
|
1354
|
+
<div class="language-dropdown" id="language-dropdown">
|
|
1355
|
+
<div class="language-option active" onclick="window.changeLanguage('en')">English</div>
|
|
1356
|
+
<div class="language-option" onclick="window.changeLanguage('ja')">日本語</div>
|
|
1357
|
+
<div class="language-option" onclick="window.changeLanguage('zh')">中文</div>
|
|
1358
|
+
<div class="language-option" onclick="window.changeLanguage('ko')">한국어</div>
|
|
1359
|
+
</div>
|
|
1360
|
+
</div>
|
|
1361
|
+
<button class="btn-primary" data-i18n="nav.dashboard" onclick="window.location.href='./dashboard'">Dashboard</button>
|
|
1362
|
+
</div>
|
|
1363
|
+
</div>
|
|
1364
|
+
</nav>
|
|
1365
|
+
<!-- Home Page -->
|
|
1366
|
+
<div class="page active" id="home-page">
|
|
1367
|
+
<div class="container">
|
|
1368
|
+
<div class="hero">
|
|
1369
|
+
<div class="hero-content">
|
|
1370
|
+
<div class="hero-text">
|
|
1371
|
+
<h1 class="serif">
|
|
1372
|
+
<span data-i18n="hero.title.prefix">Navigating</span> <span class="highlight" data-i18n="hero.titleHighlight">Real Estate Investment</span> <span data-i18n="hero.title.suffix">in Japan</span>
|
|
1373
|
+
</h1>
|
|
1374
|
+
<p data-i18n="hero.subtitle">
|
|
1375
|
+
Expert bilingual support for foreign investors in Alpine Region's stunning Summit region.
|
|
1376
|
+
We bridge language and cultural gaps to help you successfully manage property investments
|
|
1377
|
+
in Japan's world-class ski resort areas.
|
|
1378
|
+
</p>
|
|
1379
|
+
<button class="btn-primary" data-i18n="hero.cta" onclick="navigateTo('contact')">Get in
|
|
1380
|
+
Touch</button>
|
|
1381
|
+
<div class="hero-stats">
|
|
1382
|
+
<div class="stat">
|
|
1383
|
+
<span class="stat-number serif">5+</span>
|
|
1384
|
+
<span class="stat-label" data-i18n="hero.stats.experience">Years Experience</span>
|
|
1385
|
+
</div>
|
|
1386
|
+
<div class="stat">
|
|
1387
|
+
<span class="stat-number serif">N1</span>
|
|
1388
|
+
<span class="stat-label" data-i18n="hero.stats.certified">JLPT Certified</span>
|
|
1389
|
+
</div>
|
|
1390
|
+
<div class="stat">
|
|
1391
|
+
<span class="stat-number serif">100%</span>
|
|
1392
|
+
<span class="stat-label" data-i18n="hero.stats.bilingual">Bilingual</span>
|
|
1393
|
+
</div>
|
|
1394
|
+
</div>
|
|
1395
|
+
</div>
|
|
1396
|
+
<div class="hero-visual" id="hero-visual" style="background: linear-gradient(135deg, var(--orange-primary), var(--orange-dark));">
|
|
1397
|
+
<div class="mountain-illustration" style="display: flex; align-items: center; justify-content: center; flex-direction: column; text-align: center; padding: 2rem; color: white; text-shadow: 0 2px 10px rgba(0,0,0,0.5); position: relative; z-index: 2;">
|
|
1398
|
+
<svg style="width: 120px; height: 120px; margin-bottom: 1rem; stroke: white; fill: rgba(255,255,255,0.2);" viewbox="0 0 24 24">
|
|
1399
|
+
<use href="#icon-mountain"></use>
|
|
1400
|
+
</svg>
|
|
1401
|
+
<h3 style="font-family: 'Roboto Mono', monospace; font-size: 1.5rem; font-weight: 700; margin-bottom: 0.5rem;">
|
|
1402
|
+
Alpine Region Prefecture</h3>
|
|
1403
|
+
<p style="font-size: 1rem; opacity: 0.95;">Nozawa Onsen • Iiyama • Myoko • Karuizawa</p>
|
|
1404
|
+
</div>
|
|
1405
|
+
</div>
|
|
1406
|
+
</div>
|
|
1407
|
+
</div>
|
|
1408
|
+
<div class="section">
|
|
1409
|
+
<div class="section-header">
|
|
1410
|
+
<h2 class="section-title serif" data-i18n="services.title">Why Summit Practice?</h2>
|
|
1411
|
+
<p class="section-subtitle" data-i18n="services.subtitle">
|
|
1412
|
+
Your trusted local partner for real estate success in Alpine Region, Japan
|
|
1413
|
+
</p>
|
|
1414
|
+
</div>
|
|
1415
|
+
<div class="services-grid">
|
|
1416
|
+
<div class="service-card">
|
|
1417
|
+
<div class="service-icon">
|
|
1418
|
+
<svg>
|
|
1419
|
+
<use href="#icon-translation"></use>
|
|
1420
|
+
</svg>
|
|
1421
|
+
</div>
|
|
1422
|
+
<h3 class="serif" data-i18n="services.translation.title">Translation & Interpretation</h3>
|
|
1423
|
+
<p data-i18n="services.translation.desc">Professional Japanese-English translation for property
|
|
1424
|
+
discussions, contractor meetings, site visits, and documents.</p>
|
|
1425
|
+
</div>
|
|
1426
|
+
<div class="service-card">
|
|
1427
|
+
<div class="service-icon">
|
|
1428
|
+
<svg>
|
|
1429
|
+
<use href="#icon-handshake"></use>
|
|
1430
|
+
</svg>
|
|
1431
|
+
</div>
|
|
1432
|
+
<h3 class="serif" data-i18n="services.liaison.title">Client Liaison Services</h3>
|
|
1433
|
+
<p data-i18n="services.liaison.desc">Support for Japanese businesses handling foreign clients,
|
|
1434
|
+
ensuring smooth communication and expectation alignment.</p>
|
|
1435
|
+
</div>
|
|
1436
|
+
<div class="service-card">
|
|
1437
|
+
<div class="service-icon">
|
|
1438
|
+
<svg>
|
|
1439
|
+
<use href="#icon-network"></use>
|
|
1440
|
+
</svg>
|
|
1441
|
+
</div>
|
|
1442
|
+
<h3 class="serif" data-i18n="services.coordination.title">Introductions & Coordination</h3>
|
|
1443
|
+
<p data-i18n="services.coordination.desc">Connect with trusted local realtors and contractors.
|
|
1444
|
+
Complete coordination support throughout your project.</p>
|
|
1445
|
+
</div>
|
|
1446
|
+
<div class="service-card">
|
|
1447
|
+
<div class="service-icon">
|
|
1448
|
+
<svg>
|
|
1449
|
+
<use href="#icon-construction"></use>
|
|
1450
|
+
</svg>
|
|
1451
|
+
</div>
|
|
1452
|
+
<h3 class="serif" data-i18n="services.project.title">Project Support</h3>
|
|
1453
|
+
<p data-i18n="services.project.desc">Renovation and improvement project coordination, schedule
|
|
1454
|
+
tracking, budget management, and on-site check-ins.</p>
|
|
1455
|
+
</div>
|
|
1456
|
+
<div class="service-card">
|
|
1457
|
+
<div class="service-icon">
|
|
1458
|
+
<svg>
|
|
1459
|
+
<use href="#icon-property"></use>
|
|
1460
|
+
</svg>
|
|
1461
|
+
</div>
|
|
1462
|
+
<h3 class="serif" data-i18n="services.management.title">Property Management</h3>
|
|
1463
|
+
<p data-i18n="services.management.desc">Routine property checks, keyholding services, and repair
|
|
1464
|
+
coordination for absentee owners.</p>
|
|
1465
|
+
</div>
|
|
1466
|
+
<div class="service-card">
|
|
1467
|
+
<div class="service-icon">
|
|
1468
|
+
<svg>
|
|
1469
|
+
<use href="#icon-target"></use>
|
|
1470
|
+
</svg>
|
|
1471
|
+
</div>
|
|
1472
|
+
<h3 class="serif" data-i18n="services.cultural.title">Cultural Bridge</h3>
|
|
1473
|
+
<p data-i18n="services.cultural.desc">Navigate the cultural expectations that often lead to
|
|
1474
|
+
missed deadlines and budget overruns.</p>
|
|
1475
|
+
</div>
|
|
1476
|
+
</div>
|
|
1477
|
+
</div>
|
|
1478
|
+
</div>
|
|
1479
|
+
</div>
|
|
1480
|
+
<!-- About Page -->
|
|
1481
|
+
<div class="page" id="about-page">
|
|
1482
|
+
<div class="container">
|
|
1483
|
+
<!-- Profile Hero Section -->
|
|
1484
|
+
<div class="profile-hero" style="margin-bottom: 4rem;">
|
|
1485
|
+
<div class="profile-hero-content">
|
|
1486
|
+
<div class="profile-image-container">
|
|
1487
|
+
<img alt="Alex Rowan" class="profile-image" id="Summit-profile-image" loading="eager" src="" style="background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); display: flex; align-items: center; justify-content: center; color: white; font-size: 1.2rem;"/>
|
|
1488
|
+
<div id="profile-image-placeholder" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-weight: 600; z-index: 1; pointer-events: none;">
|
|
1489
|
+
Upload Profile Image</div>
|
|
1490
|
+
<div class="profile-badge">
|
|
1491
|
+
<svg style="width: 24px; height: 24px; stroke: white; fill: none;">
|
|
1492
|
+
<use href="#icon-mountain"></use>
|
|
1493
|
+
</svg>
|
|
1494
|
+
<span>Mt. Goryudake 2814m</span>
|
|
1495
|
+
</div>
|
|
1496
|
+
</div>
|
|
1497
|
+
<div class="profile-info">
|
|
1498
|
+
<h1 class="serif" style="font-size: 3rem; margin-bottom: 1rem; color: var(--text-dark);">summit-team</h1>
|
|
1499
|
+
<p class="profile-tagline" style="font-size: 1.3rem; color: var(--orange-primary); font-weight: 600; margin-bottom: 1.5rem;">
|
|
1500
|
+
Your Local Expert in Alpine Region Prefecture
|
|
1501
|
+
</p>
|
|
1502
|
+
<p class="profile-bio" style="font-size: 1.1rem; line-height: 1.8; color: var(--text-gray); margin-bottom: 2rem;">
|
|
1503
|
+
Bilingual consultant specializing in real estate investment support for foreign investors.
|
|
1504
|
+
First non-Japanese Town Development Officer in Alpine Region Prefecture.
|
|
1505
|
+
Deeply connected to the local community with extensive experience bridging cultural and
|
|
1506
|
+
linguistic gaps.
|
|
1507
|
+
</p>
|
|
1508
|
+
<div class="profile-social" style="display: flex; gap: 1rem; align-items: center;">
|
|
1509
|
+
<a class="social-link" href="#social" rel="noopener noreferrer" style="display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.5rem; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); color: white; border-radius: 8px; text-decoration: none; font-weight: 600; transition: transform 0.3s ease, box-shadow 0.3s ease;" target="_blank">
|
|
1510
|
+
<svg style="width: 20px; height: 20px; fill: white;" viewbox="0 0 24 24">
|
|
1511
|
+
<path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path>
|
|
1512
|
+
</svg>
|
|
1513
|
+
<span>Connect on Facebook</span>
|
|
1514
|
+
</a>
|
|
1515
|
+
</div>
|
|
1516
|
+
</div>
|
|
1517
|
+
</div>
|
|
1518
|
+
</div>
|
|
1519
|
+
<div class="section">
|
|
1520
|
+
<div class="section-header">
|
|
1521
|
+
<h2 class="section-title serif" data-i18n="about.title">About Alex Rowan</h2>
|
|
1522
|
+
<p class="section-subtitle" data-i18n="about.subtitle">
|
|
1523
|
+
Your local expert with deep roots in Alpine Region
|
|
1524
|
+
</p>
|
|
1525
|
+
</div>
|
|
1526
|
+
<div class="about-content">
|
|
1527
|
+
<div class="about-text">
|
|
1528
|
+
<p data-i18n="about.intro1">
|
|
1529
|
+
Summit Practice is a Alpine Region-based bilingual consulting service operated by Alex Rowan,
|
|
1530
|
+
specializing in supporting foreign real estate investors and Japanese construction firms.
|
|
1531
|
+
I help international clients navigate the practical realities of buying, renovating, and
|
|
1532
|
+
maintaining property in Japan.
|
|
1533
|
+
</p>
|
|
1534
|
+
<p data-i18n="about.intro2">
|
|
1535
|
+
My service area is centered on the world-class ski resort Nozawa Onsen, which was featured
|
|
1536
|
+
on the cover of Condé Nast Traveler as one of the world's top 9 ski resorts for the 2026
|
|
1537
|
+
season.
|
|
1538
|
+
I also work in the surrounding region including Iiyama, Shinano, Myoko, Karuizawa, and
|
|
1539
|
+
nearby resort areas.
|
|
1540
|
+
</p>
|
|
1541
|
+
<p data-i18n="about.intro3">
|
|
1542
|
+
I relocated to Alpine Region Prefecture after earning my Master's Degree in Anthropology in 2015.
|
|
1543
|
+
Since then, I have amassed wide-ranging professional experience in Alpine Region across both the
|
|
1544
|
+
public and private sectors. I worked as an English teacher on the JET Program, serving two
|
|
1545
|
+
years as President of Alpine Region AJET.
|
|
1546
|
+
</p>
|
|
1547
|
+
<p data-i18n="about.intro4">
|
|
1548
|
+
From 2020 to 2021, I was employed by Tomi City on ecotourism development at the Tomi Tourism
|
|
1549
|
+
Association, where I became the first non-Japanese Town Development Officer in Alpine Region
|
|
1550
|
+
Prefecture.
|
|
1551
|
+
More recently, I worked in the Japanese mushroom industry, handling marketing and
|
|
1552
|
+
international
|
|
1553
|
+
client management for a Alpine Region-based export firm.
|
|
1554
|
+
</p>
|
|
1555
|
+
</div>
|
|
1556
|
+
<div>
|
|
1557
|
+
<div class="credentials">
|
|
1558
|
+
<h4 class="serif" data-i18n="about.qualifications">Qualifications & Experience</h4>
|
|
1559
|
+
<ul data-i18n-list="about.qualifications">
|
|
1560
|
+
<li>JLPT N1 Certification (Highest Level of Japanese Fluency)</li>
|
|
1561
|
+
<li>5+ Years Technical Japanese-English Translation & Interpretation</li>
|
|
1562
|
+
<li>Master's Degree in Anthropology</li>
|
|
1563
|
+
<li>First Non-Japanese Town Development Officer in Alpine Region Prefecture</li>
|
|
1564
|
+
<li>President of Alpine Region AJET (2 Years)</li>
|
|
1565
|
+
<li>Deep Construction Industry Connections Through Family Ties</li>
|
|
1566
|
+
<li>Export Industry Experience in International Client Management</li>
|
|
1567
|
+
</ul>
|
|
1568
|
+
</div>
|
|
1569
|
+
<div class="credentials">
|
|
1570
|
+
<h4 class="serif" data-i18n="about.serviceAreas">Service Areas</h4>
|
|
1571
|
+
<ul data-i18n-list="about.serviceAreas">
|
|
1572
|
+
<li>Nozawa Onsen (Primary Focus)</li>
|
|
1573
|
+
<li>Iiyama</li>
|
|
1574
|
+
<li>Shinano</li>
|
|
1575
|
+
<li>Myoko</li>
|
|
1576
|
+
<li>Karuizawa</li>
|
|
1577
|
+
<li>Komoro Region</li>
|
|
1578
|
+
</ul>
|
|
1579
|
+
</div>
|
|
1580
|
+
</div>
|
|
1581
|
+
</div>
|
|
1582
|
+
<!-- Service Areas Showcase -->
|
|
1583
|
+
<div class="area-showcase">
|
|
1584
|
+
<div class="section-header">
|
|
1585
|
+
<h2 class="section-title serif" data-i18n="about.serviceAreas">Service Areas</h2>
|
|
1586
|
+
<p class="section-subtitle">Beautiful regions we serve in Alpine Region Prefecture</p>
|
|
1587
|
+
</div>
|
|
1588
|
+
<div class="area-grid" id="area-showcase-grid">
|
|
1589
|
+
<!-- Area images will load from R2 assets -->
|
|
1590
|
+
<div style="grid-column: 1/-1; text-align: center; padding: 2rem; color: var(--text-gray);">
|
|
1591
|
+
<p>Area showcase images will appear here once uploaded via the dashboard.</p>
|
|
1592
|
+
</div>
|
|
1593
|
+
</div>
|
|
1594
|
+
</div>
|
|
1595
|
+
<!-- Portfolio Gallery Section -->
|
|
1596
|
+
<div class="portfolio-section" style="margin-top: 6rem; padding-top: 4rem; border-top: 2px solid color-mix(in srgb, var(--orange-primary) 20%, transparent);">
|
|
1597
|
+
<div class="section-header">
|
|
1598
|
+
<h2 class="section-title serif">Mountain Photography & Adventures</h2>
|
|
1599
|
+
<p class="section-subtitle">Summit team's journeys through Japan's most beautiful mountains -
|
|
1600
|
+
showcasing the regions we serve</p>
|
|
1601
|
+
<a href="./gallery" onmouseout="this.style.transform=''; this.style.boxShadow=''" onmouseover="this.style.transform='translateY(-2px)'; this.style.boxShadow='0 8px 20px rgba(255, 140, 66, 0.4)'" style="display: inline-block; margin-top: 1.5rem; padding: 0.75rem 2rem; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); color: white; text-decoration: none; border-radius: 8px; font-weight: 600; transition: transform 0.3s ease, box-shadow 0.3s ease;">View Full Gallery →</a>
|
|
1602
|
+
</div>
|
|
1603
|
+
<div class="portfolio-grid" id="portfolio-gallery">
|
|
1604
|
+
<!-- Portfolio images will be loaded from R2 assets -->
|
|
1605
|
+
<div class="loading-placeholder" style="text-align: center; padding: 3rem; color: var(--text-gray);">
|
|
1606
|
+
Loading Summit team's mountain photography...
|
|
1607
|
+
</div>
|
|
1608
|
+
</div>
|
|
1609
|
+
</div>
|
|
1610
|
+
</div>
|
|
1611
|
+
</div>
|
|
1612
|
+
</div>
|
|
1613
|
+
<!-- Services Page -->
|
|
1614
|
+
<div class="page" id="services-page">
|
|
1615
|
+
<div class="container">
|
|
1616
|
+
<div class="section">
|
|
1617
|
+
<div class="section-header">
|
|
1618
|
+
<h2 class="section-title serif" data-i18n="servicesPage.title">Our Services</h2>
|
|
1619
|
+
<p class="section-subtitle" data-i18n="servicesPage.subtitle">
|
|
1620
|
+
Comprehensive support for your real estate journey in Japan
|
|
1621
|
+
</p>
|
|
1622
|
+
</div>
|
|
1623
|
+
<div style="display: grid; gap: 3rem;">
|
|
1624
|
+
<div class="service-card" style="display: grid; grid-template-columns: 80px 1fr; gap: 2rem;">
|
|
1625
|
+
<div class="service-icon" style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); border-radius: 12px;">
|
|
1626
|
+
<svg style="width: 40px; height: 40px; stroke: white; fill: none;">
|
|
1627
|
+
<use href="#icon-translation"></use>
|
|
1628
|
+
</svg>
|
|
1629
|
+
</div>
|
|
1630
|
+
<div>
|
|
1631
|
+
<h3 class="serif" data-i18n="servicesPage.translation.title" style="font-size: 2rem;">
|
|
1632
|
+
Translation & Interpretation</h3>
|
|
1633
|
+
<p data-i18n="servicesPage.translation.desc" style="margin-bottom: 1.5rem;">Professional
|
|
1634
|
+
Japanese-English translation and
|
|
1635
|
+
interpretation services for all aspects of your property investment.</p>
|
|
1636
|
+
<ul class="service-features" data-i18n-features="translation">
|
|
1637
|
+
<li>Property discussion translation</li>
|
|
1638
|
+
<li>Contractor meeting interpretation</li>
|
|
1639
|
+
<li>Site visit coordination</li>
|
|
1640
|
+
<li>Document translation</li>
|
|
1641
|
+
<li>Legal document review</li>
|
|
1642
|
+
<li>Contract negotiation support</li>
|
|
1643
|
+
</ul>
|
|
1644
|
+
</div>
|
|
1645
|
+
</div>
|
|
1646
|
+
<div class="service-card" style="display: grid; grid-template-columns: 80px 1fr; gap: 2rem;">
|
|
1647
|
+
<div class="service-icon" style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); border-radius: 12px;">
|
|
1648
|
+
<svg style="width: 40px; height: 40px; stroke: white; fill: none;">
|
|
1649
|
+
<use href="#icon-handshake"></use>
|
|
1650
|
+
</svg>
|
|
1651
|
+
</div>
|
|
1652
|
+
<div>
|
|
1653
|
+
<h3 class="serif" data-i18n="servicesPage.liaison.title" style="font-size: 2rem;">Client
|
|
1654
|
+
Liaison for Japanese Businesses</h3>
|
|
1655
|
+
<p data-i18n="servicesPage.liaison.desc" style="margin-bottom: 1.5rem;">Support for Japanese
|
|
1656
|
+
companies handling foreign clients,
|
|
1657
|
+
ensuring smooth communication and cultural alignment.</p>
|
|
1658
|
+
<ul class="service-features" data-i18n-features="liaison">
|
|
1659
|
+
<li>Expectation alignment</li>
|
|
1660
|
+
<li>Communication flow management</li>
|
|
1661
|
+
<li>Cultural consultation</li>
|
|
1662
|
+
<li>Foreign client support</li>
|
|
1663
|
+
<li>Business practice guidance</li>
|
|
1664
|
+
<li>Ongoing relationship management</li>
|
|
1665
|
+
</ul>
|
|
1666
|
+
</div>
|
|
1667
|
+
</div>
|
|
1668
|
+
<div class="service-card" style="display: grid; grid-template-columns: 80px 1fr; gap: 2rem;">
|
|
1669
|
+
<div class="service-icon" style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); border-radius: 12px;">
|
|
1670
|
+
<svg style="width: 40px; height: 40px; stroke: white; fill: none;">
|
|
1671
|
+
<use href="#icon-network"></use>
|
|
1672
|
+
</svg>
|
|
1673
|
+
</div>
|
|
1674
|
+
<div>
|
|
1675
|
+
<h3 class="serif" data-i18n="servicesPage.coordination.title" style="font-size: 2rem;">
|
|
1676
|
+
Introductions & Coordination</h3>
|
|
1677
|
+
<p data-i18n="servicesPage.coordination.desc" style="margin-bottom: 1.5rem;">Connect with
|
|
1678
|
+
trusted local professionals and ensure
|
|
1679
|
+
seamless project coordination.</p>
|
|
1680
|
+
<ul class="service-features" data-i18n-features="coordination">
|
|
1681
|
+
<li>Realtor introductions</li>
|
|
1682
|
+
<li>Contractor recommendations</li>
|
|
1683
|
+
<li>Local government liaison</li>
|
|
1684
|
+
<li>Service provider network</li>
|
|
1685
|
+
<li>Project coordination</li>
|
|
1686
|
+
<li>Stakeholder management</li>
|
|
1687
|
+
</ul>
|
|
1688
|
+
</div>
|
|
1689
|
+
</div>
|
|
1690
|
+
<div class="service-card" style="display: grid; grid-template-columns: 80px 1fr; gap: 2rem;">
|
|
1691
|
+
<div class="service-icon" style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); border-radius: 12px;">
|
|
1692
|
+
<svg style="width: 40px; height: 40px; stroke: white; fill: none;">
|
|
1693
|
+
<use href="#icon-construction"></use>
|
|
1694
|
+
</svg>
|
|
1695
|
+
</div>
|
|
1696
|
+
<div>
|
|
1697
|
+
<h3 class="serif" data-i18n="servicesPage.project.title" style="font-size: 2rem;">Renovation
|
|
1698
|
+
/ Project Support</h3>
|
|
1699
|
+
<p data-i18n="servicesPage.project.desc" style="margin-bottom: 1.5rem;">Comprehensive
|
|
1700
|
+
support for renovation and improvement
|
|
1701
|
+
projects from planning to completion.</p>
|
|
1702
|
+
<ul class="service-features" data-i18n-features="project">
|
|
1703
|
+
<li>Contractor coordination</li>
|
|
1704
|
+
<li>Schedule tracking</li>
|
|
1705
|
+
<li>Budget management</li>
|
|
1706
|
+
<li>On-site check-ins</li>
|
|
1707
|
+
<li>Issue resolution</li>
|
|
1708
|
+
<li>Quality assurance</li>
|
|
1709
|
+
</ul>
|
|
1710
|
+
</div>
|
|
1711
|
+
</div>
|
|
1712
|
+
<div class="service-card" style="display: grid; grid-template-columns: 80px 1fr; gap: 2rem;">
|
|
1713
|
+
<div class="service-icon" style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); border-radius: 12px;">
|
|
1714
|
+
<svg style="width: 40px; height: 40px; stroke: white; fill: none;">
|
|
1715
|
+
<use href="#icon-property"></use>
|
|
1716
|
+
</svg>
|
|
1717
|
+
</div>
|
|
1718
|
+
<div>
|
|
1719
|
+
<h3 class="serif" data-i18n="servicesPage.management.title" style="font-size: 2rem;">
|
|
1720
|
+
Property Care & Management</h3>
|
|
1721
|
+
<p data-i18n="servicesPage.management.desc" style="margin-bottom: 1.5rem;">Reliable property
|
|
1722
|
+
management services for absentee owners.
|
|
1723
|
+
</p>
|
|
1724
|
+
<ul class="service-features" data-i18n-features="management">
|
|
1725
|
+
<li>Routine property checks</li>
|
|
1726
|
+
<li>Keyholding services</li>
|
|
1727
|
+
<li>Repair coordination</li>
|
|
1728
|
+
<li>Maintenance scheduling</li>
|
|
1729
|
+
<li>Emergency response</li>
|
|
1730
|
+
<li>Seasonal preparation</li>
|
|
1731
|
+
</ul>
|
|
1732
|
+
</div>
|
|
1733
|
+
</div>
|
|
1734
|
+
</div>
|
|
1735
|
+
</div>
|
|
1736
|
+
</div>
|
|
1737
|
+
</div>
|
|
1738
|
+
<!-- Contact Page -->
|
|
1739
|
+
<div class="page" id="contact-page">
|
|
1740
|
+
<div class="container">
|
|
1741
|
+
<div class="section">
|
|
1742
|
+
<div class="section-header">
|
|
1743
|
+
<h2 class="section-title serif">Get in Touch</h2>
|
|
1744
|
+
<p class="section-subtitle">
|
|
1745
|
+
Ready to start your real estate journey in Alpine Region?
|
|
1746
|
+
</p>
|
|
1747
|
+
</div>
|
|
1748
|
+
<div class="contact-content">
|
|
1749
|
+
<div class="contact-info">
|
|
1750
|
+
<div class="contact-item">
|
|
1751
|
+
<div class="contact-icon">
|
|
1752
|
+
<svg>
|
|
1753
|
+
<use href="#icon-email"></use>
|
|
1754
|
+
</svg>
|
|
1755
|
+
</div>
|
|
1756
|
+
<div class="contact-details">
|
|
1757
|
+
<h4>Email</h4>
|
|
1758
|
+
<p><a href="mailto:[email protected]">[email protected]</a></p>
|
|
1759
|
+
</div>
|
|
1760
|
+
</div>
|
|
1761
|
+
<div class="contact-item">
|
|
1762
|
+
<div class="contact-icon">
|
|
1763
|
+
<svg>
|
|
1764
|
+
<use href="#icon-phone"></use>
|
|
1765
|
+
</svg>
|
|
1766
|
+
</div>
|
|
1767
|
+
<div class="contact-details">
|
|
1768
|
+
<h4>Phone</h4>
|
|
1769
|
+
<p>+81 070-7476-5362</p>
|
|
1770
|
+
</div>
|
|
1771
|
+
</div>
|
|
1772
|
+
<div class="contact-item">
|
|
1773
|
+
<div class="contact-icon">
|
|
1774
|
+
<svg>
|
|
1775
|
+
<use href="#icon-location"></use>
|
|
1776
|
+
</svg>
|
|
1777
|
+
</div>
|
|
1778
|
+
<div class="contact-details">
|
|
1779
|
+
<h4>Location</h4>
|
|
1780
|
+
<p>Alpine Region Prefecture, Japan</p>
|
|
1781
|
+
<p style="font-size: 0.9rem; margin-top: 0.25rem;">長野県小諸市</p>
|
|
1782
|
+
</div>
|
|
1783
|
+
</div>
|
|
1784
|
+
<div class="contact-item">
|
|
1785
|
+
<div class="contact-icon">
|
|
1786
|
+
<svg>
|
|
1787
|
+
<use href="#icon-mountain"></use>
|
|
1788
|
+
</svg>
|
|
1789
|
+
</div>
|
|
1790
|
+
<div class="contact-details">
|
|
1791
|
+
<h4>Service Areas</h4>
|
|
1792
|
+
<p>Nozawa Onsen, Iiyama, Shinano, Myoko, Karuizawa</p>
|
|
1793
|
+
</div>
|
|
1794
|
+
</div>
|
|
1795
|
+
</div>
|
|
1796
|
+
<div class="contact-form">
|
|
1797
|
+
<form id="contactForm" onsubmit="handleContactSubmit(event)">
|
|
1798
|
+
<div class="form-group">
|
|
1799
|
+
<label data-i18n="contact.name">Name</label>
|
|
1800
|
+
<input id="name" required="" type="text"/>
|
|
1801
|
+
</div>
|
|
1802
|
+
<div class="form-group">
|
|
1803
|
+
<label data-i18n="contact.email">Email</label>
|
|
1804
|
+
<input data-i18n-placeholder="contact.emailPlaceholder" id="email" placeholder="your.email@example.com" required="" type="email"/>
|
|
1805
|
+
</div>
|
|
1806
|
+
<div class="form-group">
|
|
1807
|
+
<label data-i18n="contact.subject">Subject</label>
|
|
1808
|
+
<input id="subject" required="" type="text"/>
|
|
1809
|
+
</div>
|
|
1810
|
+
<div class="form-group">
|
|
1811
|
+
<label data-i18n="contact.message">Message</label>
|
|
1812
|
+
<textarea id="message" required=""></textarea>
|
|
1813
|
+
</div>
|
|
1814
|
+
<button class="btn-primary" data-i18n="contact.send" style="width: 100%;" type="submit">
|
|
1815
|
+
Send Message
|
|
1816
|
+
</button>
|
|
1817
|
+
</form>
|
|
1818
|
+
</div>
|
|
1819
|
+
</div>
|
|
1820
|
+
</div>
|
|
1821
|
+
</div>
|
|
1822
|
+
</div>
|
|
1823
|
+
<!-- Dashboard Page -->
|
|
1824
|
+
<div class="page" id="dashboard-page">
|
|
1825
|
+
<div class="container">
|
|
1826
|
+
<div class="dashboard-header">
|
|
1827
|
+
<h2 class="serif" style="font-size: 2.5rem; margin-bottom: 0.5rem;">
|
|
1828
|
+
Business Dashboard
|
|
1829
|
+
</h2>
|
|
1830
|
+
<p style="color: var(--text-gray);">
|
|
1831
|
+
Manage your clients, properties, and projects
|
|
1832
|
+
</p>
|
|
1833
|
+
</div>
|
|
1834
|
+
<div id="dashboard-content">
|
|
1835
|
+
<div class="dashboard-grid">
|
|
1836
|
+
<div class="dashboard-card">
|
|
1837
|
+
<h3>Total Clients</h3>
|
|
1838
|
+
<div class="dashboard-number" id="clientsCount">0</div>
|
|
1839
|
+
</div>
|
|
1840
|
+
<div class="dashboard-card">
|
|
1841
|
+
<h3>Properties</h3>
|
|
1842
|
+
<div class="dashboard-number" id="propertiesCount">0</div>
|
|
1843
|
+
</div>
|
|
1844
|
+
<div class="dashboard-card">
|
|
1845
|
+
<h3>Active Projects</h3>
|
|
1846
|
+
<div class="dashboard-number" id="projectsCount">0</div>
|
|
1847
|
+
</div>
|
|
1848
|
+
</div>
|
|
1849
|
+
<div class="data-table">
|
|
1850
|
+
<h3>Recent Clients</h3>
|
|
1851
|
+
<table>
|
|
1852
|
+
<thead>
|
|
1853
|
+
<tr>
|
|
1854
|
+
<th>Name</th>
|
|
1855
|
+
<th>Email</th>
|
|
1856
|
+
<th>Country</th>
|
|
1857
|
+
<th>Status</th>
|
|
1858
|
+
</tr>
|
|
1859
|
+
</thead>
|
|
1860
|
+
<tbody id="clientsTable">
|
|
1861
|
+
<tr>
|
|
1862
|
+
<td colspan="4" style="text-align: center; padding: 2rem;">
|
|
1863
|
+
<div class="spinner"></div>
|
|
1864
|
+
</td>
|
|
1865
|
+
</tr>
|
|
1866
|
+
</tbody>
|
|
1867
|
+
</table>
|
|
1868
|
+
</div>
|
|
1869
|
+
<div class="data-table">
|
|
1870
|
+
<h3>Recent Projects</h3>
|
|
1871
|
+
<table>
|
|
1872
|
+
<thead>
|
|
1873
|
+
<tr>
|
|
1874
|
+
<th>Name</th>
|
|
1875
|
+
<th>Type</th>
|
|
1876
|
+
<th>Status</th>
|
|
1877
|
+
<th>Budget</th>
|
|
1878
|
+
</tr>
|
|
1879
|
+
</thead>
|
|
1880
|
+
<tbody id="projectsTable">
|
|
1881
|
+
<tr>
|
|
1882
|
+
<td colspan="4" style="text-align: center; padding: 2rem;">
|
|
1883
|
+
<div class="spinner"></div>
|
|
1884
|
+
</td>
|
|
1885
|
+
</tr>
|
|
1886
|
+
</tbody>
|
|
1887
|
+
</table>
|
|
1888
|
+
</div>
|
|
1889
|
+
</div>
|
|
1890
|
+
</div>
|
|
1891
|
+
</div>
|
|
1892
|
+
<!-- Footer -->
|
|
1893
|
+
<footer>
|
|
1894
|
+
<div class="container">
|
|
1895
|
+
<div class="footer-content">
|
|
1896
|
+
<div class="footer-brand">
|
|
1897
|
+
<h3 class="serif">Summit Practice</h3>
|
|
1898
|
+
<p>
|
|
1899
|
+
Opening Alpine Region to the world. Expert bilingual support for foreign
|
|
1900
|
+
real estate investors in Japan's stunning Summit region.
|
|
1901
|
+
</p>
|
|
1902
|
+
<p style="margin-top: 1rem; font-size: 0.9rem;">
|
|
1903
|
+
通訳・翻訳・海外向けのマーケティング&コンサルティング
|
|
1904
|
+
</p>
|
|
1905
|
+
</div>
|
|
1906
|
+
<div class="footer-links">
|
|
1907
|
+
<h4>Quick Links</h4>
|
|
1908
|
+
<ul>
|
|
1909
|
+
<li><a onclick="navigateTo('home')">Home</a></li>
|
|
1910
|
+
<li><a onclick="navigateTo('about')">About</a></li>
|
|
1911
|
+
<li><a onclick="navigateTo('services')">Services</a></li>
|
|
1912
|
+
<li><a onclick="navigateTo('contact')">Contact</a></li>
|
|
1913
|
+
</ul>
|
|
1914
|
+
</div>
|
|
1915
|
+
<div class="footer-links">
|
|
1916
|
+
<h4>Contact</h4>
|
|
1917
|
+
<ul>
|
|
1918
|
+
<li><a href="mailto:[email protected]">[email protected]</a></li>
|
|
1919
|
+
<li>+81 070-7476-5362</li>
|
|
1920
|
+
<li>Alpine Region Prefecture</li>
|
|
1921
|
+
<li>長野県小諸市</li>
|
|
1922
|
+
</ul>
|
|
1923
|
+
</div>
|
|
1924
|
+
</div>
|
|
1925
|
+
<div class="footer-bottom">
|
|
1926
|
+
<p>© 2024 Summit Practice - All Rights Reserved</p>
|
|
1927
|
+
</div>
|
|
1928
|
+
</div>
|
|
1929
|
+
</footer>
|
|
1930
|
+
<script>
|
|
1931
|
+
// ===== CONFIGURATION =====
|
|
1932
|
+
const API_CONFIG = {
|
|
1933
|
+
apiUrl: 'https://Summit-solutions.meauxbility.workers.dev'
|
|
1934
|
+
};
|
|
1935
|
+
|
|
1936
|
+
// ===== LANGUAGE MANAGEMENT =====
|
|
1937
|
+
window.toggleLanguageMenu = function () {
|
|
1938
|
+
const dropdown = document.getElementById('language-dropdown');
|
|
1939
|
+
if (dropdown) {
|
|
1940
|
+
dropdown.classList.toggle('open');
|
|
1941
|
+
}
|
|
1942
|
+
};
|
|
1943
|
+
|
|
1944
|
+
window.changeLanguage = function (langCode) {
|
|
1945
|
+
// Store language preference immediately
|
|
1946
|
+
localStorage.setItem('Summit_language', langCode);
|
|
1947
|
+
|
|
1948
|
+
// Update UI immediately
|
|
1949
|
+
updateLanguageUI(langCode);
|
|
1950
|
+
|
|
1951
|
+
// Function to actually update content
|
|
1952
|
+
const doUpdate = () => {
|
|
1953
|
+
if (window.i18n && window.i18n.translations && window.i18n.translations[langCode]) {
|
|
1954
|
+
// Update current language
|
|
1955
|
+
window.i18n.currentLanguage = langCode;
|
|
1956
|
+
document.documentElement.lang = langCode;
|
|
1957
|
+
|
|
1958
|
+
// Force immediate content update - call multiple times to ensure it works
|
|
1959
|
+
if (window.i18n.updatePageContent) {
|
|
1960
|
+
window.i18n.updatePageContent();
|
|
1961
|
+
}
|
|
1962
|
+
|
|
1963
|
+
// Update chatbot
|
|
1964
|
+
if (window.SummitChatbot) {
|
|
1965
|
+
window.SummitChatbot.setLanguage(langCode);
|
|
1966
|
+
}
|
|
1967
|
+
return true;
|
|
1968
|
+
}
|
|
1969
|
+
return false;
|
|
1970
|
+
};
|
|
1971
|
+
|
|
1972
|
+
// Try immediately
|
|
1973
|
+
if (!doUpdate()) {
|
|
1974
|
+
// Retry if i18n not loaded yet
|
|
1975
|
+
let retries = 0;
|
|
1976
|
+
const retryInterval = setInterval(() => {
|
|
1977
|
+
retries++;
|
|
1978
|
+
if (doUpdate()) {
|
|
1979
|
+
clearInterval(retryInterval);
|
|
1980
|
+
} else if (retries > 30) {
|
|
1981
|
+
clearInterval(retryInterval);
|
|
1982
|
+
alert('Language switching failed. Please refresh the page.');
|
|
1983
|
+
}
|
|
1984
|
+
}, 100);
|
|
1985
|
+
} else {
|
|
1986
|
+
// Even if it worked, do additional updates to catch any missed elements
|
|
1987
|
+
setTimeout(doUpdate, 50);
|
|
1988
|
+
setTimeout(doUpdate, 150);
|
|
1989
|
+
setTimeout(doUpdate, 300);
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
const dropdown = document.getElementById('language-dropdown');
|
|
1993
|
+
if (dropdown) {
|
|
1994
|
+
dropdown.classList.remove('open');
|
|
1995
|
+
}
|
|
1996
|
+
};
|
|
1997
|
+
|
|
1998
|
+
function updateLanguageUI(langCode) {
|
|
1999
|
+
const langMap = { en: 'EN', ja: 'JA', zh: 'ZH', ko: 'KO' };
|
|
2000
|
+
const currentLangEl = document.getElementById('current-lang');
|
|
2001
|
+
if (currentLangEl) {
|
|
2002
|
+
currentLangEl.textContent = langMap[langCode] || 'EN';
|
|
2003
|
+
}
|
|
2004
|
+
|
|
2005
|
+
const options = document.querySelectorAll('.language-option');
|
|
2006
|
+
options.forEach(opt => {
|
|
2007
|
+
opt.classList.remove('active');
|
|
2008
|
+
const onclick = opt.getAttribute('onclick') || '';
|
|
2009
|
+
if (onclick.includes(`'${langCode}'`) || onclick.includes(`"${langCode}"`)) {
|
|
2010
|
+
opt.classList.add('active');
|
|
2011
|
+
}
|
|
2012
|
+
});
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
// Close language dropdown when clicking outside
|
|
2016
|
+
document.addEventListener('click', (e) => {
|
|
2017
|
+
const dropdown = document.getElementById('language-dropdown');
|
|
2018
|
+
const btn = document.getElementById('language-btn');
|
|
2019
|
+
if (dropdown && btn && !dropdown.contains(e.target) && !btn.contains(e.target)) {
|
|
2020
|
+
dropdown.classList.remove('open');
|
|
2021
|
+
}
|
|
2022
|
+
});
|
|
2023
|
+
|
|
2024
|
+
// ===== NAVIGATION =====
|
|
2025
|
+
function navigateTo(pageName) {
|
|
2026
|
+
// Hide all pages
|
|
2027
|
+
const pages = document.querySelectorAll('.page');
|
|
2028
|
+
pages.forEach(page => page.classList.remove('active'));
|
|
2029
|
+
|
|
2030
|
+
// Show selected page
|
|
2031
|
+
const targetPage = document.getElementById(pageName + '-page');
|
|
2032
|
+
if (targetPage) {
|
|
2033
|
+
targetPage.classList.add('active');
|
|
2034
|
+
}
|
|
2035
|
+
|
|
2036
|
+
// Load portfolio images when About page is shown
|
|
2037
|
+
if (pageName === 'about') {
|
|
2038
|
+
setTimeout(() => {
|
|
2039
|
+
if (typeof loadPortfolioImages === 'function') loadPortfolioImages();
|
|
2040
|
+
if (typeof loadProfileImage === 'function') loadProfileImage();
|
|
2041
|
+
}, 100);
|
|
2042
|
+
}
|
|
2043
|
+
|
|
2044
|
+
// Update nav links
|
|
2045
|
+
const navLinks = document.querySelectorAll('.nav-link');
|
|
2046
|
+
navLinks.forEach(link => {
|
|
2047
|
+
if (link.getAttribute('data-page') === pageName) {
|
|
2048
|
+
link.classList.add('active');
|
|
2049
|
+
} else {
|
|
2050
|
+
link.classList.remove('active');
|
|
2051
|
+
}
|
|
2052
|
+
});
|
|
2053
|
+
|
|
2054
|
+
// Load dashboard data if navigating to dashboard
|
|
2055
|
+
if (pageName === 'dashboard') {
|
|
2056
|
+
loadDashboardData();
|
|
2057
|
+
}
|
|
2058
|
+
|
|
2059
|
+
// Scroll to top
|
|
2060
|
+
window.scrollTo(0, 0);
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
// ===== CONTACT FORM =====
|
|
2064
|
+
function handleContactSubmit(event) {
|
|
2065
|
+
event.preventDefault();
|
|
2066
|
+
const name = document.getElementById('name').value;
|
|
2067
|
+
const email = document.getElementById('email').value;
|
|
2068
|
+
const subject = document.getElementById('subject').value;
|
|
2069
|
+
const message = document.getElementById('message').value;
|
|
2070
|
+
|
|
2071
|
+
alert(`Thank you for your message, ${name}! Summit will get back to you soon at ${email}.`);
|
|
2072
|
+
|
|
2073
|
+
// Reset form
|
|
2074
|
+
document.getElementById('contactForm').reset();
|
|
2075
|
+
}
|
|
2076
|
+
|
|
2077
|
+
// ===== DASHBOARD =====
|
|
2078
|
+
function loadDashboardData() {
|
|
2079
|
+
// Load data from API
|
|
2080
|
+
loadClients();
|
|
2081
|
+
loadProperties();
|
|
2082
|
+
loadProjects();
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2085
|
+
async function loadClients() {
|
|
2086
|
+
try {
|
|
2087
|
+
const response = await fetch(`${API_CONFIG.apiUrl}/api/clients`);
|
|
2088
|
+
|
|
2089
|
+
if (response.ok) {
|
|
2090
|
+
const data = await response.json();
|
|
2091
|
+
const clients = data.data || [];
|
|
2092
|
+
|
|
2093
|
+
document.getElementById('clientsCount').textContent = clients.length;
|
|
2094
|
+
|
|
2095
|
+
const tableBody = document.getElementById('clientsTable');
|
|
2096
|
+
if (clients.length === 0) {
|
|
2097
|
+
tableBody.innerHTML = '<tr><td colspan="4" style="text-align: center; padding: 2rem; color: var(--text-gray);">No clients yet. Start by creating your first client!</td></tr>';
|
|
2098
|
+
} else {
|
|
2099
|
+
tableBody.innerHTML = clients.slice(0, 10).map(client => `
|
|
2100
|
+
<tr>
|
|
2101
|
+
<td>${client.name || 'N/A'}</td>
|
|
2102
|
+
<td>${client.email || 'N/A'}</td>
|
|
2103
|
+
<td>${client.country || 'N/A'}</td>
|
|
2104
|
+
<td><span class="badge badge-success">${client.status || 'active'}</span></td>
|
|
2105
|
+
</tr>
|
|
2106
|
+
`).join('');
|
|
2107
|
+
}
|
|
2108
|
+
} else {
|
|
2109
|
+
throw new Error('Failed to load clients');
|
|
2110
|
+
}
|
|
2111
|
+
} catch (error) {
|
|
2112
|
+
console.error('Error loading clients:', error);
|
|
2113
|
+
document.getElementById('clientsCount').textContent = '—';
|
|
2114
|
+
document.getElementById('clientsTable').innerHTML = '<tr><td colspan="4" style="text-align: center; padding: 2rem; color: var(--text-gray);">Failed to load clients. Check API connection.</td></tr>';
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
async function loadProperties() {
|
|
2119
|
+
try {
|
|
2120
|
+
const response = await fetch(`${API_CONFIG.apiUrl}/api/properties`);
|
|
2121
|
+
|
|
2122
|
+
if (response.ok) {
|
|
2123
|
+
const data = await response.json();
|
|
2124
|
+
const properties = data.data || [];
|
|
2125
|
+
document.getElementById('propertiesCount').textContent = properties.length;
|
|
2126
|
+
} else {
|
|
2127
|
+
throw new Error('Failed to load properties');
|
|
2128
|
+
}
|
|
2129
|
+
} catch (error) {
|
|
2130
|
+
console.error('Error loading properties:', error);
|
|
2131
|
+
document.getElementById('propertiesCount').textContent = '—';
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
|
|
2135
|
+
async function loadProjects() {
|
|
2136
|
+
try {
|
|
2137
|
+
const response = await fetch(`${API_CONFIG.apiUrl}/api/projects`);
|
|
2138
|
+
|
|
2139
|
+
if (response.ok) {
|
|
2140
|
+
const data = await response.json();
|
|
2141
|
+
const projects = data.data || [];
|
|
2142
|
+
const activeProjects = projects.filter(p => p.status === 'in_progress' || p.status === 'planning');
|
|
2143
|
+
|
|
2144
|
+
document.getElementById('projectsCount').textContent = activeProjects.length;
|
|
2145
|
+
|
|
2146
|
+
const tableBody = document.getElementById('projectsTable');
|
|
2147
|
+
if (projects.length === 0) {
|
|
2148
|
+
tableBody.innerHTML = '<tr><td colspan="4" style="text-align: center; padding: 2rem; color: var(--text-gray);">No projects yet. Start tracking your first project!</td></tr>';
|
|
2149
|
+
} else {
|
|
2150
|
+
tableBody.innerHTML = projects.slice(0, 10).map(project => {
|
|
2151
|
+
let badgeClass = 'badge-warning';
|
|
2152
|
+
if (project.status === 'completed') badgeClass = 'badge-success';
|
|
2153
|
+
if (project.status === 'in_progress') badgeClass = 'badge-info';
|
|
2154
|
+
|
|
2155
|
+
return `
|
|
2156
|
+
<tr>
|
|
2157
|
+
<td>${project.name || 'N/A'}</td>
|
|
2158
|
+
<td>${project.project_type || 'N/A'}</td>
|
|
2159
|
+
<td><span class="badge ${badgeClass}">${project.status || 'N/A'}</span></td>
|
|
2160
|
+
<td>${project.budget ? '¥' + project.budget.toLocaleString() : 'N/A'}</td>
|
|
2161
|
+
</tr>
|
|
2162
|
+
`;
|
|
2163
|
+
}).join('');
|
|
2164
|
+
}
|
|
2165
|
+
} else {
|
|
2166
|
+
throw new Error('Failed to load projects');
|
|
2167
|
+
}
|
|
2168
|
+
} catch (error) {
|
|
2169
|
+
console.error('Error loading projects:', error);
|
|
2170
|
+
document.getElementById('projectsCount').textContent = '—';
|
|
2171
|
+
document.getElementById('projectsTable').innerHTML = '<tr><td colspan="4" style="text-align: center; padding: 2rem; color: var(--text-gray);">Failed to load projects. Check API connection.</td></tr>';
|
|
2172
|
+
}
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
// ===== INITIALIZATION =====
|
|
2176
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
2177
|
+
// Initialize theme system (for dashboard only)
|
|
2178
|
+
if (window.initTheme) {
|
|
2179
|
+
window.initTheme();
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
// Wait for i18n to load
|
|
2183
|
+
const initI18n = () => {
|
|
2184
|
+
if (window.i18n && window.i18n.translations && Object.keys(window.i18n.translations).length > 0) {
|
|
2185
|
+
const detectedLang = window.i18n.detectLanguage();
|
|
2186
|
+
window.i18n.currentLanguage = detectedLang;
|
|
2187
|
+
document.documentElement.lang = detectedLang;
|
|
2188
|
+
updateLanguageUI(detectedLang);
|
|
2189
|
+
|
|
2190
|
+
// Initialize chatbot
|
|
2191
|
+
if (typeof SummitChatbot !== 'undefined') {
|
|
2192
|
+
window.SummitChatbot = new SummitChatbot(API_CONFIG.apiUrl);
|
|
2193
|
+
window.SummitChatbot.setLanguage(window.i18n.currentLanguage);
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
// Update page content after initialization - ensure DOM is ready
|
|
2197
|
+
// Use multiple attempts to ensure it works
|
|
2198
|
+
const updateContent = () => {
|
|
2199
|
+
if (window.i18n && window.i18n.updatePageContent) {
|
|
2200
|
+
window.i18n.updatePageContent();
|
|
2201
|
+
}
|
|
2202
|
+
};
|
|
2203
|
+
|
|
2204
|
+
// Immediate update
|
|
2205
|
+
requestAnimationFrame(updateContent);
|
|
2206
|
+
// Delayed updates to catch any late-loading elements
|
|
2207
|
+
setTimeout(updateContent, 100);
|
|
2208
|
+
setTimeout(updateContent, 300);
|
|
2209
|
+
setTimeout(updateContent, 500);
|
|
2210
|
+
} else {
|
|
2211
|
+
// Retry if i18n not loaded yet
|
|
2212
|
+
setTimeout(initI18n, 50);
|
|
2213
|
+
}
|
|
2214
|
+
};
|
|
2215
|
+
|
|
2216
|
+
initI18n();
|
|
2217
|
+
|
|
2218
|
+
// Load hero background image from R2
|
|
2219
|
+
async function loadHeroImage() {
|
|
2220
|
+
try {
|
|
2221
|
+
const API_URL = window.location.origin;
|
|
2222
|
+
const response = await fetch(`${API_URL}/api/assets?category=hero&type=image&limit=1`);
|
|
2223
|
+
const data = await response.json();
|
|
2224
|
+
|
|
2225
|
+
if (data.success && data.data && data.data.length > 0 && data.data[0].r2_key) {
|
|
2226
|
+
const heroVisual = document.getElementById('hero-visual');
|
|
2227
|
+
if (heroVisual) {
|
|
2228
|
+
const imageUrl = `${API_URL}/api/assets/${data.data[0].id}/view`;
|
|
2229
|
+
heroVisual.style.backgroundImage = `url('${imageUrl}')`;
|
|
2230
|
+
heroVisual.style.backgroundSize = 'cover';
|
|
2231
|
+
heroVisual.style.backgroundPosition = 'center';
|
|
2232
|
+
heroVisual.style.backgroundRepeat = 'no-repeat';
|
|
2233
|
+
}
|
|
2234
|
+
} else {
|
|
2235
|
+
// Fallback: use japansnow.jpg if available
|
|
2236
|
+
const fallbackResponse = await fetch(`${API_URL}/api/assets?type=image`);
|
|
2237
|
+
const fallbackData = await fallbackResponse.json();
|
|
2238
|
+
if (fallbackData.success && fallbackData.data) {
|
|
2239
|
+
const snowImage = fallbackData.data.find(a => a.r2_key && a.r2_key.includes('japansnow'));
|
|
2240
|
+
if (snowImage) {
|
|
2241
|
+
const heroVisual = document.getElementById('hero-visual');
|
|
2242
|
+
if (heroVisual) {
|
|
2243
|
+
const imageUrl = `${API_URL}/api/assets/${snowImage.id}/view`;
|
|
2244
|
+
heroVisual.style.backgroundImage = `url('${imageUrl}')`;
|
|
2245
|
+
heroVisual.style.backgroundSize = 'cover';
|
|
2246
|
+
heroVisual.style.backgroundPosition = 'center';
|
|
2247
|
+
heroVisual.style.backgroundRepeat = 'no-repeat';
|
|
2248
|
+
}
|
|
2249
|
+
}
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
} catch (error) {
|
|
2253
|
+
console.log('Hero image not uploaded yet:', error);
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2256
|
+
|
|
2257
|
+
// Load area showcase images
|
|
2258
|
+
async function loadAreaShowcase() {
|
|
2259
|
+
try {
|
|
2260
|
+
const API_URL = window.location.origin;
|
|
2261
|
+
// Try to load area-specific images
|
|
2262
|
+
const areas = ['nozawa-onsen', 'iiyama', 'myoko', 'karuizawa', 'shinano', 'komoro'];
|
|
2263
|
+
const areaGrid = document.getElementById('area-showcase-grid');
|
|
2264
|
+
if (!areaGrid) return;
|
|
2265
|
+
|
|
2266
|
+
// For now, show message - images should be uploaded with area tags
|
|
2267
|
+
areaGrid.innerHTML = areas.map(area => {
|
|
2268
|
+
const areaName = area.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
2269
|
+
return `
|
|
2270
|
+
<div class="area-card">
|
|
2271
|
+
<div class="area-image" style="background: linear-gradient(135deg, var(--orange-light), var(--orange-primary)); display: flex; align-items: center; justify-content: center; color: white; font-weight: 600; min-height: 200px;">
|
|
2272
|
+
Upload Image
|
|
2273
|
+
</div>
|
|
2274
|
+
<div class="area-content">
|
|
2275
|
+
<h4>${areaName}</h4>
|
|
2276
|
+
<p>Upload images via dashboard Assets section with area tags to display here.</p>
|
|
2277
|
+
</div>
|
|
2278
|
+
</div>
|
|
2279
|
+
`;
|
|
2280
|
+
}).join('');
|
|
2281
|
+
} catch (error) {
|
|
2282
|
+
console.log('Area showcase loading:', error);
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
// Load portfolio and profile images on initial load
|
|
2287
|
+
if (typeof loadPortfolioImages === 'function') {
|
|
2288
|
+
setTimeout(loadPortfolioImages, 500);
|
|
2289
|
+
}
|
|
2290
|
+
if (typeof loadProfileImage === 'function') {
|
|
2291
|
+
setTimeout(loadProfileImage, 500);
|
|
2292
|
+
}
|
|
2293
|
+
setTimeout(loadHeroImage, 500);
|
|
2294
|
+
setTimeout(loadAreaShowcase, 500);
|
|
2295
|
+
});
|
|
2296
|
+
|
|
2297
|
+
// Load portfolio images from assets (R2 stored) - ONLY actual uploaded images
|
|
2298
|
+
async function loadPortfolioImages() {
|
|
2299
|
+
try {
|
|
2300
|
+
const API_URL = window.location.origin;
|
|
2301
|
+
// Load portfolio category images
|
|
2302
|
+
const response = await fetch(`${API_URL}/api/assets?category=portfolio&type=image&limit=12`);
|
|
2303
|
+
const data = await response.json();
|
|
2304
|
+
|
|
2305
|
+
if (data.success && data.data && data.data.length > 0) {
|
|
2306
|
+
const gallery = document.getElementById('portfolio-gallery');
|
|
2307
|
+
if (gallery) {
|
|
2308
|
+
const images = data.data.filter(asset => asset.r2_key); // Only show images actually in R2
|
|
2309
|
+
|
|
2310
|
+
if (images.length > 0) {
|
|
2311
|
+
gallery.innerHTML = images.map(asset => {
|
|
2312
|
+
const imageUrl = `${API_URL}/api/assets/${asset.id}/view`;
|
|
2313
|
+
const title = asset.title || 'Mountain Photography';
|
|
2314
|
+
const metadata = typeof asset.metadata === 'string' ? JSON.parse(asset.metadata || '{}') : (asset.metadata || {});
|
|
2315
|
+
const location = metadata.location || '';
|
|
2316
|
+
|
|
2317
|
+
return `
|
|
2318
|
+
<div class="portfolio-item" onclick="window.location.href='./gallery'" style="cursor: pointer;">
|
|
2319
|
+
<img src="${imageUrl}"
|
|
2320
|
+
alt="${asset.alt_text || title}"
|
|
2321
|
+
class="portfolio-image"
|
|
2322
|
+
loading="lazy"
|
|
2323
|
+
onerror="this.style.display='none'">
|
|
2324
|
+
<div class="portfolio-overlay">
|
|
2325
|
+
<p class="portfolio-caption">${title}</p>
|
|
2326
|
+
${location ? `<p style="font-size: 0.9rem; opacity: 0.9; margin-top: 0.25rem;">📍 ${location}</p>` : ''}
|
|
2327
|
+
</div>
|
|
2328
|
+
</div>
|
|
2329
|
+
`;
|
|
2330
|
+
}).join('');
|
|
2331
|
+
} else {
|
|
2332
|
+
gallery.innerHTML = '<div style="text-align: center; padding: 3rem; color: var(--text-gray); grid-column: 1/-1;"><p>Upload Summit team's mountain photography via the dashboard to see images here.</p><p style="margin-top: 1rem;"><a href="./dashboard" style="color: var(--orange-primary); font-weight: 600;">Go to Dashboard →</a></p></div>';
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
} else {
|
|
2336
|
+
// Fallback: try loading all images if no portfolio category found
|
|
2337
|
+
const fallbackResponse = await fetch(`${API_URL}/api/assets?type=image&limit=12`);
|
|
2338
|
+
const fallbackData = await fallbackResponse.json();
|
|
2339
|
+
|
|
2340
|
+
const gallery = document.getElementById('portfolio-gallery');
|
|
2341
|
+
if (gallery) {
|
|
2342
|
+
if (fallbackData.success && fallbackData.data && fallbackData.data.length > 0) {
|
|
2343
|
+
const images = fallbackData.data.filter(asset => asset.r2_key);
|
|
2344
|
+
if (images.length > 0) {
|
|
2345
|
+
gallery.innerHTML = images.map(asset => {
|
|
2346
|
+
const imageUrl = `${API_URL}/api/assets/${asset.id}/view`;
|
|
2347
|
+
const title = asset.title || 'Mountain Photography';
|
|
2348
|
+
return `
|
|
2349
|
+
<div class="portfolio-item" onclick="window.location.href='./gallery'" style="cursor: pointer;">
|
|
2350
|
+
<img src="${imageUrl}"
|
|
2351
|
+
alt="${asset.alt_text || title}"
|
|
2352
|
+
class="portfolio-image"
|
|
2353
|
+
loading="lazy"
|
|
2354
|
+
onerror="this.style.display='none'">
|
|
2355
|
+
<div class="portfolio-overlay">
|
|
2356
|
+
<p class="portfolio-caption">${title}</p>
|
|
2357
|
+
</div>
|
|
2358
|
+
</div>
|
|
2359
|
+
`;
|
|
2360
|
+
}).join('');
|
|
2361
|
+
} else {
|
|
2362
|
+
gallery.innerHTML = '<div style="text-align: center; padding: 3rem; color: var(--text-gray); grid-column: 1/-1;"><p>No images uploaded yet. Upload Summit team's photography via the dashboard Assets section.</p><p style="margin-top: 1rem;"><a href="./dashboard" style="color: var(--orange-primary); font-weight: 600;">Upload Images →</a></p></div>';
|
|
2363
|
+
}
|
|
2364
|
+
} else {
|
|
2365
|
+
gallery.innerHTML = '<div style="text-align: center; padding: 3rem; color: var(--text-gray); grid-column: 1/-1;"><p>No images uploaded yet. Upload Summit team's photography via the dashboard Assets section.</p><p style="margin-top: 1rem;"><a href="./dashboard" style="color: var(--orange-primary); font-weight: 600;">Upload Images →</a></p></div>';
|
|
2366
|
+
}
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2369
|
+
} catch (error) {
|
|
2370
|
+
console.error('Error loading portfolio images:', error);
|
|
2371
|
+
const gallery = document.getElementById('portfolio-gallery');
|
|
2372
|
+
if (gallery) {
|
|
2373
|
+
gallery.innerHTML = '<div style="text-align: center; padding: 3rem; color: var(--text-gray); grid-column: 1/-1;"><p>Error loading images. Please try again or upload via dashboard.</p></div>';
|
|
2374
|
+
}
|
|
2375
|
+
}
|
|
2376
|
+
}
|
|
2377
|
+
|
|
2378
|
+
// Load Summit team's profile image - ONLY from R2, no placeholders
|
|
2379
|
+
async function loadProfileImage() {
|
|
2380
|
+
try {
|
|
2381
|
+
const API_URL = window.location.origin;
|
|
2382
|
+
const response = await fetch(`${API_URL}/api/assets?category=profile&type=image&limit=1`);
|
|
2383
|
+
const data = await response.json();
|
|
2384
|
+
|
|
2385
|
+
if (data.success && data.data && data.data.length > 0 && data.data[0].r2_key) {
|
|
2386
|
+
const profileImg = document.getElementById('Summit-profile-image');
|
|
2387
|
+
const placeholder = document.getElementById('profile-image-placeholder');
|
|
2388
|
+
if (profileImg) {
|
|
2389
|
+
profileImg.src = `${API_URL}/api/assets/${data.data[0].id}/view`;
|
|
2390
|
+
profileImg.onload = () => {
|
|
2391
|
+
if (placeholder) placeholder.style.display = 'none';
|
|
2392
|
+
};
|
|
2393
|
+
}
|
|
2394
|
+
} else {
|
|
2395
|
+
// Hide placeholder if no image uploaded
|
|
2396
|
+
const placeholder = document.getElementById('profile-image-placeholder');
|
|
2397
|
+
if (placeholder) {
|
|
2398
|
+
placeholder.textContent = 'Upload via Dashboard';
|
|
2399
|
+
placeholder.style.fontSize = '0.9rem';
|
|
2400
|
+
}
|
|
2401
|
+
}
|
|
2402
|
+
} catch (error) {
|
|
2403
|
+
console.log('Profile image not uploaded yet');
|
|
2404
|
+
}
|
|
2405
|
+
}
|
|
2406
|
+
|
|
2407
|
+
|
|
2408
|
+
// Make functions globally available
|
|
2409
|
+
window.toggleLanguageMenu = toggleLanguageMenu;
|
|
2410
|
+
window.changeLanguage = changeLanguage;
|
|
2411
|
+
window.loadPortfolioImages = loadPortfolioImages;
|
|
2412
|
+
window.loadProfileImage = loadProfileImage;
|
|
2413
|
+
</script>
|
|
2414
|
+
</body>
|
|
2415
|
+
</html>
|