diff --git a/apps/frontend/src/app.css b/apps/frontend/src/app.css
index 5efea19..a758943 100644
--- a/apps/frontend/src/app.css
+++ b/apps/frontend/src/app.css
@@ -9,131 +9,145 @@
@layer base {
:root {
- --background: 24 33.3333% 97.0588%;
- --foreground: 0 0% 10.1961%;
- --card: 24 33.3333% 97.0588%;
- --card-foreground: 0 0% 10.1961%;
- --popover: 24 33.3333% 97.0588%;
- --popover-foreground: 0 0% 10.1961%;
- --primary: 0 55.7789% 39.0196%;
+ /* Backgrounds - Clean neutral grays */
+ --background: 0 0% 98%;
+ --foreground: 222 47% 11%;
+ --card: 0 0% 100%;
+ --card-foreground: 222 47% 11%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 222 47% 11%;
+
+ /* Primary - Modern slate/blue (Stripe-inspired) */
+ --primary: 221 83% 53%;
--primary-foreground: 0 0% 100%;
- --secondary: 43.0769 90.6977% 91.5686%;
- --secondary-foreground: 39.8438 100% 25.098%;
- --muted: 22.5 21.0526% 92.549%;
- --muted-foreground: 33.3333 5.4545% 32.3529%;
- --accent: 48 96.4912% 88.8235%;
- --accent-foreground: 0 62.8205% 30.5882%;
- --destructive: 0 70% 35.2941%;
+
+ /* Secondary - Soft gray-blue */
+ --secondary: 214 32% 91%;
+ --secondary-foreground: 222 47% 11%;
+
+ /* Muted - Light grays */
+ --muted: 210 40% 96%;
+ --muted-foreground: 215 16% 47%;
+
+ /* Accent - Vibrant blue */
+ --accent: 217 91% 60%;
+ --accent-foreground: 0 0% 100%;
+
+ /* Destructive - Red for errors */
+ --destructive: 0 84% 60%;
--destructive-foreground: 0 0% 100%;
- --border: 37.7143 63.6364% 89.2157%;
- --input: 37.7143 63.6364% 89.2157%;
- --ring: 0 55.7789% 39.0196%;
- --chart-1: 0 73.7089% 41.7647%;
- --chart-2: 0 55.7789% 39.0196%;
- --chart-3: 0 62.8205% 30.5882%;
- --chart-4: 25.9649 90.4762% 37.0588%;
- --chart-5: 22.7273 82.5% 31.3725%;
- --sidebar: 22.5 21.0526% 92.549%;
- --sidebar-foreground: 0 0% 10.1961%;
- --sidebar-primary: 0 55.7789% 39.0196%;
+
+ /* Borders & Inputs - Subtle gray */
+ --border: 214 32% 91%;
+ --input: 214 32% 91%;
+ --ring: 221 83% 53%;
+
+ /* Charts - Modern palette */
+ --chart-1: 221 83% 53%;
+ --chart-2: 142 76% 36%;
+ --chart-3: 262 83% 58%;
+ --chart-4: 41 96% 50%;
+ --chart-5: 0 84% 60%;
+
+ /* Sidebar */
+ --sidebar: 0 0% 98%;
+ --sidebar-foreground: 222 47% 11%;
+ --sidebar-primary: 221 83% 53%;
--sidebar-primary-foreground: 0 0% 100%;
- --sidebar-accent: 48 96.4912% 88.8235%;
- --sidebar-accent-foreground: 0 62.8205% 30.5882%;
- --sidebar-border: 37.7143 63.6364% 89.2157%;
- --sidebar-ring: 0 55.7789% 39.0196%;
- --font-sans: Poppins, sans-serif;
- --font-serif: Libre Baskerville, serif;
- --font-mono: IBM Plex Mono, monospace;
- --radius: 0.375rem;
- --shadow-x: 1px;
- --shadow-y: 1px;
- --shadow-blur: 16px;
- --shadow-spread: -2px;
- --shadow-opacity: 0.12;
- --shadow-color: hsl(0 63% 18%);
- --shadow-2xs: 1px 1px 16px -2px hsl(0 63% 18% / 0.06);
- --shadow-xs: 1px 1px 16px -2px hsl(0 63% 18% / 0.06);
- --shadow-sm:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 1px 2px -3px hsl(0 63% 18% / 0.12);
- --shadow:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 1px 2px -3px hsl(0 63% 18% / 0.12);
- --shadow-md:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 2px 4px -3px hsl(0 63% 18% / 0.12);
- --shadow-lg:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 4px 6px -3px hsl(0 63% 18% / 0.12);
- --shadow-xl:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 8px 10px -3px hsl(0 63% 18% / 0.12);
- --shadow-2xl: 1px 1px 16px -2px hsl(0 63% 18% / 0.3);
- --tracking-normal: 0em;
- --spacing: 0.25rem;
+ --sidebar-accent: 214 32% 91%;
+ --sidebar-accent-foreground: 222 47% 11%;
+ --sidebar-border: 214 32% 91%;
+ --sidebar-ring: 221 83% 53%;
+
+ /* Typography */
+ --font-sans: Fredoka, sans-serif;
+ --font-serif: Georgia, serif;
+ --font-mono: ui-monospace, monospace;
+
+ /* Design tokens */
+ --radius: 0.5rem;
+
+ /* Shadows - Neutral */
+ --shadow-color: 220 9% 46%;
+ --shadow-2xs: 0 1px 2px 0 hsl(220 9% 46% / 0.05);
+ --shadow-xs: 0 1px 3px 0 hsl(220 9% 46% / 0.1);
+ --shadow-sm: 0 2px 4px 0 hsl(220 9% 46% / 0.1);
+ --shadow: 0 4px 6px -1px hsl(220 9% 46% / 0.1);
+ --shadow-md: 0 6px 12px -2px hsl(220 9% 46% / 0.15);
+ --shadow-lg: 0 10px 20px -5px hsl(220 9% 46% / 0.2);
+ --shadow-xl: 0 20px 25px -5px hsl(220 9% 46% / 0.25);
+ --shadow-2xl: 0 25px 50px -12px hsl(220 9% 46% / 0.3);
}
.dark {
- --background: 24 9.8039% 10%;
- --foreground: 60 4.7619% 95.8824%;
- --card: 12 6.4935% 15.098%;
- --card-foreground: 60 4.7619% 95.8824%;
- --popover: 12 6.4935% 15.098%;
- --popover-foreground: 60 4.7619% 95.8824%;
- --primary: 0 73.7089% 41.7647%;
- --primary-foreground: 24 33.3333% 97.0588%;
- --secondary: 22.7273 82.5% 31.3725%;
- --secondary-foreground: 48 96.4912% 88.8235%;
- --muted: 24 8.7719% 11.1765%;
- --muted-foreground: 24 5.7471% 82.9412%;
- --accent: 25.9649 90.4762% 37.0588%;
- --accent-foreground: 48 96.4912% 88.8235%;
- --destructive: 0 84.2365% 60.1961%;
- --destructive-foreground: 0 0% 100%;
- --border: 30 6.25% 25.098%;
- --input: 30 6.25% 25.098%;
- --ring: 0 73.7089% 41.7647%;
- --chart-1: 0 90.604% 70.7843%;
- --chart-2: 0 84.2365% 60.1961%;
- --chart-3: 0 72.2222% 50.5882%;
- --chart-4: 43.2558 96.4126% 56.2745%;
- --chart-5: 37.6923 92.126% 50.1961%;
- --sidebar: 24 9.8039% 10%;
- --sidebar-foreground: 60 4.7619% 95.8824%;
- --sidebar-primary: 0 73.7089% 41.7647%;
- --sidebar-primary-foreground: 24 33.3333% 97.0588%;
- --sidebar-accent: 25.9649 90.4762% 37.0588%;
- --sidebar-accent-foreground: 48 96.4912% 88.8235%;
- --sidebar-border: 30 6.25% 25.098%;
- --sidebar-ring: 0 73.7089% 41.7647%;
- --font-sans: Poppins, sans-serif;
- --font-serif: Libre Baskerville, serif;
- --font-mono: IBM Plex Mono, monospace;
- --radius: 0.375rem;
- --shadow-x: 1px;
- --shadow-y: 1px;
- --shadow-blur: 16px;
- --shadow-spread: -2px;
- --shadow-opacity: 0.12;
- --shadow-color: hsl(0 63% 18%);
- --shadow-2xs: 1px 1px 16px -2px hsl(0 63% 18% / 0.06);
- --shadow-xs: 1px 1px 16px -2px hsl(0 63% 18% / 0.06);
- --shadow-sm:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 1px 2px -3px hsl(0 63% 18% / 0.12);
- --shadow:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 1px 2px -3px hsl(0 63% 18% / 0.12);
- --shadow-md:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 2px 4px -3px hsl(0 63% 18% / 0.12);
- --shadow-lg:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 4px 6px -3px hsl(0 63% 18% / 0.12);
- --shadow-xl:
- 1px 1px 16px -2px hsl(0 63% 18% / 0.12),
- 1px 8px 10px -3px hsl(0 63% 18% / 0.12);
- --shadow-2xl: 1px 1px 16px -2px hsl(0 63% 18% / 0.3);
+ /* Backgrounds - Dark mode */
+ --background: 222 47% 11%;
+ --foreground: 210 40% 98%;
+ --card: 222 47% 15%;
+ --card-foreground: 210 40% 98%;
+ --popover: 222 47% 15%;
+ --popover-foreground: 210 40% 98%;
+
+ /* Primary - Brighter blue for dark mode */
+ --primary: 217 91% 60%;
+ --primary-foreground: 222 47% 11%;
+
+ /* Secondary */
+ --secondary: 217 33% 17%;
+ --secondary-foreground: 210 40% 98%;
+
+ /* Muted */
+ --muted: 223 47% 11%;
+ --muted-foreground: 215 20% 65%;
+
+ /* Accent */
+ --accent: 217 91% 60%;
+ --accent-foreground: 222 47% 11%;
+
+ /* Destructive */
+ --destructive: 0 63% 50%;
+ --destructive-foreground: 210 40% 98%;
+
+ /* Borders & Inputs */
+ --border: 217 33% 17%;
+ --input: 217 33% 17%;
+ --ring: 217 91% 60%;
+
+ /* Charts */
+ --chart-1: 217 91% 60%;
+ --chart-2: 142 76% 36%;
+ --chart-3: 262 83% 58%;
+ --chart-4: 41 96% 50%;
+ --chart-5: 0 84% 60%;
+
+ /* Sidebar */
+ --sidebar: 222 47% 11%;
+ --sidebar-foreground: 210 40% 98%;
+ --sidebar-primary: 217 91% 60%;
+ --sidebar-primary-foreground: 222 47% 11%;
+ --sidebar-accent: 217 33% 17%;
+ --sidebar-accent-foreground: 210 40% 98%;
+ --sidebar-border: 217 33% 17%;
+ --sidebar-ring: 217 91% 60%;
+
+ /* Typography */
+ --font-sans: Fredoka, sans-serif;
+ --font-serif: Georgia, serif;
+ --font-mono: ui-monospace, monospace;
+
+ /* Design tokens */
+ --radius: 0.5rem;
+
+ /* Shadows - Dark mode */
+ --shadow-color: 0 0% 0%;
+ --shadow-2xs: 0 1px 2px 0 hsl(0 0% 0% / 0.3);
+ --shadow-xs: 0 1px 3px 0 hsl(0 0% 0% / 0.4);
+ --shadow-sm: 0 2px 4px 0 hsl(0 0% 0% / 0.4);
+ --shadow: 0 4px 6px -1px hsl(0 0% 0% / 0.4);
+ --shadow-md: 0 6px 12px -2px hsl(0 0% 0% / 0.5);
+ --shadow-lg: 0 10px 20px -5px hsl(0 0% 0% / 0.6);
+ --shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / 0.7);
+ --shadow-2xl: 0 25px 50px -12px hsl(0 0% 0% / 0.75);
}
}
@@ -147,19 +161,20 @@
scroll-behavior: smooth;
font-family:
"Fredoka",
- system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
"Helvetica Neue",
Arial,
- "Noto Sans",
- sans-serif,
- "Apple Color Emoji",
- "Segoe UI Emoji",
- "Segoe UI Symbol",
- "Noto Color Emoji";
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-weight: 400;
+ letter-spacing: -0.02em;
}
}
@@ -174,8 +189,49 @@
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
+
+ /* Stripe-inspired gradients */
+ .gradient-mesh {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ }
+
+ .gradient-success {
+ background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%);
+ }
+
+ .gradient-error {
+ background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
+ }
+
+ /* Smooth transitions */
+ .transition-smooth {
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ }
+
+ /* Glass morphism effect */
+ .glass {
+ background: rgba(255, 255, 255, 0.7);
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ }
}
.all-reset {
all: unset;
}
+
+/* Custom focus styles for better accessibility */
+@layer base {
+ *:focus-visible {
+ @apply outline-none ring-2 ring-primary ring-offset-2;
+ }
+}
+
+/* Smooth page transitions */
+@layer base {
+ @media (prefers-reduced-motion: no-preference) {
+ html {
+ scroll-behavior: smooth;
+ }
+ }
+}
diff --git a/apps/frontend/src/lib/components/ui/input/input.svelte b/apps/frontend/src/lib/components/ui/input/input.svelte
index 4e64eb4..1e629b6 100644
--- a/apps/frontend/src/lib/components/ui/input/input.svelte
+++ b/apps/frontend/src/lib/components/ui/input/input.svelte
@@ -25,9 +25,8 @@
span]:line-clamp-1",
-
!overrideClasses &&
- "flex w-full items-center justify-between rounded-md border border-input bg-background shadow-[inset_0_3px_8px_0_rgba(0,0,0,0.15)] file:border-0 file:bg-transparent file:font-medium placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
+ "flex w-full items-center justify-between rounded-lg border border-input bg-white shadow-sm transition-all file:border-0 file:bg-transparent file:font-medium placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground [&>span]:line-clamp-1",
inputSizes[inputSize],
- TRANSITION_COLORS,
className,
)}
{...restProps}
diff --git a/apps/frontend/src/lib/domains/checkout/checkout-steps-indicator.svelte b/apps/frontend/src/lib/domains/checkout/checkout-steps-indicator.svelte
index 5faa2a3..6c71b0f 100644
--- a/apps/frontend/src/lib/domains/checkout/checkout-steps-indicator.svelte
+++ b/apps/frontend/src/lib/domains/checkout/checkout-steps-indicator.svelte
@@ -97,17 +97,15 @@
-
+
{#each checkoutSteps as step, index}
handleStepClick(index, step.id)}
onkeydown={(e) => {
@@ -120,23 +118,28 @@
>
- {index + 1}
+ {#if index < activeStepIndex}
+
+
+
+ {:else}
+ {index + 1}
+ {/if}
{step.label}
@@ -145,10 +148,10 @@
{#if index !== checkoutSteps.length - 1}
{/if}
diff --git a/apps/frontend/src/lib/domains/checkout/payment-summary.svelte b/apps/frontend/src/lib/domains/checkout/payment-summary.svelte
index 0f4559a..fb0f5ba 100644
--- a/apps/frontend/src/lib/domains/checkout/payment-summary.svelte
+++ b/apps/frontend/src/lib/domains/checkout/payment-summary.svelte
@@ -24,73 +24,77 @@
});
-
-
Payment Summary
-
+
+
Order Summary
{#if !calculating}
{#if $productStore}
-
-
{$productStore.title}
-
{$productStore.description}
+
+
+ {$productStore.title}
+
+
+ {$productStore.description}
+
{/if}
-
-
-
Base Price
-
{convertAndFormatCurrency(priceDetails.basePrice)}
+
+
+ Base Price
+
+ {convertAndFormatCurrency(priceDetails.basePrice)}
+
{#if priceDetails.discountAmount > 0}
-
-
Discount
-
-{convertAndFormatCurrency(
- priceDetails.discountAmount,
- )}
+
+ Discount
+
+ -{convertAndFormatCurrency(priceDetails.discountAmount)}
+
-
-
Display Price
-
{convertAndFormatCurrency(
- priceDetails.displayPrice,
- )}
+
+ Display Price
+
+ {convertAndFormatCurrency(priceDetails.displayPrice)}
+
{/if}
-
-
-
Total ({$currencyStore.code})
-
{convertAndFormatCurrency(priceDetails.orderPrice)}
+
+
+ Total ({$currencyStore.code})
+
+
+ {convertAndFormatCurrency(priceDetails.orderPrice)}
+
+
+
+
+
+
+
+
+
+
+
Secure Checkout
+
+ Your payment information is encrypted and secure
+
+
{:else}
-
-
Calculating...
+
{/if}
-
-
-
-
Important Information:
-
- Price includes all applicable taxes and fees
-
- Cancellation and refund policies may apply as per our terms of
- service
-
- Payment will be processed securely upon order confirmation
-
-
diff --git a/apps/frontend/src/routes/(main)/+layout.svelte b/apps/frontend/src/routes/(main)/+layout.svelte
index a16400e..159567a 100644
--- a/apps/frontend/src/routes/(main)/+layout.svelte
+++ b/apps/frontend/src/routes/(main)/+layout.svelte
@@ -1,13 +1,9 @@
-
-
-
-
+
+
{@render children?.()}
-
-
-
-
-{#if showScrollTop}
-
-
-
-{/if}
diff --git a/apps/frontend/src/routes/(main)/[pageid]/+page.svelte b/apps/frontend/src/routes/(main)/[pageid]/+page.svelte
deleted file mode 100644
index b69a606..0000000
--- a/apps/frontend/src/routes/(main)/[pageid]/+page.svelte
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- {#if data.data}
-
{data.data.title}
-
{data.data.description}
-
- Either show the user the product as being valid and redirecting them
- to the checkout
-
- {:else}
-
Show the user an error around "page not found" or "expired link"
- {/if}
-
diff --git a/apps/frontend/src/routes/(main)/[pageid]/+page.server.ts b/apps/frontend/src/routes/(main)/[plid]/+page.server.ts
similarity index 67%
rename from apps/frontend/src/routes/(main)/[pageid]/+page.server.ts
rename to apps/frontend/src/routes/(main)/[plid]/+page.server.ts
index 39af3dd..e640d87 100644
--- a/apps/frontend/src/routes/(main)/[pageid]/+page.server.ts
+++ b/apps/frontend/src/routes/(main)/[plid]/+page.server.ts
@@ -2,6 +2,6 @@ import { getProductUseCases } from "$lib/domains/product/usecases";
import type { PageServerLoad } from "./$types";
export const load: PageServerLoad = async ({ params }) => {
- const pid = params.pageid;
- return await getProductUseCases().getProductByLinkId(pid);
+ const plid = params.plid;
+ return await getProductUseCases().getProductByLinkId(plid);
};
diff --git a/apps/frontend/src/routes/(main)/[plid]/+page.svelte b/apps/frontend/src/routes/(main)/[plid]/+page.svelte
new file mode 100644
index 0000000..b7770ac
--- /dev/null
+++ b/apps/frontend/src/routes/(main)/[plid]/+page.svelte
@@ -0,0 +1,107 @@
+
+
+
+
+ {#if data.data}
+
+
+
+
+
+ {data.data.title}
+
+
+ {#if data.data.description}
+
+ {data.data.description}
+
+ {/if}
+
+
+
+
+ Redirecting you to checkout...
+
+
+ {:else}
+
+
+
+
+
Page Not Found
+
+
+ The link you followed may be expired or invalid. Please contact support for assistance.
+
+
+
+
+ {/if}
+
+
+
+
diff --git a/apps/frontend/src/routes/(main)/checkout/[sid]/[plid]/+page.svelte b/apps/frontend/src/routes/(main)/checkout/[sid]/[plid]/+page.svelte
index 2027aaf..643cb6d 100644
--- a/apps/frontend/src/routes/(main)/checkout/[sid]/[plid]/+page.svelte
+++ b/apps/frontend/src/routes/(main)/checkout/[sid]/[plid]/+page.svelte
@@ -44,25 +44,50 @@
});
-
-
- {#if !pageData.data || !!pageData.error}
-
-
-
-
Product not found
-
Something went wrong, please try again or contact us
+
+ {#if !pageData.data || !!pageData.error}
+
+
+
+
+
Product Not Found
+
+ Something went wrong. Please try again or contact support for assistance.
+
+
- {:else if checkoutVM.checkoutStep === CheckoutStep.Confirmation}
-
+
+ {:else if checkoutVM.checkoutStep === CheckoutStep.Confirmation}
+
+
+
+
+
+ {:else}
+
+
+
+
+
- {:else}
-
-
-
-
+
+
+
+
+
+
{#if checkoutVM.loading}
{:else if checkoutVM.checkoutStep === CheckoutStep.Initial}
@@ -74,16 +99,33 @@
{/if}
-
+ {/if}
+
+
diff --git a/apps/frontend/src/routes/(main)/checkout/success/+page.svelte b/apps/frontend/src/routes/(main)/checkout/success/+page.svelte
index 2ce8c2d..677833d 100644
--- a/apps/frontend/src/routes/(main)/checkout/success/+page.svelte
+++ b/apps/frontend/src/routes/(main)/checkout/success/+page.svelte
@@ -1,41 +1,98 @@
-
-
-
-
-
+
+
+
+
+
-
Booking confirmed
+
+
Order Confirmed!
-
- Thank you for booking your flight! Your order has been placed
- successfully. You will receive a confirmation email shortly.
-
-
- In it you will not only find the booking details, but also a
- tracking number for your flight.
+
+
+ Thank you for your order! Your payment has been processed successfully.
+
+
+
+
+
+
+
+ We'll Be In Touch
+
+
+ Our team will reach back to you soon with order confirmation and details.
+
+
+
+
+
+
+
+
+
+ Status
+
+
+ Processing
+
+
+
+
+ Confirmation
+
+
+ Via Contact
+
+
+
+
-
+
+
+
diff --git a/apps/frontend/src/routes/(main)/checkout/terminated/+page.svelte b/apps/frontend/src/routes/(main)/checkout/terminated/+page.svelte
index 02bdbd7..8046293 100644
--- a/apps/frontend/src/routes/(main)/checkout/terminated/+page.svelte
+++ b/apps/frontend/src/routes/(main)/checkout/terminated/+page.svelte
@@ -2,9 +2,10 @@
import { page } from "$app/state";
import Icon from "$lib/components/atoms/icon.svelte";
import Title from "$lib/components/atoms/title.svelte";
- import MaxWidthWrapper from "$lib/components/molecules/max-width-wrapper.svelte";
import { onMount } from "svelte";
- import CloseIcon from "~icons/mdi/window-close";
+ import ExclamationIcon from "~icons/heroicons/exclamation-triangle-20-solid";
+ import ClockIcon from "~icons/heroicons/clock-20-solid";
+ import SupportIcon from "~icons/heroicons/chat-bubble-left-right-20-solid";
let canRedirect = $state(false);
@@ -18,25 +19,90 @@
});
-
-
-
-
-
+
+
+
+
+
-
Session Terminated
-
- Unfortunately, your session has been terminated due to inactivity
- or something went wrong, please contact us to walk through the
- steps again.
+
+
Session Terminated
+
+
+
+ Your checkout session has been terminated. This may have occurred due to inactivity or a connection issue.
+
+
+
+
+
+
+
+ Session Timeout
+
+
+ Sessions expire after a period of inactivity for security.
+
+
+
+
+
+
+
+
+ Need Help?
+
+
+ Contact our support team to continue your order.
+
+
+
+
+
+
-
+
+
+