fix: apply recent accessibility and layout changes

This commit is contained in:
AI Assistant
2026-07-19 12:32:31 +02:00
parent 0b7c5bf920
commit d64266243e
37 changed files with 402 additions and 190 deletions
+6 -6
View File
@@ -140,10 +140,10 @@ export default function CennikMontazuPage() {
<Phone className="size-5" /> Zadzwoń po wycenę <Phone className="size-5" /> Zadzwoń po wycenę
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Formularz kontaktowy <ArrowRight className="size-5" /> Formularz kontaktowy <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -251,10 +251,10 @@ export default function CennikMontazuPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Napisz do nas <ArrowRight className="size-5" /> Napisz do nas <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -3
View File
@@ -72,7 +72,7 @@
--secondary-foreground: #0f2a47; --secondary-foreground: #0f2a47;
--muted: #f5f7fa; --muted: #f5f7fa;
--muted-foreground: #5a6678; --muted-foreground: #5a6678;
--accent: #2ba8e0; --accent: #1777a3;
--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: #2ba8e0; --ring: #1777a3;
--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);
@@ -96,7 +96,7 @@
--sidebar-accent: #f5f7fa; --sidebar-accent: #f5f7fa;
--sidebar-accent-foreground: #0f2a47; --sidebar-accent-foreground: #0f2a47;
--sidebar-border: #e2e8f0; --sidebar-border: #e2e8f0;
--sidebar-ring: #2ba8e0; --sidebar-ring: #1777a3;
/* DaisyUI Overrides */ /* DaisyUI Overrides */
--color-primary: var(--accent); --color-primary: var(--accent);
+9 -9
View File
@@ -139,10 +139,10 @@ export default function KlimatyzacjaDoBiuraPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Zapytaj o wycenę dla firmy <ArrowRight className="size-5" /> Zapytaj o wycenę dla firmy <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -231,10 +231,10 @@ export default function KlimatyzacjaDoBiuraPage() {
<p className="text-white/50 text-xs mb-1">od</p> <p className="text-white/50 text-xs mb-1">od</p>
<p className="text-4xl font-extrabold text-white mb-1">199 zł</p> <p className="text-4xl font-extrabold text-white mb-1">199 zł</p>
<p className="text-white/50 text-xs mb-4">rocznie / urządzenie</p> <p className="text-white/50 text-xs mb-4">rocznie / urządzenie</p>
<Link href="/kontakt"> <Link href="/kontakt" className="inline-flex items-center gap-2 px-5 py-2.5 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors whitespace-nowrap">
<button className="inline-flex items-center gap-2 px-5 py-2.5 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors whitespace-nowrap">
Zapytaj o abonament <ArrowRight className="size-4" /> Zapytaj o abonament <ArrowRight className="size-4" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -277,10 +277,10 @@ export default function KlimatyzacjaDoBiuraPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Napisz do nas <ArrowRight className="size-5" /> Napisz do nas <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+12 -12
View File
@@ -117,10 +117,10 @@ export default function KlimatyzacjaDoDomuPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kalkulator"> <Link href="/kalkulator" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Dobierz urządzenie <ArrowRight className="size-5" /> Dobierz urządzenie <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -197,15 +197,15 @@ export default function KlimatyzacjaDoDomuPage() {
))} ))}
</div> </div>
<div className="flex flex-col sm:flex-row gap-3"> <div className="flex flex-col sm:flex-row gap-3">
<Link href="/kontakt"> <Link href="/kontakt" className="inline-flex items-center gap-2 px-6 py-3 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors">
<button className="inline-flex items-center gap-2 px-6 py-3 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors">
Zapytaj o bezpłatną wycenę <ArrowRight className="size-4" /> Zapytaj o bezpłatną wycenę <ArrowRight className="size-4" />
</button>
</Link> </Link>
<Link href="/sklep"> <Link href="/sklep" className="inline-flex items-center gap-2 px-6 py-3 bg-white border border-border font-bold rounded-xl text-sm hover:border-accent transition-colors text-primary">
<button className="inline-flex items-center gap-2 px-6 py-3 bg-white border border-border font-bold rounded-xl text-sm hover:border-accent transition-colors text-primary">
Zobacz klimatyzatory w sklepie <ArrowRight className="size-4" /> Zobacz klimatyzatory w sklepie <ArrowRight className="size-4" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -246,10 +246,10 @@ export default function KlimatyzacjaDoDomuPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kalkulator"> <Link href="/kalkulator" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Kalkulator doboru <ArrowRight className="size-5" /> Kalkulator doboru <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -3
View File
@@ -158,11 +158,11 @@ export default async function MiastoPage({ params }: Props) {
Pompa ciepła {city.przyimek} {city.nameDopelniacz} Pompa ciepła {city.przyimek} {city.nameDopelniacz}
</h2> </h2>
<p className="text-white/80 leading-relaxed mb-6">{city.heatPumpTeaser}</p> <p className="text-white/80 leading-relaxed mb-6">{city.heatPumpTeaser}</p>
<Link href="/pompy-ciepla"> <Link href="/pompy-ciepla" className="btn btn-primary font-bold text-white flex items-center gap-2">
<button className="btn btn-primary font-bold text-white flex items-center gap-2">
Dowiedz się więcej o pompach ciepła Dowiedz się więcej o pompach ciepła
<ArrowRight className="size-4" /> <ArrowRight className="size-4" />
</button>
</Link> </Link>
</div> </div>
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4"> <div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
+5 -5
View File
@@ -16,8 +16,8 @@ export default function KoszykPage() {
<ShoppingBag className="size-16 text-border mx-auto mb-4" /> <ShoppingBag className="size-16 text-border mx-auto mb-4" />
<h1 className="text-2xl font-bold text-primary font-heading mb-2">Koszyk jest pusty</h1> <h1 className="text-2xl font-bold text-primary font-heading mb-2">Koszyk jest pusty</h1>
<p className="text-text-muted mb-6">Dodaj produkty ze sklepu aby złożyć zamówienie.</p> <p className="text-text-muted mb-6">Dodaj produkty ze sklepu aby złożyć zamówienie.</p>
<Link href="/sklep"> <Link href="/sklep" className="btn btn-primary text-white font-bold">
<button className="btn btn-primary text-white font-bold">Przejdź do sklepu</button> Przejdź do sklepu
</Link> </Link>
</div> </div>
</main> </main>
@@ -80,10 +80,10 @@ export default function KoszykPage() {
</div> </div>
<p className="text-xs text-text-muted mt-1">+ koszt montażu ustalany indywidualnie</p> <p className="text-xs text-text-muted mt-1">+ koszt montażu ustalany indywidualnie</p>
</div> </div>
<Link href="/zamowienie" className="block"> <Link href="/zamowienie" className="block btn btn-primary text-white font-bold w-full flex items-center justify-center gap-2">
<button className="btn btn-primary text-white font-bold w-full flex items-center justify-center gap-2">
Złóż zamówienie <ArrowRight className="size-4" /> Złóż zamówienie <ArrowRight className="size-4" />
</button>
</Link> </Link>
<button onClick={clearCart} className="w-full text-xs text-text-muted hover:text-primary transition-colors mt-3"> <button onClick={clearCart} className="w-full text-xs text-text-muted hover:text-primary transition-colors mt-3">
Wyczyść koszyk Wyczyść koszyk
+1 -1
View File
@@ -16,7 +16,7 @@ const fontSans = Inter({
const fontHeading = Poppins({ const fontHeading = Poppins({
subsets: ["latin"], subsets: ["latin"],
weight: ["400", "500", "600", "700", "800"], weight: ["600", "700", "800"],
variable: "--font-heading", variable: "--font-heading",
}); });
+6 -6
View File
@@ -117,10 +117,10 @@ export default function MontazKlimatyzacjiPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kalkulator"> <Link href="/kalkulator" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Dobierz urządzenie <ArrowRight className="size-5" /> Dobierz urządzenie <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -211,10 +211,10 @@ export default function MontazKlimatyzacjiPage() {
))} ))}
</div> </div>
<div className="mt-6 text-center"> <div className="mt-6 text-center">
<Link href="/kontakt"> <Link href="/kontakt" className="inline-flex items-center gap-2 px-6 py-3 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors">
<button className="inline-flex items-center gap-2 px-6 py-3 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors">
Zapytaj o bezpłatną wycenę <ArrowRight className="size-4" /> Zapytaj o bezpłatną wycenę <ArrowRight className="size-4" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+6 -6
View File
@@ -161,10 +161,10 @@ export default function Home() {
</p> </p>
</div> </div>
<div className="flex flex-col gap-3 shrink-0"> <div className="flex flex-col gap-3 shrink-0">
<Link href="/serwis-lg"> <Link href="/serwis-lg" className="flex items-center gap-2 px-6 py-3 bg-accent text-white rounded-xl font-bold hover:bg-accent/90 transition-colors whitespace-nowrap">
<button className="flex items-center gap-2 px-6 py-3 bg-accent text-white rounded-xl font-bold hover:bg-accent/90 transition-colors whitespace-nowrap">
Dowiedz się więcej <ArrowRight className="size-4" /> Dowiedz się więcej <ArrowRight className="size-4" />
</button>
</Link> </Link>
<a href={`tel:${companyDetails.phoneRaw}`}> <a href={`tel:${companyDetails.phoneRaw}`}>
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20 whitespace-nowrap"> <button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20 whitespace-nowrap">
@@ -310,10 +310,10 @@ export default function Home() {
<p className="text-sm text-text-muted leading-relaxed">Nasi certyfikowani technicy są dostępni od poniedziałku do soboty. Zarezerwuj termin już dziś, aby uniknąć kolejek w sezonie.</p> <p className="text-sm text-text-muted leading-relaxed">Nasi certyfikowani technicy są dostępni od poniedziałku do soboty. Zarezerwuj termin już dziś, aby uniknąć kolejek w sezonie.</p>
</div> </div>
<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-4 shrink-0 w-full lg:w-auto"> <div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-4 shrink-0 w-full lg:w-auto">
<Link href="/kontakt" className="w-full sm:w-auto"> <Link href="/kontakt" className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-accent text-white font-bold text-sm hover:bg-accent/90 transition-colors rounded-xl">
<button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-accent text-white font-bold text-sm hover:bg-accent/90 transition-colors rounded-xl">
Umów serwis <Calendar className="size-4" /> Umów serwis <Calendar className="size-4" />
</button>
</Link> </Link>
<a href={`tel:${companyDetails.phoneRaw}`} className="w-full sm:w-auto"> <a href={`tel:${companyDetails.phoneRaw}`} className="w-full sm:w-auto">
<button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-white text-primary border border-border font-bold text-sm hover:bg-slate-50 transition-colors rounded-xl"> <button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-white text-primary border border-border font-bold text-sm hover:bg-slate-50 transition-colors rounded-xl">
+2 -2
View File
@@ -15,8 +15,8 @@ export default function PorownajPage() {
<main className="min-h-screen bg-slate-50 flex items-center justify-center"> <main className="min-h-screen bg-slate-50 flex items-center justify-center">
<div className="text-center"> <div className="text-center">
<p className="text-text-muted mb-4">Nie masz żadnych produktów do porównania.</p> <p className="text-text-muted mb-4">Nie masz żadnych produktów do porównania.</p>
<Link href="/sklep"> <Link href="/sklep" className="btn btn-primary text-white font-bold">
<button className="btn btn-primary text-white font-bold">Wróć do sklepu</button> Wróć do sklepu
</Link> </Link>
</div> </div>
</main> </main>
+6 -6
View File
@@ -94,10 +94,10 @@ export default function SerwisDaikinPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Zgłoś awarię online <ArrowRight className="size-5" /> Zgłoś awarię online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -197,10 +197,10 @@ export default function SerwisDaikinPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Zgłoś online <ArrowRight className="size-5" /> Zgłoś online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+6 -6
View File
@@ -150,10 +150,10 @@ export default function SerwisKlimatyzacjiPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Zgłoś awarię online <ArrowRight className="size-5" /> Zgłoś awarię online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -235,10 +235,10 @@ export default function SerwisKlimatyzacjiPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Zgłoś online <ArrowRight className="size-5" /> Zgłoś online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -3
View File
@@ -90,10 +90,10 @@ export default function SerwisLGPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Napisz do nas <ArrowRight className="size-5" /> Napisz do nas <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+6 -6
View File
@@ -94,10 +94,10 @@ export default function SerwisMitsubishiPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Zgłoś awarię online <ArrowRight className="size-5" /> Zgłoś awarię online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -201,10 +201,10 @@ export default function SerwisMitsubishiPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Zgłoś online <ArrowRight className="size-5" /> Zgłoś online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+6 -6
View File
@@ -94,10 +94,10 @@ export default function SerwisSamsungPage() {
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone} <Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-6 py-3 bg-white/10 text-white rounded-xl font-bold hover:bg-white/20 transition-colors border border-white/20">
Zgłoś awarię online <ArrowRight className="size-5" /> Zgłoś awarię online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -197,10 +197,10 @@ export default function SerwisSamsungPage() {
<Phone className="size-5" /> {companyDetails.phone} <Phone className="size-5" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 text-white rounded-xl font-bold text-lg hover:bg-white/20 transition-colors border border-white/20">
Zgłoś online <ArrowRight className="size-5" /> Zgłoś online <ArrowRight className="size-5" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -2
View File
@@ -14,7 +14,8 @@ export default function sitemap(): MetadataRoute.Sitemap {
'/realizacje', '/realizacje',
'/blog', '/blog',
// '/o-nas', '/o-nas',
'/kalkulator',
'/kontakt', '/kontakt',
'/sklep', '/sklep',
'/koszyk', '/koszyk',
@@ -29,7 +30,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
'/serwis-samsung', '/serwis-samsung',
'/serwis-mitsubishi', '/serwis-mitsubishi',
'/klimatyzacja-do-domu', '/klimatyzacja-do-domu',
/* '/klimatyzacja-do-biura', */ '/klimatyzacja-do-biura',
'/cennik-montazu', '/cennik-montazu',
'/zgloszenie-awarii', '/zgloszenie-awarii',
'/dostawa', '/dostawa',
+6 -2
View File
@@ -22,7 +22,9 @@ export default function ZamowieniePage() {
<main className="min-h-screen bg-slate-50 flex items-center justify-center"> <main className="min-h-screen bg-slate-50 flex items-center justify-center">
<div className="text-center"> <div className="text-center">
<p className="text-text-muted mb-4">Koszyk jest pusty.</p> <p className="text-text-muted mb-4">Koszyk jest pusty.</p>
<Link href="/sklep"><button className="btn btn-primary text-white font-bold">Wróć do sklepu</button></Link> <Link href="/sklep" className="btn btn-primary text-white font-bold">
Wróć do sklepu
</Link>
</div> </div>
</main> </main>
); );
@@ -35,7 +37,9 @@ export default function ZamowieniePage() {
<CheckCircle className="size-16 text-green-500 mx-auto mb-4" /> <CheckCircle className="size-16 text-green-500 mx-auto mb-4" />
<h1 className="text-2xl font-bold text-primary font-heading mb-2">Zamówienie przyjęte!</h1> <h1 className="text-2xl font-bold text-primary font-heading mb-2">Zamówienie przyjęte!</h1>
<p className="text-text-muted mb-6">{state.message}</p> <p className="text-text-muted mb-6">{state.message}</p>
<Link href="/sklep"><button className="btn btn-primary text-white font-bold">Wróć do sklepu</button></Link> <Link href="/sklep" className="btn btn-primary text-white font-bold">
Wróć do sklepu
</Link>
</div> </div>
</main> </main>
); );
+3 -3
View File
@@ -168,10 +168,10 @@ export function AwariaClient() {
<Phone className="size-4" /> {companyDetails.phone} <Phone className="size-4" /> {companyDetails.phone}
</button> </button>
</a> </a>
<Link href="/"> <Link href="/" className="text-sm text-text-muted hover:text-accent transition-colors">
<button className="text-sm text-text-muted hover:text-accent transition-colors">
Wróć na stronę główną Wróć na stronę główną
</button>
</Link> </Link>
</div> </div>
</main> </main>
+6 -6
View File
@@ -949,10 +949,10 @@ export function KalkulatorClient({ products }: Props) {
<Phone className="size-3.5" /> Bezpłatna wycena <Phone className="size-3.5" /> Bezpłatna wycena
</button> </button>
</a> </a>
<Link href="/kontakt"> <Link href="/kontakt" className="flex items-center gap-2 px-4 py-2 bg-amber-100 text-amber-800 rounded-xl text-xs font-bold hover:bg-amber-200 transition-colors border border-amber-300">
<button className="flex items-center gap-2 px-4 py-2 bg-amber-100 text-amber-800 rounded-xl text-xs font-bold hover:bg-amber-200 transition-colors border border-amber-300">
Prześlij zdjęcia Prześlij zdjęcia
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -976,10 +976,10 @@ export function KalkulatorClient({ products }: Props) {
</button> </button>
) )
) : ( ) : (
<Link href="/sklep"> <Link href="/sklep" className="flex items-center gap-2 px-6 py-2.5 bg-accent text-white rounded-xl text-sm font-bold hover:bg-accent/90 transition-colors">
<button className="flex items-center gap-2 px-6 py-2.5 bg-accent text-white rounded-xl text-sm font-bold hover:bg-accent/90 transition-colors">
Przejdź do sklepu <ArrowRight className="size-4" /> Przejdź do sklepu <ArrowRight className="size-4" />
</button>
</Link> </Link>
)} )}
</div> </div>
+6 -6
View File
@@ -240,16 +240,16 @@ export function Header() {
{/* CTA Button */} {/* CTA Button */}
<div className="hidden lg:flex items-center gap-3"> <div className="hidden lg:flex items-center gap-3">
<Link href="/zgloszenie-awarii"> <Link href="/zgloszenie-awarii" className="flex items-center gap-1.5 px-4 py-2 bg-red-500 text-white rounded-[var(--radius-field)] font-bold text-sm hover:bg-red-600 transition-colors whitespace-nowrap">
<button className="flex items-center gap-1.5 px-4 py-2 bg-red-500 text-white rounded-[var(--radius-field)] font-bold text-sm hover:bg-red-600 transition-colors whitespace-nowrap">
<Wrench className="size-4" /> <Wrench className="size-4" />
Zgłoś awarię Zgłoś awarię
</button>
</Link> </Link>
<Link href="/kontakt"> <Link href="/kontakt" className="btn btn-primary font-bold">
<button className="btn btn-primary font-bold">
Darmowa wycena Darmowa wycena
</button>
</Link> </Link>
</div> </div>
</div> </div>
+4 -4
View File
@@ -41,7 +41,7 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
{ label: 'Serwis Mitsubishi Electric', href: '/serwis-mitsubishi' }, { label: 'Serwis Mitsubishi Electric', href: '/serwis-mitsubishi' },
{ label: 'Serwis LG', href: '/serwis-lg' }, { label: 'Serwis LG', href: '/serwis-lg' },
{ label: 'Klimatyzacja do domu', href: '/klimatyzacja-do-domu' }, { label: 'Klimatyzacja do domu', href: '/klimatyzacja-do-domu' },
/* { label: 'Klimatyzacja do biura', href: '/klimatyzacja-do-biura' }, */ { label: 'Klimatyzacja do biura', href: '/klimatyzacja-do-biura' },
]; ];
@@ -248,10 +248,10 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
<Phone className="size-4 text-accent" /> <Phone className="size-4 text-accent" />
<span>Zadzwoń: {companyDetails.phone}</span> <span>Zadzwoń: {companyDetails.phone}</span>
</a> </a>
<Link href="/kontakt" onClick={onClose}> <Link href="/kontakt" onClick={onClose} className="btn btn-primary w-full font-bold">
<button className="btn btn-primary w-full font-bold">
Darmowa konsultacja Darmowa konsultacja
</button>
</Link> </Link>
</div> </div>
</div> </div>
+2 -2
View File
@@ -39,9 +39,9 @@ export function TrustBar() {
<Icon className="size-6" /> <Icon className="size-6" />
</div> </div>
<div> <div>
<h4 className="text-sm font-semibold text-primary font-heading"> <h3 className="text-sm font-semibold text-primary font-heading">
{item.title} {item.title}
</h4> </h3>
<p className="text-xs text-text-muted mt-0.5"> <p className="text-xs text-text-muted mt-0.5">
{item.description} {item.description}
</p> </p>
+1 -1
View File
@@ -22,7 +22,7 @@ export function AboutStory() {
<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">
<span className="text-2xl font-black text-accent font-heading"> <span className="text-2xl font-extrabold text-accent font-heading">
{companyDetails.stats.find(s => s.label.includes("doświadczenia"))?.value || "15+"} {companyDetails.stats.find(s => s.label.includes("doświadczenia"))?.value || "15+"}
</span> </span>
</div> </div>
+3 -3
View File
@@ -92,11 +92,11 @@ export function BlogPreview() {
{/* Blog Catalog Button */} {/* Blog Catalog Button */}
<div className="flex justify-center mt-12"> <div className="flex justify-center mt-12">
<Link href="/blog"> <Link href="/blog" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
<button className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
<span>Przejdź do bloga</span> <span>Przejdź do bloga</span>
<ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -3
View File
@@ -60,11 +60,11 @@ export function CtaBanner({
{/* Action buttons */} {/* Action buttons */}
<div className="flex flex-col sm:flex-row items-center gap-4 mt-8 w-full sm:w-auto shrink-0"> <div className="flex flex-col sm:flex-row items-center gap-4 mt-8 w-full sm:w-auto shrink-0">
<Link href={ctaLink} className="w-full sm:w-auto"> <Link href={ctaLink} className="w-full sm:w-auto btn btn-primary font-bold text-white">
<button className="btn btn-primary w-full sm:w-auto font-bold text-white">
<span>{ctaText}</span> <span>{ctaText}</span>
<ArrowRight className="size-5" /> <ArrowRight className="size-5" />
</button>
</Link> </Link>
<a <a
+3 -3
View File
@@ -26,11 +26,11 @@ export function FeaturedProducts() {
{/* Catalog Link */} {/* Catalog Link */}
<div className="flex justify-center mt-12"> <div className="flex justify-center mt-12">
<Link href="/sklep"> <Link href="/sklep" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
<button className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 group">
<span>Zobacz cały sklep</span> <span>Zobacz cały sklep</span>
<ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+3 -3
View File
@@ -80,11 +80,11 @@ export function HeroSection({
{/* CTA Buttons */} {/* CTA Buttons */}
<div className="mt-10 flex flex-col sm:flex-row items-center gap-4 w-full sm:w-auto"> <div className="mt-10 flex flex-col sm:flex-row items-center gap-4 w-full sm:w-auto">
{ctaText && ctaLink && ( {ctaText && ctaLink && (
<Link href={ctaLink} className="w-full sm:w-auto group"> <Link href={ctaLink} className="w-full sm:w-auto group btn btn-primary text-white font-bold">
<button className="btn btn-primary text-white font-bold w-full sm:w-auto">
<span>{ctaText}</span> <span>{ctaText}</span>
<ArrowRight className="size-5 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="size-5 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
)} )}
+3 -3
View File
@@ -132,10 +132,10 @@ export function HomeServices() {
<p className="text-sm text-text-muted leading-relaxed">Nasi certyfikowani technicy są dostępni od poniedziałku do soboty. Zarezerwuj termin już dziś, aby uniknąć kolejek w sezonie.</p> <p className="text-sm text-text-muted leading-relaxed">Nasi certyfikowani technicy są dostępni od poniedziałku do soboty. Zarezerwuj termin już dziś, aby uniknąć kolejek w sezonie.</p>
</div> </div>
<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-4 shrink-0 w-full lg:w-auto"> <div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-4 shrink-0 w-full lg:w-auto">
<Link href="/kontakt" className="w-full sm:w-auto"> <Link href="/kontakt" className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-accent text-white font-bold text-sm hover:bg-accent/90 transition-colors rounded-xl">
<button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-accent text-white font-bold text-sm hover:bg-accent/90 transition-colors rounded-xl">
Umów serwis <Calendar className="size-4" /> Umów serwis <Calendar className="size-4" />
</button>
</Link> </Link>
<a href={`tel:${companyDetails.phoneRaw}`} className="w-full sm:w-auto"> <a href={`tel:${companyDetails.phoneRaw}`} className="w-full sm:w-auto">
<button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-white text-primary border border-border font-bold text-sm hover:bg-slate-50 transition-colors rounded-xl"> <button className="w-full sm:w-auto flex justify-center items-center gap-2 px-6 py-3.5 bg-white text-primary border border-border font-bold text-sm hover:bg-slate-50 transition-colors rounded-xl">
+6 -6
View File
@@ -24,11 +24,11 @@ export function PillarsSection() {
</div> </div>
<div> <div>
<Link href="/klimatyzacja"> <Link href="/klimatyzacja" className="btn btn-primary text-white flex items-center gap-2">
<button className="btn btn-primary text-white flex items-center gap-2">
<span>Przejdź do oferty HVAC</span> <span>Przejdź do oferty HVAC</span>
<ChevronRight className="size-5 group-hover:translate-x-1 transition-transform" /> <ChevronRight className="size-5 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
@@ -51,11 +51,11 @@ export function PillarsSection() {
</div> </div>
<div className="mt-12 text-center"> <div className="mt-12 text-center">
<Link href="/uslugi-domowe"> <Link href="/uslugi-domowe" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 mx-auto group">
<button className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 mx-auto group">
<span>Pełna oferta usług</span> <span>Pełna oferta usług</span>
<ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="size-4 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
</div> </div>
</div> </div>
+2 -2
View File
@@ -43,11 +43,11 @@ export function Testimonials() {
<p className="text-text-muted mt-1">Opinie klientów</p> <p className="text-text-muted mt-1">Opinie klientów</p>
</div> </div>
<div className="flex gap-2"> <div className="flex gap-2">
<button onClick={scrollPrev} <button onClick={scrollPrev} aria-label="Poprzednia opinia"
className="size-10 rounded-xl border border-border bg-white flex items-center justify-center text-primary hover:border-accent hover:text-accent transition-colors"> className="size-10 rounded-xl border border-border bg-white flex items-center justify-center text-primary hover:border-accent hover:text-accent transition-colors">
<ChevronLeft className="size-5" /> <ChevronLeft className="size-5" />
</button> </button>
<button onClick={scrollNext} <button onClick={scrollNext} aria-label="Następna opinia"
className="size-10 rounded-xl border border-border bg-white flex items-center justify-center text-primary hover:border-accent hover:text-accent transition-colors"> className="size-10 rounded-xl border border-border bg-white flex items-center justify-center text-primary hover:border-accent hover:text-accent transition-colors">
<ChevronRight className="size-5" /> <ChevronRight className="size-5" />
</button> </button>
+3 -3
View File
@@ -58,11 +58,11 @@ export function CartSummary() {
</div> </div>
{/* Przycisk */} {/* Przycisk */}
<Link href="/zamowienie" className="block w-full"> <Link href="/zamowienie" className="block w-full btn btn-primary font-bold group cursor-pointer text-white">
<button className="btn btn-primary w-full font-bold group cursor-pointer text-white">
Przejdź do zamówienia Przejdź do zamówienia
<ArrowRight className="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform" />
</button>
</Link> </Link>
{/* Zaufanie */} {/* Zaufanie */}
+3 -3
View File
@@ -47,10 +47,10 @@ export function CompareBar() {
<div className="flex items-center gap-2 shrink-0"> <div className="flex items-center gap-2 shrink-0">
{items.length >= 2 && ( {items.length >= 2 && (
<Link href="/porownaj"> <Link href="/porownaj" className="btn btn-primary text-white font-bold text-sm py-2 px-4">
<button className="btn btn-primary text-white font-bold text-sm py-2 px-4">
Porównaj Porównaj
</button>
</Link> </Link>
)} )}
<button onClick={clearAll} className="text-xs text-text-muted hover:text-primary transition-colors"> <button onClick={clearAll} className="text-xs text-text-muted hover:text-primary transition-colors">
+6 -6
View File
@@ -311,16 +311,16 @@ export function ProductPageClient({ product, seriesProducts, companyPhone, compa
</button> </button>
)} )}
{cartState === 'cart' && ( {cartState === 'cart' && (
<Link href="/koszyk" className="flex-1"> <Link href="/koszyk" className="flex-1 w-full flex items-center justify-center gap-2 py-2.5 px-4 rounded-xl font-bold text-sm bg-green-500 text-white hover:bg-green-600 transition-colors">
<button className="w-full flex items-center justify-center gap-2 py-2.5 px-4 rounded-xl font-bold text-sm bg-green-500 text-white hover:bg-green-600 transition-colors">
<ShoppingCart className="size-4" /> Zobacz koszyk <ShoppingCart className="size-4" /> Zobacz koszyk
</button>
</Link> </Link>
)} )}
<Link href="/kontakt" className="flex-1"> <Link href="/kontakt" className="flex-1 w-full flex items-center justify-center gap-2 py-2.5 px-4 rounded-xl font-bold text-sm border-2 border-primary text-primary hover:bg-primary hover:text-white transition-all">
<button className="w-full flex items-center justify-center gap-2 py-2.5 px-4 rounded-xl font-bold text-sm border-2 border-primary text-primary hover:bg-primary hover:text-white transition-all">
Zapytaj o montaż Zapytaj o montaż
</button>
</Link> </Link>
</div> </div>
+3 -3
View File
@@ -438,10 +438,10 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
{companyDetails.phone} {companyDetails.phone}
</a> </a>
<p className="text-xs text-text-muted mt-1">{companyDetails.hours}</p> <p className="text-xs text-text-muted mt-1">{companyDetails.hours}</p>
<Link href="/kontakt"> <Link href="/kontakt" className="mt-3 w-full btn btn-primary text-white font-bold text-sm py-2">
<button className="mt-3 w-full btn btn-primary text-white font-bold text-sm py-2">
Zadaj pytanie Zadaj pytanie
</button>
</Link> </Link>
</div> </div>
</aside> </aside>
+9 -1
View File
@@ -1,6 +1,14 @@
import type { NextConfig } from "next"; import type { NextConfig } from "next";
import bundleAnalyzer from '@next/bundle-analyzer';
const withBundleAnalyzer = bundleAnalyzer({
enabled: process.env.ANALYZE === 'true',
});
const nextConfig: NextConfig = { const nextConfig: NextConfig = {
experimental: {
optimizeCss: true,
},
images: { images: {
remotePatterns: [ remotePatterns: [
{ protocol: 'https', hostname: 'images.unsplash.com' }, { protocol: 'https', hostname: 'images.unsplash.com' },
@@ -23,4 +31,4 @@ const nextConfig: NextConfig = {
}, },
}; };
export default nextConfig; export default withBundleAnalyzer(nextConfig);
+193
View File
@@ -30,6 +30,7 @@
"zustand": "^5.0.14" "zustand": "^5.0.14"
}, },
"devDependencies": { "devDependencies": {
"@next/bundle-analyzer": "^16.2.10",
"@tailwindcss/postcss": "^4", "@tailwindcss/postcss": "^4",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
@@ -527,6 +528,16 @@
} }
} }
}, },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/@dotenvx/dotenvx": { "node_modules/@dotenvx/dotenvx": {
"version": "1.75.0", "version": "1.75.0",
"resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.75.0.tgz", "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.75.0.tgz",
@@ -1706,6 +1717,16 @@
"@emnapi/runtime": "^1.7.1" "@emnapi/runtime": "^1.7.1"
} }
}, },
"node_modules/@next/bundle-analyzer": {
"version": "16.2.10",
"resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-16.2.10.tgz",
"integrity": "sha512-KcepWhb3IVniZgm00GSSCQDEUQqZXuXtuXRh8J6e3Un342TcQ77iK4DedeEkct+fcx7yFEDL2J6z4Jeho5JDAw==",
"dev": true,
"license": "MIT",
"dependencies": {
"webpack-bundle-analyzer": "4.10.1"
}
},
"node_modules/@next/env": { "node_modules/@next/env": {
"version": "16.2.9", "version": "16.2.9",
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.9.tgz", "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.9.tgz",
@@ -1920,6 +1941,13 @@
"node": ">=12.4.0" "node": ">=12.4.0"
} }
}, },
"node_modules/@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
"dev": true,
"license": "MIT"
},
"node_modules/@rtsao/scc": { "node_modules/@rtsao/scc": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -3102,6 +3130,19 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
} }
}, },
"node_modules/acorn-walk": {
"version": "8.3.5",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
"integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
"dev": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/agent-base": { "node_modules/agent-base": {
"version": "7.1.4", "version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@@ -4059,6 +4100,13 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
"dev": true,
"license": "MIT"
},
"node_modules/debounce-fn": { "node_modules/debounce-fn": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz",
@@ -4279,6 +4327,13 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
"dev": true,
"license": "MIT"
},
"node_modules/ee-first": { "node_modules/ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -5648,6 +5703,22 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC" "license": "ISC"
}, },
"node_modules/gzip-size": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
"integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"duplexer": "^0.1.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/has-bigints": { "node_modules/has-bigints": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -5766,6 +5837,13 @@
"node": ">=16.9.0" "node": ">=16.9.0"
} }
}, },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true,
"license": "MIT"
},
"node_modules/http-errors": { "node_modules/http-errors": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
@@ -6265,6 +6343,16 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-promise": { "node_modules/is-promise": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
@@ -7192,6 +7280,16 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
"integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -7618,6 +7716,16 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/opener": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
"dev": true,
"license": "(WTFPL OR MIT)",
"bin": {
"opener": "bin/opener-bin.js"
}
},
"node_modules/optionator": { "node_modules/optionator": {
"version": "0.9.4", "version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -8869,6 +8977,21 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/sirv": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
"integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@polka/url": "^1.0.0-next.24",
"mrmime": "^2.0.0",
"totalist": "^3.0.0"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/sisteransi": { "node_modules/sisteransi": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -9370,6 +9493,16 @@
"node": ">=0.6" "node": ">=0.6"
} }
}, },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
"integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/ts-api-utils": { "node_modules/ts-api-utils": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
@@ -9779,6 +9912,44 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/webpack-bundle-analyzer": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz",
"integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@discoveryjs/json-ext": "0.5.7",
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0",
"commander": "^7.2.0",
"debounce": "^1.2.1",
"escape-string-regexp": "^4.0.0",
"gzip-size": "^6.0.0",
"html-escaper": "^2.0.2",
"is-plain-object": "^5.0.0",
"opener": "^1.5.2",
"picocolors": "^1.0.0",
"sirv": "^2.0.3",
"ws": "^7.3.1"
},
"bin": {
"webpack-bundle-analyzer": "lib/bin/analyzer.js"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/webpack-bundle-analyzer/node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -9899,6 +10070,28 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"license": "ISC" "license": "ISC"
}, },
"node_modules/ws": {
"version": "7.5.13",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz",
"integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.3.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/wsl-utils": { "node_modules/wsl-utils": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
+7 -1
View File
@@ -31,6 +31,7 @@
"zustand": "^5.0.14" "zustand": "^5.0.14"
}, },
"devDependencies": { "devDependencies": {
"@next/bundle-analyzer": "^16.2.10",
"@tailwindcss/postcss": "^4", "@tailwindcss/postcss": "^4",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
@@ -39,5 +40,10 @@
"eslint-config-next": "16.2.9", "eslint-config-next": "16.2.9",
"tailwindcss": "^4", "tailwindcss": "^4",
"typescript": "^5" "typescript": "^5"
} },
"browserslist": [
"defaults",
"not IE 11",
"maintained node versions"
]
} }