UI fixes (colors, favicon) and codebase comment cleanup
This commit is contained in:
@@ -139,12 +139,10 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<main className="bg-slate-50 pt-24 pb-16">
|
<main className="bg-slate-50 pt-24 pb-16">
|
||||||
{/* Skrypty JSON-LD dla SEO */}
|
|
||||||
<JsonLd data={jsonLdArticle} />
|
<JsonLd data={jsonLdArticle} />
|
||||||
<JsonLd data={jsonLdBreadcrumb} />
|
<JsonLd data={jsonLdBreadcrumb} />
|
||||||
|
|
||||||
<article className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<article className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
{/* Powrót */}
|
|
||||||
<Link
|
<Link
|
||||||
href="/blog"
|
href="/blog"
|
||||||
className="inline-flex items-center gap-2 text-sm font-semibold text-primary/70 hover:text-primary transition-colors mb-8"
|
className="inline-flex items-center gap-2 text-sm font-semibold text-primary/70 hover:text-primary transition-colors mb-8"
|
||||||
@@ -152,8 +150,6 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
|
|||||||
<ArrowLeft className="w-4 h-4" />
|
<ArrowLeft className="w-4 h-4" />
|
||||||
Wróć do listy artykułów
|
Wróć do listy artykułów
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Header artykułu */}
|
|
||||||
<header className="mb-10 text-center md:text-left">
|
<header className="mb-10 text-center md:text-left">
|
||||||
<div className="flex flex-wrap items-center justify-center md:justify-start gap-4 mb-6 text-sm font-medium text-text-muted">
|
<div className="flex flex-wrap items-center justify-center md:justify-start gap-4 mb-6 text-sm font-medium text-text-muted">
|
||||||
<span className="px-3 py-1 bg-accent/10 text-accent font-bold rounded-full uppercase tracking-wider">
|
<span className="px-3 py-1 bg-accent/10 text-accent font-bold rounded-full uppercase tracking-wider">
|
||||||
@@ -179,8 +175,6 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
|
|||||||
{post.excerpt}
|
{post.excerpt}
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* Główny obraz */}
|
|
||||||
<div className="relative w-full aspect-video rounded-2xl overflow-hidden mb-12 shadow-md">
|
<div className="relative w-full aspect-video rounded-2xl overflow-hidden mb-12 shadow-md">
|
||||||
<Image
|
<Image
|
||||||
src={post.image || '/images/hero/hero-section-image.webp'}
|
src={post.image || '/images/hero/hero-section-image.webp'}
|
||||||
@@ -190,8 +184,6 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
|
|||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Treść */}
|
|
||||||
<div className="prose prose-lg md:prose-xl prose-slate max-w-none mb-16
|
<div className="prose prose-lg md:prose-xl prose-slate max-w-none mb-16
|
||||||
prose-headings:font-heading prose-headings:text-primary prose-headings:font-bold
|
prose-headings:font-heading prose-headings:text-primary prose-headings:font-bold
|
||||||
prose-a:text-accent hover:prose-a:text-accent-hover prose-a:font-semibold
|
prose-a:text-accent hover:prose-a:text-accent-hover prose-a:font-semibold
|
||||||
@@ -204,16 +196,12 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
{/* CTA do usługi */}
|
|
||||||
<CtaBanner
|
<CtaBanner
|
||||||
title="Podobał Ci się ten artykuł?"
|
title="Podobał Ci się ten artykuł?"
|
||||||
subtitle="Jeśli potrzebujesz pomocy specjalistów w podobnej sprawie, sprawdź naszą ofertę lub skontaktuj się z nami bezpośrednio."
|
subtitle="Jeśli potrzebujesz pomocy specjalistów w podobnej sprawie, sprawdź naszą ofertę lub skontaktuj się z nami bezpośrednio."
|
||||||
ctaText="Zobacz naszą ofertę"
|
ctaText="Zobacz naszą ofertę"
|
||||||
ctaLink={getCtaLink()}
|
ctaLink={getCtaLink()}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Powiązane artykuły */}
|
|
||||||
{relatedPosts.length > 0 && (
|
{relatedPosts.length > 0 && (
|
||||||
<section className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-16 md:mt-24">
|
<section className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-16 md:mt-24">
|
||||||
<div className="flex items-center justify-between border-b border-border pb-4 mb-8">
|
<div className="flex items-center justify-between border-b border-border pb-4 mb-8">
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ export default function BlogPage() {
|
|||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="Baza Wiedzy"
|
|
||||||
title="Blog i poradniki"
|
title="Blog i poradniki"
|
||||||
subtitle="Dzielimy się naszą wiedzą i doświadczeniem. Zobacz, jak dbać o domowe instalacje, na co uważać podczas remontu i jak uzyskać dofinansowanie."
|
subtitle="Dzielimy się naszą wiedzą i doświadczeniem. Zobacz, jak dbać o domowe instalacje, na co uważać podczas remontu i jak uzyskać dofinansowanie."
|
||||||
ctaText="Skontaktuj się z nami"
|
ctaText="Skontaktuj się z nami"
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ export default function CennikMontazuPage() {
|
|||||||
<>
|
<>
|
||||||
<JsonLd data={jsonLd} />
|
<JsonLd data={jsonLd} />
|
||||||
<main>
|
<main>
|
||||||
{/* Hero */}
|
|
||||||
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
||||||
<Image
|
<Image
|
||||||
src="/images/services/wycena.webp"
|
src="/images/services/wycena.webp"
|
||||||
@@ -151,12 +150,8 @@ export default function CennikMontazuPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Cennik główny */}
|
|
||||||
<section className="py-16 bg-white">
|
<section className="py-16 bg-white">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col gap-10">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col gap-10">
|
||||||
|
|
||||||
{/* Montaż */}
|
|
||||||
<div>
|
<div>
|
||||||
<div className="flex items-center gap-2 mb-4">
|
<div className="flex items-center gap-2 mb-4">
|
||||||
<Wrench className="size-5 text-accent" />
|
<Wrench className="size-5 text-accent" />
|
||||||
@@ -174,8 +169,6 @@ export default function CennikMontazuPage() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Trasa freonowa */}
|
|
||||||
<div>
|
<div>
|
||||||
<div className="flex items-center gap-2 mb-4">
|
<div className="flex items-center gap-2 mb-4">
|
||||||
<Zap className="size-5 text-accent" />
|
<Zap className="size-5 text-accent" />
|
||||||
@@ -195,8 +188,6 @@ export default function CennikMontazuPage() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Serwis */}
|
|
||||||
<div>
|
<div>
|
||||||
<div className="flex items-center gap-2 mb-4">
|
<div className="flex items-center gap-2 mb-4">
|
||||||
<Wind className="size-5 text-accent" />
|
<Wind className="size-5 text-accent" />
|
||||||
@@ -218,8 +209,6 @@ export default function CennikMontazuPage() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* FAQ */}
|
|
||||||
<section className="py-16 bg-slate-50">
|
<section className="py-16 bg-slate-50">
|
||||||
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania o cennik</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania o cennik</h2>
|
||||||
@@ -238,8 +227,6 @@ export default function CennikMontazuPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* CTA */}
|
|
||||||
<section className="py-16 bg-primary text-white">
|
<section className="py-16 bg-primary text-white">
|
||||||
<div className="max-w-2xl mx-auto px-4 text-center">
|
<div className="max-w-2xl mx-auto px-4 text-center">
|
||||||
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
||||||
|
|||||||
+2
-2
@@ -72,7 +72,7 @@
|
|||||||
--secondary-foreground: #0f2a47;
|
--secondary-foreground: #0f2a47;
|
||||||
--muted: #f5f7fa;
|
--muted: #f5f7fa;
|
||||||
--muted-foreground: #5a6678;
|
--muted-foreground: #5a6678;
|
||||||
--accent: #1030D0;
|
--accent: #2ba8e0;
|
||||||
--accent-foreground: #ffffff;
|
--accent-foreground: #ffffff;
|
||||||
--accent-light: #e3f4fc;
|
--accent-light: #e3f4fc;
|
||||||
--cta: #F39320;
|
--cta: #F39320;
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
--destructive: oklch(0.577 0.245 27.325);
|
--destructive: oklch(0.577 0.245 27.325);
|
||||||
--theme-border: #e2e8f0;
|
--theme-border: #e2e8f0;
|
||||||
--input: #e2e8f0;
|
--input: #e2e8f0;
|
||||||
--ring: #1030D0;
|
--ring: #2ba8e0;
|
||||||
--success: #16a34a;
|
--success: #16a34a;
|
||||||
--chart-1: oklch(0.87 0 0);
|
--chart-1: oklch(0.87 0 0);
|
||||||
--chart-2: oklch(0.556 0 0);
|
--chart-2: oklch(0.556 0 0);
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export default function KlimatyzacjaPage() {
|
|||||||
<JsonLd data={faqJsonLd} />
|
<JsonLd data={faqJsonLd} />
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="15+ lat doświadczenia · Split i multisplit · Uprawnienia F-gaz"
|
|
||||||
title="Montaż klimatyzacji — dobór, instalacja, serwis"
|
title="Montaż klimatyzacji — dobór, instalacja, serwis"
|
||||||
subtitle="Zapewnij sobie idealny klimat w domu i biurze. Oferujemy kompleksowe usługi od bezpłatnego audytu po montaż i opiekę serwisową."
|
subtitle="Zapewnij sobie idealny klimat w domu i biurze. Oferujemy kompleksowe usługi od bezpłatnego audytu po montaż i opiekę serwisową."
|
||||||
ctaText="Dobierz klimatyzator"
|
ctaText="Dobierz klimatyzator"
|
||||||
@@ -116,7 +116,7 @@ export default function KlimatyzacjaPage() {
|
|||||||
|
|
||||||
<ProcessSteps
|
<ProcessSteps
|
||||||
steps={acProcessSteps}
|
steps={acProcessSteps}
|
||||||
eyebrow="Krok po Kroku"
|
|
||||||
title="Jak wygląda proces montażu?"
|
title="Jak wygląda proces montażu?"
|
||||||
subtitle="Od pierwszej wizyty do pełnego uruchomienia — zobacz, jak działamy u naszych klientów."
|
subtitle="Od pierwszej wizyty do pełnego uruchomienia — zobacz, jak działamy u naszych klientów."
|
||||||
/>
|
/>
|
||||||
@@ -132,8 +132,6 @@ export default function KlimatyzacjaPage() {
|
|||||||
<WhyUs />
|
<WhyUs />
|
||||||
|
|
||||||
<FaqAccordion category="klimatyzacja" />
|
<FaqAccordion category="klimatyzacja" />
|
||||||
|
|
||||||
{/* Sekcja miast dla SEO */}
|
|
||||||
<section id="miasta" className="py-16 bg-slate-50 border-t border-border">
|
<section id="miasta" className="py-16 bg-slate-50 border-t border-border">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="text-center mb-10">
|
<div className="text-center mb-10">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default function KontaktPage() {
|
|||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="Kontakt"
|
|
||||||
title="Jesteśmy do Twojej dyspozycji"
|
title="Jesteśmy do Twojej dyspozycji"
|
||||||
subtitle="Zastanawiasz się nad montażem klimatyzacji ? Potrzebujesz serwisu? Napisz lub zadzwoń — odpowiemy szybko i bezpłatnie."
|
subtitle="Zastanawiasz się nad montażem klimatyzacji ? Potrzebujesz serwisu? Napisz lub zadzwoń — odpowiemy szybko i bezpłatnie."
|
||||||
ctaText="Zadzwoń do nas"
|
ctaText="Zadzwoń do nas"
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ Przejdź do sklepu
|
|||||||
<h1 className="text-2xl font-bold text-primary font-heading mb-8">Twój koszyk</h1>
|
<h1 className="text-2xl font-bold text-primary font-heading mb-8">Twój koszyk</h1>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
|
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
|
||||||
{/* Lista produktów */}
|
|
||||||
<div className="lg:col-span-2 flex flex-col gap-4">
|
<div className="lg:col-span-2 flex flex-col gap-4">
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
<div key={item.id} className="bg-white rounded-xl border border-border p-4 flex gap-4 items-center">
|
<div key={item.id} className="bg-white rounded-xl border border-border p-4 flex gap-4 items-center">
|
||||||
@@ -62,8 +61,6 @@ Przejdź do sklepu
|
|||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Podsumowanie */}
|
|
||||||
<div className="lg:col-span-1">
|
<div className="lg:col-span-1">
|
||||||
<div className="bg-white rounded-xl border border-border p-6 sticky top-24">
|
<div className="bg-white rounded-xl border border-border p-6 sticky top-24">
|
||||||
<h2 className="text-base font-bold text-primary font-heading mb-4">Podsumowanie</h2>
|
<h2 className="text-base font-bold text-primary font-heading mb-4">Podsumowanie</h2>
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ export const metadata: Metadata = {
|
|||||||
'max-snippet': -1,
|
'max-snippet': -1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
icons: {
|
||||||
|
icon: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"></svg>',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
<>
|
<>
|
||||||
<JsonLd data={jsonLd} />
|
<JsonLd data={jsonLd} />
|
||||||
<main>
|
<main>
|
||||||
{/* Hero */}
|
|
||||||
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
||||||
<Image
|
<Image
|
||||||
src="/images/services/instalacja_klimatyzacji.webp"
|
src="/images/services/instalacja_klimatyzacji.webp"
|
||||||
@@ -128,8 +127,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Wyróżniki */}
|
|
||||||
<section className="py-16 bg-white">
|
<section className="py-16 bg-white">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Dlaczego warto wybrać ThermCool?</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Dlaczego warto wybrać ThermCool?</h2>
|
||||||
@@ -154,8 +151,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Typy montażu */}
|
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-6">Rodzaje montażu</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-6">Rodzaje montażu</h2>
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
|
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
|
||||||
{[
|
{[
|
||||||
@@ -171,8 +166,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Etapy montażu */}
|
|
||||||
<section className="py-16 bg-slate-50">
|
<section className="py-16 bg-slate-50">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Jak wygląda montaż krok po kroku?</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Jak wygląda montaż krok po kroku?</h2>
|
||||||
@@ -191,8 +184,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Cennik */}
|
|
||||||
<section className="py-16 bg-white">
|
<section className="py-16 bg-white">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-2">Cennik montażu</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-2">Cennik montażu</h2>
|
||||||
@@ -222,8 +213,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* FAQ */}
|
|
||||||
<section className="py-16 bg-slate-50">
|
<section className="py-16 bg-slate-50">
|
||||||
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania</h2>
|
||||||
@@ -242,8 +231,6 @@ export default function MontazKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* CTA */}
|
|
||||||
<section className="py-16 bg-primary text-white">
|
<section className="py-16 bg-primary text-white">
|
||||||
<div className="max-w-2xl mx-auto px-4 text-center">
|
<div className="max-w-2xl mx-auto px-4 text-center">
|
||||||
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export default function ONasPage() {
|
|||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="Poznaj Nas"
|
|
||||||
title={`O firmie ${companyDetails.shortName}`}
|
title={`O firmie ${companyDetails.shortName}`}
|
||||||
subtitle="Jesteśmy zgranym zespołem inżynierów, instalatorów i serwisantów. Od lat dostarczamy sprawdzone rozwiązania z zakresu klimatyzacji, ogrzewania i wykończeń."
|
subtitle="Jesteśmy zgranym zespołem inżynierów, instalatorów i serwisantów. Od lat dostarczamy sprawdzone rozwiązania z zakresu klimatyzacji, ogrzewania i wykończeń."
|
||||||
ctaText="Skontaktuj się z nami"
|
ctaText="Skontaktuj się z nami"
|
||||||
|
|||||||
@@ -128,7 +128,6 @@ export default function Home() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* LocalBusiness Schema for Google Search SEO */}
|
|
||||||
<JsonLd data={jsonLd} />
|
<JsonLd data={jsonLd} />
|
||||||
|
|
||||||
<HeroSection />
|
<HeroSection />
|
||||||
@@ -143,14 +142,9 @@ export default function Home() {
|
|||||||
|
|
||||||
|
|
||||||
<BlogPreview />
|
<BlogPreview />
|
||||||
|
|
||||||
{/* Cennik usług */}
|
|
||||||
{/* Cennik usług */}
|
|
||||||
<section className="bg-white py-16 px-4">
|
<section className="bg-white py-16 px-4">
|
||||||
<div className="bg-slate-50 max-w-7xl mx-auto rounded-[2.5rem] p-6 sm:p-10 lg:p-14">
|
<div className="bg-slate-50 max-w-7xl mx-auto rounded-[2.5rem] p-6 sm:p-10 lg:p-14">
|
||||||
<div className="max-w-7xl mx-auto flex flex-col gap-8">
|
<div className="max-w-7xl mx-auto flex flex-col gap-8">
|
||||||
|
|
||||||
{/* Header (Sekcja hero nad kartami) */}
|
|
||||||
<div className="mb-2">
|
<div className="mb-2">
|
||||||
<div className="inline-flex items-center gap-1.5 text-[10px] font-bold text-accent uppercase tracking-widest mb-6 bg-accent/5 border border-accent/20 px-3 py-1.5 rounded-full">
|
<div className="inline-flex items-center gap-1.5 text-[10px] font-bold text-accent uppercase tracking-widest mb-6 bg-accent/5 border border-accent/20 px-3 py-1.5 rounded-full">
|
||||||
<Check className="size-3.5" />
|
<Check className="size-3.5" />
|
||||||
@@ -163,11 +157,7 @@ export default function Home() {
|
|||||||
Profesjonalna obsługa, certyfikowani specjaliści i szybki czas reakcji na terenie całego Wrocławia. Zadbaj o czyste powietrze i wydajność swoich urządzeń.
|
Profesjonalna obsługa, certyfikowani specjaliści i szybki czas reakcji na terenie całego Wrocławia. Zadbaj o czyste powietrze i wydajność swoich urządzeń.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Cards Grid */}
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
|
|
||||||
{/* Card 1: Montaż klimatyzacji */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -184,8 +174,6 @@ export default function Home() {
|
|||||||
<p className="text-[10px] text-text-muted mt-1">* cena standardowego montażu do 5m</p>
|
<p className="text-[10px] text-text-muted mt-1">* cena standardowego montażu do 5m</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 2: Czyszczenie */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -201,8 +189,6 @@ export default function Home() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 250 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 250 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 3: Przegląd techniczny */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -218,8 +204,6 @@ export default function Home() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 150 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 150 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 4: Uzupełnienie czynnika */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -235,8 +219,6 @@ export default function Home() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 180 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 180 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 5: Naprawa usterek */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default function RealizacjePage() {
|
|||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="Portfolio"
|
|
||||||
title="Nasze realizacje"
|
title="Nasze realizacje"
|
||||||
subtitle="Zobacz wybrane projekty, które zrealizowaliśmy dla naszych klientów. Każde zlecenie traktujemy indywidualnie, dbając o najwyższą jakość wykonania."
|
subtitle="Zobacz wybrane projekty, które zrealizowaliśmy dla naszych klientów. Każde zlecenie traktujemy indywidualnie, dbając o najwyższą jakość wykonania."
|
||||||
ctaText="Zobacz ofertę"
|
ctaText="Zobacz ofertę"
|
||||||
|
|||||||
@@ -134,7 +134,6 @@ export default function SerwisKlimatyzacjiPage() {
|
|||||||
<>
|
<>
|
||||||
<JsonLd data={jsonLd} />
|
<JsonLd data={jsonLd} />
|
||||||
<main>
|
<main>
|
||||||
{/* Hero */}
|
|
||||||
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
<section className="relative text-white py-24 md:py-32 overflow-hidden">
|
||||||
<Image
|
<Image
|
||||||
src="/images/services/czyszczenie.webp"
|
src="/images/services/czyszczenie.webp"
|
||||||
@@ -172,8 +171,6 @@ export default function SerwisKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Usługi serwisowe */}
|
|
||||||
<section className="py-16 bg-white">
|
<section className="py-16 bg-white">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Co obejmuje nasz serwis?</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Co obejmuje nasz serwis?</h2>
|
||||||
@@ -198,21 +195,17 @@ export default function SerwisKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Marki */}
|
|
||||||
<section className="py-16 bg-slate-50 overflow-hidden">
|
<section className="py-16 bg-slate-50 overflow-hidden">
|
||||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-6">Serwisujemy wszystkie popularne marki</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-6">Serwisujemy wszystkie popularne marki</h2>
|
||||||
|
|
||||||
<div className="relative flex overflow-hidden w-full mb-4">
|
<div className="relative flex overflow-hidden w-full mb-4">
|
||||||
<div className="flex w-max animate-marquee gap-4 whitespace-nowrap items-center">
|
<div className="flex w-max animate-marquee gap-4 whitespace-nowrap items-center">
|
||||||
{/* Pierwszy zestaw */}
|
|
||||||
{BRANDS_WITH_LOGOS.map(m => (
|
{BRANDS_WITH_LOGOS.map(m => (
|
||||||
<div key={m.name} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
|
<div key={m.name} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
|
||||||
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
|
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
{/* Drugi zestaw (klon) do płynnego przejścia */}
|
|
||||||
{BRANDS_WITH_LOGOS.map(m => (
|
{BRANDS_WITH_LOGOS.map(m => (
|
||||||
<div key={`dup-${m.name}`} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
|
<div key={`dup-${m.name}`} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
|
||||||
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
|
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
|
||||||
@@ -224,8 +217,6 @@ export default function SerwisKlimatyzacjiPage() {
|
|||||||
<p className="text-xs text-text-muted">Nie widzisz swojej marki? Zadzwoń — prawdopodobnie też ją obsługujemy.</p>
|
<p className="text-xs text-text-muted">Nie widzisz swojej marki? Zadzwoń — prawdopodobnie też ją obsługujemy.</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* FAQ */}
|
|
||||||
<section className="py-16 bg-white">
|
<section className="py-16 bg-white">
|
||||||
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania</h2>
|
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania</h2>
|
||||||
@@ -244,8 +235,6 @@ export default function SerwisKlimatyzacjiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* CTA */}
|
|
||||||
<section className="py-16 bg-primary text-white">
|
<section className="py-16 bg-primary text-white">
|
||||||
<div className="max-w-2xl mx-auto px-4 text-center">
|
<div className="max-w-2xl mx-auto px-4 text-center">
|
||||||
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
<h2 className="text-2xl font-extrabold font-heading mb-4">
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ export default function ShopPage() {
|
|||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<HeroSection
|
<HeroSection
|
||||||
eyebrow="Sklep ThermCool"
|
|
||||||
title="Klimatyzatory split i multisplit"
|
title="Klimatyzatory split i multisplit"
|
||||||
subtitle={`${splitCount} klimatyzatorów split i ${multiCount} jednostek multisplit. Gree, Rotenso, Haier, Daikin, LG, Samsung i inne marki. Z montażem lub bez.`}
|
subtitle={`${splitCount} klimatyzatorów split i ${multiCount} jednostek multisplit. Gree, Rotenso, Haier, Daikin, LG, Samsung i inne marki. Z montażem lub bez.`}
|
||||||
ctaText="Zapytaj o montaż"
|
ctaText="Zapytaj o montaż"
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ Wróć do sklepu
|
|||||||
<h1 className="text-2xl font-bold text-primary font-heading mb-8">Złóż zamówienie</h1>
|
<h1 className="text-2xl font-bold text-primary font-heading mb-8">Złóż zamówienie</h1>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 gap-6">
|
<div className="grid grid-cols-1 gap-6">
|
||||||
{/* Podsumowanie produktów */}
|
|
||||||
<div className="bg-white rounded-xl border border-border p-6">
|
<div className="bg-white rounded-xl border border-border p-6">
|
||||||
<h2 className="text-base font-bold text-primary font-heading mb-4">Zamawiane produkty</h2>
|
<h2 className="text-base font-bold text-primary font-heading mb-4">Zamawiane produkty</h2>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
@@ -76,8 +75,6 @@ Wróć do sklepu
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Formularz */}
|
|
||||||
<form onSubmit={async (e) => {
|
<form onSubmit={async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const formData = new FormData(e.currentTarget);
|
const formData = new FormData(e.currentTarget);
|
||||||
@@ -90,8 +87,6 @@ Wróć do sklepu
|
|||||||
});
|
});
|
||||||
}} className="bg-white rounded-xl border border-border p-6 flex flex-col gap-4">
|
}} className="bg-white rounded-xl border border-border p-6 flex flex-col gap-4">
|
||||||
<h2 className="text-base font-bold text-primary font-heading">Twoje dane</h2>
|
<h2 className="text-base font-bold text-primary font-heading">Twoje dane</h2>
|
||||||
|
|
||||||
{/* Hidden: produkty jako JSON */}
|
|
||||||
<input type="hidden" name="products" value={JSON.stringify(items)} />
|
<input type="hidden" name="products" value={JSON.stringify(items)} />
|
||||||
<input type="hidden" name="total" value={total} />
|
<input type="hidden" name="total" value={total} />
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ export default async function MultisplitInquiryPage({ params }: Props) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<main className="bg-slate-50 min-h-screen">
|
<main className="bg-slate-50 min-h-screen">
|
||||||
{/* Breadcrumb */}
|
|
||||||
<div className="bg-white border-b border-border">
|
<div className="bg-white border-b border-border">
|
||||||
<div className="max-w-5xl mx-auto px-4 py-3">
|
<div className="max-w-5xl mx-auto px-4 py-3">
|
||||||
<nav className="flex items-center gap-1.5 text-xs text-text-muted">
|
<nav className="flex items-center gap-1.5 text-xs text-text-muted">
|
||||||
@@ -64,7 +63,6 @@ export default async function MultisplitInquiryPage({ params }: Props) {
|
|||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-10">
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-10">
|
||||||
{/* Lewa — zdjęcie + specyfikacja */}
|
|
||||||
<div className="flex flex-col gap-4">
|
<div className="flex flex-col gap-4">
|
||||||
<div className="bg-white rounded-2xl border border-border p-6">
|
<div className="bg-white rounded-2xl border border-border p-6">
|
||||||
<div className="flex items-center justify-between mb-4">
|
<div className="flex items-center justify-between mb-4">
|
||||||
@@ -91,8 +89,6 @@ export default async function MultisplitInquiryPage({ params }: Props) {
|
|||||||
<p className="text-sm text-text-muted">{product.shortDescription}</p>
|
<p className="text-sm text-text-muted">{product.shortDescription}</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Kluczowe parametry */}
|
|
||||||
<div className="bg-white rounded-2xl border border-border p-5">
|
<div className="bg-white rounded-2xl border border-border p-5">
|
||||||
<h2 className="text-sm font-bold text-primary mb-3">Kluczowe parametry</h2>
|
<h2 className="text-sm font-bold text-primary mb-3">Kluczowe parametry</h2>
|
||||||
<div className="grid grid-cols-2 gap-3">
|
<div className="grid grid-cols-2 gap-3">
|
||||||
@@ -112,8 +108,6 @@ export default async function MultisplitInquiryPage({ params }: Props) {
|
|||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Wycena indywidualna info */}
|
|
||||||
<div className="bg-accent/10 border border-accent/20 rounded-2xl p-5">
|
<div className="bg-accent/10 border border-accent/20 rounded-2xl p-5">
|
||||||
<p className="text-sm font-bold text-accent mb-1">Wycena indywidualna</p>
|
<p className="text-sm font-bold text-accent mb-1">Wycena indywidualna</p>
|
||||||
<p className="text-xs text-text-muted leading-relaxed">
|
<p className="text-xs text-text-muted leading-relaxed">
|
||||||
@@ -125,8 +119,6 @@ export default async function MultisplitInquiryPage({ params }: Props) {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Prawa — formularz */}
|
|
||||||
<div>
|
<div>
|
||||||
<div className="bg-white rounded-2xl border border-border p-6">
|
<div className="bg-white rounded-2xl border border-border p-6">
|
||||||
<h2 className="text-base font-extrabold text-primary font-heading mb-1">
|
<h2 className="text-base font-extrabold text-primary font-heading mb-1">
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ export function ContactForm() {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
||||||
{/* Imię */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="name" className="text-sm font-semibold text-primary">Imię i nazwisko <span className="text-red-500">*</span></label>
|
<label htmlFor="name" className="text-sm font-semibold text-primary">Imię i nazwisko <span className="text-red-500">*</span></label>
|
||||||
<input
|
<input
|
||||||
@@ -121,8 +120,6 @@ export function ContactForm() {
|
|||||||
/>
|
/>
|
||||||
{errors.name && <p className="text-red-500 text-xs font-medium">{errors.name.message}</p>}
|
{errors.name && <p className="text-red-500 text-xs font-medium">{errors.name.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Telefon */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="phone" className="text-sm font-semibold text-primary">Telefon <span className="text-red-500">*</span></label>
|
<label htmlFor="phone" className="text-sm font-semibold text-primary">Telefon <span className="text-red-500">*</span></label>
|
||||||
<input
|
<input
|
||||||
@@ -138,7 +135,6 @@ export function ContactForm() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
||||||
{/* Email */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="email" className="text-sm font-semibold text-primary">Adres e-mail</label>
|
<label htmlFor="email" className="text-sm font-semibold text-primary">Adres e-mail</label>
|
||||||
<input
|
<input
|
||||||
@@ -150,8 +146,6 @@ export function ContactForm() {
|
|||||||
/>
|
/>
|
||||||
{errors.email && <p className="text-red-500 text-xs font-medium">{errors.email.message}</p>}
|
{errors.email && <p className="text-red-500 text-xs font-medium">{errors.email.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Miasto */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="city" className="text-sm font-semibold text-primary">Miasto <span className="text-red-500">*</span></label>
|
<label htmlFor="city" className="text-sm font-semibold text-primary">Miasto <span className="text-red-500">*</span></label>
|
||||||
<select
|
<select
|
||||||
@@ -178,8 +172,6 @@ export function ContactForm() {
|
|||||||
{errors.city && <p className="text-red-500 text-xs font-medium">{errors.city.message}</p>}
|
{errors.city && <p className="text-red-500 text-xs font-medium">{errors.city.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Temat */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="subject" className="text-sm font-semibold text-primary">Temat rozmowy</label>
|
<label htmlFor="subject" className="text-sm font-semibold text-primary">Temat rozmowy</label>
|
||||||
<select
|
<select
|
||||||
@@ -195,8 +187,6 @@ export function ContactForm() {
|
|||||||
</select>
|
</select>
|
||||||
{errors.subject && <p className="text-red-500 text-xs font-medium">{errors.subject.message}</p>}
|
{errors.subject && <p className="text-red-500 text-xs font-medium">{errors.subject.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Warunkowe pola dla serwisu */}
|
|
||||||
{watch('subject') === 'serwis' && (
|
{watch('subject') === 'serwis' && (
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
@@ -236,8 +226,6 @@ export function ContactForm() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Wiadomość */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<label htmlFor="message" className="text-sm font-semibold text-primary">Wiadomość</label>
|
<label htmlFor="message" className="text-sm font-semibold text-primary">Wiadomość</label>
|
||||||
<textarea
|
<textarea
|
||||||
@@ -249,8 +237,6 @@ export function ContactForm() {
|
|||||||
/>
|
/>
|
||||||
{errors.message && <p className="text-red-500 text-xs font-medium">{errors.message.message}</p>}
|
{errors.message && <p className="text-red-500 text-xs font-medium">{errors.message.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Załączniki */}
|
|
||||||
<div className="flex flex-col gap-1.5">
|
<div className="flex flex-col gap-1.5">
|
||||||
<label className="text-sm font-medium text-primary">
|
<label className="text-sm font-medium text-primary">
|
||||||
Załącz zdjęcia <span className="text-text-muted font-normal">(opcjonalnie)</span>
|
Załącz zdjęcia <span className="text-text-muted font-normal">(opcjonalnie)</span>
|
||||||
@@ -282,8 +268,6 @@ export function ContactForm() {
|
|||||||
</label>
|
</label>
|
||||||
<p className="text-xs text-text-muted">Zdjęcia miejsca montażu znacznie przyspieszają wycenę.</p>
|
<p className="text-xs text-text-muted">Zdjęcia miejsca montażu znacznie przyspieszają wycenę.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* RODO */}
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<div className="flex items-start gap-3 cursor-pointer" onClick={() => setConsent(!consent)}>
|
<div className="flex items-start gap-3 cursor-pointer" onClick={() => setConsent(!consent)}>
|
||||||
<div className={`size-5 rounded border-2 shrink-0 mt-0.5 flex items-center justify-center transition-colors ${
|
<div className={`size-5 rounded border-2 shrink-0 mt-0.5 flex items-center justify-center transition-colors ${
|
||||||
|
|||||||
@@ -149,15 +149,12 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
return (
|
return (
|
||||||
<main className="bg-slate-50 min-h-screen py-12">
|
<main className="bg-slate-50 min-h-screen py-12">
|
||||||
<div className={`mx-auto px-4 sm:px-6 transition-all duration-500 ${step === 3 ? 'max-w-5xl' : 'max-w-2xl'}`}>
|
<div className={`mx-auto px-4 sm:px-6 transition-all duration-500 ${step === 3 ? 'max-w-5xl' : 'max-w-2xl'}`}>
|
||||||
{/* Header */}
|
|
||||||
<div className="text-center mb-8">
|
<div className="text-center mb-8">
|
||||||
<h1 className="text-3xl font-extrabold text-primary font-heading mb-2">
|
<h1 className="text-3xl font-extrabold text-primary font-heading mb-2">
|
||||||
Dobierz urządzenie
|
Dobierz urządzenie
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-text-muted">Odpowiedz na {STEPS.length} krótkich pytań — pokażemy Ci najlepsze opcje z naszej oferty</p>
|
<p className="text-text-muted">Odpowiedz na {STEPS.length} krótkich pytań — pokażemy Ci najlepsze opcje z naszej oferty</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Pasek postępu */}
|
|
||||||
<div className="flex items-center mb-8">
|
<div className="flex items-center mb-8">
|
||||||
{STEPS.map((s, i) => (
|
{STEPS.map((s, i) => (
|
||||||
<div key={s} className="flex items-start flex-1 last:flex-none">
|
<div key={s} className="flex items-start flex-1 last:flex-none">
|
||||||
@@ -175,11 +172,7 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Karty kroków */}
|
|
||||||
<div className="bg-white rounded-2xl border border-border p-6 md:p-8">
|
<div className="bg-white rounded-2xl border border-border p-6 md:p-8">
|
||||||
|
|
||||||
{/* Krok 0: Pomieszczenie */}
|
|
||||||
{step === 0 && (
|
{step === 0 && (
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<div className="flex items-center gap-3 mb-2">
|
<div className="flex items-center gap-3 mb-2">
|
||||||
@@ -191,8 +184,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
<p className="text-xs text-text-muted">Metraż i warunki</p>
|
<p className="text-xs text-text-muted">Metraż i warunki</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Lista pomieszczeń */}
|
|
||||||
<div className="flex flex-col gap-3">
|
<div className="flex flex-col gap-3">
|
||||||
{pomieszczenia.map((p, i) => (
|
{pomieszczenia.map((p, i) => (
|
||||||
<div key={i} className="bg-slate-50 rounded-xl border border-border p-4">
|
<div key={i} className="bg-slate-50 rounded-xl border border-border p-4">
|
||||||
@@ -247,8 +238,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
+ Dodaj kolejne pomieszczenie
|
+ Dodaj kolejne pomieszczenie
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Ograniczenie szerokości */}
|
|
||||||
<div className="bg-slate-50 border border-border rounded-xl p-4">
|
<div className="bg-slate-50 border border-border rounded-xl p-4">
|
||||||
<div className="flex items-start justify-between gap-3 mb-2">
|
<div className="flex items-start justify-between gap-3 mb-2">
|
||||||
<div>
|
<div>
|
||||||
@@ -385,8 +374,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Krok 2: Instalacja */}
|
|
||||||
{step === 1 && (
|
{step === 1 && (
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<div className="flex items-center gap-3 mb-2">
|
<div className="flex items-center gap-3 mb-2">
|
||||||
@@ -461,8 +448,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Krok 3: Budżet */}
|
|
||||||
{step === 2 && (
|
{step === 2 && (
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<div className="flex items-center gap-3 mb-2">
|
<div className="flex items-center gap-3 mb-2">
|
||||||
@@ -560,7 +545,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
|
|
||||||
{step === 2 && (
|
{step === 2 && (
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
{/* Podsumowanie */}
|
|
||||||
<div className="bg-slate-50 rounded-2xl border border-border p-5">
|
<div className="bg-slate-50 rounded-2xl border border-border p-5">
|
||||||
<h2 className="text-lg font-bold text-primary font-heading mb-4">
|
<h2 className="text-lg font-bold text-primary font-heading mb-4">
|
||||||
Dopasowane klimatyzatory
|
Dopasowane klimatyzatory
|
||||||
@@ -603,8 +587,6 @@ export function KalkulatorClient({ products }: Props) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Nawigacja */}
|
|
||||||
<div className="flex justify-between mt-8 pt-6 border-t border-border">
|
<div className="flex justify-between mt-8 pt-6 border-t border-border">
|
||||||
{step > 0 ? (
|
{step > 0 ? (
|
||||||
<button onClick={() => setStep(s => s - 1)}
|
<button onClick={() => setStep(s => s - 1)}
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ export function Footer() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className="bg-[#00188D] text-primary-foreground">
|
<footer className="bg-[#00188D] text-primary-foreground">
|
||||||
{/* Main Footer Content */}
|
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12">
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12">
|
||||||
{/* Column 1: Company details */}
|
|
||||||
<div className="flex flex-col gap-4">
|
<div className="flex flex-col gap-4">
|
||||||
<Link href="/" className="inline-block">
|
<Link href="/" className="inline-block">
|
||||||
<span className="text-2xl font-bold font-heading text-white">
|
<span className="text-2xl font-bold font-heading text-white">
|
||||||
@@ -53,8 +51,6 @@ export function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Column 2: Services */}
|
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
||||||
Usługi
|
Usługi
|
||||||
@@ -74,8 +70,6 @@ export function Footer() {
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Column 3: Information */}
|
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
||||||
Informacje
|
Informacje
|
||||||
@@ -118,8 +112,6 @@ export function Footer() {
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Column 4: Obsługa Klienta */}
|
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
<h3 className="text-base font-semibold font-heading text-white mb-6 uppercase tracking-wider">
|
||||||
Obsługa Klienta
|
Obsługa Klienta
|
||||||
@@ -134,8 +126,6 @@ export function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Bottom Bar */}
|
|
||||||
<div className="border-t border-slate-800 bg-slate-950/40 py-6">
|
<div className="border-t border-slate-800 bg-slate-950/40 py-6">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col sm:flex-row justify-between items-center gap-4">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col sm:flex-row justify-between items-center gap-4">
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
@@ -146,7 +136,6 @@ export function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex items-center gap-6">
|
<div className="flex items-center gap-6">
|
||||||
{/* Social Icons */}
|
|
||||||
<div className="flex gap-4">
|
<div className="flex gap-4">
|
||||||
<a
|
<a
|
||||||
href={companyDetails.socials.facebook}
|
href={companyDetails.socials.facebook}
|
||||||
@@ -167,8 +156,6 @@ export function Footer() {
|
|||||||
<Instagram className="size-4" />
|
<Instagram className="size-4" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Trust Symbol */}
|
|
||||||
<div className="flex items-center gap-1.5 text-xs text-slate-400 border-l border-slate-800 pl-6">
|
<div className="flex items-center gap-1.5 text-xs text-slate-400 border-l border-slate-800 pl-6">
|
||||||
<ShieldCheck className="size-4 text-white" />
|
<ShieldCheck className="size-4 text-white" />
|
||||||
<span>Bezpieczne płatności SSL</span>
|
<span>Bezpieczne płatności SSL</span>
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ export function Header() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* ----------------- DESKTOP: NAV BAR (STICKY) ----------------- */}
|
|
||||||
<header
|
<header
|
||||||
className={cn(
|
className={cn(
|
||||||
"hidden lg:block sticky top-0 z-40 bg-background transition-all duration-300 border-b border-border",
|
"hidden lg:block sticky top-0 z-40 bg-background transition-all duration-300 border-b border-border",
|
||||||
@@ -93,16 +92,12 @@ export function Header() {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center justify-between gap-4">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center justify-between gap-4">
|
||||||
|
|
||||||
{/* Left: Logo */}
|
|
||||||
<Link href="/" className="shrink-0 flex items-center gap-3">
|
<Link href="/" className="shrink-0 flex items-center gap-3">
|
||||||
<span className="text-2xl font-bold font-heading text-primary">
|
<span className="text-2xl font-bold font-heading text-primary">
|
||||||
{companyDetails.shortName}
|
{companyDetails.shortName}
|
||||||
<span className="text-accent">.</span>
|
<span className="text-accent">.</span>
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Middle: Main Navigation */}
|
|
||||||
<nav className="flex items-center gap-6">
|
<nav className="flex items-center gap-6">
|
||||||
<NavDropdown
|
<NavDropdown
|
||||||
label="Klimatyzacja"
|
label="Klimatyzacja"
|
||||||
@@ -145,8 +140,6 @@ export function Header() {
|
|||||||
Kontakt
|
Kontakt
|
||||||
</Link>
|
</Link>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{/* Right: Phone, Cart, CTA */}
|
|
||||||
<div className="flex items-center gap-5">
|
<div className="flex items-center gap-5">
|
||||||
<a
|
<a
|
||||||
href={`tel:${companyDetails.phoneRaw}`}
|
href={`tel:${companyDetails.phoneRaw}`}
|
||||||
@@ -173,8 +166,6 @@ export function Header() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* ----------------- MOBILE: HEADER (STICKY) ----------------- */}
|
|
||||||
<header
|
<header
|
||||||
className={cn(
|
className={cn(
|
||||||
"lg:hidden sticky top-0 z-40 bg-background border-b border-border transition-all duration-300",
|
"lg:hidden sticky top-0 z-40 bg-background border-b border-border transition-all duration-300",
|
||||||
@@ -182,15 +173,12 @@ export function Header() {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 flex items-center justify-between">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 flex items-center justify-between">
|
||||||
{/* Mobile Logo */}
|
|
||||||
<Link href="/" className="shrink-0 flex items-center">
|
<Link href="/" className="shrink-0 flex items-center">
|
||||||
<span className="text-xl font-bold font-heading text-primary">
|
<span className="text-xl font-bold font-heading text-primary">
|
||||||
{companyDetails.shortName}
|
{companyDetails.shortName}
|
||||||
<span className="text-accent">.</span>
|
<span className="text-accent">.</span>
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Mobile Icons (Cart + Hamburger) */}
|
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<Link href="/koszyk" className="p-2 text-primary hover:text-accent hover:bg-muted transition-colors rounded-lg relative outline-none" aria-label="Koszyk">
|
<Link href="/koszyk" className="p-2 text-primary hover:text-accent hover:bg-muted transition-colors rounded-lg relative outline-none" aria-label="Koszyk">
|
||||||
<ShoppingBag className="size-5" />
|
<ShoppingBag className="size-5" />
|
||||||
@@ -211,8 +199,6 @@ export function Header() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* ----------------- MOBILE MENU DRAWER ----------------- */}
|
|
||||||
<MobileMenu
|
<MobileMenu
|
||||||
isOpen={isMobileMenuOpen}
|
isOpen={isMobileMenuOpen}
|
||||||
onClose={() => setIsMobileMenuOpen(false)}
|
onClose={() => setIsMobileMenuOpen(false)}
|
||||||
|
|||||||
@@ -99,8 +99,6 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
{/* Usługi i serwis */}
|
|
||||||
<details className="collapse collapse-arrow border-b border-border rounded-none">
|
<details className="collapse collapse-arrow border-b border-border rounded-none">
|
||||||
<summary className="collapse-title text-sm font-medium text-primary hover:text-accent py-3 px-0 min-h-0">
|
<summary className="collapse-title text-sm font-medium text-primary hover:text-accent py-3 px-0 min-h-0">
|
||||||
Usługi i serwis
|
Usługi i serwis
|
||||||
@@ -124,9 +122,6 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
{/* 2. Pompy Ciepła */}
|
{/* 2. Pompy Ciepła */}
|
||||||
|
|
||||||
|
|
||||||
{/* Sklep */}
|
|
||||||
<details className="collapse collapse-arrow border-b border-border rounded-none">
|
<details className="collapse collapse-arrow border-b border-border rounded-none">
|
||||||
<summary className="collapse-title text-sm font-medium text-primary hover:text-accent py-3 px-0 min-h-0">
|
<summary className="collapse-title text-sm font-medium text-primary hover:text-accent py-3 px-0 min-h-0">
|
||||||
Sklep
|
Sklep
|
||||||
@@ -200,8 +195,6 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Drawer Footer */}
|
|
||||||
<div className="border-t border-border p-6 bg-slate-50 flex flex-col gap-4">
|
<div className="border-t border-border p-6 bg-slate-50 flex flex-col gap-4">
|
||||||
<a
|
<a
|
||||||
href={`tel:${companyDetails.phoneRaw}`}
|
href={`tel:${companyDetails.phoneRaw}`}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ export function AboutStory() {
|
|||||||
return (
|
return (
|
||||||
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-20 items-center">
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-20 items-center">
|
||||||
{/* Lewa: Obraz */}
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className="relative aspect-[4/5] rounded-3xl overflow-hidden shadow-2xl">
|
<div className="relative aspect-[4/5] rounded-3xl overflow-hidden shadow-2xl">
|
||||||
<Image
|
<Image
|
||||||
@@ -18,7 +17,6 @@ export function AboutStory() {
|
|||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{/* Ozdobny element zaufania */}
|
|
||||||
<div className="absolute -bottom-8 -right-8 bg-white p-6 rounded-2xl shadow-xl hidden md:block">
|
<div className="absolute -bottom-8 -right-8 bg-white p-6 rounded-2xl shadow-xl hidden md:block">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className="flex-shrink-0 w-16 h-16 bg-accent/10 rounded-full flex items-center justify-center">
|
<div className="flex-shrink-0 w-16 h-16 bg-accent/10 rounded-full flex items-center justify-center">
|
||||||
@@ -33,8 +31,6 @@ export function AboutStory() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Prawa: Tekst */}
|
|
||||||
<div>
|
<div>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow="Nasza Historia"
|
eyebrow="Nasza Historia"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export function AdvantagesBar() {
|
|||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-6">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-6">
|
||||||
{advantages.map((adv, idx) => (
|
{advantages.map((adv, idx) => (
|
||||||
<div key={idx} className="flex items-center justify-center md:justify-start gap-3">
|
<div key={idx} className="flex items-center justify-center gap-3">
|
||||||
<adv.icon className="size-5 text-accent shrink-0" />
|
<adv.icon className="size-5 text-accent shrink-0" />
|
||||||
<span className="text-sm font-medium leading-tight">
|
<span className="text-sm font-medium leading-tight">
|
||||||
{adv.text}
|
{adv.text}
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ export function BlogPreview() {
|
|||||||
subtitle="Dzielimy się wiedzą i doświadczeniem. Zobacz nasze wpisy dotyczące klimatyzacji i pomp ciepła oraz oszczędzania energii."
|
subtitle="Dzielimy się wiedzą i doświadczeniem. Zobacz nasze wpisy dotyczące klimatyzacji i pomp ciepła oraz oszczędzania energii."
|
||||||
align="center"
|
align="center"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Blog Posts Grid */}
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
{latestPosts.map((post) => (
|
{latestPosts.map((post) => (
|
||||||
<article
|
<article
|
||||||
@@ -43,7 +41,6 @@ export function BlogPreview() {
|
|||||||
className="group flex flex-col justify-between border border-border rounded-xl overflow-hidden hover:shadow-md transition-shadow h-full"
|
className="group flex flex-col justify-between border border-border rounded-xl overflow-hidden hover:shadow-md transition-shadow h-full"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
{/* Thumbnail */}
|
|
||||||
<div className="relative aspect-video bg-slate-50 border-b border-border">
|
<div className="relative aspect-video bg-slate-50 border-b border-border">
|
||||||
<Image
|
<Image
|
||||||
src={post.image}
|
src={post.image}
|
||||||
@@ -53,10 +50,7 @@ export function BlogPreview() {
|
|||||||
sizes="(max-width: 768px) 100vw, 33vw"
|
sizes="(max-width: 768px) 100vw, 33vw"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Content */}
|
|
||||||
<div className="p-6">
|
<div className="p-6">
|
||||||
{/* Category & Date */}
|
|
||||||
<div className="flex items-center gap-4 text-xs text-text-muted mb-3">
|
<div className="flex items-center gap-4 text-xs text-text-muted mb-3">
|
||||||
<span className="font-semibold uppercase tracking-wider text-accent">
|
<span className="font-semibold uppercase tracking-wider text-accent">
|
||||||
{getCategoryLabel(post.category)}
|
{getCategoryLabel(post.category)}
|
||||||
@@ -66,20 +60,14 @@ export function BlogPreview() {
|
|||||||
<span>{formatDate(post.date)}</span>
|
<span>{formatDate(post.date)}</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Title */}
|
|
||||||
<h3 className="text-lg font-bold text-primary font-heading line-clamp-2 leading-snug group-hover:text-accent transition-colors">
|
<h3 className="text-lg font-bold text-primary font-heading line-clamp-2 leading-snug group-hover:text-accent transition-colors">
|
||||||
<Link href={`/blog/${post.slug}`}>{post.title}</Link>
|
<Link href={`/blog/${post.slug}`}>{post.title}</Link>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
{/* Excerpt */}
|
|
||||||
<p className="text-sm text-text-muted mt-3 line-clamp-2 leading-relaxed">
|
<p className="text-sm text-text-muted mt-3 line-clamp-2 leading-relaxed">
|
||||||
{post.excerpt}
|
{post.excerpt}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Read More Link */}
|
|
||||||
<div className="p-6 pt-0 mt-auto">
|
<div className="p-6 pt-0 mt-auto">
|
||||||
<Link
|
<Link
|
||||||
href={`/blog/${post.slug}`}
|
href={`/blog/${post.slug}`}
|
||||||
@@ -92,8 +80,6 @@ export function BlogPreview() {
|
|||||||
</article>
|
</article>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Blog Catalog Button */}
|
|
||||||
<div className="flex justify-center mt-12">
|
<div className="flex justify-center mt-12">
|
||||||
<Link href="/blog" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
|
<Link href="/blog" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ export const BrandsGrid = () => {
|
|||||||
href={`/sklep?brand=${encodeURIComponent(brand.name)}`}
|
href={`/sklep?brand=${encodeURIComponent(brand.name)}`}
|
||||||
className="group flex justify-center items-center h-16 bg-slate-50 rounded-xl p-3 border border-border hover:border-accent hover:bg-accent/5 hover:shadow-sm transition-all duration-300"
|
className="group flex justify-center items-center h-16 bg-slate-50 rounded-xl p-3 border border-border hover:border-accent hover:bg-accent/5 hover:shadow-sm transition-all duration-300"
|
||||||
>
|
>
|
||||||
{/* Tutaj docelowo można dać tag Image */}
|
|
||||||
<span className="font-bold text-primary text-sm md:text-base tracking-tight opacity-70 group-hover:opacity-100 group-hover:text-accent transition-all">{brand.name}</span>
|
<span className="font-bold text-primary text-sm md:text-base tracking-tight opacity-70 group-hover:opacity-100 group-hover:text-accent transition-all">{brand.name}</span>
|
||||||
</Link>
|
</Link>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ const steps = [
|
|||||||
export const ConfiguratorTeaser = () => {
|
export const ConfiguratorTeaser = () => {
|
||||||
return (
|
return (
|
||||||
<section className="py-20 bg-primary text-white relative overflow-hidden">
|
<section className="py-20 bg-primary text-white relative overflow-hidden">
|
||||||
{/* Background decoration */}
|
|
||||||
<div className="absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-accent/20 to-transparent pointer-events-none" />
|
<div className="absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-accent/20 to-transparent pointer-events-none" />
|
||||||
<div className="absolute -bottom-24 -left-24 w-64 h-64 bg-accent rounded-full blur-[120px] opacity-20 pointer-events-none" />
|
<div className="absolute -bottom-24 -left-24 w-64 h-64 bg-accent rounded-full blur-[120px] opacity-20 pointer-events-none" />
|
||||||
|
|
||||||
@@ -39,7 +38,6 @@ export const ConfiguratorTeaser = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
{/* Visual representation of steps */}
|
|
||||||
<div className="bg-white/10 backdrop-blur-sm border border-white/20 rounded-2xl p-8">
|
<div className="bg-white/10 backdrop-blur-sm border border-white/20 rounded-2xl p-8">
|
||||||
<div className="space-y-6 relative before:absolute before:inset-0 before:ml-6 before:-translate-x-px md:before:mx-auto md:before:translate-x-0 before:h-full before:w-0.5 before:bg-gradient-to-b before:from-transparent before:via-white/30 before:to-transparent">
|
<div className="space-y-6 relative before:absolute before:inset-0 before:ml-6 before:-translate-x-px md:before:mx-auto md:before:translate-x-0 before:h-full before:w-0.5 before:bg-gradient-to-b before:from-transparent before:via-white/30 before:to-transparent">
|
||||||
{steps.map((step, idx) => {
|
{steps.map((step, idx) => {
|
||||||
@@ -57,8 +55,6 @@ export const ConfiguratorTeaser = () => {
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Pro tip card */}
|
|
||||||
<div className="mt-8 bg-accent/20 border border-accent/40 rounded-xl p-4 flex items-start">
|
<div className="mt-8 bg-accent/20 border border-accent/40 rounded-xl p-4 flex items-start">
|
||||||
<Lightbulb className="w-6 h-6 text-accent shrink-0 mr-3 mt-0.5" />
|
<Lightbulb className="w-6 h-6 text-accent shrink-0 mr-3 mt-0.5" />
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ export function ContactSection() {
|
|||||||
return (
|
return (
|
||||||
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 lg:gap-24">
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 lg:gap-24">
|
||||||
{/* Lewa kolumna: Dane kontaktowe */}
|
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col">
|
||||||
<h2 className="text-3xl md:text-4xl font-extrabold text-primary font-heading mb-6">
|
<h2 className="text-3xl md:text-4xl font-extrabold text-primary font-heading mb-6">
|
||||||
Porozmawiajmy o Twoim projekcie
|
Porozmawiajmy o Twoim projekcie
|
||||||
@@ -17,7 +16,6 @@ export function ContactSection() {
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="space-y-8 flex-grow">
|
<div className="space-y-8 flex-grow">
|
||||||
{/* Telefon */}
|
|
||||||
<div className="flex items-start gap-4 group">
|
<div className="flex items-start gap-4 group">
|
||||||
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
||||||
<Phone className="w-6 h-6" />
|
<Phone className="w-6 h-6" />
|
||||||
@@ -29,8 +27,6 @@ export function ContactSection() {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Email */}
|
|
||||||
<div className="flex items-start gap-4 group">
|
<div className="flex items-start gap-4 group">
|
||||||
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
||||||
<Mail className="w-6 h-6" />
|
<Mail className="w-6 h-6" />
|
||||||
@@ -42,8 +38,6 @@ export function ContactSection() {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Adres */}
|
|
||||||
<div className="flex items-start gap-4 group">
|
<div className="flex items-start gap-4 group">
|
||||||
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
<div className="w-12 h-12 rounded-xl bg-accent/10 text-accent flex items-center justify-center shrink-0 group-hover:bg-accent group-hover:text-white transition-colors">
|
||||||
<MapPin className="w-6 h-6" />
|
<MapPin className="w-6 h-6" />
|
||||||
@@ -57,8 +51,6 @@ export function ContactSection() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Godziny i NIP */}
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-8 pt-8 border-t border-border">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-8 pt-8 border-t border-border">
|
||||||
<div className="flex items-start gap-3">
|
<div className="flex items-start gap-3">
|
||||||
<Clock className="w-5 h-5 text-primary/60 mt-0.5 shrink-0" />
|
<Clock className="w-5 h-5 text-primary/60 mt-0.5 shrink-0" />
|
||||||
@@ -77,10 +69,7 @@ export function ContactSection() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Prawa kolumna: Formularz */}
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
{/* Tło dekoracyjne */}
|
|
||||||
<div className="absolute inset-0 bg-primary/5 rounded-[2.5rem] transform translate-x-4 translate-y-4 -z-10 hidden sm:block" />
|
<div className="absolute inset-0 bg-primary/5 rounded-[2.5rem] transform translate-x-4 translate-y-4 -z-10 hidden sm:block" />
|
||||||
<ContactForm />
|
<ContactForm />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ export function CtaBanner({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="relative overflow-hidden py-16 md:py-20">
|
<section className="relative overflow-hidden py-16 md:py-20">
|
||||||
{/* Background and overlays */}
|
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"absolute inset-0 z-0",
|
"absolute inset-0 z-0",
|
||||||
@@ -38,7 +37,6 @@ export function CtaBanner({
|
|||||||
|
|
||||||
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="flex flex-col lg:flex-row items-center justify-between gap-10">
|
<div className="flex flex-col lg:flex-row items-center justify-between gap-10">
|
||||||
{/* Text Area */}
|
|
||||||
<div className="max-w-2xl text-center lg:text-left flex flex-col gap-3">
|
<div className="max-w-2xl text-center lg:text-left flex flex-col gap-3">
|
||||||
<h2
|
<h2
|
||||||
className={cn(
|
className={cn(
|
||||||
@@ -57,8 +55,6 @@ export function CtaBanner({
|
|||||||
{subtitle}
|
{subtitle}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Action buttons */}
|
|
||||||
<div className="flex flex-col sm:flex-row items-center gap-4 mt-8 w-full sm:w-auto shrink-0 justify-center">
|
<div className="flex flex-col sm:flex-row items-center gap-4 mt-8 w-full sm:w-auto shrink-0 justify-center">
|
||||||
<Link href={ctaLink} className="w-fit sm:w-auto btn btn-primary font-bold text-white px-6">
|
<Link href={ctaLink} className="w-fit sm:w-auto btn btn-primary font-bold text-white px-6">
|
||||||
<span>{ctaText}</span>
|
<span>{ctaText}</span>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { companyDetails } from '@/content/company';
|
|||||||
export const EmergencyBlock = () => {
|
export const EmergencyBlock = () => {
|
||||||
return (
|
return (
|
||||||
<section className="py-12 bg-cta text-white relative overflow-hidden">
|
<section className="py-12 bg-cta text-white relative overflow-hidden">
|
||||||
{/* Dekoracyjne tło */}
|
|
||||||
<div className="absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-white/10 to-transparent pointer-events-none" />
|
<div className="absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-white/10 to-transparent pointer-events-none" />
|
||||||
<div className="absolute -bottom-24 -left-24 w-64 h-64 bg-white/20 rounded-full blur-[100px] pointer-events-none" />
|
<div className="absolute -bottom-24 -left-24 w-64 h-64 bg-white/20 rounded-full blur-[100px] pointer-events-none" />
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ export function FeaturedPost({ post }: FeaturedPostProps) {
|
|||||||
return (
|
return (
|
||||||
<div className="group relative rounded-2xl overflow-hidden bg-white border border-border shadow-sm hover:shadow-lg transition-all duration-300">
|
<div className="group relative rounded-2xl overflow-hidden bg-white border border-border shadow-sm hover:shadow-lg transition-all duration-300">
|
||||||
<div className="flex flex-col md:flex-row">
|
<div className="flex flex-col md:flex-row">
|
||||||
{/* Obraz */}
|
|
||||||
<div className="relative w-full md:w-3/5 aspect-video md:aspect-auto md:min-h-[400px]">
|
<div className="relative w-full md:w-3/5 aspect-video md:aspect-auto md:min-h-[400px]">
|
||||||
<Image
|
<Image
|
||||||
src={post.image || '/images/hero/hero-section-image.webp'}
|
src={post.image || '/images/hero/hero-section-image.webp'}
|
||||||
@@ -43,8 +42,6 @@ export function FeaturedPost({ post }: FeaturedPostProps) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Treść */}
|
|
||||||
<div className="p-8 md:p-12 flex flex-col justify-center w-full md:w-2/5">
|
<div className="p-8 md:p-12 flex flex-col justify-center w-full md:w-2/5">
|
||||||
<div className="flex items-center gap-4 text-text-muted text-sm font-medium mb-4">
|
<div className="flex items-center gap-4 text-text-muted text-sm font-medium mb-4">
|
||||||
<div className="flex items-center gap-1.5">
|
<div className="flex items-center gap-1.5">
|
||||||
|
|||||||
@@ -16,15 +16,11 @@ export function FeaturedProducts() {
|
|||||||
subtitle="Poznaj wybrane modele urządzeń chłodzących i grzewczych od wiodących marek. Zapewniamy kompleksowy montaż."
|
subtitle="Poznaj wybrane modele urządzeń chłodzących i grzewczych od wiodących marek. Zapewniamy kompleksowy montaż."
|
||||||
align="center"
|
align="center"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Products Grid */}
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 md:gap-8">
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 md:gap-8">
|
||||||
{featured.map((product) => (
|
{featured.map((product) => (
|
||||||
<ProductCard key={product.slug} product={product} />
|
<ProductCard key={product.slug} product={product} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Catalog Link */}
|
|
||||||
<div className="flex justify-center mt-12">
|
<div className="flex justify-center mt-12">
|
||||||
<Link href="/sklep" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
|
<Link href="/sklep" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ export const FundingSection = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
{/* Dekoracyjna karta */}
|
|
||||||
<div className="bg-white rounded-3xl p-8 shadow-xl relative z-10 border border-white/50">
|
<div className="bg-white rounded-3xl p-8 shadow-xl relative z-10 border border-white/50">
|
||||||
<div className="flex justify-between items-start mb-8">
|
<div className="flex justify-between items-start mb-8">
|
||||||
<div>
|
<div>
|
||||||
@@ -81,8 +80,6 @@ export const FundingSection = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Background elements */}
|
|
||||||
<div className="absolute -top-6 -right-6 w-full h-full bg-accent/20 rounded-3xl -z-10 blur-sm"></div>
|
<div className="absolute -top-6 -right-6 w-full h-full bg-accent/20 rounded-3xl -z-10 blur-sm"></div>
|
||||||
<div className="absolute -bottom-8 -left-8 w-32 h-32 bg-white/40 rounded-full -z-10 blur-xl"></div>
|
<div className="absolute -bottom-8 -left-8 w-32 h-32 bg-white/40 rounded-full -z-10 blur-xl"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { ArrowRight, Star } from "lucide-react";
|
|||||||
import { buttonClasses } from "@/components/ui/Button";
|
import { buttonClasses } from "@/components/ui/Button";
|
||||||
|
|
||||||
export interface HeroSectionProps {
|
export interface HeroSectionProps {
|
||||||
eyebrow?: string;
|
|
||||||
title?: React.ReactNode;
|
title?: React.ReactNode;
|
||||||
subtitle?: string;
|
subtitle?: string;
|
||||||
ctaText?: string;
|
ctaText?: string;
|
||||||
@@ -16,7 +15,6 @@ export interface HeroSectionProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function HeroSection({
|
export function HeroSection({
|
||||||
eyebrow = "Wrocław i Dolny Śląsk",
|
|
||||||
title = (
|
title = (
|
||||||
<>
|
<>
|
||||||
<span className="text-white">Klimatyzacja</span><br />
|
<span className="text-white">Klimatyzacja</span><br />
|
||||||
@@ -42,31 +40,16 @@ export function HeroSection({
|
|||||||
sizes="100vw"
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* NAKŁADKA POD TEKST - jednolita, przyciemniająca */}
|
|
||||||
<div className="absolute inset-0 bg-black/50" />
|
<div className="absolute inset-0 bg-black/50" />
|
||||||
|
|
||||||
<div className="relative z-10 w-full max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 md:py-24">
|
<div className="relative z-10 w-full max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 md:py-24">
|
||||||
<div className="flex flex-col items-start text-left max-w-3xl">
|
<div className="flex flex-col items-start text-left max-w-3xl">
|
||||||
{/* Badge */}
|
|
||||||
{eyebrow && (
|
|
||||||
<div className="inline-flex items-center gap-1.5 px-3.5 py-1.5 rounded-full bg-accent/20 border border-accent/30 text-white text-xs font-semibold uppercase tracking-wider mb-6 font-heading">
|
|
||||||
<span className="size-2 rounded-full bg-accent" />
|
|
||||||
{eyebrow}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* Heading */}
|
|
||||||
<h1 className="text-3xl md:text-5xl lg:text-6xl font-extrabold tracking-tight font-heading leading-[1.1] text-white">
|
<h1 className="text-3xl md:text-5xl lg:text-6xl font-extrabold tracking-tight font-heading leading-[1.1] text-white">
|
||||||
{title}
|
{title}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
{/* Subtitle */}
|
|
||||||
<p className="mt-6 text-base md:text-lg lg:text-xl text-white/90 max-w-2xl leading-relaxed">
|
<p className="mt-6 text-base md:text-lg lg:text-xl text-white/90 max-w-2xl leading-relaxed">
|
||||||
{subtitle}
|
{subtitle}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Optional Features List */}
|
|
||||||
{features && features.length > 0 && (
|
{features && features.length > 0 && (
|
||||||
<ul className="mt-6 grid grid-cols-2 gap-3 text-white/90 font-medium">
|
<ul className="mt-6 grid grid-cols-2 gap-3 text-white/90 font-medium">
|
||||||
{features.map((feature, idx) => (
|
{features.map((feature, idx) => (
|
||||||
@@ -77,8 +60,6 @@ export function HeroSection({
|
|||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* CTA Buttons */}
|
|
||||||
<div className="mt-10 flex flex-col sm:flex-row items-start sm:items-center gap-4 w-full sm:w-auto">
|
<div className="mt-10 flex flex-col sm:flex-row items-start sm:items-center gap-4 w-full sm:w-auto">
|
||||||
{ctaText && ctaLink && (
|
{ctaText && ctaLink && (
|
||||||
<Link href={ctaLink} className={buttonClasses({ variant: 'primary', size: 'md', className: 'w-fit sm:w-auto group' })}>
|
<Link href={ctaLink} className={buttonClasses({ variant: 'primary', size: 'md', className: 'w-fit sm:w-auto group' })}>
|
||||||
|
|||||||
@@ -20,11 +20,7 @@ export function HomeServices() {
|
|||||||
Profesjonalna obsługa, certyfikowani specjaliści i szybki czas reakcji na terenie całego Wrocławia. Zadbaj o czyste powietrze i wydajność swoich urządzeń.
|
Profesjonalna obsługa, certyfikowani specjaliści i szybki czas reakcji na terenie całego Wrocławia. Zadbaj o czyste powietrze i wydajność swoich urządzeń.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Cards Grid */}
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
|
|
||||||
{/* Card 1: Montaż klimatyzacji */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -41,8 +37,6 @@ export function HomeServices() {
|
|||||||
<p className="text-[10px] text-text-muted mt-1">* cena standardowego montażu do 5m</p>
|
<p className="text-[10px] text-text-muted mt-1">* cena standardowego montażu do 5m</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 2: Czyszczenie */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -58,8 +52,6 @@ export function HomeServices() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 250 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 250 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 3: Przegląd techniczny */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -75,8 +67,6 @@ export function HomeServices() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 150 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 150 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 4: Uzupełnienie czynnika */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
@@ -92,8 +82,6 @@ export function HomeServices() {
|
|||||||
<p className="text-xl font-extrabold text-primary">od 180 zł</p>
|
<p className="text-xl font-extrabold text-primary">od 180 zł</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Card 5: Naprawa usterek */}
|
|
||||||
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
<div className="bg-white p-8 flex flex-col rounded-2xl shadow-sm border border-border">
|
||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
<div className="size-12 bg-slate-100 flex items-center justify-center shrink-0 border border-slate-200 rounded-lg">
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ export function MapEmbed() {
|
|||||||
className="absolute inset-0"
|
className="absolute inset-0"
|
||||||
></iframe>
|
></iframe>
|
||||||
*/}
|
*/}
|
||||||
|
|
||||||
{/* Poniżej znajduje się Placeholder */}
|
|
||||||
<div className="absolute inset-0 flex items-center justify-center bg-slate-200 border-y border-border">
|
<div className="absolute inset-0 flex items-center justify-center bg-slate-200 border-y border-border">
|
||||||
<div className="text-center p-6 bg-white/80 backdrop-blur-sm rounded-xl border border-white/50 shadow-sm max-w-sm mx-4">
|
<div className="text-center p-6 bg-white/80 backdrop-blur-sm rounded-xl border border-white/50 shadow-sm max-w-sm mx-4">
|
||||||
<svg className="w-12 h-12 text-primary/40 mx-auto mb-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
<svg className="w-12 h-12 text-primary/40 mx-auto mb-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ export function PillarsSection() {
|
|||||||
<section className="py-16 md:py-24 bg-white">
|
<section className="py-16 md:py-24 bg-white">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||||
{/* Pillar 1: Chłód i Ogrzewanie */}
|
|
||||||
<div className="group relative rounded-2xl border border-border p-8 md:p-12 bg-slate-50 hover:bg-white hover:border-accent hover:shadow-xl transition-all duration-300 flex flex-col justify-between overflow-hidden">
|
<div className="group relative rounded-2xl border border-border p-8 md:p-12 bg-slate-50 hover:bg-white hover:border-accent hover:shadow-xl transition-all duration-300 flex flex-col justify-between overflow-hidden">
|
||||||
{/* Visual background gradient glow on hover */}
|
|
||||||
<div className="absolute right-0 top-0 size-48 rounded-full bg-accent/5 filter blur-3xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
<div className="absolute right-0 top-0 size-48 rounded-full bg-accent/5 filter blur-3xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -32,10 +30,7 @@ export function PillarsSection() {
|
|||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Pillar 2: Twój Dom */}
|
|
||||||
<div className="group relative rounded-2xl border border-border p-8 md:p-12 bg-slate-50 hover:bg-white hover:border-cta hover:shadow-xl transition-all duration-300 flex flex-col justify-between overflow-hidden">
|
<div className="group relative rounded-2xl border border-border p-8 md:p-12 bg-slate-50 hover:bg-white hover:border-cta hover:shadow-xl transition-all duration-300 flex flex-col justify-between overflow-hidden">
|
||||||
{/* Visual background gradient glow on hover */}
|
|
||||||
<div className="absolute right-0 top-0 size-48 rounded-full bg-cta/5 filter blur-3xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
<div className="absolute right-0 top-0 size-48 rounded-full bg-cta/5 filter blur-3xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -47,15 +47,12 @@ export function PostsGrid({ posts, featuredPost }: PostsGridProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="py-12">
|
<div className="py-12">
|
||||||
{/* Artykuł Wyróżniony (tylko na 1 stronie) */}
|
|
||||||
{featuredPost && currentPage === 1 && (
|
{featuredPost && currentPage === 1 && (
|
||||||
<div className="mb-16">
|
<div className="mb-16">
|
||||||
<h2 className="text-2xl font-bold text-primary font-heading mb-8">Artykuł wyróżniony</h2>
|
<h2 className="text-2xl font-bold text-primary font-heading mb-8">Artykuł wyróżniony</h2>
|
||||||
<FeaturedPost post={featuredPost} />
|
<FeaturedPost post={featuredPost} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Filtry */}
|
|
||||||
<div className="flex flex-wrap items-center gap-3 mb-12">
|
<div className="flex flex-wrap items-center gap-3 mb-12">
|
||||||
{categories.map((category) => (
|
{categories.map((category) => (
|
||||||
<button
|
<button
|
||||||
@@ -72,8 +69,6 @@ export function PostsGrid({ posts, featuredPost }: PostsGridProps) {
|
|||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Siatka Artykułów */}
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||||
{visiblePosts.map((post) => {
|
{visiblePosts.map((post) => {
|
||||||
const dateObj = new Date(post.date);
|
const dateObj = new Date(post.date);
|
||||||
@@ -136,8 +131,6 @@ export function PostsGrid({ posts, featuredPost }: PostsGridProps) {
|
|||||||
<p className="text-lg text-text-muted font-medium">Brak artykułów w tej kategorii.</p>
|
<p className="text-lg text-text-muted font-medium">Brak artykułów w tej kategorii.</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Paginacja */}
|
|
||||||
{totalPages > 1 && (
|
{totalPages > 1 && (
|
||||||
<div className="mt-12 flex flex-wrap justify-center items-center gap-2">
|
<div className="mt-12 flex flex-wrap justify-center items-center gap-2">
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -37,23 +37,18 @@ export const PricingTable = () => {
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{/* Split */}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
||||||
Montaż układów SPLIT
|
Montaż układów SPLIT
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{renderTableRows(splitItems)}
|
{renderTableRows(splitItems)}
|
||||||
|
|
||||||
{/* Multisplit */}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
||||||
Montaż układów MULTISPLIT
|
Montaż układów MULTISPLIT
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{renderTableRows(multisplitItems)}
|
{renderTableRows(multisplitItems)}
|
||||||
|
|
||||||
{/* Usługi dodatkowe */}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
<td colSpan={3} className="bg-gray-50/80 py-3 px-4 font-semibold text-primary text-sm uppercase">
|
||||||
Usługi dodatkowe i serwis
|
Usługi dodatkowe i serwis
|
||||||
|
|||||||
@@ -43,8 +43,6 @@ export function ProcessSteps({
|
|||||||
subtitle={subtitle}
|
subtitle={subtitle}
|
||||||
align="center"
|
align="center"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Process Steps Timeline */}
|
|
||||||
<div className="relative mt-12">
|
<div className="relative mt-12">
|
||||||
{/* Desktop connecting line (only if few steps, otherwise wrap) */}
|
{/* Desktop connecting line (only if few steps, otherwise wrap) */}
|
||||||
|
|
||||||
@@ -53,9 +51,7 @@ export function ProcessSteps({
|
|||||||
const Icon = iconMap[step.icon || ""] || HelpCircle;
|
const Icon = iconMap[step.icon || ""] || HelpCircle;
|
||||||
return (
|
return (
|
||||||
<div key={idx} className="flex flex-col items-center text-center group">
|
<div key={idx} className="flex flex-col items-center text-center group">
|
||||||
{/* Circle Badge with Icon & Number */}
|
|
||||||
<div className="relative size-20 rounded-full bg-slate-50 border-2 border-slate-200 flex items-center justify-center text-primary group-hover:border-accent group-hover:bg-accent-light group-hover:text-accent transition-all duration-300 shadow-sm z-10">
|
<div className="relative size-20 rounded-full bg-slate-50 border-2 border-slate-200 flex items-center justify-center text-primary group-hover:border-accent group-hover:bg-accent-light group-hover:text-accent transition-all duration-300 shadow-sm z-10">
|
||||||
{/* Step Number */}
|
|
||||||
{step.icon && iconMap[step.icon] && (
|
{step.icon && iconMap[step.icon] && (
|
||||||
<span className="absolute -top-1.5 -right-1.5 size-6 rounded-full bg-accent text-white text-xs font-bold flex items-center justify-center font-heading border-2 border-white shadow-sm">
|
<span className="absolute -top-1.5 -right-1.5 size-6 rounded-full bg-accent text-white text-xs font-bold flex items-center justify-center font-heading border-2 border-white shadow-sm">
|
||||||
{step.number}
|
{step.number}
|
||||||
@@ -66,8 +62,6 @@ export function ProcessSteps({
|
|||||||
: <span className="text-2xl font-extrabold font-heading text-accent">{step.number}</span>
|
: <span className="text-2xl font-extrabold font-heading text-accent">{step.number}</span>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Title & Description */}
|
|
||||||
<h3 className="text-lg font-bold text-primary font-heading mt-6 mb-2">
|
<h3 className="text-lg font-bold text-primary font-heading mt-6 mb-2">
|
||||||
{step.title}
|
{step.title}
|
||||||
</h3>
|
</h3>
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ export function ProjectsGrid() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
{/* Filtry */}
|
|
||||||
<div className="flex flex-wrap items-center justify-center gap-3 mb-12">
|
<div className="flex flex-wrap items-center justify-center gap-3 mb-12">
|
||||||
{categories.map((category) => (
|
{categories.map((category) => (
|
||||||
<button
|
<button
|
||||||
@@ -41,8 +40,6 @@ export function ProjectsGrid() {
|
|||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Siatka */}
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||||
{filteredProjects.map((project) => (
|
{filteredProjects.map((project) => (
|
||||||
<div
|
<div
|
||||||
@@ -55,8 +52,6 @@ export function ProjectsGrid() {
|
|||||||
fill
|
fill
|
||||||
className="object-cover transition-transform duration-700 group-hover:scale-105"
|
className="object-cover transition-transform duration-700 group-hover:scale-105"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Nakładka gradientowa */}
|
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-primary/90 via-primary/40 to-transparent opacity-80 group-hover:opacity-90 transition-opacity duration-300" />
|
<div className="absolute inset-0 bg-gradient-to-t from-primary/90 via-primary/40 to-transparent opacity-80 group-hover:opacity-90 transition-opacity duration-300" />
|
||||||
|
|
||||||
{/* Treść (Zawsze widoczna lokalizacja i kategoria, pojawiający się opis) */}
|
{/* Treść (Zawsze widoczna lokalizacja i kategoria, pojawiający się opis) */}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ export function WhyUs() {
|
|||||||
<section className="py-16 md:py-24 bg-slate-50 border-t border-b border-border">
|
<section className="py-16 md:py-24 bg-slate-50 border-t border-b border-border">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center">
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center">
|
||||||
{/* Left Column: Title, Intro and Statistics */}
|
|
||||||
<div className="lg:col-span-5 flex flex-col gap-6">
|
<div className="lg:col-span-5 flex flex-col gap-6">
|
||||||
<div>
|
<div>
|
||||||
<span className="text-xs md:text-sm font-semibold uppercase tracking-wider text-accent font-heading">
|
<span className="text-xs md:text-sm font-semibold uppercase tracking-wider text-accent font-heading">
|
||||||
@@ -54,8 +53,6 @@ export function WhyUs() {
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Right Column: Advantages Grid */}
|
|
||||||
<div className="lg:col-span-7 grid grid-cols-1 sm:grid-cols-2 gap-6">
|
<div className="lg:col-span-7 grid grid-cols-1 sm:grid-cols-2 gap-6">
|
||||||
{advantages.map((adv, idx) => {
|
{advantages.map((adv, idx) => {
|
||||||
const Icon = adv.icon;
|
const Icon = adv.icon;
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ export function CompareBar() {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
{/* Puste sloty */}
|
|
||||||
{Array.from({ length: 3 - items.length }).map((_, i) => (
|
{Array.from({ length: 3 - items.length }).map((_, i) => (
|
||||||
<div key={i} className="size-11 rounded-lg border-2 border-dashed border-border flex items-center justify-center text-text-muted shrink-0">
|
<div key={i} className="size-11 rounded-lg border-2 border-dashed border-border flex items-center justify-center text-text-muted shrink-0">
|
||||||
<span className="text-lg">+</span>
|
<span className="text-lg">+</span>
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ export default function MultisplitContactForm({ productName, productSku }: Props
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-4">
|
<div className="flex flex-col gap-4">
|
||||||
{/* Produkt info */}
|
|
||||||
<div className="bg-slate-50 rounded-xl px-4 py-3 text-xs text-text-muted">
|
<div className="bg-slate-50 rounded-xl px-4 py-3 text-xs text-text-muted">
|
||||||
Zapytanie dotyczy: <span className="font-bold text-primary">{productName}</span>
|
Zapytanie dotyczy: <span className="font-bold text-primary">{productName}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -100,8 +100,6 @@ export function ProductCard({ product }: ProductCardProps) {
|
|||||||
Multisplit
|
Multisplit
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Porównywarka - pojawia się na hover */}
|
|
||||||
<button
|
<button
|
||||||
onClick={handleCompare}
|
onClick={handleCompare}
|
||||||
disabled={compareDisabled}
|
disabled={compareDisabled}
|
||||||
@@ -140,8 +138,6 @@ export function ProductCard({ product }: ProductCardProps) {
|
|||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Cena + CTA */}
|
|
||||||
<div className="mt-auto pt-2 flex items-end justify-between gap-2">
|
<div className="mt-auto pt-2 flex items-end justify-between gap-2">
|
||||||
{product.category === 'multisplit' ? (
|
{product.category === 'multisplit' ? (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -311,8 +311,6 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
|||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|
||||||
{/* Ilość jednostek wewnętrznych */}
|
|
||||||
{(category === 'all' || category === 'multisplit') && (
|
{(category === 'all' || category === 'multisplit') && (
|
||||||
<Accordion title="Ilość jednostek wewn.">
|
<Accordion title="Ilość jednostek wewn.">
|
||||||
<ul className="flex flex-col gap-2">
|
<ul className="flex flex-col gap-2">
|
||||||
@@ -371,8 +369,6 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|
||||||
{/* Wielkość pomieszczenia */}
|
|
||||||
<Accordion title="Wielkość pomieszczenia">
|
<Accordion title="Wielkość pomieszczenia">
|
||||||
<ul className="flex flex-col gap-2">
|
<ul className="flex flex-col gap-2">
|
||||||
{ROOM_BUCKETS.map(b => (
|
{ROOM_BUCKETS.map(b => (
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ export function AnalyticsWrapper() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* GA4 */}
|
|
||||||
<Script
|
<Script
|
||||||
src={`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`}
|
src={`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`}
|
||||||
strategy="afterInteractive"
|
strategy="afterInteractive"
|
||||||
@@ -28,8 +27,6 @@ export function AnalyticsWrapper() {
|
|||||||
});
|
});
|
||||||
`}
|
`}
|
||||||
</Script>
|
</Script>
|
||||||
|
|
||||||
{/* Microsoft Clarity */}
|
|
||||||
<Script id="clarity-init" strategy="afterInteractive">
|
<Script id="clarity-init" strategy="afterInteractive">
|
||||||
{`
|
{`
|
||||||
(function(c,l,a,r,i,t,y){
|
(function(c,l,a,r,i,t,y){
|
||||||
|
|||||||
Reference in New Issue
Block a user