feat: redesign homepage, add global footer, fix carousel font
Homepage: restored original v0 design, replaced lorem ipsum with real service descriptions, added BusinessHours (Opening Hours) section, alternating bg-gray-50 section backgrounds. Layout: added global sticky footer (hidden on /admin/schedule, /account, and ?format=pdf pages), wrapped content in min-h-screen flex layout. PortfolioCarousel: set heading to Playfair Display.
This commit is contained in:
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
<section class="w-full overflow-hidden py-16">
|
<section class="w-full overflow-hidden py-16">
|
||||||
<div class="mx-auto max-w-6xl px-6">
|
<div class="mx-auto max-w-6xl px-6">
|
||||||
<h2 class="mb-12 text-center text-2xl font-semibold">Our Portfolio</h2>
|
<h2 class="mb-12 text-center font-['Playfair_Display'] text-2xl font-semibold">Our Portfolio</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative w-full overflow-hidden">
|
<div class="relative w-full overflow-hidden">
|
||||||
|
|||||||
@@ -6,9 +6,16 @@
|
|||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
import { authStore } from '$lib/stores/auth.svelte';
|
import { authStore } from '$lib/stores/auth.svelte';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
|
||||||
const { children } = $props();
|
const { children } = $props();
|
||||||
|
|
||||||
|
let hideFooter = $derived(
|
||||||
|
$page.url.pathname === '/admin/schedule' ||
|
||||||
|
$page.url.pathname === '/account' ||
|
||||||
|
$page.url.searchParams.get('format') === 'pdf'
|
||||||
|
);
|
||||||
|
|
||||||
// Default to 'top-center' (mobile-first approach)
|
// Default to 'top-center' (mobile-first approach)
|
||||||
let toasterPosition = $state<'top-center' | 'bottom-center'>('top-center');
|
let toasterPosition = $state<'top-center' | 'bottom-center'>('top-center');
|
||||||
|
|
||||||
@@ -59,10 +66,11 @@
|
|||||||
/>
|
/>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
|
<div class="flex min-h-screen flex-col">
|
||||||
<NavBar />
|
<NavBar />
|
||||||
<Toaster position={toasterPosition} />
|
<Toaster position={toasterPosition} />
|
||||||
|
|
||||||
<main class="pt-16">
|
<main class="flex-1 pt-16">
|
||||||
{#if authStore.currentUser?.role === 'unverified_email'}
|
{#if authStore.currentUser?.role === 'unverified_email'}
|
||||||
<div class="w-full bg-red-600 py-2 pr-8 pl-8 text-center text-sm font-medium text-white">
|
<div class="w-full bg-red-600 py-2 pr-8 pl-8 text-center text-sm font-medium text-white">
|
||||||
Please verify your email address to continue. Didn't recieve the email? Check your spam
|
Please verify your email address to continue. Didn't recieve the email? Check your spam
|
||||||
@@ -79,6 +87,13 @@
|
|||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
{#if !hideFooter}
|
||||||
|
<footer class="border-t py-3 text-center text-xs text-gray-500 md:py-4 md:text-sm">
|
||||||
|
© {new Date().getFullYear()} Crussell Nails. All rights reserved.
|
||||||
|
</footer>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@media print {
|
@media print {
|
||||||
:global(nav) {
|
:global(nav) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { resolve } from '$app/paths';
|
import { resolve } from '$app/paths';
|
||||||
import { Button } from '$lib/components/ui/button';
|
import { Button } from '$lib/components/ui/button';
|
||||||
import PortfolioCarousel from '$lib/components/layout/PortfolioCarousel.svelte';
|
import PortfolioCarousel from '$lib/components/layout/PortfolioCarousel.svelte';
|
||||||
|
import BusinessHours from '$lib/components/layout/BusinessHours.svelte';
|
||||||
import { authStore } from '$lib/stores/auth.svelte';
|
import { authStore } from '$lib/stores/auth.svelte';
|
||||||
import { Skeleton } from '$lib/components/ui/skeleton';
|
import { Skeleton } from '$lib/components/ui/skeleton';
|
||||||
|
|
||||||
@@ -103,7 +104,6 @@
|
|||||||
|
|
||||||
<section class="py-20 text-center">
|
<section class="py-20 text-center">
|
||||||
{#if authStore.isLoading}
|
{#if authStore.isLoading}
|
||||||
<!-- Skeleton loading state -->
|
|
||||||
<div class="m-2 mb-4">
|
<div class="m-2 mb-4">
|
||||||
<Skeleton class="mx-auto h-10 w-80 max-w-full" />
|
<Skeleton class="mx-auto h-10 w-80 max-w-full" />
|
||||||
</div>
|
</div>
|
||||||
@@ -133,56 +133,50 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="mx-auto max-w-4xl px-6 py-16">
|
<section class="bg-gray-50">
|
||||||
<h2 class="mb-8 text-center text-2xl font-semibold">Our Services</h2>
|
<div class="mx-auto max-w-4xl px-6 py-16">
|
||||||
|
<h2 class="mb-8 text-center font-['Playfair_Display'] text-2xl font-semibold">Our Services</h2>
|
||||||
<div class="grid grid-cols-1 gap-8 md:grid-cols-4">
|
<div class="grid grid-cols-1 gap-8 md:grid-cols-4">
|
||||||
<div class="rounded-lg border p-6">
|
<div class="rounded-lg border p-6">
|
||||||
<h3 class="mb-2 text-lg font-semibold">Hands</h3>
|
<h3 class="mb-2 text-lg font-semibold">Hands</h3>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
Lorem hand ipsum nail dolor art sit paint amet, skin consectetur cuticle adipiscing file
|
Gel polish, nail art, and natural nail care — finished with a soothing hand massage.
|
||||||
elit.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-lg border p-6">
|
<div class="rounded-lg border p-6">
|
||||||
<h3 class="mb-2 text-lg font-semibold">Feet</h3>
|
<h3 class="mb-2 text-lg font-semibold">Feet</h3>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
Lorem foot ipsum nail dolor art sit paint amet, skin consectetur cuticle adipiscing file
|
Luxurious pedicures with exfoliation, cuticle care, and a long-lasting polish finish.
|
||||||
elit.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-lg border p-6">
|
<div class="rounded-lg border p-6">
|
||||||
<h3 class="mb-2 text-lg font-semibold">Brows</h3>
|
<h3 class="mb-2 text-lg font-semibold">Brows</h3>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
Lorem brow ipsum eye dolor art sit shape amet, tint consectetur colour adipiscing tweaze
|
Expert shaping, tinting, and lamination for brows that frame your face perfectly.
|
||||||
elit.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-lg border p-6">
|
<div class="rounded-lg border p-6">
|
||||||
<h3 class="mb-2 text-lg font-semibold">Wax</h3>
|
<h3 class="mb-2 text-lg font-semibold">Wax</h3>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
Lorem wax ipsum leg dolor body sit sticky amet, back consectetur sack adipiscing crack elit.
|
Gentle waxing for face, body, and brows — smooth results with minimal discomfort.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<PortfolioCarousel />
|
<PortfolioCarousel />
|
||||||
|
|
||||||
{#if !authStore.isAuthenticated}
|
<section class="bg-gray-50">
|
||||||
<section class="bg-gray-50 py-16">
|
<div class="mx-auto max-w-4xl px-6 py-16">
|
||||||
<div class="mx-auto max-w-3xl px-6 text-center">
|
<h2 class="mb-8 text-center font-['Playfair_Display'] text-2xl font-semibold">Opening Hours</h2>
|
||||||
<h2 class="mb-4 text-2xl font-semibold">Why Choose Us?</h2>
|
<BusinessHours />
|
||||||
<p class="leading-relaxed text-gray-600">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus
|
|
||||||
tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices
|
|
||||||
diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
|
|
||||||
nec nonummy molestie,
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{/if}
|
|
||||||
|
|
||||||
<section class="py-20 text-center">
|
<section class="py-20 text-center">
|
||||||
<h2 class="mb-4 text-2xl font-semibold">Ready to Treat Yourself?</h2>
|
<h2 class="mb-4 font-['Playfair_Display'] text-2xl font-semibold">Ready to Treat Yourself?</h2>
|
||||||
<Button class="px-6 py-3 text-lg" href="prices">View Price List</Button>
|
<Button href={resolve('/prices')} class="px-6 py-3 text-lg">View Price List</Button>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user