From baafafabdb32f3cde9bd52ed495dbf2b52227841 Mon Sep 17 00:00:00 2001 From: ponzischeme89 Date: Wed, 13 May 2026 20:44:01 +1200 Subject: [PATCH] Design language tweaks, improvements --- src/lib/components/AboutPage.svelte | 149 +------ src/lib/components/CtaCard.svelte | 122 ++++++ src/lib/components/ErrorModal.svelte | 113 +---- src/lib/components/FounderStorySection.svelte | 254 +++++++++++ src/lib/components/HowItWorksSection.svelte | 8 +- src/lib/components/LocationPage.svelte | 130 +----- src/lib/components/ModalShell.svelte | 101 +++++ src/lib/components/PricingPage.svelte | 191 +-------- src/lib/components/PricingPlanCard.svelte | 224 ++++++++++ src/lib/components/PromiseSection.svelte | 123 ------ src/lib/components/ServiceLandingPage.svelte | 404 +++++++++--------- src/lib/components/SuccessModal.svelte | 82 +--- src/lib/components/ValuesSection.svelte | 264 ++++++++++-- src/lib/content/homepage.ts | 13 +- src/lib/styles/base.css | 15 + src/lib/styles/layout.css | 9 +- src/lib/styles/responsive.css | 29 +- src/lib/styles/sections.css | 8 +- src/lib/styles/variables.css | 34 ++ src/lib/types.ts | 4 +- src/lib/utils/pricing.ts | 19 + src/routes/+page.svelte | 4 +- 22 files changed, 1302 insertions(+), 998 deletions(-) create mode 100644 src/lib/components/CtaCard.svelte create mode 100644 src/lib/components/FounderStorySection.svelte create mode 100644 src/lib/components/ModalShell.svelte create mode 100644 src/lib/components/PricingPlanCard.svelte delete mode 100644 src/lib/components/PromiseSection.svelte create mode 100644 src/lib/utils/pricing.ts diff --git a/src/lib/components/AboutPage.svelte b/src/lib/components/AboutPage.svelte index 0dce5fb..ea8bca7 100644 --- a/src/lib/components/AboutPage.svelte +++ b/src/lib/components/AboutPage.svelte @@ -1,7 +1,7 @@ + +
+ {eyebrow} +

{title}

+

{description}

