feat: optymalizacja GlobalSearch, nawigacji oraz filtrów w sklepie
@@ -22,8 +22,57 @@ export const metadata: Metadata = {
|
||||
};
|
||||
|
||||
export default function KlimatyzacjaPage() {
|
||||
const faqJsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Ile kosztuje montaż klimatyzacji?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Koszt montażu klimatyzacji split wynosi od 1200 zł netto. Cena zależy od długości instalacji, trudności montażu i wybranego urządzenia. Oferujemy bezpłatną wycenę przed realizacją.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Jak długo trwa montaż klimatyzacji?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Standardowy montaż klimatyzatora split trwa od 4 do 8 godzin. Systemy multisplit wymagają 1-2 dni roboczych w zależności od liczby jednostek.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Czy potrzebuję uprawnień F-Gaz do montażu klimatyzacji?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Tak, montaż klimatyzacji zawierającej czynniki F-Gaz (R32, R410A) wymaga certyfikatu F-Gaz. Posiadamy wszystkie wymagane uprawnienia UDT.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Jak często serwisować klimatyzację?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Zalecamy serwis klimatyzacji 2 razy w roku: przed sezonem letnim (kwiecień-maj) i przed zimowym (wrzesień-październik). Regularny serwis zachowuje gwarancję producenta.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Czy klimatyzacja może ogrzewać pomieszczenia zimą?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Tak, nowoczesne klimatyzatory inwerterowe to pompy ciepła powietrze-powietrze, które efektywnie ogrzewają nawet przy -20°C na zewnątrz. Koszt ogrzewania klimatyzacją jest 3-4 razy niższy niż ogrzewaniem elektrycznym.",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return (
|
||||
<main>
|
||||
<>
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(faqJsonLd) }} />
|
||||
<main>
|
||||
<HeroSection
|
||||
eyebrow="15+ lat doświadczenia · Split i multisplit · Uprawnienia F-gaz"
|
||||
title="Montaż klimatyzacji — dobór, instalacja, serwis"
|
||||
@@ -118,5 +167,6 @@ export default function KlimatyzacjaPage() {
|
||||
ctaLink="/kontakt"
|
||||
/>
|
||||
</main>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,8 +20,37 @@ const fontHeading = Poppins({
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "ThermCool | Klimatyzacja i Pompy Ciepła",
|
||||
description: "Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku. Uprawnienia F-Gaz, bezpłatny audyt, estetyczny montaż i pełna gwarancja. Zadzwoń po wycenę!",
|
||||
title: {
|
||||
default: "ThermCool | Klimatyzacja i Pompy Ciepła — Dolny Śląsk",
|
||||
template: "%s | ThermCool",
|
||||
},
|
||||
description: "Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku. Uprawnienia F-Gaz, bezpłatny audyt, estetyczny montaż. Zadzwoń po wycenę!",
|
||||
metadataBase: new URL(process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl'),
|
||||
openGraph: {
|
||||
type: 'website',
|
||||
locale: 'pl_PL',
|
||||
siteName: 'ThermCool',
|
||||
title: 'ThermCool | Klimatyzacja i Pompy Ciepła — Dolny Śląsk',
|
||||
description: 'Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku.',
|
||||
images: [{ url: '/og-image.jpg', width: 1200, height: 630, alt: 'ThermCool — Klimatyzacja i Pompy Ciepła' }],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'ThermCool | Klimatyzacja i Pompy Ciepła',
|
||||
description: 'Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku.',
|
||||
images: ['/og-image.jpg'],
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
'max-video-preview': -1,
|
||||
'max-image-preview': 'large',
|
||||
'max-snippet': -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
@@ -34,6 +63,10 @@ export default function RootLayout({
|
||||
lang="pl"
|
||||
className={`${fontSans.variable} ${fontHeading.variable} antialiased`}
|
||||
>
|
||||
<head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
|
||||
</head>
|
||||
<body className="min-h-screen flex flex-col bg-background text-foreground">
|
||||
<Header />
|
||||
<main className="flex-grow">{children}</main>
|
||||
|
||||
@@ -9,39 +9,118 @@ import { CtaBanner } from "@/components/sections/CtaBanner";
|
||||
import { companyDetails } from "@/content/company";
|
||||
|
||||
export default function Home() {
|
||||
const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl';
|
||||
|
||||
const jsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "LocalBusiness",
|
||||
"name": companyDetails.name,
|
||||
"image": `${process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl'}/logo.png`,
|
||||
"telephone": companyDetails.phone,
|
||||
"email": companyDetails.email,
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": companyDetails.address.street,
|
||||
"addressLocality": companyDetails.address.city,
|
||||
"postalCode": companyDetails.address.zipCode,
|
||||
"addressCountry": "PL",
|
||||
},
|
||||
"priceRange": "$$",
|
||||
"openingHoursSpecification": [
|
||||
"@graph": [
|
||||
{
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
||||
"opens": "08:00",
|
||||
"closes": "18:00",
|
||||
"@type": "HVACBusiness",
|
||||
"@id": `${baseUrl}/#business`,
|
||||
"name": companyDetails.name,
|
||||
"legalName": companyDetails.legalName,
|
||||
"url": baseUrl,
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": `${baseUrl}/logo.png`,
|
||||
"width": 200,
|
||||
"height": 60,
|
||||
},
|
||||
"image": `${baseUrl}/og-image.jpg`,
|
||||
"telephone": companyDetails.phone,
|
||||
"email": companyDetails.email,
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": companyDetails.address.street,
|
||||
"addressLocality": companyDetails.address.city,
|
||||
"postalCode": companyDetails.address.zipCode,
|
||||
"addressRegion": companyDetails.address.region,
|
||||
"addressCountry": "PL",
|
||||
},
|
||||
"geo": {
|
||||
"@type": "GeoCoordinates",
|
||||
"latitude": 51.1079,
|
||||
"longitude": 17.0385,
|
||||
},
|
||||
"priceRange": "$$",
|
||||
"currenciesAccepted": "PLN",
|
||||
"paymentAccepted": "Gotówka, Przelew bankowy, Karta",
|
||||
"openingHoursSpecification": [
|
||||
{
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
||||
"opens": "08:00",
|
||||
"closes": "18:00",
|
||||
},
|
||||
{
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Saturday"],
|
||||
"opens": "09:00",
|
||||
"closes": "14:00",
|
||||
},
|
||||
],
|
||||
"areaServed": [
|
||||
{ "@type": "City", "name": "Wrocław" },
|
||||
{ "@type": "City", "name": "Legnica" },
|
||||
{ "@type": "City", "name": "Wałbrzych" },
|
||||
{ "@type": "City", "name": "Jelenia Góra" },
|
||||
{ "@type": "City", "name": "Lubin" },
|
||||
{ "@type": "AdministrativeArea", "name": "Dolny Śląsk" },
|
||||
],
|
||||
"hasOfferCatalog": {
|
||||
"@type": "OfferCatalog",
|
||||
"name": "Usługi HVAC",
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Montaż klimatyzacji",
|
||||
"description": "Profesjonalny montaż klimatyzatorów split i multisplit z uprawnieniami F-Gaz. Ceny od 1200 zł.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Montaż pomp ciepła",
|
||||
"description": "Dobór i montaż pomp ciepła powietrze-woda z pomocą w uzyskaniu dofinansowania z Czystego Powietrza.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Serwis klimatyzacji",
|
||||
"description": "Przeglądy, czyszczenie, odgrzybianie i naprawy klimatyzatorów. Ceny od 250 zł.",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
"sameAs": [
|
||||
companyDetails.socials.facebook,
|
||||
companyDetails.socials.instagram,
|
||||
companyDetails.socials.google,
|
||||
],
|
||||
},
|
||||
{
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Saturday"],
|
||||
"opens": "09:00",
|
||||
"closes": "14:00",
|
||||
"@type": "WebSite",
|
||||
"@id": `${baseUrl}/#website`,
|
||||
"url": baseUrl,
|
||||
"name": "ThermCool",
|
||||
"description": "Klimatyzacja i pompy ciepła na Dolnym Śląsku",
|
||||
"inLanguage": "pl-PL",
|
||||
"publisher": { "@id": `${baseUrl}/#business` },
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": {
|
||||
"@type": "EntryPoint",
|
||||
"urlTemplate": `${baseUrl}/sklep?search={search_term_string}`,
|
||||
},
|
||||
"query-input": "required name=search_term_string",
|
||||
},
|
||||
},
|
||||
],
|
||||
"areaServed": {
|
||||
"@type": "State",
|
||||
"name": companyDetails.address.region,
|
||||
},
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -19,8 +19,57 @@ export const metadata: Metadata = {
|
||||
};
|
||||
|
||||
export default function PompyCieplaPage() {
|
||||
const faqPompyJsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Ile kosztuje pompa ciepła?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Koszt pompy ciepła powietrze-woda wraz z montażem wynosi od 25 000 do 60 000 zł. Dzięki dofinansowaniu z programu Czyste Powietrze można uzyskać do 135 000 zł zwrotu kosztów.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Jak działa pompa ciepła?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Pompa ciepła pobiera energię cieplną z powietrza zewnętrznego i przetwarza ją na ciepło do ogrzewania budynku i wody użytkowej. Na każdy 1 kW zużytej energii elektrycznej produkuje 3-5 kW ciepła (COP 3-5).",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Czy pompa ciepła działa przy mrozach?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Nowoczesne pompy ciepła pracują efektywnie nawet przy -20°C/-25°C. Przy bardzo niskich temperaturach urządzenie wspomagane jest grzałką elektryczną.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Ile można zaoszczędzić na ogrzewaniu dzięki pompie ciepła?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "W porównaniu z ogrzewaniem gazowym można zaoszczędzić 40-60% kosztów rocznych. Dom 150 m² ogrzewany gazem płaci ok. 4 000-6 000 zł/rok, z pompą ciepła ok. 2 000-3 500 zł/rok.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Czy można uzyskać dofinansowanie na pompę ciepła?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Tak, program Czyste Powietrze oferuje dofinansowanie do 135 000 zł dla najniższych dochodów. Pomagamy w kompletowaniu dokumentacji i składaniu wniosków.",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return (
|
||||
<main>
|
||||
<>
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(faqPompyJsonLd) }} />
|
||||
<main>
|
||||
<HeroSection
|
||||
title="Pompy ciepła — niższe rachunki, niezależność, dofinansowanie"
|
||||
subtitle="Zainwestuj w nowoczesne i ekologiczne ogrzewanie domu. Pomagamy na każdym kroku: od audytu, przez uzyskanie dotacji, aż po montaż."
|
||||
@@ -63,5 +112,6 @@ export default function PompyCieplaPage() {
|
||||
ctaLink="/kontakt"
|
||||
/>
|
||||
</main>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
url: `${baseUrl}/sklep/${product.slug}`,
|
||||
lastModified: new Date().toISOString(),
|
||||
changeFrequency: 'weekly' as const,
|
||||
priority: 0.9,
|
||||
priority: 0.8,
|
||||
}));
|
||||
|
||||
// Dynamiczne artykuły na blogu
|
||||
@@ -45,7 +45,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
url: `${baseUrl}/blog/${post.slug}`,
|
||||
lastModified: post.date, // Używamy daty publikacji jako lastModified
|
||||
changeFrequency: 'monthly' as const,
|
||||
priority: 0.7,
|
||||
priority: 0.6,
|
||||
}));
|
||||
|
||||
// Dynamiczne strony miast
|
||||
@@ -53,7 +53,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
url: `${baseUrl}/klimatyzacja/${city.slug}`,
|
||||
lastModified: new Date().toISOString(),
|
||||
changeFrequency: 'monthly' as const,
|
||||
priority: 0.8,
|
||||
priority: 0.7,
|
||||
}));
|
||||
|
||||
return [...staticRoutes, ...productRoutes, ...postRoutes, ...cityRoutes];
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
import { Metadata } from 'next';
|
||||
import { notFound } from 'next/navigation';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { Phone, ArrowLeft, ShoppingBag } from 'lucide-react';
|
||||
import { getProductBySlug, getProducts } from '@/content/products';
|
||||
import { CtaBanner } from '@/components/sections/CtaBanner';
|
||||
import { companyDetails } from '@/content/company';
|
||||
import { ProductPageClient } from '@/components/shop/ProductPageClient';
|
||||
|
||||
interface Props {
|
||||
params: Promise<{ slug: string }>;
|
||||
@@ -31,104 +28,33 @@ export default async function ProductPage({ params }: Props) {
|
||||
const product = getProductBySlug(slug);
|
||||
if (!product) notFound();
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl';
|
||||
|
||||
const productJsonLd = product.price ? {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Product",
|
||||
"name": product.name,
|
||||
"description": product.shortDescription,
|
||||
"sku": product.sku,
|
||||
"brand": { "@type": "Brand", "name": product.brand },
|
||||
"image": product.image.startsWith('http') ? product.image : `${baseUrl}${product.image}`,
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"url": `${baseUrl}/sklep/${product.slug}`,
|
||||
"priceCurrency": "PLN",
|
||||
"price": product.price,
|
||||
"priceValidUntil": "2027-12-31",
|
||||
"availability": "https://schema.org/InStock",
|
||||
"seller": { "@type": "Organization", "name": "ThermCool" },
|
||||
},
|
||||
} : null;
|
||||
|
||||
return (
|
||||
<main className="bg-slate-50 min-h-screen">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||
|
||||
{/* Breadcrumb */}
|
||||
<Link href="/sklep" className="inline-flex items-center gap-2 text-sm text-text-muted hover:text-accent transition-colors mb-6">
|
||||
<ArrowLeft className="size-4" />
|
||||
Wróć do sklepu
|
||||
</Link>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
|
||||
|
||||
{/* Zdjęcie */}
|
||||
<div className="relative aspect-square bg-white rounded-2xl border border-border overflow-hidden">
|
||||
<Image
|
||||
src={product.image}
|
||||
alt={product.name}
|
||||
fill
|
||||
className="object-contain p-8"
|
||||
priority
|
||||
unoptimized={product.image.startsWith('http')}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Info */}
|
||||
<div className="flex flex-col gap-6">
|
||||
<div>
|
||||
<span className="text-sm font-semibold text-accent uppercase tracking-wider">{product.brand}</span>
|
||||
<h1 className="text-2xl md:text-3xl font-bold text-primary font-heading mt-1 leading-tight">
|
||||
{product.name}
|
||||
</h1>
|
||||
<p className="text-xs text-text-muted mt-1">SKU: {product.sku}</p>
|
||||
</div>
|
||||
|
||||
{product.shortDescription && (
|
||||
<p className="text-text-muted leading-relaxed">{product.shortDescription}</p>
|
||||
)}
|
||||
|
||||
{/* Cena / CTA */}
|
||||
<div className="p-5 rounded-xl bg-white border border-border">
|
||||
{product.price !== null ? (
|
||||
<div>
|
||||
<p className="text-3xl font-bold text-primary font-heading">
|
||||
{product.price.toLocaleString('pl-PL')} zł
|
||||
</p>
|
||||
<p className="text-sm text-text-muted mt-1">cena urządzenia brutto (23% VAT)</p>
|
||||
<p className="text-xs text-text-muted mt-1">Montaż wyceniamy indywidualnie — zadzwoń lub napisz</p>
|
||||
<div className="flex flex-col sm:flex-row gap-3 mt-4">
|
||||
<a href={`tel:${companyDetails.phoneRaw}`} className="btn btn-primary font-bold text-white flex items-center gap-2 justify-center">
|
||||
<Phone className="size-4" />
|
||||
Zadzwoń i zamów
|
||||
</a>
|
||||
<Link href="/kontakt" className="btn btn-outline btn-primary bg-white font-bold flex items-center gap-2 justify-center">
|
||||
<ShoppingBag className="size-4" />
|
||||
Zapytaj o montaż
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div>
|
||||
<p className="text-lg font-semibold text-primary font-heading">Cena na zapytanie</p>
|
||||
<p className="text-sm text-text-muted mt-1">Multisplit — cena zależy od wybranych jednostek wewnętrznych i konfiguracji instalacji.</p>
|
||||
<a href={`tel:${companyDetails.phoneRaw}`} className="btn btn-primary font-bold text-white flex items-center gap-2 mt-4">
|
||||
<Phone className="size-4" />
|
||||
Zapytaj o wycenę
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Specyfikacja */}
|
||||
{Object.keys(product.specs).length > 0 && (
|
||||
<div>
|
||||
<h2 className="text-base font-bold text-primary font-heading mb-3">Specyfikacja</h2>
|
||||
<div className="rounded-xl border border-border overflow-hidden">
|
||||
<table className="w-full text-sm">
|
||||
<tbody>
|
||||
{Object.entries(product.specs).map(([key, val], idx) => (
|
||||
<tr key={key} className={idx % 2 === 0 ? 'bg-white' : 'bg-slate-50'}>
|
||||
<td className="px-4 py-2.5 text-text-muted font-medium w-1/2">{key}</td>
|
||||
<td className="px-4 py-2.5 text-primary">{val}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<CtaBanner
|
||||
title="Potrzebujesz montażu?"
|
||||
subtitle="Sprzedajemy z montażem na terenie Dolnego Śląska. Zadzwoń i ustal termin."
|
||||
ctaText="Umów montaż"
|
||||
ctaLink="/kontakt"
|
||||
/>
|
||||
</main>
|
||||
<>
|
||||
{productJsonLd && (
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(productJsonLd) }} />
|
||||
)}
|
||||
<ProductPageClient product={product} companyPhone={companyDetails.phone} companyPhoneRaw={companyDetails.phoneRaw} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,15 @@ export const metadata: Metadata = {
|
||||
alternates: { canonical: '/sklep' },
|
||||
};
|
||||
|
||||
export default function ShopPage() {
|
||||
interface Props {
|
||||
searchParams: Promise<{ search?: string; brand?: string }>;
|
||||
}
|
||||
|
||||
export default async function ShopPage({ searchParams }: Props) {
|
||||
const params = await searchParams;
|
||||
const initialSearch = params.search || '';
|
||||
const initialBrand = params.brand || '';
|
||||
|
||||
const products = getProducts();
|
||||
const brands = getBrands();
|
||||
const splitCount = products.filter(p => p.category === 'scienne').length;
|
||||
@@ -27,7 +35,12 @@ export default function ShopPage() {
|
||||
secondaryCtaLink={undefined}
|
||||
backgroundImage="https://images.unsplash.com/photo-1621905251189-08b45d6a269e?w=1600&q=80"
|
||||
/>
|
||||
<ProductsGrid products={products} brands={brands} />
|
||||
<ProductsGrid
|
||||
products={products}
|
||||
brands={brands}
|
||||
initialSearch={initialSearch}
|
||||
initialBrand={initialBrand}
|
||||
/>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,40 @@
|
||||
"use client";
|
||||
|
||||
import { useState, useRef, useEffect } from "react";
|
||||
import { useState, useRef, useEffect, useMemo } from "react";
|
||||
import { Search } from "lucide-react";
|
||||
import { getProducts } from "@/content/products";
|
||||
import Link from "next/link";
|
||||
import Image from "next/image";
|
||||
import { formatCurrency } from "@/lib/utils";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
const allProducts = getProducts();
|
||||
|
||||
export function GlobalSearch() {
|
||||
const [query, setQuery] = useState("");
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const router = useRouter();
|
||||
|
||||
const products = getProducts();
|
||||
const results = query.length > 1
|
||||
? products.filter(p => p.name.toLowerCase().includes(query.toLowerCase()) || p.brand.toLowerCase().includes(query.toLowerCase()) || p.category.toLowerCase().includes(query.toLowerCase()))
|
||||
: [];
|
||||
const results = useMemo(() => {
|
||||
if (query.length < 2) return [];
|
||||
const q = query.toLowerCase();
|
||||
return allProducts
|
||||
.filter(p =>
|
||||
p.name.toLowerCase().includes(q) ||
|
||||
p.brand.toLowerCase().includes(q) ||
|
||||
p.category.toLowerCase().includes(q) ||
|
||||
(p.sku && p.sku.toLowerCase().includes(q))
|
||||
)
|
||||
.slice(0, 20);
|
||||
}, [query]);
|
||||
|
||||
const handleKeyDown = (e: React.KeyboardEvent) => {
|
||||
if (e.key === 'Enter' && query.length > 1) {
|
||||
router.push(`/sklep?search=${encodeURIComponent(query)}`);
|
||||
setIsOpen(false);
|
||||
setQuery('');
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -29,7 +49,15 @@ export function GlobalSearch() {
|
||||
<dialog className={`modal ${isOpen ? "modal-open" : ""}`}>
|
||||
<div className="modal-box p-0 max-w-2xl bg-white rounded-2xl overflow-hidden mt-[-20vh]">
|
||||
<div className="flex items-center border-b border-border px-4 py-3 bg-slate-50">
|
||||
<Search className="size-5 text-accent mr-3 shrink-0" />
|
||||
<button aria-label="Szukaj" onClick={() => {
|
||||
if (query.length > 1) {
|
||||
router.push(`/sklep?search=${encodeURIComponent(query)}`);
|
||||
setIsOpen(false);
|
||||
setQuery('');
|
||||
}
|
||||
}}>
|
||||
<Search className="size-5 text-accent mr-3 shrink-0 hover:text-primary transition-colors cursor-pointer" />
|
||||
</button>
|
||||
<input
|
||||
autoFocus
|
||||
type="text"
|
||||
@@ -37,8 +65,9 @@ export function GlobalSearch() {
|
||||
className="flex-1 outline-none text-base placeholder:text-text-muted/50 bg-transparent py-2 text-primary font-medium"
|
||||
value={query}
|
||||
onChange={(e) => setQuery(e.target.value)}
|
||||
onKeyDown={handleKeyDown}
|
||||
/>
|
||||
<button onClick={() => setIsOpen(false)} className="text-xs font-semibold text-text-muted hover:text-primary transition-colors bg-white px-2 py-1 rounded border border-border shadow-sm">
|
||||
<button type="button" onClick={() => setIsOpen(false)} className="text-xs font-semibold text-text-muted hover:text-primary transition-colors bg-white px-2 py-1 rounded border border-border shadow-sm">
|
||||
ESC
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -76,20 +76,33 @@ export function Header() {
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const miastaSections = [
|
||||
{
|
||||
title: "Montaż w Twoim mieście",
|
||||
title: "Dolny Śląsk — centrum",
|
||||
items: [
|
||||
{ label: "Klimatyzacja Wrocław", href: "/klimatyzacja/wroclaw", description: "Montaż i serwis we Wrocławiu" },
|
||||
{ label: "Klimatyzacja Legnica", href: "/klimatyzacja/legnica", description: "Obsługujemy Legnicę i okolice" },
|
||||
{ label: "Klimatyzacja Wałbrzych", href: "/klimatyzacja/walbrzych", description: "Montaż w Wałbrzychu" },
|
||||
{ label: "Klimatyzacja Jelenia Góra", href: "/klimatyzacja/jelenia-gora", description: "Dolny Śląsk — południe" },
|
||||
{ label: "→ Wszystkie miasta", href: "/klimatyzacja#miasta", description: "Cały Dolny Śląsk" },
|
||||
{ label: "Klimatyzacja Oława", href: "/klimatyzacja/olawa", description: "25 km od Wrocławia" },
|
||||
{ label: "Klimatyzacja Oleśnica", href: "/klimatyzacja/olesnica", description: "30 km od Wrocławia" },
|
||||
{ label: "Klimatyzacja Środa Śląska", href: "/klimatyzacja/sroda-slaska", description: "35 km od Wrocławia" },
|
||||
{ label: "Klimatyzacja Trzebnica", href: "/klimatyzacja/trzebnica", description: "25 km od Wrocławia" },
|
||||
{ label: "Klimatyzacja Siechnice", href: "/klimatyzacja/siechnice", description: "15 km od Wrocławia" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Dolny Śląsk — regiony",
|
||||
items: [
|
||||
{ label: "Klimatyzacja Legnica", href: "/klimatyzacja/legnica", description: "Legnica i okolice" },
|
||||
{ label: "Klimatyzacja Wałbrzych", href: "/klimatyzacja/walbrzych", description: "Wałbrzych i Kotlina" },
|
||||
{ label: "Klimatyzacja Jelenia Góra", href: "/klimatyzacja/jelenia-gora", description: "Karkonosze i okolice" },
|
||||
{ label: "Klimatyzacja Lubin", href: "/klimatyzacja/lubin", description: "Zagłębie Miedziowe" },
|
||||
{ label: "Klimatyzacja Głogów", href: "/klimatyzacja/glogow", description: "Głogów i powiat" },
|
||||
{ label: "Klimatyzacja Świdnica", href: "/klimatyzacja/swidnica", description: "Świdnica i okolice" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* ----------------- DESKTOP: TOP BAR ----------------- */}
|
||||
@@ -156,6 +169,11 @@ export function Header() {
|
||||
sections={acSections}
|
||||
align="left"
|
||||
/>
|
||||
<NavDropdown
|
||||
label="Miasta"
|
||||
sections={miastaSections}
|
||||
align="left"
|
||||
/>
|
||||
<Link
|
||||
href="/pompy-ciepla"
|
||||
className="text-sm font-medium text-primary hover:text-accent transition-colors"
|
||||
|
||||
@@ -100,6 +100,42 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
|
||||
</div>
|
||||
</details>
|
||||
|
||||
{/* Nowa sekcja: Miasta */}
|
||||
<div className="border-b border-border py-3">
|
||||
<details className="collapse collapse-arrow rounded-none">
|
||||
<summary className="collapse-title text-sm font-medium text-primary hover:text-accent py-0 px-0 min-h-0">
|
||||
Montaż w miastach
|
||||
</summary>
|
||||
<div className="collapse-content px-0 pb-2">
|
||||
<ul className="flex flex-col gap-2 pl-4 pb-2 mt-2">
|
||||
{[
|
||||
{ label: "Klimatyzacja Wrocław", href: "/klimatyzacja/wroclaw" },
|
||||
{ label: "Klimatyzacja Legnica", href: "/klimatyzacja/legnica" },
|
||||
{ label: "Klimatyzacja Wałbrzych", href: "/klimatyzacja/walbrzych" },
|
||||
{ label: "Klimatyzacja Jelenia Góra", href: "/klimatyzacja/jelenia-gora" },
|
||||
{ label: "Klimatyzacja Lubin", href: "/klimatyzacja/lubin" },
|
||||
{ label: "Klimatyzacja Głogów", href: "/klimatyzacja/glogow" },
|
||||
{ label: "Klimatyzacja Świdnica", href: "/klimatyzacja/swidnica" },
|
||||
{ label: "Klimatyzacja Oława", href: "/klimatyzacja/olawa" },
|
||||
{ label: "Klimatyzacja Oleśnica", href: "/klimatyzacja/olesnica" },
|
||||
{ label: "→ Wszystkie miasta", href: "/klimatyzacja#miasta" },
|
||||
].map((item, idx) => (
|
||||
<li key={idx}>
|
||||
<Link
|
||||
href={item.href}
|
||||
onClick={onClose}
|
||||
className="text-sm text-text-muted hover:text-accent transition-colors flex items-center justify-between py-1"
|
||||
>
|
||||
<span>{item.label}</span>
|
||||
<ChevronRight className="size-3.5 opacity-60" />
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
{/* 2. Pompy Ciepła */}
|
||||
<div className="border-b border-border py-3">
|
||||
<Link
|
||||
|
||||
@@ -20,8 +20,6 @@ export function BlogPreview() {
|
||||
const labels: Record<string, string> = {
|
||||
klimatyzacja: "Klimatyzacja",
|
||||
"pompy-ciepla": "Pompy ciepła",
|
||||
remonty: "Remonty",
|
||||
hydraulika: "Hydraulika",
|
||||
porady: "Porady ogólne",
|
||||
};
|
||||
return labels[cat] || cat;
|
||||
|
||||
@@ -17,8 +17,6 @@ const categories = [
|
||||
{ id: 'wszystkie', label: 'Wszystkie' },
|
||||
{ id: 'klimatyzacja', label: 'Klimatyzacja' },
|
||||
{ id: 'pompy-ciepla', label: 'Pompy ciepła' },
|
||||
{ id: 'remonty', label: 'Remonty' },
|
||||
{ id: 'hydraulika', label: 'Hydraulika' },
|
||||
{ id: 'porady', label: 'Porady' },
|
||||
];
|
||||
|
||||
@@ -45,8 +43,6 @@ export function PostsGrid({ posts }: PostsGridProps) {
|
||||
const categoryLabels: Record<string, string> = {
|
||||
'klimatyzacja': 'Klimatyzacja',
|
||||
'pompy-ciepla': 'Pompy Ciepła',
|
||||
'remonty': 'Remonty',
|
||||
'hydraulika': 'Hydraulika',
|
||||
'porady': 'Porady'
|
||||
};
|
||||
|
||||
|
||||
@@ -8,6 +8,20 @@ import { useCartStore } from '@/lib/cart-store';
|
||||
import { useCompareStore } from '@/lib/compare-store';
|
||||
import { useState } from 'react';
|
||||
|
||||
const brandLogos: Record<string, string> = {
|
||||
'Gree': '/brands/gree.webp',
|
||||
'Rotenso': '/brands/rotenso.png',
|
||||
'Toshiba': '/brands/toshiba.jpg',
|
||||
'Daikin': '/brands/daikin.png',
|
||||
'CHV': '/brands/chv.jpeg',
|
||||
'Haier': '/brands/haier.jpg',
|
||||
'Aux': '/brands/aux.png',
|
||||
'LG': '/brands/lg.png',
|
||||
'Samsung': '/brands/samsung.png',
|
||||
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
|
||||
'Fuji Electric': '/brands/fuji-electric.png',
|
||||
};
|
||||
|
||||
interface ProductCardProps {
|
||||
product: Product;
|
||||
}
|
||||
@@ -64,9 +78,22 @@ export function ProductCard({ product }: ProductCardProps) {
|
||||
/>
|
||||
|
||||
{/* Badge marka */}
|
||||
<span className="absolute top-2 left-2 px-2 py-1 bg-white/95 rounded-md text-xs font-semibold text-primary border border-border shadow-sm">
|
||||
{product.brand}
|
||||
</span>
|
||||
<div className="absolute top-2 left-2 px-2 py-1 bg-white/95 rounded-md border border-border shadow-sm flex items-center justify-center min-h-[28px]">
|
||||
{brandLogos[product.brand] ? (
|
||||
<div className="bg-white rounded px-2 py-1 inline-block">
|
||||
<Image
|
||||
src={brandLogos[product.brand]}
|
||||
alt={product.brand}
|
||||
width={56}
|
||||
height={20}
|
||||
className="object-contain"
|
||||
unoptimized
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-xs font-semibold text-primary">{product.brand}</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Badge multisplit */}
|
||||
{product.category === 'multisplit' && (
|
||||
|
||||
@@ -0,0 +1,452 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import {
|
||||
ArrowLeft, Phone, ShoppingCart, GitCompare, Check,
|
||||
Thermometer, Volume2, Zap, Wind, Star, Info
|
||||
} from 'lucide-react';
|
||||
import { Product } from '@/content/products';
|
||||
import { useCartStore } from '@/lib/cart-store';
|
||||
import { useCompareStore } from '@/lib/compare-store';
|
||||
import { getProductVariants } from '@/content/product-variants';
|
||||
import { useRouter } from 'next/navigation';
|
||||
|
||||
const brandLogos: Record<string, string> = {
|
||||
'Gree': '/brands/gree.webp',
|
||||
'Rotenso': '/brands/rotenso.png',
|
||||
'Toshiba': '/brands/toshiba.jpg',
|
||||
'Daikin': '/brands/daikin.png',
|
||||
'CHV': '/brands/chv.jpeg',
|
||||
'Haier': '/brands/haier.jpg',
|
||||
'Aux': '/brands/aux.png',
|
||||
'LG': '/brands/lg.png',
|
||||
'Samsung': '/brands/samsung.png',
|
||||
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
|
||||
'Fuji Electric': '/brands/fuji-electric.png',
|
||||
};
|
||||
|
||||
interface Props {
|
||||
product: Product;
|
||||
companyPhone: string;
|
||||
companyPhoneRaw: string;
|
||||
}
|
||||
|
||||
// Szacowany SEER na podstawie klasy energetycznej
|
||||
function estimateSEER(klasa: string): number {
|
||||
if (!klasa) return 5.0;
|
||||
const k = klasa.toUpperCase();
|
||||
if (k.includes('A+++')) return 8.5;
|
||||
if (k.includes('A++')) return 6.1;
|
||||
if (k.includes('A+')) return 4.6;
|
||||
if (k.includes('A')) return 3.6;
|
||||
return 5.0;
|
||||
}
|
||||
|
||||
// Parsuj moc — bierz wartość nominalną (środkową lub pierwszą)
|
||||
function parseMoc(val: string): number {
|
||||
if (!val) return 0;
|
||||
const nums = val.replace(',', '.').match(/[\d.]+/g);
|
||||
if (!nums) return 0;
|
||||
if (nums.length === 1) return parseFloat(nums[0]);
|
||||
// zakres: bierz środkową
|
||||
const floats = nums.map(parseFloat);
|
||||
return floats[Math.floor(floats.length / 2)];
|
||||
}
|
||||
|
||||
const TABS = ['Opis', 'Specyfikacja', 'Montaż', 'Dostawa'] as const;
|
||||
type Tab = typeof TABS[number];
|
||||
|
||||
export function ProductPageClient({ product, companyPhone, companyPhoneRaw }: Props) {
|
||||
const [activeTab, setActiveTab] = useState<Tab>('Opis');
|
||||
const [godziny, setGodziny] = useState(8);
|
||||
const [added, setAdded] = useState(false);
|
||||
|
||||
const router = useRouter();
|
||||
const variants = getProductVariants(product.slug);
|
||||
|
||||
const addToCart = useCartStore(s => s.addItem);
|
||||
const { addItem: addCompare, removeItem: removeCompare, isAdded } = useCompareStore();
|
||||
const inCompare = isAdded(product.slug);
|
||||
|
||||
const handleAddToCart = () => {
|
||||
if (!product.price) return;
|
||||
addToCart({ slug: product.slug, name: product.name, brand: product.brand, image: product.image, price: product.price });
|
||||
setAdded(true);
|
||||
setTimeout(() => setAdded(false), 1500);
|
||||
};
|
||||
|
||||
const handleCompare = () => {
|
||||
if (inCompare) removeCompare(product.slug);
|
||||
else addCompare({ slug: product.slug, name: product.name, brand: product.brand, price: product.price, image: product.image, specs: product.specs });
|
||||
};
|
||||
|
||||
// Kalkulator
|
||||
const mocChlodnicza = parseMoc(product.specs['Moc chłodnicza'] || '');
|
||||
const pobórMocy = parseMoc(product.specs['Pobór mocy chłodzenie (kW)'] || '') || (mocChlodnicza / estimateSEER(product.specs['Klasa energetyczna'] || ''));
|
||||
const cenaKwh = 0.75;
|
||||
const kosztGodzina = pobórMocy * cenaKwh;
|
||||
const kosztMiesiac = kosztGodzina * godziny * 30;
|
||||
|
||||
// Kluczowe parametry do ikon
|
||||
const params = [
|
||||
product.specs['Klasa energetyczna'] && { icon: Star, label: 'Klasa energetyczna', value: product.specs['Klasa energetyczna'], color: 'text-green-600 bg-green-50' },
|
||||
product.specs['Moc chłodnicza'] && { icon: Thermometer, label: 'Moc chłodnicza', value: `${product.specs['Moc chłodnicza']} kW`, color: 'text-blue-600 bg-blue-50' },
|
||||
product.specs['Moc grzewcza (kW)'] && { icon: Thermometer, label: 'Moc grzewcza', value: `${product.specs['Moc grzewcza (kW)']} kW`, color: 'text-orange-600 bg-orange-50' },
|
||||
product.specs['Hałas wewnątrz (dB)'] && { icon: Volume2, label: 'Hałas wewnątrz', value: `${product.specs['Hałas wewnątrz (dB)']} dB`, color: 'text-purple-600 bg-purple-50' },
|
||||
product.specs['Czynnik chłodniczy'] && { icon: Wind, label: 'Czynnik', value: product.specs['Czynnik chłodniczy'], color: 'text-teal-600 bg-teal-50' },
|
||||
product.specs['Grzanie do'] && { icon: Zap, label: 'Grzanie do', value: `-${product.specs['Grzanie do']}°C`, color: 'text-accent bg-accent-light' },
|
||||
].filter(Boolean) as { icon: any; label: string; value: string; color: string }[];
|
||||
|
||||
return (
|
||||
<main className="bg-slate-50 min-h-screen pb-16">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
|
||||
|
||||
{/* Breadcrumb */}
|
||||
<nav className="flex items-center gap-1.5 text-xs text-text-muted mb-6">
|
||||
<Link href="/" className="hover:text-accent transition-colors">Strona główna</Link>
|
||||
<span>/</span>
|
||||
<Link href="/sklep" className="hover:text-accent transition-colors">Sklep</Link>
|
||||
<span>/</span>
|
||||
<Link href={`/sklep?brand=${product.brand}`} className="hover:text-accent transition-colors">{product.brand}</Link>
|
||||
<span>/</span>
|
||||
<span className="text-primary font-medium truncate max-w-[200px]">{product.name}</span>
|
||||
</nav>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 xl:gap-12">
|
||||
|
||||
{/* LEWA: Zdjęcie */}
|
||||
<div>
|
||||
<div className="relative aspect-square bg-white rounded-2xl border border-border overflow-hidden">
|
||||
<Image
|
||||
src={product.image}
|
||||
alt={product.name}
|
||||
fill
|
||||
className="object-contain p-8"
|
||||
priority
|
||||
unoptimized={product.image.startsWith('http')}
|
||||
/>
|
||||
{/* Badges */}
|
||||
{product.specs['Klasa energetyczna'] && (
|
||||
<div className="absolute top-4 left-4 px-2.5 py-1 bg-green-500 text-white text-xs font-bold rounded-lg shadow">
|
||||
{product.specs['Klasa energetyczna'].split('/')[0]}
|
||||
</div>
|
||||
)}
|
||||
{product.category === 'multisplit' && (
|
||||
<div className="absolute top-4 right-4 px-2.5 py-1 bg-accent text-white text-xs font-bold rounded-lg shadow">
|
||||
MULTISPLIT
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* PRAWA: Info */}
|
||||
<div className="flex flex-col gap-5">
|
||||
{/* Nagłówek */}
|
||||
<div>
|
||||
<div className="mb-2">
|
||||
{brandLogos[product.brand] ? (
|
||||
<div className="bg-white rounded-lg p-2 inline-block border border-border">
|
||||
<Image
|
||||
src={brandLogos[product.brand]}
|
||||
alt={product.brand}
|
||||
width={120}
|
||||
height={36}
|
||||
className="object-contain object-left"
|
||||
unoptimized
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-xs font-bold text-accent uppercase tracking-widest">
|
||||
{product.brand}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<h1 className="text-2xl md:text-3xl font-extrabold text-primary font-heading leading-tight">
|
||||
{product.name}
|
||||
</h1>
|
||||
<p className="text-xs text-text-muted mt-1.5 mb-4">SKU: {product.sku}</p>
|
||||
</div>
|
||||
|
||||
{/* Warianty mocy */}
|
||||
{variants && variants.moce.length > 0 && (
|
||||
<div className="mb-4">
|
||||
<p className="text-xs font-semibold text-text-muted uppercase tracking-wider mb-2">
|
||||
Dostępne moce (kW):
|
||||
</p>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{variants.moce.map((v) => (
|
||||
<button
|
||||
key={v.slug}
|
||||
onClick={() => router.push(`/sklep/${v.slug}`)}
|
||||
className={`px-4 py-2 rounded-xl text-sm font-bold border-2 transition-all ${
|
||||
v.slug === product.slug
|
||||
? 'border-accent bg-accent text-white shadow-sm'
|
||||
: 'border-border bg-white text-primary hover:border-accent hover:text-accent'
|
||||
}`}
|
||||
>
|
||||
{v.moc} kW
|
||||
{v.slug !== product.slug && (
|
||||
<span className="block text-[10px] font-normal opacity-70 mt-0.5">
|
||||
{v.cena.toLocaleString('pl-PL')} zł
|
||||
</span>
|
||||
)}
|
||||
{v.slug === product.slug && (
|
||||
<span className="block text-[10px] font-normal opacity-80 mt-0.5">
|
||||
{v.cena.toLocaleString('pl-PL')} zł
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Warianty wykończenia */}
|
||||
{variants && variants.wykończenia.length > 0 && (
|
||||
<div className="mb-4">
|
||||
<p className="text-xs font-semibold text-text-muted uppercase tracking-wider mb-2">
|
||||
Wykończenie:
|
||||
</p>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{variants.wykończenia.map((v) => (
|
||||
<button
|
||||
key={v.slug}
|
||||
onClick={() => router.push(`/sklep/${v.slug}`)}
|
||||
className={`px-4 py-2 rounded-xl text-sm font-bold border-2 transition-all ${
|
||||
v.slug === product.slug
|
||||
? 'border-accent bg-accent text-white shadow-sm'
|
||||
: 'border-border bg-white text-primary hover:border-accent hover:text-accent'
|
||||
}`}
|
||||
>
|
||||
{v.wykończenie}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Ikony parametrów */}
|
||||
{params.length > 0 && (
|
||||
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2.5">
|
||||
{params.map((p, i) => {
|
||||
const Icon = p.icon;
|
||||
return (
|
||||
<div key={i} className={`flex items-center gap-2 px-3 py-2 rounded-xl ${p.color} border border-current/10`}>
|
||||
<Icon className="size-4 shrink-0" />
|
||||
<div className="min-w-0">
|
||||
<p className="text-[10px] font-medium opacity-70 leading-none mb-0.5">{p.label}</p>
|
||||
<p className="text-xs font-bold truncate">{p.value}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Cena i CTA */}
|
||||
<div className="bg-white rounded-2xl border border-border p-5">
|
||||
{product.price !== null ? (
|
||||
<>
|
||||
<div className="flex items-end gap-3 mb-1">
|
||||
<span className="text-3xl font-extrabold text-primary font-heading">
|
||||
{product.price.toLocaleString('pl-PL')} zł
|
||||
</span>
|
||||
</div>
|
||||
<p className="text-xs text-text-muted mb-1">cena urządzenia brutto (23% VAT)</p>
|
||||
<p className="text-xs text-text-muted mb-4">Montaż wyceniamy indywidualnie — zadzwoń lub napisz</p>
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-3">
|
||||
<button
|
||||
onClick={handleAddToCart}
|
||||
className={`flex-1 flex items-center justify-center gap-2 py-3 px-4 rounded-xl font-bold text-sm transition-all ${
|
||||
added ? 'bg-green-500 text-white' : 'bg-accent text-white hover:bg-accent/90'
|
||||
}`}
|
||||
>
|
||||
{added ? <><Check className="size-4" /> Dodano do koszyka</> : <><ShoppingCart className="size-4" /> Do koszyka</>}
|
||||
</button>
|
||||
<Link href="/kontakt" className="flex-1">
|
||||
<button className="w-full flex items-center justify-center gap-2 py-3 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ż
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={handleCompare}
|
||||
className={`w-full mt-2 flex items-center justify-center gap-2 py-2 px-4 rounded-xl text-xs font-medium transition-colors ${
|
||||
inCompare ? 'bg-accent/10 text-accent border border-accent' : 'bg-slate-50 text-text-muted border border-border hover:border-accent hover:text-accent'
|
||||
}`}
|
||||
>
|
||||
<GitCompare className="size-3.5" />
|
||||
{inCompare ? 'Usuń z porównania' : 'Dodaj do porównania'}
|
||||
</button>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<p className="text-lg font-bold text-primary font-heading mb-1">Cena na zapytanie</p>
|
||||
<p className="text-sm text-text-muted mb-4">Multisplit — cena zależy od konfiguracji jednostek wewnętrznych.</p>
|
||||
<a href={`tel:${companyPhoneRaw}`} className="flex items-center justify-center gap-2 py-3 px-4 rounded-xl bg-accent text-white font-bold text-sm hover:bg-accent/90 transition-colors">
|
||||
<Phone className="size-4" /> Zadzwoń: {companyPhone}
|
||||
</a>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Profesjonalna porada */}
|
||||
<a
|
||||
href={`tel:${companyPhoneRaw}`}
|
||||
className="flex items-center justify-between px-5 py-3.5 bg-primary rounded-xl text-white hover:bg-primary/90 transition-colors"
|
||||
>
|
||||
<span className="text-sm font-semibold">Profesjonalna porada</span>
|
||||
<span className="flex items-center gap-2 font-bold">
|
||||
<Phone className="size-4" /> {companyPhone}
|
||||
</span>
|
||||
</a>
|
||||
|
||||
{/* Kalkulator kosztów energii */}
|
||||
{mocChlodnicza > 0 && (
|
||||
<div className="bg-white rounded-2xl border border-border p-5">
|
||||
<div className="flex items-center gap-2 mb-4">
|
||||
<Zap className="size-4 text-accent" />
|
||||
<h3 className="text-sm font-bold text-primary font-heading">Kalkulator kosztów energii</h3>
|
||||
<div className="group relative ml-auto">
|
||||
<Info className="size-4 text-text-muted cursor-help" />
|
||||
<div className="absolute right-0 bottom-6 w-56 bg-primary text-white text-xs rounded-lg p-2.5 hidden group-hover:block z-10">
|
||||
Szacunek przy cenie prądu {cenaKwh} zł/kWh. Rzeczywiste koszty mogą się różnić.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-4 mb-4">
|
||||
<label className="text-xs text-text-muted shrink-0">Godziny użycia dziennie:</label>
|
||||
<input
|
||||
type="range"
|
||||
min={1}
|
||||
max={24}
|
||||
value={godziny}
|
||||
onChange={e => setGodziny(Number(e.target.value))}
|
||||
className="flex-1 accent-accent"
|
||||
/>
|
||||
<span className="text-sm font-bold text-primary w-8 text-right">{godziny}h</span>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
<div className="bg-slate-50 rounded-xl p-3 text-center">
|
||||
<p className="text-xs text-text-muted mb-1">Koszt / godzinę</p>
|
||||
<p className="text-lg font-bold text-primary font-heading">
|
||||
{kosztGodzina.toFixed(2)} zł
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-accent-light rounded-xl p-3 text-center border border-accent/20">
|
||||
<p className="text-xs text-accent mb-1">Koszt miesięczny</p>
|
||||
<p className="text-lg font-bold text-accent font-heading">
|
||||
{kosztMiesiac.toFixed(2)} zł
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<p className="text-[10px] text-text-muted mt-2 text-center">
|
||||
Szacunek przy {cenaKwh} zł/kWh · {godziny}h/dzień · 30 dni
|
||||
{!product.specs['Pobór mocy chłodzenie (kW)'] && ' · pobór szacowany z klasy energetycznej'}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* TABS */}
|
||||
<div className="mt-10">
|
||||
<div className="flex gap-1 border-b border-border mb-6 overflow-x-auto">
|
||||
{TABS.map(tab => (
|
||||
<button
|
||||
key={tab}
|
||||
onClick={() => setActiveTab(tab)}
|
||||
className={`px-5 py-3 text-sm font-semibold whitespace-nowrap transition-colors border-b-2 -mb-px ${
|
||||
activeTab === tab
|
||||
? 'border-accent text-accent'
|
||||
: 'border-transparent text-text-muted hover:text-primary'
|
||||
}`}
|
||||
>
|
||||
{tab}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Tab: Opis */}
|
||||
{activeTab === 'Opis' && (
|
||||
<div className="max-w-3xl">
|
||||
{product.shortDescription ? (
|
||||
<p className="text-text-muted leading-relaxed text-base">{product.shortDescription}</p>
|
||||
) : (
|
||||
<p className="text-text-muted">Brak opisu produktu.</p>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Tab: Specyfikacja */}
|
||||
{activeTab === 'Specyfikacja' && (
|
||||
<div className="max-w-2xl">
|
||||
{Object.keys(product.specs).length > 0 ? (
|
||||
<div className="rounded-xl border border-border overflow-hidden">
|
||||
<table className="w-full text-sm">
|
||||
<tbody>
|
||||
{Object.entries(product.specs).map(([key, val], idx) => (
|
||||
<tr key={key} className={idx % 2 === 0 ? 'bg-white' : 'bg-slate-50'}>
|
||||
<td className="px-5 py-3 text-text-muted font-medium w-1/2 border-r border-border">{key}</td>
|
||||
<td className="px-5 py-3 text-primary font-semibold">{val}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
) : (
|
||||
<p className="text-text-muted">Brak specyfikacji.</p>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Tab: Montaż */}
|
||||
{activeTab === 'Montaż' && (
|
||||
<div className="max-w-2xl space-y-4">
|
||||
<div className="bg-white rounded-xl border border-border p-5">
|
||||
<h3 className="font-bold text-primary font-heading mb-3">Montaż klimatyzacji</h3>
|
||||
<p className="text-sm text-text-muted leading-relaxed mb-4">
|
||||
Oferujemy profesjonalny montaż wszystkich klimatyzatorów z naszego sklepu na terenie Dolnego Śląska.
|
||||
Montaż wykonujemy z uprawnieniami F-Gaz, estetycznie i terminowo.
|
||||
</p>
|
||||
<ul className="space-y-2 text-sm text-text-muted">
|
||||
{['Bezpłatna wycena montażu przed realizacją', 'Uprawnienia F-Gaz — wymóg prawny', 'Próba szczelności i próżnia po montażu', 'Szkolenie z obsługi urządzenia', 'Gwarancja na wykonaną instalację'].map(item => (
|
||||
<li key={item} className="flex items-center gap-2">
|
||||
<Check className="size-4 text-green-500 shrink-0" />
|
||||
{item}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<a href={`tel:${companyPhoneRaw}`} className="mt-4 inline-flex items-center gap-2 btn btn-primary text-white font-bold text-sm">
|
||||
<Phone className="size-4" /> Zapytaj o montaż
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Tab: Dostawa */}
|
||||
{activeTab === 'Dostawa' && (
|
||||
<div className="max-w-2xl">
|
||||
<div className="bg-white rounded-xl border border-border p-5">
|
||||
<h3 className="font-bold text-primary font-heading mb-3">Informacje o dostawie</h3>
|
||||
<p className="text-sm text-text-muted leading-relaxed">
|
||||
Szczegóły dostawy ustalamy indywidualnie po złożeniu zamówienia. Skontaktujemy się z Tobą w ciągu 24 godzin
|
||||
od otrzymania zamówienia, aby potwierdzić termin dostawy i montażu.
|
||||
</p>
|
||||
<Link href="/dostawa" className="mt-3 inline-block text-sm text-accent hover:underline font-medium">
|
||||
Sprawdź politykę dostawy →
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import { companyDetails } from '@/content/company';
|
||||
interface ProductsGridProps {
|
||||
products: Product[];
|
||||
brands: string[];
|
||||
initialSearch?: string;
|
||||
initialBrand?: string;
|
||||
}
|
||||
|
||||
const PER_PAGE = 24;
|
||||
@@ -74,9 +76,10 @@ function Accordion({ title, children, defaultOpen = true }: AccordionProps) {
|
||||
);
|
||||
}
|
||||
|
||||
export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
||||
export function ProductsGrid({ products, brands, initialSearch, initialBrand }: ProductsGridProps) {
|
||||
const [category, setCategory] = useState<'all' | 'scienne' | 'multisplit'>('all');
|
||||
const [selectedBrands, setSelectedBrands] = useState<string[]>([]);
|
||||
const [selectedBrands, setSelectedBrands] = useState<string[]>(initialBrand ? [initialBrand] : []);
|
||||
const [searchQuery, setSearchQuery] = useState(initialSearch || '');
|
||||
const [priceMin, setPriceMin] = useState('');
|
||||
const [priceMax, setPriceMax] = useState('');
|
||||
const [selectedRooms, setSelectedRooms] = useState<string[]>([]);
|
||||
@@ -103,6 +106,14 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
||||
|
||||
const filtered = useMemo(() => {
|
||||
return products.filter(p => {
|
||||
// Wyszukiwanie tekstowe
|
||||
if (searchQuery) {
|
||||
const sq = searchQuery.toLowerCase();
|
||||
if (!p.name.toLowerCase().includes(sq) && !p.brand.toLowerCase().includes(sq)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Kategoria
|
||||
if (category !== 'all' && p.category !== category) return false;
|
||||
|
||||
@@ -177,6 +188,7 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
||||
const resetAll = () => {
|
||||
setCategory('all');
|
||||
setSelectedBrands([]);
|
||||
setSearchQuery('');
|
||||
setPriceMin('');
|
||||
setPriceMax('');
|
||||
setSelectedRooms([]);
|
||||
@@ -186,7 +198,7 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
|
||||
setPage(1);
|
||||
};
|
||||
|
||||
const hasFilters = category !== 'all' || selectedBrands.length > 0 || priceMin || priceMax || selectedRooms.length > 0 || selectedColors.length > 0 || halasMin > 15 || halasMax < 50;
|
||||
const hasFilters = category !== 'all' || selectedBrands.length > 0 || searchQuery !== '' || priceMin || priceMax || selectedRooms.length > 0 || selectedColors.length > 0 || halasMin > 15 || halasMax < 50;
|
||||
|
||||
const Sidebar = () => (
|
||||
<aside className="w-full">
|
||||
|
||||
@@ -1,26 +1,44 @@
|
||||
"use client";
|
||||
'use client';
|
||||
|
||||
import { useEffect } from "react";
|
||||
import { useConsentStore } from "@/lib/consent-store";
|
||||
import { GoogleAnalytics, GoogleTagManager } from "@next/third-parties/google";
|
||||
import Script from 'next/script';
|
||||
import { useConsentStore } from '@/lib/consent-store';
|
||||
|
||||
const GA_ID = 'G-VW3GD6SS7K';
|
||||
const CLARITY_ID = 'xdo6q3i06e';
|
||||
|
||||
export function AnalyticsWrapper() {
|
||||
const { analytics, marketing, isInitialized, initialize } = useConsentStore();
|
||||
const { analyticsConsent } = useConsentStore();
|
||||
|
||||
useEffect(() => {
|
||||
initialize();
|
||||
}, [initialize]);
|
||||
|
||||
if (!isInitialized) return null;
|
||||
if (!analyticsConsent) return null;
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Ładujemy GTM tylko jeśli zgoda na marketing ATAK LUB analitykę,
|
||||
w zależności od rygorystyczności, zazwyczaj GTM potrzebuje analityki/marketingu */}
|
||||
{(analytics || marketing) && <GoogleTagManager gtmId="GTM-MBMRCD2N" />}
|
||||
{/* GA4 */}
|
||||
<Script
|
||||
src={`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`}
|
||||
strategy="afterInteractive"
|
||||
/>
|
||||
<Script id="ga4-init" strategy="afterInteractive">
|
||||
{`
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '${GA_ID}', {
|
||||
page_path: window.location.pathname,
|
||||
});
|
||||
`}
|
||||
</Script>
|
||||
|
||||
{/* Ładujemy GA4 tylko jeśli użytkownik zgodził się na analitykę */}
|
||||
{analytics && <GoogleAnalytics gaId="G-1NGTSR4TWD" />}
|
||||
{/* Microsoft Clarity */}
|
||||
<Script id="clarity-init" strategy="afterInteractive">
|
||||
{`
|
||||
(function(c,l,a,r,i,t,y){
|
||||
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
|
||||
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
|
||||
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
|
||||
})(window, document, "clarity", "script", "${CLARITY_ID}");
|
||||
`}
|
||||
</Script>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ export function CookieBanner() {
|
||||
analytics,
|
||||
marketing,
|
||||
setConsent,
|
||||
setAnalyticsConsent,
|
||||
acceptAll,
|
||||
rejectOptional,
|
||||
closeBanner
|
||||
@@ -25,9 +26,20 @@ export function CookieBanner() {
|
||||
|
||||
const handleSaveSettings = () => {
|
||||
setConsent(localAnalytics, localMarketing);
|
||||
setAnalyticsConsent(localAnalytics);
|
||||
setShowSettings(false);
|
||||
};
|
||||
|
||||
const handleAcceptAll = () => {
|
||||
acceptAll();
|
||||
setAnalyticsConsent(true);
|
||||
};
|
||||
|
||||
const handleRejectOptional = () => {
|
||||
rejectOptional();
|
||||
setAnalyticsConsent(false);
|
||||
};
|
||||
|
||||
const handleOpenSettings = () => {
|
||||
const hasConsent = localStorage.getItem('thermcool_cookie_consent_v1');
|
||||
setLocalAnalytics(hasConsent ? analytics : true);
|
||||
@@ -63,13 +75,13 @@ export function CookieBanner() {
|
||||
|
||||
<div className="flex flex-col sm:flex-row flex-wrap items-center gap-3 mt-6">
|
||||
<button
|
||||
onClick={acceptAll}
|
||||
onClick={handleAcceptAll}
|
||||
className="btn btn-primary text-white flex-grow sm:flex-grow-0 border-none shadow-md"
|
||||
>
|
||||
<Check className="w-4 h-4 mr-1 text-white" /> Akceptuj wszystkie
|
||||
</button>
|
||||
<button
|
||||
onClick={rejectOptional}
|
||||
onClick={handleRejectOptional}
|
||||
className="btn btn-outline border-slate-600 text-slate-200 hover:bg-slate-800 hover:text-white hover:border-slate-500 flex-grow sm:flex-grow-0"
|
||||
>
|
||||
<X className="w-4 h-4 mr-1 text-slate-300" /> Tylko niezbędne
|
||||
@@ -87,7 +99,7 @@ export function CookieBanner() {
|
||||
|
||||
{/* Przycisk zamknięcia wymusza "Tylko niezbędne" dla bezpieczeństwa */}
|
||||
<button
|
||||
onClick={rejectOptional}
|
||||
onClick={handleRejectOptional}
|
||||
className="absolute top-4 right-4 text-slate-500 hover:text-white p-1"
|
||||
aria-label="Zamknij"
|
||||
>
|
||||
@@ -167,13 +179,13 @@ export function CookieBanner() {
|
||||
|
||||
<div className="p-5 border-t border-slate-700 bg-slate-800/50 flex flex-col-reverse sm:flex-row justify-end gap-3 items-center">
|
||||
<button
|
||||
onClick={rejectOptional}
|
||||
onClick={handleRejectOptional}
|
||||
className="btn btn-ghost text-slate-400 hover:text-white w-full sm:w-auto"
|
||||
>
|
||||
Odrzuć wszystkie
|
||||
</button>
|
||||
<button
|
||||
onClick={acceptAll}
|
||||
onClick={handleAcceptAll}
|
||||
className="btn btn-outline border-slate-600 text-white hover:bg-slate-700 w-full sm:w-auto"
|
||||
>
|
||||
Akceptuj wszystkie
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// TODO: Dane firmy — do uzupełnienia przez właściciela
|
||||
export const companyDetails = {
|
||||
name: "ThermCool HVAC & Usługi Domowe",
|
||||
name: "ThermCool HVAC",
|
||||
legalName: "e-Cores Radosław Smoliński",
|
||||
shortName: "ThermCool",
|
||||
nip: "8943284529",
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
import { getProducts } from './products';
|
||||
|
||||
export interface VariantOption {
|
||||
slug: string;
|
||||
moc?: string;
|
||||
moc_float?: number;
|
||||
wykończenie?: string;
|
||||
cena: number;
|
||||
}
|
||||
|
||||
export interface ProductVariants {
|
||||
series: string;
|
||||
currentMoc: string;
|
||||
currentWykończenie: string;
|
||||
moce: VariantOption[];
|
||||
wykończenia: VariantOption[];
|
||||
}
|
||||
|
||||
export function getProductVariants(slug: string): ProductVariants | null {
|
||||
const products = getProducts();
|
||||
const currentProduct = products.find(p => p.slug === slug);
|
||||
if (!currentProduct) return null;
|
||||
|
||||
// Extract series from SKU (e.g., GREE-PULAR-PU09S -> GREE-PULAR)
|
||||
const skuParts = currentProduct.sku.split('-');
|
||||
if (skuParts.length < 2) return null;
|
||||
const series = skuParts.slice(0, -1).join('-');
|
||||
|
||||
const seriesProducts = products.filter(p => p.sku.startsWith(series + '-'));
|
||||
|
||||
const currentMoc = currentProduct.specs['Moc chłodnicza'] || '';
|
||||
const currentWykończenie = currentProduct.specs['Wykończenie'] || '';
|
||||
|
||||
// Moce: same series, same wykończenie
|
||||
const moceProducts = seriesProducts.filter(p => (p.specs['Wykończenie'] || '') === currentWykończenie);
|
||||
const moce = moceProducts
|
||||
.filter(p => p.specs['Moc chłodnicza'] && p.price)
|
||||
.map(p => {
|
||||
const m = p.specs['Moc chłodnicza'] as string;
|
||||
return {
|
||||
slug: p.slug,
|
||||
moc: m,
|
||||
moc_float: parseFloat(m.replace(',', '.')),
|
||||
cena: p.price as number,
|
||||
};
|
||||
})
|
||||
.sort((a, b) => (a.moc_float || 0) - (b.moc_float || 0));
|
||||
|
||||
// Wykończenia: same series, same moc
|
||||
const wykończeniaProducts = seriesProducts.filter(p => (p.specs['Moc chłodnicza'] || '') === currentMoc);
|
||||
let wykończenia = wykończeniaProducts
|
||||
.filter(p => p.specs['Wykończenie'] && p.price)
|
||||
.map(p => ({
|
||||
slug: p.slug,
|
||||
wykończenie: p.specs['Wykończenie'] as string,
|
||||
cena: p.price as number,
|
||||
}));
|
||||
|
||||
// If there's only 1 finish available in the entire series, don't show the variants selector
|
||||
const allFinishesInSeries = new Set(seriesProducts.map(p => p.specs['Wykończenie'] || '').filter(Boolean));
|
||||
if (allFinishesInSeries.size <= 1) {
|
||||
wykończenia = [];
|
||||
}
|
||||
|
||||
return {
|
||||
series,
|
||||
currentMoc,
|
||||
currentWykończenie,
|
||||
moce: moce.length > 1 ? moce : [],
|
||||
wykończenia,
|
||||
};
|
||||
}
|
||||
@@ -4,11 +4,13 @@ interface ConsentState {
|
||||
isInitialized: boolean;
|
||||
isOpen: boolean;
|
||||
analytics: boolean;
|
||||
analyticsConsent: boolean;
|
||||
marketing: boolean;
|
||||
initialize: () => void;
|
||||
openBanner: () => void;
|
||||
closeBanner: () => void;
|
||||
setConsent: (analytics: boolean, marketing: boolean) => void;
|
||||
setAnalyticsConsent: (v: boolean) => void;
|
||||
acceptAll: () => void;
|
||||
rejectOptional: () => void;
|
||||
}
|
||||
@@ -19,6 +21,7 @@ export const useConsentStore = create<ConsentState>((set) => ({
|
||||
isInitialized: false,
|
||||
isOpen: false,
|
||||
analytics: false,
|
||||
analyticsConsent: false,
|
||||
marketing: false,
|
||||
|
||||
initialize: () => {
|
||||
@@ -31,6 +34,7 @@ export const useConsentStore = create<ConsentState>((set) => ({
|
||||
isInitialized: true,
|
||||
isOpen: false,
|
||||
analytics: !!parsed.analytics,
|
||||
analyticsConsent: !!parsed.analytics,
|
||||
marketing: !!parsed.marketing,
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -50,16 +54,18 @@ export const useConsentStore = create<ConsentState>((set) => ({
|
||||
|
||||
setConsent: (analytics, marketing) => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics, marketing }));
|
||||
set({ analytics, marketing, isOpen: false });
|
||||
set({ analytics, analyticsConsent: analytics, marketing, isOpen: false });
|
||||
},
|
||||
|
||||
setAnalyticsConsent: (v: boolean) => set({ analyticsConsent: v }),
|
||||
|
||||
acceptAll: () => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics: true, marketing: true }));
|
||||
set({ analytics: true, marketing: true, isOpen: false });
|
||||
set({ analytics: true, analyticsConsent: true, marketing: true, isOpen: false });
|
||||
},
|
||||
|
||||
rejectOptional: () => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics: false, marketing: false }));
|
||||
set({ analytics: false, marketing: false, isOpen: false });
|
||||
set({ analytics: false, analyticsConsent: false, marketing: false, isOpen: false });
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -3,12 +3,24 @@ import type { NextConfig } from "next";
|
||||
const nextConfig: NextConfig = {
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
protocol: 'https',
|
||||
hostname: 'images.unsplash.com',
|
||||
},
|
||||
{ protocol: 'https', hostname: 'images.unsplash.com' },
|
||||
{ protocol: 'https', hostname: 'placehold.co' },
|
||||
{ protocol: 'http', hostname: 'localhost' },
|
||||
],
|
||||
},
|
||||
async headers() {
|
||||
return [
|
||||
{
|
||||
source: '/(.*)',
|
||||
headers: [
|
||||
{ key: 'X-Content-Type-Options', value: 'nosniff' },
|
||||
{ key: 'X-Frame-Options', value: 'DENY' },
|
||||
{ key: 'X-XSS-Protection', value: '1; mode=block' },
|
||||
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
|
||||
],
|
||||
},
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
|
||||
|
After Width: | Height: | Size: 35 KiB |
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="320.000000pt" height="320.000000pt" viewBox="0 0 320.000000 320.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,320.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M761 2171 c-72 -25 -101 -49 -131 -107 -24 -47 -25 -54 -25 -264 0
|
||||
-203 1 -217 22 -256 29 -55 73 -90 136 -110 64 -19 314 -30 480 -19 l117 7 0
|
||||
36 c1 83 64 162 146 184 36 10 44 16 44 35 0 23 -2 23 -115 23 l-115 0 0 -24
|
||||
c0 -15 -11 -33 -26 -45 -25 -19 -40 -21 -191 -21 -238 0 -254 11 -261 171 -5
|
||||
109 6 154 44 190 25 24 29 24 209 24 166 0 185 -2 204 -19 12 -11 21 -30 21
|
||||
-43 l0 -24 118 3 117 3 -3 60 c-2 36 -12 78 -25 104 -48 97 -105 111 -452 111
|
||||
-226 -1 -267 -3 -314 -19z"/>
|
||||
<path d="M1610 1921 l0 -268 38 -7 c21 -3 54 -16 72 -28 56 -38 74 -71 78
|
||||
-143 4 -56 7 -65 23 -65 18 0 19 10 19 145 l0 145 245 0 245 0 0 -145 0 -145
|
||||
115 0 115 0 0 390 0 390 -115 0 -115 0 0 -140 0 -140 -245 0 -245 0 0 140 0
|
||||
140 -115 0 -115 0 0 -269z"/>
|
||||
<path d="M1503 1571 c-68 -31 -95 -116 -56 -181 16 -28 16 -29 -15 -58 -55
|
||||
-52 -68 -121 -32 -180 21 -34 74 -72 100 -72 8 0 -4 9 -27 20 -59 26 -85 71
|
||||
-80 135 4 43 10 54 47 87 l42 37 -21 27 c-25 31 -28 92 -7 133 18 33 54 51
|
||||
126 61 l55 7 -45 1 c-25 1 -63 -7 -87 -17z"/>
|
||||
<path d="M1666 1561 c18 -11 39 -30 48 -42 18 -26 22 -18 6 12 -6 10 -24 26
|
||||
-40 34 -41 21 -51 19 -14 -4z"/>
|
||||
<path d="M1552 1473 c-7 -12 -6 -26 4 -45 18 -34 24 -35 54 -3 19 20 22 30 14
|
||||
43 -15 24 -60 27 -72 5z"/>
|
||||
<path d="M1727 1451 c-4 -32 -15 -53 -41 -80 l-36 -37 26 -25 26 -24 20 28
|
||||
c18 24 26 27 79 27 32 0 59 -3 59 -6 0 -3 -21 -32 -46 -65 l-45 -59 51 -58 51
|
||||
-57 -68 -3 c-58 -3 -69 0 -83 17 l-15 21 -49 -25 c-27 -14 -43 -25 -35 -25 8
|
||||
0 28 9 46 19 31 19 31 19 49 0 14 -16 31 -19 96 -19 43 0 78 3 78 7 0 4 -25
|
||||
33 -56 64 l-55 56 50 67 c28 37 51 69 51 72 0 2 -32 4 -71 4 -64 0 -73 -2 -91
|
||||
-26 -19 -23 -21 -24 -38 -9 -18 16 -17 18 15 51 32 32 52 87 43 116 -3 7 -7
|
||||
-7 -11 -31z"/>
|
||||
<path d="M95 1330 c-16 -5 -36 -17 -42 -27 -14 -18 -18 -170 -5 -189 26 -39
|
||||
152 -48 196 -13 15 12 26 30 26 45 0 20 -5 24 -30 24 -17 0 -39 -9 -51 -21
|
||||
-15 -15 -28 -19 -47 -14 -15 4 -29 9 -32 12 -7 6 -2 112 6 124 9 15 74 11 80
|
||||
-6 4 -9 19 -15 40 -15 39 0 46 23 17 59 -21 25 -108 37 -158 21z"/>
|
||||
<path d="M2127 1334 c-4 -4 -7 -27 -7 -51 l0 -43 -50 0 -50 0 0 45 c0 43 -1
|
||||
45 -30 45 l-30 0 0 -125 0 -125 30 0 c29 0 30 1 30 50 l0 50 50 0 50 0 0 -50
|
||||
c0 -49 1 -50 30 -50 l31 0 -3 128 c-3 119 -4 127 -23 130 -12 2 -24 0 -28 -4z"/>
|
||||
<path d="M2663 1280 c-3 -11 -9 -20 -14 -20 -5 0 -9 -9 -9 -20 0 -11 5 -20 10
|
||||
-20 6 0 10 -24 10 -54 0 -66 16 -86 69 -86 43 0 61 14 61 47 0 16 -6 23 -20
|
||||
23 -11 0 -20 -7 -20 -15 0 -8 -7 -15 -15 -15 -11 0 -15 12 -15 50 0 49 1 50
|
||||
30 50 23 0 30 4 30 20 0 15 -7 20 -29 20 -20 0 -30 6 -34 20 -3 12 -14 20 -27
|
||||
20 -13 0 -24 -8 -27 -20z"/>
|
||||
<path d="M1528 1273 c-24 -29 -28 -49 -12 -72 17 -24 70 -29 98 -8 16 11 14
|
||||
16 -19 55 -41 47 -46 49 -67 25z"/>
|
||||
<path d="M340 1253 c-27 -10 -40 -36 -40 -85 0 -65 23 -88 89 -88 68 0 79 6
|
||||
91 51 15 53 -2 114 -33 123 -26 7 -86 7 -107 -1z m78 -45 c14 -14 16 -57 3
|
||||
-76 -4 -8 -19 -12 -32 -10 -19 2 -25 10 -27 36 -2 19 -1 40 2 48 7 17 38 18
|
||||
54 2z"/>
|
||||
<path d="M542 1244 c-18 -13 -22 -25 -22 -74 0 -71 19 -90 92 -90 66 0 88 23
|
||||
88 90 0 67 -22 90 -88 90 -27 0 -57 -7 -70 -16z m93 -74 c0 -40 -3 -45 -24
|
||||
-48 -27 -4 -41 12 -41 49 0 31 18 51 45 47 17 -3 20 -11 20 -48z"/>
|
||||
<path d="M740 1129 l0 -130 28 3 c25 3 27 7 32 53 3 31 8 45 13 38 12 -18 73
|
||||
-16 91 3 11 10 16 34 16 74 0 40 -5 64 -16 74 -18 18 -56 21 -84 6 -13 -7 -21
|
||||
-7 -25 0 -3 5 -17 10 -31 10 l-24 0 0 -131z m119 77 c28 -34 -5 -97 -43 -83
|
||||
-16 6 -24 76 -9 90 11 12 40 8 52 -7z"/>
|
||||
<path d="M979 1241 c-19 -15 -23 -28 -23 -71 0 -66 24 -90 91 -90 54 0 83 14
|
||||
83 40 0 22 -38 28 -57 9 -16 -16 -57 -7 -61 14 -3 15 5 17 57 17 l61 0 0 34
|
||||
c0 25 -7 39 -22 50 -31 22 -100 20 -129 -3z m99 -38 c2 -9 -8 -13 -32 -13 -34
|
||||
0 -44 8 -29 24 11 11 56 2 61 -11z"/>
|
||||
<path d="M1170 1170 l0 -90 30 0 c29 0 29 0 32 67 2 53 7 68 19 71 10 2 19 -5
|
||||
22 -18 3 -12 13 -20 26 -20 16 0 21 6 21 29 0 41 -24 58 -61 44 -16 -6 -29 -7
|
||||
-29 -2 0 5 -13 9 -30 9 l-30 0 0 -90z"/>
|
||||
<path d="M2227 1253 c-12 -11 -7 -117 6 -143 15 -31 66 -39 91 -15 14 15 16
|
||||
15 16 1 0 -10 9 -16 25 -16 25 0 25 1 25 90 0 89 0 90 -25 90 -24 0 -25 -2
|
||||
-25 -64 0 -56 -3 -66 -20 -71 -33 -10 -40 3 -40 71 0 60 -1 64 -23 64 -13 0
|
||||
-27 -3 -30 -7z"/>
|
||||
<path d="M2440 1170 c0 -89 0 -90 25 -90 24 0 25 3 25 53 0 64 19 98 47 81 14
|
||||
-8 19 -26 21 -73 3 -57 4 -61 27 -61 24 0 25 2 25 74 0 54 -4 79 -16 90 -19
|
||||
20 -58 21 -77 1 -13 -13 -16 -13 -21 0 -3 8 -17 15 -31 15 -25 0 -25 0 -25
|
||||
-90z"/>
|
||||
<path d="M2839 1241 c-19 -16 -24 -29 -24 -69 0 -67 22 -92 82 -92 54 0 83 14
|
||||
83 40 0 21 -34 28 -45 10 -3 -5 -19 -10 -36 -10 -22 0 -29 5 -29 20 0 16 8 19
|
||||
58 22 57 3 57 3 54 33 -1 17 -12 38 -24 48 -27 23 -89 22 -119 -2z m91 -36 c0
|
||||
-10 -10 -15 -30 -15 -20 0 -30 5 -30 15 0 10 10 15 30 15 20 0 30 -5 30 -15z"/>
|
||||
<path d="M3020 1169 l0 -90 28 3 c26 3 27 6 32 67 5 65 26 94 37 52 6 -23 53
|
||||
-31 53 -8 -1 53 -43 84 -77 56 -13 -11 -17 -11 -20 -1 -3 6 -16 12 -29 12 -24
|
||||
0 -24 -1 -24 -91z"/>
|
||||
<path d="M1538 1073 c12 -2 32 -2 45 0 12 2 2 4 -23 4 -25 0 -35 -2 -22 -4z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="3840.000000pt" height="2160.000000pt" viewBox="0 0 3840.000000 2160.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,2160.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M7625 13950 c-580 -71 -1079 -280 -1584 -663 -118 -89 -259 -206
|
||||
-338 -281 -29 -27 -53 -44 -53 -38 0 6 20 97 45 204 60 262 125 622 113 633
|
||||
-12 11 -223 15 -1193 20 -605 3 -1384 7 -1731 10 -654 5 -736 2 -884 -36 -203
|
||||
-52 -387 -185 -503 -365 -135 -210 -204 -426 -312 -979 -31 -159 -146 -710
|
||||
-256 -1224 -360 -1685 -655 -3098 -648 -3105 5 -5 1404 -12 1594 -8 l150 3 28
|
||||
132 c16 73 75 359 133 637 141 680 244 1152 294 1353 l12 47 257 -5 c141 -3
|
||||
540 -7 886 -11 347 -3 641 -7 655 -8 14 -2 90 -4 170 -5 80 -1 150 -5 157 -9
|
||||
7 -4 17 -41 23 -82 52 -349 136 -631 270 -905 237 -483 621 -861 1085 -1068
|
||||
573 -256 1292 -282 1915 -70 606 206 1252 682 1656 1219 132 176 246 362 353
|
||||
574 87 175 191 414 191 440 0 6 -70 10 -189 10 l-189 0 -28 -65 c-82 -194
|
||||
-310 -561 -485 -782 -116 -145 -382 -416 -509 -517 -486 -386 -1005 -580
|
||||
-1605 -599 -802 -27 -1491 361 -1846 1038 -359 684 -320 1667 98 2455 325 612
|
||||
818 1098 1408 1390 360 178 705 261 1093 261 234 1 371 -16 581 -72 811 -214
|
||||
1370 -898 1457 -1783 l7 -69 -529 6 c-291 4 -905 9 -1364 12 -459 3 -1141 7
|
||||
-1516 10 l-681 4 -31 -112 c-40 -148 -52 -208 -52 -267 l0 -50 1028 -1 c565 0
|
||||
1083 -2 1152 -4 69 -1 634 -6 1257 -10 l1131 -8 7 79 c10 105 0 370 -20 519
|
||||
-78 590 -345 1134 -746 1520 -338 325 -728 522 -1209 610 -108 20 -582 30
|
||||
-705 15z m-3505 -1595 c162 -7 460 -12 663 -11 331 2 367 1 367 -14 0 -8 -25
|
||||
-58 -57 -110 -63 -107 -183 -353 -233 -477 l-32 -83 -1024 0 c-823 0 -1024 2
|
||||
-1024 13 0 23 50 301 67 367 50 206 152 311 318 331 85 10 551 2 955 -16z"/>
|
||||
<path d="M12192 10523 l3 -1847 305 -1 c168 0 313 1 323 3 16 4 17 51 17 823
|
||||
l0 819 825 0 825 0 0 260 0 260 -825 0 -825 0 0 490 0 490 940 0 940 0 0 275
|
||||
0 275 -1265 0 -1265 0 2 -1847z"/>
|
||||
<path d="M17910 12095 l0 -275 290 0 290 0 0 275 0 275 -290 0 -290 0 0 -275z"/>
|
||||
<path d="M19050 12095 l0 -275 290 0 290 0 0 275 0 275 -290 0 -290 0 0 -275z"/>
|
||||
<path d="M21580 10525 c0 -1750 1 -1845 18 -1846 55 -3 2629 -4 2640 -1 9 3
|
||||
12 69 12 283 l0 279 -1010 0 -1010 0 0 540 0 540 920 0 920 0 0 260 0 260
|
||||
-920 0 -920 0 0 490 0 490 995 0 995 0 0 275 0 275 -1320 0 -1320 0 0 -1845z"/>
|
||||
<path d="M24650 10530 l0 -1840 290 0 290 0 0 1840 0 1840 -290 0 -290 0 0
|
||||
-1840z"/>
|
||||
<path d="M34610 12095 l0 -275 290 0 290 0 0 275 0 275 -290 0 -290 0 0 -275z"/>
|
||||
<path d="M31440 11745 l0 -405 -215 0 -215 0 0 -215 0 -215 215 0 215 0 0
|
||||
-782 c0 -431 5 -837 10 -903 30 -364 152 -510 470 -566 100 -17 355 -17 513 0
|
||||
l127 14 0 227 0 227 -57 -9 c-32 -5 -114 -8 -183 -5 -187 6 -241 36 -277 155
|
||||
-16 52 -18 122 -18 847 l0 790 268 3 267 2 0 215 0 215 -267 2 -268 3 -3 403
|
||||
-2 402 -290 0 -290 0 0 -405z"/>
|
||||
<path d="M26815 11423 c-254 -23 -502 -129 -690 -293 -330 -290 -504 -758
|
||||
-466 -1252 30 -380 148 -677 356 -897 230 -244 552 -371 936 -371 494 0 892
|
||||
222 1091 607 48 91 108 251 108 284 0 5 -107 9 -272 9 l-273 -1 -44 -90 c-108
|
||||
-224 -312 -339 -599 -339 -139 0 -230 19 -339 71 -186 89 -318 273 -367 510
|
||||
-13 66 -20 139 -17 192 1 16 54 17 975 17 l974 0 7 87 c10 113 0 279 -24 402
|
||||
-133 684 -693 1124 -1356 1064z m240 -478 c141 -29 294 -128 378 -243 79 -106
|
||||
134 -251 151 -394 l7 -58 -685 0 -686 0 0 30 c0 50 30 179 57 247 124 310 452
|
||||
486 778 418z"/>
|
||||
<path d="M29495 11399 c-569 -76 -951 -463 -1061 -1074 -22 -121 -30 -436 -15
|
||||
-562 40 -325 156 -592 344 -790 97 -102 182 -164 312 -228 206 -102 405 -141
|
||||
670 -132 300 9 524 82 723 234 212 162 364 432 425 758 l15 75 -293 0 -292 0
|
||||
-7 -40 c-11 -72 -68 -210 -115 -283 -86 -131 -213 -224 -356 -262 -84 -22
|
||||
-234 -20 -329 5 -324 83 -526 424 -526 890 0 382 105 671 299 823 203 160 496
|
||||
192 730 80 141 -67 261 -221 293 -377 l12 -56 292 0 291 0 -9 58 c-35 230
|
||||
-137 432 -290 578 -153 145 -330 233 -573 284 -115 24 -422 35 -540 19z"/>
|
||||
<path d="M34070 11391 c-263 -68 -505 -278 -592 -513 -11 -32 -24 -55 -29 -52
|
||||
-5 3 -9 120 -9 260 l0 254 -275 0 -275 0 0 -1329 c0 -1054 3 -1330 13 -1333
|
||||
10 -3 525 -2 565 1 9 1 12 149 12 704 0 582 3 718 15 796 77 474 408 737 837
|
||||
667 54 -9 100 -16 103 -16 11 0 5 559 -6 565 -5 4 -72 9 -147 11 -112 3 -151
|
||||
0 -212 -15z"/>
|
||||
<path d="M36740 11403 c-656 -70 -1074 -548 -1119 -1281 -40 -649 205 -1156
|
||||
669 -1383 164 -80 334 -119 555 -126 660 -22 1089 298 1241 922 13 55 24 110
|
||||
24 123 l0 22 -288 0 -288 0 -18 -72 c-10 -40 -40 -119 -67 -176 -62 -128 -154
|
||||
-227 -264 -284 -110 -57 -179 -71 -320 -65 -185 7 -296 55 -420 181 -117 119
|
||||
-194 285 -231 496 -21 120 -14 443 11 560 79 357 263 563 560 625 215 45 441
|
||||
-14 580 -150 69 -69 135 -186 156 -280 l12 -55 290 0 290 0 -6 53 c-12 98 -48
|
||||
212 -101 322 -152 311 -452 506 -863 560 -103 14 -313 18 -403 8z"/>
|
||||
<path d="M15063 10373 c3 -959 3 -969 25 -1066 90 -394 287 -594 664 -674 60
|
||||
-13 130 -17 253 -18 148 0 180 3 250 23 203 59 388 187 496 345 22 31 44 57
|
||||
49 57 6 0 10 -71 10 -179 0 -134 3 -180 13 -183 10 -3 421 -2 523 1 l31 1 0
|
||||
1330 0 1330 -293 0 -293 0 -3 -872 -4 -873 -22 -75 c-57 -184 -148 -302 -285
|
||||
-370 -45 -22 -113 -47 -152 -55 -83 -17 -253 -19 -327 -4 -127 27 -225 104
|
||||
-284 224 -70 142 -68 109 -71 1118 l-4 907 -290 0 -290 0 4 -967z"/>
|
||||
<path d="M17908 9808 c-4 -1645 -1 -1575 -55 -1638 -46 -56 -76 -65 -203 -65
|
||||
-63 0 -127 4 -142 8 l-28 7 0 -234 0 -234 96 -7 c136 -11 367 0 439 19 229 62
|
||||
374 214 443 464 l27 97 3 1558 2 1557 -290 0 -290 0 -2 -1532z"/>
|
||||
<path d="M19052 10008 l3 -1332 260 -1 c143 0 272 2 288 4 l27 3 0 1329 0
|
||||
1329 -290 0 -290 0 2 -1332z"/>
|
||||
<path d="M34610 10011 c0 -1054 3 -1330 13 -1333 6 -2 136 -3 287 -3 l275 1 3
|
||||
1332 2 1332 -290 0 -290 0 0 -1329z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="960.000000pt" height="440.000000pt" viewBox="0 0 960.000000 440.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,440.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M1930 4224 c-418 -57 -819 -248 -1129 -540 -452 -425 -693 -1066
|
||||
-630 -1675 108 -1060 976 -1849 2034 -1849 910 0 1700 593 1959 1470 56 191
|
||||
78 355 78 575 0 326 -61 589 -203 883 -306 636 -910 1063 -1614 1142 -125 14
|
||||
-369 11 -495 -6z m355 -424 l0 -75 -145 -7 c-80 -3 -181 -14 -225 -23 -206
|
||||
-43 -421 -135 -586 -250 -108 -75 -299 -266 -374 -374 -119 -170 -211 -392
|
||||
-252 -606 -25 -128 -24 -396 1 -530 88 -474 379 -867 806 -1089 360 -187 784
|
||||
-220 1180 -94 382 122 713 406 894 765 80 161 140 371 153 535 l6 78 -519 2
|
||||
-519 3 0 75 0 75 599 3 599 2 -6 -147 c-7 -169 -25 -279 -67 -423 -81 -270
|
||||
-222 -504 -430 -710 -723 -717 -1914 -633 -2534 178 -224 294 -337 634 -337
|
||||
1012 0 445 157 836 465 1157 314 329 773 526 1206 519 l85 -1 0 -75z m-598
|
||||
-754 c75 -38 133 -131 133 -212 0 -42 -25 -110 -55 -150 -33 -44 -117 -84
|
||||
-174 -84 -68 0 -112 16 -161 57 -55 47 -79 102 -80 176 0 98 46 172 135 214
|
||||
41 20 61 23 110 20 34 -2 75 -12 92 -21z m603 -771 l0 -785 205 0 205 0 0 -75
|
||||
0 -75 -285 0 -285 0 0 860 0 860 80 0 80 0 0 -785z"/>
|
||||
<path d="M8230 3559 c-245 -22 -460 -91 -625 -202 -79 -53 -196 -167 -251
|
||||
-243 -176 -246 -259 -617 -234 -1046 25 -416 134 -694 353 -905 219 -210 511
|
||||
-305 937 -306 381 0 746 82 973 220 l57 34 0 640 0 639 -530 0 -530 0 0 -245
|
||||
0 -245 250 0 250 0 0 -235 0 -234 -52 -16 c-119 -36 -231 -49 -403 -48 -141 0
|
||||
-184 4 -250 22 -235 63 -373 203 -434 441 -38 151 -50 376 -30 575 37 364 183
|
||||
565 469 642 94 26 407 25 500 0 116 -33 208 -85 294 -169 77 -74 80 -76 101
|
||||
-60 65 52 345 317 345 327 0 21 -117 141 -188 193 -241 178 -597 256 -1002
|
||||
221z"/>
|
||||
<path d="M5170 2210 l0 -1320 930 0 930 0 0 255 0 255 -630 0 -630 0 0 1065 0
|
||||
1065 -300 0 -300 0 0 -1320z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="3000.000000pt" height="2000.000000pt" viewBox="0 0 3000.000000 2000.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,2000.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M7283 13293 c-22 -37 -311 -537 -642 -1111 l-602 -1043 23 -42 c105
|
||||
-187 1244 -2155 1253 -2165 10 -11 137 202 640 1075 346 598 634 1097 641
|
||||
1109 13 18 -43 117 -627 1129 -352 610 -641 1111 -643 1113 -2 1 -21 -28 -43
|
||||
-65z"/>
|
||||
<path d="M16985 11410 c-165 -21 -344 -94 -461 -188 -84 -68 -158 -175 -190
|
||||
-275 -20 -66 -26 -102 -25 -182 0 -169 44 -284 150 -398 124 -131 280 -205
|
||||
545 -258 359 -71 469 -119 528 -233 31 -61 23 -168 -17 -226 -34 -49 -92 -89
|
||||
-175 -122 -76 -30 -315 -33 -400 -5 -148 49 -229 145 -255 300 l-6 37 -204 0
|
||||
-205 0 0 -52 c1 -132 67 -306 155 -406 58 -64 152 -133 238 -172 215 -97 549
|
||||
-117 817 -49 208 54 379 184 458 349 52 110 66 172 66 295 -1 173 -49 299
|
||||
-159 411 -121 122 -263 182 -587 245 -308 59 -404 93 -466 163 -73 83 -69 216
|
||||
9 301 128 139 468 151 616 21 52 -45 90 -118 99 -188 l7 -48 208 0 209 0 0 33
|
||||
c-1 91 -63 271 -120 345 -150 194 -362 293 -655 306 -60 2 -141 1 -180 -4z"/>
|
||||
<path d="M23065 11410 c-217 -28 -441 -140 -547 -274 -89 -112 -128 -227 -128
|
||||
-376 0 -165 47 -287 153 -398 124 -128 283 -201 562 -257 297 -59 399 -97 469
|
||||
-175 46 -51 57 -79 58 -152 2 -111 -75 -203 -207 -249 -77 -27 -258 -37 -347
|
||||
-19 -169 33 -289 148 -307 293 l-6 52 -209 3 -209 2 6 -78 c16 -204 117 -380
|
||||
282 -491 221 -148 597 -193 925 -110 206 52 381 185 460 351 95 197 89 429
|
||||
-15 603 -45 75 -83 115 -163 172 -117 84 -235 123 -568 188 -326 63 -415 112
|
||||
-445 243 -27 114 32 223 148 275 117 52 274 58 412 15 116 -36 211 -157 211
|
||||
-270 l0 -28 211 0 212 0 -6 68 c-28 295 -257 528 -588 596 -95 19 -274 27
|
||||
-364 16z"/>
|
||||
<path d="M11910 10275 l0 -1075 200 0 200 0 2 793 3 792 226 -790 226 -790
|
||||
211 -3 211 -2 20 67 c11 38 110 385 221 773 110 388 205 714 210 725 5 12 9
|
||||
-287 9 -772 l1 -793 200 0 200 0 0 1075 0 1075 -309 0 -310 0 -23 -77 c-13
|
||||
-43 -113 -381 -223 -750 -110 -370 -202 -673 -205 -673 -4 0 -306 1002 -436
|
||||
1448 l-16 52 -309 0 -309 0 0 -1075z"/>
|
||||
<path d="M14230 10275 l0 -1075 215 0 215 0 0 1075 0 1075 -215 0 -215 0 0
|
||||
-1075z"/>
|
||||
<path d="M14780 11165 l0 -185 263 -2 262 -3 3 -887 2 -888 220 0 220 0 0 890
|
||||
0 890 260 0 260 0 0 185 0 185 -745 0 -745 0 0 -185z"/>
|
||||
<path d="M18122 10533 c4 -806 4 -819 26 -896 37 -133 76 -204 161 -287 90
|
||||
-89 179 -137 327 -177 93 -25 112 -27 329 -27 207 -1 239 2 320 22 50 12 133
|
||||
43 185 69 164 79 276 212 332 393 l22 75 4 823 3 822 -215 0 -215 0 -3 -797
|
||||
-3 -798 -28 -56 c-70 -144 -222 -217 -432 -206 -55 3 -123 12 -150 21 -68 21
|
||||
-141 71 -176 119 -60 83 -59 66 -59 929 l0 788 -215 0 -216 0 3 -817z"/>
|
||||
<path d="M19990 10275 l0 -1076 618 3 c616 3 617 3 687 27 108 36 184 80 250
|
||||
146 173 173 206 454 82 690 -48 90 -155 194 -249 240 l-76 37 67 34 c231 115
|
||||
327 434 206 680 -62 127 -184 216 -362 266 -75 22 -97 22 -650 26 l-573 3 0
|
||||
-1076z m1032 725 c53 -15 118 -68 153 -125 26 -43 30 -57 30 -124 0 -65 -4
|
||||
-84 -30 -130 -17 -30 -48 -67 -69 -83 -72 -52 -113 -58 -413 -58 l-273 0 0
|
||||
265 0 265 283 0 c163 0 298 -4 319 -10z m54 -883 c115 -53 177 -146 178 -267
|
||||
2 -136 -53 -231 -168 -290 l-69 -35 -298 -3 -299 -3 0 316 0 317 298 -4 297
|
||||
-3 61 -28z"/>
|
||||
<path d="M21810 10275 l0 -1075 215 0 215 0 0 1075 0 1075 -215 0 -215 0 0
|
||||
-1075z"/>
|
||||
<path d="M24210 10275 l0 -1075 210 0 210 0 0 470 0 470 435 0 435 0 0 -470 0
|
||||
-470 210 0 210 0 0 1075 0 1075 -210 0 -210 0 0 -420 0 -420 -435 0 -435 0 0
|
||||
420 0 420 -210 0 -210 0 0 -1075z"/>
|
||||
<path d="M26100 10275 l0 -1075 220 0 220 0 0 1075 0 1075 -220 0 -220 0 0
|
||||
-1075z"/>
|
||||
<path d="M4111 7800 c-353 -611 -641 -1113 -641 -1115 0 -3 577 -5 1283 -5
|
||||
l1282 0 610 1057 c336 581 625 1082 643 1115 l33 58 -1284 0 -1285 0 -641
|
||||
-1110z"/>
|
||||
<path d="M7330 8905 c0 -2 288 -504 641 -1115 l641 -1110 1284 0 1284 0 -17
|
||||
33 c-10 19 -299 521 -643 1115 l-625 1082 -1282 0 c-706 0 -1283 -2 -1283 -5z"/>
|
||||
<path d="M17710 8879 c-418 -51 -711 -330 -816 -776 -35 -149 -44 -418 -20
|
||||
-578 52 -334 210 -596 455 -753 164 -105 408 -156 630 -133 256 27 444 112
|
||||
592 268 116 122 177 245 223 456 l6 27 -228 0 -228 0 -19 -57 c-41 -119 -138
|
||||
-233 -239 -279 -77 -35 -190 -50 -278 -36 -316 48 -513 401 -477 852 27 339
|
||||
202 590 447 641 78 16 213 6 282 -20 115 -45 208 -140 260 -268 l27 -68 221
|
||||
-3 c257 -3 238 -13 201 112 -93 313 -337 531 -670 600 -97 20 -273 27 -369 15z"/>
|
||||
<path d="M23560 8880 c-385 -49 -659 -276 -784 -651 -55 -163 -70 -267 -70
|
||||
-474 1 -195 18 -311 71 -465 154 -450 546 -698 1028 -651 324 32 573 182 713
|
||||
430 40 73 86 202 97 274 l7 47 -226 0 c-207 0 -227 -2 -232 -17 -70 -221 -210
|
||||
-342 -419 -360 -324 -27 -568 259 -592 692 -10 190 20 351 94 505 37 76 60
|
||||
109 117 165 103 102 203 145 338 145 216 0 376 -113 453 -322 l18 -48 224 0
|
||||
225 0 -6 34 c-13 68 -48 162 -94 251 -38 72 -65 109 -142 185 -133 133 -268
|
||||
206 -452 244 -93 19 -280 28 -368 16z"/>
|
||||
<path d="M11910 7760 l0 -1080 810 0 810 0 0 185 0 185 -595 0 -595 0 0 290 0
|
||||
290 515 0 515 0 0 185 0 185 -515 0 -515 0 0 230 0 230 580 0 580 0 0 190 0
|
||||
190 -795 0 -795 0 0 -1080z"/>
|
||||
<path d="M13677 8834 c-4 -4 -7 -490 -7 -1081 l0 -1073 730 0 730 0 0 185 0
|
||||
185 -510 0 -510 0 -2 893 -3 892 -211 3 c-115 1 -213 -1 -217 -4z"/>
|
||||
<path d="M15257 8833 c-4 -3 -7 -489 -7 -1080 l0 -1073 815 0 815 0 0 185 0
|
||||
185 -595 0 -595 0 0 290 0 290 515 0 515 0 0 185 0 185 -515 0 -515 0 0 230 0
|
||||
230 580 0 580 0 -2 188 -3 187 -791 3 c-435 1 -794 -1 -797 -5z"/>
|
||||
<path d="M18747 8833 c-4 -3 -7 -89 -7 -190 l0 -183 265 0 265 0 0 -890 0
|
||||
-890 220 0 220 0 0 890 0 890 265 0 265 0 -2 188 -3 187 -741 3 c-407 1 -744
|
||||
-1 -747 -5z"/>
|
||||
<path d="M20350 7760 l0 -1080 215 0 215 0 0 426 0 426 248 -4 c293 -4 326
|
||||
-12 417 -103 86 -86 94 -119 139 -565 8 -80 18 -153 21 -163 7 -15 27 -17 225
|
||||
-17 l218 0 -15 68 c-24 113 -42 249 -58 432 -8 96 -21 196 -29 221 -40 129
|
||||
-124 231 -234 284 l-63 29 46 18 c206 81 335 277 335 508 0 269 -137 464 -387
|
||||
551 -124 43 -217 49 -770 49 l-523 0 0 -1080z m1075 685 c189 -70 237 -333 86
|
||||
-484 -77 -77 -69 -76 -418 -79 l-313 -3 0 289 c0 159 3 292 8 296 4 4 138 6
|
||||
297 4 250 -4 297 -7 340 -23z"/>
|
||||
<path d="M22167 8833 c-4 -3 -7 -489 -7 -1080 l0 -1073 215 0 215 0 0 1080 0
|
||||
1080 -208 0 c-115 0 -212 -3 -215 -7z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="900.000000pt" height="318.000000pt" viewBox="0 0 900.000000 318.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,318.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M60 2063 l0 -437 58 55 c31 31 221 208 422 394 201 186 385 358 410
|
||||
381 l45 44 -468 0 -467 0 0 -437z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 549 B |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="728.000000pt" height="288.000000pt" viewBox="0 0 728.000000 288.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,288.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M4329 2330 c-113 -59 -145 -222 -64 -319 55 -65 169 -90 243 -52 112
|
||||
57 150 165 97 278 -34 75 -96 113 -179 113 -40 -1 -74 -7 -97 -20z"/>
|
||||
<path d="M882 2228 c-7 -9 -10 -299 -9 -878 l2 -865 200 0 200 0 3 352 2 353
|
||||
23 5 c12 3 184 4 382 3 l360 -3 5 -355 5 -355 190 0 190 0 0 875 0 875 -190 0
|
||||
-190 0 -3 -344 c-1 -234 -6 -349 -13 -358 -9 -10 -83 -13 -369 -13 -197 0
|
||||
-365 3 -374 6 -14 5 -16 46 -16 354 0 308 -2 349 -16 354 -9 3 -96 6 -194 6
|
||||
-130 0 -180 -3 -188 -12z"/>
|
||||
<path d="M6855 1921 c-56 -14 -182 -82 -240 -130 -81 -67 -146 -149 -193 -244
|
||||
-70 -140 -73 -165 -70 -642 l3 -420 170 0 170 0 5 420 c6 444 7 449 56 525 50
|
||||
76 111 123 191 146 61 18 61 18 38 134 -9 41 -21 107 -28 145 -13 67 -15 70
|
||||
-43 72 -16 1 -43 -2 -59 -6z"/>
|
||||
<path d="M3165 1825 c-207 -44 -381 -178 -475 -368 -58 -117 -73 -192 -68
|
||||
-339 4 -108 8 -133 37 -204 90 -231 263 -382 506 -444 130 -33 259 -22 398 36
|
||||
72 30 85 30 89 2 3 -23 5 -23 177 -26 112 -2 177 1 181 8 9 15 6 1303 -3 1318
|
||||
-6 9 -50 12 -166 12 -163 0 -181 -4 -181 -43 0 -21 3 -22 -95 14 -139 50 -271
|
||||
61 -400 34z m245 -295 c75 -14 135 -47 197 -108 122 -121 149 -305 68 -463
|
||||
-27 -51 -118 -134 -180 -164 -55 -27 -69 -30 -165 -29 -92 0 -112 3 -160 26
|
||||
-99 46 -182 135 -214 229 -19 54 -21 200 -3 249 19 54 44 96 79 136 33 38 130
|
||||
104 151 104 7 0 17 4 23 9 19 19 131 25 204 11z"/>
|
||||
<path d="M5340 1826 c-30 -6 -59 -14 -65 -17 -5 -3 -23 -9 -39 -13 -17 -4 -60
|
||||
-25 -97 -46 -239 -140 -368 -378 -352 -650 14 -252 202 -505 441 -593 198 -74
|
||||
347 -74 537 0 65 25 180 101 234 155 60 60 141 182 141 212 0 20 -7 27 -37 35
|
||||
-21 6 -49 11 -62 11 -14 0 -63 7 -110 16 l-86 16 -32 -38 c-18 -22 -33 -42
|
||||
-33 -46 0 -12 -134 -95 -165 -103 -101 -25 -209 -14 -295 30 -52 27 -130 112
|
||||
-160 177 -52 109 -104 98 493 98 287 0 528 4 535 9 30 19 13 203 -29 308 -35
|
||||
89 -43 103 -96 173 -108 143 -250 232 -431 269 -66 14 -219 12 -292 -3z m222
|
||||
-287 c107 -21 202 -85 264 -178 14 -22 23 -45 19 -50 -4 -8 -118 -11 -346 -11
|
||||
-381 0 -364 -4 -310 73 62 89 137 140 240 163 73 16 72 16 133 3z"/>
|
||||
<path d="M4243 1807 c-9 -15 -4 -1310 5 -1319 5 -5 87 -7 183 -6 l174 3 0 665
|
||||
0 665 -178 1 c-103 0 -180 -3 -184 -9z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 85 KiB |
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1050.000000pt" height="281.000000pt" viewBox="0 0 1050.000000 281.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,281.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M750 1405 l0 -1165 4500 0 4500 0 0 1165 0 1165 -4500 0 -4500 0 0
|
||||
-1165z m7868 699 c80 -33 132 -110 132 -194 0 -114 -96 -210 -210 -210 -146 0
|
||||
-250 155 -194 288 44 107 168 160 272 116z m-6772 -74 c38 -5 182 -10 320 -10
|
||||
291 0 319 -5 383 -75 132 -143 63 -383 -136 -477 -35 -17 -63 -31 -63 -32 0
|
||||
-1 23 -47 51 -102 135 -260 242 -377 416 -456 137 -62 320 -83 481 -54 89 15
|
||||
90 2 3 -31 -205 -77 -470 -65 -656 29 -131 66 -222 162 -358 376 -56 89 -187
|
||||
330 -187 345 0 2 42 7 93 11 145 10 215 51 253 151 29 77 -7 161 -79 184 -18
|
||||
5 -117 12 -222 15 -196 5 -254 14 -332 54 -64 33 -110 101 -59 88 13 -3 54
|
||||
-10 92 -16z m6369 -100 c-25 -28 -125 -78 -191 -95 -32 -9 -120 -20 -194 -24
|
||||
-152 -10 -190 -21 -245 -77 -49 -49 -81 -121 -96 -213 -23 -151 16 -258 103
|
||||
-281 156 -43 321 206 279 421 -7 33 -11 62 -9 63 6 5 153 25 156 21 9 -9 22
|
||||
-85 22 -136 0 -89 -19 -168 -60 -255 -63 -130 -166 -212 -302 -237 -109 -20
|
||||
-235 22 -293 97 -112 147 -73 446 78 594 103 101 180 121 462 123 99 0 205 6
|
||||
235 13 64 14 77 11 55 -14z m-4868 -15 c84 -13 163 -87 198 -185 35 -96 13
|
||||
-280 -46 -391 -146 -273 -519 -306 -629 -57 -63 142 -14 384 104 515 74 82
|
||||
213 140 306 127 14 -1 44 -6 67 -9z m3648 -6 c78 -15 79 -17 49 -83 -23 -50
|
||||
-29 -57 -48 -51 -97 30 -136 35 -170 21 -78 -32 -85 -111 -17 -176 21 -19 66
|
||||
-59 100 -88 82 -71 104 -116 99 -198 -5 -76 -38 -132 -105 -174 -90 -58 -198
|
||||
-62 -320 -13 l-64 26 7 56 c3 31 10 60 14 64 4 4 31 -5 61 -20 44 -23 67 -28
|
||||
126 -28 62 0 75 3 97 24 30 28 35 83 12 117 -8 11 -48 47 -90 79 -103 81 -139
|
||||
132 -144 206 -5 72 10 117 54 163 83 86 176 106 339 75z m-2539 -29 c-3 -16
|
||||
-9 -43 -12 -60 l-6 -30 -108 0 c-95 0 -109 -2 -114 -17 -13 -45 -96 -498 -96
|
||||
-526 0 -18 9 -50 20 -72 11 -22 20 -41 20 -42 0 -2 -52 -3 -116 -3 -105 0
|
||||
-115 2 -110 18 2 9 7 31 10 47 8 45 106 557 110 578 4 15 -7 17 -119 17 l-123
|
||||
0 10 48 c5 26 11 53 13 60 3 9 75 12 315 12 l312 0 -6 -30z m771 8 c-3 -13 -9
|
||||
-40 -12 -60 l-7 -37 -126 -3 -126 -3 -18 -85 c-9 -47 -17 -91 -18 -97 0 -10
|
||||
29 -13 115 -13 63 0 115 -2 115 -4 0 -2 -10 -29 -21 -60 l-22 -56 -107 0 -107
|
||||
0 -17 -95 c-9 -52 -19 -102 -22 -110 -5 -13 14 -15 135 -15 78 0 141 -4 141
|
||||
-9 0 -4 -10 -31 -21 -60 l-22 -51 -208 0 c-115 0 -209 3 -209 8 0 4 11 61 25
|
||||
127 13 66 40 205 60 308 33 178 34 191 21 245 -7 31 -17 65 -21 75 -7 16 8 17
|
||||
235 17 l242 0 -5 -22z m648 -205 c83 -124 157 -241 165 -260 19 -43 26 -42 33
|
||||
5 3 20 17 103 31 184 30 169 32 227 11 268 l-16 30 101 0 c55 0 100 -4 100 -8
|
||||
0 -5 -11 -64 -24 -133 -14 -68 -39 -198 -56 -289 -17 -91 -35 -185 -40 -210
|
||||
-5 -25 -12 -67 -15 -93 l-6 -48 -52 3 -51 3 -63 90 c-34 50 -101 146 -149 215
|
||||
-48 69 -94 142 -103 162 -9 21 -18 38 -21 38 -9 0 -64 -307 -68 -378 -3 -50 0
|
||||
-70 17 -97 l20 -35 -104 0 c-67 0 -105 4 -105 11 0 5 9 54 19 107 49 240 82
|
||||
421 88 473 6 65 -18 163 -45 178 -12 8 11 10 83 11 l100 0 150 -227z m172
|
||||
-715 c-3 -18 -12 -66 -20 -105 l-15 -73 69 0 c38 0 69 -3 69 -7 0 -5 -3 -18
|
||||
-6 -30 -6 -22 -11 -23 -110 -23 -77 0 -104 3 -104 13 0 13 39 223 46 245 2 7
|
||||
19 12 40 12 36 0 36 -1 31 -32z m241 5 c-2 -22 -9 -29 -32 -31 -35 -4 -47 7
|
||||
-40 36 5 17 14 22 41 22 32 0 34 -2 31 -27z m660 -7 c-4 -33 -3 -34 29 -29 42
|
||||
7 79 -3 87 -23 10 -26 -14 -132 -36 -159 -18 -23 -26 -25 -109 -25 -81 0 -90
|
||||
2 -85 18 2 9 15 70 27 135 l22 117 35 0 c33 0 34 -1 30 -34z m470 -11 c-5 -21
|
||||
-1 -25 19 -25 19 0 24 -4 19 -16 -3 -9 -6 -20 -6 -25 0 -5 -11 -9 -25 -9 -15
|
||||
0 -25 -6 -25 -14 0 -7 -3 -28 -6 -45 -6 -28 -4 -31 18 -31 32 0 36 -5 30 -35
|
||||
-4 -23 -9 -25 -57 -25 -71 0 -81 13 -66 88 7 38 8 58 1 60 -14 5 -12 28 3 44
|
||||
8 7 19 23 26 36 8 15 21 22 43 22 27 0 30 -3 26 -25z m166 0 c-5 -22 -3 -25
|
||||
19 -25 20 0 24 -4 19 -25 -3 -18 -11 -25 -27 -25 -23 0 -26 -5 -39 -62 -6 -26
|
||||
-4 -28 24 -28 30 0 37 -11 24 -44 -5 -12 -20 -16 -60 -16 -66 0 -71 9 -58 92
|
||||
8 43 7 58 -2 58 -7 0 -9 10 -6 25 2 14 10 25 17 25 7 0 16 11 19 25 5 21 12
|
||||
25 41 25 33 0 35 -2 29 -25z m-879 -29 c15 -11 17 -21 12 -60 -4 -26 -9 -52
|
||||
-13 -57 -3 -5 -34 -9 -70 -9 -41 0 -64 -4 -64 -11 0 -8 19 -10 60 -6 58 5 60
|
||||
4 60 -18 0 -32 -6 -34 -95 -36 -91 -2 -98 4 -90 76 9 74 23 111 48 123 32 15
|
||||
130 14 152 -2z m566 4 c20 -11 24 -42 13 -99 -6 -31 -7 -31 -70 -31 -40 0 -64
|
||||
-4 -64 -11 0 -7 19 -10 53 -7 54 3 57 1 57 -32 0 -18 -7 -20 -84 -20 -109 0
|
||||
-114 5 -96 101 17 89 39 109 117 109 30 0 63 -5 74 -10z m564 -7 c13 -13 16
|
||||
-27 11 -61 -3 -24 -8 -48 -12 -53 -3 -5 -34 -9 -70 -9 -41 0 -64 -4 -64 -11 0
|
||||
-8 19 -10 61 -6 l60 5 -3 -26 -3 -27 -90 0 -90 0 1 55 c1 72 19 125 47 138 36
|
||||
18 133 15 152 -5z m201 -5 c-3 -13 -6 -28 -6 -35 0 -7 -18 -13 -42 -15 -42 -3
|
||||
-43 -4 -51 -48 -16 -93 -14 -90 -53 -90 -36 0 -36 1 -30 33 4 17 12 63 18 101
|
||||
l11 68 43 -5 c23 -2 48 -1 56 4 7 5 24 9 37 9 19 0 22 -4 17 -22z m-1761 -30
|
||||
c-4 -24 -12 -68 -19 -98 -12 -54 -13 -55 -50 -58 -37 -3 -38 -3 -32 24 21 81
|
||||
23 114 10 114 -16 0 -16 5 -8 38 6 19 13 22 56 22 l49 0 -6 -42z m100 -20 l8
|
||||
-63 30 63 c30 60 33 62 69 62 44 0 47 11 -29 -122 -44 -76 -46 -78 -84 -78
|
||||
-32 0 -40 4 -44 23 -8 34 -35 168 -35 173 0 2 18 4 39 4 l39 0 7 -62z"/>
|
||||
<path d="M8485 2077 c-60 -24 -77 -40 -101 -90 -30 -66 -30 -91 1 -153 84
|
||||
-168 329 -106 329 82 0 40 -6 61 -28 92 -44 65 -136 96 -201 69z m121 -55 c37
|
||||
-25 39 -91 2 -116 -19 -13 -18 -15 11 -62 36 -56 38 -64 12 -64 -13 0 -29 17
|
||||
-48 53 -24 44 -33 52 -60 55 l-33 3 0 -55 c0 -43 -3 -56 -15 -56 -13 0 -15 21
|
||||
-15 125 l0 125 68 0 c37 0 72 -4 78 -8z"/>
|
||||
<path d="M8490 1966 c0 -29 4 -34 30 -40 39 -7 80 9 80 32 0 29 -21 42 -67 42
|
||||
-42 0 -43 -1 -43 -34z"/>
|
||||
<path d="M3195 1794 c-90 -34 -167 -150 -185 -282 -18 -132 12 -227 84 -262
|
||||
54 -26 71 -25 132 5 106 53 179 207 172 361 -8 150 -89 221 -203 178z"/>
|
||||
<path d="M6926 849 c-10 -53 -8 -59 24 -59 19 0 30 5 30 14 0 7 3 28 6 45 6
|
||||
29 5 31 -23 31 -26 0 -31 -5 -37 -31z"/>
|
||||
<path d="M6595 882 c-13 -13 -3 -23 20 -20 14 2 24 7 23 13 -3 10 -35 15 -43
|
||||
7z"/>
|
||||
<path d="M7173 883 c-24 -9 -13 -23 18 -23 19 0 29 4 27 12 -4 12 -26 18 -45
|
||||
11z"/>
|
||||
<path d="M7733 883 c-22 -8 -14 -23 12 -23 16 0 25 6 25 15 0 15 -14 18 -37 8z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="840.000000pt" height="859.000000pt" viewBox="0 0 840.000000 859.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,859.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M5340 5459 c-36 -4 -135 -13 -220 -20 -181 -13 -267 -21 -445 -43
|
||||
-240 -29 -280 -35 -334 -45 -29 -6 -71 -11 -92 -11 -21 0 -41 -4 -44 -10 -3
|
||||
-5 -23 -10 -43 -10 -20 0 -56 -5 -79 -10 -24 -6 -71 -14 -105 -20 -35 -5 -99
|
||||
-17 -143 -26 -99 -20 -150 -30 -240 -47 -38 -7 -77 -16 -85 -19 -17 -6 -118
|
||||
-27 -165 -35 -16 -2 -37 -7 -45 -10 -8 -4 -40 -13 -70 -20 -30 -7 -71 -18 -90
|
||||
-23 -19 -5 -62 -15 -95 -24 -33 -8 -85 -21 -115 -30 -30 -8 -66 -18 -80 -22
|
||||
-14 -3 -34 -9 -45 -14 -11 -4 -47 -15 -80 -24 -86 -24 -167 -48 -190 -56 -11
|
||||
-4 -47 -16 -80 -26 -33 -10 -64 -22 -69 -26 -6 -4 -17 -8 -25 -8 -15 0 -207
|
||||
-69 -268 -96 -17 -8 -36 -14 -42 -14 -6 0 -19 -4 -29 -9 -9 -5 -35 -17 -57
|
||||
-26 -108 -45 -108 -45 -22 -45 44 0 77 -4 77 -10 0 -5 9 -10 21 -10 11 0 40
|
||||
-19 65 -42 44 -41 44 -42 44 -110 l0 -68 -74 0 c-97 0 -106 4 -106 47 0 42
|
||||
-19 62 -63 70 -69 11 -99 -87 -40 -134 15 -13 34 -23 41 -23 6 0 12 -4 12 -9
|
||||
0 -5 11 -12 25 -15 14 -4 25 -11 25 -16 0 -6 5 -10 12 -10 33 0 147 -91 176
|
||||
-140 17 -28 19 -193 3 -198 -6 -2 -11 -9 -11 -15 0 -21 -50 -67 -98 -90 -40
|
||||
-19 -63 -22 -152 -21 -97 0 -109 2 -155 29 -73 41 -100 83 -111 171 -8 70 -4
|
||||
74 98 74 104 0 108 -2 108 -62 0 -60 16 -77 72 -78 45 0 78 30 78 72 0 37 -58
|
||||
94 -135 133 -33 17 -61 33 -63 38 -2 4 -10 7 -17 7 -19 0 -99 80 -118 119 -21
|
||||
43 -22 117 -1 166 l15 37 -28 -6 c-15 -4 -29 -12 -31 -17 -2 -5 -10 -9 -17 -9
|
||||
-17 0 -139 -62 -143 -72 -2 -4 -10 -8 -18 -8 -13 0 -54 -22 -109 -58 -11 -7
|
||||
-28 -15 -37 -18 -10 -4 -18 -10 -18 -14 0 -4 -11 -11 -25 -14 -14 -4 -25 -11
|
||||
-25 -16 0 -6 -7 -10 -15 -10 -8 0 -15 -4 -15 -10 0 -5 -11 -12 -25 -16 -14 -3
|
||||
-25 -9 -25 -14 0 -4 -16 -15 -35 -26 -19 -10 -35 -22 -35 -26 0 -5 -7 -8 -15
|
||||
-8 -8 0 -15 -4 -15 -9 0 -4 -19 -21 -42 -36 -44 -29 -228 -209 -228 -223 0 -4
|
||||
-8 -17 -17 -28 -10 -11 -25 -35 -34 -54 -9 -19 -22 -48 -30 -64 -9 -18 -14
|
||||
-63 -14 -120 0 -82 3 -96 29 -141 30 -52 127 -155 145 -155 6 0 11 -4 11 -9 0
|
||||
-5 10 -13 23 -17 12 -4 24 -9 27 -13 5 -6 123 -64 165 -81 64 -26 108 -40 125
|
||||
-40 11 0 20 -4 20 -10 0 -5 10 -10 23 -10 12 0 56 -10 97 -21 131 -35 287 -61
|
||||
480 -78 63 -6 145 -16 183 -21 88 -13 934 -13 1057 0 52 5 158 15 235 21 224
|
||||
18 302 26 445 44 265 33 412 54 460 65 19 5 71 14 115 20 44 7 100 16 125 21
|
||||
25 4 83 15 130 24 98 18 146 28 250 50 41 9 99 20 129 26 30 5 58 12 62 15 4
|
||||
2 27 9 51 14 24 5 72 16 108 25 36 9 83 20 105 25 62 13 128 31 150 40 11 5
|
||||
31 11 45 14 64 13 129 32 136 39 4 4 16 7 27 7 19 0 107 26 137 40 9 4 31 11
|
||||
50 14 19 4 44 11 55 15 11 5 45 16 75 25 30 10 64 21 75 26 11 4 43 16 70 25
|
||||
95 32 190 67 222 81 17 8 36 14 42 14 6 0 19 4 29 9 33 18 90 41 100 41 5 0
|
||||
22 6 37 14 26 14 26 15 7 25 -12 6 -32 11 -46 11 -24 0 -78 24 -103 46 -6 7
|
||||
-22 31 -35 55 -21 41 -23 59 -27 234 -4 248 6 312 61 366 22 21 52 42 66 45
|
||||
15 3 35 9 44 15 25 13 167 11 208 -4 103 -36 154 -102 148 -193 l-3 -49 -87
|
||||
-3 c-85 -3 -88 -2 -88 19 0 75 -44 113 -112 96 -34 -8 -38 -13 -43 -51 -11
|
||||
-73 -1 -424 12 -437 7 -7 33 -12 58 -13 65 -1 84 25 85 117 l0 67 -40 0 -40 0
|
||||
0 55 0 55 131 0 130 0 -3 -155 c-2 -85 -1 -154 2 -153 75 37 106 54 108 61 2
|
||||
4 10 7 17 7 13 0 74 29 85 40 10 10 45 31 63 36 9 4 17 10 17 14 0 4 11 11 25
|
||||
14 14 4 25 11 25 16 0 6 7 10 15 10 8 0 15 4 15 10 0 5 11 12 25 16 14 3 25 9
|
||||
25 13 0 4 23 20 50 36 28 16 50 32 50 36 0 3 19 19 42 34 44 29 228 209 228
|
||||
223 0 4 8 17 18 28 9 11 24 35 33 54 9 19 22 48 30 64 9 18 14 62 14 115 0 68
|
||||
-5 96 -22 133 -30 62 -136 169 -193 195 -8 4 -17 10 -20 13 -4 6 -106 55 -165
|
||||
80 -58 24 -108 40 -125 40 -11 0 -20 4 -20 8 0 5 -26 14 -57 21 -32 6 -76 16
|
||||
-98 21 -146 33 -243 48 -450 69 -60 6 -140 16 -178 21 -80 12 -973 11 -1067
|
||||
-1z m-912 -778 c9 -6 28 -12 42 -15 57 -12 110 -89 110 -160 0 -54 -10 -59
|
||||
-110 -54 l-65 3 -6 38 c-9 59 -41 80 -100 64 -27 -7 -39 -30 -39 -74 0 -23 31
|
||||
-59 65 -74 11 -4 43 -22 70 -39 28 -17 58 -33 68 -36 9 -4 17 -9 17 -13 0 -4
|
||||
15 -15 34 -25 70 -37 105 -165 72 -260 -16 -47 -83 -115 -113 -116 -12 0 -23
|
||||
-5 -25 -11 -5 -14 -207 -15 -234 -2 -72 37 -91 49 -104 67 -31 43 -42 73 -47
|
||||
128 -5 54 -4 57 18 63 13 3 58 5 99 3 l75 -3 6 -53 c8 -60 27 -81 75 -82 49 0
|
||||
69 21 69 73 0 50 -23 78 -94 114 -20 10 -42 24 -49 31 -7 6 -20 12 -28 12 -8
|
||||
0 -14 5 -14 10 0 6 -5 10 -11 10 -6 0 -27 12 -47 27 -69 52 -92 96 -92 176 0
|
||||
98 41 153 145 193 37 14 189 18 213 5z m-1655 -48 c3 -21 13 -76 22 -123 9
|
||||
-47 20 -107 24 -135 16 -90 32 -179 41 -215 13 -58 40 -207 40 -224 0 -14 -15
|
||||
-16 -100 -16 -73 0 -100 3 -101 13 0 6 -4 41 -9 77 -5 36 -14 98 -19 138 -5
|
||||
40 -12 80 -15 90 -3 9 -10 55 -16 102 -18 155 -29 220 -39 238 -8 13 -10 8
|
||||
-11 -24 0 -23 -5 -66 -10 -95 -6 -30 -15 -85 -21 -124 -17 -114 -40 -276 -47
|
||||
-335 -4 -30 -11 -61 -15 -67 -6 -9 -38 -13 -103 -13 l-95 0 6 58 c4 31 11 61
|
||||
16 66 5 6 9 29 9 52 0 22 4 54 10 70 5 16 14 58 20 94 5 36 17 101 26 145 8
|
||||
44 18 103 21 130 2 28 9 54 14 60 5 5 9 24 9 42 l0 33 169 0 169 0 5 -37z
|
||||
m601 15 c4 -13 11 -50 16 -83 12 -81 38 -234 44 -265 2 -14 10 -65 18 -115 12
|
||||
-86 13 -88 21 -50 13 65 47 273 67 410 19 141 -2 125 169 125 l148 0 7 -62 c3
|
||||
-35 9 -204 13 -375 l6 -313 -90 0 -90 0 -6 288 c-3 158 -10 298 -16 312 l-10
|
||||
25 0 -27 c-1 -15 -5 -47 -10 -70 -27 -120 -33 -151 -41 -200 -5 -29 -16 -93
|
||||
-25 -143 -9 -49 -20 -110 -23 -135 l-7 -45 -96 -3 -97 -3 -12 63 c-7 35 -16
|
||||
83 -20 108 -30 166 -42 231 -49 275 -5 28 -14 70 -20 95 -6 25 -11 60 -11 78
|
||||
0 20 -4 31 -10 27 -6 -4 -10 -123 -10 -326 l0 -319 -93 0 -94 0 4 323 c2 177
|
||||
6 346 9 375 l5 52 149 0 c144 0 148 0 154 -22z m1586 -265 c0 -159 3 -298 6
|
||||
-310 3 -12 19 -27 36 -34 25 -10 35 -9 64 4 l34 17 0 305 0 305 100 0 100 0 0
|
||||
-292 c0 -263 -2 -298 -19 -343 -37 -99 -119 -140 -262 -132 -120 7 -146 15
|
||||
-189 58 -55 56 -60 87 -60 418 l0 291 95 0 95 0 0 -287z m830 245 c6 -24 15
|
||||
-53 20 -66 6 -13 10 -34 10 -47 0 -13 4 -26 9 -29 5 -4 12 -25 16 -48 4 -23
|
||||
11 -49 15 -58 5 -8 16 -42 25 -75 9 -33 21 -73 26 -90 5 -16 15 -50 21 -75 11
|
||||
-39 13 -8 16 243 l2 287 90 0 90 0 -2 -367 -3 -368 -115 -3 c-141 -3 -156 0
|
||||
-163 35 -11 62 -32 133 -39 133 -5 0 -8 9 -8 20 0 10 -7 41 -15 67 -9 26 -23
|
||||
73 -32 103 -9 30 -19 64 -23 75 -24 66 -40 123 -40 140 0 14 -3 16 -11 8 -9
|
||||
-9 -9 -82 1 -289 10 -231 10 -278 -2 -285 -7 -5 -49 -8 -93 -7 l-80 3 -3 368
|
||||
-2 367 139 0 140 0 11 -42z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="800.000000pt" height="249.000000pt" viewBox="0 0 800.000000 249.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,249.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M1655 1834 c-16 -3 -61 -15 -100 -27 -88 -27 -162 -95 -188 -172 -29
|
||||
-83 -40 -223 -34 -433 7 -260 24 -323 112 -400 29 -25 72 -50 113 -64 62 -21
|
||||
83 -23 287 -23 202 0 226 2 293 23 60 19 84 33 127 75 45 44 57 64 77 127 22
|
||||
71 23 90 23 335 0 244 -1 265 -23 334 -32 101 -96 166 -197 200 -62 21 -92 24
|
||||
-265 26 -107 2 -208 1 -225 -1z m291 -255 c56 -14 89 -52 103 -119 14 -66 14
|
||||
-304 0 -370 -20 -94 -77 -130 -201 -130 -128 1 -182 37 -198 135 -13 82 -13
|
||||
302 1 367 13 60 60 114 107 121 57 8 145 7 188 -4z"/>
|
||||
<path d="M2855 1834 c-11 -2 -45 -9 -75 -15 -97 -20 -170 -83 -204 -179 -15
|
||||
-41 -17 -71 -14 -163 7 -169 44 -231 166 -277 56 -21 94 -27 274 -40 128 -9
|
||||
180 -24 192 -55 14 -38 6 -94 -18 -122 -23 -27 -28 -28 -131 -31 -148 -5 -184
|
||||
11 -194 91 l-6 42 -70 -1 c-38 -1 -105 -2 -149 -3 l-79 -1 7 -82 c9 -111 43
|
||||
-181 108 -225 67 -44 118 -54 323 -60 402 -12 524 69 525 348 0 99 -17 165
|
||||
-55 215 -61 80 -143 106 -393 123 -75 5 -145 12 -155 16 -48 19 -63 120 -23
|
||||
160 43 43 217 46 270 4 17 -13 28 -35 32 -60 l7 -39 143 0 144 0 0 63 c0 137
|
||||
-54 228 -158 268 -50 19 -80 22 -252 25 -107 2 -204 1 -215 -2z"/>
|
||||
<path d="M240 1685 l0 -135 163 -2 162 -3 2 -335 c1 -184 3 -368 3 -407 l0
|
||||
-73 160 0 160 0 0 410 0 410 165 0 165 0 0 135 0 135 -490 0 -490 0 0 -135z"/>
|
||||
<path d="M3720 1275 l0 -545 155 0 155 0 0 210 0 210 180 0 180 0 0 -210 0
|
||||
-210 155 0 155 0 0 545 0 545 -155 0 -155 0 0 -200 0 -200 -180 0 -180 0 0
|
||||
200 0 200 -155 0 -155 0 0 -545z"/>
|
||||
<path d="M4979 1803 c0 -10 0 -200 0 -423 1 -223 1 -460 1 -527 l0 -123 155 0
|
||||
155 0 0 545 0 545 -155 0 c-141 0 -155 -2 -156 -17z"/>
|
||||
<path d="M5561 1274 l-1 -545 372 3 c368 3 374 3 425 27 63 28 114 81 138 144
|
||||
24 64 18 216 -11 271 -24 48 -77 93 -129 111 l-38 13 44 19 c91 41 128 104
|
||||
129 216 0 164 -60 244 -208 276 -33 7 -178 11 -387 11 l-333 0 -1 -546z m599
|
||||
274 c21 -23 26 -70 11 -111 -15 -38 -55 -48 -181 -45 l-115 3 -3 88 -3 87 135
|
||||
0 c126 0 137 -1 156 -22z m11 -394 c32 -33 32 -115 -1 -148 -24 -24 -31 -25
|
||||
-160 -27 l-135 -1 -3 88 c-2 48 0 94 3 102 4 11 30 13 140 10 121 -3 137 -5
|
||||
156 -24z"/>
|
||||
<path d="M6925 1808 c-4 -12 -93 -305 -150 -493 -13 -44 -58 -191 -100 -326
|
||||
-41 -135 -75 -249 -75 -252 0 -4 71 -7 159 -7 l159 0 28 100 29 100 184 -2
|
||||
184 -3 13 -50 c8 -27 20 -71 26 -97 l13 -48 161 0 162 0 -35 113 c-19 61 -77
|
||||
254 -130 427 -52 173 -111 368 -131 433 l-36 117 -228 0 c-174 0 -230 -3 -233
|
||||
-12z m256 -330 c11 -40 34 -118 51 -173 16 -55 32 -108 34 -117 5 -16 -5 -18
|
||||
-105 -18 -61 0 -111 3 -111 8 -1 9 104 372 107 372 1 0 12 -33 24 -72z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 391 B |