Merge version_2_1781544575148 into main #1

Merged
bender merged 1 commits from version_2_1781544575148 into main 2026-06-15 17:31:54 +00:00
11 changed files with 391 additions and 258 deletions

View File

@@ -1,271 +1,41 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesComparison from '@/components/sections/features/FeaturesComparison';
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import { Heart, Shield, Sparkles, Star, Users } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import ProofSection from './HomePage/sections/Proof';
import AboutSection from './HomePage/sections/About';
import FeaturesSection from './HomePage/sections/Features';
import TestimonialsSection from './HomePage/sections/Testimonials';
import PricingSection from './HomePage/sections/Pricing';
import TeamSection from './HomePage/sections/Team';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
import VouchersSection from './HomePage/sections/Vouchers';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlayMarquee
tag="Ekskluzywne centrum zdrowia i regeneracji"
title="Nie musisz wiedzieć, jakiego zabiegu potrzebujesz. My dobierzemy rozwiązanie."
description="Indywidualne podejście, fizjoterapia, kosmetologia i regeneracja. Zaufaj specjalistom, którzy analizują Twoje potrzeby."
primaryButton={{
text: "Bezpłatna konsultacja",
href: "#contact",
}}
secondaryButton={{
text: "Poznaj nasze metody",
href: "#about",
}}
items={[
{
text: "Ponad 180 opinii Google",
icon: Star,
},
{
text: "Zespół specjalistów",
icon: Users,
},
{
text: "Indywidualna terapia",
icon: Heart,
},
]}
imageSrc="http://img.b2bpic.net/free-photo/still-life-cozy-home-interior-details-living-room_169016-3537.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="proof" data-section="proof">
<SectionErrorBoundary name="proof">
<SocialProofMarquee
tag="Zaufanie"
title="Pracujemy na markach premium"
names={[
"Massada",
"Mesoestetic",
"Klapp",
"Norden",
"DMK Molecular",
"Medavita",
"Honeywell Spa",
]}
description="Wybieramy tylko sprawdzone technologie i kosmetyki dla naszych klientów."
/>
</SectionErrorBoundary>
</div>
<ProofSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="O nas"
title="Więcej niż salon kosmetyczny"
description="Honeywell SPA to miejsce, w którym zdrowie spotyka się z wiedzą. Nie sprzedajemy zabiegów oferujemy drogi do poprawy Twojego samopoczucia i wyglądu."
items={[
{
icon: Shield,
title: "Indywidualna diagnoza",
description: "Analizujemy stan zdrowia i cele, dobierając najlepszą terapię.",
},
{
icon: Sparkles,
title: "Profesjonalna wiedza",
description: "Zespół fizjoterapeutów, trychologów i kosmetologów.",
},
{
icon: Heart,
title: "Praca poprzez dotyk",
description: "Masaże i fizjoterapia oparte na sprawdzonych technikach.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/women-holding-hands-medium-shot_23-2149856242.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesComparison
tag="Nasze podejście"
title="Dlaczego wybierasz Honeywell SPA?"
description="Skupiamy się na efektach zdrowotnych, a nie tylko na powierzchownej pielęgnacji."
negativeItems={[
"Samodzielny wybór zabiegów",
"Brak analizy potrzeb",
"Koncentracja na jednej usłudze",
]}
positiveItems={[
"Indywidualna konsultacja",
"Holistyczna diagnostyka",
"Dobór terapii pod cel",
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="Opinie"
title="Ponad 180 opinii w Google"
description="Zaufanie naszych klientów to nasz największy sukces."
testimonials={[
{
name: "Anna K.",
role: "Klientka",
quote: "Najlepsze miejsce w mieście. Profesjonalne podejście i w końcu ktoś mi pomógł z bólami kręgosłupa.",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-leaning-swimming-pool-edge_23-2147868482.jpg",
},
{
name: "Marta W.",
role: "Klientka",
quote: "Indywidualne podejście to tutaj standard. Dobrano mi terapię, która wreszcie przyniosła efekty.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-smiley-elderly-woman-posing-bathrobe_23-2148419306.jpg",
},
{
name: "Karolina P.",
role: "Klientka",
quote: "Zawsze wychodzę zrelaksowana. Niesamowita wiedza zespołu w zakresie fizjoterapii.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-lesbian-couple-taking-selfie-wedding_23-2150835706.jpg",
},
{
name: "Joanna B.",
role: "Klientka",
quote: "Polecam każdemu. Konsultacja przed zabiegiem otworzyła mi oczy na to, co naprawdę potrzebuję.",
imageSrc: "http://img.b2bpic.net/free-photo/tender-beautiful-african-woman-sleepwear-smiling-sitting-chair-resting-relaxing-home_176420-12823.jpg",
},
{
name: "Ewa L.",
role: "Klientka",
quote: "Bardzo profesjonalne miejsce. Zero ściemy, same konkretne efekty i świetna atmosfera.",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-bride-before-wedding_23-2149860779.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<VouchersSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSplitCards
tag="Oferta"
title="Wybierz kierunek regeneracji"
description="Nasza oferta jest elastyczna i dobierana do indywidualnych potrzeb."
plans={[
{
tag: "Start",
price: "Indywidualnie",
period: "/ sesja",
description: "Pierwsza konsultacja i diagnostyka Twoich potrzeb.",
primaryButton: {
text: "Umów się",
href: "#contact",
},
featuresTitle: "Co zyskujesz?",
features: [
"Analiza stanu zdrowia",
"Dobór ścieżki terapeutycznej",
"Plan pielęgnacji domowej",
],
},
{
tag: "Terapia",
price: "Pakiety",
period: "/ zabiegi",
description: "Seria zabiegów nakierowana na długofalowe efekty i zdrowie.",
primaryButton: {
text: "Zapytaj o plan",
href: "#contact",
},
featuresTitle: "W tym:",
features: [
"Fizjoterapia i masaż",
"Kosmetologia premium",
"Modelowanie sylwetki",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamGlassCards
tag="Zespół"
title="Nasi specjaliści"
description="Łączymy wiedzę medyczną, fizjoterapeutyczną i kosmetologiczną."
members={[
{
name: "Anna Nowak",
role: "Fizjoterapeuta",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-female-nurse-outdoors_23-2150796744.jpg",
},
{
name: "Marek Kowalski",
role: "Kosmetolog",
imageSrc: "http://img.b2bpic.net/free-photo/stable-girl-white-doctor-uniform_141793-376.jpg",
},
{
name: "Kasia Zielińska",
role: "Trycholog",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-male-doctor-with-displeased-expression-yellow-wall_179666-13069.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TeamSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Wsparcie"
title="Najczęstsze pytania"
items={[
{
question: "Nie wiem, jaki zabieg wybrać. Co mam zrobić?",
answer: "To nasze zadanie. Zapraszamy na bezpłatną konsultację, podczas której przeanalizujemy Twoje potrzeby i dobierzemy najlepszą terapię.",
},
{
question: "Czy konsultacja jest płatna?",
answer: "Wybrane konsultacje są bezpłatne. Skontaktuj się z nami, aby ustalić szczegóły.",
},
{
question: "Jak szybko zobaczę efekty?",
answer: "Każdy organizm jest inny. Podczas konsultacji określimy realny plan działania i czas oczekiwanych efektów.",
},
]}
description="Odpowiedzi na najczęściej zadawane pytania."
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Kontakt"
text="Jesteś gotowa zadbać o swoje zdrowie? Umów się na bezpłatną konsultację już dziś."
primaryButton={{
text: "Zadzwoń teraz",
href: "tel:+48123456789",
}}
secondaryButton={{
text: "Napisz wiadomość",
href: "mailto:kontakt@honeywellspa.pl",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,23 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "about" section.
import React from 'react';
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import { Heart, Shield, Sparkles, Star, Users } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="O nas"
title="Więcej niż salon kosmetyczny"
description="Honeywell SPA to kameralne miejsce, w którym zdrowie spotyka się z wiedzą. Jesteśmy zespołem specjalistów z wieloma umiejętnościami. Naszą siłą jest praca poprzez dotyk i holistyczne podejście do pacjenta. Oferujemy szeroki wachlarz zabiegów od relaksu, przez fizjoterapię, trychologię, kosmetologię, aż po naturalne masaże liftingujące. Specjalizujemy się w terapii obrzęków. Pracujemy na kosmetykach premium: Massada, Mesoestetic, Klapp, Norden, DMK Molecular, Medavita."
items={[{"title":"Indywidualna diagnoza","description":"Analizujemy stan zdrowia i cele, dobierając najlepszą terapię. Oferujemy bezpłatne konsultacje, np. przy odchudzaniu czy depilacji laserowej.","icon":"Shield"},{"description":"Jesteśmy znani z pracy poprzez dotyk. Specjalizujemy się w masażach, fizjoterapii i skutecznej terapii obrzęków.","title":"Praca poprzez dotyk","icon":"Heart"},{"icon":"Sparkles","description":"Zespół fizjoterapeutów, trychologów i kosmetologów pracujący na markach premium (Massada, Mesoestetic, Klapp, DMK).","title":"Profesjonalna wiedza"}]}
imageSrc="http://img.b2bpic.net/free-photo/women-holding-hands-medium-shot_23-2149856242.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Kontakt"
text="Jesteś gotowa zadbać o swoje zdrowie? Umów się na bezpłatną konsultację już dziś."
primaryButton={{
text: "Zadzwoń teraz",
href: "tel:+48123456789",
}}
secondaryButton={{
text: "Napisz wiadomość",
href: "mailto:kontakt@honeywellspa.pl",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Wsparcie"
title="Najczęstsze pytania"
items={[
{
question: "Nie wiem, jaki zabieg wybrać. Co mam zrobić?",
answer: "To nasze zadanie. Zapraszamy na bezpłatną konsultację, podczas której przeanalizujemy Twoje potrzeby i dobierzemy najlepszą terapię.",
},
{
question: "Czy konsultacja jest płatna?",
answer: "Wybrane konsultacje są bezpłatne. Skontaktuj się z nami, aby ustalić szczegóły.",
},
{
question: "Jak szybko zobaczę efekty?",
answer: "Każdy organizm jest inny. Podczas konsultacji określimy realny plan działania i czas oczekiwanych efektów.",
},
]}
description="Odpowiedzi na najczęściej zadawane pytania."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,30 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "features" section.
import React from 'react';
import FeaturesComparison from '@/components/sections/features/FeaturesComparison';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesComparison
tag="Nasze podejście"
title="Dlaczego wybierasz Honeywell SPA?"
description="Skupiamy się na efektach zdrowotnych, a nie tylko na powierzchownej pielęgnacji."
negativeItems={[
"Samodzielny wybór zabiegów",
"Brak analizy potrzeb",
"Koncentracja na jednej usłudze",
]}
positiveItems={[
"Indywidualna konsultacja",
"Holistyczna diagnostyka",
"Dobór terapii pod cel",
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,38 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
import { Heart, Shield, Sparkles, Star, Users } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlayMarquee
tag="Ekskluzywne centrum zdrowia i regeneracji"
title="Nie musisz wiedzieć, jakiego zabiegu potrzebujesz. My pomożemy Ci znaleźć najlepsze rozwiązanie."
description="Indywidualne podejście, fizjoterapia, kosmetologia i regeneracja. Zaufaj specjalistom, którzy analizują Twoje potrzeby. Oferujemy bezpłatne konsultacje, by dobrać zabieg do Twojego stanu i schorzeń."
primaryButton={{"href":"#contact","text":"Umów się na bezpłatną konsultację"}}
secondaryButton={{"href":"#about","text":"Poznaj nasze metody"}}
items={[
{
text: "Ponad 180 opinii Google",
icon: Star,
},
{
text: "Zespół specjalistów",
icon: Users,
},
{
text: "Indywidualna terapia",
icon: Heart,
},
]}
imageSrc="http://img.b2bpic.net/free-photo/still-life-cozy-home-interior-details-living-room_169016-3537.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "pricing" section.
import React from 'react';
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PricingSection(): React.JSX.Element {
return (
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSplitCards
tag="Oferta"
title="Wybierz kierunek regeneracji"
description="Nasza oferta jest elastyczna i dobierana do indywidualnych potrzeb."
plans={[{"featuresTitle":"Co zyskujesz?","features":["Analiza stanu zdrowia","Dobór ścieżki terapeutycznej","Plan pielęgnacji domowej"],"description":"Pierwsza konsultacja i diagnostyka Twoich potrzeb.","price":"Indywidualnie","primaryButton":{"href":"#contact","text":"Umów się na bezpłatną konsultację"},"tag":"Start","period":"/ sesja"},{"price":"Pakiety","period":"/ zabiegi","primaryButton":{"href":"#contact","text":"Umów się na bezpłatną konsultację"},"tag":"Terapia","featuresTitle":"W tym:","features":["Fizjoterapia i masaż","Kosmetologia premium","Modelowanie sylwetki"],"description":"Seria zabiegów nakierowana na długofalowe efekty i zdrowie."}]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "proof" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProofSection(): React.JSX.Element {
return (
<div id="proof" data-section="proof">
<SectionErrorBoundary name="proof">
<SocialProofMarquee
tag="Zaufanie"
title="Pracujemy na markach premium"
names={[
"Massada",
"Mesoestetic",
"Klapp",
"Norden",
"DMK Molecular",
"Medavita",
"Honeywell Spa",
]}
description="Wybieramy tylko sprawdzone technologie i kosmetyki dla naszych klientów."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,37 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "team" section.
import React from 'react';
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TeamSection(): React.JSX.Element {
return (
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamGlassCards
tag="Zespół"
title="Nasi specjaliści"
description="Łączymy wiedzę medyczną, fizjoterapeutyczną i kosmetologiczną."
members={[
{
name: "Anna Nowak",
role: "Fizjoterapeuta",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-female-nurse-outdoors_23-2150796744.jpg",
},
{
name: "Marek Kowalski",
role: "Kosmetolog",
imageSrc: "http://img.b2bpic.net/free-photo/stable-girl-white-doctor-uniform_141793-376.jpg",
},
{
name: "Kasia Zielińska",
role: "Trycholog",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-male-doctor-with-displeased-expression-yellow-wall_179666-13069.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,52 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "testimonials" section.
import React from 'react';
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialColumnMarqueeCards
tag="Opinie"
title="Ponad 180 opinii w Google"
description="Zaufanie naszych klientów to nasz największy sukces."
testimonials={[
{
name: "Anna K.",
role: "Klientka",
quote: "Najlepsze miejsce w mieście. Profesjonalne podejście i w końcu ktoś mi pomógł z bólami kręgosłupa.",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-leaning-swimming-pool-edge_23-2147868482.jpg",
},
{
name: "Marta W.",
role: "Klientka",
quote: "Indywidualne podejście to tutaj standard. Dobrano mi terapię, która wreszcie przyniosła efekty.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-smiley-elderly-woman-posing-bathrobe_23-2148419306.jpg",
},
{
name: "Karolina P.",
role: "Klientka",
quote: "Zawsze wychodzę zrelaksowana. Niesamowita wiedza zespołu w zakresie fizjoterapii.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-lesbian-couple-taking-selfie-wedding_23-2150835706.jpg",
},
{
name: "Joanna B.",
role: "Klientka",
quote: "Polecam każdemu. Konsultacja przed zabiegiem otworzyła mi oczy na to, co naprawdę potrzebuję.",
imageSrc: "http://img.b2bpic.net/free-photo/tender-beautiful-african-woman-sleepwear-smiling-sitting-chair-resting-relaxing-home_176420-12823.jpg",
},
{
name: "Ewa L.",
role: "Klientka",
quote: "Bardzo profesjonalne miejsce. Zero ściemy, same konkretne efekty i świetna atmosfera.",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-bride-before-wedding_23-2149860779.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,72 @@
import { motion } from 'motion/react';
import Button from '@/components/ui/Button';
import ScrollReveal from '@/components/ui/ScrollReveal';
import TextAnimation from '@/components/ui/TextAnimation';
import Tag from '@/components/ui/Tag';
import ImageOrVideo from '@/components/ui/ImageOrVideo';
import Card from '@/components/ui/Card';
export default function VouchersSection() {
const products = [
{
name: "Voucher Kwotowy",
price: "od 100 zł",
imageSrc: "http://img.b2bpic.net/free-photo/gift-box-with-ribbon-bow-wooden-table_1150-17631.jpg",
},
{
name: "Voucher na Masaż Relaksacyjny",
price: "250 zł",
imageSrc: "http://img.b2bpic.net/free-photo/spa-composition-with-towels-candles-flowers_1150-17632.jpg",
},
{
name: "Voucher na Zabieg Kosmetyczny",
price: "350 zł",
imageSrc: "http://img.b2bpic.net/free-photo/spa-treatment-with-candles-towels_1150-17633.jpg",
}
];
return (
<section data-webild-section="vouchers" id="vouchers" className="relative w-full py-24 bg-background">
<div className="w-content-width mx-auto px-6">
<div className="flex flex-col items-center text-center mb-16">
<ScrollReveal variant="fade">
<Tag text="Prezent" className="mb-4" />
</ScrollReveal>
<TextAnimation
text="Vouchery Podarunkowe"
variant="slide-up"
tag="h2"
gradientText={false}
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
/>
<ScrollReveal variant="fade" delay={0.2}>
<p className="text-lg text-muted-foreground max-w-2xl mx-auto mb-8">
Szukasz idealnego prezentu? Podaruj bliskim zdrowie i relaks. Nasze vouchery to doskonały wybór na każdą okazję. Nasi klienci uwielbiają nas polecać!
</p>
<Button text="Kup voucher" href="#contact" variant="primary" />
</ScrollReveal>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{products.map((product, index) => (
<ScrollReveal variant="fade" key={index} delay={0.1 * index}>
<Card className="overflow-hidden flex flex-col h-full">
<div className="relative aspect-[4/3] w-full overflow-hidden">
<ImageOrVideo
imageSrc={product.imageSrc}
className="w-full h-full object-cover transition-transform duration-500 hover:scale-105"
/>
</div>
<div className="p-6 flex flex-col flex-grow">
<h3 className="text-xl font-bold text-foreground mb-2">{product.name}</h3>
<p className="text-lg font-semibold text-primary-cta mb-6 mt-auto">{product.price}</p>
<Button text="Wybierz" href="#contact" variant="secondary" className="w-full justify-center" />
</div>
</Card>
</ScrollReveal>
))}
</div>
</div>
</section>
);
}