+ {ctaLabel} + {#if email || phone} + + {/if} +
+ + diff --git a/src/lib/components/ErrorModal.svelte b/src/lib/components/ErrorModal.svelte index 8c6460e..db749e1 100644 --- a/src/lib/components/ErrorModal.svelte +++ b/src/lib/components/ErrorModal.svelte @@ -1,4 +1,6 @@ - + diff --git a/src/lib/components/HowItWorksSection.svelte b/src/lib/components/HowItWorksSection.svelte index bc01df4..0443421 100644 --- a/src/lib/components/HowItWorksSection.svelte +++ b/src/lib/components/HowItWorksSection.svelte @@ -50,7 +50,7 @@ diff --git a/src/lib/components/ModalShell.svelte b/src/lib/components/ModalShell.svelte new file mode 100644 index 0000000..53f7a0f --- /dev/null +++ b/src/lib/components/ModalShell.svelte @@ -0,0 +1,101 @@ + + + + + diff --git a/src/lib/components/PricingPage.svelte b/src/lib/components/PricingPage.svelte index 19af29f..f4bfac8 100644 --- a/src/lib/components/PricingPage.svelte +++ b/src/lib/components/PricingPage.svelte @@ -4,40 +4,21 @@ import BookingSection from '$lib/components/BookingSection.svelte'; import Icon from '$lib/components/Icon.svelte'; import PageHeader from '$lib/components/PageHeader.svelte'; + import PricingPlanCard from '$lib/components/PricingPlanCard.svelte'; import TestimonialsSection from '$lib/components/TestimonialsSection.svelte'; + import { decoratePlans } from '$lib/utils/pricing'; import type { PricingPageContent, SiteSharedContent } from '$lib/types'; export let content: SiteSharedContent; export let pageContent: PricingPageContent; - const scrollDepthThreshold = 0.65; - const desktopPromptMediaQuery = '(min-width: 769px)'; - - function numericPrice(price: string) { - const value = Number(price.replace(/[^0-9.]/g, '')); - return Number.isFinite(value) ? value : Number.POSITIVE_INFINITY; - } - - function decoratePlans(plans: T[]) { - const sorted = [...plans] - .map((plan, index) => ({ plan, index, value: numericPrice(plan.price) })) - .sort((a, b) => a.value - b.value || a.index - b.index); - - const cheapestIndex = sorted[0]?.index ?? -1; - const mobileOrder = new Map(sorted.map((entry, order) => [entry.index, order])); - - return plans.map((plan, index) => ({ - ...plan, - isPopular: index === cheapestIndex, - mobileOrder: mobileOrder.get(index) ?? index - })); - } - let showMeetGreetPrompt = false; let dismissMeetGreetPrompt = false; let bookingInView = false; let promptShown = false; let canShowDesktopPrompt = false; + const desktopPromptMediaQuery = '(min-width: 769px)'; + const scrollDepthThreshold = 0.65; function revealMeetGreetPrompt() { if (dismissMeetGreetPrompt || bookingInView || promptShown || !canShowDesktopPrompt) { @@ -138,7 +119,7 @@ {#each pageContent.sections as section, index}
-
+
{#if section.icon}
@@ -162,27 +143,7 @@
{#each decoratePlans(section.plans) as plan} -
- {#if plan.isPopular} - Popular - {/if} - -

{plan.title}

-
{plan.price}
-

{plan.period}

- -
    - {#each plan.features as feature} -
  • {feature}
  • - {/each} -
- - Book a Meet & Greet -
+ {/each}
@@ -241,12 +202,6 @@ background: var(--off-white); } - .pricing-inner { - max-width: var(--max-w); - margin: 0 auto; - padding: 0 50px; - } - .pricing-trust { display: inline-flex; align-items: center; @@ -351,87 +306,6 @@ grid-template-columns: repeat(3, minmax(0, 1fr)); } - .pricing-plan-card { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - background: #fff; - border-radius: 28px; - padding: 30px 26px; - box-shadow: 0 14px 34px rgba(17, 20, 24, 0.05); - transition: - transform 0.18s cubic-bezier(0.22, 1, 0.36, 1), - box-shadow 0.22s ease, - border-color 0.22s ease; - } - - .pricing-plan-popular { - border: 2px solid var(--yellow); - } - - .pricing-plan-ribbon { - position: absolute; - top: 0; - left: 50%; - transform: translate(-50%, -50%); - padding: 6px 12px; - border-radius: 999px; - background: var(--yellow); - color: #000; - font-family: var(--font-head); - font-size: 11px; - font-weight: 700; - letter-spacing: 0.04em; - text-transform: uppercase; - } - - .pricing-plan-card h3 { - margin: 0; - font-family: var(--font-head); - font-size: 22px; - line-height: 1.2; - color: #000; - } - - .pricing-plan-price { - margin-top: 22px; - font-family: var(--font-head); - font-size: 52px; - line-height: 0.95; - letter-spacing: -0.05em; - color: #000; - } - - .pricing-plan-period { - margin: 10px 0 0; - color: #5e6167; - font-size: 14px; - text-transform: uppercase; - letter-spacing: 0.08em; - } - - .pricing-plan-features { - width: 100%; - margin: 24px 0 0; - padding: 0; - list-style: none; - } - - .pricing-plan-features li { - padding: 15px 0; - border-top: 1px solid rgba(17, 20, 24, 0.08); - color: #34363a; - font-size: 16px; - line-height: 1.5; - } - - .pricing-plan-cta { - margin-top: 24px; - font-family: var(--font-head); - } - .pricing-section-mobile-cta, .pricing-mobile-consult { display: none; @@ -556,31 +430,6 @@ } } - @media (hover: hover) { - .pricing-plan-card:hover { - transform: translateY(-6px) scale(1.012); - box-shadow: 0 22px 44px rgba(17, 20, 24, 0.1); - } - } - - .pricing-plan-card:active { - transform: translateY(-2px) scale(0.992); - } - - :global(.reveal-ready.reveal-block) { - opacity: 0; - transform: translate3d(0, var(--reveal-distance, 24px), 0); - transition: - opacity 0.55s ease, - transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1); - transition-delay: var(--reveal-delay, 0ms); - } - - :global(.reveal-visible.reveal-block) { - opacity: 1; - transform: translate3d(0, 0, 0); - } - @media (max-width: 1024px) { .pricing-plan-grid, .pricing-plan-grid-three { @@ -589,18 +438,6 @@ } @media (max-width: 768px) { - .pricing-inner { - padding: 0 24px; - } - - .pricing-page-hero { - padding: 56px 0 20px; - } - - .pricing-page-hero h1 { - font-size: 34px; - } - .pricing-trust { gap: 10px; padding: 10px 14px; @@ -635,22 +472,6 @@ gap: 18px; } - .pricing-plan-card { - order: var(--mobile-order, 0); - } - - .pricing-plan-card { - padding: 28px 22px; - } - - .pricing-plan-price { - font-size: 46px; - } - - .pricing-plan-cta { - display: none; - } - .pricing-section-mobile-cta { display: flex; width: fit-content; diff --git a/src/lib/components/PricingPlanCard.svelte b/src/lib/components/PricingPlanCard.svelte new file mode 100644 index 0000000..1c69b74 --- /dev/null +++ b/src/lib/components/PricingPlanCard.svelte @@ -0,0 +1,224 @@ + + +
+ {#if plan.isPopular} + Popular + {/if} +

{plan.title}

+
{plan.price}
+

{plan.period}

+
    + {#each plan.features as feature} +
  • {feature}
  • + {/each} +
+ Book a Meet & Greet +
+ + diff --git a/src/lib/components/PromiseSection.svelte b/src/lib/components/PromiseSection.svelte deleted file mode 100644 index 0abd04c..0000000 --- a/src/lib/components/PromiseSection.svelte +++ /dev/null @@ -1,123 +0,0 @@ - - -
-
-
-

- - {promise.title} -
- {promise.subtitle} -
- - {promise.title} - {promise.subtitle} - -

- - {#each promise.body as paragraph, idx} -

- {paragraph} - {#if idx === promise.body.length - 1} - {promise.emphasis} - {/if} -

- {/each} - - {promise.cta.label} -
- -
-
- {#if promiseEnhanced} - - {:else} - {promise.imageAlt} - {/if} -
-
-
-
- - diff --git a/src/lib/components/ServiceLandingPage.svelte b/src/lib/components/ServiceLandingPage.svelte index 899f279..8f86671 100644 --- a/src/lib/components/ServiceLandingPage.svelte +++ b/src/lib/components/ServiceLandingPage.svelte @@ -1,36 +1,21 @@
@@ -89,7 +150,7 @@ {#if pageContent.highlight}
-
+

{pageContent.highlight.eyebrow}

@@ -144,7 +205,7 @@ {/if}
-
+

{pageContent.benefits.title}

{#if pageContent.benefits.intro} @@ -154,8 +215,12 @@
- {#each benefitCards as benefit} -
+ {#each benefitCards as benefit, index} +
@@ -169,10 +234,34 @@
- -
+
@@ -181,7 +270,7 @@
-
+

{pageContent.pricing.title}

{#if pageContent.pricing.intro} @@ -191,27 +280,7 @@
{#each pricingPlans as plan} -
- {#if plan.isPopular} - Popular - {/if} - -

{plan.title}

-
{plan.price}
-

{plan.period}

- -
    - {#each plan.features as feature} -
  • {feature}
  • - {/each} -
- - Book a Meet & Greet -
+ {/each}
@@ -250,7 +319,7 @@ {#if showRelatedServices}