feat(ui): add wedding theme styles and layout components

* Introduced wedding-themed CSS variables for styling.
* Created layout component for the wedding site with navigation and countdown.
* Added RSVP and photo upload pages with form handling.
* Implemented QR code page for wedding site access.
* Configured TypeScript and Vite for the project.
* Added robots.txt for search engine crawling.
This commit is contained in:
2026-08-11 23:31:35 +02:00
commit 39f5b8d5cc
89 changed files with 6829 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
<script lang="ts">
import '../app.css';
import favicon from '$lib/assets/favicon.svg';
import { page } from '$app/state';
import Countdown from '$lib/components/Countdown.svelte';
import { createWeddingInfo } from '$lib/wedding-info.svelte';
let { children } = $props();
const wedding = createWeddingInfo();
const links = [
{ href: '/', label: 'Home' },
{ href: '/rsvp', label: 'RSVP' },
{ href: '/photos', label: 'Photos' }
];
</script>
<svelte:head><link rel="icon" href={favicon} /></svelte:head>
<div class="bg-surface-50 dark:bg-surface-950 flex min-h-screen flex-col">
<div class="sticky top-0 z-20 flex flex-col">
<nav class="bg-primary-950 flex items-center justify-between px-4 py-3 sm:px-8">
<a href="/" class="text-surface-50 font-malibu text-xl tracking-wide">Zoé &amp; Shaldon</a>
<div class="flex gap-2">
{#each links as link (link.href)}
<a
href={link.href}
class="btn field-sm {page.url.pathname === link.href
? 'preset-filled-secondary-500'
: 'text-surface-100 hover:text-secondary-400'}"
>
{link.label}
</a>
{/each}
</div>
</nav>
<div class="text-surface-50 flex justify-center px-4 py-3 drop-shadow-[0_2px_6px_rgba(0,0,0,0.6)]">
<Countdown target={wedding.date} compact pastMessage="Already married! 🎉" />
</div>
</div>
<main class="flex flex-1 flex-col">
{@render children()}
</main>
</div>