diff --git a/src/assets/bakery-1.jpg b/src/assets/bakery-1.jpg
new file mode 100644
index 0000000..3480a3d
Binary files /dev/null and b/src/assets/bakery-1.jpg differ
diff --git a/src/assets/bakery-2.jpg b/src/assets/bakery-2.jpg
new file mode 100644
index 0000000..57faf30
Binary files /dev/null and b/src/assets/bakery-2.jpg differ
diff --git a/src/assets/bakery-3.jpg b/src/assets/bakery-3.jpg
new file mode 100644
index 0000000..a98234b
Binary files /dev/null and b/src/assets/bakery-3.jpg differ
diff --git a/src/assets/bakery-4.jpg b/src/assets/bakery-4.jpg
new file mode 100644
index 0000000..c6d03cb
Binary files /dev/null and b/src/assets/bakery-4.jpg differ
diff --git a/src/assets/bakery-5.jpg b/src/assets/bakery-5.jpg
new file mode 100644
index 0000000..5ca9dde
Binary files /dev/null and b/src/assets/bakery-5.jpg differ
diff --git a/src/assets/bakery-6.jpg b/src/assets/bakery-6.jpg
new file mode 100644
index 0000000..96af592
Binary files /dev/null and b/src/assets/bakery-6.jpg differ
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
new file mode 100644
index 0000000..3f538ff
--- /dev/null
+++ b/src/components/Footer.tsx
@@ -0,0 +1,37 @@
+const Footer = () => {
+ return (
+
+ );
+};
+
+export default Footer;
diff --git a/src/components/GallerySection.tsx b/src/components/GallerySection.tsx
new file mode 100644
index 0000000..7f0093f
--- /dev/null
+++ b/src/components/GallerySection.tsx
@@ -0,0 +1,52 @@
+import bakery1 from "@/assets/bakery-1.jpg";
+import bakery2 from "@/assets/bakery-2.jpg";
+import bakery3 from "@/assets/bakery-3.jpg";
+import bakery4 from "@/assets/bakery-4.jpg";
+import bakery5 from "@/assets/bakery-5.jpg";
+import bakery6 from "@/assets/bakery-6.jpg";
+
+const images = [
+ { src: bakery1, alt: "Kanelbullar" },
+ { src: bakery2, alt: "Prinsesstårta" },
+ { src: bakery3, alt: "Sorterade kakor" },
+ { src: bakery4, alt: "Hantverksbageri" },
+ { src: bakery5, alt: "Kardemummabullar" },
+ { src: bakery6, alt: "Företagsleverans" },
+];
+
+const GallerySection = () => {
+ return (
+
+
+
+ Hantverk. Kvalitet. Leveranssäkerhet.
+
+
+ Varje produkt bakas med kärlek och levereras med precision
+
+
+
+ {images.map((image, index) => (
+
+

+
+
+ {image.alt}
+
+
+ ))}
+
+
+
+ );
+};
+
+export default GallerySection;
diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx
new file mode 100644
index 0000000..a6cbd5a
--- /dev/null
+++ b/src/components/HeroSection.tsx
@@ -0,0 +1,41 @@
+const HeroSection = () => {
+ return (
+
+ {/* Background glow effect */}
+
+
+
+
+ Lennart Svenssons Konditorivaror
+
+
+
+ Kakabonnemang
+ för företag
+
+
+
+ Premium konditorikakor levererade automatiskt till ert kontor.
+
+ Enkel beställning. Fasta leveranser. Maximal arbetsglädje.
+
+
+
+ Starta ert abonnemang
+
+
+
+ {/* Scroll indicator */}
+
+
+ );
+};
+
+export default HeroSection;
diff --git a/src/components/PlansSection.tsx b/src/components/PlansSection.tsx
new file mode 100644
index 0000000..79efb42
--- /dev/null
+++ b/src/components/PlansSection.tsx
@@ -0,0 +1,117 @@
+import { Check } from "lucide-react";
+
+const plans = [
+ {
+ name: "Kontorsabonnemang Bas",
+ price: "1 990 kr",
+ period: "/mån",
+ description: "Perfekt för mindre kontor (upp till 15 personer)",
+ features: [
+ "2 leveranser per månad",
+ "Premium konditorikakor",
+ "Fast leveransdag",
+ "Företagsfaktura",
+ ],
+ featured: false,
+ },
+ {
+ name: "Kontorsabonnemang Pro",
+ price: "3 490 kr",
+ period: "/mån",
+ description: "För växande företag (15–40 personer)",
+ features: [
+ "4 leveranser per månad",
+ "Utvalda sortiment",
+ "Prioriterad hantering",
+ "Fakturabetalning",
+ ],
+ featured: true,
+ },
+ {
+ name: "Företagsavtal",
+ price: "Offert",
+ period: "",
+ description: "För stora kontor, event och kedjor",
+ features: [
+ "Anpassad volym",
+ "Möjlighet till branding",
+ "Avtalspriser",
+ "Personlig kontakt",
+ ],
+ featured: false,
+ },
+];
+
+const PlansSection = () => {
+ return (
+
+
+
+ Våra företagsabonnemang
+
+
+ Välj det abonnemang som passar ert företag bäst
+
+
+
+ {plans.map((plan, index) => (
+
+ ))}
+
+
+
+ );
+};
+
+export default PlansSection;
diff --git a/src/index.css b/src/index.css
index 4844bbd..000bb5f 100644
--- a/src/index.css
+++ b/src/index.css
@@ -2,95 +2,55 @@
@tailwind components;
@tailwind utilities;
-/* Definition of the design system. All colors, gradients, fonts, etc should be defined here.
-All colors MUST be HSL.
-*/
+/* Lennart Svenssons Konditorivaror - Premium Dark Design System */
+
+@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap');
@layer base {
:root {
- --background: 0 0% 100%;
- --foreground: 222.2 84% 4.9%;
+ --background: 0 0% 4%;
+ --foreground: 0 0% 98%;
- --card: 0 0% 100%;
- --card-foreground: 222.2 84% 4.9%;
+ --card: 0 0% 8%;
+ --card-foreground: 0 0% 98%;
- --popover: 0 0% 100%;
- --popover-foreground: 222.2 84% 4.9%;
+ --popover: 0 0% 8%;
+ --popover-foreground: 0 0% 98%;
- --primary: 222.2 47.4% 11.2%;
- --primary-foreground: 210 40% 98%;
+ --primary: 24 95% 53%;
+ --primary-foreground: 0 0% 100%;
- --secondary: 210 40% 96.1%;
- --secondary-foreground: 222.2 47.4% 11.2%;
+ --secondary: 0 0% 12%;
+ --secondary-foreground: 0 0% 98%;
- --muted: 210 40% 96.1%;
- --muted-foreground: 215.4 16.3% 46.9%;
+ --muted: 0 0% 15%;
+ --muted-foreground: 0 0% 60%;
- --accent: 210 40% 96.1%;
- --accent-foreground: 222.2 47.4% 11.2%;
+ --accent: 30 100% 50%;
+ --accent-foreground: 0 0% 100%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
- --border: 214.3 31.8% 91.4%;
- --input: 214.3 31.8% 91.4%;
- --ring: 222.2 84% 4.9%;
+ --border: 0 0% 18%;
+ --input: 0 0% 18%;
+ --ring: 24 95% 53%;
- --radius: 0.5rem;
+ --radius: 0.75rem;
- --sidebar-background: 0 0% 98%;
+ /* Custom tokens */
+ --gradient-warm: linear-gradient(135deg, hsl(24 95% 53%) 0%, hsl(35 100% 55%) 100%);
+ --gradient-dark: linear-gradient(180deg, hsl(0 0% 4%) 0%, hsl(0 0% 7%) 100%);
+ --shadow-glow: 0 0 60px -15px hsl(24 95% 53% / 0.4);
+ --shadow-card: 0 25px 50px -12px hsl(0 0% 0% / 0.5);
- --sidebar-foreground: 240 5.3% 26.1%;
-
- --sidebar-primary: 240 5.9% 10%;
-
- --sidebar-primary-foreground: 0 0% 98%;
-
- --sidebar-accent: 240 4.8% 95.9%;
-
- --sidebar-accent-foreground: 240 5.9% 10%;
-
- --sidebar-border: 220 13% 91%;
-
- --sidebar-ring: 217.2 91.2% 59.8%;
+ --font-display: 'Playfair Display', serif;
+ --font-body: 'Inter', sans-serif;
}
.dark {
- --background: 222.2 84% 4.9%;
- --foreground: 210 40% 98%;
-
- --card: 222.2 84% 4.9%;
- --card-foreground: 210 40% 98%;
-
- --popover: 222.2 84% 4.9%;
- --popover-foreground: 210 40% 98%;
-
- --primary: 210 40% 98%;
- --primary-foreground: 222.2 47.4% 11.2%;
-
- --secondary: 217.2 32.6% 17.5%;
- --secondary-foreground: 210 40% 98%;
-
- --muted: 217.2 32.6% 17.5%;
- --muted-foreground: 215 20.2% 65.1%;
-
- --accent: 217.2 32.6% 17.5%;
- --accent-foreground: 210 40% 98%;
-
- --destructive: 0 62.8% 30.6%;
- --destructive-foreground: 210 40% 98%;
-
- --border: 217.2 32.6% 17.5%;
- --input: 217.2 32.6% 17.5%;
- --ring: 212.7 26.8% 83.9%;
- --sidebar-background: 240 5.9% 10%;
- --sidebar-foreground: 240 4.8% 95.9%;
- --sidebar-primary: 224.3 76.3% 48%;
- --sidebar-primary-foreground: 0 0% 100%;
- --sidebar-accent: 240 3.7% 15.9%;
- --sidebar-accent-foreground: 240 4.8% 95.9%;
- --sidebar-border: 240 3.7% 15.9%;
- --sidebar-ring: 217.2 91.2% 59.8%;
+ --background: 0 0% 4%;
+ --foreground: 0 0% 98%;
}
}
@@ -99,7 +59,75 @@ All colors MUST be HSL.
@apply border-border;
}
+ html {
+ scroll-behavior: smooth;
+ }
+
body {
- @apply bg-background text-foreground;
+ @apply bg-background text-foreground antialiased;
+ font-family: var(--font-body);
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-family: var(--font-display);
+ }
+}
+
+@layer components {
+ .hero-gradient {
+ background: var(--gradient-dark);
+ }
+
+ .text-gradient {
+ background: var(--gradient-warm);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ }
+
+ .card-glow {
+ box-shadow: var(--shadow-card);
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ }
+
+ .card-glow:hover {
+ box-shadow: var(--shadow-glow);
+ transform: translateY(-8px);
+ }
+
+ .btn-primary {
+ background: var(--gradient-warm);
+ @apply text-primary-foreground font-semibold rounded-xl transition-all duration-300;
+ }
+
+ .btn-primary:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 10px 40px -10px hsl(24 95% 53% / 0.5);
+ }
+}
+
+@layer utilities {
+ .animate-float {
+ animation: float 6s ease-in-out infinite;
+ }
+
+ @keyframes float {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-10px); }
+ }
+
+ .animate-fade-up {
+ animation: fadeUp 0.8s ease-out forwards;
+ }
+
+ @keyframes fadeUp {
+ from {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
}
}
diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx
index 7130b54..f8100a9 100644
--- a/src/pages/Index.tsx
+++ b/src/pages/Index.tsx
@@ -1,12 +1,15 @@
-// Update this page (the content is just a fallback if you fail to update the page)
+import HeroSection from "@/components/HeroSection";
+import GallerySection from "@/components/GallerySection";
+import PlansSection from "@/components/PlansSection";
+import Footer from "@/components/Footer";
const Index = () => {
return (
-
-
-
Welcome to Your Blank App
-
Start building your amazing project here!
-
+
);
};
diff --git a/tailwind.config.ts b/tailwind.config.ts
index a1edb69..0b97abc 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -13,6 +13,10 @@ export default {
},
},
extend: {
+ fontFamily: {
+ display: ["Playfair Display", "serif"],
+ body: ["Inter", "sans-serif"],
+ },
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
@@ -65,20 +69,12 @@ export default {
},
keyframes: {
"accordion-down": {
- from: {
- height: "0",
- },
- to: {
- height: "var(--radix-accordion-content-height)",
- },
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
},
"accordion-up": {
- from: {
- height: "var(--radix-accordion-content-height)",
- },
- to: {
- height: "0",
- },
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
},
},
animation: {